Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/jappix/jappix.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValerian Saliou <valerian@valeriansaliou.name>2016-05-03 10:50:09 +0300
committerValerian Saliou <valerian@valeriansaliou.name>2016-05-03 10:50:09 +0300
commitb31a31e8528f39afda52734161b1bf4d6b967eab (patch)
tree070e97a1c5f17eee1e43f51292ff81f83a415a2e
parentd5e5fc35408273c21c6c0fcbe4324dccdea4face (diff)
Import logo heregh-pages
Signed-off-by: Valerian Saliou <valerian@valeriansaliou.name>
-rw-r--r--.gitignore11
-rw-r--r--.travis.yml8
-rw-r--r--AUTHORS.md69
-rw-r--r--CHANGELOG.md364
-rw-r--r--COPYING.md666
-rw-r--r--COPYING_FONT.md40
-rw-r--r--COPYING_MINI.md26
-rw-r--r--Gruntfile.js136
-rw-r--r--INSTALL.md21
-rw-r--r--PROTOCOL.md86
-rw-r--r--README.md57
-rw-r--r--THANKS.md23
-rw-r--r--VERSION1
-rw-r--r--app/.htaccess2
-rw-r--r--app/bundles/anonymous.xml5
-rw-r--r--app/bundles/desktop.xml5
-rw-r--r--app/bundles/httpauth.xml4
-rw-r--r--app/bundles/install.xml5
-rw-r--r--app/bundles/manager.xml5
-rw-r--r--app/bundles/mini.xml5
-rw-r--r--app/bundles/mobile.xml5
-rw-r--r--app/fonts/eot/ptsans.eotbin25230 -> 0 bytes
-rw-r--r--app/fonts/eot/ptsansbold.eotbin25283 -> 0 bytes
-rw-r--r--app/fonts/eot/ptsansbolditalic.eotbin27355 -> 0 bytes
-rw-r--r--app/fonts/eot/ptsansitalic.eotbin27671 -> 0 bytes
-rw-r--r--app/fonts/svg/ptsans.svg242
-rw-r--r--app/fonts/svg/ptsansbold.svg242
-rw-r--r--app/fonts/svg/ptsansbolditalic.svg242
-rw-r--r--app/fonts/svg/ptsansitalic.svg242
-rw-r--r--app/fonts/ttf/ptsans.ttfbin56840 -> 0 bytes
-rw-r--r--app/fonts/ttf/ptsansbold.ttfbin56292 -> 0 bytes
-rw-r--r--app/fonts/ttf/ptsansbolditalic.ttfbin62048 -> 0 bytes
-rw-r--r--app/fonts/ttf/ptsansitalic.ttfbin62608 -> 0 bytes
-rw-r--r--app/fonts/woff/ptsans.woffbin28368 -> 0 bytes
-rw-r--r--app/fonts/woff/ptsansbold.woffbin28532 -> 0 bytes
-rw-r--r--app/fonts/woff/ptsansbolditalic.woffbin30676 -> 0 bytes
-rw-r--r--app/fonts/woff/ptsansitalic.woffbin31012 -> 0 bytes
-rw-r--r--app/images/banners/digitalocean.pngbin4132 -> 0 bytes
-rw-r--r--app/images/others/blank.gifbin43 -> 0 bytes
-rw-r--r--app/images/others/default-avatar.pngbin1436 -> 0 bytes
-rw-r--r--app/images/others/lock.pngbin95 -> 0 bytes
-rw-r--r--app/images/placeholders/jingle_audio_local.pngbin1367 -> 0 bytes
-rw-r--r--app/images/placeholders/jingle_audio_remote.pngbin5325 -> 0 bytes
-rw-r--r--app/images/placeholders/jingle_video_local.pngbin1112 -> 0 bytes
-rw-r--r--app/images/placeholders/jingle_video_remote.pngbin4414 -> 0 bytes
-rw-r--r--app/images/sprites/animate.gifbin1297 -> 0 bytes
-rw-r--r--app/images/sprites/animate.pngbin6146 -> 0 bytes
-rw-r--r--app/images/sprites/archives.pngbin1728 -> 0 bytes
-rw-r--r--app/images/sprites/background.pngbin8782 -> 0 bytes
-rw-r--r--app/images/sprites/browsers.pngbin10776 -> 0 bytes
-rw-r--r--app/images/sprites/buttons.pngbin298 -> 0 bytes
-rw-r--r--app/images/sprites/call.pngbin4230 -> 0 bytes
-rw-r--r--app/images/sprites/home.pngbin27023 -> 0 bytes
-rw-r--r--app/images/sprites/install.pngbin9980 -> 0 bytes
-rw-r--r--app/images/sprites/manager.pngbin21102 -> 0 bytes
-rw-r--r--app/images/sprites/me.pngbin5071 -> 0 bytes
-rw-r--r--app/images/sprites/mini.gifbin4105 -> 0 bytes
-rw-r--r--app/images/sprites/mini.pngbin8861 -> 0 bytes
-rw-r--r--app/images/sprites/mobile.pngbin2452 -> 0 bytes
-rw-r--r--app/images/sprites/smileys.pngbin19253 -> 0 bytes
-rw-r--r--app/images/sprites/talk.pngbin48232 -> 0 bytes
-rw-r--r--app/images/sprites/welcome.pngbin5371 -> 0 bytes
-rw-r--r--app/images/wait/wait-big.gifbin1932 -> 0 bytes
-rw-r--r--app/images/wait/wait-medium.pngbin294 -> 0 bytes
-rw-r--r--app/images/wait/wait-small.gifbin688 -> 0 bytes
-rw-r--r--app/images/wait/wait-typing.gifbin151 -> 0 bytes
-rw-r--r--app/javascripts/adhoc.js158
-rw-r--r--app/javascripts/anonymous.js210
-rw-r--r--app/javascripts/attention.js216
-rw-r--r--app/javascripts/audio.js212
-rw-r--r--app/javascripts/autocompletion.js256
-rw-r--r--app/javascripts/avatar.js290
-rw-r--r--app/javascripts/base64.js82
-rw-r--r--app/javascripts/board.js421
-rw-r--r--app/javascripts/browser-detect.js125
-rw-r--r--app/javascripts/bubble.js102
-rw-r--r--app/javascripts/call.js1095
-rw-r--r--app/javascripts/caps.js787
-rw-r--r--app/javascripts/carbons.js241
-rw-r--r--app/javascripts/chat.js672
-rw-r--r--app/javascripts/chatstate.js252
-rw-r--r--app/javascripts/common.js917
-rw-r--r--app/javascripts/connection.js1034
-rw-r--r--app/javascripts/console.js66
-rw-r--r--app/javascripts/constants.js237
-rw-r--r--app/javascripts/correction.js509
-rw-r--r--app/javascripts/dataform.js1200
-rw-r--r--app/javascripts/datastore.js506
-rw-r--r--app/javascripts/date.js454
-rw-r--r--app/javascripts/datejs.js104
-rw-r--r--app/javascripts/directory.js148
-rw-r--r--app/javascripts/discovery.js241
-rw-r--r--app/javascripts/errors.js210
-rw-r--r--app/javascripts/favorites.js785
-rw-r--r--app/javascripts/features.js457
-rw-r--r--app/javascripts/filter.js491
-rw-r--r--app/javascripts/groupchat.js867
-rw-r--r--app/javascripts/home.js526
-rw-r--r--app/javascripts/httpauth.js114
-rw-r--r--app/javascripts/httpreply.js78
-rw-r--r--app/javascripts/inbox.js1002
-rw-r--r--app/javascripts/integratebox.js470
-rw-r--r--app/javascripts/interface.js784
-rw-r--r--app/javascripts/ios.js354
-rw-r--r--app/javascripts/iq.js464
-rw-r--r--app/javascripts/jingle.js1346
-rw-r--r--app/javascripts/jquery.form.js1278
-rw-r--r--app/javascripts/jquery.js10308
-rw-r--r--app/javascripts/jquery.json.js201
-rw-r--r--app/javascripts/jquery.placeholder.js157
-rw-r--r--app/javascripts/jquery.scrollto.js186
-rw-r--r--app/javascripts/jquery.textrange.js14
-rw-r--r--app/javascripts/jquery.timers.js138
-rwxr-xr-xapp/javascripts/jquery.ui.js15040
-rw-r--r--app/javascripts/jsjac.jingle.js18789
-rw-r--r--app/javascripts/jsjac.js5090
-rw-r--r--app/javascripts/jxhr.js116
-rw-r--r--app/javascripts/links.js77
-rw-r--r--app/javascripts/mam.js450
-rw-r--r--app/javascripts/markers.js428
-rw-r--r--app/javascripts/me.js116
-rw-r--r--app/javascripts/message.js2070
-rw-r--r--app/javascripts/microblog.js1967
-rw-r--r--app/javascripts/mini.js4408
-rw-r--r--app/javascripts/mobile.js1101
-rw-r--r--app/javascripts/mucadmin.js580
-rw-r--r--app/javascripts/muji.js1845
-rw-r--r--app/javascripts/music.js369
-rw-r--r--app/javascripts/name.js250
-rw-r--r--app/javascripts/notification.js658
-rw-r--r--app/javascripts/oob.js283
-rw-r--r--app/javascripts/options.js1008
-rw-r--r--app/javascripts/origin.js56
-rw-r--r--app/javascripts/pep.js1413
-rw-r--r--app/javascripts/popup.js121
-rw-r--r--app/javascripts/presence.js1950
-rw-r--r--app/javascripts/privacy.js1271
-rw-r--r--app/javascripts/pubsub.js103
-rw-r--r--app/javascripts/receipts.js201
-rw-r--r--app/javascripts/roster.js1555
-rw-r--r--app/javascripts/rosterx.js302
-rw-r--r--app/javascripts/search.js423
-rw-r--r--app/javascripts/smileys.js119
-rw-r--r--app/javascripts/storage.js195
-rw-r--r--app/javascripts/system.js78
-rw-r--r--app/javascripts/talk.js340
-rw-r--r--app/javascripts/tooltip.js629
-rw-r--r--app/javascripts/userinfos.js632
-rw-r--r--app/javascripts/utilities.js719
-rw-r--r--app/javascripts/vcard.js962
-rw-r--r--app/javascripts/welcome.js413
-rw-r--r--app/javascripts/xmpplinks.js109
-rw-r--r--app/sounds/catch-attention.mp3bin28252 -> 0 bytes
-rw-r--r--app/sounds/catch-attention.ogabin27520 -> 0 bytes
-rw-r--r--app/sounds/incoming-call.mp3bin54553 -> 0 bytes
-rw-r--r--app/sounds/incoming-call.ogabin45182 -> 0 bytes
-rw-r--r--app/sounds/new-chat.mp3bin12928 -> 0 bytes
-rw-r--r--app/sounds/new-chat.ogabin12224 -> 0 bytes
-rw-r--r--app/sounds/notification.mp3bin12928 -> 0 bytes
-rw-r--r--app/sounds/notification.ogabin12981 -> 0 bytes
-rw-r--r--app/sounds/outgoing-call.mp3bin241757 -> 0 bytes
-rw-r--r--app/sounds/outgoing-call.ogabin214468 -> 0 bytes
-rw-r--r--app/sounds/receive-message.mp3bin12928 -> 0 bytes
-rw-r--r--app/sounds/receive-message.ogabin11837 -> 0 bytes
-rw-r--r--app/stylesheets/adhoc.css29
-rw-r--r--app/stylesheets/anonymous.css29
-rw-r--r--app/stylesheets/board.css46
-rw-r--r--app/stylesheets/call.css254
-rw-r--r--app/stylesheets/channel.css646
-rw-r--r--app/stylesheets/directory.css15
-rw-r--r--app/stylesheets/discovery.css78
-rw-r--r--app/stylesheets/favorites.css184
-rw-r--r--app/stylesheets/fonts.css51
-rw-r--r--app/stylesheets/home.css998
-rw-r--r--app/stylesheets/ie.css179
-rw-r--r--app/stylesheets/images.css100
-rw-r--r--app/stylesheets/inbox.css244
-rw-r--r--app/stylesheets/install.css304
-rw-r--r--app/stylesheets/integratebox.css37
-rw-r--r--app/stylesheets/ios.css172
-rw-r--r--app/stylesheets/jingle.css104
-rw-r--r--app/stylesheets/main.css146
-rw-r--r--app/stylesheets/manager.css612
-rw-r--r--app/stylesheets/me.css48
-rw-r--r--app/stylesheets/mini.css854
-rw-r--r--app/stylesheets/mobile.css303
-rw-r--r--app/stylesheets/mucadmin.css130
-rw-r--r--app/stylesheets/muji.css690
-rw-r--r--app/stylesheets/myinfos.css382
-rw-r--r--app/stylesheets/options.css114
-rw-r--r--app/stylesheets/others.css246
-rw-r--r--app/stylesheets/pageengine.css1140
-rw-r--r--app/stylesheets/pageswitch.css285
-rw-r--r--app/stylesheets/popup.css719
-rw-r--r--app/stylesheets/privacy.css266
-rw-r--r--app/stylesheets/roster.css645
-rw-r--r--app/stylesheets/rosterx.css69
-rw-r--r--app/stylesheets/search.css59
-rw-r--r--app/stylesheets/smileys.css195
-rw-r--r--app/stylesheets/stats-svg.css70
-rw-r--r--app/stylesheets/tools.css736
-rw-r--r--app/stylesheets/userinfos.css121
-rw-r--r--app/stylesheets/vcard.css120
-rw-r--r--app/stylesheets/welcome.css180
-rw-r--r--dev/.htaccess2
-rw-r--r--dev/images/icons/accept.pngbin726 -> 0 bytes
-rw-r--r--dev/images/icons/add.pngbin676 -> 0 bytes
-rw-r--r--dev/images/icons/anchor.pngbin512 -> 0 bytes
-rw-r--r--dev/images/icons/application.pngbin460 -> 0 bytes
-rw-r--r--dev/images/icons/application_add.pngbin559 -> 0 bytes
-rw-r--r--dev/images/icons/application_cascade.pngbin465 -> 0 bytes
-rw-r--r--dev/images/icons/application_delete.pngbin587 -> 0 bytes
-rw-r--r--dev/images/icons/application_double.pngbin507 -> 0 bytes
-rw-r--r--dev/images/icons/application_edit.pngbin650 -> 0 bytes
-rw-r--r--dev/images/icons/application_error.pngbin650 -> 0 bytes
-rw-r--r--dev/images/icons/application_form.pngbin439 -> 0 bytes
-rw-r--r--dev/images/icons/application_form_add.pngbin533 -> 0 bytes
-rw-r--r--dev/images/icons/application_form_delete.pngbin565 -> 0 bytes
-rw-r--r--dev/images/icons/application_form_edit.pngbin658 -> 0 bytes
-rw-r--r--dev/images/icons/application_form_magnify.pngbin591 -> 0 bytes
-rw-r--r--dev/images/icons/application_get.pngbin569 -> 0 bytes
-rw-r--r--dev/images/icons/application_go.pngbin634 -> 0 bytes
-rw-r--r--dev/images/icons/application_home.pngbin654 -> 0 bytes
-rw-r--r--dev/images/icons/application_key.pngbin631 -> 0 bytes
-rw-r--r--dev/images/icons/application_lightning.pngbin648 -> 0 bytes
-rw-r--r--dev/images/icons/application_link.pngbin645 -> 0 bytes
-rw-r--r--dev/images/icons/application_osx.pngbin487 -> 0 bytes
-rw-r--r--dev/images/icons/application_osx_terminal.pngbin525 -> 0 bytes
-rw-r--r--dev/images/icons/application_put.pngbin575 -> 0 bytes
-rw-r--r--dev/images/icons/application_side_boxes.pngbin437 -> 0 bytes
-rw-r--r--dev/images/icons/application_side_contract.pngbin547 -> 0 bytes
-rw-r--r--dev/images/icons/application_side_expand.pngbin581 -> 0 bytes
-rw-r--r--dev/images/icons/application_side_list.pngbin471 -> 0 bytes
-rw-r--r--dev/images/icons/application_side_tree.pngbin442 -> 0 bytes
-rw-r--r--dev/images/icons/application_split.pngbin486 -> 0 bytes
-rw-r--r--dev/images/icons/application_tile_horizontal.pngbin432 -> 0 bytes
-rw-r--r--dev/images/icons/application_tile_vertical.pngbin492 -> 0 bytes
-rw-r--r--dev/images/icons/application_view_columns.pngbin437 -> 0 bytes
-rw-r--r--dev/images/icons/application_view_detail.pngbin514 -> 0 bytes
-rw-r--r--dev/images/icons/application_view_gallery.pngbin551 -> 0 bytes
-rw-r--r--dev/images/icons/application_view_icons.pngbin426 -> 0 bytes
-rw-r--r--dev/images/icons/application_view_list.pngbin456 -> 0 bytes
-rw-r--r--dev/images/icons/application_view_tile.pngbin418 -> 0 bytes
-rw-r--r--dev/images/icons/application_xp.pngbin426 -> 0 bytes
-rw-r--r--dev/images/icons/application_xp_terminal.pngbin507 -> 0 bytes
-rw-r--r--dev/images/icons/arrow_branch.pngbin561 -> 0 bytes
-rw-r--r--dev/images/icons/arrow_divide.pngbin649 -> 0 bytes
-rw-r--r--dev/images/icons/arrow_down.pngbin374 -> 0 bytes
-rw-r--r--dev/images/icons/arrow_in.pngbin543 -> 0 bytes
-rw-r--r--dev/images/icons/arrow_inout.pngbin551 -> 0 bytes
-rw-r--r--dev/images/icons/arrow_join.pngbin581 -> 0 bytes
-rw-r--r--dev/images/icons/arrow_left.pngbin332 -> 0 bytes
-rw-r--r--dev/images/icons/arrow_merge.pngbin466 -> 0 bytes
-rw-r--r--dev/images/icons/arrow_out.pngbin536 -> 0 bytes
-rw-r--r--dev/images/icons/arrow_redo.pngbin613 -> 0 bytes
-rw-r--r--dev/images/icons/arrow_refresh.pngbin630 -> 0 bytes
-rw-r--r--dev/images/icons/arrow_refresh_small.pngbin457 -> 0 bytes
-rw-r--r--dev/images/icons/arrow_right.pngbin331 -> 0 bytes
-rw-r--r--dev/images/icons/arrow_rotate_anticlockwise.pngbin553 -> 0 bytes
-rw-r--r--dev/images/icons/arrow_rotate_clockwise.pngbin548 -> 0 bytes
-rw-r--r--dev/images/icons/arrow_switch.pngbin650 -> 0 bytes
-rw-r--r--dev/images/icons/arrow_turn_left.pngbin473 -> 0 bytes
-rw-r--r--dev/images/icons/arrow_turn_right.pngbin456 -> 0 bytes
-rw-r--r--dev/images/icons/arrow_undo.pngbin616 -> 0 bytes
-rw-r--r--dev/images/icons/arrow_up.pngbin368 -> 0 bytes
-rw-r--r--dev/images/icons/asterisk_orange.pngbin706 -> 0 bytes
-rw-r--r--dev/images/icons/asterisk_yellow.pngbin686 -> 0 bytes
-rw-r--r--dev/images/icons/attach.pngbin383 -> 0 bytes
-rw-r--r--dev/images/icons/award_star_add.pngbin806 -> 0 bytes
-rw-r--r--dev/images/icons/award_star_bronze_1.pngbin708 -> 0 bytes
-rw-r--r--dev/images/icons/award_star_bronze_2.pngbin723 -> 0 bytes
-rw-r--r--dev/images/icons/award_star_bronze_3.pngbin719 -> 0 bytes
-rw-r--r--dev/images/icons/award_star_delete.pngbin823 -> 0 bytes
-rw-r--r--dev/images/icons/award_star_gold_1.pngbin731 -> 0 bytes
-rw-r--r--dev/images/icons/award_star_gold_2.pngbin750 -> 0 bytes
-rw-r--r--dev/images/icons/award_star_gold_3.pngbin746 -> 0 bytes
-rw-r--r--dev/images/icons/award_star_silver_1.pngbin699 -> 0 bytes
-rw-r--r--dev/images/icons/award_star_silver_2.pngbin700 -> 0 bytes
-rw-r--r--dev/images/icons/award_star_silver_3.pngbin695 -> 0 bytes
-rw-r--r--dev/images/icons/basket.pngbin669 -> 0 bytes
-rw-r--r--dev/images/icons/basket_add.pngbin696 -> 0 bytes
-rw-r--r--dev/images/icons/basket_delete.pngbin720 -> 0 bytes
-rw-r--r--dev/images/icons/basket_edit.pngbin758 -> 0 bytes
-rw-r--r--dev/images/icons/basket_error.pngbin767 -> 0 bytes
-rw-r--r--dev/images/icons/basket_go.pngbin722 -> 0 bytes
-rw-r--r--dev/images/icons/basket_put.pngbin733 -> 0 bytes
-rw-r--r--dev/images/icons/basket_remove.pngbin738 -> 0 bytes
-rw-r--r--dev/images/icons/bell.pngbin735 -> 0 bytes
-rw-r--r--dev/images/icons/bell_add.pngbin760 -> 0 bytes
-rw-r--r--dev/images/icons/bell_delete.pngbin775 -> 0 bytes
-rw-r--r--dev/images/icons/bell_error.pngbin764 -> 0 bytes
-rw-r--r--dev/images/icons/bell_go.pngbin784 -> 0 bytes
-rw-r--r--dev/images/icons/bell_link.pngbin796 -> 0 bytes
-rw-r--r--dev/images/icons/bin.pngbin471 -> 0 bytes
-rw-r--r--dev/images/icons/bin_closed.pngbin358 -> 0 bytes
-rw-r--r--dev/images/icons/bin_empty.pngbin472 -> 0 bytes
-rw-r--r--dev/images/icons/bomb.pngbin790 -> 0 bytes
-rw-r--r--dev/images/icons/book.pngbin593 -> 0 bytes
-rw-r--r--dev/images/icons/book_add.pngbin714 -> 0 bytes
-rw-r--r--dev/images/icons/book_addresses.pngbin770 -> 0 bytes
-rw-r--r--dev/images/icons/book_delete.pngbin719 -> 0 bytes
-rw-r--r--dev/images/icons/book_edit.pngbin813 -> 0 bytes
-rw-r--r--dev/images/icons/book_error.pngbin734 -> 0 bytes
-rw-r--r--dev/images/icons/book_go.pngbin745 -> 0 bytes
-rw-r--r--dev/images/icons/book_key.pngbin779 -> 0 bytes
-rw-r--r--dev/images/icons/book_link.pngbin789 -> 0 bytes
-rw-r--r--dev/images/icons/book_next.pngbin687 -> 0 bytes
-rw-r--r--dev/images/icons/book_open.pngbin622 -> 0 bytes
-rw-r--r--dev/images/icons/book_previous.pngbin658 -> 0 bytes
-rw-r--r--dev/images/icons/box.pngbin555 -> 0 bytes
-rw-r--r--dev/images/icons/brick.pngbin439 -> 0 bytes
-rw-r--r--dev/images/icons/brick_add.pngbin673 -> 0 bytes
-rw-r--r--dev/images/icons/brick_delete.pngbin687 -> 0 bytes
-rw-r--r--dev/images/icons/brick_edit.pngbin721 -> 0 bytes
-rw-r--r--dev/images/icons/brick_error.pngbin742 -> 0 bytes
-rw-r--r--dev/images/icons/brick_go.pngbin736 -> 0 bytes
-rw-r--r--dev/images/icons/brick_link.pngbin707 -> 0 bytes
-rw-r--r--dev/images/icons/bricks.pngbin765 -> 0 bytes
-rw-r--r--dev/images/icons/briefcase.pngbin793 -> 0 bytes
-rw-r--r--dev/images/icons/bug.pngbin714 -> 0 bytes
-rw-r--r--dev/images/icons/bug_add.pngbin752 -> 0 bytes
-rw-r--r--dev/images/icons/bug_delete.pngbin780 -> 0 bytes
-rw-r--r--dev/images/icons/bug_edit.pngbin803 -> 0 bytes
-rw-r--r--dev/images/icons/bug_error.pngbin785 -> 0 bytes
-rw-r--r--dev/images/icons/bug_go.pngbin778 -> 0 bytes
-rw-r--r--dev/images/icons/bug_link.pngbin792 -> 0 bytes
-rw-r--r--dev/images/icons/building.pngbin556 -> 0 bytes
-rw-r--r--dev/images/icons/building_add.pngbin591 -> 0 bytes
-rw-r--r--dev/images/icons/building_delete.pngbin612 -> 0 bytes
-rw-r--r--dev/images/icons/building_edit.pngbin700 -> 0 bytes
-rw-r--r--dev/images/icons/building_error.pngbin653 -> 0 bytes
-rw-r--r--dev/images/icons/building_go.pngbin647 -> 0 bytes
-rw-r--r--dev/images/icons/building_key.pngbin676 -> 0 bytes
-rw-r--r--dev/images/icons/building_link.pngbin646 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_add.pngbin253 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_arrow_bottom.pngbin229 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_arrow_down.pngbin201 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_arrow_top.pngbin230 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_arrow_up.pngbin201 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_black.pngbin211 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_blue.pngbin239 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_delete.pngbin268 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_disk.pngbin455 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_error.pngbin413 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_feed.pngbin214 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_go.pngbin374 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_green.pngbin249 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_key.pngbin392 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_orange.pngbin228 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_picture.pngbin433 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_pink.pngbin231 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_purple.pngbin240 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_red.pngbin234 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_star.pngbin285 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_toggle_minus.pngbin207 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_toggle_plus.pngbin209 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_white.pngbin201 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_wrench.pngbin392 -> 0 bytes
-rw-r--r--dev/images/icons/bullet_yellow.pngbin233 -> 0 bytes
-rw-r--r--dev/images/icons/cake.pngbin620 -> 0 bytes
-rw-r--r--dev/images/icons/calculator.pngbin507 -> 0 bytes
-rw-r--r--dev/images/icons/calculator_add.pngbin604 -> 0 bytes
-rw-r--r--dev/images/icons/calculator_delete.pngbin633 -> 0 bytes
-rw-r--r--dev/images/icons/calculator_edit.pngbin714 -> 0 bytes
-rw-r--r--dev/images/icons/calculator_error.pngbin686 -> 0 bytes
-rw-r--r--dev/images/icons/calculator_link.pngbin667 -> 0 bytes
-rw-r--r--dev/images/icons/calendar.pngbin642 -> 0 bytes
-rw-r--r--dev/images/icons/calendar_add.pngbin677 -> 0 bytes
-rw-r--r--dev/images/icons/calendar_delete.pngbin704 -> 0 bytes
-rw-r--r--dev/images/icons/calendar_edit.pngbin738 -> 0 bytes
-rw-r--r--dev/images/icons/calendar_link.pngbin741 -> 0 bytes
-rw-r--r--dev/images/icons/calendar_view_day.pngbin572 -> 0 bytes
-rw-r--r--dev/images/icons/calendar_view_month.pngbin551 -> 0 bytes
-rw-r--r--dev/images/icons/calendar_view_week.pngbin480 -> 0 bytes
-rw-r--r--dev/images/icons/camera.pngbin665 -> 0 bytes
-rw-r--r--dev/images/icons/camera_add.pngbin765 -> 0 bytes
-rw-r--r--dev/images/icons/camera_delete.pngbin790 -> 0 bytes
-rw-r--r--dev/images/icons/camera_edit.pngbin830 -> 0 bytes
-rw-r--r--dev/images/icons/camera_error.pngbin835 -> 0 bytes
-rw-r--r--dev/images/icons/camera_go.pngbin809 -> 0 bytes
-rw-r--r--dev/images/icons/camera_link.pngbin788 -> 0 bytes
-rw-r--r--dev/images/icons/camera_small.pngbin455 -> 0 bytes
-rw-r--r--dev/images/icons/cancel.pngbin522 -> 0 bytes
-rw-r--r--dev/images/icons/car.pngbin559 -> 0 bytes
-rw-r--r--dev/images/icons/car_add.pngbin620 -> 0 bytes
-rw-r--r--dev/images/icons/car_delete.pngbin637 -> 0 bytes
-rw-r--r--dev/images/icons/cart.pngbin413 -> 0 bytes
-rw-r--r--dev/images/icons/cart_add.pngbin654 -> 0 bytes
-rw-r--r--dev/images/icons/cart_delete.pngbin686 -> 0 bytes
-rw-r--r--dev/images/icons/cart_edit.pngbin736 -> 0 bytes
-rw-r--r--dev/images/icons/cart_error.pngbin732 -> 0 bytes
-rw-r--r--dev/images/icons/cart_go.pngbin717 -> 0 bytes
-rw-r--r--dev/images/icons/cart_put.pngbin706 -> 0 bytes
-rw-r--r--dev/images/icons/cart_remove.pngbin714 -> 0 bytes
-rw-r--r--dev/images/icons/cd.pngbin605 -> 0 bytes
-rw-r--r--dev/images/icons/cd_add.pngbin684 -> 0 bytes
-rw-r--r--dev/images/icons/cd_burn.pngbin689 -> 0 bytes
-rw-r--r--dev/images/icons/cd_delete.pngbin697 -> 0 bytes
-rw-r--r--dev/images/icons/cd_edit.pngbin719 -> 0 bytes
-rw-r--r--dev/images/icons/cd_eject.pngbin716 -> 0 bytes
-rw-r--r--dev/images/icons/cd_go.pngbin724 -> 0 bytes
-rw-r--r--dev/images/icons/chart_bar.pngbin541 -> 0 bytes
-rw-r--r--dev/images/icons/chart_bar_add.pngbin626 -> 0 bytes
-rw-r--r--dev/images/icons/chart_bar_delete.pngbin636 -> 0 bytes
-rw-r--r--dev/images/icons/chart_bar_edit.pngbin754 -> 0 bytes
-rw-r--r--dev/images/icons/chart_bar_error.pngbin671 -> 0 bytes
-rw-r--r--dev/images/icons/chart_bar_link.pngbin707 -> 0 bytes
-rw-r--r--dev/images/icons/chart_curve.pngbin680 -> 0 bytes
-rw-r--r--dev/images/icons/chart_curve_add.pngbin721 -> 0 bytes
-rw-r--r--dev/images/icons/chart_curve_delete.pngbin738 -> 0 bytes
-rw-r--r--dev/images/icons/chart_curve_edit.pngbin767 -> 0 bytes
-rw-r--r--dev/images/icons/chart_curve_error.pngbin782 -> 0 bytes
-rw-r--r--dev/images/icons/chart_curve_go.pngbin769 -> 0 bytes
-rw-r--r--dev/images/icons/chart_curve_link.pngbin775 -> 0 bytes
-rw-r--r--dev/images/icons/chart_line.pngbin497 -> 0 bytes
-rw-r--r--dev/images/icons/chart_line_add.pngbin625 -> 0 bytes
-rw-r--r--dev/images/icons/chart_line_delete.pngbin642 -> 0 bytes
-rw-r--r--dev/images/icons/chart_line_edit.pngbin670 -> 0 bytes
-rw-r--r--dev/images/icons/chart_line_error.pngbin701 -> 0 bytes
-rw-r--r--dev/images/icons/chart_line_link.pngbin697 -> 0 bytes
-rw-r--r--dev/images/icons/chart_organisation.pngbin422 -> 0 bytes
-rw-r--r--dev/images/icons/chart_organisation_add.pngbin489 -> 0 bytes
-rw-r--r--dev/images/icons/chart_organisation_delete.pngbin514 -> 0 bytes
-rw-r--r--dev/images/icons/chart_pie.pngbin889 -> 0 bytes
-rw-r--r--dev/images/icons/chart_pie_add.pngbin936 -> 0 bytes
-rw-r--r--dev/images/icons/chart_pie_delete.pngbin962 -> 0 bytes
-rw-r--r--dev/images/icons/chart_pie_edit.pngbin927 -> 0 bytes
-rw-r--r--dev/images/icons/chart_pie_error.pngbin966 -> 0 bytes
-rw-r--r--dev/images/icons/chart_pie_link.pngbin967 -> 0 bytes
-rw-r--r--dev/images/icons/clock.pngbin825 -> 0 bytes
-rw-r--r--dev/images/icons/clock_add.pngbin863 -> 0 bytes
-rw-r--r--dev/images/icons/clock_delete.pngbin884 -> 0 bytes
-rw-r--r--dev/images/icons/clock_edit.pngbin897 -> 0 bytes
-rw-r--r--dev/images/icons/clock_error.pngbin887 -> 0 bytes
-rw-r--r--dev/images/icons/clock_go.pngbin894 -> 0 bytes
-rw-r--r--dev/images/icons/clock_link.pngbin899 -> 0 bytes
-rw-r--r--dev/images/icons/clock_pause.pngbin904 -> 0 bytes
-rw-r--r--dev/images/icons/clock_play.pngbin885 -> 0 bytes
-rw-r--r--dev/images/icons/clock_red.pngbin833 -> 0 bytes
-rw-r--r--dev/images/icons/clock_stop.pngbin866 -> 0 bytes
-rw-r--r--dev/images/icons/cog.pngbin503 -> 0 bytes
-rw-r--r--dev/images/icons/cog_add.pngbin758 -> 0 bytes
-rw-r--r--dev/images/icons/cog_delete.pngbin790 -> 0 bytes
-rw-r--r--dev/images/icons/cog_edit.pngbin810 -> 0 bytes
-rw-r--r--dev/images/icons/cog_error.pngbin813 -> 0 bytes
-rw-r--r--dev/images/icons/cog_go.pngbin817 -> 0 bytes
-rw-r--r--dev/images/icons/coins.pngbin732 -> 0 bytes
-rw-r--r--dev/images/icons/coins_add.pngbin775 -> 0 bytes
-rw-r--r--dev/images/icons/coins_delete.pngbin769 -> 0 bytes
-rw-r--r--dev/images/icons/color_swatch.pngbin152 -> 0 bytes
-rw-r--r--dev/images/icons/color_wheel.pngbin876 -> 0 bytes
-rw-r--r--dev/images/icons/comment.pngbin352 -> 0 bytes
-rw-r--r--dev/images/icons/comment_add.pngbin467 -> 0 bytes
-rw-r--r--dev/images/icons/comment_delete.pngbin489 -> 0 bytes
-rw-r--r--dev/images/icons/comment_edit.pngbin583 -> 0 bytes
-rw-r--r--dev/images/icons/comments.pngbin491 -> 0 bytes
-rw-r--r--dev/images/icons/comments_add.pngbin588 -> 0 bytes
-rw-r--r--dev/images/icons/comments_delete.pngbin610 -> 0 bytes
-rw-r--r--dev/images/icons/compress.pngbin766 -> 0 bytes
-rw-r--r--dev/images/icons/computer.pngbin667 -> 0 bytes
-rw-r--r--dev/images/icons/computer_add.pngbin781 -> 0 bytes
-rw-r--r--dev/images/icons/computer_delete.pngbin775 -> 0 bytes
-rw-r--r--dev/images/icons/computer_edit.pngbin792 -> 0 bytes
-rw-r--r--dev/images/icons/computer_error.pngbin784 -> 0 bytes
-rw-r--r--dev/images/icons/computer_go.pngbin777 -> 0 bytes
-rw-r--r--dev/images/icons/computer_key.pngbin771 -> 0 bytes
-rw-r--r--dev/images/icons/computer_link.pngbin792 -> 0 bytes
-rw-r--r--dev/images/icons/connect.pngbin721 -> 0 bytes
-rw-r--r--dev/images/icons/contrast.pngbin428 -> 0 bytes
-rw-r--r--dev/images/icons/contrast_decrease.pngbin694 -> 0 bytes
-rw-r--r--dev/images/icons/contrast_high.pngbin430 -> 0 bytes
-rw-r--r--dev/images/icons/contrast_increase.pngbin696 -> 0 bytes
-rw-r--r--dev/images/icons/contrast_low.pngbin411 -> 0 bytes
-rw-r--r--dev/images/icons/control_eject.pngbin543 -> 0 bytes
-rw-r--r--dev/images/icons/control_eject_blue.pngbin668 -> 0 bytes
-rw-r--r--dev/images/icons/control_end.pngbin558 -> 0 bytes
-rw-r--r--dev/images/icons/control_end_blue.pngbin680 -> 0 bytes
-rw-r--r--dev/images/icons/control_equalizer.pngbin416 -> 0 bytes
-rw-r--r--dev/images/icons/control_equalizer_blue.pngbin704 -> 0 bytes
-rw-r--r--dev/images/icons/control_fastforward.pngbin548 -> 0 bytes
-rw-r--r--dev/images/icons/control_fastforward_blue.pngbin677 -> 0 bytes
-rw-r--r--dev/images/icons/control_pause.pngbin545 -> 0 bytes
-rw-r--r--dev/images/icons/control_pause_blue.pngbin663 -> 0 bytes
-rw-r--r--dev/images/icons/control_play.pngbin532 -> 0 bytes
-rw-r--r--dev/images/icons/control_play_blue.pngbin658 -> 0 bytes
-rw-r--r--dev/images/icons/control_repeat.pngbin412 -> 0 bytes
-rw-r--r--dev/images/icons/control_repeat_blue.pngbin693 -> 0 bytes
-rw-r--r--dev/images/icons/control_rewind.pngbin551 -> 0 bytes
-rw-r--r--dev/images/icons/control_rewind_blue.pngbin685 -> 0 bytes
-rw-r--r--dev/images/icons/control_start.pngbin542 -> 0 bytes
-rw-r--r--dev/images/icons/control_start_blue.pngbin663 -> 0 bytes
-rw-r--r--dev/images/icons/control_stop.pngbin396 -> 0 bytes
-rw-r--r--dev/images/icons/control_stop_blue.pngbin637 -> 0 bytes
-rw-r--r--dev/images/icons/controller.pngbin614 -> 0 bytes
-rw-r--r--dev/images/icons/controller_add.pngbin703 -> 0 bytes
-rw-r--r--dev/images/icons/controller_delete.pngbin716 -> 0 bytes
-rw-r--r--dev/images/icons/controller_error.pngbin758 -> 0 bytes
-rw-r--r--dev/images/icons/creditcards.pngbin664 -> 0 bytes
-rw-r--r--dev/images/icons/cross.pngbin600 -> 0 bytes
-rw-r--r--dev/images/icons/css.pngbin524 -> 0 bytes
-rw-r--r--dev/images/icons/css_add.pngbin651 -> 0 bytes
-rw-r--r--dev/images/icons/css_delete.pngbin654 -> 0 bytes
-rw-r--r--dev/images/icons/css_go.pngbin655 -> 0 bytes
-rw-r--r--dev/images/icons/css_valid.pngbin661 -> 0 bytes
-rw-r--r--dev/images/icons/cup.pngbin578 -> 0 bytes
-rw-r--r--dev/images/icons/cup_add.pngbin657 -> 0 bytes
-rw-r--r--dev/images/icons/cup_delete.pngbin676 -> 0 bytes
-rw-r--r--dev/images/icons/cup_edit.pngbin722 -> 0 bytes
-rw-r--r--dev/images/icons/cup_error.pngbin734 -> 0 bytes
-rw-r--r--dev/images/icons/cup_go.pngbin723 -> 0 bytes
-rw-r--r--dev/images/icons/cup_key.pngbin721 -> 0 bytes
-rw-r--r--dev/images/icons/cup_link.pngbin703 -> 0 bytes
-rw-r--r--dev/images/icons/cursor.pngbin343 -> 0 bytes
-rw-r--r--dev/images/icons/cut.pngbin628 -> 0 bytes
-rw-r--r--dev/images/icons/cut_red.pngbin633 -> 0 bytes
-rw-r--r--dev/images/icons/database.pngbin386 -> 0 bytes
-rw-r--r--dev/images/icons/database_add.pngbin645 -> 0 bytes
-rw-r--r--dev/images/icons/database_connect.pngbin763 -> 0 bytes
-rw-r--r--dev/images/icons/database_delete.pngbin659 -> 0 bytes
-rw-r--r--dev/images/icons/database_edit.pngbin744 -> 0 bytes
-rw-r--r--dev/images/icons/database_error.pngbin682 -> 0 bytes
-rw-r--r--dev/images/icons/database_gear.pngbin467 -> 0 bytes
-rw-r--r--dev/images/icons/database_go.pngbin698 -> 0 bytes
-rw-r--r--dev/images/icons/database_key.pngbin758 -> 0 bytes
-rw-r--r--dev/images/icons/database_lightning.pngbin775 -> 0 bytes
-rw-r--r--dev/images/icons/database_link.pngbin673 -> 0 bytes
-rw-r--r--dev/images/icons/database_refresh.pngbin770 -> 0 bytes
-rw-r--r--dev/images/icons/database_save.pngbin755 -> 0 bytes
-rw-r--r--dev/images/icons/database_table.pngbin668 -> 0 bytes
-rw-r--r--dev/images/icons/date.pngbin572 -> 0 bytes
-rw-r--r--dev/images/icons/date_add.pngbin643 -> 0 bytes
-rw-r--r--dev/images/icons/date_delete.pngbin656 -> 0 bytes
-rw-r--r--dev/images/icons/date_edit.pngbin738 -> 0 bytes
-rw-r--r--dev/images/icons/date_error.pngbin711 -> 0 bytes
-rw-r--r--dev/images/icons/date_go.pngbin694 -> 0 bytes
-rw-r--r--dev/images/icons/date_link.pngbin715 -> 0 bytes
-rw-r--r--dev/images/icons/date_magnify.pngbin654 -> 0 bytes
-rw-r--r--dev/images/icons/date_next.pngbin648 -> 0 bytes
-rw-r--r--dev/images/icons/date_previous.pngbin681 -> 0 bytes
-rw-r--r--dev/images/icons/delete.pngbin659 -> 0 bytes
-rw-r--r--dev/images/icons/disconnect.pngbin759 -> 0 bytes
-rw-r--r--dev/images/icons/disk.pngbin620 -> 0 bytes
-rw-r--r--dev/images/icons/disk_multiple.pngbin651 -> 0 bytes
-rw-r--r--dev/images/icons/door.pngbin412 -> 0 bytes
-rw-r--r--dev/images/icons/door_in.pngbin693 -> 0 bytes
-rw-r--r--dev/images/icons/door_open.pngbin508 -> 0 bytes
-rw-r--r--dev/images/icons/door_out.pngbin688 -> 0 bytes
-rw-r--r--dev/images/icons/drink.pngbin638 -> 0 bytes
-rw-r--r--dev/images/icons/drink_empty.pngbin426 -> 0 bytes
-rw-r--r--dev/images/icons/drive.pngbin338 -> 0 bytes
-rw-r--r--dev/images/icons/drive_add.pngbin610 -> 0 bytes
-rw-r--r--dev/images/icons/drive_burn.pngbin608 -> 0 bytes
-rw-r--r--dev/images/icons/drive_cd.pngbin733 -> 0 bytes
-rw-r--r--dev/images/icons/drive_cd_empty.pngbin332 -> 0 bytes
-rw-r--r--dev/images/icons/drive_delete.pngbin628 -> 0 bytes
-rw-r--r--dev/images/icons/drive_disk.pngbin695 -> 0 bytes
-rw-r--r--dev/images/icons/drive_edit.pngbin693 -> 0 bytes
-rw-r--r--dev/images/icons/drive_error.pngbin705 -> 0 bytes
-rw-r--r--dev/images/icons/drive_go.pngbin661 -> 0 bytes
-rw-r--r--dev/images/icons/drive_key.pngbin681 -> 0 bytes
-rw-r--r--dev/images/icons/drive_link.pngbin654 -> 0 bytes
-rw-r--r--dev/images/icons/drive_magnify.pngbin641 -> 0 bytes
-rw-r--r--dev/images/icons/drive_network.pngbin585 -> 0 bytes
-rw-r--r--dev/images/icons/drive_rename.pngbin486 -> 0 bytes
-rw-r--r--dev/images/icons/drive_user.pngbin712 -> 0 bytes
-rw-r--r--dev/images/icons/drive_web.pngbin686 -> 0 bytes
-rw-r--r--dev/images/icons/dvd.pngbin706 -> 0 bytes
-rw-r--r--dev/images/icons/dvd_add.pngbin730 -> 0 bytes
-rw-r--r--dev/images/icons/dvd_delete.pngbin742 -> 0 bytes
-rw-r--r--dev/images/icons/dvd_edit.pngbin787 -> 0 bytes
-rw-r--r--dev/images/icons/dvd_error.pngbin792 -> 0 bytes
-rw-r--r--dev/images/icons/dvd_go.pngbin797 -> 0 bytes
-rw-r--r--dev/images/icons/dvd_key.pngbin759 -> 0 bytes
-rw-r--r--dev/images/icons/dvd_link.pngbin764 -> 0 bytes
-rw-r--r--dev/images/icons/email.pngbin639 -> 0 bytes
-rw-r--r--dev/images/icons/email_add.pngbin701 -> 0 bytes
-rw-r--r--dev/images/icons/email_attach.pngbin744 -> 0 bytes
-rw-r--r--dev/images/icons/email_delete.pngbin726 -> 0 bytes
-rw-r--r--dev/images/icons/email_edit.pngbin728 -> 0 bytes
-rw-r--r--dev/images/icons/email_error.pngbin769 -> 0 bytes
-rw-r--r--dev/images/icons/email_go.pngbin751 -> 0 bytes
-rw-r--r--dev/images/icons/email_link.pngbin764 -> 0 bytes
-rw-r--r--dev/images/icons/email_open.pngbin723 -> 0 bytes
-rw-r--r--dev/images/icons/email_open_image.pngbin756 -> 0 bytes
-rw-r--r--dev/images/icons/emoticon_evilgrin.pngbin683 -> 0 bytes
-rw-r--r--dev/images/icons/emoticon_grin.pngbin684 -> 0 bytes
-rw-r--r--dev/images/icons/emoticon_happy.pngbin676 -> 0 bytes
-rw-r--r--dev/images/icons/emoticon_smile.pngbin723 -> 0 bytes
-rw-r--r--dev/images/icons/emoticon_surprised.pngbin706 -> 0 bytes
-rw-r--r--dev/images/icons/emoticon_tongue.pngbin725 -> 0 bytes
-rw-r--r--dev/images/icons/emoticon_unhappy.pngbin717 -> 0 bytes
-rw-r--r--dev/images/icons/emoticon_waii.pngbin697 -> 0 bytes
-rw-r--r--dev/images/icons/emoticon_wink.pngbin676 -> 0 bytes
-rw-r--r--dev/images/icons/error.pngbin619 -> 0 bytes
-rw-r--r--dev/images/icons/error_add.pngbin651 -> 0 bytes
-rw-r--r--dev/images/icons/error_delete.pngbin670 -> 0 bytes
-rw-r--r--dev/images/icons/error_go.pngbin686 -> 0 bytes
-rw-r--r--dev/images/icons/exclamation.pngbin671 -> 0 bytes
-rw-r--r--dev/images/icons/eye.pngbin710 -> 0 bytes
-rw-r--r--dev/images/icons/feed.pngbin659 -> 0 bytes
-rw-r--r--dev/images/icons/feed_add.pngbin694 -> 0 bytes
-rw-r--r--dev/images/icons/feed_delete.pngbin705 -> 0 bytes
-rw-r--r--dev/images/icons/feed_disk.pngbin738 -> 0 bytes
-rw-r--r--dev/images/icons/feed_edit.pngbin758 -> 0 bytes
-rw-r--r--dev/images/icons/feed_error.pngbin751 -> 0 bytes
-rw-r--r--dev/images/icons/feed_go.pngbin744 -> 0 bytes
-rw-r--r--dev/images/icons/feed_key.pngbin746 -> 0 bytes
-rw-r--r--dev/images/icons/feed_link.pngbin749 -> 0 bytes
-rw-r--r--dev/images/icons/feed_magnify.pngbin720 -> 0 bytes
-rw-r--r--dev/images/icons/female.pngbin533 -> 0 bytes
-rw-r--r--dev/images/icons/film.pngbin637 -> 0 bytes
-rw-r--r--dev/images/icons/film_add.pngbin683 -> 0 bytes
-rw-r--r--dev/images/icons/film_delete.pngbin703 -> 0 bytes
-rw-r--r--dev/images/icons/film_edit.pngbin808 -> 0 bytes
-rw-r--r--dev/images/icons/film_error.pngbin789 -> 0 bytes
-rw-r--r--dev/images/icons/film_go.pngbin800 -> 0 bytes
-rw-r--r--dev/images/icons/film_key.pngbin785 -> 0 bytes
-rw-r--r--dev/images/icons/film_link.pngbin805 -> 0 bytes
-rw-r--r--dev/images/icons/film_save.pngbin806 -> 0 bytes
-rw-r--r--dev/images/icons/find.pngbin610 -> 0 bytes
-rw-r--r--dev/images/icons/flag_blue.pngbin614 -> 0 bytes
-rw-r--r--dev/images/icons/flag_green.pngbin616 -> 0 bytes
-rw-r--r--dev/images/icons/flag_orange.pngbin610 -> 0 bytes
-rw-r--r--dev/images/icons/flag_pink.pngbin588 -> 0 bytes
-rw-r--r--dev/images/icons/flag_purple.pngbin598 -> 0 bytes
-rw-r--r--dev/images/icons/flag_red.pngbin606 -> 0 bytes
-rw-r--r--dev/images/icons/flag_yellow.pngbin615 -> 0 bytes
-rw-r--r--dev/images/icons/folder.pngbin537 -> 0 bytes
-rw-r--r--dev/images/icons/folder_add.pngbin626 -> 0 bytes
-rw-r--r--dev/images/icons/folder_bell.pngbin762 -> 0 bytes
-rw-r--r--dev/images/icons/folder_brick.pngbin710 -> 0 bytes
-rw-r--r--dev/images/icons/folder_bug.pngbin779 -> 0 bytes
-rw-r--r--dev/images/icons/folder_camera.pngbin729 -> 0 bytes
-rw-r--r--dev/images/icons/folder_database.pngbin687 -> 0 bytes
-rw-r--r--dev/images/icons/folder_delete.pngbin652 -> 0 bytes
-rw-r--r--dev/images/icons/folder_edit.pngbin689 -> 0 bytes
-rw-r--r--dev/images/icons/folder_error.pngbin715 -> 0 bytes
-rw-r--r--dev/images/icons/folder_explore.pngbin662 -> 0 bytes
-rw-r--r--dev/images/icons/folder_feed.pngbin691 -> 0 bytes
-rw-r--r--dev/images/icons/folder_find.pngbin773 -> 0 bytes
-rw-r--r--dev/images/icons/folder_go.pngbin694 -> 0 bytes
-rw-r--r--dev/images/icons/folder_heart.pngbin735 -> 0 bytes
-rw-r--r--dev/images/icons/folder_image.pngbin677 -> 0 bytes
-rw-r--r--dev/images/icons/folder_key.pngbin720 -> 0 bytes
-rw-r--r--dev/images/icons/folder_lightbulb.pngbin726 -> 0 bytes
-rw-r--r--dev/images/icons/folder_link.pngbin728 -> 0 bytes
-rw-r--r--dev/images/icons/folder_magnify.pngbin686 -> 0 bytes
-rw-r--r--dev/images/icons/folder_page.pngbin688 -> 0 bytes
-rw-r--r--dev/images/icons/folder_page_white.pngbin637 -> 0 bytes
-rw-r--r--dev/images/icons/folder_palette.pngbin811 -> 0 bytes
-rw-r--r--dev/images/icons/folder_picture.pngbin713 -> 0 bytes
-rw-r--r--dev/images/icons/folder_star.pngbin721 -> 0 bytes
-rw-r--r--dev/images/icons/folder_table.pngbin675 -> 0 bytes
-rw-r--r--dev/images/icons/folder_user.pngbin730 -> 0 bytes
-rw-r--r--dev/images/icons/folder_wrench.pngbin699 -> 0 bytes
-rw-r--r--dev/images/icons/font.pngbin552 -> 0 bytes
-rw-r--r--dev/images/icons/font_add.pngbin616 -> 0 bytes
-rw-r--r--dev/images/icons/font_delete.pngbin637 -> 0 bytes
-rw-r--r--dev/images/icons/font_go.pngbin663 -> 0 bytes
-rw-r--r--dev/images/icons/group.pngbin699 -> 0 bytes
-rw-r--r--dev/images/icons/group_add.pngbin751 -> 0 bytes
-rw-r--r--dev/images/icons/group_delete.pngbin773 -> 0 bytes
-rw-r--r--dev/images/icons/group_edit.pngbin730 -> 0 bytes
-rw-r--r--dev/images/icons/group_error.pngbin786 -> 0 bytes
-rw-r--r--dev/images/icons/group_gear.pngbin770 -> 0 bytes
-rw-r--r--dev/images/icons/group_go.pngbin785 -> 0 bytes
-rw-r--r--dev/images/icons/group_key.pngbin759 -> 0 bytes
-rw-r--r--dev/images/icons/group_link.pngbin804 -> 0 bytes
-rw-r--r--dev/images/icons/heart.pngbin718 -> 0 bytes
-rw-r--r--dev/images/icons/heart_add.pngbin759 -> 0 bytes
-rw-r--r--dev/images/icons/heart_delete.pngbin787 -> 0 bytes
-rw-r--r--dev/images/icons/help.pngbin731 -> 0 bytes
-rw-r--r--dev/images/icons/hourglass.pngbin688 -> 0 bytes
-rw-r--r--dev/images/icons/hourglass_add.pngbin756 -> 0 bytes
-rw-r--r--dev/images/icons/hourglass_delete.pngbin770 -> 0 bytes
-rw-r--r--dev/images/icons/hourglass_go.pngbin812 -> 0 bytes
-rw-r--r--dev/images/icons/hourglass_link.pngbin815 -> 0 bytes
-rw-r--r--dev/images/icons/house.pngbin750 -> 0 bytes
-rw-r--r--dev/images/icons/house_go.pngbin804 -> 0 bytes
-rw-r--r--dev/images/icons/house_link.pngbin813 -> 0 bytes
-rw-r--r--dev/images/icons/html.pngbin578 -> 0 bytes
-rw-r--r--dev/images/icons/html_add.pngbin684 -> 0 bytes
-rw-r--r--dev/images/icons/html_delete.pngbin688 -> 0 bytes
-rw-r--r--dev/images/icons/html_go.pngbin692 -> 0 bytes
-rw-r--r--dev/images/icons/html_valid.pngbin704 -> 0 bytes
-rw-r--r--dev/images/icons/image.pngbin512 -> 0 bytes
-rw-r--r--dev/images/icons/image_add.pngbin617 -> 0 bytes
-rw-r--r--dev/images/icons/image_delete.pngbin645 -> 0 bytes
-rw-r--r--dev/images/icons/image_edit.pngbin738 -> 0 bytes
-rw-r--r--dev/images/icons/image_link.pngbin728 -> 0 bytes
-rw-r--r--dev/images/icons/images.pngbin602 -> 0 bytes
-rw-r--r--dev/images/icons/information.pngbin724 -> 0 bytes
-rw-r--r--dev/images/icons/ipod.pngbin463 -> 0 bytes
-rw-r--r--dev/images/icons/ipod_cast.pngbin658 -> 0 bytes
-rw-r--r--dev/images/icons/ipod_cast_add.pngbin727 -> 0 bytes
-rw-r--r--dev/images/icons/ipod_cast_delete.pngbin747 -> 0 bytes
-rw-r--r--dev/images/icons/ipod_sound.pngbin678 -> 0 bytes
-rw-r--r--dev/images/icons/joystick.pngbin559 -> 0 bytes
-rw-r--r--dev/images/icons/joystick_add.pngbin612 -> 0 bytes
-rw-r--r--dev/images/icons/joystick_delete.pngbin646 -> 0 bytes
-rw-r--r--dev/images/icons/joystick_error.pngbin668 -> 0 bytes
-rw-r--r--dev/images/icons/key.pngbin553 -> 0 bytes
-rw-r--r--dev/images/icons/key_add.pngbin645 -> 0 bytes
-rw-r--r--dev/images/icons/key_delete.pngbin666 -> 0 bytes
-rw-r--r--dev/images/icons/key_go.pngbin687 -> 0 bytes
-rw-r--r--dev/images/icons/keyboard.pngbin566 -> 0 bytes
-rw-r--r--dev/images/icons/keyboard_add.pngbin637 -> 0 bytes
-rw-r--r--dev/images/icons/keyboard_delete.pngbin660 -> 0 bytes
-rw-r--r--dev/images/icons/keyboard_magnify.pngbin638 -> 0 bytes
-rw-r--r--dev/images/icons/layers.pngbin597 -> 0 bytes
-rw-r--r--dev/images/icons/layout.pngbin432 -> 0 bytes
-rw-r--r--dev/images/icons/layout_add.pngbin520 -> 0 bytes
-rw-r--r--dev/images/icons/layout_content.pngbin519 -> 0 bytes
-rw-r--r--dev/images/icons/layout_delete.pngbin550 -> 0 bytes
-rw-r--r--dev/images/icons/layout_edit.pngbin660 -> 0 bytes
-rw-r--r--dev/images/icons/layout_error.pngbin642 -> 0 bytes
-rw-r--r--dev/images/icons/layout_header.pngbin486 -> 0 bytes
-rw-r--r--dev/images/icons/layout_link.pngbin600 -> 0 bytes
-rw-r--r--dev/images/icons/layout_sidebar.pngbin433 -> 0 bytes
-rw-r--r--dev/images/icons/lightbulb.pngbin725 -> 0 bytes
-rw-r--r--dev/images/icons/lightbulb_add.pngbin783 -> 0 bytes
-rw-r--r--dev/images/icons/lightbulb_delete.pngbin801 -> 0 bytes
-rw-r--r--dev/images/icons/lightbulb_off.pngbin648 -> 0 bytes
-rw-r--r--dev/images/icons/lightning.pngbin595 -> 0 bytes
-rw-r--r--dev/images/icons/lightning_add.pngbin690 -> 0 bytes
-rw-r--r--dev/images/icons/lightning_delete.pngbin706 -> 0 bytes
-rw-r--r--dev/images/icons/lightning_go.pngbin727 -> 0 bytes
-rw-r--r--dev/images/icons/link.pngbin343 -> 0 bytes
-rw-r--r--dev/images/icons/link_add.pngbin523 -> 0 bytes
-rw-r--r--dev/images/icons/link_break.pngbin605 -> 0 bytes
-rw-r--r--dev/images/icons/link_delete.pngbin545 -> 0 bytes
-rw-r--r--dev/images/icons/link_edit.pngbin648 -> 0 bytes
-rw-r--r--dev/images/icons/link_error.pngbin642 -> 0 bytes
-rw-r--r--dev/images/icons/link_go.pngbin603 -> 0 bytes
-rw-r--r--dev/images/icons/lock.pngbin749 -> 0 bytes
-rw-r--r--dev/images/icons/lock_add.pngbin793 -> 0 bytes
-rw-r--r--dev/images/icons/lock_break.pngbin771 -> 0 bytes
-rw-r--r--dev/images/icons/lock_delete.pngbin815 -> 0 bytes
-rw-r--r--dev/images/icons/lock_edit.pngbin861 -> 0 bytes
-rw-r--r--dev/images/icons/lock_go.pngbin829 -> 0 bytes
-rw-r--r--dev/images/icons/lock_open.pngbin727 -> 0 bytes
-rw-r--r--dev/images/icons/lorry.pngbin582 -> 0 bytes
-rw-r--r--dev/images/icons/lorry_add.pngbin675 -> 0 bytes
-rw-r--r--dev/images/icons/lorry_delete.pngbin683 -> 0 bytes
-rw-r--r--dev/images/icons/lorry_error.pngbin739 -> 0 bytes
-rw-r--r--dev/images/icons/lorry_flatbed.pngbin399 -> 0 bytes
-rw-r--r--dev/images/icons/lorry_go.pngbin699 -> 0 bytes
-rw-r--r--dev/images/icons/lorry_link.pngbin751 -> 0 bytes
-rw-r--r--dev/images/icons/magifier_zoom_out.pngbin601 -> 0 bytes
-rw-r--r--dev/images/icons/magnifier.pngbin567 -> 0 bytes
-rw-r--r--dev/images/icons/magnifier_zoom_in.pngbin626 -> 0 bytes
-rw-r--r--dev/images/icons/male.pngbin614 -> 0 bytes
-rw-r--r--dev/images/icons/map.pngbin804 -> 0 bytes
-rw-r--r--dev/images/icons/map_add.pngbin836 -> 0 bytes
-rw-r--r--dev/images/icons/map_delete.pngbin835 -> 0 bytes
-rw-r--r--dev/images/icons/map_edit.pngbin865 -> 0 bytes
-rw-r--r--dev/images/icons/map_go.pngbin842 -> 0 bytes
-rw-r--r--dev/images/icons/map_magnify.pngbin797 -> 0 bytes
-rw-r--r--dev/images/icons/medal_bronze_1.pngbin640 -> 0 bytes
-rw-r--r--dev/images/icons/medal_bronze_2.pngbin654 -> 0 bytes
-rw-r--r--dev/images/icons/medal_bronze_3.pngbin646 -> 0 bytes
-rw-r--r--dev/images/icons/medal_bronze_add.pngbin747 -> 0 bytes
-rw-r--r--dev/images/icons/medal_bronze_delete.pngbin730 -> 0 bytes
-rw-r--r--dev/images/icons/medal_gold_1.pngbin629 -> 0 bytes
-rw-r--r--dev/images/icons/medal_gold_2.pngbin641 -> 0 bytes
-rw-r--r--dev/images/icons/medal_gold_3.pngbin634 -> 0 bytes
-rw-r--r--dev/images/icons/medal_gold_add.pngbin733 -> 0 bytes
-rw-r--r--dev/images/icons/medal_gold_delete.pngbin724 -> 0 bytes
-rw-r--r--dev/images/icons/medal_silver_1.pngbin589 -> 0 bytes
-rw-r--r--dev/images/icons/medal_silver_2.pngbin600 -> 0 bytes
-rw-r--r--dev/images/icons/medal_silver_3.pngbin597 -> 0 bytes
-rw-r--r--dev/images/icons/medal_silver_add.pngbin714 -> 0 bytes
-rw-r--r--dev/images/icons/medal_silver_delete.pngbin714 -> 0 bytes
-rw-r--r--dev/images/icons/money.pngbin677 -> 0 bytes
-rw-r--r--dev/images/icons/money_add.pngbin730 -> 0 bytes
-rw-r--r--dev/images/icons/money_delete.pngbin751 -> 0 bytes
-rw-r--r--dev/images/icons/money_dollar.pngbin575 -> 0 bytes
-rw-r--r--dev/images/icons/money_euro.pngbin547 -> 0 bytes
-rw-r--r--dev/images/icons/money_pound.pngbin511 -> 0 bytes
-rw-r--r--dev/images/icons/money_yen.pngbin506 -> 0 bytes
-rw-r--r--dev/images/icons/monitor.pngbin612 -> 0 bytes
-rw-r--r--dev/images/icons/monitor_add.pngbin692 -> 0 bytes
-rw-r--r--dev/images/icons/monitor_delete.pngbin691 -> 0 bytes
-rw-r--r--dev/images/icons/monitor_edit.pngbin755 -> 0 bytes
-rw-r--r--dev/images/icons/monitor_error.pngbin714 -> 0 bytes
-rw-r--r--dev/images/icons/monitor_go.pngbin696 -> 0 bytes
-rw-r--r--dev/images/icons/monitor_lightning.pngbin768 -> 0 bytes
-rw-r--r--dev/images/icons/monitor_link.pngbin736 -> 0 bytes
-rw-r--r--dev/images/icons/mouse.pngbin579 -> 0 bytes
-rw-r--r--dev/images/icons/mouse_add.pngbin672 -> 0 bytes
-rw-r--r--dev/images/icons/mouse_delete.pngbin686 -> 0 bytes
-rw-r--r--dev/images/icons/mouse_error.pngbin735 -> 0 bytes
-rw-r--r--dev/images/icons/music.pngbin381 -> 0 bytes
-rw-r--r--dev/images/icons/new.pngbin318 -> 0 bytes
-rw-r--r--dev/images/icons/newspaper.pngbin600 -> 0 bytes
-rw-r--r--dev/images/icons/newspaper_add.pngbin693 -> 0 bytes
-rw-r--r--dev/images/icons/newspaper_delete.pngbin720 -> 0 bytes
-rw-r--r--dev/images/icons/newspaper_go.pngbin742 -> 0 bytes
-rw-r--r--dev/images/icons/newspaper_link.pngbin731 -> 0 bytes
-rw-r--r--dev/images/icons/note.pngbin500 -> 0 bytes
-rw-r--r--dev/images/icons/note_add.pngbin604 -> 0 bytes
-rw-r--r--dev/images/icons/note_delete.pngbin630 -> 0 bytes
-rw-r--r--dev/images/icons/note_edit.pngbin714 -> 0 bytes
-rw-r--r--dev/images/icons/note_error.pngbin680 -> 0 bytes
-rw-r--r--dev/images/icons/note_go.pngbin661 -> 0 bytes
-rw-r--r--dev/images/icons/overlays.pngbin660 -> 0 bytes
-rw-r--r--dev/images/icons/package.pngbin845 -> 0 bytes
-rw-r--r--dev/images/icons/package_add.pngbin858 -> 0 bytes
-rw-r--r--dev/images/icons/package_delete.pngbin869 -> 0 bytes
-rw-r--r--dev/images/icons/package_go.pngbin887 -> 0 bytes
-rw-r--r--dev/images/icons/package_green.pngbin859 -> 0 bytes
-rw-r--r--dev/images/icons/package_link.pngbin892 -> 0 bytes
-rw-r--r--dev/images/icons/page.pngbin635 -> 0 bytes
-rw-r--r--dev/images/icons/page_add.pngbin739 -> 0 bytes
-rw-r--r--dev/images/icons/page_attach.pngbin794 -> 0 bytes
-rw-r--r--dev/images/icons/page_code.pngbin818 -> 0 bytes
-rw-r--r--dev/images/icons/page_copy.pngbin652 -> 0 bytes
-rw-r--r--dev/images/icons/page_delete.pngbin740 -> 0 bytes
-rw-r--r--dev/images/icons/page_edit.pngbin807 -> 0 bytes
-rw-r--r--dev/images/icons/page_error.pngbin793 -> 0 bytes
-rw-r--r--dev/images/icons/page_excel.pngbin795 -> 0 bytes
-rw-r--r--dev/images/icons/page_find.pngbin879 -> 0 bytes
-rw-r--r--dev/images/icons/page_gear.pngbin833 -> 0 bytes
-rw-r--r--dev/images/icons/page_go.pngbin779 -> 0 bytes
-rw-r--r--dev/images/icons/page_green.pngbin621 -> 0 bytes
-rw-r--r--dev/images/icons/page_key.pngbin801 -> 0 bytes
-rw-r--r--dev/images/icons/page_lightning.pngbin839 -> 0 bytes
-rw-r--r--dev/images/icons/page_link.pngbin824 -> 0 bytes
-rw-r--r--dev/images/icons/page_paintbrush.pngbin813 -> 0 bytes
-rw-r--r--dev/images/icons/page_paste.pngbin703 -> 0 bytes
-rw-r--r--dev/images/icons/page_red.pngbin641 -> 0 bytes
-rw-r--r--dev/images/icons/page_refresh.pngbin858 -> 0 bytes
-rw-r--r--dev/images/icons/page_save.pngbin774 -> 0 bytes
-rw-r--r--dev/images/icons/page_white.pngbin294 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_acrobat.pngbin530 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_actionscript.pngbin600 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_add.pngbin456 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_c.pngbin527 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_camera.pngbin635 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_cd.pngbin607 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_code.pngbin542 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_code_red.pngbin526 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_coldfusion.pngbin527 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_compressed.pngbin672 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_copy.pngbin309 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_cplusplus.pngbin560 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_csharp.pngbin641 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_cup.pngbin580 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_database.pngbin515 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_delete.pngbin480 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_dvd.pngbin576 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_edit.pngbin556 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_error.pngbin564 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_excel.pngbin604 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_find.pngbin620 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_flash.pngbin517 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_freehand.pngbin576 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_gear.pngbin400 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_get.pngbin461 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_go.pngbin555 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_h.pngbin543 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_horizontal.pngbin296 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_key.pngbin557 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_lightning.pngbin608 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_link.pngbin560 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_magnify.pngbin495 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_medal.pngbin656 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_office.pngbin722 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_paint.pngbin628 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_paintbrush.pngbin555 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_paste.pngbin607 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_php.pngbin479 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_picture.pngbin610 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_powerpoint.pngbin543 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_put.pngbin467 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_ruby.pngbin565 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_stack.pngbin317 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_star.pngbin504 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_swoosh.pngbin629 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_text.pngbin342 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_text_width.pngbin315 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_tux.pngbin607 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_vector.pngbin581 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_visualstudio.pngbin641 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_width.pngbin309 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_word.pngbin630 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_world.pngbin676 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_wrench.pngbin551 -> 0 bytes
-rw-r--r--dev/images/icons/page_white_zip.pngbin379 -> 0 bytes
-rw-r--r--dev/images/icons/page_word.pngbin777 -> 0 bytes
-rw-r--r--dev/images/icons/page_world.pngbin903 -> 0 bytes
-rw-r--r--dev/images/icons/paintbrush.pngbin497 -> 0 bytes
-rw-r--r--dev/images/icons/paintcan.pngbin655 -> 0 bytes
-rw-r--r--dev/images/icons/palette.pngbin801 -> 0 bytes
-rw-r--r--dev/images/icons/paste_plain.pngbin605 -> 0 bytes
-rw-r--r--dev/images/icons/paste_word.pngbin701 -> 0 bytes
-rw-r--r--dev/images/icons/pencil.pngbin391 -> 0 bytes
-rw-r--r--dev/images/icons/pencil_add.pngbin529 -> 0 bytes
-rw-r--r--dev/images/icons/pencil_delete.pngbin546 -> 0 bytes
-rw-r--r--dev/images/icons/pencil_go.pngbin607 -> 0 bytes
-rw-r--r--dev/images/icons/phone.pngbin488 -> 0 bytes
-rw-r--r--dev/images/icons/phone_add.pngbin595 -> 0 bytes
-rw-r--r--dev/images/icons/phone_delete.pngbin615 -> 0 bytes
-rw-r--r--dev/images/icons/phone_sound.pngbin677 -> 0 bytes
-rw-r--r--dev/images/icons/photo.pngbin589 -> 0 bytes
-rw-r--r--dev/images/icons/photo_add.pngbin694 -> 0 bytes
-rw-r--r--dev/images/icons/photo_delete.pngbin703 -> 0 bytes
-rw-r--r--dev/images/icons/photo_link.pngbin776 -> 0 bytes
-rw-r--r--dev/images/icons/photos.pngbin647 -> 0 bytes
-rw-r--r--dev/images/icons/picture.pngbin606 -> 0 bytes
-rw-r--r--dev/images/icons/picture_add.pngbin706 -> 0 bytes
-rw-r--r--dev/images/icons/picture_delete.pngbin736 -> 0 bytes
-rw-r--r--dev/images/icons/picture_edit.pngbin813 -> 0 bytes
-rw-r--r--dev/images/icons/picture_empty.pngbin463 -> 0 bytes
-rw-r--r--dev/images/icons/picture_error.pngbin755 -> 0 bytes
-rw-r--r--dev/images/icons/picture_go.pngbin758 -> 0 bytes
-rw-r--r--dev/images/icons/picture_key.pngbin784 -> 0 bytes
-rw-r--r--dev/images/icons/picture_link.pngbin801 -> 0 bytes
-rw-r--r--dev/images/icons/picture_save.pngbin755 -> 0 bytes
-rw-r--r--dev/images/icons/pictures.pngbin650 -> 0 bytes
-rw-r--r--dev/images/icons/pilcrow.pngbin316 -> 0 bytes
-rw-r--r--dev/images/icons/pill.pngbin662 -> 0 bytes
-rw-r--r--dev/images/icons/pill_add.pngbin742 -> 0 bytes
-rw-r--r--dev/images/icons/pill_delete.pngbin754 -> 0 bytes
-rw-r--r--dev/images/icons/pill_go.pngbin771 -> 0 bytes
-rw-r--r--dev/images/icons/plugin.pngbin591 -> 0 bytes
-rw-r--r--dev/images/icons/plugin_add.pngbin650 -> 0 bytes
-rw-r--r--dev/images/icons/plugin_delete.pngbin685 -> 0 bytes
-rw-r--r--dev/images/icons/plugin_disabled.pngbin347 -> 0 bytes
-rw-r--r--dev/images/icons/plugin_edit.pngbin705 -> 0 bytes
-rw-r--r--dev/images/icons/plugin_error.pngbin702 -> 0 bytes
-rw-r--r--dev/images/icons/plugin_go.pngbin694 -> 0 bytes
-rw-r--r--dev/images/icons/plugin_link.pngbin704 -> 0 bytes
-rw-r--r--dev/images/icons/printer.pngbin674 -> 0 bytes
-rw-r--r--dev/images/icons/printer_add.pngbin728 -> 0 bytes
-rw-r--r--dev/images/icons/printer_delete.pngbin738 -> 0 bytes
-rw-r--r--dev/images/icons/printer_empty.pngbin350 -> 0 bytes
-rw-r--r--dev/images/icons/printer_error.pngbin811 -> 0 bytes
-rw-r--r--dev/images/icons/rainbow.pngbin602 -> 0 bytes
-rw-r--r--dev/images/icons/report.pngbin597 -> 0 bytes
-rw-r--r--dev/images/icons/report_add.pngbin655 -> 0 bytes
-rw-r--r--dev/images/icons/report_delete.pngbin671 -> 0 bytes
-rw-r--r--dev/images/icons/report_disk.pngbin737 -> 0 bytes
-rw-r--r--dev/images/icons/report_edit.pngbin708 -> 0 bytes
-rw-r--r--dev/images/icons/report_go.pngbin719 -> 0 bytes
-rw-r--r--dev/images/icons/report_key.pngbin704 -> 0 bytes
-rw-r--r--dev/images/icons/report_link.pngbin697 -> 0 bytes
-rw-r--r--dev/images/icons/report_magnify.pngbin686 -> 0 bytes
-rw-r--r--dev/images/icons/report_picture.pngbin710 -> 0 bytes
-rw-r--r--dev/images/icons/report_user.pngbin731 -> 0 bytes
-rw-r--r--dev/images/icons/report_word.pngbin691 -> 0 bytes
-rw-r--r--dev/images/icons/resultset_first.pngbin485 -> 0 bytes
-rw-r--r--dev/images/icons/resultset_last.pngbin485 -> 0 bytes
-rw-r--r--dev/images/icons/resultset_next.pngbin345 -> 0 bytes
-rw-r--r--dev/images/icons/resultset_previous.pngbin350 -> 0 bytes
-rw-r--r--dev/images/icons/rosette.pngbin612 -> 0 bytes
-rw-r--r--dev/images/icons/rss.pngbin530 -> 0 bytes
-rw-r--r--dev/images/icons/rss_add.pngbin627 -> 0 bytes
-rw-r--r--dev/images/icons/rss_delete.pngbin633 -> 0 bytes
-rw-r--r--dev/images/icons/rss_go.pngbin635 -> 0 bytes
-rw-r--r--dev/images/icons/rss_valid.pngbin660 -> 0 bytes
-rw-r--r--dev/images/icons/ruby.pngbin535 -> 0 bytes
-rw-r--r--dev/images/icons/ruby_add.pngbin635 -> 0 bytes
-rw-r--r--dev/images/icons/ruby_delete.pngbin650 -> 0 bytes
-rw-r--r--dev/images/icons/ruby_gear.pngbin660 -> 0 bytes
-rw-r--r--dev/images/icons/ruby_get.pngbin637 -> 0 bytes
-rw-r--r--dev/images/icons/ruby_go.pngbin674 -> 0 bytes
-rw-r--r--dev/images/icons/ruby_key.pngbin683 -> 0 bytes
-rw-r--r--dev/images/icons/ruby_link.pngbin711 -> 0 bytes
-rw-r--r--dev/images/icons/ruby_put.pngbin639 -> 0 bytes
-rw-r--r--dev/images/icons/script.pngbin748 -> 0 bytes
-rw-r--r--dev/images/icons/script_add.pngbin791 -> 0 bytes
-rw-r--r--dev/images/icons/script_code.pngbin840 -> 0 bytes
-rw-r--r--dev/images/icons/script_code_red.pngbin849 -> 0 bytes
-rw-r--r--dev/images/icons/script_delete.pngbin802 -> 0 bytes
-rw-r--r--dev/images/icons/script_edit.pngbin841 -> 0 bytes
-rw-r--r--dev/images/icons/script_error.pngbin837 -> 0 bytes
-rw-r--r--dev/images/icons/script_gear.pngbin826 -> 0 bytes
-rw-r--r--dev/images/icons/script_go.pngbin839 -> 0 bytes
-rw-r--r--dev/images/icons/script_key.pngbin836 -> 0 bytes
-rw-r--r--dev/images/icons/script_lightning.pngbin864 -> 0 bytes
-rw-r--r--dev/images/icons/script_link.pngbin844 -> 0 bytes
-rw-r--r--dev/images/icons/script_palette.pngbin874 -> 0 bytes
-rw-r--r--dev/images/icons/script_save.pngbin804 -> 0 bytes
-rw-r--r--dev/images/icons/server.pngbin530 -> 0 bytes
-rw-r--r--dev/images/icons/server_add.pngbin673 -> 0 bytes
-rw-r--r--dev/images/icons/server_chart.pngbin673 -> 0 bytes
-rw-r--r--dev/images/icons/server_compressed.pngbin721 -> 0 bytes
-rw-r--r--dev/images/icons/server_connect.pngbin755 -> 0 bytes
-rw-r--r--dev/images/icons/server_database.pngbin666 -> 0 bytes
-rw-r--r--dev/images/icons/server_delete.pngbin668 -> 0 bytes
-rw-r--r--dev/images/icons/server_edit.pngbin727 -> 0 bytes
-rw-r--r--dev/images/icons/server_error.pngbin678 -> 0 bytes
-rw-r--r--dev/images/icons/server_go.pngbin706 -> 0 bytes
-rw-r--r--dev/images/icons/server_key.pngbin734 -> 0 bytes
-rw-r--r--dev/images/icons/server_lightning.pngbin729 -> 0 bytes
-rw-r--r--dev/images/icons/server_link.pngbin706 -> 0 bytes
-rw-r--r--dev/images/icons/server_uncompressed.pngbin669 -> 0 bytes
-rw-r--r--dev/images/icons/shading.pngbin183 -> 0 bytes
-rw-r--r--dev/images/icons/shape_align_bottom.pngbin398 -> 0 bytes
-rw-r--r--dev/images/icons/shape_align_center.pngbin384 -> 0 bytes
-rw-r--r--dev/images/icons/shape_align_left.pngbin402 -> 0 bytes
-rw-r--r--dev/images/icons/shape_align_middle.pngbin414 -> 0 bytes
-rw-r--r--dev/images/icons/shape_align_right.pngbin401 -> 0 bytes
-rw-r--r--dev/images/icons/shape_align_top.pngbin406 -> 0 bytes
-rw-r--r--dev/images/icons/shape_flip_horizontal.pngbin397 -> 0 bytes
-rw-r--r--dev/images/icons/shape_flip_vertical.pngbin362 -> 0 bytes
-rw-r--r--dev/images/icons/shape_group.pngbin553 -> 0 bytes
-rw-r--r--dev/images/icons/shape_handles.pngbin538 -> 0 bytes
-rw-r--r--dev/images/icons/shape_move_back.pngbin395 -> 0 bytes
-rw-r--r--dev/images/icons/shape_move_backwards.pngbin358 -> 0 bytes
-rw-r--r--dev/images/icons/shape_move_forwards.pngbin381 -> 0 bytes
-rw-r--r--dev/images/icons/shape_move_front.pngbin435 -> 0 bytes
-rw-r--r--dev/images/icons/shape_rotate_anticlockwise.pngbin618 -> 0 bytes
-rw-r--r--dev/images/icons/shape_rotate_clockwise.pngbin618 -> 0 bytes
-rw-r--r--dev/images/icons/shape_square.pngbin353 -> 0 bytes
-rw-r--r--dev/images/icons/shape_square_add.pngbin539 -> 0 bytes
-rw-r--r--dev/images/icons/shape_square_delete.pngbin537 -> 0 bytes
-rw-r--r--dev/images/icons/shape_square_edit.pngbin639 -> 0 bytes
-rw-r--r--dev/images/icons/shape_square_error.pngbin570 -> 0 bytes
-rw-r--r--dev/images/icons/shape_square_go.pngbin566 -> 0 bytes
-rw-r--r--dev/images/icons/shape_square_key.pngbin607 -> 0 bytes
-rw-r--r--dev/images/icons/shape_square_link.pngbin633 -> 0 bytes
-rw-r--r--dev/images/icons/shape_ungroup.pngbin624 -> 0 bytes
-rw-r--r--dev/images/icons/shield.pngbin687 -> 0 bytes
-rw-r--r--dev/images/icons/shield_add.pngbin733 -> 0 bytes
-rw-r--r--dev/images/icons/shield_delete.pngbin755 -> 0 bytes
-rw-r--r--dev/images/icons/shield_go.pngbin768 -> 0 bytes
-rw-r--r--dev/images/icons/sitemap.pngbin278 -> 0 bytes
-rw-r--r--dev/images/icons/sitemap_color.pngbin345 -> 0 bytes
-rw-r--r--dev/images/icons/sound.pngbin551 -> 0 bytes
-rw-r--r--dev/images/icons/sound_add.pngbin624 -> 0 bytes
-rw-r--r--dev/images/icons/sound_delete.pngbin654 -> 0 bytes
-rw-r--r--dev/images/icons/sound_low.pngbin467 -> 0 bytes
-rw-r--r--dev/images/icons/sound_mute.pngbin418 -> 0 bytes
-rw-r--r--dev/images/icons/sound_none.pngbin361 -> 0 bytes
-rw-r--r--dev/images/icons/spellcheck.pngbin579 -> 0 bytes
-rw-r--r--dev/images/icons/sport_8ball.pngbin490 -> 0 bytes
-rw-r--r--dev/images/icons/sport_basketball.pngbin955 -> 0 bytes
-rw-r--r--dev/images/icons/sport_football.pngbin824 -> 0 bytes
-rw-r--r--dev/images/icons/sport_golf.pngbin500 -> 0 bytes
-rw-r--r--dev/images/icons/sport_raquet.pngbin660 -> 0 bytes
-rw-r--r--dev/images/icons/sport_shuttlecock.pngbin626 -> 0 bytes
-rw-r--r--dev/images/icons/sport_soccer.pngbin512 -> 0 bytes
-rw-r--r--dev/images/icons/sport_tennis.pngbin875 -> 0 bytes
-rw-r--r--dev/images/icons/star.pngbin657 -> 0 bytes
-rw-r--r--dev/images/icons/status_away.pngbin736 -> 0 bytes
-rw-r--r--dev/images/icons/status_busy.pngbin697 -> 0 bytes
-rw-r--r--dev/images/icons/status_offline.pngbin420 -> 0 bytes
-rw-r--r--dev/images/icons/status_online.pngbin684 -> 0 bytes
-rw-r--r--dev/images/icons/stop.pngbin663 -> 0 bytes
-rw-r--r--dev/images/icons/style.pngbin771 -> 0 bytes
-rw-r--r--dev/images/icons/style_add.pngbin791 -> 0 bytes
-rw-r--r--dev/images/icons/style_delete.pngbin808 -> 0 bytes
-rw-r--r--dev/images/icons/style_edit.pngbin882 -> 0 bytes
-rw-r--r--dev/images/icons/style_go.pngbin813 -> 0 bytes
-rw-r--r--dev/images/icons/sum.pngbin289 -> 0 bytes
-rw-r--r--dev/images/icons/tab.pngbin303 -> 0 bytes
-rw-r--r--dev/images/icons/tab_add.pngbin444 -> 0 bytes
-rw-r--r--dev/images/icons/tab_delete.pngbin457 -> 0 bytes
-rw-r--r--dev/images/icons/tab_edit.pngbin520 -> 0 bytes
-rw-r--r--dev/images/icons/tab_go.pngbin506 -> 0 bytes
-rw-r--r--dev/images/icons/table.pngbin528 -> 0 bytes
-rw-r--r--dev/images/icons/table_add.pngbin608 -> 0 bytes
-rw-r--r--dev/images/icons/table_delete.pngbin632 -> 0 bytes
-rw-r--r--dev/images/icons/table_edit.pngbin695 -> 0 bytes
-rw-r--r--dev/images/icons/table_error.pngbin687 -> 0 bytes
-rw-r--r--dev/images/icons/table_gear.pngbin658 -> 0 bytes
-rw-r--r--dev/images/icons/table_go.pngbin683 -> 0 bytes
-rw-r--r--dev/images/icons/table_key.pngbin693 -> 0 bytes
-rw-r--r--dev/images/icons/table_lightning.pngbin686 -> 0 bytes
-rw-r--r--dev/images/icons/table_link.pngbin672 -> 0 bytes
-rw-r--r--dev/images/icons/table_multiple.pngbin594 -> 0 bytes
-rw-r--r--dev/images/icons/table_refresh.pngbin749 -> 0 bytes
-rw-r--r--dev/images/icons/table_relationship.pngbin603 -> 0 bytes
-rw-r--r--dev/images/icons/table_row_delete.pngbin589 -> 0 bytes
-rw-r--r--dev/images/icons/table_row_insert.pngbin609 -> 0 bytes
-rw-r--r--dev/images/icons/table_save.pngbin723 -> 0 bytes
-rw-r--r--dev/images/icons/table_sort.pngbin678 -> 0 bytes
-rw-r--r--dev/images/icons/tag.pngbin364 -> 0 bytes
-rw-r--r--dev/images/icons/tag_blue.pngbin525 -> 0 bytes
-rw-r--r--dev/images/icons/tag_blue_add.pngbin616 -> 0 bytes
-rw-r--r--dev/images/icons/tag_blue_delete.pngbin647 -> 0 bytes
-rw-r--r--dev/images/icons/tag_blue_edit.pngbin688 -> 0 bytes
-rw-r--r--dev/images/icons/tag_green.pngbin557 -> 0 bytes
-rw-r--r--dev/images/icons/tag_orange.pngbin526 -> 0 bytes
-rw-r--r--dev/images/icons/tag_pink.pngbin520 -> 0 bytes
-rw-r--r--dev/images/icons/tag_purple.pngbin541 -> 0 bytes
-rw-r--r--dev/images/icons/tag_red.pngbin532 -> 0 bytes
-rw-r--r--dev/images/icons/tag_yellow.pngbin528 -> 0 bytes
-rw-r--r--dev/images/icons/telephone.pngbin791 -> 0 bytes
-rw-r--r--dev/images/icons/telephone_add.pngbin832 -> 0 bytes
-rw-r--r--dev/images/icons/telephone_delete.pngbin856 -> 0 bytes
-rw-r--r--dev/images/icons/telephone_edit.pngbin885 -> 0 bytes
-rw-r--r--dev/images/icons/telephone_error.pngbin884 -> 0 bytes
-rw-r--r--dev/images/icons/telephone_go.pngbin865 -> 0 bytes
-rw-r--r--dev/images/icons/telephone_key.pngbin881 -> 0 bytes
-rw-r--r--dev/images/icons/telephone_link.pngbin875 -> 0 bytes
-rw-r--r--dev/images/icons/television.pngbin696 -> 0 bytes
-rw-r--r--dev/images/icons/television_add.pngbin778 -> 0 bytes
-rw-r--r--dev/images/icons/television_delete.pngbin802 -> 0 bytes
-rw-r--r--dev/images/icons/text_align_center.pngbin234 -> 0 bytes
-rw-r--r--dev/images/icons/text_align_justify.pngbin209 -> 0 bytes
-rw-r--r--dev/images/icons/text_align_left.pngbin209 -> 0 bytes
-rw-r--r--dev/images/icons/text_align_right.pngbin209 -> 0 bytes
-rw-r--r--dev/images/icons/text_allcaps.pngbin284 -> 0 bytes
-rw-r--r--dev/images/icons/text_bold.pngbin297 -> 0 bytes
-rw-r--r--dev/images/icons/text_columns.pngbin246 -> 0 bytes
-rw-r--r--dev/images/icons/text_dropcaps.pngbin314 -> 0 bytes
-rw-r--r--dev/images/icons/text_heading_1.pngbin276 -> 0 bytes
-rw-r--r--dev/images/icons/text_heading_2.pngbin293 -> 0 bytes
-rw-r--r--dev/images/icons/text_heading_3.pngbin292 -> 0 bytes
-rw-r--r--dev/images/icons/text_heading_4.pngbin293 -> 0 bytes
-rw-r--r--dev/images/icons/text_heading_5.pngbin304 -> 0 bytes
-rw-r--r--dev/images/icons/text_heading_6.pngbin294 -> 0 bytes
-rw-r--r--dev/images/icons/text_horizontalrule.pngbin277 -> 0 bytes
-rw-r--r--dev/images/icons/text_indent.pngbin353 -> 0 bytes
-rw-r--r--dev/images/icons/text_indent_remove.pngbin351 -> 0 bytes
-rw-r--r--dev/images/icons/text_italic.pngbin223 -> 0 bytes
-rw-r--r--dev/images/icons/text_kerning.pngbin454 -> 0 bytes
-rw-r--r--dev/images/icons/text_letter_omega.pngbin486 -> 0 bytes
-rw-r--r--dev/images/icons/text_letterspacing.pngbin460 -> 0 bytes
-rw-r--r--dev/images/icons/text_linespacing.pngbin319 -> 0 bytes
-rw-r--r--dev/images/icons/text_list_bullets.pngbin301 -> 0 bytes
-rw-r--r--dev/images/icons/text_list_numbers.pngbin315 -> 0 bytes
-rw-r--r--dev/images/icons/text_lowercase.pngbin654 -> 0 bytes
-rw-r--r--dev/images/icons/text_padding_bottom.pngbin237 -> 0 bytes
-rw-r--r--dev/images/icons/text_padding_left.pngbin271 -> 0 bytes
-rw-r--r--dev/images/icons/text_padding_right.pngbin271 -> 0 bytes
-rw-r--r--dev/images/icons/text_padding_top.pngbin236 -> 0 bytes
-rw-r--r--dev/images/icons/text_replace.pngbin636 -> 0 bytes
-rw-r--r--dev/images/icons/text_signature.pngbin472 -> 0 bytes
-rw-r--r--dev/images/icons/text_smallcaps.pngbin260 -> 0 bytes
-rw-r--r--dev/images/icons/text_strikethrough.pngbin269 -> 0 bytes
-rw-r--r--dev/images/icons/text_subscript.pngbin375 -> 0 bytes
-rw-r--r--dev/images/icons/text_superscript.pngbin376 -> 0 bytes
-rw-r--r--dev/images/icons/text_underline.pngbin273 -> 0 bytes
-rw-r--r--dev/images/icons/text_uppercase.pngbin693 -> 0 bytes
-rw-r--r--dev/images/icons/textfield.pngbin124 -> 0 bytes
-rw-r--r--dev/images/icons/textfield_add.pngbin276 -> 0 bytes
-rw-r--r--dev/images/icons/textfield_delete.pngbin290 -> 0 bytes
-rw-r--r--dev/images/icons/textfield_key.pngbin401 -> 0 bytes
-rw-r--r--dev/images/icons/textfield_rename.pngbin217 -> 0 bytes
-rw-r--r--dev/images/icons/thumb_down.pngbin539 -> 0 bytes
-rw-r--r--dev/images/icons/thumb_up.pngbin559 -> 0 bytes
-rw-r--r--dev/images/icons/tick.pngbin481 -> 0 bytes
-rw-r--r--dev/images/icons/time.pngbin735 -> 0 bytes
-rw-r--r--dev/images/icons/time_add.pngbin767 -> 0 bytes
-rw-r--r--dev/images/icons/time_delete.pngbin792 -> 0 bytes
-rw-r--r--dev/images/icons/time_go.pngbin833 -> 0 bytes
-rw-r--r--dev/images/icons/timeline_marker.pngbin327 -> 0 bytes
-rw-r--r--dev/images/icons/transmit.pngbin683 -> 0 bytes
-rw-r--r--dev/images/icons/transmit_add.pngbin739 -> 0 bytes
-rw-r--r--dev/images/icons/transmit_blue.pngbin758 -> 0 bytes
-rw-r--r--dev/images/icons/transmit_delete.pngbin764 -> 0 bytes
-rw-r--r--dev/images/icons/transmit_edit.pngbin773 -> 0 bytes
-rw-r--r--dev/images/icons/transmit_error.pngbin821 -> 0 bytes
-rw-r--r--dev/images/icons/transmit_go.pngbin777 -> 0 bytes
-rw-r--r--dev/images/icons/tux.pngbin638 -> 0 bytes
-rw-r--r--dev/images/icons/user.pngbin685 -> 0 bytes
-rw-r--r--dev/images/icons/user_add.pngbin691 -> 0 bytes
-rw-r--r--dev/images/icons/user_comment.pngbin683 -> 0 bytes
-rw-r--r--dev/images/icons/user_delete.pngbin713 -> 0 bytes
-rw-r--r--dev/images/icons/user_edit.pngbin779 -> 0 bytes
-rw-r--r--dev/images/icons/user_female.pngbin606 -> 0 bytes
-rw-r--r--dev/images/icons/user_go.pngbin738 -> 0 bytes
-rw-r--r--dev/images/icons/user_gray.pngbin650 -> 0 bytes
-rw-r--r--dev/images/icons/user_green.pngbin668 -> 0 bytes
-rw-r--r--dev/images/icons/user_orange.pngbin666 -> 0 bytes
-rw-r--r--dev/images/icons/user_red.pngbin660 -> 0 bytes
-rw-r--r--dev/images/icons/user_suit.pngbin693 -> 0 bytes
-rw-r--r--dev/images/icons/vcard.pngbin533 -> 0 bytes
-rw-r--r--dev/images/icons/vcard_add.pngbin627 -> 0 bytes
-rw-r--r--dev/images/icons/vcard_delete.pngbin646 -> 0 bytes
-rw-r--r--dev/images/icons/vcard_edit.pngbin747 -> 0 bytes
-rw-r--r--dev/images/icons/vector.pngbin448 -> 0 bytes
-rw-r--r--dev/images/icons/vector_add.pngbin580 -> 0 bytes
-rw-r--r--dev/images/icons/vector_delete.pngbin601 -> 0 bytes
-rw-r--r--dev/images/icons/wand.pngbin518 -> 0 bytes
-rw-r--r--dev/images/icons/weather_clouds.pngbin523 -> 0 bytes
-rw-r--r--dev/images/icons/weather_cloudy.pngbin636 -> 0 bytes
-rw-r--r--dev/images/icons/weather_lightning.pngbin586 -> 0 bytes
-rw-r--r--dev/images/icons/weather_rain.pngbin586 -> 0 bytes
-rw-r--r--dev/images/icons/weather_snow.pngbin341 -> 0 bytes
-rw-r--r--dev/images/icons/weather_sun.pngbin564 -> 0 bytes
-rw-r--r--dev/images/icons/webcam.pngbin700 -> 0 bytes
-rw-r--r--dev/images/icons/webcam_add.pngbin731 -> 0 bytes
-rw-r--r--dev/images/icons/webcam_delete.pngbin751 -> 0 bytes
-rw-r--r--dev/images/icons/webcam_error.pngbin770 -> 0 bytes
-rw-r--r--dev/images/icons/world.pngbin888 -> 0 bytes
-rw-r--r--dev/images/icons/world_add.pngbin906 -> 0 bytes
-rw-r--r--dev/images/icons/world_delete.pngbin925 -> 0 bytes
-rw-r--r--dev/images/icons/world_edit.pngbin891 -> 0 bytes
-rw-r--r--dev/images/icons/world_go.pngbin928 -> 0 bytes
-rw-r--r--dev/images/icons/world_link.pngbin918 -> 0 bytes
-rw-r--r--dev/images/icons/wrench.pngbin551 -> 0 bytes
-rw-r--r--dev/images/icons/wrench_orange.pngbin525 -> 0 bytes
-rw-r--r--dev/images/icons/xhtml.pngbin595 -> 0 bytes
-rw-r--r--dev/images/icons/xhtml_add.pngbin680 -> 0 bytes
-rw-r--r--dev/images/icons/xhtml_delete.pngbin696 -> 0 bytes
-rw-r--r--dev/images/icons/xhtml_go.pngbin697 -> 0 bytes
-rw-r--r--dev/images/icons/xhtml_valid.pngbin718 -> 0 bytes
-rw-r--r--dev/images/icons/zoom.pngbin662 -> 0 bytes
-rw-r--r--dev/images/icons/zoom_in.pngbin668 -> 0 bytes
-rw-r--r--dev/images/icons/zoom_out.pngbin651 -> 0 bytes
-rw-r--r--dev/images/logo/logo_baseline.psdbin76248 -> 0 bytes
-rw-r--r--dev/images/logo/logo_rendered.pngbin8615 -> 0 bytes
-rw-r--r--dev/images/logo/logo_vector.ai222
-rw-r--r--dev/images/placeholders/jingle_audio_local.psdbin55994 -> 0 bytes
-rw-r--r--dev/images/placeholders/jingle_audio_remote.psdbin375575 -> 0 bytes
-rw-r--r--dev/images/placeholders/jingle_video_local.psdbin58201 -> 0 bytes
-rw-r--r--dev/images/placeholders/jingle_video_remote.psdbin375103 -> 0 bytes
-rw-r--r--dev/images/sprites/animate.psdbin74591 -> 0 bytes
-rw-r--r--dev/images/sprites/archives.psdbin41148 -> 0 bytes
-rw-r--r--dev/images/sprites/background.svg137
-rw-r--r--dev/images/sprites/browsers.psdbin58807 -> 0 bytes
-rw-r--r--dev/images/sprites/buttons.psdbin22274 -> 0 bytes
-rw-r--r--dev/images/sprites/call.psdbin371797 -> 0 bytes
-rw-r--r--dev/images/sprites/home.psdbin174650 -> 0 bytes
-rw-r--r--dev/images/sprites/install.psdbin92355 -> 0 bytes
-rw-r--r--dev/images/sprites/manager.psdbin217038 -> 0 bytes
-rw-r--r--dev/images/sprites/me.psdbin65226 -> 0 bytes
-rw-r--r--dev/images/sprites/mini.psdbin122941 -> 0 bytes
-rw-r--r--dev/images/sprites/mobile.psdbin47660 -> 0 bytes
-rw-r--r--dev/images/sprites/smileys.psdbin101911 -> 0 bytes
-rw-r--r--dev/images/sprites/talk.psdbin305151 -> 0 bytes
-rw-r--r--dev/images/sprites/welcome.psdbin179580 -> 0 bytes
-rw-r--r--favicon.icobin1150 -> 0 bytes
-rw-r--r--i18n/.htaccess2
-rw-r--r--i18n/ar/LC_MESSAGES/main.mobin12574 -> 0 bytes
-rw-r--r--i18n/ar/LC_MESSAGES/main.po2266
-rw-r--r--i18n/bg/LC_MESSAGES/main.mobin62964 -> 0 bytes
-rw-r--r--i18n/bg/LC_MESSAGES/main.po2521
-rw-r--r--i18n/cs/LC_MESSAGES/main.mobin57309 -> 0 bytes
-rw-r--r--i18n/cs/LC_MESSAGES/main.po2402
-rw-r--r--i18n/de/LC_MESSAGES/main.mobin57297 -> 0 bytes
-rw-r--r--i18n/de/LC_MESSAGES/main.po2431
-rw-r--r--i18n/en/LC_MESSAGES/main.pot2197
-rw-r--r--i18n/eo/LC_MESSAGES/main.mobin45524 -> 0 bytes
-rw-r--r--i18n/eo/LC_MESSAGES/main.po2382
-rw-r--r--i18n/es/LC_MESSAGES/main.mobin54645 -> 0 bytes
-rw-r--r--i18n/es/LC_MESSAGES/main.po2414
-rw-r--r--i18n/et/LC_MESSAGES/main.mobin54558 -> 0 bytes
-rw-r--r--i18n/et/LC_MESSAGES/main.po2393
-rw-r--r--i18n/fa/LC_MESSAGES/main.mobin39086 -> 0 bytes
-rw-r--r--i18n/fa/LC_MESSAGES/main.po2286
-rw-r--r--i18n/fr/LC_MESSAGES/main.mobin60699 -> 0 bytes
-rw-r--r--i18n/fr/LC_MESSAGES/main.po2544
-rw-r--r--i18n/he/LC_MESSAGES/main.mobin65228 -> 0 bytes
-rw-r--r--i18n/he/LC_MESSAGES/main.po2453
-rw-r--r--i18n/hu/LC_MESSAGES/main.mobin47429 -> 0 bytes
-rw-r--r--i18n/hu/LC_MESSAGES/main.po2382
-rw-r--r--i18n/id/LC_MESSAGES/main.mobin47599 -> 0 bytes
-rw-r--r--i18n/id/LC_MESSAGES/main.po2402
-rw-r--r--i18n/it/LC_MESSAGES/main.mobin54641 -> 0 bytes
-rw-r--r--i18n/it/LC_MESSAGES/main.po2417
-rw-r--r--i18n/ja/LC_MESSAGES/main.mobin51552 -> 0 bytes
-rw-r--r--i18n/ja/LC_MESSAGES/main.po2362
-rw-r--r--i18n/lb/LC_MESSAGES/main.mobin58571 -> 0 bytes
-rw-r--r--i18n/lb/LC_MESSAGES/main.po2533
-rw-r--r--i18n/mn/LC_MESSAGES/main.mobin20877 -> 0 bytes
-rw-r--r--i18n/mn/LC_MESSAGES/main.po2261
-rw-r--r--i18n/nl/LC_MESSAGES/main.mobin34011 -> 0 bytes
-rw-r--r--i18n/nl/LC_MESSAGES/main.po2417
-rw-r--r--i18n/oc/LC_MESSAGES/main.mobin13070 -> 0 bytes
-rw-r--r--i18n/oc/LC_MESSAGES/main.po2276
-rw-r--r--i18n/pl/LC_MESSAGES/main.mobin54503 -> 0 bytes
-rw-r--r--i18n/pl/LC_MESSAGES/main.po2406
-rw-r--r--i18n/pt-br/LC_MESSAGES/main.mobin46839 -> 0 bytes
-rw-r--r--i18n/pt-br/LC_MESSAGES/main.po2378
-rw-r--r--i18n/pt/LC_MESSAGES/main.mobin50622 -> 0 bytes
-rw-r--r--i18n/pt/LC_MESSAGES/main.po2396
-rw-r--r--i18n/ru/LC_MESSAGES/main.mobin72193 -> 0 bytes
-rw-r--r--i18n/ru/LC_MESSAGES/main.po2411
-rw-r--r--i18n/sk/LC_MESSAGES/main.mobin40779 -> 0 bytes
-rw-r--r--i18n/sk/LC_MESSAGES/main.po2350
-rw-r--r--i18n/sv/LC_MESSAGES/main.mobin27897 -> 0 bytes
-rw-r--r--i18n/sv/LC_MESSAGES/main.po2291
-rw-r--r--i18n/tr/LC_MESSAGES/main.mobin48018 -> 0 bytes
-rw-r--r--i18n/tr/LC_MESSAGES/main.po2375
-rw-r--r--i18n/uk/LC_MESSAGES/main.mobin18746 -> 0 bytes
-rw-r--r--i18n/uk/LC_MESSAGES/main.po2267
-rw-r--r--i18n/uz/LC_MESSAGES/main.mobin29793 -> 0 bytes
-rw-r--r--i18n/uz/LC_MESSAGES/main.po2274
-rw-r--r--i18n/vi/LC_MESSAGES/main.mobin44866 -> 0 bytes
-rw-r--r--i18n/vi/LC_MESSAGES/main.po2387
-rw-r--r--i18n/zh-cn/LC_MESSAGES/main.mobin47219 -> 0 bytes
-rw-r--r--i18n/zh-cn/LC_MESSAGES/main.po2298
-rw-r--r--i18n/zh-tw/LC_MESSAGES/main.mobin47235 -> 0 bytes
-rw-r--r--i18n/zh-tw/LC_MESSAGES/main.po2298
-rw-r--r--images/logo.pngbin0 -> 4543 bytes
-rw-r--r--index.php103
-rw-r--r--log/.htaccess2
-rw-r--r--misc/certs/00673b5b.025
-rw-r--r--misc/certs/024dc131.043
-rw-r--r--misc/certs/02b73561.025
-rw-r--r--misc/certs/039c618a.025
-rw-r--r--misc/certs/03f0efa4.023
-rw-r--r--misc/certs/052e396b.025
-rw-r--r--misc/certs/062cdee6.021
-rw-r--r--misc/certs/080911ac.034
-rw-r--r--misc/certs/0810ba98.037
-rw-r--r--misc/certs/08aef7bb.028
-rw-r--r--misc/certs/09789157.024
-rw-r--r--misc/certs/0b759015.022
-rw-r--r--misc/certs/0c4c9b6c.041
-rw-r--r--misc/certs/0d188d89.022
-rw-r--r--misc/certs/0d1b923b.026
-rw-r--r--misc/certs/10531352.024
-rw-r--r--misc/certs/111e6273.022
-rw-r--r--misc/certs/1155c94b.026
-rw-r--r--misc/certs/116bf586.017
-rw-r--r--misc/certs/119afc2e.029
-rw-r--r--misc/certs/11a09b38.030
-rw-r--r--misc/certs/11f154d6.024
-rw-r--r--misc/certs/124bbd54.025
-rw-r--r--misc/certs/128805a3.024
-rw-r--r--misc/certs/12d55845.020
-rw-r--r--misc/certs/157753a5.025
-rw-r--r--misc/certs/1636090b.025
-rw-r--r--misc/certs/17b51fe6.022
-rw-r--r--misc/certs/18856ac4.021
-rw-r--r--misc/certs/1dac3003.024
-rw-r--r--misc/certs/1dcd6f4c.032
-rw-r--r--misc/certs/1df5ec47.023
-rw-r--r--misc/certs/1e1eab7c.023
-rw-r--r--misc/certs/1e8e7201.021
-rw-r--r--misc/certs/1eb37bdf.042
-rw-r--r--misc/certs/1ec4d31a.019
-rw-r--r--misc/certs/201cada0.033
-rw-r--r--misc/certs/20d096ba.018
-rw-r--r--misc/certs/219d9499.024
-rw-r--r--misc/certs/2251b13a.022
-rw-r--r--misc/certs/23f4c490.024
-rw-r--r--misc/certs/244b5494.023
-rw-r--r--misc/certs/24ad0b63.014
-rw-r--r--misc/certs/27af790d.017
-rw-r--r--misc/certs/2a4b3efc.037
-rw-r--r--misc/certs/2ab3b959.031
-rw-r--r--misc/certs/2afc57aa.027
-rw-r--r--misc/certs/2b349938.020
-rw-r--r--misc/certs/2c543cd1.020
-rw-r--r--misc/certs/2cfc4974.030
-rw-r--r--misc/certs/2d9dafe4.031
-rw-r--r--misc/certs/2e4eed3c.025
-rw-r--r--misc/certs/2e5ac55d.020
-rw-r--r--misc/certs/2edf7016.014
-rw-r--r--misc/certs/2fa87019.023
-rw-r--r--misc/certs/2fb1850a.033
-rw-r--r--misc/certs/33815e15.043
-rw-r--r--misc/certs/343eb6cb.022
-rw-r--r--misc/certs/349f2832.031
-rw-r--r--misc/certs/3513523f.022
-rw-r--r--misc/certs/381ce4dd.033
-rw-r--r--misc/certs/399e7759.022
-rw-r--r--misc/certs/3a3b02ce.024
-rw-r--r--misc/certs/3ad48a91.021
-rw-r--r--misc/certs/3b2716e5.034
-rw-r--r--misc/certs/3bde41ac.035
-rw-r--r--misc/certs/3c58f906.025
-rw-r--r--misc/certs/3c860d51.033
-rw-r--r--misc/certs/3d441de8.033
-rw-r--r--misc/certs/3e45d192.020
-rw-r--r--misc/certs/3e7271e8.026
-rw-r--r--misc/certs/3ee7e181.024
-rw-r--r--misc/certs/40547a79.025
-rw-r--r--misc/certs/408e388a.024
-rw-r--r--misc/certs/40dc992e.025
-rw-r--r--misc/certs/415660c1.014
-rw-r--r--misc/certs/418595b9.030
-rw-r--r--misc/certs/4304c5e5.023
-rw-r--r--misc/certs/442adcac.019
-rw-r--r--misc/certs/4597689c.019
-rw-r--r--misc/certs/46b2fd3b.033
-rw-r--r--misc/certs/480720ec.021
-rw-r--r--misc/certs/48a195d8.034
-rw-r--r--misc/certs/48bec511.022
-rw-r--r--misc/certs/4a6481c9.022
-rw-r--r--misc/certs/4bfab552.023
-rw-r--r--misc/certs/4d654d1d.015
-rw-r--r--misc/certs/4e18c148.022
-rw-r--r--misc/certs/4f316efb.033
-rw-r--r--misc/certs/4fbd6bfa.026
-rw-r--r--misc/certs/5021a0a2.023
-rw-r--r--misc/certs/5046c355.033
-rw-r--r--misc/certs/524d9b43.028
-rw-r--r--misc/certs/5443e9e3.023
-rw-r--r--misc/certs/54657681.031
-rw-r--r--misc/certs/55a10908.018
-rw-r--r--misc/certs/5620c4aa.027
-rw-r--r--misc/certs/56657bde.025
-rw-r--r--misc/certs/56b8a0b6.025
-rw-r--r--misc/certs/56e29e75.046
-rw-r--r--misc/certs/57692373.021
-rw-r--r--misc/certs/578d5c04.019
-rw-r--r--misc/certs/57bbd831.022
-rw-r--r--misc/certs/57bcb2da.033
-rw-r--r--misc/certs/58a44af1.024
-rw-r--r--misc/certs/590d426f.083
-rw-r--r--misc/certs/594f1775.019
-rw-r--r--misc/certs/5a3f0ff8.025
-rw-r--r--misc/certs/5a5372fc.031
-rw-r--r--misc/certs/5ad8a5d6.021
-rw-r--r--misc/certs/5c44d531.033
-rw-r--r--misc/certs/5cf9d536.034
-rw-r--r--misc/certs/5e4e69e7.021
-rw-r--r--misc/certs/5ed36f99.083
-rw-r--r--misc/certs/5f267794.028
-rw-r--r--misc/certs/5f47b495.033
-rw-r--r--misc/certs/60afe812.024
-rw-r--r--misc/certs/635ccfd5.031
-rw-r--r--misc/certs/6410666e.032
-rw-r--r--misc/certs/653b494a.021
-rw-r--r--misc/certs/656b3e35.025
-rw-r--r--misc/certs/65b876bd.030
-rw-r--r--misc/certs/667c66d4.034
-rw-r--r--misc/certs/67495436.025
-rw-r--r--misc/certs/67d559d1.019
-rw-r--r--misc/certs/69105f4f.022
-rw-r--r--misc/certs/6adf0799.023
-rw-r--r--misc/certs/6b99d060.027
-rw-r--r--misc/certs/6cc3c4c3.019
-rw-r--r--misc/certs/6e52cc39.025
-rw-r--r--misc/certs/6e8bf996.019
-rw-r--r--misc/certs/6f2c1157.037
-rw-r--r--misc/certs/6fcc125d.022
-rw-r--r--misc/certs/706f604c.025
-rw-r--r--misc/certs/72f369af.020
-rw-r--r--misc/certs/72fa7371.019
-rw-r--r--misc/certs/74c26bd0.016
-rw-r--r--misc/certs/755f7420.019
-rw-r--r--misc/certs/75680d2e.025
-rw-r--r--misc/certs/7651b327.014
-rw-r--r--misc/certs/76579174.025
-rw-r--r--misc/certs/7672ac4b.032
-rw-r--r--misc/certs/76cb8f92.022
-rw-r--r--misc/certs/76faf6c0.038
-rw-r--r--misc/certs/778e3cb0.026
-rw-r--r--misc/certs/790a7190.024
-rw-r--r--misc/certs/7999be0d.020
-rw-r--r--misc/certs/79ad8b43.016
-rw-r--r--misc/certs/7a481e66.027
-rw-r--r--misc/certs/7a819ef2.033
-rw-r--r--misc/certs/7d0b38bd.021
-rw-r--r--misc/certs/7d3cd826.018
-rw-r--r--misc/certs/7d453d8f.024
-rw-r--r--misc/certs/7d5a75e4.028
-rw-r--r--misc/certs/812e17de.022
-rw-r--r--misc/certs/8160b96c.024
-rw-r--r--misc/certs/81b9768f.023
-rw-r--r--misc/certs/82223c44.031
-rw-r--r--misc/certs/8317b10c.039
-rw-r--r--misc/certs/8470719d.021
-rw-r--r--misc/certs/84cba82f.024
-rw-r--r--misc/certs/85cde254.023
-rw-r--r--misc/certs/861a399d.024
-rw-r--r--misc/certs/861e0100.039
-rw-r--r--misc/certs/86212b19.020
-rw-r--r--misc/certs/876f1e28.031
-rw-r--r--misc/certs/87753b0d.031
-rw-r--r--misc/certs/882de061.020
-rw-r--r--misc/certs/8867006a.031
-rw-r--r--misc/certs/88f89ea7.024
-rw-r--r--misc/certs/895cad1a.020
-rw-r--r--misc/certs/89c02a45.016
-rw-r--r--misc/certs/8b59b1ad.024
-rw-r--r--misc/certs/8d86cdd1.020
-rw-r--r--misc/certs/8e52d3cd.020
-rw-r--r--misc/certs/8f7b96c4.019
-rw-r--r--misc/certs/91739615.024
-rw-r--r--misc/certs/930ac5d2.033
-rw-r--r--misc/certs/9339512a.038
-rw-r--r--misc/certs/93bc0acc.020
-rw-r--r--misc/certs/95aff9e3.022
-rw-r--r--misc/certs/9685a493.020
-rw-r--r--misc/certs/9772ca32.021
-rw-r--r--misc/certs/9818ca0b.023
-rw-r--r--misc/certs/988a38cb.024
-rw-r--r--misc/certs/98ec67f0.019
-rw-r--r--misc/certs/99d0fa06.083
-rw-r--r--misc/certs/9a3db647.037
-rw-r--r--misc/certs/9af9f759.018
-rw-r--r--misc/certs/9b353c9a.025
-rw-r--r--misc/certs/9c2e7d30.019
-rw-r--r--misc/certs/9c472bf7.023
-rw-r--r--misc/certs/9c8dfbd4.013
-rw-r--r--misc/certs/9d520b32.021
-rw-r--r--misc/certs/9d6523ce.033
-rw-r--r--misc/certs/9dbefe7b.021
-rw-r--r--misc/certs/9ec3a561.027
-rw-r--r--misc/certs/9f533518.041
-rw-r--r--misc/certs/9f541fb4.019
-rw-r--r--misc/certs/A-Trust-nQual-03.pem23
-rw-r--r--misc/certs/ACEDICOM_Root.pem33
-rw-r--r--misc/certs/AC_Raíz_Certicámara_S.A..pem37
-rw-r--r--misc/certs/Actalis_Authentication_Root_CA.pem33
-rw-r--r--misc/certs/AddTrust_External_Root.pem25
-rw-r--r--misc/certs/AddTrust_Low-Value_Services_Root.pem24
-rw-r--r--misc/certs/AddTrust_Public_Services_Root.pem24
-rw-r--r--misc/certs/AddTrust_Qualified_Certificates_Root.pem25
-rw-r--r--misc/certs/AffirmTrust_Commercial.pem20
-rw-r--r--misc/certs/AffirmTrust_Networking.pem20
-rw-r--r--misc/certs/AffirmTrust_Premium.pem31
-rw-r--r--misc/certs/AffirmTrust_Premium_ECC.pem13
-rw-r--r--misc/certs/America_Online_Root_Certification_Authority_1.pem22
-rw-r--r--misc/certs/America_Online_Root_Certification_Authority_2.pem33
-rw-r--r--misc/certs/ApplicationCA_-_Japanese_Government.pem22
-rw-r--r--misc/certs/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.pem35
-rw-r--r--misc/certs/Baltimore_CyberTrust_Root.pem21
-rw-r--r--misc/certs/Buypass_Class_2_CA_1.pem20
-rw-r--r--misc/certs/Buypass_Class_2_Root_CA.pem31
-rw-r--r--misc/certs/Buypass_Class_3_CA_1.pem20
-rw-r--r--misc/certs/Buypass_Class_3_Root_CA.pem31
-rw-r--r--misc/certs/CA_Disig.pem24
-rw-r--r--misc/certs/CNNIC_ROOT.pem20
-rw-r--r--misc/certs/COMODO_Certification_Authority.pem25
-rw-r--r--misc/certs/COMODO_ECC_Certification_Authority.pem16
-rw-r--r--misc/certs/Camerfirma_Chambers_of_Commerce_Root.pem28
-rw-r--r--misc/certs/Camerfirma_Global_Chambersign_Root.pem28
-rw-r--r--misc/certs/Certigna.pem22
-rw-r--r--misc/certs/Certinomis_-_Autorité_Racine.pem32
-rw-r--r--misc/certs/Certplus_Class_2_Primary_CA.pem22
-rw-r--r--misc/certs/Certum_Root_CA.pem19
-rw-r--r--misc/certs/Certum_Trusted_Network_CA.pem22
-rw-r--r--misc/certs/Chambers_of_Commerce_Root_-_2008.pem42
-rw-r--r--misc/certs/ComSign_CA.pem22
-rw-r--r--misc/certs/ComSign_Secured_CA.pem22
-rw-r--r--misc/certs/Comodo_AAA_Services_root.pem25
-rw-r--r--misc/certs/Comodo_Secure_Services_root.pem25
-rw-r--r--misc/certs/Comodo_Trusted_Services_root.pem25
-rw-r--r--misc/certs/Cybertrust_Global_Root.pem22
-rw-r--r--misc/certs/DST_ACES_CA_X6.pem24
-rw-r--r--misc/certs/DST_Root_CA_X3.pem20
-rw-r--r--misc/certs/Deutsche_Telekom_Root_CA_2.pem22
-rw-r--r--misc/certs/DigiCert_Assured_ID_Root_CA.pem22
-rw-r--r--misc/certs/DigiCert_Global_Root_CA.pem22
-rw-r--r--misc/certs/DigiCert_High_Assurance_EV_Root_CA.pem23
-rw-r--r--misc/certs/Digital_Signature_Trust_Co._Global_CA_1.pem19
-rw-r--r--misc/certs/Digital_Signature_Trust_Co._Global_CA_3.pem19
-rw-r--r--misc/certs/E-Guven_Kok_Elektronik_Sertifika_Hizmet_Saglayicisi.pem22
-rw-r--r--misc/certs/EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.pem34
-rw-r--r--misc/certs/EC-ACC.pem31
-rw-r--r--misc/certs/EE_Certification_Centre_Root_CA.pem24
-rw-r--r--misc/certs/Entrust.net_Premium_2048_Secure_Server_CA.pem26
-rw-r--r--misc/certs/Entrust.net_Secure_Server_CA.pem28
-rw-r--r--misc/certs/Entrust_Root_Certification_Authority.pem27
-rw-r--r--misc/certs/Equifax_Secure_CA.pem19
-rw-r--r--misc/certs/Equifax_Secure_Global_eBusiness_CA.pem16
-rw-r--r--misc/certs/Equifax_Secure_eBusiness_CA_1.pem16
-rw-r--r--misc/certs/Equifax_Secure_eBusiness_CA_2.pem19
-rw-r--r--misc/certs/Firmaprofesional_Root_CA.pem26
-rw-r--r--misc/certs/GTE_CyberTrust_Global_Root.pem15
-rw-r--r--misc/certs/GeoTrust_Global_CA.pem20
-rw-r--r--misc/certs/GeoTrust_Global_CA_2.pem21
-rw-r--r--misc/certs/GeoTrust_Primary_Certification_Authority.pem21
-rw-r--r--misc/certs/GeoTrust_Primary_Certification_Authority_-_G2.pem17
-rw-r--r--misc/certs/GeoTrust_Primary_Certification_Authority_-_G3.pem24
-rw-r--r--misc/certs/GeoTrust_Universal_CA.pem31
-rw-r--r--misc/certs/GeoTrust_Universal_CA_2.pem31
-rw-r--r--misc/certs/GlobalSign_Root_CA.pem21
-rw-r--r--misc/certs/GlobalSign_Root_CA_-_R2.pem22
-rw-r--r--misc/certs/GlobalSign_Root_CA_-_R3.pem21
-rw-r--r--misc/certs/Global_Chambersign_Root_-_2008.pem41
-rw-r--r--misc/certs/Go_Daddy_Class_2_CA.pem24
-rw-r--r--misc/certs/Go_Daddy_Root_Certificate_Authority_-_G2.pem23
-rw-r--r--misc/certs/Hellenic_Academic_and_Research_Institutions_RootCA_2011.pem25
-rw-r--r--misc/certs/Hongkong_Post_Root_CA_1.pem20
-rw-r--r--misc/certs/IGC_A.pem24
-rw-r--r--misc/certs/Izenpe.com.pem34
-rw-r--r--misc/certs/Juur-SK.pem29
-rw-r--r--misc/certs/Microsec_e-Szigno_Root_CA.pem43
-rw-r--r--misc/certs/Microsec_e-Szigno_Root_CA_2009.pem24
-rw-r--r--misc/certs/NetLock_Arany_=Class_Gold=_Főtanúsítvány.pem24
-rw-r--r--misc/certs/NetLock_Business_=Class_B=_Root.pem31
-rw-r--r--misc/certs/NetLock_Express_=Class_C=_Root.pem31
-rw-r--r--misc/certs/NetLock_Notary_=Class_A=_Root.pem37
-rw-r--r--misc/certs/NetLock_Qualified_=Class_QA=_Root.pem39
-rw-r--r--misc/certs/Network_Solutions_Certificate_Authority.pem23
-rw-r--r--misc/certs/OISTE_WISeKey_Global_Root_GA_CA.pem24
-rw-r--r--misc/certs/QuoVadis_Root_CA.pem34
-rw-r--r--misc/certs/QuoVadis_Root_CA_2.pem33
-rw-r--r--misc/certs/QuoVadis_Root_CA_3.pem38
-rw-r--r--misc/certs/RSA_Root_Certificate_1.pem18
-rw-r--r--misc/certs/RSA_Security_2048_v3.pem21
-rw-r--r--misc/certs/Root_CA_Generalitat_Valenciana.pem37
-rw-r--r--misc/certs/S-TRUST_Authentication_and_Encryption_Root_CA_2005_PN.pem26
-rw-r--r--misc/certs/SecureSign_RootCA11.pem21
-rw-r--r--misc/certs/SecureTrust_CA.pem22
-rw-r--r--misc/certs/Secure_Global_CA.pem22
-rw-r--r--misc/certs/Security_Communication_EV_RootCA1.pem21
-rw-r--r--misc/certs/Security_Communication_RootCA2.pem21
-rw-r--r--misc/certs/Security_Communication_Root_CA.pem20
-rw-r--r--misc/certs/Sonera_Class_1_Root_CA.pem19
-rw-r--r--misc/certs/Sonera_Class_2_Root_CA.pem19
-rw-r--r--misc/certs/Staat_der_Nederlanden_Root_CA.pem22
-rw-r--r--misc/certs/Staat_der_Nederlanden_Root_CA_-_G2.pem33
-rw-r--r--misc/certs/Starfield_Class_2_CA.pem24
-rw-r--r--misc/certs/Starfield_Root_Certificate_Authority_-_G2.pem23
-rw-r--r--misc/certs/Starfield_Services_Root_Certificate_Authority_-_G2.pem24
-rw-r--r--misc/certs/StartCom_Certification_Authority_G2.pem31
-rw-r--r--misc/certs/Startcom_Certification_Authority.pem43
-rw-r--r--misc/certs/SwissSign_Gold_CA_-_G2.pem33
-rw-r--r--misc/certs/SwissSign_Platinum_CA_-_G2.pem33
-rw-r--r--misc/certs/SwissSign_Silver_CA_-_G2.pem33
-rw-r--r--misc/certs/Swisscom_Root_CA_1.pem34
-rw-r--r--misc/certs/T-TeleSec_GlobalRoot_Class_3.pem23
-rw-r--r--misc/certs/TC_TrustCenter_Class_2_CA_II.pem27
-rw-r--r--misc/certs/TC_TrustCenter_Class_3_CA_II.pem27
-rw-r--r--misc/certs/TC_TrustCenter_Universal_CA_I.pem23
-rw-r--r--misc/certs/TC_TrustCenter_Universal_CA_III.pem23
-rw-r--r--misc/certs/TDC_Internet_Root_CA.pem25
-rw-r--r--misc/certs/TDC_OCES_Root_CA.pem30
-rw-r--r--misc/certs/TURKTRUST_Certificate_Services_Provider_Root_1.pem24
-rw-r--r--misc/certs/TURKTRUST_Certificate_Services_Provider_Root_2.pem25
-rw-r--r--misc/certs/TÜBİTAK_UEKAE_Kök_Sertifika_Hizmet_Sağlayıcısı_-_Sürüm_3.pem30
-rw-r--r--misc/certs/TWCA_Root_Certification_Authority.pem21
-rw-r--r--misc/certs/Taiwan_GRCA.pem32
-rw-r--r--misc/certs/Thawte_Premium_Server_CA.pem19
-rw-r--r--misc/certs/Thawte_Server_CA.pem19
-rw-r--r--misc/certs/Trustis_FPS_Root_CA.pem21
-rw-r--r--misc/certs/UTN_DATACorp_SGC_Root_CA.pem26
-rw-r--r--misc/certs/UTN_USERFirst_Email_Root_CA.pem27
-rw-r--r--misc/certs/UTN_USERFirst_Hardware_Root_CA.pem26
-rw-r--r--misc/certs/ValiCert_Class_1_VA.pem18
-rw-r--r--misc/certs/ValiCert_Class_2_VA.pem18
-rw-r--r--misc/certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G4.pem21
-rw-r--r--misc/certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.pem28
-rw-r--r--misc/certs/VeriSign_Universal_Root_Certification_Authority.pem28
-rw-r--r--misc/certs/Verisign_Class_1_Public_Primary_Certification_Authority.pem14
-rw-r--r--misc/certs/Verisign_Class_1_Public_Primary_Certification_Authority_-_G2.pem19
-rw-r--r--misc/certs/Verisign_Class_1_Public_Primary_Certification_Authority_-_G3.pem24
-rw-r--r--misc/certs/Verisign_Class_2_Public_Primary_Certification_Authority_-_G2.pem19
-rw-r--r--misc/certs/Verisign_Class_2_Public_Primary_Certification_Authority_-_G3.pem24
-rw-r--r--misc/certs/Verisign_Class_3_Public_Primary_Certification_Authority.pem14
-rw-r--r--misc/certs/Verisign_Class_3_Public_Primary_Certification_Authority_-_G2.pem19
-rw-r--r--misc/certs/Verisign_Class_3_Public_Primary_Certification_Authority_-_G3.pem24
-rw-r--r--misc/certs/Verisign_Class_4_Public_Primary_Certification_Authority_-_G3.pem24
-rw-r--r--misc/certs/Visa_eCommerce_Root.pem22
-rw-r--r--misc/certs/WellsSecure_Public_Root_Certificate_Authority.pem28
-rw-r--r--misc/certs/Wells_Fargo_Root_CA.pem23
-rw-r--r--misc/certs/XRamp_Global_CA_Root.pem25
-rw-r--r--misc/certs/a0bc6fbb.028
-rw-r--r--misc/certs/a15b3b6b.019
-rw-r--r--misc/certs/a2df7ad7.024
-rw-r--r--misc/certs/a3896b44.020
-rw-r--r--misc/certs/a5fd78f0.027
-rw-r--r--misc/certs/a6a593ba.019
-rw-r--r--misc/certs/a7605362.019
-rw-r--r--misc/certs/a760e1bd.022
-rw-r--r--misc/certs/a7d2cf64.016
-rw-r--r--misc/certs/a8dee976.033
-rw-r--r--misc/certs/ab5346f4.021
-rw-r--r--misc/certs/ad088e1d.031
-rw-r--r--misc/certs/add67345.037
-rw-r--r--misc/certs/ae8153b9.043
-rw-r--r--misc/certs/aeb67534.031
-rw-r--r--misc/certs/aee5f10d.026
-rw-r--r--misc/certs/b097d71d.024
-rw-r--r--misc/certs/b0f3e76e.021
-rw-r--r--misc/certs/b1159c4c.022
-rw-r--r--misc/certs/b13cc6df.026
-rw-r--r--misc/certs/b1b8a7f3.024
-rw-r--r--misc/certs/b204d74a.028
-rw-r--r--misc/certs/b42ff584.022
-rw-r--r--misc/certs/b66938e9.022
-rw-r--r--misc/certs/b6c5745d.024
-rw-r--r--misc/certs/b727005e.031
-rw-r--r--misc/certs/b7a5b843.021
-rw-r--r--misc/certs/b7db1890.021
-rw-r--r--misc/certs/b7e7231a.031
-rw-r--r--misc/certs/b8e83700.019
-rw-r--r--misc/certs/ba89ed3b.025
-rw-r--r--misc/certs/bad35b78.024
-rw-r--r--misc/certs/bb2d49a0.022
-rw-r--r--misc/certs/bc3f2570.023
-rw-r--r--misc/certs/bcdd5959.018
-rw-r--r--misc/certs/bd1910d4.020
-rw-r--r--misc/certs/bda4cc84.022
-rw-r--r--misc/certs/bdacca6f.022
-rw-r--r--misc/certs/bf64f35b.027
-rw-r--r--misc/certs/c01cdfa2.028
-rw-r--r--misc/certs/c089bbbd.016
-rw-r--r--misc/certs/c0ff1f52.024
-rw-r--r--misc/certs/c19d42c7.019
-rw-r--r--misc/certs/c215bc69.019
-rw-r--r--misc/certs/c33a80d4.019
-rw-r--r--misc/certs/c3a6a9ad.023
-rw-r--r--misc/certs/c47d9980.042
-rw-r--r--misc/certs/c51c224c.021
-rw-r--r--misc/certs/c527e4ab.024
-rw-r--r--misc/certs/c5e082db.027
-rw-r--r--misc/certs/c692a373.015
-rw-r--r--misc/certs/c7e2a638.024
-rw-r--r--misc/certs/c8763593.037
-rw-r--r--misc/certs/c8841d13.023
-rw-r--r--misc/certs/c99398f3.021
-rw-r--r--misc/certs/c9f83a1c.025
-rw-r--r--misc/certs/ca-certificates.crt4025
-rw-r--r--misc/certs/ca.pem25
-rw-r--r--misc/certs/ca6e4ad9.033
-rw-r--r--misc/certs/cacert.org.pem83
-rw-r--r--misc/certs/cb357862.019
-rw-r--r--misc/certs/cb59f961.028
-rw-r--r--misc/certs/cbeee9e2.021
-rw-r--r--misc/certs/cbf06781.023
-rw-r--r--misc/certs/cc450945.034
-rw-r--r--misc/certs/ccc52f49.013
-rw-r--r--misc/certs/cd58d51e.021
-rw-r--r--misc/certs/cdaebb72.022
-rw-r--r--misc/certs/ce026bf8.026
-rw-r--r--misc/certs/certSIGN_ROOT_CA.pem20
-rw-r--r--misc/certs/cf701eeb.022
-rw-r--r--misc/certs/cfa1c2ee.020
-rw-r--r--misc/certs/d16a5865.035
-rw-r--r--misc/certs/d537fba6.025
-rw-r--r--misc/certs/d59297b8.021
-rw-r--r--misc/certs/d64f06f3.024
-rw-r--r--misc/certs/d78a75c7.024
-rw-r--r--misc/certs/d7e8dc79.033
-rw-r--r--misc/certs/d853d49e.021
-rw-r--r--misc/certs/d957f522.032
-rw-r--r--misc/certs/d9d12c58.037
-rw-r--r--misc/certs/dbc54cab.031
-rw-r--r--misc/certs/dc45b0bd.024
-rw-r--r--misc/certs/ddc328ff.019
-rw-r--r--misc/certs/e113c810.022
-rw-r--r--misc/certs/e268a4c5.024
-rw-r--r--misc/certs/e2799e36.024
-rw-r--r--misc/certs/e48193cf.020
-rw-r--r--misc/certs/e536d871.025
-rw-r--r--misc/certs/e5662767.083
-rw-r--r--misc/certs/e60bf0c0.034
-rw-r--r--misc/certs/e775ed2d.031
-rw-r--r--misc/certs/e7b8d656.016
-rw-r--r--misc/certs/e8651083.024
-rw-r--r--misc/certs/e8de2f56.031
-rw-r--r--misc/certs/ePKI_Root_Certification_Authority.pem33
-rw-r--r--misc/certs/ea169617.033
-rw-r--r--misc/certs/eacdeb40.022
-rw-r--r--misc/certs/eb375c3e.020
-rw-r--r--misc/certs/ec87c655.046
-rw-r--r--misc/certs/ed524cf5.028
-rw-r--r--misc/certs/ed62f4e3.019
-rw-r--r--misc/certs/ee1365c0.024
-rw-r--r--misc/certs/ee64a828.025
-rw-r--r--misc/certs/ee7cd6fb.028
-rw-r--r--misc/certs/ee90b008.031
-rw-r--r--misc/certs/eed8c118.016
-rw-r--r--misc/certs/ef2f636c.016
-rw-r--r--misc/certs/f060240e.022
-rw-r--r--misc/certs/f081611a.024
-rw-r--r--misc/certs/f3377b1b.020
-rw-r--r--misc/certs/f387163d.024
-rw-r--r--misc/certs/f39fc864.022
-rw-r--r--misc/certs/f4996e82.018
-rw-r--r--misc/certs/f559733c.026
-rw-r--r--misc/certs/f58a60fe.022
-rw-r--r--misc/certs/f61bff45.043
-rw-r--r--misc/certs/f80cc7f6.034
-rw-r--r--misc/certs/f90208f7.028
-rw-r--r--misc/certs/fac084d7.022
-rw-r--r--misc/certs/facacbc6.028
-rw-r--r--misc/certs/fb126c6d.037
-rw-r--r--misc/certs/fcac10e3.029
-rw-r--r--misc/certs/fde84897.022
-rw-r--r--misc/certs/ff588423.022
-rw-r--r--misc/certs/ff783690.026
-rw-r--r--misc/certs/gandi-ca.crt37
-rw-r--r--misc/certs/spi-ca-2003.pem24
-rw-r--r--misc/certs/spi-cacert-2008.pem46
-rw-r--r--misc/certs/thawte_Primary_Root_CA.pem25
-rw-r--r--misc/certs/thawte_Primary_Root_CA_-_G2.pem16
-rw-r--r--misc/certs/thawte_Primary_Root_CA_-_G3.pem25
-rw-r--r--package.json33
-rw-r--r--server/analytics.php32
-rw-r--r--server/avatar-upload.php107
-rw-r--r--server/bosh.php171
-rw-r--r--server/captcha.php96
-rw-r--r--server/desktop.php264
-rw-r--r--server/download-chat.php54
-rw-r--r--server/download.php70
-rw-r--r--server/drawsvgchart.php495
-rw-r--r--server/file-share.php137
-rw-r--r--server/form-hosts.php73
-rw-r--r--server/form-main.php230
-rw-r--r--server/form-users.php30
-rw-r--r--server/functions-advertising.php73
-rw-r--r--server/functions-get.php320
-rw-r--r--server/functions-manager.php810
-rw-r--r--server/functions.php1713
-rw-r--r--server/generate-chat.php259
-rw-r--r--server/geolocation.php44
-rw-r--r--server/get-store.php38
-rw-r--r--server/get.php422
-rw-r--r--server/gettext.php948
-rw-r--r--server/install.php291
-rw-r--r--server/jingle.php67
-rw-r--r--server/jsmin.php375
-rw-r--r--server/manager.php847
-rw-r--r--server/mobile.php100
-rw-r--r--server/music-search.php109
-rw-r--r--server/post-design.php228
-rw-r--r--server/post-hosts.php153
-rw-r--r--server/post-main.php280
-rw-r--r--server/post-store.php102
-rw-r--r--server/post-users.php51
-rw-r--r--server/read-design.php127
-rw-r--r--server/read-hosts.php111
-rw-r--r--server/read-main.php112
-rw-r--r--server/register.php179
-rw-r--r--server/send.php138
-rw-r--r--server/srand.php151
-rw-r--r--server/static.php41
-rw-r--r--server/stats-svg.php103
-rw-r--r--server/store-tree.php52
-rw-r--r--server/upload.php41
-rw-r--r--server/vars-design.php49
-rw-r--r--server/vars-hosts.php38
-rw-r--r--server/vars-main.php54
-rw-r--r--server/vars-store.php29
-rwxr-xr-xstore/index.html14
-rw-r--r--test/.htaccess2
-rw-r--r--test/README.md8
-rw-r--r--tmp/.htaccess2
-rw-r--r--tmp/archives/.gitkeep0
-rw-r--r--tmp/avatar/.gitkeep0
-rw-r--r--tmp/cache/.gitkeep0
-rw-r--r--tmp/send/.gitkeep0
-rw-r--r--tools/.htaccess2
-rwxr-xr-xtools/extract_mini.sh236
1830 files changed, 0 insertions, 211939 deletions
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 4d24b1fb..00000000
--- a/.gitignore
+++ /dev/null
@@ -1,11 +0,0 @@
-mini/
-store/
-tmp/cache/
-tmp/jingle/
-tmp/avatar/
-tmp/archives/
-tmp/send/
-log/
-node_modules/
-.DS_Store
-*.esproj
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 339c55a4..00000000
--- a/.travis.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-language: php
-php:
- - 5.6
-node_js:
- - '0.10'
-before_script:
- - 'npm install -g grunt-cli'
-script: "npm test"
diff --git a/AUTHORS.md b/AUTHORS.md
deleted file mode 100644
index e79d7bd1..00000000
--- a/AUTHORS.md
+++ /dev/null
@@ -1,69 +0,0 @@
-Jappix Authors
-==============
-
-Here are the Jappix contributors, who coded or translated the application:
-
-
-Founders
---------
-
-* Valérian Saliou
-* Julien Barrier
-
-
-Developers
-----------
-
-* am0ur3ux
-* Camaran
-* Cyril "Kyriog" Glapa
-* hunterjm
-* LinkMauve
-* Maranda
-* Mathieui
-* Olivier
-* sim6
-
-
-Translators
------------
-
-* allan
-* Arsimael
-* Belzeneph
-* camaran
-* Catdarko
-* Cerritus
-* chunzu
-* ebraminio
-* Eraser
-* Finkregh
-* GenghisKhan
-* hamano
-* JanCBorchardt
-* jarda
-* joeka
-* kahpa
-* kr2ysiek
-* krohn
-* Lenwe
-* LinkMauve
-* Liverbool
-* lwj
-* m1st
-* Maime
-* Maranda
-* mbajur
-* mentalo
-* mkwm
-* Natureshadow
-* Och.Oyuka
-* Otourly
-* piotr.moskal
-* pocamon
-* quimi
-* sahwar
-* Valérian Saliou
-* vitalyster
-* zAchAry
-* Zash
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index 6447a63c..00000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,364 +0,0 @@
-Jappix Changelog
-================
-
-Here's the log of what has changed over the Jappix releases.
-
-
-Primo, v1.1.7 (Development)
----------------------------
-
- * (...)
-
-
-Primo, v1.1.6 (August 2015)
----------------------------
-
- * Security fix on paths check @valeriansaliou
-
-
-Primo, v1.1.5 (August 2015)
----------------------------
-
- * Critical file upload security fix @valeriansaliou, @mathiasertl
-
-
-Primo, v1.1.4 (April 2015)
----------------------------
-
- * Fix various issues @valeriansaliou
- * Fix XSS attack on dataforms @V1RTUOZ
-
-
-Primo, v1.1.3 (January 2015)
-----------------------------
-
- * Better default priorities @beanow, @valeriansaliou
- * Fix IE11+ browser compatibility @valeriansaliou
-
-
-Primo, v1.1.2 (October 2014)
-----------------------------
-
- * XEP-0353: Jingle Message Initiation @valeriansaliou
- * Fixes Jingle calls in Chrome 38+ @valeriansaliou
-
-
-Primo, v1.1.1 (September 2014)
-------------------------------
-
- * Ignore empty XHTML-IM messages @eijebong, @valeriansaliou
- * Fix a bug with message markers @valeriansaliou
-
-
-Primo, v1.1.0 (June 2014)
--------------------------
-
- * XEP-0272: Multiparty Jingle (Muji) @valeriansaliou
- * Prevent client crash on huge messages @valeriansaliou
- * Beautified client code (JavaScript) @valeriansaliou
- * Fix unavailable MUC rooms @emamirazavi
-
-
-One, v1.0.7 (May 2014)
-----------------------
-
- * Fix BackLinks design @valeriansaliou
- * Sort Jappix Mobile contacts alphabetically @valeriansaliou
- * Display offline contacts in Jappix Mini @valeriansaliou
-
-
-One, v1.0.6 (May 2014)
-----------------------
-
- * XEP-0308: Last Message Correction @valeriansaliou
- * XEP-0333: Chat Markers @valeriansaliou
- * XEP-0319: Last User Interaction into Presence @valeriansaliou
- * XEP-0224: Attention @valeriansaliou
- * XEP-0152: Reachability Addresses @valeriansaliou
- * XEP-0334: Message Processing Hints @valeriansaliou
- * Fix gateway contacts management @valeriansaliou
- * Fix sounds in Jappix Mini @aryo, @valeriansaliou
-
-
-One, v1.0.5 (May 2014)
-----------------------
-
- * Fix MUC bookmark shortcut button @valeriansaliou
- * Fix HTML5 notifications in Firefox 22+ @valeriansaliou
- * Fix server commands tool @valeriansaliou
- * New translations added (Uzbek), and a few ones updated @nurkamol, @valeriansaliou
-
-
-One, v1.0.4 (May 2014)
-----------------------
-
- * Fix update tool (on some environments) @valeriansaliou
- * Fix MUC room join @maranda, @valeriansaliou
- * Fix special chars in JIDs for Jappix Mini @dunger, @valeriansaliou
- * Fix WebSocket session termination in JSJaC @sstrigler
- * Enhance backend security (verify SSL certificates) @valeriansaliou
- * Add assets client cache option @valeriansaliou
- * Add SSO support to Jappix Mobile @valeriansaliou
-
-
-One, v1.0.3 (March 2014)
-------------------------
-
- * Fix JSJaC packet register @valeriansaliou, @sstrigler
-
-
-One, v1.0.2 (March 2014)
-------------------------
-
- * Fix IQ spoofing security issue @valeriansaliou, @sstrigler
- * Better autocompletion @Nabellaleen
- * Various bugfixes @Nabellaleen, @valeriansaliou
-
-
-One, v1.0.1 (January 2014)
---------------------------
-
- * Change MAM namespace to a temporary one @maranda
- * Fix broken Jappix Mini CSS loader in some cases @valeriansaliou
- * Libs update @valeriansaliou
-
-
-One, v1.0.0 (January 2014)
---------------------------
-
- * XEP-0166: Jingle @valeriansaliou
- * XEP-0292: vCard4 Over XMPP @valeriansaliou
- * XEP-0280: Message Carbons @valeriansaliou
- * IE9, IE10, IE11 support @valeriansaliou
- * Libs update @valeriansaliou
- * Client code rewrite @valeriansaliou
- * Directory tree re-organization @valeriansaliou
- * Tested code (pass CSSLint, JSHint and PHPLint) @valeriansaliou
-
-
-Nemesis Alpha 9, v0.9.9 (August 2013)
--------------------------------------
-
- * XEP-0313: Message Archive Management @valeriansaliou
- * Drop support for Message Archiving (XEP-0136), outpaced by MAM (XEP-0313) @valeriansaliou
- * Jappix Desktop performances improved (noticeable with big rosters) @valeriansaliou
- * Fix Jappix Desktop avatar system, unable to cache avatars (thus increasing network load and delays) @valeriansaliou
- * New translations added (Mongolian), and a few ones updated @valeriansaliou
-
-
-Nemesis Alpha 8, v0.9.8 (May 2013)
-----------------------------------
-
- * RTL (Right-To-Left Languages) support @valeriansaliou
- * Various bufixes @valeriansaliou
-
-
-Nemesis Alpha 7, v0.9.7 (April 2013)
-------------------------------------
-
- * Fix overflow events in Mini @valeriansaliou
- * Fix user info display bug with formatted text @valeriansaliou
- * Jappix Me notification system @valeriansaliou
- * Update JSJaC @valeriansaliou
- * Update jQuery (v1.10.1) @valeriansaliou
-
-
-Nemesis Alpha 6, v0.9.6 (April 2013)
-------------------------------------
-
- * Fix login with accented usernames @valeriansaliou
- * WOFF Get API headers fixed @valeriansaliou
- * Better Get API URL generator @valeriansaliou
- * Fix broken Jappix Mini extraction script @valeriansaliou
- * Show when user joins/exits MUC in Jappix Mini @valeriansaliou
-
-
-Nemesis Alpha 5, v0.9.5 (March 2013)
-------------------------------------
-
- * Jappix Mini enhancements @valeriansaliou
- * Fix Jappix over non-standard ports @valeriansaliou
- * Locale detector improved @valeriansaliou
- * Load more items on social channel scroll @valeriansaliou
- * Fix a lot of English base language typos @valeriansaliou
- * Support for XHTML microblog entries (Movim compatibility) @valeriansaliou
- * Show Jappix Desktop on tablets (not mobile anymore) @valeriansaliou
- * Option to disable Jappix Mini on mobile phones @valeriansaliou
- * Fix broken MUC bookmarks retrieval @valeriansaliou
-
-
-Nemesis Alpha 4, v0.9.4 (March 2013)
-------------------------------------
-
- * [SECURITY] Fix insafe HTML escaping @valeriansaliou
- * PHP 5.4 compatibility @valeriansaliou
- * Auto-populate microblog on connect @valeriansaliou
- * Register API support for Metronome XMPPd @valeriansaliou
- * Non-blocking PHP sessions @valeriansaliou
- * Permissive geoloc selector in microblog @valeriansaliou
- * Select priority more easily @valeriansaliou
- * Compliancy with Atom specification (social inbox) @valeriansaliou
- * Added project mirrors @valeriansaliou
-
-
-Nemesis Alpha 3, v0.9.3 (February 2013)
----------------------------------------
-
- * [SECURITY] More randomness in CAPTCHA @valeriansaliou
- * Fix buggy roster filter with groups @valeriansaliou
- * Add Piwik tracking feature (configurable in manager) @valeriansaliou
- * Easy popup close by clicking away @valeriansaliou
- * Fix cropped uploaded pictures @valeriansaliou
- * Revert to old File Share API (which is far better) @valeriansaliou
- * Fixes broken translations (strange UTF-8 chars due to bugged Gettext compiler) @valeriansaliou
-
-
-Nemesis Alpha 2, v0.9.2 (January 2013)
---------------------------------------
-
- * [SECURITY] Introduce the Register API (prevents register flood by spam bots) @valeriansaliou
- * Reworked Storage API @valeriansaliou
- * Jappix Mini code beautify @valeriansaliou
- * Lighter and Web-safe font files @valeriansaliou
- * Better error logging @valeriansaliou
- * Fix Openfire ping request @valeriansaliou
- * Typing notification in Jappix Mini @valeriansaliou
- * Support for WebKit notifications @valeriansaliou
- * Jappix Mini groupchat suggest @valeriansaliou
- * Enhanced Download API @valeriansaliou
- * Mini animated chat icon, much sexier @valeriansaliou
- * IE custom font compatibility @valeriansaliou
- * Legal changes @valeriansaliou
- * Update licensing with real names @valeriansaliou
-
-
-Nemesis Alpha 1, v0.9.1 (2012)
-------------------------------
-
- * Show an 'add to home' button on iOS devices @camaran
- * Ability to suspend statistics @valeriansaliou
- * Fix IE9 issue with clustering @valeriansaliou
- * Show profile button in user search results @valeriansaliou
- * Ability to change message font, font size and color @valeriansaliou
- * Fix choppy Jappix Mini status picker @valeriansaliou
- * Sounds for Safari & IE9 @valeriansaliou
- * Enhance new file storage functions @valeriansaliou
- * No resize for textareas @valeriansaliou
- * Add a configurable legal disclaimer @valeriansaliou
- * Fix a loop bug on presence if no support for sessionStorage @valeriansaliou
- * Universal fonts @valeriansaliou
- * Add ability to configure the node owner name & website @valeriansaliou
- * HTTP authentication for LDAP @valeriansaliou
- * Better notification + comments management @valeriansaliou
-
-
-Spaco, v0.9 (2011)
-------------------
-
- * [SECURITY] Fix when sending files to a contact @valeriansaliou
- * Better Jappix Mini performances @valeriansaliou
- * Fix Jappix Mini display issues @valeriansaliou
- * Connection issue fixed with BOSH API @valeriansaliou
- * Open XMPP links when Jappix is ready @valeriansaliou
-
-
-Suno, v0.8 (2011)
----------------------
-
- * XEP-0066: Out of Band Data @valeriansaliou
- * Switch from OpenStreetMap to Google Maps for geolocation @valeriansaliou
-
-
-Stelo, v0.7 (2011)
-------------------
-
- * Lighter Jappix Mini @valeriansaliou
- * Welcome popup @valeriansaliou
- * Support for /me command in Jappix Mini @valeriansaliou
- * Fixes in social channel @valeriansaliou
- * Bigger BOSH poll interval (avoids some overactivity errors) @valeriansaliou
- * Compression disabled by default in Get API @valeriansaliou
- * Send chatstates in MUC @valeriansaliou
- * Social notification inbox @valeriansaliou
-
-
-Lumo, v0.6 (2011)
------------------
-
- * Smoother Mini animation @valeriansaliou
- * Show avatars in social channel comments @valeriansaliou
- * Legacy mode for microblog comments @valeriansaliou
- * Microblog updated to comply with a new version of XEP-0277 @valeriansaliou
- * Fix DNS SRV issue because of a 'route' attribute on BOSH initiation @valeriansaliou
-
-
-Ribelo, v0.5 (2011)
--------------------
-
- * Add support for comments in microblog @valeriansaliou
- * Jappix Mini fixes and improvements @valeriansaliou
-
-
-Lupo, v0.4 (2011)
------------------
-
- * Full IE5.5 compatibility for Jappix Mini @valeriansaliou
- * BOSH without cURL (if cURL unavailable) @valeriansaliou
- * Handle multiple microblog attached files @valeriansaliou
- * Microblog attached files thumbnails @valeriansaliou
- * BOM (Byte Order Mark) filtering for Get API @valeriansaliou
- * Autoplay for new YouTube HTML5 player @valeriansaliou
- * Support for privacy lists pushs @valeriansaliou
- * Roster-side privacy lists (make contact blocking/unblocking easy) @valeriansaliou
- * Better update checker @valeriansaliou
- * XEP-0144: Roster Item Exchange @valeriansaliou
- * Cross domain support for Internet Explorer and legacy browsers @valeriansaliou
- * Update jQuery (v1.4.4) @valeriansaliou
- * TZO fix (for negative timezones, e.g.: UTC-5) @valeriansaliou
- * Better language detection @valeriansaliou
- * Use HTML5 or Flash for YouTube embedded videos @valeriansaliou
-
-
-Prism, v0.3 (2011)
-------------------
-
- * [SECURITY] Fix JS escape bug for quotes @valeriansaliou
- * [SECURITY] HTML-encode notification username @valeriansaliou
- * Introduction of Jappix Mini @valeriansaliou
- * Introduction of Jappix Manager @valeriansaliou
- * Introduction of Jappix Install @valeriansaliou
- * XEP-0050: Ad-Hoc Commands @valeriansaliou
- * XEP-0136: Message Archiving @valeriansaliou
- * Update Jappix logo @valeriansaliou
- * Declare application language to XMPP server @valeriansaliou
- * Add a buddy search tool @valeriansaliou
- * Support for old/legacy vCard server implementations @valeriansaliou
- * Inbox messages sorted by date @valeriansaliou
- * Better music search @valeriansaliou
- * Human-readable geolocation @valeriansaliou
- * Gateway show/hide @valeriansaliou
- * HTML5 forms @valeriansaliou
- * Better notification management @valeriansaliou
- * Unified chat design @valeriansaliou
- * Dynamic DOM load (better performances) @valeriansaliou
- * Jappix logo shown when connected (improves branding) @valeriansaliou
-
-
-Lidar, v0.2 (2010)
-------------------
-
- * Introduction of Jappix Mobile @valeriansaliou
- * UI redesign (from grey to black and blue) @valeriansaliou
- * Social channel introduced (microblog) @valeriansaliou
-
-
-Genesis, v0.1 (2010)
---------------------
-
- * Initial version, released after private beta @valeriansaliou
- * Introduction of Jappix Desktop @valeriansaliou
- * Basic chat, groupchat, roster and profile features @valeriansaliou
- * Basic UI @valeriansaliou
-
-
-**For more information about what changed through time, check the changes made to our source code on GitHub: https://github.com/jappix/jappix/commits/master**
diff --git a/COPYING.md b/COPYING.md
deleted file mode 100644
index 7fc56b5e..00000000
--- a/COPYING.md
+++ /dev/null
@@ -1,666 +0,0 @@
-Jappix Copying
-==============
-
-
- GNU AFFERO GENERAL PUBLIC LICENSE
- Version 3, 19 November 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 Affero General Public License is a free, copyleft license
- for software and other kinds of works, specifically designed to ensure
- cooperation with the community in the case of network server software.
-
- The licenses for most software and other practical works are
- designed to take away your freedom to share and change the works. By
- contrast, our General Public Licenses are 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.
-
- 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.
-
- Developers that use our General Public Licenses protect your rights
- with two steps: (1) assert copyright on the software, and (2) offer
- you this License which gives you legal permission to copy, distribute
- and/or modify the software.
-
- A secondary benefit of defending all users' freedom is that
- improvements made in alternate versions of the program, if they
- receive widespread use, become available for other developers to
- incorporate. Many developers of free software are heartened and
- encouraged by the resulting cooperation. However, in the case of
- software used on network servers, this result may fail to come about.
- The GNU General Public License permits making a modified version and
- letting the public access it on a server without ever releasing its
- source code to the public.
-
- The GNU Affero General Public License is designed specifically to
- ensure that, in such cases, the modified source code becomes available
- to the community. It requires the operator of a network server to
- provide the source code of the modified version running there to the
- users of that server. Therefore, public use of a modified version, on
- a publicly accessible server, gives the public access to the source
- code of the modified version.
-
- An older license, called the Affero General Public License and
- published by Affero, was designed to accomplish similar goals. This is
- a different license, not a version of the Affero GPL, but Affero has
- released a new version of the Affero GPL which permits relicensing under
- this license.
-
- 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 Affero 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. Remote Network Interaction; Use with the GNU General Public License.
-
- Notwithstanding any other provision of this License, if you modify the
- Program, your modified version must prominently offer all users
- interacting with it remotely through a computer network (if your version
- supports such interaction) an opportunity to receive the Corresponding
- Source of your version by providing access to the Corresponding Source
- from a network server at no charge, through some standard or customary
- means of facilitating copying of software. This Corresponding Source
- shall include the Corresponding Source for any work covered by version 3
- of the GNU General Public License that is incorporated pursuant to the
- following paragraph.
-
- 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 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 work with which it is
- combined will remain governed by version 3 of the GNU General Public
- License.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
- the GNU Affero 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 Affero
- 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 Affero 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 Affero 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 Affero 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 Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero 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 your software can interact with users remotely through a computer
- network, you should also make sure that it provides a way for users to
- get its source. For example, if your program is a web application, its
- interface could display a "Source" link that leads users to an archive
- of the code. There are many ways you could offer source, and different
- solutions will be better for different programs; see section 13 for the
- specific requirements.
-
- 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 AGPL, see
- <http://www.gnu.org/licenses/>.
diff --git a/COPYING_FONT.md b/COPYING_FONT.md
deleted file mode 100644
index eb6a6e0f..00000000
--- a/COPYING_FONT.md
+++ /dev/null
@@ -1,40 +0,0 @@
-Jappix Font Copying
-===================
-
-_Copyright © 2009 ParaType Ltd._
-_with Reserved Names "PT Sans" and "ParaType"._
-
-
-Font License
-------------
-
-Permission & Conditions
------------------------
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of the font software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the font software, subject to the following conditions:
-
-1. Neither the font software nor any of its individual components, in original or modified versions, may be sold by itself.
-
-2. Original or modified versions of the font software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.
-
-3. No modified version of the font software may use the Reserved Name(s) or combinations of Reserved Names with other words unless explicit written permission is granted by the ParaType. This restriction only applies to the primary font name as presented to the users.
-
-4. The name of ParaType or the author(s) of the font software shall not be used to promote, endorse or advertise any modified version, except to acknowledge the contribution(s) of ParaType and the author(s) or with explicit written permission of ParaType.
-
-5. The font software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software.
-
-
-Termination & Territory
------------------------
-
-This license has no limits on time and territory, but it becomes null and void if any of the above conditions are not met.
-
-
-Disclaimer
-----------
-
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL PARATYPE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
-
-
-**ParaType Ltd**
-**http://www.paratype.ru**
diff --git a/COPYING_MINI.md b/COPYING_MINI.md
deleted file mode 100644
index c8168c40..00000000
--- a/COPYING_MINI.md
+++ /dev/null
@@ -1,26 +0,0 @@
-Jappix Mini Copying
-===================
-
-Code
-----
-
-The following notice applies to the files which state that they are dual-
-licensed under the MPL:
-
- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-
-Artwork
--------
-
-The files img/sprites/mini.png and img/sprites/mini.gif were created by
-Valérian Saliou and are dual-licensed under the Creative Commons Attribution 2.5
-License and the Creative Commons Attribution 3.0 License.
-
-They contain work from the FamFamFam Silk icon set by Mark James.
-
-* http://famfamfam.com/lab/icons/silk/
-* http://creativecommons.org/licenses/by/2.5/
-* http://creativecommons.org/licenses/by/3.0/
diff --git a/Gruntfile.js b/Gruntfile.js
deleted file mode 100644
index 24f5cfdc..00000000
--- a/Gruntfile.js
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Jappix
- * Tasks (uses GruntJS)
- *
- * Copyright 2013, Jappix
- * Author: Valérian Saliou <valerian@valeriansaliou.name>
- */
-
-
-module.exports = function(grunt) {
-
- // Project configuration
- grunt.initConfig({
- pkg: grunt.file.readJSON('package.json'),
-
- // Task: CSSLint
- csslint: {
- all: {
- options: {
- /*
- * CSS Lint Options
- * Reference: https://github.com/gruntjs/grunt-contrib-csslint/blob/master/README.md#options
- */
-
- 'important': false,
- 'duplicate-background-images': false,
- 'star-property-hack': false,
- 'adjoining-classes': false,
- 'box-model': false,
- 'qualified-headings': false,
- 'unique-headings': false,
- 'floats': false,
- 'font-sizes': false,
- 'ids': false,
- 'overqualified-elements': false,
- 'known-properties': false,
- 'unqualified-attributes': false,
- 'universal-selector': false
- },
-
- src: [
- './app/stylesheets/*.css',
-
- // Ignored files
- '!./app/stylesheets/ie.css',
- '!./app/stylesheets/*-ie.css',
- '!./app/stylesheets/ios.css'
- ]
- }
- },
-
- // Task: JSHint
- jshint: {
- files: ['./app/javascripts/*.js'],
- options: {
- ignores: [
- './app/javascripts/jquery.js',
- './app/javascripts/jquery.*.js',
- './app/javascripts/jsjac.js',
- './app/javascripts/jsjac.*.js',
- './app/javascripts/jxhr.js',
- './app/javascripts/browser-detect.js',
- './app/javascripts/base64.js',
- './app/javascripts/datejs.js',
- './app/javascripts/ios.js'
- ]
- }
- },
-
- // Task PHPLint
- phplint: {
- all: [
- './index.php',
- './server/*.php',
-
- // Ignored files
- '!./server/drawsvgchart.php',
- '!./server/gettext.php',
- '!./server/jsmin.php',
- '!./server/srand.php'
- ]
- }
- });
-
- // Load plugins
- grunt.loadNpmTasks('grunt-contrib-csslint');
- grunt.loadNpmTasks('grunt-contrib-jshint');
- grunt.loadNpmTasks('grunt-phplint');
-
- // Map tasks
- var GRUNT_TASKS_TEST = {
- all: [['lint',0]]
- };
-
- var GRUNT_TASKS_LINT = {
- css: [['csslint',0]],
- js: [['jshint',0]],
- php: [['phplint',0]]
- };
-
- // Register tasks
- grunt.registerTask('default', function() {
- return grunt.warn('Usage:' + '\n\n' + 'test - grunt test' + '\n\n');
- });
-
- grunt.registerTask('test', function() {
- for(t in GRUNT_TASKS_TEST) {
- for(i in GRUNT_TASKS_TEST[t]) {
- grunt.task.run(GRUNT_TASKS_TEST[t][i][0] + (GRUNT_TASKS_TEST[t][i][1] ? (':' + t) : ''));
- }
- }
- });
-
- grunt.registerTask('lint', function(t) {
- var lint_t_all = [];
-
- if(t == null) {
- for(t in GRUNT_TASKS_LINT) {
- lint_t_all.push(t);
- }
- } else if(typeof GRUNT_TASKS_LINT[t] != 'object') {
- return grunt.warn('Invalid lint target name.\n');
- } else {
- lint_t_all.push(t);
- }
-
- for(c in lint_t_all) {
- t = lint_t_all[c];
-
- for(i in GRUNT_TASKS_LINT[t]) {
- grunt.task.run(GRUNT_TASKS_LINT[t][i][0] + (GRUNT_TASKS_LINT[t][i][1] ? (':' + t) : ''));
- }
- }
- });
-
-};
diff --git a/INSTALL.md b/INSTALL.md
deleted file mode 100644
index 87081614..00000000
--- a/INSTALL.md
+++ /dev/null
@@ -1,21 +0,0 @@
-Jappix Installation
-===================
-
-It's very simple to install Jappix on your webserver, you just have to follow these things:
-
-
-Installation
-------------
-
-* The HTTP server: https://github.com/jappix/jappix/wiki/HttpServer
-* The XMPP server: https://github.com/jappix/jappix/wiki/XmppServer
-* The BOSH server: https://github.com/jappix/jappix/wiki/BoshServer
-* The Jappix app : https://github.com/jappix/jappix/wiki/JappixApp
-
-More
-----
-
-* The whole documentation is available at: https://github.com/jappix/jappix/wiki
-
-
-Now, you can use Jappix. Happy socializing!
diff --git a/PROTOCOL.md b/PROTOCOL.md
deleted file mode 100644
index 3cdd629b..00000000
--- a/PROTOCOL.md
+++ /dev/null
@@ -1,86 +0,0 @@
-Jappix Protocol Support
-=======================
-
-Here are listed the XMPP Protocol Extensions that Jappix supports, as well as their implementation version.
-
-
-# XMPP Core
-
- * RFC-6120: Extensible Messaging and Presence Protocol (XMPP): Core
- * RFC-6121: Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence
- * RFC-6122: Extensible Messaging and Presence Protocol (XMPP): Address Format
-
-
-# XMPP Extensions (Standardized)
-
- * XEP-0004: Data Forms *v2.9*
- * XEP-0012: Last Activity *v2.0*
- * XEP-0016: Privacy Lists *v1.6*
- * XEP-0030: Service Discovery *v2.4*
- * XEP-0045: Multi-User Chat *v1.25*
- * XEP-0049: Private XML Storage *v1.2*
- * XEP-0050: Ad-Hoc Commands *v1.2*
- * XEP-0054: vcard-temp *v1.2*
- * XEP-0055: Jabber Search *v1.3*
- * XEP-0060: Publish-Subscribe *v1.13*
- * XEP-0066: Out of Band Data *v1.5*
- * XEP-0071: XHTML-IM *v1.5*
- * XEP-0072: SOAP Over XMPP *v1.0*
- * XEP-0077: In-Band Registration *v2.4*
- * XEP-0080: User Location *v1.7*
- * XEP-0084: User Avatar *v1.1*
- * XEP-0085: Chat State Notifications *v2.1*
- * XEP-0092: Software Version *v1.1*
- * XEP-0107: User Mood *v1.2*
- * XEP-0108: User Activity *v1.3*
- * XEP-0115: Entity Capabilities *v1.5*
- * XEP-0118: User Tune *v1.2*
- * XEP-0124: Bidirectional-streams Over Synchronous HTTP (BOSH) *v1.10*
- * XEP-0144: Roster Item Exchange *v1.0*
- * XEP-0152: Reachability Addresses *v1.0*
- * XEP-0166: Jingle *v1.1*
- * XEP-0167: Jingle RTP Sessions *v1.1*
- * XEP-0172: User Nickname *v1.1*
- * XEP-0176: Jingle ICE-UDP Transport Method *v1.0*
- * XEP-0177: Jingle Raw UDP Transport Method *v1.1*
- * XEP-0184: Message Delivery Receipts *v1.2*
- * XEP-0199: XMPP Ping *v2.0*
- * XEP-0202: Entity Time *v2.0*
- * XEP-0203: Delayed Delivery *v2.0*
- * XEP-0224: Attention *v1.0*
- * XEP-0215: External Service Discovery *v0.5*
- * XEP-0249: Direct MUC Invitations *v1.2*
- * XEP-0262: Use of ZRTP in Jingle RTP Sessions *v1.0*
- * XEP-0266: Codecs for Jingle Audio *v1.0*
- * XEP-0269: Jingle Early Media *v0.1*
- * XEP-0277: Microblogging over XMPP *v0.6*
- * XEP-0278: Jingle Relay Nodes *v0.2*
- * XEP-0280: Message Carbons *v0.9*
- * XEP-0292: vCard4 Over XMPP *v0.10*
- * XEP-0293: Jingle RTP Feedback Negotiation *v0.1*
- * XEP-0294: Jingle RTP Header Extensions Negotiation *v0.1*
- * XEP-0299: Codecs for Jingle Video *v0.1*
- * XEP-0308: Last Message Correction *v1.0*
- * XEP-0319: Last User Interaction in Presence *v0.2*
- * XEP-0320: Use of DTLS-SRTP in Jingle Sessions *v0.2*
- * XEP-0333: Chat Markers *v0.2*
- * XEP-0334: Message Processing Hints *v0.1*
- * XEP-0338: Jingle Grouping Framework *v0.1*
- * XEP-0339: Source-Specific Media Attributes in Jingle *v0.1*
- * XEP-0353: Jingle Message Initiation *v0.1*
-
-
-# XMPP Extensions (Updated)
-
- * XEP-0272: Multiparty Jingle (Muji) *v0.2*
- * XEP-0313: Message Archive Management *v0.3*
-
-
-# XMPP Extensions (Proposed)
- * XEP-xxxx: Notification Inbox *v0.1*
- * Alternate URL: http://xmpp.org/extensions/inbox/notification-inbox.html
-
-
-# Others
-
- * RFC-3264: An Offer/Answer Model with Session Description Protocol (SDP)
diff --git a/README.md b/README.md
deleted file mode 100644
index efe4ab12..00000000
--- a/README.md
+++ /dev/null
@@ -1,57 +0,0 @@
-![jappix logo](https://i.imgur.com/guijeTq.png)
-
-[![Build Status](https://travis-ci.org/jappix/jappix.svg?branch=master)](https://travis-ci.org/jappix/jappix) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/jappix/jappix?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
-
-Jappix is a fresh new open social platform which enables you to host your communication platform wherever you want to. People must be able to get in touch with all their friends on a free decentralized network!
-
-You can build your own Jappix installation for your own requirements. If you want to use it as a personal social client, you can download it and install it on your webserver.
-
-
-License
--------
-
-Jappix is released under the terms of the AGPL license. See COPYING.md for more details.
-
-
-Installation
-------------
-
-Please refer to the installation instructions in the INSTALL.md file to process the Jappix installation.
-
-
-Translations
-------------
-
-Help us translate Jappix and get Jappix in your language.
-
-Start translating on https://www.transifex.com/projects/p/jappix/ (new translators are automatically approved when they join a translation team).
-
-
-Links
------
-
-* Jappix project website: https://jappix.org/
-* Jappix project dev panel: https://github.com/jappix/jappix
-* Jappix main service: https://jappix.com/
-
-
-MUC Links
----------
-
-* Jappix.org support room: https://jappix.com/?r=support@muc.jappix.org
-* Jappix.org development room: https://jappix.com/?r=dev@muc.jappix.org
-
-
-Social networking
------------------
-
-We're social and you can join us on:
-
-* Twitter: https://twitter.com/jappixorg
-* Facebook: https://www.facebook.com/jappix
-
-
-One more thing...
------------------
-
-Have fun with Jappix, and don't hesitate to help us by reporting bugs, translating or submitting new ideas!
diff --git a/THANKS.md b/THANKS.md
deleted file mode 100644
index 9cfe295f..00000000
--- a/THANKS.md
+++ /dev/null
@@ -1,23 +0,0 @@
-Jappix Thanks
-=============
-
-We would like to thanks the authors of these tools, coming from other projects:
-
-
-Projects
---------
-
-* Base64 https://github.com/dankogai/js-base64
-* DrawSVGChart http://codingteam.net/project/codingteam
-* idzXHR http://www.iadvize.com/plugin_strophe_xmpp.html
-* JSJaC http://blog.jwchat.org/jsjac/
-* JSMin http://github.com/rgrove/jsmin-php/
-* jQuery http://jquery.com/
-* jQuery Form http://jquery.malsup.com/form/
-* jQuery Timers http://plugins.jquery.com/project/timers
-* jXHR http://mulletxhr.com/
-* Mobile Detect https://github.com/serbanghita/Mobile-Detect
-* ParaType http://paratype.ru/
-* PHP-gettext https://launchpad.net/php-gettext
-* Silk icons http://www.famfamfam.com/lab/icons/silk/
-* Smileys http://www.gajim.org/
diff --git a/VERSION b/VERSION
deleted file mode 100644
index 03c352b1..00000000
--- a/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-Primo [1.1.7~dev]
diff --git a/app/.htaccess b/app/.htaccess
deleted file mode 100644
index a6e0b168..00000000
--- a/app/.htaccess
+++ /dev/null
@@ -1,2 +0,0 @@
-# Security rule
-deny from all \ No newline at end of file
diff --git a/app/bundles/anonymous.xml b/app/bundles/anonymous.xml
deleted file mode 100644
index 03008dfa..00000000
--- a/app/bundles/anonymous.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<jappix xmlns="jappix:file:get">
- <css>anonymous.css</css>
- <js>anonymous.js</js>
-</jappix>
diff --git a/app/bundles/desktop.xml b/app/bundles/desktop.xml
deleted file mode 100644
index 4042d38c..00000000
--- a/app/bundles/desktop.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<jappix xmlns="jappix:file:get">
- <css>fonts.css~main.css~images.css~board.css~home.css~others.css~tools.css~roster.css~myinfos.css~pageengine.css~channel.css~pageswitch.css~smileys.css~popup.css~vcard.css~options.css~favorites.css~discovery.css~directory.css~adhoc.css~privacy.css~inbox.css~mucadmin.css~integratebox.css~userinfos.css~search.css~welcome.css~me.css~rosterx.css~call.css~jingle.css~muji.css</css>
- <js>origin.js~jxhr.js~datejs.js~jquery.js~jquery.ui.js~jquery.json.js~jquery.form.js~jquery.timers.js~jquery.placeholder.js~jquery.textrange.js~jquery.scrollto.js~base64.js~jsjac.js~jsjac.jingle.js~system.js~constants.js~datastore.js~browser-detect.js~home.js~talk.js~popup.js~audio.js~board.js~bubble.js~chat.js~groupchat.js~smileys.js~oob.js~avatar.js~mucadmin.js~connection.js~dataform.js~discovery.js~directory.js~adhoc.js~privacy.js~errors.js~name.js~favorites.js~features.js~interface.js~xmpplinks.js~iq.js~message.js~chatstate.js~receipts.js~tooltip.js~filter.js~links.js~inbox.js~microblog.js~music.js~notification.js~httpreply.js~options.js~integratebox.js~pubsub.js~pep.js~presence.js~roster.js~call.js~jingle.js~muji.js~storage.js~console.js~common.js~utilities.js~date.js~caps.js~vcard.js~userinfos.js~search.js~autocompletion.js~welcome.js~me.js~rosterx.js~mam.js~carbons.js~correction.js~markers.js~attention.js</js>
-</jappix>
diff --git a/app/bundles/httpauth.xml b/app/bundles/httpauth.xml
deleted file mode 100644
index e3e597e1..00000000
--- a/app/bundles/httpauth.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<jappix xmlns="jappix:file:get">
- <js>httpauth.js</js>
-</jappix>
diff --git a/app/bundles/install.xml b/app/bundles/install.xml
deleted file mode 100644
index 25781b2b..00000000
--- a/app/bundles/install.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<jappix xmlns="jappix:file:get">
- <css>main.css~install.css~images.css</css>
- <js></js>
-</jappix>
diff --git a/app/bundles/manager.xml b/app/bundles/manager.xml
deleted file mode 100644
index b7bfe7b2..00000000
--- a/app/bundles/manager.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<jappix xmlns="jappix:file:get">
- <css>main.css~manager.css~images.css</css>
- <js></js>
-</jappix>
diff --git a/app/bundles/mini.xml b/app/bundles/mini.xml
deleted file mode 100644
index 742b0848..00000000
--- a/app/bundles/mini.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<jappix xmlns="jappix:file:get">
- <css>mini.css</css>
- <js>origin.js~jxhr.js~base64.js~jsjac.js~jquery.json.js~jquery.timers.js~jquery.scrollto.js~system.js~constants.js~datastore.js~browser-detect.js~console.js~common.js~date.js~links.js~mini.js</js>
-</jappix>
diff --git a/app/bundles/mobile.xml b/app/bundles/mobile.xml
deleted file mode 100644
index fdf0ac20..00000000
--- a/app/bundles/mobile.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<jappix xmlns="jappix:file:get">
- <css>mobile.css~ios.css~images.css</css>
- <js>origin.js~jxhr.js~base64.js~jsjac.js~system.js~constants.js~console.js~browser-detect.js~links.js~mobile.js~ios.js</js>
-</jappix>
diff --git a/app/fonts/eot/ptsans.eot b/app/fonts/eot/ptsans.eot
deleted file mode 100644
index 21e0f536..00000000
--- a/app/fonts/eot/ptsans.eot
+++ /dev/null
Binary files differ
diff --git a/app/fonts/eot/ptsansbold.eot b/app/fonts/eot/ptsansbold.eot
deleted file mode 100644
index cfa6e651..00000000
--- a/app/fonts/eot/ptsansbold.eot
+++ /dev/null
Binary files differ
diff --git a/app/fonts/eot/ptsansbolditalic.eot b/app/fonts/eot/ptsansbolditalic.eot
deleted file mode 100644
index b65f36c2..00000000
--- a/app/fonts/eot/ptsansbolditalic.eot
+++ /dev/null
Binary files differ
diff --git a/app/fonts/eot/ptsansitalic.eot b/app/fonts/eot/ptsansitalic.eot
deleted file mode 100644
index 9f71ea90..00000000
--- a/app/fonts/eot/ptsansitalic.eot
+++ /dev/null
Binary files differ
diff --git a/app/fonts/svg/ptsans.svg b/app/fonts/svg/ptsans.svg
deleted file mode 100644
index 8c42797e..00000000
--- a/app/fonts/svg/ptsans.svg
+++ /dev/null
@@ -1,242 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="pt_sansregular" horiz-adv-x="1116" >
-<font-face units-per-em="2048" ascent="1536" descent="-512" />
-<missing-glyph horiz-adv-x="546" />
-<glyph unicode="&#xfb01;" horiz-adv-x="1105" d="M45 881v143h160v57q0 193 95 280t280 87q121 0 215 -23.5t147 -56.5l-55 -131q-55 35 -131 51.5t-162 16.5q-76 0 -120 -17.5t-67.5 -53.5t-30.5 -89t-7 -121h577v-1024h-164v881h-413v-881h-164v881h-160z" />
-<glyph unicode="&#xfb02;" horiz-adv-x="1193" d="M45 881v143h160v57q0 193 83 285t277 92q41 0 92.5 -3t103.5 -8t98 -11t75 -15v-1169q0 -72 25.5 -102.5t68.5 -30.5q29 0 59.5 4t69.5 18l17 -129q-16 -8 -40 -15t-50.5 -11t-53 -7.5t-47.5 -3.5q-92 0 -152.5 52.5t-60.5 177.5v1093q-31 6 -88 11.5t-113 5.5 q-70 0 -109.5 -19.5t-60 -57.5t-25.5 -92t-5 -122h211v-143h-211v-881h-164v881h-160z" />
-<glyph horiz-adv-x="2048" />
-<glyph horiz-adv-x="2048" />
-<glyph unicode="&#xd;" horiz-adv-x="546" />
-<glyph unicode=" " horiz-adv-x="546" />
-<glyph unicode="&#x09;" horiz-adv-x="546" />
-<glyph unicode="&#xa0;" horiz-adv-x="546" />
-<glyph unicode="!" horiz-adv-x="624" d="M225 94q0 55 32 87t85 32q55 0 88 -31.5t33 -87.5q0 -53 -33 -86t-88 -33q-53 0 -85 33t-32 86zM260 723v711h170v-711l-35 -361h-100z" />
-<glyph unicode="&#x22;" horiz-adv-x="686" d="M184 1038v396h160l-63 -396h-97zM424 1038v396h160l-63 -396h-97z" />
-<glyph unicode="#" d="M57 461l29 131h162l63 268h-151l28 131h154l78 324h141l-78 -324h215l78 324h142l-78 -324h157l-32 -131h-156l-64 -268h150l-33 -131h-147l-80 -342h-141l79 342h-215l-79 -342h-142l80 342h-160zM389 592h215l64 268h-215z" />
-<glyph unicode="$" d="M156 41l55 149q41 -25 111.5 -45t173.5 -22v553q-61 31 -122 65.5t-108 82.5t-75.5 114t-28.5 156q0 147 83 241.5t251 116.5v186h139v-180q104 -4 170.5 -19.5t120.5 -39.5l-49 -144q-41 20 -98.5 36t-143.5 20v-506q63 -33 126.5 -71t114 -87t81 -114.5t30.5 -153.5 q0 -160 -89 -263.5t-263 -131.5v-189h-139v180q-113 2 -200 19.5t-140 46.5zM332 1104q0 -88 56 -143.5t140 -100.5v449q-109 -12 -152.5 -71.5t-43.5 -133.5zM602 127q94 14 154.5 73t60.5 165q0 49 -17.5 88t-46 69.5t-67.5 55t-84 47.5v-498z" />
-<glyph unicode="%" horiz-adv-x="1583" d="M143 1110q0 92 24.5 157.5t66.5 108.5t100.5 62.5t126.5 19.5t126 -18.5t100 -59.5t66.5 -107.5t24.5 -162.5t-24.5 -162.5t-66.5 -107.5t-100.5 -59.5t-125.5 -18.5q-68 0 -126.5 18.5t-100.5 59.5t-66.5 107.5t-24.5 162.5zM252 55l1053 1405l100 -78l-1051 -1407z M295 1110q0 -123 44 -176t122 -53q39 0 69.5 11t52 36.5t32.5 69.5t11 112t-11 112t-32.5 69.5t-52.5 36.5t-69 11q-78 0 -122 -48t-44 -181zM874 350q0 92 24.5 157.5t66.5 108.5t100.5 62.5t126.5 19.5t126 -18.5t100 -59.5t66.5 -107.5t24.5 -162.5t-24.5 -162.5 t-66.5 -107.5t-100.5 -59.5t-125.5 -18.5q-68 0 -126.5 18.5t-100.5 59.5t-66.5 107.5t-24.5 162.5zM1026 350q0 -123 44 -176t122 -53q39 0 69.5 11t52 36.5t32.5 69.5t11 112t-11 112t-32.5 69.5t-52.5 36.5t-69 11q-78 0 -122 -48t-44 -181z" />
-<glyph unicode="&#x26;" horiz-adv-x="1667" d="M242 383q0 82 28.5 156.5t77.5 138t111.5 117t130.5 94.5q-49 74 -85 147.5t-36 159.5q0 49 16.5 96t52 84t92 59.5t136.5 22.5q84 0 141.5 -21.5t92 -56t50 -77.5t15.5 -89q0 -86 -66.5 -177t-210.5 -175q33 -59 77 -121.5t93.5 -124t100.5 -122t102 -111.5 q23 25 45.5 62.5t44 79.5t39 87t31.5 86l127 -59q-12 -35 -34.5 -83t-50.5 -98t-56.5 -96.5t-53.5 -76.5q43 -41 78 -71t64.5 -51.5t57.5 -39t56 -33.5l-102 -115q-109 53 -248 191q-37 -37 -81 -71t-99 -60.5t-121.5 -43t-146.5 -16.5q-96 0 -181.5 27t-149 79t-101 128 t-37.5 174zM406 387q0 -63 26.5 -113.5t72.5 -84t105.5 -52t124.5 -18.5q51 0 99.5 13t91.5 33.5t78.5 47t58.5 55.5q-59 59 -116.5 129t-110 139.5t-96.5 134t-74 113.5q-55 -41 -102.5 -84t-83.5 -91t-55 -103t-19 -119zM629 1196q0 -61 25.5 -121.5t66.5 -120.5 q109 70 150.5 127.5t41.5 100.5q0 66 -31.5 106.5t-109.5 40.5q-74 0 -108.5 -37t-34.5 -96z" />
-<glyph unicode="'" horiz-adv-x="446" d="M184 1038v396h160l-63 -396h-97z" />
-<glyph unicode="(" horiz-adv-x="573" d="M123 498q0 113 18.5 237.5t59.5 250.5t107.5 247t162.5 225l98 -72q-82 -104 -136 -215.5t-87 -226.5t-46 -228.5t-13 -217.5q0 -98 15 -214t49 -231.5t88.5 -226.5t129.5 -201l-104 -76q-94 98 -159.5 216t-105.5 242t-58.5 250t-18.5 241z" />
-<glyph unicode=")" horiz-adv-x="573" d="M4 -379q82 104 137.5 217t87 227.5t45 227.5t13.5 217q0 98 -16.5 213t-50.5 231.5t-87 227t-129 200.5l105 76q94 -98 159.5 -216t105.5 -241.5t58.5 -249.5t18.5 -241q0 -113 -18.5 -238t-59.5 -250.5t-107.5 -246.5t-163.5 -226z" />
-<glyph unicode="*" horiz-adv-x="718" d="M82 1133v114h102l127 -24l-92 90l-53 94l100 57l51 -86l37 -114l43 116l49 82l99 -53l-53 -88l-95 -98l140 24h98v-114h-94l-131 24l94 -98l47 -80l-96 -57l-54 86l-47 125l-39 -119l-51 -86l-102 57l55 86l86 86l-119 -24h-102z" />
-<glyph unicode="+" horiz-adv-x="1034" d="M82 618v148h360v369h148v-369h360v-148h-360v-368h-148v368h-360z" />
-<glyph unicode="," horiz-adv-x="399" d="M86 -225q74 29 109.5 89t35.5 122q-18 -6 -34 -6q-41 0 -69 27.5t-28 80.5q0 49 33 80t84 31q63 0 103 -45t40 -131q0 -74 -20.5 -129.5t-53 -95.5t-71.5 -65.5t-78 -37.5z" />
-<glyph unicode="-" horiz-adv-x="737" d="M121 514v152h495v-152h-495z" />
-<glyph unicode="." horiz-adv-x="438" d="M100 94q0 55 32 87t85 32q55 0 88 -31.5t33 -87.5q0 -53 -33 -86t-88 -33q-53 0 -85 33t-32 86z" />
-<glyph unicode="/" horiz-adv-x="724" d="M-76 -229l748 1687l129 -57l-748 -1688z" />
-<glyph unicode="0" d="M88 717q0 369 120 555t349 186q248 0 359.5 -183t111.5 -558q0 -369 -120 -555.5t-351 -186.5q-244 0 -356.5 195t-112.5 547zM258 717q0 -133 17.5 -242.5t54.5 -188.5t93 -123t134 -44q156 0 228.5 144.5t72.5 453.5q0 131 -15.5 241.5t-51 190.5t-93 123t-141.5 43 q-154 0 -226.5 -145.5t-72.5 -452.5z" />
-<glyph unicode="1" d="M143 1110l451 348h74v-1306h280v-152h-727v152h287v991l20 121l-82 -97l-225 -161z" />
-<glyph unicode="2" d="M127 0v59q45 47 108.5 117t132 155t135 180t121 193.5t87 194.5t32.5 182q0 100 -57 167t-174 67q-78 0 -151.5 -32t-127.5 -73l-67 117q72 61 170 96t211 35q88 0 155.5 -25.5t114.5 -72.5t71.5 -111.5t24.5 -140.5q0 -109 -39.5 -222.5t-104 -228t-144.5 -224 t-160 -208.5l-100 -88v-8l131 23h446v-152h-815z" />
-<glyph unicode="3" d="M180 27l43 145q47 -23 111.5 -38t144.5 -15q70 0 129.5 20.5t102.5 60.5t67.5 95t24.5 121q0 143 -85 212.5t-235 69.5h-151v60l295 454l94 91l-133 -21h-406v152h731v-60l-325 -489l-72 -60v-4l70 15q82 -2 151.5 -30t120.5 -80t80 -125t29 -165q0 -111 -39 -196.5 t-105.5 -144t-157 -89.5t-190.5 -31q-92 0 -165.5 14.5t-129.5 37.5z" />
-<glyph unicode="4" d="M41 440v68l680 948h110v-872h242v-144h-242v-440h-159v440h-631zM227 567l144 17h301v446l20 168h-6l-72 -139l-288 -391z" />
-<glyph unicode="5" d="M158 16l43 140q47 -18 101 -27.5t134 -9.5q141 0 233.5 82t92.5 237q0 150 -91 223.5t-251 73.5l-172 -10v709h639v-152h-486v-408l88 5q203 -2 320 -113t117 -317q0 -115 -39 -204t-105.5 -148.5t-156.5 -90.5t-193 -31q-92 0 -155.5 10.5t-118.5 30.5z" />
-<glyph unicode="6" d="M123 481q0 203 52 374t144.5 298t218.5 206t273 99l35 -131q-115 -20 -209 -77.5t-165 -141.5t-116 -188.5t-61 -214.5q33 55 110.5 101t190.5 46q193 0 302.5 -110.5t109.5 -309.5q0 -94 -29 -177t-84 -145.5t-137 -98.5t-187 -36q-102 0 -184 33t-141.5 97.5t-91 158.5 t-31.5 217zM283 461q0 -63 17 -125t54 -110t91.5 -77.5t127.5 -29.5q59 0 107.5 22.5t83.5 61.5t54.5 94.5t19.5 118.5q0 145 -68 219t-209 74q-100 0 -173 -49.5t-101 -110.5q-4 -29 -4 -47.5v-40.5z" />
-<glyph unicode="7" d="M125 1282v152h856v-56l-590 -1378h-166l514 1200l90 100l-120 -18h-584z" />
-<glyph unicode="8" d="M139 342q0 129 67.5 224.5t211.5 172.5q-51 31 -95 65t-78 77t-53.5 96t-19.5 123q0 80 27.5 145.5t80 112.5t125 73.5t164.5 26.5q86 0 156 -24.5t118 -67.5t74.5 -102.5t26.5 -130.5q0 -117 -53 -206t-176 -175q53 -31 101 -68t84 -82t56.5 -101.5t20.5 -127.5 q0 -88 -28.5 -161t-84 -125t-135.5 -82t-182 -30q-98 0 -174 29t-128 78t-79 115.5t-27 144.5zM299 362q0 -49 16.5 -94t49 -77.5t81 -52t111.5 -19.5q51 0 98 15.5t83 45t57.5 75.5t21.5 107t-24.5 107.5t-64.5 84.5t-91 68.5t-107 59.5q-125 -70 -178 -156t-53 -164z M332 1104q0 -57 22.5 -101.5t60.5 -79t87 -64.5t102 -56q92 72 136 141.5t44 153.5q0 104 -64.5 160.5t-154.5 56.5q-55 0 -98 -18.5t-74 -47t-46 -66.5t-15 -79z" />
-<glyph unicode="9" d="M106 999q0 98 29 182.5t84 146t138 96t194 34.5q209 0 325.5 -135t116.5 -381q0 -231 -52 -404t-144 -292t-218 -185.5t-274 -85.5l-37 131q119 18 214.5 69.5t164 129.5t111.5 177.5t59 215.5q-55 -66 -121.5 -91t-175.5 -25q-84 0 -158.5 27.5t-132 80.5t-90.5 131 t-33 178zM276 1016q0 -145 77 -218t202 -73q100 0 172 33t102 86q4 27 4.5 47t0.5 43q0 74 -17.5 142.5t-52.5 122.5t-91.5 85t-131.5 31q-125 0 -195 -79t-70 -220z" />
-<glyph unicode=":" horiz-adv-x="448" d="M186 94q0 55 32 87t85 32q55 0 88 -31.5t33 -87.5q0 -53 -33 -86t-88 -33q-53 0 -85 33t-32 86zM186 920q0 55 32 86.5t85 31.5q55 0 88 -31.5t33 -86.5q0 -53 -33 -86t-88 -33q-53 0 -85 33t-32 86z" />
-<glyph unicode=";" horiz-adv-x="524" d="M168 -225q74 29 109.5 89t35.5 122q-18 -6 -34 -6q-41 0 -69 27.5t-28 80.5q0 49 33 80t84 31q63 0 103 -45t40 -131q0 -74 -20.5 -129.5t-53 -95.5t-71.5 -65.5t-78 -37.5zM197 920q0 55 31.5 86.5t84.5 31.5q55 0 88 -31.5t33 -86.5q0 -53 -32.5 -86t-88.5 -33 q-53 0 -84.5 33t-31.5 86z" />
-<glyph unicode="&#x3c;" horiz-adv-x="1034" d="M86 625v59l774 473l78 -127l-485 -297l-187 -78l185 -65l497 -295l-78 -123z" />
-<glyph unicode="=" horiz-adv-x="1034" d="M82 449v147h868v-147h-868zM82 788v148h868v-148h-868z" />
-<glyph unicode="&#x3e;" horiz-adv-x="1034" d="M86 1032l78 125l784 -452v-60l-774 -473l-78 125l486 297l186 78l-184 65z" />
-<glyph unicode="?" horiz-adv-x="892" d="M76 1356q78 47 164 74.5t213 27.5q90 0 158.5 -25.5t114.5 -70.5t68.5 -106.5t22.5 -131.5q0 -92 -27.5 -160.5t-69.5 -125t-90 -105.5t-90 -103.5t-70 -117.5t-28 -150h-135q-2 10 -2 22.5v23.5q0 86 25.5 151.5t63.5 119.5t82 101t82 95.5t63.5 102.5t25.5 124 q0 94 -54 153.5t-181 59.5q-74 0 -150 -25.5t-131 -60.5zM266 94q0 55 32 87t85 32q55 0 88 -31.5t33 -87.5q0 -53 -33 -86t-88 -33q-53 0 -85 33t-32 86z" />
-<glyph unicode="@" horiz-adv-x="2179" d="M178 483q0 223 77 403.5t208 307.5t305 195.5t369 68.5q184 0 341.5 -54t273.5 -155.5t182.5 -248t66.5 -332.5q0 -131 -45 -251t-122 -210t-179.5 -144.5t-216.5 -54.5q-86 0 -137.5 37t-51.5 137q0 18 2 40t6 46h-8q-29 -47 -67.5 -93t-86.5 -83t-102.5 -60.5 t-113.5 -23.5q-49 0 -94.5 21.5t-78 62.5t-52 97.5t-19.5 127.5q0 131 43 258t115.5 225.5t170 159t205.5 60.5q76 0 121 -22.5t88 -55.5l70 64h70l-105 -588q-10 -53 -15 -95t-5 -75q0 -51 17 -74.5t60 -23.5q70 0 138.5 36.5t122 104t87 163t33.5 214.5q0 158 -53 278.5 t-149.5 203.5t-229.5 126t-293 43q-166 0 -312 -61.5t-253.5 -170t-170 -260t-62.5 -329.5q0 -182 56 -325.5t160.5 -242t250 -149.5t323.5 -51q59 0 135 13t138 44l41 -131q-92 -39 -170 -52.5t-168 -13.5q-190 0 -357.5 57.5t-291 170t-195.5 279.5t-72 386zM795 344 q0 -80 32.5 -136t118.5 -56q41 0 85 26.5t87 72.5t82 103.5t70 116.5l61 334q-35 41 -69.5 56.5t-87.5 15.5q-80 0 -150 -48.5t-120 -125t-79.5 -172t-29.5 -187.5z" />
-<glyph unicode="A" horiz-adv-x="1198" d="M16 0l543 1456h78l545 -1456h-178l-148 397h-528l-144 -397h-168zM383 545h422l-160 436l-51 217h-2l-51 -221z" />
-<glyph unicode="B" horiz-adv-x="1196" d="M174 10v1411q76 12 176.5 20.5t218.5 8.5q80 0 163 -13.5t150.5 -51t111.5 -105.5t44 -174q0 -51 -16 -104.5t-49 -99.5t-84 -81t-121 -53v-8q61 -10 117.5 -35t99.5 -68t69.5 -104t26.5 -145q0 -111 -46 -192t-120.5 -132t-171 -75.5t-196.5 -24.5h-82t-98.5 3t-102.5 8 t-90 15zM344 145q14 -4 41 -6t57.5 -4t63 -3t57.5 -1q66 0 127.5 15.5t108.5 49t74.5 83t27.5 116.5q0 84 -33.5 135.5t-88 80t-122 38.5t-135.5 10h-178v-514zM344 803h107q35 0 84 2t81 6q49 16 92.5 39.5t77 55.5t53 74t19.5 91q0 68 -25.5 112t-68.5 70.5t-98.5 38 t-112.5 11.5q-68 0 -124 -3.5t-85 -9.5v-487z" />
-<glyph unicode="C" horiz-adv-x="1169" d="M115 717q0 201 54 341t143 229t200 130t225 41q123 0 201 -13t133 -36l-41 -149q-98 47 -280 47q-84 0 -166 -31t-146.5 -100.5t-103.5 -182t-39 -276.5q0 -147 37 -258t101.5 -184.5t151.5 -110.5t189 -37q92 0 161 18.5t116 47.5l41 -134q-61 -47 -155.5 -65.5 t-201.5 -18.5q-129 0 -241.5 44t-196.5 134.5t-133 230.5t-49 333z" />
-<glyph unicode="D" horiz-adv-x="1339" d="M174 -2v1436q39 6 87 9t100.5 4t102.5 2t93 1q172 0 298 -53.5t208 -148.5t122 -228t40 -293q0 -145 -38 -279.5t-120 -238t-213 -165.5t-317 -62q-33 0 -85.5 1t-107.5 4t-102 5t-68 6zM344 141q10 -2 39 -3t59.5 -2t59 -2t39.5 -1q143 0 240.5 49t155.5 132t82.5 190.5 t24.5 222.5q0 100 -22.5 201.5t-77.5 183.5t-148.5 134t-234.5 52h-58.5t-62 -2t-56.5 -4t-40 -4v-1147z" />
-<glyph unicode="E" horiz-adv-x="1097" d="M174 0v1434h780v-152h-610v-469h559v-151h-559v-510h621v-152h-791z" />
-<glyph unicode="F" horiz-adv-x="1058" d="M174 0v1434h780v-152h-610v-489h569v-152h-569v-641h-170z" />
-<glyph unicode="G" horiz-adv-x="1253" d="M115 717q0 199 57 340t149.5 230t207 130t229.5 41q123 0 202.5 -13t135.5 -36l-43 -149q-98 47 -281 47q-86 0 -171 -30t-152.5 -99.5t-110.5 -182t-43 -278.5q0 -152 35 -262.5t97 -183t150.5 -108.5t192.5 -36q131 0 223 51v400l-336 40v97h482v-631 q-33 -25 -79 -45.5t-98.5 -34.5t-108.5 -21.5t-110 -7.5q-137 0 -251.5 44t-198.5 135.5t-131 231.5t-47 331z" />
-<glyph unicode="H" horiz-adv-x="1376" d="M174 0v1434h170v-625h688v625h170v-1434h-170v657h-688v-657h-170z" />
-<glyph unicode="I" horiz-adv-x="595" d="M213 0v1434h170v-1434h-170z" />
-<glyph unicode="J" horiz-adv-x="595" d="M-70 12l33 146q57 -27 125 -27q86 0 113.5 60.5t27.5 164.5v1078h170v-1119q0 -164 -72.5 -249.5t-220.5 -85.5q-16 0 -40.5 2t-49 6t-48 10t-38.5 14z" />
-<glyph unicode="K" horiz-adv-x="1249" d="M174 0v1434h170v-668l92 29l482 639h196l-479 -617l-86 -67l104 -82l525 -668h-215l-523 664h-96v-664h-170z" />
-<glyph unicode="L" horiz-adv-x="1058" d="M174 0v1434h170v-1282h678v-152h-848z" />
-<glyph unicode="M" horiz-adv-x="1619" d="M174 0v1434h127l449 -734l67 -159h4l64 164l428 729h133v-1434h-170v963l20 215h-10l-78 -197l-372 -647h-52l-395 649l-74 195h-10l29 -213v-965h-160z" />
-<glyph unicode="N" horiz-adv-x="1378" d="M174 0v1456h90l686 -956l107 -197h10l-23 197v934h160v-1457h-90l-682 961l-110 207h-9l21 -207v-938h-160z" />
-<glyph unicode="O" horiz-adv-x="1400" d="M115 717q0 358 151.5 549.5t431.5 191.5q152 0 262.5 -53t183.5 -150.5t107.5 -233.5t34.5 -304q0 -358 -152.5 -550t-435.5 -192q-150 0 -259 53.5t-182 150.5t-107.5 233.5t-34.5 304.5zM295 717q0 -119 23.5 -225.5t72.5 -187.5t126 -129t181 -48q190 0 299 144.5 t109 445.5q0 117 -23.5 224.5t-74 188t-127 129t-183.5 48.5q-188 0 -295.5 -144.5t-107.5 -445.5z" />
-<glyph unicode="P" horiz-adv-x="1144" d="M174 0v1419q78 18 168 24.5t178 6.5q94 0 191.5 -18.5t177.5 -67.5t130 -135t50 -219q0 -131 -47 -221.5t-125 -146.5t-178.5 -80.5t-206.5 -24.5h-33.5t-49.5 1t-50.5 3t-34.5 4v-545h-170zM344 696q10 -4 32.5 -5t47.5 -2t47.5 -1h32.5q70 0 138.5 13.5t123.5 48t89 98 t34 162.5q0 84 -32 140t-84 90t-117.5 48.5t-131.5 14.5q-53 0 -102 -2.5t-78 -10.5v-594z" />
-<glyph unicode="Q" horiz-adv-x="1400" d="M115 717q0 358 151.5 549.5t431.5 191.5q152 0 262.5 -53t183.5 -150.5t107.5 -233.5t34.5 -304q0 -358 -152.5 -550t-435.5 -192q-150 0 -259 53.5t-182 150.5t-107.5 233.5t-34.5 304.5zM295 717q0 -119 23.5 -225.5t72.5 -187.5t126 -129t181 -48q190 0 299 144.5 t109 445.5q0 117 -23.5 224.5t-74 188t-127 129t-183.5 48.5q-188 0 -295.5 -144.5t-107.5 -445.5zM434 -100q29 6 55.5 10t55.5 4q86 0 171 -21.5t173 -47t180 -47t195 -21.5q90 0 178 20v-147q-49 -14 -96.5 -19.5t-94.5 -5.5q-102 0 -199.5 21.5t-188.5 47t-175 47 t-160 21.5q-49 0 -94 -12v150z" />
-<glyph unicode="R" horiz-adv-x="1218" d="M174 0v1419q78 14 179.5 22.5t185.5 8.5q94 0 179 -20.5t149.5 -67.5t103.5 -123t39 -184q0 -168 -92.5 -272.5t-233.5 -139.5l98 -76l357 -567h-199l-395 618l-201 31v-649h-170zM344 762h160q141 0 233 69.5t92 217.5q0 111 -75.5 182.5t-210.5 71.5h-55.5t-55 -2.5 t-50.5 -4.5t-38 -6v-528z" />
-<glyph unicode="S" horiz-adv-x="1087" d="M94 51l58 154q47 -27 139 -52.5t207 -25.5q68 0 127 13.5t102 43t68.5 75t25.5 106.5q0 86 -51 140t-128 96t-167 79t-167 89t-128 129t-51 196q0 168 116.5 266t332.5 98q125 0 227 -18.5t160 -46.5l-52 -150q-47 23 -138 43.5t-206 20.5q-135 0 -202.5 -60.5 t-67.5 -142.5q0 -80 51 -133t128 -95t167 -83t167 -95.5t128 -130t51 -188.5q0 -92 -32.5 -166t-96 -127t-154 -82t-204.5 -29q-154 0 -254 24t-156 52z" />
-<glyph unicode="T" horiz-adv-x="1136" d="M37 1282v152h1063v-152h-447v-1282h-170v1282h-446z" />
-<glyph unicode="U" horiz-adv-x="1335" d="M174 444v990h170v-910q0 -109 21.5 -183.5t64.5 -120.5t107.5 -66.5t150.5 -20.5q166 0 237.5 91t71.5 300v910h164v-957q0 -129 -33.5 -223t-96 -154.5t-150.5 -89t-195 -28.5q-254 0 -383 114.5t-129 347.5z" />
-<glyph unicode="V" horiz-adv-x="1163" d="M-4 1434h186l365 -985l49 -218h2l53 222l346 981h170l-542 -1457h-76z" />
-<glyph unicode="W" horiz-adv-x="1695" d="M16 1434h181l258 -961l32 -237h2l35 241l295 957h82l297 -961l35 -237h2l37 241l241 957h166l-399 -1457h-94l-291 961l-37 217h-10l-37 -219l-291 -959h-94z" />
-<glyph unicode="X" horiz-adv-x="1265" d="M53 0l477 729l-436 705h205l291 -486l51 -117l49 117l307 486h189l-451 -691l471 -743h-198l-324 514l-55 123l-54 -123l-331 -514h-191z" />
-<glyph unicode="Y" horiz-adv-x="1142" d="M16 1434h199l336 -627l35 -125h2l37 129l321 623h182l-469 -863v-571h-170v569z" />
-<glyph unicode="Z" d="M78 0v154l723 1046l86 82h-809v152h962v-154l-727 -1053l-86 -75h813v-152h-962z" />
-<glyph unicode="[" horiz-adv-x="622" d="M174 -471v1905h371v-144h-211v-1618h211v-143h-371z" />
-<glyph unicode="\" horiz-adv-x="778" d="M-76 1401l137 57l756 -1685l-135 -60z" />
-<glyph unicode="]" horiz-adv-x="622" d="M78 -328h213v1618h-213v144h373v-1905h-373v143z" />
-<glyph unicode="^" horiz-adv-x="1024" d="M98 891l381 565h60l346 -565h-168l-164 276l-47 142l-64 -144l-188 -274h-156z" />
-<glyph unicode="_" horiz-adv-x="835" d="M0 -276h836v-144h-836v144z" />
-<glyph unicode="`" horiz-adv-x="573" d="M123 1432v43h194l134 -306h-93z" />
-<glyph unicode="a" horiz-adv-x="1015" d="M80 274q0 90 37 150.5t103.5 96.5t159.5 51.5t206 15.5h56.5t55.5 -4q6 61 7 110q0 113 -45.5 158t-163.5 45q-35 0 -75 -5t-82 -14.5t-80 -22.5t-66 -30l-52 123q78 47 181.5 69.5t216.5 22.5q106 0 170.5 -28.5t98.5 -74.5t45 -101.5t11 -110.5q0 -123 -6 -239.5 t-6 -221.5q0 -76 6 -143.5t23 -124.5h-121l-43 143h-10q-18 -29 -46 -56.5t-67 -49t-90 -35.5t-117 -14t-122 20.5t-97 58t-64.5 91t-23.5 120.5zM250 291q0 -72 51 -118t131 -46q57 0 102.5 15.5t78 39t54 52t31.5 55.5v170q-29 2 -58.5 3t-57.5 1q-63 0 -124 -7 t-107 -26.5t-73.5 -53.5t-27.5 -85z" />
-<glyph unicode="b" horiz-adv-x="1105" d="M158 59v1375h164v-510h8q47 59 119.5 92t158.5 33q199 0 298.5 -127t99.5 -394q0 -268 -131.5 -407t-368.5 -139q-115 0 -208 24.5t-140 52.5zM322 170q39 -23 94 -34t114 -11q139 0 222.5 98.5t83.5 306.5q0 80 -14.5 150t-45.5 119t-78.5 77.5t-117.5 28.5 q-102 0 -166 -57t-92 -162v-516z" />
-<glyph unicode="c" horiz-adv-x="923" d="M100 512q0 260 115 398.5t330 138.5q98 0 166.5 -15.5t124.5 -44.5l-48 -141q-47 27 -104 42t-123 15q-291 0 -291 -393q0 -78 15.5 -148.5t51.5 -125t94 -87t144 -32.5q74 0 132.5 22.5t95.5 51.5l53 -125q-61 -45 -145 -69t-176 -24q-119 0 -201 38t-134.5 109t-76 170 t-23.5 220z" />
-<glyph unicode="d" horiz-adv-x="1101" d="M100 508q0 262 124 398t341 136q76 0 120 -8t95 -26v426h164v-1082q0 -104 2 -189t19 -167h-111l-41 145h-8q-41 -72 -119 -119t-182 -47q-205 0 -304.5 129t-99.5 404zM270 508q0 -84 13.5 -155.5t44 -123t80.5 -81t122 -29.5q104 0 166 54t84 165v508q-37 29 -84 41 t-125 12q-141 0 -221 -93t-80 -298z" />
-<glyph unicode="e" horiz-adv-x="1040" d="M100 512q0 262 117 399.5t334 137.5q70 0 139.5 -15.5t124.5 -58.5t90 -122t35 -208q0 -68 -12 -149h-658q0 -90 18.5 -160t57.5 -118t101.5 -73.5t152.5 -25.5q70 0 139.5 24.5t104.5 57.5l61 -119q-61 -49 -154.5 -78t-197.5 -29q-117 0 -203 38t-141 109t-82 169 t-27 221zM272 625h508q0 156 -59 218t-168 62q-121 0 -193.5 -63.5t-87.5 -216.5z" />
-<glyph unicode="f" horiz-adv-x="653" d="M45 881v143h160v57q0 94 15.5 164t50 114t90 65.5t137.5 21.5q66 0 116 -8t105 -31l-37 -137q-47 20 -89 26.5t-79 6.5q-53 0 -83 -16.5t-43 -48.5t-16 -78t-3 -107v-29h272v-143h-272v-881h-164v881h-160z" />
-<glyph unicode="g" horiz-adv-x="1099" d="M100 508q0 262 125 398t369 136q117 0 200 -18t148 -43v-1028q0 -199 -105.5 -293t-312.5 -94q-123 0 -197.5 15.5t-127.5 39.5l43 139q47 -18 104 -34.5t150 -16.5q86 0 140 15.5t87 51.5t45 92t12 134v98h-8q-41 -59 -104.5 -91t-165.5 -32q-207 0 -304.5 129.5 t-97.5 401.5zM270 510q0 -86 14.5 -157.5t45 -123t79.5 -80t121 -28.5q104 0 164 52t84 163v524q-82 39 -209 39q-139 0 -219 -94t-80 -295z" />
-<glyph unicode="h" horiz-adv-x="1120" d="M158 0v1434h164v-525h8q53 63 127.5 101.5t185.5 38.5q86 0 149.5 -19.5t105.5 -69t61.5 -132.5t19.5 -210v-618h-164v584q0 80 -9 140t-33.5 100t-66.5 60.5t-110 20.5q-96 0 -174 -62.5t-100 -160.5v-682h-164z" />
-<glyph unicode="i" horiz-adv-x="548" d="M158 1335q0 47 31.5 81t80.5 34t84 -34t35 -81t-35 -77.5t-84 -30.5t-80.5 30.5t-31.5 77.5zM193 0v1024h163v-1024h-163z" />
-<glyph unicode="j" horiz-adv-x="546" d="M18 -291q57 0 91 17.5t52.5 54.5t23.5 93t5 132v1018h164v-1079q0 -190 -65.5 -284.5t-208.5 -94.5q-16 0 -30.5 1t-31.5 3v139zM156 1335q0 47 31.5 81t80.5 34t84 -34t35 -81t-35 -77.5t-84 -30.5t-80.5 30.5t-31.5 77.5z" />
-<glyph unicode="k" horiz-adv-x="980" d="M158 0v1434h164v-873l84 29l317 434h190l-313 -412l-84 -67l102 -82l343 -463h-203l-342 461h-94v-461h-164z" />
-<glyph unicode="l" horiz-adv-x="598" d="M176 205v1229h164v-1182q0 -72 24.5 -102.5t69.5 -30.5q27 0 57.5 4t69.5 18l19 -129q-33 -16 -91.5 -26.5t-101.5 -10.5q-92 0 -151.5 52.5t-59.5 177.5z" />
-<glyph unicode="m" horiz-adv-x="1662" d="M158 0v1024h114l31 -125h8q55 66 128 108t190 42q98 0 160.5 -38t97.5 -132q47 80 130 125t187 45q86 0 145.5 -19.5t98.5 -69t56.5 -133.5t17.5 -213v-614h-164v616q0 74 -7.5 128.5t-29 90t-59 53t-99.5 17.5q-102 0 -159.5 -57t-81.5 -164v-684h-164v580 q0 82 -7.5 142t-28 101t-58 61.5t-99.5 20.5q-94 0 -156.5 -57t-86.5 -143v-705h-164z" />
-<glyph unicode="n" horiz-adv-x="1120" d="M158 0v1024h114l31 -125h8q49 66 132 108t198 42q84 0 147.5 -19.5t105.5 -69t63.5 -132.5t21.5 -210v-618h-164v584q0 160 -46 240.5t-169 80.5q-109 0 -179.5 -58.5t-98.5 -146.5v-700h-164z" />
-<glyph unicode="o" horiz-adv-x="1097" d="M100 512q0 260 116 398.5t333 138.5q115 0 200 -38t140 -109t81.5 -170t26.5 -220q0 -260 -115.5 -398.5t-332.5 -138.5q-115 0 -200 38t-140 109t-82 170t-27 220zM270 512q0 -78 15.5 -149.5t48.5 -125t86 -86t129 -32.5h3q275 0 275 390q0 83 -15 154.5t-48 125 t-86 85t-129 31.5h-3q-276 0 -276 -393z" />
-<glyph unicode="p" horiz-adv-x="1107" d="M158 -410v1434h112l31 -123h8q47 72 122 110t171 38q205 0 305.5 -121t100.5 -396q0 -129 -34 -232t-95.5 -175t-148.5 -111t-193 -39q-76 0 -120 9.5t-95 31.5v-426h-164zM322 178q37 -29 84 -44t124 -15q141 0 224.5 105.5t83.5 310.5q0 84 -14.5 152.5t-46.5 116.5 t-82 74.5t-124 26.5q-104 0 -164.5 -54t-84.5 -165v-508z" />
-<glyph unicode="q" horiz-adv-x="1099" d="M100 508q0 264 127 399t371 135q109 0 204 -20.5t140 -42.5v-1389h-164v512h-8q-41 -61 -103.5 -94t-164.5 -33q-205 0 -303.5 130.5t-98.5 402.5zM270 510q0 -86 14.5 -158.5t45 -124t79.5 -80t121 -28.5q104 0 164 53t84 164v524q-76 39 -209 39q-141 0 -220 -95 t-79 -294z" />
-<glyph unicode="r" horiz-adv-x="696" d="M158 0v1024h114l31 -125h8q39 70 93.5 107.5t138.5 37.5q59 0 133 -20l-35 -158q-61 20 -117 21q-88 0 -139 -48t-63 -122v-717h-164z" />
-<glyph unicode="s" horiz-adv-x="862" d="M80 51l49 139q47 -27 123 -49t154 -22q88 0 145 35t57 125q0 61 -36.5 96t-91 58.5t-119 45t-119 55t-91 87t-36.5 143.5q0 147 84 216t233 69q111 0 185.5 -19.5t130.5 -46.5l-39 -135q-47 23 -114 40t-142 17q-90 0 -132 -30.5t-42 -106.5q0 -53 36.5 -83t91 -53.5 t119 -46t118.5 -59.5t91 -93t37 -148q0 -66 -21.5 -123.5t-66.5 -98t-111.5 -64.5t-156.5 -24q-117 0 -199 22.5t-137 53.5z" />
-<glyph unicode="t" horiz-adv-x="694" d="M23 881v143h159v203l164 47v-250h279v-143h-279v-568q0 -106 26.5 -150t90.5 -44q53 0 90 11t82 30l37 -125q-55 -27 -121 -43.5t-141 -16.5q-125 0 -176.5 71t-51.5 237v598h-159z" />
-<glyph unicode="u" horiz-adv-x="1103" d="M141 406v618h164v-584q0 -80 9.5 -140t32 -100t61 -60.5t98.5 -20.5q55 0 98 17.5t77 48t59.5 70.5t41.5 85v684h164v-733q0 -74 5 -153t18 -138h-113l-41 162h-10q-47 -80 -127 -133.5t-203 -53.5q-82 0 -144.5 19.5t-104.5 69t-63.5 132.5t-21.5 210z" />
-<glyph unicode="v" horiz-adv-x="987" d="M18 1024h189l246 -600l57 -195h2l51 199l230 596h176l-437 -1047h-69z" />
-<glyph unicode="w" horiz-adv-x="1505" d="M16 1024h179l202 -596l35 -199h2l49 203l219 592h119l236 -598l51 -197h4l39 201l182 594h156l-344 -1047h-80l-268 676l-39 168h-6l-41 -170l-258 -674h-80z" />
-<glyph unicode="x" horiz-adv-x="1054" d="M57 0l369 524l-344 500h201l194 -283l58 -116l59 116l199 283h184l-346 -492l366 -532h-194l-217 311l-62 123l-63 -123l-221 -311h-183z" />
-<glyph unicode="y" horiz-adv-x="954" d="M25 1024h188l246 -664l57 -196h10l45 198l199 662h166l-303 -920q-35 -100 -69 -194t-74.5 -168t-92 -118t-118.5 -44q-74 0 -121 21l28 141q27 -10 52 -10q57 0 110 60.5t88 207.5z" />
-<glyph unicode="z" horiz-adv-x="915" d="M86 0v143l473 652l86 86h-559v143h729v-143l-477 -658l-84 -80h561v-143h-729z" />
-<glyph unicode="{" horiz-adv-x="708" d="M117 410v143q78 0 121 41t43 131v496q0 96 48 155.5t146 59.5h174v-144h-102q-55 0 -81 -27.5t-26 -93.5v-485q0 -90 -43 -137t-100 -57v-13q55 -8 99 -62.5t44 -140.5v-483q0 -63 24.5 -92t84.5 -29h100v-143h-174q-92 0 -143 54.5t-51 158.5v487q0 104 -43 142.5 t-121 38.5z" />
-<glyph unicode="|" horiz-adv-x="487" d="M174 -266v1700h139v-1700h-139z" />
-<glyph unicode="}" horiz-adv-x="708" d="M113 -328h102q55 0 81 28t26 93v486q0 90 42 137t99 57v12q-55 8 -98 62.5t-43 140.5v483q0 63 -25 92t-82 29h-102v144h176q90 0 141 -54.5t51 -158.5v-488q0 -104 43 -142t121 -38v-143q-78 0 -121 -41t-43 -131v-496q0 -96 -48 -155.5t-146 -59.5h-174v143z" />
-<glyph unicode="~" horiz-adv-x="1034" d="M63 739q88 68 160 94.5t131 26.5q57 0 106.5 -17.5t94.5 -39t88 -38.5t90 -17q39 0 80 16t88 57l70 -125q-78 -53 -140.5 -74.5t-113.5 -21.5q-55 0 -101.5 17.5t-88.5 39t-84 39t-91 17.5q-47 0 -100 -21.5t-119 -75.5z" />
-<glyph unicode="&#xa1;" horiz-adv-x="622" d="M152 928q0 55 31.5 87t84.5 32q55 0 88 -32t33 -87q0 -53 -32.5 -86t-88.5 -33q-53 0 -84.5 33t-31.5 86zM190 301l35 361h101l34 -361v-711h-170v711z" />
-<glyph unicode="&#xa2;" d="M178 512q0 236 97.5 372t277.5 158v187h145v-182q72 -4 127.5 -19.5t100.5 -38.5l-47 -139q-41 20 -91.5 34.5t-103.5 18.5v-784q66 4 119 25.5t88 48.5l53 -125q-49 -35 -111.5 -56.5t-134.5 -29.5v-187h-145v185q-102 10 -173 52t-116 110.5t-65.5 162.5t-20.5 207z M348 512q0 -68 11.5 -130.5t38 -114.5t69.5 -89t106 -51v772q-225 -43 -225 -387z" />
-<glyph unicode="&#xa3;" d="M86 0v147q66 0 112 24t75.5 61.5t44 86t14.5 97.5q0 68 -13.5 122t-33.5 103h-199v143h135q-25 53 -41 117t-16 150q0 201 114.5 304t313.5 103q125 0 217 -18.5t152 -46.5l-54 -146q-47 23 -126 41.5t-191 18.5q-123 0 -189.5 -66.5t-66.5 -179.5q0 -86 20.5 -151.5 t48.5 -125.5h330v-143h-268q16 -47 26.5 -98t10.5 -113q0 -61 -18.5 -125.5t-55.5 -105.5l-80 -68v-8l127 29h524v-152h-913z" />
-<glyph unicode="&#xa4;" d="M43 293l158 160l69 45q-63 86 -63 209q0 59 17.5 112t45.5 99l-69 43l-158 159l100 101l160 -158l43 -72q86 68 211 68q121 0 211 -68l45 72l160 158l100 -101l-158 -159l-71 -46q66 -88 65 -208q0 -123 -65 -211l71 -43l158 -160l-100 -98l-160 157l-43 68 q-88 -63 -213 -64q-127 0 -211 64l-43 -68l-160 -157zM348 707q0 -92 58.5 -153.5t150.5 -61.5t151.5 61t59.5 154q0 92 -59.5 154.5t-151.5 62.5t-150.5 -62.5t-58.5 -154.5z" />
-<glyph unicode="&#xa5;" d="M4 1434h199l336 -627l34 -125h2l37 129l322 623h182l-416 -762h193v-123h-248v-129h248v-123h-248v-297h-170v297h-248v123h248v129h-248v123h193z" />
-<glyph unicode="&#xa6;" horiz-adv-x="487" d="M174 -266v688h139v-688h-139zM174 745v689h139v-689h-139z" />
-<glyph unicode="&#xa7;" horiz-adv-x="1017" d="M117 723q0 63 31.5 123.5t84.5 107.5l84 29q-53 33 -88.5 83t-35.5 134q0 115 84.5 186.5t236.5 71.5q111 0 187.5 -18.5t132.5 -44.5l-39 -138q-49 23 -117 40.5t-141 17.5q-92 0 -136.5 -33t-44.5 -88q0 -53 40 -83t101.5 -52.5t131 -45t131 -58t101.5 -94t40 -150.5 q0 -63 -30.5 -123t-84.5 -107l-92 -28q55 -33 93 -84.5t38 -135.5q0 -63 -24.5 -111t-68.5 -81t-103.5 -49.5t-126.5 -16.5q-115 0 -188.5 19.5t-131.5 48.5l41 133q47 -23 113.5 -40t144.5 -17q86 0 133.5 27.5t47.5 93.5q0 53 -40 83.5t-101.5 53t-131.5 45t-131 58.5 t-101 93.5t-40 149.5zM281 727q0 -51 26.5 -84t68.5 -56.5t96 -40t110 -36.5q29 12 56.5 32.5t50 46t35.5 55.5t13 63q0 51 -26.5 83.5t-70.5 56t-99.5 41t-110.5 38.5q-59 -27 -104 -76t-45 -123z" />
-<glyph unicode="&#xa8;" horiz-adv-x="841" d="M123 1337q0 47 27.5 76t72.5 29t73 -29t28 -76q0 -43 -28 -71.5t-73 -28.5t-72.5 28.5t-27.5 71.5zM516 1337q0 47 27.5 76t72.5 29q47 0 75 -29t28 -76q0 -43 -27.5 -71.5t-75.5 -28.5q-45 0 -72.5 28.5t-27.5 71.5z" />
-<glyph unicode="&#xa9;" horiz-adv-x="1650" d="M104 594q0 170 57.5 304t156 226.5t229.5 141.5t278 49t278.5 -49t230 -141.5t155.5 -226.5t57 -304t-57 -304t-155.5 -226.5t-229.5 -141.5t-279 -49q-164 0 -297 49t-227 141.5t-145.5 226.5t-51.5 304zM248 594q0 -141 45 -251t123 -183.5t183.5 -112.5t225.5 -39 q121 0 226.5 39t183.5 112.5t123 183.5t45 251t-45 250.5t-123 183.5t-183.5 113t-226.5 39t-226 -39t-183 -113t-123 -183.5t-45 -250.5zM481 594q0 186 93.5 287.5t246.5 101.5q37 0 67 -4t55.5 -11t50 -17.5t55.5 -22.5l-54 -125q-45 23 -86 31t-69 8q-86 0 -140.5 -53.5 t-54.5 -194.5q0 -119 53.5 -183.5t157.5 -66.5q96 0 164 37l43 -121q-47 -27 -105.5 -41t-136.5 -14q-166 0 -253 104.5t-87 284.5z" />
-<glyph unicode="&#xaa;" horiz-adv-x="790" d="M98 965q0 63 31 106t83 69.5t123 39t152 12.5q14 0 27.5 -1t28.5 -1q2 12 2 23.5v21.5q0 55 -24.5 77.5t-94.5 22.5q-82 0 -149.5 -15t-106.5 -36l-31 102q51 27 135 45.5t187 18.5q127 0 174 -53.5t47 -153.5q0 -78 -3 -149.5t-3 -137.5q0 -49 3 -94t13 -84h-112l-27 94 h-8q-27 -35 -76 -68.5t-137 -33.5q-106 0 -170 52t-64 143zM242 975q0 -41 29.5 -65.5t82.5 -24.5q43 0 75 10t54.5 27.5t37 37t22.5 37.5v86q-23 2 -43.5 2h-42.5q-43 0 -82 -4t-69 -16t-47 -33.5t-17 -56.5z" />
-<glyph unicode="&#xab;" horiz-adv-x="978" d="M80 530l328 471l110 -88l-201 -297l-98 -84l98 -73l213 -291l-110 -90zM455 530l323 467l109 -86l-199 -295l-98 -84l98 -73l211 -289l-106 -88z" />
-<glyph unicode="&#xac;" horiz-adv-x="1034" d="M84 655v148h868v-393h-147v245h-721z" />
-<glyph unicode="&#xad;" horiz-adv-x="737" d="M121 514v152h495v-152h-495z" />
-<glyph unicode="&#xae;" horiz-adv-x="1433" d="M174 924q0 131 43 232t118 170t173 104.5t209 35.5q113 0 212 -35.5t173 -104.5t116 -170t42 -232t-43 -232.5t-118 -170t-173.5 -104.5t-208.5 -36q-115 0 -213 36t-172 104.5t-116 170t-42 232.5zM303 924q0 -106 33 -185.5t89 -131.5t132 -78.5t160 -26.5 q88 0 163.5 25.5t131 77.5t87 131t31.5 188q0 106 -32.5 185t-89 131t-131 79t-160.5 27q-90 0 -166 -27t-131 -79t-86 -131t-31 -185zM506 659v531q33 10 92 15t113 5q86 0 147.5 -35.5t61.5 -123.5q0 -66 -42 -101t-104 -39l57 -28l152 -224h-125l-147 213l-99 31v-244 h-106zM612 965h70q59 0 92 18t33 64q0 71 -119 71q-23 0 -43 -1t-33 -7v-145z" />
-<glyph unicode="&#xaf;" horiz-adv-x="851" d="M123 1190v127h606v-127h-606z" />
-<glyph unicode="&#xb0;" horiz-adv-x="870" d="M174 1169q0 63 22.5 116.5t61.5 91.5t92 59.5t113 21.5q59 0 112.5 -19.5t92.5 -57.5t61.5 -91t22.5 -121t-22.5 -121t-61.5 -90.5t-92.5 -57t-112.5 -19.5t-112.5 19.5t-92.5 57t-61.5 90.5t-22.5 121zM303 1169q0 -78 48 -121.5t112 -43.5q63 0 111.5 44t48.5 121 q0 78 -48.5 122t-111.5 44t-111.5 -44t-48.5 -122z" />
-<glyph unicode="&#xb1;" horiz-adv-x="1034" d="M82 365v147h868v-147h-868zM82 864v148h360v368h148v-368h360v-148h-360v-248h-148v248h-360z" />
-<glyph unicode="&#xb2;" horiz-adv-x="806" d="M98 778v68q47 39 118 104.5t136.5 141t111.5 155.5t46 148q0 63 -41 95t-100 32q-55 0 -107.5 -19.5t-91.5 -44.5l-45 117q53 37 123.5 57.5t144.5 20.5q129 0 194.5 -63.5t65.5 -176.5q0 -63 -21.5 -122.5t-57 -117t-85 -114t-104.5 -113.5l-94 -65v-4l117 30h286v-129 h-596z" />
-<glyph unicode="&#xb3;" horiz-adv-x="808" d="M137 803l31 123q35 -16 80 -27.5t98 -11.5q98 0 150.5 39t52.5 114q0 66 -47 107t-152 41h-112v47l198 237l70 56l-100 -13h-267v123h525v-67l-211 -252l-52 -37v-4l48 6q113 -2 178 -67.5t65 -176.5q0 -125 -91 -200.5t-243 -75.5q-74 0 -127 12t-94 27z" />
-<glyph unicode="&#xb4;" horiz-adv-x="548" d="M123 1169l121 306h182v-43l-207 -263h-96z" />
-<glyph unicode="&#xb6;" horiz-adv-x="1011" d="M76 1036q0 76 23.5 147.5t68.5 127t110.5 89.5t147.5 34h92v-1700h-139v901q-66 0 -121 33.5t-95 90t-63.5 129.5t-23.5 148zM698 -266v1700h140v-1700h-140z" />
-<glyph unicode="&#xb7;" horiz-adv-x="546" d="M155 606q0 55 32 87t85 32q55 0 88 -31.5t33 -87.5q0 -53 -33 -86t-88 -33q-53 0 -85 33t-32 86z" />
-<glyph unicode="&#xb8;" horiz-adv-x="587" d="M123 -418l14 101q12 -2 22.5 -3.5t47.5 -3.5q25 0 48.5 3.5t36.5 13.5t17 22.5t4 24.5q2 59 -176 76l99 184h116l-49 -88q86 -16 124 -53t38 -101q0 -84 -67.5 -134t-182.5 -50q-23 0 -45.5 2t-46.5 6z" />
-<glyph unicode="&#xb9;" horiz-adv-x="806" d="M109 1444l315 209h84v-750h194v-125h-555v125h218v520l14 74l-55 -57l-160 -97z" />
-<glyph unicode="&#xba;" horiz-adv-x="815" d="M90 1110q0 92 24.5 157.5t66.5 108.5t100.5 62.5t126.5 19.5t126 -18.5t100 -59.5t66.5 -107.5t24.5 -162.5t-24.5 -162.5t-66.5 -107.5t-100.5 -59.5t-125.5 -18.5q-68 0 -126.5 18.5t-100.5 59.5t-66.5 107.5t-24.5 162.5zM242 1110q0 -123 44 -176t122 -53 q39 0 69.5 11t52 36.5t32.5 69.5t11 112t-11 112t-32.5 69.5t-52.5 36.5t-69 11q-78 0 -122 -48t-44 -181z" />
-<glyph unicode="&#xbb;" horiz-adv-x="978" d="M80 909l106 88l340 -448l-327 -467l-107 86l197 295l100 84l-100 74zM449 911l108 90l342 -452l-328 -471l-110 88l201 297l98 84l-98 74z" />
-<glyph unicode="&#xbc;" horiz-adv-x="1714" d="M109 1239l315 209h86v-875h-143v646l14 73l-57 -57l-160 -96zM330 49l997 1411l106 -71l-997 -1414zM907 197v76l463 618h92v-573h170v-121h-170v-197h-137v197h-418zM1061 307l102 11h162v262l12 100h-4l-45 -94l-160 -215z" />
-<glyph unicode="&#xbd;" horiz-adv-x="1740" d="M109 1239l315 209h86v-875h-143v646l14 73l-57 -57l-160 -96zM330 49l997 1411l106 -71l-997 -1414zM1063 0v68q47 39 118 104.5t136.5 141t111.5 155.5t46 148q0 63 -41 95t-100 32q-55 0 -107.5 -19.5t-91.5 -44.5l-45 117q53 37 123.5 57.5t144.5 20.5 q129 0 194.5 -63.5t65.5 -176.5q0 -63 -21.5 -122.5t-57 -117t-85 -114t-104.5 -113.5l-94 -65v-4l117 30h286v-129h-596z" />
-<glyph unicode="&#xbe;" horiz-adv-x="1794" d="M155 598l31 123q35 -16 80 -27.5t98 -11.5q98 0 150.5 39t52.5 114q0 66 -47 107t-152 41h-112v47l198 237l70 56l-100 -13h-267v123h525v-67l-211 -252l-52 -37v-4l48 6q113 -2 178 -67.5t65 -176.5q0 -125 -91 -200.5t-243 -75.5q-74 0 -127 12t-94 27zM410 49 l997 1411l106 -71l-997 -1414zM987 197v76l463 618h92v-573h170v-121h-170v-197h-137v197h-418zM1141 307l102 11h162v262l12 100h-4l-45 -94l-160 -215z" />
-<glyph unicode="&#xbf;" horiz-adv-x="892" d="M76 -100q0 92 27.5 160.5t69.5 125t90 105.5t90 103.5t70 117.5t28 150h135q2 -10 2 -22.5v-23.5q0 -86 -25.5 -151.5t-63.5 -119.5t-82 -101t-82 -95.5t-63.5 -102.5t-25.5 -124q0 -94 54 -153.5t181 -59.5q74 0 150 25.5t131 60.5l55 -127q-78 -47 -164 -74.5 t-213 -27.5q-90 0 -158.5 25.5t-114.5 70.5t-68.5 105.5t-22.5 132.5zM391 930q0 55 32 87t85 32q55 0 88 -32t33 -87q0 -53 -33 -86t-88 -33q-53 0 -85 33t-32 86z" />
-<glyph unicode="&#xc0;" horiz-adv-x="1198" d="M16 0l543 1456h78l545 -1456h-178l-148 397h-528l-144 -397h-168zM277 1739v43h233l242 -242h-152zM383 545h422l-160 436l-51 217h-2l-51 -221z" />
-<glyph unicode="&#xc1;" horiz-adv-x="1198" d="M16 0l543 1456h78l545 -1456h-178l-148 397h-528l-144 -397h-168zM383 545h422l-160 436l-51 217h-2l-51 -221zM436 1540l242 242h233v-43l-334 -199h-141z" />
-<glyph unicode="&#xc2;" horiz-adv-x="1198" d="M16 0l543 1456h78l545 -1456h-178l-148 397h-528l-144 -397h-168zM270 1530v45l272 207h123l260 -209v-43h-166l-123 100l-34 72l-39 -70l-131 -102h-162zM383 545h422l-160 436l-51 217h-2l-51 -221z" />
-<glyph unicode="&#xc3;" horiz-adv-x="1198" d="M16 0l543 1456h78l545 -1456h-178l-148 397h-528l-144 -397h-168zM277 1608q63 66 117.5 89t103.5 23q39 0 76 -10t70.5 -23.5t66.5 -23.5t64 -10q53 0 102 43l51 -88q-55 -51 -104 -70.5t-92 -19.5q-39 0 -74 10t-69 23.5t-66.5 23.5t-65.5 10t-64.5 -13t-66.5 -48z M383 545h422l-160 436l-51 217h-2l-51 -221z" />
-<glyph unicode="&#xc4;" horiz-adv-x="1198" d="M16 0l543 1456h78l545 -1456h-178l-148 397h-528l-144 -397h-168zM295 1626q0 43 30.5 69.5t79.5 26.5q47 0 77 -26.5t30 -69.5q0 -41 -29.5 -67.5t-77.5 -26.5q-49 0 -79.5 26.5t-30.5 67.5zM383 545h422l-160 436l-51 217h-2l-51 -221zM688 1626q0 43 29.5 69.5 t77.5 26.5q49 0 79.5 -26.5t30.5 -69.5q0 -41 -30.5 -67.5t-79.5 -26.5q-47 0 -77 26.5t-30 67.5z" />
-<glyph unicode="&#xc5;" horiz-adv-x="1198" d="M16 0l525 1407q-78 12 -117 56t-39 110q0 76 51 125t164 49q102 0 159.5 -44t57.5 -130q0 -66 -41 -110t-121 -56l527 -1407h-178l-148 397h-528l-144 -397h-168zM383 545h422l-160 436l-51 217h-2l-51 -221zM510 1573q0 -35 21.5 -58.5t68.5 -23.5q45 0 68.5 22.5 t23.5 59.5q0 39 -22.5 62.5t-69.5 23.5q-45 0 -67.5 -23.5t-22.5 -62.5z" />
-<glyph unicode="&#xc6;" horiz-adv-x="1732" d="M-45 0l850 1434h784v-152h-610v-469h559v-151h-559v-510h620v-152h-790v406h-438l-230 -406h-186zM459 549h350v680h-8l-70 -211z" />
-<glyph unicode="&#xc7;" horiz-adv-x="1169" d="M115 717q0 201 54 341t143 229t200 130t225 41q123 0 201 -13t133 -36l-41 -149q-98 47 -280 47q-84 0 -166 -31t-146.5 -100.5t-103.5 -182t-39 -276.5q0 -147 37 -258t101.5 -184.5t151.5 -110.5t189 -37q92 0 161 18.5t116 47.5l41 -134q-53 -41 -131 -59t-170 -23 l-35 -65q86 -16 124 -53t38 -101q0 -80 -66 -132t-184 -52q-23 0 -45.5 2t-47.5 6l19 80q12 -2 22.5 -2h20.5q45 0 70.5 8t39 19.5t16.5 26t3 26.5q0 57 -176 76l86 164q-119 8 -221.5 56t-178 138t-118.5 225.5t-43 317.5z" />
-<glyph unicode="&#xc8;" horiz-adv-x="1097" d="M174 0v1434h780v-152h-610v-469h559v-151h-559v-510h621v-152h-791zM193 1739v43h233l242 -242h-152z" />
-<glyph unicode="&#xc9;" horiz-adv-x="1097" d="M174 0v1434h780v-152h-610v-469h559v-151h-559v-510h621v-152h-791zM434 1540l242 242h233v-43l-334 -199h-141z" />
-<glyph unicode="&#xca;" horiz-adv-x="1097" d="M174 0v1434h780v-152h-610v-469h559v-151h-559v-510h621v-152h-791zM223 1530v45l272 207h123l260 -209v-43h-166l-123 100l-34 72l-39 -70l-131 -102h-162z" />
-<glyph unicode="&#xcb;" horiz-adv-x="1097" d="M174 0v1434h780v-152h-610v-469h559v-151h-559v-510h621v-152h-791zM246 1626q0 43 30.5 69.5t79.5 26.5q47 0 77 -26.5t30 -69.5q0 -41 -29.5 -67.5t-77.5 -26.5q-49 0 -79.5 26.5t-30.5 67.5zM639 1626q0 43 29.5 69.5t77.5 26.5q49 0 79.5 -26.5t30.5 -69.5 q0 -41 -30.5 -67.5t-79.5 -26.5q-47 0 -77 26.5t-30 67.5z" />
-<glyph unicode="&#xcc;" horiz-adv-x="595" d="M-76 1739v43h233l242 -242h-152zM213 0v1434h170v-1434h-170z" />
-<glyph unicode="&#xcd;" horiz-adv-x="595" d="M127 1540l242 242h233v-43l-334 -199h-141zM213 0v1434h170v-1434h-170z" />
-<glyph unicode="&#xce;" horiz-adv-x="595" d="M-31 1530v45l272 207h123l260 -209v-43h-166l-123 100l-34 72l-39 -70l-131 -102h-162zM213 0v1434h170v-1434h-170z" />
-<glyph unicode="&#xcf;" horiz-adv-x="595" d="M-4 1626q0 43 30.5 69.5t79.5 26.5q47 0 77 -26.5t30 -69.5q0 -41 -29.5 -67.5t-77.5 -26.5q-49 0 -79.5 26.5t-30.5 67.5zM213 0v1434h170v-1434h-170zM389 1626q0 43 29.5 69.5t77.5 26.5q49 0 79.5 -26.5t30.5 -69.5q0 -41 -30.5 -67.5t-79.5 -26.5q-47 0 -77 26.5 t-30 67.5z" />
-<glyph unicode="&#xd0;" horiz-adv-x="1347" d="M-2 680v123h184v631q39 6 87 9t100.5 4t102.5 2t93 1q172 0 298 -53.5t208 -148.5t122 -228t40 -293q0 -145 -38 -279.5t-120 -238t-213 -165.5t-317 -62q-33 0 -85 1t-107.5 4t-102.5 5t-68 6v682h-184zM352 141q10 -2 39 -3t59.5 -2t59.5 -2t39 -1q143 0 240.5 49 t156 132t83 190.5t24.5 222.5q0 100 -22.5 201.5t-78 183.5t-149 134t-234.5 52h-58.5t-62 -2t-56 -4t-40.5 -4v-485h301v-123h-301v-539z" />
-<glyph unicode="&#xd1;" horiz-adv-x="1378" d="M174 0v1456h90l686 -956l107 -197h10l-23 197v934h160v-1457h-90l-682 961l-110 207h-9l21 -207v-938h-160zM367 1608q63 66 117.5 89t103.5 23q39 0 76 -10t70.5 -23.5t66.5 -23.5t64 -10q53 0 102 43l51 -88q-55 -51 -104 -70.5t-92 -19.5q-39 0 -74 10t-69 23.5 t-66.5 23.5t-65.5 10t-64.5 -13t-66.5 -48z" />
-<glyph unicode="&#xd2;" horiz-adv-x="1400" d="M115 717q0 358 151.5 549.5t431.5 191.5q152 0 262.5 -53t183.5 -150.5t107.5 -233.5t34.5 -304q0 -358 -152.5 -550t-435.5 -192q-150 0 -259 53.5t-182 150.5t-107.5 233.5t-34.5 304.5zM295 717q0 -119 23.5 -225.5t72.5 -187.5t126 -129t181 -48q190 0 299 144.5 t109 445.5q0 117 -23.5 224.5t-74 188t-127 129t-183.5 48.5q-188 0 -295.5 -144.5t-107.5 -445.5zM365 1739v43h233l242 -242h-152z" />
-<glyph unicode="&#xd3;" horiz-adv-x="1400" d="M115 717q0 358 151.5 549.5t431.5 191.5q152 0 262.5 -53t183.5 -150.5t107.5 -233.5t34.5 -304q0 -358 -152.5 -550t-435.5 -192q-150 0 -259 53.5t-182 150.5t-107.5 233.5t-34.5 304.5zM295 717q0 -119 23.5 -225.5t72.5 -187.5t126 -129t181 -48q190 0 299 144.5 t109 445.5q0 117 -23.5 224.5t-74 188t-127 129t-183.5 48.5q-188 0 -295.5 -144.5t-107.5 -445.5zM608 1540l242 242h233v-43l-334 -199h-141z" />
-<glyph unicode="&#xd4;" horiz-adv-x="1400" d="M115 717q0 358 151.5 549.5t431.5 191.5q152 0 262.5 -53t183.5 -150.5t107.5 -233.5t34.5 -304q0 -358 -152.5 -550t-435.5 -192q-150 0 -259 53.5t-182 150.5t-107.5 233.5t-34.5 304.5zM295 717q0 -119 23.5 -225.5t72.5 -187.5t126 -129t181 -48q190 0 299 144.5 t109 445.5q0 117 -23.5 224.5t-74 188t-127 129t-183.5 48.5q-188 0 -295.5 -144.5t-107.5 -445.5zM367 1530v45l272 207h123l260 -209v-43h-166l-123 100l-34 72l-39 -70l-131 -102h-162z" />
-<glyph unicode="&#xd5;" horiz-adv-x="1400" d="M115 717q0 358 151.5 549.5t431.5 191.5q152 0 262.5 -53t183.5 -150.5t107.5 -233.5t34.5 -304q0 -358 -152.5 -550t-435.5 -192q-150 0 -259 53.5t-182 150.5t-107.5 233.5t-34.5 304.5zM295 717q0 -119 23.5 -225.5t72.5 -187.5t126 -129t181 -48q190 0 299 144.5 t109 445.5q0 117 -23.5 224.5t-74 188t-127 129t-183.5 48.5q-188 0 -295.5 -144.5t-107.5 -445.5zM373 1608q63 66 117.5 89t103.5 23q39 0 76 -10t70.5 -23.5t66.5 -23.5t64 -10q53 0 102 43l51 -88q-55 -51 -104 -70.5t-92 -19.5q-39 0 -74 10t-69 23.5t-66.5 23.5 t-65.5 10t-64.5 -13t-66.5 -48z" />
-<glyph unicode="&#xd6;" horiz-adv-x="1400" d="M115 717q0 358 151.5 549.5t431.5 191.5q152 0 262.5 -53t183.5 -150.5t107.5 -233.5t34.5 -304q0 -358 -152.5 -550t-435.5 -192q-150 0 -259 53.5t-182 150.5t-107.5 233.5t-34.5 304.5zM295 717q0 -119 23.5 -225.5t72.5 -187.5t126 -129t181 -48q190 0 299 144.5 t109 445.5q0 117 -23.5 224.5t-74 188t-127 129t-183.5 48.5q-188 0 -295.5 -144.5t-107.5 -445.5zM389 1626q0 43 30.5 69.5t79.5 26.5q47 0 77 -26.5t30 -69.5q0 -41 -29.5 -67.5t-77.5 -26.5q-49 0 -79.5 26.5t-30.5 67.5zM782 1626q0 43 29.5 69.5t77.5 26.5 q49 0 79.5 -26.5t30.5 -69.5q0 -41 -30.5 -67.5t-79.5 -26.5q-47 0 -77 26.5t-30 67.5z" />
-<glyph unicode="&#xd7;" horiz-adv-x="1034" d="M152 430l262 264l-258 256l104 109l258 -260l260 260l105 -109l-258 -258l258 -260l-105 -106l-260 262l-260 -262z" />
-<glyph unicode="&#xd8;" horiz-adv-x="1400" d="M115 717q0 358 151.5 549.5t431.5 191.5q117 0 207 -30.5t160 -90.5l86 123l106 -71l-104 -148q68 -98 100.5 -230t32.5 -294q0 -358 -152.5 -550t-435.5 -192q-219 0 -358 115l-80 -115l-106 74l96 137q-70 98 -102.5 231.5t-32.5 299.5zM295 717q0 -104 17.5 -196.5 t54.5 -170.5l594 842q-47 53 -112 84t-151 31q-188 0 -295.5 -144.5t-107.5 -445.5zM442 233q47 -51 110.5 -78.5t145.5 -27.5q190 0 299 144.5t109 445.5q0 98 -17.5 190t-52.5 168z" />
-<glyph unicode="&#xd9;" horiz-adv-x="1335" d="M174 444v990h170v-910q0 -109 21.5 -183.5t64.5 -120.5t107.5 -66.5t150.5 -20.5q166 0 237.5 91t71.5 300v910h164v-957q0 -129 -33.5 -223t-96 -154.5t-150.5 -89t-195 -28.5q-254 0 -383 114.5t-129 347.5zM359 1739v43h233l242 -242h-152z" />
-<glyph unicode="&#xda;" horiz-adv-x="1335" d="M174 444v990h170v-910q0 -109 21.5 -183.5t64.5 -120.5t107.5 -66.5t150.5 -20.5q166 0 237.5 91t71.5 300v910h164v-957q0 -129 -33.5 -223t-96 -154.5t-150.5 -89t-195 -28.5q-254 0 -383 114.5t-129 347.5zM557 1540l242 242h233v-43l-334 -199h-141z" />
-<glyph unicode="&#xdb;" horiz-adv-x="1335" d="M174 444v990h170v-910q0 -109 21.5 -183.5t64.5 -120.5t107.5 -66.5t150.5 -20.5q166 0 237.5 91t71.5 300v910h164v-957q0 -129 -33.5 -223t-96 -154.5t-150.5 -89t-195 -28.5q-254 0 -383 114.5t-129 347.5zM344 1530v45l272 207h123l260 -209v-43h-166l-123 100 l-34 72l-39 -70l-131 -102h-162z" />
-<glyph unicode="&#xdc;" horiz-adv-x="1335" d="M174 444v990h170v-910q0 -109 21.5 -183.5t64.5 -120.5t107.5 -66.5t150.5 -20.5q166 0 237.5 91t71.5 300v910h164v-957q0 -129 -33.5 -223t-96 -154.5t-150.5 -89t-195 -28.5q-254 0 -383 114.5t-129 347.5zM365 1626q0 43 30.5 69.5t79.5 26.5q47 0 77 -26.5t30 -69.5 q0 -41 -29.5 -67.5t-77.5 -26.5q-49 0 -79.5 26.5t-30.5 67.5zM758 1626q0 43 29.5 69.5t77.5 26.5q49 0 79.5 -26.5t30.5 -69.5q0 -41 -30.5 -67.5t-79.5 -26.5q-47 0 -77 26.5t-30 67.5z" />
-<glyph unicode="&#xdd;" horiz-adv-x="1142" d="M16 1434h199l336 -627l35 -125h2l37 129l321 623h182l-469 -863v-571h-170v569zM485 1540l242 242h233v-43l-334 -199h-141z" />
-<glyph unicode="&#xde;" horiz-adv-x="1144" d="M174 0v1638h170v-358q86 6 176 6q94 0 191.5 -18.5t177.5 -67.5t130 -135t50 -219q0 -131 -47 -221t-125 -146.5t-178.5 -81t-206.5 -24.5h-33.5t-49.5 1t-50.5 3t-34.5 4v-381h-170zM344 532q10 -4 32.5 -5t47.5 -2t47.5 -1h32.5q70 0 138.5 13.5t123.5 48.5t89 98.5 t34 161.5q0 84 -32 140t-84 90t-117.5 48.5t-131.5 14.5q-53 0 -102 -2t-78 -11v-594z" />
-<glyph unicode="&#xdf;" horiz-adv-x="1212" d="M45 881v143h160v47q0 199 97 287t269 88q84 0 154 -21.5t120 -61.5t77.5 -94.5t27.5 -121.5q0 -78 -39 -125t-85 -84t-85 -72t-39 -86q0 -45 31 -71.5t78 -47t100.5 -42t100.5 -56.5t77.5 -91t30.5 -146q0 -66 -24.5 -128.5t-70.5 -111.5t-115.5 -80t-157.5 -31 q-47 0 -83 3.5t-66 10.5t-56.5 17t-52.5 27l47 137q25 -12 43 -22.5t39.5 -16.5t48 -9t65.5 -3q43 0 83 15.5t71 42t48 62t17 80.5q0 61 -30.5 97.5t-76.5 61t-100.5 44t-100.5 49t-76.5 75.5t-30.5 124q0 80 37.5 128t86 86t85 73t36.5 88q0 35 -19 63.5t-50 50t-68 33 t-71 11.5q-57 0 -97.5 -14.5t-66 -47.5t-35.5 -87t-10 -134v-1020h-164v881h-160z" />
-<glyph unicode="&#xe0;" horiz-adv-x="1015" d="M80 274q0 90 37 150.5t103.5 96.5t159.5 51.5t206 15.5h56.5t55.5 -4q6 61 7 110q0 113 -45.5 158t-163.5 45q-35 0 -75 -5t-82 -14.5t-80 -22.5t-66 -30l-52 123q78 47 181.5 69.5t216.5 22.5q106 0 170.5 -28.5t98.5 -74.5t45 -101.5t11 -110.5q0 -123 -6 -239.5 t-6 -221.5q0 -76 6 -143.5t23 -124.5h-121l-43 143h-10q-18 -29 -46 -56.5t-67 -49t-90 -35.5t-117 -14t-122 20.5t-97 58t-64.5 91t-23.5 120.5zM250 291q0 -72 51 -118t131 -46q57 0 102.5 15.5t78 39t54 52t31.5 55.5v170q-29 2 -58.5 3t-57.5 1q-63 0 -124 -7 t-107 -26.5t-73.5 -53.5t-27.5 -85zM297 1432v43h194l134 -306h-93z" />
-<glyph unicode="&#xe1;" horiz-adv-x="1015" d="M80 274q0 90 37 150.5t103.5 96.5t159.5 51.5t206 15.5h56.5t55.5 -4q6 61 7 110q0 113 -45.5 158t-163.5 45q-35 0 -75 -5t-82 -14.5t-80 -22.5t-66 -30l-52 123q78 47 181.5 69.5t216.5 22.5q106 0 170.5 -28.5t98.5 -74.5t45 -101.5t11 -110.5q0 -123 -6 -239.5 t-6 -221.5q0 -76 6 -143.5t23 -124.5h-121l-43 143h-10q-18 -29 -46 -56.5t-67 -49t-90 -35.5t-117 -14t-122 20.5t-97 58t-64.5 91t-23.5 120.5zM250 291q0 -72 51 -118t131 -46q57 0 102.5 15.5t78 39t54 52t31.5 55.5v170q-29 2 -58.5 3t-57.5 1q-63 0 -124 -7 t-107 -26.5t-73.5 -53.5t-27.5 -85zM367 1169l121 306h182v-43l-207 -263h-96z" />
-<glyph unicode="&#xe2;" horiz-adv-x="1015" d="M80 274q0 90 37 150.5t103.5 96.5t159.5 51.5t206 15.5h56.5t55.5 -4q6 61 7 110q0 113 -45.5 158t-163.5 45q-35 0 -75 -5t-82 -14.5t-80 -22.5t-66 -30l-52 123q78 47 181.5 69.5t216.5 22.5q106 0 170.5 -28.5t98.5 -74.5t45 -101.5t11 -110.5q0 -123 -6 -239.5 t-6 -221.5q0 -76 6 -143.5t23 -124.5h-121l-43 143h-10q-18 -29 -46 -56.5t-67 -49t-90 -35.5t-117 -14t-122 20.5t-97 58t-64.5 91t-23.5 120.5zM238 1126l252 373h65l228 -373h-148l-80 136l-43 118l-45 -118l-92 -136h-137zM250 291q0 -72 51 -118t131 -46 q57 0 102.5 15.5t78 39t54 52t31.5 55.5v170q-29 2 -58.5 3t-57.5 1q-63 0 -124 -7t-107 -26.5t-73.5 -53.5t-27.5 -85z" />
-<glyph unicode="&#xe3;" horiz-adv-x="1015" d="M80 274q0 90 37 150.5t103.5 96.5t159.5 51.5t206 15.5h56.5t55.5 -4q6 61 7 110q0 113 -45.5 158t-163.5 45q-35 0 -75 -5t-82 -14.5t-80 -22.5t-66 -30l-52 123q78 47 181.5 69.5t216.5 22.5q106 0 170.5 -28.5t98.5 -74.5t45 -101.5t11 -110.5q0 -123 -6 -239.5 t-6 -221.5q0 -76 6 -143.5t23 -124.5h-121l-43 143h-10q-18 -29 -46 -56.5t-67 -49t-90 -35.5t-117 -14t-122 20.5t-97 58t-64.5 91t-23.5 120.5zM223 1343q59 68 108.5 93.5t90.5 25.5q35 0 64.5 -13t57 -28.5t53 -28t54.5 -12.5q45 0 94 50l49 -89q-53 -59 -97 -80.5 t-81 -21.5q-33 0 -61.5 12.5t-56 27.5t-55.5 28.5t-56 13.5q-27 0 -54.5 -14.5t-62.5 -49.5zM250 291q0 -72 51 -118t131 -46q57 0 102.5 15.5t78 39t54 52t31.5 55.5v170q-29 2 -58.5 3t-57.5 1q-63 0 -124 -7t-107 -26.5t-73.5 -53.5t-27.5 -85z" />
-<glyph unicode="&#xe4;" horiz-adv-x="1015" d="M80 274q0 90 37 150.5t103.5 96.5t159.5 51.5t206 15.5h56.5t55.5 -4q6 61 7 110q0 113 -45.5 158t-163.5 45q-35 0 -75 -5t-82 -14.5t-80 -22.5t-66 -30l-52 123q78 47 181.5 69.5t216.5 22.5q106 0 170.5 -28.5t98.5 -74.5t45 -101.5t11 -110.5q0 -123 -6 -239.5 t-6 -221.5q0 -76 6 -143.5t23 -124.5h-121l-43 143h-10q-18 -29 -46 -56.5t-67 -49t-90 -35.5t-117 -14t-122 20.5t-97 58t-64.5 91t-23.5 120.5zM215 1337q0 47 27.5 76t72.5 29t73 -29t28 -76q0 -43 -28 -71.5t-73 -28.5t-72.5 28.5t-27.5 71.5zM250 291q0 -72 51 -118 t131 -46q57 0 102.5 15.5t78 39t54 52t31.5 55.5v170q-29 2 -58.5 3t-57.5 1q-63 0 -124 -7t-107 -26.5t-73.5 -53.5t-27.5 -85zM608 1337q0 47 27.5 76t72.5 29q47 0 75 -29t28 -76q0 -43 -27.5 -71.5t-75.5 -28.5q-45 0 -72.5 28.5t-27.5 71.5z" />
-<glyph unicode="&#xe5;" horiz-adv-x="1015" d="M80 274q0 90 37 150.5t103.5 96.5t159.5 51.5t206 15.5h56.5t55.5 -4q6 61 7 110q0 113 -45.5 158t-163.5 45q-35 0 -75 -5t-82 -14.5t-80 -22.5t-66 -30l-52 123q78 47 181.5 69.5t216.5 22.5q106 0 170.5 -28.5t98.5 -74.5t45 -101.5t11 -110.5q0 -123 -6 -239.5 t-6 -221.5q0 -76 6 -143.5t23 -124.5h-121l-43 143h-10q-18 -29 -46 -56.5t-67 -49t-90 -35.5t-117 -14t-122 20.5t-97 58t-64.5 91t-23.5 120.5zM250 291q0 -72 51 -118t131 -46q57 0 102.5 15.5t78 39t54 52t31.5 55.5v170q-29 2 -58.5 3t-57.5 1q-63 0 -124 -7 t-107 -26.5t-73.5 -53.5t-27.5 -85zM311 1317q0 86 54 136t145 50q86 0 143 -45t57 -141q0 -80 -57 -132t-143 -52t-142.5 48t-56.5 136zM421 1317q0 -41 27 -63.5t62 -22.5q39 0 64.5 20.5t25.5 65.5t-28 66.5t-62 21.5q-35 0 -62 -20.5t-27 -67.5z" />
-<glyph unicode="&#xe6;" horiz-adv-x="1630" d="M80 274q0 90 37 150.5t103.5 96.5t159.5 51.5t206 15.5h56.5t55.5 -4q2 31 4.5 58.5t2.5 51.5q0 113 -45.5 159t-163.5 44q-35 0 -75 -5t-82 -14.5t-80 -22.5t-66 -30l-52 123q78 47 181.5 69.5t216.5 22.5q215 0 278 -133q53 74 143.5 108t180.5 34q70 0 139.5 -15.5 t124.5 -59.5t90 -124t35 -209q0 -33 -3 -68.5t-7 -76.5h-662q0 -178 75 -277.5t255 -99.5q72 0 140.5 25.5t105.5 56.5l61 -119q-61 -49 -154.5 -78t-197.5 -29q-125 0 -226.5 51.5t-150.5 145.5h-14q-27 -37 -62 -70.5t-79 -59.5t-100 -42t-124 -16q-66 0 -122 20.5t-97 58 t-64.5 91t-23.5 120.5zM250 291q0 -72 51 -118t131 -46q57 0 102.5 15.5t78 39t54 52t31.5 55.5v170q-29 2 -58.5 3t-57.5 1q-63 0 -124 -7t-107 -26.5t-73.5 -53.5t-27.5 -85zM862 625h508v24q0 139 -62.5 197.5t-164.5 58.5q-121 0 -195 -63.5t-86 -216.5z" />
-<glyph unicode="&#xe7;" horiz-adv-x="923" d="M100 512q0 260 115 398.5t330 138.5q98 0 166.5 -15.5t124.5 -44.5l-48 -141q-47 27 -104 42t-123 15q-291 0 -291 -393q0 -78 15.5 -148.5t51.5 -125t94 -86t144 -31.5q74 0 132.5 21.5t95.5 50.5l53 -125q-100 -72 -248 -88l-37 -68q86 -16 124 -53t38 -101 q0 -80 -65.5 -132t-184.5 -52q-23 0 -45 2t-47 6l19 80q12 -2 22 -2h21q45 0 70.5 8t38.5 19.5t16.5 26t3.5 26.5q0 57 -176 76l86 161q-106 6 -180 47.5t-121.5 111t-69 164.5t-21.5 212z" />
-<glyph unicode="&#xe8;" horiz-adv-x="1040" d="M100 512q0 262 117 399.5t334 137.5q70 0 139.5 -15.5t124.5 -58.5t90 -122t35 -208q0 -68 -12 -149h-658q0 -90 18.5 -160t57.5 -118t101.5 -73.5t152.5 -25.5q70 0 139.5 24.5t104.5 57.5l61 -119q-61 -49 -154.5 -78t-197.5 -29q-117 0 -203 38t-141 109t-82 169 t-27 221zM272 625h508q0 156 -59 218t-168 62q-121 0 -193.5 -63.5t-87.5 -216.5zM348 1432v43h194l134 -306h-93z" />
-<glyph unicode="&#xe9;" horiz-adv-x="1040" d="M100 512q0 262 117 399.5t334 137.5q70 0 139.5 -15.5t124.5 -58.5t90 -122t35 -208q0 -68 -12 -149h-658q0 -90 18.5 -160t57.5 -118t101.5 -73.5t152.5 -25.5q70 0 139.5 24.5t104.5 57.5l61 -119q-61 -49 -154.5 -78t-197.5 -29q-117 0 -203 38t-141 109t-82 169 t-27 221zM272 625h508q0 156 -59 218t-168 62q-121 0 -193.5 -63.5t-87.5 -216.5zM475 1169l121 306h182v-43l-207 -263h-96z" />
-<glyph unicode="&#xea;" horiz-adv-x="1040" d="M100 512q0 262 117 399.5t334 137.5q70 0 139.5 -15.5t124.5 -58.5t90 -122t35 -208q0 -68 -12 -149h-658q0 -90 18.5 -160t57.5 -118t101.5 -73.5t152.5 -25.5q70 0 139.5 24.5t104.5 57.5l61 -119q-61 -49 -154.5 -78t-197.5 -29q-117 0 -203 38t-141 109t-82 169 t-27 221zM250 1126l252 373h65l228 -373h-148l-80 136l-43 118l-45 -118l-92 -136h-137zM272 625h508q0 156 -59 218t-168 62q-121 0 -193.5 -63.5t-87.5 -216.5z" />
-<glyph unicode="&#xeb;" horiz-adv-x="1040" d="M100 512q0 262 117 399.5t334 137.5q70 0 139.5 -15.5t124.5 -58.5t90 -122t35 -208q0 -68 -12 -149h-658q0 -90 18.5 -160t57.5 -118t101.5 -73.5t152.5 -25.5q70 0 139.5 24.5t104.5 57.5l61 -119q-61 -49 -154.5 -78t-197.5 -29q-117 0 -203 38t-141 109t-82 169 t-27 221zM244 1337q0 47 27.5 76t72.5 29t73 -29t28 -76q0 -43 -28 -71.5t-73 -28.5t-72.5 28.5t-27.5 71.5zM272 625h508q0 156 -59 218t-168 62q-121 0 -193.5 -63.5t-87.5 -216.5zM637 1337q0 47 27.5 76t72.5 29q47 0 75 -29t28 -76q0 -43 -27.5 -71.5t-75.5 -28.5 q-45 0 -72.5 28.5t-27.5 71.5z" />
-<glyph unicode="&#xec;" horiz-adv-x="548" d="M25 1432v43h194l134 -306h-93zM193 0v1024h163v-1024h-163z" />
-<glyph unicode="&#xed;" horiz-adv-x="548" d="M193 0v1024h163v-1024h-163zM195 1169l121 306h182v-43l-207 -263h-96z" />
-<glyph unicode="&#xee;" horiz-adv-x="548" d="M-4 1126l252 373h65l228 -373h-148l-80 136l-43 118l-45 -118l-92 -136h-137zM193 0v1024h163v-1024h-163z" />
-<glyph unicode="&#xef;" horiz-adv-x="548" d="M-24 1337q0 47 27.5 76t72.5 29t73 -29t28 -76q0 -43 -28 -71.5t-73 -28.5t-72.5 28.5t-27.5 71.5zM193 0v1024h163v-1024h-163zM369 1337q0 47 27.5 76t72.5 29q47 0 75 -29t28 -76q0 -43 -27.5 -71.5t-75.5 -28.5q-45 0 -72.5 28.5t-27.5 71.5z" />
-<glyph unicode="&#xf0;" horiz-adv-x="1148" d="M115 514q0 106 29.5 202.5t88 169t143.5 115.5t197 43q92 0 163 -28.5t100 -65.5q-23 76 -69 143.5t-105 120.5l-156 -84l-55 91l116 63q-78 47 -155 66l71 110q37 -14 94.5 -38.5t118.5 -67.5l140 76l53 -93l-103 -55q49 -47 94.5 -109.5t80 -145.5t55 -187.5 t20.5 -235.5q0 -166 -36.5 -284.5t-99 -195.5t-145.5 -113t-177 -36q-125 0 -213.5 43t-143.5 117t-80.5 171t-25.5 208zM283 512q0 -100 22.5 -174t62.5 -123t96 -72.5t122 -23.5q61 0 113.5 26.5t91 84t61 147.5t22.5 217q0 20 -1 46t-2 51.5t-4 49t-7 39.5 q-16 29 -46 51.5t-66.5 38t-77.5 22.5t-80 7q-80 0 -138.5 -29.5t-96.5 -82t-55 -123t-17 -152.5z" />
-<glyph unicode="&#xf1;" horiz-adv-x="1120" d="M158 0v1024h114l31 -125h8q49 66 132 108t198 42q84 0 147.5 -19.5t105.5 -69t63.5 -132.5t21.5 -210v-618h-164v584q0 160 -46 240.5t-169 80.5q-109 0 -179.5 -58.5t-98.5 -146.5v-700h-164zM275 1343q59 68 108.5 93.5t90.5 25.5q35 0 64.5 -13t57 -28.5t53 -28 t54.5 -12.5q45 0 94 50l49 -89q-53 -59 -97 -80.5t-81 -21.5q-33 0 -61.5 12.5t-56 27.5t-55.5 28.5t-56 13.5q-27 0 -54.5 -14.5t-62.5 -49.5z" />
-<glyph unicode="&#xf2;" horiz-adv-x="1097" d="M100 512q0 260 116 398.5t333 138.5q115 0 200 -38t140 -109t81.5 -170t26.5 -220q0 -260 -115.5 -398.5t-332.5 -138.5q-115 0 -200 38t-140 109t-82 170t-27 220zM270 512q0 -78 15.5 -149.5t48.5 -125t86 -86t129 -32.5q279 -2 278 393q0 80 -15 151.5t-48 125t-86 85 t-129 31.5q-279 2 -279 -393zM322 1432v43h194l134 -306h-93z" />
-<glyph unicode="&#xf3;" horiz-adv-x="1097" d="M100 512q0 260 116 398.5t333 138.5q115 0 200 -38t140 -109t81.5 -170t26.5 -220q0 -260 -115.5 -398.5t-332.5 -138.5q-115 0 -200 38t-140 109t-82 170t-27 220zM270 512q0 -78 15.5 -149.5t48.5 -125t86 -86t129 -32.5q279 -2 278 393q0 80 -15 151.5t-48 125t-86 85 t-129 31.5q-279 2 -279 -393zM465 1169l121 306h182v-43l-207 -263h-96z" />
-<glyph unicode="&#xf4;" horiz-adv-x="1097" d="M100 512q0 260 116 398.5t333 138.5q115 0 200 -38t140 -109t81.5 -170t26.5 -220q0 -260 -115.5 -398.5t-332.5 -138.5q-115 0 -200 38t-140 109t-82 170t-27 220zM270 512q0 -78 15.5 -149.5t48.5 -125t86 -86t129 -32.5q279 -2 278 393q0 80 -15 151.5t-48 125t-86 85 t-129 31.5q-279 2 -279 -393zM277 1126l252 373h65l228 -373h-148l-80 136l-43 118l-45 -118l-92 -136h-137z" />
-<glyph unicode="&#xf5;" horiz-adv-x="1097" d="M100 512q0 260 116 398.5t333 138.5q115 0 200 -38t140 -109t81.5 -170t26.5 -220q0 -260 -115.5 -398.5t-332.5 -138.5q-115 0 -200 38t-140 109t-82 170t-27 220zM264 1343q59 68 108.5 93.5t90.5 25.5q35 0 64.5 -13t57 -28.5t53 -28t54.5 -12.5q45 0 94 50l49 -89 q-53 -59 -97 -80.5t-81 -21.5q-33 0 -61.5 12.5t-56 27.5t-55.5 28.5t-56 13.5q-27 0 -54.5 -14.5t-62.5 -49.5zM270 512q0 -78 15.5 -149.5t48.5 -125t86 -86t129 -32.5q279 -2 278 393q0 80 -15 151.5t-48 125t-86 85t-129 31.5q-279 2 -279 -393z" />
-<glyph unicode="&#xf6;" horiz-adv-x="1097" d="M100 512q0 260 116 398.5t333 138.5q115 0 200 -38t140 -109t81.5 -170t26.5 -220q0 -260 -115.5 -398.5t-332.5 -138.5q-115 0 -200 38t-140 109t-82 170t-27 220zM254 1337q0 47 27.5 76t72.5 29t73 -29t28 -76q0 -43 -28 -71.5t-73 -28.5t-72.5 28.5t-27.5 71.5z M270 512q0 -78 15.5 -149.5t48.5 -125t86 -86t129 -32.5q279 -2 278 393q0 80 -15 151.5t-48 125t-86 85t-129 31.5q-279 2 -279 -393zM647 1337q0 47 27.5 76t72.5 29q47 0 75 -29t28 -76q0 -43 -27.5 -71.5t-75.5 -28.5q-45 0 -72.5 28.5t-27.5 71.5z" />
-<glyph unicode="&#xf7;" horiz-adv-x="1034" d="M82 618v148h868v-148h-868zM397 307q0 55 32 87t85 32q55 0 88 -32t33 -87q0 -53 -33 -86t-88 -33q-53 0 -85 33t-32 86zM397 1075q0 55 32 87t85 32q55 0 88 -32t33 -87q0 -53 -33 -86t-88 -33q-53 0 -85 33t-32 86z" />
-<glyph unicode="&#xf8;" horiz-adv-x="1097" d="M100 512q0 260 116 398.5t333 138.5q150 0 250 -66l53 72l102 -76l-59 -86q53 -70 77.5 -166t24.5 -215q0 -260 -115.5 -398.5t-332.5 -138.5q-160 0 -262 72l-56 -76l-106 78l68 94q-47 70 -70 163t-23 206zM270 512q0 -61 9.5 -118.5t27.5 -104.5l404 561 q-31 25 -71 40t-91 15q-279 2 -279 -393zM377 180q33 -27 75 -44t97 -17q278 -2 278 393q0 66 -10 126t-33 110z" />
-<glyph unicode="&#xf9;" horiz-adv-x="1103" d="M141 406v618h164v-584q0 -80 9.5 -140t32 -100t61 -60.5t98.5 -20.5q55 0 98 17.5t77 48t59.5 70.5t41.5 85v684h164v-733q0 -74 5 -153t18 -138h-113l-41 162h-10q-47 -80 -127 -133.5t-203 -53.5q-82 0 -144.5 19.5t-104.5 69t-63.5 132.5t-21.5 210zM303 1432v43h194 l134 -306h-93z" />
-<glyph unicode="&#xfa;" horiz-adv-x="1103" d="M141 406v618h164v-584q0 -80 9.5 -140t32 -100t61 -60.5t98.5 -20.5q55 0 98 17.5t77 48t59.5 70.5t41.5 85v684h164v-733q0 -74 5 -153t18 -138h-113l-41 162h-10q-47 -80 -127 -133.5t-203 -53.5q-82 0 -144.5 19.5t-104.5 69t-63.5 132.5t-21.5 210zM463 1169l121 306 h182v-43l-207 -263h-96z" />
-<glyph unicode="&#xfb;" horiz-adv-x="1103" d="M141 406v618h164v-584q0 -80 9.5 -140t32 -100t61 -60.5t98.5 -20.5q55 0 98 17.5t77 48t59.5 70.5t41.5 85v684h164v-733q0 -74 5 -153t18 -138h-113l-41 162h-10q-47 -80 -127 -133.5t-203 -53.5q-82 0 -144.5 19.5t-104.5 69t-63.5 132.5t-21.5 210zM281 1126l252 373 h65l228 -373h-148l-80 136l-43 118l-45 -118l-92 -136h-137z" />
-<glyph unicode="&#xfc;" horiz-adv-x="1103" d="M141 406v618h164v-584q0 -80 9.5 -140t32 -100t61 -60.5t98.5 -20.5q55 0 98 17.5t77 48t59.5 70.5t41.5 85v684h164v-733q0 -74 5 -153t18 -138h-113l-41 162h-10q-47 -80 -127 -133.5t-203 -53.5q-82 0 -144.5 19.5t-104.5 69t-63.5 132.5t-21.5 210zM256 1337 q0 47 27.5 76t72.5 29t73 -29t28 -76q0 -43 -28 -71.5t-73 -28.5t-72.5 28.5t-27.5 71.5zM649 1337q0 47 27.5 76t72.5 29q47 0 75 -29t28 -76q0 -43 -27.5 -71.5t-75.5 -28.5q-45 0 -72.5 28.5t-27.5 71.5z" />
-<glyph unicode="&#xfd;" horiz-adv-x="954" d="M25 1024h188l246 -664l57 -196h10l45 198l199 662h166l-303 -920q-35 -100 -69 -194t-74.5 -168t-92 -118t-118.5 -44q-74 0 -121 21l28 141q27 -10 52 -10q57 0 110 60.5t88 207.5zM447 1169l121 306h182v-43l-207 -263h-96z" />
-<glyph unicode="&#xfe;" horiz-adv-x="1107" d="M158 -410v1844h164v-512h8q41 59 108.5 93t163.5 34q205 0 305.5 -121t100.5 -396q0 -129 -34 -232t-95.5 -175t-148.5 -111t-193 -39q-76 0 -120 9.5t-95 31.5v-426h-164zM322 176q37 -29 84 -43t124 -14q141 0 224.5 105.5t83.5 310.5q0 84 -14.5 152.5t-46.5 116.5 t-82 74.5t-124 26.5q-201 2 -249 -219v-510z" />
-<glyph unicode="&#xff;" horiz-adv-x="954" d="M25 1024h188l246 -664l57 -196h10l45 198l199 662h166l-303 -920q-35 -100 -69 -194t-74.5 -168t-92 -118t-118.5 -44q-74 0 -121 21l28 141q27 -10 52 -10q57 0 110 60.5t88 207.5zM182 1337q0 47 27.5 76t72.5 29t73 -29t28 -76q0 -43 -28 -71.5t-73 -28.5t-72.5 28.5 t-27.5 71.5zM575 1337q0 47 27.5 76t72.5 29q47 0 75 -29t28 -76q0 -43 -27.5 -71.5t-75.5 -28.5q-45 0 -72.5 28.5t-27.5 71.5z" />
-<glyph unicode="&#x152;" horiz-adv-x="1908" d="M115 717q0 358 151.5 549.5t431.5 191.5q96 0 159 -7t128 -17h780v-152h-610v-469h559v-151h-559v-510h621v-152h-791q-51 -10 -122.5 -17.5t-164.5 -7.5q-150 0 -259 53.5t-182 150.5t-107.5 233.5t-34.5 304.5zM295 717q0 -119 23.5 -225.5t74.5 -187.5t131 -129 t191 -48q59 0 121.5 4t148.5 31v1104q-57 23 -133 32t-154 9q-188 0 -295.5 -144.5t-107.5 -445.5z" />
-<glyph unicode="&#x153;" horiz-adv-x="1757" d="M100 512q0 260 116 398.5t333 138.5q129 0 218 -53.5t142 -135.5q53 86 144.5 137.5t214.5 51.5q70 0 139.5 -15.5t124.5 -58.5t90 -122t35 -208q0 -35 -2 -71.5t-8 -77.5h-662q0 -90 18.5 -161t57.5 -120t102.5 -73.5t153.5 -24.5q72 0 140.5 25.5t103.5 58.5l61 -119 q-61 -49 -154.5 -78t-197.5 -29q-127 0 -219.5 51.5t-145.5 139.5q-55 -92 -144 -141.5t-212 -49.5q-115 0 -200 38t-140 109t-82 170t-27 220zM270 512q0 -78 15.5 -149.5t48.5 -126t86 -86t129 -31.5q276 -2 276 393q0 80 -14 151.5t-47 125t-86 85t-129 31.5 q-279 2 -279 -393zM989 625h508v18q0 141 -61.5 202.5t-165.5 61.5q-119 0 -192.5 -64.5t-88.5 -217.5z" />
-<glyph unicode="&#x178;" horiz-adv-x="1142" d="M16 1434h199l336 -627l35 -125h2l37 129l321 623h182l-469 -863v-571h-170v569zM273 1626q0 43 30.5 69.5t79.5 26.5q47 0 77 -26.5t30 -69.5q0 -41 -29.5 -67.5t-77.5 -26.5q-49 0 -79.5 26.5t-30.5 67.5zM666 1626q0 43 29.5 69.5t77.5 26.5q49 0 79.5 -26.5 t30.5 -69.5q0 -41 -30.5 -67.5t-79.5 -26.5q-47 0 -77 26.5t-30 67.5z" />
-<glyph unicode="&#x2c6;" horiz-adv-x="790" d="M123 1126l252 373h65l228 -373h-148l-80 136l-43 118l-45 -118l-92 -136h-137z" />
-<glyph unicode="&#x2dc;" horiz-adv-x="817" d="M123 1343q59 68 108.5 93.5t90.5 25.5q35 0 64.5 -13t57 -28.5t53 -28t54.5 -12.5q45 0 94 50l49 -89q-53 -59 -97 -80.5t-81 -21.5q-33 0 -61.5 12.5t-56 27.5t-55.5 28.5t-56 13.5q-27 0 -54.5 -14.5t-62.5 -49.5z" />
-<glyph unicode="&#x2000;" horiz-adv-x="891" />
-<glyph unicode="&#x2001;" horiz-adv-x="1782" />
-<glyph unicode="&#x2002;" horiz-adv-x="891" />
-<glyph unicode="&#x2003;" horiz-adv-x="1782" />
-<glyph unicode="&#x2004;" horiz-adv-x="594" />
-<glyph unicode="&#x2005;" horiz-adv-x="445" />
-<glyph unicode="&#x2006;" horiz-adv-x="297" />
-<glyph unicode="&#x2007;" horiz-adv-x="297" />
-<glyph unicode="&#x2008;" horiz-adv-x="222" />
-<glyph unicode="&#x2009;" horiz-adv-x="356" />
-<glyph unicode="&#x200a;" horiz-adv-x="99" />
-<glyph unicode="&#x2010;" horiz-adv-x="737" d="M121 514v152h495v-152h-495z" />
-<glyph unicode="&#x2011;" horiz-adv-x="737" d="M121 514v152h495v-152h-495z" />
-<glyph unicode="&#x2012;" horiz-adv-x="737" d="M121 514v152h495v-152h-495z" />
-<glyph unicode="&#x2013;" horiz-adv-x="1351" d="M242 514v152h868v-152h-868z" />
-<glyph unicode="&#x2014;" horiz-adv-x="1679" d="M242 514v152h1196v-152h-1196z" />
-<glyph unicode="&#x2018;" horiz-adv-x="397" d="M82 1313q0 68 19.5 116t47 81.5t57.5 54t52 28.5l51 -71q-45 -23 -72.5 -61t-27.5 -95q8 2 22 2q41 0 63.5 -28.5t22.5 -69.5q0 -47 -30.5 -75t-77.5 -28q-55 0 -91 37t-36 109z" />
-<glyph unicode="&#x2019;" horiz-adv-x="397" d="M82 1350q0 47 29.5 73.5t76.5 26.5q57 0 93 -36t36 -107q0 -68 -19 -117t-47 -83t-58.5 -54.5t-53.5 -28.5l-51 70q47 25 73.5 61.5t26.5 95.5q-8 -2 -22 -2q-39 0 -61.5 28t-22.5 73z" />
-<glyph unicode="&#x201a;" horiz-adv-x="397" d="M82 103q0 47 29.5 73.5t76.5 26.5q57 0 93 -36t36 -107q0 -68 -19 -117t-47 -83t-58.5 -54.5t-53.5 -28.5l-51 70q47 25 73.5 61.5t26.5 95.5q-8 -2 -22 -2q-39 0 -61.5 28t-22.5 73z" />
-<glyph unicode="&#x201c;" horiz-adv-x="696" d="M82 1313q0 68 19.5 116t47 81.5t57.5 54t52 28.5l51 -71q-45 -23 -72.5 -61t-27.5 -95q8 2 22 2q41 0 63.5 -28.5t22.5 -69.5q0 -47 -30.5 -75t-77.5 -28q-55 0 -91 37t-36 109zM381 1313q0 68 19.5 116t47 81.5t57.5 54t52 28.5l51 -71q-45 -23 -72.5 -61t-27.5 -95 q8 2 22 2q41 0 63.5 -28.5t22.5 -69.5q0 -47 -30.5 -75t-77.5 -28q-55 0 -91 37t-36 109z" />
-<glyph unicode="&#x201d;" horiz-adv-x="696" d="M82 1350q0 47 29.5 73.5t76.5 26.5q57 0 93 -36t36 -107q0 -68 -19 -117t-47 -83t-58.5 -54.5t-53.5 -28.5l-51 70q47 25 73.5 61.5t26.5 95.5q-8 -2 -22 -2q-39 0 -61.5 28t-22.5 73zM381 1350q0 47 29.5 73.5t76.5 26.5q57 0 93 -36t36 -107q0 -68 -19 -117t-47 -83 t-58.5 -54.5t-53.5 -28.5l-51 70q47 25 73.5 61.5t26.5 95.5q-8 -2 -22 -2q-39 0 -61.5 28t-22.5 73z" />
-<glyph unicode="&#x201e;" horiz-adv-x="696" d="M82 103q0 47 29.5 73.5t76.5 26.5q57 0 93 -36t36 -107q0 -68 -19 -117t-47 -83t-58.5 -54.5t-53.5 -28.5l-51 70q47 25 73.5 61.5t26.5 95.5q-8 -2 -22 -2q-39 0 -61.5 28t-22.5 73zM381 103q0 47 29.5 73.5t76.5 26.5q57 0 93 -36t36 -107q0 -68 -19 -117t-47 -83 t-58.5 -54.5t-53.5 -28.5l-51 70q47 25 73.5 61.5t26.5 95.5q-8 -2 -22 -2q-39 0 -61.5 28t-22.5 73z" />
-<glyph unicode="&#x2022;" horiz-adv-x="925" d="M178 637q0 63 22.5 115.5t60.5 90.5t90 58.5t112 20.5q59 0 111.5 -19.5t90 -56.5t60.5 -89t23 -120t-23 -120t-60.5 -89t-90 -56.5t-111.5 -19.5t-111.5 19.5t-90.5 56.5t-60.5 89t-22.5 120z" />
-<glyph unicode="&#x2026;" horiz-adv-x="1554" d="M145 94q0 55 32 87t85 32q55 0 88 -31.5t33 -87.5q0 -53 -33 -86t-88 -33q-53 0 -85 33t-32 86zM666 94q0 55 31.5 87t84.5 32q55 0 88 -31.5t33 -87.5q0 -53 -32.5 -86t-88.5 -33q-53 0 -84.5 33t-31.5 86zM1186 94q0 55 31.5 87t85.5 32q55 0 87.5 -31.5t32.5 -87.5 q0 -53 -32.5 -86t-87.5 -33q-53 0 -85 33t-32 86z" />
-<glyph unicode="&#x202f;" horiz-adv-x="356" />
-<glyph unicode="&#x2039;" horiz-adv-x="608" d="M80 530l328 471l108 -88l-199 -297l-98 -84l98 -73l211 -291l-108 -90z" />
-<glyph unicode="&#x203a;" horiz-adv-x="608" d="M80 911l108 90l340 -452l-327 -471l-109 88l199 297l98 84l-98 74z" />
-<glyph unicode="&#x205f;" horiz-adv-x="445" />
-<glyph unicode="&#x20ac;" d="M20 514l37 135h111v68v38.5t2 39.5h-150l37 135h127q23 141 76 240.5t128 164t168 94t198 29.5q104 0 180 -13t131 -36l-45 -145q-47 23 -110.5 35t-153.5 12q-70 0 -133.5 -20.5t-115.5 -65.5t-90 -118t-59 -177h578l-35 -135h-557q-2 -18 -2 -38v-40v-34.5t2 -33.5h516 l-35 -135h-467q35 -199 142.5 -295t283.5 -96q80 0 146.5 18.5t113.5 46.5l41 -129q-61 -47 -152 -65.5t-183 -18.5q-236 0 -382.5 130.5t-187.5 408.5h-160z" />
-<glyph unicode="&#x2122;" horiz-adv-x="1812" d="M78 1294v140h717v-140h-279v-598h-160v598h-278zM877 696v738h159l215 -344l58 -119h2l61 123l199 340h162v-738h-156v342l20 211h-8l-80 -174l-178 -287h-67l-183 285l-73 176h-9l27 -209v-344h-149z" />
-<glyph unicode="&#xe000;" horiz-adv-x="1024" d="M0 0v1024h1024v-1024h-1024z" />
-</font>
-</defs></svg> \ No newline at end of file
diff --git a/app/fonts/svg/ptsansbold.svg b/app/fonts/svg/ptsansbold.svg
deleted file mode 100644
index c36d9369..00000000
--- a/app/fonts/svg/ptsansbold.svg
+++ /dev/null
@@ -1,242 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="pt_sansbold" horiz-adv-x="1161" >
-<font-face units-per-em="2048" ascent="1536" descent="-512" />
-<missing-glyph horiz-adv-x="518" />
-<glyph unicode="&#xfb01;" horiz-adv-x="1132" d="M25 799v225h141v57q0 195 100.5 284t290.5 89q141 0 251 -21.5t177 -60.5l-70 -207q-53 29 -128.5 46.5t-168.5 17.5q-59 0 -96 -13.5t-57.5 -39t-26.5 -64.5t-6 -88h576v-1024h-267v799h-309v-799h-266v799h-141z" />
-<glyph unicode="&#xfb02;" horiz-adv-x="1214" d="M25 799v225h141v57q0 193 93 286t321 93q47 0 108.5 -4t121.5 -9t112.5 -11t81.5 -13v-1079q0 -72 18 -104.5t57 -32.5q25 0 48.5 4t58.5 18l31 -209q-33 -16 -101.5 -32.5t-140.5 -16.5q-117 0 -177.5 54.5t-60.5 179.5v1016q-27 6 -73 10t-89 4q-47 0 -75.5 -14.5 t-44 -41t-19.5 -66.5t-4 -89h154v-225h-154v-799h-266v799h-141z" />
-<glyph horiz-adv-x="2048" />
-<glyph horiz-adv-x="2048" />
-<glyph unicode="&#xd;" horiz-adv-x="518" />
-<glyph unicode=" " horiz-adv-x="518" />
-<glyph unicode="&#x09;" horiz-adv-x="518" />
-<glyph unicode="&#xa0;" horiz-adv-x="518" />
-<glyph unicode="!" horiz-adv-x="602" d="M176 135q0 72 45 114t119 42q78 0 123 -42t45 -114t-45 -115t-123 -43q-74 0 -119 43t-45 115zM205 760v674h274v-674l-53 -334h-168z" />
-<glyph unicode="&#x22;" horiz-adv-x="823" d="M184 991v443h234l-74 -443h-160zM487 991v443h234l-74 -443h-160z" />
-<glyph unicode="#" d="M39 420l45 198h154l51 218h-148l45 198h150l72 295h217l-70 -295h182l72 295h217l-70 -295h148l-51 -198h-144l-51 -218h141l-49 -198h-139l-74 -316h-219l74 316h-182l-74 -316h-219l73 316h-151zM457 618h182l51 218h-182z" />
-<glyph unicode="$" d="M141 1053q0 176 93.5 273t252.5 126v186h213v-178q90 -6 158 -24.5t125 -42.5l-74 -228q-35 16 -88 32.5t-121 25.5v-383q63 -29 128 -65t115 -85t82 -115.5t32 -158.5q0 -188 -95.5 -294t-261.5 -136v-191h-213v178q-117 4 -204.5 24.5t-137.5 47.5l80 231 q37 -23 103.5 -43t158.5 -28v420q-63 29 -125.5 63.5t-111.5 83.5t-79 117.5t-30 163.5zM408 1075q0 -61 48 -102t119 -76v332q-96 -4 -131.5 -47.5t-35.5 -106.5zM612 205q90 10 134.5 57t44.5 123q0 66 -52.5 108t-126.5 76v-364z" />
-<glyph unicode="%" horiz-adv-x="1720" d="M105 1110q0 92 26.5 157.5t73.5 108.5t113.5 62.5t144.5 19.5t143.5 -18.5t113.5 -59.5t74.5 -107.5t28.5 -162.5q-2 -96 -28.5 -162.5t-74.5 -107.5t-113.5 -59.5t-143.5 -18.5t-144.5 18.5t-113.5 59.5t-73.5 107.5t-26.5 162.5zM207 113l1179 1349l150 -135 l-1180 -1356zM342 1110q0 -176 121 -176q63 0 91 38t30 138q-2 98 -29.5 137t-91.5 39q-63 0 -92 -39t-29 -137zM936 350q0 92 26.5 157.5t73.5 108.5t113.5 62.5t144.5 19.5t143.5 -18.5t113.5 -59.5t74.5 -107.5t28.5 -162.5q-2 -96 -28.5 -162.5t-74.5 -107.5 t-113.5 -59.5t-143.5 -18.5t-144.5 18.5t-113.5 59.5t-73.5 107.5t-26.5 162.5zM1173 350q0 -176 121 -176q63 0 91 38t30 138q-2 98 -29.5 137t-91.5 39q-63 0 -92 -39t-29 -137z" />
-<glyph unicode="&#x26;" horiz-adv-x="1667" d="M188 397q0 78 26 148.5t72 132t109.5 115t136.5 94.5q-51 68 -83.5 137.5t-32.5 146.5q0 51 19.5 103.5t61.5 94.5t109.5 67.5t163.5 25.5q94 0 160.5 -22.5t107.5 -59.5t59.5 -84t18.5 -96q0 -84 -59.5 -175t-202.5 -175q72 -111 143.5 -203t159.5 -182q47 51 85 128 t67 157l192 -103q-12 -37 -33.5 -81t-47 -89t-52.5 -85t-49 -68q66 -59 115 -93t100 -63l-141 -197q-57 27 -118 71t-120 101q-74 -68 -184.5 -120t-272.5 -52q-106 0 -199 29t-162 84t-109 134t-40 179zM455 420q0 -104 76.5 -163.5t201.5 -59.5q82 0 153.5 33.5 t108.5 74.5q-104 109 -190 216.5t-150 203.5q-98 -76 -149 -146.5t-51 -158.5zM682 1159q0 -86 74 -184q80 51 115.5 96t35.5 86q0 49 -27.5 78t-88.5 29q-55 0 -82 -29t-27 -76z" />
-<glyph unicode="'" horiz-adv-x="520" d="M184 991v443h234l-74 -443h-160z" />
-<glyph unicode="(" horiz-adv-x="669" d="M123 498q0 113 18.5 237.5t59.5 250.5t107.5 247t162.5 225l172 -110q-72 -96 -120 -201t-77.5 -214.5t-43 -220t-13.5 -214.5q0 -98 14.5 -209t45 -220.5t80 -214t118.5 -190.5l-182 -115q-94 98 -159.5 216t-105.5 242t-58.5 250t-18.5 241z" />
-<glyph unicode=")" horiz-adv-x="667" d="M23 1341l180 117q94 -98 159.5 -216t105.5 -241.5t58.5 -249.5t18.5 -241q0 -113 -18.5 -238t-59.5 -250.5t-107.5 -246.5t-162.5 -226l-172 113q76 102 125 207.5t77.5 213t40 215.5t11.5 212q0 98 -15.5 207.5t-46.5 219.5t-79 213t-115 191z" />
-<glyph unicode="*" horiz-adv-x="774" d="M82 1112v152h123l121 -35l-105 90l-57 102l131 76l57 -94l31 -121l31 113l57 100l131 -72l-61 -106l-99 -88l133 33h117v-150h-112l-125 33l102 -96l51 -86l-131 -76l-55 94l-41 131l-27 -119l-59 -100l-131 76l59 100l92 76l-112 -33h-121z" />
-<glyph unicode="+" horiz-adv-x="1079" d="M88 578v229h332v346h239v-346h334v-229h-334v-351h-239v351h-332z" />
-<glyph unicode="," horiz-adv-x="466" d="M76 -193q55 23 96 74t45 109q-47 -6 -89 28.5t-42 112.5q0 70 46 111t114 41q86 0 135 -57.5t49 -151.5q0 -92 -28.5 -159t-70.5 -111t-90 -69.5t-87 -37.5z" />
-<glyph unicode="-" horiz-adv-x="737" d="M111 471v236h514v-236h-514z" />
-<glyph unicode="." horiz-adv-x="503" d="M86 135q0 72 45 114t119 42q78 0 123 -42t45 -114t-45 -115t-123 -43q-74 0 -119 43t-45 115z" />
-<glyph unicode="/" horiz-adv-x="835" d="M-49 -193l731 1651l201 -90l-731 -1655z" />
-<glyph unicode="0" d="M82 719q0 377 129 560t371 183q258 0 378.5 -181t120.5 -562q0 -379 -130 -563.5t-371 -184.5q-256 0 -377 194t-121 554zM348 719q0 -250 54.5 -386t179.5 -136q121 0 177 124.5t56 397.5q0 248 -53 383t-182 135q-123 0 -177.5 -127t-54.5 -391z" />
-<glyph unicode="1" d="M129 1081l467 377h149v-1233h279v-225h-817v225h285v809l30 140l-98 -121l-182 -125z" />
-<glyph unicode="2" d="M141 0v137q49 51 110.5 120t124 145.5t122 158.5t106.5 165t75 161t28 147q0 84 -48.5 138.5t-152.5 54.5q-66 0 -134.5 -28t-115.5 -71l-106 189q80 66 181 105.5t238 39.5q88 0 162 -24.5t127 -71.5t84 -118t31 -165q0 -104 -38 -210.5t-96.5 -209t-129 -197.5 t-138.5 -175l-108 -84v-10l147 28h394v-225h-863z" />
-<glyph unicode="3" d="M160 35l71 221q53 -27 118 -43t145 -16q127 0 193.5 67.5t66.5 163.5q0 117 -70 172t-219 55h-148v142l248 338l117 92l-162 -19h-344v226h782v-146l-288 -387l-90 -55v-10l86 12q72 -6 136 -33t112.5 -77t77 -123.5t28.5 -170.5q0 -121 -40 -209t-110.5 -147t-165 -88 t-202.5 -29q-90 0 -186.5 16.5t-155.5 47.5z" />
-<glyph unicode="4" d="M39 399v152l649 893h219v-832h226v-213h-226v-399h-248v399h-620zM285 596l131 16h243v314l19 172h-8l-70 -148l-213 -276z" />
-<glyph unicode="5" d="M139 29l72 221q47 -20 103.5 -31.5t136.5 -11.5q135 0 206.5 65.5t71.5 180.5q0 123 -84 180t-239 57l-162 -6v750h704v-250h-475v-277l84 8q100 -4 181 -36.5t138.5 -91t88 -141.5t30.5 -185q0 -121 -41 -213t-113.5 -153.5t-171 -92.5t-214.5 -31q-92 0 -175 15.5 t-141 42.5z" />
-<glyph unicode="6" d="M106 514q0 203 58.5 366.5t158 285.5t231.5 197t280 99l59 -211q-102 -16 -188.5 -63t-153 -112.5t-112.5 -146.5t-64 -167q41 51 106.5 87t163.5 36q92 0 170 -29t133.5 -85t86 -138.5t30.5 -188.5q0 -100 -34 -186t-95.5 -149.5t-148.5 -100.5t-191 -37 q-106 0 -195.5 34t-155 101.5t-102.5 170t-37 237.5zM360 465q0 -49 14.5 -97.5t42 -86t70.5 -61t103 -23.5q96 0 156.5 65.5t60.5 167.5q0 229 -225 229q-82 0 -138.5 -36.5t-78.5 -85.5q-4 -23 -4.5 -39.5t-0.5 -32.5z" />
-<glyph unicode="7" d="M123 1184v250h924v-78l-574 -1356h-260l469 1104l90 100l-123 -20h-526z" />
-<glyph unicode="8" d="M125 350q0 72 18.5 128.5t52 102.5t80 82.5t99.5 67.5q-100 63 -157.5 146.5t-57.5 205.5q0 80 29.5 150t86 121t136.5 79.5t180 28.5q92 0 168 -24.5t130 -69.5t84 -109.5t30 -142.5q0 -121 -54.5 -205t-158.5 -153q123 -72 185 -158t62 -221q0 -92 -33.5 -167t-95 -128 t-147.5 -83t-189 -30q-102 0 -185 28t-141.5 77t-90 118.5t-31.5 155.5zM367 395q0 -82 56 -140t157 -58q92 0 148 45t56 135q0 47 -22.5 86t-58 70.5t-79.5 58t-89 51.5q-96 -55 -132 -119.5t-36 -128.5zM414 1079q0 -49 18.5 -86t50 -64.5t71.5 -51t83 -43.5 q123 104 123 229q0 86 -50.5 130t-121.5 44q-90 0 -132 -47.5t-42 -110.5z" />
-<glyph unicode="9" d="M92 985q0 104 32 192.5t92 151t147.5 98t199.5 35.5q231 0 363.5 -138t132.5 -402q0 -238 -60.5 -411t-162 -289t-234.5 -177t-280 -74l-58 209q113 14 201 55t151.5 101.5t103.5 137.5t56 165q-49 -53 -105.5 -73.5t-150.5 -20.5q-78 0 -154.5 26.5t-137 81t-98.5 137 t-38 195.5zM350 999q0 -117 65.5 -176t164.5 -59q84 0 137 26.5t82 65.5q6 43 6 82q0 57 -14.5 112.5t-44 98.5t-75.5 68.5t-110 25.5q-100 0 -155.5 -64.5t-55.5 -179.5z" />
-<glyph unicode=":" horiz-adv-x="550" d="M190 135q0 72 45 114t119 42q78 0 123 -42t45 -114t-45 -115t-123 -43q-74 0 -119 43t-45 115zM190 876q0 72 45 114t119 42q78 0 123 -42t45 -114t-45 -115t-123 -43q-74 0 -119 43t-45 115z" />
-<glyph unicode=";" horiz-adv-x="593" d="M158 -193q55 23 96 74t45 109q-47 -6 -89 28.5t-42 112.5q0 70 46 111t114 41q86 0 135 -57.5t49 -151.5q0 -92 -28.5 -159t-70.5 -111t-90 -69.5t-87 -37.5zM168 876q0 72 45 114t119 42q78 0 123 -42t45 -114t-45 -115t-123 -43q-74 0 -119 43t-45 115z" />
-<glyph unicode="&#x3c;" horiz-adv-x="1079" d="M82 584v143l790 473l117 -184l-459 -285l-186 -72l184 -63l471 -281l-116 -184z" />
-<glyph unicode="=" horiz-adv-x="1079" d="M88 383v229h905v-229h-905zM88 775v229h905v-229h-905z" />
-<glyph unicode="&#x3e;" horiz-adv-x="1079" d="M80 1018l117 182l800 -452v-144l-790 -473l-117 186l459 283l186 74l-184 61z" />
-<glyph unicode="?" horiz-adv-x="929" d="M47 1339q78 53 179.5 88t244.5 35q193 0 301.5 -93t108.5 -251q0 -104 -28 -172.5t-69 -117t-90 -85t-90 -78.5t-69.5 -97.5t-28.5 -141.5h-227q-10 106 10 181t56 129.5t82 94t86 76.5t66.5 77t26.5 95q0 72 -40 115t-142 43q-33 0 -70 -7t-73.5 -20.5t-70.5 -31 t-60 -35.5zM238 135q0 72 45 114t118 42q78 0 123 -42t45 -114t-45 -115t-123 -43q-74 0 -118.5 43t-44.5 115z" />
-<glyph unicode="@" horiz-adv-x="2168" d="M150 483q0 223 79.5 403.5t215 307.5t313.5 195.5t377 68.5q188 0 350 -54t280.5 -155.5t186 -248t67.5 -332.5q0 -131 -46 -246t-127 -199t-188.5 -133t-230.5 -49q-51 0 -95 11t-73.5 38t-44 70t-8.5 106h-8q-31 -43 -66.5 -84t-78.5 -72.5t-94.5 -50t-112.5 -18.5 q-49 0 -94 21.5t-78 60.5t-52.5 94t-19.5 123q0 127 41 247t111.5 212t164 148.5t197.5 56.5q72 0 121 -21.5t90 -56.5l64 65h143l-98 -555q-16 -96 -1 -139t68 -43t104.5 24.5t92.5 76t66.5 129t25.5 184.5q0 154 -51 262t-140.5 179t-210 103.5t-260.5 32.5 q-160 0 -297 -57.5t-238 -157.5t-158.5 -238.5t-57.5 -299.5q0 -160 48 -287t140 -216t228.5 -137.5t312.5 -48.5q59 0 135 14.5t137 43.5l64 -197q-84 -41 -171 -57.5t-200 -16.5q-199 0 -367.5 57.5t-292.5 170t-193.5 279.5t-69.5 386zM852 408q0 -68 27.5 -111t95.5 -43 q29 0 61.5 17.5t63 46t59.5 65.5t51 78l52 282q-27 23 -55.5 35.5t-71.5 12.5q-61 0 -113.5 -35t-90.5 -90.5t-58.5 -124t-20.5 -133.5z" />
-<glyph unicode="A" horiz-adv-x="1239" d="M0 0l516 1444h207l516 -1444h-295l-115 317h-440l-108 -317h-281zM461 543h307l-106 319l-44 225h-10l-43 -227z" />
-<glyph unicode="B" horiz-adv-x="1210" d="M123 10v1413q39 6 89 12.5t107.5 10.5t118 6t119.5 2q100 0 195.5 -15.5t170 -54t119.5 -108.5t45 -176q0 -53 -13 -106.5t-44 -97.5t-80 -78t-119 -50v-12q61 -10 117 -35t96.5 -68t64.5 -104.5t24 -145.5q0 -111 -47.5 -191.5t-126 -131.5t-179 -75.5t-207.5 -24.5h-89 t-116.5 3t-127 9t-117.5 18zM393 223q10 -4 33 -6t48.5 -3t53 -2t47.5 -1q51 0 99.5 12.5t85.5 38t59.5 64.5t22.5 92q0 68 -27 106.5t-70 60t-96 27.5t-106 6h-150v-395zM393 831h90q29 0 67 2.5t62 6.5q78 25 134.5 74t56.5 128q0 53 -20.5 88t-54.5 55.5t-77 29t-90 8.5 q-53 0 -98 -2t-70 -7v-383z" />
-<glyph unicode="C" horiz-adv-x="1144" d="M78 717q0 211 58.5 353t151.5 229t207.5 125t229.5 38q123 0 208 -16t140 -39l-55 -238q-47 23 -111.5 33t-156.5 10q-170 0 -273.5 -120.5t-103.5 -374.5q0 -111 24.5 -202t74.5 -155.5t125 -100.5t173 -36q92 0 155.5 18.5t110.5 47.5l58 -230q-66 -47 -167.5 -67.5 t-207.5 -20.5q-129 0 -245 40t-204 129t-140 231.5t-52 345.5z" />
-<glyph unicode="D" horiz-adv-x="1325" d="M123 -2v1436q43 6 97 10t111.5 6t112 3t97.5 1q190 0 325 -53t219 -149.5t123 -229.5t39 -293q0 -145 -36.5 -280.5t-123 -240t-226.5 -168t-347 -63.5q-33 0 -87 2.5t-112.5 5.5t-111.5 6t-80 7zM403 236q8 -2 28 -3.5t42.5 -2.5t43 -2t30.5 -1q119 0 197.5 42 t124.5 112t64.5 161t18.5 187q0 84 -16 169t-60.5 152.5t-120 110.5t-192.5 43q-45 0 -91 -2t-69 -6v-960z" />
-<glyph unicode="E" horiz-adv-x="1069" d="M123 0v1434h850v-250h-570v-334h519v-250h-519v-350h580v-250h-860z" />
-<glyph unicode="F" horiz-adv-x="1040" d="M123 0v1434h850v-250h-570v-355h525v-249h-525v-580h-280z" />
-<glyph unicode="G" horiz-adv-x="1247" d="M78 717q0 203 58.5 345t153.5 231t214 129t241 40q123 0 216.5 -18.5t148.5 -38.5l-57 -236q-51 20 -115 31.5t-162 11.5q-88 0 -161.5 -26.5t-128 -87t-84 -154.5t-29.5 -229q0 -129 28.5 -222.5t79.5 -153.5t120 -89t147 -29q53 0 104 13.5t86 39.5v271l-309 33v170 h534v-639q-86 -72 -205.5 -105t-236.5 -33q-137 0 -255 43t-204 134.5t-135 232.5t-49 336z" />
-<glyph unicode="H" horiz-adv-x="1333" d="M123 0v1434h280v-584h525v584h280v-1434h-280v600h-525v-600h-280z" />
-<glyph unicode="I" horiz-adv-x="583" d="M152 0v1434h280v-1434h-280z" />
-<glyph unicode="J" horiz-adv-x="684" d="M-47 23l61 229q53 -27 121 -27q86 0 109.5 63.5t23.5 168.5v977h281v-1049q0 -82 -18.5 -155.5t-60.5 -130t-107.5 -90.5t-159.5 -34q-59 0 -129 12.5t-121 35.5z" />
-<glyph unicode="K" horiz-adv-x="1269" d="M123 0v1434h280v-635l66 28l395 607h320l-418 -603l-111 -77l115 -80l477 -674h-346l-424 612h-74v-612h-280z" />
-<glyph unicode="L" horiz-adv-x="1052" d="M123 0v1434h280v-1184h627v-250h-907z" />
-<glyph unicode="M" horiz-adv-x="1638" d="M123 0v1434h256l383 -656l67 -164h9l61 168l363 652h254v-1434h-281v743l31 285h-13l-88 -229l-305 -535h-90l-321 537l-91 227h-10l41 -283v-745h-266z" />
-<glyph unicode="N" horiz-adv-x="1345" d="M123 0v1444h205l542 -764l109 -219h10l-33 219v754h267v-1444h-205l-539 758l-112 225h-11l33 -225v-748h-266z" />
-<glyph unicode="O" horiz-adv-x="1372" d="M78 717q0 358 157.5 551.5t450.5 193.5q154 0 268.5 -53t190.5 -151.5t112.5 -235.5t36.5 -305q0 -358 -158.5 -552t-449.5 -194q-156 0 -270.5 53.5t-189 151.5t-111.5 235.5t-37 305.5zM373 717q0 -109 18.5 -200t56 -156.5t97 -102.5t141.5 -37q150 0 231.5 117 t81.5 379q0 104 -17 194t-54 158t-96.5 105.5t-145.5 37.5q-150 0 -231.5 -119.5t-81.5 -375.5z" />
-<glyph unicode="P" horiz-adv-x="1171" d="M123 0v1419q86 16 189.5 25.5t205.5 9.5q106 0 214 -17.5t194 -69.5t140 -145.5t54 -242.5q0 -135 -47 -228.5t-125 -152.5t-177 -86t-206 -27h-32.5t-47 1t-48 3.5t-34.5 4.5v-494h-280zM403 737q8 -2 24.5 -4t35 -3t36 -1h25.5q55 0 109.5 10.5t97.5 38t68.5 76.5 t25.5 129q0 68 -24.5 112t-64.5 70.5t-91 36.5t-104 10q-41 0 -78 -3t-60 -7v-465z" />
-<glyph unicode="Q" horiz-adv-x="1372" d="M78 717q0 358 157.5 551.5t450.5 193.5q154 0 268.5 -53t190.5 -151.5t112.5 -235.5t36.5 -305q0 -358 -158.5 -552t-449.5 -194q-156 0 -270.5 53.5t-189 151.5t-111.5 235.5t-37 305.5zM373 717q0 -109 18.5 -200t56 -156.5t97 -102.5t141.5 -37q150 0 231.5 117 t81.5 379q0 104 -17 194t-54 158t-96.5 105.5t-145.5 37.5q-150 0 -231.5 -119.5t-81.5 -375.5zM412 -76q57 12 118 13q86 0 171 -20.5t173.5 -44.5t180.5 -44.5t194 -20.5q45 0 92.5 5.5t96.5 17.5v-244q-94 -26 -192 -26h-7q-104 0 -202.5 21.5t-190.5 46t-178 46 t-162 21.5q-49 0 -94 -12v241z" />
-<glyph unicode="R" horiz-adv-x="1232" d="M123 0v1419q47 8 101.5 15.5t108.5 11.5t105 6t94 2q100 0 197.5 -18.5t174.5 -63.5t123 -124t46 -197q0 -176 -82 -287t-219 -154l100 -63l328 -547h-323l-326 561l-148 27v-588h-280zM403 778h119q117 0 186.5 53.5t69.5 176.5q0 92 -57 144t-168 52q-43 0 -85 -2 t-65 -8v-416z" />
-<glyph unicode="S" horiz-adv-x="1085" d="M55 57l90 240q23 -12 59 -26.5t81 -27t95 -20.5t103 -8q125 0 191.5 42t66.5 128q0 66 -48 106.5t-120.5 74.5t-157.5 70t-158 88t-121 130t-48 199q0 104 35 181t99.5 128t152.5 75.5t196 24.5q125 0 236 -21.5t182 -62.5l-88 -235q-45 29 -135 52.5t-195 23.5 q-98 0 -150 -39t-52 -105q0 -61 48 -102t120.5 -76t157.5 -72t158 -89t121 -129t48 -191q0 -115 -38 -198t-106.5 -138t-166 -82t-213.5 -27q-154 0 -270.5 29t-172.5 57z" />
-<glyph unicode="T" horiz-adv-x="1163" d="M23 1184v250h1118v-250h-418v-1184h-281v1184h-419z" />
-<glyph unicode="U" horiz-adv-x="1284" d="M117 473v961h280v-906q0 -84 15.5 -142t48.5 -94t82 -51.5t114 -15.5q129 0 186.5 72t57.5 231v906h266v-926q0 -139 -36.5 -239.5t-102 -166t-160 -96.5t-206.5 -31q-545 0 -545 498z" />
-<glyph unicode="V" horiz-adv-x="1232" d="M-18 1434h325l287 -842l37 -244h10l41 246l274 840h295l-532 -1444h-201z" />
-<glyph unicode="W" horiz-adv-x="1765" d="M0 1434h305l191 -801l26 -254h8l29 258l250 797h184l246 -801l29 -254h8l31 258l174 797h284l-395 -1444h-188l-256 796l-35 220h-10l-35 -222l-254 -794h-199z" />
-<glyph unicode="X" horiz-adv-x="1296" d="M20 0l441 729l-400 705h338l222 -414l49 -146l47 146l231 414h305l-413 -691l434 -743h-334l-252 442l-55 152l-53 -152l-254 -442h-306z" />
-<glyph unicode="Y" horiz-adv-x="1212" d="M-4 1434h334l262 -539l29 -152h10l31 156l253 535h302l-469 -899v-535h-281v532z" />
-<glyph unicode="Z" horiz-adv-x="1103" d="M55 0v250l607 848l106 86h-713v250h994v-250l-611 -856l-104 -78h715v-250h-994z" />
-<glyph unicode="[" horiz-adv-x="663" d="M123 -471v1905h481v-226h-227v-1454h227v-225h-481z" />
-<glyph unicode="\" horiz-adv-x="868" d="M-49 1368l209 88l737 -1651l-203 -92z" />
-<glyph unicode="]" horiz-adv-x="663" d="M59 -246h228v1454h-228v226h482v-1905h-482v225z" />
-<glyph unicode="^" horiz-adv-x="1024" d="M41 846l401 598h142l379 -598h-269l-145 250l-43 143l-51 -145l-160 -248h-254z" />
-<glyph unicode="_" horiz-adv-x="909" d="M0 -240h909v-219h-909v219z" />
-<glyph unicode="`" horiz-adv-x="647" d="M123 1413v62h278l123 -316h-147z" />
-<glyph unicode="a" horiz-adv-x="1015" d="M47 283q0 94 42 158.5t121 104.5q78 40 188 55q78 11 170 10q36 0 75 -1q4 36 4 66q-1 65 -21 99q-30 50 -137 50q-80 0 -169 -16t-146 -43l-63 199q82 37 194.5 58t235.5 21q106 0 178 -25.5t113.5 -72.5t59 -112.5t17.5 -147.5q0 -90 -6 -181t-7 -179v-25q0 -75 5 -146 q6 -83 31 -157h-217l-43 141h-10q-41 -63 -114 -109t-188 -46q-72 0 -129 21.5t-98 61t-63.5 94t-22.5 122.5zM322 324q0 -57 34 -89t93 -32q80 0 127 35.5t69 76.5v134q-36 3 -71 3q-26 0 -50 -2q-58 -4 -103.5 -18t-72 -40.5t-26.5 -67.5z" />
-<glyph unicode="b" horiz-adv-x="1097" d="M117 45v1389h266v-492h8q43 49 110.5 78t149.5 29q184 0 281.5 -126t97.5 -384q0 -276 -136 -420t-374 -144q-131 0 -239.5 21.5t-163.5 48.5zM383 229q33 -16 71 -22t81 -6q109 0 165 78.5t56 250.5q-1 293 -183 293q-74 0 -119.5 -37.5t-70.5 -109.5v-447z" />
-<glyph unicode="c" horiz-adv-x="886" d="M68 512q0 260 116.5 400.5t339.5 140.5q113 0 181.5 -18.5t123.5 -47.5l-63 -217q-47 23 -93 35t-106 12q-111 0 -168 -72.5t-57 -232.5q0 -66 14.5 -121t43 -96t74.5 -64.5t108 -23.5q68 0 114.5 17.5t83.5 41.5l62 -203q-61 -45 -148.5 -68.5t-179.5 -23.5 q-123 0 -208 39t-138 109.5t-76.5 171t-23.5 221.5z" />
-<glyph unicode="d" horiz-adv-x="1103" d="M68 496q0 262 118.5 407.5t348.5 145.5q63 0 104 -7.5t82 -23.5v416h266v-1074q0 -86 2 -172t19 -190h-191l-37 133h-8q-41 -72 -117.5 -116t-181.5 -44q-193 0 -299 127t-106 398zM342 487q0 -131 46.5 -210.5t146.5 -79.5q78 0 122.5 37.5t63.5 109.5v434 q-29 23 -63.5 34t-90.5 11q-113 0 -169 -75.5t-56 -260.5z" />
-<glyph unicode="e" horiz-adv-x="1040" d="M68 512q0 270 129 405.5t362 135.5q78 0 151.5 -20.5t131 -67.5t92.5 -127t35 -199q0 -43 -5.5 -92t-15.5 -103h-614q6 -129 66.5 -194.5t195.5 -65.5q84 0 150.5 26t101.5 52l88 -174q-61 -49 -166.5 -83t-224.5 -34q-248 0 -362.5 144.5t-114.5 396.5zM340 610h381 q1 18 1 34q0 86 -35 136q-42 60 -132 60q-104 0 -154.5 -62.5t-60.5 -167.5z" />
-<glyph unicode="f" horiz-adv-x="657" d="M23 799v225h141v57q0 195 82 282t237 87q164 0 273 -39l-51 -213q-47 16 -83 21.5t-75 5.5q-41 0 -64.5 -12.5t-35 -38t-14.5 -63.5t-3 -87h225v-225h-225v-799h-266v799h-141z" />
-<glyph unicode="g" horiz-adv-x="1097" d="M68 492q0 274 131 415.5t381 141.5q131 0 234.5 -18.5t168.5 -43.5v-987q0 -223 -121 -328.5t-338 -105.5q-147 0 -232 20.5t-128 42.5l55 211q47 -18 109.5 -36.5t154.5 -18.5q139 0 189.5 60.5t50.5 168.5v66h-8q-72 -96 -254 -96q-199 0 -296 122.5t-97 385.5z M342 502q0 -150 49 -227.5t141 -77.5q78 0 120 34.5t65 104.5v461q-61 26 -151 26h-7q-102 0 -159.5 -76.5t-57.5 -244.5z" />
-<glyph unicode="h" horiz-adv-x="1116" d="M117 0v1434h266v-525h8q49 66 121 105t182 39q78 0 137.5 -20.5t99.5 -67.5t59.5 -128t19.5 -200v-637h-267v582q0 125 -34.5 180t-126.5 55q-68 0 -124.5 -46t-74.5 -118v-653h-266z" />
-<glyph unicode="i" horiz-adv-x="550" d="M100 1313q0 59 44 101t122 42t126 -42t48 -101t-48 -99t-126 -40t-122 40t-44 99zM139 0v1024h267v-1024h-267z" />
-<glyph unicode="j" horiz-adv-x="548" d="M-33 -188q8 0 14.5 -1t12.5 -1q92 0 119.5 59t27.5 164v991h267v-1067q0 -186 -74 -284.5t-236 -98.5q-61 0 -131 14v224zM105 1313q0 59 44 101t122 42t126 -42t48 -101t-48 -99t-126 -40t-122 40t-44 99z" />
-<glyph unicode="k" horiz-adv-x="1005" d="M117 0v1434h266v-846l61 28l234 408h293l-246 -389l-104 -78l112 -80l277 -477h-305l-250 424h-72v-424h-266z" />
-<glyph unicode="l" horiz-adv-x="602" d="M125 205v1229h266v-1090q0 -72 18.5 -104.5t59.5 -32.5q25 0 48.5 4t57.5 18l29 -209q-33 -16 -100.5 -32.5t-138.5 -16.5q-117 0 -178.5 54.5t-61.5 179.5z" />
-<glyph unicode="m" horiz-adv-x="1648" d="M117 0v1024h207l30 -135h8q47 66 120 115t188 49q98 0 160.5 -40t97.5 -134q47 80 120.5 127t178.5 47q86 0 146.5 -20.5t98 -71t56 -134.5t18.5 -213v-614h-266v575q0 121 -25.5 181.5t-113.5 60.5q-72 0 -114 -39t-62 -106v-672h-267v557q0 141 -26.5 200.5 t-110.5 59.5q-70 0 -112.5 -38t-65.5 -97v-682h-266z" />
-<glyph unicode="n" horiz-adv-x="1116" d="M117 0v1024h211l30 -135h9q47 66 124.5 115t200.5 49q76 0 135.5 -20.5t100.5 -67.5t61.5 -128t20.5 -200v-637h-267v582q0 125 -35.5 180t-121.5 55q-76 0 -128 -44t-75 -109v-664h-266z" />
-<glyph unicode="o" horiz-adv-x="1099" d="M68 512q0 260 127 400.5t356 140.5q123 0 213 -39t149.5 -109.5t89 -171t29.5 -221.5q0 -260 -126 -400.5t-355 -140.5q-123 0 -213 39t-150.5 109.5t-90 171t-29.5 221.5zM342 512q0 -68 12.5 -125t37 -100t64.5 -66.5t95 -23.5q104 0 155.5 75.5t51.5 239.5 q0 141 -47 228t-160 87q-98 0 -153.5 -73.5t-55.5 -241.5z" />
-<glyph unicode="p" horiz-adv-x="1105" d="M117 -410v1434h194l31 -123h8q53 78 126 115t177 37q193 0 289 -122t96 -392q0 -131 -30.5 -236.5t-91 -179.5t-147.5 -113t-200 -39q-63 0 -104 9.5t-82 29.5v-420h-266zM383 246q29 -23 62.5 -36t89.5 -13q115 0 172 80.5t57 267.5q0 135 -45.5 208.5t-145.5 73.5 q-78 0 -121.5 -38.5t-68.5 -116.5v-426z" />
-<glyph unicode="q" horiz-adv-x="1097" d="M68 492q0 274 138 415.5t396 141.5q55 0 110.5 -5.5t105.5 -14.5t93 -20.5t72 -21.5v-1397h-266v498h-8q-35 -53 -94.5 -85t-153.5 -32q-190 0 -291.5 129t-101.5 392zM342 502q0 -150 49 -227.5t141 -77.5q78 0 120 34.5t65 104.5v461q-31 16 -70 21t-88 5 q-109 0 -163 -82t-54 -239z" />
-<glyph unicode="r" horiz-adv-x="718" d="M117 0v1024h207l30 -135h8q35 76 94.5 117t139.5 41q53 0 121 -23l-35 -250q-63 23 -115 23q-72 0 -120 -38t-64 -97v-662h-266z" />
-<glyph unicode="s" horiz-adv-x="864" d="M51 63l74 199q47 -27 125 -52.5t160 -25.5q59 0 95 23t36 76q0 41 -35 65.5t-86 45t-112.5 42t-113 59t-86 96t-34.5 150.5q0 152 90 232t260 80q117 0 211 -24.5t147 -55.5l-59 -193q-47 18 -119 39t-145 21q-119 0 -119 -92q0 -37 35 -59.5t86 -42t112.5 -42 t112.5 -58.5t86 -93.5t35 -147.5q0 -156 -99.5 -245t-297.5 -89q-109 0 -204 28t-155 64z" />
-<glyph unicode="t" horiz-adv-x="714" d="M10 799v225h142v193l266 75v-268h250v-225h-250v-393q0 -106 21.5 -152.5t80.5 -46.5q41 0 71 8t66 25l48 -205q-55 -27 -129 -45.5t-150 -18.5q-141 0 -207.5 73t-66.5 239v516h-142z" />
-<glyph unicode="u" horiz-adv-x="1101" d="M106 387v637h267v-582q0 -125 29.5 -180t115.5 -55q76 0 126 45t75 110v662h266v-713q0 -84 8 -164.5t25 -146.5h-201l-47 152h-8q-47 -78 -131 -129.5t-199 -51.5q-78 0 -139.5 20.5t-102 67.5t-62.5 127t-22 201z" />
-<glyph unicode="v" horiz-adv-x="976" d="M-29 1024h310l190 -537l35 -157h10l29 162l174 532h287l-428 -1034h-162z" />
-<glyph unicode="w" horiz-adv-x="1476" d="M-16 1024h288l150 -514l24 -182h11l35 184l170 512h196l186 -524l37 -170h9l28 172l131 522h244l-315 -1034h-197l-207 573l-26 129h-11l-24 -131l-197 -571h-203z" />
-<glyph unicode="x" horiz-adv-x="1075" d="M16 0l332 524l-307 500h317l134 -219l57 -143l61 143l140 219h288l-309 -492l330 -532h-309l-158 246l-62 151l-65 -151l-158 -246h-291z" />
-<glyph unicode="y" horiz-adv-x="978" d="M-18 1024h319l188 -575l37 -160h13l26 162l156 573h274l-311 -924q-39 -115 -75 -210t-79 -164.5t-95 -107.5t-124 -38q-106 0 -170 35l49 213q31 -12 62 -12q47 0 91 40t67 144z" />
-<glyph unicode="z" horiz-adv-x="937" d="M63 0v225l404 486l104 88h-508v225h803v-225l-399 -494l-102 -80h501v-225h-803z" />
-<glyph unicode="{" horiz-adv-x="759" d="M88 379v205q78 0 121 42t43 132v428q0 111 52 180.5t167 69.5h246v-226h-103q-55 0 -80.5 -28.5t-25.5 -94.5v-399q0 -90 -43 -136t-100 -56v-21q55 -8 99 -61.5t44 -139.5v-397q0 -66 24.5 -94.5t83.5 -28.5h101v-225h-246q-106 0 -162.5 64.5t-56.5 183.5v420 q0 104 -43 143t-121 39z" />
-<glyph unicode="|" horiz-adv-x="464" d="M123 -266v1700h219v-1700h-219z" />
-<glyph unicode="}" horiz-adv-x="759" d="M72 -246h102q55 0 81 28t26 95v399q0 90 43 136.5t100 56.5v20q-55 8 -99 61.5t-44 139.5v397q0 63 -25 93t-84 30h-100v226h243q109 0 164.5 -64.5t55.5 -183.5v-420q0 -104 43 -143t120 -39v-205q-78 0 -120.5 -42t-42.5 -132v-428q0 -111 -54.5 -180.5t-169.5 -69.5 h-239v225z" />
-<glyph unicode="~" horiz-adv-x="1079" d="M57 774q96 78 173 107.5t143 29.5q59 0 110.5 -17t98.5 -36.5t93 -37t93 -17.5q37 0 76 12t82 47l96 -211q-74 -55 -135.5 -77.5t-114.5 -22.5q-57 0 -106.5 18.5t-95.5 41t-93 41t-100 18.5q-49 0 -105.5 -21.5t-124.5 -79.5z" />
-<glyph unicode="&#xa1;" horiz-adv-x="600" d="M90 891q0 72 45 114t119 42q78 0 123 -42t45 -114t-45 -115t-123 -43q-74 0 -119 43t-45 115zM117 264l53 332h168l53 -332v-674h-274v674z" />
-<glyph unicode="&#xa2;" d="M172 512q0 229 98.5 365.5t284.5 166.5v185h248v-185q57 -8 102 -21t82 -32l-61 -217q-31 14 -66 22.5t-72 12.5v-596q47 6 85 20.5t67 30.5l61 -201q-35 -27 -87 -46t-111 -29v-193h-248v182q-104 14 -177 58.5t-119 113t-66.5 160.5t-20.5 203zM434 512q0 -104 39 -183 t131 -108v586q-86 -23 -128 -93.5t-42 -201.5z" />
-<glyph unicode="&#xa3;" d="M104 0v236h5q63 2 111 22.5t80 54t48.5 78.5t16.5 94q0 55 -13 103h-248v219h140q-27 49 -46.5 110.5t-19.5 147.5q0 100 34 175t94.5 124t144.5 73.5t184 24.5q125 0 227.5 -23.5t175.5 -58.5l-86 -237q-41 23 -112.5 46t-171.5 23q-98 0 -153.5 -46t-55.5 -138 q0 -70 25.5 -120t56.5 -101h288v-219h-200q6 -35 6 -70q0 -61 -20.5 -128.5t-63.5 -110.5l-88 -64v-10l137 31h471v-236h-967z" />
-<glyph unicode="&#xa4;" d="M10 307l158 160l74 35q-25 43 -39.5 93t-14.5 112q0 59 15.5 110t42.5 98l-78 35l-158 160l156 164l160 -158l39 -76q41 31 97 46.5t118 15.5q59 0 117.5 -15.5t97.5 -44.5l41 74l159 158l158 -164l-158 -160l-75 -32q29 -43 41 -97.5t12 -113.5q0 -61 -13.5 -115.5 t-39.5 -91.5l75 -33l158 -160l-158 -164l-159 158l-37 76q-39 -29 -99.5 -45.5t-119.5 -16.5q-61 0 -117.5 15.5t-97.5 44.5l-39 -74l-160 -158zM412 709q0 -78 47 -127.5t123 -49.5t122 49.5t46 127.5q0 74 -46.5 125t-121.5 51q-76 0 -123 -51t-47 -125z" />
-<glyph unicode="&#xa5;" d="M-29 1434h334l262 -539l29 -152h10l31 156l254 535h301l-389 -744h184v-164h-264v-116h264v-164h-264v-246h-281v246h-270v164h270v116h-270v164h186z" />
-<glyph unicode="&#xa6;" horiz-adv-x="464" d="M123 -266v702h217v-702h-217zM123 731v703h217v-703h-217z" />
-<glyph unicode="&#xa7;" horiz-adv-x="1085" d="M100 723q0 63 31 123.5t84 107.5l84 29q-53 33 -88 83t-35 134q0 115 89 188.5t270 73.5q121 0 225 -20.5t160 -46.5l-66 -215q-47 23 -125 40t-149 17q-76 0 -107 -22.5t-31 -57.5q0 -37 40 -57.5t100.5 -36.5t131 -36.5t131 -57.5t100.5 -98.5t40 -159.5 q0 -63 -29.5 -123t-83.5 -107l-92 -28q55 -33 92 -84.5t37 -135.5q0 -129 -100 -195.5t-266 -66.5q-139 0 -232.5 28t-152.5 60l69 205q47 -23 115 -45t158 -22q76 0 109.5 19.5t33.5 62.5q0 39 -40 60t-100.5 38.5t-131 38t-131 56.5t-100.5 95.5t-40 155.5zM367 727 q0 -72 65.5 -106.5t179.5 -67.5q45 25 76 66t31 88q0 37 -17.5 61.5t-50.5 43.5t-80 35.5t-106 35.5q-41 -25 -69.5 -65t-28.5 -91z" />
-<glyph unicode="&#xa8;" horiz-adv-x="980" d="M123 1333q0 66 40 105t105 39q66 0 104 -39t38 -105q0 -61 -38 -100t-104 -39t-105.5 39t-39.5 100zM571 1333q0 66 38 105t104 39t105.5 -39t39.5 -105q0 -61 -40 -100t-105 -39q-66 0 -104 39t-38 100z" />
-<glyph unicode="&#xa9;" horiz-adv-x="1705" d="M113 594q0 170 57 306t156.5 232.5t234.5 148.5t291 52t290 -52t234.5 -148.5t157.5 -232.5t57 -306t-57 -306t-157.5 -232.5t-234.5 -148.5t-290 -52q-170 0 -307 52t-233.5 148.5t-147.5 232.5t-51 306zM313 594q0 -127 40 -229.5t113 -173t171 -108.5t215 -38t216 38 t172 108.5t113 173t40 229.5t-40 229.5t-113 173t-172 108.5t-216 38t-215 -38t-171 -108.5t-113 -173t-40 -229.5zM508 594q0 186 93 287.5t247 101.5q76 0 134 -17.5t112 -47.5l-66 -179q-37 18 -66.5 24.5t-58.5 6.5q-59 0 -94 -39t-35 -137q0 -176 144 -176q39 0 69.5 7 t61.5 24l59 -181q-45 -29 -113.5 -46t-146.5 -17q-166 0 -253 104.5t-87 284.5z" />
-<glyph unicode="&#xaa;" horiz-adv-x="860" d="M86 973q0 68 36 112.5t96.5 71.5t141 36t170.5 5q4 53 -14 76.5t-90 23.5q-82 0 -148.5 -16t-107.5 -33l-45 131q53 29 150.5 49.5t218.5 20.5q156 0 213 -56.5t57 -172.5q0 -123 -6 -238t16 -205h-207l-26 94h-9q-27 -35 -75.5 -68.5t-137.5 -33.5q-106 0 -169.5 56.5 t-63.5 146.5zM322 999q0 -33 21 -51t54 -18q66 0 92.5 23.5t40.5 47.5v72q-88 10 -148 -4t-60 -70z" />
-<glyph unicode="&#xab;" horiz-adv-x="999" d="M59 530l328 471l162 -127l-178 -258l-99 -84l99 -73l190 -254l-162 -127zM457 535l315 442l146 -115l-166 -250l-95 -80l95 -71l178 -248l-146 -115z" />
-<glyph unicode="&#xac;" horiz-adv-x="1079" d="M92 614v230h905v-463h-245v233h-660z" />
-<glyph unicode="&#xad;" horiz-adv-x="737" d="M111 471v236h514v-236h-514z" />
-<glyph unicode="&#xae;" horiz-adv-x="1413" d="M127 924q0 137 46 244.5t126 181t185.5 112.5t222.5 39q121 0 226 -39t183 -112.5t123 -181t45 -244.5q0 -139 -46 -247t-125 -181.5t-184.5 -111.5t-221.5 -38q-121 0 -226.5 38t-184.5 111.5t-124 181.5t-45 247zM319 924q0 -98 32 -173t85 -124t123 -74t148 -25 q82 0 152.5 23.5t121.5 73t81 124t30 175.5q0 98 -31 171.5t-83 123t-123 74t-148 24.5q-86 0 -158 -26.5t-123 -78t-79 -124t-28 -164.5zM496 659v531q33 10 92 15t112 5q86 0 147.5 -35.5t61.5 -123.5q0 -66 -42 -101t-103 -39l57 -28l133 -224h-125l-129 213l-98 31v-244 h-106zM602 965h70q59 0 92 18t33 64q0 71 -119 71q-23 0 -43.5 -1t-32.5 -7v-145z" />
-<glyph unicode="&#xaf;" horiz-adv-x="907" d="M123 1159v189h661v-189h-661z" />
-<glyph unicode="&#xb0;" horiz-adv-x="894" d="M123 1122q0 76 26.5 138.5t72.5 107.5t106.5 69.5t130.5 24.5t132 -22.5t109.5 -66.5t74 -107.5t26.5 -143.5t-26.5 -142t-74 -105.5t-110 -66t-131.5 -22.5q-70 0 -130.5 22.5t-106.5 66t-72.5 105.5t-26.5 142zM328 1122q0 -66 39 -103.5t94 -37.5t96 38t41 103 q0 66 -41 106t-96 40t-94 -40t-39 -106z" />
-<glyph unicode="&#xb1;" horiz-adv-x="1079" d="M88 289v229h905v-229h-905zM88 831v228h332v338h239v-338h334v-228h-334v-219h-239v219h-332z" />
-<glyph unicode="&#xb2;" horiz-adv-x="843" d="M102 1571q72 43 153 62.5t155 19.5q145 0 224 -66.5t79 -193.5q0 -121 -61.5 -207t-147.5 -164l-96 -51v-8l120 22h217v-207h-641v146q53 37 119 86t122 105t94 115.5t38 112.5q0 100 -115 101q-55 0 -104 -17.5t-86 -40.5z" />
-<glyph unicode="&#xb3;" horiz-adv-x="843" d="M115 813l47 184q84 -39 182 -39q92 0 130 29t40 76q-2 47 -41 73.5t-143 26.5h-88v78l149 164l88 51l-119 -12h-235v194h582v-127l-181 -188l-69 -37v-10l61 6q109 -4 169.5 -64.5t62.5 -171.5q-2 -74 -32 -127t-80 -87.5t-117.5 -51t-141.5 -16.5q-78 0 -146.5 13 t-117.5 36z" />
-<glyph unicode="&#xb4;" horiz-adv-x="624" d="M123 1159l108 316h271v-62l-228 -254h-151z" />
-<glyph unicode="&#xb6;" horiz-adv-x="1083" d="M53 1020q0 82 26.5 156.5t76 132t119 91.5t155.5 34h152v-1700h-217v868q-68 0 -125.5 34t-99.5 92t-64.5 133t-22.5 159zM741 -266v1700h220v-1700h-220z" />
-<glyph unicode="&#xb7;" horiz-adv-x="518" d="M92 647q0 72 45 114t119 42q78 0 123 -42t45 -114t-45 -115t-123 -43q-74 0 -119 43t-45 115z" />
-<glyph unicode="&#xb8;" horiz-adv-x="679" d="M123 -418l16 117q92 -14 133 -4t41 45q0 57 -176 65l117 195h172l-49 -88q84 -8 132 -44t48 -110q0 -59 -37 -99t-97.5 -62.5t-139 -26.5t-160.5 12z" />
-<glyph unicode="&#xb9;" horiz-adv-x="843" d="M84 1425l324 228h176v-670h178v-205h-615v205h201v336l21 94l-64 -65l-121 -80z" />
-<glyph unicode="&#xba;" horiz-adv-x="858" d="M70 1110q0 92 26.5 157.5t73.5 108.5t113.5 62.5t144.5 19.5t143.5 -18.5t113.5 -59.5t74.5 -107.5t28.5 -162.5q-2 -96 -28.5 -162.5t-74.5 -107.5t-113.5 -59.5t-143.5 -18.5t-144.5 18.5t-113.5 59.5t-73.5 107.5t-26.5 162.5zM307 1110q0 -176 121 -176q63 0 91 38 t30 138q-2 98 -29.5 137t-91.5 39q-63 0 -92 -39t-29 -137z" />
-<glyph unicode="&#xbb;" horiz-adv-x="999" d="M70 866l143 115l328 -436l-314 -443l-147 115l168 250l92 80l-92 71zM438 874l162 127l340 -452l-328 -471l-161 127l178 258l98 84l-98 74z" />
-<glyph unicode="&#xbc;" horiz-adv-x="1802" d="M76 1221l324 227h174v-875h-236v541l23 94l-64 -65l-121 -80zM364 80l883 1384l174 -102l-881 -1391zM920 160v137l446 580h187v-535h153v-182h-153v-160h-209v160h-424zM1129 326l106 16h109v176l12 109h-10l-45 -100l-99 -136z" />
-<glyph unicode="&#xbd;" horiz-adv-x="1849" d="M76 1221l324 227h174v-875h-236v541l23 94l-64 -65l-121 -80zM364 80l883 1384l174 -102l-881 -1391zM1112 793q72 43 153 62.5t155 19.5q145 0 224 -66.5t79 -193.5q0 -121 -61.5 -207t-147.5 -164l-96 -51v-8l120 22h217v-207h-641v146q53 37 119 86t122 105t94 115.5 t38 112.5q0 100 -115 101q-55 0 -104 -17.5t-86 -40.5z" />
-<glyph unicode="&#xbe;" horiz-adv-x="1853" d="M99 608l47 184q84 -39 182 -39q92 0 130 29t40 76q-2 47 -41 73.5t-143 26.5h-88v78l149 164l88 51l-119 -12h-235v194h582v-127l-181 -188l-69 -37v-10l61 6q109 -4 169.5 -64.5t62.5 -171.5q-2 -74 -32 -127t-80 -87.5t-117.5 -51t-141.5 -16.5q-78 0 -146.5 13 t-117.5 36zM416 80l883 1384l174 -102l-881 -1391zM971 160v137l446 580h187v-535h153v-182h-153v-160h-209v160h-424zM1180 326l106 16h109v176l12 109h-10l-45 -100l-99 -136z" />
-<glyph unicode="&#xbf;" horiz-adv-x="929" d="M47 -90q0 104 27.5 172t69.5 116t90.5 84.5t90.5 78.5t69.5 97.5t27.5 141.5h227q10 -106 -9 -181t-56 -129t-82 -93t-85 -76t-67.5 -77t-27.5 -95q0 -72 40.5 -116t143.5 -44q33 0 69.5 7t73.5 20.5t71 31t60 37.5l101 -196q-78 -53 -178.5 -88t-243.5 -35 q-193 0 -302.5 92t-109.5 252zM365 891q0 72 45 114t118 42q78 0 123 -42t45 -114t-45 -115t-123 -43q-74 0 -118.5 43t-44.5 115z" />
-<glyph unicode="&#xc0;" horiz-adv-x="1239" d="M0 0l516 1444h207l516 -1444h-295l-115 317h-440l-108 -317h-281zM279 1720v62h326l213 -242h-216zM461 543h307l-106 319l-44 225h-10l-43 -227z" />
-<glyph unicode="&#xc1;" horiz-adv-x="1239" d="M0 0l516 1444h207l516 -1444h-295l-115 317h-440l-108 -317h-281zM420 1540l213 242h326v-62l-328 -180h-211zM461 543h307l-106 319l-44 225h-10l-43 -227z" />
-<glyph unicode="&#xc2;" horiz-adv-x="1239" d="M0 0l516 1444h207l516 -1444h-295l-115 317h-440l-108 -317h-281zM254 1511v82l272 189h197l260 -191v-80h-203l-117 84l-40 70l-43 -68l-127 -86h-199zM461 543h307l-106 319l-44 225h-10l-43 -227z" />
-<glyph unicode="&#xc3;" horiz-adv-x="1239" d="M0 0l516 1444h207l516 -1444h-295l-115 317h-440l-108 -317h-281zM232 1638q66 72 126 98.5t120 26.5q45 0 90 -11t87 -24.5t83 -24.5t78 -11q33 0 63.5 10t58.5 39l52 -137q-57 -53 -111.5 -75t-105.5 -22q-47 0 -90.5 11.5t-85.5 26t-82.5 25.5t-79.5 11t-77 -15.5 t-77 -56.5zM461 543h307l-106 319l-44 225h-10l-43 -227z" />
-<glyph unicode="&#xc4;" horiz-adv-x="1239" d="M0 0l516 1444h207l516 -1444h-295l-115 317h-440l-108 -317h-281zM254 1634q0 53 37 86t119 33q80 0 116.5 -32.5t36.5 -86.5q0 -53 -37 -84.5t-116 -31.5q-82 0 -119 31.5t-37 84.5zM461 543h307l-106 319l-44 225h-10l-43 -227zM692 1634q0 53 37 86t117 33 q82 0 118.5 -32.5t36.5 -86.5q0 -53 -36.5 -84.5t-118.5 -31.5q-80 0 -117 31.5t-37 84.5z" />
-<glyph unicode="&#xc5;" horiz-adv-x="1239" d="M0 0l504 1411q-80 18 -113 63.5t-33 104.5q0 37 12.5 70.5t42 59.5t80 40t128.5 14q143 0 202.5 -49t59.5 -135q0 -59 -33 -103t-117 -65l506 -1411h-295l-115 317h-440l-108 -317h-281zM461 543h307l-106 319l-44 225h-10l-43 -227zM530 1579q0 -63 91 -63q51 0 71.5 16 t20.5 47q0 35 -21.5 51.5t-70.5 16.5q-91 0 -91 -68z" />
-<glyph unicode="&#xc6;" horiz-adv-x="1765" d="M-59 0l868 1434h858v-250h-567v-334h516v-250h-516v-350h577v-250h-858v348h-381l-202 -348h-295zM561 575h258v515h-12l-74 -211z" />
-<glyph unicode="&#xc7;" horiz-adv-x="1144" d="M78 717q0 211 58.5 353t151.5 229t207.5 125t229.5 38q123 0 208 -16t140 -39l-55 -238q-47 23 -111.5 33t-156.5 10q-170 0 -273.5 -120.5t-103.5 -374.5q0 -111 24.5 -202t74.5 -155.5t125 -100.5t173 -36q92 0 155.5 18.5t110.5 47.5l58 -230q-53 -39 -134 -59 t-172 -27l-32 -61q84 -8 132 -44t48 -110q0 -47 -23.5 -81.5t-64.5 -58.5t-96.5 -36t-118.5 -12t-131 12l18 99q14 -2 26.5 -2.5t22.5 -0.5q78 0 100.5 18.5t22.5 43.5q0 57 -176 65l102 172q-113 14 -211 62.5t-171.5 138.5t-115.5 223.5t-42 315.5z" />
-<glyph unicode="&#xc8;" horiz-adv-x="1069" d="M123 0v1434h850v-250h-570v-334h519v-250h-519v-350h580v-250h-860zM182 1720v62h326l213 -242h-216z" />
-<glyph unicode="&#xc9;" horiz-adv-x="1069" d="M123 0v1434h850v-250h-570v-334h519v-250h-519v-350h580v-250h-860zM387 1540l213 242h326v-62l-328 -180h-211z" />
-<glyph unicode="&#xca;" horiz-adv-x="1069" d="M123 0v1434h850v-250h-570v-334h519v-250h-519v-350h580v-250h-860zM176 1511v82l272 189h197l260 -191v-80h-203l-117 84l-40 70l-43 -68l-127 -86h-199z" />
-<glyph unicode="&#xcb;" horiz-adv-x="1069" d="M123 0v1434h850v-250h-570v-334h519v-250h-519v-350h580v-250h-860zM172 1634q0 53 37 86t119 33q80 0 116.5 -32.5t36.5 -86.5q0 -53 -37 -84.5t-116 -31.5q-82 0 -119 31.5t-37 84.5zM610 1634q0 53 37 86t117 33q82 0 118.5 -32.5t36.5 -86.5q0 -53 -36.5 -84.5 t-118.5 -31.5q-80 0 -117 31.5t-37 84.5z" />
-<glyph unicode="&#xcc;" horiz-adv-x="583" d="M-45 1720v62h326l213 -242h-216zM152 0v1434h280v-1434h-280z" />
-<glyph unicode="&#xcd;" horiz-adv-x="583" d="M100 1540l213 242h326v-62l-328 -180h-211zM152 0v1434h280v-1434h-280z" />
-<glyph unicode="&#xce;" horiz-adv-x="583" d="M-74 1511v82l272 189h197l260 -191v-80h-203l-117 84l-40 70l-43 -68l-127 -86h-199zM152 0v1434h280v-1434h-280z" />
-<glyph unicode="&#xcf;" horiz-adv-x="583" d="M-78 1634q0 53 37 86t119 33q80 0 116.5 -32.5t36.5 -86.5q0 -53 -37 -84.5t-116 -31.5q-82 0 -119 31.5t-37 84.5zM152 0v1434h280v-1434h-280zM360 1634q0 53 37 86t117 33q82 0 118.5 -32.5t36.5 -86.5q0 -53 -36.5 -84.5t-118.5 -31.5q-80 0 -117 31.5t-37 84.5z" />
-<glyph unicode="&#xd0;" horiz-adv-x="1370" d="M-12 657v164h180v613q43 6 97 10t111.5 6t112 3t97.5 1q190 0 325.5 -53t219 -149.5t122.5 -229.5t39 -293q0 -145 -36.5 -280.5t-122.5 -240t-226.5 -168t-347.5 -63.5q-33 0 -87 2.5t-112.5 5.5t-111.5 6t-80 7v659h-180zM449 233q8 -2 27.5 -3t42 -2t43 -1h30.5 q119 0 197.5 42t125 112t64.5 161t18 187q0 84 -16 169t-60 152.5t-120 110.5t-193 43q-45 0 -91 -2t-68 -6v-375h286v-164h-286v-424z" />
-<glyph unicode="&#xd1;" horiz-adv-x="1345" d="M123 0v1444h205l542 -764l109 -219h10l-33 219v754h267v-1444h-205l-539 758l-112 225h-11l33 -225v-748h-266zM283 1638q66 72 126 98.5t120 26.5q45 0 90 -11t87 -24.5t83 -24.5t78 -11q33 0 63.5 10t58.5 39l52 -137q-57 -53 -111.5 -75t-105.5 -22q-47 0 -90.5 11.5 t-85.5 26t-82.5 25.5t-79.5 11t-77 -15.5t-77 -56.5z" />
-<glyph unicode="&#xd2;" horiz-adv-x="1372" d="M78 717q0 358 157.5 551.5t450.5 193.5q154 0 268.5 -53t190.5 -151.5t112.5 -235.5t36.5 -305q0 -358 -158.5 -552t-449.5 -194q-156 0 -270.5 53.5t-189 151.5t-111.5 235.5t-37 305.5zM305 1720v62h326l213 -242h-216zM373 717q0 -109 18.5 -200t56 -156.5t97 -102.5 t141.5 -37q150 0 231.5 117t81.5 379q0 104 -17 194t-54 158t-96.5 105.5t-145.5 37.5q-150 0 -231.5 -119.5t-81.5 -375.5z" />
-<glyph unicode="&#xd3;" horiz-adv-x="1372" d="M78 717q0 358 157.5 551.5t450.5 193.5q154 0 268.5 -53t190.5 -151.5t112.5 -235.5t36.5 -305q0 -358 -158.5 -552t-449.5 -194q-156 0 -270.5 53.5t-189 151.5t-111.5 235.5t-37 305.5zM373 717q0 -109 18.5 -200t56 -156.5t97 -102.5t141.5 -37q150 0 231.5 117 t81.5 379q0 104 -17 194t-54 158t-96.5 105.5t-145.5 37.5q-150 0 -231.5 -119.5t-81.5 -375.5zM541 1540l213 242h326v-62l-328 -180h-211z" />
-<glyph unicode="&#xd4;" horiz-adv-x="1372" d="M78 717q0 358 157.5 551.5t450.5 193.5q154 0 268.5 -53t190.5 -151.5t112.5 -235.5t36.5 -305q0 -358 -158.5 -552t-449.5 -194q-156 0 -270.5 53.5t-189 151.5t-111.5 235.5t-37 305.5zM316 1511v82l272 189h197l260 -191v-80h-203l-117 84l-40 70l-43 -68l-127 -86 h-199zM373 717q0 -109 18.5 -200t56 -156.5t97 -102.5t141.5 -37q150 0 231.5 117t81.5 379q0 104 -17 194t-54 158t-96.5 105.5t-145.5 37.5q-150 0 -231.5 -119.5t-81.5 -375.5z" />
-<glyph unicode="&#xd5;" horiz-adv-x="1372" d="M78 717q0 358 157.5 551.5t450.5 193.5q154 0 268.5 -53t190.5 -151.5t112.5 -235.5t36.5 -305q0 -358 -158.5 -552t-449.5 -194q-156 0 -270.5 53.5t-189 151.5t-111.5 235.5t-37 305.5zM295 1638q66 72 126 98.5t120 26.5q45 0 90 -11t87 -24.5t83 -24.5t78 -11 q33 0 63.5 10t58.5 39l52 -137q-57 -53 -111.5 -75t-105.5 -22q-47 0 -90.5 11.5t-85.5 26t-82.5 25.5t-79.5 11t-77 -15.5t-77 -56.5zM373 717q0 -109 18.5 -200t56 -156.5t97 -102.5t141.5 -37q150 0 231.5 117t81.5 379q0 104 -17 194t-54 158t-96.5 105.5t-145.5 37.5 q-150 0 -231.5 -119.5t-81.5 -375.5z" />
-<glyph unicode="&#xd6;" horiz-adv-x="1372" d="M78 717q0 358 157.5 551.5t450.5 193.5q154 0 268.5 -53t190.5 -151.5t112.5 -235.5t36.5 -305q0 -358 -158.5 -552t-449.5 -194q-156 0 -270.5 53.5t-189 151.5t-111.5 235.5t-37 305.5zM307 1634q0 53 37 86t119 33q80 0 116.5 -32.5t36.5 -86.5q0 -53 -37 -84.5 t-116 -31.5q-82 0 -119 31.5t-37 84.5zM373 717q0 -109 18.5 -200t56 -156.5t97 -102.5t141.5 -37q150 0 231.5 117t81.5 379q0 104 -17 194t-54 158t-96.5 105.5t-145.5 37.5q-150 0 -231.5 -119.5t-81.5 -375.5zM745 1634q0 53 37 86t117 33q82 0 118.5 -32.5t36.5 -86.5 q0 -53 -36.5 -84.5t-118.5 -31.5q-80 0 -117 31.5t-37 84.5z" />
-<glyph unicode="&#xd7;" horiz-adv-x="1079" d="M111 426l268 268l-264 260l159 166l269 -266l266 266l162 -166l-266 -260l266 -264l-162 -168l-266 268l-271 -270z" />
-<glyph unicode="&#xd8;" horiz-adv-x="1372" d="M78 717q0 358 157.5 551.5t450.5 193.5q92 0 170 -20.5t141 -57.5l52 80l174 -102l-72 -115q72 -98 107.5 -232t35.5 -298q0 -358 -158.5 -552t-449.5 -194q-90 0 -163.5 17.5t-137.5 50.5l-43 -68l-176 109l61 96q-76 98 -112.5 234.5t-36.5 306.5zM373 717 q0 -74 8 -139.5t25 -120.5l448 700q-72 55 -168 55q-150 0 -231.5 -119.5t-81.5 -375.5zM530 266q68 -45 156 -45q150 0 231.5 117t81.5 379q0 68 -6 130t-22 116z" />
-<glyph unicode="&#xd9;" horiz-adv-x="1284" d="M117 473v961h280v-906q0 -84 15.5 -142t48.5 -94t82 -51.5t114 -15.5q129 0 186.5 72t57.5 231v906h266v-926q0 -139 -36.5 -239.5t-102 -166t-160 -96.5t-206.5 -31q-545 0 -545 498zM270 1720v62h326l213 -242h-216z" />
-<glyph unicode="&#xda;" horiz-adv-x="1284" d="M117 473v961h280v-906q0 -84 15.5 -142t48.5 -94t82 -51.5t114 -15.5q129 0 186.5 72t57.5 231v906h266v-926q0 -139 -36.5 -239.5t-102 -166t-160 -96.5t-206.5 -31q-545 0 -545 498zM535 1540l213 242h326v-62l-328 -180h-211z" />
-<glyph unicode="&#xdb;" horiz-adv-x="1284" d="M117 473v961h280v-906q0 -84 15.5 -142t48.5 -94t82 -51.5t114 -15.5q129 0 186.5 72t57.5 231v906h266v-926q0 -139 -36.5 -239.5t-102 -166t-160 -96.5t-206.5 -31q-545 0 -545 498zM287 1511v82l272 189h197l260 -191v-80h-203l-117 84l-40 70l-43 -68l-127 -86h-199z " />
-<glyph unicode="&#xdc;" horiz-adv-x="1284" d="M117 473v961h280v-906q0 -84 15.5 -142t48.5 -94t82 -51.5t114 -15.5q129 0 186.5 72t57.5 231v906h266v-926q0 -139 -36.5 -239.5t-102 -166t-160 -96.5t-206.5 -31q-545 0 -545 498zM273 1634q0 53 37 86t119 33q80 0 116.5 -32.5t36.5 -86.5q0 -53 -37 -84.5 t-116 -31.5q-82 0 -119 31.5t-37 84.5zM711 1634q0 53 37 86t117 33q82 0 118.5 -32.5t36.5 -86.5q0 -53 -36.5 -84.5t-118.5 -31.5q-80 0 -117 31.5t-37 84.5z" />
-<glyph unicode="&#xdd;" horiz-adv-x="1212" d="M-4 1434h334l262 -539l29 -152h10l31 156l253 535h302l-469 -899v-535h-281v532zM455 1540l213 242h326v-62l-328 -180h-211z" />
-<glyph unicode="&#xde;" horiz-adv-x="1171" d="M123 0v1434h280v-148q29 2 57.5 3t57.5 1q106 0 214 -17.5t194 -69.5t140 -145t54 -243q0 -135 -47 -228t-125 -152.5t-177 -86t-206 -26.5h-32.5t-47 1t-48 3t-34.5 4v-330h-280zM403 573q8 -2 24.5 -4t35 -3t36 -1h25.5q55 0 109.5 10.5t97.5 38t68.5 76.5t25.5 129 q0 68 -24.5 112t-64.5 70.5t-91 37t-104 10.5q-41 0 -78 -3.5t-60 -7.5v-465z" />
-<glyph unicode="&#xdf;" horiz-adv-x="1290" d="M25 799v225h141q0 119 32.5 200t91 131t139.5 72.5t177 22.5q104 0 187.5 -23.5t141.5 -66.5t90 -103.5t32 -134.5q0 -80 -36 -129t-80 -84t-80 -65.5t-36 -75.5q0 -37 30 -59.5t76 -42t98 -41t98.5 -56t76 -89t29.5 -138.5q0 -72 -22.5 -138.5t-70.5 -118.5t-121 -83 t-171 -31q-96 0 -177 23.5t-139 58.5l72 199q47 -27 94 -47.5t127 -20.5q61 0 101.5 42t40.5 102q0 43 -30 69.5t-76 48t-98 42t-98.5 52t-76 79t-29.5 120.5q0 88 36 137.5t80 83t80 62.5t36 78q0 27 -14.5 50.5t-39 39.5t-55.5 26.5t-61 10.5q-98 0 -144.5 -48.5 t-46.5 -179.5v-999h-264v799h-141z" />
-<glyph unicode="&#xe0;" horiz-adv-x="1015" d="M47 283q0 94 42 158.5t121 104.5t188.5 55t244.5 9q14 115 -16.5 165t-137.5 50q-80 0 -169 -16t-146 -43l-63 199q82 37 194.5 58t235.5 21q106 0 178 -25.5t113.5 -72.5t59 -112.5t17.5 -147.5q0 -90 -6 -181t-7 -179t5 -171t31 -157h-217l-43 141h-10 q-41 -63 -114 -109t-188 -46q-72 0 -129 21.5t-98 61t-63.5 94t-22.5 122.5zM236 1413v62h278l123 -316h-147zM322 324q0 -57 34 -89t93 -32q80 0 127 35.5t69 76.5v134q-63 6 -121.5 1.5t-103.5 -18.5t-71.5 -40.5t-26.5 -67.5z" />
-<glyph unicode="&#xe1;" horiz-adv-x="1015" d="M47 283q0 94 42 158.5t121 104.5t188.5 55t244.5 9q14 115 -16.5 165t-137.5 50q-80 0 -169 -16t-146 -43l-63 199q82 37 194.5 58t235.5 21q106 0 178 -25.5t113.5 -72.5t59 -112.5t17.5 -147.5q0 -90 -6 -181t-7 -179t5 -171t31 -157h-217l-43 141h-10 q-41 -63 -114 -109t-188 -46q-72 0 -129 21.5t-98 61t-63.5 94t-22.5 122.5zM322 324q0 -57 34 -89t93 -32q80 0 127 35.5t69 76.5v134q-63 6 -121.5 1.5t-103.5 -18.5t-71.5 -40.5t-26.5 -67.5zM377 1159l108 316h271v-62l-228 -254h-151z" />
-<glyph unicode="&#xe2;" horiz-adv-x="1015" d="M47 283q0 94 42 158.5t121 104.5t188.5 55t244.5 9q14 115 -16.5 165t-137.5 50q-80 0 -169 -16t-146 -43l-63 199q82 37 194.5 58t235.5 21q106 0 178 -25.5t113.5 -72.5t59 -112.5t17.5 -147.5q0 -90 -6 -181t-7 -179t5 -171t31 -157h-217l-43 141h-10 q-41 -63 -114 -109t-188 -46q-72 0 -129 21.5t-98 61t-63.5 94t-22.5 122.5zM191 1126l252 373h176l227 -373h-211l-80 136l-34 100l-35 -100l-92 -136h-203zM322 324q0 -57 34 -89t93 -32q80 0 127 35.5t69 76.5v134q-63 6 -121.5 1.5t-103.5 -18.5t-71.5 -40.5 t-26.5 -67.5z" />
-<glyph unicode="&#xe3;" horiz-adv-x="1015" d="M47 283q0 94 42 158.5t121 104.5t188.5 55t244.5 9q14 115 -16.5 165t-137.5 50q-80 0 -169 -16t-146 -43l-63 199q82 37 194.5 58t235.5 21q106 0 178 -25.5t113.5 -72.5t59 -112.5t17.5 -147.5q0 -90 -6 -181t-7 -179t5 -171t31 -157h-217l-43 141h-10 q-41 -63 -114 -109t-188 -46q-72 0 -129 21.5t-98 61t-63.5 94t-22.5 122.5zM176 1348q63 76 117.5 104.5t103.5 28.5q41 0 79 -14.5t75 -31t71.5 -30.5t71.5 -14q29 0 58.5 12t62.5 43l41 -143q-59 -66 -109.5 -90.5t-97.5 -24.5q-41 0 -80 13t-76 29.5t-73.5 30 t-73.5 13.5q-31 0 -63.5 -13.5t-67.5 -46.5zM322 324q0 -57 34 -89t93 -32q80 0 127 35.5t69 76.5v134q-63 6 -121.5 1.5t-103.5 -18.5t-71.5 -40.5t-26.5 -67.5z" />
-<glyph unicode="&#xe4;" horiz-adv-x="1015" d="M47 283q0 94 42 158.5t121 104.5t188.5 55t244.5 9q14 115 -16.5 165t-137.5 50q-80 0 -169 -16t-146 -43l-63 199q82 37 194.5 58t235.5 21q106 0 178 -25.5t113.5 -72.5t59 -112.5t17.5 -147.5q0 -90 -6 -181t-7 -179t5 -171t31 -157h-217l-43 141h-10 q-41 -63 -114 -109t-188 -46q-72 0 -129 21.5t-98 61t-63.5 94t-22.5 122.5zM154 1333q0 66 40 105t105 39q66 0 104 -39t38 -105q0 -61 -38 -100t-104 -39t-105.5 39t-39.5 100zM322 324q0 -57 34 -89t93 -32q80 0 127 35.5t69 76.5v134q-63 6 -121.5 1.5t-103.5 -18.5 t-71.5 -40.5t-26.5 -67.5zM602 1333q0 66 38 105t104 39t105.5 -39t39.5 -105q0 -61 -40 -100t-105 -39q-66 0 -104 39t-38 100z" />
-<glyph unicode="&#xe5;" horiz-adv-x="1015" d="M47 283q0 94 42 158.5t121 104.5t188.5 55t244.5 9q14 115 -16.5 165t-137.5 50q-80 0 -169 -16t-146 -43l-63 199q82 37 194.5 58t235.5 21q106 0 178 -25.5t113.5 -72.5t59 -112.5t17.5 -147.5q0 -90 -6 -181t-7 -179t5 -171t31 -157h-217l-43 141h-10 q-41 -63 -114 -109t-188 -46q-72 0 -129 21.5t-98 61t-63.5 94t-22.5 122.5zM295 1325q0 86 58.5 141.5t168.5 55.5q104 0 166 -50.5t62 -146.5q0 -80 -60.5 -136t-167.5 -56q-109 0 -168 52t-59 140zM322 324q0 -57 34 -89t93 -32q80 0 127 35.5t69 76.5v134 q-63 6 -121.5 1.5t-103.5 -18.5t-71.5 -40.5t-26.5 -67.5zM442 1325q0 -33 24.5 -50.5t55.5 -17.5q35 0 57.5 16.5t22.5 51.5t-23.5 52.5t-56.5 17.5q-31 0 -55.5 -16.5t-24.5 -53.5z" />
-<glyph unicode="&#xe6;" horiz-adv-x="1607" d="M47 283q0 94 42 158.5t120 104.5t187.5 55t244.5 9q14 115 -15.5 165t-136.5 50q-80 0 -162.5 -21.5t-146.5 -51.5l-69 192q78 41 192.5 70.5t237.5 29.5q106 0 169.5 -27.5t104.5 -82.5q51 57 133 88t178 31q78 0 152 -20.5t131 -67.5t92 -127t35 -199q0 -43 -5 -91 t-15 -104h-617q8 -129 68.5 -194.5t195.5 -65.5q84 0 150.5 26t101.5 52l88 -174q-61 -49 -166.5 -83t-224.5 -34q-131 0 -230.5 48.5t-154.5 136.5h-10q-55 -70 -136 -121t-221 -51q-72 0 -129 21.5t-98 61t-63.5 94t-22.5 122.5zM322 324q0 -57 34 -89t93 -32 q80 0 127 35.5t69 76.5v134q-63 6 -121.5 1.5t-103.5 -18.5t-71.5 -40.5t-26.5 -67.5zM907 610h383q6 111 -35 170.5t-133 59.5q-104 0 -154 -62.5t-61 -167.5z" />
-<glyph unicode="&#xe7;" horiz-adv-x="886" d="M68 512q0 260 116.5 400.5t339.5 140.5q113 0 181.5 -18.5t123.5 -47.5l-63 -217q-47 23 -93 35t-106 12q-111 0 -168 -72.5t-57 -232.5q0 -66 14.5 -121t43 -96t74.5 -64.5t108 -23.5q68 0 114.5 17.5t83.5 41.5l62 -203q-47 -35 -107.5 -55t-128.5 -31l-37 -65 q84 -8 132.5 -44t48.5 -110q0 -47 -24 -81.5t-64.5 -58.5t-96 -36t-119.5 -12q-63 0 -131 12l19 99q14 -2 26.5 -2.5t22.5 -0.5q78 0 100.5 18.5t22.5 43.5q0 57 -176 65l102 172q-100 12 -169.5 56.5t-113 113t-62.5 161.5t-19 204z" />
-<glyph unicode="&#xe8;" horiz-adv-x="1040" d="M68 512q0 270 129 405.5t362 135.5q78 0 151.5 -20.5t131 -67.5t92.5 -127t35 -199q0 -43 -5.5 -92t-15.5 -103h-614q6 -129 66.5 -194.5t195.5 -65.5q84 0 150.5 26t101.5 52l88 -174q-61 -49 -166.5 -83t-224.5 -34q-248 0 -362.5 144.5t-114.5 396.5zM273 1413v62h278 l123 -316h-147zM340 610h381q8 111 -34 170.5t-132 59.5q-104 0 -154.5 -62.5t-60.5 -167.5z" />
-<glyph unicode="&#xe9;" horiz-adv-x="1040" d="M68 512q0 270 129 405.5t362 135.5q78 0 151.5 -20.5t131 -67.5t92.5 -127t35 -199q0 -43 -5.5 -92t-15.5 -103h-614q6 -129 66.5 -194.5t195.5 -65.5q84 0 150.5 26t101.5 52l88 -174q-61 -49 -166.5 -83t-224.5 -34q-248 0 -362.5 144.5t-114.5 396.5zM340 610h381 q8 111 -34 170.5t-132 59.5q-104 0 -154.5 -62.5t-60.5 -167.5zM453 1159l108 316h271v-62l-228 -254h-151z" />
-<glyph unicode="&#xea;" horiz-adv-x="1040" d="M68 512q0 270 129 405.5t362 135.5q78 0 151.5 -20.5t131 -67.5t92.5 -127t35 -199q0 -43 -5.5 -92t-15.5 -103h-614q6 -129 66.5 -194.5t195.5 -65.5q84 0 150.5 26t101.5 52l88 -174q-61 -49 -166.5 -83t-224.5 -34q-248 0 -362.5 144.5t-114.5 396.5zM201 1126 l252 373h176l227 -373h-211l-80 136l-34 100l-35 -100l-92 -136h-203zM340 610h381q8 111 -34 170.5t-132 59.5q-104 0 -154.5 -62.5t-60.5 -167.5z" />
-<glyph unicode="&#xeb;" horiz-adv-x="1040" d="M68 512q0 270 129 405.5t362 135.5q78 0 151.5 -20.5t131 -67.5t92.5 -127t35 -199q0 -43 -5.5 -92t-15.5 -103h-614q6 -129 66.5 -194.5t195.5 -65.5q84 0 150.5 26t101.5 52l88 -174q-61 -49 -166.5 -83t-224.5 -34q-248 0 -362.5 144.5t-114.5 396.5zM168 1333 q0 66 40 105t105 39q66 0 104 -39t38 -105q0 -61 -38 -100t-104 -39t-105.5 39t-39.5 100zM340 610h381q8 111 -34 170.5t-132 59.5q-104 0 -154.5 -62.5t-60.5 -167.5zM616 1333q0 66 38 105t104 39t105.5 -39t39.5 -105q0 -61 -40 -100t-105 -39q-66 0 -104 39t-38 100z " />
-<glyph unicode="&#xec;" horiz-adv-x="550" d="M-4 1413v62h278l123 -316h-147zM143 0v1024h267v-1024h-267z" />
-<glyph unicode="&#xed;" horiz-adv-x="550" d="M143 0v1024h267v-1024h-267zM146 1159l108 316h271v-62l-228 -254h-151z" />
-<glyph unicode="&#xee;" horiz-adv-x="550" d="M-61 1126l252 373h176l227 -373h-211l-80 136l-34 100l-35 -100l-92 -136h-203zM143 0v1024h267v-1024h-267z" />
-<glyph unicode="&#xef;" horiz-adv-x="550" d="M-92 1333q0 66 40 105t105 39q66 0 104 -39t38 -105q0 -61 -38 -100t-104 -39t-105.5 39t-39.5 100zM143 0v1024h267v-1024h-267zM356 1333q0 66 38 105t104 39t105.5 -39t39.5 -105q0 -61 -40 -100t-105 -39q-66 0 -104 39t-38 100z" />
-<glyph unicode="&#xf0;" horiz-adv-x="1153" d="M76 502q0 111 34.5 205t97 164.5t150.5 110.5t193 40q78 0 144.5 -21.5t107.5 -62.5q-25 74 -70 135q-45 59 -102 105l-139 -95l-89 113l91 61q-70 31 -142 43l107 164q51 -14 116 -41q47 -18 97 -45l108 74l86 -113l-67 -47q25 -18 47 -41q66 -61 117 -150t82.5 -208 t31.5 -275q0 -166 -38 -287.5t-105.5 -201.5t-161.5 -119t-207 -39q-121 0 -213 39t-153.5 109.5t-92 168t-30.5 214.5zM334 498q0 -147 67.5 -223t180.5 -76q106 0 173.5 91t67.5 283q0 27 -3 70t-11 68q-33 47 -98.5 66.5t-126.5 19.5q-123 0 -186.5 -85t-63.5 -214z" />
-<glyph unicode="&#xf1;" horiz-adv-x="1116" d="M117 0v1024h211l30 -135h9q47 66 124.5 115t200.5 49q76 0 135.5 -20.5t100.5 -67.5t61.5 -128t20.5 -200v-637h-267v582q0 125 -35.5 180t-121.5 55q-76 0 -128 -44t-75 -109v-664h-266zM219 1348q63 76 117.5 104.5t103.5 28.5q41 0 79 -14.5t75 -31t71.5 -30.5 t71.5 -14q29 0 58.5 12t62.5 43l41 -143q-59 -66 -109.5 -90.5t-97.5 -24.5q-41 0 -80 13t-76 29.5t-73.5 30t-73.5 13.5q-31 0 -63.5 -13.5t-67.5 -46.5z" />
-<glyph unicode="&#xf2;" horiz-adv-x="1099" d="M68 512q0 260 127 400.5t356 140.5q123 0 213 -39t149.5 -109.5t89 -171t29.5 -221.5q0 -260 -126 -400.5t-355 -140.5q-123 0 -213 39t-150.5 109.5t-90 171t-29.5 221.5zM277 1413v62h278l123 -316h-147zM342 512q0 -68 12.5 -125t37 -100t64.5 -66.5t95 -23.5 q104 0 155.5 75.5t51.5 239.5q0 141 -47 228t-160 87q-98 0 -153.5 -73.5t-55.5 -241.5z" />
-<glyph unicode="&#xf3;" horiz-adv-x="1099" d="M68 512q0 260 127 400.5t356 140.5q123 0 213 -39t149.5 -109.5t89 -171t29.5 -221.5q0 -260 -126 -400.5t-355 -140.5q-123 0 -213 39t-150.5 109.5t-90 171t-29.5 221.5zM342 512q0 -68 12.5 -125t37 -100t64.5 -66.5t95 -23.5q104 0 155.5 75.5t51.5 239.5 q0 141 -47 228t-160 87q-98 0 -153.5 -73.5t-55.5 -241.5zM455 1159l108 316h271v-62l-228 -254h-151z" />
-<glyph unicode="&#xf4;" horiz-adv-x="1099" d="M68 512q0 260 127 400.5t356 140.5q123 0 213 -39t149.5 -109.5t89 -171t29.5 -221.5q0 -260 -126 -400.5t-355 -140.5q-123 0 -213 39t-150.5 109.5t-90 171t-29.5 221.5zM221 1126l252 373h176l227 -373h-211l-80 136l-34 100l-35 -100l-92 -136h-203zM342 512 q0 -68 12.5 -125t37 -100t64.5 -66.5t95 -23.5q104 0 155.5 75.5t51.5 239.5q0 141 -47 228t-160 87q-98 0 -153.5 -73.5t-55.5 -241.5z" />
-<glyph unicode="&#xf5;" horiz-adv-x="1099" d="M68 512q0 260 127 400.5t356 140.5q123 0 213 -39t149.5 -109.5t89 -171t29.5 -221.5q0 -260 -126 -400.5t-355 -140.5q-123 0 -213 39t-150.5 109.5t-90 171t-29.5 221.5zM213 1348q63 76 117.5 104.5t103.5 28.5q41 0 79 -14.5t75 -31t71.5 -30.5t71.5 -14 q29 0 58.5 12t62.5 43l41 -143q-59 -66 -109.5 -90.5t-97.5 -24.5q-41 0 -80 13t-76 29.5t-73.5 30t-73.5 13.5q-31 0 -63.5 -13.5t-67.5 -46.5zM342 512q0 -68 12.5 -125t37 -100t64.5 -66.5t95 -23.5q104 0 155.5 75.5t51.5 239.5q0 141 -47 228t-160 87 q-98 0 -153.5 -73.5t-55.5 -241.5z" />
-<glyph unicode="&#xf6;" horiz-adv-x="1099" d="M68 512q0 260 127 400.5t356 140.5q123 0 213 -39t149.5 -109.5t89 -171t29.5 -221.5q0 -260 -126 -400.5t-355 -140.5q-123 0 -213 39t-150.5 109.5t-90 171t-29.5 221.5zM184 1333q0 66 40 105t105 39q66 0 104 -39t38 -105q0 -61 -38 -100t-104 -39t-105.5 39 t-39.5 100zM342 512q0 -68 12.5 -125t37 -100t64.5 -66.5t95 -23.5q104 0 155.5 75.5t51.5 239.5q0 141 -47 228t-160 87q-98 0 -153.5 -73.5t-55.5 -241.5zM632 1333q0 66 38 105t104 39t105.5 -39t39.5 -105q0 -61 -40 -100t-105 -39q-66 0 -104 39t-38 100z" />
-<glyph unicode="&#xf7;" horiz-adv-x="1079" d="M88 578v229h905v-229h-905zM377 297q0 72 45 114t119 42q78 0 123 -42t45 -114t-45.5 -115t-122.5 -43q-74 0 -119 43t-45 115zM377 1090q0 72 45 113.5t119 41.5q78 0 123 -42t45 -113q0 -72 -45.5 -115t-122.5 -43q-74 0 -119 43t-45 115z" />
-<glyph unicode="&#xf8;" horiz-adv-x="1097" d="M68 512q0 260 125.5 400.5t355.5 140.5q66 0 121 -11.5t102 -33.5l49 69l164 -121l-55 -77q51 -70 75.5 -163t24.5 -204q0 -260 -126 -400.5t-355 -140.5q-70 0 -128.5 13.5t-107.5 35.5l-51 -69l-170 123l64 88q-45 68 -66.5 157t-21.5 193zM342 512q0 -72 12 -133 l301 418q-43 31 -106 30q-98 0 -152.5 -73.5t-54.5 -241.5zM434 233q45 -37 115 -36q104 0 155.5 75.5t51.5 239.5q0 76 -17 145z" />
-<glyph unicode="&#xf9;" horiz-adv-x="1101" d="M106 387v637h267v-582q0 -125 29.5 -180t115.5 -55q76 0 126 45t75 110v662h266v-713q0 -84 8 -164.5t25 -146.5h-201l-47 152h-8q-47 -78 -131 -129.5t-199 -51.5q-78 0 -139.5 20.5t-102 67.5t-62.5 127t-22 201zM250 1413v62h278l123 -316h-147z" />
-<glyph unicode="&#xfa;" horiz-adv-x="1101" d="M106 387v637h267v-582q0 -125 29.5 -180t115.5 -55q76 0 126 45t75 110v662h266v-713q0 -84 8 -164.5t25 -146.5h-201l-47 152h-8q-47 -78 -131 -129.5t-199 -51.5q-78 0 -139.5 20.5t-102 67.5t-62.5 127t-22 201zM426 1159l108 316h271v-62l-228 -254h-151z" />
-<glyph unicode="&#xfb;" horiz-adv-x="1101" d="M106 387v637h267v-582q0 -125 29.5 -180t115.5 -55q76 0 126 45t75 110v662h266v-713q0 -84 8 -164.5t25 -146.5h-201l-47 152h-8q-47 -78 -131 -129.5t-199 -51.5q-78 0 -139.5 20.5t-102 67.5t-62.5 127t-22 201zM223 1126l252 373h176l227 -373h-211l-80 136l-34 100 l-35 -100l-92 -136h-203z" />
-<glyph unicode="&#xfc;" horiz-adv-x="1101" d="M106 387v637h267v-582q0 -125 29.5 -180t115.5 -55q76 0 126 45t75 110v662h266v-713q0 -84 8 -164.5t25 -146.5h-201l-47 152h-8q-47 -78 -131 -129.5t-199 -51.5q-78 0 -139.5 20.5t-102 67.5t-62.5 127t-22 201zM180 1333q0 66 40 105t105 39q66 0 104 -39t38 -105 q0 -61 -38 -100t-104 -39t-105.5 39t-39.5 100zM628 1333q0 66 38 105t104 39t105.5 -39t39.5 -105q0 -61 -40 -100t-105 -39q-66 0 -104 39t-38 100z" />
-<glyph unicode="&#xfd;" horiz-adv-x="978" d="M-18 1024h319l188 -575l37 -160h13l26 162l156 573h274l-311 -924q-39 -115 -75 -210t-79 -164.5t-95 -107.5t-124 -38q-106 0 -170 35l49 213q31 -12 62 -12q47 0 91 40t67 144zM412 1159l108 316h271v-62l-228 -254h-151z" />
-<glyph unicode="&#xfe;" horiz-adv-x="1105" d="M117 -410v1844h266v-498h8q43 53 103.5 85t158.5 32q193 0 289 -122t96 -392q0 -131 -30.5 -236.5t-91 -179.5t-147.5 -113t-200 -39q-63 0 -104 9.5t-82 29.5v-420h-266zM383 246q29 -23 62.5 -36t89.5 -13q115 0 172 80.5t57 267.5q0 135 -45.5 208.5t-145.5 73.5 q-74 0 -119.5 -38.5t-70.5 -116.5v-426z" />
-<glyph unicode="&#xff;" horiz-adv-x="978" d="M-18 1024h319l188 -575l37 -160h13l26 162l156 573h274l-311 -924q-39 -115 -75 -210t-79 -164.5t-95 -107.5t-124 -38q-106 0 -170 35l49 213q31 -12 62 -12q47 0 91 40t67 144zM135 1333q0 66 40 105t105 39q66 0 104 -39t38 -105q0 -61 -38 -100t-104 -39t-105.5 39 t-39.5 100zM583 1333q0 66 38 105t104 39t105.5 -39t39.5 -105q0 -61 -40 -100t-105 -39q-66 0 -104 39t-38 100z" />
-<glyph unicode="&#x152;" horiz-adv-x="1873" d="M78 717q0 358 157.5 551.5t450.5 193.5q80 0 138.5 -9t103.5 -19h850v-250h-570v-334h518v-250h-518v-350h580v-250h-860q-39 -14 -107.5 -21.5t-134.5 -7.5q-156 0 -270.5 53.5t-189 151.5t-111.5 235.5t-37 305.5zM373 717q0 -109 18.5 -200t58 -156.5t101 -102.5 t149.5 -37q59 0 113.5 7.5t114.5 31.5v901q-43 23 -104.5 37t-137.5 14q-150 0 -231.5 -119.5t-81.5 -375.5z" />
-<glyph unicode="&#x153;" horiz-adv-x="1722" d="M68 512q0 260 127 400.5t356 140.5q135 0 217 -46t129 -102q47 59 130 103.5t214 44.5q78 0 151.5 -20.5t131 -67.5t92.5 -127t35 -199q0 -43 -5.5 -92t-15.5 -103h-616q6 -129 67.5 -194.5t196.5 -65.5q84 0 150.5 26t101.5 52l88 -174q-61 -49 -166.5 -83t-224.5 -34 q-227 0 -344 152q-51 -68 -132 -110t-200 -42q-123 0 -213 39t-150.5 109.5t-90 171t-29.5 221.5zM342 512q0 -68 12.5 -125t37 -100t64.5 -66.5t95 -23.5q104 0 155.5 75.5t51.5 239.5q0 141 -47 228t-160 87q-98 0 -153.5 -73.5t-55.5 -241.5zM1022 610h381q0 8 1 16.5 t1 16.5q0 94 -42 145.5t-126 51.5q-104 0 -154.5 -62.5t-60.5 -167.5z" />
-<glyph unicode="&#x178;" horiz-adv-x="1212" d="M-4 1434h334l262 -539l29 -152h10l31 156l253 535h302l-469 -899v-535h-281v532zM238 1634q0 53 37 86t119 33q80 0 116.5 -32.5t36.5 -86.5q0 -53 -37 -84.5t-116 -31.5q-82 0 -119 31.5t-37 84.5zM676 1634q0 53 37 86t117 33q82 0 118.5 -32.5t36.5 -86.5 q0 -53 -36.5 -84.5t-118.5 -31.5q-80 0 -117 31.5t-37 84.5z" />
-<glyph unicode="&#x2c6;" horiz-adv-x="901" d="M123 1126l252 373h176l227 -373h-211l-80 136l-34 100l-35 -100l-92 -136h-203z" />
-<glyph unicode="&#x2dc;" horiz-adv-x="925" d="M123 1348q63 76 117.5 104.5t103.5 28.5q41 0 79 -14.5t75 -31t71.5 -30.5t71.5 -14q29 0 58.5 12t62.5 43l41 -143q-59 -66 -109.5 -90.5t-97.5 -24.5q-41 0 -80 13t-76 29.5t-73.5 30t-73.5 13.5q-31 0 -63.5 -13.5t-67.5 -46.5z" />
-<glyph unicode="&#x2000;" horiz-adv-x="891" />
-<glyph unicode="&#x2001;" horiz-adv-x="1782" />
-<glyph unicode="&#x2002;" horiz-adv-x="891" />
-<glyph unicode="&#x2003;" horiz-adv-x="1782" />
-<glyph unicode="&#x2004;" horiz-adv-x="594" />
-<glyph unicode="&#x2005;" horiz-adv-x="445" />
-<glyph unicode="&#x2006;" horiz-adv-x="297" />
-<glyph unicode="&#x2007;" horiz-adv-x="297" />
-<glyph unicode="&#x2008;" horiz-adv-x="222" />
-<glyph unicode="&#x2009;" horiz-adv-x="356" />
-<glyph unicode="&#x200a;" horiz-adv-x="99" />
-<glyph unicode="&#x2010;" horiz-adv-x="737" d="M111 471v236h514v-236h-514z" />
-<glyph unicode="&#x2011;" horiz-adv-x="737" d="M111 471v236h514v-236h-514z" />
-<glyph unicode="&#x2012;" horiz-adv-x="737" d="M111 471v236h514v-236h-514z" />
-<glyph unicode="&#x2013;" horiz-adv-x="1351" d="M223 471v238h905v-238h-905z" />
-<glyph unicode="&#x2014;" horiz-adv-x="1679" d="M223 471v238h1233v-238h-1233z" />
-<glyph unicode="&#x2018;" horiz-adv-x="456" d="M78 1311q0 82 25.5 139t61.5 95t75 59.5t67 31.5l66 -110q-41 -16 -70 -52t-33 -77q41 0 75 -36t34 -95t-40 -95t-99 -36q-76 0 -119 48t-43 128z" />
-<glyph unicode="&#x2019;" horiz-adv-x="456" d="M78 1319q0 59 40 96t101 37q74 0 117 -49t43 -129q0 -82 -25.5 -139.5t-61.5 -95.5t-76 -59.5t-66 -31.5l-68 113q41 18 72.5 49t35.5 78q-41 -2 -76.5 31.5t-35.5 99.5z" />
-<glyph unicode="&#x201a;" horiz-adv-x="456" d="M78 127q0 59 40 96t101 37q74 0 117 -49t43 -129q0 -82 -25.5 -139.5t-61.5 -95.5t-76 -59.5t-66 -31.5l-68 113q41 18 72.5 49t35.5 78q-41 -2 -76.5 31.5t-35.5 99.5z" />
-<glyph unicode="&#x201c;" horiz-adv-x="811" d="M78 1311q0 82 25.5 139t61.5 95t75 59.5t67 31.5l66 -110q-41 -16 -70 -52t-33 -77q41 0 75 -36t34 -95t-40 -95t-99 -36q-76 0 -119 48t-43 128zM432 1311q0 82 25.5 139t61.5 95t75 59.5t67 31.5l66 -110q-41 -16 -70 -52t-33 -77q41 0 75 -36t34 -95t-40 -95t-99 -36 q-76 0 -119 48t-43 128z" />
-<glyph unicode="&#x201d;" horiz-adv-x="811" d="M78 1319q0 59 40 96t101 37q74 0 117 -49t43 -129q0 -82 -25.5 -139.5t-61.5 -95.5t-76 -59.5t-66 -31.5l-68 113q41 18 72.5 49t35.5 78q-41 -2 -76.5 31.5t-35.5 99.5zM432 1319q0 59 40 96t101 37q74 0 117 -49t43 -129q0 -82 -25.5 -139.5t-61.5 -95.5t-76 -59.5 t-66 -31.5l-68 113q41 18 72.5 49t35.5 78q-41 -2 -76.5 31.5t-35.5 99.5z" />
-<glyph unicode="&#x201e;" horiz-adv-x="811" d="M78 127q0 59 40 96t101 37q74 0 117 -49t43 -129q0 -82 -25.5 -139.5t-61.5 -95.5t-76 -59.5t-66 -31.5l-68 113q41 18 72.5 49t35.5 78q-41 -2 -76.5 31.5t-35.5 99.5zM432 127q0 59 40 96t101 37q74 0 117 -49t43 -129q0 -82 -25.5 -139.5t-61.5 -95.5t-76 -59.5 t-66 -31.5l-68 113q41 18 72.5 49t35.5 78q-41 -2 -76.5 31.5t-35.5 99.5z" />
-<glyph unicode="&#x2022;" horiz-adv-x="925" d="M150 637q0 70 24.5 127t67.5 98t99 64.5t120 23.5q66 0 123 -21.5t99 -61.5t66.5 -98t24.5 -132t-24.5 -131t-66.5 -97t-99.5 -61.5t-122.5 -21.5q-63 0 -119.5 21.5t-99.5 61.5t-67.5 97t-24.5 131z" />
-<glyph unicode="&#x2026;" horiz-adv-x="1656" d="M109 135q0 72 45 114t119 42q78 0 123 -42t45 -114t-45 -115t-123 -43q-74 0 -119 43t-45 115zM666 135q0 72 45 114t119 42q78 0 123 -42t45 -114t-45 -115t-123 -43q-74 0 -119 43t-45 115zM1223 135q0 72 45 114t119 42q78 0 123 -42t45 -114t-45 -115t-123 -43 q-74 0 -119 43t-45 115z" />
-<glyph unicode="&#x202f;" horiz-adv-x="356" />
-<glyph unicode="&#x2039;" horiz-adv-x="628" d="M59 530l328 471l154 -127l-170 -258l-99 -84l99 -73l186 -250l-158 -131z" />
-<glyph unicode="&#x203a;" horiz-adv-x="628" d="M70 872l159 129l340 -452l-327 -471l-156 125l172 260l98 84l-98 74z" />
-<glyph unicode="&#x205f;" horiz-adv-x="445" />
-<glyph unicode="&#x20ac;" d="M4 473l66 191h100v53v32.5t2 32.5h-168l66 191h127q31 135 89 227t136 150.5t171 85t193 26.5q106 0 189.5 -16t138.5 -39l-72 -211q-45 18 -104 27.5t-139 9.5q-123 0 -211 -61.5t-133 -198.5h530l-53 -191h-510q-2 -16 -2 -31.5v-33.5v-53h471l-53 -191h-385 q41 -135 130 -203.5t236 -68.5q86 0 148.5 18.5t111.5 46.5l56 -207q-31 -23 -74 -40t-90 -27t-96.5 -15.5t-94.5 -5.5q-225 0 -379.5 120t-207.5 382h-189z" />
-<glyph unicode="&#x2122;" horiz-adv-x="1941" d="M59 1208v226h750v-226h-242v-512h-266v512h-242zM879 696v738h266l186 -308l49 -129h2l52 133l172 304h264v-738h-232v295l35 211h-12l-74 -174l-139 -240h-160l-139 234l-80 180h-10l47 -209v-297h-227z" />
-<glyph unicode="&#xe000;" horiz-adv-x="1024" d="M0 0v1024h1024v-1024h-1024z" />
-</font>
-</defs></svg> \ No newline at end of file
diff --git a/app/fonts/svg/ptsansbolditalic.svg b/app/fonts/svg/ptsansbolditalic.svg
deleted file mode 100644
index f9975f56..00000000
--- a/app/fonts/svg/ptsansbolditalic.svg
+++ /dev/null
@@ -1,242 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="pt_sansbold_italic" horiz-adv-x="1116" >
-<font-face units-per-em="2048" ascent="1536" descent="-512" />
-<missing-glyph horiz-adv-x="518" />
-<glyph unicode="&#xfb01;" horiz-adv-x="1077" d="M-264 -369l69 187q35 -14 70 -18.5t88 -4.5q66 0 101.5 51.5t52.5 153.5l123 813h-136l43 211h134l12 57q41 195 155.5 284t294.5 89q135 0 234.5 -22.5t155.5 -59.5l-103 -190q-45 29 -115.5 46t-158.5 17q-57 0 -95 -15.5t-63 -45t-40 -70.5t-26 -90h519l-154 -1024 h-252l123 813h-276l-123 -813q-16 -104 -42 -184t-68 -133.5t-104.5 -81t-152.5 -27.5q-74 0 -144.5 11.5t-121.5 45.5z" />
-<glyph unicode="&#xfb02;" horiz-adv-x="1144" d="M-264 -369l69 187q35 -14 70 -18.5t88 -4.5q66 0 101.5 51.5t52.5 153.5l125 813h-136l44 211h133l12 57q41 193 149.5 286t323.5 93q45 0 102.5 -4t112.5 -9t103.5 -11t74.5 -13l-184 -1091q-4 -23 -7 -40.5t-3 -33.5q0 -72 55 -72q23 0 46.5 4.5t57.5 16.5l-8 -182 q-18 -8 -44.5 -17.5t-59.5 -16.5t-69 -11.5t-68 -4.5q-90 0 -137.5 35t-47.5 117q0 39 8 78l172 1028q-23 6 -65.5 11t-83.5 5q-90 0 -129 -62.5t-59 -162.5h147l-41 -211h-147l-125 -813q-18 -104 -44 -184t-67 -133.5t-103.5 -81t-152.5 -27.5q-74 0 -144.5 11.5 t-121.5 45.5z" />
-<glyph horiz-adv-x="2048" />
-<glyph horiz-adv-x="2048" />
-<glyph unicode="&#xd;" horiz-adv-x="518" />
-<glyph unicode=" " horiz-adv-x="518" />
-<glyph unicode="&#x09;" horiz-adv-x="518" />
-<glyph unicode="&#xa0;" horiz-adv-x="518" />
-<glyph unicode="!" horiz-adv-x="579" d="M152 135q0 72 45 114t118 42q76 0 121 -42t45 -114t-45 -115t-121 -43q-74 0 -118.5 43t-44.5 115zM283 426l18 334l143 674h263l-144 -674l-121 -334h-159z" />
-<glyph unicode="&#x22;" horiz-adv-x="724" d="M143 991l95 443h221l-162 -443h-154zM430 991l95 443h221l-162 -443h-154z" />
-<glyph unicode="#" d="M98 420l45 198h154l51 218h-147l45 198h149l72 295h219l-72 -295h183l71 295h219l-71 -295h147l-51 -198h-143l-51 -218h141l-49 -198h-140l-73 -316h-219l73 316h-182l-74 -316h-219l74 316h-152zM516 618h182l52 218h-183z" />
-<glyph unicode="$" d="M121 88l96 199q29 -20 87 -47t136 -41l97 452q-47 31 -92.5 67t-81 82t-57 104.5t-21.5 135.5q0 98 33.5 172t92 125.5t134.5 80t162 38.5l41 182h202l-39 -184q78 -10 137.5 -29.5t102.5 -42.5l-102 -208q-29 16 -78 32.5t-109 26.5l-88 -416q47 -33 94 -69.5t84 -85 t59.5 -108.5t22.5 -138q0 -98 -32.5 -175t-91 -132.5t-139.5 -88t-177 -43.5l-37 -182h-203l39 185q-106 14 -171.5 46.5t-100.5 61.5zM551 1073q0 -59 33.5 -101t87.5 -83l73 352q-98 -4 -146 -51t-48 -117zM557 193q109 8 160 63t51 129q0 66 -37 111t-92 86z" />
-<glyph unicode="%" horiz-adv-x="1646" d="M113 1022q0 111 38 192.5t99.5 136t136 81t148.5 26.5q135 0 205.5 -62.5t70.5 -183.5q0 -117 -34.5 -201.5t-94 -140t-136.5 -82t-159 -26.5q-127 0 -200.5 70.5t-73.5 189.5zM164 113l1179 1349l150 -135l-1180 -1356zM338 1034q-2 -45 20.5 -72.5t65.5 -27.5 q68 0 115 70.5t47 181.5q0 100 -88 100q-35 0 -63.5 -20.5t-51 -54t-35 -80t-10.5 -97.5zM860 262q0 111 38 192.5t99.5 136t136 81t148.5 26.5q135 0 205.5 -62.5t70.5 -183.5q0 -117 -34.5 -201.5t-94 -140t-136.5 -82t-159 -26.5q-127 0 -200.5 70.5t-73.5 189.5z M1085 274q-2 -45 20.5 -72.5t65.5 -27.5q68 0 115 70.5t47 181.5q0 100 -88 100q-35 0 -63.5 -20.5t-51 -54t-35 -80t-10.5 -97.5z" />
-<glyph unicode="&#x26;" horiz-adv-x="1603" d="M150 332q0 94 37.5 178t100 153.5t141.5 126t163 97.5q-35 68 -44 123t-9 110q0 68 22.5 129.5t71.5 108.5t125 75.5t180 28.5q82 0 134 -20.5t83 -54t42 -75.5t11 -83q0 -104 -83 -199.5t-236 -179.5q45 -111 93 -203t114 -182q53 51 106 128t98 157l162 -103 q-20 -37 -51 -81t-64.5 -89t-67.5 -85t-60 -68q49 -59 107 -111.5t116 -77.5l-178 -196q-31 12 -64 35.5t-64.5 51t-60 58.5t-49.5 59q-88 -68 -203.5 -120t-269.5 -52q-94 0 -169 28t-127 76t-79.5 113.5t-27.5 143.5zM416 381q0 -86 55 -135t164 -49q78 0 152.5 33.5 t119.5 74.5q-76 109 -135 216.5t-98 203.5q-121 -82 -189.5 -165t-68.5 -179zM786 1133q0 -45 7.5 -77t29.5 -81q86 51 133.5 100t47.5 105q0 39 -18.5 61.5t-70.5 22.5q-63 0 -96 -39t-33 -92z" />
-<glyph unicode="'" horiz-adv-x="446" d="M186 991l95 443h221l-162 -443h-154z" />
-<glyph unicode="(" horiz-adv-x="634" d="M127 178q0 197 47 382t126 350t183.5 304.5t218.5 243.5l132 -110q-96 -106 -179.5 -238.5t-144.5 -282t-97 -310.5t-36 -324q0 -129 18.5 -255t83.5 -274l-157 -110q-59 78 -96.5 158.5t-60 160.5t-30.5 156.5t-8 148.5z" />
-<glyph unicode=")" horiz-adv-x="634" d="M-158 -338q92 102 176 236.5t146.5 286t99.5 311t37 313.5q0 170 -24.5 300t-79.5 232l178 115q92 -123 134 -277.5t42 -340.5q0 -197 -46 -383.5t-125 -352t-182.5 -307t-217.5 -246.5z" />
-<glyph unicode="*" horiz-adv-x="729" d="M160 1112v152h121l120 -35l-102 90l-57 102l131 76l57 -94l31 -121l31 113l57 100l129 -72l-62 -106l-96 -88l131 33h117v-150h-111l-125 33l103 -96l51 -86l-131 -76l-55 94l-41 131l-27 -119l-59 -100l-133 76l61 100l92 76l-112 -33h-121z" />
-<glyph unicode="+" horiz-adv-x="1034" d="M119 578v229h332v346h239v-346h334v-229h-334v-351h-239v351h-332z" />
-<glyph unicode="," horiz-adv-x="442" d="M-53 -193q59 23 108.5 74.5t67.5 108.5q-35 2 -65.5 34.5t-30.5 86.5q0 82 52 127t124 45t107.5 -47.5t33.5 -108.5q-2 -100 -41 -175t-93 -127t-112.5 -84t-97.5 -44z" />
-<glyph unicode="-" horiz-adv-x="702" d="M115 483l51 213h489l-51 -213h-489z" />
-<glyph unicode="." horiz-adv-x="514" d="M68 135q0 72 45 114t118 42q76 0 121 -42t45 -114t-45 -115t-121 -43q-74 0 -118.5 43t-44.5 115z" />
-<glyph unicode="/" horiz-adv-x="794" d="M-158 -193l1043 1651l176 -94l-1045 -1655z" />
-<glyph unicode="0" d="M113 469q0 213 48 394t134 314.5t203.5 209t257.5 75.5q80 0 150.5 -24.5t123.5 -82t84 -153.5t31 -237q0 -190 -44 -369.5t-127 -318t-203 -222.5t-269 -84q-100 0 -174 39t-121 105.5t-70.5 158t-23.5 195.5zM367 471q0 -84 14 -137t37.5 -84t56.5 -42t70 -11 q72 0 134 67.5t109.5 176t75 244.5t27.5 276q0 63 -7 114t-26.5 87t-52.5 55.5t-84 19.5q-68 0 -131.5 -63.5t-113.5 -169t-79.5 -244.5t-29.5 -289z" />
-<glyph unicode="1" d="M119 0l47 225h270l174 809l58 140l-119 -121l-199 -127l-80 157l527 375h143l-262 -1233h264l-47 -225h-776z" />
-<glyph unicode="2" d="M74 0l28 137q57 53 135 126t162 156t165 172t144.5 175t103.5 166t40 145q0 68 -35 111t-133 43q-63 0 -130 -30t-132 -77l-62 193q98 72 197.5 108.5t230.5 36.5q152 0 235 -87t83 -228q0 -115 -53.5 -232.5t-135 -230.5t-180 -213t-186.5 -180l-121 -84v-10l143 28h367 l-47 -225h-819z" />
-<glyph unicode="3" d="M84 35l117 227q41 -27 100 -43t137 -16q80 0 138.5 22.5t97.5 59.5t57.5 85t18.5 97q0 98 -52.5 143t-189.5 45h-143l30 142l301 338l131 92l-155 -19h-326l49 226h744l-31 -146l-350 -389l-99 -55v-10l82 12q41 -4 87 -24.5t85 -60.5t65 -102.5t26 -152.5 q0 -117 -38 -215t-114 -169t-188.5 -111t-260.5 -40q-88 0 -178 16.5t-141 47.5z" />
-<glyph unicode="4" d="M57 399l31 152l805 893h209l-176 -834h215l-45 -211h-215l-84 -399h-236l84 399h-588zM336 596l127 14h227l68 316l53 172h-6l-98 -148l-258 -276z" />
-<glyph unicode="5" d="M74 33l114 217q41 -20 93.5 -33.5t130.5 -13.5q86 0 147.5 24.5t101 65.5t59 94t19.5 113q0 102 -62.5 145t-207.5 43l-158 -6l158 752h670l-52 -250h-450l-59 -283l75 8q82 0 144.5 -26.5t105.5 -73.5t65.5 -112.5t22.5 -141.5q0 -283 -159.5 -433.5t-458.5 -150.5 q-41 0 -84 5.5t-83 13.5t-74 19t-58 24z" />
-<glyph unicode="6" d="M127 432q0 209 78 390.5t206 317.5t291.5 220t337.5 102l15 -211q-102 -16 -200.5 -58t-183.5 -106.5t-150.5 -146.5t-100.5 -176q55 59 136 90t167 31q158 0 246 -99.5t88 -263.5q0 -111 -33 -211t-99.5 -175t-167 -120t-233.5 -45q-66 0 -136.5 23.5t-128.5 78 t-95 142.5t-37 217zM367 449q0 -111 46 -181.5t142 -70.5q117 0 184.5 77.5t67.5 200.5q0 82 -42 133t-140 51q-78 0 -145.5 -34.5t-102.5 -87.5q-4 -20 -7 -46t-3 -42z" />
-<glyph unicode="7" d="M127 0l674 1104l104 100l-119 -20h-481l51 250h881l-16 -78l-830 -1356h-264z" />
-<glyph unicode="8" d="M111 313q0 78 26.5 144.5t71.5 121t104.5 95.5t124.5 65q-29 27 -54.5 54.5t-45 62.5t-30.5 81t-11 107q0 100 38 179.5t103.5 131.5t151.5 79.5t182 27.5q172 0 262 -89t90 -228q0 -72 -23.5 -130.5t-63.5 -107.5t-92 -89t-109 -70q92 -72 132 -153t40 -175 q0 -104 -38 -187t-105.5 -141.5t-162 -89.5t-206.5 -31q-80 0 -151 22.5t-123 65.5t-81.5 106.5t-29.5 147.5zM350 362q0 -72 43 -118.5t142 -46.5q45 0 87 12t74.5 35.5t51 59.5t18.5 85q0 47 -15.5 84t-41 66.5t-60.5 55.5t-71 48q-104 -53 -166 -123.5t-62 -157.5z M539 1047q0 -72 45 -122.5t114 -90.5q37 27 70 57.5t58.5 63t41 67.5t15.5 68q0 74 -37 110.5t-105 36.5q-86 0 -144 -49t-58 -141z" />
-<glyph unicode="9" d="M203 934q0 123 41 221t113.5 166t170 104.5t211.5 36.5q86 0 160 -26.5t128 -83t86 -141.5t32 -201q0 -164 -42 -302.5t-112.5 -251t-164 -200.5t-196 -149.5t-208 -95.5t-199.5 -40l-12 209q113 20 212 64.5t179 105t138.5 135t90.5 154.5q-59 -47 -128.5 -70.5 t-167.5 -23.5q-57 0 -117 21.5t-107 67.5t-77.5 121t-30.5 179zM453 973q0 -59 15 -98t42 -64t58.5 -35t66.5 -10q78 0 145.5 24.5t106.5 65.5q6 23 11 64t5 59q0 117 -46 189.5t-150 72.5q-49 0 -94.5 -15.5t-81 -48t-57 -83.5t-21.5 -121z" />
-<glyph unicode=":" horiz-adv-x="643" d="M184 160q0 72 45 113.5t119 41.5q76 0 121 -42t45 -113q0 -72 -45 -115t-121 -43q-74 0 -119 43t-45 115zM338 877q0 72 45 113.5t119 41.5q76 0 121 -42t45 -113q0 -72 -45 -115t-121 -43q-74 0 -119 43t-45 115z" />
-<glyph unicode=";" horiz-adv-x="628" d="M106 -193q59 23 109 74.5t68 108.5q-35 2 -66 34.5t-31 86.5q0 82 52.5 127t123.5 45q72 0 108 -47.5t34 -108.5q-2 -100 -41 -175t-93.5 -127t-112.5 -84t-97 -44zM324 877q0 72 45 113.5t118 41.5q76 0 121 -42t45 -113q0 -72 -45 -115t-121 -43q-74 0 -118.5 43 t-44.5 115z" />
-<glyph unicode="&#x3c;" horiz-adv-x="1034" d="M104 584v143l791 473l117 -184l-459 -285l-186 -72l184 -63l471 -281l-117 -184z" />
-<glyph unicode="=" horiz-adv-x="1034" d="M119 383v229h905v-229h-905zM119 775v229h905v-229h-905z" />
-<glyph unicode="&#x3e;" horiz-adv-x="1034" d="M123 1018l115 182l802 -452v-144l-792 -473l-115 186l457 283l186 74l-184 61z" />
-<glyph unicode="?" horiz-adv-x="880" d="M168 135q0 72 45 114t119 42q76 0 121 -42t45 -114t-45 -115t-121 -43q-74 0 -119 43t-45 115zM233 1339q84 51 182.5 87t239.5 36q172 0 252 -72.5t80 -195.5q0 -109 -32.5 -183.5t-84 -131t-113 -100.5t-117.5 -93t-101 -110.5t-62 -149.5h-217q12 111 50 189.5 t88.5 137t106.5 102.5t102 85t77 84t31 100q0 55 -32 86t-114 31q-63 0 -139 -27.5t-133 -66.5z" />
-<glyph unicode="@" horiz-adv-x="2168" d="M205 483q0 223 80 403.5t215 307.5t313 195.5t377 68.5q188 0 350 -54t280.5 -155.5t186.5 -248t68 -332.5q0 -131 -47.5 -246t-127 -199t-187 -133t-230.5 -49q-51 0 -95.5 11t-75 38t-45 70t-7.5 106h-9q-31 -43 -65.5 -84t-77.5 -72.5t-94 -50t-113 -18.5 q-51 0 -95 21.5t-77 60.5t-52.5 94t-19.5 123q0 127 41 247t111 212t163 148.5t197 56.5q72 0 121 -21.5t92 -56.5l64 65h143l-100 -555q-4 -25 -6 -46t-2 -38q0 -98 75 -98q53 0 105.5 24.5t93.5 76t65.5 129t24.5 184.5q0 154 -51 263t-140 180t-210 103.5t-258 32.5 q-160 0 -298 -57t-239.5 -158.5t-159 -240t-57.5 -299.5q0 -160 48 -287t141.5 -217t229.5 -138.5t312 -48.5q59 0 135 15.5t138 44.5l63 -197q-86 -41 -172 -57.5t-199 -16.5q-201 0 -369.5 57.5t-291.5 170t-192.5 279.5t-69.5 386zM905 408q0 -68 29 -112t96 -44 q29 0 61.5 17.5t63.5 47t58.5 66.5t50.5 78l53 282q-29 23 -57.5 36.5t-69.5 13.5q-61 0 -113.5 -36t-90.5 -91.5t-59.5 -124t-21.5 -133.5z" />
-<glyph unicode="A" horiz-adv-x="1191" d="M-78 0l797 1444h196l187 -1444h-268l-41 317h-418l-170 -317h-283zM492 543h290l-32 319l2 225h-11l-82 -227z" />
-<glyph unicode="B" horiz-adv-x="1163" d="M41 10l299 1413q39 6 88 12.5t104.5 10.5t114 6t113.5 2q94 0 175 -19.5t139.5 -60.5t92 -105.5t33.5 -154.5q0 -68 -22.5 -130t-64.5 -111.5t-100.5 -82t-131.5 -42.5v-11q39 -8 77.5 -29.5t69.5 -55.5t49.5 -80t18.5 -103q0 -131 -51.5 -224t-137.5 -151.5t-200.5 -86 t-241.5 -27.5h-85t-111.5 3t-119 9t-108.5 18zM342 223q8 -4 29.5 -6t47 -3t52.5 -2t45 -1q51 0 105.5 12.5t98.5 41t72.5 73.5t28.5 111q0 51 -22.5 83.5t-59.5 52t-85 26.5t-99 7h-131zM471 831h88q29 0 68 1.5t65 5.5q37 6 79 20t76 41t56.5 68t22.5 102q0 88 -58.5 121 t-148.5 33q-53 0 -98.5 -2t-69.5 -7z" />
-<glyph unicode="C" horiz-adv-x="1099" d="M119 557q0 242 67.5 413t178 280.5t253 160.5t291.5 51q117 0 200 -17.5t130 -39.5l-104 -238q-41 23 -98.5 34t-145.5 11q-104 0 -194.5 -43t-156 -122.5t-103.5 -194.5t-38 -260q0 -174 87 -272.5t233 -98.5q92 0 152.5 19.5t113.5 48.5l4 -230q-137 -88 -336 -88 q-135 0 -235.5 45t-167 125t-99 186.5t-32.5 229.5z" />
-<glyph unicode="D" horiz-adv-x="1269" d="M41 -2l303 1436q43 6 94 10t95.5 6t76.5 2q18 0 52 1t75 1q125 0 227.5 -31.5t175 -97t112.5 -168t40 -244.5q0 -90 -15 -193.5t-52 -207.5t-101.5 -200.5t-162 -170t-233.5 -119t-316 -45.5q-31 0 -62 1.5t-43 1.5q-41 2 -91 5l-100 6t-75 7zM356 233q8 -2 25.5 -3 t38 -2t39 -1h28.5q143 0 243.5 64.5t163 162t90.5 211t28 212.5q0 164 -69 245.5t-228 81.5q-41 0 -86 -2t-70 -6z" />
-<glyph unicode="E" horiz-adv-x="1030" d="M41 0l303 1434h266h541l-53 -250h-541l-72 -334h494l-55 -250h-490l-76 -350h551l-51 -250h-551h-266z" />
-<glyph unicode="F" horiz-adv-x="1001" d="M41 0l303 1434h266h541l-53 -250h-541l-76 -355h498l-51 -249h-498l-123 -580h-266z" />
-<glyph unicode="G" horiz-adv-x="1198" d="M119 553q0 236 64.5 408t175 283.5t258 164.5t311.5 53q117 0 208 -19.5t138 -39.5l-107 -236q-43 20 -107.5 32.5t-156.5 12.5q-109 0 -201 -41t-159.5 -120.5t-105.5 -197.5t-38 -269q0 -170 80 -266.5t215 -96.5q100 0 176 51l58 273l-209 33l37 170h430l-135 -639 q-92 -72 -193.5 -105t-218.5 -33q-113 0 -208 39t-164.5 113t-108.5 182.5t-39 247.5z" />
-<glyph unicode="H" horiz-adv-x="1277" d="M41 0l303 1434h266l-123 -584h498l123 584h266l-303 -1434h-266l127 600h-498l-127 -600h-266z" />
-<glyph unicode="I" horiz-adv-x="569" d="M72 0l303 1434h264l-303 -1434h-264z" />
-<glyph unicode="J" horiz-adv-x="663" d="M-104 23l102 229q47 -27 111 -27q43 0 71.5 17.5t48 48.5t31.5 73t25 93l204 977h267l-224 -1049q-18 -86 -46.5 -160.5t-76 -130t-118 -87.5t-170.5 -32q-57 0 -120.5 12.5t-104.5 35.5z" />
-<glyph unicode="K" horiz-adv-x="1214" d="M41 0l303 1434h266l-135 -635l64 22l485 613h319l-516 -609l-122 -71l90 -80l311 -674h-297l-277 612h-96l-129 -612h-266z" />
-<glyph unicode="L" horiz-adv-x="1013" d="M41 0l303 1434h266l-252 -1184h596l-51 -250h-596h-266z" />
-<glyph unicode="M" horiz-adv-x="1570" d="M41 0l303 1434h236l215 -656l26 -164h10l95 168l483 652h256l-303 -1434h-264l157 743l91 283h-13l-135 -231l-403 -531h-84l-193 537l-37 225h-10l-20 -281l-158 -745h-252z" />
-<glyph unicode="N" horiz-adv-x="1292" d="M41 0l307 1444h184l353 -766l63 -223h13l14 223l162 756h252l-308 -1444h-184l-350 760l-68 229h-10l-18 -229l-158 -750h-252z" />
-<glyph unicode="O" horiz-adv-x="1318" d="M119 537q0 190 52 359t148.5 295t232.5 198.5t304 72.5q111 0 200 -32.5t151.5 -101t97 -173t34.5 -248.5q0 -193 -52 -362.5t-147.5 -297.5t-227.5 -202t-291 -74q-242 0 -371 142.5t-131 423.5zM399 545q0 -147 56.5 -235.5t185.5 -88.5q94 0 171 56.5t132 151.5 t85 218t30 256q0 162 -63.5 235.5t-174.5 73.5q-92 0 -169 -53t-133 -144t-88 -213t-32 -257z" />
-<glyph unicode="P" horiz-adv-x="1126" d="M41 0l301 1419q86 16 183.5 25.5t195.5 9.5q104 0 193.5 -23.5t156 -72.5t103 -126t36.5 -183q0 -160 -55 -267.5t-146 -174t-208 -94.5t-238 -28h-31.5t-45 1t-45 3.5t-31.5 4.5l-103 -494h-266zM463 735q8 -2 22.5 -4t32 -3t32.5 -1h23q70 0 134.5 15.5t113.5 49t79 89 t30 135.5q0 59 -19.5 98t-52.5 60.5t-77 29.5t-93 8q-37 0 -70.5 -3t-56.5 -7z" />
-<glyph unicode="Q" horiz-adv-x="1318" d="M119 537q0 190 52 359t148.5 295t232.5 198.5t304 72.5q111 0 200 -32.5t151.5 -101t97 -173t34.5 -248.5q0 -193 -52 -362.5t-147.5 -297.5t-227.5 -202t-291 -74q-242 0 -371 142.5t-131 423.5zM328 -317l51 241q57 12 115 13q82 0 158.5 -20.5t155.5 -44.5t163 -44.5 t180 -20.5q43 0 89 5.5t95 17.5l-51 -244q-94 -26 -187 -26h-7q-98 0 -188.5 21.5t-173.5 46t-158.5 46t-149.5 21.5q-47 0 -92 -12zM399 545q0 -147 56.5 -235.5t185.5 -88.5q94 0 171 56.5t132 151.5t85 218t30 256q0 162 -63.5 235.5t-174.5 73.5q-92 0 -169 -53 t-133 -144t-88 -213t-32 -257z" />
-<glyph unicode="R" horiz-adv-x="1196" d="M41 0l301 1419q98 18 198.5 26.5t180.5 8.5q94 0 178 -22.5t145.5 -68.5t97.5 -119t36 -171q0 -113 -34 -195.5t-89.5 -139t-126 -88.5t-144.5 -42l80 -63l199 -545h-295l-197 561l-141 27l-123 -588h-266zM471 778h109q59 0 116.5 11.5t101.5 41t71.5 78.5t27.5 125 q0 70 -47 120t-152 50q-41 0 -76.5 -3t-60.5 -7z" />
-<glyph unicode="S" horiz-adv-x="1044" d="M-4 57l137 238q20 -12 53 -26.5t75 -27t91 -20.5t99 -8q57 0 108 9t89 30.5t59.5 54.5t21.5 82q0 55 -37 94t-93 74t-120.5 73t-121 89t-93.5 123.5t-37 177.5q0 119 42 203t114 137t168 77.5t207 24.5q59 0 118.5 -6t112.5 -17.5t98.5 -26.5t75.5 -34l-135 -233 q-39 25 -114.5 50.5t-168.5 25.5q-47 0 -92 -9.5t-79.5 -30t-55 -53t-20.5 -77.5q0 -59 36.5 -100.5t93 -77t121 -72.5t121 -86t93 -118t36.5 -169q0 -121 -42 -208t-118.5 -142t-184 -81t-238.5 -26q-72 0 -136.5 8.5t-120 20.5t-97.5 27.5t-66 29.5z" />
-<glyph unicode="T" horiz-adv-x="1120" d="M197 1184l53 250h1059l-52 -250h-397l-252 -1184h-264l250 1184h-397z" />
-<glyph unicode="U" horiz-adv-x="1232" d="M129 356q0 41 5 84t16 90l192 904h264l-188 -902q-16 -78 -17 -126q0 -98 51.5 -139.5t149.5 -41.5q123 0 190.5 72t102.5 231l192 906h250l-194 -926q-31 -147 -80 -248.5t-119 -165t-164 -91.5t-217 -28q-119 0 -200.5 28t-134 79t-76 120.5t-23.5 153.5z" />
-<glyph unicode="V" horiz-adv-x="1185" d="M207 1434h291l92 -840l-15 -244h9l90 244l442 840h299l-809 -1444h-192z" />
-<glyph unicode="W" horiz-adv-x="1691" d="M223 1434h281l6 -799l-29 -254h11l79 258l406 795h180l60 -799l-27 -254h10l82 258l336 795h287l-682 -1444h-187l-75 796l16 220h-12l-78 -222l-408 -794h-186z" />
-<glyph unicode="X" horiz-adv-x="1245" d="M-49 0l573 731l-231 703h289l123 -414l20 -146l76 146l305 414h319l-538 -693l256 -741h-285l-147 442l-25 152l-82 -152l-330 -442h-323z" />
-<glyph unicode="Y" horiz-adv-x="1165" d="M217 1434h295l133 -539l-4 -152h8l64 156l358 535h305l-637 -899l-112 -535h-265l111 532z" />
-<glyph unicode="Z" horiz-adv-x="1060" d="M-23 0l54 250l737 852l119 82h-658l52 250h944l-51 -250l-742 -858l-115 -76h658l-53 -250h-945z" />
-<glyph unicode="[" horiz-adv-x="643" d="M4 -471l402 1905h456l-45 -224h-215l-309 -1456h215l-49 -225h-455z" />
-<glyph unicode="\" horiz-adv-x="868" d="M74 1368l211 88l682 -1651l-207 -92z" />
-<glyph unicode="]" horiz-adv-x="641" d="M-160 -471l49 225h215l308 1456h-215l45 224h458l-403 -1905h-457z" />
-<glyph unicode="^" horiz-adv-x="1034" d="M143 846l402 598h143l379 -598h-268l-146 250l-45 143l-51 -145l-158 -248h-256z" />
-<glyph unicode="_" horiz-adv-x="909" d="M-94 -240h909v-219h-909v219z" />
-<glyph unicode="`" horiz-adv-x="487" d="M553 1413l14 62h264l50 -316h-142z" />
-<glyph unicode="a" horiz-adv-x="1030" d="M68 295q0 150 37.5 287t117.5 241.5t202 167t290 62.5q72 0 156.5 -13.5t164.5 -35.5l-127 -594q-16 -78 -23 -158t-7 -152q0 -29 1 -54.5t3 -47.5h-187l-28 176h-9q-23 -37 -58.5 -72.5t-78.5 -65.5t-91 -47.5t-99 -17.5q-135 0 -199.5 88t-64.5 236zM328 344 q0 -66 21.5 -114t78.5 -48q37 0 69.5 15.5t60.5 40t49.5 53t37.5 53.5l103 477q-23 10 -52.5 15.5t-58.5 5.5q-74 0 -131 -44t-97 -115t-60.5 -160t-20.5 -179z" />
-<glyph unicode="b" horiz-adv-x="1048" d="M45 57l291 1377h252l-127 -590h8q27 37 61.5 72.5t76.5 65.5t91.5 48.5t108.5 18.5q111 0 166 -78t55 -207q0 -195 -54 -342.5t-142.5 -246.5t-199 -149.5t-222.5 -50.5q-125 0 -220.5 24t-144.5 58zM328 215q23 -16 55.5 -22.5t71.5 -6.5q51 0 106 34t101.5 99.5 t76 160.5t29.5 216q0 141 -82 142q-41 0 -81 -22.5t-76.5 -56.5t-66.5 -73t-48 -74z" />
-<glyph unicode="c" horiz-adv-x="843" d="M70 324q0 172 49 307t130 228t184.5 143.5t211.5 50.5q96 0 152.5 -18.5t101.5 -41.5l-94 -200q-39 23 -81 30.5t-91 7.5q-55 0 -107.5 -35.5t-94.5 -94t-66.5 -136.5t-24.5 -159q0 -104 45 -158.5t119 -54.5q61 0 113.5 19t93.5 44l47 -172q-66 -49 -153 -81t-173 -32 q-98 0 -166.5 29t-111.5 78t-63.5 112.5t-20.5 133.5z" />
-<glyph unicode="d" horiz-adv-x="1038" d="M76 309q0 143 39 276.5t109.5 237t172 165t224.5 61.5q59 0 98 -7.5t74 -23.5l88 416h252l-228 -1074q-18 -86 -26.5 -159.5t-8.5 -139.5v-31.5t2 -31.5h-172l-28 176h-8q-23 -37 -59 -72.5t-79 -65.5t-91 -47.5t-95 -17.5q-127 0 -195.5 90.5t-68.5 247.5zM336 328 q0 -59 26.5 -102.5t75.5 -43.5q31 0 62.5 15.5t59.5 40t51.5 53t37.5 53.5l99 463q-25 16 -57 23.5t-85 7.5q-61 0 -111.5 -42t-85 -113t-54 -163t-19.5 -192z" />
-<glyph unicode="e" horiz-adv-x="954" d="M70 340q0 164 51 296t134 224t187.5 142.5t208.5 50.5q84 0 144.5 -21.5t99.5 -59.5t57.5 -87t18.5 -105q0 -84 -43 -147.5t-120 -105.5t-185.5 -63.5t-237.5 -21.5q-16 0 -30.5 1t-30.5 1q-4 -25 -6.5 -44t-2.5 -35q0 -92 48.5 -137.5t136.5 -45.5q90 0 161.5 27 t108.5 53l53 -164q-63 -53 -163.5 -90t-233.5 -37q-166 0 -261 97.5t-95 271.5zM360 604q57 0 122 4t120 19.5t92 45t37 81.5q0 31 -22.5 62.5t-94.5 31.5q-90 0 -156.5 -70t-97.5 -174z" />
-<glyph unicode="f" horiz-adv-x="602" d="M-264 -369l69 187q35 -14 70 -18.5t88 -4.5q66 0 101.5 52.5t54.5 168.5l129 797h-144l46 211h131l26 137q14 76 37 132.5t60.5 94t92 56t134.5 18.5q33 0 75 -3t82.5 -10t79.5 -17.5t70 -24.5l-59 -186q-47 18 -96.5 24t-96.5 6q-66 0 -95.5 -38.5t-41.5 -120.5l-12 -68 h204l-41 -211h-196l-152 -883q-12 -76 -34.5 -140t-62.5 -112.5t-101.5 -76t-151.5 -27.5q-74 0 -144.5 11.5t-121.5 45.5z" />
-<glyph unicode="g" horiz-adv-x="1034" d="M-20 -342l94 186q18 -8 42.5 -19t56.5 -22.5t74 -18.5t97 -7q102 0 162.5 63.5t87.5 173.5l39 160h-8q-47 -74 -128 -132t-184 -58q-111 0 -179 83t-68 222q0 158 45 296t125.5 241.5t191.5 163t244 59.5q125 0 218 -21.5t150 -48.5l-206 -979q-27 -121 -72 -204 t-107.5 -134t-143.5 -73.5t-179 -22.5q-72 0 -128.5 10t-99.5 24.5t-74.5 30t-49.5 27.5zM326 338q0 -66 27.5 -104.5t72.5 -38.5q35 0 72 21.5t70.5 54t60 72.5t43.5 75l88 399q-23 12 -57.5 16.5t-69.5 4.5q-66 0 -122 -39t-97 -106.5t-64.5 -159t-23.5 -195.5z" />
-<glyph unicode="h" horiz-adv-x="1081" d="M37 0l303 1434h252l-129 -590h8q27 33 64.5 69.5t84 67.5t100.5 51.5t118 20.5q98 0 152 -49.5t54 -174.5q0 -76 -24 -192l-135 -637h-252l123 582q20 90 20 149q0 53 -20.5 76.5t-63.5 23.5q-39 0 -82 -24.5t-82 -61t-70.5 -78.5t-47.5 -77l-121 -590h-252z" />
-<glyph unicode="i" horiz-adv-x="524" d="M55 0l217 1024h252l-217 -1024h-252zM311 1315q0 68 44 104.5t112 36.5q66 0 111.5 -37t45.5 -104q0 -66 -46 -103.5t-111 -37.5q-68 0 -112 37.5t-44 103.5z" />
-<glyph unicode="j" horiz-adv-x="499" d="M-229 -408l49 218q12 -1 23 -1q37 0 65 10q37 13 62.5 41.5t43 72.5t29.5 100l209 991h254l-227 -1067q-39 -184 -131.5 -281.5t-249.5 -97.5q-63 0 -127 14zM289 1315q0 68 44 104.5t112 36.5q66 0 111.5 -37t45.5 -104q0 -66 -46 -103.5t-111 -37.5q-68 0 -112 37.5 t-44 103.5z" />
-<glyph unicode="k" horiz-adv-x="952" d="M37 0l303 1434h252l-180 -846l75 26l289 410h281l-305 -412l-123 -77l92 -78l156 -457h-271l-147 424h-82l-88 -424h-252z" />
-<glyph unicode="l" horiz-adv-x="557" d="M68 135q0 47 12 109l252 1190h252l-240 -1131q-6 -28 -6 -50q0 -23 7 -38q13 -29 44 -29q57 0 109 23l-6 -182q-37 -23 -107 -37.5t-137 -14.5q-88 0 -134 34t-46 126z" />
-<glyph unicode="m" horiz-adv-x="1570" d="M37 0l217 1024h197l-13 -180h8q31 33 67 69.5t81 67.5t100.5 51.5t120.5 20.5q82 1 124 -59q38 -54 38 -141v-17q31 39 70.5 77.5t86 69.5t98.5 50.5t107 19.5q94 0 144.5 -44t50.5 -165q0 -88 -31 -230l-129 -614h-252l121 575q10 47 16.5 88.5t6.5 71.5 q0 47 -17.5 71.5t-58.5 24.5q-33 0 -66.5 -19t-64.5 -49t-56.5 -64.5t-39.5 -65.5l-132 -633h-251l116 557q12 57 19.5 101t7.5 79q0 94 -72 94q-35 0 -69.5 -18t-64.5 -47t-55.5 -62.5t-41.5 -64.5l-131 -639h-252z" />
-<glyph unicode="n" horiz-adv-x="1067" d="M37 0l217 1024h190l-10 -180h8q27 33 63 69.5t83 67.5t105.5 51.5t131.5 20.5q92 0 147.5 -50.5t55.5 -166.5q0 -31 -3 -66t-13 -76l-148 -694h-252l136 635q12 57 12 100q0 45 -18.5 70.5t-67.5 25.5q-37 0 -74 -18t-69.5 -49t-61.5 -69t-49 -77l-131 -618h-252z" />
-<glyph unicode="o" horiz-adv-x="1015" d="M70 332q0 162 46 295t122.5 227t178 146.5t212.5 52.5q98 0 165.5 -31t109.5 -82t60.5 -116.5t18.5 -135.5q0 -160 -45 -292t-121 -226t-176 -146.5t-211 -52.5q-96 0 -163.5 32t-111.5 83t-64.5 115.5t-20.5 130.5zM330 367q0 -184 133 -185q49 0 96 43t84 113t58.5 158 t21.5 176q0 82 -27.5 126t-103.5 44q-49 0 -96 -41t-84 -107.5t-59.5 -152.5t-22.5 -174z" />
-<glyph unicode="p" horiz-adv-x="1036" d="M-53 -410l303 1434h186l-10 -180h8q29 39 66 76.5t82 66.5t96 47.5t110 18.5q104 0 168 -72t64 -225q0 -174 -46 -318.5t-123 -248t-180.5 -161t-215.5 -57.5q-53 0 -100.5 10.5t-69.5 26.5l-88 -418h-250zM328 217q51 -35 114 -35t121 43t102 115t69.5 167t25.5 200 q0 59 -27.5 97t-75.5 38q-37 0 -71.5 -18.5t-65.5 -46t-55.5 -62.5t-42.5 -68z" />
-<glyph unicode="q" horiz-adv-x="1026" d="M59 285q0 156 50.5 295t137.5 243.5t202.5 165t244.5 60.5q98 0 191.5 -21.5t144.5 -50.5l-301 -1387h-246l125 570h-8q-20 -35 -50 -68t-68 -60.5t-83 -44t-96 -16.5q-68 0 -114 26t-74.5 70t-42 100t-13.5 118zM319 317q0 -63 24 -99t65 -36q39 0 77.5 23.5t72.5 59.5 t61.5 78t44.5 79l81 395q-29 12 -59.5 16.5t-60.5 4.5q-61 0 -117.5 -44t-97.5 -117t-66 -167t-25 -193z" />
-<glyph unicode="r" horiz-adv-x="702" d="M37 0l217 1024h186l2 -180h9q45 82 109.5 139t162.5 57q43 0 102 -16l-63 -219q-20 6 -38.5 10t-39.5 4q-84 0 -154.5 -54t-107.5 -126l-133 -639h-252z" />
-<glyph unicode="s" horiz-adv-x="811" d="M-2 39l80 201q41 -23 105.5 -40.5t135.5 -17.5q72 0 110 28t40 85q0 41 -24.5 70.5t-62.5 56.5t-81 54.5t-81 63t-62.5 85t-24.5 118.5q0 68 26.5 125.5t75 98.5t117 63.5t154.5 22.5q119 0 196.5 -17.5t122.5 -44.5l-69 -192q-41 18 -99.5 30.5t-121.5 12.5 q-66 0 -104 -22.5t-38 -71.5q0 -33 24.5 -58.5t62.5 -52.5t81 -54.5t81 -66.5t62.5 -89t24.5 -120q0 -170 -110.5 -253t-294.5 -83q-104 0 -191.5 19.5t-134.5 48.5z" />
-<glyph unicode="t" horiz-adv-x="655" d="M82 813l49 211h133l41 193l268 75l-57 -268h240l-47 -211h-238l-100 -463q-12 -55 -13 -90q0 -45 20.5 -61.5t61.5 -16.5q39 0 71 8.5t67 26.5v-188q-23 -12 -54.5 -23.5t-68.5 -18.5t-76 -11.5t-72 -4.5q-104 0 -160.5 48.5t-56.5 146.5q0 20 3 42.5t7 47.5l119 557 h-137z" />
-<glyph unicode="u" horiz-adv-x="1048" d="M80 197q0 76 20 165l142 662h252l-134 -633q-12 -61 -12 -102t16.5 -63.5t57.5 -22.5q35 0 70.5 17.5t68.5 45t60.5 61t46.5 66.5l131 631h252l-129 -614q-10 -41 -17.5 -96.5t-13.5 -114t-8 -111.5q-1 -26 -1 -48t1 -40h-203l-10 184h-8q-29 -39 -67 -76.5t-84 -68.5 t-100.5 -49.5t-115.5 -18.5q-96 0 -155.5 48.5t-59.5 177.5z" />
-<glyph unicode="v" horiz-adv-x="917" d="M82 1024h278l68 -537l4 -157h6l62 162l280 532h285l-627 -1034h-155z" />
-<glyph unicode="w" horiz-adv-x="1388" d="M94 1024h258l33 -514l-12 -182h10l70 184l270 512h188l66 -524l-2 -170h10l62 172l237 522h246l-522 -1034h-187l-71 573v129h-9l-53 -131l-307 -571h-193z" />
-<glyph unicode="x" horiz-adv-x="1015" d="M-84 0l424 524l-184 500h284l78 -219l27 -143l90 143l178 219h293l-399 -492l204 -532h-278l-98 246l-31 151l-92 -151l-203 -246h-293z" />
-<glyph unicode="y" horiz-adv-x="925" d="M-35 -389l68 201q12 -6 25.5 -8.5t25.5 -2.5q49 0 100.5 47.5t102.5 151.5l-193 1024h289l59 -575l2 -160h13l55 162l279 573h268l-492 -920q-61 -115 -115.5 -211t-109.5 -165.5t-114.5 -108.5t-127.5 -39q-90 0 -135 31z" />
-<glyph unicode="z" horiz-adv-x="890" d="M-27 0l45 221l461 490l146 92h-484l49 221h762l-47 -221l-471 -498l-131 -84h479l-47 -221h-762z" />
-<glyph unicode="{" horiz-adv-x="729" d="M133 379l45 205q74 0 123 42t68 132l90 428q23 111 86 180.5t174 69.5h233l-47 -226h-98q-53 0 -83 -28.5t-44 -94.5l-84 -399q-18 -90 -69.5 -136t-106.5 -56l-4 -21q51 -8 80.5 -61.5t11.5 -139.5l-84 -397q-14 -66 4 -94.5t74 -28.5h96l-49 -225h-234 q-102 0 -141 64.5t-12 183.5l88 420q23 104 -9 143t-108 39z" />
-<glyph unicode="|" horiz-adv-x="475" d="M193 -266v1700h217v-1700h-217z" />
-<glyph unicode="}" horiz-adv-x="735" d="M-154 -471l50 225h98q51 0 79.5 28t43.5 95l86 399q18 90 68.5 136.5t107.5 56.5l6 20q-53 8 -84 61.5t-12 139.5l84 397q14 63 -3.5 93t-72.5 30h-94l45 226h231q102 0 142.5 -64.5t15.5 -183.5l-90 -420q-23 -104 10 -143t109 -39l-43 -205q-156 0 -193 -174l-92 -428 q-23 -111 -89.5 -180.5t-176.5 -69.5h-226z" />
-<glyph unicode="~" horiz-adv-x="1034" d="M92 774q96 78 173 107.5t143 29.5q59 0 110 -17t98.5 -36.5t93.5 -37t93 -17.5q37 0 76 12t82 47l96 -211q-74 -55 -135.5 -77.5t-114.5 -22.5q-57 0 -106.5 18.5t-95.5 41t-93 41t-100 18.5q-49 0 -105.5 -21.5t-124.5 -79.5z" />
-<glyph unicode="&#xa1;" horiz-adv-x="579" d="M-21 -410l144 674l121 334h159l-18 -334l-143 -674h-263zM205 889q0 72 45 115t121 43q74 0 118.5 -43t44.5 -115t-45 -114t-118 -42q-76 0 -121 42t-45 114z" />
-<glyph unicode="&#xa2;" d="M190 324q0 154 39 277.5t105.5 215.5t155 149.5t184.5 75.5l39 187h235l-41 -189q94 -18 148 -47l-92 -200q-23 12 -52.5 20t-62.5 12l-133 -624q45 10 85 24.5t66 30.5l49 -172q-43 -35 -105 -60.5t-128 -37.5l-39 -191h-235l38 187q-68 14 -116.5 46.5t-79.5 79 t-45.5 101.5t-14.5 115zM438 406q0 -86 29 -133.5t74 -65.5l129 608q-45 -18 -87 -55t-74 -90.5t-51.5 -120t-19.5 -143.5z" />
-<glyph unicode="&#xa3;" d="M61 0l50 223h4q61 2 117.5 29t99.5 73t68.5 107.5t25.5 132.5v20.5t-2 20.5h-240l47 211h144q-10 41 -18.5 89t-8.5 114q0 115 44 199t118 138t168 79.5t194 25.5q92 0 175 -19.5t131 -51.5l-86 -199q-35 18 -95.5 33.5t-142.5 15.5q-49 0 -95 -17.5t-80 -50t-54.5 -77.5 t-20.5 -103q0 -59 8.5 -99t20.5 -77h287l-48 -211h-194q0 -8 1 -13t1 -13q0 -102 -43 -186.5t-94 -129.5l-97 -61l-2 -13l138 31h446l-49 -221h-918z" />
-<glyph unicode="&#xa4;" d="M80 307l158 160l73 35q-25 43 -39 93t-14 112q0 59 15.5 110t41.5 98l-77 35l-158 160l156 164l159 -158l39 -76q41 31 97.5 46.5t117.5 15.5q59 0 117.5 -15.5t97.5 -44.5l41 74l160 158l158 -164l-158 -160l-76 -32q29 -43 41 -97.5t12 -113.5q0 -61 -13 -115.5 t-40 -91.5l76 -33l158 -160l-158 -164l-160 158l-37 76q-39 -29 -99 -45.5t-120 -16.5q-61 0 -117.5 15.5t-97.5 44.5l-39 -74l-159 -158zM481 709q0 -78 47 -127.5t123 -49.5t122 49.5t46 127.5q0 74 -46 125t-122 51t-123 -51t-47 -125z" />
-<glyph unicode="&#xa5;" d="M133 246l35 164h254l24 116h-251l34 164h174l-210 744h311l137 -539l-6 -152h10l62 156l354 535h291l-527 -744h179l-35 -164h-256l-25 -116h256l-35 -164h-256l-51 -246h-266l51 246h-254z" />
-<glyph unicode="&#xa6;" horiz-adv-x="464" d="M123 -266v702h219v-702h-219zM123 731v703h219v-703h-219z" />
-<glyph unicode="&#xa7;" horiz-adv-x="1034" d="M86 61l88 191q41 -23 103.5 -46.5t146.5 -23.5q72 0 115 28t43 77q0 33 -32 55.5t-79 43t-103.5 44t-103.5 56t-78.5 80.5t-31.5 120q0 92 49 156.5t114 111.5l99 33q-45 33 -67.5 79t-24.5 97q0 61 29.5 116.5t82.5 95.5t128 63.5t163 23.5q115 0 190.5 -23.5 t129.5 -52.5l-76 -194q-41 23 -109.5 41t-136.5 18q-72 0 -111 -29.5t-39 -76.5q0 -35 32 -56.5t79 -39t102.5 -36t102.5 -49t78.5 -78.5t31.5 -122q0 -98 -50 -169t-111 -114l-105 -32q47 -33 69.5 -75t20.5 -108q-2 -141 -112.5 -218t-292.5 -77q-113 0 -199 28t-135 62z M414 719q0 -63 46 -98t148 -68q47 25 90 65.5t43 98.5q0 35 -12 57.5t-36.5 41t-63.5 33.5t-90 34q-45 -25 -85 -66t-40 -98z" />
-<glyph unicode="&#xa8;" horiz-adv-x="501" d="M369 1333q0 68 37.5 106t97.5 38q59 0 97 -38t38 -106q0 -66 -38 -102.5t-97 -36.5t-97 36.5t-38 102.5zM795 1335q0 66 37.5 104t97.5 38q59 0 97 -38t38 -104t-38 -103.5t-97 -37.5t-97 37.5t-38 103.5z" />
-<glyph unicode="&#xa9;" horiz-adv-x="1712" d="M164 594q0 170 57.5 306t156.5 232.5t234.5 148.5t290.5 52q156 0 290 -52t234.5 -148.5t157.5 -232.5t57 -306t-57 -306t-157.5 -232.5t-234.5 -148.5t-290 -52q-170 0 -307 52t-233.5 148.5t-147.5 232.5t-51 306zM365 594q0 -127 39.5 -229.5t112.5 -173t171 -108.5 t215 -38t216.5 38t172 108.5t112.5 173t40 229.5t-40 229.5t-112.5 173t-172 108.5t-216.5 38t-215 -38t-171 -108.5t-112.5 -173t-39.5 -229.5zM559 594q0 186 93 287.5t247 101.5q76 0 134.5 -17.5t111.5 -47.5l-66 -179q-37 18 -66.5 24.5t-58.5 6.5q-59 0 -94 -39 t-35 -137q0 -176 144 -176q39 0 69.5 7t61.5 24l59 -181q-45 -29 -113.5 -46t-146.5 -17q-166 0 -253 104.5t-87 284.5z" />
-<glyph unicode="&#xaa;" horiz-adv-x="821" d="M123 944q0 70 30.5 116t82 74.5t119 41t141.5 12.5q25 0 49 -1t49 -3q16 51 -2.5 82.5t-85.5 31.5q-78 0 -132.5 -14t-97.5 -31l-28 127q57 29 147 49.5t207 20.5q123 0 173 -51t50 -127q0 -51 -14 -115.5t-31.5 -132.5t-31 -132.5t-13.5 -113.5h-184l-6 94h-6 q-29 -35 -84.5 -68.5t-141.5 -33.5q-47 0 -82.5 14.5t-59.5 39t-36 56t-12 64.5zM352 991q0 -27 15.5 -44t44.5 -17q61 0 90.5 23.5t50.5 47.5l14 72q-16 2 -33.5 3t-33.5 1q-61 0 -104.5 -18.5t-43.5 -67.5z" />
-<glyph unicode="&#xab;" horiz-adv-x="952" d="M61 530l410 471l123 -131l-217 -258l-113 -80l74 -75l123 -252l-172 -127zM442 530l410 471l123 -131l-217 -258l-113 -80l74 -75l123 -252l-172 -127z" />
-<glyph unicode="&#xac;" horiz-adv-x="1079" d="M135 614v230h905v-463h-245v233h-660z" />
-<glyph unicode="&#xad;" horiz-adv-x="702" d="M115 483l51 213h489l-51 -213h-489z" />
-<glyph unicode="&#xae;" horiz-adv-x="1419" d="M240 924q0 137 46 244.5t126 181t185 112.5t222 39q121 0 226.5 -39t183.5 -112.5t123 -181t45 -244.5q0 -139 -46 -247t-125 -181.5t-184.5 -111.5t-222.5 -38q-121 0 -226.5 38t-184 111.5t-123.5 181.5t-45 247zM432 924q0 -98 32 -173t85 -124t122.5 -74t147.5 -25 q82 0 152.5 23.5t122 73t81 124t29.5 175.5q0 98 -30.5 171.5t-83 123t-123 74t-148.5 24.5q-86 0 -157.5 -26.5t-123 -78t-79 -124t-27.5 -164.5zM608 659v531q33 10 92.5 15t112.5 5q86 0 147.5 -35.5t61.5 -123.5q0 -66 -42 -101t-103 -39l57 -28l133 -224h-125l-129 213 l-98 31v-244h-107zM715 965h69q59 0 92 18t33 64q1 71 -118 71q-23 0 -43.5 -1t-32.5 -7v-145z" />
-<glyph unicode="&#xaf;" horiz-adv-x="641" d="M602 1159l39 189h631l-39 -189h-631z" />
-<glyph unicode="&#xb0;" horiz-adv-x="897" d="M248 1122q0 76 26.5 138.5t72.5 107.5t106.5 69.5t130.5 24.5t132 -22.5t109 -66.5t74 -107.5t27 -143.5t-27 -142t-74 -105.5t-109.5 -66t-131.5 -22.5q-70 0 -130.5 22.5t-106.5 66t-72.5 105.5t-26.5 142zM453 1122q0 -66 38.5 -103.5t94.5 -37.5q55 0 96 38t41 103 q0 66 -41 106t-96 40t-94 -40t-39 -106z" />
-<glyph unicode="&#xb1;" horiz-adv-x="1034" d="M119 289v229h903v-229h-903zM119 829v230h332v338h239v-338h332v-230h-332v-217h-239v217h-332z" />
-<glyph unicode="&#xb2;" horiz-adv-x="823" d="M197 778l30 146q59 37 137 90t148 112.5t118 122t48 117.5q0 35 -19.5 55.5t-72.5 20.5t-104.5 -17.5t-90.5 -40.5l-28 187q76 43 156.5 62.5t150.5 19.5q117 0 180.5 -53.5t63.5 -151.5q0 -123 -78 -225.5t-209 -200.5l-101 -51v-8l117 22h207l-45 -207h-608z" />
-<glyph unicode="&#xb3;" horiz-adv-x="823" d="M213 813l82 184q82 -39 170 -39q102 0 143 38t41 85q0 41 -29.5 61.5t-127.5 20.5h-84l16 78l176 166l92 49l-114 -12h-222l43 194h551l-28 -127l-209 -190l-72 -35v-10l57 6q72 -2 123.5 -51t49.5 -131q0 -86 -32 -149.5t-87.5 -104.5t-131 -61.5t-163.5 -20.5 q-74 0 -138.5 13t-105.5 36z" />
-<glyph unicode="&#xb4;" horiz-adv-x="487" d="M659 1159l170 316h256l-12 -62l-272 -254h-142z" />
-<glyph unicode="&#xb6;" horiz-adv-x="1101" d="M127 1020q0 82 26.5 156.5t76 132t119 91.5t155.5 34h151v-1700h-217v868q-68 0 -125 34t-99 92t-64.5 133t-22.5 159zM815 -266v1700h219v-1700h-219z" />
-<glyph unicode="&#xb7;" horiz-adv-x="518" d="M150 647q0 72 45 114t118 42q76 0 121 -42t45 -114t-45 -115t-121 -43q-74 0 -118.5 43t-44.5 115z" />
-<glyph unicode="&#xb8;" horiz-adv-x="743" d="M483 -418l41 99q104 -10 143.5 12t39.5 51q0 66 -160 61l153 195h162l-67 -88q70 -4 106.5 -43t36.5 -98q0 -53 -23.5 -92t-63.5 -65t-94.5 -38t-115.5 -12q-78 0 -158 18z" />
-<glyph unicode="&#xb9;" horiz-adv-x="823" d="M244 778l43 205h190l74 336l39 94l-74 -65l-129 -76l-69 149l360 232h166l-143 -670h170l-44 -205h-583z" />
-<glyph unicode="&#xba;" horiz-adv-x="817" d="M123 1022q0 111 38 192.5t99.5 136t136 81t148.5 26.5q135 0 205.5 -62.5t70.5 -183.5q0 -117 -34.5 -201.5t-94 -140t-136.5 -82t-159 -26.5q-127 0 -200.5 70.5t-73.5 189.5zM348 1034q-2 -45 20.5 -72.5t65.5 -27.5q68 0 115 70.5t47 181.5q0 100 -88 100 q-35 0 -63.5 -20.5t-51 -54t-35 -80t-10.5 -97.5z" />
-<glyph unicode="&#xbb;" horiz-adv-x="952" d="M39 203l221 260l113 84l-72 80l-127 254l176 120l225 -452l-409 -471zM416 203l221 260l113 84l-72 80l-127 254l176 120l225 -452l-409 -471z" />
-<glyph unicode="&#xbc;" horiz-adv-x="1720" d="M248 1223l365 225h168l-187 -875h-225l115 541l41 94l-72 -65l-129 -74zM383 80l883 1384l174 -102l-880 -1391zM833 160l29 137l542 580h179l-113 -535h147l-38 -182h-148l-35 -160h-196l34 160h-401zM1065 326l108 16h102l35 176l37 109h-10l-66 -100l-123 -136z" />
-<glyph unicode="&#xbd;" horiz-adv-x="1765" d="M248 1223l365 225h168l-187 -875h-225l115 541l41 94l-72 -65l-129 -74zM385 80l883 1384l174 -102l-880 -1391zM983 0l30 146q59 37 137 90t148 112.5t118 122t48 117.5q0 35 -19.5 55.5t-72.5 20.5t-104.5 -17.5t-90.5 -40.5l-28 187q76 43 156.5 62.5t150.5 19.5 q117 0 180.5 -53.5t63.5 -151.5q0 -123 -78 -225.5t-209 -200.5l-101 -51v-8l117 22h207l-45 -207h-608z" />
-<glyph unicode="&#xbe;" horiz-adv-x="1769" d="M141 608l82 184q82 -39 170 -39q102 0 143 38t41 85q0 41 -29.5 61.5t-127.5 20.5h-84l16 78l176 166l92 49l-114 -12h-222l43 194h551l-28 -127l-209 -190l-72 -35v-10l57 6q72 -2 123.5 -51t49.5 -131q0 -86 -32 -149.5t-87.5 -104.5t-131 -61.5t-163.5 -20.5 q-74 0 -138.5 13t-105.5 36zM434 80l883 1384l174 -102l-880 -1391zM885 160l29 137l542 580h179l-113 -535h147l-38 -182h-148l-35 -160h-196l34 160h-401zM1117 326l108 16h102l35 176l37 109h-10l-66 -100l-123 -136z" />
-<glyph unicode="&#xbf;" horiz-adv-x="880" d="M-47 -166q0 109 32.5 183.5t84 131t113 100.5t117.5 93t101 110.5t62 149.5h217q-12 -111 -50 -189.5t-88.5 -137t-106.5 -102.5t-102 -85t-77 -84t-31 -100q0 -55 32 -86t114 -31q63 0 139 27.5t133 66.5l64 -192q-84 -51 -182.5 -87t-239.5 -36q-172 0 -252 72.5 t-80 195.5zM442 893q0 72 45 115t121 43q74 0 119 -43t45 -115t-45 -114t-119 -42q-76 0 -121 42t-45 114z" />
-<glyph unicode="&#xc0;" horiz-adv-x="1191" d="M-78 0l797 1444h196l187 -1444h-268l-41 317h-418l-170 -317h-283zM492 543h290l-32 319l2 225h-11l-82 -227zM555 1720l12 62h287l154 -242h-185z" />
-<glyph unicode="&#xc1;" horiz-adv-x="1191" d="M-78 0l797 1444h196l187 -1444h-268l-41 317h-418l-170 -317h-283zM492 543h290l-32 319l2 225h-11l-82 -227zM647 1540l256 242h321l-12 -62l-352 -180h-213z" />
-<glyph unicode="&#xc2;" horiz-adv-x="1191" d="M-78 0l797 1444h196l187 -1444h-268l-41 317h-418l-170 -317h-283zM481 1511l18 82l297 189h179l206 -191l-16 -80h-180l-92 84l-27 70l-55 -68l-138 -86h-192zM492 543h290l-32 319l2 225h-11l-82 -227z" />
-<glyph unicode="&#xc3;" horiz-adv-x="1191" d="M-78 0l797 1444h196l187 -1444h-268l-41 317h-418l-170 -317h-283zM492 543h290l-32 319l2 225h-11l-82 -227zM493 1638q78 72 141.5 98.5t118.5 26.5q43 0 83 -11t78 -24.5t74 -24.5t73 -11q31 0 61.5 10t63.5 39l20 -137q-68 -55 -123 -76t-104 -21q-43 0 -81 11.5 t-75 23.5t-72.5 23.5t-74.5 11.5q-37 0 -77 -14.5t-87 -53.5z" />
-<glyph unicode="&#xc4;" horiz-adv-x="1191" d="M-78 0l797 1444h196l187 -1444h-268l-41 317h-418l-170 -317h-283zM492 543h290l-32 319l2 225h-11l-82 -227zM504 1634q0 59 41 89t107 30t106.5 -29.5t40.5 -89.5q0 -59 -41 -87.5t-106 -28.5q-66 0 -107 28.5t-41 87.5zM922 1634q0 59 41 89t106 30q66 0 107 -29.5 t41 -89.5q0 -59 -41 -87.5t-107 -28.5t-106.5 28.5t-40.5 87.5z" />
-<glyph unicode="&#xc5;" horiz-adv-x="1191" d="M-78 0l783 1419q-66 23 -92.5 64t-26.5 96q0 37 12 70.5t42 59.5t80 40t128 14q143 0 202.5 -49t59.5 -135q0 -66 -42 -114t-148 -60l182 -1405h-268l-41 317h-418l-170 -317h-283zM492 543h290l-32 319l2 225h-11l-82 -227zM758 1579q0 -63 90 -63q51 0 71.5 16t20.5 47 q0 68 -92 68q-90 0 -90 -68z" />
-<glyph unicode="&#xc6;" horiz-adv-x="1691" d="M-135 0l1120 1434h272h555l-53 -250h-540l-72 -334h493l-53 -250h-491l-74 -350h551l-53 -250h-535h-283l74 348h-350l-262 -348h-299zM592 575h233l107 510h-12l-91 -192z" />
-<glyph unicode="&#xc7;" horiz-adv-x="1099" d="M119 557q0 242 67.5 413t178 280.5t253 160.5t291.5 51q117 0 200 -17.5t130 -39.5l-104 -238q-41 23 -98.5 34t-145.5 11q-104 0 -194.5 -43t-156 -122.5t-103.5 -194.5t-38 -260q0 -174 87 -272.5t233 -98.5q92 0 152.5 19.5t113.5 48.5l4 -230q-133 -86 -321 -88 l-45 -59q70 -4 106.5 -42t36.5 -97q0 -53 -23.5 -92t-63.5 -65t-94.5 -38t-115.5 -12q-78 0 -158 18l41 99q104 -10 143.5 12t39.5 51q0 35 -41 48t-119 11l141 181q-100 20 -175 72.5t-124 128t-73.5 170t-24.5 200.5z" />
-<glyph unicode="&#xc8;" horiz-adv-x="1030" d="M41 0l303 1434h266h541l-53 -250h-541l-72 -334h494l-55 -250h-490l-76 -350h551l-51 -250h-551h-266zM475 1720l12 62h287l154 -242h-185z" />
-<glyph unicode="&#xc9;" horiz-adv-x="1030" d="M41 0l303 1434h266h541l-53 -250h-541l-72 -334h494l-55 -250h-490l-76 -350h551l-51 -250h-551h-266zM613 1540l256 242h321l-12 -62l-352 -180h-213z" />
-<glyph unicode="&#xca;" horiz-adv-x="1030" d="M41 0l303 1434h266h541l-53 -250h-541l-72 -334h494l-55 -250h-490l-76 -350h551l-51 -250h-551h-266zM422 1511l18 82l297 189h179l206 -191l-16 -80h-180l-92 84l-27 70l-55 -68l-138 -86h-192z" />
-<glyph unicode="&#xcb;" horiz-adv-x="1030" d="M41 0l303 1434h266h541l-53 -250h-541l-72 -334h494l-55 -250h-490l-76 -350h551l-51 -250h-551h-266zM430 1634q0 59 41 89t107 30t106.5 -29.5t40.5 -89.5q0 -59 -41 -87.5t-106 -28.5q-66 0 -107 28.5t-41 87.5zM848 1634q0 59 41 89t106 30q66 0 107 -29.5t41 -89.5 q0 -59 -41 -87.5t-107 -28.5t-106.5 28.5t-40.5 87.5z" />
-<glyph unicode="&#xcc;" horiz-adv-x="569" d="M72 0l303 1434h264l-303 -1434h-264zM231 1720l12 62h287l154 -242h-185z" />
-<glyph unicode="&#xcd;" horiz-adv-x="569" d="M72 0l303 1434h264l-303 -1434h-264zM367 1540l256 242h321l-12 -62l-352 -180h-213z" />
-<glyph unicode="&#xce;" horiz-adv-x="569" d="M72 0l303 1434h264l-303 -1434h-264zM178 1511l18 82l297 189h179l206 -191l-16 -80h-180l-92 84l-27 70l-55 -68l-138 -86h-192z" />
-<glyph unicode="&#xcf;" horiz-adv-x="569" d="M72 0l303 1434h264l-303 -1434h-264zM188 1634q0 59 41 89t107 30t106.5 -29.5t40.5 -89.5q0 -59 -41 -87.5t-106 -28.5q-66 0 -107 28.5t-41 87.5zM606 1634q0 59 41 89t106 30q66 0 107 -29.5t41 -89.5q0 -59 -41 -87.5t-107 -28.5t-106.5 28.5t-40.5 87.5z" />
-<glyph unicode="&#xd0;" horiz-adv-x="1310" d="M47 657l35 164h174l129 613q43 6 94 10t97.5 6t74.5 2q20 0 53 1t72 1q127 0 229.5 -31.5t175 -97t112.5 -168t40 -244.5q0 -90 -15 -193.5t-52 -207.5t-101.5 -200.5t-162 -170t-233.5 -119t-316 -45.5q-31 0 -59.5 1.5t-45.5 1.5q-37 2 -89 5t-102.5 6t-74.5 7l139 659 h-174zM397 236q8 -2 25.5 -3.5t38 -2.5t39 -1h28.5q143 -2 243.5 62.5t163 162t90.5 211t28 212.5q0 164 -69 245.5t-230 81.5q-39 0 -84 -2t-70 -6l-80 -375h271l-35 -164h-271z" />
-<glyph unicode="&#xd1;" horiz-adv-x="1292" d="M41 0l307 1444h184l353 -766l63 -223h13l14 223l162 756h252l-308 -1444h-184l-350 760l-68 229h-10l-18 -229l-158 -750h-252zM530 1638q78 72 141.5 98.5t118.5 26.5q43 0 83 -11t78 -24.5t74 -24.5t73 -11q31 0 61.5 10t63.5 39l20 -137q-68 -55 -123 -76t-104 -21 q-43 0 -81 11.5t-75 23.5t-72.5 23.5t-74.5 11.5q-37 0 -77 -14.5t-87 -53.5z" />
-<glyph unicode="&#xd2;" horiz-adv-x="1318" d="M119 537q0 190 52 359t148.5 295t232.5 198.5t304 72.5q111 0 200 -32.5t151.5 -101t97 -173t34.5 -248.5q0 -193 -52 -362.5t-147.5 -297.5t-227.5 -202t-291 -74q-242 0 -371 142.5t-131 423.5zM399 545q0 -147 56.5 -235.5t185.5 -88.5q94 0 171 56.5t132 151.5 t85 218t30 256q0 162 -63.5 235.5t-174.5 73.5q-92 0 -169 -53t-133 -144t-88 -213t-32 -257zM594 1720l12 62h287l154 -242h-185z" />
-<glyph unicode="&#xd3;" horiz-adv-x="1318" d="M119 537q0 190 52 359t148.5 295t232.5 198.5t304 72.5q111 0 200 -32.5t151.5 -101t97 -173t34.5 -248.5q0 -193 -52 -362.5t-147.5 -297.5t-227.5 -202t-291 -74q-242 0 -371 142.5t-131 423.5zM399 545q0 -147 56.5 -235.5t185.5 -88.5q94 0 171 56.5t132 151.5 t85 218t30 256q0 162 -63.5 235.5t-174.5 73.5q-92 0 -169 -53t-133 -144t-88 -213t-32 -257zM750 1540l256 242h321l-12 -62l-352 -180h-213z" />
-<glyph unicode="&#xd4;" horiz-adv-x="1318" d="M119 537q0 190 52 359t148.5 295t232.5 198.5t304 72.5q111 0 200 -32.5t151.5 -101t97 -173t34.5 -248.5q0 -193 -52 -362.5t-147.5 -297.5t-227.5 -202t-291 -74q-242 0 -371 142.5t-131 423.5zM399 545q0 -147 56.5 -235.5t185.5 -88.5q94 0 171 56.5t132 151.5 t85 218t30 256q0 162 -63.5 235.5t-174.5 73.5q-92 0 -169 -53t-133 -144t-88 -213t-32 -257zM553 1511l18 82l297 189h179l206 -191l-16 -80h-180l-92 84l-27 70l-55 -68l-138 -86h-192z" />
-<glyph unicode="&#xd5;" horiz-adv-x="1318" d="M119 537q0 190 52 359t148.5 295t232.5 198.5t304 72.5q111 0 200 -32.5t151.5 -101t97 -173t34.5 -248.5q0 -193 -52 -362.5t-147.5 -297.5t-227.5 -202t-291 -74q-242 0 -371 142.5t-131 423.5zM399 545q0 -147 56.5 -235.5t185.5 -88.5q94 0 171 56.5t132 151.5 t85 218t30 256q0 162 -63.5 235.5t-174.5 73.5q-92 0 -169 -53t-133 -144t-88 -213t-32 -257zM548 1638q78 72 141.5 98.5t118.5 26.5q43 0 83 -11t78 -24.5t74 -24.5t73 -11q31 0 61.5 10t63.5 39l20 -137q-68 -55 -123 -76t-104 -21q-43 0 -81 11.5t-75 23.5t-72.5 23.5 t-74.5 11.5q-37 0 -77 -14.5t-87 -53.5z" />
-<glyph unicode="&#xd6;" horiz-adv-x="1318" d="M119 537q0 190 52 359t148.5 295t232.5 198.5t304 72.5q111 0 200 -32.5t151.5 -101t97 -173t34.5 -248.5q0 -193 -52 -362.5t-147.5 -297.5t-227.5 -202t-291 -74q-242 0 -371 142.5t-131 423.5zM399 545q0 -147 56.5 -235.5t185.5 -88.5q94 0 171 56.5t132 151.5 t85 218t30 256q0 162 -63.5 235.5t-174.5 73.5q-92 0 -169 -53t-133 -144t-88 -213t-32 -257zM553 1634q0 59 41 89t107 30t106.5 -29.5t40.5 -89.5q0 -59 -41 -87.5t-106 -28.5q-66 0 -107 28.5t-41 87.5zM971 1634q0 59 41 89t106 30q66 0 107 -29.5t41 -89.5 q0 -59 -41 -87.5t-107 -28.5t-106.5 28.5t-40.5 87.5z" />
-<glyph unicode="&#xd7;" horiz-adv-x="1034" d="M135 426l268 268l-264 260l160 166l268 -266l267 266l161 -166l-266 -260l266 -264l-161 -168l-267 268l-270 -270z" />
-<glyph unicode="&#xd8;" horiz-adv-x="1318" d="M117 121l69 86q-33 66 -50 148t-17 182q0 190 52 359t148.5 295t232.5 198.5t304 72.5q176 0 291 -82l55 66l148 -127l-76 -92q31 -61 48 -141t17 -179q0 -193 -52 -362.5t-147.5 -297.5t-227.5 -202t-291 -74q-184 0 -306 84l-55 -65zM399 506q0 -19 4 -37l568 694 q-59 49 -150 49q-92 0 -169 -53t-133 -144t-88 -213t-32 -257v-39zM489 270q57 -49 152 -49q94 0 171 56.5t132 151.5t85 218t30 256v29.5t-2 28.5z" />
-<glyph unicode="&#xd9;" horiz-adv-x="1232" d="M129 356q0 41 5 84t16 90l192 904h264l-188 -902q-16 -78 -17 -126q0 -98 51.5 -139.5t149.5 -41.5q123 0 190.5 72t102.5 231l192 906h250l-194 -926q-31 -147 -80 -248.5t-119 -165t-164 -91.5t-217 -28q-119 0 -200.5 28t-134 79t-76 120.5t-23.5 153.5zM551 1720 l12 62h287l154 -242h-185z" />
-<glyph unicode="&#xda;" horiz-adv-x="1232" d="M129 356q0 41 5 84t16 90l192 904h264l-188 -902q-16 -78 -17 -126q0 -98 51.5 -139.5t149.5 -41.5q123 0 190.5 72t102.5 231l192 906h250l-194 -926q-31 -147 -80 -248.5t-119 -165t-164 -91.5t-217 -28q-119 0 -200.5 28t-134 79t-76 120.5t-23.5 153.5zM742 1540 l256 242h321l-12 -62l-352 -180h-213z" />
-<glyph unicode="&#xdb;" horiz-adv-x="1232" d="M129 356q0 41 5 84t16 90l192 904h264l-188 -902q-16 -78 -17 -126q0 -98 51.5 -139.5t149.5 -41.5q123 0 190.5 72t102.5 231l192 906h250l-194 -926q-31 -147 -80 -248.5t-119 -165t-164 -91.5t-217 -28q-119 0 -200.5 28t-134 79t-76 120.5t-23.5 153.5zM524 1511 l18 82l297 189h179l206 -191l-16 -80h-180l-92 84l-27 70l-55 -68l-138 -86h-192z" />
-<glyph unicode="&#xdc;" horiz-adv-x="1232" d="M129 356q0 41 5 84t16 90l192 904h264l-188 -902q-16 -78 -17 -126q0 -98 51.5 -139.5t149.5 -41.5q123 0 190.5 72t102.5 231l192 906h250l-194 -926q-31 -147 -80 -248.5t-119 -165t-164 -91.5t-217 -28q-119 0 -200.5 28t-134 79t-76 120.5t-23.5 153.5zM524 1634 q0 59 41 89t107 30t106.5 -29.5t40.5 -89.5q0 -59 -41 -87.5t-106 -28.5q-66 0 -107 28.5t-41 87.5zM942 1634q0 59 41 89t106 30q66 0 107 -29.5t41 -89.5q0 -59 -41 -87.5t-107 -28.5t-106.5 28.5t-40.5 87.5z" />
-<glyph unicode="&#xdd;" horiz-adv-x="1165" d="M217 1434h295l133 -539l-4 -152h8l64 156l358 535h305l-637 -899l-112 -535h-265l111 532zM668 1540l256 242h321l-12 -62l-352 -180h-213z" />
-<glyph unicode="&#xde;" horiz-adv-x="1126" d="M41 0l305 1434h264l-30 -146q27 2 53 2h53q104 0 193.5 -23.5t156 -72.5t103.5 -126t37 -183q0 -160 -55.5 -267.5t-146.5 -174t-208 -94t-238 -27.5h-31.5t-45 1t-45 2t-31.5 3l-68 -328h-266zM428 573q8 -2 22.5 -4t32 -3t32.5 -2t24 -1q70 0 134 14.5t113.5 48t79 89 t29.5 135.5q0 61 -19.5 99t-52 59.5t-77 30t-93.5 8.5q-37 0 -70.5 -3.5t-56.5 -7.5q-25 -117 -49 -231.5t-49 -231.5z" />
-<glyph unicode="&#xdf;" horiz-adv-x="1245" d="M-264 -369l69 187q35 -14 70 -18.5t88 -4.5q66 0 101.5 51.5t52.5 153.5l145 815h-168l41 209h166l12 57q25 117 72 188.5t112.5 111.5t147.5 54.5t178 14.5q104 0 176 -22.5t117 -60.5t65.5 -88t20.5 -108q0 -72 -23.5 -123t-58.5 -87.5t-77 -63.5t-76.5 -51.5t-58 -51 t-23.5 -61.5t23.5 -57.5t58 -41t76.5 -39t77 -52t58.5 -79.5t23.5 -122q0 -80 -36 -148.5t-98 -117.5t-147 -77t-184 -28q-84 0 -166 23.5t-133 58.5l115 199q43 -27 91 -47.5t118 -20.5q31 0 61.5 10.5t55 29t40 46t15.5 62.5q0 39 -23.5 64.5t-59.5 46t-78 42t-78 51 t-59.5 72.5t-23.5 109q0 59 23.5 103t59.5 77t77 58.5t77 50t59.5 52t23.5 64.5q0 47 -37 76t-107 29q-98 0 -157.5 -53.5t-81.5 -174.5l-182 -999q-18 -104 -43 -184t-67 -133.5t-103.5 -81t-151.5 -27.5q-74 0 -144.5 11.5t-121.5 45.5z" />
-<glyph unicode="&#xe0;" horiz-adv-x="1030" d="M68 295q0 150 37.5 287t117.5 241.5t202 167t290 62.5q72 0 156.5 -13.5t164.5 -35.5l-127 -594q-16 -78 -23 -158t-7 -152q0 -29 1 -54.5t3 -47.5h-187l-28 176h-9q-23 -37 -58.5 -72.5t-78.5 -65.5t-91 -47.5t-99 -17.5q-135 0 -199.5 88t-64.5 236zM328 344 q0 -66 21.5 -114t78.5 -48q37 0 69.5 15.5t60.5 40t49.5 53t37.5 53.5l103 477q-23 10 -52.5 15.5t-58.5 5.5q-74 0 -131 -44t-97 -115t-60.5 -160t-20.5 -179zM467 1413l14 62h264l50 -316h-142z" />
-<glyph unicode="&#xe1;" horiz-adv-x="1030" d="M68 295q0 150 37.5 287t117.5 241.5t202 167t290 62.5q72 0 156.5 -13.5t164.5 -35.5l-127 -594q-16 -78 -23 -158t-7 -152q0 -29 1 -54.5t3 -47.5h-187l-28 176h-9q-23 -37 -58.5 -72.5t-78.5 -65.5t-91 -47.5t-99 -17.5q-135 0 -199.5 88t-64.5 236zM328 344 q0 -66 21.5 -114t78.5 -48q37 0 69.5 15.5t60.5 40t49.5 53t37.5 53.5l103 477q-23 10 -52.5 15.5t-58.5 5.5q-74 0 -131 -44t-97 -115t-60.5 -160t-20.5 -179zM612 1159l170 316h256l-12 -62l-272 -254h-142z" />
-<glyph unicode="&#xe2;" horiz-adv-x="1030" d="M68 295q0 150 37.5 287t117.5 241.5t202 167t290 62.5q72 0 156.5 -13.5t164.5 -35.5l-127 -594q-16 -78 -23 -158t-7 -152q0 -29 1 -54.5t3 -47.5h-187l-28 176h-9q-23 -37 -58.5 -72.5t-78.5 -65.5t-91 -47.5t-99 -17.5q-135 0 -199.5 88t-64.5 236zM328 344 q0 -66 21.5 -114t78.5 -48q37 0 69.5 15.5t60.5 40t49.5 53t37.5 53.5l103 477q-23 10 -52.5 15.5t-58.5 5.5q-74 0 -131 -44t-97 -115t-60.5 -160t-20.5 -179zM389 1126l320 373h168l137 -373h-197l-49 136l-8 100l-55 -100l-117 -136h-199z" />
-<glyph unicode="&#xe3;" horiz-adv-x="1030" d="M68 295q0 150 37.5 287t117.5 241.5t202 167t290 62.5q72 0 156.5 -13.5t164.5 -35.5l-127 -594q-16 -78 -23 -158t-7 -152q0 -29 1 -54.5t3 -47.5h-187l-28 176h-9q-23 -37 -58.5 -72.5t-78.5 -65.5t-91 -47.5t-99 -17.5q-135 0 -199.5 88t-64.5 236zM328 344 q0 -66 21.5 -114t78.5 -48q37 0 69.5 15.5t60.5 40t49.5 53t37.5 53.5l103 477q-23 10 -52.5 15.5t-58.5 5.5q-74 0 -131 -44t-97 -115t-60.5 -160t-20.5 -179zM404 1348q72 76 126 104.5t99 28.5q37 0 68.5 -14.5t63.5 -31t63.5 -30.5t68.5 -14q29 0 62.5 12t74.5 43 l9 -143q-66 -66 -117 -91.5t-94 -25.5q-37 0 -70 13t-65.5 29.5t-65.5 30t-70 13.5q-31 0 -67.5 -12.5t-77.5 -45.5z" />
-<glyph unicode="&#xe4;" horiz-adv-x="1030" d="M68 295q0 150 37.5 287t117.5 241.5t202 167t290 62.5q72 0 156.5 -13.5t164.5 -35.5l-127 -594q-16 -78 -23 -158t-7 -152q0 -29 1 -54.5t3 -47.5h-187l-28 176h-9q-23 -37 -58.5 -72.5t-78.5 -65.5t-91 -47.5t-99 -17.5q-135 0 -199.5 88t-64.5 236zM328 344 q0 -66 21.5 -114t78.5 -48q37 0 69.5 15.5t60.5 40t49.5 53t37.5 53.5l103 477q-23 10 -52.5 15.5t-58.5 5.5q-74 0 -131 -44t-97 -115t-60.5 -160t-20.5 -179zM351 1333q0 68 37.5 106t97.5 38q59 0 97 -38t38 -106q0 -66 -38 -102.5t-97 -36.5t-97 36.5t-38 102.5z M777 1335q0 66 37.5 104t97.5 38q59 0 97 -38t38 -104t-38 -103.5t-97 -37.5t-97 37.5t-38 103.5z" />
-<glyph unicode="&#xe5;" horiz-adv-x="1030" d="M68 295q0 150 37.5 287t117.5 241.5t202 167t290 62.5q72 0 156.5 -13.5t164.5 -35.5l-127 -594q-16 -78 -23 -158t-7 -152q0 -29 1 -54.5t3 -47.5h-187l-28 176h-9q-23 -37 -58.5 -72.5t-78.5 -65.5t-91 -47.5t-99 -17.5q-135 0 -199.5 88t-64.5 236zM328 344 q0 -66 21.5 -114t78.5 -48q37 0 69.5 15.5t60.5 40t49.5 53t37.5 53.5l103 477q-23 10 -52.5 15.5t-58.5 5.5q-74 0 -131 -44t-97 -115t-60.5 -160t-20.5 -179zM522 1325q0 86 58.5 141.5t169.5 55.5q104 0 165.5 -50.5t61.5 -146.5q0 -80 -60.5 -136t-166.5 -56 q-109 0 -168.5 52t-59.5 140zM670 1325q0 -33 23.5 -50.5t56.5 -17.5q35 0 57.5 16.5t22.5 51.5t-24 52.5t-56 17.5q-33 0 -56.5 -16.5t-23.5 -53.5z" />
-<glyph unicode="&#xe6;" horiz-adv-x="1523" d="M35 242q0 100 45 171.5t123 116.5t180 66.5t219 21.5h33.5t34.5 -2q23 78 22 121q0 49 -30.5 73t-104.5 24q-68 0 -143.5 -16.5t-141.5 -43.5l-36 191q84 41 193.5 60t211.5 19q94 0 159.5 -29.5t92.5 -92.5q59 63 148 97t182 34q86 0 146.5 -19.5t98 -54.5t55 -81 t17.5 -101q0 -115 -54 -184.5t-146.5 -109.5t-213 -54.5t-252.5 -14.5q-2 -16 -3 -31.5t-1 -29.5q0 -92 47.5 -141.5t155.5 -49.5q78 0 146.5 21.5t109.5 46.5l47 -176q-70 -49 -175 -76t-210 -27q-135 0 -218 49.5t-118 137.5h-10q-66 -74 -151.5 -124t-202.5 -50 q-68 0 -116 21.5t-78.5 57t-46 83t-15.5 96.5zM295 303q0 -55 28.5 -79.5t75.5 -24.5q37 0 71 15t62.5 36.5t51 45t37.5 42.5l18 119q-16 2 -33.5 2h-34.5q-117 0 -196.5 -38t-79.5 -118zM915 598q66 0 133.5 3t123 18.5t90 47t34.5 87.5q0 35 -24.5 64.5t-91.5 29.5 q-109 0 -171.5 -73t-93.5 -177z" />
-<glyph unicode="&#xe7;" horiz-adv-x="843" d="M70 324q0 172 49 307t130 228t184.5 143.5t211.5 50.5q96 0 152.5 -18.5t101.5 -41.5l-94 -200q-39 23 -81 30.5t-91 7.5q-55 0 -107.5 -35.5t-94.5 -94t-66.5 -136.5t-24.5 -159q0 -104 45 -158.5t119 -54.5q61 0 113.5 19t93.5 44l47 -172q-53 -39 -119 -67.5 t-135 -39.5l-49 -65q70 -4 106.5 -42t36.5 -97q0 -53 -23.5 -92t-63.5 -65t-94.5 -38t-115.5 -12q-78 0 -158 18l41 99q104 -10 143.5 12t39.5 51q0 35 -41 48t-119 11l135 175q-74 12 -125 43.5t-84 77.5t-48 103.5t-15 119.5z" />
-<glyph unicode="&#xe8;" horiz-adv-x="954" d="M70 340q0 164 51 296t134 224t187.5 142.5t208.5 50.5q84 0 144.5 -21.5t99.5 -59.5t57.5 -87t18.5 -105q0 -84 -43 -147.5t-120 -105.5t-185.5 -63.5t-237.5 -21.5q-16 0 -30.5 1t-30.5 1q-4 -25 -6.5 -44t-2.5 -35q0 -92 48.5 -137.5t136.5 -45.5q90 0 161.5 27 t108.5 53l53 -164q-63 -53 -163.5 -90t-233.5 -37q-166 0 -261 97.5t-95 271.5zM360 604q57 0 122 4t120 19.5t92 45t37 81.5q0 31 -22.5 62.5t-94.5 31.5q-90 0 -156.5 -70t-97.5 -174zM426 1413l14 62h264l50 -316h-142z" />
-<glyph unicode="&#xe9;" horiz-adv-x="954" d="M70 340q0 164 51 296t134 224t187.5 142.5t208.5 50.5q84 0 144.5 -21.5t99.5 -59.5t57.5 -87t18.5 -105q0 -84 -43 -147.5t-120 -105.5t-185.5 -63.5t-237.5 -21.5q-16 0 -30.5 1t-30.5 1q-4 -25 -6.5 -44t-2.5 -35q0 -92 48.5 -137.5t136.5 -45.5q90 0 161.5 27 t108.5 53l53 -164q-63 -53 -163.5 -90t-233.5 -37q-166 0 -261 97.5t-95 271.5zM360 604q57 0 122 4t120 19.5t92 45t37 81.5q0 31 -22.5 62.5t-94.5 31.5q-90 0 -156.5 -70t-97.5 -174zM579 1159l170 316h256l-12 -62l-272 -254h-142z" />
-<glyph unicode="&#xea;" horiz-adv-x="954" d="M70 340q0 164 51 296t134 224t187.5 142.5t208.5 50.5q84 0 144.5 -21.5t99.5 -59.5t57.5 -87t18.5 -105q0 -84 -43 -147.5t-120 -105.5t-185.5 -63.5t-237.5 -21.5q-16 0 -30.5 1t-30.5 1q-4 -25 -6.5 -44t-2.5 -35q0 -92 48.5 -137.5t136.5 -45.5q90 0 161.5 27 t108.5 53l53 -164q-63 -53 -163.5 -90t-233.5 -37q-166 0 -261 97.5t-95 271.5zM342 1126l320 373h168l137 -373h-197l-49 136l-8 100l-55 -100l-117 -136h-199zM360 604q57 0 122 4t120 19.5t92 45t37 81.5q0 31 -22.5 62.5t-94.5 31.5q-90 0 -156.5 -70t-97.5 -174z" />
-<glyph unicode="&#xeb;" horiz-adv-x="954" d="M70 340q0 164 51 296t134 224t187.5 142.5t208.5 50.5q84 0 144.5 -21.5t99.5 -59.5t57.5 -87t18.5 -105q0 -84 -43 -147.5t-120 -105.5t-185.5 -63.5t-237.5 -21.5q-16 0 -30.5 1t-30.5 1q-4 -25 -6.5 -44t-2.5 -35q0 -92 48.5 -137.5t136.5 -45.5q90 0 161.5 27 t108.5 53l53 -164q-63 -53 -163.5 -90t-233.5 -37q-166 0 -261 97.5t-95 271.5zM336 1333q0 68 37.5 106t97.5 38q59 0 97 -38t38 -106q0 -66 -38 -102.5t-97 -36.5t-97 36.5t-38 102.5zM360 604q57 0 122 4t120 19.5t92 45t37 81.5q0 31 -22.5 62.5t-94.5 31.5 q-90 0 -156.5 -70t-97.5 -174zM762 1335q0 66 37.5 104t97.5 38q59 0 97 -38t38 -104t-38 -103.5t-97 -37.5t-97 37.5t-38 103.5z" />
-<glyph unicode="&#xec;" horiz-adv-x="524" d="M55 0l217 1024h252l-217 -1024h-252zM215 1413l14 62h264l50 -316h-142z" />
-<glyph unicode="&#xed;" horiz-adv-x="524" d="M55 0l217 1024h252l-217 -1024h-252zM317 1159l170 316h256l-12 -62l-272 -254h-142z" />
-<glyph unicode="&#xee;" horiz-adv-x="524" d="M55 0l217 1024h252l-217 -1024h-252zM98 1126l320 373h168l137 -373h-197l-49 136l-8 100l-55 -100l-117 -136h-199z" />
-<glyph unicode="&#xef;" horiz-adv-x="524" d="M55 0l217 1024h252l-217 -1024h-252zM113 1333q0 68 37.5 106t97.5 38q59 0 97 -38t38 -106q0 -66 -38 -102.5t-97 -36.5t-97 36.5t-38 102.5zM539 1335q0 66 37.5 104t97.5 38q59 0 97 -38t38 -104t-38 -103.5t-97 -37.5t-97 37.5t-38 103.5z" />
-<glyph unicode="&#xf0;" horiz-adv-x="1040" d="M76 352q0 143 42 266t112.5 213.5t163.5 140.5t198 50q141 0 207 -78q4 66 -8.5 120t-34.5 101l-154 -63l-65 110l143 60q-37 37 -81 63.5t-91 42.5l199 84q92 -35 167 -110l150 61l57 -110l-131 -56q35 -63 55.5 -141t20.5 -170q0 -252 -48 -434.5t-130 -300 t-189.5 -174t-226.5 -56.5q-164 0 -260 97.5t-96 283.5zM336 362q0 -86 33.5 -133t93.5 -47q80 0 136 57.5t91 140.5t51.5 177t14.5 166q-16 41 -54 65.5t-92 24.5q-61 0 -111 -39t-86 -102.5t-56.5 -144.5t-20.5 -165z" />
-<glyph unicode="&#xf1;" horiz-adv-x="1067" d="M29 0l217 1024h190l-10 -180h8q27 33 63 69.5t83 67.5t105.5 51.5t131.5 20.5q92 0 147.5 -50.5t55.5 -166.5q0 -31 -3 -66t-13 -76l-148 -694h-252l136 635q12 57 12 100q0 45 -18.5 70.5t-67.5 25.5q-37 0 -74 -18t-69.5 -49t-61.5 -69t-49 -77l-131 -618h-252z M416 1348q72 76 126 104.5t99 28.5q37 0 68.5 -14.5t63.5 -31t63.5 -30.5t68.5 -14q29 0 62.5 12t74.5 43l9 -143q-66 -66 -117 -91.5t-94 -25.5q-37 0 -70 13t-65.5 29.5t-65.5 30t-70 13.5q-31 0 -67.5 -12.5t-77.5 -45.5z" />
-<glyph unicode="&#xf2;" horiz-adv-x="1015" d="M70 332q0 162 46 295t122.5 227t178 146.5t212.5 52.5q98 0 165.5 -31t109.5 -82t60.5 -116.5t18.5 -135.5q0 -160 -45 -292t-121 -226t-176 -146.5t-211 -52.5q-96 0 -163.5 32t-111.5 83t-64.5 115.5t-20.5 130.5zM330 367q0 -184 133 -185q49 0 96 43t84 113t58.5 158 t21.5 176q0 82 -27.5 126t-103.5 44q-49 0 -96 -41t-84 -107.5t-59.5 -152.5t-22.5 -174zM442 1413l14 62h264l50 -316h-142z" />
-<glyph unicode="&#xf3;" horiz-adv-x="1015" d="M70 332q0 162 46 295t122.5 227t178 146.5t212.5 52.5q98 0 165.5 -31t109.5 -82t60.5 -116.5t18.5 -135.5q0 -160 -45 -292t-121 -226t-176 -146.5t-211 -52.5q-96 0 -163.5 32t-111.5 83t-64.5 115.5t-20.5 130.5zM330 367q0 -184 133 -185q49 0 96 43t84 113t58.5 158 t21.5 176q0 82 -27.5 126t-103.5 44q-49 0 -96 -41t-84 -107.5t-59.5 -152.5t-22.5 -174zM575 1159l170 316h256l-12 -62l-272 -254h-142z" />
-<glyph unicode="&#xf4;" horiz-adv-x="1015" d="M70 332q0 162 46 295t122.5 227t178 146.5t212.5 52.5q98 0 165.5 -31t109.5 -82t60.5 -116.5t18.5 -135.5q0 -160 -45 -292t-121 -226t-176 -146.5t-211 -52.5q-96 0 -163.5 32t-111.5 83t-64.5 115.5t-20.5 130.5zM330 367q0 -184 133 -185q49 0 96 43t84 113t58.5 158 t21.5 176q0 82 -27.5 126t-103.5 44q-49 0 -96 -41t-84 -107.5t-59.5 -152.5t-22.5 -174zM335 1126l320 373h168l137 -373h-197l-49 136l-8 100l-55 -100l-117 -136h-199z" />
-<glyph unicode="&#xf5;" horiz-adv-x="1015" d="M70 332q0 162 46 295t122.5 227t178 146.5t212.5 52.5q98 0 165.5 -31t109.5 -82t60.5 -116.5t18.5 -135.5q0 -160 -45 -292t-121 -226t-176 -146.5t-211 -52.5q-96 0 -163.5 32t-111.5 83t-64.5 115.5t-20.5 130.5zM330 367q0 -184 133 -185q49 0 96 43t84 113t58.5 158 t21.5 176q0 82 -27.5 126t-103.5 44q-49 0 -96 -41t-84 -107.5t-59.5 -152.5t-22.5 -174zM367 1348q72 76 126 104.5t99 28.5q37 0 68.5 -14.5t63.5 -31t63.5 -30.5t68.5 -14q29 0 62.5 12t74.5 43l9 -143q-66 -66 -117 -91.5t-94 -25.5q-37 0 -70 13t-65.5 29.5t-65.5 30 t-70 13.5q-31 0 -67.5 -12.5t-77.5 -45.5z" />
-<glyph unicode="&#xf6;" horiz-adv-x="1015" d="M70 332q0 162 46 295t122.5 227t178 146.5t212.5 52.5q98 0 165.5 -31t109.5 -82t60.5 -116.5t18.5 -135.5q0 -160 -45 -292t-121 -226t-176 -146.5t-211 -52.5q-96 0 -163.5 32t-111.5 83t-64.5 115.5t-20.5 130.5zM330 367q0 -184 133 -185q49 0 96 43t84 113t58.5 158 t21.5 176q0 82 -27.5 126t-103.5 44q-49 0 -96 -41t-84 -107.5t-59.5 -152.5t-22.5 -174zM338 1333q0 68 37.5 106t97.5 38q59 0 97 -38t38 -106q0 -66 -38 -102.5t-97 -36.5t-97 36.5t-38 102.5zM764 1335q0 66 37.5 104t97.5 38q59 0 97 -38t38 -104t-38 -103.5t-97 -37.5 t-97 37.5t-38 103.5z" />
-<glyph unicode="&#xf7;" horiz-adv-x="1034" d="M119 578v229h905v-229h-905zM406 297q0 72 45 114t118 42q76 0 121 -42t45 -114t-45 -115t-121 -43q-74 0 -118.5 43t-44.5 115zM406 1090q0 72 45 113.5t118 41.5q76 0 121 -42t45 -113q0 -72 -45 -115t-121 -43q-74 0 -118.5 43t-44.5 115z" />
-<glyph unicode="&#xf8;" horiz-adv-x="1015" d="M0 74l96 110q-26 68 -26 148q0 162 46 295t122.5 227t178 146.5t212.5 52.5q66 0 117 -14.5t90 -39.5l69 78l131 -121l-86 -96q33 -78 33 -172q0 -160 -45 -292t-121 -226t-176 -146.5t-211 -52.5q-70 0 -124 17.5t-95 46.5l-76 -84zM330 397l360 406q-33 39 -98 39 q-47 0 -92 -38t-81 -99.5t-60.5 -141.5t-28.5 -166zM360 233q33 -51 103 -51q47 0 92 40t81 104.5t59.5 146.5t27.5 166z" />
-<glyph unicode="&#xf9;" horiz-adv-x="1048" d="M80 197q0 76 20 165l142 662h252l-134 -633q-12 -61 -12 -102t16.5 -63.5t57.5 -22.5q35 0 70.5 17.5t68.5 45t60.5 61t46.5 66.5l131 631h252l-129 -614q-10 -41 -17.5 -96.5t-13.5 -114t-8 -111.5t0 -88h-203l-10 184h-8q-29 -39 -67 -76.5t-84 -68.5t-100.5 -49.5 t-115.5 -18.5q-96 0 -155.5 48.5t-59.5 177.5zM436 1413l14 62h264l50 -316h-142z" />
-<glyph unicode="&#xfa;" horiz-adv-x="1048" d="M80 197q0 76 20 165l142 662h252l-134 -633q-12 -61 -12 -102t16.5 -63.5t57.5 -22.5q35 0 70.5 17.5t68.5 45t60.5 61t46.5 66.5l131 631h252l-129 -614q-10 -41 -17.5 -96.5t-13.5 -114t-8 -111.5t0 -88h-203l-10 184h-8q-29 -39 -67 -76.5t-84 -68.5t-100.5 -49.5 t-115.5 -18.5q-96 0 -155.5 48.5t-59.5 177.5zM550 1159l170 316h256l-12 -62l-272 -254h-142z" />
-<glyph unicode="&#xfb;" horiz-adv-x="1048" d="M80 197q0 76 20 165l142 662h252l-134 -633q-12 -61 -12 -102t16.5 -63.5t57.5 -22.5q35 0 70.5 17.5t68.5 45t60.5 61t46.5 66.5l131 631h252l-129 -614q-10 -41 -17.5 -96.5t-13.5 -114t-8 -111.5t0 -88h-203l-10 184h-8q-29 -39 -67 -76.5t-84 -68.5t-100.5 -49.5 t-115.5 -18.5q-96 0 -155.5 48.5t-59.5 177.5zM348 1126l320 373h168l137 -373h-197l-49 136l-8 100l-55 -100l-117 -136h-199z" />
-<glyph unicode="&#xfc;" horiz-adv-x="1048" d="M80 197q0 76 20 165l142 662h252l-134 -633q-12 -61 -12 -102t16.5 -63.5t57.5 -22.5q35 0 70.5 17.5t68.5 45t60.5 61t46.5 66.5l131 631h252l-129 -614q-10 -41 -17.5 -96.5t-13.5 -114t-8 -111.5t0 -88h-203l-10 184h-8q-29 -39 -67 -76.5t-84 -68.5t-100.5 -49.5 t-115.5 -18.5q-96 0 -155.5 48.5t-59.5 177.5zM355 1333q0 68 37.5 106t97.5 38q59 0 97 -38t38 -106q0 -66 -38 -102.5t-97 -36.5t-97 36.5t-38 102.5zM781 1335q0 66 37.5 104t97.5 38q59 0 97 -38t38 -104t-38 -103.5t-97 -37.5t-97 37.5t-38 103.5z" />
-<glyph unicode="&#xfd;" horiz-adv-x="925" d="M-35 -389l68 201q12 -6 25.5 -8.5t25.5 -2.5q49 0 100.5 47.5t102.5 151.5l-193 1024h289l59 -575l2 -160h13l55 162l279 573h268l-492 -920q-61 -115 -115.5 -211t-109.5 -165.5t-114.5 -108.5t-127.5 -39q-90 0 -135 31zM507 1159l170 316h256l-12 -62l-272 -254h-142z " />
-<glyph unicode="&#xfe;" horiz-adv-x="1036" d="M-53 -410l391 1844h252l-127 -549h8q25 33 55.5 63.5t69.5 53t86 37t106 14.5q104 0 168 -72t64 -225q0 -174 -46 -318.5t-123 -248t-180.5 -161t-215.5 -57.5q-53 0 -100.5 10.5t-69.5 26.5l-88 -418h-250zM328 217q51 -35 114 -35t119.5 43t98.5 115t67 167t25 200 q0 59 -23.5 97t-71.5 38q-37 0 -71.5 -18.5t-65.5 -46t-55.5 -62.5t-42.5 -68z" />
-<glyph unicode="&#xff;" horiz-adv-x="925" d="M-35 -389l68 201q12 -6 25.5 -8.5t25.5 -2.5q49 0 100.5 47.5t102.5 151.5l-193 1024h289l59 -575l2 -160h13l55 162l279 573h268l-492 -920q-61 -115 -115.5 -211t-109.5 -165.5t-114.5 -108.5t-127.5 -39q-90 0 -135 31zM269 1333q0 68 37.5 106t97.5 38q59 0 97 -38 t38 -106q0 -66 -38 -102.5t-97 -36.5t-97 36.5t-38 102.5zM695 1335q0 66 37.5 104t97.5 38q59 0 97 -38t38 -104t-38 -103.5t-97 -37.5t-97 37.5t-38 103.5z" />
-<glyph unicode="&#x152;" horiz-adv-x="1796" d="M119 537q0 215 55 387t155.5 291.5t238 183t300.5 63.5q78 0 134.5 -8t107.5 -20h807l-53 -250h-541l-72 -334h494l-53 -250h-492l-74 -350h549l-51 -250h-817q-41 -14 -95.5 -21.5t-111.5 -7.5q-88 0 -174 27t-154.5 91.5t-110.5 174t-42 273.5zM399 545 q0 -53 10.5 -109.5t38 -104.5t77.5 -79t130 -31q57 0 101.5 7.5t105.5 31.5l191 901q-37 25 -87.5 38t-131.5 13q-96 0 -175 -49t-137.5 -137t-90.5 -211t-32 -270z" />
-<glyph unicode="&#x153;" horiz-adv-x="1574" d="M70 332q0 162 46 295t123.5 227t179 146.5t212.5 52.5t181.5 -45t109.5 -123q61 72 148 120t202 48q84 0 144.5 -21.5t99 -59.5t57 -87t18.5 -105q0 -84 -43 -147.5t-119.5 -105.5t-185 -63.5t-237.5 -21.5q-16 0 -30.5 1t-31.5 1q-4 -25 -6 -44t-2 -35q0 -92 48 -137.5 t136 -45.5q90 0 162 27t109 53l53 -164q-63 -53 -163.5 -90t-233.5 -37q-59 0 -106.5 13.5t-82.5 37t-59.5 52t-38.5 59.5q-51 -70 -139.5 -116t-192.5 -46q-96 0 -163.5 32t-110.5 83t-63.5 115.5t-20.5 130.5zM330 367q0 -184 133 -185q49 0 96 43t84 113t58.5 158 t21.5 176q0 82 -27.5 126t-103.5 44q-49 0 -96 -41t-84 -107.5t-59.5 -152.5t-22.5 -174zM981 604q57 0 121.5 4t120 19.5t92.5 45t37 81.5q0 31 -22.5 62.5t-94.5 31.5q-90 0 -156.5 -70t-97.5 -174z" />
-<glyph unicode="&#x178;" horiz-adv-x="1165" d="M217 1434h295l133 -539l-4 -152h8l64 156l358 535h305l-637 -899l-112 -535h-265l111 532zM491 1634q0 59 41 89t107 30t106.5 -29.5t40.5 -89.5q0 -59 -41 -87.5t-106 -28.5q-66 0 -107 28.5t-41 87.5zM909 1634q0 59 41 89t106 30q66 0 107 -29.5t41 -89.5 q0 -59 -41 -87.5t-107 -28.5t-106.5 28.5t-40.5 87.5z" />
-<glyph unicode="&#x2c6;" horiz-adv-x="882" d="M614 1126l320 373h168l137 -373h-197l-49 136l-8 100l-55 -100l-117 -136h-199z" />
-<glyph unicode="&#x2dc;" horiz-adv-x="714" d="M627 1348q72 76 126 104.5t99 28.5q37 0 68.5 -14.5t63.5 -31t63.5 -30.5t68.5 -14q29 0 62.5 12t74.5 43l9 -143q-66 -66 -117 -91.5t-94 -25.5q-37 0 -70 13t-65.5 29.5t-65.5 30t-70 13.5q-31 0 -67.5 -12.5t-77.5 -45.5z" />
-<glyph unicode="&#x2000;" horiz-adv-x="891" />
-<glyph unicode="&#x2001;" horiz-adv-x="1782" />
-<glyph unicode="&#x2002;" horiz-adv-x="891" />
-<glyph unicode="&#x2003;" horiz-adv-x="1782" />
-<glyph unicode="&#x2004;" horiz-adv-x="594" />
-<glyph unicode="&#x2005;" horiz-adv-x="445" />
-<glyph unicode="&#x2006;" horiz-adv-x="297" />
-<glyph unicode="&#x2007;" horiz-adv-x="297" />
-<glyph unicode="&#x2008;" horiz-adv-x="222" />
-<glyph unicode="&#x2009;" horiz-adv-x="356" />
-<glyph unicode="&#x200a;" horiz-adv-x="99" />
-<glyph unicode="&#x2010;" horiz-adv-x="702" d="M115 483l51 213h489l-51 -213h-489z" />
-<glyph unicode="&#x2011;" horiz-adv-x="702" d="M115 483l51 213h489l-51 -213h-489z" />
-<glyph unicode="&#x2012;" horiz-adv-x="702" d="M115 483l51 213h489l-51 -213h-489z" />
-<glyph unicode="&#x2013;" horiz-adv-x="1284" d="M215 483l51 213h858l-51 -213h-858z" />
-<glyph unicode="&#x2014;" horiz-adv-x="1595" d="M215 483l51 213h1170l-52 -213h-1169z" />
-<glyph unicode="&#x2018;" horiz-adv-x="440" d="M203 1282q0 82 34.5 145.5t83 107.5t96.5 69.5t77 31.5l38 -110q-41 -16 -76.5 -52t-47.5 -77q35 0 57 -31t22 -74q0 -80 -47 -118.5t-102 -38.5q-35 0 -60.5 13t-42 34.5t-24.5 47t-8 52.5z" />
-<glyph unicode="&#x2019;" horiz-adv-x="442" d="M203 1061q43 18 78.5 49t50.5 78q-37 4 -61.5 34t-22.5 83q0 37 15.5 64.5t38 46t49 27.5t50.5 9q72 0 103 -37t31 -100q0 -84 -32 -147.5t-78 -108.5t-96 -71.5t-87 -39.5z" />
-<glyph unicode="&#x201a;" horiz-adv-x="462" d="M17 -131q43 18 78.5 49t50.5 78q-37 4 -61.5 34t-22.5 83q0 37 15.5 64.5t38 46t49 27.5t50.5 9q72 0 103 -37t31 -100q0 -84 -32 -147.5t-78 -108.5t-96 -71.5t-87 -39.5z" />
-<glyph unicode="&#x201c;" horiz-adv-x="776" d="M203 1282q0 82 34.5 145.5t83 107.5t96.5 69.5t77 31.5l38 -110q-41 -16 -76.5 -52t-47.5 -77q35 0 57 -31t22 -74q0 -80 -47 -118.5t-102 -38.5q-35 0 -60.5 13t-42 34.5t-24.5 47t-8 52.5zM539 1282q0 82 34.5 145.5t83 107.5t96.5 69.5t77 31.5l38 -110 q-41 -16 -76.5 -52t-47.5 -77q35 0 57 -31t22 -74q0 -80 -47 -118.5t-102 -38.5q-35 0 -60.5 13t-42 34.5t-24.5 47t-8 52.5z" />
-<glyph unicode="&#x201d;" horiz-adv-x="776" d="M203 1061q43 18 78.5 49t50.5 78q-37 4 -61.5 34t-22.5 83q0 37 15.5 64.5t38 46t49 27.5t50.5 9q72 0 103 -37t31 -100q0 -84 -32 -147.5t-78 -108.5t-96 -71.5t-87 -39.5zM537 1061q43 18 78.5 49t50.5 78q-37 4 -61.5 34t-22.5 83q0 37 15.5 64.5t38 46t49 27.5 t50.5 9q72 0 103 -37t31 -100q0 -84 -32 -147.5t-78 -108.5t-96 -71.5t-87 -39.5z" />
-<glyph unicode="&#x201e;" horiz-adv-x="796" d="M17 -131q43 18 78.5 49t50.5 78q-37 4 -61.5 34t-22.5 83q0 37 15.5 64.5t38 46t49 27.5t50.5 9q72 0 103 -37t31 -100q0 -84 -32 -147.5t-78 -108.5t-96 -71.5t-87 -39.5zM348 -131q43 18 78.5 49t50.5 78q-37 4 -61.5 34t-22.5 83q0 37 15.5 64.5t38 46t49 27.5t50.5 9 q72 0 103 -37t31 -100q0 -84 -32 -147.5t-78 -108.5t-96 -71.5t-87 -39.5z" />
-<glyph unicode="&#x2022;" horiz-adv-x="925" d="M201 637q0 70 24.5 127t66.5 98t98 64.5t122 23.5t123 -21.5t99 -61.5t66.5 -98t24.5 -132t-24.5 -131t-66.5 -97t-99 -61.5t-123 -21.5t-122 21.5t-98 61.5t-66.5 97t-24.5 131z" />
-<glyph unicode="&#x2026;" horiz-adv-x="1574" d="M37 135q0 72 45 114t119 42q76 0 121 -42t45 -114t-45.5 -115t-120.5 -43q-74 0 -119 43t-45 115zM565 135q0 72 45 114t119 42q76 0 121 -42t45 -114t-45 -115t-121 -43q-74 0 -119 43t-45 115zM1096 135q0 72 45 114t119 42q76 0 120.5 -42t44.5 -114t-45 -115 t-120 -43q-74 0 -119 43t-45 115z" />
-<glyph unicode="&#x202f;" horiz-adv-x="356" />
-<glyph unicode="&#x2039;" horiz-adv-x="614" d="M82 530l410 471l122 -131l-217 -258l-112 -80l73 -75l123 -252l-172 -127z" />
-<glyph unicode="&#x203a;" horiz-adv-x="600" d="M63 203l222 260l112 84l-71 80l-127 254l176 120l225 -452l-410 -471z" />
-<glyph unicode="&#x205f;" horiz-adv-x="445" />
-<glyph unicode="&#x20ac;" d="M-12 473l104 191h131q8 61 21 118h-193l107 191h149q70 156 170 262q115 119 252 173t260 54q100 0 174 -19.5t123 -47.5l-108 -185q-37 18 -91.5 28.5t-130.5 10.5q-80 0 -169 -43t-164 -131q-39 -45 -70 -102h520l-94 -191h-500q-14 -55 -20 -118h454l-94 -191h-364 q4 -45 12 -84q14 -63 50 -109.5t94.5 -71t148.5 -24.5q76 0 137 18.5t115 47.5l35 -187q-70 -45 -170.5 -68.5t-198.5 -23.5q-121 0 -208 38t-144.5 105.5t-83.5 159.5q-27 90 -27 199h-227z" />
-<glyph unicode="&#x2122;" horiz-adv-x="1951" d="M188 1208v226h750v-226h-242v-512h-266v512h-242zM1008 696v738h266l186 -308l49 -129h2l52 133l172 304h264v-738h-232v295l35 211h-12l-74 -174l-139 -240h-160l-139 234l-80 180h-10l47 -209v-297h-227z" />
-<glyph unicode="&#xe000;" horiz-adv-x="1024" d="M0 0v1024h1024v-1024h-1024z" />
-</font>
-</defs></svg> \ No newline at end of file
diff --git a/app/fonts/svg/ptsansitalic.svg b/app/fonts/svg/ptsansitalic.svg
deleted file mode 100644
index 4c595ebb..00000000
--- a/app/fonts/svg/ptsansitalic.svg
+++ /dev/null
@@ -1,242 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="pt_sansitalic" horiz-adv-x="1064" >
-<font-face units-per-em="2048" ascent="1536" descent="-512" />
-<missing-glyph horiz-adv-x="546" />
-<glyph unicode="&#xfb01;" horiz-adv-x="1050" d="M-233 -385l45 115q41 -14 74.5 -19.5t82.5 -5.5q78 0 117 81t61 214l148 893h-152l27 131h152q25 123 64.5 205t96 131t128 68.5t157.5 19.5q117 0 200 -24.5t126 -55.5l-66 -117q-47 35 -120.5 50.5t-155.5 15.5q-72 0 -118 -20.5t-77 -58.5t-49.5 -92t-32.5 -122h512 l-172 -1024h-153l147 893h-360l-148 -893q-18 -113 -43 -192.5t-61.5 -132t-90 -77t-129.5 -24.5q-61 0 -113 9t-97 32z" />
-<glyph unicode="&#xfb02;" horiz-adv-x="1118" d="M-233 -385l45 115q41 -14 74.5 -19.5t82.5 -5.5q78 0 117 81t61 214l132 893h-152l27 131h151q23 121 59.5 204t90 134t124 73.5t162.5 22.5q39 0 87.5 -3t96.5 -8t90 -11t68 -15l-190 -1171q-6 -35 -6 -57q0 -80 67 -80q27 0 56.5 5t70.5 17l-8 -115q-18 -8 -42.5 -15 t-51.5 -12t-52.5 -8t-43.5 -3q-74 0 -117 32.5t-43 112.5q0 8 1 19.5t6 48t16.5 109.5t32 202t51 324.5t75.5 478.5q-29 6 -82 12t-106 6q-66 0 -109 -21.5t-71.5 -61.5t-46 -96t-31.5 -124h203l-27 -131h-203l-131 -893q-16 -113 -39.5 -192.5t-61.5 -132t-92.5 -77 t-130.5 -24.5q-61 0 -113 9t-97 32z" />
-<glyph horiz-adv-x="2048" />
-<glyph horiz-adv-x="2048" />
-<glyph unicode="&#xd;" horiz-adv-x="546" />
-<glyph unicode=" " horiz-adv-x="546" />
-<glyph unicode="&#x09;" horiz-adv-x="546" />
-<glyph unicode="&#xa0;" horiz-adv-x="546" />
-<glyph unicode="!" horiz-adv-x="559" d="M178 94q0 55 33 87t86 32t86 -31.5t33 -87.5q0 -53 -33 -86t-86 -33t-86 33t-33 86zM295 362l41 361l149 711h164l-149 -711l-111 -361h-94z" />
-<glyph unicode="&#x22;" horiz-adv-x="620" d="M162 1038l84 396h151l-143 -396h-92zM389 1038l84 396h151l-143 -396h-92z" />
-<glyph unicode="#" d="M131 461l29 131h164l63 268h-154l29 131h156l78 324h139l-78 -324h217l78 324h139l-78 -324h158l-33 -131h-155l-64 -268h150l-33 -131h-150l-79 -342h-140l80 342h-217l-80 -342h-139l80 342h-160zM463 592h217l63 268h-217z" />
-<glyph unicode="$" d="M125 104l72 125q33 -23 95 -57.5t144 -48.5l123 575q-45 33 -89 70t-78 80t-55.5 97t-21.5 124q0 90 30 158.5t84 117t128 76t162 33.5l41 184h131l-39 -182q88 -8 150.5 -30.5t105.5 -45.5l-70 -129q-35 16 -90 34t-127 26l-110 -514q47 -35 93 -74t82 -88t58.5 -111.5 t22.5 -144.5q0 -84 -29 -154.5t-84 -123t-136 -85t-183 -39.5q0 -2 -6.5 -29.5t-12.5 -62.5q-8 -39 -18 -90h-131l39 187q-98 14 -172 53t-109 69zM483 1094q0 -78 41 -132.5t101 -101.5l96 453q-117 -8 -177.5 -68.5t-60.5 -150.5zM535 119q123 8 193.5 74t70.5 172 q0 92 -45 154.5t-109 115.5z" />
-<glyph unicode="%" horiz-adv-x="1507" d="M123 1004q0 119 36 204.5t91 141t122.5 82t133.5 26.5q117 0 177 -63.5t60 -180.5q0 -111 -30.5 -194.5t-82.5 -141t-123 -87t-149 -29.5q-104 0 -169.5 63.5t-65.5 178.5zM180 55l1051 1405l102 -80l-1051 -1405zM264 1020q0 -66 30 -102.5t89 -36.5q43 0 83 22.5 t70.5 64.5t48 102t17.5 136q0 72 -31.5 102.5t-89.5 30.5q-43 0 -83 -25.5t-69.5 -68.5t-47 -101t-17.5 -124zM791 244q0 119 36 204.5t91 141t122.5 82t133.5 26.5q117 0 177 -63.5t60 -180.5q0 -111 -30.5 -194.5t-82.5 -141t-123 -87t-149 -29.5q-104 0 -169.5 63.5 t-65.5 178.5zM932 260q0 -66 30 -102.5t89 -36.5q43 0 83 22.5t70.5 64.5t48 102t17.5 136q0 72 -31.5 102.5t-89.5 30.5q-43 0 -83 -25.5t-69.5 -68.5t-47 -101t-17.5 -124z" />
-<glyph unicode="&#x26;" horiz-adv-x="1581" d="M178 303q0 96 40 184t103.5 164t143.5 136.5t160 101.5q-14 37 -24.5 66.5t-18 59t-10.5 61.5t-3 73q0 55 20.5 110.5t63.5 99.5t107.5 71.5t154.5 27.5q72 0 116 -19.5t68.5 -48t33 -63.5t8.5 -65q0 -117 -89 -216.5t-243 -183.5q20 -59 48 -121.5t60.5 -124t69.5 -122 t74 -111.5q27 25 56.5 62.5t58 79.5t55 87t49.5 86l109 -59q-18 -35 -51 -83t-70 -98t-74 -96.5t-66 -76.5q66 -82 112 -125t97 -76l-118 -115q-47 27 -100.5 78t-104.5 119q-43 -37 -92.5 -71t-106.5 -60.5t-123.5 -43t-142.5 -16.5q-86 0 -154.5 25t-117 69t-74 103 t-25.5 131zM342 338q0 -111 67.5 -166t190.5 -55q49 0 98.5 13t94.5 34.5t82.5 48t66.5 55.5q-43 59 -83 129t-74.5 139.5t-62.5 134t-46 113.5q-74 -47 -135.5 -100t-105.5 -109.5t-68.5 -116t-24.5 -120.5zM723 1153q0 -31 2 -55.5t7 -46t12.5 -44t19.5 -53.5 q117 70 175 133.5t58 141.5q0 41 -23.5 69.5t-80.5 28.5q-47 0 -79 -14.5t-52.5 -40t-29.5 -57t-9 -62.5z" />
-<glyph unicode="'" horiz-adv-x="413" d="M209 1038l84 396h151l-143 -396h-92z" />
-<glyph unicode="(" horiz-adv-x="544" d="M111 150q0 211 47 401t127 356t184 304.5t219 242.5l76 -72q-115 -127 -206 -269t-156.5 -295.5t-98.5 -316.5t-33 -327q0 -131 28 -270.5t93 -278.5l-94 -71q-111 162 -148.5 312t-37.5 284z" />
-<glyph unicode=")" horiz-adv-x="544" d="M-195 -375q100 104 187.5 243.5t155 294t106.5 319.5t39 323q0 197 -25.5 334t-89.5 247l103 68q47 -66 79.5 -141.5t53 -153.5t30 -154.5t9.5 -142.5q0 -209 -46.5 -400.5t-125 -358t-182 -306t-216.5 -243.5z" />
-<glyph unicode="*" horiz-adv-x="681" d="M145 1133v114h103l129 -24l-92 90l-56 94l101 57l51 -86l37 -114l43 116l49 82l98 -53l-51 -88l-96 -98l139 24h98v-114h-92l-133 24l94 -98l49 -80l-98 -57l-51 86l-49 125l-37 -119l-51 -86l-103 57l54 86l88 86l-121 -24h-103z" />
-<glyph unicode="+" horiz-adv-x="983" d="M113 618v148h360v371h148v-371h360v-148h-360v-370h-148v370h-360z" />
-<glyph unicode="," horiz-adv-x="380" d="M-43 -225q78 29 125 90t57 121q-8 -4 -20 -4q-29 0 -56.5 24.5t-27.5 65.5q0 53 34.5 90t100.5 37q51 0 78.5 -35t27.5 -80q0 -63 -21.5 -123.5t-60 -112t-91 -91.5t-113.5 -62z" />
-<glyph unicode="-" horiz-adv-x="700" d="M129 520l33 139h471l-35 -139h-469z" />
-<glyph unicode="." horiz-adv-x="432" d="M72 94q0 55 32.5 87t85.5 32t86 -31.5t33 -87.5q0 -53 -32.5 -86t-86.5 -33q-53 0 -85.5 33t-32.5 86z" />
-<glyph unicode="/" horiz-adv-x="688" d="M-190 -229l1067 1687l116 -63l-1067 -1690z" />
-<glyph unicode="0" d="M117 449q0 215 46 400t127 320.5t193.5 212t247.5 76.5q174 0 268.5 -112.5t94.5 -358.5q0 -184 -40 -364.5t-117 -324.5t-189.5 -233.5t-260.5 -89.5q-104 0 -174.5 40t-114.5 106.5t-62.5 152t-18.5 175.5zM276 457q0 -104 20.5 -171t54.5 -103t76 -50t85 -14 q92 0 170 72.5t133 193.5t87 272.5t32 309.5q0 176 -49 262t-178 86q-82 0 -159 -63.5t-137.5 -178.5t-97.5 -272.5t-37 -343.5z" />
-<glyph unicode="1" d="M129 0l31 152h272l213 991l45 121l-100 -97l-246 -161l-57 104l506 348h69l-278 -1306h266l-31 -152h-690z" />
-<glyph unicode="2" d="M66 0l12 59q51 51 132 128t172 170.5t183 195.5t167 205.5t119 200t44 178.5q0 39 -8 71.5t-26.5 56t-53.5 37t-90 13.5q-74 0 -143.5 -30t-147.5 -81l-43 123q98 72 188.5 101.5t196.5 29.5q143 0 215 -81t72 -208q0 -106 -59.5 -231t-150.5 -251t-199.5 -245.5 t-209.5 -216.5l-112 -88v-8l127 23h419l-28 -152h-776z" />
-<glyph unicode="3" d="M88 27l74 145q41 -23 98 -38t133 -15q96 0 169 30.5t119 81t70.5 115t24.5 131.5q0 106 -53 163.5t-199 57.5h-147l12 60l373 454l106 91l-129 -21h-379l29 152h696l-12 -60l-411 -495l-80 -60v-4l67 14q57 0 108.5 -19t91.5 -59t63.5 -101.5t23.5 -147.5 q0 -111 -36 -206t-106.5 -167t-177 -113t-247.5 -41q-88 0 -159 14.5t-122 37.5z" />
-<glyph unicode="4" d="M70 440l14 68l850 948h104l-186 -876h229l-28 -140h-232l-92 -440h-149l92 440h-602zM283 565l137 15h282l97 450l55 168h-8l-96 -139l-355 -391z" />
-<glyph unicode="5" d="M96 23l70 141q43 -18 91 -31.5t124 -13.5q92 0 164.5 29.5t124 82t78 122t24.5 153.5q2 117 -62.5 174t-211.5 57l-164 -10l149 707h607l-33 -152h-461l-88 -410h14.5t28.5 2q18 0 39 3q96 0 161.5 -30t105.5 -77t57.5 -109.5t17.5 -125.5q0 -158 -51.5 -265.5t-134 -173 t-186 -93.5t-210.5 -28q-82 0 -144.5 12.5t-109.5 35.5z" />
-<glyph unicode="6" d="M129 418q0 205 78 387t203 320.5t282.5 226.5t317.5 106l8 -131q-113 -18 -223.5 -74.5t-203.5 -139.5t-165 -186.5t-109 -215.5q20 27 55.5 52t79.5 45.5t94 32t103 11.5q147 0 243.5 -89t96.5 -263q0 -115 -33.5 -210t-98 -166t-156 -110t-203.5 -39q-68 0 -133.5 24 t-117.5 76t-85 136t-33 207zM283 434q0 -68 13 -126t42 -101t72 -67.5t104 -24.5q82 0 141.5 31.5t97.5 83t55 116.5t17 133q0 102 -51 168t-168 66q-47 0 -93 -13.5t-88 -36t-76 -52t-54 -62.5q-4 -27 -8 -58.5t-4 -56.5z" />
-<glyph unicode="7" d="M141 0l742 1200l106 100l-119 -18h-542l30 152h813l-10 -56l-852 -1378h-168z" />
-<glyph unicode="8" d="M125 299q0 141 93 261t263 192q-33 27 -62.5 54.5t-53 63t-38 82.5t-14.5 115q0 94 36 167t96.5 123t140.5 75.5t166 25.5q68 0 127 -19.5t102 -57.5t67.5 -94t24.5 -130q0 -61 -23.5 -121.5t-65.5 -114t-98.5 -99.5t-123.5 -83q37 -31 70.5 -64.5t58 -73.5t40 -88 t15.5 -107q0 -86 -27.5 -164t-86 -137.5t-149.5 -94.5t-220 -35q-84 0 -146.5 26t-105.5 69t-64.5 102t-21.5 127zM285 317q0 -37 10 -73.5t33.5 -64t65.5 -44t104 -16.5q57 0 109 15.5t93 48t63.5 81t22.5 111.5q0 57 -15 101t-39.5 80t-63.5 66.5t-84 59.5 q-135 -63 -217 -155.5t-82 -209.5zM473 1075q0 -98 49 -158.5t135 -113.5q51 33 98.5 72.5t81 81.5t55 85t21.5 86q0 96 -47 141.5t-133 45.5q-53 0 -100 -15.5t-82 -46t-56.5 -76t-21.5 -102.5z" />
-<glyph unicode="9" d="M190 106q129 29 239 84.5t198 132t151.5 172t100.5 203.5q-66 -57 -144 -86.5t-196 -29.5q-55 0 -111.5 20.5t-104 65.5t-77 116.5t-29.5 171.5q0 119 37 212.5t103.5 158t155.5 98t194 33.5q76 0 143.5 -27.5t118.5 -83t79.5 -136.5t28.5 -187q0 -236 -83 -423 t-212 -321.5t-284.5 -212t-298.5 -92.5zM377 975q0 -74 22.5 -123t54 -78t69.5 -41t75 -12q94 0 179 37t130 90q2 12 5 34.5t6.5 45t4.5 44t1 32.5q0 143 -61.5 229t-182.5 86q-59 0 -113.5 -20.5t-95.5 -63.5t-67.5 -107.5t-26.5 -152.5z" />
-<glyph unicode=":" horiz-adv-x="546" d="M182 94q0 55 33 87t86 32t86 -31.5t33 -87.5q0 -53 -33 -86t-86 -33t-86 33t-33 86zM354 920q0 55 33 86.5t86 31.5t86 -31.5t33 -86.5q0 -53 -33 -86t-86 -33t-86 33t-33 86z" />
-<glyph unicode=";" horiz-adv-x="559" d="M111 -225q78 29 125 90t57 121q-8 -4 -21 -4q-29 0 -56.5 24.5t-27.5 65.5q0 53 35 90t101 37q51 0 78.5 -35t27.5 -80q0 -63 -21.5 -123.5t-60.5 -112t-91 -91.5t-114 -62zM367 920q0 55 32.5 86.5t85.5 31.5t86 -31.5t33 -86.5q0 -53 -32.5 -86t-86.5 -33 q-53 0 -85.5 33t-32.5 86z" />
-<glyph unicode="&#x3c;" horiz-adv-x="983" d="M111 625v59l776 473l78 -127l-486 -297l-186 -78l184 -65l498 -295l-78 -123z" />
-<glyph unicode="=" horiz-adv-x="983" d="M113 449v147h868v-147h-868zM113 788v148h868v-148h-868z" />
-<glyph unicode="&#x3e;" horiz-adv-x="983" d="M115 1032l78 125l786 -452v-60l-776 -473l-78 125l485 297l187 78l-185 65z" />
-<glyph unicode="?" horiz-adv-x="847" d="M164 94q0 55 32.5 87t86.5 32q53 0 85.5 -31.5t32.5 -87.5q0 -53 -32.5 -86t-85.5 -33t-86 33t-33 86zM244 1356q41 25 78.5 43t80.5 31.5t93.5 20.5t115.5 7q152 0 223.5 -69.5t71.5 -180.5t-34.5 -191.5t-88 -144t-118 -118t-123 -111.5t-103.5 -123.5t-59 -157.5h-129 q10 102 51 179t95.5 139.5t115.5 117t111.5 109t84 116.5t33.5 142q0 78 -42 120t-146 42q-72 0 -142.5 -27.5t-129.5 -62.5z" />
-<glyph unicode="@" horiz-adv-x="2179" d="M238 483q0 223 76.5 403.5t207.5 307.5t305 195.5t369 68.5q184 0 342 -54t274.5 -155.5t182 -248t65.5 -332.5q0 -131 -45 -251t-121.5 -210t-179 -144.5t-217.5 -54.5q-86 0 -136 37t-50 137q0 18 2 40t6 46h-8q-31 -47 -70 -93t-87 -83t-102.5 -60.5t-113.5 -23.5 q-49 0 -93 21.5t-77 62.5t-52.5 97.5t-19.5 127.5q0 131 43 258t116 225.5t170 159t206 60.5q74 0 120 -22.5t89 -55.5l67 64h70l-104 -588q-10 -53 -15.5 -95t-5.5 -75q0 -51 17.5 -76t62.5 -25q70 0 137.5 37t121.5 104.5t88 164t34 215.5q0 158 -53.5 278.5t-149.5 203.5 t-229 126t-293 43q-168 0 -313.5 -61.5t-254 -170t-171 -260t-62.5 -329.5q0 -182 56.5 -325.5t161 -242t249.5 -149.5t324 -51q59 0 135 14t137 43l41 -131q-90 -39 -169 -52.5t-169 -13.5q-190 0 -356 57.5t-291 170t-196.5 279.5t-71.5 386zM854 344q0 -80 33 -138.5 t119 -58.5q41 0 85 29t87 75t82.5 103.5t70.5 116.5l62 334q-35 41 -71 58.5t-89 17.5q-80 0 -149.5 -49.5t-120 -126t-80 -173t-29.5 -188.5z" />
-<glyph unicode="A" horiz-adv-x="1140" d="M-68 0l828 1456h76l206 -1456h-157l-58 397h-499l-222 -397h-174zM408 545h403l-59 436l-4 217h-3l-92 -221z" />
-<glyph unicode="B" horiz-adv-x="1138" d="M82 10l299 1411q78 12 175 20.5t210 8.5q76 0 145.5 -19.5t121.5 -58.5t84 -100.5t32 -143.5q0 -80 -24.5 -145t-69.5 -114.5t-105.5 -79t-130.5 -39.5v-9q45 -10 86 -33.5t72 -58.5t49 -81t18 -101q0 -143 -56 -236.5t-143 -148.5t-194.5 -76.5t-212.5 -21.5h-79t-117 4 q-123 12 -160 22zM272 145q12 -4 38 -6t55.5 -4t61 -3t56.5 -1q72 0 141.5 17.5t125 54.5t89 96t33.5 145q0 63 -30.5 105.5t-79.5 67t-111.5 33.5t-126.5 9h-143zM410 799h108q35 0 82 1t80 5q47 10 100.5 28.5t97.5 52.5t71.5 86t27.5 130q0 57 -17.5 95t-51.5 61.5 t-81 34t-104 10.5q-66 0 -123 -3.5t-86 -9.5z" />
-<glyph unicode="C" horiz-adv-x="1114" d="M145 561q0 231 68 400t178.5 280t248.5 164t280 53q117 0 190.5 -16.5t120.5 -38.5l-74 -150q-41 23 -107.5 38.5t-152.5 15.5q-115 0 -220.5 -50.5t-185 -144.5t-127 -229t-47.5 -303q0 -98 26 -181.5t74 -143.5t118.5 -94t160.5 -34q96 0 160 21.5t115 50.5l12 -140 q-70 -47 -147.5 -65.5t-180.5 -18.5q-121 0 -215 44t-159.5 123t-100.5 185.5t-35 233.5z" />
-<glyph unicode="D" horiz-adv-x="1273" d="M82 -2l305 1436q78 10 176.5 13t177.5 3q121 0 219.5 -32t167 -97.5t105.5 -165.5t37 -235q0 -90 -16.5 -196t-54.5 -209t-101.5 -199.5t-157.5 -171t-221 -118.5t-293 -44q-31 0 -81 1t-99 3q-143 8 -164 12zM276 141q8 -2 33 -3t52.5 -2t53 -2t36.5 -1q178 0 300.5 74 t199.5 186.5t112 247.5t35 256q0 92 -20.5 166t-64.5 126t-114 80.5t-170 28.5q-25 0 -55.5 -1t-59 -2t-55.5 -3t-41 -4z" />
-<glyph unicode="E" horiz-adv-x="1044" d="M82 0l305 1434h739l-30 -152h-580l-100 -469h530l-31 -151h-530l-109 -510h590l-32 -152h-590h-162z" />
-<glyph unicode="F" horiz-adv-x="1007" d="M82 0l305 1434h739l-30 -152h-580l-104 -489h540l-30 -152h-541l-135 -641h-164z" />
-<glyph unicode="G" horiz-adv-x="1193" d="M145 557q0 252 74 424t189.5 277.5t255 152.5t270.5 47q117 0 193.5 -15.5t123.5 -37.5l-71 -150q-41 23 -110 37.5t-155 14.5q-119 0 -226 -46.5t-190 -138.5t-132.5 -228t-49.5 -316q0 -92 22.5 -174t69 -143.5t115 -97.5t162.5 -36q66 0 113 13.5t94 37.5l84 400 l-229 40l20 97h238h139l-133 -631q-145 -109 -361 -109q-102 0 -193 37t-161 110t-111 181.5t-41 253.5z" />
-<glyph unicode="H" horiz-adv-x="1308" d="M82 0l303 1434h164l-131 -625h649l131 625h164l-303 -1434h-164l139 657h-651l-137 -657h-164z" />
-<glyph unicode="I" horiz-adv-x="567" d="M127 0l303 1434h164l-303 -1434h-164z" />
-<glyph unicode="J" horiz-adv-x="569" d="M-125 12l62 146q39 -27 110 -27q43 0 71.5 15.5t49 45t34 70.5t23.5 94l230 1078h163l-237 -1119q-18 -82 -44 -144t-66 -105t-98 -64.5t-140 -21.5q-16 0 -38 2t-44.5 6t-43 10t-32.5 14z" />
-<glyph unicode="K" horiz-adv-x="1179" d="M82 0l303 1434h164l-143 -668l81 29l588 639h203l-586 -623l-94 -63l80 -82l358 -666h-186l-361 664h-104l-139 -664h-164z" />
-<glyph unicode="L" horiz-adv-x="1007" d="M82 0l303 1434h164l-273 -1282h644l-31 -152h-647h-160z" />
-<glyph unicode="M" horiz-adv-x="1544" d="M82 0l305 1434h113l266 -734l31 -159h2l94 164l559 729h145l-305 -1434h-164l205 963l64 215h-8l-115 -197l-492 -647h-49l-235 647l-31 197h-8l-17 -213l-204 -965h-156z" />
-<glyph unicode="N" horiz-adv-x="1314" d="M82 0l309 1456h82l447 -958l67 -201h8l19 201l200 936h154l-309 -1457h-76l-448 961l-70 211h-6l-25 -211l-198 -938h-154z" />
-<glyph unicode="O" horiz-adv-x="1333" d="M145 524q0 188 51.5 358.5t146.5 298.5t229.5 202.5t297.5 74.5q98 0 182.5 -29.5t144.5 -94t94 -167t34 -249.5q0 -193 -51 -364t-143.5 -300t-220.5 -204t-281 -75q-242 0 -363 140.5t-121 408.5zM317 526q0 -193 80 -298t236 -105q115 0 210 63.5t164.5 172t107.5 252 t38 302.5q0 119 -26.5 197t-70.5 122t-100.5 61.5t-113.5 17.5q-117 0 -213.5 -64.5t-165 -173t-107.5 -251t-39 -296.5z" />
-<glyph unicode="P" horiz-adv-x="1089" d="M82 0l301 1419q78 18 164 24.5t170 6.5q94 0 175 -20.5t140.5 -65.5t93 -115.5t33.5 -169.5q0 -156 -56 -260t-147.5 -166.5t-206 -89t-231.5 -26.5h-31.5t-46 1t-47 3t-33.5 4l-114 -545h-164zM393 694q8 -4 27.5 -5t41 -3t42 -2h31.5q88 0 169.5 18.5t144 63.5 t100.5 116.5t38 180.5q0 74 -24.5 121t-66.5 72.5t-97.5 36t-116.5 10.5q-47 0 -91 -3.5t-73 -9.5z" />
-<glyph unicode="Q" horiz-adv-x="1333" d="M145 524q0 188 51.5 358.5t146.5 298.5t229.5 202.5t297.5 74.5q98 0 182.5 -29.5t144.5 -94t94 -167t34 -249.5q0 -193 -51 -364t-143.5 -300t-220.5 -204t-281 -75q-242 0 -363 140.5t-121 408.5zM317 526q0 -193 80 -298t236 -105q115 0 210 63.5t164.5 172t107.5 252 t38 302.5q0 119 -26.5 197t-70.5 122t-100.5 61.5t-113.5 17.5q-117 0 -213.5 -64.5t-165 -173t-107.5 -251t-39 -296.5zM360 -250l31 150q55 12 109 12q82 0 157.5 -21.5t154.5 -46t163 -46t180 -21.5q84 0 174 20l-33 -147q-49 -14 -95 -19.5t-91 -5.5q-98 0 -186 21.5 t-169 46t-156 46t-146 21.5q-23 0 -46.5 -2t-46.5 -8z" />
-<glyph unicode="R" horiz-adv-x="1163" d="M82 0l301 1419q86 16 166 23.5t160 7.5q78 0 151.5 -19.5t130 -61.5t90 -109.5t33.5 -163.5q0 -180 -105.5 -300t-306.5 -155l74 -74l221 -567h-178l-246 618l-192 31l-135 -649h-164zM406 762h141q74 0 144.5 14.5t126.5 51t90 100t34 159.5q0 37 -14.5 75t-43 70 t-76 51.5t-110.5 19.5q-49 0 -98 -3.5t-82 -9.5z" />
-<glyph unicode="S" horiz-adv-x="1034" d="M35 51l84 150q47 -27 128 -52.5t191 -25.5q63 0 127 11t115 40t83 76t32 119q0 74 -38 125t-95.5 93t-124 81t-124 90t-95 120.5t-37.5 172.5q0 109 39.5 186.5t108.5 126.5t162 71.5t197 22.5q119 0 213.5 -18.5t147.5 -46.5l-82 -146q-41 23 -122 43.5t-187 20.5 q-135 0 -220 -61.5t-85 -178.5q0 -76 37.5 -128t95 -94t124 -81t124 -89t95.5 -120t38 -170q0 -199 -143.5 -306.5t-411.5 -107.5q-137 0 -232.5 24t-144.5 52z" />
-<glyph unicode="T" horiz-adv-x="1081" d="M225 1282l31 152h1008l-31 -152h-424l-270 -1282h-164l270 1282h-420z" />
-<glyph unicode="U" horiz-adv-x="1265" d="M178 338q0 84 23 190l190 906h164l-190 -908q-23 -90 -23 -164q0 -129 67.5 -179t200.5 -50q80 0 140.5 22.5t104.5 69.5t73.5 121t52.5 178l193 910h155l-201 -957q-29 -131 -71.5 -225t-107 -153.5t-154.5 -88t-209 -28.5q-113 0 -191 25.5t-126 71.5t-69.5 112.5 t-21.5 146.5z" />
-<glyph unicode="V" horiz-adv-x="1107" d="M213 1434h168l137 -981v-220h4l92 224l543 977h176l-823 -1457h-76z" />
-<glyph unicode="W" horiz-adv-x="1613" d="M233 1434h168l37 -957l-18 -237h2l80 241l481 953h88l76 -957l-19 -237h2l82 241l437 953h168l-689 -1457h-90l-77 961l12 217h-8l-82 -219l-480 -959h-90z" />
-<glyph unicode="X" horiz-adv-x="1204" d="M-14 0l606 733l-266 701h178l176 -486l25 -117l69 117l391 486h199l-571 -695l290 -739h-178l-196 514l-29 123l-78 -123l-418 -514h-198z" />
-<glyph unicode="Y" horiz-adv-x="1087" d="M221 1434h178l183 -627l6 -125h2l61 129l445 623h184l-623 -863l-120 -571h-164l121 569z" />
-<glyph unicode="Z" d="M-2 0l31 154l891 1046l100 82h-750l31 152h916l-31 -154l-897 -1053l-96 -75h751l-31 -152h-915z" />
-<glyph unicode="[" horiz-adv-x="595" d="M33 -471l403 1905h156h199l-31 -144h-199l-344 -1618h201l-31 -143h-201h-153z" />
-<glyph unicode="\" horiz-adv-x="778" d="M84 1401l141 57l695 -1685l-136 -60z" />
-<glyph unicode="]" horiz-adv-x="600" d="M-129 -471l31 143h196l342 1618h-198l30 144h203h152l-404 -1905h-153h-199z" />
-<glyph unicode="^" horiz-adv-x="1024" d="M209 891l381 565h59l346 -565h-170l-161 276l-48 142l-63 -144l-191 -274h-153z" />
-<glyph unicode="_" horiz-adv-x="835" d="M-90 -281h835v-139h-835v139z" />
-<glyph unicode="`" horiz-adv-x="487" d="M602 1432l8 43h187l59 -306h-88z" />
-<glyph unicode="a" horiz-adv-x="997" d="M92 293q0 131 34 266t104.5 243.5t182 178.5t269.5 70q57 0 140 -13.5t155 -36.5l-129 -598q-16 -76 -22.5 -153.5t-6.5 -145.5v-58.5t4 -49.5h-114l-29 178h-8q-25 -35 -61 -70.5t-79 -64.5t-92 -46.5t-104 -17.5q-244 0 -244 318zM256 293q0 -78 30.5 -132.5 t96.5 -54.5q49 0 94 24t85 58.5t71 74.5t49 75l115 553q-61 29 -156 29q-94 0 -166 -55.5t-121 -144.5t-73.5 -201.5t-24.5 -225.5z" />
-<glyph unicode="b" horiz-adv-x="1067" d="M88 63l291 1371h153l-124 -586h8q29 37 65.5 72.5t81.5 64.5t96.5 46.5t110.5 17.5q121 0 176 -85t55 -214q0 -184 -51 -326.5t-135 -241t-191.5 -149.5t-220.5 -51q-111 0 -193.5 24.5t-121.5 56.5zM260 156q61 -43 174 -43q66 0 137.5 40t131 116.5t97.5 188t38 255.5 q0 104 -32 154.5t-85 50.5q-51 0 -104.5 -26t-101.5 -67t-88 -91t-65 -97z" />
-<glyph unicode="c" horiz-adv-x="860" d="M102 303q0 174 47.5 312.5t126 234.5t181 147.5t211.5 51.5q78 0 128 -14.5t91 -33.5l-58 -127q-35 20 -86 32t-110 12q-70 0 -136.5 -47.5t-117.5 -124t-82 -176t-31 -203.5q0 -133 55.5 -197t149.5 -64q61 0 129 28t109 56l39 -102q-31 -27 -71 -47.5t-82 -34.5 t-83 -22.5t-78 -8.5q-100 0 -164.5 32t-101.5 81t-51.5 106.5t-14.5 108.5z" />
-<glyph unicode="d" horiz-adv-x="1042" d="M102 322q0 121 35 248.5t102.5 232t169 172t234.5 67.5q37 0 63.5 -2t50 -6t44 -11t43.5 -15l90 426h153l-229 -1082q-16 -80 -24.5 -149.5t-8.5 -128.5q0 -23 1 -41.5t3 -36.5h-102l-29 178h-8q-25 -35 -61.5 -70.5t-81.5 -64.5t-95.5 -46.5t-103.5 -17.5 q-113 0 -179.5 83t-66.5 264zM266 311q0 -84 33 -144.5t107 -60.5q43 0 88 24t84.5 58.5t71.5 74.5t50 75l115 532q-35 23 -79 32t-115 9q-82 0 -147.5 -50t-112 -134t-71 -192.5t-24.5 -223.5z" />
-<glyph unicode="e" horiz-adv-x="948" d="M102 332q0 168 47.5 301t124 225t174 141.5t199.5 49.5q74 0 128 -20.5t89 -54.5t51.5 -78t16.5 -93q0 -145 -141.5 -228t-411.5 -83q-25 0 -51.5 1t-55.5 3q-8 -39 -12 -74t-4 -62q0 -113 51 -183.5t160 -70.5q90 0 165 30t116 63l49 -99q-72 -61 -169.5 -93t-195.5 -32 q-164 0 -247 94.5t-83 262.5zM301 610q78 0 162 4t152.5 21.5t113.5 55.5t45 106q0 20 -7 41.5t-23.5 39t-46 29t-74.5 11.5q-113 0 -196 -77t-126 -231z" />
-<glyph unicode="f" horiz-adv-x="569" d="M-233 -385l45 115q41 -14 74.5 -19.5t82.5 -5.5q78 0 117 75t66 236l143 877h-158l27 131h149l27 137q14 76 34.5 131.5t54.5 92t84 55t122 18.5q68 0 131 -13t115 -36l-45 -121q-100 39 -191 39q-76 0 -110.5 -52t-53.5 -167l-14 -84h207l-25 -131h-200l-164 -963 q-12 -76 -34 -140t-56.5 -112.5t-88 -76t-129.5 -27.5q-61 0 -113 9t-97 32z" />
-<glyph unicode="g" horiz-adv-x="1034" d="M10 -342l68 115q16 -8 39.5 -21.5t57.5 -26t82 -20.5t114 -8q102 0 171.5 73.5t104.5 231.5l37 172h-8q-29 -39 -62.5 -73.5t-74.5 -62.5t-89.5 -44.5t-105.5 -16.5q-111 0 -178.5 80t-67.5 228q0 137 38 272t113 242.5t184.5 175t252.5 67.5q111 0 186.5 -18t133.5 -45 l-218 -1026q-43 -201 -148 -294t-280 -93q-133 0 -219 33.5t-131 58.5zM262 311q0 -94 38 -148t101 -54q51 0 101.5 26.5t92.5 68.5t76 91t56 92l104 494q-33 18 -79.5 24t-96.5 6q-84 0 -155.5 -49t-123.5 -132t-83 -191.5t-31 -227.5z" />
-<glyph unicode="h" horiz-adv-x="1083" d="M74 0l303 1434h153l-127 -586h9q27 33 64.5 67.5t86.5 64.5t106.5 49.5t125.5 19.5q100 0 157.5 -48.5t57.5 -175.5q0 -86 -27 -207l-131 -618h-154l123 584q12 61 20.5 109t8.5 85q0 76 -31 108t-96 32q-53 0 -108.5 -28t-106.5 -71t-91 -96t-61 -102l-129 -621h-153z " />
-<glyph unicode="i" horiz-adv-x="530" d="M111 0l217 1024h153l-217 -1024h-153zM360 1337q0 47 32 80t79 33t80 -33t33 -80t-33 -78.5t-80 -31.5t-79 31.5t-32 78.5z" />
-<glyph unicode="j" horiz-adv-x="509" d="M-197 -422l31 133q61 0 101 17.5t68 54.5t47.5 92t35.5 131l217 1018h154l-230 -1079q-41 -190 -127 -280.5t-233 -90.5q-16 0 -31.5 1t-32.5 3zM336 1337q0 47 31.5 80t78.5 33t80 -33t33 -80t-32.5 -78.5t-80.5 -31.5q-47 0 -78.5 31.5t-31.5 78.5z" />
-<glyph unicode="k" horiz-adv-x="919" d="M74 0l303 1434h153l-186 -873l88 23l369 440h188l-364 -416l-97 -67l78 -80l230 -461h-170l-232 461h-110l-97 -461h-153z" />
-<glyph unicode="l" horiz-adv-x="552" d="M102 135q0 41 13 101l254 1198h153l-250 -1190q-6 -35 -6 -58q0 -39 13.5 -56t35.5 -17q41 0 69 5t67 19v-117q-18 -10 -43 -17t-50.5 -11t-51 -7t-46.5 -3q-72 0 -115 32.5t-43 120.5z" />
-<glyph unicode="m" horiz-adv-x="1562" d="M74 0l217 1024h108l-12 -176h8q33 33 71 68.5t84 64.5t100.5 48.5t119.5 19.5q92 0 124 -57.5t32 -160.5q31 39 71.5 78t89 70t101.5 50.5t106 19.5q94 0 144.5 -44t50.5 -163q0 -86 -31 -228l-129 -614h-153l129 616q12 59 19 106.5t7 82.5q0 55 -22.5 84t-75.5 29 q-43 0 -91 -28t-93 -69t-81 -88t-57 -88l-133 -645h-153l123 580q16 72 24 127t8 96q0 55 -20.5 85t-69.5 30q-51 0 -100 -27t-92 -67t-79 -85t-57 -82l-135 -657h-153z" />
-<glyph unicode="n" horiz-adv-x="1069" d="M74 0l217 1024h106l-8 -176h8q27 33 64 68.5t83 64.5t103.5 48.5t126.5 19.5q102 0 161.5 -49.5t59.5 -172.5q0 -61 -18 -147l-146 -680h-153l137 647q8 37 14.5 73t6.5 64q0 59 -28 96.5t-103 37.5q-53 0 -104.5 -25t-96.5 -62.5t-81 -84t-61 -91.5l-135 -655h-153z" />
-<glyph unicode="o" horiz-adv-x="1019" d="M102 319q0 162 42 296.5t116 230.5t171 149.5t208 53.5q86 0 146.5 -28t98.5 -76t54 -110.5t16 -129.5q0 -154 -40 -287t-110.5 -231.5t-164.5 -155t-205 -56.5q-92 0 -154.5 30t-102.5 79t-57.5 110.5t-17.5 124.5zM266 356q0 -121 45 -185.5t144 -64.5q68 0 128 48.5 t106 130.5t74 187.5t28 219.5q0 104 -38 165t-145 61q-68 0 -129 -46.5t-109 -124t-76 -179t-28 -212.5z" />
-<glyph unicode="p" horiz-adv-x="1040" d="M-10 -410l305 1434h106l-10 -176h8q29 37 65 72.5t79 64.5t94 46.5t111 17.5q49 0 92 -15.5t75.5 -51.5t52 -95.5t19.5 -145.5q0 -180 -49 -322.5t-129 -240.5t-179.5 -150.5t-197.5 -52.5q-72 0 -126 13.5t-73 27.5l-90 -426h-153zM264 154q35 -27 72 -37.5t80 -10.5 q80 0 152.5 44.5t130 126t91 196.5t33.5 256q0 82 -33.5 135.5t-99.5 53.5q-55 0 -105 -29t-92 -71t-75 -90t-53 -89z" />
-<glyph unicode="q" horiz-adv-x="1030" d="M94 289q0 137 45 272t125 241.5t190.5 173t243.5 66.5q43 0 87 -6t83 -15t72 -20.5t51 -23.5l-295 -1387h-153l125 582h-9q-25 -33 -56.5 -67.5t-71 -63.5t-89 -47.5t-104.5 -18.5q-66 0 -113 24t-75.5 65.5t-42 99t-13.5 125.5zM258 303q0 -98 32 -147.5t91 -49.5 q51 0 103.5 31t97.5 77t79.5 98.5t55.5 95.5l102 473q-33 18 -79 24t-81 6q-80 0 -152.5 -51t-127.5 -136t-88 -194.5t-33 -226.5z" />
-<glyph unicode="r" horiz-adv-x="669" d="M74 0l217 1024h106v-176h9q25 39 53 72.5t63 60.5t76 42t90 15q45 0 94 -14l-41 -135q-18 4 -37.5 6t-35.5 2q-104 0 -180 -65.5t-119 -159.5l-142 -672h-153z" />
-<glyph unicode="s" horiz-adv-x="815" d="M6 41l57 129q41 -27 108 -45.5t138 -18.5q100 0 160.5 44.5t60.5 138.5q0 53 -26.5 90t-67.5 66.5t-88 58t-88 64.5t-67.5 84t-26.5 120q0 57 27.5 107.5t75.5 88.5t115 59.5t144 21.5q109 0 168.5 -14.5t106.5 -41.5l-51 -123q-82 47 -224 48q-86 0 -142 -36t-56 -110 q0 -43 26.5 -74.5t67.5 -60.5t88 -58.5t88 -67.5t67.5 -89t26.5 -121q0 -160 -107.5 -243t-287.5 -83q-92 0 -169 18.5t-124 47.5z" />
-<glyph unicode="t" horiz-adv-x="641" d="M115 893l30 131h152l43 203l164 47l-53 -250h268l-31 -131h-266l-129 -619q-4 -25 -7 -45t-3 -36q0 -49 22.5 -68t67.5 -19q49 0 90 12.5t82 37.5v-125q-43 -25 -110.5 -40.5t-129.5 -15.5q-186 0 -186 170q0 35 10 86l139 662h-153z" />
-<glyph unicode="u" horiz-adv-x="1046" d="M123 197q0 72 20 161l140 666h153l-143 -682q-12 -55 -12 -102q0 -57 22.5 -95.5t81.5 -38.5q49 0 99.5 25t96.5 63.5t83.5 86t62.5 92.5l137 651h154l-129 -608q-8 -35 -16.5 -85t-15.5 -105.5t-11 -107.5t-4 -91v-27h-121v195h-8q-31 -41 -71 -80t-88 -70t-103.5 -50.5 t-116.5 -19.5q-45 0 -83 10.5t-66.5 36t-45 67.5t-16.5 108z" />
-<glyph unicode="v" horiz-adv-x="915" d="M123 1024h164l106 -600l19 -195h4l88 199l346 596h176l-639 -1047h-65z" />
-<glyph unicode="w" horiz-adv-x="1402" d="M117 1024h155l64 -596l-4 -199h8l82 203l338 592h114l97 -598l8 -197h2l80 201l301 594h156l-551 -1047h-78l-109 676l-2 168h-4l-76 -170l-389 -674h-73z" />
-<glyph unicode="x" horiz-adv-x="991" d="M-45 0l461 524l-219 500h174l121 -283l36 -116l84 116l248 283h187l-435 -492l244 -532h-174l-139 311l-41 123l-86 -123l-275 -311h-186z" />
-<glyph unicode="y" horiz-adv-x="899" d="M-41 -401l49 141q23 -8 49 -8q59 0 119 61.5t133 206.5l-176 1024h164l100 -664l11 -196h10l78 198l340 662h163l-483 -913q-53 -100 -105.5 -195.5t-107.5 -170.5t-114.5 -120t-122.5 -45q-35 0 -60.5 4t-46.5 15z" />
-<glyph unicode="z" horiz-adv-x="878" d="M-4 0l27 141l575 654l113 88h-529l31 141h690l-31 -141l-581 -660l-111 -82h535l-29 -141h-690z" />
-<glyph unicode="{" horiz-adv-x="667" d="M154 412l30 139q152 0 191 174l106 496q20 96 78.5 155.5t151.5 59.5h166l-31 -144h-98q-53 0 -83 -27.5t-44 -93.5l-101 -485q-18 -90 -69.5 -137t-106.5 -57l-2 -13q41 -6 70.5 -47t27.5 -106q0 -10 -3 -24.5t-12 -65t-31.5 -153.5t-63.5 -290q-2 -12 -4 -22.5 t-2 -20.5q-2 -78 86 -78h96l-33 -143h-166q-72 0 -110.5 40t-36.5 114q0 29 8 59l102 487q8 37 9 66q4 66 -30 91.5t-95 25.5z" />
-<glyph unicode="|" horiz-adv-x="487" d="M236 -266v1700h141v-1700h-141z" />
-<glyph unicode="}" horiz-adv-x="677" d="M-129 -471l33 143h96q51 0 81 28t42 93l102 486q20 90 70.5 137t107.5 57l5 12q-45 6 -75 47t-28 107q0 10 2 23.5t4 25.5l105 483q4 12 5 22.5t1 20.5q2 78 -84 78h-94l28 144h166q72 0 112 -39t36 -115q0 -29 -8 -59l-103 -488q-8 -35 -8 -61q-2 -68 31.5 -94.5 t95.5 -26.5l-33 -139q-74 0 -123 -43t-69 -131q0 -2 -5.5 -24.5t-12.5 -57.5l-16 -80l-18 -90q-23 -109 -51 -244q-20 -96 -79.5 -155.5t-151.5 -59.5h-164z" />
-<glyph unicode="~" horiz-adv-x="983" d="M94 739q88 68 160 94.5t131 26.5q57 0 106.5 -17.5t94.5 -39t88 -38.5t90 -17q39 0 80 16t88 57l69 -125q-78 -53 -140 -74.5t-113 -21.5q-55 0 -101.5 17.5t-88.5 39t-84 39t-91 17.5q-47 0 -100.5 -21.5t-118.5 -75.5z" />
-<glyph unicode="&#xa1;" horiz-adv-x="593" d="M37 -410l151 711l109 361h96l-45 -361l-151 -711h-160zM268 928q0 55 33 87t86 32t86 -32t33 -87q0 -53 -33 -86t-86 -33t-86 33t-33 86z" />
-<glyph unicode="&#xa2;" d="M207 303q0 158 39 286t105.5 223t154.5 153.5t186 74.5l41 189h137l-41 -182q53 -6 93.5 -18.5t74.5 -27.5l-57 -127q-27 16 -65.5 26.5t-86.5 14.5l-170 -804q55 8 110.5 32.5t90.5 46.5l39 -102q-51 -43 -120.5 -69.5t-135.5 -36.5l-39 -187h-135l39 185 q-78 12 -129 46.5t-80 81t-40 97.5t-11 98zM371 367q0 -113 37.5 -175.5t105.5 -78.5l168 796q-61 -16 -117.5 -66t-99.5 -124t-68.5 -165t-25.5 -187z" />
-<glyph unicode="&#xa3;" d="M76 0l30 145q61 0 118 31t100 83t68.5 124t25.5 158q0 41 -4 74.5t-11 66.5h-192l31 131h133q-8 37 -12.5 79t-4.5 95q0 117 41 206t110 147.5t161 88t196 29.5q82 0 155 -17.5t120 -43.5l-56 -131q-41 23 -106.5 37t-147.5 14q-63 0 -119.5 -21.5t-98.5 -63.5 t-66.5 -102.5t-24.5 -138.5q0 -63 5 -104t14 -74h317l-31 -131h-256q4 -25 6.5 -55.5t2.5 -71.5q0 -68 -13.5 -125t-33 -103t-44 -80t-47.5 -54l-92 -70l-2 -10l127 28h500l-31 -141h-868z" />
-<glyph unicode="&#xa4;" d="M86 293l158 160l69 45q-63 86 -63 209q0 59 17.5 112t45.5 99l-69 43l-158 159l100 101l160 -158l43 -72q86 68 211 68q121 0 211 -68l45 72l160 158l98 -101l-156 -159l-71 -46q66 -88 65 -208q0 -123 -65 -211l71 -43l156 -160l-98 -98l-160 157l-43 68 q-88 -63 -213 -64q-127 0 -211 64l-43 -68l-160 -157zM391 707q0 -92 58.5 -153.5t150.5 -61.5t151.5 61t59.5 154q0 92 -59.5 154.5t-151.5 62.5t-150.5 -62.5t-58.5 -154.5z" />
-<glyph unicode="&#xa5;" d="M184 297l25 123h240l26 129h-237l26 123h182l-235 762h178l189 -627l6 -125h2l61 129l436 623h185l-551 -762h182l-27 -123h-233l-27 -129h234l-27 -123h-233l-62 -297h-164l62 297h-238z" />
-<glyph unicode="&#xa6;" horiz-adv-x="487" d="M236 -266v688h141v-688h-141zM236 745v689h141v-689h-141z" />
-<glyph unicode="&#xa7;" horiz-adv-x="968" d="M98 49l66 125q41 -23 99.5 -41t131.5 -18q82 0 137.5 31.5t55.5 107.5q0 45 -29 75.5t-74 54.5t-99 48.5t-99 57t-76 79.5t-31 121q0 90 44 153.5t114 110.5l94 37q-47 39 -66.5 82t-19.5 94q0 61 28.5 114.5t78 92.5t116 61.5t144.5 22.5q106 0 170.5 -18.5t111.5 -46.5 l-59 -125q-41 23 -101.5 37t-132.5 14q-88 0 -142 -44t-54 -114q0 -43 32.5 -69.5t78 -47t99.5 -41t99 -52t76 -79t31 -122.5q0 -88 -47.5 -158t-112.5 -111l-111 -37q47 -33 72 -75.5t25 -114.5q0 -70 -30 -122t-79 -87t-114.5 -52.5t-139.5 -17.5q-106 0 -173 22.5 t-114 51.5zM344 713q0 -43 18.5 -74t49 -53.5t72.5 -40t89 -35.5q31 12 63 31.5t59.5 46t45 61.5t17.5 78q0 45 -18.5 73.5t-51.5 50t-76 38t-92 37.5q-31 -12 -62.5 -32t-57 -45.5t-41 -59t-15.5 -76.5z" />
-<glyph unicode="&#xa8;" horiz-adv-x="501" d="M399 1337q0 45 26 75t69 30t69.5 -30t26.5 -75q0 -41 -26.5 -70.5t-69.5 -29.5t-69 29.5t-26 70.5zM774 1339q0 43 25.5 73t68.5 30q45 0 71 -30t26 -73t-26 -72.5t-71 -29.5q-43 0 -68.5 29.5t-25.5 72.5z" />
-<glyph unicode="&#xa9;" horiz-adv-x="1650" d="M158 594q0 170 57 304t155.5 226.5t229.5 141.5t279 49q147 0 278 -49t229.5 -141.5t155.5 -226.5t57 -304t-57 -304t-155.5 -226.5t-229.5 -141.5t-278 -49q-164 0 -297 49t-227.5 141.5t-145.5 226.5t-51 304zM301 594q0 -141 45 -251t123 -183.5t183.5 -112.5 t226.5 -39t226 39t183 112.5t123 183.5t45 251t-45 250.5t-123 183.5t-183.5 113t-225.5 39q-121 0 -226.5 -39t-183.5 -113t-123 -183.5t-45 -250.5zM535 594q0 186 93 287.5t246 101.5q37 0 67 -4t55.5 -11t50 -17.5t55.5 -22.5l-53 -125q-45 23 -86 31t-70 8 q-86 0 -140.5 -53.5t-54.5 -194.5q0 -119 53.5 -183.5t157.5 -66.5q96 0 164 37l43 -121q-47 -27 -105.5 -41t-136.5 -14q-166 0 -252.5 104.5t-86.5 284.5z" />
-<glyph unicode="&#xaa;" horiz-adv-x="780" d="M123 946q0 63 29.5 108.5t79 75t114 43t135.5 13.5q29 0 57.5 -2t57.5 -6q12 39 12 69q0 88 -116 88q-78 0 -132.5 -15t-95.5 -34l-10 100q53 27 126 45.5t171 18.5q96 0 146.5 -43t50.5 -109q0 -51 -15.5 -117.5t-35 -138t-35 -140t-15.5 -124.5h-102l-6 94h-7 q-35 -35 -88 -68.5t-137 -33.5q-92 0 -138 52t-46 124zM264 961q0 -33 20.5 -54.5t65.5 -21.5q84 0 132 38t73 74l16 86q-20 2 -39.5 2h-42.5q-43 0 -82.5 -5t-71.5 -18t-51.5 -38t-19.5 -63z" />
-<glyph unicode="&#xab;" horiz-adv-x="929" d="M78 530l409 471l93 -96l-254 -297l-117 -76l72 -75l137 -291l-111 -88zM434 530l406 467l90 -94l-252 -295l-115 -76l70 -75l137 -289l-111 -86z" />
-<glyph unicode="&#xac;" horiz-adv-x="1034" d="M137 655v148h869v-393h-144v245h-725z" />
-<glyph unicode="&#xad;" horiz-adv-x="700" d="M129 520l33 139h471l-35 -139h-469z" />
-<glyph unicode="&#xae;" horiz-adv-x="1433" d="M281 924q0 131 43 232t117.5 170t173 104.5t208.5 35.5q113 0 212.5 -35.5t173 -104.5t115.5 -170t42 -232t-43 -232.5t-118 -170t-173 -104.5t-209 -36q-115 0 -213 36t-171.5 104.5t-115.5 170t-42 232.5zM410 924q0 -106 32.5 -185.5t89 -131.5t132 -78.5t159.5 -26.5 q88 0 164 25.5t131.5 77.5t87 131t31.5 188q0 106 -33 185t-89 131t-131 79t-161 27q-90 0 -165.5 -27t-131 -79t-86 -131t-30.5 -185zM612 659v531q33 10 92.5 15t112.5 5q86 0 147.5 -35.5t61.5 -123.5q0 -66 -42 -101t-103 -39l57 -28l152 -224h-125l-148 213l-98 31 v-244h-107zM719 965h69q59 0 92 18t33 64q1 71 -118 71q-23 0 -43.5 -1t-32.5 -7v-145z" />
-<glyph unicode="&#xaf;" horiz-adv-x="641" d="M635 1190l29 127h575l-27 -127h-577z" />
-<glyph unicode="&#xb0;" horiz-adv-x="870" d="M289 1169q0 63 22.5 116.5t61.5 91.5t92 59.5t113 21.5q59 0 112 -19.5t92 -57.5t61.5 -91t22.5 -121t-22.5 -121t-61.5 -90.5t-92 -57t-112 -19.5t-112.5 19.5t-92.5 57t-61.5 90.5t-22.5 121zM420 1169q0 -78 47 -121.5t111 -43.5q63 0 110 44t47 121q0 78 -47 122 t-110 44t-110.5 -44t-47.5 -122z" />
-<glyph unicode="&#xb1;" horiz-adv-x="983" d="M113 365v147h868v-147h-868zM113 862v148h360v370h148v-370h360v-148h-360v-246h-148v246h-360z" />
-<glyph unicode="&#xb2;" horiz-adv-x="772" d="M182 778l15 68q37 27 89 66.5t109.5 89t112.5 104.5t100 111.5t73 109.5t28 100q0 94 -113 95q-53 0 -106.5 -19.5t-94.5 -44.5l-18 117q57 37 129 57.5t141 20.5q37 0 74 -9.5t65.5 -32t47 -59.5t18.5 -92q0 -66 -29.5 -132t-80 -133t-116 -129.5t-134.5 -119.5 l-103 -63v-6l117 32h268l-28 -131h-564z" />
-<glyph unicode="&#xb3;" horiz-adv-x="772" d="M236 803l53 123q29 -16 72 -27.5t96 -11.5q115 0 169 56t54 134q0 55 -32.5 83t-131.5 28h-106l8 47l237 240l78 53l-98 -13h-248l27 123h497l-14 -67l-254 -254l-53 -37l-2 -4l45 6q78 0 132 -50t54 -136q0 -66 -20.5 -126.5t-65.5 -106.5t-117.5 -72.5t-179.5 -26.5 q-70 0 -118 12t-82 27z" />
-<glyph unicode="&#xb4;" horiz-adv-x="487" d="M690 1169l180 306h172l-10 -43l-252 -263h-90z" />
-<glyph unicode="&#xb6;" horiz-adv-x="1013" d="M154 1036q0 76 23.5 147.5t68.5 127t110.5 89.5t147.5 34h92v-1700h-141v901q-66 0 -121 33.5t-95 90t-62.5 129.5t-22.5 148zM774 -266v1700h141v-1700h-141z" />
-<glyph unicode="&#xb7;" horiz-adv-x="546" d="M201 606q0 55 32.5 87t85.5 32t86 -31.5t33 -87.5q0 -53 -32.5 -86t-86.5 -33q-53 0 -85.5 33t-32.5 86z" />
-<glyph unicode="&#xb8;" horiz-adv-x="743" d="M485 -418l35 80q10 -2 21.5 -2h21.5q43 0 72 8t45 19.5t22.5 26t6.5 26.5q0 39 -43 57.5t-115 18.5l133 184h109l-68 -88q55 -6 91 -42t36 -101q0 -86 -64.5 -141.5t-193.5 -55.5q-25 0 -52.5 3t-56.5 7z" />
-<glyph unicode="&#xb9;" horiz-adv-x="772" d="M238 778l26 125h207l111 520l28 74l-63 -57l-166 -92l-43 94l348 211h80l-160 -750h185l-27 -125h-526z" />
-<glyph unicode="&#xba;" horiz-adv-x="776" d="M123 1004q0 119 36 204.5t91 141t122.5 82t133.5 26.5q117 0 177 -63.5t60 -180.5q0 -111 -30.5 -194.5t-82.5 -141t-123 -87t-149 -29.5q-104 0 -169.5 63.5t-65.5 178.5zM264 1020q0 -66 30 -102.5t89 -36.5q43 0 83 22.5t70.5 64.5t48 102t17.5 136q0 72 -31.5 102.5 t-89.5 30.5q-43 0 -83 -25.5t-69.5 -68.5t-47 -101t-17.5 -124z" />
-<glyph unicode="&#xbb;" horiz-adv-x="929" d="M78 174l252 295l114 78l-71 88l-140 289l117 73l223 -448l-405 -467zM428 172l254 297l115 78l-72 90l-141 291l118 73l228 -452l-410 -471z" />
-<glyph unicode="&#xbc;" horiz-adv-x="1632" d="M276 1243l355 205h80l-187 -875h-135l135 646l31 73l-64 -57l-165 -92zM312 49l997 1411l107 -74l-998 -1411zM838 197l14 76l569 618h88l-121 -573h162l-26 -121h-160l-43 -197h-131l43 197h-395zM1005 307l101 11h151l56 262l34 100h-4l-63 -94l-197 -215z" />
-<glyph unicode="&#xbd;" horiz-adv-x="1656" d="M276 1243l355 205h80l-187 -875h-135l135 646l31 73l-64 -57l-165 -92zM312 49l997 1411l107 -74l-998 -1411zM936 0l15 68q37 27 89 66.5t109.5 89t112.5 104.5t100 111.5t73 109.5t28 100q0 94 -113 95q-53 0 -106.5 -19.5t-94.5 -44.5l-18 117q57 37 129 57.5 t141 20.5q37 0 74 -9.5t65.5 -32t47 -59.5t18.5 -92q0 -66 -29.5 -132t-80 -133t-116 -129.5t-134.5 -119.5l-103 -63v-6l117 32h268l-28 -131h-564z" />
-<glyph unicode="&#xbe;" horiz-adv-x="1705" d="M207 598l53 123q29 -16 72 -27.5t96 -11.5q115 0 169 56t54 134q0 55 -32.5 83t-131.5 28h-106l8 47l237 240l78 53l-98 -13h-248l27 123h497l-14 -67l-254 -254l-53 -37l-2 -4l45 6q78 0 132 -50t54 -136q0 -66 -20.5 -126.5t-65.5 -106.5t-117.5 -72.5t-179.5 -26.5 q-70 0 -118 12t-82 27zM385 49l997 1411l107 -74l-998 -1411zM912 197l14 76l569 618h88l-121 -573h162l-26 -121h-160l-43 -197h-131l43 197h-395zM1079 307l101 11h151l56 262l34 100h-4l-63 -94l-197 -215z" />
-<glyph unicode="&#xbf;" horiz-adv-x="845" d="M-29 -184q0 111 35 191.5t88 144t117.5 118t123 111.5t102.5 123.5t59 157.5h131q-10 -102 -51 -179t-96.5 -139.5t-116 -116t-110.5 -109t-84 -116.5t-34 -141t42 -122t147 -42q72 0 141.5 27.5t128.5 62.5l41 -119q-41 -25 -80 -43t-82 -31.5t-93 -20.5t-114 -7 q-152 0 -223.5 69.5t-71.5 180.5zM479 930q0 55 33 87t86 32t86 -32t33 -87q0 -53 -33 -86t-86 -33t-86 33t-33 86z" />
-<glyph unicode="&#xc0;" horiz-adv-x="1140" d="M-68 0l828 1456h76l206 -1456h-157l-58 397h-499l-222 -397h-174zM408 545h403l-59 436l-4 217h-3l-92 -221zM540 1739l9 43h206l179 -242h-129z" />
-<glyph unicode="&#xc1;" horiz-adv-x="1140" d="M-68 0l828 1456h76l206 -1456h-157l-58 397h-499l-222 -397h-174zM408 545h403l-59 436l-4 217h-3l-92 -221zM675 1540l281 242h237l-10 -43l-358 -199h-150z" />
-<glyph unicode="&#xc2;" horiz-adv-x="1140" d="M-68 0l828 1456h76l206 -1456h-157l-58 397h-499l-222 -397h-174zM408 545h403l-59 436l-4 217h-3l-92 -221zM493 1530l10 45l301 207h99l203 -209l-9 -43h-139l-94 100l-21 72l-51 -70l-145 -102h-154z" />
-<glyph unicode="&#xc3;" horiz-adv-x="1140" d="M-68 0l828 1456h76l206 -1456h-157l-58 397h-499l-222 -397h-174zM408 545h403l-59 436l-4 217h-3l-92 -221zM526 1608q72 66 128.5 89t103.5 23q37 0 68.5 -10t61.5 -23.5t58.5 -23.5t59.5 -10q51 0 108 43l33 -88q-66 -53 -116 -71.5t-91 -18.5q-37 0 -67.5 10 t-60.5 23.5t-58.5 23.5t-59.5 10t-64.5 -13t-74.5 -48z" />
-<glyph unicode="&#xc4;" horiz-adv-x="1140" d="M-68 0l828 1456h76l206 -1456h-157l-58 397h-499l-222 -397h-174zM408 545h403l-59 436l-4 217h-3l-92 -221zM539 1626q0 41 28.5 68.5t75.5 27.5t75 -27.5t28 -68.5t-28 -67.5t-75 -26.5t-75.5 26.5t-28.5 67.5zM914 1626q0 41 27.5 68.5t74.5 27.5t75.5 -27.5 t28.5 -68.5t-28.5 -67.5t-75.5 -26.5t-74.5 26.5t-27.5 67.5z" />
-<glyph unicode="&#xc5;" horiz-adv-x="1140" d="M-68 0l803 1413q-129 35 -129 160q0 76 51.5 125t163.5 49q102 0 159.5 -44t57.5 -130q0 -72 -49 -118t-147 -52l200 -1403h-157l-58 397h-499l-222 -397h-174zM408 543h403l-59 438l-4 217h-3l-92 -221zM731 1573q0 -35 21.5 -58.5t68.5 -23.5q45 0 68.5 22.5t23.5 59.5 q0 39 -22.5 62.5t-69.5 23.5q-45 0 -67.5 -23.5t-22.5 -62.5z" />
-<glyph unicode="&#xc6;" horiz-adv-x="1648" d="M-127 0l1108 1434h750l-31 -150h-580l-100 -471h530l-32 -149h-529l-110 -514h589l-30 -150h-588h-164l86 403h-407l-304 -403h-188zM479 551h322l145 676h-6l-104 -207z" />
-<glyph unicode="&#xc7;" horiz-adv-x="1114" d="M145 561q0 231 68 400t178.5 280t248.5 164t280 53q117 0 190.5 -16.5t120.5 -38.5l-74 -150q-41 23 -107.5 38.5t-152.5 15.5q-115 0 -220.5 -50.5t-185 -144.5t-127 -229t-47.5 -303q0 -98 26 -181.5t74 -143.5t118.5 -94t160.5 -34q96 0 160 21.5t115 50.5l12 -140 q-66 -45 -140.5 -63.5t-170.5 -20.5l-49 -63q55 -6 91 -42t36 -101q0 -86 -64.5 -141.5t-193.5 -55.5q-25 0 -52.5 3t-56.5 7l35 80q10 -2 21.5 -2h21.5q43 0 71.5 8t45 19.5t22.5 26t6 26.5q0 39 -43 57.5t-114 18.5l118 166q-100 14 -178 64t-132 126t-83 175t-29 214z " />
-<glyph unicode="&#xc8;" horiz-adv-x="1044" d="M82 0l305 1434h739l-30 -152h-580l-100 -469h530l-31 -151h-530l-109 -510h590l-32 -152h-590h-162zM473 1739l9 43h206l179 -242h-129z" />
-<glyph unicode="&#xc9;" horiz-adv-x="1044" d="M82 0l305 1434h739l-30 -152h-580l-100 -469h530l-31 -151h-530l-109 -510h590l-32 -152h-590h-162zM643 1540l281 242h237l-10 -43l-358 -199h-150z" />
-<glyph unicode="&#xca;" horiz-adv-x="1044" d="M82 0l305 1434h739l-30 -152h-580l-100 -469h530l-31 -151h-530l-109 -510h590l-32 -152h-590h-162zM471 1530l10 45l301 207h99l203 -209l-9 -43h-139l-94 100l-21 72l-51 -70l-145 -102h-154z" />
-<glyph unicode="&#xcb;" horiz-adv-x="1044" d="M82 0l305 1434h739l-30 -152h-580l-100 -469h530l-31 -151h-530l-109 -510h590l-32 -152h-590h-162zM492 1626q0 41 28.5 68.5t75.5 27.5t75 -27.5t28 -68.5t-28 -67.5t-75 -26.5t-75.5 26.5t-28.5 67.5zM867 1626q0 41 27.5 68.5t74.5 27.5t75.5 -27.5t28.5 -68.5 t-28.5 -67.5t-75.5 -26.5t-74.5 26.5t-27.5 67.5z" />
-<glyph unicode="&#xcc;" horiz-adv-x="567" d="M127 0l303 1434h164l-303 -1434h-164zM256 1739l9 43h206l179 -242h-129z" />
-<glyph unicode="&#xcd;" horiz-adv-x="567" d="M127 0l303 1434h164l-303 -1434h-164zM387 1540l281 242h237l-10 -43l-358 -199h-150z" />
-<glyph unicode="&#xce;" horiz-adv-x="567" d="M127 0l303 1434h164l-303 -1434h-164zM227 1530l10 45l301 207h99l203 -209l-9 -43h-139l-94 100l-21 72l-51 -70l-145 -102h-154z" />
-<glyph unicode="&#xcf;" horiz-adv-x="567" d="M127 0l303 1434h164l-303 -1434h-164zM254 1626q0 41 28.5 68.5t75.5 27.5t75 -27.5t28 -68.5t-28 -67.5t-75 -26.5t-75.5 26.5t-28.5 67.5zM629 1626q0 41 27.5 68.5t74.5 27.5t75.5 -27.5t28.5 -68.5t-28.5 -67.5t-75.5 -26.5t-74.5 26.5t-27.5 67.5z" />
-<glyph unicode="&#xd0;" horiz-adv-x="1282" d="M57 680l27 123h176l135 631q78 10 176.5 13t178.5 3q119 0 217 -32t166.5 -97.5t105.5 -165.5t37 -235q0 -90 -16.5 -196t-54.5 -209t-101.5 -199.5t-157.5 -171t-220 -118.5t-292 -44q-31 0 -81 1t-103 3q-139 8 -160 12l146 682h-179zM285 141q8 -2 32.5 -3t52 -2 t53.5 -2t36 -1q178 0 300 74t198.5 186.5t111.5 247.5t35 256q0 92 -20.5 166t-64.5 126t-114 80.5t-168 28.5q-25 0 -55.5 -1t-59 -2t-55 -3t-41.5 -4l-102 -485h281l-25 -123h-283z" />
-<glyph unicode="&#xd1;" horiz-adv-x="1314" d="M82 0l309 1456h82l447 -958l67 -201h8l19 201l200 936h154l-309 -1457h-76l-448 961l-70 211h-6l-25 -211l-198 -938h-154zM591 1608q72 66 128.5 89t103.5 23q37 0 68.5 -10t61.5 -23.5t58.5 -23.5t59.5 -10q51 0 108 43l33 -88q-66 -53 -116 -71.5t-91 -18.5 q-37 0 -67.5 10t-60.5 23.5t-58.5 23.5t-59.5 10t-64.5 -13t-74.5 -48z" />
-<glyph unicode="&#xd2;" horiz-adv-x="1333" d="M145 524q0 188 51.5 358.5t146.5 298.5t229.5 202.5t297.5 74.5q98 0 182.5 -29.5t144.5 -94t94 -167t34 -249.5q0 -193 -51 -364t-143.5 -300t-220.5 -204t-281 -75q-242 0 -363 140.5t-121 408.5zM317 526q0 -193 80 -298t236 -105q115 0 210 63.5t164.5 172t107.5 252 t38 302.5q0 119 -26.5 197t-70.5 122t-100.5 61.5t-113.5 17.5q-117 0 -213.5 -64.5t-165 -173t-107.5 -251t-39 -296.5zM637 1739l9 43h206l179 -242h-129z" />
-<glyph unicode="&#xd3;" horiz-adv-x="1333" d="M145 524q0 188 51.5 358.5t146.5 298.5t229.5 202.5t297.5 74.5q98 0 182.5 -29.5t144.5 -94t94 -167t34 -249.5q0 -193 -51 -364t-143.5 -300t-220.5 -204t-281 -75q-242 0 -363 140.5t-121 408.5zM317 526q0 -193 80 -298t236 -105q115 0 210 63.5t164.5 172t107.5 252 t38 302.5q0 119 -26.5 197t-70.5 122t-100.5 61.5t-113.5 17.5q-117 0 -213.5 -64.5t-165 -173t-107.5 -251t-39 -296.5zM809 1540l281 242h237l-10 -43l-358 -199h-150z" />
-<glyph unicode="&#xd4;" horiz-adv-x="1333" d="M145 524q0 188 51.5 358.5t146.5 298.5t229.5 202.5t297.5 74.5q98 0 182.5 -29.5t144.5 -94t94 -167t34 -249.5q0 -193 -51 -364t-143.5 -300t-220.5 -204t-281 -75q-242 0 -363 140.5t-121 408.5zM317 526q0 -193 80 -298t236 -105q115 0 210 63.5t164.5 172t107.5 252 t38 302.5q0 119 -26.5 197t-70.5 122t-100.5 61.5t-113.5 17.5q-117 0 -213.5 -64.5t-165 -173t-107.5 -251t-39 -296.5zM604 1530l10 45l301 207h99l203 -209l-9 -43h-139l-94 100l-21 72l-51 -70l-145 -102h-154z" />
-<glyph unicode="&#xd5;" horiz-adv-x="1333" d="M145 524q0 188 51.5 358.5t146.5 298.5t229.5 202.5t297.5 74.5q98 0 182.5 -29.5t144.5 -94t94 -167t34 -249.5q0 -193 -51 -364t-143.5 -300t-220.5 -204t-281 -75q-242 0 -363 140.5t-121 408.5zM317 526q0 -193 80 -298t236 -105q115 0 210 63.5t164.5 172t107.5 252 t38 302.5q0 119 -26.5 197t-70.5 122t-100.5 61.5t-113.5 17.5q-117 0 -213.5 -64.5t-165 -173t-107.5 -251t-39 -296.5zM610 1608q72 66 128.5 89t103.5 23q37 0 68.5 -10t61.5 -23.5t58.5 -23.5t59.5 -10q51 0 108 43l33 -88q-66 -53 -116 -71.5t-91 -18.5q-37 0 -67.5 10 t-60.5 23.5t-58.5 23.5t-59.5 10t-64.5 -13t-74.5 -48z" />
-<glyph unicode="&#xd6;" horiz-adv-x="1333" d="M145 524q0 188 51.5 358.5t146.5 298.5t229.5 202.5t297.5 74.5q98 0 182.5 -29.5t144.5 -94t94 -167t34 -249.5q0 -193 -51 -364t-143.5 -300t-220.5 -204t-281 -75q-242 0 -363 140.5t-121 408.5zM317 526q0 -193 80 -298t236 -105q115 0 210 63.5t164.5 172t107.5 252 t38 302.5q0 119 -26.5 197t-70.5 122t-100.5 61.5t-113.5 17.5q-117 0 -213.5 -64.5t-165 -173t-107.5 -251t-39 -296.5zM629 1626q0 41 28.5 68.5t75.5 27.5t75 -27.5t28 -68.5t-28 -67.5t-75 -26.5t-75.5 26.5t-28.5 67.5zM1004 1626q0 41 27.5 68.5t74.5 27.5t75.5 -27.5 t28.5 -68.5t-28.5 -67.5t-75.5 -26.5t-74.5 26.5t-27.5 67.5z" />
-<glyph unicode="&#xd7;" horiz-adv-x="983" d="M178 430l260 264l-260 256l105 109l260 -260l260 260l104 -109l-258 -256l258 -260l-104 -106l-260 260l-258 -262z" />
-<glyph unicode="&#xd8;" horiz-adv-x="1333" d="M145 524q0 188 51.5 358.5t146.5 298.5t229.5 202.5t297.5 74.5q80 0 151 -19.5t126 -60.5l59 80l101 -78l-72 -96q43 -63 66.5 -153.5t23.5 -212.5q0 -193 -51 -364t-143.5 -300t-220.5 -204t-281 -75q-180 0 -297 82l-60 -80l-102 80l70 95q-95 132 -95 372zM317 526 q0 -129 37 -221l690 934q-43 39 -95 55.5t-107 16.5q-117 0 -213.5 -64.5t-165 -173t-107.5 -251t-39 -296.5zM430 193q80 -70 203 -70q115 0 210 63.5t164.5 172t107.5 251.5t38 303q0 66 -8 119t-25 94z" />
-<glyph unicode="&#xd9;" horiz-adv-x="1265" d="M178 338q0 84 23 190l190 906h164l-190 -908q-23 -90 -23 -164q0 -129 67.5 -179t200.5 -50q80 0 140.5 22.5t104.5 69.5t73.5 121t52.5 178l193 910h155l-201 -957q-29 -131 -71.5 -225t-107 -153.5t-154.5 -88t-209 -28.5q-113 0 -191 25.5t-126 71.5t-69.5 112.5 t-21.5 146.5zM628 1739l9 43h206l179 -242h-129z" />
-<glyph unicode="&#xda;" horiz-adv-x="1265" d="M178 338q0 84 23 190l190 906h164l-190 -908q-23 -90 -23 -164q0 -129 67.5 -179t200.5 -50q80 0 140.5 22.5t104.5 69.5t73.5 121t52.5 178l193 910h155l-201 -957q-29 -131 -71.5 -225t-107 -153.5t-154.5 -88t-209 -28.5q-113 0 -191 25.5t-126 71.5t-69.5 112.5 t-21.5 146.5zM759 1540l281 242h237l-10 -43l-358 -199h-150z" />
-<glyph unicode="&#xdb;" horiz-adv-x="1265" d="M178 338q0 84 23 190l190 906h164l-190 -908q-23 -90 -23 -164q0 -129 67.5 -179t200.5 -50q80 0 140.5 22.5t104.5 69.5t73.5 121t52.5 178l193 910h155l-201 -957q-29 -131 -71.5 -225t-107 -153.5t-154.5 -88t-209 -28.5q-113 0 -191 25.5t-126 71.5t-69.5 112.5 t-21.5 146.5zM579 1530l10 45l301 207h99l203 -209l-9 -43h-139l-94 100l-21 72l-51 -70l-145 -102h-154z" />
-<glyph unicode="&#xdc;" horiz-adv-x="1265" d="M178 338q0 84 23 190l190 906h164l-190 -908q-23 -90 -23 -164q0 -129 67.5 -179t200.5 -50q80 0 140.5 22.5t104.5 69.5t73.5 121t52.5 178l193 910h155l-201 -957q-29 -131 -71.5 -225t-107 -153.5t-154.5 -88t-209 -28.5q-113 0 -191 25.5t-126 71.5t-69.5 112.5 t-21.5 146.5zM606 1626q0 41 28.5 68.5t75.5 27.5t75 -27.5t28 -68.5t-28 -67.5t-75 -26.5t-75.5 26.5t-28.5 67.5zM981 1626q0 41 27.5 68.5t74.5 27.5t75.5 -27.5t28.5 -68.5t-28.5 -67.5t-75.5 -26.5t-74.5 26.5t-27.5 67.5z" />
-<glyph unicode="&#xdd;" horiz-adv-x="1087" d="M221 1434h178l183 -627l6 -125h2l61 129l445 623h184l-623 -863l-120 -571h-164l121 569zM690 1540l281 242h237l-10 -43l-358 -199h-150z" />
-<glyph unicode="&#xde;" horiz-adv-x="1089" d="M82 0l305 1434h162l-33 -154q82 6 166 6q94 0 174 -20.5t139.5 -65.5t94 -115.5t34.5 -169.5q0 -156 -55 -260t-147.5 -167.5t-207 -90t-231.5 -26.5h-31.5t-46 1t-47 3t-32.5 4l-80 -379h-164zM358 530q8 -4 28 -5t41.5 -3t41.5 -2h31q88 0 170 18.5t145.5 62.5t100 117 t36.5 181q0 74 -24.5 120t-66.5 71.5t-97.5 36t-116.5 10.5q-47 0 -91 -3.5t-73 -9.5z" />
-<glyph unicode="&#xdf;" horiz-adv-x="1144" d="M-233 -385l45 115q41 -14 74.5 -18.5t82.5 -4.5q78 0 117 80t61 213l168 893h-176l27 131h176l14 57q41 195 153 280t282 85q86 0 145 -20.5t96 -54.5t54.5 -78t17.5 -89q0 -72 -25.5 -121t-63.5 -85.5t-83 -64.5t-83 -55.5t-63.5 -58.5t-25.5 -74q0 -39 23.5 -62.5 t59.5 -41.5t78 -37.5t77.5 -50.5t59 -77t23.5 -120q0 -80 -35.5 -149.5t-96 -120.5t-141.5 -81t-171 -30q-72 0 -133.5 13.5t-110.5 44.5l74 137q82 -51 186 -51q43 0 90.5 15.5t85 44t63.5 70.5t26 97q0 47 -24 78t-59.5 53.5t-76.5 42t-78 47t-60.5 68.5t-23.5 104 q0 61 25.5 104.5t64.5 78t84 63.5t84 57.5t62.5 61.5t23.5 76q0 61 -45 92t-127 31q-223 2 -270 -283l-197 -1020q-18 -113 -43 -192.5t-61.5 -132t-90 -77t-129.5 -24.5q-61 0 -113 9t-97 32z" />
-<glyph unicode="&#xe0;" horiz-adv-x="997" d="M92 293q0 131 34 266t104.5 243.5t182 178.5t269.5 70q57 0 140 -13.5t155 -36.5l-129 -598q-16 -76 -22.5 -153.5t-6.5 -145.5v-58.5t4 -49.5h-114l-29 178h-8q-25 -35 -61 -70.5t-79 -64.5t-92 -46.5t-104 -17.5q-244 0 -244 318zM256 293q0 -78 30.5 -132.5 t96.5 -54.5q49 0 94 24t85 58.5t71 74.5t49 75l115 553q-61 29 -156 29q-94 0 -166 -55.5t-121 -144.5t-73.5 -201.5t-24.5 -225.5zM483 1432l8 43h187l59 -306h-88z" />
-<glyph unicode="&#xe1;" horiz-adv-x="997" d="M92 293q0 131 34 266t104.5 243.5t182 178.5t269.5 70q57 0 140 -13.5t155 -36.5l-129 -598q-16 -76 -22.5 -153.5t-6.5 -145.5v-58.5t4 -49.5h-114l-29 178h-8q-25 -35 -61 -70.5t-79 -64.5t-92 -46.5t-104 -17.5q-244 0 -244 318zM256 293q0 -78 30.5 -132.5 t96.5 -54.5q49 0 94 24t85 58.5t71 74.5t49 75l115 553q-61 29 -156 29q-94 0 -166 -55.5t-121 -144.5t-73.5 -201.5t-24.5 -225.5zM624 1169l180 306h172l-10 -43l-252 -263h-90z" />
-<glyph unicode="&#xe2;" horiz-adv-x="997" d="M92 293q0 131 34 266t104.5 243.5t182 178.5t269.5 70q57 0 140 -13.5t155 -36.5l-129 -598q-16 -76 -22.5 -153.5t-6.5 -145.5v-58.5t4 -49.5h-114l-29 178h-8q-25 -35 -61 -70.5t-79 -64.5t-92 -46.5t-104 -17.5q-244 0 -244 318zM256 293q0 -78 30.5 -132.5 t96.5 -54.5q49 0 94 24t85 58.5t71 74.5t49 75l115 553q-61 29 -156 29q-94 0 -166 -55.5t-121 -144.5t-73.5 -201.5t-24.5 -225.5zM416 1126l319 373h62l135 -373h-129l-49 136l-13 118l-69 -118l-117 -136h-139z" />
-<glyph unicode="&#xe3;" horiz-adv-x="997" d="M92 293q0 131 34 266t104.5 243.5t182 178.5t269.5 70q57 0 140 -13.5t155 -36.5l-129 -598q-16 -76 -22.5 -153.5t-6.5 -145.5v-58.5t4 -49.5h-114l-29 178h-8q-25 -35 -61 -70.5t-79 -64.5t-92 -46.5t-104 -17.5q-244 0 -244 318zM256 293q0 -78 30.5 -132.5 t96.5 -54.5q49 0 94 24t85 58.5t71 74.5t49 75l115 553q-61 29 -156 29q-94 0 -166 -55.5t-121 -144.5t-73.5 -201.5t-24.5 -225.5zM447 1343q66 68 113.5 93.5t84.5 25.5q31 0 55.5 -13t48 -28.5t47 -28t52.5 -12.5q47 0 111 50l30 -89q-59 -59 -102 -81.5t-78 -22.5 q-31 0 -55.5 12.5t-48 27.5t-48 27.5t-55.5 12.5q-27 0 -57.5 -13.5t-71.5 -46.5z" />
-<glyph unicode="&#xe4;" horiz-adv-x="997" d="M92 293q0 131 34 266t104.5 243.5t182 178.5t269.5 70q57 0 140 -13.5t155 -36.5l-129 -598q-16 -76 -22.5 -153.5t-6.5 -145.5v-58.5t4 -49.5h-114l-29 178h-8q-25 -35 -61 -70.5t-79 -64.5t-92 -46.5t-104 -17.5q-244 0 -244 318zM256 293q0 -78 30.5 -132.5 t96.5 -54.5q49 0 94 24t85 58.5t71 74.5t49 75l115 553q-61 29 -156 29q-94 0 -166 -55.5t-121 -144.5t-73.5 -201.5t-24.5 -225.5zM381 1337q0 45 26 75t69 30t69.5 -30t26.5 -75q0 -41 -26.5 -70.5t-69.5 -29.5t-69 29.5t-26 70.5zM756 1339q0 43 25.5 73t68.5 30 q45 0 71 -30t26 -73t-26 -72.5t-71 -29.5q-43 0 -68.5 29.5t-25.5 72.5z" />
-<glyph unicode="&#xe5;" horiz-adv-x="997" d="M92 293q0 131 34 266t104.5 243.5t182 178.5t269.5 70q57 0 140 -13.5t155 -36.5l-129 -598q-16 -76 -22.5 -153.5t-6.5 -145.5v-58.5t4 -49.5h-114l-29 178h-8q-25 -35 -61 -70.5t-79 -64.5t-92 -46.5t-104 -17.5q-244 0 -244 318zM256 293q0 -78 30.5 -132.5 t96.5 -54.5q49 0 94 24t85 58.5t71 74.5t49 75l115 553q-61 29 -156 29q-94 0 -166 -55.5t-121 -144.5t-73.5 -201.5t-24.5 -225.5zM516 1317q0 86 54 136t145 50q86 0 143 -45t57 -141q0 -80 -57 -132t-143 -52t-142.5 48t-56.5 136zM627 1317q0 -41 27.5 -63.5t60.5 -22.5 q39 0 64.5 20.5t25.5 65.5t-28 66.5t-62 21.5q-35 0 -61.5 -20.5t-26.5 -67.5z" />
-<glyph unicode="&#xe6;" horiz-adv-x="1544" d="M57 227q0 104 45 175t122 113t179.5 60.5t214.5 18.5h46.5t46.5 -2q41 133 41 199t-39 92t-129 26q-33 0 -73 -5t-81 -15t-79 -23.5t-68 -27.5l-25 123q86 47 187.5 63t205.5 16q98 0 160.5 -34.5t77.5 -100.5q66 76 159 110t179 34q152 0 225.5 -67t73.5 -165 q0 -109 -50.5 -174t-140.5 -102t-217 -50.5t-278 -15.5q-6 -35 -10.5 -65.5t-4.5 -59.5q0 -113 57.5 -178.5t194.5 -65.5q66 0 136.5 26t113.5 56l35 -110q-70 -49 -165 -76t-193 -27q-119 0 -200 54.5t-110 148.5h-14q-66 -80 -163 -137t-214 -57q-63 0 -109.5 20.5t-77 54 t-45 77.5t-14.5 91zM221 262q0 -78 35.5 -112.5t103.5 -34.5q55 0 105.5 26.5t91.5 62.5t70.5 71.5t44.5 58.5l16 139q-23 2 -47.5 3t-46.5 1q-78 0 -146.5 -12t-118.5 -39t-79 -67t-29 -97zM864 600q100 0 191.5 5t161 24.5t110.5 58.5t41 107q0 51 -34 87t-132 36 q-125 0 -209 -82t-129 -236z" />
-<glyph unicode="&#xe7;" horiz-adv-x="860" d="M102 303q0 174 47.5 312.5t126 234.5t181 147.5t211.5 51.5q78 0 128 -14.5t91 -33.5l-58 -127q-35 20 -86 32t-110 12q-70 0 -136.5 -47.5t-117.5 -124t-82 -176t-31 -203.5q0 -133 55.5 -197t149.5 -64q61 0 129 28t109 56l39 -102q-53 -45 -126 -74.5t-139 -38.5 l-51 -63q55 -6 91 -42t36 -101q0 -86 -64.5 -141.5t-193.5 -55.5q-25 0 -52.5 3t-55.5 7l34 80q10 -2 21.5 -2h21.5q43 0 72 8t45 19.5t22.5 26t6.5 26.5q0 39 -43 57.5t-115 18.5l117 159q-82 8 -135.5 43t-84 83.5t-42 101.5t-11.5 100z" />
-<glyph unicode="&#xe8;" horiz-adv-x="948" d="M102 332q0 168 47.5 301t124 225t174 141.5t199.5 49.5q74 0 128 -20.5t89 -54.5t51.5 -78t16.5 -93q0 -145 -141.5 -228t-411.5 -83q-25 0 -51.5 1t-55.5 3q-8 -39 -12 -74t-4 -62q0 -113 51 -183.5t160 -70.5q90 0 165 30t116 63l49 -99q-72 -61 -169.5 -93t-195.5 -32 q-164 0 -247 94.5t-83 262.5zM301 610q78 0 162 4t152.5 21.5t113.5 55.5t45 106q0 20 -7 41.5t-23.5 39t-46 29t-74.5 11.5q-113 0 -196 -77t-126 -231zM450 1432l8 43h187l59 -306h-88z" />
-<glyph unicode="&#xe9;" horiz-adv-x="948" d="M102 332q0 168 47.5 301t124 225t174 141.5t199.5 49.5q74 0 128 -20.5t89 -54.5t51.5 -78t16.5 -93q0 -145 -141.5 -228t-411.5 -83q-25 0 -51.5 1t-55.5 3q-8 -39 -12 -74t-4 -62q0 -113 51 -183.5t160 -70.5q90 0 165 30t116 63l49 -99q-72 -61 -169.5 -93t-195.5 -32 q-164 0 -247 94.5t-83 262.5zM301 610q78 0 162 4t152.5 21.5t113.5 55.5t45 106q0 20 -7 41.5t-23.5 39t-46 29t-74.5 11.5q-113 0 -196 -77t-126 -231zM588 1169l180 306h172l-10 -43l-252 -263h-90z" />
-<glyph unicode="&#xea;" horiz-adv-x="948" d="M102 332q0 168 47.5 301t124 225t174 141.5t199.5 49.5q74 0 128 -20.5t89 -54.5t51.5 -78t16.5 -93q0 -145 -141.5 -228t-411.5 -83q-25 0 -51.5 1t-55.5 3q-8 -39 -12 -74t-4 -62q0 -113 51 -183.5t160 -70.5q90 0 165 30t116 63l49 -99q-72 -61 -169.5 -93t-195.5 -32 q-164 0 -247 94.5t-83 262.5zM301 610q78 0 162 4t152.5 21.5t113.5 55.5t45 106q0 20 -7 41.5t-23.5 39t-46 29t-74.5 11.5q-113 0 -196 -77t-126 -231zM383 1126l319 373h62l135 -373h-129l-49 136l-13 118l-69 -118l-117 -136h-139z" />
-<glyph unicode="&#xeb;" horiz-adv-x="948" d="M102 332q0 168 47.5 301t124 225t174 141.5t199.5 49.5q74 0 128 -20.5t89 -54.5t51.5 -78t16.5 -93q0 -145 -141.5 -228t-411.5 -83q-25 0 -51.5 1t-55.5 3q-8 -39 -12 -74t-4 -62q0 -113 51 -183.5t160 -70.5q90 0 165 30t116 63l49 -99q-72 -61 -169.5 -93t-195.5 -32 q-164 0 -247 94.5t-83 262.5zM301 610q78 0 162 4t152.5 21.5t113.5 55.5t45 106q0 20 -7 41.5t-23.5 39t-46 29t-74.5 11.5q-113 0 -196 -77t-126 -231zM399 1337q0 45 26 75t69 30t69.5 -30t26.5 -75q0 -41 -26.5 -70.5t-69.5 -29.5t-69 29.5t-26 70.5zM774 1339 q0 43 25.5 73t68.5 30q45 0 71 -30t26 -73t-26 -72.5t-71 -29.5q-43 0 -68.5 29.5t-25.5 72.5z" />
-<glyph unicode="&#xec;" horiz-adv-x="530" d="M111 0l217 1024h153l-217 -1024h-153zM254 1432l8 43h187l59 -306h-88z" />
-<glyph unicode="&#xed;" horiz-adv-x="530" d="M111 0l217 1024h153l-217 -1024h-153zM362 1169l180 306h172l-10 -43l-252 -263h-90z" />
-<glyph unicode="&#xee;" horiz-adv-x="530" d="M111 0l217 1024h153l-217 -1024h-153zM160 1126l319 373h62l135 -373h-129l-49 136l-13 118l-69 -118l-117 -136h-139z" />
-<glyph unicode="&#xef;" horiz-adv-x="530" d="M111 0l217 1024h153l-217 -1024h-153zM184 1337q0 45 26 75t69 30t69.5 -30t26.5 -75q0 -41 -26.5 -70.5t-69.5 -29.5t-69 29.5t-26 70.5zM559 1339q0 43 25.5 73t68.5 30q45 0 71 -30t26 -73t-26 -72.5t-71 -29.5q-43 0 -68.5 29.5t-25.5 72.5z" />
-<glyph unicode="&#xf0;" horiz-adv-x="1015" d="M104 319q0 141 38 271.5t107.5 232t164 161.5t209.5 60q88 0 131 -23.5t73 -57.5q2 143 -51 245l-166 -71l-45 82l160 69q-33 41 -71 68.5t-79 46.5l121 55q94 -39 156 -115l156 68l41 -84l-146 -63q33 -66 51.5 -148t18.5 -182q0 -258 -48 -439.5t-126 -297t-176.5 -169 t-198.5 -53.5q-80 0 -140.5 27t-100.5 73t-59.5 109.5t-19.5 134.5zM266 336q0 -111 47 -170.5t119 -59.5q109 0 181.5 73t116.5 177.5t61.5 221t17.5 204.5q-16 59 -68.5 94t-124.5 35q-78 0 -142 -53t-110.5 -137t-72 -185.5t-25.5 -199.5z" />
-<glyph unicode="&#xf1;" horiz-adv-x="1069" d="M54 0l217 1024h106l-8 -176h8q27 33 64 68.5t83 64.5t103.5 48.5t126.5 19.5q102 0 161.5 -49.5t59.5 -172.5q0 -61 -18 -147l-146 -680h-153l137 647q8 37 14.5 73t6.5 64q0 59 -28 96.5t-103 37.5q-53 0 -104.5 -25t-96.5 -62.5t-81 -84t-61 -91.5l-135 -655h-153z M453 1343q66 68 113.5 93.5t84.5 25.5q31 0 55.5 -13t48 -28.5t47 -28t52.5 -12.5q47 0 111 50l30 -89q-59 -59 -102 -81.5t-78 -22.5q-31 0 -55.5 12.5t-48 27.5t-48 27.5t-55.5 12.5q-27 0 -57.5 -13.5t-71.5 -46.5z" />
-<glyph unicode="&#xf2;" horiz-adv-x="1019" d="M102 319q0 162 42 296.5t116 230.5t171 149.5t208 53.5q86 0 146.5 -28t98.5 -76t54 -110.5t16 -129.5q0 -154 -40 -287t-110.5 -231.5t-164.5 -155t-205 -56.5q-92 0 -154.5 30t-102.5 79t-57.5 110.5t-17.5 124.5zM266 356q0 -121 45 -185.5t144 -64.5q68 0 128 48.5 t106 130.5t74 187.5t28 219.5q0 104 -38 165t-145 61q-68 0 -129 -46.5t-109 -124t-76 -179t-28 -212.5zM475 1432l8 43h187l59 -306h-88z" />
-<glyph unicode="&#xf3;" horiz-adv-x="1019" d="M102 319q0 162 42 296.5t116 230.5t171 149.5t208 53.5q86 0 146.5 -28t98.5 -76t54 -110.5t16 -129.5q0 -154 -40 -287t-110.5 -231.5t-164.5 -155t-205 -56.5q-92 0 -154.5 30t-102.5 79t-57.5 110.5t-17.5 124.5zM266 356q0 -121 45 -185.5t144 -64.5q68 0 128 48.5 t106 130.5t74 187.5t28 219.5q0 104 -38 165t-145 61q-68 0 -129 -46.5t-109 -124t-76 -179t-28 -212.5zM592 1169l180 306h172l-10 -43l-252 -263h-90z" />
-<glyph unicode="&#xf4;" horiz-adv-x="1019" d="M102 319q0 162 42 296.5t116 230.5t171 149.5t208 53.5q86 0 146.5 -28t98.5 -76t54 -110.5t16 -129.5q0 -154 -40 -287t-110.5 -231.5t-164.5 -155t-205 -56.5q-92 0 -154.5 30t-102.5 79t-57.5 110.5t-17.5 124.5zM266 356q0 -121 45 -185.5t144 -64.5q68 0 128 48.5 t106 130.5t74 187.5t28 219.5q0 104 -38 165t-145 61q-68 0 -129 -46.5t-109 -124t-76 -179t-28 -212.5zM383 1126l319 373h62l135 -373h-129l-49 136l-13 118l-69 -118l-117 -136h-139z" />
-<glyph unicode="&#xf5;" horiz-adv-x="1019" d="M102 319q0 162 42 296.5t116 230.5t171 149.5t208 53.5q86 0 146.5 -28t98.5 -76t54 -110.5t16 -129.5q0 -154 -40 -287t-110.5 -231.5t-164.5 -155t-205 -56.5q-92 0 -154.5 30t-102.5 79t-57.5 110.5t-17.5 124.5zM266 356q0 -121 45 -185.5t144 -64.5q68 0 128 48.5 t106 130.5t74 187.5t28 219.5q0 104 -38 165t-145 61q-68 0 -129 -46.5t-109 -124t-76 -179t-28 -212.5zM402 1343q66 68 113.5 93.5t84.5 25.5q31 0 55.5 -13t48 -28.5t47 -28t52.5 -12.5q47 0 111 50l30 -89q-59 -59 -102 -81.5t-78 -22.5q-31 0 -55.5 12.5t-48 27.5 t-48 27.5t-55.5 12.5q-27 0 -57.5 -13.5t-71.5 -46.5z" />
-<glyph unicode="&#xf6;" horiz-adv-x="1019" d="M102 319q0 162 42 296.5t116 230.5t171 149.5t208 53.5q86 0 146.5 -28t98.5 -76t54 -110.5t16 -129.5q0 -154 -40 -287t-110.5 -231.5t-164.5 -155t-205 -56.5q-92 0 -154.5 30t-102.5 79t-57.5 110.5t-17.5 124.5zM266 356q0 -121 45 -185.5t144 -64.5q68 0 128 48.5 t106 130.5t74 187.5t28 219.5q0 104 -38 165t-145 61q-68 0 -129 -46.5t-109 -124t-76 -179t-28 -212.5zM389 1337q0 45 26 75t69 30t69.5 -30t26.5 -75q0 -41 -26.5 -70.5t-69.5 -29.5t-69 29.5t-26 70.5zM764 1339q0 43 25.5 73t68.5 30q45 0 71 -30t26 -73t-26 -72.5 t-71 -29.5q-43 0 -68.5 29.5t-25.5 72.5z" />
-<glyph unicode="&#xf7;" horiz-adv-x="983" d="M113 618v148h868v-148h-868zM455 309q0 55 32.5 87t85.5 32t86 -31.5t33 -87.5q0 -53 -32.5 -86t-86.5 -33q-53 0 -85.5 33t-32.5 86zM455 1059q0 55 32.5 87t85.5 32t86 -32t33 -87q0 -53 -32.5 -86t-86.5 -33q-53 0 -85.5 33t-32.5 86z" />
-<glyph unicode="&#xf8;" horiz-adv-x="1019" d="M27 49l102 115q-27 71 -27 155q0 162 42 296.5t116 230.5t171 149.5t208 53.5q72 0 125 -19.5t92 -54.5l74 80l82 -76l-90 -102q16 -39 24 -82t8 -90q0 -154 -40 -287t-110.5 -231.5t-164.5 -155t-205 -56.5q-82 0 -140 24t-99 64l-82 -92zM266 331.5q0 -12.5 2 -24.5 l488 545q-43 66 -148 66q-68 0 -129 -46.5t-109 -124t-76 -179t-28 -212.5v-24.5zM299 188q47 -82 156 -82q68 0 128 48.5t106 130.5t74 187t28 220v20.5t-3 20.5z" />
-<glyph unicode="&#xf9;" horiz-adv-x="1046" d="M123 197q0 72 20 161l140 666h153l-143 -682q-12 -55 -12 -102q0 -57 22.5 -95.5t81.5 -38.5q49 0 99.5 25t96.5 63.5t83.5 86t62.5 92.5l137 651h154l-129 -608q-8 -35 -16.5 -85t-15.5 -105.5t-11 -107.5t-4 -91v-27h-121v195h-8q-31 -41 -71 -80t-88 -70t-103.5 -50.5 t-116.5 -19.5q-45 0 -83 10.5t-66.5 36t-45 67.5t-16.5 108zM498 1432l8 43h187l59 -306h-88z" />
-<glyph unicode="&#xfa;" horiz-adv-x="1046" d="M123 197q0 72 20 161l140 666h153l-143 -682q-12 -55 -12 -102q0 -57 22.5 -95.5t81.5 -38.5q49 0 99.5 25t96.5 63.5t83.5 86t62.5 92.5l137 651h154l-129 -608q-8 -35 -16.5 -85t-15.5 -105.5t-11 -107.5t-4 -91v-27h-121v195h-8q-31 -41 -71 -80t-88 -70t-103.5 -50.5 t-116.5 -19.5q-45 0 -83 10.5t-66.5 36t-45 67.5t-16.5 108zM594 1169l180 306h172l-10 -43l-252 -263h-90z" />
-<glyph unicode="&#xfb;" horiz-adv-x="1046" d="M123 197q0 72 20 161l140 666h153l-143 -682q-12 -55 -12 -102q0 -57 22.5 -95.5t81.5 -38.5q49 0 99.5 25t96.5 63.5t83.5 86t62.5 92.5l137 651h154l-129 -608q-8 -35 -16.5 -85t-15.5 -105.5t-11 -107.5t-4 -91v-27h-121v195h-8q-31 -41 -71 -80t-88 -70t-103.5 -50.5 t-116.5 -19.5q-45 0 -83 10.5t-66.5 36t-45 67.5t-16.5 108zM410 1126l319 373h62l135 -373h-129l-49 136l-13 118l-69 -118l-117 -136h-139z" />
-<glyph unicode="&#xfc;" horiz-adv-x="1046" d="M123 197q0 72 20 161l140 666h153l-143 -682q-12 -55 -12 -102q0 -57 22.5 -95.5t81.5 -38.5q49 0 99.5 25t96.5 63.5t83.5 86t62.5 92.5l137 651h154l-129 -608q-8 -35 -16.5 -85t-15.5 -105.5t-11 -107.5t-4 -91v-27h-121v195h-8q-31 -41 -71 -80t-88 -70t-103.5 -50.5 t-116.5 -19.5q-45 0 -83 10.5t-66.5 36t-45 67.5t-16.5 108zM430 1337q0 45 26 75t69 30t69.5 -30t26.5 -75q0 -41 -26.5 -70.5t-69.5 -29.5t-69 29.5t-26 70.5zM805 1339q0 43 25.5 73t68.5 30q45 0 71 -30t26 -73t-26 -72.5t-71 -29.5q-43 0 -68.5 29.5t-25.5 72.5z" />
-<glyph unicode="&#xfd;" horiz-adv-x="899" d="M-41 -401l49 141q23 -8 49 -8q59 0 119 61.5t133 206.5l-176 1024h164l100 -664l11 -196h10l78 198l340 662h163l-483 -913q-53 -100 -105.5 -195.5t-107.5 -170.5t-114.5 -120t-122.5 -45q-35 0 -60.5 4t-46.5 15zM512 1169l180 306h172l-10 -43l-252 -263h-90z" />
-<glyph unicode="&#xfe;" horiz-adv-x="1040" d="M-10 -410l395 1844h154l-127 -562h8q29 35 61.5 67t71.5 56.5t87 39t108 14.5q49 0 92 -15.5t75.5 -51.5t52 -95.5t19.5 -145.5q0 -180 -49 -322.5t-129 -240.5t-179.5 -150.5t-197.5 -52.5q-72 0 -126 13.5t-73 27.5l-90 -426h-153zM264 154q35 -27 72 -37.5t80 -10.5 q80 0 152.5 44.5t130 126t91 196.5t33.5 256q0 82 -33.5 135.5t-99.5 53.5q-55 0 -105 -29t-92 -71t-75 -90t-53 -89z" />
-<glyph unicode="&#xff;" horiz-adv-x="899" d="M-41 -401l49 141q23 -8 49 -8q59 0 119 61.5t133 206.5l-176 1024h164l100 -664l11 -196h10l78 198l340 662h163l-483 -913q-53 -100 -105.5 -195.5t-107.5 -170.5t-114.5 -120t-122.5 -45q-35 0 -60.5 4t-46.5 15zM309 1337q0 45 26 75t69 30t69.5 -30t26.5 -75 q0 -41 -26.5 -70.5t-69.5 -29.5t-69 29.5t-26 70.5zM684 1339q0 43 25.5 73t68.5 30q45 0 71 -30t26 -73t-26 -72.5t-71 -29.5q-43 0 -68.5 29.5t-25.5 72.5z" />
-<glyph unicode="&#x152;" horiz-adv-x="1818" d="M147 524q0 197 51.5 368t147.5 297t233.5 197.5t311.5 71.5q45 0 77.5 -1t62.5 -4t59.5 -8t70.5 -11h742l-33 -152h-578l-100 -469h528l-30 -151h-531l-106 -510h587l-30 -152h-752q-53 -12 -100 -18.5t-123 -6.5q-96 0 -184.5 27t-156 90.5t-107.5 169t-40 262.5z M319 526q0 -61 12.5 -131.5t47.5 -131t98.5 -100.5t165.5 -40q29 0 55.5 1t55 4t61.5 10t76 20l233 1108q-47 23 -104 34t-154 11q-133 0 -235.5 -64.5t-172 -173t-104.5 -250t-35 -297.5z" />
-<glyph unicode="&#x153;" horiz-adv-x="1605" d="M102 319q0 162 42 296.5t116 230.5t171 149.5t208 53.5q129 0 195.5 -62.5t89.5 -163.5q70 109 170 167.5t211 58.5q74 0 128 -20.5t88.5 -54.5t51 -78t16.5 -93q0 -145 -141 -228t-412 -83q-25 0 -51.5 1t-54.5 3q-8 -39 -11.5 -74t-3.5 -62q0 -113 50.5 -183.5 t158.5 -70.5q90 0 165 30t116 63l49 -99q-72 -61 -169 -93t-195 -32q-59 0 -108.5 17.5t-87.5 47.5t-63.5 70t-37.5 85q-59 -98 -156.5 -159t-202.5 -61q-92 0 -154.5 30t-102.5 79t-57.5 110.5t-17.5 124.5zM266 356q0 -121 45 -185.5t144 -64.5q68 0 129 48.5t107 130.5 t74 187.5t28 219.5q0 104 -39 165t-146 61q-68 0 -129 -46.5t-109 -124t-76 -179t-28 -212.5zM958 610h33q66 0 142.5 4t143 21.5t111 55.5t44.5 106q0 20 -7.5 41.5t-24 39t-46 29t-74.5 11.5q-113 0 -194.5 -77t-127.5 -231z" />
-<glyph unicode="&#x178;" horiz-adv-x="1087" d="M221 1434h178l183 -627l6 -125h2l61 129l445 623h184l-623 -863l-120 -571h-164l121 569zM516 1626q0 41 28.5 68.5t75.5 27.5t75 -27.5t28 -68.5t-28 -67.5t-75 -26.5t-75.5 26.5t-28.5 67.5zM891 1626q0 41 27.5 68.5t74.5 27.5t75.5 -27.5t28.5 -68.5t-28.5 -67.5 t-75.5 -26.5t-74.5 26.5t-27.5 67.5z" />
-<glyph unicode="&#x2c6;" horiz-adv-x="882" d="M625 1126l319 373h62l135 -373h-129l-49 136l-13 118l-69 -118l-117 -136h-139z" />
-<glyph unicode="&#x2dc;" horiz-adv-x="714" d="M666 1343q66 68 113.5 93.5t84.5 25.5q31 0 55.5 -13t48 -28.5t47 -28t52.5 -12.5q47 0 111 50l30 -89q-59 -59 -102 -81.5t-78 -22.5q-31 0 -55.5 12.5t-48 27.5t-48 27.5t-55.5 12.5q-27 0 -57.5 -13.5t-71.5 -46.5z" />
-<glyph unicode="&#x2000;" horiz-adv-x="891" />
-<glyph unicode="&#x2001;" horiz-adv-x="1782" />
-<glyph unicode="&#x2002;" horiz-adv-x="891" />
-<glyph unicode="&#x2003;" horiz-adv-x="1782" />
-<glyph unicode="&#x2004;" horiz-adv-x="594" />
-<glyph unicode="&#x2005;" horiz-adv-x="445" />
-<glyph unicode="&#x2006;" horiz-adv-x="297" />
-<glyph unicode="&#x2007;" horiz-adv-x="297" />
-<glyph unicode="&#x2008;" horiz-adv-x="222" />
-<glyph unicode="&#x2009;" horiz-adv-x="356" />
-<glyph unicode="&#x200a;" horiz-adv-x="99" />
-<glyph unicode="&#x2010;" horiz-adv-x="700" d="M129 520l33 139h471l-35 -139h-469z" />
-<glyph unicode="&#x2011;" horiz-adv-x="700" d="M129 520l33 139h471l-35 -139h-469z" />
-<glyph unicode="&#x2012;" horiz-adv-x="700" d="M129 520l33 139h471l-35 -139h-469z" />
-<glyph unicode="&#x2013;" horiz-adv-x="1284" d="M231 520l33 139h826l-33 -139h-826z" />
-<glyph unicode="&#x2014;" horiz-adv-x="1595" d="M231 520l33 139h1137l-33 -139h-1137z" />
-<glyph unicode="&#x2018;" horiz-adv-x="380" d="M221 1288q0 70 26.5 124t63.5 92t76 59.5t64 29.5l30 -71q-47 -23 -81.5 -63t-43.5 -93q6 2 19 2q31 0 48 -24.5t17 -57.5q0 -59 -29.5 -89t-80.5 -30q-53 0 -81 37t-28 84z" />
-<glyph unicode="&#x2019;" horiz-adv-x="382" d="M221 1094q47 25 82 63.5t45 93.5q-82 5 -82 97q0 25 11.5 44t28 31.5t35.5 19.5t38 7q61 0 82.5 -30.5t21.5 -88.5q0 -70 -26.5 -123t-63.5 -91t-75.5 -61.5t-63.5 -31.5z" />
-<glyph unicode="&#x201a;" horiz-adv-x="387" d="M4 -153q47 25 82 63.5t45 93.5q-82 5 -82 97q0 25 11.5 44t28 31.5t35.5 19.5t38 7q61 0 82.5 -30.5t21.5 -88.5q0 -70 -26.5 -123t-63.5 -91t-75.5 -61.5t-63.5 -31.5z" />
-<glyph unicode="&#x201c;" horiz-adv-x="665" d="M221 1288q0 70 26.5 124t63.5 92t76 59.5t64 29.5l30 -71q-47 -23 -81.5 -63t-43.5 -93q6 2 19 2q31 0 48 -24.5t17 -57.5q0 -59 -29.5 -89t-80.5 -30q-53 0 -81 37t-28 84zM506 1288q0 70 26.5 124t63.5 92t76 59.5t64 29.5l30 -71q-47 -23 -81.5 -63t-43.5 -93 q6 2 19 2q31 0 48 -24.5t17 -57.5q0 -59 -29.5 -89t-80.5 -30q-53 0 -81 37t-28 84z" />
-<glyph unicode="&#x201d;" horiz-adv-x="665" d="M221 1094q47 25 82 63.5t45 93.5q-82 5 -82 97q0 25 11.5 44t28 31.5t35.5 19.5t38 7q61 0 82.5 -30.5t21.5 -88.5q0 -70 -26.5 -123t-63.5 -91t-75.5 -61.5t-63.5 -31.5zM504 1094q47 25 82 63.5t45 93.5q-82 5 -82 97q0 25 11.5 44t28 31.5t35.5 19.5t38 7 q61 0 82.5 -30.5t21.5 -88.5q0 -70 -26.5 -123t-63.5 -91t-75.5 -61.5t-63.5 -31.5z" />
-<glyph unicode="&#x201e;" horiz-adv-x="669" d="M4 -153q47 25 82 63.5t45 93.5q-82 5 -82 97q0 25 11.5 44t28 31.5t35.5 19.5t38 7q61 0 82.5 -30.5t21.5 -88.5q0 -70 -26.5 -123t-63.5 -91t-75.5 -61.5t-63.5 -31.5zM284 -153q47 25 82 63.5t45 93.5q-82 5 -82 97q0 25 11.5 44t28 31.5t35.5 19.5t38 7 q61 0 82.5 -30.5t21.5 -88.5q0 -70 -26.5 -123t-63.5 -91t-75.5 -61.5t-63.5 -31.5z" />
-<glyph unicode="&#x2022;" horiz-adv-x="925" d="M229 637q0 63 22.5 115.5t60.5 90.5t90.5 58.5t111.5 20.5t111.5 -19.5t90.5 -56.5t60.5 -89t22.5 -120t-22.5 -120t-60.5 -89t-90.5 -56.5t-111.5 -19.5t-111.5 19.5t-90.5 56.5t-60.5 89t-22.5 120z" />
-<glyph unicode="&#x2026;" horiz-adv-x="1476" d="M55 94q0 55 33 87t86 32t86 -31.5t33 -87.5q0 -53 -33 -86t-86 -33t-86 33t-33 86zM549 94q0 55 32.5 87t86.5 32q53 0 85.5 -31.5t32.5 -87.5q0 -53 -32.5 -86t-85.5 -33t-86 33t-33 86zM1044 94q0 55 33 87t86 32t86 -31.5t33 -87.5q0 -53 -32.5 -86t-86.5 -33 q-53 0 -86 33t-33 86z" />
-<glyph unicode="&#x202f;" horiz-adv-x="356" />
-<glyph unicode="&#x2039;" horiz-adv-x="614" d="M115 530l409 471l90 -98l-252 -295l-114 -76l67 -79l140 -289l-113 -86z" />
-<glyph unicode="&#x203a;" horiz-adv-x="579" d="M78 166l254 297l117 84l-72 86l-139 291l116 77l226 -452l-410 -471z" />
-<glyph unicode="&#x205f;" horiz-adv-x="445" />
-<glyph unicode="&#x20ac;" d="M12 520l64 131h145q6 31 13.5 74t15.5 74h-176l63 131h152q53 141 129 239.5t166 163t187 95t190 30.5q98 0 166.5 -16.5t117.5 -42.5l-71 -125q-78 45 -244 45q-55 0 -121 -22.5t-131.5 -69.5t-123.5 -120t-103 -177h565l-62 -131h-544q-10 -33 -16.5 -75t-10.5 -73h498 l-62 -131h-442l-2 -8q-2 -94 16.5 -165t58 -122t105.5 -80.5t164 -29.5q66 0 130 18.5t118 46.5l28 -123q-37 -25 -79 -40t-87 -24t-88 -13.5t-79 -4.5q-111 0 -195 38t-140.5 104.5t-85 158t-30.5 207.5l2 37h-201z" />
-<glyph unicode="&#x2122;" horiz-adv-x="1814" d="M184 1294v140h717v-140h-278v-598h-160v598h-279zM983 696v738h160l215 -344l57 -119h2l62 123l198 340h162v-738h-156v342l21 211h-8l-80 -174l-178 -287h-68l-182 285l-74 176h-8l27 -209v-344h-150z" />
-<glyph unicode="&#xe000;" horiz-adv-x="1024" d="M0 0v1024h1024v-1024h-1024z" />
-</font>
-</defs></svg> \ No newline at end of file
diff --git a/app/fonts/ttf/ptsans.ttf b/app/fonts/ttf/ptsans.ttf
deleted file mode 100644
index a005ea33..00000000
--- a/app/fonts/ttf/ptsans.ttf
+++ /dev/null
Binary files differ
diff --git a/app/fonts/ttf/ptsansbold.ttf b/app/fonts/ttf/ptsansbold.ttf
deleted file mode 100644
index 31e45883..00000000
--- a/app/fonts/ttf/ptsansbold.ttf
+++ /dev/null
Binary files differ
diff --git a/app/fonts/ttf/ptsansbolditalic.ttf b/app/fonts/ttf/ptsansbolditalic.ttf
deleted file mode 100644
index dbc88079..00000000
--- a/app/fonts/ttf/ptsansbolditalic.ttf
+++ /dev/null
Binary files differ
diff --git a/app/fonts/ttf/ptsansitalic.ttf b/app/fonts/ttf/ptsansitalic.ttf
deleted file mode 100644
index 883ea2f8..00000000
--- a/app/fonts/ttf/ptsansitalic.ttf
+++ /dev/null
Binary files differ
diff --git a/app/fonts/woff/ptsans.woff b/app/fonts/woff/ptsans.woff
deleted file mode 100644
index 307fd51d..00000000
--- a/app/fonts/woff/ptsans.woff
+++ /dev/null
Binary files differ
diff --git a/app/fonts/woff/ptsansbold.woff b/app/fonts/woff/ptsansbold.woff
deleted file mode 100644
index f92d6b75..00000000
--- a/app/fonts/woff/ptsansbold.woff
+++ /dev/null
Binary files differ
diff --git a/app/fonts/woff/ptsansbolditalic.woff b/app/fonts/woff/ptsansbolditalic.woff
deleted file mode 100644
index c25c6178..00000000
--- a/app/fonts/woff/ptsansbolditalic.woff
+++ /dev/null
Binary files differ
diff --git a/app/fonts/woff/ptsansitalic.woff b/app/fonts/woff/ptsansitalic.woff
deleted file mode 100644
index b952d76a..00000000
--- a/app/fonts/woff/ptsansitalic.woff
+++ /dev/null
Binary files differ
diff --git a/app/images/banners/digitalocean.png b/app/images/banners/digitalocean.png
deleted file mode 100644
index dcfb059c..00000000
--- a/app/images/banners/digitalocean.png
+++ /dev/null
Binary files differ
diff --git a/app/images/others/blank.gif b/app/images/others/blank.gif
deleted file mode 100644
index 35d42e80..00000000
--- a/app/images/others/blank.gif
+++ /dev/null
Binary files differ
diff --git a/app/images/others/default-avatar.png b/app/images/others/default-avatar.png
deleted file mode 100644
index 7cda4c64..00000000
--- a/app/images/others/default-avatar.png
+++ /dev/null
Binary files differ
diff --git a/app/images/others/lock.png b/app/images/others/lock.png
deleted file mode 100644
index 2a300396..00000000
--- a/app/images/others/lock.png
+++ /dev/null
Binary files differ
diff --git a/app/images/placeholders/jingle_audio_local.png b/app/images/placeholders/jingle_audio_local.png
deleted file mode 100644
index 582f5077..00000000
--- a/app/images/placeholders/jingle_audio_local.png
+++ /dev/null
Binary files differ
diff --git a/app/images/placeholders/jingle_audio_remote.png b/app/images/placeholders/jingle_audio_remote.png
deleted file mode 100644
index 187b9db9..00000000
--- a/app/images/placeholders/jingle_audio_remote.png
+++ /dev/null
Binary files differ
diff --git a/app/images/placeholders/jingle_video_local.png b/app/images/placeholders/jingle_video_local.png
deleted file mode 100644
index 79ddff51..00000000
--- a/app/images/placeholders/jingle_video_local.png
+++ /dev/null
Binary files differ
diff --git a/app/images/placeholders/jingle_video_remote.png b/app/images/placeholders/jingle_video_remote.png
deleted file mode 100644
index 476138f1..00000000
--- a/app/images/placeholders/jingle_video_remote.png
+++ /dev/null
Binary files differ
diff --git a/app/images/sprites/animate.gif b/app/images/sprites/animate.gif
deleted file mode 100644
index 60b85d26..00000000
--- a/app/images/sprites/animate.gif
+++ /dev/null
Binary files differ
diff --git a/app/images/sprites/animate.png b/app/images/sprites/animate.png
deleted file mode 100644
index 0ec0b191..00000000
--- a/app/images/sprites/animate.png
+++ /dev/null
Binary files differ
diff --git a/app/images/sprites/archives.png b/app/images/sprites/archives.png
deleted file mode 100644
index 3375d698..00000000
--- a/app/images/sprites/archives.png
+++ /dev/null
Binary files differ
diff --git a/app/images/sprites/background.png b/app/images/sprites/background.png
deleted file mode 100644
index 4ae286d8..00000000
--- a/app/images/sprites/background.png
+++ /dev/null
Binary files differ
diff --git a/app/images/sprites/browsers.png b/app/images/sprites/browsers.png
deleted file mode 100644
index 3fb3c639..00000000
--- a/app/images/sprites/browsers.png
+++ /dev/null
Binary files differ
diff --git a/app/images/sprites/buttons.png b/app/images/sprites/buttons.png
deleted file mode 100644
index 496f76a5..00000000
--- a/app/images/sprites/buttons.png
+++ /dev/null
Binary files differ
diff --git a/app/images/sprites/call.png b/app/images/sprites/call.png
deleted file mode 100644
index 5b332dce..00000000
--- a/app/images/sprites/call.png
+++ /dev/null
Binary files differ
diff --git a/app/images/sprites/home.png b/app/images/sprites/home.png
deleted file mode 100644
index 5b5dd007..00000000
--- a/app/images/sprites/home.png
+++ /dev/null
Binary files differ
diff --git a/app/images/sprites/install.png b/app/images/sprites/install.png
deleted file mode 100644
index e2f4cd26..00000000
--- a/app/images/sprites/install.png
+++ /dev/null
Binary files differ
diff --git a/app/images/sprites/manager.png b/app/images/sprites/manager.png
deleted file mode 100644
index d63a3fec..00000000
--- a/app/images/sprites/manager.png
+++ /dev/null
Binary files differ
diff --git a/app/images/sprites/me.png b/app/images/sprites/me.png
deleted file mode 100644
index 639c83d8..00000000
--- a/app/images/sprites/me.png
+++ /dev/null
Binary files differ
diff --git a/app/images/sprites/mini.gif b/app/images/sprites/mini.gif
deleted file mode 100644
index 53a8e998..00000000
--- a/app/images/sprites/mini.gif
+++ /dev/null
Binary files differ
diff --git a/app/images/sprites/mini.png b/app/images/sprites/mini.png
deleted file mode 100644
index 0c319e97..00000000
--- a/app/images/sprites/mini.png
+++ /dev/null
Binary files differ
diff --git a/app/images/sprites/mobile.png b/app/images/sprites/mobile.png
deleted file mode 100644
index 6f200188..00000000
--- a/app/images/sprites/mobile.png
+++ /dev/null
Binary files differ
diff --git a/app/images/sprites/smileys.png b/app/images/sprites/smileys.png
deleted file mode 100644
index 1c33243d..00000000
--- a/app/images/sprites/smileys.png
+++ /dev/null
Binary files differ
diff --git a/app/images/sprites/talk.png b/app/images/sprites/talk.png
deleted file mode 100644
index ce2ea9d8..00000000
--- a/app/images/sprites/talk.png
+++ /dev/null
Binary files differ
diff --git a/app/images/sprites/welcome.png b/app/images/sprites/welcome.png
deleted file mode 100644
index e11565c0..00000000
--- a/app/images/sprites/welcome.png
+++ /dev/null
Binary files differ
diff --git a/app/images/wait/wait-big.gif b/app/images/wait/wait-big.gif
deleted file mode 100644
index 0cd9591c..00000000
--- a/app/images/wait/wait-big.gif
+++ /dev/null
Binary files differ
diff --git a/app/images/wait/wait-medium.png b/app/images/wait/wait-medium.png
deleted file mode 100644
index dae48b74..00000000
--- a/app/images/wait/wait-medium.png
+++ /dev/null
Binary files differ
diff --git a/app/images/wait/wait-small.gif b/app/images/wait/wait-small.gif
deleted file mode 100644
index 69585758..00000000
--- a/app/images/wait/wait-small.gif
+++ /dev/null
Binary files differ
diff --git a/app/images/wait/wait-typing.gif b/app/images/wait/wait-typing.gif
deleted file mode 100644
index 22ec6bb2..00000000
--- a/app/images/wait/wait-typing.gif
+++ /dev/null
Binary files differ
diff --git a/app/javascripts/adhoc.js b/app/javascripts/adhoc.js
deleted file mode 100644
index e4e898b6..00000000
--- a/app/javascripts/adhoc.js
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the Ad-Hoc JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var AdHoc = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Opens the adhoc popup
- * @public
- * @return {boolean}
- */
- self.open = function() {
-
- try {
- // Popup HTML content
- var html =
- '<div class="top">' + Common._e("Commands") + '</div>' +
-
- '<div class="content">' +
- '<div class="adhoc-head"></div>' +
-
- '<div class="results adhoc-results"></div>' +
- '</div>' +
-
- '<div class="bottom">' +
- '<div class="wait wait-medium"></div>' +
-
- '<a href="#" class="finish">' + Common._e("Close") + '</a>' +
- '</div>';
-
- // Create the popup
- Popup.create('adhoc', html);
-
- // Associate the events
- self.launch();
- } catch(e) {
- Console.error('AdHoc.open', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Closes the adhoc popup
- * @public
- * @return {boolean}
- */
- self.close = function() {
-
- try {
- // Destroy the popup
- Popup.destroy('adhoc');
- } catch(e) {
- Console.error('AdHoc.close', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Retrieves an entity adhoc command
- * @public
- * @param {string} xid
- * @return {boolean}
- */
- self.retrieve = function(xid) {
-
- try {
- // Open the popup
- self.open();
-
- // Add a XID marker
- $('#adhoc .adhoc-head').html('<b>' + Name.getBuddy(xid).htmlEnc() + '</b> (' + xid.htmlEnc() + ')');
-
- // Get the highest entity resource
- var highest = Presence.highestPriority(xid);
-
- if(highest)
- xid = highest;
-
- // Start a new adhoc command
- DataForm.go(xid, 'command', '', '', 'adhoc');
- } catch(e) {
- Console.error('AdHoc.retrieve', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Starts an adhoc command on the user server
- * @public
- * @param {string} server
- * @return {undefined}
- */
- self.server = function(server) {
-
- try {
- // Open the popup
- self.open();
-
- // Add a XID marker
- $('#adhoc .adhoc-head').html('<b>' + server.htmlEnc() + '</b>');
-
- // Start a new adhoc command
- DataForm.go(server, 'command', '', '', 'adhoc');
- } catch(e) {
- Console.error('AdHoc.server', e);
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.launch = function() {
-
- try {
- // Click event
- $('#adhoc .bottom .finish').click(self.close);
- } catch(e) {
- Console.error('AdHoc.launch', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/anonymous.js b/app/javascripts/anonymous.js
deleted file mode 100644
index f38f8198..00000000
--- a/app/javascripts/anonymous.js
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the anonymous mode JS script for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Authors: Valérian Saliou, LinkMauve
-
-*/
-
-// Bundle
-var Anonymous = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Registers connection handlers
- * @private
- * @param {object} con
- * @return {undefined}
- */
- self._registerHandlers = function(con) {
-
- try {
- con.registerHandler('message', Message.handle);
- con.registerHandler('presence', Presence.handle);
- con.registerHandler('iq', IQ.handle);
- con.registerHandler('onconnect', self.connected);
- con.registerHandler('onerror', Errors.handle);
- con.registerHandler('ondisconnect', self.disconnected);
- } catch(e) {
- Console.error('Anonymous._registerHandlers', e);
- }
-
- };
-
-
- /**
- * Connected to an anonymous session
- * @public
- * @return {undefined}
- */
- self.connected = function() {
-
- try {
- Console.info('Jappix (anonymous) is now connected.');
-
- // Connected marker
- Connection.connected = true;
- Connection.current_session = true;
- Connection.reconnect_try = 0;
- Connection.reconnect_timer = 0;
-
- // Not resumed?
- if(!Connection.resume) {
- // Create the app
- Talk.create();
-
- // Send our first presence
- Presence.sendFirst('');
-
- // Set last activity stamp
- DateUtils.last_activity = DateUtils.getTimeStamp();
-
- // Create the new groupchat
- Chat.checkCreate(Common.generateXID(ANONYMOUS_ROOM, 'groupchat'), 'groupchat');
-
- // Remove some nasty elements for the anonymous mode
- $('.tools-mucadmin, .tools-add').remove();
- }
-
- // Resumed
- else {
- // Send again our presence
- Presence.sendActions();
-
- // Change the title
- Interface.updateTitle();
- }
-
- // Remove the waiting icon
- Interface.removeGeneralWait();
- } catch(e) {
- Console.error('Anonymous.connected', e);
- }
-
- };
-
-
- /**
- * Disconnected from an anonymous session
- * @public
- * @return {undefined}
- */
- self.disconnected = function() {
-
- try {
- Console.info('Jappix (anonymous) is now disconnected.');
- } catch(e) {
- Console.error('Anonymous.disconnected', e);
- }
-
- };
-
-
- /**
- * Logins to a anonymous account
- * @public
- * @param {string} server
- * @return {boolean}
- */
- self.login = function(server) {
-
- try {
- if(Common.hasWebSocket()) {
- // WebSocket supported & configured
- con = new JSJaCWebSocketConnection({
- httpbase: HOST_WEBSOCKET
- });
- } else {
- var httpbase = (HOST_BOSH_MAIN || HOST_BOSH);
-
- // Check BOSH origin
- BOSH_SAME_ORIGIN = Origin.isSame(httpbase);
-
- // We create the new http-binding connection
- con = new JSJaCHttpBindingConnection({
- httpbase: httpbase
- });
- }
-
- // And we handle everything that happen
- self._registerHandlers(con);
-
- // We set the anonymous connection parameters
- oArgs = {};
- oArgs.domain = server;
- oArgs.authtype = 'saslanon';
- oArgs.resource = JAPPIX_RESOURCE + ' Anonymous (' + (new Date()).getTime() + ')';
- oArgs.secure = true;
- oArgs.xmllang = XML_LANG;
-
- // We connect !
- con.connect(oArgs);
-
- // Change the page title
- Interface.title('wait');
- } catch(e) {
- Console.error('Anonymous.login', e);
-
- // Reset Jappix
- self.disconnected();
-
- // Open an unknown error
- Board.openThisError(2);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.launch = function() {
-
- try {
- $(document).ready(function() {
- Console.info('Anonymous mode detected, connecting...');
-
- // We add the login wait div
- Interface.showGeneralWait();
-
- // Get the vars
- if(XMPPLinks.links_var.r) {
- ANONYMOUS_ROOM = XMPPLinks.links_var.r;
- }
-
- if(XMPPLinks.links_var.n) {
- ANONYMOUS_NICK = XMPPLinks.links_var.n;
- }
-
- // Fire the login action
- self.login(HOST_ANONYMOUS);
- });
- } catch(e) {
- Console.error('Anonymous.launch', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
-
-Anonymous.launch(); \ No newline at end of file
diff --git a/app/javascripts/attention.js b/app/javascripts/attention.js
deleted file mode 100644
index abcd44b8..00000000
--- a/app/javascripts/attention.js
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
-
-Jappix - An open social platform
-Implementation of XEP-0224: Attention
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Attention = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Displays attention message
- * @private
- * @param {string} xid
- * @param {string} body
- * @return {undefined}
- */
- self._display = function(xid, body, mode) {
-
- try {
- var name = Name.getBuddy(xid).htmlEnc();
- var hash = hex_md5(xid);
-
- // Compute some variables
- var message = Common._e(Common.printf("You requested %s's attention to the conversation", name));
-
- if(mode == 'him') {
- message = Common._e(Common.printf("%s requested your attention to the conversation", name));
- }
-
- if(body) {
- message += ' (' + body + ')';
- }
-
- // Display notification
- Message.display(
- 'chat',
- xid,
- hash,
- name,
- message,
- DateUtils.getCompleteTime(),
- DateUtils.getTimeStamp(),
- 'system-message',
- true,
- undefined,
- mode
- );
-
- // Add a marker to displayed message
- $('#' + hash + ' .content .one-line.system-message:last').addClass('attention-notice');
- } catch(e) {
- Console.error('Attention._display', e);
- }
-
- };
-
-
- /**
- * Sends attention stanza
- * @private
- * @param {string} xid
- * @param {string} body
- * @return {object}
- */
- self._stanza = function(xid, body) {
-
- try {
- var message = new JSJaCMessage();
- message.setType('headline');
- message.setTo(xid);
-
- if(body) {
- message.setBody(body);
- }
-
- // Attention node
- message.appendNode('attention', {
- 'xmlns': NS_URN_ATTENTION
- });
-
- con.send(message);
-
- return message;
- } catch(e) {
- Console.error('Attention._stanza', e);
- }
-
- };
-
-
- /**
- * Returns whether last attention message exists or not
- * @private
- * @param {string} xid
- * @return {boolean}
- */
- self._lastExists = function(xid, mode) {
-
- var last_exists = false;
-
- try {
- var line_sel = $('#' + hex_md5(xid) + ' .content .one-line[data-mode="' + mode + '"]:last');
- last_exists = line_sel.is('.system-message.attention-notice') ? true : false;
- } catch(e) {
- Console.error('Attention._lastExists', e);
- } finally {
- return last_exists;
- }
-
- };
-
-
- /**
- * Return whether entity supports attention notifications
- * @public
- * @param {string} xid
- * @return {boolean}
- */
- self.hasSupport = function(xid) {
-
- var has_support = false;
-
- try {
- has_support = true ? $('#' + hex_md5(xid)).attr('data-attention') == 'true' : false;
- } catch(e) {
- Console.error('Attention.hasSupport', e);
- } finally {
- return has_support;
- }
-
- };
-
-
- /**
- * Send an attention message
- * @public
- * @param {string} xid
- * @param {string} body
- * @return {undefined}
- */
- self.send = function(xid, body) {
-
- try {
- var mode = 'me';
-
- // Don't send attention message twice
- if(self._lastExists(xid, mode) === false) {
- // Send message stanza
- self._stanza(xid, body);
-
- // Display attention notification
- self._display(xid, body, mode);
- } else {
- Console.debug('Attention.send', 'Not sending attention message to: ' + xid + ' because already sent.');
- }
- } catch(e) {
- Console.error('Attention.send', e);
- }
-
- };
-
-
- /**
- * Receive an attention notification
- * @public
- * @param {string} xid
- * @return {undefined}
- */
- self.receive = function(xid, body) {
-
- try {
- var mode = 'him';
- var hash = hex_md5(xid);
-
- // Don't receive attention message twice
- if((self._lastExists(xid, mode) === false) && Common.exists('#' + hash)) {
- // Display attention notification
- self._display(xid, body, mode);
-
- // Show a notification
- Interface.messageNotify(hash, 'personal');
- Audio.play('catch-attention');
-
- Board.quick(
- xid,
- 'chat',
- Common._e("Attention to conversation requested."),
- Name.getBuddy(xid)
- );
- }
- } catch(e) {
- Console.error('Attention.receive', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/audio.js b/app/javascripts/audio.js
deleted file mode 100644
index 62652ea6..00000000
--- a/app/javascripts/audio.js
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the audio JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Audio = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Variables */
- self._timeout_stop = false;
-
-
- /**
- * Returns whether browser supports audio or not
- * @private
- * @return {boolean}
- */
- self._isSupported = function() {
-
- is_supported = true;
-
- try {
- if((BrowserDetect.browser == 'Explorer') && (BrowserDetect.version < 9)) {
- is_supported = false;
- }
- } catch(e) {
- Console.error('Audio._isSupported', e);
- } finally {
- return is_supported;
- }
-
- };
-
-
- /**
- * Append audio DOM code
- * @private
- * @return {undefined}
- */
- self._appendDOM = function() {
-
- try {
- // If the audio elements aren't yet in the DOM
- if(!Common.exists('#audio')) {
- $('body').append(
- '<div id="audio">' +
- '<audio id="new-chat" preload="auto" data-duration="2">' +
- '<source src="' + './sounds/new-chat.mp3' + '" />' +
- '<source src="' + './sounds/new-chat.oga' + '" />' +
- '</audio>' +
-
- '<audio id="receive-message" preload="auto" data-duration="2">' +
- '<source src="' + './sounds/receive-message.mp3' + '" />' +
- '<source src="' + './sounds/receive-message.oga' + '" />' +
- '</audio>' +
-
- '<audio id="notification" preload="auto" data-duration="2">' +
- '<source src="' + './sounds/notification.mp3' + '" />' +
- '<source src="' + './sounds/notification.oga' + '" />' +
- '</audio>' +
-
- '<audio id="catch-attention" preload="auto" data-duration="3">' +
- '<source src="' + './sounds/catch-attention.mp3' + '" />' +
- '<source src="' + './sounds/catch-attention.oga' + '" />' +
- '</audio>' +
-
- '<audio id="incoming-call" preload="auto" data-duration="7">' +
- '<source src="' + './sounds/incoming-call.mp3' + '" />' +
- '<source src="' + './sounds/incoming-call.oga' + '" />' +
- '</audio>' +
-
- '<audio id="outgoing-call" preload="auto" data-duration="30">' +
- '<source src="' + './sounds/outgoing-call.mp3' + '" />' +
- '<source src="' + './sounds/outgoing-call.oga' + '" />' +
- '</audio>' +
- '</div>'
- );
- }
- } catch(e) {
- Console.error('Audio._appendDOM', e);
- }
-
- };
-
-
- /**
- * Plays the given sound ID
- * @public
- * @param {string} name
- * @return {boolean}
- */
- self.play = function(name, repeat) {
-
- try {
- repeat = (typeof repeat === 'boolean') ? repeat : false;
-
- // Not supported?
- if(!self._isSupported()) {
- return false;
- }
-
- // If the sounds are enabled
- if(DataStore.getDB(Connection.desktop_hash, 'options', 'sounds') === '1') {
- self._appendDOM();
-
- // We play the target sound
- var audio_raw_sel = $('#audio audio').filter('#' + name);
- var audio_sel = audio_raw_sel[0];
-
- if(audio_sel) {
- // Fixes Chrome audio bug when Get API serves expired files (for development work purposes)
- if(window.chrome && System.isDeveloper()) {
- audio_sel.load();
- }
-
- // Must repeat sound?
- if(repeat === true) {
- // We hardcoded sound duration as it's a mess to add load event handlers to determine duration via Audio API...
- var duration = parseInt((audio_raw_sel.attr('data-duration') || 0), 10);
-
- self._timeout_stop = false;
-
- audio_raw_sel.oneTime((duration + 's'), function() {
- if(!self._timeout_stop) {
- self.play(name, repeat);
- }
- });
- }
-
- audio_sel.play();
-
- Console.info('Played sound with name: ' + name + ' (' + (repeat ? 'repeatedly' : 'one time') + ')');
- } else {
- throw 'Sound does not exist: ' + name;
- }
- }
- } catch(e) {
- Console.error('Audio.play', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Stops the given sound ID
- * @public
- * @param {string} name
- * @return {boolean}
- */
- self.stop = function(name) {
-
- try {
- // Not supported?
- if(!self._isSupported()) {
- return false;
- }
-
- self._timeout_stop = true;
-
- // Check the audio container exists before doing anything...
- var audio_parent_sel = $('#audio');
- var audio_raw_sel = audio_parent_sel.find('audio').filter('#' + name);
- var audio_sel = audio_raw_sel[0];
-
- if(audio_parent_sel.size()) {
- audio_raw_sel.stopTime();
-
- if(audio_sel) {
- if(!audio_sel.paused) {
- audio_sel.pause();
-
- Console.info('Stopped sound with name: ' + name);
- } else {
- Console.info('Sound with name: ' + name + ' already stopped');
- }
- } else {
- throw 'Sound does not exist: ' + name;
- }
- } else {
- Console.warn('Audio container does not exist, aborting as nothing likely to be playing! (already stopped)');
- }
- } catch(e) {
- Console.error('Audio.stop', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/autocompletion.js b/app/javascripts/autocompletion.js
deleted file mode 100644
index 78f48b50..00000000
--- a/app/javascripts/autocompletion.js
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the autocompletion tools JS script for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Autocompletion = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Sort an autocompletion result array with insensitivity to the case,
- * using the 1st elements (a[0] and b[0]) to process comparison
- * @public
- * @param {array} a
- * @param {array} b
- * @return {undefined}
- */
- self.caseInsensitiveSort = function(a, b) {
-
- try {
- // Put the two strings into lower case
- var sort_a = a[0].toLowerCase();
- var sort_b = b[0].toLowerCase();
-
- // Process the sort
- if(sort_a > sort_b) {
- return 1;
- }
-
- if(sort_a < sort_b) {
- return -1;
- }
- } catch(e) {
- Console.error('Autocompletion.caseInsensitiveSort', e);
- }
-
- };
-
-
- /**
- * Split a query into its subqueries ready to be used in autocompletion
- * @public
- * @param {string} query
- * @return {object}
- */
- self.getSubQueries = function(query) {
-
- var result = [];
-
- try {
- var subqueries = [];
- var remnants = [];
-
- var query_last_char_pos = query.length - 1;
- var space_counter = 0;
- var cur_char;
-
- for(var i = query_last_char_pos; i >= 0; i--) {
- // Search from the end of the query
- cur_char = query.charAt(i);
-
- if(space_counter === 0 && cur_char.search(/\s/) === 0) {
- // The first "local" space was found
- // Add the subquery and its remnant to results
- subqueries.push(query.slice(i+1));
- remnants.push(query.slice(0, i+1));
-
- space_counter++;
- } else {
- space_counter = 0;
- }
- }
-
- if(space_counter === 0) {
- // If the first char of the query is not a space, add the full query to results
- subqueries.push(query);
- remnants.push('');
- }
-
- result = [subqueries, remnants];
- } catch(e) {
- Console.error('Autocompletion.getSubQueries', e);
- } finally {
- return result;
- }
-
- };
-
-
- /**
- * Creates an array with the autocompletion results. An autocompletion result
- * is an array containing the result himself and the rank of the query which
- * matched this answer
- * @public
- * @param {Array} query
- * @param {string} id
- * @return {Array}
- */
- self.process = function(query, id) {
-
- var results = [];
-
- try {
- // Replace forbidden characters in regex
- query = Common.escapeRegex(query);
-
- // Build an array of regex to use
- var query_reg_exp = [];
-
- for(i = 0; i < query.length; i++) {
- if(query[i] !== null) {
- query_reg_exp.push(
- new RegExp('(^)' + query[i], 'gi')
- );
- }
- }
-
- // Search in the roster
- var nick, regex;
-
- $('#' + id + ' .user').each(function() {
- nick = $(this).find('.name').text();
-
- for(i = 0; i < query_reg_exp.length; i++) {
- regex = query_reg_exp[i];
-
- if(nick.match(regex)) {
- results.push([nick, i]);
- }
- }
- });
-
- // Sort the array
- results = results.sort(
- self.caseInsensitiveSort
- );
- } catch(e) {
- Console.error('Autocompletion.process', e);
- } finally {
- return results;
- }
-
- };
-
-
- /**
- * Resets the autocompletion tools
- * @public
- * @param {string} hash
- * @return {undefined}
- */
- self.reset = function(hash) {
-
- try {
- $('#' + hash + ' .message-area').removeAttr('data-autocompletion-pointer')
- .removeAttr('data-autocompletion-query');
- } catch(e) {
- Console.error('Autocompletion.reset', e);
- }
-
- };
-
-
- /**
- * Autocompletes the chat input nick
- * @public
- * @param {string} hash
- * @return {undefined}
- */
- self.create = function(hash) {
-
- try {
- // Initialize
- var message_area_sel = $('#' + hash + ' .message-area');
- var value = message_area_sel.val();
-
- if(!value) {
- self.reset(hash);
- }
-
- var query = message_area_sel.attr('data-autocompletion-query');
-
- if(query === undefined) {
- // The autocompletion has not been yet launched
- query = self.getSubQueries(value);
- message_area_sel.attr('data-autocompletion-query', JSON.stringify(query));
- } else {
- // The autocompletion has already stored a query
- query = JSON.parse(query);
- }
-
- // Get the pointer
- var pointer = message_area_sel.attr('data-autocompletion-pointer');
- var i = pointer ? parseInt(pointer, 10) : 0;
-
- // We get the nickname
- var nick_result = self.process(query[0], hash)[i];
- var nick;
-
- if(nick_result !== undefined) {
- nick = nick_result[0];
- }
-
- // Shit, this is my nick!
- if((nick !== undefined) && (nick.toLowerCase() == Name.getMUCNick(hash).toLowerCase())) {
- // Increment
- i++;
-
- // Get the next nick
- nick_result = self.process(query[0], hash)[i];
-
- if (nick_result !== undefined) {
- nick = nick_result[0];
- }
- }
-
- // We quote the nick
- if((nick_result !== undefined) && (nick !== undefined)) {
- // Increment
- i++;
-
- Utils.quoteMyNick(
- hash,
- nick,
- query[1][nick_result[1]]
- );
-
- // Put a pointer
- message_area_sel.attr('data-autocompletion-pointer', i);
- }
- } catch(e) {
- Console.error('Autocompletion.create', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
diff --git a/app/javascripts/avatar.js b/app/javascripts/avatar.js
deleted file mode 100644
index 4aae5a51..00000000
--- a/app/javascripts/avatar.js
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the avatar JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou, Maranda
-
-*/
-
-// Bundle
-var Avatar = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Variables */
- self.pending = [];
-
-
- /**
- * Requests the avatar of a given user
- * @public
- * @param {string} xid
- * @param {string} mode
- * @param {boolean} enabled
- * @param {boolean} photo
- * @return {boolean}
- */
- self.get = function(xid, mode, enabled, photo) {
-
- /* REF: http://xmpp.org/extensions/xep-0153.html */
-
- try {
- // No need to get the avatar, another process is yet running
- if(Utils.existArrayValue(self.pending, xid)) {
- return false;
- }
-
- // Initialize: XML data is in one SQL entry, because some browser are sloooow with SQL requests
- var xml = Common.XMLFromString(
- DataStore.getPersistent('global', 'avatar', xid)
- );
- var forced = false;
-
- // Retrieving forced?
- if($(xml).find('forced').text() == 'true') {
- forced = true;
- }
-
- // No avatar in presence
- if(!photo && !forced && enabled == 'true') {
- // Pending marker
- self.pending.push(xid);
-
- // Reset the avatar
- self.reset(xid, hex_md5(xid));
-
- Console.warn('No avatar for: ' + xid);
- }
-
- // Try to catch the avatar
- else {
- // Define some stuffs
- var type = $(xml).find('type').text();
- var binval = $(xml).find('binval').text();
- var checksum = $(xml).find('checksum').text();
- var updated = false;
-
- // Process the checksum of the avatar
- if(checksum == photo || photo == 'forget' || forced) {
- updated = true;
- }
-
- // If the avatar is yet stored and a new retrieving is not needed
- if(mode == 'cache' && type && binval && checksum && updated) {
- // Pending marker
- self.pending.push(xid);
-
- // Display the cache avatar
- self.display(xid, hex_md5(xid), type, binval);
-
- Console.info('Read avatar from cache: ' + xid);
- }
-
- // Else if the request has not yet been fired, we get it
- else if((!updated || mode == 'force' || photo == 'forget') && enabled != 'false') {
- // Pending marker
- self.pending.push(xid);
-
- // Get the latest avatar
- var iq = new JSJaCIQ();
- iq.setType('get');
- iq.setTo(xid);
-
- iq.appendNode('vCard', {'xmlns': NS_VCARD});
-
- con.send(iq, self.handle);
-
- Console.info('Get avatar from server: ' + xid);
- }
- }
-
- return true;
- } catch(e) {
- Console.error('Avatar.get', e);
- }
-
- };
-
-
- /**
- * Handles the avatar
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handle = function(iq) {
-
- try {
- // Extract the XML values
- var handleXML = iq.getNode();
- var handleFrom = Common.fullXID(Common.getStanzaFrom(iq));
-
- // Is this me? Remove the resource!
- if(Common.bareXID(handleFrom) == Common.getXID()) {
- handleFrom = Common.bareXID(handleFrom);
- }
-
- // Get some other values
- var hash = hex_md5(handleFrom);
- var find = $(handleXML).find('vCard');
- var aChecksum = 'none';
- var oChecksum = null;
-
- // Read our own checksum
- if(handleFrom == Common.getXID()) {
- oChecksum = DataStore.getDB(Connection.desktop_hash, 'checksum', 1);
-
- // Avoid the "null" value
- if(!oChecksum) {
- oChecksum = '';
- }
- }
-
- // vCard not empty?
- if(find.size()) {
- // We get our profile details
- if(handleFrom == Common.getXID()) {
- // Get the names
- var names = Name.generateBuddy(iq);
- var phone_number = find.find('TEL:has(NUMBER):first NUMBER:first').text();
-
- // Write the values to the database
- DataStore.setDB(Connection.desktop_hash, 'profile', 'name', names[0]);
- DataStore.setDB(Connection.desktop_hash, 'profile', 'nick', names[1]);
- DataStore.setDB(Connection.desktop_hash, 'profile', 'phone', phone_number);
- }
-
- // We get the avatar
- var aType = find.find('TYPE:first').text();
- var aBinval = find.find('BINVAL:first').text();
-
- // No binval?
- if(!aBinval) {
- aType = 'none';
- aBinval = 'none';
- }
-
- // Enough data
- else {
- // No type?
- if(!aType) {
- aType = 'image/png';
- } else {
- aChecksum = hex_sha1(Base64.decode(aBinval));
- }
- }
-
- // We display the user avatar
- self.display(handleFrom, hash, aType, aBinval);
-
- // Store the avatar
- DataStore.setPersistent('global', 'avatar', handleFrom, '<avatar><type>' + aType + '</type><binval>' + aBinval + '</binval><checksum>' + aChecksum + '</checksum><forced>false</forced></avatar>');
-
- Console.info('Avatar retrieved from server: ' + handleFrom);
- }
-
- // vCard is empty
- else {
- self.reset(handleFrom);
- }
-
- // We got a new checksum for us?
- if(((oChecksum !== null) && (oChecksum != aChecksum)) || !Presence.first_sent) {
- // Define a proper checksum
- var pChecksum = aChecksum;
-
- if(pChecksum == 'none') {
- pChecksum = '';
- }
-
- // Update our temp. checksum
- DataStore.setDB(Connection.desktop_hash, 'checksum', 1, pChecksum);
-
- // Send the stanza
- if(!Presence.first_sent) {
- Storage.get(NS_OPTIONS);
- } else if(DataStore.hasPersistent()) {
- Presence.sendActions(pChecksum);
- }
- }
- } catch(e) {
- Console.error('Avatar.handle', e);
- }
-
- };
-
-
- /**
- * Reset the avatar of an user
- * @public
- * @param {string} xid
- * @param {string} hash
- * @return {undefined}
- */
- self.reset = function(xid, hash) {
-
- try {
- // Store the empty avatar
- DataStore.setPersistent('global', 'avatar', xid, '<avatar><type>none</type><binval>none</binval><checksum>none</checksum><forced>false</forced></avatar>');
-
- // Display the empty avatar
- self.display(xid, hash, 'none', 'none');
- } catch(e) {
- Console.error('Avatar.reset', e);
- }
-
- };
-
-
- /**
- * Displays the avatar of an user
- * @public
- * @param {string} xid
- * @param {string} hash
- * @param {string} type
- * @param {string} binval
- * @return {undefined}
- */
- self.display = function(xid, hash, type, binval) {
-
- try {
- // Initialize the vars
- var container = hash + ' .avatar-container';
- var code = '<img class="avatar" src="';
-
- // If the avatar exists
- if((type != 'none') && (binval != 'none')) {
- code += 'data:' + type + ';base64,' + binval;
- } else {
- code += './images/others/default-avatar.png';
- }
-
- code += '" alt="" />';
-
- // Replace with the new avatar (in the roster and in the chat)
- $('.' + container).html(code);
-
- // We can remove the pending marker
- Utils.removeArrayValue(self.pending, xid);
- } catch(e) {
- Console.error('Avatar.display', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/base64.js b/app/javascripts/base64.js
deleted file mode 100644
index 1ef35286..00000000
--- a/app/javascripts/base64.js
+++ /dev/null
@@ -1,82 +0,0 @@
-// License: PD
-
-// This code was written by Tyler Akins and has been placed in the
-// public domain. It would be nice if you left this header intact.
-// Base64 code from Tyler Akins -- http://rumkin.com
-
-var Base64 = (function () {
- var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
-
- var obj = {
- /**
- * Encodes a string in base64
- * @param {String} input The string to encode in base64.
- */
- encode: function (input) {
- var output = "";
- var chr1, chr2, chr3;
- var enc1, enc2, enc3, enc4;
- var i = 0;
-
- do {
- chr1 = input.charCodeAt(i++);
- chr2 = input.charCodeAt(i++);
- chr3 = input.charCodeAt(i++);
-
- enc1 = chr1 >> 2;
- enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
- enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
- enc4 = chr3 & 63;
-
- if (isNaN(chr2)) {
- enc3 = enc4 = 64;
- } else if (isNaN(chr3)) {
- enc4 = 64;
- }
-
- output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) +
- keyStr.charAt(enc3) + keyStr.charAt(enc4);
- } while (i < input.length);
-
- return output;
- },
-
- /**
- * Decodes a base64 string.
- * @param {String} input The string to decode.
- */
- decode: function (input) {
- var output = "";
- var chr1, chr2, chr3;
- var enc1, enc2, enc3, enc4;
- var i = 0;
-
- // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
- input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
-
- do {
- enc1 = keyStr.indexOf(input.charAt(i++));
- enc2 = keyStr.indexOf(input.charAt(i++));
- enc3 = keyStr.indexOf(input.charAt(i++));
- enc4 = keyStr.indexOf(input.charAt(i++));
-
- chr1 = (enc1 << 2) | (enc2 >> 4);
- chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
- chr3 = ((enc3 & 3) << 6) | enc4;
-
- output = output + String.fromCharCode(chr1);
-
- if (enc3 != 64) {
- output = output + String.fromCharCode(chr2);
- }
- if (enc4 != 64) {
- output = output + String.fromCharCode(chr3);
- }
- } while (i < input.length);
-
- return output;
- }
- };
-
- return obj;
-})(); \ No newline at end of file
diff --git a/app/javascripts/board.js b/app/javascripts/board.js
deleted file mode 100644
index fd73bd4d..00000000
--- a/app/javascripts/board.js
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the notification board JS script for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou, Maranda
-
-*/
-
-// Bundle
-var Board = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Contants */
- self.NOTIFICATION = (window.Notification || window.mozNotification || window.webkitNotification);
-
-
- /**
- * Generate board info message
- * @private
- * @param {string} id
- * @return {string}
- */
- self._generateBoardInfo = function(id) {
-
- var text = null;
-
- try {
- switch(id) {
- // Password change
- case 1:
- text = Common._e("Your password has been changed, now you can connect to your account with your new login data.");
-
- break;
-
- // Account deletion
- case 2:
- text = Common._e("Your XMPP account has been removed, bye!");
-
- break;
-
- // Account logout
- case 3:
- text = Common._e("You have been logged out of your XMPP account, have a nice day!");
-
- break;
-
- // Groupchat join
- case 4:
- text = Common._e("The room you tried to join doesn't seem to exist.");
-
- break;
-
- // Groupchat removal
- case 5:
- text = Common._e("The groupchat has been removed.");
-
- break;
-
- // Non-existant groupchat user
- case 6:
- text = Common._e("The user that you want to reach is not present in the room.");
-
- break;
- }
- } catch(e) {
- Console.error('Board._generateBoardInfo', e);
- } finally {
- return text;
- }
-
- };
-
-
- /**
- * Generate board error message
- * @private
- * @param {string} id
- * @return {string}
- */
- self._generateBoardError = function(id) {
-
- var text = null;
-
- try {
- switch(id) {
- // Custom error
- case 1:
- text = '<b>' + Common._e("Error") + '</b> &raquo; <span></span>';
-
- break;
-
- // Network error
- case 2:
- text = Common._e("Jappix has been interrupted by a network issue, a bug or bad login (check that you entered the right credentials), sorry for the inconvenience.");
-
- break;
-
- // List retrieving error
- case 3:
- text = Common._e("The element list on this server could not be obtained!");
-
- break;
-
- // Attaching error
- case 4:
- text = Common.printf(Common._e("An error occured while uploading your file: maybe it is too big (%s maximum) or forbidden!"), JAPPIX_MAX_UPLOAD);
-
- break;
- }
- } catch(e) {
- Console.error('Board._generateBoardError', e);
- } finally {
- return text;
- }
-
- };
-
-
- /**
- * Attaches board events
- * @private
- * @param {object} board_sel
- * @return {undefined}
- */
- self._attachEvents = function(board_sel) {
-
- try {
- board_sel.click(function() {
- self.closeThis(this);
- });
-
- board_sel.oneTime('5s', function() {
- self.closeThis(this);
- });
-
- board_sel.slideDown();
- } catch(e) {
- Console.error('Board._attachEvents', e);
- }
-
- };
-
-
- /**
- * Creates a board panel
- * @public
- * @param {string} type
- * @param {string} id
- * @return {boolean}
- */
- self.create = function(type, id) {
-
- try {
- // Text var
- var text = '';
-
- // Info
- if(type == 'info') {
- text = self._generateBoardInfo(id);
- } else {
- text = self._generateBoardError(id);
- }
-
- // No text?
- if(!text) {
- return false;
- }
-
- // Append the content
- $('#board').append(
- '<div class="one-board ' + type + '" data-id="' + id + '">' + text + '</div>'
- );
-
- // Events (click and auto-hide)
- self._attachEvents(
- $('#board .one-board.' + type + '[data-id="' + id + '"]')
- );
-
- return true;
- } catch(e) {
- Console.error('Board.create', e);
- }
-
- };
-
-
- /**
- * Destroys the existing board notifications
- * @public
- * @return {undefined}
- */
- self.destroy = function() {
-
- try {
- $('#board').empty();
- } catch(e) {
- Console.error('Board.destroy', e);
- }
-
- };
-
-
- /**
- * Executes a given action on the notification board
- * @public
- * @param {type} name
- * @return {undefined}
- */
- self.action = function(id, type) {
-
- try {
- // In a first, we destroy other boards
- self.destroy();
-
- // Then we display the board
- self.create(type, id);
- } catch(e) {
- Console.error('Board.action', e);
- }
-
- };
-
-
- /**
- * Opens a given error ID
- * @public
- * @param {string} id
- * @return {undefined}
- */
- self.openThisError = function(id) {
-
- try {
- self.action(id, 'error');
- } catch(e) {
- Console.error('Board.openThisError', e);
- }
-
- };
-
-
- /**
- * Opens a given info ID
- * @public
- * @param {string} id
- * @return {undefined}
- */
- self.openThisInfo = function(id) {
-
- try {
- self.action(id, 'info');
- } catch(e) {
- Console.error('Board.openThisInfo', e);
- }
-
- };
-
-
- /**
- * Closes a given board
- * @public
- * @param {string} board
- * @return {undefined}
- */
- self.closeThis = function(board) {
-
- try {
- $(board).slideUp('normal', function() {
- $(this).remove();
- });
- } catch(e) {
- Console.error('Board.closeThis', e);
- }
-
- };
-
-
- /**
- * Creates a quick board (HTML5 notification)
- * @public
- * @param {string} xid
- * @param {string} type
- * @param {string} content
- * @param {string} title
- * @param {string} icon
- * @return {object}
- */
- self.quick = function(xid, type, content, title, icon) {
-
- try {
- // Cannot process?
- if(Common.isFocused() || !content || !self.NOTIFICATION) {
- return;
- }
-
- // Default icon?
- if(!icon) {
- icon = './images/others/default-avatar.png';
-
- // Avatar icon?
- if(xid) {
- var avatar_xml = Common.XMLFromString(
- DataStore.getPersistent('global', 'avatar', xid)
- );
-
- var avatar_type = $(avatar_xml).find('type').text() || 'image/png';
- var avatar_binval = $(avatar_xml).find('binval').text();
-
- if(avatar_binval && avatar_type) {
- icon = 'data:' + avatar_type + ';base64,' + avatar_binval;
- }
- }
- }
-
- // Default title?
- if(!title) {
- title = Common._e("New event!");
- }
-
- // Create notification
- var notification = new self.NOTIFICATION(title, {
- dir: 'auto',
- lang: '',
- body: content,
- tag: type,
- icon: icon
- });
-
- // Click event
- notification.onclick = function() {
- // Click action?
- switch(type) {
- case 'chat':
- Interface.switchChan(hex_md5(xid));
- break;
-
- case 'groupchat':
- Interface.switchChan(hex_md5(Common.bareXID(xid)));
- break;
-
- default:
- break;
- }
-
- // Focus on msg-me
- window.focus();
-
- // Remove notification
- this.close();
- };
-
- // Show event
- notification.onshow = function() {
- setTimeout(function() {
- notification.close();
- }, 10000);
- };
-
- return notification;
- } catch(e) {
- Console.error('Board.quick', e);
- }
-
- };
-
-
- /**
- * Asks for permission to show quick boards (HTML5 notification)
- * @public
- * @return {undefined}
- */
- self.quickPermission = function() {
-
- try {
- self.NOTIFICATION.requestPermission();
- } catch(e) {
- Console.error('Board.quickPermission', e);
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.launch = function() {
-
- try {
- // Fires quickPermission() on document click
- $(document).click(function() {
- // Ask for permission to use quick boards
- if((typeof con != 'undefined') && con.connected()) {
- self.quickPermission();
- }
- });
- } catch(e) {
- Console.error('Board.launch', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
-
-Board.launch(); \ No newline at end of file
diff --git a/app/javascripts/browser-detect.js b/app/javascripts/browser-detect.js
deleted file mode 100644
index cef3c4a8..00000000
--- a/app/javascripts/browser-detect.js
+++ /dev/null
@@ -1,125 +0,0 @@
-/* BROWSER DETECT
- * http://www.quirksmode.org/js/detect.html
- * License: dual-licensed under MPLv2 and the original license
- */
-
-var BrowserDetect = {
- init: function () {
- this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
- this.version = this.searchVersion(navigator.userAgent) ||
- this.searchVersion(navigator.appVersion) ||
- "an unknown version";
- this.OS = this.searchString(this.dataOS) || "an unknown OS";
- },
-
- searchString: function (data) {
- for (var i=0;i<data.length;i++) {
- var dataString = data[i].string;
- var dataProp = data[i].prop;
- this.versionSearchString = data[i].versionSearch || data[i].identity;
- if (dataString) {
- if (dataString.indexOf(data[i].subString) != -1)
- return data[i].identity;
- }
- else if (dataProp)
- return data[i].identity;
- }
- },
-
- searchVersion: function (dataString) {
- var index = dataString.indexOf(this.versionSearchString);
- if (index == -1) return;
- return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
- },
-
- dataBrowser: [
- {
- string: navigator.userAgent,
- subString: "Chrome",
- identity: "Chrome"
- },
- { string: navigator.userAgent,
- subString: "OmniWeb",
- versionSearch: "OmniWeb/",
- identity: "OmniWeb"
- },
- {
- string: navigator.vendor,
- subString: "Apple",
- identity: "Safari",
- versionSearch: "Version"
- },
- {
- prop: window.opera,
- identity: "Opera"
- },
- {
- string: navigator.vendor,
- subString: "iCab",
- identity: "iCab"
- },
- {
- string: navigator.vendor,
- subString: "KDE",
- identity: "Konqueror"
- },
- {
- string: navigator.userAgent,
- subString: "Firefox",
- identity: "Firefox"
- },
- {
- string: navigator.vendor,
- subString: "Camino",
- identity: "Camino"
- },
- { // for newer Netscapes (6+)
- string: navigator.userAgent,
- subString: "Netscape",
- identity: "Netscape"
- },
- {
- string: navigator.userAgent,
- subString: "MSIE",
- identity: "Explorer",
- versionSearch: "MSIE"
- },
- {
- string: navigator.userAgent,
- subString: "Gecko",
- identity: "Mozilla",
- versionSearch: "rv"
- },
- { // for older Netscapes (4-)
- string: navigator.userAgent,
- subString: "Mozilla",
- identity: "Netscape",
- versionSearch: "Mozilla"
- }
- ],
-
- dataOS : [
- {
- string: navigator.platform,
- subString: "Win",
- identity: "Windows"
- },
- {
- string: navigator.platform,
- subString: "Mac",
- identity: "Mac"
- },
- {
- string: navigator.userAgent,
- subString: "iPhone",
- identity: "iPhone/iPod"
- },
- {
- string: navigator.platform,
- subString: "Linux",
- identity: "Linux"
- }
- ]
-};
-
-BrowserDetect.init();
diff --git a/app/javascripts/bubble.js b/app/javascripts/bubble.js
deleted file mode 100644
index def91a44..00000000
--- a/app/javascripts/bubble.js
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the bubble JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Bubble = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Closes all the opened bubbles
- * @public
- * @return {boolean}
- */
- self.close = function() {
-
- try {
- // Destroy all the elements
- $('.bubble.hidable:visible').hide();
- $('.bubble.removable').remove();
-
- $('body').off('click');
- } catch(e) {
- Console.error('Bubble.close', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Click function when a bubble is opened
- * @public
- * @param {object} selector
- * @return {boolean}
- */
- self.show = function(selector) {
-
- try {
- // Hidable bubbles special things
- if($(selector).is('.hidable')) {
- // This bubble is yet displayed? So abort!
- if($(selector).is(':visible')) {
- return self.close();
- }
-
- // Close all the bubbles
- self.close();
-
- // Show the requested bubble
- $(selector).show();
- }
-
- // Removable bubbles special things
- else {
- // This bubble is yet added? So abort!
- if(Common.exists(selector)) {
- return self.close();
- }
-
- // Close all the bubbles
- self.close();
- }
-
- // Creates a new click event to close the bubble
- $('body').on('click', function(evt) {
- var target = evt.target;
-
- // If this is a click away from a bubble
- if(!$(target).parents('.ibubble').size()) {
- self.close();
- }
- });
- } catch(e) {
- Console.error('Bubble.show', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/call.js b/app/javascripts/call.js
deleted file mode 100644
index 0ddb9aca..00000000
--- a/app/javascripts/call.js
+++ /dev/null
@@ -1,1095 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the call common management functions
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Call = (function() {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Variables */
- self._start_stamp = 0;
- self.call_auto_accept = {
- 'from' : null,
- 'sid' : null
- };
-
-
- /**
- * Provides an adapter to the JSJaCJingle console implementation which is different
- * @private
- * @return {object}
- */
- self._consoleAdapter = (function() {
-
- /**
- * Alias of this
- * @private
- */
- var _console = {};
-
-
- /**
- * Console logging interface (adapted)
- * @public
- * @param {string} message
- * @param {number} loglevel
- * @return {undefined}
- */
- _console.log = function(message, loglevel) {
-
- try {
- if(!message) {
- throw 'No message passed to console adapter!';
- }
-
- switch(loglevel) {
- case 0:
- Console.warn(message); break;
- case 1:
- Console.error(message); break;
- case 2:
- Console.info(message); break;
- case 4:
- Console.debug(message); break;
- default:
- Console.log(message);
- }
- } catch(e) {
- Console.error('Call._consoleAdapter.log', e);
- }
-
- };
-
-
- /**
- * Return sub-class scope
- */
- return _console;
-
- })();
-
-
- /**
- * Initializes Jingle router
- * @public
- * @return {undefined}
- */
- self.init = function() {
-
- try {
- // Listen for incoming Jingle/Muji packet
- JSJaCJingle.listen({
- connection: con,
- debug: self._consoleAdapter,
-
- // TODO: setting a fallback fucks up some calls...
- // fallback: './server/jingle.php',
-
- single_initiate: function(stanza) {
- try {
- // Already in a call?
- if(self.is_ongoing()) {
- // Try to restore SID there
- var stanza_id = stanza.getID();
- var sid = null;
-
- if(stanza_id) {
- var stanza_id_split = stanza_id.split('_');
- sid = stanza_id_split[1];
- }
-
- // Build a temporary Jingle session
- var jingle_close = new JSJaCJingle.session(
- JSJAC_JINGLE_SESSION_SINGLE,
- {
- to: stanza.getFrom(),
- debug: JSJaCJingleStorage.get_debug()
- }
- );
-
- if(sid) {
- jingle_close._set_sid(sid);
- }
-
- jingle_close.terminate(JSJAC_JINGLE_REASON_BUSY);
-
- Console.warn('session_initiate_success', 'Dropped incoming call because already in a call.');
-
- return;
- }
-
- var xid = Common.fullXID(Common.getStanzaFrom(stanza));
-
- Console.info('Incoming call from: ' + xid);
-
- // Session values
- Jingle.receive(xid, stanza);
- } catch(e) {
- Console.error('Call.init[single_initiate]', e);
- }
- },
-
- single_propose: function(stanza, proposed_medias) {
- try {
- var stanza_from = stanza.getFrom() || null;
- var call_id = JSJaCJingleBroadcast.get_call_id(stanza);
-
- // Request for Jingle session to be accepted
- if(stanza_from && call_id) {
- var call_media_main = 'audio';
-
- if(JSJAC_JINGLE_MEDIA_VIDEO in proposed_medias) {
- call_media_main = 'video';
- }
-
- Call.notify(
- JSJAC_JINGLE_SESSION_SINGLE,
- Common.bareXID(stanza_from),
- ('broadcast_' + call_media_main),
- call_media_main,
- null,
-
- {
- full_xid: stanza_from,
- call_id: call_id,
- medias: proposed_medias
- }
- );
-
- Audio.play('incoming-call', true);
-
- // Save initiator (security: don't save SID until it's accepted)
- self.call_auto_accept.from = stanza_from;
- self.call_auto_accept.sid = null;
- }
- } catch(e) {
- Console.error('Call.init[single_propose]', e);
- }
- },
-
- single_retract: function(stanza) {
- try {
- var stanza_from = stanza.getFrom() || null;
- var call_id = JSJaCJingleBroadcast.get_call_id(stanza);
- var call_medias = JSJaCJingleBroadcast.get_call_medias(call_id);
-
- // Call retracted (from initiator)
- if(self.call_auto_accept.from == stanza_from) {
- Audio.stop('incoming-call');
-
- Call.notify(
- JSJAC_JINGLE_SESSION_SINGLE,
- Common.bareXID(stanza_from),
- 'remote_canceled'
- );
- }
- } catch(e) {
- Console.error('Call.init[single_retract]', e);
- }
- },
-
- single_accept: function(stanza) {
- try {
- var stanza_from = stanza.getFrom() || null;
- var call_id = JSJaCJingleBroadcast.get_call_id(stanza);
-
- // Another resource accepted the call
- if(self.call_auto_accept.sid == call_id &&
- stanza_from && Common.getFullXID() != stanza_from) {
- self._unnotify();
- Audio.stop('incoming-call');
- }
- } catch(e) {
- Console.error('Call.init[single_accept]', e);
- }
- },
-
- single_reject: function(stanza) {
- try {
- var stanza_from = stanza.getFrom() || null;
- var call_id = JSJaCJingleBroadcast.get_call_id(stanza);
-
- // Another resource rejected the call
- if(self.call_auto_accept.sid == call_id &&
- stanza_from && Common.getFullXID() != stanza_from) {
- self._unnotify();
- Audio.stop('incoming-call');
- }
- } catch(e) {
- Console.error('Call.init[single_reject]', e);
- }
- },
-
- single_proceed: function(stanza) {
- try {
- // Read broadcast parameters
- var call_to = stanza.getFrom() || null;
- var call_id = JSJaCJingleBroadcast.get_call_id(stanza);
- var call_medias = JSJaCJingleBroadcast.get_call_medias(call_id);
-
- // Check medias to include
- var has_media_video = false;
-
- for(var i = 0; i < call_medias.length; i++) {
- if(call_medias[i] === JSJAC_JINGLE_MEDIA_VIDEO) {
- has_media_video = true;
- break;
- }
- }
-
- var call_media_picked = has_media_video ? JSJAC_JINGLE_MEDIA_VIDEO : JSJAC_JINGLE_MEDIA_AUDIO;
-
- // Follow up Jingle call
- Jingle.follow_up(call_to, call_media_picked, call_id);
- } catch(e) {
- Console.error('Call.init[single_proceed]', e);
- }
- },
-
- // Receive a multiparty (Muji) call
- muji_invite: function(stanza, args) {
- try {
- if(!self.is_ongoing()) {
- // Session values
- Muji.receive(args, stanza);
- }
- } catch(e) {
- Console.error('Call.init[muji_invite]', e);
- }
- }
- });
-
- // Enable Jingle/Muji UI elements if plugin could start
- if(JSJAC_JINGLE_AVAILABLE) {
- $('.jingle-hidable, .muji-hidable').show();
- }
- } catch(e) {
- Console.error('Call.init', e);
- }
-
- };
-
-
- /**
- * Opens the call interface
- * @public
- * @return {undefined}
- */
- self.open = function() {
-
- try {
- if(Jingle.in_call()) {
- Jingle.open();
- } else if(Muji.in_call()) {
- Muji.open();
- }
- } catch(e) {
- Console.error('Call.open', e);
- }
-
- };
-
-
- /**
- * Stops current call
- * @public
- * @param {boolean} abort
- * @return {boolean}
- */
- self.stop = function(abort) {
-
- try {
- Jingle.stop(abort);
- Muji.stop(abort);
- } catch(e) {
- Console.error('Call.stop', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Mutes current call
- * @public
- * @param {object} session
- * @param {object} controls
- * @return {undefined}
- */
- self.mute = function(session, controls) {
-
- try {
- if(session) {
- // Toggle interface buttons
- controls.filter('.mute').hide();
- controls.filter('.unmute').show();
-
- // Actually mute audio stream
- if(session.get_mute(JSJAC_JINGLE_MEDIA_AUDIO) === false) {
- session.mute(JSJAC_JINGLE_MEDIA_AUDIO);
- }
- }
- } catch(e) {
- Console.error('Call.mute', e);
- }
-
- };
-
-
- /**
- * Unmutes current call
- * @public
- * @param {object} session
- * @param {object} controls
- * @return {undefined}
- */
- self.unmute = function(session, controls) {
-
- try {
- if(session) {
- controls.filter('.unmute').hide();
- controls.filter('.mute').show();
-
- if(session.get_mute(JSJAC_JINGLE_MEDIA_AUDIO) === true) {
- session.unmute(JSJAC_JINGLE_MEDIA_AUDIO);
- }
- }
- } catch(e) {
- Console.error('Call.mute', e);
- }
-
- };
-
-
- /**
- * Checks whether user is in call or not
- * @public
- * @return {boolean}
- */
- self.is_ongoing = function() {
-
- is_ongoing = false;
-
- try {
- is_ongoing = (Jingle.in_call() === true || Muji.in_call() === true);
- } catch(e) {
- Console.error('Call.is_ongoing', e);
- } finally {
- return is_ongoing;
- }
-
- };
-
-
- /**
- * Checks if the given call SID is the same as the current call's one
- * @public
- * @param {object} session
- * @param {object} compare_session
- * @return {boolean}
- */
- self.is_same_sid = function(session, compare_session) {
-
- is_same = false;
-
- try {
- if(compare_session && session &&
- compare_session.get_sid() === session.get_sid()) {
- is_same = true;
- }
- } catch(e) {
- Console.error('Call.is_same_sid', e);
- } finally {
- return is_same;
- }
-
- };
-
-
- /**
- * Returns if current call is audio
- * @public
- * @param {object} session
- * @return {boolean}
- */
- self.is_audio = function(session) {
-
- audio = false;
-
- try {
- if(session && session.get_media() === JSJAC_JINGLE_MEDIA_AUDIO) {
- audio = true;
- }
- } catch(e) {
- Console.error('Call.is_audio', e);
- } finally {
- return audio;
- }
-
- };
-
-
- /**
- * Returns if current call is video
- * @public
- * @param {object} session
- * @return {boolean}
- */
- self.is_video = function(session) {
-
- video = false;
-
- try {
- if(session && session.get_media() === JSJAC_JINGLE_MEDIA_VIDEO) {
- video = true;
- }
- } catch(e) {
- Console.error('Call.is_video', e);
- } finally {
- return video;
- }
-
- };
-
-
- /**
- * Set the Muji session as started
- * @public
- * @param {string} mode
- * @return {boolean}
- */
- self.start_session = function(mode) {
-
- try {
- if(!(mode in JSJAC_JINGLE_MEDIAS)) {
- throw 'Unknown mode: ' + (mode || 'none');
- }
-
- var call_tool_sel = $('#top-content .tools.call');
-
- call_tool_sel.removeClass('audio video active');
- call_tool_sel.addClass('streaming').addClass(mode);
-
- Console.info('Call session successfully started, mode: ' + (mode || 'none'));
- } catch(e) {
- Console.error('Call.start_session', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Set the Jingle session as stopped
- * @public
- * @param {string} mode
- * @return {boolean}
- */
- self.stop_session = function() {
-
- try {
- $('#top-content .tools.call').removeClass('audio video active streaming');
-
- Console.info('Call session successfully stopped');
- } catch(e) {
- Console.error('Call.stop_session', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Generates ICE servers configuration
- * @public
- * @return {object}
- */
- self.generate_ice_servers = function() {
-
- ice_servers = {
- stun: [],
- turn: []
- };
-
- try {
- if(HOST_STUN) {
- ice_servers.stun.push({
- 'host': HOST_STUN
- });
- }
-
- if(HOST_TURN) {
- ice_servers.turn.push({
- 'host': HOST_TURN,
- 'username': HOST_TURN_USERNAME,
- 'credential': HOST_TURN_PASSWORD
- });
- }
- } catch(e) {
- Console.error('Call.generate_ice_servers', e);
- } finally {
- return is_ongoing;
- }
-
- };
-
-
- /**
- * Returns the notification map (based on call type)
- * @private
- * @param {string} call_type
- * @return {object}
- */
- self._get_notify_map = function(call_type) {
-
- var map = {};
-
- try {
- switch(call_type) {
- case JSJAC_JINGLE_SESSION_SINGLE:
- map = Jingle._notify_map(); break;
- case JSJAC_JINGLE_SESSION_MUJI:
- map = Muji._notify_map(); break;
- default:
- return;
- }
- } catch(e) {
- Console.error('Call._get_notify_map', e);
- } finally {
- return map;
- }
-
- };
-
-
- /**
- * Notify for something related to calls
- * @public
- * @param {string} call_type
- * @param {string} xid
- * @param {string} type
- * @param {string} mode
- * @param {object} [options_arr]
- * @return {boolean}
- */
- self.notify = function(call_type, xid, type, mode, sender_xid, options_arr) {
-
- try {
- sender_xid = sender_xid || xid;
-
- // Notification data map
- var map = self._get_notify_map(call_type);
-
- if(!(type in map)) {
- throw 'Notification type not recognized!';
- }
-
- // Selectors
- var call_tools_all_sel = $('#top-content .tools-all:has(.tools.call)');
- var call_tool_sel = call_tools_all_sel.find('.tools.call');
- var call_content_sel = call_tools_all_sel.find('.call-content');
- var call_subitem_sel = call_content_sel.find('.tools-content-subitem');
-
- // Generate proper full name
- var fullname;
-
- if(call_type === JSJAC_JINGLE_SESSION_MUJI && sender_xid === Common.getXID()) {
- fullname = Common._e("Conference call");
- } else {
- fullname = Name.getBuddy(sender_xid).htmlEnc();
- }
-
- // Generate buttons code
- var buttons_html = '';
- var i = 0;
-
- if(typeof map[type].buttons === 'object') {
- $.each(map[type].buttons, function(button, attrs) {
- buttons_html += '<a class="reply-button ' + button + ' ' + attrs.color + ' ' + (!(i++) ? 'first' : '') + '" data-action="' + button + '">' + attrs.text + '</a>';
- });
- }
-
- // Append notification to DOM
- call_subitem_sel.html(
- '<div class="call-notify notify-' + type + ' ' + hex_md5(sender_xid) + '" data-type="' + type + '" data-xid="' + Common.encodeQuotes(xid) + '">' +
- '<div class="avatar-pane">' +
- '<div class="avatar-container">' +
- '<img class="avatar" src="' + './images/others/default-avatar.png' + '" alt="" />' +
- '</div>' +
-
- '<span class="icon call-images"></span>' +
- '</div>' +
-
- '<div class="notification-content">' +
- '<span class="fullname">' + fullname + '</span>' +
- '<span class="text">' + map[type].text + '</span>' +
-
- '<div class="reply-buttons">' + buttons_html + '</div>' +
- '</div>' +
- '</div>'
- );
-
- // Apply user avatar
- Avatar.get(sender_xid, 'cache', 'true', 'forget');
-
- // Apply button events
- if(typeof map[type].buttons === 'object') {
- $.each(map[type].buttons, function(button, attrs) {
- call_tools_all_sel.find('a.reply-button[data-action="' + button + '"]').click(function() {
- try {
- // Remove notification
- self._unnotify();
-
- // Execute callback, if any
- if(typeof attrs.cb === 'function') {
- attrs.cb(xid, mode, options_arr);
- }
-
- Console.info('Closed call notification drawer');
- } catch(e) {
- Console.error('Call.notify[async]', e);
- } finally {
- return false;
- }
- });
- });
- }
-
- // Enable notification box!
- call_tool_sel.addClass('active');
-
- // Open notification box!
- call_content_sel.show();
- } catch(e) {
- Console.error('Call.notify', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Remove notification
- * @private
- * @return {boolean}
- */
- self._unnotify = function() {
-
- try {
- // Selectors
- var call_tools_all_sel = $('#top-content .tools-all:has(.tools.call)');
- var call_tool_sel = call_tools_all_sel.find('.tools.call');
- var call_content_sel = call_tools_all_sel.find('.call-content');
- var call_subitem_sel = call_content_sel.find('.tools-content-subitem');
-
- // Close & disable notification box
- call_content_sel.hide();
- call_subitem_sel.empty();
- call_tool_sel.removeClass('active');
-
- // Stop all sounds
- Audio.stop('incoming-call');
- Audio.stop('outgoing-call');
- } catch(e) {
- Console.error('Call._unnotify', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Processes the video elements size
- * @private
- * @param {object} screen
- * @param {object} video
- * @return {object}
- */
- self._process_size = function(screen, video) {
-
- try {
- if(!(typeof screen === 'object' && typeof video === 'object')) {
- throw 'Invalid object passed, aborting!';
- }
-
- // Get the intrinsic size of the video
- var video_w = video[0].videoWidth || video.width();
- var video_h = video[0].videoHeight || video.height();
-
- // Get the screen size of the video
- var screen_w = screen.width();
- var screen_h = screen.height();
-
- // Process resize ratios (2 cases)
- var r_1 = screen_h / video_h;
- var r_2 = screen_w / video_w;
-
- // Process resized video sizes
- var video_w_1 = video_w * r_1;
- var video_h_1 = video_h * r_1;
-
- var video_w_2 = video_w * r_2;
- var video_h_2 = video_h * r_2;
-
- // DOM view modifiers
- var dom_width = 'auto';
- var dom_height = 'auto';
- var dom_left = 0;
- var dom_top = 0;
-
- // Landscape/Portrait/Equal container?
- if(video_w > video_h || (video_h == video_w && screen_w < screen_h)) {
- // Not sufficient?
- if(video_w_1 < screen_w) {
- dom_width = screen_w + 'px';
- dom_top = -1 * (video_h_2 - screen_h) / 2;
- } else {
- dom_height = screen_h + 'px';
- dom_left = -1 * (video_w_1 - screen_w) / 2;
- }
- } else if(video_h > video_w || (video_h == video_w && screen_w > screen_h)) {
- // Not sufficient?
- if(video_h_1 < screen_h) {
- dom_height = screen_h + 'px';
- dom_left = -1 * (video_w_1 - screen_w) / 2;
- } else {
- dom_width = screen_w + 'px';
- dom_top = -1 * (video_h_2 - screen_h) / 2;
- }
- } else if(screen_w == screen_h) {
- dom_width = screen_w + 'px';
- dom_height = screen_h + 'px';
- }
-
- return {
- width : dom_width,
- height : dom_height,
- left : dom_left,
- top : dom_top
- };
- } catch(e) {
- Console.error('Call._process_size', e);
- }
-
- };
-
-
- /**
- * Adapts the local video view
- * @public
- * @param {object} local_sel
- * @return {undefined}
- */
- self.adapt_local = function(local_sel) {
-
- try {
- var local_video_sel = local_sel.find('video');
-
- // Process new sizes
- var sizes = Call._process_size(
- local_sel,
- local_video_sel
- );
-
- // Apply new sizes
- local_video_sel.css({
- 'height': sizes.height,
- 'width': sizes.width,
- 'margin-top': sizes.top,
- 'margin-left': sizes.left
- });
- } catch(e) {
- Console.error('Call.adapt_local', e);
- }
-
- };
-
-
- /**
- * Adapts the remote video view
- * @public
- * @param {object} videobox_sel
- * @return {undefined}
- */
- self.adapt_remote = function(videobox_sel) {
-
- try {
- var remote_video_sel, sizes;
-
- videobox_sel.find('.remote_video').each(function() {
- remote_video_sel = $(this).find('video');
-
- if(remote_video_sel.size()) {
- // Process new sizes
- sizes = Call._process_size(
- $(this),
- remote_video_sel
- );
-
- // Apply new sizes
- remote_video_sel.css({
- 'height': sizes.height,
- 'width': sizes.width,
- 'margin-top': sizes.top,
- 'margin-left': sizes.left
- });
- }
- });
- } catch(e) {
- Console.error('Call.adapt_remote', e);
- }
-
- };
-
-
- /**
- * Start call elpsed time counter
- * @public
- * @return {boolean}
- */
- self.start_counter = function() {
-
- try {
- // Initialize counter
- self.stop_counter();
- self._start_stamp = DateUtils.getTimeStamp();
- self._fire_clock();
-
- // Fire it every second
- $('#top-content .tools.call .counter').everyTime('1s', self._fire_clock);
-
- Console.info('Call counter started');
- } catch(e) {
- Console.error('Call.start_counter', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Stop call elpsed time counter
- * @public
- * @return {boolean}
- */
- self.stop_counter = function() {
-
- try {
- // Reset stamp storage
- self._start_stamp = 0;
-
- // Reset counter
- var counter_sel = $('#top-content .tools.call .counter');
- var default_count = counter_sel.attr('data-default');
-
- counter_sel.stopTime();
-
- $('#top-content .tools.call .counter').text(default_count);
- $('#jingle, #muji').find('.elapsed').text(default_count);
-
- Console.info('Call counter stopped');
- } catch(e) {
- Console.error('Call.stop_counter', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Fires the counter clock (once more)
- * @private
- * @return {undefined}
- */
- self._fire_clock = function() {
-
- try {
- // Process updated time
- var count = DateUtils.difference(
- DateUtils.getTimeStamp(),
- self._start_stamp
- );
-
- if(count.getHours()) {
- count = count.toString('H:mm:ss');
- } else {
- count = count.toString('mm:ss');
- }
-
- // Display updated counter
- $('#top-content .tools.call .counter').text(count);
- $('#jingle, #muji').find('.elapsed').text(count);
- } catch(e) {
- Console.error('Call._fire_clock', e);
- }
-
- };
-
-
- /**
- * Destroy the call interface
- * @public
- * @return {undefined}
- */
- self.destroy_interface = function(container_sel) {
-
- try {
- container_sel.stopTime();
- container_sel.find('*').stopTime();
-
- container_sel.remove();
- } catch(e) {
- Console.error('Call.destroy_interface', e);
- }
-
- };
-
-
- /**
- * Show the call interface
- * @public
- * @param {object} manager
- * @param {object} call_sel
- * @param {object} video_container_sel
- * @return {boolean}
- */
- self.show_interface = function(manager, call_sel, video_container_sel) {
-
- try {
- if(manager.in_call()) {
- call_sel.filter(':hidden').show();
-
- // Launch back some events
- video_container_sel.mousemove();
- }
- } catch(e) {
- Console.error('Call.show_interface', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Hide the call interface
- * @public
- * @param {object} call_sel
- * @param {object} video_container_sel
- * @return {boolean}
- */
- self.hide_interface = function(call_sel, video_container_sel) {
-
- try {
- call_sel.filter(':visible').hide();
-
- // Reset some events
- video_container_sel.find('.topbar').stopTime().hide();
- } catch(e) {
- Console.error('Call.hide_interface', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Attaches interface events
- * @public
- * @param {object} manager
- * @param {object} call_sel
- * @param {object} video_container_sel
- * @return {undefined}
- */
- self.events_interface = function(manager, call_sel, video_container_sel) {
-
- try {
- call_sel.everyTime(50, function() {
- manager._adapt();
- });
-
- // Close interface on click on semi-transparent background
- call_sel.click(function(evt) {
- try {
- // Click on lock background?
- if($(evt.target).is('.lock')) {
- return manager._hide_interface();
- }
- } catch(e) {
- Console.error('Call.events_interface[async]', e);
- }
- });
-
- // Click on a control or action button
- call_sel.find('.topbar').find('.controls a, .actions a').click(function() {
- try {
- switch($(this).data('type')) {
- case 'close':
- manager._hide_interface(); break;
- case 'stop':
- case 'leave':
- manager.stop(); break;
- case 'mute':
- manager.mute(); break;
- case 'unmute':
- manager.unmute(); break;
- }
- } catch(e) {
- Console.error('Call.events_interface[async]', e);
- } finally {
- return false;
- }
- });
-
- // Auto Hide/Show interface topbar
- video_container_sel.mousemove(function() {
- try {
- var topbar_sel = $(this).find('.topbar');
-
- if(topbar_sel.is(':hidden')) {
- topbar_sel.stop(true).fadeIn(250);
- }
-
- topbar_sel.stopTime();
- topbar_sel.oneTime('5s', function() {
- topbar_sel.stop(true).fadeOut(250);
- });
- } catch(e) {
- Console.error('Call.events_interface[async]', e);
- }
- });
- } catch(e) {
- Console.error('Call.events_interface', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
diff --git a/app/javascripts/caps.js b/app/javascripts/caps.js
deleted file mode 100644
index 0538f43d..00000000
--- a/app/javascripts/caps.js
+++ /dev/null
@@ -1,787 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the CAPS JS script for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou, Maranda
-
-*/
-
-// Bundle
-var Caps = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Constants */
- self.disco_infos = {
- 'identity': {
- 'category': 'client',
- 'type': 'web',
- 'name': 'Jappix'
- },
-
- 'items': [
- NS_MUC,
- NS_MUC_USER,
- NS_MUC_ADMIN,
- NS_MUC_OWNER,
- NS_MUC_CONFIG,
- NS_DISCO_INFO,
- NS_DISCO_ITEMS,
- NS_PUBSUB_RI,
- NS_BOSH,
- NS_CAPS,
- NS_MOOD,
- NS_ACTIVITY,
- NS_TUNE,
- NS_GEOLOC,
- NS_NICK,
- NS_URN_MBLOG,
- NS_URN_INBOX,
- NS_MOOD + NS_NOTIFY,
- NS_ACTIVITY + NS_NOTIFY,
- NS_TUNE + NS_NOTIFY,
- NS_GEOLOC + NS_NOTIFY,
- NS_URN_MBLOG + NS_NOTIFY,
- NS_URN_INBOX + NS_NOTIFY,
- NS_URN_DELAY,
- NS_ROSTER,
- NS_ROSTERX,
- NS_HTTP_AUTH,
- NS_CHATSTATES,
- NS_XHTML_IM,
- NS_URN_MAM,
- NS_IPV6,
- NS_LAST,
- NS_PRIVATE,
- NS_REGISTER,
- NS_SEARCH,
- NS_COMMANDS,
- NS_VERSION,
- NS_XDATA,
- NS_VCARD,
- NS_IETF_VCARD4,
- NS_URN_ADATA,
- NS_URN_AMETA,
- NS_URN_TIME,
- NS_URN_PING,
- NS_URN_RECEIPTS,
- NS_PRIVACY,
- NS_IQOOB,
- NS_XOOB,
- NS_URN_CARBONS,
- NS_URN_CORRECT,
- NS_URN_MARKERS,
- NS_URN_IDLE,
- NS_URN_ATTENTION,
- NS_URN_REACH,
- NS_URN_HINTS
- ]
- };
-
-
- /**
- * Parse identities from disco infos query response
- * @private
- * @param {object} query
- * @return {object}
- */
- self._parseDiscoIdentities = function(query) {
-
- var identities = [];
-
- try {
- var cur_category, cur_type, cur_lang, cur_name;
-
- $(query).find('identity').each(function() {
- cur_category = $(this).attr('category') || '';
- cur_type = $(this).attr('type') || '';
- cur_lang = $(this).attr('xml:lang') || '';
- cur_name = $(this).attr('name') || '';
-
- identities.push(cur_category + '/' + cur_type + '/' + cur_lang + '/' + cur_name);
- });
- } catch(e) {
- Console.error('Caps._parseDiscoIdentities', e);
- } finally {
- return identities;
- }
-
- };
-
-
- /**
- * Parse features from disco infos query response
- * @private
- * @param {object} query
- * @return {object}
- */
- self._parseDiscoFeatures = function(query) {
-
- var features = [];
-
- try {
- var cur_var;
-
- $(query).find('feature').each(function() {
- cur_var = $(this).attr('var');
-
- // Add the current value to the array
- if(cur_var) {
- features.push(cur_var);
- }
- });
- } catch(e) {
- Console.error('Caps._parseDiscoFatures', e);
- } finally {
- return features;
- }
-
- };
-
-
- /**
- * Parse data form from disco infos query response
- * @private
- * @param {object} query
- * @return {object}
- */
- self._parseDiscoDataForms = function(query) {
-
- var data_forms = [];
-
- try {
- var cur_string, cur_sort_var,
- cur_text, cur_var, cur_sort_val;
-
- $(query).find('x[xmlns="' + NS_XDATA + '"]').each(function() {
- // Initialize some stuffs
- cur_string = '';
- cur_sort_var = [];
-
- // Add the form type field
- $(this).find('field[var="FORM_TYPE"] value').each(function() {
- cur_text = $(this).text();
-
- if(cur_text) {
- cur_string += cur_text + '<';
- }
- });
-
- // Add the var attributes into an array
- $(this).find('field:not([var="FORM_TYPE"])').each(function() {
- cur_var = $(this).attr('var');
-
- if(cur_var) {
- cur_sort_var.push(cur_var);
- }
- });
-
- // Sort the var attributes
- cur_sort_var = cur_sort_var.sort();
-
- // Loop this sorted var attributes
- $.each(cur_sort_var, function(i) {
- // Initialize the value sorting
- cur_sort_val = [];
-
- // Append it to the string
- cur_string += cur_sort_var[i] + '<';
-
- // Add each value to the array
- $(this).find('field[var=' + cur_sort_var[i] + '] value').each(function() {
- cur_sort_val.push($(this).text());
- });
-
- // Sort the values
- cur_sort_val = cur_sort_val.sort();
-
- // Append the values to the string
- for(var j in cur_sort_val) {
- cur_string += cur_sort_val[j] + '<';
- }
- });
-
- // Any string?
- if(cur_string) {
- // Remove the undesired double '<' from the string
- if(cur_string.match(/(.+)(<)+$/)) {
- cur_string = cur_string.substring(0, cur_string.length - 1);
- }
-
- // Add the current string to the array
- data_forms.push(cur_string);
- }
- });
- } catch(e) {
- Console.error('Caps._parseDiscoDataForms', e);
- } finally {
- return data_forms;
- }
-
- };
-
-
- /**
- * Apply XHTML-IM features from disco infos
- * @private
- * @param {string} xid
- * @param {object} features
- * @param {object} style_sel
- * @param {object} message_area_sel
- * @return {undefined}
- */
- self._applyDiscoXHTMLIM = function(xid, features, style_sel, message_area_sel) {
-
- try {
- // Apply
- if(NS_XHTML_IM in features) {
- style_sel.show();
- } else {
- // Remove the tooltip elements
- style_sel.hide();
- style_sel.find('.bubble-style').remove();
-
- // Reset the markers
- message_area_sel.removeAttr('style')
- .removeAttr('data-font')
- .removeAttr('data-fontsize')
- .removeAttr('data-color')
- .removeAttr('data-bold')
- .removeAttr('data-italic')
- .removeAttr('data-underline');
- }
-
- } catch(e) {
- Console.error('Caps._applyDiscoXHTMLIM', e);
- }
-
- };
-
-
- /**
- * Apply Jingle features from disco infos
- * @private
- * @param {string} xid
- * @param {object} path_sel
- * @param {object} roster_sel
- * @return {undefined}
- */
- self._applyDiscoJingle = function(xid, path_sel, roster_sel) {
-
- try {
- // Selectors
- var roster_jingle_sel = roster_sel.find('.buddy-infos .call-jingle');
- var jingle_audio = path_sel.find('.tools-jingle-audio');
- var roster_jingle_audio = roster_jingle_sel.find('a.audio');
- var jingle_video = path_sel.find('.tools-jingle-video');
- var roster_jingle_video = roster_jingle_sel.find('a.video');
- var roster_jingle_separator = roster_jingle_sel.find('span.separator');
-
- // Apply
- var jingle_local_supported = JSJAC_JINGLE_AVAILABLE;
- var jingle_audio_xid = self.getFeatureResource(xid, NS_JINGLE_APPS_RTP_AUDIO);
- var jingle_video_xid = self.getFeatureResource(xid, NS_JINGLE_APPS_RTP_VIDEO);
-
- if(jingle_audio_xid && jingle_local_supported) {
- jingle_audio.show();
- roster_jingle_audio.show();
- } else {
- jingle_audio.hide();
- roster_jingle_audio.hide();
- }
-
- if(jingle_video_xid && jingle_local_supported) {
- jingle_video.show();
- roster_jingle_video.show();
- } else {
- jingle_video.hide();
- roster_jingle_video.hide();
- }
-
- if(jingle_audio_xid && jingle_video_xid && jingle_local_supported) {
- roster_jingle_separator.show();
- } else {
- roster_jingle_separator.hide();
- }
-
- if((jingle_audio_xid || jingle_video_xid) && jingle_local_supported) {
- roster_jingle_sel.show();
- } else {
- roster_jingle_sel.hide();
- }
- } catch(e) {
- Console.error('Caps._applyDiscoJingle', e);
- }
-
- };
-
-
- /**
- * Apply Out of Band Data features from disco infos
- * @private
- * @param {string} xid
- * @param {object} features
- * @param {object} file_sel
- * @return {undefined}
- */
- self._applyDiscoOOB = function(xid, features, file_sel) {
-
- try {
- // Apply
- var iq_oob_xid = self.getFeatureResource(xid, NS_IQOOB);
-
- if(iq_oob_xid || NS_XOOB in features) {
- file_sel.show();
-
- // Set a marker
- file_sel.attr(
- 'data-oob',
- iq_oob_xid ? 'iq' : 'x'
- );
- } else {
- // Remove the tooltip elements
- file_sel.hide();
- file_sel.find('.bubble-style').remove();
-
- // Reset the marker
- file_sel.removeAttr('data-oob');
- }
- } catch(e) {
- Console.error('Caps._applyDiscoOOB', e);
- }
-
- };
-
-
- /**
- * Apply Receipts features from disco infos
- * @private
- * @param {string} xid
- * @param {object} features
- * @param {object} message_area_sel
- * @return {undefined}
- */
- self._applyDiscoReceipts = function(xid, features, message_area_sel) {
-
- try {
- // Apply
- if(NS_URN_RECEIPTS in features) {
- message_area_sel.attr('data-receipts', 'true');
- } else {
- message_area_sel.removeAttr('data-receipts');
- }
- } catch(e) {
- Console.error('Caps._applyDiscoReceipts', e);
- }
-
- };
-
-
- /**
- * Apply Last Message Correction features from disco infos
- * @private
- * @param {string} xid
- * @param {object} features
- * @param {object} path_sel
- * @return {undefined}
- */
- self._applyDiscoCorrection = function(xid, features, path_sel) {
-
- try {
- // Apply
- if(NS_URN_CORRECT in features) {
- path_sel.attr('data-correction', 'true');
- } else {
- path_sel.removeAttr('data-correction');
- }
- } catch(e) {
- Console.error('Caps._applyDiscoCorrection', e);
- }
-
- };
-
-
- /**
- * Apply Chat Markers features from disco infos
- * @private
- * @param {string} xid
- * @param {object} features
- * @param {object} path_sel
- * @return {undefined}
- */
- self._applyDiscoMarkers = function(xid, features, path_sel) {
-
- try {
- // Apply
- if(NS_URN_MARKERS in features) {
- path_sel.attr('data-markers', 'true');
- } else {
- path_sel.removeAttr('data-markers');
- }
- } catch(e) {
- Console.error('Caps._applyDiscoMarkers', e);
- }
-
- };
-
-
- /**
- * Apply Attention features from disco infos
- * @private
- * @param {string} xid
- * @param {object} features
- * @param {object} path_sel
- * @return {undefined}
- */
- self._applyDiscoAttention = function(xid, features, path_sel) {
-
- try {
- // Apply
- if(NS_URN_ATTENTION in features) {
- path_sel.attr('data-attention', 'true');
- } else {
- path_sel.removeAttr('data-attention');
- }
- } catch(e) {
- Console.error('Caps._applyDiscoAttention', e);
- }
-
- };
-
-
- /**
- * Reads a stored Caps
- * @public
- * @param {string} caps
- * @return {object}
- */
- self.read = function(caps) {
-
- try {
- return Common.XMLFromString(
- DataStore.getPersistent('global', 'caps', caps)
- );
- } catch(e) {
- Console.error('Caps.read', e);
- }
-
- };
-
-
- /**
- * Returns an array of the Jappix disco#infos
- * @public
- * @return {object}
- */
- self.myDiscoInfos = function() {
-
- try {
- var disco_base = self.disco_infos.items;
-
- var disco_jingle = JSJaCJingle.disco();
- var disco_all = disco_base.concat(disco_jingle);
-
- return Utils.uniqueArrayValues(disco_all);
- } catch(e) {
- Console.error('Caps.myDiscoInfos', e);
- }
-
- };
-
-
- /**
- * Gets the disco#infos of an entity
- * @public
- * @param {string} to
- * @param {string} caps
- * @return {boolean}
- */
- self.getDiscoInfos = function(to, caps) {
-
- try {
- // No CAPS
- if(!caps) {
- Console.warn('No CAPS: ' + to);
-
- self.displayDiscoInfos(to, '');
-
- return false;
- }
-
- // Get the stored disco infos
- var xml = self.read(caps);
-
- // Yet stored
- if(xml) {
- Console.info('CAPS from cache: ' + to);
-
- self.displayDiscoInfos(to, xml);
-
- return true;
- }
-
- Console.info('CAPS from the network: ' + to);
-
- // Not stored: get the disco#infos
- var iq = new JSJaCIQ();
-
- iq.setTo(to);
- iq.setType('get');
- iq.setQuery(NS_DISCO_INFO);
-
- con.send(iq, self.handleDiscoInfos);
-
- return true;
- } catch(e) {
- Console.error('Caps.getDiscoInfos', e);
- }
-
- };
-
-
- /**
- * Handles the disco#infos of an entity
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleDiscoInfos = function(iq) {
-
- try {
- if(!iq || (iq.getType() == 'error')) {
- return;
- }
-
- var from = Common.fullXID(Common.getStanzaFrom(iq));
- var query = iq.getQuery();
-
- // Parse values
- var identities = self._parseDiscoIdentities(query);
- var features = self._parseDiscoFeatures(query);
- var data_forms = self._parseDiscoDataForms(query);
-
- // Process the CAPS
- var caps = self.process(identities, features, data_forms);
-
- // Get the XML string
- var xml = Common.xmlToString(query);
-
- // Store the disco infos
- DataStore.setPersistent('global', 'caps', caps, xml);
-
- // This is our server
- if(from == Utils.getServer()) {
- // Handle the features
- Features.handle(xml);
-
- Console.info('Got our server CAPS');
- } else {
- // Display the disco infos
- self.displayDiscoInfos(from, xml);
-
- Console.info('Got CAPS: ' + from);
- }
- } catch(e) {
- Console.error('Caps.handleDiscoInfos', e);
- }
-
- };
-
-
- /**
- * Displays the disco#infos everywhere needed for an entity
- * @public
- * @param {string} from
- * @param {string} xml
- * @return {undefined}
- */
- self.displayDiscoInfos = function(from, xml) {
-
- try {
- // Generate the chat path
- var xid = Common.bareXID(from);
-
- // This comes from a private groupchat chat?
- if(Utils.isPrivate(xid)) {
- xid = from;
- }
-
- hash = hex_md5(xid);
-
- // Display the supported features
- var features = {};
-
- $(xml).find('feature').each(function() {
- var current = $(this).attr('var');
-
- if(current) {
- features[current] = 1;
- }
- });
-
- // Paths
- var path_sel = $('#' + hash);
- var roster_sel = $('#roster .buddy.' + hash);
- var message_area_sel = path_sel.find('.message-area');
- var style_sel = path_sel.find('.chat-tools-style');
- var file_sel = path_sel.find('.chat-tools-file');
-
- // Apply Features
- self._applyDiscoXHTMLIM(xid, features, style_sel, message_area_sel);
- self._applyDiscoJingle(xid, path_sel, roster_sel);
- self._applyDiscoOOB(xid, features, file_sel);
- self._applyDiscoReceipts(xid, features, message_area_sel);
- self._applyDiscoCorrection(xid, features, path_sel);
- self._applyDiscoMarkers(xid, features, path_sel);
- self._applyDiscoAttention(xid, features, path_sel);
- } catch(e) {
- Console.error('Caps.displayDiscoInfos', e);
- }
-
- };
-
-
- /**
- * Generates the CAPS hash
- * @public
- * @param {object} identities
- * @param {object} features
- * @param {object} dataforms
- * @return {string}
- */
- self.process = function(identities, features, dataforms) {
-
- try {
- // Initialize
- var caps_str = '';
-
- // Sort the arrays
- identities = identities.sort();
- features = features.sort();
- dataforms = dataforms.sort();
-
- // Process the sorted identity string
- for(var a in identities) {
- caps_str += identities[a] + '<';
- }
-
- // Process the sorted feature string
- for(var b in features) {
- caps_str += features[b] + '<';
- }
-
- // Process the sorted data-form string
- for(var c in dataforms) {
- caps_str += dataforms[c] + '<';
- }
-
- // Process the SHA-1 hash
- var cHash = b64_sha1(caps_str);
-
- return cHash;
- } catch(e) {
- Console.error('Caps.process', e);
- }
-
- };
-
-
- /**
- * Generates the Jappix CAPS hash
- * @public
- * @return {string}
- */
- self.mine = function() {
-
- try {
- return self.process(
- [
- self.disco_infos.identity.category + '/' +
- self.disco_infos.identity.type + '//' +
- self.disco_infos.identity.name
- ],
-
- self.myDiscoInfos(),
- []
- );
- } catch(e) {
- Console.error('Caps.mine', e);
- }
-
- };
-
-
- /**
- * Returns the user resource supporting given feature w/ highest priority
- * @public
- * @param {string} xid
- * @param {string} feature_ns
- * @return {string}
- */
- self.getFeatureResource = function(xid, feature_ns) {
-
- var selected_xid = null;
-
- try {
- if(!feature_ns) {
- throw 'No feature namespace given!';
- }
-
- var max_priority = null;
- var cur_xid_full, cur_presence_sel, cur_caps, cur_features, cur_priority;
-
- var resources_obj = Presence.resources(xid);
- var fn_parse_resource = function(cur_resource) {
- cur_xid_full = xid;
-
- if(cur_resource) {
- cur_xid_full += '/' + cur_resource;
- }
-
- cur_presence_sel = $(Presence.readStanza(cur_xid_full));
-
- cur_priority = parseInt((cur_presence_sel.find('priority').text() || 0), 10);
- cur_caps = cur_presence_sel.find('caps').text();
-
- if(cur_caps) {
- cur_features = self.read(cur_caps);
-
- if(cur_features && $(cur_features).find('feature[var="' + feature_ns + '"]').size() &&
- (cur_priority >= max_priority || max_priority === null)) {
- max_priority = cur_priority;
- selected_xid = cur_xid_full;
- }
- }
- };
-
- if(resources_obj.bare === 1) {
- fn_parse_resource(null);
- }
-
- for(var cur_resource in resources_obj.list) {
- fn_parse_resource(cur_resource);
- }
- } catch(e) {
- Console.error('Caps.getFeatureResource', e);
- } finally {
- return selected_xid;
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
diff --git a/app/javascripts/carbons.js b/app/javascripts/carbons.js
deleted file mode 100644
index 4635b94c..00000000
--- a/app/javascripts/carbons.js
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the Message Carbons JS script for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Carbons = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Configures Message Carbons options
- * @private
- * @param {string} type
- * @return {undefined}
- */
- self._configure = function(type) {
-
- try {
- if(!(type in {'enable': 1, 'disable': 1})) {
- Console.error('Carbons._configure', 'Invalid type (must be either "enable" or "disable")'); return;
- }
-
- var iq = new JSJaCIQ();
- iq.setType('set');
-
- iq.appendNode(type, {'xmlns': NS_URN_CARBONS});
-
- con.send(iq, function(iq) {
- self._handleConfigure(iq, type);
- });
- } catch(e) {
- Console.error('Carbons._configure', e);
- }
-
- };
-
-
- /**
- * Configures Message Carbons options
- * @private
- * @param {object} iq
- * @param {string} type
- * @return {undefined}
- */
- self._handleConfigure = function(iq, type) {
-
- try {
- if(iq.getType() === 'result') {
- Console.log('Message Carbons successfully configured (type: ' + type + ')');
- } else {
- Console.error('Message Carbons could not be configured (type: ' + type + ')');
- }
- } catch(e) {
- Console.error('Carbons._handleConfigure', e);
- }
-
- };
-
-
- /**
- * Enables Message Carbons for this session
- * @public
- * @return {undefined}
- */
- self.enable = function() {
-
- try {
- self._configure('enable');
- } catch(e) {
- Console.error('Carbons.enable', e);
- }
-
- };
-
-
- /**
- * Disables Message Carbons for this session
- * @public
- * @return {undefined}
- */
- self.disable = function() {
-
- try {
- self._configure('disable');
- } catch(e) {
- Console.error('Carbons.disable', e);
- }
-
- };
-
-
- /**
- * Returns whether the server has Carbons support or not
- * @public
- * @return {boolean}
- */
- self.has = function() {
-
- try {
- return Features.enabledCarbons();
- } catch(e) {
- Console.error('Carbons.has', e);
- }
-
- };
-
-
- /**
- * Returns the forwarded message stanza
- * @public
- * @param {object} message
- * @return {object}
- */
- self._getForwarded = function(message) {
-
- try {
- var forwarded_message = $(message.getNode()).find('forwarded[xmlns="' + NS_URN_FORWARD + '"]:first message:first');
-
- if(forwarded_message[0]) {
- return JSJaCPacket.wrapNode(forwarded_message[0]);
- }
-
- return null;
- } catch(e) {
- Console.error('Carbons._getForwarded', e);
- }
-
- };
-
-
- /**
- * Handles a forwarded sent message
- * @public
- * @param {object} message
- * @return {undefined}
- */
- self.handleSent = function(message) {
-
- try {
- var forwarded_message = self._getForwarded(message);
-
- if(forwarded_message !== null) {
- var to = Common.bareXID(forwarded_message.getTo());
- var hash = hex_md5(to);
- var type = forwarded_message.getType();
-
- // Display sent message
- if(type === 'chat' || !type) {
- // Chat opened? (no need to display sent messages if chat does not exist there...)
- if(Chat.exists(hash)) {
- // Get more data
- var id = forwarded_message.getID();
- var body = $.trim(forwarded_message.getBody());
- var my_xid = Common.getXID();
-
- // Generate the message body
- var html_escape = (Message.generate(forwarded_message, body, hash) !== 'XHTML');
- if(!html_escape) {
- body = Filter.xhtml(forwarded_message.getNode());
- }
-
- if(body) {
- // Display the message (finally!)
- Message.display(
- 'chat',
- my_xid,
- hash,
- Name.getBuddy(my_xid).htmlEnc(),
- body,
- DateUtils.getCompleteTime(),
- DateUtils.getTimeStamp(),
- 'user-message',
- html_escape,
- '',
- 'me',
- id
- );
-
- Console.debug('Got a sent message from another resource to: ' + (to || 'none'));
- } else {
- Console.debug('Got a sent message from another resource to: ' + (to || 'none') + ', was ignored because body empty');
- }
-
- // Handle chat markers change
- Markers.handleCarbonChange(forwarded_message);
- } else {
- Console.debug('Got a sent message from another resource to: ' + (to || 'none') + ', was ignored because chat not open');
- }
- } else {
- Console.warning('Got a sent message from another resource to: ' + (to || 'none') + ', was ignored because of type: ' + type);
- }
- }
- } catch(e) {
- Console.error('Carbons.handleSent', e);
- }
-
- };
-
-
- /**
- * Handles a forwarded received message
- * @public
- * @param {object} message
- * @return {undefined}
- */
- self.handleReceived = function(message) {
-
- try {
- var forwarded_message = self._getForwarded(message);
-
- if(forwarded_message !== null) {
- Console.debug('Got a received message from another resource from: ' + (forwarded_message.getFrom() || 'none'));
-
- Message.handle(forwarded_message);
- }
- } catch(e) {
- Console.error('Carbons.handleReceived', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/chat.js b/app/javascripts/chat.js
deleted file mode 100644
index a9f0bd67..00000000
--- a/app/javascripts/chat.js
+++ /dev/null
@@ -1,672 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the chat JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Authors: Valérian Saliou, Eric, Maranda
-
-*/
-
-// Bundle
-var Chat = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Apply generate events
- * @private
- * @param {string} path
- * @param {string} id
- * @param {string} xid
- * @return {undefined}
- */
- self._generateEvents = function(path, id, xid) {
-
- try {
- // Click event: chat cleaner
- $(path + 'tools-clear').click(function() {
- self.clean(id);
- });
-
- // Click event: call (audio)
- $(path + 'tools-jingle-audio').click(function() {
- Jingle.start(xid, 'audio');
- });
-
- // Click event: call (video)
- $(path + 'tools-jingle-video').click(function() {
- Jingle.start(xid, 'video');
- });
-
- // Click event: user-infos
- $(path + 'tools-infos').click(function() {
- UserInfos.open(xid);
- });
- } catch(e) {
- Console.error('Chat._generateEvents', e);
- }
-
- };
-
-
- /**
- * Apply generate events
- * @private
- * @param {object} input_sel
- * @param {string} xid
- * @param {string} hash
- * @return {undefined}
- */
- self._createEvents = function(input_sel, xid, hash) {
-
- try {
- self._createEventsInput(input_sel, hash);
- self._createEventsKey(input_sel, xid, hash);
- self._createEventsMouse(xid, hash);
- } catch(e) {
- Console.error('Chat._createEvents', e);
- }
-
- };
-
-
- /**
- * Apply generate events (input)
- * @private
- * @param {object} input_sel
- * @param {string} hash
- * @return {undefined}
- */
- self._createEventsInput = function(input_sel, hash) {
-
- try {
- input_sel.focus(function() {
- // Clean notifications for this chat
- Interface.chanCleanNotify(hash);
-
- // Store focus on this chat!
- Interface.chat_focus_hash = hash;
- });
-
- input_sel.blur(function() {
- // Reset storage about focus on this chat!
- if(Interface.chat_focus_hash == hash) {
- Interface.chat_focus_hash = null;
- }
- });
- } catch(e) {
- Console.error('Chat._createEventsInput', e);
- }
-
- };
-
-
- /**
- * Apply generate events (key)
- * @private
- * @param {object} input_sel
- * @param {string} xid
- * @param {string} hash
- * @return {undefined}
- */
- self._createEventsKey = function(input_sel, xid, hash) {
-
- try {
- input_sel.keydown(function(e) {
- if(e.keyCode == 13) {
- // Enter key
- if(e.shiftKey || e.ctrlKey) {
- // Add a new line
- input_sel.val(input_sel.val() + '\n');
- } else {
- if(Correction.isIn(xid) === true) {
- var corrected_value = input_sel.val().trim();
-
- if(corrected_value) {
- // Send the corrected message
- Correction.send(xid, 'chat', corrected_value);
- }
-
- Correction.leave(xid);
- } else {
- // Send the message
- Message.send(hash, 'chat');
- }
-
- // Reset the composing database entry
- DataStore.setDB(Connection.desktop_hash, 'chatstate', xid, 'off');
- }
-
- return false;
- } else if(e.keyCode == 8) {
- // Leave correction mode? (another way, by flushing input value progressively)
- if(Correction.isIn(xid) === true && !input_sel.val()) {
- Correction.leave(xid);
- }
- }
- });
-
- input_sel.keyup(function(e) {
- if(e.keyCode == 27) {
- // Escape key
- input_sel.val('');
-
- // Leave correction mode? (simple escape way)
- if(Correction.isIn(xid) === true) {
- Correction.leave(xid);
- }
- } else {
- Correction.detect(xid, input_sel);
- }
- });
- } catch(e) {
- Console.error('Chat._createEventsKey', e);
- }
-
- };
-
-
- /**
- * Apply generate events (mouse)
- * @private
- * @param {string} xid
- * @param {string} hash
- * @return {undefined}
- */
- self._createEventsMouse = function(xid, hash) {
-
- try {
- // Scroll in chat content
- $('#page-engine #' + hash + ' .content').scroll(function() {
- var self = this;
-
- if(Features.enabledMAM() && !(xid in MAM.map_pending)) {
- var has_state = xid in MAM.map_states;
- var rsm_count = has_state ? MAM.map_states[xid].rsm.count : 1;
- var rsm_before = has_state ? MAM.map_states[xid].rsm.first : '';
-
- // Request more archives?
- if(rsm_count > 0 && $(this).scrollTop() < MAM.SCROLL_THRESHOLD) {
- var was_scroll_top = $(self).scrollTop() <= 32;
- var wait_mam = $('#' + hash).find('.wait-mam');
- wait_mam.show();
-
- MAM.getArchives({
- 'with': xid
- }, {
- 'max': MAM.REQ_MAX,
- 'before': rsm_before
- }, function() {
- var wait_mam_height = was_scroll_top ? 0 : wait_mam.height();
- wait_mam.hide();
-
- // Restore scroll?
- if($(self).scrollTop() < MAM.SCROLL_THRESHOLD) {
- var sel_mam_chunk = $(self).find('.mam-chunk:first');
-
- var cont_padding_top = parseInt($(self).css('padding-top').replace(/[^-\d\.]/g, ''));
- var cont_one_group_margin_bottom = parseInt(sel_mam_chunk.find('.one-group:last').css('margin-bottom').replace(/[^-\d\.]/g, ''));
- var cont_mam_chunk_height = sel_mam_chunk.height();
-
- $(self).scrollTop(wait_mam_height + cont_padding_top + cont_one_group_margin_bottom + cont_mam_chunk_height);
- }
- });
- }
- }
- });
- } catch(e) {
- Console.error('Chat._createEventsMouse', e);
- }
-
- };
-
-
- /**
- * Apply generate events
- * @private
- * @param {string} type
- * @param {string} id
- * @param {string} xid
- * @return {object}
- */
- self._generateChatCode = function(type, id, xid) {
-
- var code_args = {};
-
- try {
- // Groupchat special code
- if(type == 'groupchat') {
- code_args.attributes = ' data-type="groupchat" data-correction="true"';
- code_args.avatar = '';
- code_args.name = '<p class="bc-infos"><b>' + Common._e("Subject") + '</b> <span class="muc-topic">' + Common._e("no subject defined for this room.") + '</span></p>';
- code_args.code = '<div class="content groupchat-content" id="chat-content-' + id + '"></div>' +
- '<div class="list"><div class="moderator role"><p class="title">' + Common._e("Moderators") + '</p></div>' +
- '<div class="participant role"><p class="title">' + Common._e("Participants") + '</p></div>' +
- '<div class="visitor role"><p class="title">' + Common._e("Visitors") + '</p></div>' +
- '<div class="none role"><p class="title">' + Common._e("Others") + '</p></div></div>';
- code_args.link = '<a href="#" class="tools-mucadmin tools-tooltip talk-images chat-tools-content" title="' + Common._e("Administration panel for this room") + '"></a>';
- code_args.style = '';
-
- // Is this a gateway?
- if(xid.match(/%/)) {
- code_args.disabled = '';
- } else {
- code_args.disabled = ' disabled=""';
- }
- } else {
- code_args.mam = '<div class="wait-mam wait-small"></div>';
- code_args.attributes = ' data-type="chat"';
- code_args.avatar = '<div class="avatar-container"><img class="avatar" src="' + './images/others/default-avatar.png' + '" alt="" /></div>';
- code_args.name = '<div class="bc-pep"></div><p class="bc-infos"><span class="unavailable show talk-images"></span></p>';
- code_args.code = '<div class="content" id="chat-content-' + id + '">' + code_args.mam + '</div>';
- code_args.link = '<a href="#" class="tools-jingle-audio tools-tooltip talk-images chat-tools-content" title="' + Common._e("Call (audio only)") + '"></a>' +
- '<a href="#" class="tools-jingle-video tools-tooltip talk-images chat-tools-content" title="' + Common._e("Call (video)") + '"></a>' +
- '<a href="#" class="tools-infos tools-tooltip talk-images chat-tools-content" title="' + Common._e("Show user profile") + '"></a>';
- code_args.style = ' style="display: none;"';
- code_args.disabled = '';
- }
-
- // Not a groupchat private chat, we can use the buddy add icon
- if((type == 'chat') || (type == 'groupchat')) {
- var title;
-
- if(type == 'chat') {
- title = Common._e("Add this contact to your friends");
- } else {
- title = Common._e("Add this groupchat to your favorites");
- }
-
- code_args.link += '<a href="#" class="tools-add tools-tooltip talk-images chat-tools-content" title="' + title + '"></a>';
- }
-
- // IE DOM parsing bug fix
- code_args.style_picker = '<div class="chat-tools-content chat-tools-style"' + code_args.style + '>' +
- '<a href="#" class="tools-style tools-tooltip talk-images"></a>' +
- '</div>';
-
- if((BrowserDetect.browser == 'Explorer') && (BrowserDetect.version < 9)) {
- code_args.style_picker = '';
- }
- } catch(e) {
- Console.error('Chat._generateChatCode', e);
- } finally {
- return code_args;
- }
-
- };
-
-
- /**
- * Correctly opens a new chat
- * @public
- * @param {string} xid
- * @param {string} type
- * @param {string} nickname
- * @param {string} password
- * @param {string} title
- * @return {boolean}
- */
- self.checkCreate = function(xid, type, nickname, password, title) {
-
- try {
- // No XID?
- if(!xid) {
- return false;
- }
-
- // We generate some stuffs
- var hash = hex_md5(xid);
- var name;
-
- // Gets the name of the user/title of the room
- if(title) {
- name = title;
- } else {
- // Private groupchat chat
- if(type == 'private') {
- name = Common.thisResource(xid);
- }
-
- // XMPP-ID
- else if(xid.indexOf('@') != -1) {
- name = Name.getBuddy(xid);
- }
-
- // Gateway
- else {
- name = xid;
- }
- }
-
- // If the target div does not exist
- if(!Common.exists('#' + hash)) {
- // We check the type of the chat to open
- if((type == 'chat') || (type == 'private')) {
- self.create(hash, xid, name, type);
- } else if(type == 'groupchat') {
- // Try to read the room stored configuration
- if(!Utils.isAnonymous() && (!nickname || !password || !title)) {
- // Catch the room data
- var fData = $(Common.XMLFromString(DataStore.getDB(Connection.desktop_hash, 'favorites', xid)));
- var fNick = fData.find('nick').text();
- var fPwd = fData.find('password').text();
- var fName = fData.find('name').text();
-
- // Apply the room data
- if(!nickname && fNick)
- nickname = fNick;
- if(!password && fPwd)
- password = fPwd;
- if(!title && fName)
- name = fName;
- }
-
- Groupchat.create(hash, xid, name, nickname, password);
- }
- }
-
- // Switch to the newly-created chat
- Interface.switchChan(hash);
- } catch(e) {
- Console.error('Chat.checkCreate', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Generates the chat DOM elements
- * @public
- * @param {string} type
- * @param {string} id
- * @param {string} xid
- * @param {string} nick
- * @return {undefined}
- */
- self.generate = function(type, id, xid, nick) {
-
- try {
- // Generate some stuffs
- var path = '#' + id + ' .';
- var escaped_xid = escape(xid);
-
- // Special code
- var chat_args = self._generateChatCode(type, id, xid);
-
- // Append the chat HTML code
- $('#page-engine').append(
- '<div id="' + id + '" class="page-engine-chan chat one-counter"' + chat_args.attributes + ' data-xid="' + escaped_xid + '">' +
- '<div class="top ' + id + '">' +
- chat_args.avatar +
-
- '<div class="name">' +
- '<p class="bc-name bc-name-nick">' + nick.htmlEnc() + '</p>' +
- chat_args.name +
- '</div>' +
- '</div>' +
-
- chat_args.code +
-
- '<div class="text">' +
- '<div class="footer">' +
- '<div class="chat-tools-content chat-tools-smileys">' +
- '<a href="#" class="tools-smileys tools-tooltip talk-images"></a>' +
- '</div>' +
-
- chat_args.style_picker +
-
- '<div class="chat-tools-content chat-tools-file">' +
- '<a href="#" class="tools-file tools-tooltip talk-images"></a>' +
- '</div>' +
-
- '<div class="chat-tools-content chat-tools-save">' +
- '<a href="#" class="tools-save tools-tooltip talk-images"></a>' +
- '</div>' +
-
- '<a href="#" class="tools-clear tools-tooltip talk-images chat-tools-content" title="' + Common._e("Clean current chat") + '"></a>' +
-
- chat_args.link +
- '</div>' +
-
- '<div class="compose">' +
- '<textarea class="message-area focusable" ' + chat_args.disabled + ' data-to="' + escaped_xid + '" /></textarea>' +
- '</div>' +
- '</div>' +
- '</div>'
- );
-
- self._generateEvents(path, id, xid);
- } catch(e) {
- Console.error('Chat.generate', e);
- }
-
- };
-
-
- /**
- * Generates the chat switch elements
- * @public
- * @param {string} type
- * @param {string} id
- * @param {string} xid
- * @param {string} nick
- * @return {undefined}
- */
- self.generateSwitch = function(type, id, xid, nick) {
-
- try {
- // Path to the element
- var chat_switch = '#page-switch .';
-
- // Special code
- var special_class = ' unavailable';
- var show_close = true;
-
- // Groupchat
- if(type == 'groupchat') {
- special_class = ' groupchat-default';
-
- if(Utils.isAnonymous() && (xid == Common.generateXID(ANONYMOUS_ROOM, 'groupchat'))) {
- show_close = false;
- }
- }
-
- // Generate the HTML code
- var html = '<div class="' + id + ' switcher chan" onclick="return Interface.switchChan(\'' + Utils.encodeOnclick(id) + '\')">' +
- '<div class="icon talk-images' + special_class + '"></div>' +
-
- '<div class="name">' + nick.htmlEnc() + '</div>';
-
- // Show the close button if not MUC and not anonymous
- if(show_close) {
- html += '<div class="exit" ' +
- 'title="' + Common._e("Close this tab") + '" ' +
- 'onclick="return Interface.quitThisChat(\'' + Utils.encodeOnclick(xid) + '\', \'' + Utils.encodeOnclick(id) + '\', \'' + Utils.encodeOnclick(type) + '\');">' +
- 'x' +
- '</div>';
- }
-
- // Close the HTML
- html += '</div>';
-
- // Append the HTML code
- $(chat_switch + 'chans, ' + chat_switch + 'more-content').append(html);
- } catch(e) {
- Console.error('Chat.generateSwitch', e);
- }
-
- };
-
-
- /**
- * Cleans given the chat lines
- * @public
- * @param {string} chat
- * @return {undefined}
- */
- self.clean = function(chat) {
-
- try {
- // Remove the messages
- $('#page-engine #' + chat + ' .content .one-group').remove();
-
- // Clear the history database
- Message.removeLocalArchive(chat);
-
- // Focus again
- $(document).oneTime(10, function() {
- $('#page-engine #' + chat + ' .text .message-area').focus();
- });
- } catch(e) {
- Console.error('Chat.clean', e);
- }
-
- };
-
-
- /**
- * Returns whether chat exists or not
- * @public
- * @param {string} hash
- * @return {boolean}
- */
- self.exists = function(hash) {
-
- exists = false;
-
- try {
- if(hash) {
- exists = Common.exists('#' + hash + '.page-engine-chan[data-type="chat"]');
- }
- } catch(e) {
- Console.error('Chat.exists', e);
- } finally {
- return exists;
- }
-
- };
-
-
- /**
- * Creates a new chat
- * @public
- * @param {string} hash
- * @param {string} xid
- * @param {string} nick
- * @param {string} type
- * @return {undefined}
- */
- self.create = function(hash, xid, nick, type) {
-
- try {
- Console.info('New chat: ' + xid);
-
- // Create the chat content
- self.generate(type, hash, xid, nick);
-
- // Create the chat switcher
- self.generateSwitch(type, hash, xid, nick);
-
- // Is this a chat?
- if(type == 'chat') {
- // MAM? Get archives from there!
- if(Features.enabledMAM()) {
- MAM.getArchives({
- 'with': xid
- }, {
- 'max': MAM.REQ_MAX,
- 'before': ''
- });
- } else {
- // Restore the chat history
- var chat_history = Message.readLocalArchive(hash);
-
- if(chat_history) {
- // Generate hashs
- var my_hash = hex_md5(Common.getXID());
- var friend_hash = hex_md5(xid);
-
- // Add chat history HTML
- var path_sel = $('#' + hash);
-
- path_sel.find('.content').append(chat_history);
-
- // Filter old groups & messages
- var one_group_sel = path_sel.find('.one-group');
- one_group_sel.filter('[data-type="user-message"]').addClass('from-history').attr('data-type', 'old-message');
- path_sel.find('.user-message').removeClass('user-message').addClass('old-message');
-
- // Regenerate user names
- one_group_sel.filter('.' + my_hash + ' b.name').text(
- Name.getBuddy(Common.getXID())
- );
-
- one_group_sel.filter('.' + friend_hash + ' b.name').text(
- Name.getBuddy(xid)
- );
-
- // Regenerate group dates
- one_group_sel.each(function() {
- var current_stamp = parseInt($(this).attr('data-stamp'), 10);
- $(this).find('span.date').text(DateUtils.relative(current_stamp));
- });
-
- // Regenerate avatars
- if(Common.exists('#' + hash + ' .one-group.' + my_hash + ' .avatar-container')) {
- Avatar.get(Common.getXID(), 'cache', 'true', 'forget');
- }
-
- if(Common.exists('#' + hash + ' .one-group.' + friend_hash + ' .avatar-container')) {
- Avatar.get(xid, 'cache', 'true', 'forget');
- }
- }
- }
-
- // Add button
- if(!Roster.isFriend(xid)) {
- $('#' + hash + ' .tools-add').click(function() {
- // Hide the icon (to tell the user all is okay)
- $(this).hide();
-
- // Send the subscribe request
- Roster.addThisContact(xid, nick);
- }).show();
- }
- }
-
- // We catch the user's informations (like this avatar, vcard, and so on...)
- UserInfos.get(hash, xid, nick, type);
-
- // The icons-hover functions
- Tooltip.icons(xid, hash);
-
- // The event handlers
- var input_sel = $('#page-engine #' + hash + ' .message-area');
- self._createEvents(input_sel, xid, hash);
-
- // Input events
- ChatState.events(input_sel, xid, hash, 'chat');
- Markers.events(input_sel, xid, hash, 'chat');
- } catch(e) {
- Console.error('Chat.create', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
diff --git a/app/javascripts/chatstate.js b/app/javascripts/chatstate.js
deleted file mode 100644
index d0353fbd..00000000
--- a/app/javascripts/chatstate.js
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the chatstate JS script for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var ChatState = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Sends a given chatstate to a given entity
- * @public
- * @param {string} state
- * @param {string} xid
- * @param {string} hash
- * @return {undefined}
- */
- self.send = function(state, xid, hash) {
-
- try {
- var user_type = $('#' + hash).attr('data-type');
-
- // If the friend client supports chatstates and is online
- if((user_type == 'groupchat') || ((user_type == 'chat') && $('#' + hash + ' .message-area').attr('data-chatstates') && !Common.exists('#page-switch .' + hash + ' .unavailable'))) {
- // Already sent?
- if(DataStore.getDB(Connection.desktop_hash, 'currentchatstate', xid) == state) {
- return;
- }
-
- // Write the state
- DataStore.setDB(Connection.desktop_hash, 'currentchatstate', xid, state);
-
- // New message stanza
- var aMsg = new JSJaCMessage();
- aMsg.setTo(xid);
- aMsg.setType(user_type);
-
- // Append the chatstate node
- aMsg.appendNode(state, {
- 'xmlns': NS_CHATSTATES
- });
-
- // Send this!
- con.send(aMsg);
- }
- } catch(e) {
- Console.error('ChatState.send', e);
- }
-
- };
-
-
- /**
- * Displays a given chatstate in a given chat
- * @public
- * @param {string} state
- * @param {string} hash
- * @param {string} type
- * @return {undefined}
- */
- self.display = function(state, hash, type) {
-
- try {
- // Groupchat?
- if(type == 'groupchat') {
- self.reset(hash, type);
-
- // "gone" state not allowed
- if(state != 'gone') {
- $('#page-engine .page-engine-chan .user.' + hash).addClass(state);
- }
- }
-
- // Chat
- else {
- // We change the buddy name color in the page-switch
- self.reset(hash, type);
- $('#page-switch .' + hash + ' .name').addClass(state);
-
- // We generate the chatstate text
- var text = '';
-
- switch(state) {
- // Active
- case 'active':
- text = Common._e("Your friend is paying attention to the conversation.");
-
- break;
-
- // Composing
- case 'composing':
- text = Common._e("Your friend is writing a message...");
-
- break;
-
- // Paused
- case 'paused':
- text = Common._e("Your friend stopped writing a message.");
-
- break;
-
- // Inactive
- case 'inactive':
- text = Common._e("Your friend is doing something else.");
-
- break;
-
- // Gone
- case 'gone':
- text = Common._e("Your friend closed the chat.");
-
- break;
- }
-
- // We reset the previous state
- $('#' + hash + ' .chatstate').remove();
-
- // We create the chatstate
- $('#' + hash + ' .content').after(
- '<div class="' + state + ' chatstate">' + text + '</div>'
- );
- }
- } catch(e) {
- Console.error('ChatState.display', e);
- }
-
- };
-
-
- /**
- * Resets the chatstate switcher marker
- * @public
- * @param {string} hash
- * @param {string} type
- * @return {undefined}
- */
- self.reset = function(hash, type) {
-
- try {
- // Define the selector
- var selector;
-
- if(type == 'groupchat') {
- selector = $('#page-engine .page-engine-chan .user.' + hash);
- } else {
- selector = $('#page-switch .' + hash + ' .name');
- }
-
- // Reset!
- selector.removeClass('active composing paused inactive gone');
- } catch(e) {
- Console.error('ChatState.reset', e);
- }
-
- };
-
-
- /**
- * Adds the chatstate events
- * @public
- * @param {object} target
- * @param {string} xid
- * @param {string} hash
- * @param {string} type
- * @return {undefined}
- */
- self.events = function(target, xid, hash, type) {
-
- try {
- target.keyup(function(e) {
- if(e.keyCode != 13) {
- // Composing a message
- if($(this).val() && (DataStore.getDB(Connection.desktop_hash, 'chatstate', xid) != 'on')) {
- // We change the state detect input
- DataStore.setDB(Connection.desktop_hash, 'chatstate', xid, 'on');
-
- // We send the friend a "composing" chatstate
- self.send('composing', xid, hash);
- }
-
- // Flushed the message which was being composed
- else if(!$(this).val() && (DataStore.getDB(Connection.desktop_hash, 'chatstate', xid) == 'on')) {
- // We change the state detect input
- DataStore.setDB(Connection.desktop_hash, 'chatstate', xid, 'off');
-
- // We send the friend an "active" chatstate
- self.send('active', xid, hash);
- }
- }
- });
-
- target.change(function() {
- // Reset the composing database entry
- DataStore.setDB(Connection.desktop_hash, 'chatstate', xid, 'off');
- });
-
- target.focus(function() {
- // Not needed
- if(target.is(':disabled')) {
- return;
- }
-
- // Something was written, user started writing again
- if($(this).val()) {
- self.send('composing', xid, hash);
- }
-
- // Chat only: Nothing in the input, user is active
- else if(type == 'chat') {
- self.send('active', xid, hash);
- }
- });
-
- target.blur(function() {
- // Not needed
- if(target.is(':disabled')) {
- return;
- }
-
- // Something was written, user paused
- if($(this).val()) {
- self.send('paused', xid, hash);
- } else if(type == 'chat') {
- self.send('inactive', xid, hash);
- }
- });
- } catch(e) {
- Console.error('ChatState.events', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/common.js b/app/javascripts/common.js
deleted file mode 100644
index 8f58bfd4..00000000
--- a/app/javascripts/common.js
+++ /dev/null
@@ -1,917 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the common JS script for Jappix
-
--------------------------------------------------
-
-License: dual-licensed under AGPL and MPLv2
-Authors: Valérian Saliou, olivierm, regilero, Maranda
-
-*/
-
-// Bundle
-var Common = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Constants */
- self.R_DOMAIN_NAME = /^(([a-zA-Z0-9-\.]+)\.)?[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$/i;
-
-
- /**
- * Checks if an element exists in the DOM
- * @public
- * @param {string} path
- * @return {boolean}
- */
- self.exists = function(path) {
-
- var exists = false;
-
- try {
- if(jQuery(path).size() > 0) {
- exists = true;
- }
- } catch(e) {
- Console.error('Common.exists', e);
- } finally {
- return exists;
- }
-
- };
-
-
- /**
- * Checks if Jappix is connected
- * @public
- * @return {boolean}
- */
- self.isConnected = function() {
-
- connected = false;
-
- try {
- if((typeof con != 'undefined') && con && con.connected()) {
- connected = true;
- }
- } catch(e) {
- Console.error('Common.isConnected', e);
- } finally {
- return connected;
- }
-
- };
-
-
- /**
- * Checks if Jappix is connected
- * @public
- * @return {boolean}
- */
- self.hasWebSocket = function() {
-
- has_websocket = false;
-
- try {
- if(HOST_WEBSOCKET && typeof window.WebSocket != 'undefined') {
- has_websocket = true;
- }
- } catch(e) {
- Console.error('Common.hasWebSocket', e);
- } finally {
- return has_websocket;
- }
-
- };
-
-
- /**
- * Checks if Jappix has focus
- * @public
- * @return {boolean}
- */
- self.isFocused = function() {
-
- has_focus = true;
-
- try {
- if(!document.hasFocus()) {
- has_focus = false;
- }
- } catch(e) {
- Console.error('Common.isFocused', e);
- } finally {
- return has_focus;
- }
-
- };
-
-
- /**
- * Matches a domain name
- * @public
- * @param {string} xid
- * @return {boolean}
- */
- self.isDomain = function(xid) {
-
- is_domain = false;
-
- try {
- if(xid.match(self.R_DOMAIN_NAME)) {
- is_domain = true;
- }
- } catch(e) {
- Console.error('Common.isDomain', e);
- } finally {
- return is_domain;
- }
-
- };
-
-
- /**
- * Generates the good XID
- * @public
- * @param {string} xid
- * @param {string} type
- * @return {string}
- */
- self.generateXID = function(xid, type) {
-
- try {
- // XID needs to be transformed
- xid = xid.toLowerCase();
-
- if(xid && (xid.indexOf('@') === -1)) {
- // Groupchat XID
- if(type == 'groupchat') {
- return xid + '@' + HOST_MUC;
- }
-
- // Gateway XID
- if(self.isDomain(xid) === true) {
- return xid;
- }
-
- // User XID
- return xid + '@' + HOST_MAIN;
- }
-
- // Nothing special (yet bare XID)
- return xid;
- } catch(e) {
- Console.error('Common.generateXID', e);
- }
-
- };
-
-
- /**
- * Gets the asked translated string
- * @public
- * @param {string} string
- * @return {string}
- */
- self._e = function(string) {
-
- try {
- return string;
- } catch(e) {
- Console.error('Common._e', e);
- }
-
- };
-
-
- /**
- * Replaces '%s' to a given value for a translated string
- * @public
- * @param {string} string
- * @param {string} value
- * @return {string}
- */
- self.printf = function(string, value) {
-
- try {
- return string.replace('%s', value);
- } catch(e) {
- Console.error('Common.printf', e);
- }
-
- };
-
-
- /**
- * Returns the string after the last given char
- * @public
- * @param {string} given_char
- * @param {string} str
- * @return {string}
- */
- self.strAfterLast = function(given_char, str) {
-
- try {
- if(!given_char || !str) {
- return '';
- }
-
- var char_index = str.lastIndexOf(given_char);
- var str_return = str;
-
- if(char_index >= 0) {
- str_return = str.substr(char_index + 1);
- }
-
- return str_return;
- } catch(e) {
- Console.error('Common.strAfterLast', e);
- }
-
- };
-
-
- /**
- * Properly explodes a string with a given character
- * @public
- * @param {string} toEx
- * @param {string} toStr
- * @param {number} i
- * @return {string}
- */
- self.explodeThis = function(toEx, toStr, i) {
-
- try {
- // Get the index of our char to explode
- var index = toStr.indexOf(toEx);
-
- // We split if necessary the string
- if(index !== -1) {
- if(i === 0) {
- toStr = toStr.substr(0, index);
- } else {
- toStr = toStr.substr(index + 1);
- }
- }
-
- // We return the value
- return toStr;
- } catch(e) {
- Console.error('Common.explodeThis', e);
- }
-
- };
-
-
- /**
- * Cuts the resource of a XID
- * @public
- * @param {string} aXID
- * @return {string}
- */
- self.cutResource = function(aXID) {
-
- try {
- return self.explodeThis('/', aXID, 0);
- } catch(e) {
- Console.error('Common.cutResource', e);
- }
-
- };
-
-
- /**
- * Gets the resource of a XID
- * @public
- * @param {string} aXID
- * @return {string}
- */
- self.thisResource = function(aXID) {
-
- resource = '';
-
- try {
- // Any resource?
- if(self.isFullXID(aXID)) {
- resource = self.explodeThis('/', aXID, 1);
- }
- } catch(e) {
- Console.error('Common.thisResource', e);
- } finally {
- return resource;
- }
-
- };
-
-
- /**
- * Returns whether this XID is full or not
- * @public
- * @param {string} xid
- * @return {boolean}
- */
- self.isFullXID = function(xid) {
-
- try {
- return xid.indexOf('/') !== -1;
- } catch(e) {
- Console.error('Common.isFullXID', e);
-
- return false;
- }
-
- };
-
-
- /**
- * nodepreps an XMPP node
- * @public
- * @param {string} node
- * @return {string}
- */
- self.nodeprep = function(node) {
-
- // Spec: http://tools.ietf.org/html/rfc6122#appendix-A
-
- try {
- if(!node) {
- return node;
- }
-
- // Remove prohibited chars
- var prohibited_chars = ['"', '&', '\'', '/', ':', '<', '>', '@'];
-
- for(var j in prohibited_chars) {
- node = node.replace(prohibited_chars[j], '');
- }
-
- // Lower case
- node = node.toLowerCase();
-
- return node;
- } catch(e) {
- Console.error('Common.nodeprep', e);
- }
-
- };
-
-
- /**
- * Encodes quotes in a string
- * @public
- * @param {string} str
- * @return {string}
- */
- self.encodeQuotes = function(str) {
-
- try {
- return (str + '').htmlEnc();
- } catch(e) {
- Console.error('Common.encodeQuotes', e);
- }
-
- };
-
-
- /**
- * Escapes quotes in a string
- * @public
- * @param {string} str
- * @return {string}
- */
- self.escapeQuotes = function(str) {
-
- try {
- return escape(self.encodeQuotes(str));
- } catch(e) {
- Console.error('Common.escapeQuotes', e);
- }
-
- };
-
-
- /**
- * Unescapes quotes in a string
- * @public
- * @param {string} str
- * @return {string}
- */
- self.unescapeQuotes = function(str) {
-
- try {
- return unescape(str);
- } catch(e) {
- Console.error('Common.unescapeQuotes', e);
- }
-
- };
-
-
- /**
- * Gets the bare XID from a XID
- * @public
- * @param {string} xid
- * @return {string}
- */
- self.bareXID = function(xid) {
-
- try {
- // Cut the resource
- xid = self.cutResource(xid);
-
- // Launch nodeprep
- if(xid.indexOf('@') !== -1) {
- xid = self.nodeprep(self.getXIDNick(xid, true)) + '@' + self.getXIDHost(xid);
- }
-
- return xid;
- } catch(e) {
- Console.error('Common.bareXID', e);
- }
-
- };
-
-
- /**
- * Gets the full XID from a XID
- * @public
- * @param {string} xid
- * @return {string}
- */
- self.fullXID = function(xid) {
-
- try {
- // Normalizes the XID
- var full = self.bareXID(xid);
- var resource = self.thisResource(xid);
-
- // Any resource?
- if(resource) {
- full += '/' + resource;
- }
-
- return full;
- } catch(e) {
- Console.error('Common.fullXID', e);
- }
-
- };
-
-
- /**
- * Gets the nick from a XID
- * @public
- * @param {string} aXID
- * @param {boolean} raw_explode
- * @return {string}
- */
- self.getXIDNick = function(aXID, raw_explode) {
-
- try {
- if(raw_explode !== true) {
- // Gateway nick?
- if(aXID.match(/\\40/)) {
- return self.explodeThis('\\40', aXID, 0);
- }
- }
-
- return self.explodeThis('@', aXID, 0);
- } catch(e) {
- Console.error('Common.getXIDNick', e);
- }
-
- };
-
-
- /**
- * Gets the host from a XID
- * @public
- * @param {string} aXID
- * @return {string}
- */
- self.getXIDHost = function(aXID) {
-
- try {
- return self.explodeThis('@', aXID, 1);
- } catch(e) {
- Console.error('Common.getXIDHost', e);
- }
-
- };
-
-
- /**
- * Checks if we are RTL (Right-To-Left)
- * @public
- * @return {boolean}
- */
- self.isRTL = function() {
-
- try {
- return (self._e("default:LTR") == 'default:RTL');
- } catch(e) {
- Console.error('Common.isRTL', e);
- }
-
- };
-
-
- /**
- * Checks if anonymous mode is allowed
- * @public
- * @return {boolean}
- */
- self.allowedAnonymous = function() {
-
- try {
- return (ANONYMOUS == 'on');
- } catch(e) {
- Console.error('Common.allowedAnonymous', e);
- }
-
- };
-
-
- /**
- * Checks if host is locked
- * @public
- * @return {boolean}
- */
- self.lockHost = function() {
-
- try {
- return (LOCK_HOST == 'on');
- } catch(e) {
- Console.error('Common.lockHost', e);
- }
-
- };
-
-
- /**
- * Gets the bare XID of the user
- * @public
- * @return {string}
- */
- self.getXID = function() {
-
- try {
- // Return the XID of the user
- if(con.username && con.domain) {
- return con.username + '@' + con.domain;
- }
-
- return '';
- } catch(e) {
- Console.error('Common.getXID', e);
- }
-
- };
-
-
- /**
- * Gets the full XID of the user
- * @public
- * @return {string}
- */
- self.getFullXID = function() {
-
- try {
- var xid = self.getXID();
-
- // Return the full XID of the user
- if(xid) {
- return xid + '/' + con.resource;
- }
-
- return '';
- } catch(e) {
- Console.error('Common.getFullXID', e);
- }
-
- };
-
-
- /**
- * Generates the colors for a given user XID
- * @public
- * @param {type} xid
- * @return {string}
- */
- self.generateColor = function(xid) {
-
- try {
- var colors = new Array(
- 'ac0000',
- 'a66200',
- '007703',
- '00705f',
- '00236b',
- '4e005c'
- );
-
- var number = 0;
-
- for(var i = 0; i < xid.length; i++) {
- number += xid.charCodeAt(i);
- }
-
- var color = '#' + colors[number % (colors.length)];
-
- return color;
- } catch(e) {
- Console.error('Common.generateColor', e);
- }
-
- };
-
-
- /**
- * Checks if the XID is a gateway
- * @public
- * @param {string} xid
- * @return {boolean}
- */
- self.isGateway = function(xid) {
-
- is_gateway = true;
-
- try {
- if(xid.indexOf('@') !== -1) {
- is_gateway = false;
- }
- } catch(e) {
- Console.error('Common.isGateway', e);
- } finally {
- return is_gateway;
- }
-
- };
-
-
- /**
- * Gets the from attribute of a stanza (overrides some servers like Prosody missing from attributes)
- * @public
- * @param {object} stanza
- * @return {string}
- */
- self.getStanzaFrom = function(stanza) {
-
- try {
- var from = stanza.getFrom();
-
- // No from, we assume this is our XID
- if(!from) {
- from = self.getXID();
- }
-
- return from;
- } catch(e) {
- Console.error('Common.getStanzaFrom', e);
- }
-
- };
-
-
- /**
- * Returns whether the stanza has been really sent from our own server or entity
- * @public
- * @param {object} stanza
- * @return {string}
- */
- self.isSafeStanza = function(stanza) {
-
- var is_safe = false;
-
- try {
- var from = self.getStanzaFrom(stanza);
-
- is_safe = (!from || from == con.domain || from == self.getXID()) && true;
- } catch(e) {
- Console.error('Common.isSafeStanza', e);
- } finally {
- return is_safe;
- }
-
- };
-
-
- /**
- * Adds a zero to a date when needed
- * @public
- * @param {number} i
- * @return {string}
- */
- self.padZero = function(i) {
-
- try {
- // Negative number (without first 0)
- if(i > -10 && i < 0) {
- return '-0' + (i * -1);
- }
-
- // Positive number (without first 0)
- if(i < 10 && i >= 0) {
- return '0' + i;
- }
-
- // All is okay
- return i;
- } catch(e) {
- Console.error('Common.padZero', e);
- }
-
- };
-
-
- /**
- * Escapes a string (or an array of string) for a regex usage. In case of an
- * array, escapes are not done "in place", keeping the query unmodified
- * @public
- * @param {object} query
- * @return {object}
- */
- self.escapeRegex = function(query) {
-
- var result = [];
-
- try {
- if(query instanceof Array) {
- result = [query.length];
-
- for(i = 0; i < query.length; i++) {
- try {
- result[i] = Common.escapeRegex(query[i]);
- } catch(e) {
- Console.error('Common.escapeRegex', e);
- result[i] = null;
- }
- }
- } else {
- try {
- result = query.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
- } catch(e) {
- Console.error('Common.escapeRegex[inner]', e);
- }
- }
- } catch(e) {
- Console.error('Common.escapeRegex', e);
- } finally {
- return result;
- }
-
- };
-
-
- /**
- * Returns a random array value
- * @public
- * @param {object} arr
- * @return {object}
- */
- self.randomArrayValue = function(arr) {
-
- try {
- return arr[Math.floor(Math.random() * arr.length)];
- } catch(e) {
- Console.error('Common.randomArrayValue', e);
- }
-
- };
-
-
- /**
- * Returns whether the browser is mobile or not
- * @public
- * @return {boolean}
- */
- self.isMobile = function() {
-
- is_mobile = false;
-
- try {
- is_mobile = /Android|iPhone|iPod|iPad|Windows Phone|BlackBerry|Bada|Maemo|Meego|webOS/i.test(navigator.userAgent);
- } catch(e) {
- Console.error('Common.isMobile', e);
- } finally {
- return is_mobile;
- }
-
- };
-
-
- /**
- * Converts a XML document to a string
- * @public
- * @param {object} xmlData
- * @return {string}
- */
- self.xmlToString = function(xmlData) {
-
- xml_str = null;
-
- try {
- // For Mozilla, Firefox, Opera, etc.
- if(window.XMLSerializer) {
- xml_str = (new XMLSerializer()).serializeToString(xmlData);
- }
-
- // For Internet Explorer
- if(window.ActiveXObject) {
- xml_str = xmlData.xml;
- }
- } catch(e) {
- Console.error('Common.xmlToString', e);
- } finally {
- return xml_str;
- }
-
- };
-
-
- /**
- * Converts a string to a XML document
- * @public
- * @param {string} sXML
- * @return {object}
- */
- self.XMLFromString = function(sXML) {
-
- try {
- // No data?
- if(!sXML) {
- return '';
- }
-
- // Add the XML tag
- if(!sXML.match(/^<\?xml/i)) {
- sXML = '<?xml version="1.0"?>' + sXML;
- }
-
- // Parse it!
- if(window.DOMParser) {
- return (new DOMParser()).parseFromString(sXML, 'text/xml');
- }
-
- if(window.ActiveXObject) {
- var oXML = new ActiveXObject('Microsoft.XMLDOM');
- oXML.loadXML(sXML);
-
- return oXML;
- }
- } catch(e) {
- Console.error('Common.XMLFromString', e);
-
- return '';
- }
-
- };
-
-
- /**
- * Watches for input value change (delays callback)
- * @public
- * @param {function} cb
- * @return {function}
- */
- self.typewatch = function(cb) {
-
- try {
- var timer = 0;
-
- return function(callback, ms) {
- clearTimeout(timer);
- timer = setTimeout(callback, ms);
- };
- } catch(e) {
- Console.error('Common.typewatch', e);
- }
-
- };
-
- /**
- * Convert all applicable characters to HTML entities
- * @public
- * @param {string} cb
- * @return {string}
- */
- self.htmlentities = function(s) {
- return $('<div/>').text(s + '').html();
- };
-
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
-
-var JappixCommon = Common;
diff --git a/app/javascripts/connection.js b/app/javascripts/connection.js
deleted file mode 100644
index 6f1dadbb..00000000
--- a/app/javascripts/connection.js
+++ /dev/null
@@ -1,1034 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the connection JS script for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Authors: Valérian Saliou, Maranda
-
-*/
-
-// Bundle
-var Connection = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Variables */
- self.current_session = false;
- self.desktop_hash = null;
- self.connected = false;
- self.reconnect_try = 0;
- self.reconnect_timer = 0;
- self.resume = false;
-
-
- /**
- * Do registration on Register API
- * @private
- * @param {string} username
- * @param {string} domain
- * @param {string} pass
- * @param {string} captcha
- * @return {boolean}
- */
- self._doRegisterAPI = function(username, domain, pass, captcha) {
-
- var is_success = false;
-
- try {
- // Show the waiting image
- Interface.showGeneralWait();
-
- // Change the page title
- Interface.title('wait');
-
- // Send request
- $.post('./server/register.php', {username: username, domain: domain, password: pass, captcha: captcha}, function(data) {
- // Error registering
- Interface.removeGeneralWait();
- Interface.title('home');
-
- // In all case, update CAPTCHA
- $('#home img.captcha_img').attr('src', './server/captcha.php?id=' + genID());
- $('#home input.captcha').val('');
-
- // Registration okay
- if($(data).find('query status').text() == '1') {
- is_success = true;
- self.handleRegistered();
- } else {
- // Show error message
- var error_message = '';
-
- switch($(data).find('query message').text()) {
- case 'CAPTCHA Not Matching':
- error_message = Common._e("The security code you entered is invalid. Please retry with another one.");
-
- $('#home input.captcha').focus();
-
- break;
-
- case 'Username Unavailable':
- error_message = Common._e("The username you picked is not available. Please try another one.");
-
- $('#home input.nick').focus();
-
- break;
-
- default:
- error_message = Common._e("There was an error registering your account. Please retry.");
-
- break;
- }
-
- if(error_message) {
- Errors.show('', error_message, '');
- }
- }
- });
- } catch(e) {
- Console.error('Connection._doRegisterAPI', e);
- } finally {
- return is_success;
- }
-
- };
-
-
- /**
- * Do registration throug in-band stream
- * @private
- * @param {string} username
- * @param {string} domain
- * @param {string} pass
- * @return {boolean}
- */
- self._doRegisterInBand = function(username, domain, pass) {
-
- var is_success = true;
-
- try {
- if(Common.hasWebSocket()) {
- // WebSocket supported & configured
- con = new JSJaCWebSocketConnection({
- httpbase: HOST_WEBSOCKET
- });
- } else {
- var httpbase = (HOST_BOSH_MAIN || HOST_BOSH);
-
- // Check BOSH origin
- BOSH_SAME_ORIGIN = Origin.isSame(httpbase);
-
- // We create the new http-binding connection
- con = new JSJaCHttpBindingConnection({
- httpbase: httpbase
- });
- }
-
- // We setup the connection !
- con.registerHandler('onconnect', self.handleRegistered);
- con.registerHandler('onerror', Errors.handle);
-
- con.connect({
- 'domain': $.trim(domain),
- 'username': $.trim(username),
- 'resource': JAPPIX_RESOURCE + ' Register (' + (new Date()).getTime() + ')',
- 'pass': pass,
- 'register': true,
- 'secure': true,
- 'xmllang': XML_LANG
- });
-
- // Show the waiting image
- Interface.showGeneralWait();
-
- // Change the page title
- Interface.title('wait');
- } catch(e) {
- Console.error('Connection._doRegisterInBand', e);
- is_success = false;
- } finally {
- return is_success;
- }
-
- };
-
-
- /**
- * Attaches reconnect events
- * @private
- * @param {string} mode
- * @return {undefined}
- */
- self._eventsReconnect = function(mode) {
-
- try {
- // Click events
- if(mode == 'normal') {
- $('#reconnect a.finish.cancel').click(function() {
- return self.cancelReconnect();
- });
- }
-
- $('#reconnect a.finish.reconnect').click(function() {
- return self.acceptReconnect(mode);
- });
- } catch(e) {
- Console.error('Connection._eventsReconnect', e);
- }
-
- };
-
-
- /**
- * Schedules the next auto reconnect
- * @private
- * @param {string} mode
- * @return {undefined}
- */
- self._scheduleReconnect = function(mode) {
-
- try {
- // Try to reconnect automatically after a while
- if(self.reconnect_try < 5) {
- self.reconnect_timer = 5 + (5 * self.reconnect_try);
- } else {
- self.reconnect_timer = 120;
- }
-
- // Change the try number
- self.reconnect_try++;
-
- // Fire the event!
- $('#reconnect a.finish.reconnect').everyTime('1s', function() {
- // We can reconnect!
- if(self.reconnect_timer === 0) {
- return self.acceptReconnect(mode);
- }
-
- // Button text
- if(self.reconnect_timer <= 10) {
- $(this).text(Common._e("Reconnect") + ' (' + self.reconnect_timer + ')');
- }
-
- // Remove 1 second
- self.reconnect_timer--;
- });
- } catch(e) {
- Console.error('Connection._scheduleReconnect', e);
- }
-
- };
-
-
- /**
- * Does the user login
- * @public
- * @param {string} lNick
- * @param {string} lServer
- * @param {string} lPass
- * @param {string} lResource
- * @param {number} lPriority
- * @param {boolean} lRemember
- * @param {object} loginOpts
- * @return {boolean}
- */
- self.doLogin = function(lNick, lServer, lPass, lResource, lPriority, lRemember, loginOpts) {
-
- try {
- // get optionnal conn handlers
- extend_obj = loginOpts || {};
-
- // We remove the not completed class to avoid problems
- $('#home .loginer input').removeClass('please-complete');
-
- // We add the login wait div
- Interface.showGeneralWait();
-
- if(Common.hasWebSocket()) {
- // WebSocket supported & configured
- con = new JSJaCWebSocketConnection({
- httpbase: HOST_WEBSOCKET
- });
- } else {
- var httpbase = (HOST_BOSH_MAIN || HOST_BOSH);
-
- // Check BOSH origin
- BOSH_SAME_ORIGIN = Origin.isSame(httpbase);
-
- // We create the new http-binding connection
- con = new JSJaCHttpBindingConnection({
- httpbase: httpbase
- });
- }
-
- // And we handle everything that happen
- self.setupCon(con, extend_obj);
-
- // Generate a resource
- var random_resource = DataStore.getDB(self.desktop_hash, 'session', 'resource');
-
- if(!random_resource) {
- random_resource = lResource + ' (' + (new Date()).getTime() + ')';
- }
-
- var con_args = {
- 'domain': lServer.trim(),
- 'username': lNick.trim(),
- 'resource': random_resource,
- 'pass': lPass,
- 'secure': true,
- 'xmllang': XML_LANG
- };
-
- self.desktop_hash = 'jd.' + hex_md5(con_args.username + '@' + con_args.domain);
-
- // Store the resource (for reconnection)
- DataStore.setDB(self.desktop_hash, 'session', 'resource', random_resource);
-
- // Store session XML in temporary database
- self.storeSession(lNick, lServer, lPass, lResource, lPriority, lRemember);
-
- // We store the infos of the user into the data-base
- DataStore.setDB(self.desktop_hash, 'priority', 1, lPriority);
-
- // We connect !
- con.connect(con_args);
-
- // Change the page title
- Interface.title('wait');
-
- Console.info('Jappix is connecting...');
- } catch(e) {
- Console.error('Connection.doLogin', e);
-
- // Reset Jappix
- Talk.destroy();
-
- // Open an unknown error
- Board.openThisError(2);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Handles the user registration
- * @public
- * @return {undefined}
- */
- self.handleRegistered = function() {
-
- try {
- Console.info('A new account has been registered.');
-
- // We remove the waiting image
- Interface.removeGeneralWait();
-
- // Reset the title
- Interface.title('home');
-
- // We show the success information
- $('#home .registerer .success').fadeIn('fast');
-
- // We quit the session
- if(Common.isConnected()) {
- self.logout();
- }
- } catch(e) {
- Console.error('Connection.handleRegistered', e);
- }
-
- };
-
-
- /**
- * Does the user registration
- * @public
- * @param {string} username
- * @param {string} domain
- * @param {string} pass
- * @param {string} captcha
- * @return {boolean}
- */
- self.doRegister = function(username, domain, pass, captcha) {
-
- try {
- Console.info('Trying to register an account...');
-
- // We change the registered information text
- $('#home .homediv.registerer').append(
- '<div class="info success">' +
- Common._e("You have been registered, here is your XMPP address:") +
- ' <b>' + username.htmlEnc() + '@' + domain.htmlEnc() + '</b> - ' +
- '<a href="#">' + Common._e("Login") + '</a>' +
- '</div>'
- );
-
- // Login link
- $('#home .homediv.registerer .success a').click(function() {
- return self.doLogin(username, domain, pass, '', '10', false);
- });
-
- if((REGISTER_API == 'on') && (domain == HOST_MAIN) && captcha) {
- self._doRegisterAPI(username, domain, pass, captcha);
- } else {
- self._doRegisterInBand(username, domain, pass);
- }
- } catch(e) {
- Console.error('Connection.doRegister', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Does the user anonymous login
- * @public
- * @return {boolean}
- */
- self.doAnonymous = function() {
-
- try {
- Console.info('Trying to login anonymously...');
-
- var path_sel = $('#home .anonymouser');
- var room = path_sel.find('.room').val();
- var nick = path_sel.find('.nick').val();
-
- // Form correctly completed?
- if(room && nick) {
- // We remove the not completed class to avoid problems
- $('#home .anonymouser input').removeClass('please-complete');
-
- // Redirect the user to the anonymous room
- window.location.href = JAPPIX_LOCATION + '?r=' + room + '&n=' + nick;
- } else {
- path_sel.find('input[type="text"]').each(function() {
- var this_sel = $(this);
-
- if(!this_sel.val()) {
- $(document).oneTime(10, function() {
- this_sel.addClass('please-complete').focus();
- });
- } else {
- this_sel.removeClass('please-complete');
- }
- });
- }
- } catch(e) {
- Console.error('Connection.doAnonymous', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Handles the user connected event
- * @public
- * @return {undefined}
- */
- self.handleConnected = function() {
-
- try {
- Console.info('Jappix is now connected.');
-
- // Connection markers
- self.connected = true;
- self.reconnect_try = 0;
- self.reconnect_timer = 0;
-
- // We hide the home page
- $('#home').hide();
-
- // Any suggest to do before triggering connected event?
- Groupchat.suggestCheck();
-
- // Remove the waiting item
- Interface.removeGeneralWait();
-
- // Init call
- Call.init();
- } catch(e) {
- Console.error('Connection.handleConnected', e);
- }
-
- };
-
-
- /**
- * Triggers the connected state
- * @public
- * @return {undefined}
- */
- self.triggerConnected = function() {
-
- try {
- // Not resumed?
- if(!self.resume) {
- // Remember the session?
- if(DataStore.getDB(self.desktop_hash, 'remember', 'session')) {
- DataStore.setPersistent('global', 'session', 1, self.current_session);
- }
-
- // We show the chatting app.
- Talk.create();
-
- // We reset the homepage
- Home.change('default');
-
- // We get all the other things
- self.getEverything();
-
- // Set last activity stamp
- DateUtils.last_activity = DateUtils.getTimeStamp();
- }
-
- // Resumed
- else {
- // Send our presence
- Presence.sendActions();
-
- // Change the title
- Interface.updateTitle();
- }
- } catch(e) {
- Console.error('Connection.triggerConnected', e);
- }
-
- };
-
-
- /**
- * Handles the user disconnected event
- * @public
- * @return {undefined}
- */
- self.handleDisconnected = function() {
-
- try {
- Console.info('Jappix is now disconnected.');
-
- // Abort ongoing call (if any)
- Call.stop(true);
-
- // Normal disconnection
- if(!self.current_session && !self.connected) {
- Talk.destroy();
- self.desktop_hash = null;
- }
- } catch(e) {
- Console.error('Connection.handleDisconnected', e);
- }
-
- };
-
-
- /**
- * Setups the normal connection
- * @public
- * @param {object} con
- * @param {object} extend_obj
- * @return {undefined}
- */
- self.setupCon = function(con, extend_obj) {
-
- try {
- var connection_handlers = {
- 'message': Message.handle,
- 'presence': Presence.handle,
- 'iq': IQ.handle,
- 'onconnect': self.handleConnected,
- 'onerror': Errors.handle,
- 'ondisconnect': self.handleDisconnected
- };
-
- for(var cur_handler in connection_handlers) {
- con.registerHandler(
- cur_handler,
- connection_handlers[cur_handler]
- );
- }
-
- // Extended handlers
- extend_obj = extend_obj || {};
-
- jQuery.each(extend_obj, function(keywd,funct) {
- con.registerHandler(keywd, funct);
- });
- } catch(e) {
- Console.error('Connection.setupCon', e);
- }
-
- };
-
-
- /**
- * Logouts from the server
- * @public
- * @return {boolean}
- */
- self.logout = function() {
-
- logout_done = false;
-
- try {
- if(Common.isConnected()) {
- Console.info('Jappix is disconnecting...');
-
- // Disconnect from the XMPP server
- con.disconnect();
-
- logout_done = true;
- }
- } catch(e) {
- Console.error('Connection.logout', e);
- } finally {
- return logout_done;
- }
-
- };
-
-
- /**
- * Terminates the user session
- * @public
- * @return {undefined}
- */
- self.terminate = function() {
-
- try {
- if(Common.isConnected()) {
- // Clear temporary session storage
- self.resetConMarkers();
-
- // Show the waiting item (useful if BOSH is sloooow)
- Interface.showGeneralWait();
-
- // Change the page title
- Interface.title('wait');
-
- // Disconnect from the XMPP server
- self.logout();
- }
- } catch(e) {
- Console.error('Connection.terminate', e);
- }
-
- };
-
-
- /**
- * Quits a session
- * @public
- * @param {type} name
- * @return {undefined}
- */
- self.quit = function() {
-
- try {
- if(!Common.isConnected()) {
- return;
- }
-
- // We show the waiting image
- Interface.showGeneralWait();
-
- // Change the page title
- Interface.title('wait');
-
- // We disconnect from the XMPP server
- self.logout();
- } catch(e) {
- Console.error('Connection.quit', e);
- }
-
- };
-
-
- /**
- * Creates the reconnect pane
- * @public
- * @param {string} mode
- * @return {undefined}
- */
- self.createReconnect = function(mode) {
-
- try {
- Console.error('This is not a normal disconnection, show the reconnect pane...');
-
- // Reconnect pane not yet displayed?
- if(!Common.exists('#reconnect')) {
- // Blur the focused input/textarea/select
- $('input, select, textarea').blur();
-
- // Create the HTML code
- var html = '<div id="reconnect" class="lock">' +
- '<div class="pane">' +
- Common._e("Due to a network issue, you were disconnected. What do you want to do now?");
-
- // Can we cancel reconnection?
- if(mode == 'normal') {
- html += '<a href="#" class="finish cancel">' + Common._e("Cancel") + '</a>';
- }
-
- html += '<a href="#" class="finish reconnect">' + Common._e("Reconnect") + '</a>' +
- '</div></div>';
-
- // Append the code
- $('body').append(html);
-
- // Attach events
- self._eventsReconnect(mode);
-
- // Schedule next reconnect
- self._scheduleReconnect(mode);
-
- // Page title
- Interface.updateTitle();
- }
- } catch(e) {
- Console.error('Connection.createReconnect', e);
- }
-
- };
-
-
- /**
- * Reconnects the user if he was disconnected (network issue)
- * @public
- * @param {string} mode
- * @return {boolean}
- */
- self.acceptReconnect = function(mode) {
-
- try {
- Console.info('Trying to reconnect the user...');
-
- // Resume marker
- self.resume = true;
-
- // Show waiting item
- Interface.showGeneralWait();
-
- // Reset some various stuffs
- var groupchats = '#page-engine .page-engine-chan[data-type="groupchat"]';
- var groupchats_sel = $(groupchats);
-
- groupchats_sel.find('.list .role').hide();
- groupchats_sel.find('.one-group, ' + groupchats + ' .list .user').remove();
- groupchats_sel.attr('data-initial', 'false');
-
- // Stop the timer
- $('#reconnect a.finish.reconnect').stopTime();
-
- // Remove the reconnect pane
- $('#reconnect').remove();
-
- // Try to login again
- if(mode == 'normal') {
- self.loginFromSession(Common.XMLFromString(self.current_session));
- } else if(mode == 'anonymous') {
- Anonymous.login(HOST_ANONYMOUS);
- }
- } catch(e) {
- Console.error('Connection.acceptReconnect', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Cancel the reconnection of user account (network issue)
- * @public
- * @return {boolean}
- */
- self.cancelReconnect = function() {
-
- try {
- Console.info('User has canceled automatic reconnection...');
-
- // Stop the timer
- $('#reconnect a.finish.reconnect').stopTime();
-
- // Remove the reconnect pane
- $('#reconnect').remove();
-
- // Destroy the talk page
- Talk.destroy();
-
- // Renitialize the previous session parameters
- self.resetConMarkers();
- } catch(e) {
- Console.error('Connection.cancelReconnect', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Clears session reminder database
- * @public
- * @return {undefined}
- */
- self.clearLastSession = function() {
-
- try {
- // Clear temporary storage
- self.resetConMarkers();
-
- // Clear persistent storage
- if($(Common.XMLFromString(DataStore.getPersistent('global', 'session', 1))).find('stored').text() == 'true') {
- DataStore.removePersistent('global', 'session', 1);
- }
- } catch(e) {
- Console.error('Connection.clearLastSession', e);
- }
-
- };
-
-
- /**
- * Resets the connection markers
- * @public
- * @return {undefined}
- */
- self.resetConMarkers = function() {
-
- try {
- self.current_session = false;
- self.connected = false;
- self.resume = false;
- self.reconnect_try = 0;
- self.reconnect_timer = 0;
- } catch(e) {
- Console.error('Connection.resetConMarkers', e);
- }
-
- };
-
-
- /**
- * Logins from a saved session
- * @public
- * @param {string} data
- * @return {undefined}
- */
- self.loginFromSession = function(data) {
-
- try {
- // Select the data
- var session = $(data);
-
- // Fire the login event
- self.doLogin(
- session.find('username').text(),
- session.find('domain').text(),
- session.find('password').text(),
- session.find('resource').text(),
- session.find('priority').text(),
- false
- );
- } catch(e) {
- Console.error('Connection.loginFromSession', e);
- }
-
- };
-
-
- /**
- * Quits a session normally
- * @public
- * @return {boolean}
- */
- self.normalQuit = function() {
-
- try {
- // Reset our database
- self.clearLastSession();
-
- // We quit the current session
- self.quit();
-
- // We show an info
- Board.openThisInfo(3);
- } catch(e) {
- Console.error('Connection.normalQuit', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Gets all the users stuff
- * @public
- * @return {undefined}
- */
- self.getEverything = function() {
-
- try {
- Features.get();
- Roster.get();
- Privacy.list();
- Storage.get(NS_ROSTERNOTES);
- } catch(e) {
- Console.error('Connection.getEverything', e);
- }
-
- };
-
-
- /**
- * Generates session data to store
- * @public
- * @param {string} lNick
- * @param {string} lServer
- * @param {string} lPass
- * @param {string} lResource
- * @param {number} lPriority
- * @param {boolean} lRemember
- * @return {undefined}
- */
- self.storeSession = function(lNick, lServer, lPass, lResource, lPriority, lRemember) {
-
- try {
- // Generate a session XML to be stored
- session_xml = '<session>' +
- '<stored>true</stored>' +
- '<domain>' + lServer.htmlEnc() + '</domain>' +
- '<username>' + lNick.htmlEnc() + '</username>' +
- '<resource>' + lResource.htmlEnc() + '</resource>' +
- '<password>' + lPass.htmlEnc() + '</password>' +
- '<priority>' + lPriority.htmlEnc() + '</priority>' +
- '</session>';
-
- // Save the session parameters (for reconnect if network issue)
- self.current_session = session_xml;
-
- // Remember me?
- if(lRemember) {
- DataStore.setDB(self.desktop_hash, 'remember', 'session', 1);
- }
-
- return session_xml;
- } catch(e) {
- Console.error('Connection.storeSession', e);
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.launch = function() {
-
- try {
- $(document).ready(function() {
- // Logouts when Jappix is closed
- $(window).bind('beforeunload', Connection.terminate);
-
- // Nothing to do when anonymous!
- if(Utils.isAnonymous()) {
- return;
- }
-
- // Connection params submitted in URL?
- if(XMPPLinks.links_var.u && XMPPLinks.links_var.q) {
- // Generate login data
- var login_xid = Common.bareXID(Common.generateXID(XMPPLinks.links_var.u, 'chat'));
- var login_nick = Common.getXIDNick(login_xid);
- var login_server = Common.getXIDHost(login_xid);
- var login_pwd = XMPPLinks.links_var.q;
- var login_resource = JAPPIX_RESOURCE + ' (' + (new Date()).getTime() + ')';
- var login_priority = '10';
- var login_remember = 1;
-
- // Must store session?
- if(XMPPLinks.links_var.h && (XMPPLinks.links_var.h === '1')) {
- // Store session
- var session_xml = self.storeSession(
- login_nick,
- login_server,
- login_pwd,
- login_resource,
- login_priority,
- true
- );
-
- DataStore.setPersistent('global', 'session', 1, session_xml);
-
- // Redirect to a clean URL
- document.location.href = './';
- } else {
- // Hide the homepage
- $('#home').hide();
-
- // Show the waiting icon
- Interface.showGeneralWait();
-
- // Proceed login
- self.doLogin(login_nick, login_server, login_pwd, login_resource, login_priority, login_remember);
- }
-
- return;
- }
-
- // Try to resume a stored session, if not anonymous
- var session = Common.XMLFromString(
- DataStore.getPersistent('global', 'session', 1)
- );
-
- if($(session).find('stored').text() == 'true') {
- // Hide the homepage
- $('#home').hide();
-
- // Show the waiting icon
- Interface.showGeneralWait();
-
- // Login!
- self.loginFromSession(session);
-
- Console.info('Saved session found, resuming it...');
- } else if((parent.location.hash != '#OK') && XMPPLinks.links_var.x) {
- Home.change('loginer');
-
- Console.info('A XMPP link is set, switch to login page.');
- }
- });
- } catch(e) {
- Console.error('Connection.launch', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
-
-Connection.launch(); \ No newline at end of file
diff --git a/app/javascripts/console.js b/app/javascripts/console.js
deleted file mode 100644
index d645e54c..00000000
--- a/app/javascripts/console.js
+++ /dev/null
@@ -1,66 +0,0 @@
-// License: MIT
-
-/*
- * Console.js
- *
- * An interface to native console methods
- * Avoids issues when browser does not have native support for console
- *
- * @license OS
- * @author Valérian Saliou <valerian@valeriansaliou.name>
- * @url https://github.com/valeriansaliou/console.js
- */
-
-var Console = (function () {
-
- var self = this;
-
-
- /* Variables */
- self._available = typeof(window.console) != 'undefined';
- self._has = self._available && JappixSystem.isDeveloper();
- self._console = self._available ? console : {};
-
-
- /* Adapters */
- self._adapter = function (level) {
- if (!self._has) {
- return function() {};
- }
-
- var adapter = null;
- try {
- switch (level) {
- case 0:
- adapter = console.warn; break;
- case 1:
- adapter = console.error; break;
- case 2:
- adapter = console.info; break;
- case 3:
- adapter = console.log; break;
- case 4:
- adapter = console.debug; break;
- }
- } catch (e) {
- adapter = function() {};
- }
-
- return adapter.bind(self._console);
- };
-
-
- /* Methods */
- self.warn = self._adapter(0);
- self.error = self._adapter(1);
- self.info = self._adapter(2);
- self.log = self._adapter(3);
- self.debug = self._adapter(4);
-
-
- /* Return class scope */
- return self;
-
-})();
-
-var JappixConsole = Console; \ No newline at end of file
diff --git a/app/javascripts/constants.js b/app/javascripts/constants.js
deleted file mode 100644
index 69b71d16..00000000
--- a/app/javascripts/constants.js
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the constants JS scripts for Jappix
-
--------------------------------------------------
-
-License: dual-licensed under AGPL and MPLv2
-Authors: Stefan Strigler, Valérian Saliou, Kloadut, Maranda
-
-*/
-
-// XMPP XMLNS attributes
-var NS_PROTOCOL = 'http://jabber.org/protocol/';
-var NS_FEATURES = 'http://jabber.org/features/';
-var NS_CLIENT = 'jabber:client';
-var NS_IQ = 'jabber:iq:';
-var NS_X = 'jabber:x:';
-var NS_IETF = 'urn:ietf:params:xml:ns:';
-var NS_IETF_XMPP = NS_IETF + 'xmpp-';
-var NS_XMPP = 'urn:xmpp:';
-
-var NS_STORAGE = 'storage:';
-var NS_BOOKMARKS = NS_STORAGE + 'bookmarks';
-var NS_ROSTERNOTES = NS_STORAGE + 'rosternotes';
-
-var NS_JAPPIX = 'jappix:';
-var NS_INBOX = NS_JAPPIX + 'inbox';
-var NS_OPTIONS = NS_JAPPIX + 'options';
-
-var NS_DISCO_ITEMS = NS_PROTOCOL + 'disco#items';
-var NS_DISCO_INFO = NS_PROTOCOL + 'disco#info';
-var NS_VCARD = 'vcard-temp';
-var NS_VCARD_P = NS_VCARD + ':x:update';
-var NS_IETF_VCARD4 = NS_IETF + 'vcard-4.0';
-var NS_XMPP_VCARD4 = NS_XMPP + 'vcard4';
-var NS_URN_ADATA = NS_XMPP + 'avatar:data';
-var NS_URN_AMETA = NS_XMPP + 'avatar:metadata';
-var NS_AUTH = NS_IQ + 'auth';
-var NS_AUTH_ERROR = NS_IQ + 'auth:error';
-var NS_REGISTER = NS_IQ + 'register';
-var NS_SEARCH = NS_IQ + 'search';
-var NS_ROSTER = NS_IQ + 'roster';
-var NS_PRIVACY = NS_IQ + 'privacy';
-var NS_PRIVATE = NS_IQ + 'private';
-var NS_VERSION = NS_IQ + 'version';
-var NS_TIME = NS_IQ + 'time';
-var NS_LAST = NS_IQ + 'last';
-var NS_IQDATA = NS_IQ + 'data';
-var NS_XDATA = NS_X + 'data';
-var NS_IQOOB = NS_IQ + 'oob';
-var NS_XOOB = NS_X + 'oob';
-var NS_DELAY = NS_X + 'delay';
-var NS_EXPIRE = NS_X + 'expire';
-var NS_EVENT = NS_X + 'event';
-var NS_XCONFERENCE = NS_X + 'conference';
-var NS_STATS = NS_PROTOCOL + 'stats';
-var NS_MUC = NS_PROTOCOL + 'muc';
-var NS_MUC_USER = NS_MUC + '#user';
-var NS_MUC_ADMIN = NS_MUC + '#admin';
-var NS_MUC_OWNER = NS_MUC + '#owner';
-var NS_MUC_CONFIG = NS_MUC + '#roomconfig';
-var NS_PUBSUB = NS_PROTOCOL + 'pubsub';
-var NS_PUBSUB_EVENT = NS_PUBSUB + '#event';
-var NS_PUBSUB_OWNER = NS_PUBSUB + '#owner';
-var NS_PUBSUB_NMI = NS_PUBSUB + '#node-meta-info';
-var NS_PUBSUB_NC = NS_PUBSUB + '#node_config';
-var NS_PUBSUB_CN = NS_PUBSUB + '#config-node';
-var NS_PUBSUB_RI = NS_PUBSUB + '#retrieve-items';
-var NS_COMMANDS = NS_PROTOCOL + 'commands';
-var NS_BOSH = NS_PROTOCOL + 'httpbind';
-var NS_STREAM = 'http://etherx.jabber.org/streams';
-var NS_URN_TIME = NS_XMPP + 'time';
-var NS_URN_PING = NS_XMPP + 'ping';
-var NS_URN_MBLOG = NS_XMPP + 'microblog:0';
-var NS_URN_INBOX = NS_XMPP + 'inbox';
-var NS_URN_FORWARD = NS_XMPP + 'forward:0';
-var NS_URN_MAM = NS_XMPP + 'mam:tmp';
-var NS_URN_DELAY = NS_XMPP + 'delay';
-var NS_URN_RECEIPTS = NS_XMPP + 'receipts';
-var NS_URN_CARBONS = NS_XMPP + 'carbons:2';
-var NS_URN_CORRECT = NS_XMPP + 'message-correct:0';
-var NS_URN_IDLE = NS_XMPP + 'idle:1';
-var NS_URN_REACH = NS_XMPP + 'reach:0';
-var NS_URN_MARKERS = NS_XMPP + 'chat-markers:0';
-var NS_URN_ATTENTION = NS_XMPP + 'attention:0';
-var NS_URN_HINTS = NS_XMPP + 'hints';
-var NS_RSM = NS_PROTOCOL + 'rsm';
-var NS_IPV6 = 'ipv6';
-var NS_XHTML = 'http://www.w3.org/1999/xhtml';
-var NS_XHTML_IM = NS_PROTOCOL + 'xhtml-im';
-var NS_CHATSTATES = NS_PROTOCOL + 'chatstates';
-var NS_HTTP_AUTH = NS_PROTOCOL + 'http-auth';
-var NS_ROSTERX = NS_PROTOCOL + 'rosterx';
-var NS_MOOD = NS_PROTOCOL + 'mood';
-var NS_ACTIVITY = NS_PROTOCOL + 'activity';
-var NS_TUNE = NS_PROTOCOL + 'tune';
-var NS_GEOLOC = NS_PROTOCOL + 'geoloc';
-var NS_NICK = NS_PROTOCOL + 'nick';
-var NS_NOTIFY = '+notify';
-var NS_CAPS = NS_PROTOCOL + 'caps';
-var NS_ATOM = 'http://www.w3.org/2005/Atom';
-
-var NS_STANZAS = NS_IETF_XMPP + 'stanzas';
-var NS_STREAMS = NS_IETF_XMPP + 'streams';
-
-var NS_TLS = NS_IETF_XMPP + 'tls';
-var NS_SASL = NS_IETF_XMPP + 'sasl';
-var NS_SESSION = NS_IETF_XMPP + 'session';
-var NS_BIND = NS_IETF_XMPP + 'bind';
-
-var NS_FEATURE_IQAUTH = NS_FEATURES + 'iq-auth';
-var NS_FEATURE_IQREGISTER = NS_FEATURES + 'iq-register';
-var NS_FEATURE_COMPRESS = NS_FEATURES + 'compress';
-
-var NS_COMPRESS = NS_PROTOCOL + 'compress';
-
-var NS_METRONOME_MAM_PURGE = 'http://metronome.im/protocol/mam-purge';
-
-// Available locales
-var LOCALES_AVAILABLE_ID = [];
-var LOCALES_AVAILABLE_NAMES = [];
-
-// XML lang
-var XML_LANG = null;
-
-// Jappix parameters
-var JAPPIX_STATIC = null;
-var JAPPIX_VERSION = null;
-var JAPPIX_MAX_FILE_SIZE = null;
-var JAPPIX_MAX_UPLOAD = null;
-
-// Jappix main configuration
-var SERVICE_NAME = null;
-var SERVICE_DESC = null;
-var OWNER_NAME = null;
-var OWNER_WEBSITE = null;
-var LEGAL = null;
-var JAPPIX_RESOURCE = null;
-var LOCK_HOST = null;
-var ANONYMOUS = null;
-var HTTP_AUTH = null;
-var REGISTRATION = null;
-var BOSH_PROXY = null;
-var MANAGER_LINK = null;
-var GROUPCHATS_JOIN = null;
-var GROUPCHATS_SUGGEST = null;
-var ENCRYPTION = null;
-var HTTPS_STORAGE = null;
-var HTTPS_FORCE = null;
-var COMPRESSION = null;
-var ADS_ENABLE = null;
-var GADS_CLIENT = null;
-var GADS_SLOT = null;
-var MULTI_FILES = null;
-var DEVELOPER = null;
-var REGISTER_API = null;
-
-// Jappix hosts configuration
-var HOST_MAIN = null;
-var HOST_MUC = null;
-var HOST_PUBSUB = null;
-var HOST_VJUD = null;
-var HOST_ANONYMOUS = null;
-var HOST_STUN = null;
-var HOST_TURN = null;
-var HOST_TURN_USERNAME = null;
-var HOST_TURN_PASSWORD = null;
-var HOST_BOSH = null;
-var HOST_BOSH_MAIN = null;
-var HOST_BOSH_MINI = null;
-var HOST_WEBSOCKET = null;
-var HOST_STATIC = null;
-var HOST_UPLOAD = null;
-
-// Anonymous mode
-var ANONYMOUS_ROOM = null;
-var ANONYMOUS_NICK = null;
-
-// Node parameters
-var JAPPIX_LOCATION = JappixSystem.location();
-var JAPPIX_MINI_CSS = null;
-var BOSH_SAME_ORIGIN = false;
-
-// XMPP error stanzas
-function STANZA_ERROR(code, type, cond) {
- if(window == this) {
- return new STANZA_ERROR(code, type, cond);
- }
-
- this.code = code;
- this.type = type;
- this.cond = cond;
-}
-
-var ERR_BAD_REQUEST =
- STANZA_ERROR('400', 'modify', 'bad-request');
-var ERR_CONFLICT =
- STANZA_ERROR('409', 'cancel', 'conflict');
-var ERR_FEATURE_NOT_IMPLEMENTED =
- STANZA_ERROR('501', 'cancel', 'feature-not-implemented');
-var ERR_FORBIDDEN =
- STANZA_ERROR('403', 'auth', 'forbidden');
-var ERR_GONE =
- STANZA_ERROR('302', 'modify', 'gone');
-var ERR_INTERNAL_SERVER_ERROR =
- STANZA_ERROR('500', 'wait', 'internal-server-error');
-var ERR_ITEM_NOT_FOUND =
- STANZA_ERROR('404', 'cancel', 'item-not-found');
-var ERR_JID_MALFORMED =
- STANZA_ERROR('400', 'modify', 'jid-malformed');
-var ERR_NOT_ACCEPTABLE =
- STANZA_ERROR('406', 'modify', 'not-acceptable');
-var ERR_NOT_ALLOWED =
- STANZA_ERROR('405', 'cancel', 'not-allowed');
-var ERR_NOT_AUTHORIZED =
- STANZA_ERROR('401', 'auth', 'not-authorized');
-var ERR_PAYMENT_REQUIRED =
- STANZA_ERROR('402', 'auth', 'payment-required');
-var ERR_RECIPIENT_UNAVAILABLE =
- STANZA_ERROR('404', 'wait', 'recipient-unavailable');
-var ERR_REDIRECT =
- STANZA_ERROR('302', 'modify', 'redirect');
-var ERR_REGISTRATION_REQUIRED =
- STANZA_ERROR('407', 'auth', 'registration-required');
-var ERR_REMOTE_SERVER_NOT_FOUND =
- STANZA_ERROR('404', 'cancel', 'remote-server-not-found');
-var ERR_REMOTE_SERVER_TIMEOUT =
- STANZA_ERROR('504', 'wait', 'remote-server-timeout');
-var ERR_RESOURCE_CONSTRAINT =
- STANZA_ERROR('500', 'wait', 'resource-constraint');
-var ERR_SERVICE_UNAVAILABLE =
- STANZA_ERROR('503', 'cancel', 'service-unavailable');
-var ERR_SUBSCRIPTION_REQUIRED =
- STANZA_ERROR('407', 'auth', 'subscription-required');
-var ERR_UNEXPECTED_REQUEST =
- STANZA_ERROR('400', 'wait', 'unexpected-request');
diff --git a/app/javascripts/correction.js b/app/javascripts/correction.js
deleted file mode 100644
index deea70ca..00000000
--- a/app/javascripts/correction.js
+++ /dev/null
@@ -1,509 +0,0 @@
-/*
-
-Jappix - An open social platform
-Implementation of XEP-0308: Last Message Correction
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Correction = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * @private
- * @param {string} xid
- * @return {boolean}
- */
- self._hasSupport = function(xid) {
-
- var support = false;
-
- try {
- if($('#' + hex_md5(xid) + '[data-correction="true"]').size()) {
- support = true;
- }
- } catch(e) {
- Console.error('Correction._hasSupport', e);
- } finally {
- return support;
- }
-
- };
-
-
- /**
- * @private
- * @param {string} xid
- * @return {string}
- */
- self._getLastID = function(xid) {
-
- var last_id = null;
-
- try {
- if(self._hasSupport(xid) === true) {
- // Check last message from ourselves
- last_id = $('#' + hex_md5(xid) + ' .content .one-line.user-message[data-mode="me"]:last').attr('data-id') || null;
- }
- } catch(e) {
- Console.error('Correction._getLastID', e);
- } finally {
- return last_id;
- }
-
- };
-
-
- /**
- * @private
- * @param {string} xid
- * @return {string}
- */
- self._getCurrentID = function(xid) {
-
- var current_id = null;
-
- try {
- if(self._hasSupport(xid) === true) {
- // Check the ID of the message being edited (if any)
- current_id = $('#' + hex_md5(xid) + ' .message-area').attr('data-correction-current') || null;
- }
- } catch(e) {
- Console.error('Correction._getCurrentID', e);
- } finally {
- return current_id;
- }
-
- };
-
-
- /**
- * @private
- * @param {string} xid
- * @return {object}
- */
- self._getLastMessage = function(xid) {
-
- var last_message_val = null;
- var last_message_sel = null;
-
- try {
- if(self._hasSupport(xid) === true) {
- // Check last message from ourselves
- last_message_sel = $('#' + hex_md5(xid) + ' .content .one-line.user-message[data-mode="me"]:last');
- last_message_val = last_message_sel.find('.message-content').text() || null;
-
- if(last_message_val === null) {
- last_message_sel = null;
- }
- }
- } catch(e) {
- Console.error('Correction._getLastMessage', e);
- } finally {
- return {
- 'value': last_message_val,
- 'selector': last_message_sel
- };
- }
-
- };
-
-
- /**
- * @private
- * @param {string} xid
- * @param {object} message_sel
- * @return {undefined}
- */
- self._bindInterface = function(xid, message_sel) {
-
- try {
- // Add message area elements
- var text_sel = $('#' + hex_md5(xid) + ' .text');
-
- text_sel.addClass('correction-active');
- text_sel.prepend(
- '<div class="correction-toolbox">' +
- '<span class="correction-editing">' + Common._e("Editing") + '</span>' +
- '<a class="correction-cancel" href="#">' + Common._e("Cancel") + '</a>' +
- '</div>'
- );
-
- // Add message correction marker
- message_sel.addClass('correction-active');
- message_sel.find('.correction-label').remove();
- message_sel.find('.correction-edit').hide();
-
- message_sel.append(
- '<span class="correction-label">' +
- Common._e("Being edited") +
- '</span>'
- );
-
- // Bind click events
- text_sel.find('.correction-cancel').click(function() {
- self.leave(xid);
- return false;
- });
- } catch(e) {
- Console.error('Correction._bindInterface', e);
- }
-
- };
-
-
- /**
- * @private
- * @param {string} xid
- * @param {object} message_sel
- * @return {undefined}
- */
- self._unbindInterface = function(xid, message_sel) {
-
- try {
- // Remove message area elements
- var text_sel = $('#' + hex_md5(xid) + ' .text');
- text_sel.removeClass('correction-active');
- text_sel.find('.correction-toolbox, .correction-label').remove();
-
- if(message_sel.size()) {
- message_sel.find('.correction-edit').css('display', '');
-
- // Remove message correction marker
- message_sel.removeClass('correction-active');
- message_sel.find('.correction-label').remove();
- }
- } catch(e) {
- Console.error('Correction._unbindInterface', e);
- }
-
- };
-
-
- /**
- * @private
- * @param {string} xid
- * @param {string} full_xid
- * @param {string} type
- * @param {string} message_id
- * @param {string} message_body
- * @return {string}
- */
- self._sendStanza = function(xid, full_xid, type, message_id, message_body) {
-
- var args = {
- 'id': null,
- 'xhtml': false,
- 'message': null
- };
-
- try {
- var hash = hex_md5(xid);
- var id = genID();
- args.id = id;
-
- // Initialize message stanza
- var message = new JSJaCMessage();
- args.message = message;
-
- message.setType(type);
- message.setTo(full_xid);
- message.setID(id);
-
- // Generates the correct message depending of the choosen style
- var generate_message = Message.generate(message, message_body, hash);
- args.xhtml = (generate_message === 'XHTML');
-
- // Receipt request
- var receipt_request = Receipts.request(hash);
-
- if(receipt_request) {
- message.appendNode('request', {'xmlns': NS_URN_RECEIPTS});
- }
-
- // Chatstate
- message.appendNode('active', {'xmlns': NS_CHATSTATES});
-
- if(message_id !== null) {
- message.appendNode('replace', {
- 'xmlns': NS_URN_CORRECT,
- 'id': message_id
- });
- }
-
- con.send(message, Errors.handleReply);
- } catch(e) {
- Console.error('Correction._sendStanza', e);
- } finally {
- return args;
- }
-
- };
-
-
- /**
- * Detects correction mode request (in input)
- * @public
- * @param {string} xid
- * @param {object} input_sel
- * @return {undefined}
- */
- self.detect = function(xid, input_sel) {
-
- try {
- // Other keys
- if(input_sel.val().match(/^\/correct/) && self.isIn(xid) === false) {
- // Enter correction mode?
- self.enter(xid);
- }
- } catch(e) {
- Console.error('Correction.detect', e);
- }
-
- };
-
-
- /**
- * Enter correction mode (for last message)
- * @public
- * @param {string} xid
- * @return {undefined}
- */
- self.enter = function(xid) {
-
- try {
- Console.debug('Correction.enter', 'Requested to enter the correction mode with: ' + xid);
-
- if(self._hasSupport(xid) === true && self.isIn(xid) === false) {
- var last_message = self._getLastMessage(xid);
-
- if(last_message.value && last_message.selector) {
- Console.info('Correction.enter', 'Valid last message found for correction mode with: ' + xid);
-
- var message_area_sel = $('#' + hex_md5(xid) + ' .message-area');
- message_area_sel.val(last_message.value);
-
- self._bindInterface(
- xid,
- last_message.selector
- );
-
- // Focus hack (to get cursor at the end of textarea)
- message_area_sel.oneTime(10, function() {
- message_area_sel[0].select();
- message_area_sel[0].selectionStart = message_area_sel[0].selectionEnd;
- });
- }
- }
- } catch(e) {
- Console.error('Correction.enter', e);
- }
-
- };
-
-
- /**
- * Leave correction mode
- * @public
- * @param {string} xid
- * @return {undefined}
- */
- self.leave = function(xid) {
-
- try {
- if(self.isIn(xid) === true) {
- var base_sel = $('#' + hex_md5(xid));
- var active_message_sel = base_sel.find('.content .one-line.user-message.correction-active');
-
- self._unbindInterface(xid, active_message_sel);
-
- var message_area_sel = base_sel.find('.message-area');
- message_area_sel.val('');
- message_area_sel.focus();
- }
- } catch(e) {
- Console.error('Correction.leave', e);
- }
-
- };
-
-
- /**
- * Send corrected message
- * @public
- * @param {string} xid
- * @param {string} type
- * @param {string} replacement
- * @return {undefined}
- */
- self.send = function(xid, type, replacement) {
-
- try {
- if(self._hasSupport(xid) === true) {
- if(self._getLastMessage(xid).value != replacement) {
- var own_xid = Common.getXID();
- var hash = hex_md5(xid);
- var replace_id = self._getLastID(xid);
-
- Console.info('Correction.send', 'Sending replacement message for: ' + xid + ' "' + replacement + '" with ID: ' + (replace_id || 'none'));
-
- // Send the stanza itself
- var full_xid = Presence.highestPriority(xid) || xid;
- var stanza_args = self._sendStanza(
- xid,
- full_xid,
- type,
- replace_id,
- replacement
- );
-
- // Update DOM (for chat only)
- if(type == 'chat') {
- // Filter the xHTML message (for us!)
- var replacement_formatted = replacement;
-
- if(stanza_args.xhtml) {
- replacement_formatted = Filter.xhtml(stanza_args.message.getNode());
- }
-
- // Remove old message
- old_message_sel = $('#' + hash + ' .content .one-line.user-message[data-mode="me"]').filter(function() {
- return ($(this).attr('data-id') + '') === (replace_id + '');
- }).filter(':last');
-
- var edit_count = old_message_sel.attr('data-edit-count') || 0;
- edit_count = isNaN(edit_count) ? 0 : parseInt(edit_count, 10);
-
- if(type == 'chat') {
- old_message_sel.remove();
- }
-
- // Display edited message
- Message.display(
- 'chat',
- own_xid,
- hash,
- Name.getBuddy(own_xid).htmlEnc(),
- replacement_formatted,
- DateUtils.getCompleteTime(),
- DateUtils.getTimeStamp(),
- 'user-message',
- !stanza_args.xhtml,
- '',
- 'me',
- stanza_args.id,
- undefined,
- undefined,
- true,
- (edit_count + 1)
- );
- }
- }
- }
- } catch(e) {
- Console.error('Correction.send', e);
- }
-
- };
-
-
- /**
- * Catches a replace message
- * @public
- * @param {object} message
- * @param {string} hash
- * @param {string} type
- * @return {object}
- */
- self.catch = function(message, hash, type) {
-
- var edit_results = {
- 'has_replace': false,
- 'is_edited': false,
- 'count': 0,
- 'next_count': 0
- };
-
- try {
- var replace_node = message.getChild('replace', NS_URN_CORRECT);
-
- if(replace_node) {
- edit_results.has_replace = true;
- var message_edit_id = $(replace_node).attr('id');
-
- if(typeof message_edit_id != 'undefined') {
- var message_edit_sel = $('#' + hash + ' .one-line.user-message').filter(function() {
- var this_sel = $(this);
- var is_valid_mode = true;
-
- if(type == 'chat') {
- is_valid_mode = true ? this_sel.attr('data-mode') == 'him' : false;
- }
-
- return is_valid_mode && ((this_sel.attr('data-id') + '') === (message_edit_id + ''));
- }).filter(':last');
-
- if(message_edit_sel.size()) {
- edit_results.count = message_edit_sel.attr('data-edit-count') || 0;
- edit_results.count = isNaN(edit_results.count) ? 0 : parseInt(edit_results.count, 10);
- edit_results.next_count = edit_results.count + 1;
- edit_results.is_edited = true;
-
- // Empty group?
- var message_edit_group_sel = message_edit_sel.parents('.one-group');
-
- if(message_edit_group_sel.find('.one-line').size() <= 1) {
- message_edit_group_sel.remove();
- } else {
- message_edit_sel.remove();
- }
- }
- }
- }
- } catch(e) {
- Console.error('Correction.catch', e);
- } finally {
- return edit_results;
- }
-
- };
-
-
- /**
- * Returns whether we are in correction mode or not
- * @public
- * @param {string} xid
- * @return {boolean}
- */
- self.isIn = function(xid) {
-
- var is_in = false;
-
- try {
- is_in = $('#' + hex_md5(xid) + ' .text').hasClass('correction-active');
- } catch(e) {
- Console.error('Correction.isIn', e);
- } finally {
- return is_in;
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
diff --git a/app/javascripts/dataform.js b/app/javascripts/dataform.js
deleted file mode 100644
index e8af85d2..00000000
--- a/app/javascripts/dataform.js
+++ /dev/null
@@ -1,1200 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the dataform JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Authors: Valérian Saliou, Maranda
-
-*/
-
-// Bundle
-var DataForm = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Gets the defined dataform elements
- * @public
- * @param {string} host
- * @param {string} type
- * @param {string} node
- * @param {string} action
- * @param {string} target
- * @return {boolean}
- */
- self.go = function(host, type, node, action, target) {
-
- try {
- // Clean the current session
- self.clean(target);
-
- // We tell the user that a search has been launched
- $('#' + target + ' .wait').show();
-
- // If we have enough data
- if(host && type) {
- // Generate a session ID
- var sessionID = Math.round(100000.5 + (((900000.49999) - (100000.5)) * Math.random()));
- var id = target + '-' + sessionID + '-' + genID();
- $('.' + target + '-results').attr('data-session', target + '-' + sessionID);
-
- // We request the service item
- var iq = new JSJaCIQ();
- iq.setID(id);
- iq.setTo(host);
- iq.setType('get');
-
- // MUC admin query
- if(type == 'muc') {
- iq.setQuery(NS_MUC_OWNER);
- con.send(iq, self.handleMUC);
- }
-
- // Browse query
- else if(type == 'browse') {
- var iqQuery = iq.setQuery(NS_DISCO_ITEMS);
-
- if(node) {
- iqQuery.setAttribute('node', node);
- }
-
- con.send(iq, self.handleBrowse);
- }
-
- // Command
- else if(type == 'command') {
- var items;
-
- if(node) {
- items = iq.appendNode('command', {'node': node, 'xmlns': NS_COMMANDS});
- }
-
- else {
- items = iq.setQuery(NS_DISCO_ITEMS);
- items.setAttribute('node', NS_COMMANDS);
- }
-
- if(action && node) {
- iq.setType('set');
- items.setAttribute('action', action);
- }
-
- con.send(iq, self.handleCommand);
- }
-
- // Search query
- else if(type == 'search') {
- iq.setQuery(NS_SEARCH);
- con.send(iq, self.handleSearch);
- }
-
- // Subscribe query
- else if(type == 'subscribe') {
- iq.setQuery(NS_REGISTER);
- con.send(iq, self.handleSubscribe);
- }
-
- // Join
- else if(type == 'join') {
- if(target == 'discovery') {
- Discovery.close();
- }
-
- Chat.checkCreate(host, 'groupchat');
- }
- }
- } catch(e) {
- Console.error('DataForm.go', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Sends a given dataform
- * @public
- * @param {string} type
- * @param {string} action
- * @param {string} x_type
- * @param {string} id
- * @param {string} xid
- * @param {string} node
- * @param {string} sessionid
- * @param {string} target
- * @return {boolean}
- */
- self.send = function(type, action, x_type, id, xid, node, sessionid, target) {
-
- try {
- // Path
- var pathID = '#' + target + ' .results[data-session="' + id + '"]';
-
- // New IQ
- var iq = new JSJaCIQ();
- iq.setTo(xid);
- iq.setType('set');
-
- // Set the correct query
- var query;
-
- if(type == 'subscribe') {
- iqQuery = iq.setQuery(NS_REGISTER);
- } else if(type == 'search') {
- iqQuery = iq.setQuery(NS_SEARCH);
- } else if(type == 'command') {
- iqQuery = iq.appendNode('command', {'xmlns': NS_COMMANDS, 'node': node, 'sessionid': sessionid, 'action': action});
- } else if(type == 'x') {
- iqQuery = iq.setQuery(NS_MUC_OWNER);
- }
-
- // Build the XML document
- if(action != 'cancel') {
- // No X node
- if(Common.exists('input.register-special') && (type == 'subscribe')) {
- $('input.register-special').each(function() {
- var iName = $(this).attr('name');
- var iValue = $(this).val();
-
- iqQuery.appendChild(iq.buildNode(iName, {'xmlns': NS_REGISTER}, iValue));
- });
- }
-
- // Can create the X node
- else {
- var iqX = iqQuery.appendChild(iq.buildNode('x', {'xmlns': NS_XDATA, 'type': x_type}));
-
- // Each input
- $(pathID + ' .oneresult input, ' + pathID + ' .oneresult textarea, ' + pathID + ' .oneresult select').each(function() {
- // Get the current input value
- var iVar = $(this).attr('name');
- var iType = $(this).attr('data-type');
- var iValue = $(this).val();
-
- // Build a new field node
- var field = iqX.appendChild(iq.buildNode('field', {'var': iVar, 'type': iType, 'xmlns': NS_XDATA}));
-
- // Boolean input?
- if(iType == 'boolean') {
- if($(this).filter(':checked').size()) {
- iValue = '1';
- } else {
- iValue = '0';
- }
- }
-
- // JID-multi input?
- if(iType == 'jid-multi') {
- // Values array
- var xid_arr = [iValue];
- var xid_check = [];
-
- // Try to split it
- if(iValue.indexOf(',') != -1) {
- xid_arr = iValue.split(',');
- }
-
- // Append each value to the XML document
- for(var i in xid_arr) {
- // Get the current value
- xid_current = $.trim(xid_arr[i]);
-
- // No current value?
- if(!xid_current) {
- continue;
- }
-
- // Add the current value
- if(!Utils.existArrayValue(xid_check, xid_current)) {
- xid_check.push(xid_current);
- field.appendChild(iq.buildNode('value', {'xmlns': NS_XDATA}, xid_current));
- }
- }
- }
-
- // List-multi selector?
- else if(iType == 'list-multi') {
- // Any value?
- if(iValue && iValue.length) {
- for(var j in iValue) {
- field.appendChild(iq.buildNode('value', {'xmlns': NS_XDATA}, iValue[j]));
- }
- }
- }
-
- // Other inputs?
- else {
- field.appendChild(iq.buildNode('value', {'xmlns': NS_XDATA}, iValue));
- }
- });
- }
- }
-
- // Clean the current session
- self.clean(target);
-
- // Show the waiting item
- $('#' + target + ' .wait').show();
-
- // Change the ID of the current discovered item
- var iqID = target + '-' + genID();
- $('#' + target + ' .' + target + '-results').attr('data-session', iqID);
- iq.setID(iqID);
-
- // Send the IQ
- if(type == 'subscribe') {
- con.send(iq, self.handleSubscribe);
- } else if(type == 'search') {
- con.send(iq, self.handleSearch);
- } else if(type == 'command') {
- con.send(iq, self.handleCommand);
- } else {
- con.send(iq);
- }
- } catch(e) {
- Console.error('DataForm.send', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Displays the good dataform buttons
- * @public
- * @param {string} type
- * @param {string} action
- * @param {string} id
- * @param {string} xid
- * @param {string} node
- * @param {string} sessionid
- * @param {string} target
- * @param {string} pathID
- * @return {undefined}
- */
- self.buttons = function(type, action, id, xid, node, sessionid, target, pathID) {
-
- try {
- // No need to use buttons?
- if(type == 'muc') {
- return;
- }
-
- // Override the "undefined" output
- if(!id)
- id = '';
- if(!xid)
- xid = '';
- if(!node)
- node = '';
- if(!sessionid)
- sessionid = '';
-
- // We generate the buttons code
- var buttonsCode = '<div class="oneresult ' + target + '-oneresult ' + target + '-formtools">';
-
- if(action == 'submit') {
- if((target == 'adhoc') && (type == 'command')) {
- buttonsCode += '<a href="#" class="submit" onclick="return DataForm.send(\'' + Utils.encodeOnclick(type) + '\', \'execute\', \'submit\', \'' + Utils.encodeOnclick(id) + '\', \'' + Utils.encodeOnclick(xid) + '\', \'' + Utils.encodeOnclick(node) + '\', \'' + Utils.encodeOnclick(sessionid) + '\', \'' + Utils.encodeOnclick(target) + '\');">' + Common._e("Submit") + '</a>';
-
- // When keyup on one text input
- $(pathID + ' input').keyup(function(e) {
- if(e.keyCode == 13) {
- self.send(type, 'execute', 'submit', id, xid, node, sessionid, target);
-
- return false;
- }
- });
- } else {
- buttonsCode += '<a href="#" class="submit" onclick="return DataForm.send(\'' + Utils.encodeOnclick(type) + '\', \'submit\', \'submit\', \'' + Utils.encodeOnclick(id) + '\', \'' + Utils.encodeOnclick(xid) + '\', \'' + Utils.encodeOnclick(node) + '\', \'' + Utils.encodeOnclick(sessionid) + '\', \'' + Utils.encodeOnclick(target) + '\');">' + Common._e("Submit") + '</a>';
-
- // When keyup on one text input
- $(pathID + ' input').keyup(function(e) {
- if(e.keyCode == 13) {
- self.send(type, 'submit', 'submit', id, xid, node, sessionid, target);
-
- return false;
- }
- });
- }
- }
-
- if((action == 'submit') && (type != 'subscribe') && (type != 'search')) {
- buttonsCode += '<a href="#" class="submit" onclick="return DataForm.send(\'' + Utils.encodeOnclick(type) + '\', \'cancel\', \'cancel\', \'' + Utils.encodeOnclick(id) + '\', \'' + Utils.encodeOnclick(xid) + '\', \'' + Utils.encodeOnclick(node) + '\', \'' + Utils.encodeOnclick(sessionid) + '\', \'' + Utils.encodeOnclick(target) + '\');">' + Common._e("Cancel") + '</a>';
- }
-
- if(((action == 'back') || (type == 'subscribe') || (type == 'search')) && (target == 'discovery')) {
- buttonsCode += '<a href="#" class="back" onclick="return Discovery.start();">' + Common._e("Close") + '</a>';
- }
-
- if((action == 'back') && ((target == 'welcome') || (target == 'directory'))) {
- buttonsCode += '<a href="#" class="back" onclick="return DataForm.go(HOST_VJUD, \'search\', \'\', \'\', \'' + target + '\');">' + Common._e("Previous") + '</a>';
- }
-
- if((action == 'back') && (target == 'adhoc')) {
- buttonsCode += '<a href="#" class="back" onclick="return DataForm.go(\'' + Utils.encodeOnclick(xid) + '\', \'command\', \'\', \'\', \'adhoc\');">' + Common._e("Previous") + '</a>';
- }
-
- buttonsCode += '</div>';
-
- // We display the buttons code
- $(pathID).append(buttonsCode);
-
- // If no submit link, lock the form
- if(!Common.exists(pathID + ' a.submit')) {
- $(pathID + ' input, ' + pathID + ' textarea').attr('readonly', true);
- }
- } catch(e) {
- Console.error('DataForm.buttons', e);
- }
-
- };
-
-
- /**
- * Handles the MUC dataform
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleMUC = function(iq) {
-
- try {
- Errors.handleReply(iq);
- self.handleContent(iq, 'muc');
- } catch(e) {
- Console.error('DataForm.handleMUC', e);
- }
-
- };
-
-
- /**
- * Handles the browse dataform
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleBrowse = function(iq) {
-
- try {
- Errors.handleReply(iq);
- self.handleContent(iq, 'browse');
- } catch(e) {
- Console.error('DataForm.handleBrowse', e);
- }
-
- };
-
-
- /**
- * Handles the command dataform
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleCommand = function(iq) {
-
- try {
- Errors.handleReply(iq);
- self.handleContent(iq, 'command');
- } catch(e) {
- Console.error('DataForm.handleCommand', e);
- }
-
- };
-
-
- /**
- * Handles the subscribe dataform
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleSubscribe = function(iq) {
-
- try {
- Errors.handleReply(iq);
- self.handleContent(iq, 'subscribe');
- } catch(e) {
- Console.error('DataForm.handleSubscribe', e);
- }
-
- };
-
-
- /**
- * Handles the search dataform
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleSearch = function(iq) {
-
- try {
- Errors.handleReply(iq);
- self.handleContent(iq, 'search');
- } catch(e) {
- Console.error('DataForm.handleSearch', e);
- }
-
- };
-
-
- /**
- * Handles the dataform content
- * @public
- * @param {object} iq
- * @param {string} type
- * @return {undefined}
- */
- self.handleContent = function(iq, type) {
-
- try {
- // Get the ID
- var sID = iq.getID();
-
- // Get the target
- var splitted = sID.split('-');
- var target = splitted[0];
- var sessionID = target + '-' + splitted[1];
- var from = Common.fullXID(Common.getStanzaFrom(iq));
- var pathID = '#' + target + ' .results[data-session="' + sessionID + '"]';
-
- // If an error occured
- if(!iq || (iq.getType() != 'result')) {
- self.noResult(pathID);
- }
-
- // If we got something okay
- else {
- var handleXML = iq.getNode();
-
- if(type == 'browse') {
- if($(handleXML).find('item').attr('jid')) {
- // Get the query node
- var queryNode = $(handleXML).find('query').attr('node');
-
- $(handleXML).find('item').each(function() {
- // We parse the received xml
- var itemHost = $(this).attr('jid');
- var itemNode = $(this).attr('node');
- var itemName = $(this).attr('name');
- var itemHash = hex_md5(itemHost);
-
- // Node
- if(itemNode) {
- $(pathID).append(
- '<div class="oneresult ' + target + '-oneresult" onclick="return DataForm.go(\'' + Utils.encodeOnclick(itemHost) + '\', \'browse\', \'' + Utils.encodeOnclick(itemNode) + '\', \'\', \'' + Utils.encodeOnclick(target) + '\');">' +
- '<div class="one-name">' + itemNode.htmlEnc() + '</div>' +
- '</div>'
- );
- }
-
- // Item
- else if(queryNode && itemName) {
- $(pathID).append(
- '<div class="oneresult ' + target + '-oneresult">' +
- '<div class="one-name">' + itemName.htmlEnc() + '</div>' +
- '</div>'
- );
- }
-
- // Item with children
- else {
- // We display the waiting element
- $(pathID + ' .disco-wait .disco-category-title').after(
- '<div class="oneresult ' + target + '-oneresult ' + itemHash + '">' +
- '<div class="one-icon loading talk-images"></div>' +
- '<div class="one-host">' + itemHost + '</div>' +
- '<div class="one-type">' + Common._e("Requesting this service...") + '</div>' +
- '</div>'
- );
-
- // We display the category
- $('#' + target + ' .disco-wait').show();
-
- // We ask the server what's the service type
- self.getType(itemHost, itemNode, sessionID);
- }
- });
- }
-
- // Else, there are no items for this query
- else
- self.noResult(pathID);
- }
-
- else if((type == 'muc') || (type == 'search') || (type == 'subscribe') || ((type == 'command') && $(handleXML).find('command').attr('xmlns'))) {
- // Get some values
- var xCommand = $(handleXML).find('command');
- var bNode = xCommand.attr('node');
- var bSession = xCommand.attr('sessionid');
- var bStatus = xCommand.attr('status');
- var xRegister = $(handleXML).find('query[xmlns="' + NS_REGISTER + '"]').text();
- var xElement = $(handleXML).find('x');
-
- // Search done
- if((xElement.attr('type') == 'result') && (type == 'search')) {
- var bPath = pathID;
-
- // Display the result
- $(handleXML).find('item').each(function() {
- // Have some "flexibility" for what regards field names, it would be better to return the whole original DF
- // layout, but on a large amount of result which have many fields, there's a very high chance the browser can
- // choke on old systems or new ones even.
-
- // Search for useful fields, return first result. This is rather hacky, but jQuery is horrible when it comes to
- // matching st. using patterns. (TODO: Improve and return the full DF layout without choking the browser)
- var bName;
- var bCountry;
- var doneName, doneCountry;
-
- $.each($(this).find('field'), function(i, item) {
- var $item = $(item);
-
- if($(item).attr('var').match(/^(fn|name|[^n][^i][^c][^k]name)$/gi) && doneName !== true) {
- bName = $item.children('value:first').text();
- doneName = true;
- } else if($(item).attr('var').match(/^(ctry|country.*)$/gi) && doneCountry !== true) {
- bCountry = $item.children('value:first').text();
- doneCountry = true;
- }
- });
-
- var bXID = $(this).find('field[var="jid"] value:first').text();
- var dName = bName;
-
- // Override "undefined" value
- if(!bXID)
- bXID = '';
- if(!bName)
- bName = Common._e("Unknown name");
- if(!bCountry)
- bCountry = Common._e("Unknown country");
-
- // User hash
- var bHash = hex_md5(bXID);
-
- // HTML code
- var bHTML = '<div class="oneresult ' + target + '-oneresult ' + bHash + '">' +
- '<div class="avatar-container">' +
- '<img class="avatar" src="' + './images/others/default-avatar.png' + '" alt="" />' +
- '</div>' +
- '<div class="one-fn">' + Common.htmlentities(bName) + '</div>' +
- '<div class="one-ctry">' + Common.htmlentities(bCountry) + '</div>' +
- '<div class="one-jid">' + bXID + '</div>' +
- '<div class="buttons-container">';
-
- // The buddy is not in our buddy list?
- if(!Common.exists('#roster .buddy[data-xid="' + escape(bXID) + '"]')) {
- bHTML += '<a href="#" class="one-add one-vjud one-button talk-images">' + Common._e("Add") + '</a>';
- }
-
- // Chat button, if not in welcome/directory mode
- if(target == 'discovery') {
- bHTML += '<a href="#" class="one-chat one-vjud one-button talk-images">' + Common._e("Chat") + '</a>';
- }
-
- // Profile button, if not in discovery mode
- else {
- bHTML += '<a href="#" class="one-profile one-vjud one-button talk-images">' + Common._e("Profile") + '</a>';
- }
-
- // Close the HTML element
- bHTML += '</div></div>';
-
- $(bPath).append(bHTML);
-
- // Click events
- $(bPath + ' .' + bHash + ' a').click(function() {
- // Buddy add
- if($(this).is('.one-add')) {
- $(this).hide();
-
- Roster.addThisContact(bXID, dName);
- }
-
- // Buddy chat
- if($(this).is('.one-chat')) {
- if(target == 'discovery')
- Discovery.close();
-
- Chat.checkCreate(bXID, 'chat', '', '', dName);
- }
-
- // Buddy profile
- if($(this).is('.one-profile')) {
- UserInfos.open(bXID);
- }
-
- return false;
- });
-
- // Get the user's avatar
- if(bXID) {
- Avatar.get(bXID, 'cache', 'true', 'forget');
- }
- });
-
- // No result?
- if(!$(handleXML).find('item').size())
- self.noResult(pathID);
-
- // Previous button
- self.buttons(type, 'back', sessionID, from, bNode, bSession, target, pathID);
- }
-
- // Command to complete
- else if(xElement.attr('xmlns') || ((type == 'subscribe') && xRegister)) {
- // We display the elements
- self.fill(handleXML, sessionID);
-
- // We display the buttons
- if(bStatus != 'completed') {
- self.buttons(type, 'submit', sessionID, from, bNode, bSession, target, pathID);
- } else {
- self.buttons(type, 'back', sessionID, from, bNode, bSession, target, pathID);
- }
- }
-
- // Command completed or subscription done
- else if(((bStatus == 'completed') && (type == 'command')) || (!xRegister && (type == 'subscribe'))) {
- // Display the good text
- var cNote = $(xCommand).find('note');
-
- // Any note?
- if(cNote.size()) {
- cNote.each(function() {
- $(pathID).append(
- '<div class="onetitle ' + target + '-oneresult">' + $(this).text().htmlEnc() + '</div>'
- );
- });
- }
-
- // Default text
- else {
- $(pathID).append('<div class="oneinstructions ' + target + '-oneresult">' + Common._e("Your form has been sent.") + '</div>');
- }
-
- // Display the back button
- self.buttons(type, 'back', sessionID, from, '', '', target, pathID);
-
- // Add the gateway to our roster if subscribed
- if(type == 'subscribe') {
- Roster.addThisContact(from);
- }
- }
-
- // Command canceled
- else if((bStatus == 'canceled') && (type == 'command')) {
- if(target == 'discovery') {
- Discovery.start();
- } else if(target == 'adhoc') {
- dataForm(from, 'command', '', '', 'adhoc');
- }
- }
-
- // No items for this query
- else
- self.noResult(pathID);
- }
-
- else if(type == 'command') {
- if($(handleXML).find('item').attr('jid')) {
- // We display the elements
- $(handleXML).find('item').each(function() {
- // We parse the received xml
- var itemHost = $(this).attr('jid');
- var itemNode = $(this).attr('node');
- var itemName = $(this).attr('name');
- var itemHash = hex_md5(itemHost);
-
- // We display the waiting element
- $(pathID).prepend(
- '<div class="oneresult ' + target + '-oneresult ' + itemHash + '" onclick="return DataForm.go(\'' + Utils.encodeOnclick(itemHost) + '\', \'command\', \'' + Utils.encodeOnclick(itemNode) + '\', \'execute\', \'' + Utils.encodeOnclick(target) + '\');">' +
- '<div class="one-name">' + itemName + '</div>' +
- '<div class="one-next">»</div>' +
- '</div>'
- );
- });
- }
-
- // Else, there are no items for this query
- else {
- self.noResult(pathID);
- }
- }
- }
-
- // Focus on the first input
- $(document).oneTime(10, function() {
- $(pathID + ' input:visible:first').focus();
- });
-
- // Hide the wait icon
- $('#' + target + ' .wait').hide();
- } catch(e) {
- Console.error('DataForm.handleContent', e);
- }
-
- };
-
-
- /**
- * Fills the dataform elements
- * @public
- * @param {type} xml
- * @param {type} id
- * @return {boolean}
- */
- self.fill = function(xml, id) {
-
- /* REF: http://xmpp.org/extensions/xep-0004.html */
-
- try {
- // Initialize new vars
- var target = id.split('-')[0];
- var pathID = '#' + target + ' .results[data-session="' + id + '"]';
- var selector, is_dataform;
-
- // Is it a dataform?
- if($(xml).find('x[xmlns="' + NS_XDATA + '"]').size()) {
- is_dataform = true;
- } else {
- is_dataform = false;
- }
-
- // Determines the good selector to use
- if(is_dataform) {
- selector = $(xml).find('x[xmlns="' + NS_XDATA + '"]');
- } else {
- selector = $(xml);
- }
-
- // Form title
- selector.find('title').each(function() {
- $(pathID).append(
- '<div class="onetitle ' + target + '-oneresult">' + $(this).text().htmlEnc() + '</div>'
- );
- });
-
- // Form instructions
- selector.find('instructions').each(function() {
- $(pathID).append(
- '<div class="oneinstructions ' + target + '-oneresult">' + $(this).text().htmlEnc() + '</div>'
- );
- });
-
- // Register?
- if(!is_dataform) {
- // Items to detect
- var reg_names = [Common._e("Nickname"), Common._e("Name"), Common._e("Password"), Common._e("E-mail")];
- var reg_ids = ['username', 'name', 'password', 'email'];
-
- // Append these inputs
- $.each(reg_names, function(a) {
- selector.find(reg_ids[a]).each(function() {
- $(pathID).append(
- '<div class="oneresult ' + target + '-oneresult">' +
- '<label>' + reg_names[a] + '</label>' +
- '<input name="' + reg_ids[a] + '" type="text" class="register-special dataform-i" />' +
- '</div>'
- );
- });
- });
-
- return false;
- }
-
- // Dataform?
- selector.find('field').each(function() {
- // We parse the received xml
- var type = $(this).attr('type');
- var label = $(this).attr('label');
- var field = $(this).attr('var');
- var value = $(this).find('value:first').text();
- var required = '';
-
- // No value?
- if(!field) {
- return;
- }
-
- // Required input?
- if($(this).find('required').size()) {
- required = ' required=""';
- }
-
- // Compatibility fix
- if(!label) {
- label = field;
- }
-
- if(!type) {
- type = '';
- }
-
- // Generate some values
- var input;
- var hideThis = '';
-
- // Fixed field
- if(type == 'fixed') {
- $(pathID).append('<div class="oneinstructions">' + value.htmlEnc() + '</div>');
- } else {
- // Hidden field
- if(type == 'hidden') {
- hideThis = ' style="display: none;"';
- input = '<input name="' + Common.encodeQuotes(field) + '" data-type="' + Common.encodeQuotes(type) + '" type="hidden" class="dataform-i" value="' + Common.encodeQuotes(value) + '" ' + required + ' />';
- }
-
- // Boolean field
- else if(type == 'boolean') {
- var checked;
-
- if(value == '1')
- checked = 'checked';
- else
- checked = '';
-
- input = '<input name="' + Common.encodeQuotes(field) + '" type="checkbox" data-type="' + Common.encodeQuotes(type) + '" class="dataform-i df-checkbox" ' + checked + required + ' />';
- }
-
- // List-single/list-multi field
- else if((type == 'list-single') || (type == 'list-multi')) {
- var multiple = '';
-
- // Multiple options?
- if(type == 'list-multi') {
- multiple = ' multiple=""';
- }
-
- // Append the select field
- input = '<select name="' + Common.encodeQuotes(field) + '" data-type="' + Common.encodeQuotes(type) + '" class="dataform-i"' + required + multiple + '>';
- var selected;
-
- // Append the available options
- $(this).find('option').each(function() {
- var nLabel = $(this).attr('label');
- var nValue = $(this).find('value').text();
-
- // No label?
- if(!nLabel) {
- nLabel = nValue;
- }
-
- // If this is the selected value
- if(nValue == value) {
- selected = 'selected';
- } else {
- selected = '';
- }
-
- input += '<option ' + selected + ' value="' + Common.encodeQuotes(nValue) + '">' + nLabel.htmlEnc() + '</option>';
- });
-
- input += '</select>';
- }
-
- // Text-multi field
- else if(type == 'text-multi') {
- input = '<textarea rows="8" cols="60" data-type="' + Common.encodeQuotes(type) + '" name="' + Common.encodeQuotes(field) + '" class="dataform-i"' + required + '>' + value.htmlEnc() + '</textarea>';
- }
-
- // JID-multi field
- else if(type == 'jid-multi') {
- // Put the XID into an array
- var xid_arr = [];
-
- $(this).find('value').each(function() {
- var cValue = $(this).text();
-
- if(!Utils.existArrayValue(xid_arr, cValue)) {
- xid_arr.push(cValue);
- }
- });
-
- // Sort the array
- xid_arr.sort();
-
- // Create the input
- var xid_value = '';
-
- if(xid_arr.length) {
- for(var i in xid_arr) {
- // Any pre-value
- if(xid_value) {
- xid_value += ', ';
- }
-
- // Add the current XID
- xid_value += xid_arr[i];
- }
- }
-
- input = '<input name="' + Common.encodeQuotes(field) + '" data-type="' + Common.encodeQuotes(type) + '" type="text" class="dataform-i" value="' + Common.encodeQuotes(xid_value) + '" placeholder="jack@jappix.com, jones@jappix.com"' + required + ' />';
- }
-
- // Other stuffs that are similar
- else {
- // Text-single field
- var iType = 'text';
-
- // Text-private field
- if(type == 'text-private') {
- iType = 'password';
- }
-
- // JID-single field
- else if(type == 'jid-single') {
- iType = 'email';
- }
-
- input = '<input name="' + Common.encodeQuotes(field) + '" data-type="' + Common.encodeQuotes(type) + '" type="' + iType + '" class="dataform-i" value="' + Common.encodeQuotes(value) + '"' + required + ' />';
- }
-
- // Append the HTML markup for this field
- $(pathID).append(
- '<div class="oneresult ' + target + '-oneresult"' + hideThis + '>' +
- '<label>' + label.htmlEnc() + '</label>' +
- input +
- '</div>'
- );
- }
- });
- } catch(e) {
- Console.error('DataForm.fill', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Gets the dataform type
- * @public
- * @param {string} host
- * @param {string} node
- * @param {string} id
- * @return {undefined}
- */
- self.getType = function(host, node, id) {
-
- try {
- var iq = new JSJaCIQ();
- iq.setID(id + '-' + genID());
- iq.setTo(host);
- iq.setType('get');
-
- var iqQuery = iq.setQuery(NS_DISCO_INFO);
-
- if(node) {
- iqQuery.setAttribute('node', node);
- }
-
- con.send(iq, self.handleThisBrowse);
- } catch(e) {
- Console.error('DataForm.getType', e);
- }
-
- };
-
-
- /**
- * Handles the browse stanza
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleThisBrowse = function(iq) {
-
- /* REF: http://xmpp.org/registrar/disco-categories.html */
-
- try {
- var id = iq.getID();
- var splitted = id.split('-');
- var target = splitted[0];
- var sessionID = target + '-' + splitted[1];
- var from = Common.fullXID(Common.getStanzaFrom(iq));
- var hash = hex_md5(from);
- var handleXML = iq.getQuery();
- var pathID = '#' + target + ' .results[data-session="' + sessionID + '"]';
-
- // We first remove the waiting element
- $(pathID + ' .disco-wait .' + hash).remove();
-
- if($(handleXML).find('identity').attr('type')) {
- var category = $(handleXML).find('identity').attr('category');
- var type = $(handleXML).find('identity').attr('type');
- var named = $(handleXML).find('identity').attr('name');
-
- if(named) {
- gName = named;
- } else {
- gName = '';
- }
-
- var one, two, three, four, five;
-
- // Get the features that this entity supports
- var findFeature = $(handleXML).find('feature');
-
- for(var i in findFeature) {
- var current = findFeature.eq(i).attr('var');
-
- switch(current) {
- case NS_SEARCH:
- one = 1;
- break;
-
- case NS_MUC:
- two = 1;
- break;
-
- case NS_REGISTER:
- three = 1;
- break;
-
- case NS_COMMANDS:
- four = 1;
- break;
-
- case NS_DISCO_ITEMS:
- five = 1;
- break;
-
- default:
- break;
- }
- }
-
- var buttons = Array(one, two, three, four, five);
-
- // We define the toolbox links depending on the supported features
- var tools = '';
- var aTools = Array('search', 'join', 'subscribe', 'command', 'browse');
- var bTools = Array(Common._e("Search"), Common._e("Join"), Common._e("Subscribe"), Common._e("Command"), Common._e("Browse"));
-
- for(var b in buttons) {
- if(buttons[b]) {
- tools += '<a href="#" class="one-button ' + aTools[b] + ' talk-images" onclick="return DataForm.go(\'' + Utils.encodeOnclick(from) + '\', \'' + Utils.encodeOnclick(aTools[b]) + '\', \'\', \'\', \'' + Utils.encodeOnclick(target) + '\');" title="' + Utils.encodeOnclick(bTools[b]) + '"></a>';
- }
- }
-
- // As defined in the ref, we detect the type of each category to put an icon
- switch(category) {
- case 'account':
- case 'auth':
- case 'automation':
- case 'client':
- case 'collaboration':
- case 'component':
- case 'conference':
- case 'directory':
- case 'gateway':
- case 'headline':
- case 'hierarchy':
- case 'proxy':
- case 'pubsub':
- case 'server':
- case 'store':
- break;
-
- default:
- category = 'others';
- }
-
- // We display the item we found
- $(pathID + ' .disco-' + category + ' .disco-category-title').after(
- '<div class="oneresult ' + target + '-oneresult ' + hash + '">' +
- '<div class="one-icon ' + category + ' talk-images"></div>' +
- '<div class="one-host">' + from + '</div>' +
- '<div class="one-type">' + gName + '</div>' +
- '<div class="one-actions">' + tools + '</div>' +
- '</div>'
- );
-
- // We display the category
- $(pathID + ' .disco-' + category).show();
- }
-
- else {
- $(pathID + ' .disco-others .disco-category-title').after(
- '<div class="oneresult ' + target + '-oneresult">' +
- '<div class="one-icon down talk-images"></div>' +
- '<div class="one-host">' + from + '</div>' +
- '<div class="one-type">' + Common._e("Service offline or broken") + '</div>' +
- '</div>'
- );
-
- // We display the category
- $(pathID + ' .disco-others').show();
- }
-
- // We hide the waiting stuffs if there's no remaining loading items
- if(!$(pathID + ' .disco-wait .' + target + '-oneresult').size()) {
- $(pathID + ' .disco-wait, #' + target + ' .wait').hide();
- }
- } catch(e) {
- Console.error('DataForm.handleThisBrowse', e);
- }
-
- };
-
-
- /**
- * Cleans the current data-form popup
- * @public
- * @param {string} target
- * @return {undefined}
- */
- self.clean = function(target) {
-
- try {
- if(target == 'discovery') {
- Discovery.clean();
- } else {
- $('#' + target + ' div.results').empty();
- }
- } catch(e) {
- Console.error('DataForm.clean', e);
- }
-
- };
-
-
- /**
- * Displays the no result indicator
- * @public
- * @param {string} path
- * @return {undefined}
- */
- self.noResult = function(path) {
-
- try {
- $(path).prepend('<p class="no-results">' + Common._e("Sorry, but the entity didn't return any result!") + '</p>');
- } catch(e) {
- Console.error('DataForm.noResult', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
diff --git a/app/javascripts/datastore.js b/app/javascripts/datastore.js
deleted file mode 100644
index 1f4b64f1..00000000
--- a/app/javascripts/datastore.js
+++ /dev/null
@@ -1,506 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the temporary/persistent data store functions
-
--------------------------------------------------
-
-License: dual-licensed under AGPL and MPLv2
-Authors: Valérian Saliou, Maranda
-
-*/
-
-// Bundle
-var DataStore = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Variables */
- self._db_emulated = {};
- self._persistent_emulated = {};
-
-
- /**
- * Common: storage adapter
- * @public
- * @param {object} storage_native
- * @param {object} storage_emulated
- * @return {undefined}
- */
- self._adapter = function(storage_native, storage_emulated) {
-
- try {
- var legacy = !storage_native;
-
- this.key = function(key) {
- if(legacy) {
- if(key >= this.length) {
- return null;
- }
-
- var c = 0;
-
- for(var name in storage_emulated) {
- if(c++ == key) return name;
- }
-
- return null;
- }
-
- return storage_native.key(key);
- };
-
- this.getItem = function(key) {
- if(legacy) {
- if(storage_emulated[key] !== undefined) {
- return storage_emulated[key];
- }
-
- return null;
- } else {
- return storage_native.getItem(key);
- }
- };
-
- this.setItem = function(key, data) {
- if(legacy) {
- if(!(key in storage_emulated)) {
- this.length++;
- }
-
- storage_emulated[key] = (data + '');
- } else {
- storage_native.setItem(key, data);
- this.length = storage_native.length;
- }
- };
-
- this.removeItem = function(key) {
- if(legacy) {
- if(key in storage_emulated) {
- this.length--;
- delete storage_emulated[key];
- }
- } else {
- storage_native.removeItem(key);
- this.length = storage_native.length;
- }
- };
-
- this.clear = function() {
- if(legacy) {
- this.length = 0;
- storage_emulated = {};
- } else {
- storage_native.clear();
- this.length = storage_native.length;
- }
- };
-
- this.length = legacy ? 0 : storage_native.length;
- } catch(e) {
- Console.error('DataStore._adapter', e);
- }
-
- };
-
-
- /**
- * Temporary: sessionStorage class alias for direct access
- */
- self.storageDB = new self._adapter(
- (window.sessionStorage ? sessionStorage : null),
- self._db_emulated
- );
-
-
- /**
- * Persistent: localStorage class alias for direct access
- */
- self.storagePersistent = new self._adapter(
- (window.localStorage ? localStorage : null),
- self._persistent_emulated
- );
-
-
- /**
- * Temporary: returns whether it is available or not
- * @public
- * @return {boolean}
- */
- self.hasDB = function() {
-
- var has_db = false;
-
- try {
- self.storageDB.setItem('hasdb_check', 'ok');
- self.storageDB.removeItem('hasdb_check');
-
- has_db = true;
- } catch(e) {
- Console.error('DataStore.hasDB', e);
- } finally {
- return has_db;
- }
-
- };
-
-
- /**
- * Temporary: used to read a database entry
- * @public
- * @param {string} dbID
- * @param {string} type
- * @param {string} id
- * @return {object}
- */
- self.getDB = function(dbID, type, id) {
-
- try {
- try {
- return self.storageDB.getItem(dbID + '_' + type + '_' + id);
- }
-
- catch(e) {
- Console.error('Error while getting a temporary database entry (' + dbID + ' -> ' + type + ' -> ' + id + ')', e);
- }
-
- return null;
- } catch(e) {
- Console.error('DataStore.getDB', e);
- }
-
- };
-
-
- /**
- * Temporary: used to update a database entry
- * @public
- * @param {string} dbID
- * @param {string} type
- * @param {string} id
- * @param {type} value
- * @return {boolean}
- */
- self.setDB = function(dbID, type, id, value) {
-
- try {
- try {
- self.storageDB.setItem(dbID + '_' + type + '_' + id, value);
-
- return true;
- }
-
- catch(e) {
- Console.error('Error while writing a temporary database entry (' + dbID + ' -> ' + type + ' -> ' + id + ')', e);
- }
-
- return false;
- } catch(e) {
- Console.error('DataStore.setDB', e);
- }
-
- };
-
-
- /**
- * Temporary: used to remove a database entry
- * @public
- * @param {string} dbID
- * @param {string} type
- * @param {string} id
- * @return {undefined}
- */
- self.removeDB = function(dbID, type, id) {
-
- try {
- try {
- self.storageDB.removeItem(dbID + '_' + type + '_' + id);
-
- return true;
- }
-
- catch(e) {
- Console.error('Error while removing a temporary database entry (' + dbID + ' -> ' + type + ' -> ' + id + ')', e);
- }
-
- return false;
- } catch(e) {
- Console.error('DataStore.removeDB', e);
- }
-
- };
-
-
- /**
- * Temporary: used to check a database entry exists
- * @public
- * @param {string} dbID
- * @param {string} type
- * @param {string} id
- * @return {boolean}
- */
- self.existDB = function(dbID, type, id) {
-
- try {
- return self.getDB(dbID, type, id) !== null;
- } catch(e) {
- Console.error('DataStore.existDB', e);
- }
-
- };
-
-
- /**
- * Temporary: used to clear all the database
- * @public
- * @return {boolean}
- */
- self.resetDB = function() {
-
- try {
- try {
- self.storageDB.clear();
-
- Console.info('Temporary database cleared.');
-
- return true;
- }
-
- catch(e) {
- Console.error('Error while clearing temporary database', e);
-
- return false;
- }
- } catch(e) {
- Console.error('DataStore.resetDB', e);
- }
-
- };
-
-
- /**
- * Persistent: returns whether it is available or not
- * @public
- * @return {boolean}
- */
- self.hasPersistent = function() {
-
- var has_persistent = false;
-
- try {
- // Try to write something
- self.storagePersistent.setItem('haspersistent_check', 'ok');
- self.storagePersistent.removeItem('haspersistent_check');
-
- has_persistent = true;
- } catch(e) {
- Console.error('DataStore.hasPersistent', e);
- } finally {
- return has_persistent;
- }
-
- };
-
-
- /**
- * Persistent: used to read a database entry
- * @public
- * @param {string} dbID
- * @param {string} type
- * @param {string} id
- * @return {object}
- */
- self.getPersistent = function(dbID, type, id) {
-
- try {
- try {
- return self.storagePersistent.getItem(dbID + '_' + type + '_' + id);
- }
-
- catch(e) {
- Console.error('Error while getting a persistent database entry (' + dbID + ' -> ' + type + ' -> ' + id + ')', e);
-
- return null;
- }
- } catch(e) {
- Console.error('DataStore.getPersistent', e);
- }
-
- };
-
-
- /**
- * Persistent: used to update a database entry
- * @public
- * @param {string} dbID
- * @param {string} type
- * @param {string} id
- * @param {string} value
- * @return {boolean}
- */
- self.setPersistent = function(dbID, type, id, value) {
-
- try {
- try {
- self.storagePersistent.setItem(dbID + '_' + type + '_' + id, value);
-
- return true;
- }
-
- // Database might be full
- catch(e) {
- Console.warn('Retrying: could not write a persistent database entry (' + dbID + ' -> ' + type + ' -> ' + id + ')', e);
-
- // Flush it!
- self.flushPersistent();
-
- // Set the item again
- try {
- self.storagePersistent.setItem(dbID + ' -> ' + type + '_' + id, value);
-
- return true;
- }
-
- // New error!
- catch(_e) {
- Console.error('Aborted: error while writing a persistent database entry (' + dbID + ' -> ' + type + ' -> ' + id + ')', _e);
- }
- }
-
- return false;
- } catch(e) {
- Console.error('DataStore.setPersistent', e);
- }
-
- };
-
-
- /**
- * Persistent: used to remove a database entry
- * @public
- * @param {string} dbID
- * @param {string} type
- * @param {string} id
- * @return {boolean}
- */
- self.removePersistent = function(dbID, type, id) {
-
- try {
- try {
- self.storagePersistent.removeItem(dbID + '_' + type + '_' + id);
-
- return true;
- }
-
- catch(e) {
- Console.error('Error while removing a persistent database entry (' + dbID + ' -> ' + type + ' -> ' + id + ')', e);
- }
-
- return false;
- } catch(e) {
- Console.error('DataStore.removePersistent', e);
- }
-
- };
-
-
- /**
- * Persistent: used to check a database entry exists
- * @public
- * @param {string} dbID
- * @param {string} type
- * @param {string} id
- * @return {boolean}
- */
- self.existPersistent = function(dbID, type, id) {
-
- try {
- return self.getPersistent(dbID, type, id) !== null;
- } catch(e) {
- Console.error('DataStore.existPersistent', e);
- }
-
- };
-
-
- /**
- * Persistent: used to clear all the database
- * @public
- * @param {type} name
- * @return {boolean}
- */
- self.resetPersistent = function() {
-
- try {
- try {
- self.storagePersistent.clear();
-
- Console.info('Persistent database cleared.');
-
- return true;
- }
-
- catch(e) {
- Console.error('Error while clearing persistent database', e);
- }
-
- return false;
- } catch(e) {
- Console.error('DataStore.resetPersistent', e);
- }
-
- };
-
-
- /**
- * Persistent: used to flush the database
- * @public
- * @param {type} name
- * @return {boolean}
- */
- self.flushPersistent = function() {
-
- try {
- try {
- // Get the stored session entry
- var session = self.getPersistent('global', 'session', 1);
-
- // Reset the persistent database
- self.resetPersistent();
-
- // Restaure the stored session entry
- if(session) {
- self.setPersistent('global', 'session', 1, session);
- }
-
- Console.info('Persistent database flushed.');
-
- return true;
- }
-
- catch(e) {
- Console.error('Error while flushing persistent database', e);
- }
-
- return false;
- } catch(e) {
- Console.error('DataStore.flushPersistent', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
-
-var JappixDataStore = DataStore; \ No newline at end of file
diff --git a/app/javascripts/date.js b/app/javascripts/date.js
deleted file mode 100644
index 977b677d..00000000
--- a/app/javascripts/date.js
+++ /dev/null
@@ -1,454 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the date related JS scripts for Jappix
-
--------------------------------------------------
-
-License: dual-licensed under AGPL and MPLv2
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var DateUtils = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Variables */
- self.last_activity = 0;
- self.presence_last_activity = 0;
-
-
- /**
- * Gets a stamp from a date
- * @public
- * @param {Date} date
- * @return {number}
- */
- self.extractStamp = function(date) {
-
- try {
- return Math.round(date.getTime() / 1000);
- } catch(e) {
- Console.error('DateUtils.extractStamp', e);
- }
-
- };
-
-
- /**
- * Gets the time from a date
- * @public
- * @param {Date} date
- * @return {string}
- */
- self.extractTime = function(date) {
-
- try {
- return date.toLocaleTimeString();
- } catch(e) {
- Console.error('DateUtils.extractTime', e);
- }
-
- };
-
-
- /**
- * Gets the actual date stamp
- * @public
- * @return {number}
- */
- self.getTimeStamp = function() {
-
- try {
- return self.extractStamp(new Date());
- } catch(e) {
- Console.error('DateUtils.getTimeStamp', e);
- }
-
- };
-
-
- /**
- * Gets the last user activity in seconds
- * @public
- * @return {number}
- */
- self.getLastActivity = function() {
-
- try {
- // Last activity not yet initialized?
- if(self.last_activity === 0) {
- return 0;
- }
-
- return self.getTimeStamp() - self.last_activity;
- } catch(e) {
- Console.error('DateUtils.getLastActivity', e);
- }
-
- };
-
-
- /**
- * Gets the last user activity as a date
- * @public
- * @return {string}
- */
- self.getLastActivityDate = function() {
-
- try {
- var last_activity = self.last_activity || self.getTimeStamp();
-
- var last_date = new Date();
- last_date.setTime(last_activity * 1000);
-
- return self.getDatetime(last_date, 'utc');
- } catch(e) {
- Console.error('DateUtils.getLastActivityDate', e);
- }
-
- };
-
-
- /**
- * Gets the last user available presence in seconds
- * @public
- * @return {number}
- */
- self.getPresenceLast = function() {
-
- try {
- // Last presence stamp not yet initialized?
- if(self.presence_last_activity === 0) {
- return 0;
- }
-
- return self.getTimeStamp() - self.presence_last_activity;
- } catch(e) {
- Console.error('DateUtils.getPresenceLast', e);
- }
-
- };
-
-
- /**
- * Generates a normalized datetime
- * @public
- * @param {Date} date
- * @param {string} location
- * @return {string}
- */
- self.getDatetime = function(date, location) {
-
- /* FROM : http://trac.jwchat.org/jsjac/browser/branches/jsjac_1.0/jsextras.js?rev=221 */
-
- var year, month, day, hours, minutes, seconds;
- var date_string = null;
-
- try {
- if(location == 'utc') {
- // UTC date
- year = date.getUTCFullYear();
- month = date.getUTCMonth();
- day = date.getUTCDate();
- hours = date.getUTCHours();
- minutes = date.getUTCMinutes();
- seconds = date.getUTCSeconds();
- } else {
- // Local date
- year = date.getFullYear();
- month = date.getMonth();
- day = date.getDate();
- hours = date.getHours();
- minutes = date.getMinutes();
- seconds = date.getSeconds();
- }
-
- // Generates the date string
- date_string = year + '-';
- date_string += Common.padZero(month + 1) + '-';
- date_string += Common.padZero(day) + 'T';
- date_string += Common.padZero(hours) + ':';
- date_string += Common.padZero(minutes) + ':';
- date_string += Common.padZero(seconds) + 'Z';
-
- // Returns the date string
- return date_string;
- } catch(e) {
- Console.error('DateUtils.getDatetime', e);
- }
-
- };
-
-
- /**
- * Generates the time for XMPP
- * @public
- * @param {string} location
- * @return {string}
- */
- self.getXMPPTime = function(location) {
-
- try {
- return self.getDatetime(
- (new Date()),
- location
- );
- } catch(e) {
- Console.error('DateUtils.getXMPPTime', e);
- }
-
- };
-
-
- /**
- * Generates then human time
- * @public
- * @return {string}
- */
- self.getCompleteTime = function() {
-
- try {
- var init = new Date();
-
- var time = Common.padZero(init.getHours()) + ':';
- time += Common.padZero(init.getMinutes()) + ':';
- time += Common.padZero(init.getSeconds());
-
- return time;
- } catch(e) {
- Console.error('DateUtils.getCompleteTime', e);
- }
-
- };
-
-
- /**
- * Gets the TZO of a date
- * @public
- * @return {string}
- */
- self.getTZO = function() {
-
- try {
- // Get the date
- var date = new Date();
- var offset = date.getTimezoneOffset();
-
- // Default vars
- var sign = '';
- var hours = 0;
- var minutes = 0;
-
- // Process a neutral offset
- if(offset < 0) {
- offset = offset * -1;
- sign = '+';
- }
-
- // Get the values
- var n_date = new Date(offset * 60 * 1000);
- hours = n_date.getHours() - 1;
- minutes = n_date.getMinutes();
-
- // Process the TZO
- tzo = sign + Common.padZero(hours) + ':' + Common.padZero(minutes);
-
- // Return the processed value
- return tzo;
- } catch(e) {
- Console.error('DateUtils.getTZO', e);
- }
-
- };
-
-
- /**
- * Returns a date representing the difference of time between 2 timestamps
- * @public
- * @param {string} now_stamp
- * @param {string} past_stamp
- * @return {Date}
- */
- self.difference = function(now_stamp, past_stamp) {
-
- try {
- return (new Date()).clearTime().addSeconds(
- past_stamp > 0 ? now_stamp - past_stamp : 0
- );
- } catch(e) {
- Console.error('DateUtils.difference', e);
- }
-
- };
-
-
- /**
- * Parses a XMPP date (yyyy-mm-dd, hh-mm-ss) into an human-readable one
- * @public
- * @param {string} to_parse
- * @return {string}
- */
- self.parse = function(to_parse) {
-
- try {
- var date = Date.jab2date(to_parse);
- var parsed = date.toLocaleDateString() + ' (' + date.toLocaleTimeString() + ')';
-
- return parsed;
- } catch(e) {
- Console.error('DateUtils.parse', e);
- }
-
- };
-
-
- /**
- * Parses a XMPP date (yyyy-mm-dd) into an human-readable one
- * @public
- * @param {string} to_parse
- * @return {string}
- */
- self.parseDay = function(to_parse) {
-
- try {
- var date = Date.jab2date(to_parse);
- var parsed = date.toLocaleDateString();
-
- return parsed;
- } catch(e) {
- Console.error('DateUtils.parseDay', e);
- }
-
- };
-
-
- /**
- * Parses a XMPP date (hh-mm-ss) into an human-readable one
- * @public
- * @param {string} to_parse
- * @return {string}
- */
- self.parseTime = function(to_parse) {
-
- try {
- var date = Date.jab2date(to_parse);
- var parsed = date.toLocaleTimeString();
-
- return parsed;
- } catch(e) {
- Console.error('DateUtils.parseTime', e);
- }
-
- };
-
-
- /**
- * Parses a XMPP date stamp into a relative one
- * @public
- * @param {string} to_parse
- * @return {string}
- */
- self.relative = function(to_parse) {
-
- try {
- // Get the current date
- var current_date = Date.jab2date(self.getXMPPTime('utc'));
- var current_day = current_date.getDate();
- var current_stamp = current_date.getTime();
-
- // Parse the given date
- var old_date = Date.jab2date(to_parse);
- var old_day = old_date.getDate();
- var old_stamp = old_date.getTime();
- var old_time = old_date.toLocaleTimeString();
-
- // Get the day number between the two dates
- var days = Math.round((current_stamp - old_stamp) / 86400000);
-
- // Invalid date?
- if(isNaN(old_stamp) || isNaN(days)) {
- return self.getCompleteTime();
- }
-
- // Is it today?
- if(current_day == old_day) {
- return old_time;
- }
-
- // It is yesterday?
- if(days <= 1) {
- return Common._e("Yesterday") + ' - ' + old_time;
- }
-
- // Is it less than a week ago?
- if(days <= 7) {
- return Common.printf(Common._e("%s days ago"), days) + ' - ' + old_time;
- }
-
- // Another longer period
- return old_date.toLocaleDateString() + ' - ' + old_time;
- } catch(e) {
- Console.error('DateUtils.relative', e);
- }
-
- };
-
-
- /**
- * Reads a message delay
- * @public
- * @param {string} node
- * @param {boolean} return_date
- * @return {string|Date}
- */
- self.readMessageDelay = function(node, return_date) {
-
- try {
- // Initialize
- var delay, d_delay;
-
- // Read the delay
- d_delay = jQuery(node).find('delay[xmlns="' + NS_URN_DELAY + '"]:first').attr('stamp');
-
- // Get delay
- if(d_delay) {
- // New delay (valid XEP)
- delay = d_delay;
- } else {
- // Old delay (obsolete XEP!)
- var x_delay = jQuery(node).find('x[xmlns="' + NS_DELAY + '"]:first').attr('stamp');
-
- if(x_delay) {
- delay = x_delay.replace(/^(\w{4})(\w{2})(\w{2})T(\w{2}):(\w{2}):(\w{2})Z?(\S+)?/, '$1-$2-$3T$4:$5:$6Z$7');
- }
- }
-
- // Return a date object?
- if(return_date === true && delay) {
- return Date.jab2date(delay);
- }
-
- return delay;
- } catch(e) {
- Console.error('DateUtils.readMessageDelay', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
-
-var JappixDateUtils = DateUtils; \ No newline at end of file
diff --git a/app/javascripts/datejs.js b/app/javascripts/datejs.js
deleted file mode 100644
index 77f49864..00000000
--- a/app/javascripts/datejs.js
+++ /dev/null
@@ -1,104 +0,0 @@
-/**
- * Version: 1.0 Alpha-1
- * Build Date: 13-Nov-2007
- * Copyright (c) 2006-2007, Coolite Inc. (http://www.coolite.com/). All rights reserved.
- * License: Licensed under The MIT License. See license.txt and http://www.datejs.com/license/.
- * Website: http://www.datejs.com/ or http://www.coolite.com/datejs/
- */
-Date.CultureInfo={name:"en-US",englishName:"English (United States)",nativeName:"English (United States)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"mdy",formatPatterns:{shortDate:"M/d/yyyy",longDate:"dddd, MMMM dd, yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, MMMM dd, yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\+|after|from)/i,subtract:/^(\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\.?m?\.?|p\.?m?\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\s*(\+|\-)\s*\d\d\d\d?)|gmt)/i,ordinalSuffix:/^\s*(st|nd|rd|th)/i,timeContext:/^\s*(\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}};
-Date.getMonthNumberFromName=function(name){var n=Date.CultureInfo.monthNames,m=Date.CultureInfo.abbreviatedMonthNames,s=name.toLowerCase();for(var i=0;i<n.length;i++){if(n[i].toLowerCase()==s||m[i].toLowerCase()==s){return i;}}
-return-1;};Date.getDayNumberFromName=function(name){var n=Date.CultureInfo.dayNames,m=Date.CultureInfo.abbreviatedDayNames,o=Date.CultureInfo.shortestDayNames,s=name.toLowerCase();for(var i=0;i<n.length;i++){if(n[i].toLowerCase()==s||m[i].toLowerCase()==s){return i;}}
-return-1;};Date.isLeapYear=function(year){return(((year%4===0)&&(year%100!==0))||(year%400===0));};Date.getDaysInMonth=function(year,month){return[31,(Date.isLeapYear(year)?29:28),31,30,31,30,31,31,30,31,30,31][month];};Date.getTimezoneOffset=function(s,dst){return(dst||false)?Date.CultureInfo.abbreviatedTimeZoneDST[s.toUpperCase()]:Date.CultureInfo.abbreviatedTimeZoneStandard[s.toUpperCase()];};Date.getTimezoneAbbreviation=function(offset,dst){var n=(dst||false)?Date.CultureInfo.abbreviatedTimeZoneDST:Date.CultureInfo.abbreviatedTimeZoneStandard,p;for(p in n){if(n[p]===offset){return p;}}
-return null;};Date.prototype.clone=function(){return new Date(this.getTime());};Date.prototype.compareTo=function(date){if(isNaN(this)){throw new Error(this);}
-if(date instanceof Date&&!isNaN(date)){return(this>date)?1:(this<date)?-1:0;}else{throw new TypeError(date);}};Date.prototype.equals=function(date){return(this.compareTo(date)===0);};Date.prototype.between=function(start,end){var t=this.getTime();return t>=start.getTime()&&t<=end.getTime();};Date.prototype.addMilliseconds=function(value){this.setMilliseconds(this.getMilliseconds()+value);return this;};Date.prototype.addSeconds=function(value){return this.addMilliseconds(value*1000);};Date.prototype.addMinutes=function(value){return this.addMilliseconds(value*60000);};Date.prototype.addHours=function(value){return this.addMilliseconds(value*3600000);};Date.prototype.addDays=function(value){return this.addMilliseconds(value*86400000);};Date.prototype.addWeeks=function(value){return this.addMilliseconds(value*604800000);};Date.prototype.addMonths=function(value){var n=this.getDate();this.setDate(1);this.setMonth(this.getMonth()+value);this.setDate(Math.min(n,this.getDaysInMonth()));return this;};Date.prototype.addYears=function(value){return this.addMonths(value*12);};Date.prototype.add=function(config){if(typeof config=="number"){this._orient=config;return this;}
-var x=config;if(x.millisecond||x.milliseconds){this.addMilliseconds(x.millisecond||x.milliseconds);}
-if(x.second||x.seconds){this.addSeconds(x.second||x.seconds);}
-if(x.minute||x.minutes){this.addMinutes(x.minute||x.minutes);}
-if(x.hour||x.hours){this.addHours(x.hour||x.hours);}
-if(x.month||x.months){this.addMonths(x.month||x.months);}
-if(x.year||x.years){this.addYears(x.year||x.years);}
-if(x.day||x.days){this.addDays(x.day||x.days);}
-return this;};Date._validate=function(value,min,max,name){if(typeof value!="number"){throw new TypeError(value+" is not a Number.");}else if(value<min||value>max){throw new RangeError(value+" is not a valid value for "+name+".");}
-return true;};Date.validateMillisecond=function(n){return Date._validate(n,0,999,"milliseconds");};Date.validateSecond=function(n){return Date._validate(n,0,59,"seconds");};Date.validateMinute=function(n){return Date._validate(n,0,59,"minutes");};Date.validateHour=function(n){return Date._validate(n,0,23,"hours");};Date.validateDay=function(n,year,month){return Date._validate(n,1,Date.getDaysInMonth(year,month),"days");};Date.validateMonth=function(n){return Date._validate(n,0,11,"months");};Date.validateYear=function(n){return Date._validate(n,1,9999,"seconds");};Date.prototype.set=function(config){var x=config;if(!x.millisecond&&x.millisecond!==0){x.millisecond=-1;}
-if(!x.second&&x.second!==0){x.second=-1;}
-if(!x.minute&&x.minute!==0){x.minute=-1;}
-if(!x.hour&&x.hour!==0){x.hour=-1;}
-if(!x.day&&x.day!==0){x.day=-1;}
-if(!x.month&&x.month!==0){x.month=-1;}
-if(!x.year&&x.year!==0){x.year=-1;}
-if(x.millisecond!=-1&&Date.validateMillisecond(x.millisecond)){this.addMilliseconds(x.millisecond-this.getMilliseconds());}
-if(x.second!=-1&&Date.validateSecond(x.second)){this.addSeconds(x.second-this.getSeconds());}
-if(x.minute!=-1&&Date.validateMinute(x.minute)){this.addMinutes(x.minute-this.getMinutes());}
-if(x.hour!=-1&&Date.validateHour(x.hour)){this.addHours(x.hour-this.getHours());}
-if(x.month!==-1&&Date.validateMonth(x.month)){this.addMonths(x.month-this.getMonth());}
-if(x.year!=-1&&Date.validateYear(x.year)){this.addYears(x.year-this.getFullYear());}
-if(x.day!=-1&&Date.validateDay(x.day,this.getFullYear(),this.getMonth())){this.addDays(x.day-this.getDate());}
-if(x.timezone){this.setTimezone(x.timezone);}
-if(x.timezoneOffset){this.setTimezoneOffset(x.timezoneOffset);}
-return this;};Date.prototype.clearTime=function(){this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this;};Date.prototype.isLeapYear=function(){var y=this.getFullYear();return(((y%4===0)&&(y%100!==0))||(y%400===0));};Date.prototype.isWeekday=function(){return!(this.is().sat()||this.is().sun());};Date.prototype.getDaysInMonth=function(){return Date.getDaysInMonth(this.getFullYear(),this.getMonth());};Date.prototype.moveToFirstDayOfMonth=function(){return this.set({day:1});};Date.prototype.moveToLastDayOfMonth=function(){return this.set({day:this.getDaysInMonth()});};Date.prototype.moveToDayOfWeek=function(day,orient){var diff=(day-this.getDay()+7*(orient||+1))%7;return this.addDays((diff===0)?diff+=7*(orient||+1):diff);};Date.prototype.moveToMonth=function(month,orient){var diff=(month-this.getMonth()+12*(orient||+1))%12;return this.addMonths((diff===0)?diff+=12*(orient||+1):diff);};Date.prototype.getDayOfYear=function(){return Math.floor((this-new Date(this.getFullYear(),0,1))/86400000);};Date.prototype.getWeekOfYear=function(firstDayOfWeek){var y=this.getFullYear(),m=this.getMonth(),d=this.getDate();var dow=firstDayOfWeek||Date.CultureInfo.firstDayOfWeek;var offset=7+1-new Date(y,0,1).getDay();if(offset==8){offset=1;}
-var daynum=((Date.UTC(y,m,d,0,0,0)-Date.UTC(y,0,1,0,0,0))/86400000)+1;var w=Math.floor((daynum-offset+7)/7);if(w===dow){y--;var prevOffset=7+1-new Date(y,0,1).getDay();if(prevOffset==2||prevOffset==8){w=53;}else{w=52;}}
-return w;};Date.prototype.isDST=function(){console.log('isDST');return this.toString().match(/(E|C|M|P)(S|D)T/)[2]=="D";};Date.prototype.getTimezone=function(){return Date.getTimezoneAbbreviation(this.getUTCOffset,this.isDST());};Date.prototype.setTimezoneOffset=function(s){var here=this.getTimezoneOffset(),there=Number(s)*-6/10;this.addMinutes(there-here);return this;};Date.prototype.setTimezone=function(s){return this.setTimezoneOffset(Date.getTimezoneOffset(s));};Date.prototype.getUTCOffset=function(){var n=this.getTimezoneOffset()*-10/6,r;if(n<0){r=(n-10000).toString();return r[0]+r.substr(2);}else{r=(n+10000).toString();return"+"+r.substr(1);}};Date.prototype.getDayName=function(abbrev){return abbrev?Date.CultureInfo.abbreviatedDayNames[this.getDay()]:Date.CultureInfo.dayNames[this.getDay()];};Date.prototype.getMonthName=function(abbrev){return abbrev?Date.CultureInfo.abbreviatedMonthNames[this.getMonth()]:Date.CultureInfo.monthNames[this.getMonth()];};Date.prototype._toString=Date.prototype.toString;Date.prototype.toString=function(format){var self=this;var p=function p(s){return(s.toString().length==1)?"0"+s:s;};return format?format.replace(/dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?/g,function(format){switch(format){case"hh":return p(self.getHours()<13?self.getHours():(self.getHours()-12));case"h":return self.getHours()<13?self.getHours():(self.getHours()-12);case"HH":return p(self.getHours());case"H":return self.getHours();case"mm":return p(self.getMinutes());case"m":return self.getMinutes();case"ss":return p(self.getSeconds());case"s":return self.getSeconds();case"yyyy":return self.getFullYear();case"yy":return self.getFullYear().toString().substring(2,4);case"dddd":return self.getDayName();case"ddd":return self.getDayName(true);case"dd":return p(self.getDate());case"d":return self.getDate().toString();case"MMMM":return self.getMonthName();case"MMM":return self.getMonthName(true);case"MM":return p((self.getMonth()+1));case"M":return self.getMonth()+1;case"t":return self.getHours()<12?Date.CultureInfo.amDesignator.substring(0,1):Date.CultureInfo.pmDesignator.substring(0,1);case"tt":return self.getHours()<12?Date.CultureInfo.amDesignator:Date.CultureInfo.pmDesignator;case"zzz":case"zz":case"z":return"";}}):this._toString();};
-Date.now=function(){return new Date();};Date.today=function(){return Date.now().clearTime();};Date.prototype._orient=+1;Date.prototype.next=function(){this._orient=+1;return this;};Date.prototype.last=Date.prototype.prev=Date.prototype.previous=function(){this._orient=-1;return this;};Date.prototype._is=false;Date.prototype.is=function(){this._is=true;return this;};Number.prototype._dateElement="day";Number.prototype.fromNow=function(){var c={};c[this._dateElement]=this;return Date.now().add(c);};Number.prototype.ago=function(){var c={};c[this._dateElement]=this*-1;return Date.now().add(c);};(function(){var $D=Date.prototype,$N=Number.prototype;var dx=("sunday monday tuesday wednesday thursday friday saturday").split(/\s/),mx=("january february march april may june july august september october november december").split(/\s/),px=("Millisecond Second Minute Hour Day Week Month Year").split(/\s/),de;var df=function(n){return function(){if(this._is){this._is=false;return this.getDay()==n;}
-return this.moveToDayOfWeek(n,this._orient);};};for(var i=0;i<dx.length;i++){$D[dx[i]]=$D[dx[i].substring(0,3)]=df(i);}
-var mf=function(n){return function(){if(this._is){this._is=false;return this.getMonth()===n;}
-return this.moveToMonth(n,this._orient);};};for(var j=0;j<mx.length;j++){$D[mx[j]]=$D[mx[j].substring(0,3)]=mf(j);}
-var ef=function(j){return function(){if(j.substring(j.length-1)!="s"){j+="s";}
-return this["add"+j](this._orient);};};var nf=function(n){return function(){this._dateElement=n;return this;};};for(var k=0;k<px.length;k++){de=px[k].toLowerCase();$D[de]=$D[de+"s"]=ef(px[k]);$N[de]=$N[de+"s"]=nf(de);}}());Date.prototype.toJSONString=function(){return this.toString("yyyy-MM-ddThh:mm:ssZ");};Date.prototype.toShortDateString=function(){return this.toString(Date.CultureInfo.formatPatterns.shortDatePattern);};Date.prototype.toLongDateString=function(){return this.toString(Date.CultureInfo.formatPatterns.longDatePattern);};Date.prototype.toShortTimeString=function(){return this.toString(Date.CultureInfo.formatPatterns.shortTimePattern);};Date.prototype.toLongTimeString=function(){return this.toString(Date.CultureInfo.formatPatterns.longTimePattern);};Date.prototype.getOrdinal=function(){switch(this.getDate()){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th";}};
-(function(){Date.Parsing={Exception:function(s){this.message="Parse error at '"+s.substring(0,10)+" ...'";}};var $P=Date.Parsing;var _=$P.Operators={rtoken:function(r){return function(s){var mx=s.match(r);if(mx){return([mx[0],s.substring(mx[0].length)]);}else{throw new $P.Exception(s);}};},token:function(s){return function(s){return _.rtoken(new RegExp("^\s*"+s+"\s*"))(s);};},stoken:function(s){return _.rtoken(new RegExp("^"+s));},until:function(p){return function(s){var qx=[],rx=null;while(s.length){try{rx=p.call(this,s);}catch(e){qx.push(rx[0]);s=rx[1];continue;}
-break;}
-return[qx,s];};},many:function(p){return function(s){var rx=[],r=null;while(s.length){try{r=p.call(this,s);}catch(e){return[rx,s];}
-rx.push(r[0]);s=r[1];}
-return[rx,s];};},optional:function(p){return function(s){var r=null;try{r=p.call(this,s);}catch(e){return[null,s];}
-return[r[0],r[1]];};},not:function(p){return function(s){try{p.call(this,s);}catch(e){return[null,s];}
-throw new $P.Exception(s);};},ignore:function(p){return p?function(s){var r=null;r=p.call(this,s);return[null,r[1]];}:null;},product:function(){var px=arguments[0],qx=Array.prototype.slice.call(arguments,1),rx=[];for(var i=0;i<px.length;i++){rx.push(_.each(px[i],qx));}
-return rx;},cache:function(rule){var cache={},r=null;return function(s){try{r=cache[s]=(cache[s]||rule.call(this,s));}catch(e){r=cache[s]=e;}
-if(r instanceof $P.Exception){throw r;}else{return r;}};},any:function(){var px=arguments;return function(s){var r=null;for(var i=0;i<px.length;i++){if(px[i]==null){continue;}
-try{r=(px[i].call(this,s));}catch(e){r=null;}
-if(r){return r;}}
-throw new $P.Exception(s);};},each:function(){var px=arguments;return function(s){var rx=[],r=null;for(var i=0;i<px.length;i++){if(px[i]==null){continue;}
-try{r=(px[i].call(this,s));}catch(e){throw new $P.Exception(s);}
-rx.push(r[0]);s=r[1];}
-return[rx,s];};},all:function(){var px=arguments,_=_;return _.each(_.optional(px));},sequence:function(px,d,c){d=d||_.rtoken(/^\s*/);c=c||null;if(px.length==1){return px[0];}
-return function(s){var r=null,q=null;var rx=[];for(var i=0;i<px.length;i++){try{r=px[i].call(this,s);}catch(e){break;}
-rx.push(r[0]);try{q=d.call(this,r[1]);}catch(ex){q=null;break;}
-s=q[1];}
-if(!r){throw new $P.Exception(s);}
-if(q){throw new $P.Exception(q[1]);}
-if(c){try{r=c.call(this,r[1]);}catch(ey){throw new $P.Exception(r[1]);}}
-return[rx,(r?r[1]:s)];};},between:function(d1,p,d2){d2=d2||d1;var _fn=_.each(_.ignore(d1),p,_.ignore(d2));return function(s){var rx=_fn.call(this,s);return[[rx[0][0],r[0][2]],rx[1]];};},list:function(p,d,c){d=d||_.rtoken(/^\s*/);c=c||null;return(p instanceof Array?_.each(_.product(p.slice(0,-1),_.ignore(d)),p.slice(-1),_.ignore(c)):_.each(_.many(_.each(p,_.ignore(d))),px,_.ignore(c)));},set:function(px,d,c){d=d||_.rtoken(/^\s*/);c=c||null;return function(s){var r=null,p=null,q=null,rx=null,best=[[],s],last=false;for(var i=0;i<px.length;i++){q=null;p=null;r=null;last=(px.length==1);try{r=px[i].call(this,s);}catch(e){continue;}
-rx=[[r[0]],r[1]];if(r[1].length>0&&!last){try{q=d.call(this,r[1]);}catch(ex){last=true;}}else{last=true;}
-if(!last&&q[1].length===0){last=true;}
-if(!last){var qx=[];for(var j=0;j<px.length;j++){if(i!=j){qx.push(px[j]);}}
-p=_.set(qx,d).call(this,q[1]);if(p[0].length>0){rx[0]=rx[0].concat(p[0]);rx[1]=p[1];}}
-if(rx[1].length<best[1].length){best=rx;}
-if(best[1].length===0){break;}}
-if(best[0].length===0){return best;}
-if(c){try{q=c.call(this,best[1]);}catch(ey){throw new $P.Exception(best[1]);}
-best[1]=q[1];}
-return best;};},forward:function(gr,fname){return function(s){return gr[fname].call(this,s);};},replace:function(rule,repl){return function(s){var r=rule.call(this,s);return[repl,r[1]];};},process:function(rule,fn){return function(s){var r=rule.call(this,s);return[fn.call(this,r[0]),r[1]];};},min:function(min,rule){return function(s){var rx=rule.call(this,s);if(rx[0].length<min){throw new $P.Exception(s);}
-return rx;};}};var _generator=function(op){return function(){var args=null,rx=[];if(arguments.length>1){args=Array.prototype.slice.call(arguments);}else if(arguments[0]instanceof Array){args=arguments[0];}
-if(args){for(var i=0,px=args.shift();i<px.length;i++){args.unshift(px[i]);rx.push(op.apply(null,args));args.shift();return rx;}}else{return op.apply(null,arguments);}};};var gx="optional not ignore cache".split(/\s/);for(var i=0;i<gx.length;i++){_[gx[i]]=_generator(_[gx[i]]);}
-var _vector=function(op){return function(){if(arguments[0]instanceof Array){return op.apply(null,arguments[0]);}else{return op.apply(null,arguments);}};};var vx="each any all".split(/\s/);for(var j=0;j<vx.length;j++){_[vx[j]]=_vector(_[vx[j]]);}}());(function(){var flattenAndCompact=function(ax){var rx=[];for(var i=0;i<ax.length;i++){if(ax[i]instanceof Array){rx=rx.concat(flattenAndCompact(ax[i]));}else{if(ax[i]){rx.push(ax[i]);}}}
-return rx;};Date.Grammar={};Date.Translator={hour:function(s){return function(){this.hour=Number(s);};},minute:function(s){return function(){this.minute=Number(s);};},second:function(s){return function(){this.second=Number(s);};},meridian:function(s){return function(){this.meridian=s.slice(0,1).toLowerCase();};},timezone:function(s){return function(){var n=s.replace(/[^\d\+\-]/g,"");if(n.length){this.timezoneOffset=Number(n);}else{this.timezone=s.toLowerCase();}};},day:function(x){var s=x[0];return function(){this.day=Number(s.match(/\d+/)[0]);};},month:function(s){return function(){this.month=((s.length==3)?Date.getMonthNumberFromName(s):(Number(s)-1));};},year:function(s){return function(){var n=Number(s);this.year=((s.length>2)?n:(n+(((n+2000)<Date.CultureInfo.twoDigitYearMax)?2000:1900)));};},rday:function(s){return function(){switch(s){case"yesterday":this.days=-1;break;case"tomorrow":this.days=1;break;case"today":this.days=0;break;case"now":this.days=0;this.now=true;break;}};},finishExact:function(x){x=(x instanceof Array)?x:[x];var now=new Date();this.year=now.getFullYear();this.month=now.getMonth();this.day=1;this.hour=0;this.minute=0;this.second=0;for(var i=0;i<x.length;i++){if(x[i]){x[i].call(this);}}
-this.hour=(this.meridian=="p"&&this.hour<13)?this.hour+12:this.hour;if(this.day>Date.getDaysInMonth(this.year,this.month)){throw new RangeError(this.day+" is not a valid value for days.");}
-var r=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second);if(this.timezone){r.set({timezone:this.timezone});}else if(this.timezoneOffset){r.set({timezoneOffset:this.timezoneOffset});}
-return r;},finish:function(x){x=(x instanceof Array)?flattenAndCompact(x):[x];if(x.length===0){return null;}
-for(var i=0;i<x.length;i++){if(typeof x[i]=="function"){x[i].call(this);}}
-if(this.now){return new Date();}
-var today=Date.today();var method=null;var expression=!!(this.days!=null||this.orient||this.operator);if(expression){var gap,mod,orient;orient=((this.orient=="past"||this.operator=="subtract")?-1:1);if(this.weekday){this.unit="day";gap=(Date.getDayNumberFromName(this.weekday)-today.getDay());mod=7;this.days=gap?((gap+(orient*mod))%mod):(orient*mod);}
-if(this.month){this.unit="month";gap=(this.month-today.getMonth());mod=12;this.months=gap?((gap+(orient*mod))%mod):(orient*mod);this.month=null;}
-if(!this.unit){this.unit="day";}
-if(this[this.unit+"s"]==null||this.operator!=null){if(!this.value){this.value=1;}
-if(this.unit=="week"){this.unit="day";this.value=this.value*7;}
-this[this.unit+"s"]=this.value*orient;}
-return today.add(this);}else{if(this.meridian&&this.hour){this.hour=(this.hour<13&&this.meridian=="p")?this.hour+12:this.hour;}
-if(this.weekday&&!this.day){this.day=(today.addDays((Date.getDayNumberFromName(this.weekday)-today.getDay()))).getDate();}
-if(this.month&&!this.day){this.day=1;}
-return today.set(this);}}};var _=Date.Parsing.Operators,g=Date.Grammar,t=Date.Translator,_fn;g.datePartDelimiter=_.rtoken(/^([\s\-\.\,\/\x27]+)/);g.timePartDelimiter=_.stoken(":");g.whiteSpace=_.rtoken(/^\s*/);g.generalDelimiter=_.rtoken(/^(([\s\,]|at|on)+)/);var _C={};g.ctoken=function(keys){var fn=_C[keys];if(!fn){var c=Date.CultureInfo.regexPatterns;var kx=keys.split(/\s+/),px=[];for(var i=0;i<kx.length;i++){px.push(_.replace(_.rtoken(c[kx[i]]),kx[i]));}
-fn=_C[keys]=_.any.apply(null,px);}
-return fn;};g.ctoken2=function(key){return _.rtoken(Date.CultureInfo.regexPatterns[key]);};g.h=_.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2]|[1-9])/),t.hour));g.hh=_.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2])/),t.hour));g.H=_.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3]|[0-9])/),t.hour));g.HH=_.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3])/),t.hour));g.m=_.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/),t.minute));g.mm=_.cache(_.process(_.rtoken(/^[0-5][0-9]/),t.minute));g.s=_.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/),t.second));g.ss=_.cache(_.process(_.rtoken(/^[0-5][0-9]/),t.second));g.hms=_.cache(_.sequence([g.H,g.mm,g.ss],g.timePartDelimiter));g.t=_.cache(_.process(g.ctoken2("shortMeridian"),t.meridian));g.tt=_.cache(_.process(g.ctoken2("longMeridian"),t.meridian));g.z=_.cache(_.process(_.rtoken(/^(\+|\-)?\s*\d\d\d\d?/),t.timezone));g.zz=_.cache(_.process(_.rtoken(/^(\+|\-)\s*\d\d\d\d/),t.timezone));g.zzz=_.cache(_.process(g.ctoken2("timezone"),t.timezone));g.timeSuffix=_.each(_.ignore(g.whiteSpace),_.set([g.tt,g.zzz]));g.time=_.each(_.optional(_.ignore(_.stoken("T"))),g.hms,g.timeSuffix);g.d=_.cache(_.process(_.each(_.rtoken(/^([0-2]\d|3[0-1]|\d)/),_.optional(g.ctoken2("ordinalSuffix"))),t.day));g.dd=_.cache(_.process(_.each(_.rtoken(/^([0-2]\d|3[0-1])/),_.optional(g.ctoken2("ordinalSuffix"))),t.day));g.ddd=g.dddd=_.cache(_.process(g.ctoken("sun mon tue wed thu fri sat"),function(s){return function(){this.weekday=s;};}));g.M=_.cache(_.process(_.rtoken(/^(1[0-2]|0\d|\d)/),t.month));g.MM=_.cache(_.process(_.rtoken(/^(1[0-2]|0\d)/),t.month));g.MMM=g.MMMM=_.cache(_.process(g.ctoken("jan feb mar apr may jun jul aug sep oct nov dec"),t.month));g.y=_.cache(_.process(_.rtoken(/^(\d\d?)/),t.year));g.yy=_.cache(_.process(_.rtoken(/^(\d\d)/),t.year));g.yyy=_.cache(_.process(_.rtoken(/^(\d\d?\d?\d?)/),t.year));g.yyyy=_.cache(_.process(_.rtoken(/^(\d\d\d\d)/),t.year));_fn=function(){return _.each(_.any.apply(null,arguments),_.not(g.ctoken2("timeContext")));};g.day=_fn(g.d,g.dd);g.month=_fn(g.M,g.MMM);g.year=_fn(g.yyyy,g.yy);g.orientation=_.process(g.ctoken("past future"),function(s){return function(){this.orient=s;};});g.operator=_.process(g.ctoken("add subtract"),function(s){return function(){this.operator=s;};});g.rday=_.process(g.ctoken("yesterday tomorrow today now"),t.rday);g.unit=_.process(g.ctoken("minute hour day week month year"),function(s){return function(){this.unit=s;};});g.value=_.process(_.rtoken(/^\d\d?(st|nd|rd|th)?/),function(s){return function(){this.value=s.replace(/\D/g,"");};});g.expression=_.set([g.rday,g.operator,g.value,g.unit,g.orientation,g.ddd,g.MMM]);_fn=function(){return _.set(arguments,g.datePartDelimiter);};g.mdy=_fn(g.ddd,g.month,g.day,g.year);g.ymd=_fn(g.ddd,g.year,g.month,g.day);g.dmy=_fn(g.ddd,g.day,g.month,g.year);g.date=function(s){return((g[Date.CultureInfo.dateElementOrder]||g.mdy).call(this,s));};g.format=_.process(_.many(_.any(_.process(_.rtoken(/^(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),function(fmt){if(g[fmt]){return g[fmt];}else{throw Date.Parsing.Exception(fmt);}}),_.process(_.rtoken(/^[^dMyhHmstz]+/),function(s){return _.ignore(_.stoken(s));}))),function(rules){return _.process(_.each.apply(null,rules),t.finishExact);});var _F={};var _get=function(f){return _F[f]=(_F[f]||g.format(f)[0]);};g.formats=function(fx){if(fx instanceof Array){var rx=[];for(var i=0;i<fx.length;i++){rx.push(_get(fx[i]));}
-return _.any.apply(null,rx);}else{return _get(fx);}};g._formats=g.formats(["yyyy-MM-ddTHH:mm:ss","ddd, MMM dd, yyyy H:mm:ss tt","ddd MMM d yyyy HH:mm:ss zzz","d"]);g._start=_.process(_.set([g.date,g.time,g.expression],g.generalDelimiter,g.whiteSpace),t.finish);g.start=function(s){try{var r=g._formats.call({},s);if(r[1].length===0){return r;}}catch(e){}
-return g._start.call({},s);};}());Date._parse=Date.parse;Date.parse=function(s){var r=null;if(!s){return null;}
-try{r=Date.Grammar.start.call({},s);}catch(e){return null;}
-return((r[1].length===0)?r[0]:null);};Date.getParseFunction=function(fx){var fn=Date.Grammar.formats(fx);return function(s){var r=null;try{r=fn.call({},s);}catch(e){return null;}
-return((r[1].length===0)?r[0]:null);};};Date.parseExact=function(s,fx){return Date.getParseFunction(fx)(s);};
diff --git a/app/javascripts/directory.js b/app/javascripts/directory.js
deleted file mode 100644
index 67bd1c16..00000000
--- a/app/javascripts/directory.js
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the directory JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Directory = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Opens the directory popup
- * @public
- * @return {boolean}
- */
- self.open = function() {
-
- try {
- // Popup HTML content
- var html =
- '<div class="top">' + Common._e("User directory") + '</div>' +
-
- '<div class="content">' +
- '<div class="directory-head">' +
- '<div class="directory-server-text">' + Common._e("Server to query") + '</div>' +
-
- '<input name="directory-server-input" class="directory-server-input" value="' + Common.encodeQuotes(HOST_VJUD) + '" />' +
- '</div>' +
-
- '<div class="results directory-results"></div>' +
- '</div>' +
-
- '<div class="bottom">' +
- '<div class="wait wait-medium"></div>' +
-
- '<a href="#" class="finish">' + Common._e("Close") + '</a>' +
- '</div>';
-
- // Create the popup
- Popup.create('directory', html);
-
- // Associate the events
- self.instance();
-
- // Start a search!
- self.start();
- } catch(e) {
- Console.error('Directory.open', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Quits the directory popup
- * @public
- * @return {boolean}
- */
- self.close = function() {
-
- try {
- // Destroy the popup
- Popup.destroy('directory');
- } catch(e) {
- Console.error('Directory.close', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Launches a directory search
- * @public
- * @return {boolean}
- */
- self.start = function() {
-
- try {
- // Get the server to query
- var server = $('#directory .directory-server-input').val();
-
- // Launch the search!
- DataForm.go($('#directory .directory-server-input').val(), 'search', '', '', 'directory');
-
- Console.log('Directory search launched: ' + server);
- } catch(e) {
- Console.error('Directory.start', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.instance = function() {
-
- try {
- // Click event
- $('#directory .bottom .finish').click(self.close);
-
- // Keyboard event
- $('#directory .directory-server-input').keyup(function(e) {
- if(e.keyCode == 13) {
- // No value?
- if(!$(this).val()) {
- $(this).val(HOST_VJUD);
- }
-
- // Start the directory search
- self.start();
-
- return false;
- }
- });
- } catch(e) {
- Console.error('Directory.instance', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/discovery.js b/app/javascripts/discovery.js
deleted file mode 100644
index ef419bac..00000000
--- a/app/javascripts/discovery.js
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the discovery JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Discovery = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Opens the discovery popup
- * @public
- * @return {boolean}
- */
- self.open = function() {
-
- try {
- // Popup HTML content
- var html =
- '<div class="top">' + Common._e("Service discovery") + '</div>' +
-
- '<div class="content">' +
- '<div class="discovery-head">' +
- '<div class="disco-server-text">' + Common._e("Server to query") + '</div>' +
-
- '<input name="disco-server-input" class="disco-server-input" value="' + Common.encodeQuotes(HOST_MAIN) + '" />' +
- '</div>' +
-
- '<div class="results discovery-results">' +
- '<div class="disco-category disco-account">' +
- '<p class="disco-category-title">' + Common._e("Accounts") + '</p>' +
- '</div>' +
-
- '<div class="disco-category disco-auth">' +
- '<p class="disco-category-title">' + Common._e("Authentications") + '</p>' +
- '</div>' +
-
- '<div class="disco-category disco-automation">' +
- '<p class="disco-category-title">' + Common._e("Automation") + '</p>' +
- '</div>' +
-
- '<div class="disco-category disco-client">' +
- '<p class="disco-category-title">' + Common._e("Clients") + '</p>' +
- '</div>' +
-
- '<div class="disco-category disco-collaboration">' +
- '<p class="disco-category-title">' + Common._e("Collaboration") + '</p>' +
- '</div>' +
-
- '<div class="disco-category disco-component">' +
- '<p class="disco-category-title">' + Common._e("Components") + '</p>' +
- '</div>' +
-
- '<div class="disco-category disco-conference">' +
- '<p class="disco-category-title">' + Common._e("Rooms") + '</p>' +
- '</div>' +
-
- '<div class="disco-category disco-directory">' +
- '<p class="disco-category-title">' + Common._e("Directories") + '</p>' +
- '</div>' +
-
- '<div class="disco-category disco-gateway">' +
- '<p class="disco-category-title">' + Common._e("Gateways") + '</p>' +
- '</div>' +
-
- '<div class="disco-category disco-headline">' +
- '<p class="disco-category-title">' + Common._e("News") + '</p>' +
- '</div>' +
-
- '<div class="disco-category disco-hierarchy">' +
- '<p class="disco-category-title">' + Common._e("Hierarchy") + '</p>' +
- '</div>' +
-
- '<div class="disco-category disco-proxy">' +
- '<p class="disco-category-title">' + Common._e("Proxies") + '</p>' +
- '</div>' +
-
- '<div class="disco-category disco-pubsub">' +
- '<p class="disco-category-title">' + Common._e("Publication/Subscription") + '</p>' +
- '</div>' +
-
- '<div class="disco-category disco-server">' +
- '<p class="disco-category-title">' + Common._e("Server") + '</p>' +
- '</div>' +
-
- '<div class="disco-category disco-store">' +
- '<p class="disco-category-title">' + Common._e("Storage") + '</p>' +
- '</div>' +
-
- '<div class="disco-category disco-others">' +
- '<p class="disco-category-title">' + Common._e("Others") + '</p>' +
- '</div>' +
-
- '<div class="disco-category disco-wait">' +
- '<p class="disco-category-title">' + Common._e("Loading") + '</p>' +
- '</div>' +
- '</div>' +
- '</div>' +
-
- '<div class="bottom">' +
- '<div class="wait wait-medium"></div>' +
-
- '<a href="#" class="finish">' + Common._e("Close") + '</a>' +
- '</div>';
-
- // Create the popup
- Popup.create('discovery', html);
-
- // Associate the events
- self.instance();
-
- // We request a disco to the default server
- self.start();
- } catch(e) {
- Console.error('Discovery.open', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Quits the discovery popup
- * @public
- * @return {boolean}
- */
- self.close = function() {
-
- try {
- // Destroy the popup
- Popup.destroy('discovery');
- } catch(e) {
- Console.error('Discovery.close', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Launches a discovery
- * @public
- * @return {boolean}
- */
- self.start = function() {
-
- /* REF: http://xmpp.org/extensions/xep-0030.html */
-
- try {
- // We get the server to query
- var discoServer = $('#discovery .disco-server-input').val();
-
- // We launch the items query
- DataForm.go(discoServer, 'browse', '', '', 'discovery');
-
- Console.log('Service discovery launched: ' + discoServer);
- } catch(e) {
- Console.error('Discovery.start', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Cleans the discovery results
- * @public
- * @return {boolean}
- */
- self.clean = function() {
-
- try {
- // We remove the results
- $('#discovery .discovery-oneresult, #discovery .oneinstructions, #discovery .onetitle, #discovery .no-results').remove();
-
- // We clean the user info
- $('#discovery .disco-server-info').text('');
-
- // We hide the wait icon, the no result alert and the results
- $('#discovery .wait, #discovery .disco-category').hide();
- } catch(e) {
- Console.error('Discovery.clean', e);
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.instance = function() {
-
- try {
- // Click event
- $('#discovery .bottom .finish').click(self.close);
-
- // Keyboard event
- $('#discovery .disco-server-input').keyup(function(e) {
- if(e.keyCode == 13) {
- // No value?
- if(!$(this).val()) {
- $(this).val(HOST_MAIN);
- }
-
- // Start the discovery
- self.start();
-
- return false;
- }
- });
- } catch(e) {
- Console.error('Discovery.instance', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/errors.js b/app/javascripts/errors.js
deleted file mode 100644
index f1a651cf..00000000
--- a/app/javascripts/errors.js
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the error functions for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Errors = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Shows the given error output
- * @public
- * @param {string} condition
- * @param {string} reason
- * @param {string} type
- * @return {undefined}
- */
- self.show = function(condition, reason, type) {
-
- try {
- // Enough data to output the error
- if(condition || reason) {
- // Initialize the error text
- var eText = '';
-
- // Any error condition
- if(condition) {
- eText += condition;
- }
-
- // Any error type
- if(type && eText) {
- eText += ' (' + type + ')';
- }
-
- // Any error reason
- if(reason) {
- if(eText) {
- eText += ' - ';
- }
-
- eText += reason;
- }
-
- // We reveal the error
- Board.openThisError(1);
-
- // Create the error text
- $('#board .one-board.error[data-id="1"] span').text(eText);
- }
-
- // Not enough data to output the error: output a generic board
- else {
- Board.openThisError(2);
- }
- } catch(e) {
- Console.error('Errors.show', e);
- }
-
- };
-
-
- /**
- * Handles the error from a packet and return true if any error
- * @public
- * @param {object} packet
- * @return {boolean}
- */
- self.handle = function(packet) {
-
- /* REF: http://xmpp.org/extensions/xep-0086.html */
-
- try {
- // Initialize
- var type, code, reason, condition;
- var node = $(packet);
-
- // First level error (connection error)
- if(node.is('error')) {
- // Get the value
- code = node.attr('code');
-
- // Specific error reason
- switch(code) {
- case '401':
- reason = Common._e("Authorization failed");
- break;
-
- case '409':
- reason = Common._e("Registration failed, please choose a different username");
- break;
-
- case '503':
- reason = Common._e("Service unavailable");
- break;
-
- case '500':
- reason = Common._e("Internal server error, try later");
- break;
-
- default:
- reason = node.find('text').text();
- break;
- }
-
- // Remove the general wait item (security)
- Interface.removeGeneralWait();
-
- // Show reconnect pane
- if(Connection.current_session && Connection.connected) {
- // Anonymous?
- if(Utils.isAnonymous()) {
- Connection.createReconnect('anonymous');
- } else {
- Connection.createReconnect('normal');
- }
- }
-
- // Show the homepage (security)
- else if(!Connection.current_session || !Connection.connected) {
- $('#home').show();
- Interface.title('home');
- }
-
- // Still connected? (security)
- if(Common.isConnected()) {
- con.disconnect();
- }
-
- Console.error('First level error received.');
- }
-
- // Second level error (another error)
- else if(node.find('error').size()) {
- type = node.find('error').attr('type');
- reason = node.find('error text').text();
- condition = packet.getElementsByTagName('error').item(0).childNodes.item(0).nodeName.replace(/-/g, ' ');
-
- Console.error('Second level error received.');
- } else {
- return false;
- }
-
- // Show the error board
- self.show(condition, reason, type);
-
- // Return there's an error
- return true;
- } catch(e) {
- Console.error('Errors.handle', e);
- }
-
- };
-
-
- /**
- * Handles the error reply of a packet
- * @public
- * @param {object} packet
- * @return {boolean}
- */
- self.handleReply = function(packet) {
-
- try {
- return self.handle(packet.getNode());
- } catch(e) {
- Console.error('Errors.handleReply', e);
- }
-
- };
-
-
- /**
- * Handles the error reply for a message
- * @public
- * @param {object} packet
- * @return {boolean}
- */
- self.handleMessage = function(packet) {
-
- try {
- if(!self.handleReply(packet)) {
- Message.handle(packet);
- }
- } catch(e) {
- Console.error('Errors.handleMessage', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/favorites.js b/app/javascripts/favorites.js
deleted file mode 100644
index ffbbe17c..00000000
--- a/app/javascripts/favorites.js
+++ /dev/null
@@ -1,785 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the favorites JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Favorites = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Opens the favorites popup
- * @public
- * @return {undefined}
- */
- self.open = function() {
-
- try {
- // Popup HTML content
- var html =
- '<div class="top">' + Common._e("Manage favorite rooms") + '</div>' +
-
- '<div class="content">' +
- '<div class="switch-fav">' +
- '<div class="room-switcher room-list">' +
- '<div class="icon list-icon talk-images"></div>' +
-
- Common._e("Change favorites") +
- '</div>' +
-
- '<div class="room-switcher room-search">' +
- '<div class="icon search-icon talk-images"></div>' +
-
- Common._e("Search a room") +
- '</div>' +
- '</div>' +
-
- '<div class="static-fav">' +
- '<div class="favorites-edit favorites-content">' +
- '<div class="head fedit-head static-fav-head">' +
- '<div class="head-text fedit-head-text">' + Common._e("Select a favorite") + '</div>' +
-
- '<select name="fedit-head-select" class="head-select fedit-head-select"></select>' +
- '</div>' +
-
- '<div class="results fedit-results static-fav-results">' +
- '<div class="fedit-line">' +
- '<label>' + Common._e("Name") + '</label>' +
-
- '<input class="fedit-title" type="text" required="" />' +
- '</div>' +
-
- '<div class="fedit-line">' +
- '<label>' + Common._e("Nickname") + '</label>' +
-
- '<input class="fedit-nick" type="text" value="' + Name.getNick() + '" required="" />' +
- '</div>' +
-
- '<div class="fedit-line">' +
- '<label>' + Common._e("Room") + '</label>' +
-
- '<input class="fedit-chan" type="text" required="" />' +
- '</div>' +
-
- '<div class="fedit-line">' +
- '<label>' + Common._e("Server") + '</label>' +
-
- '<input class="fedit-server" type="text" value="' + HOST_MUC + '" required="" />' +
- '</div>' +
-
- '<div class="fedit-line">' +
- '<label>' + Common._e("Password") + '</label>' +
-
- '<input class="fedit-password" type="password" />' +
- '</div>' +
-
- '<div class="fedit-line">' +
- '<label>' + Common._e("Automatic") + '</label>' +
-
- '<input type="checkbox" class="fedit-autojoin" />' +
- '</div>' +
-
- '<div class="fedit-actions">' +
- '<a href="#" class="fedit-terminate fedit-add add one-button talk-images">' + Common._e("Add") + '</a>' +
- '<a href="#" class="fedit-terminate fedit-edit one-button talk-images">' + Common._e("Edit") + '</a>' +
- '<a href="#" class="fedit-terminate fedit-remove remove one-button talk-images">' + Common._e("Remove") + '</a>' +
- '</div>' +
- '</div>' +
- '</div>' +
-
- '<div class="favorites-search favorites-content">' +
- '<div class="head fsearch-head static-fav-head">' +
- '<div class="head-text fsearch-head-text">' + Common._e("Search a room on") + '</div>' +
-
- '<input type="text" class="head-input fsearch-head-server" value="' + HOST_MUC + '" />' +
- '</div>' +
-
- '<div class="results fsearch-results static-fav-results">' +
- '<p class="fsearch-noresults">' + Common._e("No room found on this server.") + '</p>' +
- '</div>' +
- '</div>' +
- '</div>' +
- '</div>' +
-
- '<div class="bottom">' +
- '<div class="wait wait-medium"></div>' +
-
- '<a href="#" class="finish">' + Common._e("Close") + '</a>' +
- '</div>';
-
- // Create the popup
- Popup.create('favorites', html);
-
- // Load the favorites
- self.load();
-
- // Associate the events
- self.instance();
- } catch(e) {
- Console.error('Favorites.open', e);
- }
-
- };
-
-
- /**
- * Resets the favorites elements
- * @public
- * @return {undefined}
- */
- self.reset = function() {
-
- try {
- var path_sel = $('#favorites');
-
- path_sel.find('.wait');
- path_sel.find('.fedit-terminate').hide();
- path_sel.find('.fedit-add').show();
-
- path_sel.find('.fsearch-oneresult').remove();
- path_sel.find('input').val('');
- path_sel.find('.please-complete').removeClass('please-complete');
-
- path_sel.find('.fedit-nick').val(Name.getNick());
- path_sel.find('.fsearch-head-server').val(HOST_MUC);
- path_sel.find('.fedit-server').val(HOST_MUC);
-
- path_sel.find('.fedit-autojoin').removeAttr('checked');
- } catch(e) {
- Console.error('Favorites.reset', e);
- }
-
- };
-
-
- /**
- * Quits the favorites popup
- * @public
- * @return {boolean}
- */
- self.quit = function() {
-
- try {
- // Destroy the popup
- Popup.destroy('favorites');
- } catch(e) {
- Console.error('Favorites.quit', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Adds a room to the favorites
- * @public
- * @param {string} room_xid
- * @param {string} room_name
- * @return {boolean}
- */
- self.addThis = function(room_xid, room_name) {
-
- try {
- // Button path
- var button_sel = $('#favorites .fsearch-results div[data-xid="' + escape(room_xid) + '"] a.one-button');
-
- // Add a remove button instead of the add one
- button_sel.filter('.add').replaceWith(
- '<a href="#" class="one-button remove talk-images">' + Common._e("Remove") + '</a>'
- );
-
- // Click event
- button_sel.filter('.remove').click(function() {
- return self.removeThis(room_xid, room_name);
- });
-
- // Hide the add button in the (opened?) groupchat
- $('#' + hex_md5(room_xid) + ' .tools-add').hide();
-
- // Add the database entry
- self.display(
- room_xid,
- Common.explodeThis(' (', room_name, 0), Name.getNick(), '0', ''
- );
-
- // Publish the favorites
- self.publish();
- } catch(e) {
- Console.error('Favorites.addThis', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Removes a room from the favorites
- * @public
- * @param {string} room_xid
- * @param {string} room_name
- * @return {boolean}
- */
- self.removeThis = function(room_xid, room_name) {
-
- try {
- // Button path
- var button_sel = $('#favorites .fsearch-results div[data-xid="' + escape(room_xid) + '"] a.one-button');
-
- // Add a remove button instead of the add one
- button_sel.filter('.remove').replaceWith('<a href="#" class="one-button add talk-images">' + Common._e("Add") + '</a>');
-
- // Click event
- button_sel.filter('.add').click(function() {
- return self.addThis(room_xid, room_name);
- });
-
- // Show the add button in the (opened?) groupchat
- $('#' + hex_md5(room_xid) + ' .tools-add').show();
-
- // Remove the favorite
- self.remove(room_xid, true);
-
- // Publish the favorites
- self.publish();
- } catch(e) {
- Console.error('Favorites.removeThis', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Edits a favorite
- * @public
- * @return {undefined}
- */
- self.edit = function() {
-
- try {
- // Path to favorites
- var favorites_sel = $('#favorites');
-
- // Reset the favorites
- self.reset();
-
- // Show the edit/remove button, hide the others
- favorites_sel.find('.fedit-terminate').hide();
- favorites_sel.find('.fedit-edit').show();
- favorites_sel.find('.fedit-remove').show();
-
- // We retrieve the values
- var xid = favorites_sel.find('.fedit-head-select').val();
- var data_sel = $(Common.XMLFromString(
- DataStore.getDB(Connection.desktop_hash, 'favorites', xid)
- ));
-
- // If this is not the default room
- if(xid != 'none') {
- // We apply the values
- favorites_sel.find('.fedit-title').val(data_sel.find('name').text());
- favorites_sel.find('.fedit-nick').val(data_sel.find('nick').text());
- favorites_sel.find('.fedit-chan').val(Common.getXIDNick(xid));
- favorites_sel.find('.fedit-server').val(Common.getXIDHost(xid));
- favorites_sel.find('.fedit-password').val(data_sel.find('password').text());
-
- if(data_sel.find('autojoin').text() == 'true') {
- favorites_sel.find('.fedit-autojoin').attr('checked', true);
- }
- }
- } catch(e) {
- Console.error('Favorites.edit', e);
- }
-
- };
-
-
- /**
- * Terminate a favorite editing
- * @public
- * @param {string} type
- * @return {boolean}
- */
- self.terminateThis = function(type) {
-
- try {
- // Path to favorites
- var favorites_sel = $('#favorites');
-
- // We get the values of the current edited groupchat
- var old_xid = favorites_sel.find('.fedit-head-select').val();
-
- var title = favorites_sel.find('.fedit-title').val();
- var nick = favorites_sel.find('.fedit-nick').val();
- var room = favorites_sel.find('.fedit-chan').val();
- var server = favorites_sel.find('.fedit-server').val();
- var xid = room + '@' + server;
- var password = favorites_sel.find('.fedit-password').val();
- var autojoin = 'false';
-
- if(favorites_sel.find('.fedit-autojoin').filter(':checked').size()) {
- autojoin = 'true';
- }
-
- // We check the missing values and send this if okay
- if((type == 'add') || (type == 'edit')) {
- if(title && nick && room && server) {
- // Remove the edited room
- if(type == 'edit') {
- self.remove(old_xid, true);
- }
-
- // Display the favorites
- self.display(xid, title, nick, autojoin, password);
-
- // Reset the inputs
- self.reset();
- } else {
- favorites_sel.find('input[required]').each(function() {
- var select = $(this);
-
- if(!select.val()) {
- $(document).oneTime(10, function() {
- select.addClass('please-complete').focus();
- });
- } else {
- select.removeClass('please-complete');
- }
- });
- }
- } else if(type == 'remove') {
- self.remove(old_xid, true);
-
- // Reset the inputs
- self.reset();
- }
-
- // Publish the new favorites
- self.publish();
-
- Console.info('Action on this bookmark: ' + room + '@' + server + ' / ' + type);
- } catch(e) {
- Console.error('Favorites.terminateThis', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Removes a favorite
- * @public
- * @param {string} xid
- * @param {boolean} database
- * @return {undefined}
- */
- self.remove = function(xid, database) {
-
- try {
- // We remove the target favorite everywhere needed
- $('.buddy-conf-groupchat-select option[value="' + xid + '"]').remove();
- $('.fedit-head-select option[value="' + xid + '"]').remove();
-
- // Must remove it from database?
- if(database) {
- DataStore.removeDB(Connection.desktop_hash, 'favorites', xid);
- }
- } catch(e) {
- Console.error('Favorites.remove', e);
- }
-
- };
-
-
- /**
- * Sends a favorite to the XMPP server
- * @public
- * @return {undefined}
- */
- self.publish = function() {
-
- try {
- var iq = new JSJaCIQ();
- iq.setType('set');
-
- var query = iq.setQuery(NS_PRIVATE);
- var storage = query.appendChild(iq.buildNode('storage', {
- 'xmlns': NS_BOOKMARKS
- }));
-
- // We generate the XML
- var db_regex = new RegExp(('^' + Connection.desktop_hash + '_') + 'favorites_(.+)');
-
- for(var i = 0; i < DataStore.storageDB.length; i++) {
- // Get the pointer values
- var current = DataStore.storageDB.key(i);
-
- // If the pointer is on a stored favorite
- if(current.match(db_regex)) {
- var data_sel = $(Common.XMLFromString(
- DataStore.storageDB.getItem(current)
- ));
-
- var xid = data_sel.find('xid').text();
- var rName = data_sel.find('name').text();
- var nick = data_sel.find('nick').text();
- var password = data_sel.find('password').text();
- var autojoin = data_sel.find('autojoin').text();
-
- // We create the node for this groupchat
- var item = storage.appendChild(
- iq.buildNode('conference', {
- 'name': rName,
- 'jid': xid,
- 'autojoin': autojoin,
- xmlns: NS_BOOKMARKS
- })
- );
-
- item.appendChild(iq.buildNode('nick', {
- xmlns: NS_BOOKMARKS
- }, nick));
-
- if(password) {
- item.appendChild(iq.buildNode('password', {
- xmlns: NS_BOOKMARKS
- }, password));
- }
-
- Console.info('Bookmark sent: ' + xid);
- }
- }
-
- con.send(iq);
- } catch(e) {
- Console.error('Favorites.publish', e);
- }
-
- };
-
-
- /**
- * Gets a list of the MUC items on a given server
- * @public
- * @return {undefined}
- */
- self.getGCList = function() {
-
- try {
- var path_sel = $('#favorites');
- var groupchat_server = $('.fsearch-head-server').val();
-
- // We reset some things
- path_sel.find('.fsearch-oneresult').remove();
- path_sel.find('.fsearch-noresults').hide();
- path_sel.find('.wait').show();
-
- var iq = new JSJaCIQ();
- iq.setType('get');
- iq.setTo(groupchat_server);
-
- iq.setQuery(NS_DISCO_ITEMS);
-
- con.send(iq, self.handleGCList);
- } catch(e) {
- Console.error('Favorites.getGCList', e);
- }
-
- };
-
-
- /**
- * Handles the MUC items list
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleGCList = function(iq) {
-
- try {
- var path_sel = $('#favorites');
- var from = Common.fullXID(Common.getStanzaFrom(iq));
-
- if(!iq || (iq.getType() != 'result')) {
- Board.openThisError(3);
-
- path_sel.find('.wait').hide();
-
- Console.error('Error while retrieving the rooms: ' + from);
- }
-
- else {
- var handleXML = iq.getQuery();
-
- if($(handleXML).find('item').size()) {
- // Initialize the HTML code
- var html = '';
-
- $(handleXML).find('item').each(function() {
- var this_sel = $(this);
-
- var room_xid = this_sel.attr('jid');
- var room_name = this_sel.attr('name');
-
- if(room_xid && room_name) {
- // Escaped values
- var escaped_xid = Utils.encodeOnclick(room_xid);
- var escaped_name = Utils.encodeOnclick(room_name);
-
- // Initialize the room HTML
- html += '<div class="oneresult fsearch-oneresult" data-xid="' + escape(room_xid) + '">' +
- '<div class="room-name">' + room_name.htmlEnc() + '</div>' +
- '<a href="#" class="one-button join talk-images" onclick="return Favorites.join(\'' + escaped_xid + '\');">' + Common._e("Join") + '</a>';
-
- // This room is yet a favorite
- if(DataStore.existDB(Connection.desktop_hash, 'favorites', room_xid)) {
- html += '<a href="#" ' +
- 'class="one-button remove talk-images" ' +
- 'onclick="return Favorites.removeThis(\'' + escaped_xid + '\', \'' + escaped_name + '\');"' +
- '>' +
- Common._e("Remove") +
- '</a>';
- } else {
- html += '<a href="#" ' +
- 'class="one-button add talk-images" ' +
- 'onclick="return Favorites.addThis(\'' + escaped_xid + '\', \'' + escaped_name + '\');"' +
- '>' +
- Common._e("Add") +
- '</a>';
- }
-
- // Close the room HTML
- html += '</div>';
- }
- });
-
- // Append this code to the popup
- path_sel.find('.fsearch-results').append(html);
- } else {
- path_sel.find('.fsearch-noresults').show();
- }
-
- Console.info('Rooms retrieved: ' + from);
- }
-
- path_sel.find('.wait').hide();
- } catch(e) {
- Console.error('Favorites.handleGCList', e);
- }
-
- };
-
-
- /**
- * Joins a groupchat from favorites
- * @public
- * @param {string} room
- * @return {boolean}
- */
- self.join = function(room) {
-
- try {
- self.quit();
-
- Chat.checkCreate(
- room,
- 'groupchat',
- '',
- '',
- Common.getXIDNick(room)
- );
- } catch(e) {
- Console.error('Favorites.join', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Displays a given favorite
- * @public
- * @param {string} xid
- * @param {string} name
- * @param {string} nick
- * @param {boolean} autojoin
- * @param {string} password
- * @return {undefined}
- */
- self.display = function(xid, name, nick, autojoin, password) {
-
- try {
- // Generate the HTML code
- var html = '<option value="' + Common.encodeQuotes(xid) + '">' + name.htmlEnc() + '</option>';
-
- // Remove the existing favorite
- self.remove(xid, false);
-
- // We complete the select forms
- $('#roster .gc-join-first-option, #favorites .fedit-head-select-first-option').after(html);
-
- // We store the informations
- var value = '<groupchat>' +
- '<xid>' + xid.htmlEnc() + '</xid>' +
- '<name>' + name.htmlEnc() + '</name>' +
- '<nick>' + nick.htmlEnc() + '</nick>' +
- '<autojoin>' + autojoin.htmlEnc() + '</autojoin>' +
- '<password>' + password.htmlEnc() + '</password>' +
- '</groupchat>';
-
- DataStore.setDB(Connection.desktop_hash, 'favorites', xid, value);
- } catch(e) {
- Console.error('Favorites.display', e);
- }
-
- };
-
-
- /**
- * Loads the favorites for the popup
- * @public
- * @return {undefined}
- */
- self.load = function() {
-
- try {
- // Initialize the HTML code
- var html = '';
-
- // Read the database
- var db_regex = new RegExp(('^' + Connection.desktop_hash + '_') + 'favorites_(.+)');
-
- for(var i = 0; i < DataStore.storageDB.length; i++) {
- // Get the pointer values
- var current = DataStore.storageDB.key(i);
-
- // If the pointer is on a stored favorite
- if(current.match(db_regex)) {
- var data = Common.XMLFromString(DataStore.storageDB.getItem(current));
-
- // Add the current favorite to the HTML code
- html += '<option value="' + Common.encodeQuotes($(data).find('xid').text()) + '">' +
- $(data).find('name').text().htmlEnc() +
- '</option>';
- }
- }
-
- // Generate specific HTML code
- var favorites_bubble = '<option value="none" class="gc-join-first-option" selected="">' +
- Common._e("Select a favorite") +
- '</option>' + html;
-
- var favorites_popup = '<option value="none" class="fedit-head-select-first-option" selected="">' +
- Common._e("Select a favorite") +
- '</option>' + html;
-
- // Append the HTML code
- $('#roster .buddy-conf-groupchat-select').html(favorites_bubble);
- $('#favorites .fedit-head-select').html(favorites_popup);
- } catch(e) {
- Console.error('Favorites.load', e);
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.instance = function() {
-
- try {
- var favorites_sel = $('#favorites');
-
- // Keyboard events
- favorites_sel.find('.fsearch-head-server').keyup(function(e) {
- if(e.keyCode == 13) {
- var this_sel = $(this);
-
- // No value?
- if(!this_sel.val()) {
- this_sel.val(HOST_MUC);
- }
-
- // Get the list
- self.getGCList();
- }
- });
-
- favorites_sel.find('.fedit-line input').keyup(function(e) {
- if(e.keyCode == 13) {
- // Edit a favorite
- if(favorites_sel.find('.fedit-edit').is(':visible')) {
- self.terminateThis('edit');
- } else {
- self.terminateThis('add');
- }
- }
- });
-
- // Change events
- $('.fedit-head-select').change(self.edit);
-
- // Click events
- favorites_sel.find('.room-switcher').click(function() {
- favorites_sel.find('.favorites-content').hide();
- self.reset();
- });
-
- favorites_sel.find('.room-list').click(function() {
- favorites_sel.find('.favorites-edit').show();
- });
-
- favorites_sel.find('.room-search').click(function() {
- favorites_sel.find('.favorites-search').show();
- self.getGCList();
- });
-
- favorites_sel.find('.fedit-add').click(function() {
- return self.terminateThis('add');
- });
-
- favorites_sel.find('.fedit-edit').click(function() {
- return self.terminateThis('edit');
- });
-
- favorites_sel.find('.fedit-remove').click(function() {
- return self.terminateThis('remove');
- });
-
- favorites_sel.find('.bottom .finish').click(function() {
- return self.quit();
- });
- } catch(e) {
- Console.error('Favorites.instance', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/features.js b/app/javascripts/features.js
deleted file mode 100644
index 2e7ba1ea..00000000
--- a/app/javascripts/features.js
+++ /dev/null
@@ -1,457 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the server features JS script for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou, Maranda
-
-*/
-
-// Bundle
-var Features = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Constants */
- self.SERVER_NAMES = [
- 'metronome',
- 'prosody',
- 'ejabberd',
- 'jabberd',
- 'openfire',
- 'tigase',
- 'isode'
- ];
-
-
- /* Variables */
- self.server_name = null;
-
-
- /**
- * Gets the features of a server
- * @public
- * @return {undefined}
- */
- self.get = function() {
-
- /* REF: http://xmpp.org/extensions/xep-0030.html */
-
- try {
- // Get the main values
- var to = Utils.getServer();
- var caps = con.server_caps;
- var xml = null;
-
- // Try to get the stored data
- if(caps) {
- xml = Common.XMLFromString(
- DataStore.getPersistent('global', 'caps', caps)
- );
- }
-
- // Any stored data?
- if(xml) {
- self.handle(xml);
-
- Console.log('Read server CAPS from cache.');
- } else {
- // Not stored (or no CAPS)!
- var iq = new JSJaCIQ();
-
- iq.setTo(to);
- iq.setType('get');
- iq.setQuery(NS_DISCO_INFO);
-
- con.send(iq, Caps.handleDiscoInfos);
-
- Console.log('Read server CAPS from network.');
- }
- } catch(e) {
- Console.error('Features.get', e);
- }
-
- };
-
-
- /**
- * Handles the features of a server
- * @public
- * @param {string} xml
- * @return {boolean}
- */
- self.handle = function(xml) {
-
- try {
- // Selector
- var selector = $(xml);
-
- // Functions
- var check_feature_fn = function(namespace) {
- // This weird selector fixes an IE8 bug...
- return (selector.find('feature').filter(function() {
- return ($(this).attr('var') == namespace);
- }).size() > 0 ? true : false);
- };
-
- // Markers
- var namespaces = [NS_PUBSUB, NS_PUBSUB_CN, NS_URN_MAM, NS_COMMANDS, NS_URN_CARBONS, NS_URN_CORRECT];
-
- var identity = selector.find('identity');
-
- var cur_feature;
- var features = {
- // This weird selector fixes the same IE8 bug as above...
- 'pep': (identity.filter(function() {
- var this_sel = $(this);
- return (this_sel.attr('category') == 'pubsub' && this_sel.attr('type') == 'pep');
- }).size() && true)
- };
-
- $.each(namespaces, function(n, namespace) {
- features[namespace] = check_feature_fn(namespace);
-
- if(features[namespace] === true) {
- self.enable(namespace);
- }
- });
-
- // Retrieve server identity
- self.server_name = self._normalizeServerName(
- identity.filter('[category="server"]').attr('name')
- );
-
- // Enable the pep elements if available
- if(features.pep === true) {
- // Update our database
- self.enable('pep');
-
- // Get the PEP nodes to initiate
- Microblog.getInit();
- PEP.getInitGeoloc();
-
- // Get the notifications
- Notification.get();
-
- // Geolocate the user
- PEP.geolocate();
-
- // Enable microblogging send tools
- Microblog.wait('sync');
- $('.postit.attach').css('display', 'block');
-
- Console.info('XMPP server supports PEP.');
- } else {
- Microblog.wait('unsync');
-
- Console.warn('XMPP server does not support PEP.');
- }
-
- // Hide the private life fieldset if nothing to show
- if(features.pep === false && features[NS_URN_MAM] === false) {
- $('#options fieldset.privacy').hide();
- }
-
- // Apply the features
- self.apply('talk');
-
- // Process the roster height
- if(features.pep === true) {
- Roster.adapt();
- }
-
- // Enable Message Carbons?
- if(features[NS_URN_CARBONS] === true) {
- Carbons.enable();
- }
- } catch(e) {
- Console.error('Features.handle', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * The function to apply the features to an element
- * @public
- * @param {string} id
- * @return {undefined}
- */
- self.apply = function(id) {
-
- try {
- // Path to the elements
- var path = '#' + id + ' .';
-
- // PEP features
- if(self.enabledPEP()) {
- $(path + 'pep-hidable').show();
- }
-
- // PubSub features
- if(self.enabledPubSub()) {
- $(path + 'pubsub-hidable').show();
- }
-
- // PubSub Config-Node features
- if(self.enabledPubSubCN()) {
- $(path + 'pubsub-hidable-cn').show();
- }
-
- // MAM features
- if(self.enabledMAM()) {
- $(path + 'mam-hidable').show();
- $(path + 'mam-showable').hide();
- }
-
- // MAM Purge
- if(self.enabledMAMPurge()) {
- $(path + 'mam-purge-hidable').show();
- }
-
- // Message correction features
- if(self.enabledCorrection()) {
- $(path + 'correction-hidable').show();
- }
-
- // Commands features
- if(self.enabledCommands()) {
- $(path + 'commands-hidable').show();
- }
-
- // XMPP links (browser feature)
- if(navigator.registerProtocolHandler) {
- $(path + 'xmpplinks-hidable').show();
- }
- } catch(e) {
- Console.error('Features.apply', e);
- }
-
- };
-
-
- /**
- * Enables a feature
- * @public
- * @param {string} feature
- * @return {undefined}
- */
- self.enable = function(feature) {
-
- try {
- DataStore.setDB(Connection.desktop_hash, 'feature', feature, 'true');
- } catch(e) {
- Console.error('Features.enable', e);
- }
-
- };
-
-
- /**
- * Checks if a feature is enabled
- * @public
- * @param {string} feature
- * @return {boolean}
- */
- self.isEnabled = function(feature) {
-
- try {
- return DataStore.getDB(Connection.desktop_hash, 'feature', feature) === 'true';
- } catch(e) {
- Console.error('Features.isEnabled', e);
- }
-
- };
-
-
- /**
- * Returns the XMPP server PEP support
- * @public
- * @return {boolean}
- */
- self.enabledPEP = function() {
-
- try {
- return self.isEnabled('pep');
- } catch(e) {
- Console.error('Features.enabledPEP', e);
- }
-
- };
-
-
- /**
- * Returns the XMPP server PubSub support
- * @public
- * @return {boolean}
- */
- self.enabledPubSub = function() {
-
- try {
- return self.isEnabled(NS_PUBSUB);
- } catch(e) {
- Console.error('Features.enabledPubSub', e);
- }
-
- };
-
-
- /**
- * Returns the XMPP server PubSub Config-Node support
- * @public
- * @return {boolean}
- */
- self.enabledPubSubCN = function() {
-
- try {
- return self.isEnabled(NS_PUBSUB_CN);
- } catch(e) {
- Console.error('Features.enabledPubSubCN', e);
- }
-
- };
-
-
- /**
- * Returns the XMPP server MAM support
- * @public
- * @return {boolean}
- */
- self.enabledMAM = function() {
-
- try {
- return self.isEnabled(NS_URN_MAM);
- } catch(e) {
- Console.error('Features.enabledMAM', e);
- }
-
- };
-
-
- /**
- * Returns Metronome MAM Purge support
- * @public
- * @return {boolean}
- */
- self.enabledMAMPurge = function() {
-
- try {
- if(self.isEnabled(NS_URN_MAM)) {
- return self.isEnabled(NS_METRONOME_MAM_PURGE);
- } else {
- return false;
- }
- } catch(e) {
- Console.error('Features.enabledMAMPurge', e);
- }
-
- };
-
-
- /**
- * Returns the XMPP server Carbons support
- * @public
- * @return {boolean}
- */
- self.enabledCarbons = function() {
-
- try {
- return self.isEnabled(NS_URN_CARBONS);
- } catch(e) {
- Console.error('Features.enabledCarbons', e);
- }
-
- };
-
-
- /**
- * Returns the XMPP server commands support
- * @public
- * @return {boolean}
- */
- self.enabledCommands = function() {
-
- try {
- return self.isEnabled(NS_COMMANDS);
- } catch(e) {
- Console.error('Features.enabledCommands', e);
- }
-
- };
-
-
- /**
- * Returns the XMPP server correction support
- * @public
- * @return {boolean}
- */
- self.enabledCorrection = function() {
-
- try {
- return self.isEnabled(NS_URN_CORRECT);
- } catch(e) {
- Console.error('Features.enabledCorrection', e);
- }
-
- };
-
-
- /**
- * Normalizes the XMPP server name
- * @private
- * @return {string}
- */
- self._normalizeServerName = function(name) {
-
- try {
- var cur_r;
-
- for(var i in self.SERVER_NAMES) {
- cur_r = new RegExp(self.SERVER_NAMES[i], 'gi');
-
- if(cur_r.exec(name) !== null) {
- name = self.SERVER_NAMES[i];
- break;
- }
- }
- } catch(e) {
- Console.error('Features._normalizeServerName', e);
- } finally {
- return name;
- }
-
- };
-
-
- /**
- * Returns the XMPP server name
- * @public
- * @return {string}
- */
- self.getServerName = function() {
-
- try {
- return self.server_name;
- } catch(e) {
- Console.error('Features.getServerName', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/filter.js b/app/javascripts/filter.js
deleted file mode 100644
index bda2f2ed..00000000
--- a/app/javascripts/filter.js
+++ /dev/null
@@ -1,491 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the filtering JS script for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Authors: Valérian Saliou, Maranda
-
-*/
-
-// Bundle
-var Filter = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Constants */
- self.message_regex = {
- 'commands': {
- 'me': /((^)|((.+)(>)))(\/me )([^<]+)/
- },
-
- 'emotes': {
- 'angry': [
- /(:-?@)($|\s|<)/gi,
- '$2'
- ],
-
- 'bat': [
- /(:-?\[)($|\s|<)/gi,
- '$2'
- ],
-
- 'beer': [
- /(\(B\))($|\s|<)/g,
- '$2'
- ],
-
- 'biggrin': [
- /((:-?D)|(XD))($|\s|<)/gi,
- '$4'
- ],
-
- 'blush': [
- /(:-?\$)($|\s|<)/gi,
- '$2'
- ],
-
- 'boy': [
- /(\(Z\))($|\s|<)/g,
- '$2'
- ],
-
- 'brflower': [
- /(\(W\))($|\s|<)/g,
- '$2'
- ],
-
- 'brheart': [
- /((&lt;\/3)|(\(U\)))($|\s|<)/g,
- '$4'
- ],
-
- 'coffee': [
- /(\(C\))($|\s|<)/g,
- '$2'
- ],
-
- 'coolglasses': [
- /((8-\))|(\(H\)))($|\s|<)/g,
- '$4'
- ],
-
- 'cry': [
- /(:'-?\()($|\s|<)/gi,
- '$2'
- ],
-
- 'cuffs': [
- /(\(%\))($|\s|<)/g,
- '$2'
- ],
-
- 'devil': [
- /(\]:-?&gt;)($|\s|<)/gi,
- '$2'
- ],
-
- 'drink': [
- /(\(D\))($|\s|<)/g,
- '$2'
- ],
-
- 'flower': [
- /(@}-&gt;--)($|\s|<)/gi,
- '$2'
- ],
-
- 'frowning': [
- /((:-?\/)|(:-?S))($|\s|<)/gi,
- '$4'
- ],
-
- 'girl': [
- /(\(X\))($|\s|<)/g,
- '$2'
- ],
-
- 'heart': [
- /((&lt;3)|(\(L\)))($|\s|<)/g,
- '$4'
- ],
-
- 'hugleft': [
- /(\(}\))($|\s|<)/g,
- '$2'
- ],
-
- 'hugright': [
- /(\({\))($|\s|<)/g,
- '$2'
- ],
-
- 'kis': [
- /(:-?{})($|\s|<)/gi,
- '$2'
- ],
-
- 'lamp': [
- /(\(I\))($|\s|<)/g,
- '$2'
- ],
-
- 'lion': [
- /(:-?3)($|\s|<)/gi,
- '$2'
- ],
-
- 'mail': [
- /(\(E\))($|\s|<)/g,
- '$2'
- ],
-
- 'moon': [
- /(\(S\))($|\s|<)/g,
- '$2'
- ],
-
- 'music': [
- /(\(8\))($|\s|<)/g,
- '$2'
- ],
-
- 'oh': [
- /((=-?O)|(:-?O))($|\s|<)/gi,
- '$4'
- ],
-
- 'phone': [
- /(\(T\))($|\s|<)/g,
- '$2'
- ],
-
- 'photo': [
- /(\(P\))($|\s|<)/g,
- '$2'
- ],
-
- 'puke': [
- /(:-?!)($|\s|<)/gi,
- '$2'
- ],
-
- 'pussy': [
- /(\(@\))($|\s|<)/g,
- '$2'
- ],
-
- 'rainbow': [
- /(\(R\))($|\s|<)/g,
- '$2'
- ],
-
- 'smile': [
- /(:-?\))($|\s|<)/gi,
- '$2'
- ],
-
- 'star': [
- /(\(\*\))($|\s|<)/g,
- '$2'
- ],
-
- 'stare': [
- /(:-?\|)($|\s|<)/gi,
- '$2'
- ],
-
- 'thumbdown': [
- /(\(N\))($|\s|<)/g,
- '$2'
- ],
-
- 'thumbup': [
- /(\(Y\))($|\s|<)/g,
- '$2'
- ],
-
- 'tongue': [
- /(:-?P)($|\s|<)/gi,
- '$2'
- ],
-
- 'unhappy': [
- /(:-?\()($|\s|<)/gi,
- '$2'
- ],
-
- 'wink': [
- /(;-?\))($|\s|<)/gi,
- '$2'
- ]
-
- },
-
- 'formatting': {
- 'bold': [
- /(^|\s|>|\()((\*)([^<>'"\*]+)(\*))($|\s|<|\))/gi,
- '$1<b>$2</b>$6'
- ],
-
- 'italic': [
- /(^|\s|>|\()((\/)([^<>'"\/]+)(\/))($|\s|<|\))/gi,
- '$1<em>$2</em>$6'
- ],
-
- 'underline': [
- /(^|\s|>|\()((_)([^<>'"_]+)(_))($|\s|<|\))/gi,
- '$1<span style="text-decoration: underline;">$2</span>$6'
- ]
- }
-
- };
-
- self.xhtml_allow = {
- 'elements': [
- 'a',
- 'abbr',
- 'acronym',
- 'address',
- 'blockquote',
- 'body',
- 'br',
- 'cite',
- 'code',
- 'dd',
- 'dfn',
- 'div',
- 'dt',
- 'em',
- 'h1',
- 'h2',
- 'h3',
- 'h4',
- 'h5',
- 'h6',
- 'head',
- 'html',
- 'kbd',
- 'li',
- 'ol',
- 'p',
- 'pre',
- 'q',
- 'samp',
- 'span',
- 'strong',
- 'title',
- 'ul',
- 'var'
- ],
-
- 'attributes': [
- 'accesskey',
- 'alt',
- 'charset',
- 'cite',
- 'class',
- 'height',
- 'href',
- 'hreflang',
- 'id',
- 'longdesc',
- 'profile',
- 'rel',
- 'rev',
- 'src',
- 'style',
- 'tabindex',
- 'title',
- 'type',
- 'uri',
- 'version',
- 'width',
- 'xml:lang',
- 'xmlns'
- ]
- };
-
-
- /**
- * Generates a given emoticon HTML code
- * @public
- * @param {string} image
- * @param {string} text
- * @param {string} after
- * @return {string}
- */
- self.emoteImage = function(image, text, after) {
-
- try {
- return ' <img class="emoticon emoticon-' + image + ' smileys-images" alt="' + Common.encodeQuotes(text) + '" src="' + './images/others/blank.gif' + '" /> ' + after;
- } catch(e) {
- Console.error('Filter.emoteImage', e);
- }
-
- };
-
-
- /**
- * Filters a given message
- * @public
- * @param {string} message
- * @param {string} nick
- * @param {string} html_escape
- * @return {string}
- */
- self.message = function(message, nick, html_escape) {
-
- try {
- var filtered = message;
-
- // We encode the HTML special chars
- if(html_escape) {
- filtered = filtered.htmlEnc();
- }
-
- // Security: don't filter huge messages (avoids crash attacks)
- if(filtered.length < 10000) {
- // /me command
- filtered = filtered.replace(self.message_regex.commands.me, nick + ' $7');
-
- // We replace the smilies text into images
- var cur_emote;
-
- for(var cur_emote_name in self.message_regex.emotes) {
- cur_emote = self.message_regex.emotes[cur_emote_name];
-
- filtered = filtered.replace(
- cur_emote[0],
- self.emoteImage(
- cur_emote_name,
- '$1',
- cur_emote[1]
- )
- );
- }
-
- // Text formatting
- var cur_formatting;
-
- for(var cur_formatting_name in self.message_regex.formatting) {
- cur_formatting = self.message_regex.formatting[cur_formatting_name];
-
- filtered = filtered.replace(
- cur_formatting[0],
- cur_formatting[1]
- );
- }
-
- // Add the links
- if(html_escape) {
- filtered = Links.apply(filtered, 'desktop');
- }
-
- // Filter integratebox links
- filtered = IntegrateBox.filter(filtered);
- }
-
- return filtered;
- } catch(e) {
- Console.error('Filter.message', e);
- }
-
- };
-
-
- /**
- * Returns whether XHTML body exists or not
- * @public
- * @param {DOM} xhtml_sel
- * @return {boolean}
- */
- self.has_xhtml_body = function(xhtml_sel) {
-
- var has_xhtml_body = false;
-
- try {
- xhtml_sel.find('*').each(function() {
- if($(this).text()) {
- has_xhtml_body = true;
- return false;
- }
- });
- } catch(e) {
- Console.error('Filter.has_xhtml_body', e);
- } finally {
- return has_xhtml_body;
- }
-
- };
-
-
- /**
- * Filters a xHTML message to be displayed in Jappix
- * @public
- * @param {string} code
- * @return {string}
- */
- self.xhtml = function(code) {
-
- try {
- var code_sel = $(code);
-
- // Check if Filter for XHTML-IM images is enabled
- if(DataStore.getDB(Connection.desktop_hash, 'options', 'no-xhtml-images') != '1') {
- self.xhtml_allow.elements.push("img");
- }
-
- // Remove forbidden elements
- code_sel.find('html body *').each(function() {
- // This element is not authorized
- if(!Utils.existArrayValue(self.xhtml_allow.elements, (this).nodeName.toLowerCase())) {
- $(this).remove();
- }
- });
-
- // Remove forbidden attributes
- code_sel.find('html body *').each(function() {
- // Put a pointer on this element (jQuery way & normal way)
- var cSelector = $(this);
- var cElement = (this);
-
- // Loop the attributes of the current element
- $(cElement.attributes).each(function(index) {
- // Read the current attribute
- var cAttr = cElement.attributes[index];
- var cName = cAttr.name;
- var cVal = cAttr.value;
-
- // This attribute is not authorized, or contains JS code
- if(!Utils.existArrayValue(self.xhtml_allow.attributes, cName.toLowerCase()) ||
- ((cVal.toLowerCase()).match(/(^|"|')javascript:/))) {
- cSelector.removeAttr(cName);
- }
- });
- });
-
- // Filter some other elements
- code_sel.find('a').attr('target', '_blank');
-
- return code_sel.find('html body').html();
- } catch(e) {
- Console.error('Filter.xhtml', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/groupchat.js b/app/javascripts/groupchat.js
deleted file mode 100644
index 498331a7..00000000
--- a/app/javascripts/groupchat.js
+++ /dev/null
@@ -1,867 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the groupchat JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Authors: Valérian Saliou, Maranda, Eric
-
-*/
-
-// Bundle
-var Groupchat = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Variables */
- self.join_suggest = [];
-
-
- /**
- * Apply generate events
- * @private
- * @param {object} input_sel
- * @param {string} hash
- * @param {string} room
- * @return {undefined}
- */
- self._createEvents = function(input_sel, hash, room) {
-
- try {
- self._createEventsInput(input_sel, hash);
- self._createEventsKey(input_sel, hash, room);
- } catch(e) {
- Console.error('Groupchat._createEvents', e);
- }
-
- };
-
-
- /**
- * Apply generate events (input)
- * @private
- * @param {object} input_sel
- * @param {string} hash
- * @return {undefined}
- */
- self._createEventsInput = function(input_sel, hash) {
-
- try {
- // Focus event
- input_sel.focus(function() {
- // Clean notifications for this chat
- Interface.chanCleanNotify(hash);
-
- // Store focus on this chat!
- Interface.chat_focus_hash = hash;
- });
-
- // Blur event
- input_sel.blur(function() {
- // Reset storage about focus on this chat!
- if(Interface.chat_focus_hash == hash) {
- Interface.chat_focus_hash = null;
- }
-
- // Reset autocompletion
- Autocompletion.reset(hash);
- });
- } catch(e) {
- Console.error('Groupchat._createEventsInput', e);
- }
-
- };
-
-
- /**
- * Apply generate events (key)
- * @private
- * @param {object} input_sel
- * @param {string} hash
- * @param {string} room
- * @return {undefined}
- */
- self._createEventsKey = function(input_sel, hash, room) {
-
- try {
- // Lock to the input
- input_sel.keydown(function(e) {
- // Enter key
- if(e.keyCode == 13) {
- // If shift key (without any others modifiers) was pressed, add a new line
- if(e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey) {
- input_sel.val(input_sel.val() + '\n');
- } else {
- if(Correction.isIn(room) === true) {
- var corrected_value = input_sel.val().trim();
-
- if(corrected_value) {
- // Send the corrected message
- Correction.send(room, 'groupchat', corrected_value);
- }
-
- Correction.leave(room);
- } else {
- // Send the message
- Message.send(hash, 'groupchat');
-
- // Reset the composing database entry
- DataStore.setDB(Connection.desktop_hash, 'chatstate', room, 'off');
- }
- }
-
- return false;
- }
-
- // Remove chars (leave correction)
- else if(e.keyCode == 8) {
- // Leave correction mode? (another way, by flushing input value progressively)
- if(Correction.isIn(room) === true && !input_sel.val()) {
- Correction.leave(room);
- }
- }
-
- // Tabulation key (without any modifiers)
- else if(!e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey && e.keyCode == 9) {
- Autocompletion.create(hash);
-
- return false;
- }
-
- // Reset the autocompleter
- else {
- Autocompletion.reset(hash);
- }
- });
-
- input_sel.keyup(function(e) {
- if(e.keyCode == 27) {
- // Escape key
- input_sel.val('');
-
- // Leave correction mode? (simple escape way)
- if(Correction.isIn(room) === true) {
- Correction.leave(room);
- }
- } else {
- Correction.detect(room, input_sel);
- }
- });
- } catch(e) {
- Console.error('Groupchat._createEventsKey', e);
- }
-
- };
-
-
- /**
- * Apply suggest check events
- * @private
- * @return {undefined}
- */
- self._suggestCheckEvents = function() {
-
- try {
- // Click events
- $('#suggest .content a.one').click(function() {
- var this_sel = $(this);
-
- // Add/remove the active class
- this_sel.toggleClass('active');
-
- // We require at least one room to be chosen
- if(Common.exists('#suggest .content a.one.active')) {
- $('#suggest a.next').removeClass('disabled');
- } else {
- $('#suggest a.next').addClass('disabled');
- }
-
- return false;
- });
-
- $('#suggest a.next').click(function() {
- var this_sel = $(this);
-
- // Disabled?
- if(this_sel.hasClass('disabled')) {
- return false;
- }
-
- // Store groupchats to join?
- if(this_sel.is('.continue')) {
- $('#suggest .content a.one.active').each(function() {
- self.join_suggest.push(
- $(this).attr('data-xid')
- );
- });
- }
-
- // Switch to talk UI
- $('#suggest').remove();
- Connection.triggerConnected();
-
- return false;
- });
- } catch(e) {
- Console.error('Groupchat._suggestCheckEvents', e);
- }
-
- };
-
-
- /**
- * Displays the MUC admin elements
- * @public
- * @param {string} affiliation
- * @param {string} id
- * @param {string} xid
- * @param {number} statuscode
- * @return {undefined}
- */
- self.openAdmin = function(affiliation, id, xid, statuscode) {
-
- try {
- // We must be in the "login" mode
- if(Utils.isAnonymous()) {
- return;
- }
-
- // We check if the user is a room owner or administrator to give him privileges
- if(affiliation == 'owner' || affiliation == 'admin') {
- $('#' + id + ' .tools-mucadmin').show();
- }
-
- // We check if the room hasn't been yet created
- if(statuscode == 201) {
- Board.openThisInfo(4);
- }
-
- // We add the click event
- $('#' + id + ' .tools-mucadmin').click(function() {
- MUCAdmin.open(xid, affiliation);
- });
- } catch(e) {
- Console.error('Groupchat.openAdmin', e);
- }
-
- };
-
-
- /**
- * Initializes a connection with a MUC groupchat
- * @public
- * @param {string} room
- * @param {string} nickname
- * @param {string} password
- * @return {boolean}
- */
- self.getMUC = function(room, nickname, password) {
-
- try {
- // Room hash
- var hash = hex_md5(room);
-
- // Reset the elements
- $('#' + hash + ' .muc-ask').remove();
- $('#' + hash + ' .compose').show();
-
- // No nickname?
- if(!nickname) {
- // Get some values
- if(!Utils.isAnonymous()) {
- nickname = Name.getNick();
- } else {
- nickname = ANONYMOUS_NICK;
- }
-
- // If the nickname could not be retrieved, ask it
- if(!nickname) {
- self.generateMUCAsk('nickname', room, hash, nickname, password);
- }
- }
-
- // Got our nickname?
- if(nickname) {
- // Get our general presence
- var show = DataStore.getDB(Connection.desktop_hash, 'presence-show', 1);
- var status = DataStore.getDB(Connection.desktop_hash, 'options', 'presence-status');
-
- // Set my nick
- $('#' + hash).attr('data-nick', escape(nickname));
-
- // Send the appropriate presence
- Presence.send(room + '/' + nickname, '', show, status, '', true, password, self.handleMUC);
- }
- } catch(e) {
- Console.error('Groupchat.getMUC', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Handles the MUC main elements
- * @public
- * @param {object} presence
- * @return {undefined}
- */
- self.handleMUC = function(presence) {
-
- try {
- // We get the xml content
- var xml = presence.getNode();
- var from = Common.fullXID(Common.getStanzaFrom(presence));
- var room = Common.bareXID(from);
- var nickname = Common.thisResource(from);
- var hash = hex_md5(room);
- var id = presence.getID();
-
- // No ID: must fix M-Link bug
- if(id === null) {
- id = 1;
- presence.setID(id);
- }
-
- Console.info('First MUC presence: ' + from);
-
- // Catch the errors
- if(!Errors.handle(xml)) {
- // Define some stuffs
- var muc_user = $(xml).find('x[xmlns="' + NS_MUC_USER + '"]');
- var affiliation = muc_user.find('item').attr('affiliation');
- var statuscode = parseInt(muc_user.find('status').attr('code'));
-
- // Handle my presence
- Presence.handle(presence);
-
- // Configure the new room
- if(affiliation == 'owner' || affiliation == 'admin') {
- self._initialConfiguration(id, room);
- }
-
- // Check if I am a room owner
- self.openAdmin(affiliation, hash, room, statuscode);
-
- // Tell the MUC we can notify the incoming presences
- $(document).oneTime('15s', function() {
- $('#' + hash).attr('data-initial', 'true');
- });
-
- // Enable the chatting input
- $(document).oneTime(10, function() {
- $('#' + hash + ' .message-area').removeAttr('disabled').focus();
- });
- }
-
- // A password is required
- else if($(xml).find('error[type="auth"] not-authorized').size()) {
- self.generateMUCAsk('password', room, hash, nickname);
- }
-
- // There's a nickname conflict
- else if($(xml).find('error[type="cancel"] conflict').size()) {
- self.generateMUCAsk('nickname', room, hash);
- }
- } catch(e) {
- Console.error('Groupchat.handleMUC', e);
- }
-
- };
-
-
- /**
- * Generates a correct MUC asker
- * @public
- * @param {string} type
- * @param {string} room
- * @param {string} hash
- * @param {string} nickname
- * @param {string} password
- * @return {undefined}
- */
- self.generateMUCAsk = function(type, room, hash, nickname, password) {
-
- try {
- // Generate the path to the elements
- var path_to = '#' + hash + ' .muc-ask';
-
- // Define the label text
- var label_text, input_type;
-
- switch(type) {
- case 'nickname':
- label_text = Common._e("Nickname");
- input_type = 'text';
- break;
-
- case 'password':
- label_text = Common._e("Password");
- input_type = 'password';
- break;
- }
-
- // Create the HTML markup
- $('#' + hash + ' .compose').hide();
-
- $('#' + hash).append(
- '<div class="muc-ask text">' +
- '<label>' + label_text + '</label>' +
- '<input class="focusable" type="' + input_type + '" />' +
- '</div>'
- );
-
- // When a key is pressed in the input
- $(path_to + ' input').keyup(function(e) {
- var value_input = $(this).val();
-
- // Enter key pressed
- if(e.keyCode == 13) {
- // $.trim() fixes #304
- if(type == 'nickname' && $.trim(value_input)) {
- nickname = $.trim(value_input);
- return self.getMUC(room, nickname, password);
- }
-
- if(type == 'password' && value_input) {
- password = value_input;
- return self.getMUC(room, nickname, password);
- }
- }
- });
-
- // Focus on the input
- $(document).oneTime(10, function() {
- $(path_to + ' input').focus();
- });
- } catch(e) {
- Console.error('Groupchat.generateMUCAsk', e);
- }
-
- };
-
-
- /**
- * Creates a new groupchat
- * @public
- * @param {string} hash
- * @param {string} room
- * @param {string} chan
- * @param {string} nickname
- * @param {string} password
- * @return {undefined}
- */
- self.create = function(hash, room, chan, nickname, password) {
-
- /* REF: http://xmpp.org/extensions/xep-0045.html */
-
- try {
- Console.info('New groupchat: ' + room);
-
- // Create the chat content
- Chat.generate('groupchat', hash, room, chan);
-
- // Create the chat switcher
- Chat.generateSwitch('groupchat', hash, room, chan);
-
- // The icons-hover functions
- Tooltip.icons(room, hash);
-
- // Click event on the add tool
- $('#' + hash + ' .tools-add').click(function() {
- // Hide the icon (to tell the user all is okay)
- $(this).hide();
-
- // Add the groupchat to the user favorites
- Favorites.addThis(room, chan);
- });
-
- // Must show the add button?
- if(!DataStore.existDB(Connection.desktop_hash, 'favorites', room)) {
- $('#' + hash + ' .tools-add').show();
- }
-
- // The event handlers
- var input_sel = $('#' + hash + ' .message-area');
- self._createEvents(input_sel, hash, room);
-
- // Chatstate events
- ChatState.events(input_sel, room, hash, 'groupchat');
-
- // Get the current muc informations and content
- self.getMUC(room, nickname, password);
- } catch(e) {
- Console.error('Groupchat.create', e);
- }
-
- };
-
-
- /**
- * Generates a groupchat to join array
- * @public
- * @return {object}
- */
- self.arrayJoin = function() {
-
- try {
- // Values array
- var muc_arr = [GROUPCHATS_JOIN];
- var new_arr = [];
-
- // Try to split it
- if(GROUPCHATS_JOIN.indexOf(',') != -1) {
- muc_arr = GROUPCHATS_JOIN.split(',');
- }
-
- for(var i in muc_arr) {
- // Get the current value
- var muc_current = $.trim(muc_arr[i]);
-
- // No current value?
- if(!muc_current) {
- continue;
- }
-
- // Filter the current value
- muc_current = Common.generateXID(muc_current, 'groupchat');
-
- // Add the current value
- if(!Utils.existArrayValue(new_arr, muc_current)) {
- new_arr.push(muc_current);
- }
- }
-
- return new_arr;
- } catch(e) {
- Console.error('Groupchat.arrayJoin', e);
- }
-
- };
-
-
- /**
- * Joins the defined groupchats
- * @public
- * @return {undefined}
- */
- self.joinConf = function() {
-
- try {
- // Nothing to join?
- if(!self.join_suggest) {
- return;
- }
-
- // Join the chats
- if(self.join_suggest.length) {
- for(var g in self.join_suggest) {
- Chat.checkCreate(self.join_suggest[g], 'groupchat');
- }
- }
- } catch(e) {
- Console.error('Groupchat.joinConf', e);
- }
-
- };
-
-
- /**
- * Checks suggest utility
- * @public
- * @return {undefined}
- */
- self.suggestCheck = function() {
-
- try {
- var groupchat_arr = self.arrayJoin();
-
- // Must suggest the user?
- if((GROUPCHATS_SUGGEST == 'on') && groupchat_arr.length) {
- if(Common.exists('#suggest')) {
- return;
- }
-
- // Create HTML code
- var html = '<div id="suggest" class="removable">';
- html += '<div class="title">' + Common._e("Suggested chatrooms") + '</div>';
-
- html += '<div class="content">';
- for(var g in groupchat_arr) {
- html += '<a class="one" href="#" data-xid="' + Common.encodeQuotes(groupchat_arr[g]) + '">';
- html += '<span class="icon talk-images"></span>';
- html += '<span class="name">' + Utils.capitaliseFirstLetter(Common.getXIDNick(groupchat_arr[g]).htmlEnc()) + '</span>';
- html += '<span class="state talk-images"></span>';
- html += '<span class="clear"></span>';
- html += '</a>';
- }
- html += '</div>';
-
- html += '<div class="bottom">';
- html += '<a class="next continue disabled" href="#">' + Common._e("Continue") + '</a>';
- html += '<a class="next skip" href="#">' + Common._e("Skip") + '</a>';
- html += '</div>';
- html += '</div>';
-
- // Append HTML code
- $('body').append(html);
-
- // Attach events
- self._suggestCheckEvents();
- } else {
- self.join_suggest = groupchat_arr;
-
- Connection.triggerConnected();
- }
- } catch(e) {
- Console.error('Groupchat.suggestCheck', e);
- }
-
- };
-
-
- /**
- * Bans a user from given room
- * @public
- * @param {string} room_xid
- * @param {string} ban_xid
- * @param {string} reason
- * @return {object}
- */
- self.banUser = function(room_xid, ban_xid, reason) {
-
- try {
- // We check if the user exists
- if(!ban_xid) {
- Board.openThisInfo(6);
-
- Console.warn('Could not ban user with XID: ' + ban_xid + ' from room: ' + room_xid);
- } else {
- // We generate the ban IQ
- var iq = new JSJaCIQ();
- iq.setTo(room_xid);
- iq.setType('set');
-
- var iqQuery = iq.setQuery(NS_MUC_ADMIN);
- var item = iqQuery.appendChild(iq.buildNode('item', {
- 'affiliation': 'outcast',
- 'jid': ban_xid,
- 'xmlns': NS_MUC_ADMIN
- }));
-
- if(reason) {
- item.appendChild(iq.buildNode('reason', {
- 'xmlns': NS_MUC_ADMIN
- }, reason));
- }
-
- con.send(iq, Errors.handleReply);
-
- Console.log('Banned user with XID: ' + ban_xid + ' from room: ' + room_xid);
- }
- } catch(e) {
- Console.error('Groupchat.banUser', e);
- }
-
- };
-
-
- /**
- * Kicks a user from given room
- * @public
- * @param {string} room_xid
- * @param {string} kick_xid
- * @param {string} nick
- * @param {string} reason
- * @return {object}
- */
- self.kickUser = function(room_xid, kick_xid, nick, reason) {
-
- try {
- // We check if the user exists
- if(!room_xid) {
- Board.openThisInfo(6);
-
- Console.warning('Could not kick user "' + nick + '" from room: ' + room_xid);
- } else {
- // We generate the kick IQ
- var iq = new JSJaCIQ();
- iq.setTo(room_xid);
- iq.setType('set');
-
- var iqQuery = iq.setQuery(NS_MUC_ADMIN);
- var item = iqQuery.appendChild(iq.buildNode('item', {
- 'nick': nick,
- 'role': 'none',
- 'xmlns': NS_MUC_ADMIN
- }));
-
- if(reason) {
- item.appendChild(iq.buildNode('reason', {
- 'xmlns': NS_MUC_ADMIN
- }, reason));
- }
-
- con.send(iq, Errors.handleReply);
-
- Console.info('Kicked user "' + nick + '" from room: ' + room_xid);
- }
- } catch(e) {
- Console.error('Groupchat.kickUser', e);
- }
-
- };
-
-
- /**
- * Promotes an user as groupchat moderator
- * @public
- * @param {string} muc_xid
- * @param {string} user_xid
- * @return {object}
- */
- self.promoteModerator = function(muc_xid, user_xid) {
-
- try {
- MUCAdmin.setAffiliation(muc_xid, user_xid, 'admin');
- } catch(e) {
- Console.error('Groupchat.promoteModerator', e);
- }
-
- };
-
-
- /**
- * Demotes an user as being groupchat moderator
- * @public
- * @param {string} muc_xid
- * @param {string} user_xid
- * @return {object}
- */
- self.demoteModerator = function(muc_xid, user_xid) {
-
- try {
- MUCAdmin.setAffiliation(muc_xid, user_xid, 'none');
- } catch(e) {
- Console.error('Groupchat.demoteModerator', e);
- }
-
- };
-
-
- /**
- * Returns user affiliation in groupchat
- * @public
- * @param {string} muc_xid
- * @param {string} nick
- * @return {object}
- */
- self.affiliationUser = function(muc_xid, nick) {
-
- try {
- // Initial data
- var affiliations = ['none', 'member', 'admin', 'owner'];
- var affiliation = {
- code: 0,
- name: affiliations[0]
- };
-
- // Get user data
- var user_sel = $('#' + hex_md5(muc_xid) + ' .list .user[data-nick="' + escape(nick) + '"]');
-
- if(user_sel.size()) {
- var user_affiliation = user_sel.attr('data-affiliation');
-
- if(user_affiliation && Utils.existArrayValue(affiliations, user_affiliation)) {
- affiliation.code = Utils.indexArrayValue(affiliations, user_affiliation);
- affiliation.name = user_affiliation;
- }
- }
-
- return affiliation;
- } catch(e) {
- Console.error('Groupchat.affiliationUser', e);
- }
-
- };
-
-
- /**
- * Returns our affiliation in groupchat
- * @public
- * @param {string} muc_xid
- * @return {object}
- */
- self.affiliationMe = function(muc_xid) {
-
- try {
- // Get my nick
- var my_nick = unescape($('#' + hex_md5(muc_xid)).attr('data-nick') || '');
-
- // Return my affiliation
- return self.affiliationUser(muc_xid, my_nick);
- } catch(e) {
- Console.error('Groupchat.affiliationMe', e);
- }
-
- };
-
- /**
- * Sends initial configuration of the room
- * @private
- * @param {string} pid
- * @param {string} xid
- * @return {undefined}
- */
- self._initialConfiguration = function(pid, xid) {
-
- try {
- var iq = new JSJaCIQ();
-
- iq.setTo(xid);
- iq.setType('set');
- iq.setID('first-muc-config-' + pid);
-
- var iqQuery = iq.setQuery(NS_MUC_OWNER);
-
- // Configure room with nil(null) fields
- var iqX = iqQuery.appendChild(iq.buildNode('x', {
- 'xmlns': NS_XDATA,
- 'type': 'submit'
- }));
-
- // Build a new field node
- var iqField = iqX.appendChild(iq.buildNode('field', {
- 'var': 'FORM_TYPE',
- 'type': 'hidden',
- 'xmlns': NS_XDATA
- }));
-
- iqField.appendChild(iq.buildNode('value', {
- 'xmlns': NS_XDATA
- }, NS_MUC_CONFIG));
-
- con.send(iq);
-
- Console.info('Groupchat._initialConfiguration', 'Sent initial room configuration: ' + xid);
- } catch(e) {
- Console.error('Groupchat._initialConfiguration', e);
- }
- };
-
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
diff --git a/app/javascripts/home.js b/app/javascripts/home.js
deleted file mode 100644
index 06f86721..00000000
--- a/app/javascripts/home.js
+++ /dev/null
@@ -1,526 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the homepage JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Authors: Valérian Saliou, LinkMauve
-
-*/
-
-// Bundle
-var Home = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Apply change events
- * @private
- * @param {object} current_sel
- * @param {string} div
- * @return {undefined}
- */
- self._eventsChange = function(current_sel, div) {
-
- try {
- // Create the attached events
- switch(div) {
- // Login tool
- case 'loginer':
- current_sel.find('a.to-anonymous').click(function() {
- return self.change('anonymouser');
- });
-
- current_sel.find('a.advanced').click(self.showAdvanced);
- current_sel.find('form').submit(self.loginForm);
-
- break;
-
- // Anonymous login tool
- case 'anonymouser':
- current_sel.find('a.to-home').click(function() {
- return self.change('loginer');
- });
-
- current_sel.find('form').submit(Connection.doAnonymous);
-
- // Keyup event on anonymous join's room input
- current_sel.find('input.room').keyup(function() {
- var value = $(this).val();
- var report_sel = current_sel.find('.report');
- var span_sel = current_sel.find('span');
-
- if(!value) {
- report_sel.hide();
- span_sel.text('');
- } else {
- report_sel.show();
- span_sel.text(JAPPIX_LOCATION + '?r=' + value);
- }
- });
-
- break;
-
- // Register tool
- case 'registerer':
- // Server input change
- $('#home input.server').keyup(function(e) {
- if($.trim($(this).val()) == HOST_MAIN) {
- $('#home .captcha_grp').show();
- $('#home input.captcha').removeAttr('disabled');
- } else {
- $('#home .captcha_grp').hide();
- $('#home input.captcha').attr('disabled', true);
- }
- });
-
- // Register input placeholder
- // FIXME: breaks IE compatibility
- //$('#home input[placeholder]').placeholder();
-
- // Register form submit
- current_sel.find('form').submit(self.registerForm);
-
- break;
- }
- } catch(e) {
- Console.error('Home._eventsChange', e);
- }
-
- };
-
-
- /**
- * Create obsolete form
- * @private
- * @param {string} home
- * @param {string} locale
- * @return {undefined}
- */
- self._obsolete = function(home, locale) {
-
- try {
- // Add the code
- $(locale).after(
- '<div class="obsolete">' +
- '<p>' + Common._e("Your browser is out of date!") + '</p>' +
-
- '<a class="firefox browsers-images" title="' + Common.printf(Common._e("Last %s version is better!"), 'Mozilla Firefox') + '" href="http://www.mozilla.com/firefox/"></a>' +
- '<a class="chrome browsers-images" title="' + Common.printf(Common._e("Last %s version is better!"), 'Google Chrome') + '" href="http://www.google.com/chrome"></a>' +
- '<a class="safari browsers-images" title="' + Common.printf(Common._e("Last %s version is better!"), 'Safari') + '" href="http://www.apple.com/safari/"></a>' +
- '<a class="opera browsers-images" title="' + Common.printf(Common._e("Last %s version is better!"), 'Opera') + '" href="http://www.opera.com/"></a>' +
- '<a class="ie browsers-images" title="' + Common.printf(Common._e("Last %s version is better!"), 'Internet Explorer') + '" href="http://www.microsoft.com/hk/windows/internet-explorer/"></a>' +
- '</div>'
- );
-
- // Display it later
- $(home + '.obsolete').oneTime('1s', function() {
- $(this).slideDown();
- });
-
- Console.warn('Jappix does not support this browser!');
- } catch(e) {
- Console.error('Home._obsolete', e);
- }
-
- };
-
-
- /**
- * Allows the user to switch the difference home page elements
- * @public
- * @param {string} div
- * @return {boolean}
- */
- self.change = function(div) {
-
- try {
- // Path to
- var home = '#home .';
- var right = home + 'right ';
- var current = right + '.homediv.' + div;
-
- // We switch the div
- $(right + '.homediv, ' + right + '.top').hide();
- $(right + '.' + div).show();
-
- // We reset the homedivs
- $(home + 'homediv:not(.default), ' + home + 'top:not(.default)').remove();
-
- // Get the HTML code to display
- var disable_form = '';
- var lock_host = '';
- var code = '';
-
- // Apply the previous link
- switch(div) {
- case 'loginer':
- case 'anonymouser':
- case 'registerer':
- if(!Common.exists(right + '.top.sub')) {
- // Append the HTML code for previous link
- $(right + '.top.default').after('<h1 class="top sub loginer anonymouser registerer">&laquo; <a href="#" class="previous">' + Common._e("Previous") + '</a></h1>');
-
- // Click event on previous link
- $(home + 'top.sub a.previous').click(function() {
- return self.change('default');
- });
- }
-
- break;
- }
-
- // Apply the form
- switch(div) {
- // Login tool
- case 'loginer':
- lock_host = Utils.disableInput(LOCK_HOST, 'on');
- code = '<p>' + Common.printf(Common._e("Login to your existing XMPP account. You can also use the %s to join a groupchat."), '<a href="#" class="to-anonymous">' + Common._e("anonymous mode") + '</a>') + '</p>' +
-
- '<form action="#" method="post">' +
- '<fieldset>' +
- '<legend>' + Common._e("Required") + '</legend>' +
-
- '<label for="lnick">' + Common._e("Address") + '</label>' +
- '<input type="text" class="nick" id="lnick" pattern="[^@/]+" required="" /><span class="jid">@</span><input type="text" class="server" id="lserver" value="' + HOST_MAIN + '" ' + lock_host + ' pattern="[^@/]+" required="" list="server" />' +
- '<label for="lpassword">' + Common._e("Password") + '</label>' +
- '<input type="password" class="password" id="lpassword" required="" />' +
- '<label for="lremember">' + Common._e("Remember me") + '</label>' +
- '<input type="checkbox" class="remember" id="lremember" />' +
- '</fieldset>' +
-
- '<a href="#" class="advanced home-images">' + Common._e("Advanced") + '</a>' +
-
- '<fieldset class="advanced">' +
- '<legend>' + Common._e("Advanced") + '</legend>' +
-
- '<label for="lresource">' + Common._e("Resource") + '</label>' +
- '<input type="text" class="resource" id="lresource" value="' + JAPPIX_RESOURCE + '" />' +
- '<label for="lpriority">' + Common._e("Priority") + '</label>' +
- '<select class="priority" id="lpriority">' +
- '<option value="1">' + Common._e("Low") + '</option>' +
- '<option value="10" selected="">' + Common._e("Medium") + '</option>' +
- '<option value="100">' + Common._e("High") + '</option>' +
- '</select>' +
- '</fieldset>' +
-
- '<div class="submit">' +
- '<input type="submit" value="' + Common._e("Here we go!") + '" />' +
-
- '<div class="clear"></div>' +
- '</div>' +
- '</form>';
-
- break;
-
- // Anonymous login tool
- case 'anonymouser':
- disable_form = Utils.disableInput(ANONYMOUS, 'off');
- code = '<p>' + Common.printf(Common._e("Enter the groupchat you want to join and the nick you want to have. You can also go back to the %s."), '<a href="#" class="to-home">' + Common._e("login page") + '</a>') + '</p>';
-
- if(LEGAL) {
- code += '<p>' + Common.printf(Common._e("By using our service, you accept %s."), '<b><a href="' + Common.encodeQuotes(LEGAL) + '" target="_blank">' + Common._e("our terms of use") + '</a></b>') + '</p>';
- }
-
- code += '<form action="#" method="post">' +
- '<fieldset>' +
- '<legend>' + Common._e("Required") + '</legend>' +
-
- '<label>' + Common._e("Room") + '</label>' +
- '<input type="text" class="room"' + disable_form + ' pattern="[^/]+" required="" />' +
-
- '<label>' + Common._e("Nickname") + '</label>' +
- '<input type="text" class="nick"' + disable_form + ' required="" />' +
- '</fieldset>' +
-
- '<input type="submit" value="' + Common._e("Here we go!") + '"' + disable_form + ' />' +
- '</form>' +
-
- '<div class="info report">' +
- Common._e("Share this link with your friends:") + ' <span></span>' +
- '</div>';
-
- break;
-
- // Register tool
- case 'registerer':
- disable_form = Utils.disableInput(REGISTRATION, 'off');
-
- if(!disable_form) {
- lock_host = Utils.disableInput(LOCK_HOST, 'on');
- }
-
- code = '<p>' + Common._e("Register a new XMPP account to join your friends on your own social cloud. That's simple!") + '</p>';
-
- if(LEGAL) {
- code += '<p>' + Common.printf(Common._e("By using our service, you accept %s."), '<b><a href="' + Common.encodeQuotes(LEGAL) + '" target="_blank">' + Common._e("our terms of use") + '</a></b>') + '</p>';
- }
-
- code += '<form action="#" method="post">' +
- '<fieldset>' +
- '<legend>' + Common._e("Required") + '</legend>' +
-
- '<label for="rnick">' + Common._e("Address") + '</label>' +
- '<input type="text" class="nick" id="rnick" ' + disable_form + ' pattern="[^@/]+" required="" placeholder="' + Common._e("Username") + '" /><span class="jid">@</span><input type="text" class="server" id="rserver" value="' + HOST_MAIN + '" ' + disable_form + lock_host + ' pattern="[^@/]+" required="" list="server" placeholder="' + Common._e("Server") + '" />' +
- '<label for="rpassword">' + Common._e("Password") + '</label>' +
- '<input type="password" class="password" id="rpassword" ' + disable_form + ' required="" placeholder="' + Common._e("Enter password") + '" /><input type="password" class="spassword" id="spassword" ' + disable_form + ' required="" placeholder="' + Common._e("Once again...") + '" />';
-
- if(REGISTER_API == 'on') {
- code += '<div class="captcha_grp">' +
- '<label for="captcha">' + Common._e("Code") + '</label><input type="text" class="captcha" id="captcha" ' + disable_form + ' maxlength="6" pattern="[a-zA-Z0-9]{6}" required="" placeholder="' + Common._e("Security code") + '" /><img class="captcha_img" src="./server/captcha.php?id=' + genID() + '" alt="" />' +
- '</div>';
- }
-
- code += '</fieldset>' +
-
- '<input type="submit" value="' + Common._e("Here we go!") + '" ' + disable_form + '/>' +
- '</form>';
-
- break;
- }
-
- // Form disabled?
- if(disable_form) {
- code += '<div class="info fail">' +
- Common._e("This tool has been disabled!") +
- '</div>';
- }
-
- // Create this HTML code
- if(code && !Common.exists(current)) {
- $(right + '.homediv.default').after(
- '<div class="' + div + ' homediv">' + code + '</div>'
- );
-
- self._eventsChange(
- $(current),
- div
- );
- }
-
- // We focus on the first input
- $(document).oneTime(10, function() {
- $(right + 'input:visible:first').focus();
- });
- } catch(e) {
- Console.error('Home.change', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Allows the user to display the advanced login options
- * @public
- * @return {boolean}
- */
- self.showAdvanced = function() {
-
- try {
- // Hide the link
- $('#home a.advanced').hide();
-
- // Show the fieldset
- $('#home fieldset.advanced').show();
- } catch(e) {
- Console.error('Home.showAdvanced', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Reads the login form values
- * @public
- * @return {boolean}
- */
- self.loginForm = function() {
-
- try {
- // We get the values
- var path_sel = $('#home .loginer');
-
- var lServer = path_sel.find('.server').val();
- var lNick = Common.nodeprep(path_sel.find('.nick').val());
- var lPass = path_sel.find('.password').val();
- var lResource = path_sel.find('.resource').val();
- var lPriority = path_sel.find('.priority').val();
- var lRemember = path_sel.find('.remember').filter(':checked').size();
-
- // Enough values?
- if(lServer && lNick && lPass && lResource && lPriority) {
- Connection.doLogin(lNick, lServer, lPass, lResource, lPriority, lRemember);
- } else {
- $(lPath + 'input[type="text"], ' + lPath + 'input[type="password"]').each(function() {
- var select = $(this);
-
- if(!select.val()) {
- $(document).oneTime(10, function() {
- select.addClass('please-complete').focus();
- });
- } else {
- select.removeClass('please-complete');
- }
- });
- }
- } catch(e) {
- Console.error('Home.loginForm', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Reads the register form values
- * @public
- * @return {boolean}
- */
- self.registerForm = function() {
-
- try {
- var path = '#home .registerer';
- var path_sel = $(path);
-
- // Remove the success info
- path_sel.find('.success').remove();
-
- // Get the values
- var username = Common.nodeprep(path_sel.find('.nick').val());
- var domain = path_sel.find('.server').val();
- var pass = path_sel.find('.password').val();
- var spass = path_sel.find('.spassword').val();
- var captcha = path_sel.find('.captcha').val();
-
- // Enough values?
- if(domain && username && pass && spass && (pass == spass) && !((REGISTER_API == 'on') && (domain == HOST_MAIN) && !captcha)) {
- // We remove the not completed class to avoid problems
- $('#home .registerer input').removeClass('please-complete');
-
- // Fire the register event!
- Connection.doRegister(username, domain, pass, captcha);
- }
-
- // Something is missing?
- else {
- $(path + ' input[type="text"], ' + path + ' input[type="password"]').each(function() {
- var select = $(this);
-
- if(!select.val() || (select.is('#spassword') && pass && (pass != spass))) {
- $(document).oneTime(10, function() {
- select.addClass('please-complete').focus();
- });
- } else {
- select.removeClass('please-complete');
- }
- });
- }
- } catch(e) {
- Console.error('Home.registerForm', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @param {type} name
- * @return {undefined}
- */
- self.launch = function() {
-
- try {
- $(document).ready(function() {
- // Define the vars
- var home = '#home ';
- var button = home + 'button';
- var corp = home + '.corporation';
- var aboutus = home + '.aboutus';
- var locale = home + '.locale';
-
- // Removes the <noscript /> elements to lighten the DOM
- $('noscript').remove();
-
- // Allows the user to switch the home page
- $(button).click(function() {
- // Login button
- if($(this).is('.login')) {
- return self.change('loginer');
- }
-
- // Register button
- else {
- return self.change('registerer');
- }
- });
-
- // Allows the user to view the corporation & about infobox
- $(corp + ', ' + aboutus).hover(function() {
- $(this).addClass('hovered');
- }, function() {
- $(this).removeClass('hovered');
- });
-
- // Allows the user to switch the language
- $(locale).hover(function() {
- // Initialize the HTML code
- var keepget = $(locale).attr('data-keepget');
- var html = '<div class="list">';
-
- // Generate each locale HTML code
- for(var i in LOCALES_AVAILABLE_ID) {
- html += '<a href="./?l=' + LOCALES_AVAILABLE_ID[i] + keepget + '">' + LOCALES_AVAILABLE_NAMES[i].htmlEnc() + '</a>';
- }
-
- html += '</div>';
-
- // Append the HTML code
- $(locale).append(html);
- }, function() {
- $(locale + ' .list').remove();
- });
-
- // Disables the browser HTTP-requests stopper
- $(document).keydown(function(e) {
- if((e.keyCode == 27) && !System.isDeveloper()) {
- return false;
- }
- });
-
- // Warns for an obsolete browser
- if(Utils.isObsolete()) {
- self._obsolete();
- }
-
- Console.log('Welcome to Jappix! Happy coding in developer mode!');
- });
- } catch(e) {
- Console.error('Home.launch', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
-
-Home.launch();
diff --git a/app/javascripts/httpauth.js b/app/javascripts/httpauth.js
deleted file mode 100644
index 3a22a3e6..00000000
--- a/app/javascripts/httpauth.js
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the http-auth JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou, Kload
-
-*/
-
-// Bundle
-var HTTPAuth = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Login to a HTTP session
- * @public
- * @param {string} lNick
- * @param {string} lPass
- * @param {string} lServer
- * @param {number} lPriority
- * @return {boolean}
- */
- self.go = function(lNick, lPass, lServer, lPriority) {
-
- try {
- // We add the login wait div
- Interface.showGeneralWait();
-
- if(Common.hasWebSocket()) {
- // WebSocket supported & configured
- con = new JSJaCWebSocketConnection({
- httpbase: HOST_WEBSOCKET
- });
- } else {
- var httpbase = (HOST_BOSH_MAIN || HOST_BOSH);
-
- // Check BOSH origin
- BOSH_SAME_ORIGIN = Origin.isSame(httpbase);
-
- // We create the new http-binding connection
- con = new JSJaCHttpBindingConnection({
- httpbase: httpbase
- });
- }
-
- // And we handle everything that happen
- Connection.setupCon(con);
-
- // Generate a resource
- var random_resource = DataStore.getDB(Connection.desktop_hash, 'session', 'resource');
-
- if(!random_resource) {
- random_resource = JAPPIX_RESOURCE + ' (' + (new Date()).getTime() + ')';
- }
-
- // Generate a priority
- lPriority = lPriority ? lPriority : 10;
-
- // Store the resource (for reconnection)
- DataStore.setDB(Connection.desktop_hash, 'session', 'resource', random_resource);
-
- // Generate a session XML to be stored
- session_xml = '<session><stored>true</stored><domain>' + lServer.htmlEnc() + '</domain><username>' + lNick.htmlEnc() + '</username><resource>' + random_resource + '</resource><password>' + lPass.htmlEnc() + '</password><priority>' + (lPriority + '').htmlEnc() + '</priority></session>';
-
- // Save the session parameters (for reconnect if network issue)
- Connection.current_session = session_xml;
-
- // We store the infos of the user into the data-base
- DataStore.setDB(Connection.desktop_hash, 'priority', 1, 10);
-
- // We connect !
- con.connect({
- 'domain': $.trim(lServer),
- 'username': $.trim(lNick),
- 'resource': random_resource,
- 'pass': lPass,
- 'secure': true,
- 'xmllang': XML_LANG
- });
-
- // Change the page title
- Interface.title('wait');
-
- Console.info('Jappix is connecting...');
- } catch(e) {
- Console.error('HTTPAuth.go', e);
-
- // Reset Jappix
- Talk.destroy();
-
- // Open an unknown error
- Board.openThisError(2);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/httpreply.js b/app/javascripts/httpreply.js
deleted file mode 100644
index 38476169..00000000
--- a/app/javascripts/httpreply.js
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the http-reply JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var HTTPReply = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Replies to a HTTP request
- * @public
- * @param {string} value
- * @param {object} xml
- * @return {undefined}
- */
- self.go = function(value, xml) {
-
- try {
- // We parse the xml content
- var from = Common.fullXID(Common.getStanzaFrom(xml));
- var confirm = $(xml.getNode()).find('confirm');
- var xmlns = confirm.attr('xmlns');
- var id = confirm.attr('id');
- var method = confirm.attr('method');
- var url = confirm.attr('url');
-
- // We generate the reply message
- var aMsg = new JSJaCMessage();
- aMsg.setTo(from);
-
- // If "no"
- if(value == 'no') {
- aMsg.setType('error');
- aMsg.appendNode('error', {
- 'code': '401',
- 'type': 'auth'
- });
- }
-
- // We set the confirm node
- aMsg.appendNode('confirm', {
- 'xmlns': xmlns,
- 'url': url,
- 'id': id,
- 'method': method
- });
-
- // We send the message
- con.send(aMsg, Errors.handleReply);
-
- Console.info('Replying HTTP auth request: ' + from);
- } catch(e) {
- Console.error('HTTPReply.go', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/inbox.js b/app/javascripts/inbox.js
deleted file mode 100644
index 85d0f459..00000000
--- a/app/javascripts/inbox.js
+++ /dev/null
@@ -1,1002 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the inbox JS script for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Inbox = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Opens the inbox popup
- * @public
- * @return {boolean}
- */
- self.open = function() {
-
- try {
- // Popup HTML content
- var html =
- '<div class="top">' + Common._e("Your inbox") + '</div>' +
-
- '<div class="content">' +
- '<div class="head inbox-head">' +
- '<div class="head-text inbox-head-text">' + Common._e("Available actions") + '</div>' +
-
- '<div class="head-actions inbox-head-actions">' +
- '<a href="#" class="a-delete-messages">' + Common._e("Clean") + '</a>' +
- '<a href="#" class="a-new-message">' + Common._e("New") + '</a>' +
- '<a href="#" class="a-show-messages">' + Common._e("Received") + '</a>' +
- '</div>' +
- '</div>' +
-
- '<div class="inbox-results">' +
- '<p class="inbox-noresults">' + Common._e("Your inbox is empty.") + '</p>' +
-
- '<div class="inbox"></div>' +
- '</div>' +
-
- '<div class="inbox-new">' +
- '<div class="inbox-new-to inbox-new-block search">' +
- '<p class="inbox-new-text">' + Common._e("To") + '</p>' +
-
- '<input name="inbox-new-to-input" class="inbox-new-input inbox-new-to-input" type="text" required="" />' +
- '</div>' +
-
- '<div class="inbox-new-topic inbox-new-block">' +
- '<p class="inbox-new-text">' + Common._e("Subject") + '</p>' +
-
- '<input name="inbox-new-subject-input" class="inbox-new-input inbox-new-subject-input" type="text" required="" />' +
- '</div>' +
-
- '<div class="inbox-new-body inbox-new-block">' +
- '<p class="inbox-new-text">' + Common._e("Content") + '</p>' +
-
- '<textarea class="inbox-new-textarea" rows="8" cols="60" required=""></textarea>' +
- '</div>' +
-
- '<form class="inbox-new-file inbox-new-block" action="./server/file-share.php" method="post" enctype="multipart/form-data">' +
- '<p class="inbox-new-text">' + Common._e("File") + '</p>' +
-
- Interface.generateFileShare() +
- '</form>' +
-
- '<div class="inbox-new-send inbox-new-block">' +
- '<a href="#" class="send one-button talk-images">' + Common._e("Send message") + '</a>' +
- '</div>' +
- '</div>' +
- '</div>' +
-
- '<div class="bottom">' +
- '<div class="wait wait-medium"></div>' +
-
- '<a href="#" class="finish">' + Common._e("Close") + '</a>' +
- '</div>';
-
- // Create the popup
- Popup.create('inbox', html);
-
- // Associate the events
- self.instance();
-
- // Load the messages
- self.load();
- } catch(e) {
- Console.error('Inbox.open', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Closes the inbox popup
- * @public
- * @return {boolean}
- */
- self.close = function() {
-
- try {
- // Destroy the popup
- Popup.destroy('inbox');
- } catch(e) {
- Console.error('Inbox.close', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Opens the message compose tool
- * @public
- * @param {string} xid
- * @return {boolean}
- */
- self.composeMessage = function(xid) {
-
- try {
- // Open things
- self.open();
- self.newMessage();
-
- // Apply XID
- $('#inbox .inbox-new-to-input').val(xid);
-
- // Focus to the next item
- $(document).oneTime(10, function() {
- $('#inbox .inbox-new-subject-input').focus();
- });
- } catch(e) {
- Console.error('Inbox.composeMessage', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Stores the inbox
- * @public
- * @return {undefined}
- */
- self.store = function() {
-
- try {
- var iq = new JSJaCIQ();
- iq.setType('set');
- var query = iq.setQuery(NS_PRIVATE);
- var storage = query.appendChild(iq.buildNode('storage', {'xmlns': NS_INBOX}));
-
- var db_regex = new RegExp(('^' + Connection.desktop_hash + '_') + 'inbox' + ('_(.+)'));
-
- for(var i = 0; i < DataStore.storageDB.length; i++) {
- // Get the pointer values
- var current = DataStore.storageDB.key(i);
-
- // If the pointer is on a stored message
- if(current.match(db_regex)) {
- // Get the values
- var value = $(Common.XMLFromString(DataStore.storageDB.getItem(current)));
-
- // Create the storage node
- storage.appendChild(
- iq.buildNode('message', {
- 'id': value.find('id').text().revertHtmlEnc(),
- 'from': value.find('from').text().revertHtmlEnc(),
- 'subject': value.find('subject').text().revertHtmlEnc(),
- 'status': value.find('status').text().revertHtmlEnc(),
- 'date': value.find('date').text().revertHtmlEnc(),
- 'xmlns': NS_INBOX
- }, value.find('content').text().revertHtmlEnc()
- ));
- }
- }
-
- con.send(iq);
- } catch(e) {
- Console.error('Inbox.store', e);
- }
-
- };
-
-
- /**
- * Creates a new normal message
- * @public
- * @return {boolean}
- */
- self.newMessage = function() {
-
- try {
- // Init
- var inbox_sel = $('#inbox');
-
- // Reset the previous buddy search
- Search.resetBuddy('#inbox .inbox-new-to');
-
- // We switch the divs
- inbox_sel.find('.inbox-results, .a-new-message, .a-delete-messages').hide();
- inbox_sel.find('.inbox-new, .a-show-messages').show();
-
- // We focus on the first input
- $(document).oneTime(10, function() {
- inbox_sel.find('.inbox-new-to-input').focus();
- });
-
- // We reset some stuffs
- self.cleanNewMessage();
- } catch(e) {
- Console.error('Inbox.newMessage', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Cleans the inbox
- * @public
- * @return {undefined}
- */
- self.cleanNewMessage = function() {
-
- try {
- // Init
- var inbox_sel = $('#inbox');
-
- // We reset the forms
- inbox_sel.find('.inbox-new-block:not(form) input, .inbox-new textarea').val('').removeClass('please-complete');
- inbox_sel.find('.inbox-new-file a').remove();
- inbox_sel.find('.inbox-new-file input').show();
-
- // We close an eventual opened message
- inbox_sel.find('.message-content').remove();
- inbox_sel.find('.one-message').removeClass('message-reading');
- } catch(e) {
- Console.error('Inbox.cleanNewMessage', e);
- }
-
- };
-
-
- /**
- * Sends a normal message
- * @public
- * @param {string} to
- * @param {string} subject
- * @param {string} body
- * @return {undefined}
- */
- self.sendMessage = function(to, subject, body) {
-
- try {
- // We send the message
- var message = new JSJaCMessage();
-
- // Main attributes
- message.setTo(to);
- message.setSubject(subject);
- message.setType('normal');
-
- // Any file to attach?
- var attached = '#inbox .inbox-new-file a.file';
-
- if(Common.exists(attached)) {
- body += '\n' +
- '\n' +
- $(attached).attr('data-attachedtitle') + ' - ' + $(attached).attr('data-attachedhref');
- }
-
- // Set body
- message.setBody(body);
-
- con.send(message, Errors.handleReply);
- } catch(e) {
- Console.error('Inbox.sendMessage', e);
- }
-
- };
-
-
- /**
- * Performs the normal message sender checks
- * @public
- * @return {boolean}
- */
- self.checkMessage = function() {
-
- try {
- // We get some informations
- var inbox_sel = $('#inbox');
- var to = inbox_sel.find('.inbox-new-to-input').val();
- var body = inbox_sel.find('.inbox-new-textarea').val();
- var subject = inbox_sel.find('.inbox-new-subject-input').val();
-
- if(to && body && subject) {
- // New array of XID
- var xid = new Array(to);
-
- // More than one XID
- if(to.indexOf(',') != -1) {
- xid = to.split(',');
- }
-
- for(var i in xid) {
- var current = xid[i];
-
- // No current value?
- if(!current || current.match(/^(\s+)$/))
- continue;
-
- // Edit the XID if needed
- current = current.replace(/ /g, '');
- current = Common.generateXID(current, 'chat');
-
- // We send the message
- self.sendMessage(current, subject, body);
-
- // We clean the inputs
- self.cleanNewMessage();
-
- Console.info('Inbox message sent: ' + current);
- }
-
- // Close the inbox
- self.close();
- }
-
- else {
- inbox_sel.find('input[type="text"], textarea').each(function() {
- var this_sel = $(this);
-
- if(!this_sel.val()) {
- $(document).oneTime(10, function() {
- this_sel.addClass('please-complete').focus();
- });
- } else {
- this_sel.removeClass('please-complete');
- }
- });
- }
- } catch(e) {
- Console.error('Inbox.checkMessage', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Shows the inbox messages
- * @public
- * @return {boolean}
- */
- self.showMessage = function() {
-
- try {
- var inbox_sel = $('#inbox');
-
- // We switch the divs
- inbox_sel.find('.inbox-new').hide();
- inbox_sel.find('.inbox-results').show();
-
- // We show a new link in the menu
- inbox_sel.find('.a-show-messages').hide();
- inbox_sel.find('.a-delete-messages').show();
- inbox_sel.find('.a-new-message').show();
-
- // We reset some stuffs
- self.cleanNewMessage();
- } catch(e) {
- Console.error('Inbox.showMessage', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Displays a normal message
- * @public
- * @param {string} from
- * @param {string} subject
- * @param {string} content
- * @param {string} status
- * @param {string} id
- * @param {string} date
- * @return {boolean}
- */
- self.displayMessage = function(from, subject, content, status, id, date) {
-
- try {
- // Generate some paths
- var inbox = '#inbox .';
- var one_message = inbox + 'one-message.' + id;
-
- // Message yet displayed!
- if(Common.exists(one_message)) {
- return false;
- }
-
- // Get the nearest element
- var stamp = DateUtils.extractStamp(Date.jab2date(date));
- var nearest = Search.sortElementByStamp(stamp, '#inbox .one-message');
-
- // Get the buddy name
- var name = Name.getBuddy(from).htmlEnc();
-
- // We generate the html code
- var nContent = '<div class="one-message message-' + status + ' ' + id + ' ' + hex_md5(from) + '" data-stamp="' + stamp + '">' +
- '<div class="message-head">' +
- '<div class="avatar-container">' +
- '<img class="avatar" src="' + './images/others/default-avatar.png' + '" alt="" />' +
- '</div>' +
-
- '<div class="message-jid">' + name + '</div>' +
- '<div class="message-subject">' + subject.htmlEnc() + '</div>' +
-
- '<div class="message-truncated">' + Utils.truncate(Utils.noLines(content), 90).htmlEnc() + '</div>' +
- '</div>' +
- '</div>';
-
- // Display the message
- if(nearest === 0) {
- $(inbox + 'inbox-results .inbox').append(nContent);
- } else {
- $('#inbox .one-message[data-stamp="' + nearest + '"]:first').before(nContent);
- }
-
- // Click events
- $(one_message + ' .message-head').click(function() {
- if(!Common.exists(one_message + ' .message-content'))
- self.revealMessage(id, from, subject, content, name, date, status);
- else
- self.hideMessage(id);
-
- return false;
- });
-
- // Get the user avatar
- Avatar.get(from, 'cache', 'true', 'forget');
-
- return true;
- } catch(e) {
- Console.error('Inbox.displayMessage', e);
- }
-
- };
-
-
- /**
- * Stores an inbox message
- * @public
- * @param {string} from
- * @param {string} subject
- * @param {string} content
- * @param {string} status
- * @param {string} id
- * @param {string} date
- * @return {undefined}
- */
- self.storeMessage = function(from, subject, content, status, id, date) {
-
- try {
- // Initialize the XML data
- var xml = '<message>' +
- '<id>' + id.htmlEnc().htmlEnc() + '</id>' +
- '<date>' + date.htmlEnc().htmlEnc() + '</date>' +
- '<from>' + from.htmlEnc().htmlEnc() + '</from>' +
- '<subject>' + subject.htmlEnc().htmlEnc() + '</subject>' +
- '<status>' + status.htmlEnc().htmlEnc() + '</status>' +
- '<content>' + content.htmlEnc().htmlEnc() + '</content>' +
- '</message>';
-
- // Store this message!
- DataStore.setDB(Connection.desktop_hash, 'inbox', id, xml);
- } catch(e) {
- Console.error('Inbox.storeMessage', e);
- }
-
- };
-
-
- /**
- * Removes a given normal message
- * @public
- * @param {string} id
- * @return {boolean}
- */
- self.deleteMessage = function(id) {
-
- try {
- // Remove the message from the inbox
- $('#inbox .one-message.' + id).remove();
-
- // Remove the message from the database
- DataStore.removeDB(Connection.desktop_hash, 'inbox', id);
-
- // Check the unread messages
- self.checkMessages();
-
- // Store the new inbox
- self.store();
- } catch(e) {
- Console.error('Inbox.deleteMessage', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Removes all the inbox messages
- * @public
- * @return {boolean}
- */
- self.purge = function() {
-
- try {
- // Remove all the messages from the database
- var db_regex = new RegExp(('^' + Connection.desktop_hash + '_') + 'inbox' + ('_(.+)'));
-
- for(var i = 0; i < DataStore.storageDB.length; i++) {
- // Get the pointer values
- var current = DataStore.storageDB.key(i);
-
- // If the pointer is on a stored message
- if(current.match(db_regex)) {
- DataStore.removeDB(Connection.desktop_hash, 'inbox', RegExp.$1);
- }
- }
-
- // Prevent the database lag
- $(document).oneTime(100, function() {
- // Store the new inbox
- self.store();
-
- // Remove all the messages from the inbox
- $('#inbox .one-message').remove();
-
- // Reload the inbox
- self.load();
- });
- } catch(e) {
- Console.error('Inbox.purge', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Checks if there are new messages to be notified
- * @public
- * @return {boolean}
- */
- self.checkMessages = function() {
-
- try {
- // Selectors
- var inbox_link = '#top-content a.inbox-hidable';
- var no_results = '#inbox .inbox-noresults';
-
- // Marker
- var has_messages = false;
-
- // Read the number of unread messages
- var unread = 0;
-
- // Read the local inbox database
- var db_regex = new RegExp(('^' + Connection.desktop_hash + '_') + 'inbox' + ('_(.+)'));
-
- for(var i = 0; i < DataStore.storageDB.length; i++) {
- // Database pointer
- var current = DataStore.storageDB.key(i);
-
- // Check inbox messages
- if(current.match(db_regex)) {
- // Read the current status
- var status = $(Common.XMLFromString(DataStore.storageDB.getItem(current))).find('status').text();
-
- // Found an unread message
- if(status == 'unread') {
- unread++;
- }
-
- // Update the marker
- has_messages = true;
- }
- }
-
- // No message?
- if(!has_messages) {
- $(no_results).show();
- } else {
- $(no_results).hide();
- }
-
- // Reset notifications
- $(inbox_link + ' .notify').remove();
-
- // Any unread message?
- if(unread) {
- // Notify the user
- $(inbox_link).prepend('<div class="notify one-counter" data-counter="' + unread + '">' + unread + '</div>');
-
- // Update the title
- Interface.updateTitle();
-
- return true;
- }
-
- // Anyway, update the title
- Interface.updateTitle();
- } catch(e) {
- Console.error('Inbox.checkMessages', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Reveal a normal message content
- * @public
- * @param {string} id
- * @param {string} from
- * @param {string} subject
- * @param {string} content
- * @param {string} name
- * @param {string} date
- * @param {string} status
- * @return {undefined}
- */
- self.revealMessage = function(id, from, subject, content, name, date, status) {
-
- try {
- // Message path
- var all_message = '#inbox .one-message';
- var one_message = all_message + '.' + id;
- var one_content = one_message + ' .message-content';
-
- // We reset all the other messages
- $(all_message + ' .message-content').remove();
- $(all_message).removeClass('message-reading');
-
- // Message content
- var html =
- '<div class="message-content">' +
- '<div class="message-body">' + Filter.message(content, name, true) + '</div>' +
-
- '<div class="message-meta">' +
- '<span class="date">' + DateUtils.parse(date) + '</span>' +
-
- '<a href="#" class="reply one-button talk-images">' + Common._e("Reply") + '</a>' +
- '<a href="#" class="remove one-button talk-images">' + Common._e("Delete") + '</a>' +
-
- '<div class="clear">' +
- '</div>' +
- '</div>';
-
- // Message content
- html += '</div>';
-
- $(one_message).append(html).addClass('message-reading');
-
- // Click events
- $(one_content + ' a.reply').click(function() {
- return self.replyMessage(id, from, subject, content);
- });
-
- $(one_content + ' a.remove').click(function() {
- return self.deleteMessage(id);
- });
-
- // Unread message
- if(status == 'unread') {
- // Update our database
- var xml = DataStore.getDB(Connection.desktop_hash, 'inbox', id).replace(/<status>unread<\/status>/i,'<status>read</status>');
- DataStore.setDB(Connection.desktop_hash, 'inbox', id, xml);
-
- // Remove the unread class
- $(one_message).removeClass('message-unread');
-
- // Send it to the server!
- self.store();
- }
-
- // Check the unread messages
- self.checkMessages();
- } catch(e) {
- Console.error('Inbox.revealMessage', e);
- }
-
- };
-
-
- /**
- * Hides a normal message content
- * @public
- * @param {string} id
- * @return {undefined}
- */
- self.hideMessage = function(id) {
-
- try {
- // Define the paths
- var inbox = '#inbox .';
- var one_message = inbox + 'one-message.' + id;
-
- // Reset this message
- $(one_message).removeClass('message-reading');
- $(one_message + ' .message-content').remove();
- } catch(e) {
- Console.error('Inbox.hideMessage', e);
- }
-
- };
-
-
- /**
- * Replies to a given normal message
- * @public
- * @param {type} name
- * @return {boolean}
- */
- self.replyMessage = function(id, from, subject, body) {
-
- try {
- // We switch to the writing div
- self.newMessage();
-
- // Inbox path
- var inbox = '#inbox .';
-
- // Generate the body
- body = '\n' + '____________' + '\n\n' + Utils.truncate(body, 120);
-
- // We apply the generated values to the form
- $(inbox + 'inbox-new-to-input').val(from);
- $(inbox + 'inbox-new-subject-input').val(subject);
-
- $(document).oneTime(10, function() {
- $(inbox + 'inbox-new-textarea').val(body).focus().selectRange(1, 0);
- });
- } catch(e) {
- Console.error('Inbox.replyMessage', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Loads the inbox messages
- * @public
- * @return {undefined}
- */
- self.load = function() {
-
- try {
- // Read the local database
- var db_regex = new RegExp(('^' + Connection.desktop_hash + '_') + 'inbox' + ('_(.+)'));
-
- for(var i = 0; i < DataStore.storageDB.length; i++) {
- // Get the pointer values
- var current = DataStore.storageDB.key(i);
-
- // If the pointer is on a stored message
- if(current.match(db_regex)) {
- // Get the current value
- var value = $(Common.XMLFromString(DataStore.storageDB.getItem(current)));
-
- // Display the current message
- self.displayMessage(
- value.find('from').text().revertHtmlEnc(),
- value.find('subject').text().revertHtmlEnc(),
- value.find('content').text().revertHtmlEnc(),
- value.find('status').text().revertHtmlEnc(),
- value.find('id').text().revertHtmlEnc(),
- value.find('date').text().revertHtmlEnc()
- );
- }
- }
-
- // Check new messages
- self.checkMessages();
- } catch(e) {
- Console.error('Inbox.load', e);
- }
-
- };
-
-
- /**
- * Wait event for file attaching
- * @public
- * @return {undefined}
- */
- self.waitAttach = function() {
-
- try {
- $('#inbox .wait').show();
- } catch(e) {
- Console.error('Inbox.waitAttach', e);
- }
-
- };
-
-
- /**
- * Success event for file attaching
- * @public
- * @param {string} responseXML
- * @return {undefined}
- */
- self.handleAttach = function(responseXML) {
-
- try {
- // Data selector
- var dData = $(responseXML).find('jappix');
-
- // Process the returned data
- if(dData.find('error').size()) {
- Board.openThisError(4);
-
- Console.error('Error while attaching the file', dData.find('error').text());
- } else {
- // Get the file values
- var fName = dData.find('title').text();
- var fType = dData.find('type').text();
- var fURL = dData.find('href').text();
-
- // Hide the attach link, show the unattach one
- $('#inbox .inbox-new-file input').hide();
- $('#inbox .inbox-new-file').append(
- '<a class="file ' + Common.encodeQuotes(Utils.fileCategory(Common.explodeThis('/', fType, 1))) + ' talk-images" ' +
- 'href="' + Common.encodeQuotes(fURL) + '" ' +
- 'target="_blank">' +
- fName.htmlEnc() +
- '</a>' +
-
- '<a href="#" class="remove one-button talk-images">' +
- Common._e("Remove") +
- '</a>'
- );
-
- // Set values to the file link
- var inbox_file_sel = $('#inbox .inbox-new-file a.file');
-
- inbox_file_sel.attr('data-attachedtitle', fName);
- inbox_file_sel.attr('data-attachedhref', fURL);
-
- // Click events
- var inbox_new_file_sel = $('#inbox .inbox-new-file');
-
- inbox_new_file_sel.find('a.remove').click(function() {
- inbox_new_file_sel.find('a').remove();
- inbox_new_file_sel.find('input').show();
-
- return false;
- });
-
- Console.info('File attached.');
- }
-
- // Reset the attach bubble
- $('#inbox .inbox-new-file input[type="file"]').val('');
- $('#inbox .wait').hide();
- } catch(e) {
- Console.error('Inbox.handleAttach', e);
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.instance = function() {
-
- try {
- // Define the pats
- var inbox = '#inbox .';
-
- // Define the buddy search vars
- var destination = inbox + 'inbox-new-to';
- var dHovered = destination + ' ul li.hovered:first';
-
- // Send the message when enter pressend
- $(inbox + 'inbox-new input').keyup(function(e) {
- if(e.keyCode == 13) {
- if(Common.exists(dHovered)) {
- Search.addBuddy(destination, $(dHovered).attr('data-xid'));
- } else {
- self.checkMessage();
- }
- }
- });
-
- // Buddy search
- $(inbox + 'inbox-new-to-input').keyup(function(e) {
- if(e.keyCode != 13) {
- // New buddy search
- if((e.keyCode != 40) && (e.keyCode != 38)) {
- Search.createBuddy(destination);
- }
-
- // Navigating with keyboard in the results
- Search.arrowsBuddy(e, destination);
- }
- })
-
- // Buddy search lost focus
- .blur(function() {
- if(!$(destination + ' ul').attr('mouse-hover')) {
- Search.resetBuddy(destination);
- }
- })
-
- // Buddy search got focus
- .focus(function() {
- var value = $(this).val();
-
- // Add a comma at the end
- if(value && !value.match(/^(.+)((,)(\s)?)$/)) {
- $(this).val(value + ', ');
- }
- });
-
- // Click events
- $(inbox + 'a-delete-messages').click(self.purge);
- $(inbox + 'a-new-message').click(self.newMessage);
- $(inbox + 'a-show-messages').click(self.showMessage);
- $(inbox + 'inbox-new-send a').click(self.checkMessage);
-
- $(inbox + 'bottom .finish').click(function() {
- return self.close();
- });
-
- // File upload
- var attach_options = {
- dataType: 'xml',
- beforeSubmit: self.waitAttach,
- success: self.handleAttach
- };
-
- // Upload form submit event
- $('#inbox .inbox-new-file').submit(function() {
- if($('#inbox .wait').is(':hidden') && $('#inbox .inbox-new-file input[type="file"]').val()) {
- $(this).ajaxSubmit(attach_options);
- }
-
- return false;
- });
-
- // Upload input change event
- $('#inbox .inbox-new-file input[type="file"]').change(function() {
- if($('#inbox .wait').is(':hidden') && $(this).val()) {
- $('#inbox .inbox-new-file').ajaxSubmit(attach_options);
- }
-
- return false;
- });
- } catch(e) {
- Console.error('Inbox.instance', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/integratebox.js b/app/javascripts/integratebox.js
deleted file mode 100644
index 0ff0d392..00000000
--- a/app/javascripts/integratebox.js
+++ /dev/null
@@ -1,470 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the integratebox JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var IntegrateBox = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Opens the integratebox popup
- * @public
- * @return {undefined}
- */
- self.open = function() {
-
- try {
- // Popup HTML content
- var html =
- '<div class="top">' + Common._e("Media viewer") + '</div>' +
-
- '<div class="content"></div>' +
-
- '<div class="bottom">' +
- '<div class="wait wait-medium"></div>' +
-
- '<a href="#" class="finish close">' + Common._e("Close") + '</a>' +
- '<a href="#" class="finish next disabled" title="' + Common._e("Next") + '">&gt;</a>' +
- '<a href="#" class="finish previous disabled" title="' + Common._e("Previous") + '">&lt;</a>' +
- '</div>';
-
- // Create the popup
- Popup.create('integratebox', html);
-
- // Associate the events
- self.instance();
- } catch(e) {
- Console.error('IntegrateBox.open', e);
- }
-
- };
-
-
- /**
- * Closes the integratebox popup
- * @public
- * @return {boolean}
- */
- self.close = function() {
-
- try {
- // Destroy the popup
- Popup.destroy('integratebox');
- } catch(e) {
- Console.error('IntegrateBox.close', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Generates the integratebox HTML code
- * @public
- * @param {string} serv
- * @param {string} url
- * @return {string}
- */
- self.code = function(serv, url) {
-
- try {
- var code = '';
-
- // Protocol to use
- var protocol = Utils.isHTTPS() ? 'https' : 'http';
-
- // Legacy browser
- var legacy = false;
-
- if((BrowserDetect.browser == 'Explorer') && (BrowserDetect.version < 9)) {
- legacy = true;
- }
-
- // Switch to get the good DOM code
- switch(serv) {
- case 'youtube':
- if(legacy) {
- code = '<object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/' + url + '&amp;autoplay=1"></param><embed src="http://www.youtube.com/v/' + Common.encodeQuotes(url) + '&amp;autoplay=1" type="application/x-shockwave-flash" width="640" height="385"></embed></object>';
- } else {
- code = '<object width="640" height="385" data="' + Common.encodeQuotes(protocol) + '://www.youtube.com/embed/' + Common.encodeQuotes(url) + '?autoplay=1" type="text/html"><a href="http://www.youtube.com/watch?v=' + Common.encodeQuotes(url) + '" target="_blank">http://www.youtube.com/watch?v=' + Common.encodeQuotes(url) + '</a></object>';
- }
-
- break;
-
- case 'dailymotion':
- code = '<object width="640" height="385"><param name="movie" value="http://www.dailymotion.com/swf/video/' + url + '&amp;autoplay=1"></param><param name="allowFullScreen" value="false"></param><embed type="application/x-shockwave-flash" src="http://www.dailymotion.com/swf/video/' + Common.encodeQuotes(url) + '&amp;autoplay=1" width="640" height="385" allowfullscreen="true" allowscriptaccess="always"></embed></object>';
-
- break;
-
- case 'vimeo':
- code = '<object width="640" height="385"><param name="allowfullscreen" value="true" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=' + Common.encodeQuotes(url) + '&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1&amp;autoplay=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=' + Common.encodeQuotes(url) + '&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1&amp;autoplay=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="640" height="385"></embed></object>';
-
- break;
-
- case 'theora':
- case 'video':
- code = '<video width="640" height="385" src="' + Common.encodeQuotes(url) + '" controls autoplay><a href="' + Common.encodeQuotes(url) + '" target="_blank">' + Common.encodeQuotes(url) + '</a></video>';
-
- break;
-
- case 'vorbis':
- case 'audio':
- code = '<audio src="' + Common.encodeQuotes(url) + '" controls autoplay><a href="' + Common.encodeQuotes(url) + '" target="_blank">' + Common.encodeQuotes(url) + '</a></audio>';
-
- break;
-
- case 'image':
- code = '<a href="' + Common.encodeQuotes(url) + '" target="_blank"><img alt="" src="' + Common.encodeQuotes(url) + '" /></a>';
-
- break;
- }
-
- return code;
- } catch(e) {
- Console.error('IntegrateBox.code', e);
- }
-
- };
-
-
- /**
- * Applies a given integratebox element
- * @public
- * @param {string} url
- * @param {string} service
- * @param {string} url_list
- * @param {string} services_list
- * @param {string} comments_e_list
- * @param {string} comments_n_list
- * @param {string} width_style
- * @return {boolean}
- */
- self.apply = function(url, service, url_list, services_list, comments_e_list, comments_n_list, width_style) {
-
- try {
- // Close the integratebox
- self.close();
-
- // Media integration not wanted?
- if(DataStore.getDB(Connection.desktop_hash, 'options', 'integratemedias') == '0') {
- return true;
- }
-
- // Apply the HTML code
- var dom_code = self.code(service, url);
-
- // Any code: apply it!
- if(dom_code) {
- // We show the integratebox
- self.open();
-
- // We add the code to the DOM
- $('#integratebox .content').prepend('<div class="one-media">' + dom_code + '</div>');
-
- // Image waiting icon
- if(service == 'image') {
- var waitItem = $('#integratebox .wait');
-
- // Show it while it is loading
- waitItem.show();
-
- // Hide it when it is loaded
- $('#integratebox img').load(function() {
- waitItem.hide();
-
- // Center the image vertically
- $(this).oneTime(10, function() {
- $(this).css('margin-top', (($('#integratebox .content').height() - $(this).height()) / 2));
- });
- });
- }
-
- // Large style?
- var comments_id = genID();
-
- if(width_style == 'large') {
- // Make the popup large
- $('#integratebox .popup').addClass('large');
-
- // Add the right content
- $('#integratebox .content').after(
- '<div class="comments" data-id="' + Common.encodeQuotes(comments_id) + '">' +
- '<div class="comments-content">' +
- '<div class="one-comment loading"><span class="icon talk-images"></span>' + Common._e("Loading comments...") + '</div>' +
- '</div>' +
- '</div>'
- );
- }
-
- // Previous and next items?
- var url_array = Utils.stringToArray(url_list);
- var services_array = Utils.stringToArray(services_list);
- var comments_e_array = Utils.stringToArray(comments_e_list);
- var comments_n_array = Utils.stringToArray(comments_n_list);
- var index = Utils.indexArrayValue(url_array, url);
-
- // Any comments?
- if(Common.exists('#integratebox .comments')) {
- if(comments_e_array[index] && comments_n_array[index]) {
- Microblog.getComments(comments_e_array[index], comments_n_array[index], comments_id);
- } else {
- $('#integratebox .comments .comments-content').html('<div class="one-comment loading"><span class="icon talk-images"></span>' + Common._e("Comments locked!") + '</div>');
- }
- }
-
- // Get the previous values
- var previous_url = url_array[index - 1];
- var previous_services = services_array[index - 1];
-
- // Get the next values
- var next_url = url_array[index + 1];
- var next_services = services_array[index + 1];
-
- // Enable/disable buttons
- if(previous_url && previous_services) {
- $('#integratebox .bottom .finish.previous').removeClass('disabled');
- } else {
- $('#integratebox .bottom .finish.previous').addClass('disabled');
- }
-
- if(next_url && next_services) {
- $('#integratebox .bottom .finish.next').removeClass('disabled');
- } else {
- $('#integratebox .bottom .finish.next').addClass('disabled');
- }
-
- // Click events
- $('#integratebox .bottom .finish.previous, #integratebox .bottom .finish.next').click(function() {
- // Not acceptable?
- if($(this).is('.disabled')) {
- return false;
- }
-
- // Apply the event!
- if($(this).is('.previous')) {
- self.apply(previous_url, previous_services, url_list, services_list, comments_e_list, comments_n_list, width_style);
- } else {
- self.apply(next_url, next_services, url_list, services_list, comments_e_list, comments_n_list, width_style);
- }
-
- return false;
- });
-
- if(width_style == 'large')
- $('#integratebox .content a:has(img)').click(function() {
- if(next_url && next_services) {
- self.apply(next_url, next_services, url_list, services_list, comments_e_list, comments_n_list, width_style);
- }
-
- return false;
- });
-
- return false;
- }
-
- // Nothing: return true to be able to open the URL in a new tab
- return true;
- } catch(e) {
- Console.error('IntegrateBox.apply', e);
- }
-
- };
-
-
- /**
- * Checks whether the file ext can use integratebox or not
- * @public
- * @param {string} ext
- * @return {boolean}
- */
- self.can = function(ext) {
-
- can_use = false;
-
- try {
- // Can use?
- if(ext && ((ext == 'jpg') || (ext == 'jpeg') || (ext == 'png') || (ext == 'gif') || (ext == 'ogg') || (ext == 'oga') || (ext == 'ogv'))) {
- can_use = true;
- }
- } catch(e) {
- Console.error('IntegrateBox.can', e);
- } finally {
- return can_use;
- }
-
- };
-
-
- /**
- * Filters a string to apply the integratebox links
- * @public
- * @param {string} data
- * @return {string}
- */
- self.filter = function(data) {
-
- try {
- // Encapsulates the string into two <div /> elements
- var xml = $('<div><div>' + data + '</div></div>').contents();
-
- // Loop the <a /> elements
- $(xml).find('a').each(function() {
- // Initialize this element
- var href = $(this).attr('href');
- var to, url, service, event;
-
- // XMPP ID
- if(href.match(/^xmpp:(.+)/i)) {
- to = RegExp.$1;
- }
-
- // YouTube video box
- else if(href.match(/(\w{3,5})(:)(\S+)((\.youtube\.com\/watch(\?v|\?\S+v|\#\!v|\#\!\S+v)\=)|(youtu\.be\/))([^& ]+)((&amp;\S)|(&\S)|\s|$)/gim)) {
- url = RegExp.$8;
- service = 'youtube';
- }
-
- // Dailymotion video box
- else if(href.match(/(\w{3,5})(:)(\S+)\.dailymotion\.com\/video\/([\w\-]+)((\#[\w\-]+)|\s|$)/gim)) {
- url = RegExp.$4;
- service = 'dailymotion';
- }
-
- // Vimeo video box
- else if(href.match(/((\w{3,5})(:)(\S+)(vimeo|www\.vimeo)\.com\/([\w\-]+))/gim)) {
- url = RegExp.$6;
- service = 'vimeo';
- }
-
- // Theora video box
- else if(href.match(/((\w{3,5})(:)(\S+)(\.)(ogv|ogg))/gim)) {
- url = RegExp.$1;
- service = 'theora';
- }
-
- // Vorbis audio box
- else if(href.match(/((\w{3,5})(:)(\S+)(\.oga))/gim)) {
- url = RegExp.$1;
- service = 'vorbis';
- }
-
- // Image box
- else if(href.match(/((\w{3,5})(:)(\S+)(\.)(jpg|jpeg|png|gif|tif|bmp))/gim)) {
- url = RegExp.$1;
- service = 'image';
- }
-
- // Define the good event
- if(to) {
- event = 'XMPPLinks.go(\'' + Utils.encodeOnclick(to) + '\')';
- } else if(url && service) {
- event = 'IntegrateBox.apply(\'' + Utils.encodeOnclick(url) + '\', \'' + Utils.encodeOnclick(service) + '\')';
- }
-
- // Any click event to apply?
- if(event) {
- // Regenerate the link element (for onclick)
- var new_a = '<a';
- var element_a = (this);
-
- // Attributes
- $(element_a.attributes).each(function(index) {
- // Read the current attribute
- var current_attr = element_a.attributes[index];
-
- // Apply the current attribute
- new_a += ' ' + Common.encodeQuotes(current_attr.name) + '="' + Common.encodeQuotes(current_attr.value) + '"';
- });
-
- // Add onclick attribute
- new_a += ' onclick="return ' + event + ';"';
-
- // Value
- new_a += '>' + $(this).html() + '</a>';
-
- // Replace it!
- $(this).replaceWith(new_a);
- }
- });
-
- // Regenerate the HTML code (include string into a div to be readable)
- var string = $(xml).html();
-
- return string;
- } catch(e) {
- Console.error('IntegrateBox.filter', e);
- }
-
- };
-
-
- /**
- * Instance launcher
- * @public
- * @return {undefined}
- */
- self.instance = function() {
-
- try {
- // Click event
- $('#integratebox .bottom .finish.close').click(self.close);
- } catch(e) {
- Console.error('IntegrateBox.instance', e);
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.launch = function() {
-
- try {
- $(document).keyup(function(e) {
- // Previous item?
- if((Common.exists('#integratebox .bottom .finish.previous:not(.disabled)')) && (e.keyCode == 37)) {
- $('#integratebox .bottom .finish.previous').click();
-
- return false;
- }
-
- // Next item?
- if((Common.exists('#integratebox .bottom .finish.next:not(.disabled)')) && (e.keyCode == 39)) {
- $('#integratebox .bottom .finish.next').click();
-
- return false;
- }
- });
- } catch(e) {
- Console.error('IntegrateBox.launch', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
-
-IntegrateBox.launch(); \ No newline at end of file
diff --git a/app/javascripts/interface.js b/app/javascripts/interface.js
deleted file mode 100644
index 4dce7bdd..00000000
--- a/app/javascripts/interface.js
+++ /dev/null
@@ -1,784 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the interface JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Interface = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Variables */
- self.chat_focus_hash = null;
-
-
- /**
- * Changes the title of the document
- * @public
- * @param {string} new_title
- * @return {undefined}
- */
- self.title = function(title_type) {
-
- try {
- // Anonymous mode?
- var head_name = Name.get();
-
- if(Utils.isAnonymous()) {
- head_name = ANONYMOUS_ROOM + ' (' + Common._e("anonymous mode") + ')';
- }
-
- // We change the title to give essential informations
- switch(title_type) {
- case 'home':
- document.title = SERVICE_NAME + ' • ' + SERVICE_DESC;
- break;
-
- case 'talk':
- document.title = SERVICE_NAME + ' • ' + head_name;
- break;
-
- case 'new':
- document.title = '[' + self.pendingEvents() + '] ' + SERVICE_NAME + ' • ' + head_name;
- break;
-
- case 'wait':
- document.title = SERVICE_NAME + ' • ' + Common._e("Please wait...");
- break;
- }
- } catch(e) {
- Console.error('Interface.title', e);
- }
-
- };
-
-
- /**
- * Creates a general-wait item
- * @public
- * @return {boolean}
- */
- self.showGeneralWait = function() {
-
- try {
- // Item exists?
- if(Common.exists('#general-wait')) {
- return false;
- }
-
- // Generate the HTML code
- var html =
- '<div id="general-wait" class="removable">' +
- '<div class="general-wait-content wait-big"></div>' +
- '</div>';
-
- // Append the HTML code
- $('body').append(html);
-
- return true;
- } catch(e) {
- Console.error('Interface.showGeneralWait', e);
- }
-
- };
-
-
- /**
- * Removes the general-wait item
- * @public
- * @return {undefined}
- */
- self.removeGeneralWait = function() {
-
- try {
- $('#general-wait').remove();
- } catch(e) {
- Console.error('Interface.removeGeneralWait', e);
- }
-
- };
-
-
- /**
- * Generates a file upload valid form content
- * @public
- * @return {undefined}
- */
- self.generateFileShare = function() {
-
- try {
- return '<input type="hidden" name="MAX_FILE_SIZE" value="' + Common.encodeQuotes(JAPPIX_MAX_FILE_SIZE) + '">' +
- '<input type="hidden" name="user" value="' + Common.encodeQuotes(Common.getXID()) + '" />' +
- '<input type="hidden" name="location" value="' + Common.encodeQuotes(Utils.generateURL(JAPPIX_LOCATION)) + '" />' +
- '<input type="hidden" name="id" value="' + (new Date()).getTime() + '" />' +
- '<input type="file" name="file" required="" />' +
- '<input type="submit" value="' + Common._e("Send") + '" />';
- } catch(e) {
- Console.error('Interface.generateFileShare', e);
- }
-
- };
-
-
- /**
- * Switches to the given chan
- * @public
- * @param {string} id
- * @return {boolean}
- */
- self.switchChan = function(id) {
-
- try {
- if(Common.exists('#' + id)) {
- // We show the page-engine content
- $('.page-engine-chan').hide();
- $('#' + id).show();
-
- // We edit the tab switcher
- $('#page-switch .switcher').removeClass('activechan').addClass('chan');
- $('#page-switch .' + id).addClass('activechan').removeClass('chan');
-
- // Scroll down to the last message
- if(id != 'channel') {
- self.autoScroll(id);
- }
-
- // Manage input focus
- self.inputFocus();
- }
- } catch(e) {
- Console.error('Interface.switchChan', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Loads the complete chat switcher
- * @public
- * @return {undefined}
- */
- self.loadChatSwitch = function() {
-
- try {
- // Path
- var more_content = '#page-switch .more-content';
-
- // Yet displayed?
- if(Common.exists(more_content)) {
- return Bubble.close();
- }
-
- // Add the bubble
- Bubble.show(more_content);
-
- // Append the content
- $('#page-switch .more').append(
- '<div class="more-content bubble removable">' +
- $('#page-switch .chans').html() +
- '</div>'
- );
- } catch(e) {
- Console.error('Interface.loadChatSwitch', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Loads the groupchat joiner
- * @public
- * @return {undefined}
- */
- self.loadJoinGroupchat = function() {
-
- try {
- // Path
- var join_content = '#page-switch .join-content';
- var join_sel = $('#page-switch .join');
-
- // Yet displayed?
- if(Common.exists(join_content))
- return Bubble.close();
-
- // Add the bubble
- Bubble.show(join_content);
-
- // Append the content
- join_sel.append(
- '<div class="join-content bubble removable">' +
- '<input type="text" class="join-groupchat-xid" required="" placeholder="' + Common._e("Groupchat name") + '" />' +
- '</div>'
- );
-
- var input_sel = join_sel.find('input.join-groupchat-xid');
-
- input_sel.keyup(function(e) {
- // Enter: continue
- if(e.keyCode == 13) {
- var this_sel = $(this);
- var xid = $.trim(this_sel.val());
-
- if(xid) {
- // Generate a correct XID
- xid = Common.generateXID(xid, 'groupchat');
-
- Bubble.close();
- Chat.checkCreate(xid, 'groupchat');
- } else {
- this_sel.addClass('please-complete');
- }
-
- return false;
- }
- });
-
- $(document).oneTime(10, function() {
- input_sel.focus();
- });
- } catch(e) {
- Console.error('Interface.loadJoinGroupchat', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Puts the selected smiley in the good page-engine input
- * @public
- * @param {string} smiley
- * @param {string} hash
- * @return {boolean}
- */
- self.insertSmiley = function(smiley, hash) {
-
- try {
- // We define the variables
- var selector = $('#' + hash + ' .message-area');
- var oValue = selector.val();
-
- // Any old value?
- if(oValue && !oValue.match(/^(.+)(\s)+$/)) {
- oValue += ' ';
- }
-
- var nValue = oValue + smiley + ' ';
-
- // Put the new value and focus on it
- $(document).oneTime(10, function() {
- selector.val(nValue).focus();
- });
- } catch(e) {
- Console.error('Interface.insertSmiley', e);
- }
-
- };
-
-
- /**
- * Deletes all the associated elements of the chat we want to remove
- * @public
- * @param {string} hash
- * @return {undefined}
- */
- self.deleteThisChat = function(hash) {
-
- try {
- $('#' + hash + ', #page-switch .' + hash).remove();
- } catch(e) {
- Console.error('Interface.deleteThisChat', e);
- }
-
- };
-
-
- /**
- * Closes the given chat
- * @public
- * @param {string} xid
- * @param {string} hash
- * @param {string} type
- * @return {boolean}
- */
- self.quitThisChat = function(xid, hash, type) {
-
- try {
- if(type == 'groupchat') {
- // Send our unavailable presence
- Presence.send(xid + '/' + Name.getMUCNick(hash), 'unavailable');
-
- // Remove all presence database entries for this groupchat
- var db_regex = new RegExp(('^' + Connection.desktop_hash + '_') + 'presence' + ('_(.+)'));
-
- for(var i = 0; i < DataStore.storageDB.length; i++) {
- // Get the pointer values
- var current = DataStore.storageDB.key(i);
-
- if(current.match(db_regex)) {
- var cXID = RegExp.$1;
-
- // If the pointer is on a presence from this groupchat
- if(Common.bareXID(cXID) == xid) {
- // Generate the hash for the current XID
- var cHash = hex_md5(cXID);
-
- // Disable the message textarea
- $('#' + cHash + ' .message-area').attr('disabled', true);
-
- // Remove the presence for this XID
- DataStore.removeDB(Connection.desktop_hash, 'presence-stanza', cXID);
- DataStore.removeDB(Connection.desktop_hash, 'presence-resources', cXID);
- Presence.funnel(cXID, cHash);
- }
- }
- }
- } else {
- ChatState.send('gone', xid, hash);
- }
-
- // Clear MAM storage for this chat
- if(xid in MAM.map_states) {
- delete MAM.map_states[xid];
- }
-
- // Get the chat ID which is before
- var previous = $('#' + hash).prev().attr('id');
-
- // Remove the chat
- self.deleteThisChat(hash);
-
- // Reset the switcher
- if(!Common.exists('#page-switch .switcher.activechan')) {
- self.switchChan(previous);
- }
-
- // Reset the notifications
- self.chanCleanNotify(hash);
- } catch(e) {
- Console.error('Interface.quitThisChat', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Generates the chat logs
- * @public
- * @param {string} xid
- * @param {string} hash
- * @return {boolean}
- */
- self.generateChatLog = function(xid, hash) {
-
- try {
- // Get the main values
- var path = '#' + hash + ' .';
- var content = $(path + 'content').clone().contents();
- var avatar = $(path + 'top .avatar-container:first').html();
- var nick = $(path + 'top .bc-name').text();
- var date = DateUtils.getXMPPTime('local');
- var type = $('#' + hash).attr('data-type');
- var direction = $('html').attr('dir') || 'ltr';
-
- var content_sel = $(content);
-
- // Filter the content smileys
- content_sel.find('img.emoticon').each(function() {
- $(this).replaceWith($(this).attr('alt'));
- });
-
- // Remove the useless attributes
- content_sel.removeAttr('data-type').removeAttr('data-stamp');
-
- // Remove the content avatars
- content_sel.find('.avatar-container').remove();
-
- // Remove the content info
- content_sel.find('.correction-edit, .message-marker, .corrected-info, .correction-label').remove();
-
- // Remove the content click events
- content_sel.find('a').removeAttr('onclick');
-
- // Extract the content HTML code
- content = content_sel.parent().html();
-
- // No avatar?
- if(!avatar || !avatar.match(/data:/)) {
- avatar = 'none';
- }
-
- // POST the values to the server
- $.post('./server/generate-chat.php', {
- 'content': content,
- 'xid': xid,
- 'nick': nick,
- 'avatar': avatar,
- 'date': date,
- 'type': type,
- 'direction': direction
- }, function(data) {
- // Handled!
- $(path + 'tooltip-waitlog').replaceWith(
- '<a class="tooltip-actionlog" href="./server/download-chat.php?id=' + data + '" target="_blank">' + Common._e("Download file!") + '</a>'
- );
- });
- } catch(e) {
- Console.error('Interface.generateChatLog', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Returns whether chan has focus or not
- * @public
- * @param {string} hash
- * @return {boolean}
- */
- self.hasChanFocus = function(hash) {
-
- var has_focus = true;
-
- try {
- if(!$('#page-switch .' + hash).hasClass('activechan') ||
- !Common.isFocused() ||
- (self.chat_focus_hash != hash)) {
- has_focus = false;
- }
- } catch(e) {
- Console.error('Interface.hasChanFocus', e);
- } finally {
- return has_focus;
- }
-
- };
-
-
- /**
- * Notifies the user from a new incoming message
- * @public
- * @param {string} hash
- * @param {string} type
- * @return {undefined}
- */
- self.messageNotify = function(hash, type) {
-
- try {
- // Initialize the vars
- var chat_switch = '#page-switch .';
- var tested = chat_switch + hash;
- var active = $(tested).hasClass('activechan');
-
- // We notify the user if he has not the focus on the chat
- if(self.hasChanFocus(hash) === false) {
- if(!active) {
- if(type == 'personal') {
- $(tested + ', ' + chat_switch + 'more-button').addClass('chan-newmessage');
- } else if(type == 'unread') {
- $(tested).addClass('chan-unread');
- }
- }
-
- // Count the number of pending messages
- var pending = 1;
-
- if(Common.exists('#' + hash + '[data-counter]')) {
- pending = parseInt($('#' + hash).attr('data-counter')) + 1;
- }
-
- $('#' + hash).attr('data-counter', pending);
- }
-
- // Update the page title
- self.updateTitle();
- } catch(e) {
- Console.error('Interface.messageNotify', e);
- }
-
- };
-
-
- /**
- * Returns the number of pending events
- * @public
- * @return {number}
- */
- self.pendingEvents = function() {
-
- try {
- // Count the number of notifications
- var number = 0;
-
- $('.one-counter[data-counter]').each(function() {
- number = number + parseInt($(this).attr('data-counter'));
- });
-
- return number;
- } catch(e) {
- Console.error('Interface.pendingEvents', e);
- }
-
- };
-
-
- /**
- * Updates the page title
- * @public
- * @return {undefined}
- */
- self.updateTitle = function() {
-
- try {
- // Any pending events?
- if(Common.exists('.one-counter[data-counter]')) {
- self.title('new');
- } else {
- self.title('talk');
- }
- } catch(e) {
- Console.error('Interface.updateTitle', e);
- }
-
- };
-
-
- /**
- * Cleans the given chat notifications
- * @public
- * @param {string} hash
- * @return {undefined}
- */
- self.chanCleanNotify = function(hash) {
-
- try {
- // We remove the class that tell the user of a new message
- var chat_switch = '#page-switch .';
- $(chat_switch + hash).removeClass('chan-newmessage chan-unread');
-
- // We reset the global notifications if no more unread messages
- if(!$(chat_switch + 'chans .chan-newmessage').size()) {
- $(chat_switch + 'more-button').removeClass('chan-newmessage');
- }
-
- // We reset the chat counter
- $('#' + hash).removeAttr('data-counter');
-
- // Update the page title
- self.updateTitle();
- } catch(e) {
- Console.error('Interface.chanCleanNotify', e);
- }
-
- };
-
-
- /**
- * Scrolls to the last chat message
- * @public
- * @param {string} hash
- * @return {undefined}
- */
- self.autoScroll = function(hash) {
-
- try {
- // Avoid a JS error
- if(Common.exists('#' + hash)) {
- var container = document.getElementById('chat-content-' + hash);
-
- // Scroll down!
- container.scrollTop = container.scrollHeight;
- }
- } catch(e) {
- Console.error('Interface.autoScroll', e);
- }
-
- };
-
-
- /**
- * Shows all the buddies in the roster
- * @public
- * @param {string} from
- * @return {undefined}
- */
- self.showAllBuddies = function(from) {
-
- try {
- // Put a marker
- Roster.blist_all = true;
-
- // We switch the two modes
- $('.buddy-conf-more-display-unavailable').hide();
- $('.buddy-conf-more-display-available').show();
-
- // Security: reset all the groups toggle event
- $('#roster .group-buddies').show();
- $('#roster .group span').text('-');
-
- // We show the disconnected buddies
- $('.hidden-buddy').show();
-
- // We show all the groups
- $('#roster .one-group').show();
-
- if(Search.search_filtered) {
- Search.funnelFilterBuddy();
- }
-
- // Store this in the options
- if((from == 'roster') && Options.loaded()) {
- DataStore.setDB(Connection.desktop_hash, 'options', 'roster-showall', '1');
- Options.store();
- }
- } catch(e) {
- Console.error('Interface.showAllBuddies', e);
- }
-
- };
-
-
- /**
- * Shows only the online buddies in the roster
- * @public
- * @param {string} from
- * @return {undefined}
- */
- self.showOnlineBuddies = function(from) {
-
- try {
- // Remove the marker
- Roster.blist_all = false;
-
- // We switch the two modes
- $('.buddy-conf-more-display-available').hide();
- $('.buddy-conf-more-display-unavailable').show();
-
- // Security: reset all the groups toggle event
- $('#roster .group-buddies').show();
- $('#roster .group span').text('-');
-
- // We hide the disconnected buddies
- $('.hidden-buddy').hide();
-
- // We check the groups to hide
- Roster.updateGroups();
-
- if(Search.search_filtered) {
- Search.funnelFilterBuddy();
- }
-
- // Store this in the options
- if((from == 'roster') && Options.loaded()) {
- DataStore.setDB(Connection.desktop_hash, 'options', 'roster-showall', '0');
- Options.store();
- }
- } catch(e) {
- Console.error('Interface.showOnlineBuddies', e);
- }
-
- };
-
-
- /**
- * Focuses on the right input
- * @public
- * @return {undefined}
- */
- self.inputFocus = function() {
-
- try {
- // No popup shown
- if(!Common.exists('.popup')) {
- $(document).oneTime(10, function() {
- $('.focusable:visible:first').focus();
- });
- }
- } catch(e) {
- Console.error('Interface.inputFocus', e);
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.launch = function() {
-
- try {
- $(document).ready(function() {
- // Focus on the first visible input
- $(window).focus(self.inputFocus);
-
- // Re-focus to visible chat/groupchat input if typing when input blurred
- $(document).keypress(function(evt) {
- try {
- // Don't trigger if not connected or popup opened
- if(Common.isConnected() && !Common.exists('div.lock')) {
- // Cannot work if an input/textarea is already focused or chat is not opened
- var target_input_sel = $('.page-engine-chan .message-area:visible');
-
- if(!target_input_sel.size() || $('input, textarea').is(':focus')) {
- return;
- }
-
- // Get key value
- var key_value = $.trim(String.fromCharCode(evt.which));
-
- // Re-focus on opened chat?
- if(key_value) {
- // Get input values
- value_input = target_input_sel.val();
-
- // Append pressed key value
- target_input_sel.val(value_input + key_value);
- target_input_sel.focus();
-
- // Put cursor at the end of input
- target_input_sel[0].selectionStart = target_input_sel[0].selectionEnd = value_input.length + 1;
- }
- }
- } catch(e) {
- Console.error('Interface.launch[autofocus]', e);
- }
- });
- });
- } catch(e) {
- Console.error('Interface.launch', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
-
-Interface.launch(); \ No newline at end of file
diff --git a/app/javascripts/ios.js b/app/javascripts/ios.js
deleted file mode 100644
index 5da4745b..00000000
--- a/app/javascripts/ios.js
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the iOS add to home JS script for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Camaran
-
-*/
-
-/*!
- * Add to Homescreen v2.0.8 ~ Copyright (c) 2013 Matteo Spinelli, http://cubiq.org
- * Released under MIT license, http://cubiq.org/license
- */
-var addToHome = (function (w) {
- var nav = w.navigator,
- isIDevice = 'platform' in nav && (/iphone|ipod|ipad/gi).test(nav.platform),
- isIPad,
- isRetina,
- isSafari,
- isStandalone,
- OSVersion,
- startX = 0,
- startY = 0,
- lastVisit = 0,
- isExpired,
- isSessionActive,
- isReturningVisitor,
- balloon,
- overrideChecks,
-
- positionInterval,
- closeTimeout,
-
- options = {
- autostart: true, // Automatically open the balloon
- returningVisitor: false, // Show the balloon to returning visitors only (setting this to true is highly recommended)
- animationIn: 'drop', // drop || bubble || fade
- animationOut: 'fade', // drop || bubble || fade
- startDelay: 2000, // 2 seconds from page load before the balloon appears
- lifespan: 15000, // 15 seconds before it is automatically destroyed
- bottomOffset: 14, // Distance of the balloon from bottom
- expire: 0, // Minutes to wait before showing the popup again (0 = always displayed)
- message: '', // Customize your message or force a language ('' = automatic)
- touchIcon: false, // Display the touch icon
- arrow: true, // Display the balloon arrow
- hookOnLoad: true, // Should we hook to onload event? (really advanced usage)
- closeButton: true, // Let the user close the balloon
- iterations: 100 // Internal/debug use
- },
-
- intl = {
- ar: '<span dir="rtl">قم بتثبيت هذا التطبيق على <span dir="ltr">%device:</span>انقر<span dir="ltr">%icon</span> ،<strong>ثم اضفه الى الشاشة الرئيسية.</strong></span>',
- ca_es: 'Per instal·lar aquesta aplicació al vostre %device premeu %icon i llavors <strong>Afegir a pantalla d\'inici</strong>.',
- cs_cz: 'Pro instalaci aplikace na Váš %device, stiskněte %icon a v nabídce <strong>Přidat na plochu</strong>.',
- da_dk: 'Tilføj denne side til din %device: tryk på %icon og derefter <strong>Føj til hjemmeskærm</strong>.',
- de_de: 'Installieren Sie diese App auf Ihrem %device: %icon antippen und dann <strong>Zum Home-Bildschirm</strong>.',
- el_gr: 'Εγκαταστήσετε αυτήν την Εφαρμογή στήν συσκευή σας %device: %icon μετά πατάτε <strong>Προσθήκη σε Αφετηρία</strong>.',
- en_us: 'Install this web app on your %device: tap %icon and then <strong>Add to Home Screen</strong>.',
- es_es: 'Para instalar esta app en su %device, pulse %icon y seleccione <strong>Añadir a pantalla de inicio</strong>.',
- fi_fi: 'Asenna tämä web-sovellus laitteeseesi %device: paina %icon ja sen jälkeen valitse <strong>Lisää Koti-valikkoon</strong>.',
- fr_fr: 'Ajoutez cette application sur votre %device en cliquant sur %icon, puis <strong>Ajouter à l\'écran d\'accueil</strong>.',
- he_il: '<span dir="rtl">התקן אפליקציה זו על ה-%device שלך: הקש %icon ואז <strong>הוסף למסך הבית</strong>.</span>',
- hr_hr: 'Instaliraj ovu aplikaciju na svoj %device: klikni na %icon i odaberi <strong>Dodaj u početni zaslon</strong>.',
- hu_hu: 'Telepítse ezt a web-alkalmazást az Ön %device-jára: nyomjon a %icon-ra majd a <strong>Főképernyőhöz adás</strong> gombra.',
- it_it: 'Installa questa applicazione sul tuo %device: premi su %icon e poi <strong>Aggiungi a Home</strong>.',
- ja_jp: 'このウェブアプリをあなたの%deviceにインストールするには%iconをタップして<strong>ホーム画面に追加</strong>を選んでください。',
- ko_kr: '%device에 웹앱을 설치하려면 %icon을 터치 후 "홈화면에 추가"를 선택하세요',
- nb_no: 'Installer denne appen på din %device: trykk på %icon og deretter <strong>Legg til på Hjem-skjerm</strong>',
- nl_nl: 'Installeer deze webapp op uw %device: tik %icon en dan <strong>Voeg toe aan beginscherm</strong>.',
- pl_pl: 'Aby zainstalować tę aplikacje na %device: naciśnij %icon a następnie <strong>Dodaj jako ikonę</strong>.',
- pt_br: 'Instale este aplicativo em seu %device: aperte %icon e selecione <strong>Adicionar à Tela Inicio</strong>.',
- pt_pt: 'Para instalar esta aplicação no seu %device, prima o %icon e depois em <strong>Adicionar ao ecrã principal</strong>.',
- ru_ru: 'Установите это веб-приложение на ваш %device: нажмите %icon, затем <strong>Добавить в «Домой»</strong>.',
- sv_se: 'Lägg till denna webbapplikation på din %device: tryck på %icon och därefter <strong>Lägg till på hemskärmen</strong>.',
- th_th: 'ติดตั้งเว็บแอพฯ นี้บน %device ของคุณ: แตะ %icon และ <strong>เพิ่มที่หน้าจอโฮม</strong>',
- tr_tr: 'Bu uygulamayı %device\'a eklemek için %icon simgesine sonrasında <strong>Ana Ekrana Ekle</strong> düğmesine basın.',
- uk_ua: 'Встановіть цей веб сайт на Ваш %device: натисніть %icon, а потім <strong>На початковий екран</strong>.',
- zh_cn: '您可以将此应用程式安装到您的 %device 上。请按 %icon 然后点选<strong>添加至主屏幕</strong>。',
- zh_tw: '您可以將此應用程式安裝到您的 %device 上。請按 %icon 然後點選<strong>加入主畫面螢幕</strong>。'
- };
-
- function init () {
- // Preliminary check, all further checks are performed on iDevices only
- if ( !isIDevice ) return;
-
- var now = Date.now(),
- i;
-
- // Merge local with global options
- if ( w.addToHomeConfig ) {
- for ( i in w.addToHomeConfig ) {
- options[i] = w.addToHomeConfig[i];
- }
- }
- if ( !options.autostart ) options.hookOnLoad = false;
-
- isIPad = (/ipad/gi).test(nav.platform);
- isRetina = w.devicePixelRatio && w.devicePixelRatio > 1;
- isSafari = (/Safari/i).test(nav.appVersion) && !(/CriOS/i).test(nav.appVersion);
- isStandalone = nav.standalone;
- OSVersion = nav.appVersion.match(/OS (\d+_\d+)/i);
- OSVersion = OSVersion && OSVersion[1] ? +OSVersion[1].replace('_', '.') : 0;
-
- lastVisit = +w.localStorage.getItem('addToHome');
-
- isSessionActive = w.sessionStorage.getItem('addToHomeSession');
- isReturningVisitor = options.returningVisitor ? lastVisit && lastVisit + 28*24*60*60*1000 > now : true;
-
- if ( !lastVisit ) lastVisit = now;
-
- // If it is expired we need to reissue a new balloon
- isExpired = isReturningVisitor && lastVisit <= now;
-
- if ( options.hookOnLoad ) w.addEventListener('load', loaded, false);
- else if ( !options.hookOnLoad && options.autostart ) loaded();
- }
-
- function loaded () {
- w.removeEventListener('load', loaded, false);
-
- if ( !isReturningVisitor ) w.localStorage.setItem('addToHome', Date.now());
- else if ( options.expire && isExpired ) w.localStorage.setItem('addToHome', Date.now() + options.expire * 60000);
-
- if ( !overrideChecks && ( !isSafari || !isExpired || isSessionActive || isStandalone || !isReturningVisitor ) ) return;
-
- var touchIcon = '',
- platform = nav.platform.split(' ')[0],
- language = nav.language.replace('-', '_');
-
- balloon = document.createElement('div');
- balloon.id = 'addToHomeScreen';
- balloon.style.cssText += 'left:-9999px;-webkit-transition-property:-webkit-transform,opacity;-webkit-transition-duration:0;-webkit-transform:translate3d(0,0,0);position:' + (OSVersion < 5 ? 'absolute' : 'fixed');
-
- // Localize message
- if ( options.message in intl ) { // You may force a language despite the user's locale
- language = options.message;
- options.message = '';
- }
- if ( options.message === '' ) { // We look for a suitable language (defaulted to en_us)
- options.message = language in intl ? intl[language] : intl.en_us;
- }
-
- if ( options.touchIcon ) {
- touchIcon = isRetina ?
- document.querySelector('head link[rel^=apple-touch-icon][sizes="114x114"],head link[rel^=apple-touch-icon][sizes="144x144"],head link[rel^=apple-touch-icon]') :
- document.querySelector('head link[rel^=apple-touch-icon][sizes="57x57"],head link[rel^=apple-touch-icon]');
-
- if ( touchIcon ) {
- touchIcon = '<span style="background-image:url(' + touchIcon.href + ')" class="addToHomeTouchIcon"></span>';
- }
- }
-
- balloon.className = (isIPad ? 'addToHomeIpad' : 'addToHomeIphone') + (touchIcon ? ' addToHomeWide' : '');
- balloon.innerHTML = touchIcon +
- options.message.replace('%device', platform).replace('%icon', OSVersion >= 4.2 ? '<span class="addToHomeShare' + (OSVersion >= 7 ? ' addToHomeShareOS7' : '') + '"></span>' : '<span class="addToHomePlus">+</span>') +
- (options.arrow ? '<span class="addToHomeArrow"></span>' : '') +
- (options.closeButton ? '<span class="addToHomeClose">\u00D7</span>' : '');
-
- document.body.appendChild(balloon);
-
- // Add the close action
- if ( options.closeButton ) balloon.addEventListener('click', clicked, false);
-
- if ( !isIPad && OSVersion >= 6 ) window.addEventListener('orientationchange', orientationCheck, false);
-
- setTimeout(show, options.startDelay);
- }
-
- function show () {
- var duration,
- iPadXShift = 208;
-
- // Set the initial position
- if ( isIPad ) {
- if ( OSVersion < 5 ) {
- startY = w.scrollY;
- startX = w.scrollX;
- } else if ( OSVersion < 6 ) {
- iPadXShift = 160;
- }
-
- balloon.style.top = startY + options.bottomOffset + 'px';
- balloon.style.left = startX + iPadXShift - Math.round(balloon.offsetWidth / 2) + 'px';
-
- switch ( options.animationIn ) {
- case 'drop':
- duration = '0.6s';
- balloon.style.webkitTransform = 'translate3d(0,' + -(w.scrollY + options.bottomOffset + balloon.offsetHeight) + 'px,0)';
- break;
- case 'bubble':
- duration = '0.6s';
- balloon.style.opacity = '0';
- balloon.style.webkitTransform = 'translate3d(0,' + (startY + 50) + 'px,0)';
- break;
- default:
- duration = '1s';
- balloon.style.opacity = '0';
- }
- } else {
- startY = w.innerHeight + w.scrollY;
-
- if ( OSVersion < 5 ) {
- startX = Math.round((w.innerWidth - balloon.offsetWidth) / 2) + w.scrollX;
- balloon.style.left = startX + 'px';
- balloon.style.top = startY - balloon.offsetHeight - options.bottomOffset + 'px';
- } else {
- balloon.style.left = '50%';
- balloon.style.marginLeft = -Math.round(balloon.offsetWidth / 2) - ( w.orientation%180 && OSVersion >= 6 ? 40 : 0 ) + 'px';
- balloon.style.bottom = options.bottomOffset + 'px';
- }
-
- switch (options.animationIn) {
- case 'drop':
- duration = '1s';
- balloon.style.webkitTransform = 'translate3d(0,' + -(startY + options.bottomOffset) + 'px,0)';
- break;
- case 'bubble':
- duration = '0.6s';
- balloon.style.webkitTransform = 'translate3d(0,' + (balloon.offsetHeight + options.bottomOffset + 50) + 'px,0)';
- break;
- default:
- duration = '1s';
- balloon.style.opacity = '0';
- }
- }
-
- balloon.offsetHeight; // repaint trick
- balloon.style.webkitTransitionDuration = duration;
- balloon.style.opacity = '1';
- balloon.style.webkitTransform = 'translate3d(0,0,0)';
- balloon.addEventListener('webkitTransitionEnd', transitionEnd, false);
-
- closeTimeout = setTimeout(close, options.lifespan);
- }
-
- function manualShow (override) {
- if ( !isIDevice || balloon ) return;
-
- overrideChecks = override;
- loaded();
- }
-
- function close () {
- clearInterval( positionInterval );
- clearTimeout( closeTimeout );
- closeTimeout = null;
-
- // check if the popup is displayed and prevent errors
- if ( !balloon ) return;
-
- var posY = 0,
- posX = 0,
- opacity = '1',
- duration = '0';
-
- if ( options.closeButton ) balloon.removeEventListener('click', clicked, false);
- if ( !isIPad && OSVersion >= 6 ) window.removeEventListener('orientationchange', orientationCheck, false);
-
- if ( OSVersion < 5 ) {
- posY = isIPad ? w.scrollY - startY : w.scrollY + w.innerHeight - startY;
- posX = isIPad ? w.scrollX - startX : w.scrollX + Math.round((w.innerWidth - balloon.offsetWidth)/2) - startX;
- }
-
- balloon.style.webkitTransitionProperty = '-webkit-transform,opacity';
-
- switch ( options.animationOut ) {
- case 'drop':
- if ( isIPad ) {
- duration = '0.4s';
- opacity = '0';
- posY += 50;
- } else {
- duration = '0.6s';
- posY += balloon.offsetHeight + options.bottomOffset + 50;
- }
- break;
- case 'bubble':
- if ( isIPad ) {
- duration = '0.8s';
- posY -= balloon.offsetHeight + options.bottomOffset + 50;
- } else {
- duration = '0.4s';
- opacity = '0';
- posY -= 50;
- }
- break;
- default:
- duration = '0.8s';
- opacity = '0';
- }
-
- balloon.addEventListener('webkitTransitionEnd', transitionEnd, false);
- balloon.style.opacity = opacity;
- balloon.style.webkitTransitionDuration = duration;
- balloon.style.webkitTransform = 'translate3d(' + posX + 'px,' + posY + 'px,0)';
- }
-
-
- function clicked () {
- w.sessionStorage.setItem('addToHomeSession', '1');
- isSessionActive = true;
- close();
- }
-
- function transitionEnd () {
- balloon.removeEventListener('webkitTransitionEnd', transitionEnd, false);
-
- balloon.style.webkitTransitionProperty = '-webkit-transform';
- balloon.style.webkitTransitionDuration = '0.2s';
-
- // We reached the end!
- if ( !closeTimeout ) {
- balloon.parentNode.removeChild(balloon);
- balloon = null;
- return;
- }
-
- // On iOS 4 we start checking the element position
- if ( OSVersion < 5 && closeTimeout ) positionInterval = setInterval(setPosition, options.iterations);
- }
-
- function setPosition () {
- var matrix = new WebKitCSSMatrix(w.getComputedStyle(balloon, null).webkitTransform),
- posY = isIPad ? w.scrollY - startY : w.scrollY + w.innerHeight - startY,
- posX = isIPad ? w.scrollX - startX : w.scrollX + Math.round((w.innerWidth - balloon.offsetWidth) / 2) - startX;
-
- // Screen didn't move
- if ( posY == matrix.m42 && posX == matrix.m41 ) return;
-
- balloon.style.webkitTransform = 'translate3d(' + posX + 'px,' + posY + 'px,0)';
- }
-
- // Clear local and session storages (this is useful primarily in development)
- function reset () {
- w.localStorage.removeItem('addToHome');
- w.sessionStorage.removeItem('addToHomeSession');
- }
-
- function orientationCheck () {
- balloon.style.marginLeft = -Math.round(balloon.offsetWidth / 2) - ( w.orientation%180 && OSVersion >= 6 ? 40 : 0 ) + 'px';
- }
-
- // Bootstrap!
- init();
-
- return {
- show: manualShow,
- close: close,
- reset: reset
- };
-})(window);
diff --git a/app/javascripts/iq.js b/app/javascripts/iq.js
deleted file mode 100644
index 79e1fa9b..00000000
--- a/app/javascripts/iq.js
+++ /dev/null
@@ -1,464 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the IQ JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var IQ = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Handles OOB request
- * @private
- * @param {string} iqType
- * @param {string} iqID
- * @param {object} iqNode
- * @return {undefined}
- */
- self._handleOOBRequest = function(iqFrom, iqID, iqNode) {
-
- try {
- /* REF: http://xmpp.org/extensions/xep-0066.html */
-
- OOB.handle(iqFrom, iqID, 'iq', iqNode);
-
- Console.log('Received IQ OOB request: ' + iqFrom);
- } catch(e) {
- Console.error('IQ._handleOOBRequest', e);
- }
-
- };
-
-
- /**
- * Handles OOB reply
- * @private
- * @param {object} iqResponse
- * @param {string} iqFrom
- * @param {string} iqType
- * @param {string} iqID
- * @param {object} iqNode
- * @return {undefined}
- */
- self._handleOOBReply = function(iqResponse, iqFrom, iqType, iqID, iqNode) {
-
- try {
- // Get the values
- var oob_url = DataStore.getDB(Connection.desktop_hash, 'send/url', iqID);
- var oob_desc = DataStore.getDB(Connection.desktop_hash, 'send/desc', iqID);
- var notif_id = hex_md5(oob_url + oob_desc + iqType + iqFrom + iqID);
-
- if($(iqNode).find('error').size()) {
- // Error?
- if($(iqNode).find('error not-acceptable').size()) {
- // Rejected?
- Notification.create('send_reject', iqFrom, [iqFrom, oob_url, 'iq', iqID, iqNode], oob_desc, notif_id);
- } else {
- // Failed?
- Notification.create('send_fail', iqFrom, [iqFrom, oob_url, 'iq', iqID, iqNode], oob_desc, notif_id);
- }
-
- // Remove the file
- $.get(oob_url + '&action=remove');
- } else if(iqType == 'result') {
- // Success?
- Notification.create('send_accept', iqFrom, [iqFrom, oob_url, 'iq', iqID, iqNode], oob_desc, notif_id);
- }
- } catch(e) {
- Console.error('IQ._handleOOBReply', e);
- }
-
- };
-
-
- /**
- * Handles Software Version
- * @private
- * @param {object} iqResponse
- * @param {string} iqFrom
- * @return {undefined}
- */
- self._handleSoftwareVersion = function(iqResponse, iqFrom) {
-
- try {
- /* REF: http://xmpp.org/extensions/xep-0092.html */
-
- iqQuery = iqResponse.setQuery(NS_VERSION);
-
- iqQuery.appendChild(iqResponse.buildNode('name', {'xmlns': NS_VERSION}, Caps.disco_infos.identity.name));
- iqQuery.appendChild(iqResponse.buildNode('version', {'xmlns': NS_VERSION}, JAPPIX_VERSION));
- iqQuery.appendChild(iqResponse.buildNode('os', {'xmlns': NS_VERSION}, BrowserDetect.OS));
-
- con.send(iqResponse);
-
- Console.log('Received software version query: ' + iqFrom);
- } catch(e) {
- Console.error('IQ._handleSoftwareVersion', e);
- }
-
- };
-
-
- /**
- * Handles Last Activity
- * @private
- * @param {object} iqResponse
- * @param {string} iqFrom
- * @return {undefined}
- */
- self._handleLastActivity = function(iqResponse, iqFrom) {
-
- try {
- /* REF: http://xmpp.org/extensions/xep-0012.html */
-
- iqQuery = iqResponse.setQuery(NS_LAST);
- iqQuery.setAttribute('seconds', DateUtils.getLastActivity());
-
- con.send(iqResponse);
-
- Console.log('Received last activity query: ' + iqFrom);
- } catch(e) {
- Console.error('IQ._handleLastActivity', e);
- }
-
- };
-
-
- /**
- * Handles Privacy Lists
- * @private
- * @param {object} iqResponse
- * @param {string} iqFrom
- * @param {string} iqQuery
- * @return {undefined}
- */
- self._handlePrivacyLists = function(iqResponse, iqFrom, iqQuery) {
-
- try {
- // REF : http://xmpp.org/extensions/xep-0016.html
-
- // Roster push
- con.send(iqResponse);
-
- // Get the lists
- $(iqQuery).find('list').each(function() {
- Privacy.get($(this).attr('name'));
- });
-
- Console.log('Received privacy lists push: ' + iqFrom);
- } catch(e) {
- Console.error('IQ._handlePrivacyLists', e);
- }
-
- };
-
-
- /**
- * Handles Roster Push
- * @private
- * @param {object} iqResponse
- * @param {string} iqFrom
- * @param {string} iqQuery
- * @return {undefined}
- */
- self._handleRosterPush = function(iqResponse, iqFrom, iqQuery) {
-
- try {
- // REF : http://xmpp.org/extensions/xep-0092.html
-
- // Roster push
- con.send(iqResponse);
-
- // Get the values
- $(iqQuery).find('item').each(function() {
- Roster.parse($(this), 'presence');
- });
-
- Console.log('Received roster push: ' + iqFrom);
- } catch(e) {
- Console.error('IQ._handleRosterPush', e);
- }
-
- };
-
-
- /**
- * Handles Roster Item Exchange
- * @private
- * @param {object} iqNode
- * @param {string} iqFrom
- * @return {undefined}
- */
- self._handleRosterItemExchange = function(iqNode, iqFrom) {
-
- try {
- // Open a new notification
- Notification.create('rosterx', iqFrom, [iqNode], '');
-
- Console.log('Roster Item Exchange from: ' + iqFrom);
- } catch(e) {
- Console.error('IQ._handleRosterItemExchange', e);
- }
-
- };
-
-
- /**
- * Handles Disco Info
- * @private
- * @param {object} iqResponse
- * @param {string} iqFrom
- * @return {undefined}
- */
- self._handleDiscoInfo = function(iqResponse, iqFrom) {
-
- try {
- /* REF: http://xmpp.org/extensions/xep-0030.html */
-
- iqQuery = iqResponse.setQuery(NS_DISCO_INFO);
-
- // We set the name of the client
- iqQuery.appendChild(iqResponse.buildNode('identity', {
- 'category': Caps.disco_infos.identity.category,
- 'type': Caps.disco_infos.identity.type,
- 'name': Caps.disco_infos.identity.name,
- 'xmlns': NS_DISCO_INFO
- }));
-
- // We set all the supported features
- var disco_infos = Caps.myDiscoInfos();
-
- $.each(disco_infos, function(i, disco_info) {
- iqQuery.appendChild(iqResponse.buildNode('feature', {'var': disco_info, 'xmlns': NS_DISCO_INFO}));
- });
-
- con.send(iqResponse);
-
- Console.log('Received disco#infos query: ' + iqFrom);
- } catch(e) {
- Console.error('IQ._handleDiscoInfo', e);
- }
-
- };
-
-
- /**
- * Handles User Time
- * @private
- * @param {object} iqResponse
- * @param {string} iqFrom
- * @return {undefined}
- */
- self._handleUserTime = function(iqResponse, iqFrom) {
-
- try {
- /* REF: http://xmpp.org/extensions/xep-0202.html */
-
- var iqTime = iqResponse.appendNode('time', {
- 'xmlns': NS_URN_TIME
- });
-
- iqTime.appendChild(iqResponse.buildNode('tzo', {
- 'xmlns': NS_URN_TIME
- }, DateUtils.getTZO()));
-
- iqTime.appendChild(iqResponse.buildNode('utc', {
- 'xmlns': NS_URN_TIME
- }, DateUtils.getXMPPTime('utc')));
-
- con.send(iqResponse);
-
- Console.log('Received local time query: ' + iqFrom);
- } catch(e) {
- Console.error('IQ._handleUserTime', e);
- }
-
- };
-
-
- /**
- * Handles Ping
- * @private
- * @param {object} iqResponse
- * @param {string} iqFrom
- * @return {undefined}
- */
- self._handlePing = function(iqResponse, iqFrom) {
-
- try {
- /* REF: http://xmpp.org/extensions/xep-0199.html */
-
- con.send(iqResponse);
-
- Console.log('Received a ping: ' + iqFrom);
- } catch(e) {
- Console.error('IQ._handlePing', e);
- }
-
- };
-
-
- /**
- * Handles Jingle
- * @private
- * @param {string} iqFrom
- * @return {undefined}
- */
- self._handleJingle = function(iqFrom) {
-
- try {
- /* REF: http://xmpp.org/extensions/xep-0166.html */
-
- // Handled via JSJaCJingle.route() (see above)
-
- Console.log('Received a Jingle packet: ' + iqFrom);
- } catch(e) {
- Console.error('IQ._handleJingle', e);
- }
-
- };
-
-
- /**
- * Raises a not implemented error
- * @private
- * @param {object} iqResponse
- * @param {object} iqNode
- * @param {string} iqFrom
- * @return {undefined}
- */
- self._raiseNotImplemented = function(iqResponse, iqNode, iqFrom) {
-
- try {
- // Change IQ type
- iqResponse.setType('error');
-
- // Append stanza content
- for(var c = 0; c < iqNode.childNodes.length; c++) {
- iqResponse.getNode().appendChild(iqNode.childNodes.item(c).cloneNode(true));
- }
-
- // Append error content
- var iqError = iqResponse.appendNode('error', {'xmlns': NS_CLIENT, 'code': '501', 'type': 'cancel'});
- iqError.appendChild(iqResponse.buildNode('feature-not-implemented', {'xmlns': NS_STANZAS}));
- iqError.appendChild(iqResponse.buildNode('text', {'xmlns': NS_STANZAS}, Common._e("The feature requested is not implemented by the recipient or server and therefore cannot be processed.")));
-
- con.send(iqResponse);
-
- Console.log('Received an unsupported IQ query from: ' + iqFrom);
- } catch(e) {
- Console.error('IQ._raiseNotImplemented', e);
- }
-
- };
-
-
- /**
- * Handles an incoming IQ packet
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handle = function(iq) {
-
- try {
- // Gets the IQ content
- var iqNode = iq.getNode();
- var iqFrom = Common.fullXID(Common.getStanzaFrom(iq));
- var iqID = iq.getID();
- var iqQueryXMLNS = iq.getQueryXMLNS();
- var iqQuery = iq.getQuery();
- var iqType = iq.getType();
-
- // Build the response
- var iqResponse = new JSJaCIQ();
-
- iqResponse.setID(iqID);
- iqResponse.setTo(iqFrom);
- iqResponse.setType('result');
-
- // OOB request
- if((iqQueryXMLNS == NS_IQOOB) && (iqType == 'set')) {
- self._handleOOBRequest(iqFrom, iqID, iqNode);
- }
-
- // OOB reply
- else if(DataStore.getDB(Connection.desktop_hash, 'send/url', iqID)) {
- self._handleOOBReply(iqResponse, iqFrom, iqType, iqID, iqNode);
- }
-
- // Software version query
- else if((iqQueryXMLNS == NS_VERSION) && (iqType == 'get')) {
- self._handleSoftwareVersion(iqResponse, iqFrom);
- }
-
- // Last activity query
- else if((iqQueryXMLNS == NS_LAST) && (iqType == 'get')) {
- self._handleLastActivity(iqResponse, iqFrom);
- }
-
- // Privacy lists push
- else if((iqQueryXMLNS == NS_PRIVACY) && (iqType == 'set') && Common.isSafeStanza(iq)) {
- self._handlePrivacyLists(iqResponse, iqFrom, iqQuery);
- }
-
- // Roster push
- else if((iqQueryXMLNS == NS_ROSTER) && (iqType == 'set') && Common.isSafeStanza(iq)) {
- self._handleRosterPush(iqResponse, iqFrom, iqQuery);
- }
-
- // Roster Item Exchange query
- else if($(iqNode).find('x[xmlns="' + NS_ROSTERX + '"]').size()) {
- self._handleRosterItemExchange(iqNode, iqFrom);
- }
-
- // Disco info query
- else if((iqQueryXMLNS == NS_DISCO_INFO) && (iqType == 'get')) {
- self._handleDiscoInfo(iqResponse, iqFrom);
- }
-
- // User time query
- else if($(iqNode).find('time').size() && (iqType == 'get')) {
- self._handleUserTime(iqResponse, iqFrom);
- }
-
- // Ping
- else if($(iqNode).find('ping').size() && (iqType == 'get')) {
- self._handlePing(iqResponse, iqFrom);
- }
-
- // Jingle
- else if($(iqNode).find('jingle').size()) {
- self._handleJingle(iqFrom);
- }
-
- // Not implemented
- else if(!$(iqNode).find('error').size() && ((iqType == 'get') || (iqType == 'set'))) {
- self._raiseNotImplemented(iqResponse, iqNode, iqFrom);
- }
- } catch(e) {
- Console.error('IQ.handle', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/jingle.js b/app/javascripts/jingle.js
deleted file mode 100644
index 44651bd2..00000000
--- a/app/javascripts/jingle.js
+++ /dev/null
@@ -1,1346 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the Jingle helpers & launchers
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Jingle = (function() {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Variables */
- self._session = null;
- self._call_ender = null;
- self._bypass_termination_notify = false;
-
-
- /**
- * Opens the Jingle interface (depending on the state)
- * @public
- * @return {boolean}
- */
- self.open = function() {
-
- try {
- var call_tool_sel = $('#top-content .tools.call');
-
- if(call_tool_sel.is('.active')) {
- Console.info('Opened call notification drawer');
- } else if(call_tool_sel.is('.streaming.video')) {
- // Videobox?
- self._show_interface();
-
- Console.info('Opened Jingle videobox');
- } else {
- Console.warn('Could not open any Jingle tool (race condition on state)');
- }
- } catch(e) {
- Console.error('Jingle.open', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Returns the Jingle session arguments (used to configure it)
- * @private
- * @param connection
- * @param xid
- * @param hash
- * @param local_view
- * @param remote_view
- * @param [sid]
- * @return {object}
- */
- self._args = function(connection, xid, hash, media, local_view, remote_view, sid) {
-
- args = {};
-
- try {
- // Network configuration
- var ice_servers = Call.generate_ice_servers();
-
- // Jingle arguments
- args = {
- // Configuration (required)
- connection: connection,
- to: xid,
- media: media,
- local_view: local_view,
- remote_view: remote_view,
- stun: ice_servers.stun,
- turn: ice_servers.turn,
- resolution: 'md',
- debug: Call._consoleAdapter,
-
- // Custom handlers (optional)
- session_initiate_pending: function(jingle) {
- Call.notify(
- JSJAC_JINGLE_SESSION_SINGLE,
- Common.bareXID(jingle.get_to()),
- 'initiating',
- jingle.get_media()
- );
-
- Console.log('Jingle._args', 'session_initiate_pending');
- },
-
- session_initiate_success: function(jingle, stanza) {
- // Already in a call?
- if(Call.is_ongoing() && !self.is_same_sid(jingle)) {
- jingle.terminate(JSJAC_JINGLE_REASON_BUSY);
-
- Console.warn('Jingle._args > session_initiate_success', 'Dropped incoming call (already in a call)');
- } else {
- // Incoming call?
- if(jingle.is_responder()) {
- // Auto-accept (we previously accepted the associated broadcast request)
- if(Call.call_auto_accept.from == jingle.get_to() && Call.call_auto_accept.sid == jingle.get_sid()) {
- Call.call_auto_accept.from = null;
- Call.call_auto_accept.sid = null;
-
- // Delay acceptance (status change is delayed)
- setTimeout(function() {
- jingle.accept();
- }, 250);
- } else {
- Call.notify(
- JSJAC_JINGLE_SESSION_SINGLE,
- Common.bareXID(jingle.get_to()),
- ('call_' + jingle.get_media()),
- jingle.get_media()
- );
-
- // Play ringtone
- // Hard-fix: avoids the JSJaC packets group timer (that will delay success reply)
- setTimeout(function() {
- Audio.play('incoming-call', true);
- jingle.info(JSJAC_JINGLE_SESSION_INFO_RINGING);
- }, 250);
- }
- } else {
- Call.notify(
- JSJAC_JINGLE_SESSION_SINGLE,
- Common.bareXID(jingle.get_to()),
- 'waiting',
- jingle.get_media()
- );
-
- // Play wait ringtone
- Audio.play('outgoing-call', true);
- }
- }
-
- Console.log('Jingle._args', 'session_initiate_success');
- },
-
- session_initiate_error: function(jingle, stanza) {
- self._reset();
-
- Call.notify(
- JSJAC_JINGLE_SESSION_SINGLE,
- Common.bareXID(jingle.get_to()),
- 'error',
- jingle.get_media()
- );
-
- Console.log('Jingle._args', 'session_initiate_error');
- },
-
- session_initiate_request: function(jingle, stanza) {
- Console.log('Jingle._args', 'session_initiate_request');
- },
-
- session_accept_pending: function(jingle) {
- Call.notify(
- JSJAC_JINGLE_SESSION_SINGLE,
- Common.bareXID(jingle.get_to()),
- 'waiting',
- jingle.get_media()
- );
-
- Console.log('Jingle._args', 'session_accept_pending');
- },
-
- session_accept_success: function(jingle, stanza) {
- Call._unnotify();
-
- // Start call! Go Go Go!
- Call.start_session(jingle.get_media());
- self._show_interface();
- Call.start_counter();
-
- Console.log('Jingle._args', 'session_accept_success');
- },
-
- session_accept_error: function(jingle, stanza) {
- self._reset();
-
- Call.notify(
- JSJAC_JINGLE_SESSION_SINGLE,
- Common.bareXID(jingle.get_to()),
- 'declined',
- jingle.get_media()
- );
-
- Console.log('Jingle._args', 'session_accept_error');
- },
-
- session_accept_request: function(jingle, stanza) {
- Console.log('Jingle._args', 'session_accept_request');
- },
-
- session_info_pending: function(jingle) {
- Console.log('Jingle._args', 'session_info_pending');
- },
-
- session_info_success: function(jingle, stanza) {
- Console.log('Jingle._args', 'session_info_success');
- },
-
- session_info_error: function(jingle, stanza) {
- Console.log('Jingle._args', 'session_info_error');
- },
-
- session_info_request: function(jingle, stanza) {
- var info_name = jingle.utils.stanza_session_info(stanza);
-
- switch(info_name) {
- // Ringing?
- case JSJAC_JINGLE_SESSION_INFO_RINGING:
- Call.notify(
- JSJAC_JINGLE_SESSION_SINGLE,
- Common.bareXID(jingle.get_to()),
- 'ringing',
- jingle.get_media()
- );
- break;
- }
-
- Console.log('Jingle._args', 'session_info_request');
- },
-
- session_terminate_pending: function(jingle) {
- self._reset();
-
- Call.notify(
- JSJAC_JINGLE_SESSION_SINGLE,
- Common.bareXID(jingle.get_to()),
- 'ending',
- jingle.get_media()
- );
-
- Console.log('Jingle._args', 'session_terminate_pending');
- },
-
- session_terminate_success: function(jingle, stanza) {
- // Ensure we this is the same call session ID (SID)
- if(self._session.get_sid() == jingle.get_sid()) {
- if(self._bypass_termination_notify !== true) {
- self._reset();
-
- Call.notify(
- JSJAC_JINGLE_SESSION_SINGLE,
- Common.bareXID(jingle.get_to()),
- (self._call_ender === 'remote' ? 'remote_ended' : 'local_ended'),
- jingle.get_media()
- );
- }
-
- Console.debug('Jingle._args > session_terminate_success', 'Stopped current Jingle call');
- } else {
- Console.warn('Jingle._args > session_terminate_success', 'Dropped stanza with unmatching SID');
- }
-
- Console.log('Jingle._args', 'session_terminate_success');
- },
-
- session_terminate_error: function(jingle, stanza) {
- if(typeof jingle.parent != 'undefined') {
- jingle = jingle.parent;
- }
-
- // Ensure we this is the same call session ID (SID)
- if(self._session.get_sid() == jingle.get_sid()) {
- if(self._bypass_termination_notify !== true) {
- self._reset();
-
- Call.notify(
- JSJAC_JINGLE_SESSION_SINGLE,
- Common.bareXID(jingle.get_to()),
- 'error',
- jingle.get_media()
- );
- }
-
- Console.warn('Jingle._args > session_terminate_error', 'Stopped current Jingle call, but with brute force!');
- } else {
- Console.warn('Jingle._args > session_terminate_error', 'Dropped stanza with unmatching SID');
- }
-
- Console.log('Jingle._args', 'session_terminate_error');
- },
-
- session_terminate_request: function(jingle, stanza) {
- var notify_type;
- var reason = jingle.utils.stanza_terminate_reason(stanza);
-
- // The remote wants to end call
- self._call_ender = 'remote';
-
- // Notify depending on the termination reason
- switch(reason) {
- case JSJAC_JINGLE_REASON_CANCEL:
- notify_type = 'remote_canceled'; break;
- case JSJAC_JINGLE_REASON_BUSY:
- notify_type = 'busy'; break;
- case JSJAC_JINGLE_REASON_DECLINE:
- notify_type = 'declined'; break;
- default:
- notify_type = 'ending'; break;
- }
-
- self._reset();
-
- // Anything to notify?
- if(notify_type !== undefined) {
- if(notify_type !== 'ending') {
- self._bypass_termination_notify = true;
- }
-
- Call.notify(
- JSJAC_JINGLE_SESSION_SINGLE,
- Common.bareXID(jingle.get_to()),
- notify_type,
- jingle.get_media()
- );
- }
-
- Console.log('Jingle._args', 'session_terminate_request');
- }
- };
-
- if(sid && typeof sid == 'string') {
- args.sid = sid;
- }
- } catch(e) {
- Console.error('Jingle._args', e);
- } finally {
- return args;
- }
-
- };
-
-
- /**
- * Launch a new Jingle session with given buddy
- * @private
- * @param xid
- * @param mode
- * @param is_callee
- * @param stanza
- * @param [sid]
- * @return {boolean}
- */
- self._new = function(xid, mode, is_callee, stanza, sid) {
-
- var status = false;
-
- try {
- if(!xid) {
- throw 'No XID to be called given!';
- }
-
- var bare_xid = Common.bareXID(xid);
- var full_xid = xid;
- var bare_hash = hex_md5(bare_xid);
-
- // Caller mode?
- if(!is_callee && !Common.isFullXID(full_xid)) {
- var jingle_ns = (mode == 'audio') ? NS_JINGLE_APPS_RTP_AUDIO : NS_JINGLE_APPS_RTP_VIDEO;
- full_xid = Caps.getFeatureResource(bare_xid, jingle_ns);
-
- if(!full_xid) {
- throw 'Could not get user full XID to be called!';
- }
- }
-
- // Create interface for video containers
- $('body').addClass('in_jingle_call');
- var jingle_sel = self._create_interface(bare_xid, mode);
-
- // Filter media
- var media = null;
-
- switch(mode) {
- case 'audio':
- media = JSJAC_JINGLE_MEDIA_AUDIO; break;
- case 'video':
- media = JSJAC_JINGLE_MEDIA_VIDEO; break;
- }
-
- // Start the Jingle negotiation
- var args = self._args(
- con,
- full_xid,
- bare_hash,
- media,
- jingle_sel.find('.local_video video')[0],
- jingle_sel.find('.remote_video video')[0],
- sid
- );
-
- self._session = new JSJaCJingle.session(JSJAC_JINGLE_SESSION_SINGLE, args);
- self._call_ender = null;
- self._bypass_termination_notify = false;
-
- if(is_callee) {
- self._session.handle(stanza);
-
- Console.debug('Receive call form: ' + full_xid);
- } else {
- self._session.initiate();
-
- Console.debug('Emit call to: ' + full_xid);
- }
-
- status = true;
- } catch(e) {
- Console.error('Jingle._new', e);
- } finally {
- return status;
- }
-
- };
-
-
- /**
- * Adapts the Jingle view to the window size
- * @private
- * @return {undefined}
- */
- self._adapt = function() {
-
- try {
- if(self.in_call() && Common.exists('#jingle')) {
- Call.adapt_local(
- $('#jingle .local_video')
- );
-
- Call.adapt_remote(
- $('#jingle .videobox')
- );
- }
- } catch(e) {
- Console.error('Jingle._adapt', e);
- }
-
- };
-
-
- /**
- * Receive a Jingle call
- * @public
- * @param {string} xid
- * @param {object} stanza
- * @return {boolean}
- */
- self.receive = function(xid, stanza) {
-
- try {
- if(!Call.is_ongoing()) {
- self._new(xid, null, true, stanza);
- }
- } catch(e) {
- Console.error('Jingle.receive', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Start a Jingle call
- * @public
- * @param {string} xid
- * @param {string} mode
- * @return {boolean}
- */
- self.start = function(xid, mode) {
-
- try {
- // Remote user supports XEP-0353
- if(Caps.getFeatureResource(xid, NS_JINGLE_MESSAGE)) {
- Jingle.propose(xid, mode);
- } else {
- Jingle.initialize(xid, mode);
- }
- } catch(e) {
- Console.error('Jingle.start', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Initializes a Jingle call
- * @public
- * @param {string} xid
- * @param {string} mode
- * @return {boolean}
- */
- self.initialize = function(xid, mode) {
-
- try {
- if(!Call.is_ongoing()) {
- Console.info('Jingle.initialize', 'Initiating call with: ' + xid);
-
- self._new(xid, mode);
- }
- } catch(e) {
- Console.error('Jingle.initialize', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Proposes a Jingle call
- * @public
- * @param {string} xid
- * @param {string} mode
- * @return {boolean}
- */
- self.propose = function(xid, mode) {
-
- try {
- if(!Call.is_ongoing()) {
- Console.info('Jingle.propose', 'Proposing call to: ' + xid);
-
- var medias = [JSJAC_JINGLE_MEDIA_AUDIO];
-
- if(mode == 'video') {
- medias.push(JSJAC_JINGLE_MEDIA_VIDEO);
- }
-
- var call_id = JSJaCJingleBroadcast.propose(
- xid, medias,
-
- function(id) {
- // Timeout
- Call.notify(
- JSJAC_JINGLE_SESSION_SINGLE,
- xid,
- 'broadcast_timeout',
- mode
- );
-
- // Retract
- JSJaCJingleBroadcast.retract(xid, id);
- }
- );
-
- // Send directed presence? (for CAPS, XEP-compliant)
- if(!Common.exists('#roster .buddy[data-xid="' + escape(xid) + '"]')) {
- Presence.send(xid);
- }
-
- Call.notify(
- JSJAC_JINGLE_SESSION_SINGLE,
- xid,
- 'broadcast_proposing',
- mode,
- null,
-
- {
- call_id: call_id
- }
- );
- }
- } catch(e) {
- Console.error('Jingle.propose', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Follows up a Jingle call (from broadcast)
- * @public
- * @param {string} xid
- * @param {string} mode
- * @param {string} sid
- * @return {boolean}
- */
- self.follow_up = function(xid, mode, sid) {
-
- try {
- if(!Call.is_ongoing()) {
- self._new(xid, mode, false, null, sid);
- }
- } catch(e) {
- Console.error('Jingle.follow_up', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Reset current Jingle call
- * @public
- * @return {boolean}
- */
- self._reset = function() {
-
- try {
- // Trash interface
- Call.stop_counter();
- Call.stop_session();
- self._destroy_interface();
- $('body').removeClass('in_jingle_call');
-
- // Hack: stop audio in case it is still ringing
- Audio.stop('incoming-call');
- Audio.stop('outgoing-call');
- } catch(e) {
- Console.error('Jingle._reset', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Stops current Jingle call
- * @public
- * @param {boolean} abort
- * @return {boolean}
- */
- self.stop = function(abort) {
-
- try {
- // Reset interface
- self._reset();
-
- // Stop Jingle session
- if(self._session !== null) {
- self._call_ender = 'local';
-
- if(abort === true) {
- self._session.abort();
- self._session.get_session_terminate_error(self._session, null);
- } else {
- self._session.terminate();
- }
-
- Console.debug('Stopping current Jingle call...');
- } else {
- Console.warn('No Jingle call to be terminated!');
- }
- } catch(e) {
- Console.error('Jingle.stop', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Mutes current Jingle call
- * @public
- * @return {undefined}
- */
- self.mute = function() {
-
- try {
- Call.mute(
- self._session,
- $('#jingle .videobox .topbar .controls a')
- );
- } catch(e) {
- Console.error('Jingle.mute', e);
- }
-
- };
-
-
- /**
- * Unmutes current Jingle call
- * @public
- * @return {undefined}
- */
- self.unmute = function() {
-
- try {
- Call.unmute(
- self._session,
- $('#jingle .videobox .topbar .controls a')
- );
- } catch(e) {
- Console.error('Jingle.mute', e);
- }
-
- };
-
-
- /**
- * Checks whether user is in call or not
- * @public
- * @return {boolean}
- */
- self.in_call = function() {
-
- in_call = false;
-
- try {
- if(self._session &&
- (self._session.get_status() === JSJAC_JINGLE_STATUS_INITIATING ||
- self._session.get_status() === JSJAC_JINGLE_STATUS_INITIATED ||
- self._session.get_status() === JSJAC_JINGLE_STATUS_ACCEPTING ||
- self._session.get_status() === JSJAC_JINGLE_STATUS_ACCEPTED ||
- self._session.get_status() === JSJAC_JINGLE_STATUS_TERMINATING)) {
- in_call = true;
- }
- } catch(e) {
- Console.error('Jingle.in_call', e);
- } finally {
- return in_call;
- }
-
- };
-
-
- /**
- * Checks if the given call SID is the same as the current call's one
- * @public
- * @param {object}
- * @return {boolean}
- */
- self.is_same_sid = function(jingle) {
-
- try {
- return Call.is_same_sid(self._session, jingle);
- } catch(e) {
- Console.error('Jingle.is_same_sid', e);
- }
-
- };
-
-
- /**
- * Returns if current Jingle call is audio
- * @public
- * @return {boolean}
- */
- self.is_audio = function() {
-
- try {
- return Call.is_audio(self._session);
- } catch(e) {
- Console.error('Jingle.is_audio', e);
- }
-
- };
-
-
- /**
- * Returns if current Jingle call is video
- * @public
- * @return {boolean}
- */
- self.is_video = function() {
-
- try {
- return Call.is_video(self._session);
- } catch(e) {
- Console.error('Jingle.is_video', e);
- }
-
- };
-
-
- /**
- * Get the notification map
- * @private
- * @return {object}
- */
- self._notify_map = function() {
-
- try {
- var broadcast_media_fn = function(xid, mode, attrs) {
- JSJaCJingleBroadcast.accept(
- attrs.full_xid, attrs.call_id, attrs.medias
- );
-
- // Send directed presence? (for CAPS, XEP-compliant)
- if(!Common.exists('#roster .buddy[data-xid="' + escape(xid) + '"]')) {
- Presence.send(attrs.full_xid);
- }
-
- // Marker to auto-accept call later
- Call.call_auto_accept.from = attrs.full_xid;
- Call.call_auto_accept.sid = attrs.call_id;
-
- var medias_arr = [];
-
- for(var cur_media in attrs.medias) {
- medias_arr.push(cur_media);
- }
-
- Audio.stop('incoming-call');
-
- Call.notify(
- JSJAC_JINGLE_SESSION_SINGLE,
- xid,
- 'broadcast_wait',
- medias_arr
- );
-
- // Schedule timeout (in case we don't receive the Jingle initialization stanza)
- setTimeout(function() {
- if(self._session !== null &&
- Call.call_auto_accept.sid == self._session.get_sid() &&
- self._session.get_status() !== JSJAC_JINGLE_STATUS_INACTIVE) {
- // Call received
- Call.call_auto_accept.from = null;
- Call.call_auto_accept.sid = null;
- } else {
- // Reset UI (timeout)
- Call.notify(
- JSJAC_JINGLE_SESSION_SINGLE,
- xid,
- 'broadcast_error',
- medias_arr
- );
- }
- }, (JSJAC_JINGLE_BROADCAST_TIMEOUT * 1000));
- };
-
- return {
- 'call_audio': {
- 'text': Common._e("Is calling you"),
-
- 'buttons': {
- 'accept': {
- 'text': Common._e("Accept"),
- 'color': 'green',
- 'cb': function(xid, mode) {
- self._session.accept();
- Audio.stop('incoming-call');
- }
- },
-
- 'decline': {
- 'text': Common._e("Decline"),
- 'color': 'red',
- 'cb': function(xid, mode) {
- self._session.terminate(JSJAC_JINGLE_REASON_DECLINE);
- Audio.stop('incoming-call');
- }
- }
- }
- },
-
- 'call_video': {
- 'text': Common._e("Is calling you"),
-
- 'buttons': {
- 'accept': {
- 'text': Common._e("Accept"),
- 'color': 'green',
- 'cb': function(xid, mode) {
- self._session.accept();
- Audio.stop('incoming-call');
- }
- },
-
- 'decline': {
- 'text': Common._e("Decline"),
- 'color': 'red',
- 'cb': function(xid, mode) {
- self._session.terminate(JSJAC_JINGLE_REASON_DECLINE);
- Audio.stop('incoming-call');
- }
- }
- }
- },
-
- 'broadcast_audio': {
- 'text': Common._e("Is calling you"),
-
- 'buttons': {
- 'accept': {
- 'text': Common._e("Accept"),
- 'color': 'green',
- 'cb': broadcast_media_fn
- },
-
- 'decline': {
- 'text': Common._e("Decline"),
- 'color': 'red',
- 'cb': function(xid, mode, attrs) {
- JSJaCJingleBroadcast.reject(
- attrs.full_xid, attrs.call_id, attrs.medias
- );
-
- Audio.stop('incoming-call');
- }
- }
- }
- },
-
- 'broadcast_video': {
- 'text': Common._e("Is calling you"),
-
- 'buttons': {
- 'accept': {
- 'text': Common._e("Accept"),
- 'color': 'green',
- 'cb': broadcast_media_fn
- },
-
- 'decline': {
- 'text': Common._e("Decline"),
- 'color': 'red',
- 'cb': function(xid, mode, attrs) {
- JSJaCJingleBroadcast.reject(
- attrs.full_xid, attrs.call_id, attrs.medias
- );
-
- Audio.stop('incoming-call');
- }
- }
- }
- },
-
- 'broadcast_wait': {
- 'text': Common._e("Waiting...")
- },
-
- 'broadcast_proposing': {
- 'text': Common._e("Proposing call..."),
-
- 'buttons': {
- 'cancel': {
- 'text': Common._e("Cancel"),
- 'color': 'red',
- 'cb': function(xid, mode, attrs) {
- // Retract from call
- JSJaCJingleBroadcast.retract(
- xid,
- attrs.call_id
- );
- }
- }
- }
- },
-
- 'broadcast_timeout': {
- 'text': Common._e("No answer"),
-
- 'buttons': {
- 'okay': {
- 'text': Common._e("Okay"),
- 'color': 'blue',
- 'cb': function(xid, mode) {
- self._reset();
- }
- }
- }
- },
-
- 'broadcast_error': {
- 'text': Common._e("Call error"),
-
- 'buttons': {
- 'cancel': {
- 'text': Common._e("Cancel"),
- 'color': 'red',
- 'cb': function(xid, mode) {
- self._reset();
- }
- }
- }
- },
-
- 'initiating': {
- 'text': Common._e("Initiating call"),
-
- 'buttons': {
- 'cancel': {
- 'text': Common._e("Cancel"),
- 'color': 'red',
- 'cb': function(xid, mode) {
- self._session.terminate(JSJAC_JINGLE_REASON_CANCEL);
- }
- }
- }
- },
-
- 'waiting': {
- 'text': Common._e("Waiting..."),
-
- 'buttons': {
- 'cancel': {
- 'text': Common._e("Cancel"),
- 'color': 'red',
- 'cb': function(xid, mode) {
- self._session.terminate(JSJAC_JINGLE_REASON_CANCEL);
- }
- }
- }
- },
-
- 'ringing': {
- 'text': Common._e("Ringing..."),
-
- 'buttons': {
- 'cancel': {
- 'text': Common._e("Cancel"),
- 'color': 'red',
- 'cb': function(xid, mode) {
- self._session.terminate(JSJAC_JINGLE_REASON_CANCEL);
- }
- }
- }
- },
-
- 'declined': {
- 'text': Common._e("Declined the call"),
-
- 'buttons': {
- 'okay': {
- 'text': Common._e("Okay"),
- 'color': 'blue',
- 'cb': function(xid, mode) {
- self._reset();
- }
- }
- }
- },
-
- 'busy': {
- 'text': Common._e("Is already in a call"),
-
- 'buttons': {
- 'okay': {
- 'text': Common._e("Okay"),
- 'color': 'blue',
- 'cb': function(xid, mode) {
- self._reset();
- }
- }
- }
- },
-
- 'connecting': {
- 'text': Common._e("Connecting to call..."),
-
- 'buttons': {
- 'cancel': {
- 'text': Common._e("Cancel"),
- 'color': 'red',
- 'cb': function(xid, mode) {
- self._session.terminate(JSJAC_JINGLE_REASON_CANCEL);
- }
- }
- }
- },
-
- 'error': {
- 'text': Common._e("Call error"),
-
- 'buttons': {
- 'retry': {
- 'text': Common._e("Retry"),
- 'color': 'blue',
- 'cb': function(xid, mode) {
- self.start(xid, mode);
- }
- },
-
- 'cancel': {
- 'text': Common._e("Cancel"),
- 'color': 'red',
- 'cb': function(xid, mode) {
- self._reset();
- }
- }
- }
- },
-
- 'ending': {
- 'text': Common._e("Ending call...")
- },
-
- 'local_ended': {
- 'text': Common._e("Call ended"),
-
- 'buttons': {
- 'okay': {
- 'text': Common._e("Okay"),
- 'color': 'blue',
- 'cb': function(xid, mode) {
- self._reset();
- }
- }
- }
- },
-
- 'remote_ended': {
- 'text': Common._e("Ended the call"),
-
- 'buttons': {
- 'okay': {
- 'text': Common._e("Okay"),
- 'color': 'blue',
- 'cb': function(xid, mode) {
- self._reset();
- }
- }
- }
- },
-
- 'local_canceled': {
- 'text': Common._e("Call canceled"),
-
- 'buttons': {
- 'okay': {
- 'text': Common._e("Okay"),
- 'color': 'blue',
- 'cb': function(xid, mode) {
- self._reset();
- }
- }
- }
- },
-
- 'remote_canceled': {
- 'text': Common._e("Canceled the call"),
-
- 'buttons': {
- 'okay': {
- 'text': Common._e("Okay"),
- 'color': 'blue',
- 'cb': function(xid, mode) {
- self._reset();
- }
- }
- }
- }
- };
- } catch(e) {
- Console.error('Jingle._notify_map', e);
-
- return {};
- }
-
- };
-
-
- /**
- * Create the Jingle interface
- * @private
- * @param {string} room
- * @param {string} mode
- * @return {object}
- */
- self._create_interface = function(xid, mode) {
-
- try {
- // Jingle interface already exists?
- if(Common.exists('#jingle')) {
- throw 'Jingle interface already exist!';
- }
-
- // Create DOM
- $('body').append(
- '<div id="jingle" class="videochat_box lock removable ' + hex_md5(xid) + '" data-xid="' + Common.encodeQuotes(xid) + '" data-mode="' + Common.encodeQuotes(mode) + '">' +
- '<div class="videobox videochat_items">' +
- '<div class="topbar">' +
- '<div class="card">' +
- '<div class="avatar-container">' +
- '<img class="avatar" src="' + './images/others/default-avatar.png' + '" alt="" />' +
- '</div>' +
-
- '<div class="identity">' +
- '<span class="name">' + Name.getBuddy(xid).htmlEnc() + '</span>' +
- '<span class="xid">' + xid.htmlEnc() + '</span>' +
- '</div>' +
- '</div>' +
-
- '<div class="controls">' +
- '<a href="#" class="stop control-button" data-type="stop"><span class="icon call-images"></span>' + Common._e("Stop") + '</a>' +
- '<a href="#" class="mute control-button" data-type="mute"><span class="icon call-images"></span>' + Common._e("Mute") + '</a>' +
- '<a href="#" class="unmute control-button" data-type="unmute"><span class="icon call-images"></span>' + Common._e("Unmute") + '</a>' +
- '</div>' +
-
- '<div class="elapsed">00:00:00</div>' +
-
- '<div class="actions">' +
- '<a href="#" class="close action-button call-images" data-type="close"></a>' +
- '</div>' +
- '</div>' +
-
- '<div class="local_video">' +
- '<video src="" alt="" poster="' + './images/placeholders/jingle_video_local.png' + '"></video>' +
- '</div>' +
-
- '<div class="remote_video">' +
- '<video src="" alt="" poster="' + './images/placeholders/jingle_video_remote.png' + '"></video>' +
- '</div>' +
-
- '<div class="branding call-images"></div>' +
- '</div>' +
- '</div>'
- );
-
- // Apply events
- self._events_interface();
-
- // Apply user avatar
- Avatar.get(xid, 'cache', 'true', 'forget');
- } catch(e) {
- Console.error('Jingle._create_interface', e);
- } finally {
- return $('#jingle');
- }
-
- };
-
-
- /**
- * Destroy the Jingle interface
- * @private
- * @return {undefined}
- */
- self._destroy_interface = function() {
-
- try {
- Call.destroy_interface(
- $('#jingle')
- );
- } catch(e) {
- Console.error('Jingle._destroy_interface', e);
- }
-
- };
-
-
- /**
- * Show the Jingle interface
- * @private
- * @return {boolean}
- */
- self._show_interface = function() {
-
- try {
- if(self.is_video()) {
- Call.show_interface(
- self,
- $('#jingle'),
- $('#jingle .videobox')
- );
- }
- } catch(e) {
- Console.error('Jingle._show_interface', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Hide the Jingle interface
- * @private
- * @return {boolean}
- */
- self._hide_interface = function() {
-
- try {
- Call.hide_interface(
- $('#jingle'),
- $('#jingle .videobox')
- );
- } catch(e) {
- Console.error('Jingle._hide_interface', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Attaches interface events
- * @private
- * @return {boolean}
- */
- self._events_interface = function() {
-
- try {
- // Apply events
- Call.events_interface(
- self,
- $('#jingle'),
- $('#jingle .videobox')
- );
- } catch(e) {
- Console.error('Jingle._events_interface', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.launch = function() {
-
- try {
- $(window).resize(self._adapt());
- } catch(e) {
- Console.error('Jingle.launch', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
-
-Jingle.launch();
diff --git a/app/javascripts/jquery.form.js b/app/javascripts/jquery.form.js
deleted file mode 100644
index 6961d215..00000000
--- a/app/javascripts/jquery.form.js
+++ /dev/null
@@ -1,1278 +0,0 @@
-/*!
- * jQuery Form Plugin
- * version: 3.48.0-2013.12.28
- * Requires jQuery v1.5 or later
- * Copyright (c) 2013 M. Alsup
- * Examples and documentation at: http://malsup.com/jquery/form/
- * Project repository: https://github.com/malsup/form
- * Dual licensed under the MIT and GPL licenses.
- * https://github.com/malsup/form#copyright-and-license
- */
-/*global ActiveXObject */
-
-// AMD support
-(function (factory) {
- "use strict";
- if (typeof define === 'function' && define.amd) {
- // using AMD; register as anon module
- define(['jquery'], factory);
- } else {
- // no AMD; invoke directly
- factory( (typeof(jQuery) != 'undefined') ? jQuery : window.Zepto );
- }
-}
-
-(function($) {
-"use strict";
-
-/*
- Usage Note:
- -----------
- Do not use both ajaxSubmit and ajaxForm on the same form. These
- functions are mutually exclusive. Use ajaxSubmit if you want
- to bind your own submit handler to the form. For example,
-
- $(document).ready(function() {
- $('#myForm').on('submit', function(e) {
- e.preventDefault(); // <-- important
- $(this).ajaxSubmit({
- target: '#output'
- });
- });
- });
-
- Use ajaxForm when you want the plugin to manage all the event binding
- for you. For example,
-
- $(document).ready(function() {
- $('#myForm').ajaxForm({
- target: '#output'
- });
- });
-
- You can also use ajaxForm with delegation (requires jQuery v1.7+), so the
- form does not have to exist when you invoke ajaxForm:
-
- $('#myForm').ajaxForm({
- delegation: true,
- target: '#output'
- });
-
- When using ajaxForm, the ajaxSubmit function will be invoked for you
- at the appropriate time.
-*/
-
-/**
- * Feature detection
- */
-var feature = {};
-feature.fileapi = $("<input type='file'/>").get(0).files !== undefined;
-feature.formdata = window.FormData !== undefined;
-
-var hasProp = !!$.fn.prop;
-
-// attr2 uses prop when it can but checks the return type for
-// an expected string. this accounts for the case where a form
-// contains inputs with names like "action" or "method"; in those
-// cases "prop" returns the element
-$.fn.attr2 = function() {
- if ( ! hasProp ) {
- return this.attr.apply(this, arguments);
- }
- var val = this.prop.apply(this, arguments);
- if ( ( val && val.jquery ) || typeof val === 'string' ) {
- return val;
- }
- return this.attr.apply(this, arguments);
-};
-
-/**
- * ajaxSubmit() provides a mechanism for immediately submitting
- * an HTML form using AJAX.
- */
-$.fn.ajaxSubmit = function(options) {
- /*jshint scripturl:true */
-
- // fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
- if (!this.length) {
- log('ajaxSubmit: skipping submit process - no element selected');
- return this;
- }
-
- var method, action, url, $form = this;
-
- if (typeof options == 'function') {
- options = { success: options };
- }
- else if ( options === undefined ) {
- options = {};
- }
-
- method = options.type || this.attr2('method');
- action = options.url || this.attr2('action');
-
- url = (typeof action === 'string') ? $.trim(action) : '';
- url = url || window.location.href || '';
- if (url) {
- // clean url (don't include hash vaue)
- url = (url.match(/^([^#]+)/)||[])[1];
- }
-
- options = $.extend(true, {
- url: url,
- success: $.ajaxSettings.success,
- type: method || $.ajaxSettings.type,
- iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'
- }, options);
-
- // hook for manipulating the form data before it is extracted;
- // convenient for use with rich editors like tinyMCE or FCKEditor
- var veto = {};
- this.trigger('form-pre-serialize', [this, options, veto]);
- if (veto.veto) {
- log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
- return this;
- }
-
- // provide opportunity to alter form data before it is serialized
- if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
- log('ajaxSubmit: submit aborted via beforeSerialize callback');
- return this;
- }
-
- var traditional = options.traditional;
- if ( traditional === undefined ) {
- traditional = $.ajaxSettings.traditional;
- }
-
- var elements = [];
- var qx, a = this.formToArray(options.semantic, elements);
- if (options.data) {
- options.extraData = options.data;
- qx = $.param(options.data, traditional);
- }
-
- // give pre-submit callback an opportunity to abort the submit
- if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
- log('ajaxSubmit: submit aborted via beforeSubmit callback');
- return this;
- }
-
- // fire vetoable 'validate' event
- this.trigger('form-submit-validate', [a, this, options, veto]);
- if (veto.veto) {
- log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
- return this;
- }
-
- var q = $.param(a, traditional);
- if (qx) {
- q = ( q ? (q + '&' + qx) : qx );
- }
- if (options.type.toUpperCase() == 'GET') {
- options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
- options.data = null; // data is null for 'get'
- }
- else {
- options.data = q; // data is the query string for 'post'
- }
-
- var callbacks = [];
- if (options.resetForm) {
- callbacks.push(function() { $form.resetForm(); });
- }
- if (options.clearForm) {
- callbacks.push(function() { $form.clearForm(options.includeHidden); });
- }
-
- // perform a load on the target only if dataType is not provided
- if (!options.dataType && options.target) {
- var oldSuccess = options.success || function(){};
- callbacks.push(function(data) {
- var fn = options.replaceTarget ? 'replaceWith' : 'html';
- $(options.target)[fn](data).each(oldSuccess, arguments);
- });
- }
- else if (options.success) {
- callbacks.push(options.success);
- }
-
- options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg
- var context = options.context || this ; // jQuery 1.4+ supports scope context
- for (var i=0, max=callbacks.length; i < max; i++) {
- callbacks[i].apply(context, [data, status, xhr || $form, $form]);
- }
- };
-
- if (options.error) {
- var oldError = options.error;
- options.error = function(xhr, status, error) {
- var context = options.context || this;
- oldError.apply(context, [xhr, status, error, $form]);
- };
- }
-
- if (options.complete) {
- var oldComplete = options.complete;
- options.complete = function(xhr, status) {
- var context = options.context || this;
- oldComplete.apply(context, [xhr, status, $form]);
- };
- }
-
- // are there files to upload?
-
- // [value] (issue #113), also see comment:
- // https://github.com/malsup/form/commit/588306aedba1de01388032d5f42a60159eea9228#commitcomment-2180219
- var fileInputs = $('input[type=file]:enabled', this).filter(function() { return $(this).val() !== ''; });
-
- var hasFileInputs = fileInputs.length > 0;
- var mp = 'multipart/form-data';
- var multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp);
-
- var fileAPI = feature.fileapi && feature.formdata;
- log("fileAPI :" + fileAPI);
- var shouldUseFrame = (hasFileInputs || multipart) && !fileAPI;
-
- var jqxhr;
-
- // options.iframe allows user to force iframe mode
- // 06-NOV-09: now defaulting to iframe mode if file input is detected
- if (options.iframe !== false && (options.iframe || shouldUseFrame)) {
- // hack to fix Safari hang (thanks to Tim Molendijk for this)
- // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
- if (options.closeKeepAlive) {
- $.get(options.closeKeepAlive, function() {
- jqxhr = fileUploadIframe(a);
- });
- }
- else {
- jqxhr = fileUploadIframe(a);
- }
- }
- else if ((hasFileInputs || multipart) && fileAPI) {
- jqxhr = fileUploadXhr(a);
- }
- else {
- jqxhr = $.ajax(options);
- }
-
- $form.removeData('jqxhr').data('jqxhr', jqxhr);
-
- // clear element array
- for (var k=0; k < elements.length; k++) {
- elements[k] = null;
- }
-
- // fire 'notify' event
- this.trigger('form-submit-notify', [this, options]);
- return this;
-
- // utility fn for deep serialization
- function deepSerialize(extraData){
- var serialized = $.param(extraData, options.traditional).split('&');
- var len = serialized.length;
- var result = [];
- var i, part;
- for (i=0; i < len; i++) {
- // #252; undo param space replacement
- serialized[i] = serialized[i].replace(/\+/g,' ');
- part = serialized[i].split('=');
- // #278; use array instead of object storage, favoring array serializations
- result.push([decodeURIComponent(part[0]), decodeURIComponent(part[1])]);
- }
- return result;
- }
-
- // XMLHttpRequest Level 2 file uploads (big hat tip to francois2metz)
- function fileUploadXhr(a) {
- var formdata = new FormData();
-
- for (var i=0; i < a.length; i++) {
- formdata.append(a[i].name, a[i].value);
- }
-
- if (options.extraData) {
- var serializedData = deepSerialize(options.extraData);
- for (i=0; i < serializedData.length; i++) {
- if (serializedData[i]) {
- formdata.append(serializedData[i][0], serializedData[i][1]);
- }
- }
- }
-
- options.data = null;
-
- var s = $.extend(true, {}, $.ajaxSettings, options, {
- contentType: false,
- processData: false,
- cache: false,
- type: method || 'POST'
- });
-
- if (options.uploadProgress) {
- // workaround because jqXHR does not expose upload property
- s.xhr = function() {
- var xhr = $.ajaxSettings.xhr();
- if (xhr.upload) {
- xhr.upload.addEventListener('progress', function(event) {
- var percent = 0;
- var position = event.loaded || event.position; /*event.position is deprecated*/
- var total = event.total;
- if (event.lengthComputable) {
- percent = Math.ceil(position / total * 100);
- }
- options.uploadProgress(event, position, total, percent);
- }, false);
- }
- return xhr;
- };
- }
-
- s.data = null;
- var beforeSend = s.beforeSend;
- s.beforeSend = function(xhr, o) {
- //Send FormData() provided by user
- if (options.formData) {
- o.data = options.formData;
- }
- else {
- o.data = formdata;
- }
- if(beforeSend) {
- beforeSend.call(this, xhr, o);
- }
- };
- return $.ajax(s);
- }
-
- // private function for handling file uploads (hat tip to YAHOO!)
- function fileUploadIframe(a) {
- var form = $form[0], el, i, s, g, id, $io, io, xhr, sub, n, timedOut, timeoutHandle;
- var deferred = $.Deferred();
-
- // #341
- deferred.abort = function(status) {
- xhr.abort(status);
- };
-
- if (a) {
- // ensure that every serialized input is still enabled
- for (i=0; i < elements.length; i++) {
- el = $(elements[i]);
- if ( hasProp ) {
- el.prop('disabled', false);
- }
- else {
- el.removeAttr('disabled');
- }
- }
- }
-
- s = $.extend(true, {}, $.ajaxSettings, options);
- s.context = s.context || s;
- id = 'jqFormIO' + (new Date().getTime());
- if (s.iframeTarget) {
- $io = $(s.iframeTarget);
- n = $io.attr2('name');
- if (!n) {
- $io.attr2('name', id);
- }
- else {
- id = n;
- }
- }
- else {
- $io = $('<iframe name="' + id + '" src="'+ s.iframeSrc +'" />');
- $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
- }
- io = $io[0];
-
-
- xhr = { // mock object
- aborted: 0,
- responseText: null,
- responseXML: null,
- status: 0,
- statusText: 'n/a',
- getAllResponseHeaders: function() {},
- getResponseHeader: function() {},
- setRequestHeader: function() {},
- abort: function(status) {
- var e = (status === 'timeout' ? 'timeout' : 'aborted');
- log('aborting upload... ' + e);
- this.aborted = 1;
-
- try { // #214, #257
- if (io.contentWindow.document.execCommand) {
- io.contentWindow.document.execCommand('Stop');
- }
- }
- catch(ignore) {}
-
- $io.attr('src', s.iframeSrc); // abort op in progress
- xhr.error = e;
- if (s.error) {
- s.error.call(s.context, xhr, e, status);
- }
- if (g) {
- $.event.trigger("ajaxError", [xhr, s, e]);
- }
- if (s.complete) {
- s.complete.call(s.context, xhr, e);
- }
- }
- };
-
- g = s.global;
- // trigger ajax global events so that activity/block indicators work like normal
- if (g && 0 === $.active++) {
- $.event.trigger("ajaxStart");
- }
- if (g) {
- $.event.trigger("ajaxSend", [xhr, s]);
- }
-
- if (s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false) {
- if (s.global) {
- $.active--;
- }
- deferred.reject();
- return deferred;
- }
- if (xhr.aborted) {
- deferred.reject();
- return deferred;
- }
-
- // add submitting element to data if we know it
- sub = form.clk;
- if (sub) {
- n = sub.name;
- if (n && !sub.disabled) {
- s.extraData = s.extraData || {};
- s.extraData[n] = sub.value;
- if (sub.type == "image") {
- s.extraData[n+'.x'] = form.clk_x;
- s.extraData[n+'.y'] = form.clk_y;
- }
- }
- }
-
- var CLIENT_TIMEOUT_ABORT = 1;
- var SERVER_ABORT = 2;
-
- function getDoc(frame) {
- /* it looks like contentWindow or contentDocument do not
- * carry the protocol property in ie8, when running under ssl
- * frame.document is the only valid response document, since
- * the protocol is know but not on the other two objects. strange?
- * "Same origin policy" http://en.wikipedia.org/wiki/Same_origin_policy
- */
-
- var doc = null;
-
- // IE8 cascading access check
- try {
- if (frame.contentWindow) {
- doc = frame.contentWindow.document;
- }
- } catch(err) {
- // IE8 access denied under ssl & missing protocol
- log('cannot get iframe.contentWindow document: ' + err);
- }
-
- if (doc) { // successful getting content
- return doc;
- }
-
- try { // simply checking may throw in ie8 under ssl or mismatched protocol
- doc = frame.contentDocument ? frame.contentDocument : frame.document;
- } catch(err) {
- // last attempt
- log('cannot get iframe.contentDocument: ' + err);
- doc = frame.document;
- }
- return doc;
- }
-
- // Rails CSRF hack (thanks to Yvan Barthelemy)
- var csrf_token = $('meta[name=csrf-token]').attr('content');
- var csrf_param = $('meta[name=csrf-param]').attr('content');
- if (csrf_param && csrf_token) {
- s.extraData = s.extraData || {};
- s.extraData[csrf_param] = csrf_token;
- }
-
- // take a breath so that pending repaints get some cpu time before the upload starts
- function doSubmit() {
- // make sure form attrs are set
- var t = $form.attr2('target'),
- a = $form.attr2('action'),
- mp = 'multipart/form-data',
- et = $form.attr('enctype') || $form.attr('encoding') || mp;
-
- // update form attrs in IE friendly way
- form.setAttribute('target',id);
- if (!method || /post/i.test(method) ) {
- form.setAttribute('method', 'POST');
- }
- if (a != s.url) {
- form.setAttribute('action', s.url);
- }
-
- // ie borks in some cases when setting encoding
- if (! s.skipEncodingOverride && (!method || /post/i.test(method))) {
- $form.attr({
- encoding: 'multipart/form-data',
- enctype: 'multipart/form-data'
- });
- }
-
- // support timout
- if (s.timeout) {
- timeoutHandle = setTimeout(function() { timedOut = true; cb(CLIENT_TIMEOUT_ABORT); }, s.timeout);
- }
-
- // look for server aborts
- function checkState() {
- try {
- var state = getDoc(io).readyState;
- log('state = ' + state);
- if (state && state.toLowerCase() == 'uninitialized') {
- setTimeout(checkState,50);
- }
- }
- catch(e) {
- log('Server abort: ' , e, ' (', e.name, ')');
- cb(SERVER_ABORT);
- if (timeoutHandle) {
- clearTimeout(timeoutHandle);
- }
- timeoutHandle = undefined;
- }
- }
-
- // add "extra" data to form if provided in options
- var extraInputs = [];
- try {
- if (s.extraData) {
- for (var n in s.extraData) {
- if (s.extraData.hasOwnProperty(n)) {
- // if using the $.param format that allows for multiple values with the same name
- if($.isPlainObject(s.extraData[n]) && s.extraData[n].hasOwnProperty('name') && s.extraData[n].hasOwnProperty('value')) {
- extraInputs.push(
- $('<input type="hidden" name="'+s.extraData[n].name+'">').val(s.extraData[n].value)
- .appendTo(form)[0]);
- } else {
- extraInputs.push(
- $('<input type="hidden" name="'+n+'">').val(s.extraData[n])
- .appendTo(form)[0]);
- }
- }
- }
- }
-
- if (!s.iframeTarget) {
- // add iframe to doc and submit the form
- $io.appendTo('body');
- }
- if (io.attachEvent) {
- io.attachEvent('onload', cb);
- }
- else {
- io.addEventListener('load', cb, false);
- }
- setTimeout(checkState,15);
-
- try {
- form.submit();
- } catch(err) {
- // just in case form has element with name/id of 'submit'
- var submitFn = document.createElement('form').submit;
- submitFn.apply(form);
- }
- }
- finally {
- // reset attrs and remove "extra" input elements
- form.setAttribute('action',a);
- form.setAttribute('enctype', et); // #380
- if(t) {
- form.setAttribute('target', t);
- } else {
- $form.removeAttr('target');
- }
- $(extraInputs).remove();
- }
- }
-
- if (s.forceSync) {
- doSubmit();
- }
- else {
- setTimeout(doSubmit, 10); // this lets dom updates render
- }
-
- var data, doc, domCheckCount = 50, callbackProcessed;
-
- function cb(e) {
- if (xhr.aborted || callbackProcessed) {
- return;
- }
-
- doc = getDoc(io);
- if(!doc) {
- log('cannot access response document');
- e = SERVER_ABORT;
- }
- if (e === CLIENT_TIMEOUT_ABORT && xhr) {
- xhr.abort('timeout');
- deferred.reject(xhr, 'timeout');
- return;
- }
- else if (e == SERVER_ABORT && xhr) {
- xhr.abort('server abort');
- deferred.reject(xhr, 'error', 'server abort');
- return;
- }
-
- if (!doc || doc.location.href == s.iframeSrc) {
- // response not received yet
- if (!timedOut) {
- return;
- }
- }
- if (io.detachEvent) {
- io.detachEvent('onload', cb);
- }
- else {
- io.removeEventListener('load', cb, false);
- }
-
- var status = 'success', errMsg;
- try {
- if (timedOut) {
- throw 'timeout';
- }
-
- var isXml = s.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc);
- log('isXml='+isXml);
- if (!isXml && window.opera && (doc.body === null || !doc.body.innerHTML)) {
- if (--domCheckCount) {
- // in some browsers (Opera) the iframe DOM is not always traversable when
- // the onload callback fires, so we loop a bit to accommodate
- log('requeing onLoad callback, DOM not available');
- setTimeout(cb, 250);
- return;
- }
- // let this fall through because server response could be an empty document
- //log('Could not access iframe DOM after mutiple tries.');
- //throw 'DOMException: not available';
- }
-
- //log('response detected');
- var docRoot = doc.body ? doc.body : doc.documentElement;
- xhr.responseText = docRoot ? docRoot.innerHTML : null;
- xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
- if (isXml) {
- s.dataType = 'xml';
- }
- xhr.getResponseHeader = function(header){
- var headers = {'content-type': s.dataType};
- return headers[header.toLowerCase()];
- };
- // support for XHR 'status' & 'statusText' emulation :
- if (docRoot) {
- xhr.status = Number( docRoot.getAttribute('status') ) || xhr.status;
- xhr.statusText = docRoot.getAttribute('statusText') || xhr.statusText;
- }
-
- var dt = (s.dataType || '').toLowerCase();
- var scr = /(json|script|text)/.test(dt);
- if (scr || s.textarea) {
- // see if user embedded response in textarea
- var ta = doc.getElementsByTagName('textarea')[0];
- if (ta) {
- xhr.responseText = ta.value;
- // support for XHR 'status' & 'statusText' emulation :
- xhr.status = Number( ta.getAttribute('status') ) || xhr.status;
- xhr.statusText = ta.getAttribute('statusText') || xhr.statusText;
- }
- else if (scr) {
- // account for browsers injecting pre around json response
- var pre = doc.getElementsByTagName('pre')[0];
- var b = doc.getElementsByTagName('body')[0];
- if (pre) {
- xhr.responseText = pre.textContent ? pre.textContent : pre.innerText;
- }
- else if (b) {
- xhr.responseText = b.textContent ? b.textContent : b.innerText;
- }
- }
- }
- else if (dt == 'xml' && !xhr.responseXML && xhr.responseText) {
- xhr.responseXML = toXml(xhr.responseText);
- }
-
- try {
- data = httpData(xhr, dt, s);
- }
- catch (err) {
- status = 'parsererror';
- xhr.error = errMsg = (err || status);
- }
- }
- catch (err) {
- log('error caught: ',err);
- status = 'error';
- xhr.error = errMsg = (err || status);
- }
-
- if (xhr.aborted) {
- log('upload aborted');
- status = null;
- }
-
- if (xhr.status) { // we've set xhr.status
- status = (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) ? 'success' : 'error';
- }
-
- // ordering of these callbacks/triggers is odd, but that's how $.ajax does it
- if (status === 'success') {
- if (s.success) {
- s.success.call(s.context, data, 'success', xhr);
- }
- deferred.resolve(xhr.responseText, 'success', xhr);
- if (g) {
- $.event.trigger("ajaxSuccess", [xhr, s]);
- }
- }
- else if (status) {
- if (errMsg === undefined) {
- errMsg = xhr.statusText;
- }
- if (s.error) {
- s.error.call(s.context, xhr, status, errMsg);
- }
- deferred.reject(xhr, 'error', errMsg);
- if (g) {
- $.event.trigger("ajaxError", [xhr, s, errMsg]);
- }
- }
-
- if (g) {
- $.event.trigger("ajaxComplete", [xhr, s]);
- }
-
- if (g && ! --$.active) {
- $.event.trigger("ajaxStop");
- }
-
- if (s.complete) {
- s.complete.call(s.context, xhr, status);
- }
-
- callbackProcessed = true;
- if (s.timeout) {
- clearTimeout(timeoutHandle);
- }
-
- // clean up
- setTimeout(function() {
- if (!s.iframeTarget) {
- $io.remove();
- }
- else { //adding else to clean up existing iframe response.
- $io.attr('src', s.iframeSrc);
- }
- xhr.responseXML = null;
- }, 100);
- }
-
- var toXml = $.parseXML || function(s, doc) { // use parseXML if available (jQuery 1.5+)
- if (window.ActiveXObject) {
- doc = new ActiveXObject('Microsoft.XMLDOM');
- doc.async = 'false';
- doc.loadXML(s);
- }
- else {
- doc = (new DOMParser()).parseFromString(s, 'text/xml');
- }
- return (doc && doc.documentElement && doc.documentElement.nodeName != 'parsererror') ? doc : null;
- };
- var parseJSON = $.parseJSON || function(s) {
- /*jslint evil:true */
- return window['eval']('(' + s + ')');
- };
-
- var httpData = function( xhr, type, s ) { // mostly lifted from jq1.4.4
-
- var ct = xhr.getResponseHeader('content-type') || '',
- xml = type === 'xml' || !type && ct.indexOf('xml') >= 0,
- data = xml ? xhr.responseXML : xhr.responseText;
-
- if (xml && data.documentElement.nodeName === 'parsererror') {
- if ($.error) {
- $.error('parsererror');
- }
- }
- if (s && s.dataFilter) {
- data = s.dataFilter(data, type);
- }
- if (typeof data === 'string') {
- if (type === 'json' || !type && ct.indexOf('json') >= 0) {
- data = parseJSON(data);
- } else if (type === "script" || !type && ct.indexOf("javascript") >= 0) {
- $.globalEval(data);
- }
- }
- return data;
- };
-
- return deferred;
- }
-};
-
-/**
- * ajaxForm() provides a mechanism for fully automating form submission.
- *
- * The advantages of using this method instead of ajaxSubmit() are:
- *
- * 1: This method will include coordinates for <input type="image" /> elements (if the element
- * is used to submit the form).
- * 2. This method will include the submit element's name/value data (for the element that was
- * used to submit the form).
- * 3. This method binds the submit() method to the form for you.
- *
- * The options argument for ajaxForm works exactly as it does for ajaxSubmit. ajaxForm merely
- * passes the options argument along after properly binding events for submit elements and
- * the form itself.
- */
-$.fn.ajaxForm = function(options) {
- options = options || {};
- options.delegation = options.delegation && $.isFunction($.fn.on);
-
- // in jQuery 1.3+ we can fix mistakes with the ready state
- if (!options.delegation && this.length === 0) {
- var o = { s: this.selector, c: this.context };
- if (!$.isReady && o.s) {
- log('DOM not ready, queuing ajaxForm');
- $(function() {
- $(o.s,o.c).ajaxForm(options);
- });
- return this;
- }
- // is your DOM ready? http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
- log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
- return this;
- }
-
- if ( options.delegation ) {
- $(document)
- .off('submit.form-plugin', this.selector, doAjaxSubmit)
- .off('click.form-plugin', this.selector, captureSubmittingElement)
- .on('submit.form-plugin', this.selector, options, doAjaxSubmit)
- .on('click.form-plugin', this.selector, options, captureSubmittingElement);
- return this;
- }
-
- return this.ajaxFormUnbind()
- .bind('submit.form-plugin', options, doAjaxSubmit)
- .bind('click.form-plugin', options, captureSubmittingElement);
-};
-
-// private event handlers
-function doAjaxSubmit(e) {
- /*jshint validthis:true */
- var options = e.data;
- if (!e.isDefaultPrevented()) { // if event has been canceled, don't proceed
- e.preventDefault();
- $(e.target).ajaxSubmit(options); // #365
- }
-}
-
-function captureSubmittingElement(e) {
- /*jshint validthis:true */
- var target = e.target;
- var $el = $(target);
- if (!($el.is("[type=submit],[type=image]"))) {
- // is this a child element of the submit el? (ex: a span within a button)
- var t = $el.closest('[type=submit]');
- if (t.length === 0) {
- return;
- }
- target = t[0];
- }
- var form = this;
- form.clk = target;
- if (target.type == 'image') {
- if (e.offsetX !== undefined) {
- form.clk_x = e.offsetX;
- form.clk_y = e.offsetY;
- } else if (typeof $.fn.offset == 'function') {
- var offset = $el.offset();
- form.clk_x = e.pageX - offset.left;
- form.clk_y = e.pageY - offset.top;
- } else {
- form.clk_x = e.pageX - target.offsetLeft;
- form.clk_y = e.pageY - target.offsetTop;
- }
- }
- // clear form vars
- setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);
-}
-
-
-// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
-$.fn.ajaxFormUnbind = function() {
- return this.unbind('submit.form-plugin click.form-plugin');
-};
-
-/**
- * formToArray() gathers form element data into an array of objects that can
- * be passed to any of the following ajax functions: $.get, $.post, or load.
- * Each object in the array has both a 'name' and 'value' property. An example of
- * an array for a simple login form might be:
- *
- * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
- *
- * It is this array that is passed to pre-submit callback functions provided to the
- * ajaxSubmit() and ajaxForm() methods.
- */
-$.fn.formToArray = function(semantic, elements) {
- var a = [];
- if (this.length === 0) {
- return a;
- }
-
- var form = this[0];
- var formId = this.attr('id');
- var els = semantic ? form.getElementsByTagName('*') : form.elements;
- var els2;
-
- if ( els ) {
- els = $(els).get(); // convert to standard array
- }
-
- // #386; account for inputs outside the form which use the 'form' attribute
- if ( formId ) {
- els2 = $(':input[form=' + formId + ']').get();
- if ( els2.length ) {
- els = (els || []).concat(els2);
- }
- }
-
- if (!els || !els.length) {
- return a;
- }
-
- var i,j,n,v,el,max,jmax;
- for(i=0, max=els.length; i < max; i++) {
- el = els[i];
- n = el.name;
- if (!n || el.disabled) {
- continue;
- }
-
- if (semantic && form.clk && el.type == "image") {
- // handle image inputs on the fly when semantic == true
- if(form.clk == el) {
- a.push({name: n, value: $(el).val(), type: el.type });
- a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
- }
- continue;
- }
-
- v = $.fieldValue(el, true);
- if (v && v.constructor == Array) {
- if (elements) {
- elements.push(el);
- }
- for(j=0, jmax=v.length; j < jmax; j++) {
- a.push({name: n, value: v[j]});
- }
- }
- else if (feature.fileapi && el.type == 'file') {
- if (elements) {
- elements.push(el);
- }
- var files = el.files;
- if (files.length) {
- for (j=0; j < files.length; j++) {
- a.push({name: n, value: files[j], type: el.type});
- }
- }
- else {
- // #180
- a.push({ name: n, value: '', type: el.type });
- }
- }
- else if (v !== null && typeof v != 'undefined') {
- if (elements) {
- elements.push(el);
- }
- a.push({name: n, value: v, type: el.type, required: el.required});
- }
- }
-
- if (!semantic && form.clk) {
- // input type=='image' are not found in elements array! handle it here
- var $input = $(form.clk), input = $input[0];
- n = input.name;
- if (n && !input.disabled && input.type == 'image') {
- a.push({name: n, value: $input.val()});
- a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
- }
- }
- return a;
-};
-
-/**
- * Serializes form data into a 'submittable' string. This method will return a string
- * in the format: name1=value1&amp;name2=value2
- */
-$.fn.formSerialize = function(semantic) {
- //hand off to jQuery.param for proper encoding
- return $.param(this.formToArray(semantic));
-};
-
-/**
- * Serializes all field elements in the jQuery object into a query string.
- * This method will return a string in the format: name1=value1&amp;name2=value2
- */
-$.fn.fieldSerialize = function(successful) {
- var a = [];
- this.each(function() {
- var n = this.name;
- if (!n) {
- return;
- }
- var v = $.fieldValue(this, successful);
- if (v && v.constructor == Array) {
- for (var i=0,max=v.length; i < max; i++) {
- a.push({name: n, value: v[i]});
- }
- }
- else if (v !== null && typeof v != 'undefined') {
- a.push({name: this.name, value: v});
- }
- });
- //hand off to jQuery.param for proper encoding
- return $.param(a);
-};
-
-/**
- * Returns the value(s) of the element in the matched set. For example, consider the following form:
- *
- * <form><fieldset>
- * <input name="A" type="text" />
- * <input name="A" type="text" />
- * <input name="B" type="checkbox" value="B1" />
- * <input name="B" type="checkbox" value="B2"/>
- * <input name="C" type="radio" value="C1" />
- * <input name="C" type="radio" value="C2" />
- * </fieldset></form>
- *
- * var v = $('input[type=text]').fieldValue();
- * // if no values are entered into the text inputs
- * v == ['','']
- * // if values entered into the text inputs are 'foo' and 'bar'
- * v == ['foo','bar']
- *
- * var v = $('input[type=checkbox]').fieldValue();
- * // if neither checkbox is checked
- * v === undefined
- * // if both checkboxes are checked
- * v == ['B1', 'B2']
- *
- * var v = $('input[type=radio]').fieldValue();
- * // if neither radio is checked
- * v === undefined
- * // if first radio is checked
- * v == ['C1']
- *
- * The successful argument controls whether or not the field element must be 'successful'
- * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
- * The default value of the successful argument is true. If this value is false the value(s)
- * for each element is returned.
- *
- * Note: This method *always* returns an array. If no valid value can be determined the
- * array will be empty, otherwise it will contain one or more values.
- */
-$.fn.fieldValue = function(successful) {
- for (var val=[], i=0, max=this.length; i < max; i++) {
- var el = this[i];
- var v = $.fieldValue(el, successful);
- if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length)) {
- continue;
- }
- if (v.constructor == Array) {
- $.merge(val, v);
- }
- else {
- val.push(v);
- }
- }
- return val;
-};
-
-/**
- * Returns the value of the field element.
- */
-$.fieldValue = function(el, successful) {
- var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
- if (successful === undefined) {
- successful = true;
- }
-
- if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
- (t == 'checkbox' || t == 'radio') && !el.checked ||
- (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
- tag == 'select' && el.selectedIndex == -1)) {
- return null;
- }
-
- if (tag == 'select') {
- var index = el.selectedIndex;
- if (index < 0) {
- return null;
- }
- var a = [], ops = el.options;
- var one = (t == 'select-one');
- var max = (one ? index+1 : ops.length);
- for(var i=(one ? index : 0); i < max; i++) {
- var op = ops[i];
- if (op.selected) {
- var v = op.value;
- if (!v) { // extra pain for IE...
- v = (op.attributes && op.attributes.value && !(op.attributes.value.specified)) ? op.text : op.value;
- }
- if (one) {
- return v;
- }
- a.push(v);
- }
- }
- return a;
- }
- return $(el).val();
-};
-
-/**
- * Clears the form data. Takes the following actions on the form's input fields:
- * - input text fields will have their 'value' property set to the empty string
- * - select elements will have their 'selectedIndex' property set to -1
- * - checkbox and radio inputs will have their 'checked' property set to false
- * - inputs of type submit, button, reset, and hidden will *not* be effected
- * - button elements will *not* be effected
- */
-$.fn.clearForm = function(includeHidden) {
- return this.each(function() {
- $('input,select,textarea', this).clearFields(includeHidden);
- });
-};
-
-/**
- * Clears the selected form elements.
- */
-$.fn.clearFields = $.fn.clearInputs = function(includeHidden) {
- var re = /^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i; // 'hidden' is not in this list
- return this.each(function() {
- var t = this.type, tag = this.tagName.toLowerCase();
- if (re.test(t) || tag == 'textarea') {
- this.value = '';
- }
- else if (t == 'checkbox' || t == 'radio') {
- this.checked = false;
- }
- else if (tag == 'select') {
- this.selectedIndex = -1;
- }
- else if (t == "file") {
- if (/MSIE/.test(navigator.userAgent)) {
- $(this).replaceWith($(this).clone(true));
- } else {
- $(this).val('');
- }
- }
- else if (includeHidden) {
- // includeHidden can be the value true, or it can be a selector string
- // indicating a special test; for example:
- // $('#myForm').clearForm('.special:hidden')
- // the above would clean hidden inputs that have the class of 'special'
- if ( (includeHidden === true && /hidden/.test(t)) ||
- (typeof includeHidden == 'string' && $(this).is(includeHidden)) ) {
- this.value = '';
- }
- }
- });
-};
-
-/**
- * Resets the form data. Causes all form elements to be reset to their original value.
- */
-$.fn.resetForm = function() {
- return this.each(function() {
- // guard against an input with the name of 'reset'
- // note that IE reports the reset function as an 'object'
- if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType)) {
- this.reset();
- }
- });
-};
-
-/**
- * Enables or disables any matching elements.
- */
-$.fn.enable = function(b) {
- if (b === undefined) {
- b = true;
- }
- return this.each(function() {
- this.disabled = !b;
- });
-};
-
-/**
- * Checks/unchecks any matching checkboxes or radio buttons and
- * selects/deselects and matching option elements.
- */
-$.fn.selected = function(select) {
- if (select === undefined) {
- select = true;
- }
- return this.each(function() {
- var t = this.type;
- if (t == 'checkbox' || t == 'radio') {
- this.checked = select;
- }
- else if (this.tagName.toLowerCase() == 'option') {
- var $sel = $(this).parent('select');
- if (select && $sel[0] && $sel[0].type == 'select-one') {
- // deselect all other options
- $sel.find('option').selected(false);
- }
- this.selected = select;
- }
- });
-};
-
-// expose debug var
-$.fn.ajaxSubmit.debug = false;
-
-// helper fn for console logging
-function log() {
- if (!$.fn.ajaxSubmit.debug) {
- return;
- }
- var msg = '[jquery.form] ' + Array.prototype.join.call(arguments,'');
- if (window.console && window.console.log) {
- window.console.log(msg);
- }
- else if (window.opera && window.opera.postError) {
- window.opera.postError(msg);
- }
-}
-
-}));
-
diff --git a/app/javascripts/jquery.js b/app/javascripts/jquery.js
deleted file mode 100644
index d4b67f7e..00000000
--- a/app/javascripts/jquery.js
+++ /dev/null
@@ -1,10308 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.11.1
- * http://jquery.com/
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- *
- * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2014-05-01T17:42Z
- */
-
-(function( global, factory ) {
-
- if ( typeof module === "object" && typeof module.exports === "object" ) {
- // For CommonJS and CommonJS-like environments where a proper window is present,
- // execute the factory and get jQuery
- // For environments that do not inherently posses a window with a document
- // (such as Node.js), expose a jQuery-making factory as module.exports
- // This accentuates the need for the creation of a real window
- // e.g. var jQuery = require("jquery")(window);
- // See ticket #14549 for more info
- module.exports = global.document ?
- factory( global, true ) :
- function( w ) {
- if ( !w.document ) {
- throw new Error( "jQuery requires a window with a document" );
- }
- return factory( w );
- };
- } else {
- factory( global );
- }
-
-// Pass this if window is not defined yet
-}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
-
-// Can't do this because several apps including ASP.NET trace
-// the stack via arguments.caller.callee and Firefox dies if
-// you try to trace through "use strict" call chains. (#13335)
-// Support: Firefox 18+
-//
-
-var deletedIds = [];
-
-var slice = deletedIds.slice;
-
-var concat = deletedIds.concat;
-
-var push = deletedIds.push;
-
-var indexOf = deletedIds.indexOf;
-
-var class2type = {};
-
-var toString = class2type.toString;
-
-var hasOwn = class2type.hasOwnProperty;
-
-var support = {};
-
-
-
-var
- version = "1.11.1",
-
- // Define a local copy of jQuery
- jQuery = function( selector, context ) {
- // The jQuery object is actually just the init constructor 'enhanced'
- // Need init if jQuery is called (just allow error to be thrown if not included)
- return new jQuery.fn.init( selector, context );
- },
-
- // Support: Android<4.1, IE<9
- // Make sure we trim BOM and NBSP
- rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
-
- // Matches dashed string for camelizing
- rmsPrefix = /^-ms-/,
- rdashAlpha = /-([\da-z])/gi,
-
- // Used by jQuery.camelCase as callback to replace()
- fcamelCase = function( all, letter ) {
- return letter.toUpperCase();
- };
-
-jQuery.fn = jQuery.prototype = {
- // The current version of jQuery being used
- jquery: version,
-
- constructor: jQuery,
-
- // Start with an empty selector
- selector: "",
-
- // The default length of a jQuery object is 0
- length: 0,
-
- toArray: function() {
- return slice.call( this );
- },
-
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function( num ) {
- return num != null ?
-
- // Return just the one element from the set
- ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
-
- // Return all the elements in a clean array
- slice.call( this );
- },
-
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function( elems ) {
-
- // Build a new jQuery matched element set
- var ret = jQuery.merge( this.constructor(), elems );
-
- // Add the old object onto the stack (as a reference)
- ret.prevObject = this;
- ret.context = this.context;
-
- // Return the newly-formed element set
- return ret;
- },
-
- // Execute a callback for every element in the matched set.
- // (You can seed the arguments with an array of args, but this is
- // only used internally.)
- each: function( callback, args ) {
- return jQuery.each( this, callback, args );
- },
-
- map: function( callback ) {
- return this.pushStack( jQuery.map(this, function( elem, i ) {
- return callback.call( elem, i, elem );
- }));
- },
-
- slice: function() {
- return this.pushStack( slice.apply( this, arguments ) );
- },
-
- first: function() {
- return this.eq( 0 );
- },
-
- last: function() {
- return this.eq( -1 );
- },
-
- eq: function( i ) {
- var len = this.length,
- j = +i + ( i < 0 ? len : 0 );
- return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
- },
-
- end: function() {
- return this.prevObject || this.constructor(null);
- },
-
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: push,
- sort: deletedIds.sort,
- splice: deletedIds.splice
-};
-
-jQuery.extend = jQuery.fn.extend = function() {
- var src, copyIsArray, copy, name, options, clone,
- target = arguments[0] || {},
- i = 1,
- length = arguments.length,
- deep = false;
-
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
-
- // skip the boolean and the target
- target = arguments[ i ] || {};
- i++;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
- target = {};
- }
-
- // extend jQuery itself if only one argument is passed
- if ( i === length ) {
- target = this;
- i--;
- }
-
- for ( ; i < length; i++ ) {
- // Only deal with non-null/undefined values
- if ( (options = arguments[ i ]) != null ) {
- // Extend the base object
- for ( name in options ) {
- src = target[ name ];
- copy = options[ name ];
-
- // Prevent never-ending loop
- if ( target === copy ) {
- continue;
- }
-
- // Recurse if we're merging plain objects or arrays
- if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
- if ( copyIsArray ) {
- copyIsArray = false;
- clone = src && jQuery.isArray(src) ? src : [];
-
- } else {
- clone = src && jQuery.isPlainObject(src) ? src : {};
- }
-
- // Never move original objects, clone them
- target[ name ] = jQuery.extend( deep, clone, copy );
-
- // Don't bring in undefined values
- } else if ( copy !== undefined ) {
- target[ name ] = copy;
- }
- }
- }
- }
-
- // Return the modified object
- return target;
-};
-
-jQuery.extend({
- // Unique for each copy of jQuery on the page
- expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
-
- // Assume jQuery is ready without the ready module
- isReady: true,
-
- error: function( msg ) {
- throw new Error( msg );
- },
-
- noop: function() {},
-
- // See test/unit/core.js for details concerning isFunction.
- // Since version 1.3, DOM methods and functions like alert
- // aren't supported. They return false on IE (#2968).
- isFunction: function( obj ) {
- return jQuery.type(obj) === "function";
- },
-
- isArray: Array.isArray || function( obj ) {
- return jQuery.type(obj) === "array";
- },
-
- isWindow: function( obj ) {
- /* jshint eqeqeq: false */
- return obj != null && obj == obj.window;
- },
-
- isNumeric: function( obj ) {
- // parseFloat NaNs numeric-cast false positives (null|true|false|"")
- // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
- // subtraction forces infinities to NaN
- return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;
- },
-
- isEmptyObject: function( obj ) {
- var name;
- for ( name in obj ) {
- return false;
- }
- return true;
- },
-
- isPlainObject: function( obj ) {
- var key;
-
- // Must be an Object.
- // Because of IE, we also have to check the presence of the constructor property.
- // Make sure that DOM nodes and window objects don't pass through, as well
- if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- try {
- // Not own constructor property must be Object
- if ( obj.constructor &&
- !hasOwn.call(obj, "constructor") &&
- !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
- return false;
- }
- } catch ( e ) {
- // IE8,9 Will throw exceptions on certain host objects #9897
- return false;
- }
-
- // Support: IE<9
- // Handle iteration over inherited properties before own properties.
- if ( support.ownLast ) {
- for ( key in obj ) {
- return hasOwn.call( obj, key );
- }
- }
-
- // Own properties are enumerated firstly, so to speed up,
- // if last one is own, then all properties are own.
- for ( key in obj ) {}
-
- return key === undefined || hasOwn.call( obj, key );
- },
-
- type: function( obj ) {
- if ( obj == null ) {
- return obj + "";
- }
- return typeof obj === "object" || typeof obj === "function" ?
- class2type[ toString.call(obj) ] || "object" :
- typeof obj;
- },
-
- // Evaluates a script in a global context
- // Workarounds based on findings by Jim Driscoll
- // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
- globalEval: function( data ) {
- if ( data && jQuery.trim( data ) ) {
- // We use execScript on Internet Explorer
- // We use an anonymous function so that context is window
- // rather than jQuery in Firefox
- ( window.execScript || function( data ) {
- window[ "eval" ].call( window, data );
- } )( data );
- }
- },
-
- // Convert dashed to camelCase; used by the css and data modules
- // Microsoft forgot to hump their vendor prefix (#9572)
- camelCase: function( string ) {
- return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
- },
-
- nodeName: function( elem, name ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
- },
-
- // args is for internal usage only
- each: function( obj, callback, args ) {
- var value,
- i = 0,
- length = obj.length,
- isArray = isArraylike( obj );
-
- if ( args ) {
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback.apply( obj[ i ], args );
-
- if ( value === false ) {
- break;
- }
- }
- } else {
- for ( i in obj ) {
- value = callback.apply( obj[ i ], args );
-
- if ( value === false ) {
- break;
- }
- }
- }
-
- // A special, fast, case for the most common use of each
- } else {
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback.call( obj[ i ], i, obj[ i ] );
-
- if ( value === false ) {
- break;
- }
- }
- } else {
- for ( i in obj ) {
- value = callback.call( obj[ i ], i, obj[ i ] );
-
- if ( value === false ) {
- break;
- }
- }
- }
- }
-
- return obj;
- },
-
- // Support: Android<4.1, IE<9
- trim: function( text ) {
- return text == null ?
- "" :
- ( text + "" ).replace( rtrim, "" );
- },
-
- // results is for internal usage only
- makeArray: function( arr, results ) {
- var ret = results || [];
-
- if ( arr != null ) {
- if ( isArraylike( Object(arr) ) ) {
- jQuery.merge( ret,
- typeof arr === "string" ?
- [ arr ] : arr
- );
- } else {
- push.call( ret, arr );
- }
- }
-
- return ret;
- },
-
- inArray: function( elem, arr, i ) {
- var len;
-
- if ( arr ) {
- if ( indexOf ) {
- return indexOf.call( arr, elem, i );
- }
-
- len = arr.length;
- i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
-
- for ( ; i < len; i++ ) {
- // Skip accessing in sparse arrays
- if ( i in arr && arr[ i ] === elem ) {
- return i;
- }
- }
- }
-
- return -1;
- },
-
- merge: function( first, second ) {
- var len = +second.length,
- j = 0,
- i = first.length;
-
- while ( j < len ) {
- first[ i++ ] = second[ j++ ];
- }
-
- // Support: IE<9
- // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)
- if ( len !== len ) {
- while ( second[j] !== undefined ) {
- first[ i++ ] = second[ j++ ];
- }
- }
-
- first.length = i;
-
- return first;
- },
-
- grep: function( elems, callback, invert ) {
- var callbackInverse,
- matches = [],
- i = 0,
- length = elems.length,
- callbackExpect = !invert;
-
- // Go through the array, only saving the items
- // that pass the validator function
- for ( ; i < length; i++ ) {
- callbackInverse = !callback( elems[ i ], i );
- if ( callbackInverse !== callbackExpect ) {
- matches.push( elems[ i ] );
- }
- }
-
- return matches;
- },
-
- // arg is for internal usage only
- map: function( elems, callback, arg ) {
- var value,
- i = 0,
- length = elems.length,
- isArray = isArraylike( elems ),
- ret = [];
-
- // Go through the array, translating each of the items to their new values
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret.push( value );
- }
- }
-
- // Go through every key on the object,
- } else {
- for ( i in elems ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret.push( value );
- }
- }
- }
-
- // Flatten any nested arrays
- return concat.apply( [], ret );
- },
-
- // A global GUID counter for objects
- guid: 1,
-
- // Bind a function to a context, optionally partially applying any
- // arguments.
- proxy: function( fn, context ) {
- var args, proxy, tmp;
-
- if ( typeof context === "string" ) {
- tmp = fn[ context ];
- context = fn;
- fn = tmp;
- }
-
- // Quick check to determine if target is callable, in the spec
- // this throws a TypeError, but we will just return undefined.
- if ( !jQuery.isFunction( fn ) ) {
- return undefined;
- }
-
- // Simulated bind
- args = slice.call( arguments, 2 );
- proxy = function() {
- return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
- };
-
- // Set the guid of unique handler to the same of original handler, so it can be removed
- proxy.guid = fn.guid = fn.guid || jQuery.guid++;
-
- return proxy;
- },
-
- now: function() {
- return +( new Date() );
- },
-
- // jQuery.support is not used in Core but other projects attach their
- // properties to it so it needs to exist.
- support: support
-});
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
- class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-function isArraylike( obj ) {
- var length = obj.length,
- type = jQuery.type( obj );
-
- if ( type === "function" || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- if ( obj.nodeType === 1 && length ) {
- return true;
- }
-
- return type === "array" || length === 0 ||
- typeof length === "number" && length > 0 && ( length - 1 ) in obj;
-}
-var Sizzle =
-/*!
- * Sizzle CSS Selector Engine v1.10.19
- * http://sizzlejs.com/
- *
- * Copyright 2013 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2014-04-18
- */
-(function( window ) {
-
-var i,
- support,
- Expr,
- getText,
- isXML,
- tokenize,
- compile,
- select,
- outermostContext,
- sortInput,
- hasDuplicate,
-
- // Local document vars
- setDocument,
- document,
- docElem,
- documentIsHTML,
- rbuggyQSA,
- rbuggyMatches,
- matches,
- contains,
-
- // Instance-specific data
- expando = "sizzle" + -(new Date()),
- preferredDoc = window.document,
- dirruns = 0,
- done = 0,
- classCache = createCache(),
- tokenCache = createCache(),
- compilerCache = createCache(),
- sortOrder = function( a, b ) {
- if ( a === b ) {
- hasDuplicate = true;
- }
- return 0;
- },
-
- // General-purpose constants
- strundefined = typeof undefined,
- MAX_NEGATIVE = 1 << 31,
-
- // Instance methods
- hasOwn = ({}).hasOwnProperty,
- arr = [],
- pop = arr.pop,
- push_native = arr.push,
- push = arr.push,
- slice = arr.slice,
- // Use a stripped-down indexOf if we can't use a native one
- indexOf = arr.indexOf || function( elem ) {
- var i = 0,
- len = this.length;
- for ( ; i < len; i++ ) {
- if ( this[i] === elem ) {
- return i;
- }
- }
- return -1;
- },
-
- booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
-
- // Regular expressions
-
- // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
- whitespace = "[\\x20\\t\\r\\n\\f]",
- // http://www.w3.org/TR/css3-syntax/#characters
- characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
-
- // Loosely modeled on CSS identifier characters
- // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
- // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
- identifier = characterEncoding.replace( "w", "w#" ),
-
- // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
- attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
- // Operator (capture 2)
- "*([*^$|!~]?=)" + whitespace +
- // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
- "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
- "*\\]",
-
- pseudos = ":(" + characterEncoding + ")(?:\\((" +
- // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
- // 1. quoted (capture 3; capture 4 or capture 5)
- "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
- // 2. simple (capture 6)
- "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
- // 3. anything else (capture 2)
- ".*" +
- ")\\)|)",
-
- // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
- rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
-
- rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
- rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
-
- rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
-
- rpseudo = new RegExp( pseudos ),
- ridentifier = new RegExp( "^" + identifier + "$" ),
-
- matchExpr = {
- "ID": new RegExp( "^#(" + characterEncoding + ")" ),
- "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
- "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
- "ATTR": new RegExp( "^" + attributes ),
- "PSEUDO": new RegExp( "^" + pseudos ),
- "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
- "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
- "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
- "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
- // For use in libraries implementing .is()
- // We use this for POS matching in `select`
- "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
- whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
- },
-
- rinputs = /^(?:input|select|textarea|button)$/i,
- rheader = /^h\d$/i,
-
- rnative = /^[^{]+\{\s*\[native \w/,
-
- // Easily-parseable/retrievable ID or TAG or CLASS selectors
- rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
-
- rsibling = /[+~]/,
- rescape = /'|\\/g,
-
- // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
- runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
- funescape = function( _, escaped, escapedWhitespace ) {
- var high = "0x" + escaped - 0x10000;
- // NaN means non-codepoint
- // Support: Firefox<24
- // Workaround erroneous numeric interpretation of +"0x"
- return high !== high || escapedWhitespace ?
- escaped :
- high < 0 ?
- // BMP codepoint
- String.fromCharCode( high + 0x10000 ) :
- // Supplemental Plane codepoint (surrogate pair)
- String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
- };
-
-// Optimize for push.apply( _, NodeList )
-try {
- push.apply(
- (arr = slice.call( preferredDoc.childNodes )),
- preferredDoc.childNodes
- );
- // Support: Android<4.0
- // Detect silently failing push.apply
- arr[ preferredDoc.childNodes.length ].nodeType;
-} catch ( e ) {
- push = { apply: arr.length ?
-
- // Leverage slice if possible
- function( target, els ) {
- push_native.apply( target, slice.call(els) );
- } :
-
- // Support: IE<9
- // Otherwise append directly
- function( target, els ) {
- var j = target.length,
- i = 0;
- // Can't trust NodeList.length
- while ( (target[j++] = els[i++]) ) {}
- target.length = j - 1;
- }
- };
-}
-
-function Sizzle( selector, context, results, seed ) {
- var match, elem, m, nodeType,
- // QSA vars
- i, groups, old, nid, newContext, newSelector;
-
- if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
- setDocument( context );
- }
-
- context = context || document;
- results = results || [];
-
- if ( !selector || typeof selector !== "string" ) {
- return results;
- }
-
- if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
- return [];
- }
-
- if ( documentIsHTML && !seed ) {
-
- // Shortcuts
- if ( (match = rquickExpr.exec( selector )) ) {
- // Speed-up: Sizzle("#ID")
- if ( (m = match[1]) ) {
- if ( nodeType === 9 ) {
- elem = context.getElementById( m );
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document (jQuery #6963)
- if ( elem && elem.parentNode ) {
- // Handle the case where IE, Opera, and Webkit return items
- // by name instead of ID
- if ( elem.id === m ) {
- results.push( elem );
- return results;
- }
- } else {
- return results;
- }
- } else {
- // Context is not a document
- if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
- contains( context, elem ) && elem.id === m ) {
- results.push( elem );
- return results;
- }
- }
-
- // Speed-up: Sizzle("TAG")
- } else if ( match[2] ) {
- push.apply( results, context.getElementsByTagName( selector ) );
- return results;
-
- // Speed-up: Sizzle(".CLASS")
- } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
- push.apply( results, context.getElementsByClassName( m ) );
- return results;
- }
- }
-
- // QSA path
- if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
- nid = old = expando;
- newContext = context;
- newSelector = nodeType === 9 && selector;
-
- // qSA works strangely on Element-rooted queries
- // We can work around this by specifying an extra ID on the root
- // and working up from there (Thanks to Andrew Dupont for the technique)
- // IE 8 doesn't work on object elements
- if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
- groups = tokenize( selector );
-
- if ( (old = context.getAttribute("id")) ) {
- nid = old.replace( rescape, "\\$&" );
- } else {
- context.setAttribute( "id", nid );
- }
- nid = "[id='" + nid + "'] ";
-
- i = groups.length;
- while ( i-- ) {
- groups[i] = nid + toSelector( groups[i] );
- }
- newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
- newSelector = groups.join(",");
- }
-
- if ( newSelector ) {
- try {
- push.apply( results,
- newContext.querySelectorAll( newSelector )
- );
- return results;
- } catch(qsaError) {
- } finally {
- if ( !old ) {
- context.removeAttribute("id");
- }
- }
- }
- }
- }
-
- // All others
- return select( selector.replace( rtrim, "$1" ), context, results, seed );
-}
-
-/**
- * Create key-value caches of limited size
- * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
- * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
- * deleting the oldest entry
- */
-function createCache() {
- var keys = [];
-
- function cache( key, value ) {
- // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
- if ( keys.push( key + " " ) > Expr.cacheLength ) {
- // Only keep the most recent entries
- delete cache[ keys.shift() ];
- }
- return (cache[ key + " " ] = value);
- }
- return cache;
-}
-
-/**
- * Mark a function for special use by Sizzle
- * @param {Function} fn The function to mark
- */
-function markFunction( fn ) {
- fn[ expando ] = true;
- return fn;
-}
-
-/**
- * Support testing using an element
- * @param {Function} fn Passed the created div and expects a boolean result
- */
-function assert( fn ) {
- var div = document.createElement("div");
-
- try {
- return !!fn( div );
- } catch (e) {
- return false;
- } finally {
- // Remove from its parent by default
- if ( div.parentNode ) {
- div.parentNode.removeChild( div );
- }
- // release memory in IE
- div = null;
- }
-}
-
-/**
- * Adds the same handler for all of the specified attrs
- * @param {String} attrs Pipe-separated list of attributes
- * @param {Function} handler The method that will be applied
- */
-function addHandle( attrs, handler ) {
- var arr = attrs.split("|"),
- i = attrs.length;
-
- while ( i-- ) {
- Expr.attrHandle[ arr[i] ] = handler;
- }
-}
-
-/**
- * Checks document order of two siblings
- * @param {Element} a
- * @param {Element} b
- * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
- */
-function siblingCheck( a, b ) {
- var cur = b && a,
- diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
- ( ~b.sourceIndex || MAX_NEGATIVE ) -
- ( ~a.sourceIndex || MAX_NEGATIVE );
-
- // Use IE sourceIndex if available on both nodes
- if ( diff ) {
- return diff;
- }
-
- // Check if b follows a
- if ( cur ) {
- while ( (cur = cur.nextSibling) ) {
- if ( cur === b ) {
- return -1;
- }
- }
- }
-
- return a ? 1 : -1;
-}
-
-/**
- * Returns a function to use in pseudos for input types
- * @param {String} type
- */
-function createInputPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === type;
- };
-}
-
-/**
- * Returns a function to use in pseudos for buttons
- * @param {String} type
- */
-function createButtonPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && elem.type === type;
- };
-}
-
-/**
- * Returns a function to use in pseudos for positionals
- * @param {Function} fn
- */
-function createPositionalPseudo( fn ) {
- return markFunction(function( argument ) {
- argument = +argument;
- return markFunction(function( seed, matches ) {
- var j,
- matchIndexes = fn( [], seed.length, argument ),
- i = matchIndexes.length;
-
- // Match elements found at the specified indexes
- while ( i-- ) {
- if ( seed[ (j = matchIndexes[i]) ] ) {
- seed[j] = !(matches[j] = seed[j]);
- }
- }
- });
- });
-}
-
-/**
- * Checks a node for validity as a Sizzle context
- * @param {Element|Object=} context
- * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
- */
-function testContext( context ) {
- return context && typeof context.getElementsByTagName !== strundefined && context;
-}
-
-// Expose support vars for convenience
-support = Sizzle.support = {};
-
-/**
- * Detects XML nodes
- * @param {Element|Object} elem An element or a document
- * @returns {Boolean} True iff elem is a non-HTML XML node
- */
-isXML = Sizzle.isXML = function( elem ) {
- // documentElement is verified for cases where it doesn't yet exist
- // (such as loading iframes in IE - #4833)
- var documentElement = elem && (elem.ownerDocument || elem).documentElement;
- return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-/**
- * Sets document-related variables once based on the current document
- * @param {Element|Object} [doc] An element or document object to use to set the document
- * @returns {Object} Returns the current document
- */
-setDocument = Sizzle.setDocument = function( node ) {
- var hasCompare,
- doc = node ? node.ownerDocument || node : preferredDoc,
- parent = doc.defaultView;
-
- // If no document and documentElement is available, return
- if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
- return document;
- }
-
- // Set our document
- document = doc;
- docElem = doc.documentElement;
-
- // Support tests
- documentIsHTML = !isXML( doc );
-
- // Support: IE>8
- // If iframe document is assigned to "document" variable and if iframe has been reloaded,
- // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
- // IE6-8 do not support the defaultView property so parent will be undefined
- if ( parent && parent !== parent.top ) {
- // IE11 does not have attachEvent, so all must suffer
- if ( parent.addEventListener ) {
- parent.addEventListener( "unload", function() {
- setDocument();
- }, false );
- } else if ( parent.attachEvent ) {
- parent.attachEvent( "onunload", function() {
- setDocument();
- });
- }
- }
-
- /* Attributes
- ---------------------------------------------------------------------- */
-
- // Support: IE<8
- // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
- support.attributes = assert(function( div ) {
- div.className = "i";
- return !div.getAttribute("className");
- });
-
- /* getElement(s)By*
- ---------------------------------------------------------------------- */
-
- // Check if getElementsByTagName("*") returns only elements
- support.getElementsByTagName = assert(function( div ) {
- div.appendChild( doc.createComment("") );
- return !div.getElementsByTagName("*").length;
- });
-
- // Check if getElementsByClassName can be trusted
- support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {
- div.innerHTML = "<div class='a'></div><div class='a i'></div>";
-
- // Support: Safari<4
- // Catch class over-caching
- div.firstChild.className = "i";
- // Support: Opera<10
- // Catch gEBCN failure to find non-leading classes
- return div.getElementsByClassName("i").length === 2;
- });
-
- // Support: IE<10
- // Check if getElementById returns elements by name
- // The broken getElementById methods don't pick up programatically-set names,
- // so use a roundabout getElementsByName test
- support.getById = assert(function( div ) {
- docElem.appendChild( div ).id = expando;
- return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
- });
-
- // ID find and filter
- if ( support.getById ) {
- Expr.find["ID"] = function( id, context ) {
- if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
- var m = context.getElementById( id );
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- return m && m.parentNode ? [ m ] : [];
- }
- };
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- return elem.getAttribute("id") === attrId;
- };
- };
- } else {
- // Support: IE6/7
- // getElementById is not reliable as a find shortcut
- delete Expr.find["ID"];
-
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
- return node && node.value === attrId;
- };
- };
- }
-
- // Tag
- Expr.find["TAG"] = support.getElementsByTagName ?
- function( tag, context ) {
- if ( typeof context.getElementsByTagName !== strundefined ) {
- return context.getElementsByTagName( tag );
- }
- } :
- function( tag, context ) {
- var elem,
- tmp = [],
- i = 0,
- results = context.getElementsByTagName( tag );
-
- // Filter out possible comments
- if ( tag === "*" ) {
- while ( (elem = results[i++]) ) {
- if ( elem.nodeType === 1 ) {
- tmp.push( elem );
- }
- }
-
- return tmp;
- }
- return results;
- };
-
- // Class
- Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
- if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
- return context.getElementsByClassName( className );
- }
- };
-
- /* QSA/matchesSelector
- ---------------------------------------------------------------------- */
-
- // QSA and matchesSelector support
-
- // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
- rbuggyMatches = [];
-
- // qSa(:focus) reports false when true (Chrome 21)
- // We allow this because of a bug in IE8/9 that throws an error
- // whenever `document.activeElement` is accessed on an iframe
- // So, we allow :focus to pass through QSA all the time to avoid the IE error
- // See http://bugs.jquery.com/ticket/13378
- rbuggyQSA = [];
-
- if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
- // Build QSA regex
- // Regex strategy adopted from Diego Perini
- assert(function( div ) {
- // Select is set to empty string on purpose
- // This is to test IE's treatment of not explicitly
- // setting a boolean content attribute,
- // since its presence should be enough
- // http://bugs.jquery.com/ticket/12359
- div.innerHTML = "<select msallowclip=''><option selected=''></option></select>";
-
- // Support: IE8, Opera 11-12.16
- // Nothing should be selected when empty strings follow ^= or $= or *=
- // The test attribute must be unknown in Opera but "safe" for WinRT
- // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
- if ( div.querySelectorAll("[msallowclip^='']").length ) {
- rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
- }
-
- // Support: IE8
- // Boolean attributes and "value" are not treated correctly
- if ( !div.querySelectorAll("[selected]").length ) {
- rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
- }
-
- // Webkit/Opera - :checked should return selected option elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- // IE8 throws error here and will not see later tests
- if ( !div.querySelectorAll(":checked").length ) {
- rbuggyQSA.push(":checked");
- }
- });
-
- assert(function( div ) {
- // Support: Windows 8 Native Apps
- // The type and name attributes are restricted during .innerHTML assignment
- var input = doc.createElement("input");
- input.setAttribute( "type", "hidden" );
- div.appendChild( input ).setAttribute( "name", "D" );
-
- // Support: IE8
- // Enforce case-sensitivity of name attribute
- if ( div.querySelectorAll("[name=d]").length ) {
- rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
- }
-
- // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
- // IE8 throws error here and will not see later tests
- if ( !div.querySelectorAll(":enabled").length ) {
- rbuggyQSA.push( ":enabled", ":disabled" );
- }
-
- // Opera 10-11 does not throw on post-comma invalid pseudos
- div.querySelectorAll("*,:x");
- rbuggyQSA.push(",.*:");
- });
- }
-
- if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
- docElem.webkitMatchesSelector ||
- docElem.mozMatchesSelector ||
- docElem.oMatchesSelector ||
- docElem.msMatchesSelector) )) ) {
-
- assert(function( div ) {
- // Check to see if it's possible to do matchesSelector
- // on a disconnected node (IE 9)
- support.disconnectedMatch = matches.call( div, "div" );
-
- // This should fail with an exception
- // Gecko does not error, returns false instead
- matches.call( div, "[s!='']:x" );
- rbuggyMatches.push( "!=", pseudos );
- });
- }
-
- rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
- rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
-
- /* Contains
- ---------------------------------------------------------------------- */
- hasCompare = rnative.test( docElem.compareDocumentPosition );
-
- // Element contains another
- // Purposefully does not implement inclusive descendent
- // As in, an element does not contain itself
- contains = hasCompare || rnative.test( docElem.contains ) ?
- function( a, b ) {
- var adown = a.nodeType === 9 ? a.documentElement : a,
- bup = b && b.parentNode;
- return a === bup || !!( bup && bup.nodeType === 1 && (
- adown.contains ?
- adown.contains( bup ) :
- a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
- ));
- } :
- function( a, b ) {
- if ( b ) {
- while ( (b = b.parentNode) ) {
- if ( b === a ) {
- return true;
- }
- }
- }
- return false;
- };
-
- /* Sorting
- ---------------------------------------------------------------------- */
-
- // Document order sorting
- sortOrder = hasCompare ?
- function( a, b ) {
-
- // Flag for duplicate removal
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- // Sort on method existence if only one input has compareDocumentPosition
- var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
- if ( compare ) {
- return compare;
- }
-
- // Calculate position if both inputs belong to the same document
- compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
- a.compareDocumentPosition( b ) :
-
- // Otherwise we know they are disconnected
- 1;
-
- // Disconnected nodes
- if ( compare & 1 ||
- (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
-
- // Choose the first element that is related to our preferred document
- if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
- return -1;
- }
- if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
- return 1;
- }
-
- // Maintain original order
- return sortInput ?
- ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
- 0;
- }
-
- return compare & 4 ? -1 : 1;
- } :
- function( a, b ) {
- // Exit early if the nodes are identical
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- var cur,
- i = 0,
- aup = a.parentNode,
- bup = b.parentNode,
- ap = [ a ],
- bp = [ b ];
-
- // Parentless nodes are either documents or disconnected
- if ( !aup || !bup ) {
- return a === doc ? -1 :
- b === doc ? 1 :
- aup ? -1 :
- bup ? 1 :
- sortInput ?
- ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
- 0;
-
- // If the nodes are siblings, we can do a quick check
- } else if ( aup === bup ) {
- return siblingCheck( a, b );
- }
-
- // Otherwise we need full lists of their ancestors for comparison
- cur = a;
- while ( (cur = cur.parentNode) ) {
- ap.unshift( cur );
- }
- cur = b;
- while ( (cur = cur.parentNode) ) {
- bp.unshift( cur );
- }
-
- // Walk down the tree looking for a discrepancy
- while ( ap[i] === bp[i] ) {
- i++;
- }
-
- return i ?
- // Do a sibling check if the nodes have a common ancestor
- siblingCheck( ap[i], bp[i] ) :
-
- // Otherwise nodes in our document sort first
- ap[i] === preferredDoc ? -1 :
- bp[i] === preferredDoc ? 1 :
- 0;
- };
-
- return doc;
-};
-
-Sizzle.matches = function( expr, elements ) {
- return Sizzle( expr, null, null, elements );
-};
-
-Sizzle.matchesSelector = function( elem, expr ) {
- // Set document vars if needed
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- // Make sure that attribute selectors are quoted
- expr = expr.replace( rattributeQuotes, "='$1']" );
-
- if ( support.matchesSelector && documentIsHTML &&
- ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
- ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
-
- try {
- var ret = matches.call( elem, expr );
-
- // IE 9's matchesSelector returns false on disconnected nodes
- if ( ret || support.disconnectedMatch ||
- // As well, disconnected nodes are said to be in a document
- // fragment in IE 9
- elem.document && elem.document.nodeType !== 11 ) {
- return ret;
- }
- } catch(e) {}
- }
-
- return Sizzle( expr, document, null, [ elem ] ).length > 0;
-};
-
-Sizzle.contains = function( context, elem ) {
- // Set document vars if needed
- if ( ( context.ownerDocument || context ) !== document ) {
- setDocument( context );
- }
- return contains( context, elem );
-};
-
-Sizzle.attr = function( elem, name ) {
- // Set document vars if needed
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- var fn = Expr.attrHandle[ name.toLowerCase() ],
- // Don't get fooled by Object.prototype properties (jQuery #13807)
- val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
- fn( elem, name, !documentIsHTML ) :
- undefined;
-
- return val !== undefined ?
- val :
- support.attributes || !documentIsHTML ?
- elem.getAttribute( name ) :
- (val = elem.getAttributeNode(name)) && val.specified ?
- val.value :
- null;
-};
-
-Sizzle.error = function( msg ) {
- throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Document sorting and removing duplicates
- * @param {ArrayLike} results
- */
-Sizzle.uniqueSort = function( results ) {
- var elem,
- duplicates = [],
- j = 0,
- i = 0;
-
- // Unless we *know* we can detect duplicates, assume their presence
- hasDuplicate = !support.detectDuplicates;
- sortInput = !support.sortStable && results.slice( 0 );
- results.sort( sortOrder );
-
- if ( hasDuplicate ) {
- while ( (elem = results[i++]) ) {
- if ( elem === results[ i ] ) {
- j = duplicates.push( i );
- }
- }
- while ( j-- ) {
- results.splice( duplicates[ j ], 1 );
- }
- }
-
- // Clear input after sorting to release objects
- // See https://github.com/jquery/sizzle/pull/225
- sortInput = null;
-
- return results;
-};
-
-/**
- * Utility function for retrieving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-getText = Sizzle.getText = function( elem ) {
- var node,
- ret = "",
- i = 0,
- nodeType = elem.nodeType;
-
- if ( !nodeType ) {
- // If no nodeType, this is expected to be an array
- while ( (node = elem[i++]) ) {
- // Do not traverse comment nodes
- ret += getText( node );
- }
- } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
- // Use textContent for elements
- // innerText usage removed for consistency of new lines (jQuery #11153)
- if ( typeof elem.textContent === "string" ) {
- return elem.textContent;
- } else {
- // Traverse its children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- ret += getText( elem );
- }
- }
- } else if ( nodeType === 3 || nodeType === 4 ) {
- return elem.nodeValue;
- }
- // Do not include comment or processing instruction nodes
-
- return ret;
-};
-
-Expr = Sizzle.selectors = {
-
- // Can be adjusted by the user
- cacheLength: 50,
-
- createPseudo: markFunction,
-
- match: matchExpr,
-
- attrHandle: {},
-
- find: {},
-
- relative: {
- ">": { dir: "parentNode", first: true },
- " ": { dir: "parentNode" },
- "+": { dir: "previousSibling", first: true },
- "~": { dir: "previousSibling" }
- },
-
- preFilter: {
- "ATTR": function( match ) {
- match[1] = match[1].replace( runescape, funescape );
-
- // Move the given value to match[3] whether quoted or unquoted
- match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
-
- if ( match[2] === "~=" ) {
- match[3] = " " + match[3] + " ";
- }
-
- return match.slice( 0, 4 );
- },
-
- "CHILD": function( match ) {
- /* matches from matchExpr["CHILD"]
- 1 type (only|nth|...)
- 2 what (child|of-type)
- 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
- 4 xn-component of xn+y argument ([+-]?\d*n|)
- 5 sign of xn-component
- 6 x of xn-component
- 7 sign of y-component
- 8 y of y-component
- */
- match[1] = match[1].toLowerCase();
-
- if ( match[1].slice( 0, 3 ) === "nth" ) {
- // nth-* requires argument
- if ( !match[3] ) {
- Sizzle.error( match[0] );
- }
-
- // numeric x and y parameters for Expr.filter.CHILD
- // remember that false/true cast respectively to 0/1
- match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
- match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
-
- // other types prohibit arguments
- } else if ( match[3] ) {
- Sizzle.error( match[0] );
- }
-
- return match;
- },
-
- "PSEUDO": function( match ) {
- var excess,
- unquoted = !match[6] && match[2];
-
- if ( matchExpr["CHILD"].test( match[0] ) ) {
- return null;
- }
-
- // Accept quoted arguments as-is
- if ( match[3] ) {
- match[2] = match[4] || match[5] || "";
-
- // Strip excess characters from unquoted arguments
- } else if ( unquoted && rpseudo.test( unquoted ) &&
- // Get excess from tokenize (recursively)
- (excess = tokenize( unquoted, true )) &&
- // advance to the next closing parenthesis
- (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
-
- // excess is a negative index
- match[0] = match[0].slice( 0, excess );
- match[2] = unquoted.slice( 0, excess );
- }
-
- // Return only captures needed by the pseudo filter method (type and argument)
- return match.slice( 0, 3 );
- }
- },
-
- filter: {
-
- "TAG": function( nodeNameSelector ) {
- var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
- return nodeNameSelector === "*" ?
- function() { return true; } :
- function( elem ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
- };
- },
-
- "CLASS": function( className ) {
- var pattern = classCache[ className + " " ];
-
- return pattern ||
- (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
- classCache( className, function( elem ) {
- return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
- });
- },
-
- "ATTR": function( name, operator, check ) {
- return function( elem ) {
- var result = Sizzle.attr( elem, name );
-
- if ( result == null ) {
- return operator === "!=";
- }
- if ( !operator ) {
- return true;
- }
-
- result += "";
-
- return operator === "=" ? result === check :
- operator === "!=" ? result !== check :
- operator === "^=" ? check && result.indexOf( check ) === 0 :
- operator === "*=" ? check && result.indexOf( check ) > -1 :
- operator === "$=" ? check && result.slice( -check.length ) === check :
- operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
- operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
- false;
- };
- },
-
- "CHILD": function( type, what, argument, first, last ) {
- var simple = type.slice( 0, 3 ) !== "nth",
- forward = type.slice( -4 ) !== "last",
- ofType = what === "of-type";
-
- return first === 1 && last === 0 ?
-
- // Shortcut for :nth-*(n)
- function( elem ) {
- return !!elem.parentNode;
- } :
-
- function( elem, context, xml ) {
- var cache, outerCache, node, diff, nodeIndex, start,
- dir = simple !== forward ? "nextSibling" : "previousSibling",
- parent = elem.parentNode,
- name = ofType && elem.nodeName.toLowerCase(),
- useCache = !xml && !ofType;
-
- if ( parent ) {
-
- // :(first|last|only)-(child|of-type)
- if ( simple ) {
- while ( dir ) {
- node = elem;
- while ( (node = node[ dir ]) ) {
- if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
- return false;
- }
- }
- // Reverse direction for :only-* (if we haven't yet done so)
- start = dir = type === "only" && !start && "nextSibling";
- }
- return true;
- }
-
- start = [ forward ? parent.firstChild : parent.lastChild ];
-
- // non-xml :nth-child(...) stores cache data on `parent`
- if ( forward && useCache ) {
- // Seek `elem` from a previously-cached index
- outerCache = parent[ expando ] || (parent[ expando ] = {});
- cache = outerCache[ type ] || [];
- nodeIndex = cache[0] === dirruns && cache[1];
- diff = cache[0] === dirruns && cache[2];
- node = nodeIndex && parent.childNodes[ nodeIndex ];
-
- while ( (node = ++nodeIndex && node && node[ dir ] ||
-
- // Fallback to seeking `elem` from the start
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- // When found, cache indexes on `parent` and break
- if ( node.nodeType === 1 && ++diff && node === elem ) {
- outerCache[ type ] = [ dirruns, nodeIndex, diff ];
- break;
- }
- }
-
- // Use previously-cached element index if available
- } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
- diff = cache[1];
-
- // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
- } else {
- // Use the same loop as above to seek `elem` from the start
- while ( (node = ++nodeIndex && node && node[ dir ] ||
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
- // Cache the index of each encountered element
- if ( useCache ) {
- (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
- }
-
- if ( node === elem ) {
- break;
- }
- }
- }
- }
-
- // Incorporate the offset, then check against cycle size
- diff -= last;
- return diff === first || ( diff % first === 0 && diff / first >= 0 );
- }
- };
- },
-
- "PSEUDO": function( pseudo, argument ) {
- // pseudo-class names are case-insensitive
- // http://www.w3.org/TR/selectors/#pseudo-classes
- // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
- // Remember that setFilters inherits from pseudos
- var args,
- fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
- Sizzle.error( "unsupported pseudo: " + pseudo );
-
- // The user may use createPseudo to indicate that
- // arguments are needed to create the filter function
- // just as Sizzle does
- if ( fn[ expando ] ) {
- return fn( argument );
- }
-
- // But maintain support for old signatures
- if ( fn.length > 1 ) {
- args = [ pseudo, pseudo, "", argument ];
- return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
- markFunction(function( seed, matches ) {
- var idx,
- matched = fn( seed, argument ),
- i = matched.length;
- while ( i-- ) {
- idx = indexOf.call( seed, matched[i] );
- seed[ idx ] = !( matches[ idx ] = matched[i] );
- }
- }) :
- function( elem ) {
- return fn( elem, 0, args );
- };
- }
-
- return fn;
- }
- },
-
- pseudos: {
- // Potentially complex pseudos
- "not": markFunction(function( selector ) {
- // Trim the selector passed to compile
- // to avoid treating leading and trailing
- // spaces as combinators
- var input = [],
- results = [],
- matcher = compile( selector.replace( rtrim, "$1" ) );
-
- return matcher[ expando ] ?
- markFunction(function( seed, matches, context, xml ) {
- var elem,
- unmatched = matcher( seed, null, xml, [] ),
- i = seed.length;
-
- // Match elements unmatched by `matcher`
- while ( i-- ) {
- if ( (elem = unmatched[i]) ) {
- seed[i] = !(matches[i] = elem);
- }
- }
- }) :
- function( elem, context, xml ) {
- input[0] = elem;
- matcher( input, null, xml, results );
- return !results.pop();
- };
- }),
-
- "has": markFunction(function( selector ) {
- return function( elem ) {
- return Sizzle( selector, elem ).length > 0;
- };
- }),
-
- "contains": markFunction(function( text ) {
- return function( elem ) {
- return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
- };
- }),
-
- // "Whether an element is represented by a :lang() selector
- // is based solely on the element's language value
- // being equal to the identifier C,
- // or beginning with the identifier C immediately followed by "-".
- // The matching of C against the element's language value is performed case-insensitively.
- // The identifier C does not have to be a valid language name."
- // http://www.w3.org/TR/selectors/#lang-pseudo
- "lang": markFunction( function( lang ) {
- // lang value must be a valid identifier
- if ( !ridentifier.test(lang || "") ) {
- Sizzle.error( "unsupported lang: " + lang );
- }
- lang = lang.replace( runescape, funescape ).toLowerCase();
- return function( elem ) {
- var elemLang;
- do {
- if ( (elemLang = documentIsHTML ?
- elem.lang :
- elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
-
- elemLang = elemLang.toLowerCase();
- return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
- }
- } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
- return false;
- };
- }),
-
- // Miscellaneous
- "target": function( elem ) {
- var hash = window.location && window.location.hash;
- return hash && hash.slice( 1 ) === elem.id;
- },
-
- "root": function( elem ) {
- return elem === docElem;
- },
-
- "focus": function( elem ) {
- return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
- },
-
- // Boolean properties
- "enabled": function( elem ) {
- return elem.disabled === false;
- },
-
- "disabled": function( elem ) {
- return elem.disabled === true;
- },
-
- "checked": function( elem ) {
- // In CSS3, :checked should return both checked and selected elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- var nodeName = elem.nodeName.toLowerCase();
- return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
- },
-
- "selected": function( elem ) {
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- if ( elem.parentNode ) {
- elem.parentNode.selectedIndex;
- }
-
- return elem.selected === true;
- },
-
- // Contents
- "empty": function( elem ) {
- // http://www.w3.org/TR/selectors/#empty-pseudo
- // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
- // but not by others (comment: 8; processing instruction: 7; etc.)
- // nodeType < 6 works because attributes (2) do not appear as children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- if ( elem.nodeType < 6 ) {
- return false;
- }
- }
- return true;
- },
-
- "parent": function( elem ) {
- return !Expr.pseudos["empty"]( elem );
- },
-
- // Element/input types
- "header": function( elem ) {
- return rheader.test( elem.nodeName );
- },
-
- "input": function( elem ) {
- return rinputs.test( elem.nodeName );
- },
-
- "button": function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === "button" || name === "button";
- },
-
- "text": function( elem ) {
- var attr;
- return elem.nodeName.toLowerCase() === "input" &&
- elem.type === "text" &&
-
- // Support: IE<8
- // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
- ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
- },
-
- // Position-in-collection
- "first": createPositionalPseudo(function() {
- return [ 0 ];
- }),
-
- "last": createPositionalPseudo(function( matchIndexes, length ) {
- return [ length - 1 ];
- }),
-
- "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
- return [ argument < 0 ? argument + length : argument ];
- }),
-
- "even": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 0;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "odd": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 1;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; --i >= 0; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; ++i < length; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- })
- }
-};
-
-Expr.pseudos["nth"] = Expr.pseudos["eq"];
-
-// Add button/input type pseudos
-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
- Expr.pseudos[ i ] = createInputPseudo( i );
-}
-for ( i in { submit: true, reset: true } ) {
- Expr.pseudos[ i ] = createButtonPseudo( i );
-}
-
-// Easy API for creating new setFilters
-function setFilters() {}
-setFilters.prototype = Expr.filters = Expr.pseudos;
-Expr.setFilters = new setFilters();
-
-tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
- var matched, match, tokens, type,
- soFar, groups, preFilters,
- cached = tokenCache[ selector + " " ];
-
- if ( cached ) {
- return parseOnly ? 0 : cached.slice( 0 );
- }
-
- soFar = selector;
- groups = [];
- preFilters = Expr.preFilter;
-
- while ( soFar ) {
-
- // Comma and first run
- if ( !matched || (match = rcomma.exec( soFar )) ) {
- if ( match ) {
- // Don't consume trailing commas as valid
- soFar = soFar.slice( match[0].length ) || soFar;
- }
- groups.push( (tokens = []) );
- }
-
- matched = false;
-
- // Combinators
- if ( (match = rcombinators.exec( soFar )) ) {
- matched = match.shift();
- tokens.push({
- value: matched,
- // Cast descendant combinators to space
- type: match[0].replace( rtrim, " " )
- });
- soFar = soFar.slice( matched.length );
- }
-
- // Filters
- for ( type in Expr.filter ) {
- if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
- (match = preFilters[ type ]( match ))) ) {
- matched = match.shift();
- tokens.push({
- value: matched,
- type: type,
- matches: match
- });
- soFar = soFar.slice( matched.length );
- }
- }
-
- if ( !matched ) {
- break;
- }
- }
-
- // Return the length of the invalid excess
- // if we're just parsing
- // Otherwise, throw an error or return tokens
- return parseOnly ?
- soFar.length :
- soFar ?
- Sizzle.error( selector ) :
- // Cache the tokens
- tokenCache( selector, groups ).slice( 0 );
-};
-
-function toSelector( tokens ) {
- var i = 0,
- len = tokens.length,
- selector = "";
- for ( ; i < len; i++ ) {
- selector += tokens[i].value;
- }
- return selector;
-}
-
-function addCombinator( matcher, combinator, base ) {
- var dir = combinator.dir,
- checkNonElements = base && dir === "parentNode",
- doneName = done++;
-
- return combinator.first ?
- // Check against closest ancestor/preceding element
- function( elem, context, xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- return matcher( elem, context, xml );
- }
- }
- } :
-
- // Check against all ancestor/preceding elements
- function( elem, context, xml ) {
- var oldCache, outerCache,
- newCache = [ dirruns, doneName ];
-
- // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
- if ( xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- if ( matcher( elem, context, xml ) ) {
- return true;
- }
- }
- }
- } else {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- outerCache = elem[ expando ] || (elem[ expando ] = {});
- if ( (oldCache = outerCache[ dir ]) &&
- oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
-
- // Assign to newCache so results back-propagate to previous elements
- return (newCache[ 2 ] = oldCache[ 2 ]);
- } else {
- // Reuse newcache so results back-propagate to previous elements
- outerCache[ dir ] = newCache;
-
- // A match means we're done; a fail means we have to keep checking
- if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
- return true;
- }
- }
- }
- }
- }
- };
-}
-
-function elementMatcher( matchers ) {
- return matchers.length > 1 ?
- function( elem, context, xml ) {
- var i = matchers.length;
- while ( i-- ) {
- if ( !matchers[i]( elem, context, xml ) ) {
- return false;
- }
- }
- return true;
- } :
- matchers[0];
-}
-
-function multipleContexts( selector, contexts, results ) {
- var i = 0,
- len = contexts.length;
- for ( ; i < len; i++ ) {
- Sizzle( selector, contexts[i], results );
- }
- return results;
-}
-
-function condense( unmatched, map, filter, context, xml ) {
- var elem,
- newUnmatched = [],
- i = 0,
- len = unmatched.length,
- mapped = map != null;
-
- for ( ; i < len; i++ ) {
- if ( (elem = unmatched[i]) ) {
- if ( !filter || filter( elem, context, xml ) ) {
- newUnmatched.push( elem );
- if ( mapped ) {
- map.push( i );
- }
- }
- }
- }
-
- return newUnmatched;
-}
-
-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
- if ( postFilter && !postFilter[ expando ] ) {
- postFilter = setMatcher( postFilter );
- }
- if ( postFinder && !postFinder[ expando ] ) {
- postFinder = setMatcher( postFinder, postSelector );
- }
- return markFunction(function( seed, results, context, xml ) {
- var temp, i, elem,
- preMap = [],
- postMap = [],
- preexisting = results.length,
-
- // Get initial elements from seed or context
- elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
-
- // Prefilter to get matcher input, preserving a map for seed-results synchronization
- matcherIn = preFilter && ( seed || !selector ) ?
- condense( elems, preMap, preFilter, context, xml ) :
- elems,
-
- matcherOut = matcher ?
- // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
- postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
-
- // ...intermediate processing is necessary
- [] :
-
- // ...otherwise use results directly
- results :
- matcherIn;
-
- // Find primary matches
- if ( matcher ) {
- matcher( matcherIn, matcherOut, context, xml );
- }
-
- // Apply postFilter
- if ( postFilter ) {
- temp = condense( matcherOut, postMap );
- postFilter( temp, [], context, xml );
-
- // Un-match failing elements by moving them back to matcherIn
- i = temp.length;
- while ( i-- ) {
- if ( (elem = temp[i]) ) {
- matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
- }
- }
- }
-
- if ( seed ) {
- if ( postFinder || preFilter ) {
- if ( postFinder ) {
- // Get the final matcherOut by condensing this intermediate into postFinder contexts
- temp = [];
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) ) {
- // Restore matcherIn since elem is not yet a final match
- temp.push( (matcherIn[i] = elem) );
- }
- }
- postFinder( null, (matcherOut = []), temp, xml );
- }
-
- // Move matched elements from seed to results to keep them synchronized
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) &&
- (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
-
- seed[temp] = !(results[temp] = elem);
- }
- }
- }
-
- // Add elements to results, through postFinder if defined
- } else {
- matcherOut = condense(
- matcherOut === results ?
- matcherOut.splice( preexisting, matcherOut.length ) :
- matcherOut
- );
- if ( postFinder ) {
- postFinder( null, results, matcherOut, xml );
- } else {
- push.apply( results, matcherOut );
- }
- }
- });
-}
-
-function matcherFromTokens( tokens ) {
- var checkContext, matcher, j,
- len = tokens.length,
- leadingRelative = Expr.relative[ tokens[0].type ],
- implicitRelative = leadingRelative || Expr.relative[" "],
- i = leadingRelative ? 1 : 0,
-
- // The foundational matcher ensures that elements are reachable from top-level context(s)
- matchContext = addCombinator( function( elem ) {
- return elem === checkContext;
- }, implicitRelative, true ),
- matchAnyContext = addCombinator( function( elem ) {
- return indexOf.call( checkContext, elem ) > -1;
- }, implicitRelative, true ),
- matchers = [ function( elem, context, xml ) {
- return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
- (checkContext = context).nodeType ?
- matchContext( elem, context, xml ) :
- matchAnyContext( elem, context, xml ) );
- } ];
-
- for ( ; i < len; i++ ) {
- if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
- matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
- } else {
- matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
-
- // Return special upon seeing a positional matcher
- if ( matcher[ expando ] ) {
- // Find the next relative operator (if any) for proper handling
- j = ++i;
- for ( ; j < len; j++ ) {
- if ( Expr.relative[ tokens[j].type ] ) {
- break;
- }
- }
- return setMatcher(
- i > 1 && elementMatcher( matchers ),
- i > 1 && toSelector(
- // If the preceding token was a descendant combinator, insert an implicit any-element `*`
- tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
- ).replace( rtrim, "$1" ),
- matcher,
- i < j && matcherFromTokens( tokens.slice( i, j ) ),
- j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
- j < len && toSelector( tokens )
- );
- }
- matchers.push( matcher );
- }
- }
-
- return elementMatcher( matchers );
-}
-
-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
- var bySet = setMatchers.length > 0,
- byElement = elementMatchers.length > 0,
- superMatcher = function( seed, context, xml, results, outermost ) {
- var elem, j, matcher,
- matchedCount = 0,
- i = "0",
- unmatched = seed && [],
- setMatched = [],
- contextBackup = outermostContext,
- // We must always have either seed elements or outermost context
- elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
- // Use integer dirruns iff this is the outermost matcher
- dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
- len = elems.length;
-
- if ( outermost ) {
- outermostContext = context !== document && context;
- }
-
- // Add elements passing elementMatchers directly to results
- // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
- // Support: IE<9, Safari
- // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
- for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
- if ( byElement && elem ) {
- j = 0;
- while ( (matcher = elementMatchers[j++]) ) {
- if ( matcher( elem, context, xml ) ) {
- results.push( elem );
- break;
- }
- }
- if ( outermost ) {
- dirruns = dirrunsUnique;
- }
- }
-
- // Track unmatched elements for set filters
- if ( bySet ) {
- // They will have gone through all possible matchers
- if ( (elem = !matcher && elem) ) {
- matchedCount--;
- }
-
- // Lengthen the array for every element, matched or not
- if ( seed ) {
- unmatched.push( elem );
- }
- }
- }
-
- // Apply set filters to unmatched elements
- matchedCount += i;
- if ( bySet && i !== matchedCount ) {
- j = 0;
- while ( (matcher = setMatchers[j++]) ) {
- matcher( unmatched, setMatched, context, xml );
- }
-
- if ( seed ) {
- // Reintegrate element matches to eliminate the need for sorting
- if ( matchedCount > 0 ) {
- while ( i-- ) {
- if ( !(unmatched[i] || setMatched[i]) ) {
- setMatched[i] = pop.call( results );
- }
- }
- }
-
- // Discard index placeholder values to get only actual matches
- setMatched = condense( setMatched );
- }
-
- // Add matches to results
- push.apply( results, setMatched );
-
- // Seedless set matches succeeding multiple successful matchers stipulate sorting
- if ( outermost && !seed && setMatched.length > 0 &&
- ( matchedCount + setMatchers.length ) > 1 ) {
-
- Sizzle.uniqueSort( results );
- }
- }
-
- // Override manipulation of globals by nested matchers
- if ( outermost ) {
- dirruns = dirrunsUnique;
- outermostContext = contextBackup;
- }
-
- return unmatched;
- };
-
- return bySet ?
- markFunction( superMatcher ) :
- superMatcher;
-}
-
-compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
- var i,
- setMatchers = [],
- elementMatchers = [],
- cached = compilerCache[ selector + " " ];
-
- if ( !cached ) {
- // Generate a function of recursive functions that can be used to check each element
- if ( !match ) {
- match = tokenize( selector );
- }
- i = match.length;
- while ( i-- ) {
- cached = matcherFromTokens( match[i] );
- if ( cached[ expando ] ) {
- setMatchers.push( cached );
- } else {
- elementMatchers.push( cached );
- }
- }
-
- // Cache the compiled function
- cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
-
- // Save selector and tokenization
- cached.selector = selector;
- }
- return cached;
-};
-
-/**
- * A low-level selection function that works with Sizzle's compiled
- * selector functions
- * @param {String|Function} selector A selector or a pre-compiled
- * selector function built with Sizzle.compile
- * @param {Element} context
- * @param {Array} [results]
- * @param {Array} [seed] A set of elements to match against
- */
-select = Sizzle.select = function( selector, context, results, seed ) {
- var i, tokens, token, type, find,
- compiled = typeof selector === "function" && selector,
- match = !seed && tokenize( (selector = compiled.selector || selector) );
-
- results = results || [];
-
- // Try to minimize operations if there is no seed and only one group
- if ( match.length === 1 ) {
-
- // Take a shortcut and set the context if the root selector is an ID
- tokens = match[0] = match[0].slice( 0 );
- if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
- support.getById && context.nodeType === 9 && documentIsHTML &&
- Expr.relative[ tokens[1].type ] ) {
-
- context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
- if ( !context ) {
- return results;
-
- // Precompiled matchers will still verify ancestry, so step up a level
- } else if ( compiled ) {
- context = context.parentNode;
- }
-
- selector = selector.slice( tokens.shift().value.length );
- }
-
- // Fetch a seed set for right-to-left matching
- i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
- while ( i-- ) {
- token = tokens[i];
-
- // Abort if we hit a combinator
- if ( Expr.relative[ (type = token.type) ] ) {
- break;
- }
- if ( (find = Expr.find[ type ]) ) {
- // Search, expanding context for leading sibling combinators
- if ( (seed = find(
- token.matches[0].replace( runescape, funescape ),
- rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
- )) ) {
-
- // If seed is empty or no tokens remain, we can return early
- tokens.splice( i, 1 );
- selector = seed.length && toSelector( tokens );
- if ( !selector ) {
- push.apply( results, seed );
- return results;
- }
-
- break;
- }
- }
- }
- }
-
- // Compile and execute a filtering function if one is not provided
- // Provide `match` to avoid retokenization if we modified the selector above
- ( compiled || compile( selector, match ) )(
- seed,
- context,
- !documentIsHTML,
- results,
- rsibling.test( selector ) && testContext( context.parentNode ) || context
- );
- return results;
-};
-
-// One-time assignments
-
-// Sort stability
-support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
-
-// Support: Chrome<14
-// Always assume duplicates if they aren't passed to the comparison function
-support.detectDuplicates = !!hasDuplicate;
-
-// Initialize against the default document
-setDocument();
-
-// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
-// Detached nodes confoundingly follow *each other*
-support.sortDetached = assert(function( div1 ) {
- // Should return 1, but returns 4 (following)
- return div1.compareDocumentPosition( document.createElement("div") ) & 1;
-});
-
-// Support: IE<8
-// Prevent attribute/property "interpolation"
-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !assert(function( div ) {
- div.innerHTML = "<a href='#'></a>";
- return div.firstChild.getAttribute("href") === "#" ;
-}) ) {
- addHandle( "type|href|height|width", function( elem, name, isXML ) {
- if ( !isXML ) {
- return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
- }
- });
-}
-
-// Support: IE<9
-// Use defaultValue in place of getAttribute("value")
-if ( !support.attributes || !assert(function( div ) {
- div.innerHTML = "<input/>";
- div.firstChild.setAttribute( "value", "" );
- return div.firstChild.getAttribute( "value" ) === "";
-}) ) {
- addHandle( "value", function( elem, name, isXML ) {
- if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
- return elem.defaultValue;
- }
- });
-}
-
-// Support: IE<9
-// Use getAttributeNode to fetch booleans when getAttribute lies
-if ( !assert(function( div ) {
- return div.getAttribute("disabled") == null;
-}) ) {
- addHandle( booleans, function( elem, name, isXML ) {
- var val;
- if ( !isXML ) {
- return elem[ name ] === true ? name.toLowerCase() :
- (val = elem.getAttributeNode( name )) && val.specified ?
- val.value :
- null;
- }
- });
-}
-
-return Sizzle;
-
-})( window );
-
-
-
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.pseudos;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-
-var rneedsContext = jQuery.expr.match.needsContext;
-
-var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
-
-
-
-var risSimple = /^.[^:#\[\.,]*$/;
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, not ) {
- if ( jQuery.isFunction( qualifier ) ) {
- return jQuery.grep( elements, function( elem, i ) {
- /* jshint -W018 */
- return !!qualifier.call( elem, i, elem ) !== not;
- });
-
- }
-
- if ( qualifier.nodeType ) {
- return jQuery.grep( elements, function( elem ) {
- return ( elem === qualifier ) !== not;
- });
-
- }
-
- if ( typeof qualifier === "string" ) {
- if ( risSimple.test( qualifier ) ) {
- return jQuery.filter( qualifier, elements, not );
- }
-
- qualifier = jQuery.filter( qualifier, elements );
- }
-
- return jQuery.grep( elements, function( elem ) {
- return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;
- });
-}
-
-jQuery.filter = function( expr, elems, not ) {
- var elem = elems[ 0 ];
-
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
-
- return elems.length === 1 && elem.nodeType === 1 ?
- jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
- jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
- return elem.nodeType === 1;
- }));
-};
-
-jQuery.fn.extend({
- find: function( selector ) {
- var i,
- ret = [],
- self = this,
- len = self.length;
-
- if ( typeof selector !== "string" ) {
- return this.pushStack( jQuery( selector ).filter(function() {
- for ( i = 0; i < len; i++ ) {
- if ( jQuery.contains( self[ i ], this ) ) {
- return true;
- }
- }
- }) );
- }
-
- for ( i = 0; i < len; i++ ) {
- jQuery.find( selector, self[ i ], ret );
- }
-
- // Needed because $( selector, context ) becomes $( context ).find( selector )
- ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
- ret.selector = this.selector ? this.selector + " " + selector : selector;
- return ret;
- },
- filter: function( selector ) {
- return this.pushStack( winnow(this, selector || [], false) );
- },
- not: function( selector ) {
- return this.pushStack( winnow(this, selector || [], true) );
- },
- is: function( selector ) {
- return !!winnow(
- this,
-
- // If this is a positional/relative selector, check membership in the returned set
- // so $("p:first").is("p:last") won't return true for a doc with two "p".
- typeof selector === "string" && rneedsContext.test( selector ) ?
- jQuery( selector ) :
- selector || [],
- false
- ).length;
- }
-});
-
-
-// Initialize a jQuery object
-
-
-// A central reference to the root jQuery(document)
-var rootjQuery,
-
- // Use the correct document accordingly with window argument (sandbox)
- document = window.document,
-
- // A simple way to check for HTML strings
- // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
- // Strict HTML recognition (#11290: must start with <)
- rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
-
- init = jQuery.fn.init = function( selector, context ) {
- var match, elem;
-
- // HANDLE: $(""), $(null), $(undefined), $(false)
- if ( !selector ) {
- return this;
- }
-
- // Handle HTML strings
- if ( typeof selector === "string" ) {
- if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
- // Assume that strings that start and end with <> are HTML and skip the regex check
- match = [ null, selector, null ];
-
- } else {
- match = rquickExpr.exec( selector );
- }
-
- // Match html or make sure no context is specified for #id
- if ( match && (match[1] || !context) ) {
-
- // HANDLE: $(html) -> $(array)
- if ( match[1] ) {
- context = context instanceof jQuery ? context[0] : context;
-
- // scripts is true for back-compat
- // Intentionally let the error be thrown if parseHTML is not present
- jQuery.merge( this, jQuery.parseHTML(
- match[1],
- context && context.nodeType ? context.ownerDocument || context : document,
- true
- ) );
-
- // HANDLE: $(html, props)
- if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
- for ( match in context ) {
- // Properties of context are called as methods if possible
- if ( jQuery.isFunction( this[ match ] ) ) {
- this[ match ]( context[ match ] );
-
- // ...and otherwise set as attributes
- } else {
- this.attr( match, context[ match ] );
- }
- }
- }
-
- return this;
-
- // HANDLE: $(#id)
- } else {
- elem = document.getElementById( match[2] );
-
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem.id !== match[2] ) {
- return rootjQuery.find( selector );
- }
-
- // Otherwise, we inject the element directly into the jQuery object
- this.length = 1;
- this[0] = elem;
- }
-
- this.context = document;
- this.selector = selector;
- return this;
- }
-
- // HANDLE: $(expr, $(...))
- } else if ( !context || context.jquery ) {
- return ( context || rootjQuery ).find( selector );
-
- // HANDLE: $(expr, context)
- // (which is just equivalent to: $(context).find(expr)
- } else {
- return this.constructor( context ).find( selector );
- }
-
- // HANDLE: $(DOMElement)
- } else if ( selector.nodeType ) {
- this.context = this[0] = selector;
- this.length = 1;
- return this;
-
- // HANDLE: $(function)
- // Shortcut for document ready
- } else if ( jQuery.isFunction( selector ) ) {
- return typeof rootjQuery.ready !== "undefined" ?
- rootjQuery.ready( selector ) :
- // Execute immediately if ready is not present
- selector( jQuery );
- }
-
- if ( selector.selector !== undefined ) {
- this.selector = selector.selector;
- this.context = selector.context;
- }
-
- return jQuery.makeArray( selector, this );
- };
-
-// Give the init function the jQuery prototype for later instantiation
-init.prototype = jQuery.fn;
-
-// Initialize central reference
-rootjQuery = jQuery( document );
-
-
-var rparentsprev = /^(?:parents|prev(?:Until|All))/,
- // methods guaranteed to produce a unique set when starting from a unique set
- guaranteedUnique = {
- children: true,
- contents: true,
- next: true,
- prev: true
- };
-
-jQuery.extend({
- dir: function( elem, dir, until ) {
- var matched = [],
- cur = elem[ dir ];
-
- while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
- if ( cur.nodeType === 1 ) {
- matched.push( cur );
- }
- cur = cur[dir];
- }
- return matched;
- },
-
- sibling: function( n, elem ) {
- var r = [];
-
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- r.push( n );
- }
- }
-
- return r;
- }
-});
-
-jQuery.fn.extend({
- has: function( target ) {
- var i,
- targets = jQuery( target, this ),
- len = targets.length;
-
- return this.filter(function() {
- for ( i = 0; i < len; i++ ) {
- if ( jQuery.contains( this, targets[i] ) ) {
- return true;
- }
- }
- });
- },
-
- closest: function( selectors, context ) {
- var cur,
- i = 0,
- l = this.length,
- matched = [],
- pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
- jQuery( selectors, context || this.context ) :
- 0;
-
- for ( ; i < l; i++ ) {
- for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
- // Always skip document fragments
- if ( cur.nodeType < 11 && (pos ?
- pos.index(cur) > -1 :
-
- // Don't pass non-elements to Sizzle
- cur.nodeType === 1 &&
- jQuery.find.matchesSelector(cur, selectors)) ) {
-
- matched.push( cur );
- break;
- }
- }
- }
-
- return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
- },
-
- // Determine the position of an element within
- // the matched set of elements
- index: function( elem ) {
-
- // No argument, return index in parent
- if ( !elem ) {
- return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
- }
-
- // index in selector
- if ( typeof elem === "string" ) {
- return jQuery.inArray( this[0], jQuery( elem ) );
- }
-
- // Locate the position of the desired element
- return jQuery.inArray(
- // If it receives a jQuery object, the first element is used
- elem.jquery ? elem[0] : elem, this );
- },
-
- add: function( selector, context ) {
- return this.pushStack(
- jQuery.unique(
- jQuery.merge( this.get(), jQuery( selector, context ) )
- )
- );
- },
-
- addBack: function( selector ) {
- return this.add( selector == null ?
- this.prevObject : this.prevObject.filter(selector)
- );
- }
-});
-
-function sibling( cur, dir ) {
- do {
- cur = cur[ dir ];
- } while ( cur && cur.nodeType !== 1 );
-
- return cur;
-}
-
-jQuery.each({
- parent: function( elem ) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function( elem ) {
- return jQuery.dir( elem, "parentNode" );
- },
- parentsUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "parentNode", until );
- },
- next: function( elem ) {
- return sibling( elem, "nextSibling" );
- },
- prev: function( elem ) {
- return sibling( elem, "previousSibling" );
- },
- nextAll: function( elem ) {
- return jQuery.dir( elem, "nextSibling" );
- },
- prevAll: function( elem ) {
- return jQuery.dir( elem, "previousSibling" );
- },
- nextUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "nextSibling", until );
- },
- prevUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "previousSibling", until );
- },
- siblings: function( elem ) {
- return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
- },
- children: function( elem ) {
- return jQuery.sibling( elem.firstChild );
- },
- contents: function( elem ) {
- return jQuery.nodeName( elem, "iframe" ) ?
- elem.contentDocument || elem.contentWindow.document :
- jQuery.merge( [], elem.childNodes );
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function( until, selector ) {
- var ret = jQuery.map( this, fn, until );
-
- if ( name.slice( -5 ) !== "Until" ) {
- selector = until;
- }
-
- if ( selector && typeof selector === "string" ) {
- ret = jQuery.filter( selector, ret );
- }
-
- if ( this.length > 1 ) {
- // Remove duplicates
- if ( !guaranteedUnique[ name ] ) {
- ret = jQuery.unique( ret );
- }
-
- // Reverse order for parents* and prev-derivatives
- if ( rparentsprev.test( name ) ) {
- ret = ret.reverse();
- }
- }
-
- return this.pushStack( ret );
- };
-});
-var rnotwhite = (/\S+/g);
-
-
-
-// String to Object options format cache
-var optionsCache = {};
-
-// Convert String-formatted options into Object-formatted ones and store in cache
-function createOptions( options ) {
- var object = optionsCache[ options ] = {};
- jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
- object[ flag ] = true;
- });
- return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- * options: an optional list of space-separated options that will change how
- * the callback list behaves or a more traditional option object
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible options:
- *
- * once: will ensure the callback list can only be fired once (like a Deferred)
- *
- * memory: will keep track of previous values and will call any callback added
- * after the list has been fired right away with the latest "memorized"
- * values (like a Deferred)
- *
- * unique: will ensure a callback can only be added once (no duplicate in the list)
- *
- * stopOnFalse: interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( options ) {
-
- // Convert options from String-formatted to Object-formatted if needed
- // (we check in cache first)
- options = typeof options === "string" ?
- ( optionsCache[ options ] || createOptions( options ) ) :
- jQuery.extend( {}, options );
-
- var // Flag to know if list is currently firing
- firing,
- // Last fire value (for non-forgettable lists)
- memory,
- // Flag to know if list was already fired
- fired,
- // End of the loop when firing
- firingLength,
- // Index of currently firing callback (modified by remove if needed)
- firingIndex,
- // First callback to fire (used internally by add and fireWith)
- firingStart,
- // Actual callback list
- list = [],
- // Stack of fire calls for repeatable lists
- stack = !options.once && [],
- // Fire callbacks
- fire = function( data ) {
- memory = options.memory && data;
- fired = true;
- firingIndex = firingStart || 0;
- firingStart = 0;
- firingLength = list.length;
- firing = true;
- for ( ; list && firingIndex < firingLength; firingIndex++ ) {
- if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
- memory = false; // To prevent further calls using add
- break;
- }
- }
- firing = false;
- if ( list ) {
- if ( stack ) {
- if ( stack.length ) {
- fire( stack.shift() );
- }
- } else if ( memory ) {
- list = [];
- } else {
- self.disable();
- }
- }
- },
- // Actual Callbacks object
- self = {
- // Add a callback or a collection of callbacks to the list
- add: function() {
- if ( list ) {
- // First, we save the current length
- var start = list.length;
- (function add( args ) {
- jQuery.each( args, function( _, arg ) {
- var type = jQuery.type( arg );
- if ( type === "function" ) {
- if ( !options.unique || !self.has( arg ) ) {
- list.push( arg );
- }
- } else if ( arg && arg.length && type !== "string" ) {
- // Inspect recursively
- add( arg );
- }
- });
- })( arguments );
- // Do we need to add the callbacks to the
- // current firing batch?
- if ( firing ) {
- firingLength = list.length;
- // With memory, if we're not firing then
- // we should call right away
- } else if ( memory ) {
- firingStart = start;
- fire( memory );
- }
- }
- return this;
- },
- // Remove a callback from the list
- remove: function() {
- if ( list ) {
- jQuery.each( arguments, function( _, arg ) {
- var index;
- while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
- list.splice( index, 1 );
- // Handle firing indexes
- if ( firing ) {
- if ( index <= firingLength ) {
- firingLength--;
- }
- if ( index <= firingIndex ) {
- firingIndex--;
- }
- }
- }
- });
- }
- return this;
- },
- // Check if a given callback is in the list.
- // If no argument is given, return whether or not list has callbacks attached.
- has: function( fn ) {
- return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
- },
- // Remove all callbacks from the list
- empty: function() {
- list = [];
- firingLength = 0;
- return this;
- },
- // Have the list do nothing anymore
- disable: function() {
- list = stack = memory = undefined;
- return this;
- },
- // Is it disabled?
- disabled: function() {
- return !list;
- },
- // Lock the list in its current state
- lock: function() {
- stack = undefined;
- if ( !memory ) {
- self.disable();
- }
- return this;
- },
- // Is it locked?
- locked: function() {
- return !stack;
- },
- // Call all callbacks with the given context and arguments
- fireWith: function( context, args ) {
- if ( list && ( !fired || stack ) ) {
- args = args || [];
- args = [ context, args.slice ? args.slice() : args ];
- if ( firing ) {
- stack.push( args );
- } else {
- fire( args );
- }
- }
- return this;
- },
- // Call all the callbacks with the given arguments
- fire: function() {
- self.fireWith( this, arguments );
- return this;
- },
- // To know if the callbacks have already been called at least once
- fired: function() {
- return !!fired;
- }
- };
-
- return self;
-};
-
-
-jQuery.extend({
-
- Deferred: function( func ) {
- var tuples = [
- // action, add listener, listener list, final state
- [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
- [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
- [ "notify", "progress", jQuery.Callbacks("memory") ]
- ],
- state = "pending",
- promise = {
- state: function() {
- return state;
- },
- always: function() {
- deferred.done( arguments ).fail( arguments );
- return this;
- },
- then: function( /* fnDone, fnFail, fnProgress */ ) {
- var fns = arguments;
- return jQuery.Deferred(function( newDefer ) {
- jQuery.each( tuples, function( i, tuple ) {
- var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
- // deferred[ done | fail | progress ] for forwarding actions to newDefer
- deferred[ tuple[1] ](function() {
- var returned = fn && fn.apply( this, arguments );
- if ( returned && jQuery.isFunction( returned.promise ) ) {
- returned.promise()
- .done( newDefer.resolve )
- .fail( newDefer.reject )
- .progress( newDefer.notify );
- } else {
- newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
- }
- });
- });
- fns = null;
- }).promise();
- },
- // Get a promise for this deferred
- // If obj is provided, the promise aspect is added to the object
- promise: function( obj ) {
- return obj != null ? jQuery.extend( obj, promise ) : promise;
- }
- },
- deferred = {};
-
- // Keep pipe for back-compat
- promise.pipe = promise.then;
-
- // Add list-specific methods
- jQuery.each( tuples, function( i, tuple ) {
- var list = tuple[ 2 ],
- stateString = tuple[ 3 ];
-
- // promise[ done | fail | progress ] = list.add
- promise[ tuple[1] ] = list.add;
-
- // Handle state
- if ( stateString ) {
- list.add(function() {
- // state = [ resolved | rejected ]
- state = stateString;
-
- // [ reject_list | resolve_list ].disable; progress_list.lock
- }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
- }
-
- // deferred[ resolve | reject | notify ]
- deferred[ tuple[0] ] = function() {
- deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
- return this;
- };
- deferred[ tuple[0] + "With" ] = list.fireWith;
- });
-
- // Make the deferred a promise
- promise.promise( deferred );
-
- // Call given func if any
- if ( func ) {
- func.call( deferred, deferred );
- }
-
- // All done!
- return deferred;
- },
-
- // Deferred helper
- when: function( subordinate /* , ..., subordinateN */ ) {
- var i = 0,
- resolveValues = slice.call( arguments ),
- length = resolveValues.length,
-
- // the count of uncompleted subordinates
- remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
-
- // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
- deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
-
- // Update function for both resolve and progress values
- updateFunc = function( i, contexts, values ) {
- return function( value ) {
- contexts[ i ] = this;
- values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
- if ( values === progressValues ) {
- deferred.notifyWith( contexts, values );
-
- } else if ( !(--remaining) ) {
- deferred.resolveWith( contexts, values );
- }
- };
- },
-
- progressValues, progressContexts, resolveContexts;
-
- // add listeners to Deferred subordinates; treat others as resolved
- if ( length > 1 ) {
- progressValues = new Array( length );
- progressContexts = new Array( length );
- resolveContexts = new Array( length );
- for ( ; i < length; i++ ) {
- if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
- resolveValues[ i ].promise()
- .done( updateFunc( i, resolveContexts, resolveValues ) )
- .fail( deferred.reject )
- .progress( updateFunc( i, progressContexts, progressValues ) );
- } else {
- --remaining;
- }
- }
- }
-
- // if we're not waiting on anything, resolve the master
- if ( !remaining ) {
- deferred.resolveWith( resolveContexts, resolveValues );
- }
-
- return deferred.promise();
- }
-});
-
-
-// The deferred used on DOM ready
-var readyList;
-
-jQuery.fn.ready = function( fn ) {
- // Add the callback
- jQuery.ready.promise().done( fn );
-
- return this;
-};
-
-jQuery.extend({
- // Is the DOM ready to be used? Set to true once it occurs.
- isReady: false,
-
- // A counter to track how many items to wait for before
- // the ready event fires. See #6781
- readyWait: 1,
-
- // Hold (or release) the ready event
- holdReady: function( hold ) {
- if ( hold ) {
- jQuery.readyWait++;
- } else {
- jQuery.ready( true );
- }
- },
-
- // Handle when the DOM is ready
- ready: function( wait ) {
-
- // Abort if there are pending holds or we're already ready
- if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
- return;
- }
-
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( !document.body ) {
- return setTimeout( jQuery.ready );
- }
-
- // Remember that the DOM is ready
- jQuery.isReady = true;
-
- // If a normal DOM Ready event fired, decrement, and wait if need be
- if ( wait !== true && --jQuery.readyWait > 0 ) {
- return;
- }
-
- // If there are functions bound, to execute
- readyList.resolveWith( document, [ jQuery ] );
-
- // Trigger any bound ready events
- if ( jQuery.fn.triggerHandler ) {
- jQuery( document ).triggerHandler( "ready" );
- jQuery( document ).off( "ready" );
- }
- }
-});
-
-/**
- * Clean-up method for dom ready events
- */
-function detach() {
- if ( document.addEventListener ) {
- document.removeEventListener( "DOMContentLoaded", completed, false );
- window.removeEventListener( "load", completed, false );
-
- } else {
- document.detachEvent( "onreadystatechange", completed );
- window.detachEvent( "onload", completed );
- }
-}
-
-/**
- * The ready event handler and self cleanup method
- */
-function completed() {
- // readyState === "complete" is good enough for us to call the dom ready in oldIE
- if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
- detach();
- jQuery.ready();
- }
-}
-
-jQuery.ready.promise = function( obj ) {
- if ( !readyList ) {
-
- readyList = jQuery.Deferred();
-
- // Catch cases where $(document).ready() is called after the browser event has already occurred.
- // we once tried to use readyState "interactive" here, but it caused issues like the one
- // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
- if ( document.readyState === "complete" ) {
- // Handle it asynchronously to allow scripts the opportunity to delay ready
- setTimeout( jQuery.ready );
-
- // Standards-based browsers support DOMContentLoaded
- } else if ( document.addEventListener ) {
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", completed, false );
-
- // A fallback to window.onload, that will always work
- window.addEventListener( "load", completed, false );
-
- // If IE event model is used
- } else {
- // Ensure firing before onload, maybe late but safe also for iframes
- document.attachEvent( "onreadystatechange", completed );
-
- // A fallback to window.onload, that will always work
- window.attachEvent( "onload", completed );
-
- // If IE and not a frame
- // continually check to see if the document is ready
- var top = false;
-
- try {
- top = window.frameElement == null && document.documentElement;
- } catch(e) {}
-
- if ( top && top.doScroll ) {
- (function doScrollCheck() {
- if ( !jQuery.isReady ) {
-
- try {
- // Use the trick by Diego Perini
- // http://javascript.nwbox.com/IEContentLoaded/
- top.doScroll("left");
- } catch(e) {
- return setTimeout( doScrollCheck, 50 );
- }
-
- // detach all dom ready events
- detach();
-
- // and execute any waiting functions
- jQuery.ready();
- }
- })();
- }
- }
- }
- return readyList.promise( obj );
-};
-
-
-var strundefined = typeof undefined;
-
-
-
-// Support: IE<9
-// Iteration over object's inherited properties before its own
-var i;
-for ( i in jQuery( support ) ) {
- break;
-}
-support.ownLast = i !== "0";
-
-// Note: most support tests are defined in their respective modules.
-// false until the test is run
-support.inlineBlockNeedsLayout = false;
-
-// Execute ASAP in case we need to set body.style.zoom
-jQuery(function() {
- // Minified: var a,b,c,d
- var val, div, body, container;
-
- body = document.getElementsByTagName( "body" )[ 0 ];
- if ( !body || !body.style ) {
- // Return for frameset docs that don't have a body
- return;
- }
-
- // Setup
- div = document.createElement( "div" );
- container = document.createElement( "div" );
- container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
- body.appendChild( container ).appendChild( div );
-
- if ( typeof div.style.zoom !== strundefined ) {
- // Support: IE<8
- // Check if natively block-level elements act like inline-block
- // elements when setting their display to 'inline' and giving
- // them layout
- div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";
-
- support.inlineBlockNeedsLayout = val = div.offsetWidth === 3;
- if ( val ) {
- // Prevent IE 6 from affecting layout for positioned elements #11048
- // Prevent IE from shrinking the body in IE 7 mode #12869
- // Support: IE<8
- body.style.zoom = 1;
- }
- }
-
- body.removeChild( container );
-});
-
-
-
-
-(function() {
- var div = document.createElement( "div" );
-
- // Execute the test only if not already executed in another module.
- if (support.deleteExpando == null) {
- // Support: IE<9
- support.deleteExpando = true;
- try {
- delete div.test;
- } catch( e ) {
- support.deleteExpando = false;
- }
- }
-
- // Null elements to avoid leaks in IE.
- div = null;
-})();
-
-
-/**
- * Determines whether an object can have data
- */
-jQuery.acceptData = function( elem ) {
- var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ],
- nodeType = +elem.nodeType || 1;
-
- // Do not set data on non-element DOM nodes because it will not be cleared (#8335).
- return nodeType !== 1 && nodeType !== 9 ?
- false :
-
- // Nodes accept data unless otherwise specified; rejection can be conditional
- !noData || noData !== true && elem.getAttribute("classid") === noData;
-};
-
-
-var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
- rmultiDash = /([A-Z])/g;
-
-function dataAttr( elem, key, data ) {
- // If nothing was found internally, try to fetch any
- // data from the HTML5 data-* attribute
- if ( data === undefined && elem.nodeType === 1 ) {
-
- var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
- data = elem.getAttribute( name );
-
- if ( typeof data === "string" ) {
- try {
- data = data === "true" ? true :
- data === "false" ? false :
- data === "null" ? null :
- // Only convert to a number if it doesn't change the string
- +data + "" === data ? +data :
- rbrace.test( data ) ? jQuery.parseJSON( data ) :
- data;
- } catch( e ) {}
-
- // Make sure we set the data so it isn't changed later
- jQuery.data( elem, key, data );
-
- } else {
- data = undefined;
- }
- }
-
- return data;
-}
-
-// checks a cache object for emptiness
-function isEmptyDataObject( obj ) {
- var name;
- for ( name in obj ) {
-
- // if the public data object is empty, the private is still empty
- if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
- continue;
- }
- if ( name !== "toJSON" ) {
- return false;
- }
- }
-
- return true;
-}
-
-function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var ret, thisCache,
- internalKey = jQuery.expando,
-
- // We have to handle DOM nodes and JS objects differently because IE6-7
- // can't GC object references properly across the DOM-JS boundary
- isNode = elem.nodeType,
-
- // Only DOM nodes need the global jQuery cache; JS object data is
- // attached directly to the object so GC can occur automatically
- cache = isNode ? jQuery.cache : elem,
-
- // Only defining an ID for JS objects if its cache already exists allows
- // the code to shortcut on the same path as a DOM node with no cache
- id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
-
- // Avoid doing any more work than we need to when trying to get data on an
- // object that has no data at all
- if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {
- return;
- }
-
- if ( !id ) {
- // Only DOM nodes need a new unique ID for each element since their data
- // ends up in the global cache
- if ( isNode ) {
- id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;
- } else {
- id = internalKey;
- }
- }
-
- if ( !cache[ id ] ) {
- // Avoid exposing jQuery metadata on plain JS objects when the object
- // is serialized using JSON.stringify
- cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
- }
-
- // An object can be passed to jQuery.data instead of a key/value pair; this gets
- // shallow copied over onto the existing cache
- if ( typeof name === "object" || typeof name === "function" ) {
- if ( pvt ) {
- cache[ id ] = jQuery.extend( cache[ id ], name );
- } else {
- cache[ id ].data = jQuery.extend( cache[ id ].data, name );
- }
- }
-
- thisCache = cache[ id ];
-
- // jQuery data() is stored in a separate object inside the object's internal data
- // cache in order to avoid key collisions between internal data and user-defined
- // data.
- if ( !pvt ) {
- if ( !thisCache.data ) {
- thisCache.data = {};
- }
-
- thisCache = thisCache.data;
- }
-
- if ( data !== undefined ) {
- thisCache[ jQuery.camelCase( name ) ] = data;
- }
-
- // Check for both converted-to-camel and non-converted data property names
- // If a data property was specified
- if ( typeof name === "string" ) {
-
- // First Try to find as-is property data
- ret = thisCache[ name ];
-
- // Test for null|undefined property data
- if ( ret == null ) {
-
- // Try to find the camelCased property
- ret = thisCache[ jQuery.camelCase( name ) ];
- }
- } else {
- ret = thisCache;
- }
-
- return ret;
-}
-
-function internalRemoveData( elem, name, pvt ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var thisCache, i,
- isNode = elem.nodeType,
-
- // See jQuery.data for more information
- cache = isNode ? jQuery.cache : elem,
- id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
-
- // If there is already no cache entry for this object, there is no
- // purpose in continuing
- if ( !cache[ id ] ) {
- return;
- }
-
- if ( name ) {
-
- thisCache = pvt ? cache[ id ] : cache[ id ].data;
-
- if ( thisCache ) {
-
- // Support array or space separated string names for data keys
- if ( !jQuery.isArray( name ) ) {
-
- // try the string as a key before any manipulation
- if ( name in thisCache ) {
- name = [ name ];
- } else {
-
- // split the camel cased version by spaces unless a key with the spaces exists
- name = jQuery.camelCase( name );
- if ( name in thisCache ) {
- name = [ name ];
- } else {
- name = name.split(" ");
- }
- }
- } else {
- // If "name" is an array of keys...
- // When data is initially created, via ("key", "val") signature,
- // keys will be converted to camelCase.
- // Since there is no way to tell _how_ a key was added, remove
- // both plain key and camelCase key. #12786
- // This will only penalize the array argument path.
- name = name.concat( jQuery.map( name, jQuery.camelCase ) );
- }
-
- i = name.length;
- while ( i-- ) {
- delete thisCache[ name[i] ];
- }
-
- // If there is no data left in the cache, we want to continue
- // and let the cache object itself get destroyed
- if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {
- return;
- }
- }
- }
-
- // See jQuery.data for more information
- if ( !pvt ) {
- delete cache[ id ].data;
-
- // Don't destroy the parent cache unless the internal data object
- // had been the only thing left in it
- if ( !isEmptyDataObject( cache[ id ] ) ) {
- return;
- }
- }
-
- // Destroy the cache
- if ( isNode ) {
- jQuery.cleanData( [ elem ], true );
-
- // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
- /* jshint eqeqeq: false */
- } else if ( support.deleteExpando || cache != cache.window ) {
- /* jshint eqeqeq: true */
- delete cache[ id ];
-
- // When all else fails, null
- } else {
- cache[ id ] = null;
- }
-}
-
-jQuery.extend({
- cache: {},
-
- // The following elements (space-suffixed to avoid Object.prototype collisions)
- // throw uncatchable exceptions if you attempt to set expando properties
- noData: {
- "applet ": true,
- "embed ": true,
- // ...but Flash objects (which have this classid) *can* handle expandos
- "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
- },
-
- hasData: function( elem ) {
- elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
- return !!elem && !isEmptyDataObject( elem );
- },
-
- data: function( elem, name, data ) {
- return internalData( elem, name, data );
- },
-
- removeData: function( elem, name ) {
- return internalRemoveData( elem, name );
- },
-
- // For internal use only.
- _data: function( elem, name, data ) {
- return internalData( elem, name, data, true );
- },
-
- _removeData: function( elem, name ) {
- return internalRemoveData( elem, name, true );
- }
-});
-
-jQuery.fn.extend({
- data: function( key, value ) {
- var i, name, data,
- elem = this[0],
- attrs = elem && elem.attributes;
-
- // Special expections of .data basically thwart jQuery.access,
- // so implement the relevant behavior ourselves
-
- // Gets all values
- if ( key === undefined ) {
- if ( this.length ) {
- data = jQuery.data( elem );
-
- if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
- i = attrs.length;
- while ( i-- ) {
-
- // Support: IE11+
- // The attrs elements can be null (#14894)
- if ( attrs[ i ] ) {
- name = attrs[ i ].name;
- if ( name.indexOf( "data-" ) === 0 ) {
- name = jQuery.camelCase( name.slice(5) );
- dataAttr( elem, name, data[ name ] );
- }
- }
- }
- jQuery._data( elem, "parsedAttrs", true );
- }
- }
-
- return data;
- }
-
- // Sets multiple values
- if ( typeof key === "object" ) {
- return this.each(function() {
- jQuery.data( this, key );
- });
- }
-
- return arguments.length > 1 ?
-
- // Sets one value
- this.each(function() {
- jQuery.data( this, key, value );
- }) :
-
- // Gets one value
- // Try to fetch any internally stored data first
- elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;
- },
-
- removeData: function( key ) {
- return this.each(function() {
- jQuery.removeData( this, key );
- });
- }
-});
-
-
-jQuery.extend({
- queue: function( elem, type, data ) {
- var queue;
-
- if ( elem ) {
- type = ( type || "fx" ) + "queue";
- queue = jQuery._data( elem, type );
-
- // Speed up dequeue by getting out quickly if this is just a lookup
- if ( data ) {
- if ( !queue || jQuery.isArray(data) ) {
- queue = jQuery._data( elem, type, jQuery.makeArray(data) );
- } else {
- queue.push( data );
- }
- }
- return queue || [];
- }
- },
-
- dequeue: function( elem, type ) {
- type = type || "fx";
-
- var queue = jQuery.queue( elem, type ),
- startLength = queue.length,
- fn = queue.shift(),
- hooks = jQuery._queueHooks( elem, type ),
- next = function() {
- jQuery.dequeue( elem, type );
- };
-
- // If the fx queue is dequeued, always remove the progress sentinel
- if ( fn === "inprogress" ) {
- fn = queue.shift();
- startLength--;
- }
-
- if ( fn ) {
-
- // Add a progress sentinel to prevent the fx queue from being
- // automatically dequeued
- if ( type === "fx" ) {
- queue.unshift( "inprogress" );
- }
-
- // clear up the last queue stop function
- delete hooks.stop;
- fn.call( elem, next, hooks );
- }
-
- if ( !startLength && hooks ) {
- hooks.empty.fire();
- }
- },
-
- // not intended for public consumption - generates a queueHooks object, or returns the current one
- _queueHooks: function( elem, type ) {
- var key = type + "queueHooks";
- return jQuery._data( elem, key ) || jQuery._data( elem, key, {
- empty: jQuery.Callbacks("once memory").add(function() {
- jQuery._removeData( elem, type + "queue" );
- jQuery._removeData( elem, key );
- })
- });
- }
-});
-
-jQuery.fn.extend({
- queue: function( type, data ) {
- var setter = 2;
-
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- setter--;
- }
-
- if ( arguments.length < setter ) {
- return jQuery.queue( this[0], type );
- }
-
- return data === undefined ?
- this :
- this.each(function() {
- var queue = jQuery.queue( this, type, data );
-
- // ensure a hooks for this queue
- jQuery._queueHooks( this, type );
-
- if ( type === "fx" && queue[0] !== "inprogress" ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- dequeue: function( type ) {
- return this.each(function() {
- jQuery.dequeue( this, type );
- });
- },
- clearQueue: function( type ) {
- return this.queue( type || "fx", [] );
- },
- // Get a promise resolved when queues of a certain type
- // are emptied (fx is the type by default)
- promise: function( type, obj ) {
- var tmp,
- count = 1,
- defer = jQuery.Deferred(),
- elements = this,
- i = this.length,
- resolve = function() {
- if ( !( --count ) ) {
- defer.resolveWith( elements, [ elements ] );
- }
- };
-
- if ( typeof type !== "string" ) {
- obj = type;
- type = undefined;
- }
- type = type || "fx";
-
- while ( i-- ) {
- tmp = jQuery._data( elements[ i ], type + "queueHooks" );
- if ( tmp && tmp.empty ) {
- count++;
- tmp.empty.add( resolve );
- }
- }
- resolve();
- return defer.promise( obj );
- }
-});
-var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
-
-var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
-
-var isHidden = function( elem, el ) {
- // isHidden might be called from jQuery#filter function;
- // in that case, element will be second argument
- elem = el || elem;
- return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
- };
-
-
-
-// Multifunctional method to get and set values of a collection
-// The value/s can optionally be executed if it's a function
-var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
- var i = 0,
- length = elems.length,
- bulk = key == null;
-
- // Sets many values
- if ( jQuery.type( key ) === "object" ) {
- chainable = true;
- for ( i in key ) {
- jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
- }
-
- // Sets one value
- } else if ( value !== undefined ) {
- chainable = true;
-
- if ( !jQuery.isFunction( value ) ) {
- raw = true;
- }
-
- if ( bulk ) {
- // Bulk operations run against the entire set
- if ( raw ) {
- fn.call( elems, value );
- fn = null;
-
- // ...except when executing function values
- } else {
- bulk = fn;
- fn = function( elem, key, value ) {
- return bulk.call( jQuery( elem ), value );
- };
- }
- }
-
- if ( fn ) {
- for ( ; i < length; i++ ) {
- fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
- }
- }
- }
-
- return chainable ?
- elems :
-
- // Gets
- bulk ?
- fn.call( elems ) :
- length ? fn( elems[0], key ) : emptyGet;
-};
-var rcheckableType = (/^(?:checkbox|radio)$/i);
-
-
-
-(function() {
- // Minified: var a,b,c
- var input = document.createElement( "input" ),
- div = document.createElement( "div" ),
- fragment = document.createDocumentFragment();
-
- // Setup
- div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
-
- // IE strips leading whitespace when .innerHTML is used
- support.leadingWhitespace = div.firstChild.nodeType === 3;
-
- // Make sure that tbody elements aren't automatically inserted
- // IE will insert them into empty tables
- support.tbody = !div.getElementsByTagName( "tbody" ).length;
-
- // Make sure that link elements get serialized correctly by innerHTML
- // This requires a wrapper element in IE
- support.htmlSerialize = !!div.getElementsByTagName( "link" ).length;
-
- // Makes sure cloning an html5 element does not cause problems
- // Where outerHTML is undefined, this still works
- support.html5Clone =
- document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav></:nav>";
-
- // Check if a disconnected checkbox will retain its checked
- // value of true after appended to the DOM (IE6/7)
- input.type = "checkbox";
- input.checked = true;
- fragment.appendChild( input );
- support.appendChecked = input.checked;
-
- // Make sure textarea (and checkbox) defaultValue is properly cloned
- // Support: IE6-IE11+
- div.innerHTML = "<textarea>x</textarea>";
- support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
-
- // #11217 - WebKit loses check when the name is after the checked attribute
- fragment.appendChild( div );
- div.innerHTML = "<input type='radio' checked='checked' name='t'/>";
-
- // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
- // old WebKit doesn't clone checked state correctly in fragments
- support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
- // Support: IE<9
- // Opera does not clone events (and typeof div.attachEvent === undefined).
- // IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
- support.noCloneEvent = true;
- if ( div.attachEvent ) {
- div.attachEvent( "onclick", function() {
- support.noCloneEvent = false;
- });
-
- div.cloneNode( true ).click();
- }
-
- // Execute the test only if not already executed in another module.
- if (support.deleteExpando == null) {
- // Support: IE<9
- support.deleteExpando = true;
- try {
- delete div.test;
- } catch( e ) {
- support.deleteExpando = false;
- }
- }
-})();
-
-
-(function() {
- var i, eventName,
- div = document.createElement( "div" );
-
- // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event)
- for ( i in { submit: true, change: true, focusin: true }) {
- eventName = "on" + i;
-
- if ( !(support[ i + "Bubbles" ] = eventName in window) ) {
- // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
- div.setAttribute( eventName, "t" );
- support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false;
- }
- }
-
- // Null elements to avoid leaks in IE.
- div = null;
-})();
-
-
-var rformElems = /^(?:input|select|textarea)$/i,
- rkeyEvent = /^key/,
- rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
- rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
- rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
-
-function returnTrue() {
- return true;
-}
-
-function returnFalse() {
- return false;
-}
-
-function safeActiveElement() {
- try {
- return document.activeElement;
- } catch ( err ) { }
-}
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
- global: {},
-
- add: function( elem, types, handler, data, selector ) {
- var tmp, events, t, handleObjIn,
- special, eventHandle, handleObj,
- handlers, type, namespaces, origType,
- elemData = jQuery._data( elem );
-
- // Don't attach events to noData or text/comment nodes (but allow plain objects)
- if ( !elemData ) {
- return;
- }
-
- // Caller can pass in an object of custom data in lieu of the handler
- if ( handler.handler ) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- selector = handleObjIn.selector;
- }
-
- // Make sure that the handler has a unique ID, used to find/remove it later
- if ( !handler.guid ) {
- handler.guid = jQuery.guid++;
- }
-
- // Init the element's event structure and main handler, if this is the first
- if ( !(events = elemData.events) ) {
- events = elemData.events = {};
- }
- if ( !(eventHandle = elemData.handle) ) {
- eventHandle = elemData.handle = function( e ) {
- // Discard the second event of a jQuery.event.trigger() and
- // when an event is called after a page has unloaded
- return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ?
- jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
- undefined;
- };
- // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
- eventHandle.elem = elem;
- }
-
- // Handle multiple events separated by a space
- types = ( types || "" ).match( rnotwhite ) || [ "" ];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[t] ) || [];
- type = origType = tmp[1];
- namespaces = ( tmp[2] || "" ).split( "." ).sort();
-
- // There *must* be a type, no attaching namespace-only handlers
- if ( !type ) {
- continue;
- }
-
- // If event changes its type, use the special event handlers for the changed type
- special = jQuery.event.special[ type ] || {};
-
- // If selector defined, determine special event api type, otherwise given type
- type = ( selector ? special.delegateType : special.bindType ) || type;
-
- // Update special based on newly reset type
- special = jQuery.event.special[ type ] || {};
-
- // handleObj is passed to all event handlers
- handleObj = jQuery.extend({
- type: type,
- origType: origType,
- data: data,
- handler: handler,
- guid: handler.guid,
- selector: selector,
- needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
- namespace: namespaces.join(".")
- }, handleObjIn );
-
- // Init the event handler queue if we're the first
- if ( !(handlers = events[ type ]) ) {
- handlers = events[ type ] = [];
- handlers.delegateCount = 0;
-
- // Only use addEventListener/attachEvent if the special events handler returns false
- if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
- // Bind the global event handler to the element
- if ( elem.addEventListener ) {
- elem.addEventListener( type, eventHandle, false );
-
- } else if ( elem.attachEvent ) {
- elem.attachEvent( "on" + type, eventHandle );
- }
- }
- }
-
- if ( special.add ) {
- special.add.call( elem, handleObj );
-
- if ( !handleObj.handler.guid ) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- // Add to the element's handler list, delegates in front
- if ( selector ) {
- handlers.splice( handlers.delegateCount++, 0, handleObj );
- } else {
- handlers.push( handleObj );
- }
-
- // Keep track of which events have ever been used, for event optimization
- jQuery.event.global[ type ] = true;
- }
-
- // Nullify elem to prevent memory leaks in IE
- elem = null;
- },
-
- // Detach an event or set of events from an element
- remove: function( elem, types, handler, selector, mappedTypes ) {
- var j, handleObj, tmp,
- origCount, t, events,
- special, handlers, type,
- namespaces, origType,
- elemData = jQuery.hasData( elem ) && jQuery._data( elem );
-
- if ( !elemData || !(events = elemData.events) ) {
- return;
- }
-
- // Once for each type.namespace in types; type may be omitted
- types = ( types || "" ).match( rnotwhite ) || [ "" ];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[t] ) || [];
- type = origType = tmp[1];
- namespaces = ( tmp[2] || "" ).split( "." ).sort();
-
- // Unbind all events (on this namespace, if provided) for the element
- if ( !type ) {
- for ( type in events ) {
- jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
- }
- continue;
- }
-
- special = jQuery.event.special[ type ] || {};
- type = ( selector ? special.delegateType : special.bindType ) || type;
- handlers = events[ type ] || [];
- tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
-
- // Remove matching events
- origCount = j = handlers.length;
- while ( j-- ) {
- handleObj = handlers[ j ];
-
- if ( ( mappedTypes || origType === handleObj.origType ) &&
- ( !handler || handler.guid === handleObj.guid ) &&
- ( !tmp || tmp.test( handleObj.namespace ) ) &&
- ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
- handlers.splice( j, 1 );
-
- if ( handleObj.selector ) {
- handlers.delegateCount--;
- }
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
- }
- }
-
- // Remove generic event handler if we removed something and no more handlers exist
- // (avoids potential for endless recursion during removal of special event handlers)
- if ( origCount && !handlers.length ) {
- if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
- jQuery.removeEvent( elem, type, elemData.handle );
- }
-
- delete events[ type ];
- }
- }
-
- // Remove the expando if it's no longer used
- if ( jQuery.isEmptyObject( events ) ) {
- delete elemData.handle;
-
- // removeData also checks for emptiness and clears the expando if empty
- // so use it instead of delete
- jQuery._removeData( elem, "events" );
- }
- },
-
- trigger: function( event, data, elem, onlyHandlers ) {
- var handle, ontype, cur,
- bubbleType, special, tmp, i,
- eventPath = [ elem || document ],
- type = hasOwn.call( event, "type" ) ? event.type : event,
- namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
-
- cur = tmp = elem = elem || document;
-
- // Don't do events on text and comment nodes
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- // focus/blur morphs to focusin/out; ensure we're not firing them right now
- if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
- return;
- }
-
- if ( type.indexOf(".") >= 0 ) {
- // Namespaced trigger; create a regexp to match event type in handle()
- namespaces = type.split(".");
- type = namespaces.shift();
- namespaces.sort();
- }
- ontype = type.indexOf(":") < 0 && "on" + type;
-
- // Caller can pass in a jQuery.Event object, Object, or just an event type string
- event = event[ jQuery.expando ] ?
- event :
- new jQuery.Event( type, typeof event === "object" && event );
-
- // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
- event.isTrigger = onlyHandlers ? 2 : 3;
- event.namespace = namespaces.join(".");
- event.namespace_re = event.namespace ?
- new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
- null;
-
- // Clean up the event in case it is being reused
- event.result = undefined;
- if ( !event.target ) {
- event.target = elem;
- }
-
- // Clone any incoming data and prepend the event, creating the handler arg list
- data = data == null ?
- [ event ] :
- jQuery.makeArray( data, [ event ] );
-
- // Allow special events to draw outside the lines
- special = jQuery.event.special[ type ] || {};
- if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
- return;
- }
-
- // Determine event propagation path in advance, per W3C events spec (#9951)
- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
- if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
- bubbleType = special.delegateType || type;
- if ( !rfocusMorph.test( bubbleType + type ) ) {
- cur = cur.parentNode;
- }
- for ( ; cur; cur = cur.parentNode ) {
- eventPath.push( cur );
- tmp = cur;
- }
-
- // Only add window if we got to document (e.g., not plain obj or detached DOM)
- if ( tmp === (elem.ownerDocument || document) ) {
- eventPath.push( tmp.defaultView || tmp.parentWindow || window );
- }
- }
-
- // Fire handlers on the event path
- i = 0;
- while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
-
- event.type = i > 1 ?
- bubbleType :
- special.bindType || type;
-
- // jQuery handler
- handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
- if ( handle ) {
- handle.apply( cur, data );
- }
-
- // Native handler
- handle = ontype && cur[ ontype ];
- if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
- event.result = handle.apply( cur, data );
- if ( event.result === false ) {
- event.preventDefault();
- }
- }
- }
- event.type = type;
-
- // If nobody prevented the default action, do it now
- if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
- if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
- jQuery.acceptData( elem ) ) {
-
- // Call a native DOM method on the target with the same name name as the event.
- // Can't use an .isFunction() check here because IE6/7 fails that test.
- // Don't do default actions on window, that's where global variables be (#6170)
- if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
-
- // Don't re-trigger an onFOO event when we call its FOO() method
- tmp = elem[ ontype ];
-
- if ( tmp ) {
- elem[ ontype ] = null;
- }
-
- // Prevent re-triggering of the same event, since we already bubbled it above
- jQuery.event.triggered = type;
- try {
- elem[ type ]();
- } catch ( e ) {
- // IE<9 dies on focus/blur to hidden element (#1486,#12518)
- // only reproducible on winXP IE8 native, not IE9 in IE8 mode
- }
- jQuery.event.triggered = undefined;
-
- if ( tmp ) {
- elem[ ontype ] = tmp;
- }
- }
- }
- }
-
- return event.result;
- },
-
- dispatch: function( event ) {
-
- // Make a writable jQuery.Event from the native event object
- event = jQuery.event.fix( event );
-
- var i, ret, handleObj, matched, j,
- handlerQueue = [],
- args = slice.call( arguments ),
- handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
- special = jQuery.event.special[ event.type ] || {};
-
- // Use the fix-ed jQuery.Event rather than the (read-only) native event
- args[0] = event;
- event.delegateTarget = this;
-
- // Call the preDispatch hook for the mapped type, and let it bail if desired
- if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
- return;
- }
-
- // Determine handlers
- handlerQueue = jQuery.event.handlers.call( this, event, handlers );
-
- // Run delegates first; they may want to stop propagation beneath us
- i = 0;
- while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
- event.currentTarget = matched.elem;
-
- j = 0;
- while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
-
- // Triggered event must either 1) have no namespace, or
- // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
- if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
-
- event.handleObj = handleObj;
- event.data = handleObj.data;
-
- ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
- .apply( matched.elem, args );
-
- if ( ret !== undefined ) {
- if ( (event.result = ret) === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
- }
- }
- }
-
- // Call the postDispatch hook for the mapped type
- if ( special.postDispatch ) {
- special.postDispatch.call( this, event );
- }
-
- return event.result;
- },
-
- handlers: function( event, handlers ) {
- var sel, handleObj, matches, i,
- handlerQueue = [],
- delegateCount = handlers.delegateCount,
- cur = event.target;
-
- // Find delegate handlers
- // Black-hole SVG <use> instance trees (#13180)
- // Avoid non-left-click bubbling in Firefox (#3861)
- if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
-
- /* jshint eqeqeq: false */
- for ( ; cur != this; cur = cur.parentNode || this ) {
- /* jshint eqeqeq: true */
-
- // Don't check non-elements (#13208)
- // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
- if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
- matches = [];
- for ( i = 0; i < delegateCount; i++ ) {
- handleObj = handlers[ i ];
-
- // Don't conflict with Object.prototype properties (#13203)
- sel = handleObj.selector + " ";
-
- if ( matches[ sel ] === undefined ) {
- matches[ sel ] = handleObj.needsContext ?
- jQuery( sel, this ).index( cur ) >= 0 :
- jQuery.find( sel, this, null, [ cur ] ).length;
- }
- if ( matches[ sel ] ) {
- matches.push( handleObj );
- }
- }
- if ( matches.length ) {
- handlerQueue.push({ elem: cur, handlers: matches });
- }
- }
- }
- }
-
- // Add the remaining (directly-bound) handlers
- if ( delegateCount < handlers.length ) {
- handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
- }
-
- return handlerQueue;
- },
-
- fix: function( event ) {
- if ( event[ jQuery.expando ] ) {
- return event;
- }
-
- // Create a writable copy of the event object and normalize some properties
- var i, prop, copy,
- type = event.type,
- originalEvent = event,
- fixHook = this.fixHooks[ type ];
-
- if ( !fixHook ) {
- this.fixHooks[ type ] = fixHook =
- rmouseEvent.test( type ) ? this.mouseHooks :
- rkeyEvent.test( type ) ? this.keyHooks :
- {};
- }
- copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
- event = new jQuery.Event( originalEvent );
-
- i = copy.length;
- while ( i-- ) {
- prop = copy[ i ];
- event[ prop ] = originalEvent[ prop ];
- }
-
- // Support: IE<9
- // Fix target property (#1925)
- if ( !event.target ) {
- event.target = originalEvent.srcElement || document;
- }
-
- // Support: Chrome 23+, Safari?
- // Target should not be a text node (#504, #13143)
- if ( event.target.nodeType === 3 ) {
- event.target = event.target.parentNode;
- }
-
- // Support: IE<9
- // For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
- event.metaKey = !!event.metaKey;
-
- return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
- },
-
- // Includes some event props shared by KeyEvent and MouseEvent
- props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
-
- fixHooks: {},
-
- keyHooks: {
- props: "char charCode key keyCode".split(" "),
- filter: function( event, original ) {
-
- // Add which for key events
- if ( event.which == null ) {
- event.which = original.charCode != null ? original.charCode : original.keyCode;
- }
-
- return event;
- }
- },
-
- mouseHooks: {
- props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
- filter: function( event, original ) {
- var body, eventDoc, doc,
- button = original.button,
- fromElement = original.fromElement;
-
- // Calculate pageX/Y if missing and clientX/Y available
- if ( event.pageX == null && original.clientX != null ) {
- eventDoc = event.target.ownerDocument || document;
- doc = eventDoc.documentElement;
- body = eventDoc.body;
-
- event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
- event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
- }
-
- // Add relatedTarget, if necessary
- if ( !event.relatedTarget && fromElement ) {
- event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
- }
-
- // Add which for click: 1 === left; 2 === middle; 3 === right
- // Note: button is not normalized, so don't use it
- if ( !event.which && button !== undefined ) {
- event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
- }
-
- return event;
- }
- },
-
- special: {
- load: {
- // Prevent triggered image.load events from bubbling to window.load
- noBubble: true
- },
- focus: {
- // Fire native event if possible so blur/focus sequence is correct
- trigger: function() {
- if ( this !== safeActiveElement() && this.focus ) {
- try {
- this.focus();
- return false;
- } catch ( e ) {
- // Support: IE<9
- // If we error on focus to hidden element (#1486, #12518),
- // let .trigger() run the handlers
- }
- }
- },
- delegateType: "focusin"
- },
- blur: {
- trigger: function() {
- if ( this === safeActiveElement() && this.blur ) {
- this.blur();
- return false;
- }
- },
- delegateType: "focusout"
- },
- click: {
- // For checkbox, fire native event so checked state will be right
- trigger: function() {
- if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
- this.click();
- return false;
- }
- },
-
- // For cross-browser consistency, don't fire native .click() on links
- _default: function( event ) {
- return jQuery.nodeName( event.target, "a" );
- }
- },
-
- beforeunload: {
- postDispatch: function( event ) {
-
- // Support: Firefox 20+
- // Firefox doesn't alert if the returnValue field is not set.
- if ( event.result !== undefined && event.originalEvent ) {
- event.originalEvent.returnValue = event.result;
- }
- }
- }
- },
-
- simulate: function( type, elem, event, bubble ) {
- // Piggyback on a donor event to simulate a different one.
- // Fake originalEvent to avoid donor's stopPropagation, but if the
- // simulated event prevents default then we do the same on the donor.
- var e = jQuery.extend(
- new jQuery.Event(),
- event,
- {
- type: type,
- isSimulated: true,
- originalEvent: {}
- }
- );
- if ( bubble ) {
- jQuery.event.trigger( e, null, elem );
- } else {
- jQuery.event.dispatch.call( elem, e );
- }
- if ( e.isDefaultPrevented() ) {
- event.preventDefault();
- }
- }
-};
-
-jQuery.removeEvent = document.removeEventListener ?
- function( elem, type, handle ) {
- if ( elem.removeEventListener ) {
- elem.removeEventListener( type, handle, false );
- }
- } :
- function( elem, type, handle ) {
- var name = "on" + type;
-
- if ( elem.detachEvent ) {
-
- // #8545, #7054, preventing memory leaks for custom events in IE6-8
- // detachEvent needed property on element, by name of that event, to properly expose it to GC
- if ( typeof elem[ name ] === strundefined ) {
- elem[ name ] = null;
- }
-
- elem.detachEvent( name, handle );
- }
- };
-
-jQuery.Event = function( src, props ) {
- // Allow instantiation without the 'new' keyword
- if ( !(this instanceof jQuery.Event) ) {
- return new jQuery.Event( src, props );
- }
-
- // Event object
- if ( src && src.type ) {
- this.originalEvent = src;
- this.type = src.type;
-
- // Events bubbling up the document may have been marked as prevented
- // by a handler lower down the tree; reflect the correct value.
- this.isDefaultPrevented = src.defaultPrevented ||
- src.defaultPrevented === undefined &&
- // Support: IE < 9, Android < 4.0
- src.returnValue === false ?
- returnTrue :
- returnFalse;
-
- // Event type
- } else {
- this.type = src;
- }
-
- // Put explicitly provided properties onto the event object
- if ( props ) {
- jQuery.extend( this, props );
- }
-
- // Create a timestamp if incoming event doesn't have one
- this.timeStamp = src && src.timeStamp || jQuery.now();
-
- // Mark it as fixed
- this[ jQuery.expando ] = true;
-};
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse,
-
- preventDefault: function() {
- var e = this.originalEvent;
-
- this.isDefaultPrevented = returnTrue;
- if ( !e ) {
- return;
- }
-
- // If preventDefault exists, run it on the original event
- if ( e.preventDefault ) {
- e.preventDefault();
-
- // Support: IE
- // Otherwise set the returnValue property of the original event to false
- } else {
- e.returnValue = false;
- }
- },
- stopPropagation: function() {
- var e = this.originalEvent;
-
- this.isPropagationStopped = returnTrue;
- if ( !e ) {
- return;
- }
- // If stopPropagation exists, run it on the original event
- if ( e.stopPropagation ) {
- e.stopPropagation();
- }
-
- // Support: IE
- // Set the cancelBubble property of the original event to true
- e.cancelBubble = true;
- },
- stopImmediatePropagation: function() {
- var e = this.originalEvent;
-
- this.isImmediatePropagationStopped = returnTrue;
-
- if ( e && e.stopImmediatePropagation ) {
- e.stopImmediatePropagation();
- }
-
- this.stopPropagation();
- }
-};
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-jQuery.each({
- mouseenter: "mouseover",
- mouseleave: "mouseout",
- pointerenter: "pointerover",
- pointerleave: "pointerout"
-}, function( orig, fix ) {
- jQuery.event.special[ orig ] = {
- delegateType: fix,
- bindType: fix,
-
- handle: function( event ) {
- var ret,
- target = this,
- related = event.relatedTarget,
- handleObj = event.handleObj;
-
- // For mousenter/leave call the handler if related is outside the target.
- // NB: No relatedTarget if the mouse left/entered the browser window
- if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
- event.type = handleObj.origType;
- ret = handleObj.handler.apply( this, arguments );
- event.type = fix;
- }
- return ret;
- }
- };
-});
-
-// IE submit delegation
-if ( !support.submitBubbles ) {
-
- jQuery.event.special.submit = {
- setup: function() {
- // Only need this for delegated form submit events
- if ( jQuery.nodeName( this, "form" ) ) {
- return false;
- }
-
- // Lazy-add a submit handler when a descendant form may potentially be submitted
- jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
- // Node name check avoids a VML-related crash in IE (#9807)
- var elem = e.target,
- form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
- if ( form && !jQuery._data( form, "submitBubbles" ) ) {
- jQuery.event.add( form, "submit._submit", function( event ) {
- event._submit_bubble = true;
- });
- jQuery._data( form, "submitBubbles", true );
- }
- });
- // return undefined since we don't need an event listener
- },
-
- postDispatch: function( event ) {
- // If form was submitted by the user, bubble the event up the tree
- if ( event._submit_bubble ) {
- delete event._submit_bubble;
- if ( this.parentNode && !event.isTrigger ) {
- jQuery.event.simulate( "submit", this.parentNode, event, true );
- }
- }
- },
-
- teardown: function() {
- // Only need this for delegated form submit events
- if ( jQuery.nodeName( this, "form" ) ) {
- return false;
- }
-
- // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
- jQuery.event.remove( this, "._submit" );
- }
- };
-}
-
-// IE change delegation and checkbox/radio fix
-if ( !support.changeBubbles ) {
-
- jQuery.event.special.change = {
-
- setup: function() {
-
- if ( rformElems.test( this.nodeName ) ) {
- // IE doesn't fire change on a check/radio until blur; trigger it on click
- // after a propertychange. Eat the blur-change in special.change.handle.
- // This still fires onchange a second time for check/radio after blur.
- if ( this.type === "checkbox" || this.type === "radio" ) {
- jQuery.event.add( this, "propertychange._change", function( event ) {
- if ( event.originalEvent.propertyName === "checked" ) {
- this._just_changed = true;
- }
- });
- jQuery.event.add( this, "click._change", function( event ) {
- if ( this._just_changed && !event.isTrigger ) {
- this._just_changed = false;
- }
- // Allow triggered, simulated change events (#11500)
- jQuery.event.simulate( "change", this, event, true );
- });
- }
- return false;
- }
- // Delegated event; lazy-add a change handler on descendant inputs
- jQuery.event.add( this, "beforeactivate._change", function( e ) {
- var elem = e.target;
-
- if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
- jQuery.event.add( elem, "change._change", function( event ) {
- if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
- jQuery.event.simulate( "change", this.parentNode, event, true );
- }
- });
- jQuery._data( elem, "changeBubbles", true );
- }
- });
- },
-
- handle: function( event ) {
- var elem = event.target;
-
- // Swallow native change events from checkbox/radio, we already triggered them above
- if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
- return event.handleObj.handler.apply( this, arguments );
- }
- },
-
- teardown: function() {
- jQuery.event.remove( this, "._change" );
-
- return !rformElems.test( this.nodeName );
- }
- };
-}
-
-// Create "bubbling" focus and blur events
-if ( !support.focusinBubbles ) {
- jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
- // Attach a single capturing handler on the document while someone wants focusin/focusout
- var handler = function( event ) {
- jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
- };
-
- jQuery.event.special[ fix ] = {
- setup: function() {
- var doc = this.ownerDocument || this,
- attaches = jQuery._data( doc, fix );
-
- if ( !attaches ) {
- doc.addEventListener( orig, handler, true );
- }
- jQuery._data( doc, fix, ( attaches || 0 ) + 1 );
- },
- teardown: function() {
- var doc = this.ownerDocument || this,
- attaches = jQuery._data( doc, fix ) - 1;
-
- if ( !attaches ) {
- doc.removeEventListener( orig, handler, true );
- jQuery._removeData( doc, fix );
- } else {
- jQuery._data( doc, fix, attaches );
- }
- }
- };
- });
-}
-
-jQuery.fn.extend({
-
- on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
- var type, origFn;
-
- // Types can be a map of types/handlers
- if ( typeof types === "object" ) {
- // ( types-Object, selector, data )
- if ( typeof selector !== "string" ) {
- // ( types-Object, data )
- data = data || selector;
- selector = undefined;
- }
- for ( type in types ) {
- this.on( type, selector, data, types[ type ], one );
- }
- return this;
- }
-
- if ( data == null && fn == null ) {
- // ( types, fn )
- fn = selector;
- data = selector = undefined;
- } else if ( fn == null ) {
- if ( typeof selector === "string" ) {
- // ( types, selector, fn )
- fn = data;
- data = undefined;
- } else {
- // ( types, data, fn )
- fn = data;
- data = selector;
- selector = undefined;
- }
- }
- if ( fn === false ) {
- fn = returnFalse;
- } else if ( !fn ) {
- return this;
- }
-
- if ( one === 1 ) {
- origFn = fn;
- fn = function( event ) {
- // Can use an empty set, since event contains the info
- jQuery().off( event );
- return origFn.apply( this, arguments );
- };
- // Use same guid so caller can remove using origFn
- fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
- }
- return this.each( function() {
- jQuery.event.add( this, types, fn, data, selector );
- });
- },
- one: function( types, selector, data, fn ) {
- return this.on( types, selector, data, fn, 1 );
- },
- off: function( types, selector, fn ) {
- var handleObj, type;
- if ( types && types.preventDefault && types.handleObj ) {
- // ( event ) dispatched jQuery.Event
- handleObj = types.handleObj;
- jQuery( types.delegateTarget ).off(
- handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
- handleObj.selector,
- handleObj.handler
- );
- return this;
- }
- if ( typeof types === "object" ) {
- // ( types-object [, selector] )
- for ( type in types ) {
- this.off( type, selector, types[ type ] );
- }
- return this;
- }
- if ( selector === false || typeof selector === "function" ) {
- // ( types [, fn] )
- fn = selector;
- selector = undefined;
- }
- if ( fn === false ) {
- fn = returnFalse;
- }
- return this.each(function() {
- jQuery.event.remove( this, types, fn, selector );
- });
- },
-
- trigger: function( type, data ) {
- return this.each(function() {
- jQuery.event.trigger( type, data, this );
- });
- },
- triggerHandler: function( type, data ) {
- var elem = this[0];
- if ( elem ) {
- return jQuery.event.trigger( type, data, elem, true );
- }
- }
-});
-
-
-function createSafeFragment( document ) {
- var list = nodeNames.split( "|" ),
- safeFrag = document.createDocumentFragment();
-
- if ( safeFrag.createElement ) {
- while ( list.length ) {
- safeFrag.createElement(
- list.pop()
- );
- }
- }
- return safeFrag;
-}
-
-var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
- "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
- rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
- rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
- rleadingWhitespace = /^\s+/,
- rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
- rtagName = /<([\w:]+)/,
- rtbody = /<tbody/i,
- rhtml = /<|&#?\w+;/,
- rnoInnerhtml = /<(?:script|style|link)/i,
- // checked="checked" or checked
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
- rscriptType = /^$|\/(?:java|ecma)script/i,
- rscriptTypeMasked = /^true\/(.*)/,
- rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
-
- // We have to close these tags to support XHTML (#13200)
- wrapMap = {
- option: [ 1, "<select multiple='multiple'>", "</select>" ],
- legend: [ 1, "<fieldset>", "</fieldset>" ],
- area: [ 1, "<map>", "</map>" ],
- param: [ 1, "<object>", "</object>" ],
- thead: [ 1, "<table>", "</table>" ],
- tr: [ 2, "<table><tbody>", "</tbody></table>" ],
- col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
- td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-
- // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
- // unless wrapped in a div with non-breaking characters in front of it.
- _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>" ]
- },
- safeFragment = createSafeFragment( document ),
- fragmentDiv = safeFragment.appendChild( document.createElement("div") );
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-function getAll( context, tag ) {
- var elems, elem,
- i = 0,
- found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) :
- typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) :
- undefined;
-
- if ( !found ) {
- for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
- if ( !tag || jQuery.nodeName( elem, tag ) ) {
- found.push( elem );
- } else {
- jQuery.merge( found, getAll( elem, tag ) );
- }
- }
- }
-
- return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
- jQuery.merge( [ context ], found ) :
- found;
-}
-
-// Used in buildFragment, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
- if ( rcheckableType.test( elem.type ) ) {
- elem.defaultChecked = elem.checked;
- }
-}
-
-// Support: IE<8
-// Manipulating tables requires a tbody
-function manipulationTarget( elem, content ) {
- return jQuery.nodeName( elem, "table" ) &&
- jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
-
- elem.getElementsByTagName("tbody")[0] ||
- elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
- elem;
-}
-
-// Replace/restore the type attribute of script elements for safe DOM manipulation
-function disableScript( elem ) {
- elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type;
- return elem;
-}
-function restoreScript( elem ) {
- var match = rscriptTypeMasked.exec( elem.type );
- if ( match ) {
- elem.type = match[1];
- } else {
- elem.removeAttribute("type");
- }
- return elem;
-}
-
-// Mark scripts as having already been evaluated
-function setGlobalEval( elems, refElements ) {
- var elem,
- i = 0;
- for ( ; (elem = elems[i]) != null; i++ ) {
- jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
- }
-}
-
-function cloneCopyEvent( src, dest ) {
-
- if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
- return;
- }
-
- var type, i, l,
- oldData = jQuery._data( src ),
- curData = jQuery._data( dest, oldData ),
- events = oldData.events;
-
- if ( events ) {
- delete curData.handle;
- curData.events = {};
-
- for ( type in events ) {
- for ( i = 0, l = events[ type ].length; i < l; i++ ) {
- jQuery.event.add( dest, type, events[ type ][ i ] );
- }
- }
- }
-
- // make the cloned public data object a copy from the original
- if ( curData.data ) {
- curData.data = jQuery.extend( {}, curData.data );
- }
-}
-
-function fixCloneNodeIssues( src, dest ) {
- var nodeName, e, data;
-
- // We do not need to do anything for non-Elements
- if ( dest.nodeType !== 1 ) {
- return;
- }
-
- nodeName = dest.nodeName.toLowerCase();
-
- // IE6-8 copies events bound via attachEvent when using cloneNode.
- if ( !support.noCloneEvent && dest[ jQuery.expando ] ) {
- data = jQuery._data( dest );
-
- for ( e in data.events ) {
- jQuery.removeEvent( dest, e, data.handle );
- }
-
- // Event data gets referenced instead of copied if the expando gets copied too
- dest.removeAttribute( jQuery.expando );
- }
-
- // IE blanks contents when cloning scripts, and tries to evaluate newly-set text
- if ( nodeName === "script" && dest.text !== src.text ) {
- disableScript( dest ).text = src.text;
- restoreScript( dest );
-
- // IE6-10 improperly clones children of object elements using classid.
- // IE10 throws NoModificationAllowedError if parent is null, #12132.
- } else if ( nodeName === "object" ) {
- if ( dest.parentNode ) {
- dest.outerHTML = src.outerHTML;
- }
-
- // This path appears unavoidable for IE9. When cloning an object
- // element in IE9, the outerHTML strategy above is not sufficient.
- // If the src has innerHTML and the destination does not,
- // copy the src.innerHTML into the dest.innerHTML. #10324
- if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
- dest.innerHTML = src.innerHTML;
- }
-
- } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
- // IE6-8 fails to persist the checked state of a cloned checkbox
- // or radio button. Worse, IE6-7 fail to give the cloned element
- // a checked appearance if the defaultChecked value isn't also set
-
- dest.defaultChecked = dest.checked = src.checked;
-
- // IE6-7 get confused and end up setting the value of a cloned
- // checkbox/radio button to an empty string instead of "on"
- if ( dest.value !== src.value ) {
- dest.value = src.value;
- }
-
- // IE6-8 fails to return the selected option to the default selected
- // state when cloning options
- } else if ( nodeName === "option" ) {
- dest.defaultSelected = dest.selected = src.defaultSelected;
-
- // IE6-8 fails to set the defaultValue to the correct value when
- // cloning other types of input fields
- } else if ( nodeName === "input" || nodeName === "textarea" ) {
- dest.defaultValue = src.defaultValue;
- }
-}
-
-jQuery.extend({
- clone: function( elem, dataAndEvents, deepDataAndEvents ) {
- var destElements, node, clone, i, srcElements,
- inPage = jQuery.contains( elem.ownerDocument, elem );
-
- if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
- clone = elem.cloneNode( true );
-
- // IE<=8 does not properly clone detached, unknown element nodes
- } else {
- fragmentDiv.innerHTML = elem.outerHTML;
- fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
- }
-
- if ( (!support.noCloneEvent || !support.noCloneChecked) &&
- (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
-
- // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
- destElements = getAll( clone );
- srcElements = getAll( elem );
-
- // Fix all IE cloning issues
- for ( i = 0; (node = srcElements[i]) != null; ++i ) {
- // Ensure that the destination node is not null; Fixes #9587
- if ( destElements[i] ) {
- fixCloneNodeIssues( node, destElements[i] );
- }
- }
- }
-
- // Copy the events from the original to the clone
- if ( dataAndEvents ) {
- if ( deepDataAndEvents ) {
- srcElements = srcElements || getAll( elem );
- destElements = destElements || getAll( clone );
-
- for ( i = 0; (node = srcElements[i]) != null; i++ ) {
- cloneCopyEvent( node, destElements[i] );
- }
- } else {
- cloneCopyEvent( elem, clone );
- }
- }
-
- // Preserve script evaluation history
- destElements = getAll( clone, "script" );
- if ( destElements.length > 0 ) {
- setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
- }
-
- destElements = srcElements = node = null;
-
- // Return the cloned set
- return clone;
- },
-
- buildFragment: function( elems, context, scripts, selection ) {
- var j, elem, contains,
- tmp, tag, tbody, wrap,
- l = elems.length,
-
- // Ensure a safe fragment
- safe = createSafeFragment( context ),
-
- nodes = [],
- i = 0;
-
- for ( ; i < l; i++ ) {
- elem = elems[ i ];
-
- if ( elem || elem === 0 ) {
-
- // Add nodes directly
- if ( jQuery.type( elem ) === "object" ) {
- jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
-
- // Convert non-html into a text node
- } else if ( !rhtml.test( elem ) ) {
- nodes.push( context.createTextNode( elem ) );
-
- // Convert html into DOM nodes
- } else {
- tmp = tmp || safe.appendChild( context.createElement("div") );
-
- // Deserialize a standard representation
- tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase();
- wrap = wrapMap[ tag ] || wrapMap._default;
-
- tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
-
- // Descend through wrappers to the right content
- j = wrap[0];
- while ( j-- ) {
- tmp = tmp.lastChild;
- }
-
- // Manually add leading whitespace removed by IE
- if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
- nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
- }
-
- // Remove IE's autoinserted <tbody> from table fragments
- if ( !support.tbody ) {
-
- // String was a <table>, *may* have spurious <tbody>
- elem = tag === "table" && !rtbody.test( elem ) ?
- tmp.firstChild :
-
- // String was a bare <thead> or <tfoot>
- wrap[1] === "<table>" && !rtbody.test( elem ) ?
- tmp :
- 0;
-
- j = elem && elem.childNodes.length;
- while ( j-- ) {
- if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
- elem.removeChild( tbody );
- }
- }
- }
-
- jQuery.merge( nodes, tmp.childNodes );
-
- // Fix #12392 for WebKit and IE > 9
- tmp.textContent = "";
-
- // Fix #12392 for oldIE
- while ( tmp.firstChild ) {
- tmp.removeChild( tmp.firstChild );
- }
-
- // Remember the top-level container for proper cleanup
- tmp = safe.lastChild;
- }
- }
- }
-
- // Fix #11356: Clear elements from fragment
- if ( tmp ) {
- safe.removeChild( tmp );
- }
-
- // Reset defaultChecked for any radios and checkboxes
- // about to be appended to the DOM in IE 6/7 (#8060)
- if ( !support.appendChecked ) {
- jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
- }
-
- i = 0;
- while ( (elem = nodes[ i++ ]) ) {
-
- // #4087 - If origin and destination elements are the same, and this is
- // that element, do not do anything
- if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
- continue;
- }
-
- contains = jQuery.contains( elem.ownerDocument, elem );
-
- // Append to fragment
- tmp = getAll( safe.appendChild( elem ), "script" );
-
- // Preserve script evaluation history
- if ( contains ) {
- setGlobalEval( tmp );
- }
-
- // Capture executables
- if ( scripts ) {
- j = 0;
- while ( (elem = tmp[ j++ ]) ) {
- if ( rscriptType.test( elem.type || "" ) ) {
- scripts.push( elem );
- }
- }
- }
- }
-
- tmp = null;
-
- return safe;
- },
-
- cleanData: function( elems, /* internal */ acceptData ) {
- var elem, type, id, data,
- i = 0,
- internalKey = jQuery.expando,
- cache = jQuery.cache,
- deleteExpando = support.deleteExpando,
- special = jQuery.event.special;
-
- for ( ; (elem = elems[i]) != null; i++ ) {
- if ( acceptData || jQuery.acceptData( elem ) ) {
-
- id = elem[ internalKey ];
- data = id && cache[ id ];
-
- if ( data ) {
- if ( data.events ) {
- for ( type in data.events ) {
- if ( special[ type ] ) {
- jQuery.event.remove( elem, type );
-
- // This is a shortcut to avoid jQuery.event.remove's overhead
- } else {
- jQuery.removeEvent( elem, type, data.handle );
- }
- }
- }
-
- // Remove cache only if it was not already removed by jQuery.event.remove
- if ( cache[ id ] ) {
-
- delete cache[ id ];
-
- // IE does not allow us to delete expando properties from nodes,
- // nor does it have a removeAttribute function on Document nodes;
- // we must handle all of these cases
- if ( deleteExpando ) {
- delete elem[ internalKey ];
-
- } else if ( typeof elem.removeAttribute !== strundefined ) {
- elem.removeAttribute( internalKey );
-
- } else {
- elem[ internalKey ] = null;
- }
-
- deletedIds.push( id );
- }
- }
- }
- }
- }
-});
-
-jQuery.fn.extend({
- text: function( value ) {
- return access( this, function( value ) {
- return value === undefined ?
- jQuery.text( this ) :
- this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
- }, null, value, arguments.length );
- },
-
- append: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- var target = manipulationTarget( this, elem );
- target.appendChild( elem );
- }
- });
- },
-
- prepend: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- var target = manipulationTarget( this, elem );
- target.insertBefore( elem, target.firstChild );
- }
- });
- },
-
- before: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this );
- }
- });
- },
-
- after: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this.nextSibling );
- }
- });
- },
-
- remove: function( selector, keepData /* Internal Use Only */ ) {
- var elem,
- elems = selector ? jQuery.filter( selector, this ) : this,
- i = 0;
-
- for ( ; (elem = elems[i]) != null; i++ ) {
-
- if ( !keepData && elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem ) );
- }
-
- if ( elem.parentNode ) {
- if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
- setGlobalEval( getAll( elem, "script" ) );
- }
- elem.parentNode.removeChild( elem );
- }
- }
-
- return this;
- },
-
- empty: function() {
- var elem,
- i = 0;
-
- for ( ; (elem = this[i]) != null; i++ ) {
- // Remove element nodes and prevent memory leaks
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem, false ) );
- }
-
- // Remove any remaining nodes
- while ( elem.firstChild ) {
- elem.removeChild( elem.firstChild );
- }
-
- // If this is a select, ensure that it displays empty (#12336)
- // Support: IE<9
- if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
- elem.options.length = 0;
- }
- }
-
- return this;
- },
-
- clone: function( dataAndEvents, deepDataAndEvents ) {
- dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
- deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
- return this.map(function() {
- return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
- });
- },
-
- html: function( value ) {
- return access( this, function( value ) {
- var elem = this[ 0 ] || {},
- i = 0,
- l = this.length;
-
- if ( value === undefined ) {
- return elem.nodeType === 1 ?
- elem.innerHTML.replace( rinlinejQuery, "" ) :
- undefined;
- }
-
- // See if we can take a shortcut and just use innerHTML
- if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
- ( support.htmlSerialize || !rnoshimcache.test( value ) ) &&
- ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
- !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) {
-
- value = value.replace( rxhtmlTag, "<$1></$2>" );
-
- try {
- for (; i < l; i++ ) {
- // Remove element nodes and prevent memory leaks
- elem = this[i] || {};
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem, false ) );
- elem.innerHTML = value;
- }
- }
-
- elem = 0;
-
- // If using innerHTML throws an exception, use the fallback method
- } catch(e) {}
- }
-
- if ( elem ) {
- this.empty().append( value );
- }
- }, null, value, arguments.length );
- },
-
- replaceWith: function() {
- var arg = arguments[ 0 ];
-
- // Make the changes, replacing each context element with the new content
- this.domManip( arguments, function( elem ) {
- arg = this.parentNode;
-
- jQuery.cleanData( getAll( this ) );
-
- if ( arg ) {
- arg.replaceChild( elem, this );
- }
- });
-
- // Force removal if there was no new content (e.g., from empty arguments)
- return arg && (arg.length || arg.nodeType) ? this : this.remove();
- },
-
- detach: function( selector ) {
- return this.remove( selector, true );
- },
-
- domManip: function( args, callback ) {
-
- // Flatten any nested arrays
- args = concat.apply( [], args );
-
- var first, node, hasScripts,
- scripts, doc, fragment,
- i = 0,
- l = this.length,
- set = this,
- iNoClone = l - 1,
- value = args[0],
- isFunction = jQuery.isFunction( value );
-
- // We can't cloneNode fragments that contain checked, in WebKit
- if ( isFunction ||
- ( l > 1 && typeof value === "string" &&
- !support.checkClone && rchecked.test( value ) ) ) {
- return this.each(function( index ) {
- var self = set.eq( index );
- if ( isFunction ) {
- args[0] = value.call( this, index, self.html() );
- }
- self.domManip( args, callback );
- });
- }
-
- if ( l ) {
- fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
- first = fragment.firstChild;
-
- if ( fragment.childNodes.length === 1 ) {
- fragment = first;
- }
-
- if ( first ) {
- scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
- hasScripts = scripts.length;
-
- // Use the original fragment for the last item instead of the first because it can end up
- // being emptied incorrectly in certain situations (#8070).
- for ( ; i < l; i++ ) {
- node = fragment;
-
- if ( i !== iNoClone ) {
- node = jQuery.clone( node, true, true );
-
- // Keep references to cloned scripts for later restoration
- if ( hasScripts ) {
- jQuery.merge( scripts, getAll( node, "script" ) );
- }
- }
-
- callback.call( this[i], node, i );
- }
-
- if ( hasScripts ) {
- doc = scripts[ scripts.length - 1 ].ownerDocument;
-
- // Reenable scripts
- jQuery.map( scripts, restoreScript );
-
- // Evaluate executable scripts on first document insertion
- for ( i = 0; i < hasScripts; i++ ) {
- node = scripts[ i ];
- if ( rscriptType.test( node.type || "" ) &&
- !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
-
- if ( node.src ) {
- // Optional AJAX dependency, but won't run scripts if not present
- if ( jQuery._evalUrl ) {
- jQuery._evalUrl( node.src );
- }
- } else {
- jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
- }
- }
- }
- }
-
- // Fix #11809: Avoid leaking memory
- fragment = first = null;
- }
- }
-
- return this;
- }
-});
-
-jQuery.each({
- appendTo: "append",
- prependTo: "prepend",
- insertBefore: "before",
- insertAfter: "after",
- replaceAll: "replaceWith"
-}, function( name, original ) {
- jQuery.fn[ name ] = function( selector ) {
- var elems,
- i = 0,
- ret = [],
- insert = jQuery( selector ),
- last = insert.length - 1;
-
- for ( ; i <= last; i++ ) {
- elems = i === last ? this : this.clone(true);
- jQuery( insert[i] )[ original ]( elems );
-
- // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
- push.apply( ret, elems.get() );
- }
-
- return this.pushStack( ret );
- };
-});
-
-
-var iframe,
- elemdisplay = {};
-
-/**
- * Retrieve the actual display of a element
- * @param {String} name nodeName of the element
- * @param {Object} doc Document object
- */
-// Called only from within defaultDisplay
-function actualDisplay( name, doc ) {
- var style,
- elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
-
- // getDefaultComputedStyle might be reliably used only on attached element
- display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?
-
- // Use of this method is a temporary fix (more like optmization) until something better comes along,
- // since it was removed from specification and supported only in FF
- style.display : jQuery.css( elem[ 0 ], "display" );
-
- // We don't have any data stored on the element,
- // so use "detach" method as fast way to get rid of the element
- elem.detach();
-
- return display;
-}
-
-/**
- * Try to determine the default display value of an element
- * @param {String} nodeName
- */
-function defaultDisplay( nodeName ) {
- var doc = document,
- display = elemdisplay[ nodeName ];
-
- if ( !display ) {
- display = actualDisplay( nodeName, doc );
-
- // If the simple way fails, read from inside an iframe
- if ( display === "none" || !display ) {
-
- // Use the already-created iframe if possible
- iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
-
- // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
- doc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;
-
- // Support: IE
- doc.write();
- doc.close();
-
- display = actualDisplay( nodeName, doc );
- iframe.detach();
- }
-
- // Store the correct default display
- elemdisplay[ nodeName ] = display;
- }
-
- return display;
-}
-
-
-(function() {
- var shrinkWrapBlocksVal;
-
- support.shrinkWrapBlocks = function() {
- if ( shrinkWrapBlocksVal != null ) {
- return shrinkWrapBlocksVal;
- }
-
- // Will be changed later if needed.
- shrinkWrapBlocksVal = false;
-
- // Minified: var b,c,d
- var div, body, container;
-
- body = document.getElementsByTagName( "body" )[ 0 ];
- if ( !body || !body.style ) {
- // Test fired too early or in an unsupported environment, exit.
- return;
- }
-
- // Setup
- div = document.createElement( "div" );
- container = document.createElement( "div" );
- container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
- body.appendChild( container ).appendChild( div );
-
- // Support: IE6
- // Check if elements with layout shrink-wrap their children
- if ( typeof div.style.zoom !== strundefined ) {
- // Reset CSS: box-sizing; display; margin; border
- div.style.cssText =
- // Support: Firefox<29, Android 2.3
- // Vendor-prefix box-sizing
- "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
- "box-sizing:content-box;display:block;margin:0;border:0;" +
- "padding:1px;width:1px;zoom:1";
- div.appendChild( document.createElement( "div" ) ).style.width = "5px";
- shrinkWrapBlocksVal = div.offsetWidth !== 3;
- }
-
- body.removeChild( container );
-
- return shrinkWrapBlocksVal;
- };
-
-})();
-var rmargin = (/^margin/);
-
-var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
-
-
-
-var getStyles, curCSS,
- rposition = /^(top|right|bottom|left)$/;
-
-if ( window.getComputedStyle ) {
- getStyles = function( elem ) {
- return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
- };
-
- curCSS = function( elem, name, computed ) {
- var width, minWidth, maxWidth, ret,
- style = elem.style;
-
- computed = computed || getStyles( elem );
-
- // getPropertyValue is only needed for .css('filter') in IE9, see #12537
- ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
-
- if ( computed ) {
-
- if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
- ret = jQuery.style( elem, name );
- }
-
- // A tribute to the "awesome hack by Dean Edwards"
- // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
- // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
- // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
- if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
-
- // Remember the original values
- width = style.width;
- minWidth = style.minWidth;
- maxWidth = style.maxWidth;
-
- // Put in the new values to get a computed value out
- style.minWidth = style.maxWidth = style.width = ret;
- ret = computed.width;
-
- // Revert the changed values
- style.width = width;
- style.minWidth = minWidth;
- style.maxWidth = maxWidth;
- }
- }
-
- // Support: IE
- // IE returns zIndex value as an integer.
- return ret === undefined ?
- ret :
- ret + "";
- };
-} else if ( document.documentElement.currentStyle ) {
- getStyles = function( elem ) {
- return elem.currentStyle;
- };
-
- curCSS = function( elem, name, computed ) {
- var left, rs, rsLeft, ret,
- style = elem.style;
-
- computed = computed || getStyles( elem );
- ret = computed ? computed[ name ] : undefined;
-
- // Avoid setting ret to empty string here
- // so we don't default to auto
- if ( ret == null && style && style[ name ] ) {
- ret = style[ name ];
- }
-
- // From the awesome hack by Dean Edwards
- // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
- // If we're not dealing with a regular pixel number
- // but a number that has a weird ending, we need to convert it to pixels
- // but not position css attributes, as those are proportional to the parent element instead
- // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
- if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
-
- // Remember the original values
- left = style.left;
- rs = elem.runtimeStyle;
- rsLeft = rs && rs.left;
-
- // Put in the new values to get a computed value out
- if ( rsLeft ) {
- rs.left = elem.currentStyle.left;
- }
- style.left = name === "fontSize" ? "1em" : ret;
- ret = style.pixelLeft + "px";
-
- // Revert the changed values
- style.left = left;
- if ( rsLeft ) {
- rs.left = rsLeft;
- }
- }
-
- // Support: IE
- // IE returns zIndex value as an integer.
- return ret === undefined ?
- ret :
- ret + "" || "auto";
- };
-}
-
-
-
-
-function addGetHookIf( conditionFn, hookFn ) {
- // Define the hook, we'll check on the first run if it's really needed.
- return {
- get: function() {
- var condition = conditionFn();
-
- if ( condition == null ) {
- // The test was not ready at this point; screw the hook this time
- // but check again when needed next time.
- return;
- }
-
- if ( condition ) {
- // Hook not needed (or it's not possible to use it due to missing dependency),
- // remove it.
- // Since there are no other hooks for marginRight, remove the whole object.
- delete this.get;
- return;
- }
-
- // Hook needed; redefine it so that the support test is not executed again.
-
- return (this.get = hookFn).apply( this, arguments );
- }
- };
-}
-
-
-(function() {
- // Minified: var b,c,d,e,f,g, h,i
- var div, style, a, pixelPositionVal, boxSizingReliableVal,
- reliableHiddenOffsetsVal, reliableMarginRightVal;
-
- // Setup
- div = document.createElement( "div" );
- div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
- a = div.getElementsByTagName( "a" )[ 0 ];
- style = a && a.style;
-
- // Finish early in limited (non-browser) environments
- if ( !style ) {
- return;
- }
-
- style.cssText = "float:left;opacity:.5";
-
- // Support: IE<9
- // Make sure that element opacity exists (as opposed to filter)
- support.opacity = style.opacity === "0.5";
-
- // Verify style float existence
- // (IE uses styleFloat instead of cssFloat)
- support.cssFloat = !!style.cssFloat;
-
- div.style.backgroundClip = "content-box";
- div.cloneNode( true ).style.backgroundClip = "";
- support.clearCloneStyle = div.style.backgroundClip === "content-box";
-
- // Support: Firefox<29, Android 2.3
- // Vendor-prefix box-sizing
- support.boxSizing = style.boxSizing === "" || style.MozBoxSizing === "" ||
- style.WebkitBoxSizing === "";
-
- jQuery.extend(support, {
- reliableHiddenOffsets: function() {
- if ( reliableHiddenOffsetsVal == null ) {
- computeStyleTests();
- }
- return reliableHiddenOffsetsVal;
- },
-
- boxSizingReliable: function() {
- if ( boxSizingReliableVal == null ) {
- computeStyleTests();
- }
- return boxSizingReliableVal;
- },
-
- pixelPosition: function() {
- if ( pixelPositionVal == null ) {
- computeStyleTests();
- }
- return pixelPositionVal;
- },
-
- // Support: Android 2.3
- reliableMarginRight: function() {
- if ( reliableMarginRightVal == null ) {
- computeStyleTests();
- }
- return reliableMarginRightVal;
- }
- });
-
- function computeStyleTests() {
- // Minified: var b,c,d,j
- var div, body, container, contents;
-
- body = document.getElementsByTagName( "body" )[ 0 ];
- if ( !body || !body.style ) {
- // Test fired too early or in an unsupported environment, exit.
- return;
- }
-
- // Setup
- div = document.createElement( "div" );
- container = document.createElement( "div" );
- container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
- body.appendChild( container ).appendChild( div );
-
- div.style.cssText =
- // Support: Firefox<29, Android 2.3
- // Vendor-prefix box-sizing
- "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
- "box-sizing:border-box;display:block;margin-top:1%;top:1%;" +
- "border:1px;padding:1px;width:4px;position:absolute";
-
- // Support: IE<9
- // Assume reasonable values in the absence of getComputedStyle
- pixelPositionVal = boxSizingReliableVal = false;
- reliableMarginRightVal = true;
-
- // Check for getComputedStyle so that this code is not run in IE<9.
- if ( window.getComputedStyle ) {
- pixelPositionVal = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
- boxSizingReliableVal =
- ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
-
- // Support: Android 2.3
- // Div with explicit width and no margin-right incorrectly
- // gets computed margin-right based on width of container (#3333)
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- contents = div.appendChild( document.createElement( "div" ) );
-
- // Reset CSS: box-sizing; display; margin; border; padding
- contents.style.cssText = div.style.cssText =
- // Support: Firefox<29, Android 2.3
- // Vendor-prefix box-sizing
- "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
- "box-sizing:content-box;display:block;margin:0;border:0;padding:0";
- contents.style.marginRight = contents.style.width = "0";
- div.style.width = "1px";
-
- reliableMarginRightVal =
- !parseFloat( ( window.getComputedStyle( contents, null ) || {} ).marginRight );
- }
-
- // Support: IE8
- // Check if table cells still have offsetWidth/Height when they are set
- // to display:none and there are still other visible table cells in a
- // table row; if so, offsetWidth/Height are not reliable for use when
- // determining if an element has been hidden directly using
- // display:none (it is still safe to use offsets if a parent element is
- // hidden; don safety goggles and see bug #4512 for more information).
- div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
- contents = div.getElementsByTagName( "td" );
- contents[ 0 ].style.cssText = "margin:0;border:0;padding:0;display:none";
- reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
- if ( reliableHiddenOffsetsVal ) {
- contents[ 0 ].style.display = "";
- contents[ 1 ].style.display = "none";
- reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
- }
-
- body.removeChild( container );
- }
-
-})();
-
-
-// A method for quickly swapping in/out CSS properties to get correct calculations.
-jQuery.swap = function( elem, options, callback, args ) {
- var ret, name,
- old = {};
-
- // Remember the old values, and insert the new ones
- for ( name in options ) {
- old[ name ] = elem.style[ name ];
- elem.style[ name ] = options[ name ];
- }
-
- ret = callback.apply( elem, args || [] );
-
- // Revert the old values
- for ( name in options ) {
- elem.style[ name ] = old[ name ];
- }
-
- return ret;
-};
-
-
-var
- ralpha = /alpha\([^)]*\)/i,
- ropacity = /opacity\s*=\s*([^)]*)/,
-
- // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
- // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
- rdisplayswap = /^(none|table(?!-c[ea]).+)/,
- rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
- rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
-
- cssShow = { position: "absolute", visibility: "hidden", display: "block" },
- cssNormalTransform = {
- letterSpacing: "0",
- fontWeight: "400"
- },
-
- cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
-
-
-// return a css property mapped to a potentially vendor prefixed property
-function vendorPropName( style, name ) {
-
- // shortcut for names that are not vendor prefixed
- if ( name in style ) {
- return name;
- }
-
- // check for vendor prefixed names
- var capName = name.charAt(0).toUpperCase() + name.slice(1),
- origName = name,
- i = cssPrefixes.length;
-
- while ( i-- ) {
- name = cssPrefixes[ i ] + capName;
- if ( name in style ) {
- return name;
- }
- }
-
- return origName;
-}
-
-function showHide( elements, show ) {
- var display, elem, hidden,
- values = [],
- index = 0,
- length = elements.length;
-
- for ( ; index < length; index++ ) {
- elem = elements[ index ];
- if ( !elem.style ) {
- continue;
- }
-
- values[ index ] = jQuery._data( elem, "olddisplay" );
- display = elem.style.display;
- if ( show ) {
- // Reset the inline display of this element to learn if it is
- // being hidden by cascaded rules or not
- if ( !values[ index ] && display === "none" ) {
- elem.style.display = "";
- }
-
- // Set elements which have been overridden with display: none
- // in a stylesheet to whatever the default browser style is
- // for such an element
- if ( elem.style.display === "" && isHidden( elem ) ) {
- values[ index ] = jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
- }
- } else {
- hidden = isHidden( elem );
-
- if ( display && display !== "none" || !hidden ) {
- jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
- }
- }
- }
-
- // Set the display of most of the elements in a second loop
- // to avoid the constant reflow
- for ( index = 0; index < length; index++ ) {
- elem = elements[ index ];
- if ( !elem.style ) {
- continue;
- }
- if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
- elem.style.display = show ? values[ index ] || "" : "none";
- }
- }
-
- return elements;
-}
-
-function setPositiveNumber( elem, value, subtract ) {
- var matches = rnumsplit.exec( value );
- return matches ?
- // Guard against undefined "subtract", e.g., when used as in cssHooks
- Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
- value;
-}
-
-function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
- var i = extra === ( isBorderBox ? "border" : "content" ) ?
- // If we already have the right measurement, avoid augmentation
- 4 :
- // Otherwise initialize for horizontal or vertical properties
- name === "width" ? 1 : 0,
-
- val = 0;
-
- for ( ; i < 4; i += 2 ) {
- // both box models exclude margin, so add it if we want it
- if ( extra === "margin" ) {
- val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
- }
-
- if ( isBorderBox ) {
- // border-box includes padding, so remove it if we want content
- if ( extra === "content" ) {
- val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
- }
-
- // at this point, extra isn't border nor margin, so remove border
- if ( extra !== "margin" ) {
- val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
- } else {
- // at this point, extra isn't content, so add padding
- val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-
- // at this point, extra isn't content nor padding, so add border
- if ( extra !== "padding" ) {
- val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
- }
- }
-
- return val;
-}
-
-function getWidthOrHeight( elem, name, extra ) {
-
- // Start with offset property, which is equivalent to the border-box value
- var valueIsBorderBox = true,
- val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
- styles = getStyles( elem ),
- isBorderBox = support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
-
- // some non-html elements return undefined for offsetWidth, so check for null/undefined
- // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
- // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
- if ( val <= 0 || val == null ) {
- // Fall back to computed then uncomputed css if necessary
- val = curCSS( elem, name, styles );
- if ( val < 0 || val == null ) {
- val = elem.style[ name ];
- }
-
- // Computed unit is not pixels. Stop here and return.
- if ( rnumnonpx.test(val) ) {
- return val;
- }
-
- // we need the check for style in case a browser which returns unreliable values
- // for getComputedStyle silently falls back to the reliable elem.style
- valueIsBorderBox = isBorderBox && ( support.boxSizingReliable() || val === elem.style[ name ] );
-
- // Normalize "", auto, and prepare for extra
- val = parseFloat( val ) || 0;
- }
-
- // use the active box-sizing model to add/subtract irrelevant styles
- return ( val +
- augmentWidthOrHeight(
- elem,
- name,
- extra || ( isBorderBox ? "border" : "content" ),
- valueIsBorderBox,
- styles
- )
- ) + "px";
-}
-
-jQuery.extend({
- // Add in style property hooks for overriding the default
- // behavior of getting and setting a style property
- cssHooks: {
- opacity: {
- get: function( elem, computed ) {
- if ( computed ) {
- // We should always get a number back from opacity
- var ret = curCSS( elem, "opacity" );
- return ret === "" ? "1" : ret;
- }
- }
- }
- },
-
- // Don't automatically add "px" to these possibly-unitless properties
- cssNumber: {
- "columnCount": true,
- "fillOpacity": true,
- "flexGrow": true,
- "flexShrink": true,
- "fontWeight": true,
- "lineHeight": true,
- "opacity": true,
- "order": true,
- "orphans": true,
- "widows": true,
- "zIndex": true,
- "zoom": true
- },
-
- // Add in properties whose names you wish to fix before
- // setting or getting the value
- cssProps: {
- // normalize float css property
- "float": support.cssFloat ? "cssFloat" : "styleFloat"
- },
-
- // Get and set the style property on a DOM Node
- style: function( elem, name, value, extra ) {
- // Don't set styles on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
- return;
- }
-
- // Make sure that we're working with the right name
- var ret, type, hooks,
- origName = jQuery.camelCase( name ),
- style = elem.style;
-
- name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
-
- // gets hook for the prefixed version
- // followed by the unprefixed version
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // Check if we're setting a value
- if ( value !== undefined ) {
- type = typeof value;
-
- // convert relative number strings (+= or -=) to relative numbers. #7345
- if ( type === "string" && (ret = rrelNum.exec( value )) ) {
- value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
- // Fixes bug #9237
- type = "number";
- }
-
- // Make sure that null and NaN values aren't set. See: #7116
- if ( value == null || value !== value ) {
- return;
- }
-
- // If a number was passed in, add 'px' to the (except for certain CSS properties)
- if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
- value += "px";
- }
-
- // Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
- // but it would mean to define eight (for every problematic property) identical functions
- if ( !support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
- style[ name ] = "inherit";
- }
-
- // If a hook was provided, use that value, otherwise just set the specified value
- if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
-
- // Support: IE
- // Swallow errors from 'invalid' CSS values (#5509)
- try {
- style[ name ] = value;
- } catch(e) {}
- }
-
- } else {
- // If a hook was provided get the non-computed value from there
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
- return ret;
- }
-
- // Otherwise just get the value from the style object
- return style[ name ];
- }
- },
-
- css: function( elem, name, extra, styles ) {
- var num, val, hooks,
- origName = jQuery.camelCase( name );
-
- // Make sure that we're working with the right name
- name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
-
- // gets hook for the prefixed version
- // followed by the unprefixed version
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // If a hook was provided get the computed value from there
- if ( hooks && "get" in hooks ) {
- val = hooks.get( elem, true, extra );
- }
-
- // Otherwise, if a way to get the computed value exists, use that
- if ( val === undefined ) {
- val = curCSS( elem, name, styles );
- }
-
- //convert "normal" to computed value
- if ( val === "normal" && name in cssNormalTransform ) {
- val = cssNormalTransform[ name ];
- }
-
- // Return, converting to number if forced or a qualifier was provided and val looks numeric
- if ( extra === "" || extra ) {
- num = parseFloat( val );
- return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
- }
- return val;
- }
-});
-
-jQuery.each([ "height", "width" ], function( i, name ) {
- jQuery.cssHooks[ name ] = {
- get: function( elem, computed, extra ) {
- if ( computed ) {
- // certain elements can have dimension info if we invisibly show them
- // however, it must have a current display style that would benefit from this
- return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ?
- jQuery.swap( elem, cssShow, function() {
- return getWidthOrHeight( elem, name, extra );
- }) :
- getWidthOrHeight( elem, name, extra );
- }
- },
-
- set: function( elem, value, extra ) {
- var styles = extra && getStyles( elem );
- return setPositiveNumber( elem, value, extra ?
- augmentWidthOrHeight(
- elem,
- name,
- extra,
- support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
- styles
- ) : 0
- );
- }
- };
-});
-
-if ( !support.opacity ) {
- jQuery.cssHooks.opacity = {
- get: function( elem, computed ) {
- // IE uses filters for opacity
- return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
- ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
- computed ? "1" : "";
- },
-
- set: function( elem, value ) {
- var style = elem.style,
- currentStyle = elem.currentStyle,
- opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
- filter = currentStyle && currentStyle.filter || style.filter || "";
-
- // IE has trouble with opacity if it does not have layout
- // Force it by setting the zoom level
- style.zoom = 1;
-
- // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
- // if value === "", then remove inline opacity #12685
- if ( ( value >= 1 || value === "" ) &&
- jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
- style.removeAttribute ) {
-
- // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
- // if "filter:" is present at all, clearType is disabled, we want to avoid this
- // style.removeAttribute is IE Only, but so apparently is this code path...
- style.removeAttribute( "filter" );
-
- // if there is no filter style applied in a css rule or unset inline opacity, we are done
- if ( value === "" || currentStyle && !currentStyle.filter ) {
- return;
- }
- }
-
- // otherwise, set new filter values
- style.filter = ralpha.test( filter ) ?
- filter.replace( ralpha, opacity ) :
- filter + " " + opacity;
- }
- };
-}
-
-jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
- function( elem, computed ) {
- if ( computed ) {
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- // Work around by temporarily setting element display to inline-block
- return jQuery.swap( elem, { "display": "inline-block" },
- curCSS, [ elem, "marginRight" ] );
- }
- }
-);
-
-// These hooks are used by animate to expand properties
-jQuery.each({
- margin: "",
- padding: "",
- border: "Width"
-}, function( prefix, suffix ) {
- jQuery.cssHooks[ prefix + suffix ] = {
- expand: function( value ) {
- var i = 0,
- expanded = {},
-
- // assumes a single number if not a string
- parts = typeof value === "string" ? value.split(" ") : [ value ];
-
- for ( ; i < 4; i++ ) {
- expanded[ prefix + cssExpand[ i ] + suffix ] =
- parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
- }
-
- return expanded;
- }
- };
-
- if ( !rmargin.test( prefix ) ) {
- jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
- }
-});
-
-jQuery.fn.extend({
- css: function( name, value ) {
- return access( this, function( elem, name, value ) {
- var styles, len,
- map = {},
- i = 0;
-
- if ( jQuery.isArray( name ) ) {
- styles = getStyles( elem );
- len = name.length;
-
- for ( ; i < len; i++ ) {
- map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
- }
-
- return map;
- }
-
- return value !== undefined ?
- jQuery.style( elem, name, value ) :
- jQuery.css( elem, name );
- }, name, value, arguments.length > 1 );
- },
- show: function() {
- return showHide( this, true );
- },
- hide: function() {
- return showHide( this );
- },
- toggle: function( state ) {
- if ( typeof state === "boolean" ) {
- return state ? this.show() : this.hide();
- }
-
- return this.each(function() {
- if ( isHidden( this ) ) {
- jQuery( this ).show();
- } else {
- jQuery( this ).hide();
- }
- });
- }
-});
-
-
-function Tween( elem, options, prop, end, easing ) {
- return new Tween.prototype.init( elem, options, prop, end, easing );
-}
-jQuery.Tween = Tween;
-
-Tween.prototype = {
- constructor: Tween,
- init: function( elem, options, prop, end, easing, unit ) {
- this.elem = elem;
- this.prop = prop;
- this.easing = easing || "swing";
- this.options = options;
- this.start = this.now = this.cur();
- this.end = end;
- this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
- },
- cur: function() {
- var hooks = Tween.propHooks[ this.prop ];
-
- return hooks && hooks.get ?
- hooks.get( this ) :
- Tween.propHooks._default.get( this );
- },
- run: function( percent ) {
- var eased,
- hooks = Tween.propHooks[ this.prop ];
-
- if ( this.options.duration ) {
- this.pos = eased = jQuery.easing[ this.easing ](
- percent, this.options.duration * percent, 0, 1, this.options.duration
- );
- } else {
- this.pos = eased = percent;
- }
- this.now = ( this.end - this.start ) * eased + this.start;
-
- if ( this.options.step ) {
- this.options.step.call( this.elem, this.now, this );
- }
-
- if ( hooks && hooks.set ) {
- hooks.set( this );
- } else {
- Tween.propHooks._default.set( this );
- }
- return this;
- }
-};
-
-Tween.prototype.init.prototype = Tween.prototype;
-
-Tween.propHooks = {
- _default: {
- get: function( tween ) {
- var result;
-
- if ( tween.elem[ tween.prop ] != null &&
- (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
- return tween.elem[ tween.prop ];
- }
-
- // passing an empty string as a 3rd parameter to .css will automatically
- // attempt a parseFloat and fallback to a string if the parse fails
- // so, simple values such as "10px" are parsed to Float.
- // complex values such as "rotate(1rad)" are returned as is.
- result = jQuery.css( tween.elem, tween.prop, "" );
- // Empty strings, null, undefined and "auto" are converted to 0.
- return !result || result === "auto" ? 0 : result;
- },
- set: function( tween ) {
- // use step hook for back compat - use cssHook if its there - use .style if its
- // available and use plain properties where available
- if ( jQuery.fx.step[ tween.prop ] ) {
- jQuery.fx.step[ tween.prop ]( tween );
- } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
- jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
- } else {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
- }
-};
-
-// Support: IE <=9
-// Panic based approach to setting things on disconnected nodes
-
-Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
- set: function( tween ) {
- if ( tween.elem.nodeType && tween.elem.parentNode ) {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
-};
-
-jQuery.easing = {
- linear: function( p ) {
- return p;
- },
- swing: function( p ) {
- return 0.5 - Math.cos( p * Math.PI ) / 2;
- }
-};
-
-jQuery.fx = Tween.prototype.init;
-
-// Back Compat <1.8 extension point
-jQuery.fx.step = {};
-
-
-
-
-var
- fxNow, timerId,
- rfxtypes = /^(?:toggle|show|hide)$/,
- rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
- rrun = /queueHooks$/,
- animationPrefilters = [ defaultPrefilter ],
- tweeners = {
- "*": [ function( prop, value ) {
- var tween = this.createTween( prop, value ),
- target = tween.cur(),
- parts = rfxnum.exec( value ),
- unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
-
- // Starting value computation is required for potential unit mismatches
- start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
- rfxnum.exec( jQuery.css( tween.elem, prop ) ),
- scale = 1,
- maxIterations = 20;
-
- if ( start && start[ 3 ] !== unit ) {
- // Trust units reported by jQuery.css
- unit = unit || start[ 3 ];
-
- // Make sure we update the tween properties later on
- parts = parts || [];
-
- // Iteratively approximate from a nonzero starting point
- start = +target || 1;
-
- do {
- // If previous iteration zeroed out, double until we get *something*
- // Use a string for doubling factor so we don't accidentally see scale as unchanged below
- scale = scale || ".5";
-
- // Adjust and apply
- start = start / scale;
- jQuery.style( tween.elem, prop, start + unit );
-
- // Update scale, tolerating zero or NaN from tween.cur()
- // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
- } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
- }
-
- // Update tween properties
- if ( parts ) {
- start = tween.start = +start || +target || 0;
- tween.unit = unit;
- // If a +=/-= token was provided, we're doing a relative animation
- tween.end = parts[ 1 ] ?
- start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
- +parts[ 2 ];
- }
-
- return tween;
- } ]
- };
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
- setTimeout(function() {
- fxNow = undefined;
- });
- return ( fxNow = jQuery.now() );
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, includeWidth ) {
- var which,
- attrs = { height: type },
- i = 0;
-
- // if we include width, step value is 1 to do all cssExpand values,
- // if we don't include width, step value is 2 to skip over Left and Right
- includeWidth = includeWidth ? 1 : 0;
- for ( ; i < 4 ; i += 2 - includeWidth ) {
- which = cssExpand[ i ];
- attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
- }
-
- if ( includeWidth ) {
- attrs.opacity = attrs.width = type;
- }
-
- return attrs;
-}
-
-function createTween( value, prop, animation ) {
- var tween,
- collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
- index = 0,
- length = collection.length;
- for ( ; index < length; index++ ) {
- if ( (tween = collection[ index ].call( animation, prop, value )) ) {
-
- // we're done with this property
- return tween;
- }
- }
-}
-
-function defaultPrefilter( elem, props, opts ) {
- /* jshint validthis: true */
- var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
- anim = this,
- orig = {},
- style = elem.style,
- hidden = elem.nodeType && isHidden( elem ),
- dataShow = jQuery._data( elem, "fxshow" );
-
- // handle queue: false promises
- if ( !opts.queue ) {
- hooks = jQuery._queueHooks( elem, "fx" );
- if ( hooks.unqueued == null ) {
- hooks.unqueued = 0;
- oldfire = hooks.empty.fire;
- hooks.empty.fire = function() {
- if ( !hooks.unqueued ) {
- oldfire();
- }
- };
- }
- hooks.unqueued++;
-
- anim.always(function() {
- // doing this makes sure that the complete handler will be called
- // before this completes
- anim.always(function() {
- hooks.unqueued--;
- if ( !jQuery.queue( elem, "fx" ).length ) {
- hooks.empty.fire();
- }
- });
- });
- }
-
- // height/width overflow pass
- if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
- // Make sure that nothing sneaks out
- // Record all 3 overflow attributes because IE does not
- // change the overflow attribute when overflowX and
- // overflowY are set to the same value
- opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
-
- // Set display property to inline-block for height/width
- // animations on inline elements that are having width/height animated
- display = jQuery.css( elem, "display" );
-
- // Test default display if display is currently "none"
- checkDisplay = display === "none" ?
- jQuery._data( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
-
- if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
-
- // inline-level elements accept inline-block;
- // block-level elements need to be inline with layout
- if ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === "inline" ) {
- style.display = "inline-block";
- } else {
- style.zoom = 1;
- }
- }
- }
-
- if ( opts.overflow ) {
- style.overflow = "hidden";
- if ( !support.shrinkWrapBlocks() ) {
- anim.always(function() {
- style.overflow = opts.overflow[ 0 ];
- style.overflowX = opts.overflow[ 1 ];
- style.overflowY = opts.overflow[ 2 ];
- });
- }
- }
-
- // show/hide pass
- for ( prop in props ) {
- value = props[ prop ];
- if ( rfxtypes.exec( value ) ) {
- delete props[ prop ];
- toggle = toggle || value === "toggle";
- if ( value === ( hidden ? "hide" : "show" ) ) {
-
- // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
- if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
- hidden = true;
- } else {
- continue;
- }
- }
- orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
-
- // Any non-fx value stops us from restoring the original display value
- } else {
- display = undefined;
- }
- }
-
- if ( !jQuery.isEmptyObject( orig ) ) {
- if ( dataShow ) {
- if ( "hidden" in dataShow ) {
- hidden = dataShow.hidden;
- }
- } else {
- dataShow = jQuery._data( elem, "fxshow", {} );
- }
-
- // store state if its toggle - enables .stop().toggle() to "reverse"
- if ( toggle ) {
- dataShow.hidden = !hidden;
- }
- if ( hidden ) {
- jQuery( elem ).show();
- } else {
- anim.done(function() {
- jQuery( elem ).hide();
- });
- }
- anim.done(function() {
- var prop;
- jQuery._removeData( elem, "fxshow" );
- for ( prop in orig ) {
- jQuery.style( elem, prop, orig[ prop ] );
- }
- });
- for ( prop in orig ) {
- tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
-
- if ( !( prop in dataShow ) ) {
- dataShow[ prop ] = tween.start;
- if ( hidden ) {
- tween.end = tween.start;
- tween.start = prop === "width" || prop === "height" ? 1 : 0;
- }
- }
- }
-
- // If this is a noop like .hide().hide(), restore an overwritten display value
- } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) {
- style.display = display;
- }
-}
-
-function propFilter( props, specialEasing ) {
- var index, name, easing, value, hooks;
-
- // camelCase, specialEasing and expand cssHook pass
- for ( index in props ) {
- name = jQuery.camelCase( index );
- easing = specialEasing[ name ];
- value = props[ index ];
- if ( jQuery.isArray( value ) ) {
- easing = value[ 1 ];
- value = props[ index ] = value[ 0 ];
- }
-
- if ( index !== name ) {
- props[ name ] = value;
- delete props[ index ];
- }
-
- hooks = jQuery.cssHooks[ name ];
- if ( hooks && "expand" in hooks ) {
- value = hooks.expand( value );
- delete props[ name ];
-
- // not quite $.extend, this wont overwrite keys already present.
- // also - reusing 'index' from above because we have the correct "name"
- for ( index in value ) {
- if ( !( index in props ) ) {
- props[ index ] = value[ index ];
- specialEasing[ index ] = easing;
- }
- }
- } else {
- specialEasing[ name ] = easing;
- }
- }
-}
-
-function Animation( elem, properties, options ) {
- var result,
- stopped,
- index = 0,
- length = animationPrefilters.length,
- deferred = jQuery.Deferred().always( function() {
- // don't match elem in the :animated selector
- delete tick.elem;
- }),
- tick = function() {
- if ( stopped ) {
- return false;
- }
- var currentTime = fxNow || createFxNow(),
- remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
- // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
- temp = remaining / animation.duration || 0,
- percent = 1 - temp,
- index = 0,
- length = animation.tweens.length;
-
- for ( ; index < length ; index++ ) {
- animation.tweens[ index ].run( percent );
- }
-
- deferred.notifyWith( elem, [ animation, percent, remaining ]);
-
- if ( percent < 1 && length ) {
- return remaining;
- } else {
- deferred.resolveWith( elem, [ animation ] );
- return false;
- }
- },
- animation = deferred.promise({
- elem: elem,
- props: jQuery.extend( {}, properties ),
- opts: jQuery.extend( true, { specialEasing: {} }, options ),
- originalProperties: properties,
- originalOptions: options,
- startTime: fxNow || createFxNow(),
- duration: options.duration,
- tweens: [],
- createTween: function( prop, end ) {
- var tween = jQuery.Tween( elem, animation.opts, prop, end,
- animation.opts.specialEasing[ prop ] || animation.opts.easing );
- animation.tweens.push( tween );
- return tween;
- },
- stop: function( gotoEnd ) {
- var index = 0,
- // if we are going to the end, we want to run all the tweens
- // otherwise we skip this part
- length = gotoEnd ? animation.tweens.length : 0;
- if ( stopped ) {
- return this;
- }
- stopped = true;
- for ( ; index < length ; index++ ) {
- animation.tweens[ index ].run( 1 );
- }
-
- // resolve when we played the last frame
- // otherwise, reject
- if ( gotoEnd ) {
- deferred.resolveWith( elem, [ animation, gotoEnd ] );
- } else {
- deferred.rejectWith( elem, [ animation, gotoEnd ] );
- }
- return this;
- }
- }),
- props = animation.props;
-
- propFilter( props, animation.opts.specialEasing );
-
- for ( ; index < length ; index++ ) {
- result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
- if ( result ) {
- return result;
- }
- }
-
- jQuery.map( props, createTween, animation );
-
- if ( jQuery.isFunction( animation.opts.start ) ) {
- animation.opts.start.call( elem, animation );
- }
-
- jQuery.fx.timer(
- jQuery.extend( tick, {
- elem: elem,
- anim: animation,
- queue: animation.opts.queue
- })
- );
-
- // attach callbacks from options
- return animation.progress( animation.opts.progress )
- .done( animation.opts.done, animation.opts.complete )
- .fail( animation.opts.fail )
- .always( animation.opts.always );
-}
-
-jQuery.Animation = jQuery.extend( Animation, {
- tweener: function( props, callback ) {
- if ( jQuery.isFunction( props ) ) {
- callback = props;
- props = [ "*" ];
- } else {
- props = props.split(" ");
- }
-
- var prop,
- index = 0,
- length = props.length;
-
- for ( ; index < length ; index++ ) {
- prop = props[ index ];
- tweeners[ prop ] = tweeners[ prop ] || [];
- tweeners[ prop ].unshift( callback );
- }
- },
-
- prefilter: function( callback, prepend ) {
- if ( prepend ) {
- animationPrefilters.unshift( callback );
- } else {
- animationPrefilters.push( callback );
- }
- }
-});
-
-jQuery.speed = function( speed, easing, fn ) {
- var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
- complete: fn || !fn && easing ||
- jQuery.isFunction( speed ) && speed,
- duration: speed,
- easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
- };
-
- opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
- opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
-
- // normalize opt.queue - true/undefined/null -> "fx"
- if ( opt.queue == null || opt.queue === true ) {
- opt.queue = "fx";
- }
-
- // Queueing
- opt.old = opt.complete;
-
- opt.complete = function() {
- if ( jQuery.isFunction( opt.old ) ) {
- opt.old.call( this );
- }
-
- if ( opt.queue ) {
- jQuery.dequeue( this, opt.queue );
- }
- };
-
- return opt;
-};
-
-jQuery.fn.extend({
- fadeTo: function( speed, to, easing, callback ) {
-
- // show any hidden elements after setting opacity to 0
- return this.filter( isHidden ).css( "opacity", 0 ).show()
-
- // animate to the value specified
- .end().animate({ opacity: to }, speed, easing, callback );
- },
- animate: function( prop, speed, easing, callback ) {
- var empty = jQuery.isEmptyObject( prop ),
- optall = jQuery.speed( speed, easing, callback ),
- doAnimation = function() {
- // Operate on a copy of prop so per-property easing won't be lost
- var anim = Animation( this, jQuery.extend( {}, prop ), optall );
-
- // Empty animations, or finishing resolves immediately
- if ( empty || jQuery._data( this, "finish" ) ) {
- anim.stop( true );
- }
- };
- doAnimation.finish = doAnimation;
-
- return empty || optall.queue === false ?
- this.each( doAnimation ) :
- this.queue( optall.queue, doAnimation );
- },
- stop: function( type, clearQueue, gotoEnd ) {
- var stopQueue = function( hooks ) {
- var stop = hooks.stop;
- delete hooks.stop;
- stop( gotoEnd );
- };
-
- if ( typeof type !== "string" ) {
- gotoEnd = clearQueue;
- clearQueue = type;
- type = undefined;
- }
- if ( clearQueue && type !== false ) {
- this.queue( type || "fx", [] );
- }
-
- return this.each(function() {
- var dequeue = true,
- index = type != null && type + "queueHooks",
- timers = jQuery.timers,
- data = jQuery._data( this );
-
- if ( index ) {
- if ( data[ index ] && data[ index ].stop ) {
- stopQueue( data[ index ] );
- }
- } else {
- for ( index in data ) {
- if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
- stopQueue( data[ index ] );
- }
- }
- }
-
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
- timers[ index ].anim.stop( gotoEnd );
- dequeue = false;
- timers.splice( index, 1 );
- }
- }
-
- // start the next in the queue if the last step wasn't forced
- // timers currently will call their complete callbacks, which will dequeue
- // but only if they were gotoEnd
- if ( dequeue || !gotoEnd ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- finish: function( type ) {
- if ( type !== false ) {
- type = type || "fx";
- }
- return this.each(function() {
- var index,
- data = jQuery._data( this ),
- queue = data[ type + "queue" ],
- hooks = data[ type + "queueHooks" ],
- timers = jQuery.timers,
- length = queue ? queue.length : 0;
-
- // enable finishing flag on private data
- data.finish = true;
-
- // empty the queue first
- jQuery.queue( this, type, [] );
-
- if ( hooks && hooks.stop ) {
- hooks.stop.call( this, true );
- }
-
- // look for any active animations, and finish them
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
- timers[ index ].anim.stop( true );
- timers.splice( index, 1 );
- }
- }
-
- // look for any animations in the old queue and finish them
- for ( index = 0; index < length; index++ ) {
- if ( queue[ index ] && queue[ index ].finish ) {
- queue[ index ].finish.call( this );
- }
- }
-
- // turn off finishing flag
- delete data.finish;
- });
- }
-});
-
-jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
- var cssFn = jQuery.fn[ name ];
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return speed == null || typeof speed === "boolean" ?
- cssFn.apply( this, arguments ) :
- this.animate( genFx( name, true ), speed, easing, callback );
- };
-});
-
-// Generate shortcuts for custom animations
-jQuery.each({
- slideDown: genFx("show"),
- slideUp: genFx("hide"),
- slideToggle: genFx("toggle"),
- fadeIn: { opacity: "show" },
- fadeOut: { opacity: "hide" },
- fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return this.animate( props, speed, easing, callback );
- };
-});
-
-jQuery.timers = [];
-jQuery.fx.tick = function() {
- var timer,
- timers = jQuery.timers,
- i = 0;
-
- fxNow = jQuery.now();
-
- for ( ; i < timers.length; i++ ) {
- timer = timers[ i ];
- // Checks the timer has not already been removed
- if ( !timer() && timers[ i ] === timer ) {
- timers.splice( i--, 1 );
- }
- }
-
- if ( !timers.length ) {
- jQuery.fx.stop();
- }
- fxNow = undefined;
-};
-
-jQuery.fx.timer = function( timer ) {
- jQuery.timers.push( timer );
- if ( timer() ) {
- jQuery.fx.start();
- } else {
- jQuery.timers.pop();
- }
-};
-
-jQuery.fx.interval = 13;
-
-jQuery.fx.start = function() {
- if ( !timerId ) {
- timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
- }
-};
-
-jQuery.fx.stop = function() {
- clearInterval( timerId );
- timerId = null;
-};
-
-jQuery.fx.speeds = {
- slow: 600,
- fast: 200,
- // Default speed
- _default: 400
-};
-
-
-// Based off of the plugin by Clint Helfers, with permission.
-// http://blindsignals.com/index.php/2009/07/jquery-delay/
-jQuery.fn.delay = function( time, type ) {
- time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
- type = type || "fx";
-
- return this.queue( type, function( next, hooks ) {
- var timeout = setTimeout( next, time );
- hooks.stop = function() {
- clearTimeout( timeout );
- };
- });
-};
-
-
-(function() {
- // Minified: var a,b,c,d,e
- var input, div, select, a, opt;
-
- // Setup
- div = document.createElement( "div" );
- div.setAttribute( "className", "t" );
- div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
- a = div.getElementsByTagName("a")[ 0 ];
-
- // First batch of tests.
- select = document.createElement("select");
- opt = select.appendChild( document.createElement("option") );
- input = div.getElementsByTagName("input")[ 0 ];
-
- a.style.cssText = "top:1px";
-
- // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
- support.getSetAttribute = div.className !== "t";
-
- // Get the style information from getAttribute
- // (IE uses .cssText instead)
- support.style = /top/.test( a.getAttribute("style") );
-
- // Make sure that URLs aren't manipulated
- // (IE normalizes it by default)
- support.hrefNormalized = a.getAttribute("href") === "/a";
-
- // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
- support.checkOn = !!input.value;
-
- // Make sure that a selected-by-default option has a working selected property.
- // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
- support.optSelected = opt.selected;
-
- // Tests for enctype support on a form (#6743)
- support.enctype = !!document.createElement("form").enctype;
-
- // Make sure that the options inside disabled selects aren't marked as disabled
- // (WebKit marks them as disabled)
- select.disabled = true;
- support.optDisabled = !opt.disabled;
-
- // Support: IE8 only
- // Check if we can trust getAttribute("value")
- input = document.createElement( "input" );
- input.setAttribute( "value", "" );
- support.input = input.getAttribute( "value" ) === "";
-
- // Check if an input maintains its value after becoming a radio
- input.value = "t";
- input.setAttribute( "type", "radio" );
- support.radioValue = input.value === "t";
-})();
-
-
-var rreturn = /\r/g;
-
-jQuery.fn.extend({
- val: function( value ) {
- var hooks, ret, isFunction,
- elem = this[0];
-
- if ( !arguments.length ) {
- if ( elem ) {
- hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
-
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
- return ret;
- }
-
- ret = elem.value;
-
- return typeof ret === "string" ?
- // handle most common string cases
- ret.replace(rreturn, "") :
- // handle cases where value is null/undef or number
- ret == null ? "" : ret;
- }
-
- return;
- }
-
- isFunction = jQuery.isFunction( value );
-
- return this.each(function( i ) {
- var val;
-
- if ( this.nodeType !== 1 ) {
- return;
- }
-
- if ( isFunction ) {
- val = value.call( this, i, jQuery( this ).val() );
- } else {
- val = value;
- }
-
- // Treat null/undefined as ""; convert numbers to string
- if ( val == null ) {
- val = "";
- } else if ( typeof val === "number" ) {
- val += "";
- } else if ( jQuery.isArray( val ) ) {
- val = jQuery.map( val, function( value ) {
- return value == null ? "" : value + "";
- });
- }
-
- hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
- // If set returns undefined, fall back to normal setting
- if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
- this.value = val;
- }
- });
- }
-});
-
-jQuery.extend({
- valHooks: {
- option: {
- get: function( elem ) {
- var val = jQuery.find.attr( elem, "value" );
- return val != null ?
- val :
- // Support: IE10-11+
- // option.text throws exceptions (#14686, #14858)
- jQuery.trim( jQuery.text( elem ) );
- }
- },
- select: {
- get: function( elem ) {
- var value, option,
- options = elem.options,
- index = elem.selectedIndex,
- one = elem.type === "select-one" || index < 0,
- values = one ? null : [],
- max = one ? index + 1 : options.length,
- i = index < 0 ?
- max :
- one ? index : 0;
-
- // Loop through all the selected options
- for ( ; i < max; i++ ) {
- option = options[ i ];
-
- // oldIE doesn't update selected after form reset (#2551)
- if ( ( option.selected || i === index ) &&
- // Don't return options that are disabled or in a disabled optgroup
- ( support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
- ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
-
- // Get the specific value for the option
- value = jQuery( option ).val();
-
- // We don't need an array for one selects
- if ( one ) {
- return value;
- }
-
- // Multi-Selects return an array
- values.push( value );
- }
- }
-
- return values;
- },
-
- set: function( elem, value ) {
- var optionSet, option,
- options = elem.options,
- values = jQuery.makeArray( value ),
- i = options.length;
-
- while ( i-- ) {
- option = options[ i ];
-
- if ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) >= 0 ) {
-
- // Support: IE6
- // When new option element is added to select box we need to
- // force reflow of newly added node in order to workaround delay
- // of initialization properties
- try {
- option.selected = optionSet = true;
-
- } catch ( _ ) {
-
- // Will be executed only in IE6
- option.scrollHeight;
- }
-
- } else {
- option.selected = false;
- }
- }
-
- // Force browsers to behave consistently when non-matching value is set
- if ( !optionSet ) {
- elem.selectedIndex = -1;
- }
-
- return options;
- }
- }
- }
-});
-
-// Radios and checkboxes getter/setter
-jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = {
- set: function( elem, value ) {
- if ( jQuery.isArray( value ) ) {
- return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
- }
- }
- };
- if ( !support.checkOn ) {
- jQuery.valHooks[ this ].get = function( elem ) {
- // Support: Webkit
- // "" is returned instead of "on" if a value isn't specified
- return elem.getAttribute("value") === null ? "on" : elem.value;
- };
- }
-});
-
-
-
-
-var nodeHook, boolHook,
- attrHandle = jQuery.expr.attrHandle,
- ruseDefault = /^(?:checked|selected)$/i,
- getSetAttribute = support.getSetAttribute,
- getSetInput = support.input;
-
-jQuery.fn.extend({
- attr: function( name, value ) {
- return access( this, jQuery.attr, name, value, arguments.length > 1 );
- },
-
- removeAttr: function( name ) {
- return this.each(function() {
- jQuery.removeAttr( this, name );
- });
- }
-});
-
-jQuery.extend({
- attr: function( elem, name, value ) {
- var hooks, ret,
- nType = elem.nodeType;
-
- // don't get/set attributes on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- // Fallback to prop when attributes are not supported
- if ( typeof elem.getAttribute === strundefined ) {
- return jQuery.prop( elem, name, value );
- }
-
- // All attributes are lowercase
- // Grab necessary hook if one is defined
- if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
- name = name.toLowerCase();
- hooks = jQuery.attrHooks[ name ] ||
- ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
- }
-
- if ( value !== undefined ) {
-
- if ( value === null ) {
- jQuery.removeAttr( elem, name );
-
- } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
- return ret;
-
- } else {
- elem.setAttribute( name, value + "" );
- return value;
- }
-
- } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
- return ret;
-
- } else {
- ret = jQuery.find.attr( elem, name );
-
- // Non-existent attributes return null, we normalize to undefined
- return ret == null ?
- undefined :
- ret;
- }
- },
-
- removeAttr: function( elem, value ) {
- var name, propName,
- i = 0,
- attrNames = value && value.match( rnotwhite );
-
- if ( attrNames && elem.nodeType === 1 ) {
- while ( (name = attrNames[i++]) ) {
- propName = jQuery.propFix[ name ] || name;
-
- // Boolean attributes get special treatment (#10870)
- if ( jQuery.expr.match.bool.test( name ) ) {
- // Set corresponding property to false
- if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
- elem[ propName ] = false;
- // Support: IE<9
- // Also clear defaultChecked/defaultSelected (if appropriate)
- } else {
- elem[ jQuery.camelCase( "default-" + name ) ] =
- elem[ propName ] = false;
- }
-
- // See #9699 for explanation of this approach (setting first, then removal)
- } else {
- jQuery.attr( elem, name, "" );
- }
-
- elem.removeAttribute( getSetAttribute ? name : propName );
- }
- }
- },
-
- attrHooks: {
- type: {
- set: function( elem, value ) {
- if ( !support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
- // Setting the type on a radio button after the value resets the value in IE6-9
- // Reset value to default in case type is set after value during creation
- var val = elem.value;
- elem.setAttribute( "type", value );
- if ( val ) {
- elem.value = val;
- }
- return value;
- }
- }
- }
- }
-});
-
-// Hook for boolean attributes
-boolHook = {
- set: function( elem, value, name ) {
- if ( value === false ) {
- // Remove boolean attributes when set to false
- jQuery.removeAttr( elem, name );
- } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
- // IE<8 needs the *property* name
- elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
-
- // Use defaultChecked and defaultSelected for oldIE
- } else {
- elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
- }
-
- return name;
- }
-};
-
-// Retrieve booleans specially
-jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
-
- var getter = attrHandle[ name ] || jQuery.find.attr;
-
- attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?
- function( elem, name, isXML ) {
- var ret, handle;
- if ( !isXML ) {
- // Avoid an infinite loop by temporarily removing this function from the getter
- handle = attrHandle[ name ];
- attrHandle[ name ] = ret;
- ret = getter( elem, name, isXML ) != null ?
- name.toLowerCase() :
- null;
- attrHandle[ name ] = handle;
- }
- return ret;
- } :
- function( elem, name, isXML ) {
- if ( !isXML ) {
- return elem[ jQuery.camelCase( "default-" + name ) ] ?
- name.toLowerCase() :
- null;
- }
- };
-});
-
-// fix oldIE attroperties
-if ( !getSetInput || !getSetAttribute ) {
- jQuery.attrHooks.value = {
- set: function( elem, value, name ) {
- if ( jQuery.nodeName( elem, "input" ) ) {
- // Does not return so that setAttribute is also used
- elem.defaultValue = value;
- } else {
- // Use nodeHook if defined (#1954); otherwise setAttribute is fine
- return nodeHook && nodeHook.set( elem, value, name );
- }
- }
- };
-}
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !getSetAttribute ) {
-
- // Use this for any attribute in IE6/7
- // This fixes almost every IE6/7 issue
- nodeHook = {
- set: function( elem, value, name ) {
- // Set the existing or create a new attribute node
- var ret = elem.getAttributeNode( name );
- if ( !ret ) {
- elem.setAttributeNode(
- (ret = elem.ownerDocument.createAttribute( name ))
- );
- }
-
- ret.value = value += "";
-
- // Break association with cloned elements by also using setAttribute (#9646)
- if ( name === "value" || value === elem.getAttribute( name ) ) {
- return value;
- }
- }
- };
-
- // Some attributes are constructed with empty-string values when not defined
- attrHandle.id = attrHandle.name = attrHandle.coords =
- function( elem, name, isXML ) {
- var ret;
- if ( !isXML ) {
- return (ret = elem.getAttributeNode( name )) && ret.value !== "" ?
- ret.value :
- null;
- }
- };
-
- // Fixing value retrieval on a button requires this module
- jQuery.valHooks.button = {
- get: function( elem, name ) {
- var ret = elem.getAttributeNode( name );
- if ( ret && ret.specified ) {
- return ret.value;
- }
- },
- set: nodeHook.set
- };
-
- // Set contenteditable to false on removals(#10429)
- // Setting to empty string throws an error as an invalid value
- jQuery.attrHooks.contenteditable = {
- set: function( elem, value, name ) {
- nodeHook.set( elem, value === "" ? false : value, name );
- }
- };
-
- // Set width and height to auto instead of 0 on empty string( Bug #8150 )
- // This is for removals
- jQuery.each([ "width", "height" ], function( i, name ) {
- jQuery.attrHooks[ name ] = {
- set: function( elem, value ) {
- if ( value === "" ) {
- elem.setAttribute( name, "auto" );
- return value;
- }
- }
- };
- });
-}
-
-if ( !support.style ) {
- jQuery.attrHooks.style = {
- get: function( elem ) {
- // Return undefined in the case of empty string
- // Note: IE uppercases css property names, but if we were to .toLowerCase()
- // .cssText, that would destroy case senstitivity in URL's, like in "background"
- return elem.style.cssText || undefined;
- },
- set: function( elem, value ) {
- return ( elem.style.cssText = value + "" );
- }
- };
-}
-
-
-
-
-var rfocusable = /^(?:input|select|textarea|button|object)$/i,
- rclickable = /^(?:a|area)$/i;
-
-jQuery.fn.extend({
- prop: function( name, value ) {
- return access( this, jQuery.prop, name, value, arguments.length > 1 );
- },
-
- removeProp: function( name ) {
- name = jQuery.propFix[ name ] || name;
- return this.each(function() {
- // try/catch handles cases where IE balks (such as removing a property on window)
- try {
- this[ name ] = undefined;
- delete this[ name ];
- } catch( e ) {}
- });
- }
-});
-
-jQuery.extend({
- propFix: {
- "for": "htmlFor",
- "class": "className"
- },
-
- prop: function( elem, name, value ) {
- var ret, hooks, notxml,
- nType = elem.nodeType;
-
- // don't get/set properties on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
- if ( notxml ) {
- // Fix name and attach hooks
- name = jQuery.propFix[ name ] || name;
- hooks = jQuery.propHooks[ name ];
- }
-
- if ( value !== undefined ) {
- return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
- ret :
- ( elem[ name ] = value );
-
- } else {
- return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
- ret :
- elem[ name ];
- }
- },
-
- propHooks: {
- tabIndex: {
- get: function( elem ) {
- // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
- // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
- // Use proper attribute retrieval(#12072)
- var tabindex = jQuery.find.attr( elem, "tabindex" );
-
- return tabindex ?
- parseInt( tabindex, 10 ) :
- rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
- 0 :
- -1;
- }
- }
- }
-});
-
-// Some attributes require a special call on IE
-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !support.hrefNormalized ) {
- // href/src property should get the full normalized URL (#10299/#12915)
- jQuery.each([ "href", "src" ], function( i, name ) {
- jQuery.propHooks[ name ] = {
- get: function( elem ) {
- return elem.getAttribute( name, 4 );
- }
- };
- });
-}
-
-// Support: Safari, IE9+
-// mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !support.optSelected ) {
- jQuery.propHooks.selected = {
- get: function( elem ) {
- var parent = elem.parentNode;
-
- if ( parent ) {
- parent.selectedIndex;
-
- // Make sure that it also works with optgroups, see #5701
- if ( parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- }
- return null;
- }
- };
-}
-
-jQuery.each([
- "tabIndex",
- "readOnly",
- "maxLength",
- "cellSpacing",
- "cellPadding",
- "rowSpan",
- "colSpan",
- "useMap",
- "frameBorder",
- "contentEditable"
-], function() {
- jQuery.propFix[ this.toLowerCase() ] = this;
-});
-
-// IE6/7 call enctype encoding
-if ( !support.enctype ) {
- jQuery.propFix.enctype = "encoding";
-}
-
-
-
-
-var rclass = /[\t\r\n\f]/g;
-
-jQuery.fn.extend({
- addClass: function( value ) {
- var classes, elem, cur, clazz, j, finalValue,
- i = 0,
- len = this.length,
- proceed = typeof value === "string" && value;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).addClass( value.call( this, j, this.className ) );
- });
- }
-
- if ( proceed ) {
- // The disjunction here is for better compressibility (see removeClass)
- classes = ( value || "" ).match( rnotwhite ) || [];
-
- for ( ; i < len; i++ ) {
- elem = this[ i ];
- cur = elem.nodeType === 1 && ( elem.className ?
- ( " " + elem.className + " " ).replace( rclass, " " ) :
- " "
- );
-
- if ( cur ) {
- j = 0;
- while ( (clazz = classes[j++]) ) {
- if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
- cur += clazz + " ";
- }
- }
-
- // only assign if different to avoid unneeded rendering.
- finalValue = jQuery.trim( cur );
- if ( elem.className !== finalValue ) {
- elem.className = finalValue;
- }
- }
- }
- }
-
- return this;
- },
-
- removeClass: function( value ) {
- var classes, elem, cur, clazz, j, finalValue,
- i = 0,
- len = this.length,
- proceed = arguments.length === 0 || typeof value === "string" && value;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).removeClass( value.call( this, j, this.className ) );
- });
- }
- if ( proceed ) {
- classes = ( value || "" ).match( rnotwhite ) || [];
-
- for ( ; i < len; i++ ) {
- elem = this[ i ];
- // This expression is here for better compressibility (see addClass)
- cur = elem.nodeType === 1 && ( elem.className ?
- ( " " + elem.className + " " ).replace( rclass, " " ) :
- ""
- );
-
- if ( cur ) {
- j = 0;
- while ( (clazz = classes[j++]) ) {
- // Remove *all* instances
- while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
- cur = cur.replace( " " + clazz + " ", " " );
- }
- }
-
- // only assign if different to avoid unneeded rendering.
- finalValue = value ? jQuery.trim( cur ) : "";
- if ( elem.className !== finalValue ) {
- elem.className = finalValue;
- }
- }
- }
- }
-
- return this;
- },
-
- toggleClass: function( value, stateVal ) {
- var type = typeof value;
-
- if ( typeof stateVal === "boolean" && type === "string" ) {
- return stateVal ? this.addClass( value ) : this.removeClass( value );
- }
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( i ) {
- jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
- });
- }
-
- return this.each(function() {
- if ( type === "string" ) {
- // toggle individual class names
- var className,
- i = 0,
- self = jQuery( this ),
- classNames = value.match( rnotwhite ) || [];
-
- while ( (className = classNames[ i++ ]) ) {
- // check each className given, space separated list
- if ( self.hasClass( className ) ) {
- self.removeClass( className );
- } else {
- self.addClass( className );
- }
- }
-
- // Toggle whole class name
- } else if ( type === strundefined || type === "boolean" ) {
- if ( this.className ) {
- // store className if set
- jQuery._data( this, "__className__", this.className );
- }
-
- // If the element has a class name or if we're passed "false",
- // then remove the whole classname (if there was one, the above saved it).
- // Otherwise bring back whatever was previously saved (if anything),
- // falling back to the empty string if nothing was stored.
- this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
- }
- });
- },
-
- hasClass: function( selector ) {
- var className = " " + selector + " ",
- i = 0,
- l = this.length;
- for ( ; i < l; i++ ) {
- if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
- return true;
- }
- }
-
- return false;
- }
-});
-
-
-
-
-// Return jQuery for attributes-only inclusion
-
-
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
- "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
- "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
-
- // Handle event binding
- jQuery.fn[ name ] = function( data, fn ) {
- return arguments.length > 0 ?
- this.on( name, null, data, fn ) :
- this.trigger( name );
- };
-});
-
-jQuery.fn.extend({
- hover: function( fnOver, fnOut ) {
- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
- },
-
- bind: function( types, data, fn ) {
- return this.on( types, null, data, fn );
- },
- unbind: function( types, fn ) {
- return this.off( types, null, fn );
- },
-
- delegate: function( selector, types, data, fn ) {
- return this.on( types, selector, data, fn );
- },
- undelegate: function( selector, types, fn ) {
- // ( namespace ) or ( selector, types [, fn] )
- return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
- }
-});
-
-
-var nonce = jQuery.now();
-
-var rquery = (/\?/);
-
-
-
-var rvalidtokens = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
-
-jQuery.parseJSON = function( data ) {
- // Attempt to parse using the native JSON parser first
- if ( window.JSON && window.JSON.parse ) {
- // Support: Android 2.3
- // Workaround failure to string-cast null input
- return window.JSON.parse( data + "" );
- }
-
- var requireNonComma,
- depth = null,
- str = jQuery.trim( data + "" );
-
- // Guard against invalid (and possibly dangerous) input by ensuring that nothing remains
- // after removing valid tokens
- return str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {
-
- // Force termination if we see a misplaced comma
- if ( requireNonComma && comma ) {
- depth = 0;
- }
-
- // Perform no more replacements after returning to outermost depth
- if ( depth === 0 ) {
- return token;
- }
-
- // Commas must not follow "[", "{", or ","
- requireNonComma = open || comma;
-
- // Determine new depth
- // array/object open ("[" or "{"): depth += true - false (increment)
- // array/object close ("]" or "}"): depth += false - true (decrement)
- // other cases ("," or primitive): depth += true - true (numeric cast)
- depth += !close - !open;
-
- // Remove this token
- return "";
- }) ) ?
- ( Function( "return " + str ) )() :
- jQuery.error( "Invalid JSON: " + data );
-};
-
-
-// Cross-browser xml parsing
-jQuery.parseXML = function( data ) {
- var xml, tmp;
- if ( !data || typeof data !== "string" ) {
- return null;
- }
- try {
- if ( window.DOMParser ) { // Standard
- tmp = new DOMParser();
- xml = tmp.parseFromString( data, "text/xml" );
- } else { // IE
- xml = new ActiveXObject( "Microsoft.XMLDOM" );
- xml.async = "false";
- xml.loadXML( data );
- }
- } catch( e ) {
- xml = undefined;
- }
- if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
- jQuery.error( "Invalid XML: " + data );
- }
- return xml;
-};
-
-
-var
- // Document location
- ajaxLocParts,
- ajaxLocation,
-
- rhash = /#.*$/,
- rts = /([?&])_=[^&]*/,
- rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
- // #7653, #8125, #8152: local protocol detection
- rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
- rnoContent = /^(?:GET|HEAD)$/,
- rprotocol = /^\/\//,
- rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
-
- /* Prefilters
- * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
- * 2) These are called:
- * - BEFORE asking for a transport
- * - AFTER param serialization (s.data is a string if s.processData is true)
- * 3) key is the dataType
- * 4) the catchall symbol "*" can be used
- * 5) execution will start with transport dataType and THEN continue down to "*" if needed
- */
- prefilters = {},
-
- /* Transports bindings
- * 1) key is the dataType
- * 2) the catchall symbol "*" can be used
- * 3) selection will start with transport dataType and THEN go to "*" if needed
- */
- transports = {},
-
- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
- allTypes = "*/".concat("*");
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
- ajaxLocation = location.href;
-} catch( e ) {
- // Use the href attribute of an A element
- // since IE will modify it given document.location
- ajaxLocation = document.createElement( "a" );
- ajaxLocation.href = "";
- ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
- // dataTypeExpression is optional and defaults to "*"
- return function( dataTypeExpression, func ) {
-
- if ( typeof dataTypeExpression !== "string" ) {
- func = dataTypeExpression;
- dataTypeExpression = "*";
- }
-
- var dataType,
- i = 0,
- dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
-
- if ( jQuery.isFunction( func ) ) {
- // For each dataType in the dataTypeExpression
- while ( (dataType = dataTypes[i++]) ) {
- // Prepend if requested
- if ( dataType.charAt( 0 ) === "+" ) {
- dataType = dataType.slice( 1 ) || "*";
- (structure[ dataType ] = structure[ dataType ] || []).unshift( func );
-
- // Otherwise append
- } else {
- (structure[ dataType ] = structure[ dataType ] || []).push( func );
- }
- }
- }
- };
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
-
- var inspected = {},
- seekingTransport = ( structure === transports );
-
- function inspect( dataType ) {
- var selected;
- inspected[ dataType ] = true;
- jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
- var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
- if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
- options.dataTypes.unshift( dataTypeOrTransport );
- inspect( dataTypeOrTransport );
- return false;
- } else if ( seekingTransport ) {
- return !( selected = dataTypeOrTransport );
- }
- });
- return selected;
- }
-
- return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
- var deep, key,
- flatOptions = jQuery.ajaxSettings.flatOptions || {};
-
- for ( key in src ) {
- if ( src[ key ] !== undefined ) {
- ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
- }
- }
- if ( deep ) {
- jQuery.extend( true, target, deep );
- }
-
- return target;
-}
-
-/* Handles responses to an ajax request:
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
- var firstDataType, ct, finalDataType, type,
- contents = s.contents,
- dataTypes = s.dataTypes;
-
- // Remove auto dataType and get content-type in the process
- while ( dataTypes[ 0 ] === "*" ) {
- dataTypes.shift();
- if ( ct === undefined ) {
- ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
- }
- }
-
- // Check if we're dealing with a known content-type
- if ( ct ) {
- for ( type in contents ) {
- if ( contents[ type ] && contents[ type ].test( ct ) ) {
- dataTypes.unshift( type );
- break;
- }
- }
- }
-
- // Check to see if we have a response for the expected dataType
- if ( dataTypes[ 0 ] in responses ) {
- finalDataType = dataTypes[ 0 ];
- } else {
- // Try convertible dataTypes
- for ( type in responses ) {
- if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
- finalDataType = type;
- break;
- }
- if ( !firstDataType ) {
- firstDataType = type;
- }
- }
- // Or just use first one
- finalDataType = finalDataType || firstDataType;
- }
-
- // If we found a dataType
- // We add the dataType to the list if needed
- // and return the corresponding response
- if ( finalDataType ) {
- if ( finalDataType !== dataTypes[ 0 ] ) {
- dataTypes.unshift( finalDataType );
- }
- return responses[ finalDataType ];
- }
-}
-
-/* Chain conversions given the request and the original response
- * Also sets the responseXXX fields on the jqXHR instance
- */
-function ajaxConvert( s, response, jqXHR, isSuccess ) {
- var conv2, current, conv, tmp, prev,
- converters = {},
- // Work with a copy of dataTypes in case we need to modify it for conversion
- dataTypes = s.dataTypes.slice();
-
- // Create converters map with lowercased keys
- if ( dataTypes[ 1 ] ) {
- for ( conv in s.converters ) {
- converters[ conv.toLowerCase() ] = s.converters[ conv ];
- }
- }
-
- current = dataTypes.shift();
-
- // Convert to each sequential dataType
- while ( current ) {
-
- if ( s.responseFields[ current ] ) {
- jqXHR[ s.responseFields[ current ] ] = response;
- }
-
- // Apply the dataFilter if provided
- if ( !prev && isSuccess && s.dataFilter ) {
- response = s.dataFilter( response, s.dataType );
- }
-
- prev = current;
- current = dataTypes.shift();
-
- if ( current ) {
-
- // There's only work to do if current dataType is non-auto
- if ( current === "*" ) {
-
- current = prev;
-
- // Convert response if prev dataType is non-auto and differs from current
- } else if ( prev !== "*" && prev !== current ) {
-
- // Seek a direct converter
- conv = converters[ prev + " " + current ] || converters[ "* " + current ];
-
- // If none found, seek a pair
- if ( !conv ) {
- for ( conv2 in converters ) {
-
- // If conv2 outputs current
- tmp = conv2.split( " " );
- if ( tmp[ 1 ] === current ) {
-
- // If prev can be converted to accepted input
- conv = converters[ prev + " " + tmp[ 0 ] ] ||
- converters[ "* " + tmp[ 0 ] ];
- if ( conv ) {
- // Condense equivalence converters
- if ( conv === true ) {
- conv = converters[ conv2 ];
-
- // Otherwise, insert the intermediate dataType
- } else if ( converters[ conv2 ] !== true ) {
- current = tmp[ 0 ];
- dataTypes.unshift( tmp[ 1 ] );
- }
- break;
- }
- }
- }
- }
-
- // Apply converter (if not an equivalence)
- if ( conv !== true ) {
-
- // Unless errors are allowed to bubble, catch and return them
- if ( conv && s[ "throws" ] ) {
- response = conv( response );
- } else {
- try {
- response = conv( response );
- } catch ( e ) {
- return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
- }
- }
- }
- }
- }
- }
-
- return { state: "success", data: response };
-}
-
-jQuery.extend({
-
- // Counter for holding the number of active queries
- active: 0,
-
- // Last-Modified header cache for next request
- lastModified: {},
- etag: {},
-
- ajaxSettings: {
- url: ajaxLocation,
- type: "GET",
- isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
- global: true,
- processData: true,
- async: true,
- contentType: "application/x-www-form-urlencoded; charset=UTF-8",
- /*
- timeout: 0,
- data: null,
- dataType: null,
- username: null,
- password: null,
- cache: null,
- throws: false,
- traditional: false,
- headers: {},
- */
-
- accepts: {
- "*": allTypes,
- text: "text/plain",
- html: "text/html",
- xml: "application/xml, text/xml",
- json: "application/json, text/javascript"
- },
-
- contents: {
- xml: /xml/,
- html: /html/,
- json: /json/
- },
-
- responseFields: {
- xml: "responseXML",
- text: "responseText",
- json: "responseJSON"
- },
-
- // Data converters
- // Keys separate source (or catchall "*") and destination types with a single space
- converters: {
-
- // Convert anything to text
- "* text": String,
-
- // Text to html (true = no transformation)
- "text html": true,
-
- // Evaluate text as a json expression
- "text json": jQuery.parseJSON,
-
- // Parse text as xml
- "text xml": jQuery.parseXML
- },
-
- // For options that shouldn't be deep extended:
- // you can add your own custom options here if
- // and when you create one that shouldn't be
- // deep extended (see ajaxExtend)
- flatOptions: {
- url: true,
- context: true
- }
- },
-
- // Creates a full fledged settings object into target
- // with both ajaxSettings and settings fields.
- // If target is omitted, writes into ajaxSettings.
- ajaxSetup: function( target, settings ) {
- return settings ?
-
- // Building a settings object
- ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
-
- // Extending ajaxSettings
- ajaxExtend( jQuery.ajaxSettings, target );
- },
-
- ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
- ajaxTransport: addToPrefiltersOrTransports( transports ),
-
- // Main method
- ajax: function( url, options ) {
-
- // If url is an object, simulate pre-1.5 signature
- if ( typeof url === "object" ) {
- options = url;
- url = undefined;
- }
-
- // Force options to be an object
- options = options || {};
-
- var // Cross-domain detection vars
- parts,
- // Loop variable
- i,
- // URL without anti-cache param
- cacheURL,
- // Response headers as string
- responseHeadersString,
- // timeout handle
- timeoutTimer,
-
- // To know if global events are to be dispatched
- fireGlobals,
-
- transport,
- // Response headers
- responseHeaders,
- // Create the final options object
- s = jQuery.ajaxSetup( {}, options ),
- // Callbacks context
- callbackContext = s.context || s,
- // Context for global events is callbackContext if it is a DOM node or jQuery collection
- globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
- jQuery( callbackContext ) :
- jQuery.event,
- // Deferreds
- deferred = jQuery.Deferred(),
- completeDeferred = jQuery.Callbacks("once memory"),
- // Status-dependent callbacks
- statusCode = s.statusCode || {},
- // Headers (they are sent all at once)
- requestHeaders = {},
- requestHeadersNames = {},
- // The jqXHR state
- state = 0,
- // Default abort message
- strAbort = "canceled",
- // Fake xhr
- jqXHR = {
- readyState: 0,
-
- // Builds headers hashtable if needed
- getResponseHeader: function( key ) {
- var match;
- if ( state === 2 ) {
- if ( !responseHeaders ) {
- responseHeaders = {};
- while ( (match = rheaders.exec( responseHeadersString )) ) {
- responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
- }
- }
- match = responseHeaders[ key.toLowerCase() ];
- }
- return match == null ? null : match;
- },
-
- // Raw string
- getAllResponseHeaders: function() {
- return state === 2 ? responseHeadersString : null;
- },
-
- // Caches the header
- setRequestHeader: function( name, value ) {
- var lname = name.toLowerCase();
- if ( !state ) {
- name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
- requestHeaders[ name ] = value;
- }
- return this;
- },
-
- // Overrides response content-type header
- overrideMimeType: function( type ) {
- if ( !state ) {
- s.mimeType = type;
- }
- return this;
- },
-
- // Status-dependent callbacks
- statusCode: function( map ) {
- var code;
- if ( map ) {
- if ( state < 2 ) {
- for ( code in map ) {
- // Lazy-add the new callback in a way that preserves old ones
- statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
- }
- } else {
- // Execute the appropriate callbacks
- jqXHR.always( map[ jqXHR.status ] );
- }
- }
- return this;
- },
-
- // Cancel the request
- abort: function( statusText ) {
- var finalText = statusText || strAbort;
- if ( transport ) {
- transport.abort( finalText );
- }
- done( 0, finalText );
- return this;
- }
- };
-
- // Attach deferreds
- deferred.promise( jqXHR ).complete = completeDeferred.add;
- jqXHR.success = jqXHR.done;
- jqXHR.error = jqXHR.fail;
-
- // Remove hash character (#7531: and string promotion)
- // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
- // Handle falsy url in the settings object (#10093: consistency with old signature)
- // We also use the url parameter if available
- s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
- // Alias method option to type as per ticket #12004
- s.type = options.method || options.type || s.method || s.type;
-
- // Extract dataTypes list
- s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
-
- // A cross-domain request is in order when we have a protocol:host:port mismatch
- if ( s.crossDomain == null ) {
- parts = rurl.exec( s.url.toLowerCase() );
- s.crossDomain = !!( parts &&
- ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
- ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
- ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
- );
- }
-
- // Convert data if not already a string
- if ( s.data && s.processData && typeof s.data !== "string" ) {
- s.data = jQuery.param( s.data, s.traditional );
- }
-
- // Apply prefilters
- inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
- // If request was aborted inside a prefilter, stop there
- if ( state === 2 ) {
- return jqXHR;
- }
-
- // We can fire global events as of now if asked to
- fireGlobals = s.global;
-
- // Watch for a new set of requests
- if ( fireGlobals && jQuery.active++ === 0 ) {
- jQuery.event.trigger("ajaxStart");
- }
-
- // Uppercase the type
- s.type = s.type.toUpperCase();
-
- // Determine if request has content
- s.hasContent = !rnoContent.test( s.type );
-
- // Save the URL in case we're toying with the If-Modified-Since
- // and/or If-None-Match header later on
- cacheURL = s.url;
-
- // More options handling for requests with no content
- if ( !s.hasContent ) {
-
- // If data is available, append data to url
- if ( s.data ) {
- cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
- // #9682: remove data so that it's not used in an eventual retry
- delete s.data;
- }
-
- // Add anti-cache in url if needed
- if ( s.cache === false ) {
- s.url = rts.test( cacheURL ) ?
-
- // If there is already a '_' parameter, set its value
- cacheURL.replace( rts, "$1_=" + nonce++ ) :
-
- // Otherwise add one to the end
- cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
- }
- }
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- if ( jQuery.lastModified[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
- }
- if ( jQuery.etag[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
- }
- }
-
- // Set the correct header, if data is being sent
- if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
- jqXHR.setRequestHeader( "Content-Type", s.contentType );
- }
-
- // Set the Accepts header for the server, depending on the dataType
- jqXHR.setRequestHeader(
- "Accept",
- s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
- s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
- s.accepts[ "*" ]
- );
-
- // Check for headers option
- for ( i in s.headers ) {
- jqXHR.setRequestHeader( i, s.headers[ i ] );
- }
-
- // Allow custom headers/mimetypes and early abort
- if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
- // Abort if not done already and return
- return jqXHR.abort();
- }
-
- // aborting is no longer a cancellation
- strAbort = "abort";
-
- // Install callbacks on deferreds
- for ( i in { success: 1, error: 1, complete: 1 } ) {
- jqXHR[ i ]( s[ i ] );
- }
-
- // Get transport
- transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
- // If no transport, we auto-abort
- if ( !transport ) {
- done( -1, "No Transport" );
- } else {
- jqXHR.readyState = 1;
-
- // Send global event
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
- }
- // Timeout
- if ( s.async && s.timeout > 0 ) {
- timeoutTimer = setTimeout(function() {
- jqXHR.abort("timeout");
- }, s.timeout );
- }
-
- try {
- state = 1;
- transport.send( requestHeaders, done );
- } catch ( e ) {
- // Propagate exception as error if not done
- if ( state < 2 ) {
- done( -1, e );
- // Simply rethrow otherwise
- } else {
- throw e;
- }
- }
- }
-
- // Callback for when everything is done
- function done( status, nativeStatusText, responses, headers ) {
- var isSuccess, success, error, response, modified,
- statusText = nativeStatusText;
-
- // Called once
- if ( state === 2 ) {
- return;
- }
-
- // State is "done" now
- state = 2;
-
- // Clear timeout if it exists
- if ( timeoutTimer ) {
- clearTimeout( timeoutTimer );
- }
-
- // Dereference transport for early garbage collection
- // (no matter how long the jqXHR object will be used)
- transport = undefined;
-
- // Cache response headers
- responseHeadersString = headers || "";
-
- // Set readyState
- jqXHR.readyState = status > 0 ? 4 : 0;
-
- // Determine if successful
- isSuccess = status >= 200 && status < 300 || status === 304;
-
- // Get response data
- if ( responses ) {
- response = ajaxHandleResponses( s, jqXHR, responses );
- }
-
- // Convert no matter what (that way responseXXX fields are always set)
- response = ajaxConvert( s, response, jqXHR, isSuccess );
-
- // If successful, handle type chaining
- if ( isSuccess ) {
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- modified = jqXHR.getResponseHeader("Last-Modified");
- if ( modified ) {
- jQuery.lastModified[ cacheURL ] = modified;
- }
- modified = jqXHR.getResponseHeader("etag");
- if ( modified ) {
- jQuery.etag[ cacheURL ] = modified;
- }
- }
-
- // if no content
- if ( status === 204 || s.type === "HEAD" ) {
- statusText = "nocontent";
-
- // if not modified
- } else if ( status === 304 ) {
- statusText = "notmodified";
-
- // If we have data, let's convert it
- } else {
- statusText = response.state;
- success = response.data;
- error = response.error;
- isSuccess = !error;
- }
- } else {
- // We extract error from statusText
- // then normalize statusText and status for non-aborts
- error = statusText;
- if ( status || !statusText ) {
- statusText = "error";
- if ( status < 0 ) {
- status = 0;
- }
- }
- }
-
- // Set data for the fake xhr object
- jqXHR.status = status;
- jqXHR.statusText = ( nativeStatusText || statusText ) + "";
-
- // Success/Error
- if ( isSuccess ) {
- deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
- } else {
- deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
- }
-
- // Status-dependent callbacks
- jqXHR.statusCode( statusCode );
- statusCode = undefined;
-
- if ( fireGlobals ) {
- globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
- [ jqXHR, s, isSuccess ? success : error ] );
- }
-
- // Complete
- completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
- // Handle the global AJAX counter
- if ( !( --jQuery.active ) ) {
- jQuery.event.trigger("ajaxStop");
- }
- }
- }
-
- return jqXHR;
- },
-
- getJSON: function( url, data, callback ) {
- return jQuery.get( url, data, callback, "json" );
- },
-
- getScript: function( url, callback ) {
- return jQuery.get( url, undefined, callback, "script" );
- }
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
- jQuery[ method ] = function( url, data, callback, type ) {
- // shift arguments if data argument was omitted
- if ( jQuery.isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = undefined;
- }
-
- return jQuery.ajax({
- url: url,
- type: method,
- dataType: type,
- data: data,
- success: callback
- });
- };
-});
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
- jQuery.fn[ type ] = function( fn ) {
- return this.on( type, fn );
- };
-});
-
-
-jQuery._evalUrl = function( url ) {
- return jQuery.ajax({
- url: url,
- type: "GET",
- dataType: "script",
- async: false,
- global: false,
- "throws": true
- });
-};
-
-
-jQuery.fn.extend({
- wrapAll: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapAll( html.call(this, i) );
- });
- }
-
- if ( this[0] ) {
- // The elements to wrap the target around
- var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
- if ( this[0].parentNode ) {
- wrap.insertBefore( this[0] );
- }
-
- wrap.map(function() {
- var elem = this;
-
- while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
- elem = elem.firstChild;
- }
-
- return elem;
- }).append( this );
- }
-
- return this;
- },
-
- wrapInner: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapInner( html.call(this, i) );
- });
- }
-
- return this.each(function() {
- var self = jQuery( this ),
- contents = self.contents();
-
- if ( contents.length ) {
- contents.wrapAll( html );
-
- } else {
- self.append( html );
- }
- });
- },
-
- wrap: function( html ) {
- var isFunction = jQuery.isFunction( html );
-
- return this.each(function(i) {
- jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
- });
- },
-
- unwrap: function() {
- return this.parent().each(function() {
- if ( !jQuery.nodeName( this, "body" ) ) {
- jQuery( this ).replaceWith( this.childNodes );
- }
- }).end();
- }
-});
-
-
-jQuery.expr.filters.hidden = function( elem ) {
- // Support: Opera <= 12.12
- // Opera reports offsetWidths and offsetHeights less than zero on some elements
- return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
- (!support.reliableHiddenOffsets() &&
- ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
-};
-
-jQuery.expr.filters.visible = function( elem ) {
- return !jQuery.expr.filters.hidden( elem );
-};
-
-
-
-
-var r20 = /%20/g,
- rbracket = /\[\]$/,
- rCRLF = /\r?\n/g,
- rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
- rsubmittable = /^(?:input|select|textarea|keygen)/i;
-
-function buildParams( prefix, obj, traditional, add ) {
- var name;
-
- if ( jQuery.isArray( obj ) ) {
- // Serialize array item.
- jQuery.each( obj, function( i, v ) {
- if ( traditional || rbracket.test( prefix ) ) {
- // Treat each array item as a scalar.
- add( prefix, v );
-
- } else {
- // Item is non-scalar (array or object), encode its numeric index.
- buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
- }
- });
-
- } else if ( !traditional && jQuery.type( obj ) === "object" ) {
- // Serialize object item.
- for ( name in obj ) {
- buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
- }
-
- } else {
- // Serialize scalar item.
- add( prefix, obj );
- }
-}
-
-// Serialize an array of form elements or a set of
-// key/values into a query string
-jQuery.param = function( a, traditional ) {
- var prefix,
- s = [],
- add = function( key, value ) {
- // If value is a function, invoke it and return its value
- value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
- s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
- };
-
- // Set traditional to true for jQuery <= 1.3.2 behavior.
- if ( traditional === undefined ) {
- traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
- }
-
- // If an array was passed in, assume that it is an array of form elements.
- if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
- // Serialize the form elements
- jQuery.each( a, function() {
- add( this.name, this.value );
- });
-
- } else {
- // If traditional, encode the "old" way (the way 1.3.2 or older
- // did it), otherwise encode params recursively.
- for ( prefix in a ) {
- buildParams( prefix, a[ prefix ], traditional, add );
- }
- }
-
- // Return the resulting serialization
- return s.join( "&" ).replace( r20, "+" );
-};
-
-jQuery.fn.extend({
- serialize: function() {
- return jQuery.param( this.serializeArray() );
- },
- serializeArray: function() {
- return this.map(function() {
- // Can add propHook for "elements" to filter or add form elements
- var elements = jQuery.prop( this, "elements" );
- return elements ? jQuery.makeArray( elements ) : this;
- })
- .filter(function() {
- var type = this.type;
- // Use .is(":disabled") so that fieldset[disabled] works
- return this.name && !jQuery( this ).is( ":disabled" ) &&
- rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
- ( this.checked || !rcheckableType.test( type ) );
- })
- .map(function( i, elem ) {
- var val = jQuery( this ).val();
-
- return val == null ?
- null :
- jQuery.isArray( val ) ?
- jQuery.map( val, function( val ) {
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }) :
- { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }).get();
- }
-});
-
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?
- // Support: IE6+
- function() {
-
- // XHR cannot access local files, always use ActiveX for that case
- return !this.isLocal &&
-
- // Support: IE7-8
- // oldIE XHR does not support non-RFC2616 methods (#13240)
- // See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx
- // and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9
- // Although this check for six methods instead of eight
- // since IE also does not support "trace" and "connect"
- /^(get|post|head|put|delete|options)$/i.test( this.type ) &&
-
- createStandardXHR() || createActiveXHR();
- } :
- // For all other browsers, use the standard XMLHttpRequest object
- createStandardXHR;
-
-var xhrId = 0,
- xhrCallbacks = {},
- xhrSupported = jQuery.ajaxSettings.xhr();
-
-// Support: IE<10
-// Open requests must be manually aborted on unload (#5280)
-if ( window.ActiveXObject ) {
- jQuery( window ).on( "unload", function() {
- for ( var key in xhrCallbacks ) {
- xhrCallbacks[ key ]( undefined, true );
- }
- });
-}
-
-// Determine support properties
-support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
-xhrSupported = support.ajax = !!xhrSupported;
-
-// Create transport if the browser can provide an xhr
-if ( xhrSupported ) {
-
- jQuery.ajaxTransport(function( options ) {
- // Cross domain only allowed if supported through XMLHttpRequest
- if ( !options.crossDomain || support.cors ) {
-
- var callback;
-
- return {
- send: function( headers, complete ) {
- var i,
- xhr = options.xhr(),
- id = ++xhrId;
-
- // Open the socket
- xhr.open( options.type, options.url, options.async, options.username, options.password );
-
- // Apply custom fields if provided
- if ( options.xhrFields ) {
- for ( i in options.xhrFields ) {
- xhr[ i ] = options.xhrFields[ i ];
- }
- }
-
- // Override mime type if needed
- if ( options.mimeType && xhr.overrideMimeType ) {
- xhr.overrideMimeType( options.mimeType );
- }
-
- // X-Requested-With header
- // For cross-domain requests, seeing as conditions for a preflight are
- // akin to a jigsaw puzzle, we simply never set it to be sure.
- // (it can always be set on a per-request basis or even using ajaxSetup)
- // For same-domain requests, won't change header if already provided.
- if ( !options.crossDomain && !headers["X-Requested-With"] ) {
- headers["X-Requested-With"] = "XMLHttpRequest";
- }
-
- // Set headers
- for ( i in headers ) {
- // Support: IE<9
- // IE's ActiveXObject throws a 'Type Mismatch' exception when setting
- // request header to a null-value.
- //
- // To keep consistent with other XHR implementations, cast the value
- // to string and ignore `undefined`.
- if ( headers[ i ] !== undefined ) {
- xhr.setRequestHeader( i, headers[ i ] + "" );
- }
- }
-
- // Do send the request
- // This may raise an exception which is actually
- // handled in jQuery.ajax (so no try/catch here)
- xhr.send( ( options.hasContent && options.data ) || null );
-
- // Listener
- callback = function( _, isAbort ) {
- var status, statusText, responses;
-
- // Was never called and is aborted or complete
- if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
- // Clean up
- delete xhrCallbacks[ id ];
- callback = undefined;
- xhr.onreadystatechange = jQuery.noop;
-
- // Abort manually if needed
- if ( isAbort ) {
- if ( xhr.readyState !== 4 ) {
- xhr.abort();
- }
- } else {
- responses = {};
- status = xhr.status;
-
- // Support: IE<10
- // Accessing binary-data responseText throws an exception
- // (#11426)
- if ( typeof xhr.responseText === "string" ) {
- responses.text = xhr.responseText;
- }
-
- // Firefox throws an exception when accessing
- // statusText for faulty cross-domain requests
- try {
- statusText = xhr.statusText;
- } catch( e ) {
- // We normalize with Webkit giving an empty statusText
- statusText = "";
- }
-
- // Filter status for non standard behaviors
-
- // If the request is local and we have data: assume a success
- // (success with no data won't get notified, that's the best we
- // can do given current implementations)
- if ( !status && options.isLocal && !options.crossDomain ) {
- status = responses.text ? 200 : 404;
- // IE - #1450: sometimes returns 1223 when it should be 204
- } else if ( status === 1223 ) {
- status = 204;
- }
- }
- }
-
- // Call complete if needed
- if ( responses ) {
- complete( status, statusText, responses, xhr.getAllResponseHeaders() );
- }
- };
-
- if ( !options.async ) {
- // if we're in sync mode we fire the callback
- callback();
- } else if ( xhr.readyState === 4 ) {
- // (IE6 & IE7) if it's in cache and has been
- // retrieved directly we need to fire the callback
- setTimeout( callback );
- } else {
- // Add to the list of active xhr callbacks
- xhr.onreadystatechange = xhrCallbacks[ id ] = callback;
- }
- },
-
- abort: function() {
- if ( callback ) {
- callback( undefined, true );
- }
- }
- };
- }
- });
-}
-
-// Functions to create xhrs
-function createStandardXHR() {
- try {
- return new window.XMLHttpRequest();
- } catch( e ) {}
-}
-
-function createActiveXHR() {
- try {
- return new window.ActiveXObject( "Microsoft.XMLHTTP" );
- } catch( e ) {}
-}
-
-
-
-
-// Install script dataType
-jQuery.ajaxSetup({
- accepts: {
- script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
- },
- contents: {
- script: /(?:java|ecma)script/
- },
- converters: {
- "text script": function( text ) {
- jQuery.globalEval( text );
- return text;
- }
- }
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
- if ( s.cache === undefined ) {
- s.cache = false;
- }
- if ( s.crossDomain ) {
- s.type = "GET";
- s.global = false;
- }
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
- // This transport only deals with cross domain requests
- if ( s.crossDomain ) {
-
- var script,
- head = document.head || jQuery("head")[0] || document.documentElement;
-
- return {
-
- send: function( _, callback ) {
-
- script = document.createElement("script");
-
- script.async = true;
-
- if ( s.scriptCharset ) {
- script.charset = s.scriptCharset;
- }
-
- script.src = s.url;
-
- // Attach handlers for all browsers
- script.onload = script.onreadystatechange = function( _, isAbort ) {
-
- if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
- // Handle memory leak in IE
- script.onload = script.onreadystatechange = null;
-
- // Remove the script
- if ( script.parentNode ) {
- script.parentNode.removeChild( script );
- }
-
- // Dereference the script
- script = null;
-
- // Callback if not abort
- if ( !isAbort ) {
- callback( 200, "success" );
- }
- }
- };
-
- // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
- // Use native DOM manipulation to avoid our domManip AJAX trickery
- head.insertBefore( script, head.firstChild );
- },
-
- abort: function() {
- if ( script ) {
- script.onload( undefined, true );
- }
- }
- };
- }
-});
-
-
-
-
-var oldCallbacks = [],
- rjsonp = /(=)\?(?=&|$)|\?\?/;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
- jsonp: "callback",
- jsonpCallback: function() {
- var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
- this[ callback ] = true;
- return callback;
- }
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
- var callbackName, overwritten, responseContainer,
- jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
- "url" :
- typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
- );
-
- // Handle iff the expected data type is "jsonp" or we have a parameter to set
- if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
-
- // Get callback name, remembering preexisting value associated with it
- callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
- s.jsonpCallback() :
- s.jsonpCallback;
-
- // Insert callback into url or form data
- if ( jsonProp ) {
- s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
- } else if ( s.jsonp !== false ) {
- s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
- }
-
- // Use data converter to retrieve json after script execution
- s.converters["script json"] = function() {
- if ( !responseContainer ) {
- jQuery.error( callbackName + " was not called" );
- }
- return responseContainer[ 0 ];
- };
-
- // force json dataType
- s.dataTypes[ 0 ] = "json";
-
- // Install callback
- overwritten = window[ callbackName ];
- window[ callbackName ] = function() {
- responseContainer = arguments;
- };
-
- // Clean-up function (fires after converters)
- jqXHR.always(function() {
- // Restore preexisting value
- window[ callbackName ] = overwritten;
-
- // Save back as free
- if ( s[ callbackName ] ) {
- // make sure that re-using the options doesn't screw things around
- s.jsonpCallback = originalSettings.jsonpCallback;
-
- // save the callback name for future use
- oldCallbacks.push( callbackName );
- }
-
- // Call if it was a function and we have a response
- if ( responseContainer && jQuery.isFunction( overwritten ) ) {
- overwritten( responseContainer[ 0 ] );
- }
-
- responseContainer = overwritten = undefined;
- });
-
- // Delegate to script
- return "script";
- }
-});
-
-
-
-
-// data: string of html
-// context (optional): If specified, the fragment will be created in this context, defaults to document
-// keepScripts (optional): If true, will include scripts passed in the html string
-jQuery.parseHTML = function( data, context, keepScripts ) {
- if ( !data || typeof data !== "string" ) {
- return null;
- }
- if ( typeof context === "boolean" ) {
- keepScripts = context;
- context = false;
- }
- context = context || document;
-
- var parsed = rsingleTag.exec( data ),
- scripts = !keepScripts && [];
-
- // Single tag
- if ( parsed ) {
- return [ context.createElement( parsed[1] ) ];
- }
-
- parsed = jQuery.buildFragment( [ data ], context, scripts );
-
- if ( scripts && scripts.length ) {
- jQuery( scripts ).remove();
- }
-
- return jQuery.merge( [], parsed.childNodes );
-};
-
-
-// Keep a copy of the old load method
-var _load = jQuery.fn.load;
-
-/**
- * Load a url into a page
- */
-jQuery.fn.load = function( url, params, callback ) {
- if ( typeof url !== "string" && _load ) {
- return _load.apply( this, arguments );
- }
-
- var selector, response, type,
- self = this,
- off = url.indexOf(" ");
-
- if ( off >= 0 ) {
- selector = jQuery.trim( url.slice( off, url.length ) );
- url = url.slice( 0, off );
- }
-
- // If it's a function
- if ( jQuery.isFunction( params ) ) {
-
- // We assume that it's the callback
- callback = params;
- params = undefined;
-
- // Otherwise, build a param string
- } else if ( params && typeof params === "object" ) {
- type = "POST";
- }
-
- // If we have elements to modify, make the request
- if ( self.length > 0 ) {
- jQuery.ajax({
- url: url,
-
- // if "type" variable is undefined, then "GET" method will be used
- type: type,
- dataType: "html",
- data: params
- }).done(function( responseText ) {
-
- // Save response for use in complete callback
- response = arguments;
-
- self.html( selector ?
-
- // If a selector was specified, locate the right elements in a dummy div
- // Exclude scripts to avoid IE 'Permission Denied' errors
- jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
-
- // Otherwise use the full result
- responseText );
-
- }).complete( callback && function( jqXHR, status ) {
- self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
- });
- }
-
- return this;
-};
-
-
-
-
-jQuery.expr.filters.animated = function( elem ) {
- return jQuery.grep(jQuery.timers, function( fn ) {
- return elem === fn.elem;
- }).length;
-};
-
-
-
-
-
-var docElem = window.document.documentElement;
-
-/**
- * Gets a window from an element
- */
-function getWindow( elem ) {
- return jQuery.isWindow( elem ) ?
- elem :
- elem.nodeType === 9 ?
- elem.defaultView || elem.parentWindow :
- false;
-}
-
-jQuery.offset = {
- setOffset: function( elem, options, i ) {
- var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
- position = jQuery.css( elem, "position" ),
- curElem = jQuery( elem ),
- props = {};
-
- // set position first, in-case top/left are set even on static elem
- if ( position === "static" ) {
- elem.style.position = "relative";
- }
-
- curOffset = curElem.offset();
- curCSSTop = jQuery.css( elem, "top" );
- curCSSLeft = jQuery.css( elem, "left" );
- calculatePosition = ( position === "absolute" || position === "fixed" ) &&
- jQuery.inArray("auto", [ curCSSTop, curCSSLeft ] ) > -1;
-
- // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
- if ( calculatePosition ) {
- curPosition = curElem.position();
- curTop = curPosition.top;
- curLeft = curPosition.left;
- } else {
- curTop = parseFloat( curCSSTop ) || 0;
- curLeft = parseFloat( curCSSLeft ) || 0;
- }
-
- if ( jQuery.isFunction( options ) ) {
- options = options.call( elem, i, curOffset );
- }
-
- if ( options.top != null ) {
- props.top = ( options.top - curOffset.top ) + curTop;
- }
- if ( options.left != null ) {
- props.left = ( options.left - curOffset.left ) + curLeft;
- }
-
- if ( "using" in options ) {
- options.using.call( elem, props );
- } else {
- curElem.css( props );
- }
- }
-};
-
-jQuery.fn.extend({
- offset: function( options ) {
- if ( arguments.length ) {
- return options === undefined ?
- this :
- this.each(function( i ) {
- jQuery.offset.setOffset( this, options, i );
- });
- }
-
- var docElem, win,
- box = { top: 0, left: 0 },
- elem = this[ 0 ],
- doc = elem && elem.ownerDocument;
-
- if ( !doc ) {
- return;
- }
-
- docElem = doc.documentElement;
-
- // Make sure it's not a disconnected DOM node
- if ( !jQuery.contains( docElem, elem ) ) {
- return box;
- }
-
- // If we don't have gBCR, just use 0,0 rather than error
- // BlackBerry 5, iOS 3 (original iPhone)
- if ( typeof elem.getBoundingClientRect !== strundefined ) {
- box = elem.getBoundingClientRect();
- }
- win = getWindow( doc );
- return {
- top: box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 ),
- left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
- };
- },
-
- position: function() {
- if ( !this[ 0 ] ) {
- return;
- }
-
- var offsetParent, offset,
- parentOffset = { top: 0, left: 0 },
- elem = this[ 0 ];
-
- // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
- if ( jQuery.css( elem, "position" ) === "fixed" ) {
- // we assume that getBoundingClientRect is available when computed position is fixed
- offset = elem.getBoundingClientRect();
- } else {
- // Get *real* offsetParent
- offsetParent = this.offsetParent();
-
- // Get correct offsets
- offset = this.offset();
- if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
- parentOffset = offsetParent.offset();
- }
-
- // Add offsetParent borders
- parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
- parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
- }
-
- // Subtract parent offsets and element margins
- // note: when an element has margin: auto the offsetLeft and marginLeft
- // are the same in Safari causing offset.left to incorrectly be 0
- return {
- top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
- left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
- };
- },
-
- offsetParent: function() {
- return this.map(function() {
- var offsetParent = this.offsetParent || docElem;
-
- while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) {
- offsetParent = offsetParent.offsetParent;
- }
- return offsetParent || docElem;
- });
- }
-});
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
- var top = /Y/.test( prop );
-
- jQuery.fn[ method ] = function( val ) {
- return access( this, function( elem, method, val ) {
- var win = getWindow( elem );
-
- if ( val === undefined ) {
- return win ? (prop in win) ? win[ prop ] :
- win.document.documentElement[ method ] :
- elem[ method ];
- }
-
- if ( win ) {
- win.scrollTo(
- !top ? val : jQuery( win ).scrollLeft(),
- top ? val : jQuery( win ).scrollTop()
- );
-
- } else {
- elem[ method ] = val;
- }
- }, method, val, arguments.length, null );
- };
-});
-
-// Add the top/left cssHooks using jQuery.fn.position
-// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
-// getComputedStyle returns percent when specified for top/left/bottom/right
-// rather than make the css module depend on the offset module, we just check for it here
-jQuery.each( [ "top", "left" ], function( i, prop ) {
- jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
- function( elem, computed ) {
- if ( computed ) {
- computed = curCSS( elem, prop );
- // if curCSS returns percentage, fallback to offset
- return rnumnonpx.test( computed ) ?
- jQuery( elem ).position()[ prop ] + "px" :
- computed;
- }
- }
- );
-});
-
-
-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
- jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
- // margin is only for outerHeight, outerWidth
- jQuery.fn[ funcName ] = function( margin, value ) {
- var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
- extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
-
- return access( this, function( elem, type, value ) {
- var doc;
-
- if ( jQuery.isWindow( elem ) ) {
- // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
- // isn't a whole lot we can do. See pull request at this URL for discussion:
- // https://github.com/jquery/jquery/pull/764
- return elem.document.documentElement[ "client" + name ];
- }
-
- // Get document width or height
- if ( elem.nodeType === 9 ) {
- doc = elem.documentElement;
-
- // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
- // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
- return Math.max(
- elem.body[ "scroll" + name ], doc[ "scroll" + name ],
- elem.body[ "offset" + name ], doc[ "offset" + name ],
- doc[ "client" + name ]
- );
- }
-
- return value === undefined ?
- // Get width or height on the element, requesting but not forcing parseFloat
- jQuery.css( elem, type, extra ) :
-
- // Set width or height on the element
- jQuery.style( elem, type, value, extra );
- }, type, chainable ? margin : undefined, chainable, null );
- };
- });
-});
-
-
-// The number of elements contained in the matched element set
-jQuery.fn.size = function() {
- return this.length;
-};
-
-jQuery.fn.andSelf = jQuery.fn.addBack;
-
-
-
-
-// Register as a named AMD module, since jQuery can be concatenated with other
-// files that may use define, but not via a proper concatenation script that
-// understands anonymous AMD modules. A named AMD is safest and most robust
-// way to register. Lowercase jquery is used because AMD module names are
-// derived from file names, and jQuery is normally delivered in a lowercase
-// file name. Do this after creating the global so that if an AMD module wants
-// to call noConflict to hide this version of jQuery, it will work.
-
-// Note that for maximum portability, libraries that are not jQuery should
-// declare themselves as anonymous modules, and avoid setting a global if an
-// AMD loader is present. jQuery is a special case. For more information, see
-// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
-
-if ( typeof define === "function" && define.amd ) {
- define( "jquery", [], function() {
- return jQuery;
- });
-}
-
-
-
-
-var
- // Map over jQuery in case of overwrite
- _jQuery = window.jQuery,
-
- // Map over the $ in case of overwrite
- _$ = window.$;
-
-jQuery.noConflict = function( deep ) {
- if ( window.$ === jQuery ) {
- window.$ = _$;
- }
-
- if ( deep && window.jQuery === jQuery ) {
- window.jQuery = _jQuery;
- }
-
- return jQuery;
-};
-
-// Expose jQuery and $ identifiers, even in
-// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
-// and CommonJS for browser emulators (#13566)
-if ( typeof noGlobal === strundefined ) {
- window.jQuery = window.$ = jQuery;
-}
-
-
-
-
-return jQuery;
-
-}));
diff --git a/app/javascripts/jquery.json.js b/app/javascripts/jquery.json.js
deleted file mode 100644
index 3a664d10..00000000
--- a/app/javascripts/jquery.json.js
+++ /dev/null
@@ -1,201 +0,0 @@
-// License: MIT
-
-/**
- * jQuery JSON plugin 2.4.0
- *
- * @author Brantley Harris, 2009-2011
- * @author Timo Tijhof, 2011-2012
- * @source This plugin is heavily influenced by MochiKit's serializeJSON, which is
- * copyrighted 2005 by Bob Ippolito.
- * @source Brantley Harris wrote this plugin. It is based somewhat on the JSON.org
- * website's http://www.json.org/json2.js, which proclaims:
- * "NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.", a sentiment that
- * I uphold.
- * @license MIT License <http://www.opensource.org/licenses/mit-license.php>
- */
-(function ($) {
- 'use strict';
-
- var escape = /["\\\x00-\x1f\x7f-\x9f]/g,
- meta = {
- '\b': '\\b',
- '\t': '\\t',
- '\n': '\\n',
- '\f': '\\f',
- '\r': '\\r',
- '"' : '\\"',
- '\\': '\\\\'
- },
- hasOwn = Object.prototype.hasOwnProperty;
-
- /**
- * jQuery.toJSON
- * Converts the given argument into a JSON representation.
- *
- * @param o {Mixed} The json-serializable *thing* to be converted
- *
- * If an object has a toJSON prototype, that will be used to get the representation.
- * Non-integer/string keys are skipped in the object, as are keys that point to a
- * function.
- *
- */
- $.toJSON = typeof JSON === 'object' && JSON.stringify ? JSON.stringify : function (o) {
- if (o === null) {
- return 'null';
- }
-
- var pairs, k, name, val,
- type = $.type(o);
-
- if (type === 'undefined') {
- return undefined;
- }
-
- // Also covers instantiated Number and Boolean objects,
- // which are typeof 'object' but thanks to $.type, we
- // catch them here. I don't know whether it is right
- // or wrong that instantiated primitives are not
- // exported to JSON as an {"object":..}.
- // We choose this path because that's what the browsers did.
- if (type === 'number' || type === 'boolean') {
- return String(o);
- }
- if (type === 'string') {
- return $.quoteString(o);
- }
- if (typeof o.toJSON === 'function') {
- return $.toJSON(o.toJSON());
- }
- if (type === 'date') {
- var month = o.getUTCMonth() + 1,
- day = o.getUTCDate(),
- year = o.getUTCFullYear(),
- hours = o.getUTCHours(),
- minutes = o.getUTCMinutes(),
- seconds = o.getUTCSeconds(),
- milli = o.getUTCMilliseconds();
-
- if (month < 10) {
- month = '0' + month;
- }
- if (day < 10) {
- day = '0' + day;
- }
- if (hours < 10) {
- hours = '0' + hours;
- }
- if (minutes < 10) {
- minutes = '0' + minutes;
- }
- if (seconds < 10) {
- seconds = '0' + seconds;
- }
- if (milli < 100) {
- milli = '0' + milli;
- }
- if (milli < 10) {
- milli = '0' + milli;
- }
- return '"' + year + '-' + month + '-' + day + 'T' +
- hours + ':' + minutes + ':' + seconds +
- '.' + milli + 'Z"';
- }
-
- pairs = [];
-
- if ($.isArray(o)) {
- for (k = 0; k < o.length; k++) {
- pairs.push($.toJSON(o[k]) || 'null');
- }
- return '[' + pairs.join(',') + ']';
- }
-
- // Any other object (plain object, RegExp, ..)
- // Need to do typeof instead of $.type, because we also
- // want to catch non-plain objects.
- if (typeof o === 'object') {
- for (k in o) {
- // Only include own properties,
- // Filter out inherited prototypes
- if (hasOwn.call(o, k)) {
- // Keys must be numerical or string. Skip others
- type = typeof k;
- if (type === 'number') {
- name = '"' + k + '"';
- } else if (type === 'string') {
- name = $.quoteString(k);
- } else {
- continue;
- }
- type = typeof o[k];
-
- // Invalid values like these return undefined
- // from toJSON, however those object members
- // shouldn't be included in the JSON string at all.
- if (type !== 'function' && type !== 'undefined') {
- val = $.toJSON(o[k]);
- pairs.push(name + ':' + val);
- }
- }
- }
- return '{' + pairs.join(',') + '}';
- }
- };
-
- /**
- * jQuery.evalJSON
- * Evaluates a given json string.
- *
- * @param str {String}
- */
- $.evalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) {
- /*jshint evil: true */
- return eval('(' + str + ')');
- };
-
- /**
- * jQuery.secureEvalJSON
- * Evals JSON in a way that is *more* secure.
- *
- * @param str {String}
- */
- $.secureEvalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) {
- var filtered =
- str
- .replace(/\\["\\\/bfnrtu]/g, '@')
- .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
- .replace(/(?:^|:|,)(?:\s*\[)+/g, '');
-
- if (/^[\],:{}\s]*$/.test(filtered)) {
- /*jshint evil: true */
- return eval('(' + str + ')');
- }
- throw new SyntaxError('Error parsing JSON, source is not valid.');
- };
-
- /**
- * jQuery.quoteString
- * Returns a string-repr of a string, escaping quotes intelligently.
- * Mostly a support function for toJSON.
- * Examples:
- * >>> jQuery.quoteString('apple')
- * "apple"
- *
- * >>> jQuery.quoteString('"Where are we going?", she asked.')
- * "\"Where are we going?\", she asked."
- */
- $.quoteString = function (str) {
- if (str.match(escape)) {
- return '"' + str.replace(escape, function (a) {
- var c = meta[a];
- if (typeof c === 'string') {
- return c;
- }
- c = a.charCodeAt();
- return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
- }) + '"';
- }
- return '"' + str + '"';
- };
-
-}(jQuery));
diff --git a/app/javascripts/jquery.placeholder.js b/app/javascripts/jquery.placeholder.js
deleted file mode 100644
index 7b815294..00000000
--- a/app/javascripts/jquery.placeholder.js
+++ /dev/null
@@ -1,157 +0,0 @@
-/*! http://mths.be/placeholder v2.0.7 by @mathias */
-;(function(window, document, $) {
-
- var isInputSupported = 'placeholder' in document.createElement('input'),
- isTextareaSupported = 'placeholder' in document.createElement('textarea'),
- prototype = $.fn,
- valHooks = $.valHooks,
- hooks,
- placeholder;
-
- if (isInputSupported && isTextareaSupported) {
-
- placeholder = prototype.placeholder = function() {
- return this;
- };
-
- placeholder.input = placeholder.textarea = true;
-
- } else {
-
- placeholder = prototype.placeholder = function() {
- var $this = this;
- $this
- .filter((isInputSupported ? 'textarea' : ':input') + '[placeholder]')
- .not('.placeholder')
- .bind({
- 'focus.placeholder': clearPlaceholder,
- 'blur.placeholder': setPlaceholder
- })
- .data('placeholder-enabled', true)
- .trigger('blur.placeholder');
- return $this;
- };
-
- placeholder.input = isInputSupported;
- placeholder.textarea = isTextareaSupported;
-
- hooks = {
- 'get': function(element) {
- var $element = $(element);
- return $element.data('placeholder-enabled') && $element.hasClass('placeholder') ? '' : element.value;
- },
- 'set': function(element, value) {
- var $element = $(element);
- if (!$element.data('placeholder-enabled')) {
- return element.value = value;
- }
- if (value == '') {
- element.value = value;
- // Issue #56: Setting the placeholder causes problems if the element continues to have focus.
- if (element != document.activeElement) {
- // We can't use `triggerHandler` here because of dummy text/password inputs :(
- setPlaceholder.call(element);
- }
- } else if ($element.hasClass('placeholder')) {
- clearPlaceholder.call(element, true, value) || (element.value = value);
- } else {
- element.value = value;
- }
- // `set` can not return `undefined`; see http://jsapi.info/jquery/1.7.1/val#L2363
- return $element;
- }
- };
-
- isInputSupported || (valHooks.input = hooks);
- isTextareaSupported || (valHooks.textarea = hooks);
-
- $(function() {
- // Look for forms
- $(document).delegate('form', 'submit.placeholder', function() {
- // Clear the placeholder values so they don't get submitted
- var $inputs = $('.placeholder', this).each(clearPlaceholder);
- setTimeout(function() {
- $inputs.each(setPlaceholder);
- }, 10);
- });
- });
-
- // Clear placeholder values upon page reload
- $(window).bind('beforeunload.placeholder', function() {
- $('.placeholder').each(function() {
- this.value = '';
- });
- });
-
- }
-
- function args(elem) {
- // Return an object of element attributes
- var newAttrs = {},
- rinlinejQuery = /^jQuery\d+$/;
- $.each(elem.attributes, function(i, attr) {
- if (attr.specified && !rinlinejQuery.test(attr.name)) {
- newAttrs[attr.name] = attr.value;
- }
- });
- return newAttrs;
- }
-
- function clearPlaceholder(event, value) {
- var input = this,
- $input = $(input);
- if (input.value == $input.attr('placeholder') && $input.hasClass('placeholder')) {
- if ($input.data('placeholder-password')) {
- $input = $input.hide().next().show().attr('id', $input.removeAttr('id').data('placeholder-id'));
- // If `clearPlaceholder` was called from `$.valHooks.input.set`
- if (event === true) {
- return $input[0].value = value;
- }
- $input.focus();
- } else {
- input.value = '';
- $input.removeClass('placeholder');
- input == document.activeElement && input.select();
- }
- }
- }
-
- function setPlaceholder() {
- var $replacement,
- input = this,
- $input = $(input),
- $origInput = $input,
- id = this.id;
- if (input.value == '') {
- if (input.type == 'password') {
- if (!$input.data('placeholder-textinput')) {
- try {
- $replacement = $input.clone().attr({ 'type': 'text' });
- } catch(e) {
- $replacement = $('<input>').attr($.extend(args(this), { 'type': 'text' }));
- }
- $replacement
- .removeAttr('name')
- .data({
- 'placeholder-password': true,
- 'placeholder-id': id
- })
- .bind('focus.placeholder', clearPlaceholder);
- $input
- .data({
- 'placeholder-textinput': $replacement,
- 'placeholder-id': id
- })
- .before($replacement);
- }
- $input = $input.removeAttr('id').hide().prev().attr('id', id).show();
- // Note: `$input[0] != input` now!
- }
- $input.addClass('placeholder');
- $input[0].value = $input.attr('placeholder');
- } else {
- $input.removeClass('placeholder');
- }
- }
-
-}(this, document, jQuery)); \ No newline at end of file
diff --git a/app/javascripts/jquery.scrollto.js b/app/javascripts/jquery.scrollto.js
deleted file mode 100644
index 69d39abf..00000000
--- a/app/javascripts/jquery.scrollto.js
+++ /dev/null
@@ -1,186 +0,0 @@
-/*!
- * jQuery.ScrollTo
- * Copyright (c) 2007-2014 Ariel Flesler - aflesler<a>gmail<d>com | http://flesler.blogspot.com
- * Licensed under MIT
- * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
- * @projectDescription Easy element scrolling using jQuery.
- * @author Ariel Flesler
- * @version 1.4.9
- */
-
-;(function (factory) {
- // AMD Support
- if (typeof define === 'function' && define.amd) {
- define(['jquery'], factory);
- } else {
- factory(jQuery);
- }
-}(function ($) {
-
- var $scrollTo = $.scrollTo = function( target, duration, settings ) {
- return $(window).scrollTo( target, duration, settings );
- };
-
- $scrollTo.defaults = {
- axis:'xy',
- duration: parseFloat($.fn.jquery) >= 1.3 ? 0 : 1,
- limit:true
- };
-
- // Returns the element that needs to be animated to scroll the window.
- // Kept for backwards compatibility (specially for localScroll & serialScroll)
- $scrollTo.window = function( scope ) {
- return $(window)._scrollable();
- };
-
- // Hack, hack, hack :)
- // Returns the real elements to scroll (supports window/iframes, documents and regular nodes)
- $.fn._scrollable = function() {
- return this.map(function() {
- var elem = this,
- isWin = !elem.nodeName || $.inArray( elem.nodeName.toLowerCase(), ['iframe','#document','html','body'] ) != -1;
-
- if (!isWin)
- return elem;
-
- var doc = (elem.contentWindow || elem).document || elem.ownerDocument || elem;
-
- return /webkit/i.test(navigator.userAgent) || doc.compatMode == 'BackCompat' ?
- doc.body :
- doc.documentElement;
- });
- };
-
- $.fn.scrollTo = function( target, duration, settings ) {
- if (typeof duration == 'object') {
- settings = duration;
- duration = 0;
- }
- if (typeof settings == 'function')
- settings = { onAfter:settings };
-
- if (target == 'max')
- target = 9e9;
-
- settings = $.extend( {}, $scrollTo.defaults, settings );
- // Speed is still recognized for backwards compatibility
- duration = duration || settings.duration;
- // Make sure the settings are given right
- settings.queue = settings.queue && settings.axis.length > 1;
-
- if (settings.queue)
- // Let's keep the overall duration
- duration /= 2;
- settings.offset = both( settings.offset );
- settings.over = both( settings.over );
-
- return this._scrollable().each(function() {
- // Null target yields nothing, just like jQuery does
- if (target == null) return;
-
- var elem = this,
- $elem = $(elem),
- targ = target, toff, attr = {},
- win = $elem.is('html,body');
-
- switch (typeof targ) {
- // A number will pass the regex
- case 'number':
- case 'string':
- if (/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(targ)) {
- targ = both( targ );
- // We are done
- break;
- }
- // Relative selector, no break!
- targ = $(targ,this);
- if (!targ.length) return;
- case 'object':
- // DOMElement / jQuery
- if (targ.is || targ.style)
- // Get the real position of the target
- toff = (targ = $(targ)).offset();
- }
-
- var offset = $.isFunction(settings.offset) && settings.offset(elem, targ) || settings.offset;
-
- $.each( settings.axis.split(''), function( i, axis ) {
- var Pos = axis == 'x' ? 'Left' : 'Top',
- pos = Pos.toLowerCase(),
- key = 'scroll' + Pos,
- old = elem[key],
- max = $scrollTo.max(elem, axis);
-
- if (toff) {// jQuery / DOMElement
- attr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] );
-
- // If it's a dom element, reduce the margin
- if (settings.margin) {
- attr[key] -= parseInt(targ.css('margin'+Pos)) || 0;
- attr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0;
- }
-
- attr[key] += offset[pos] || 0;
-
- if(settings.over[pos])
- // Scroll to a fraction of its width/height
- attr[key] += targ[axis=='x'?'width':'height']() * settings.over[pos];
- } else {
- var val = targ[pos];
- // Handle percentage values
- attr[key] = val.slice && val.slice(-1) == '%' ?
- parseFloat(val) / 100 * max
- : val;
- }
-
- // Number or 'number'
- if (settings.limit && /^\d+$/.test(attr[key]))
- // Check the limits
- attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max );
-
- // Queueing axes
- if (!i && settings.queue) {
- // Don't waste time animating, if there's no need.
- if (old != attr[key])
- // Intermediate animation
- animate( settings.onAfterFirst );
- // Don't animate this axis again in the next iteration.
- delete attr[key];
- }
- });
-
- animate( settings.onAfter );
-
- function animate( callback ) {
- $elem.animate( attr, duration, settings.easing, callback && function() {
- callback.call(this, targ, settings);
- });
- };
-
- }).end();
- };
-
- // Max scrolling position, works on quirks mode
- // It only fails (not too badly) on IE, quirks mode.
- $scrollTo.max = function( elem, axis ) {
- var Dim = axis == 'x' ? 'Width' : 'Height',
- scroll = 'scroll'+Dim;
-
- if (!$(elem).is('html,body'))
- return elem[scroll] - $(elem)[Dim.toLowerCase()]();
-
- var size = 'client' + Dim,
- html = elem.ownerDocument.documentElement,
- body = elem.ownerDocument.body;
-
- return Math.max( html[scroll], body[scroll] )
- - Math.min( html[size] , body[size] );
- };
-
- function both( val ) {
- return $.isFunction(val) || typeof val == 'object' ? val : { top:val, left:val };
- };
-
- // AMD requirement
- return $scrollTo;
-}));
diff --git a/app/javascripts/jquery.textrange.js b/app/javascripts/jquery.textrange.js
deleted file mode 100644
index 20bd028c..00000000
--- a/app/javascripts/jquery.textrange.js
+++ /dev/null
@@ -1,14 +0,0 @@
-$.fn.selectRange = function(start, end) {
- return this.each(function() {
- if (this.setSelectionRange) {
- this.focus();
- this.setSelectionRange(start, end);
- } else if (this.createTextRange) {
- var range = this.createTextRange();
- range.collapse(true);
- range.moveEnd('character', end);
- range.moveStart('character', start);
- range.select();
- }
- });
-};
diff --git a/app/javascripts/jquery.timers.js b/app/javascripts/jquery.timers.js
deleted file mode 100644
index 7c5a3093..00000000
--- a/app/javascripts/jquery.timers.js
+++ /dev/null
@@ -1,138 +0,0 @@
-/**
- * jQuery.timers - Timer abstractions for jQuery
- * Written by Blair Mitchelmore (blair DOT mitchelmore AT gmail DOT com)
- * Licensed under the WTFPL (http://sam.zoy.org/wtfpl/).
- * Date: 2009/10/16
- *
- * @author Blair Mitchelmore
- * @version 1.2
- *
- **/
-
-jQuery.fn.extend({
- everyTime: function(interval, label, fn, times) {
- return this.each(function() {
- jQuery.timer.add(this, interval, label, fn, times);
- });
- },
- oneTime: function(interval, label, fn) {
- return this.each(function() {
- jQuery.timer.add(this, interval, label, fn, 1);
- });
- },
- stopTime: function(label, fn) {
- return this.each(function() {
- jQuery.timer.remove(this, label, fn);
- });
- }
-});
-
-jQuery.extend({
- timer: {
- global: [],
- guid: 1,
- dataKey: "jQuery.timer",
- regex: /^([0-9]+(?:\.[0-9]*)?)\s*(.*s)?$/,
- powers: {
- // Yeah this is major overkill...
- 'ms': 1,
- 'cs': 10,
- 'ds': 100,
- 's': 1000,
- 'das': 10000,
- 'hs': 100000,
- 'ks': 1000000
- },
- timeParse: function(value) {
- if (value == undefined || value == null)
- return null;
- var result = this.regex.exec(jQuery.trim(value.toString()));
- if (result[2]) {
- var num = parseFloat(result[1]);
- var mult = this.powers[result[2]] || 1;
- return num * mult;
- } else {
- return value;
- }
- },
- add: function(element, interval, label, fn, times) {
- var counter = 0;
-
- if (jQuery.isFunction(label)) {
- if (!times)
- times = fn;
- fn = label;
- label = interval;
- }
-
- interval = jQuery.timer.timeParse(interval);
-
- if (typeof interval != 'number' || isNaN(interval) || interval < 0)
- return;
-
- if (typeof times != 'number' || isNaN(times) || times < 0)
- times = 0;
-
- times = times || 0;
-
- var timers = jQuery.data(element, this.dataKey) || jQuery.data(element, this.dataKey, {});
-
- if (!timers[label])
- timers[label] = {};
-
- fn.timerID = fn.timerID || this.guid++;
-
- var handler = function() {
- if ((++counter > times && times !== 0) || fn.call(element, counter) === false)
- jQuery.timer.remove(element, label, fn);
- };
-
- handler.timerID = fn.timerID;
-
- if (!timers[label][fn.timerID])
- timers[label][fn.timerID] = window.setInterval(handler,interval);
-
- this.global.push( element );
-
- },
- remove: function(element, label, fn) {
- var timers = jQuery.data(element, this.dataKey), ret;
-
- if ( timers ) {
-
- if (!label) {
- for ( label in timers )
- this.remove(element, label, fn);
- } else if ( timers[label] ) {
- if ( fn ) {
- if ( fn.timerID ) {
- window.clearInterval(timers[label][fn.timerID]);
- delete timers[label][fn.timerID];
- }
- } else {
- for ( var fn in timers[label] ) {
- window.clearInterval(timers[label][fn]);
- delete timers[label][fn];
- }
- }
-
- for ( ret in timers[label] ) break;
- if ( !ret ) {
- ret = null;
- delete timers[label];
- }
- }
-
- for ( ret in timers ) break;
- if ( !ret )
- jQuery.removeData(element, this.dataKey);
- }
- }
- }
-});
-
-jQuery(window).bind("unload", function() {
- jQuery.each(jQuery.timer.global, function(index, item) {
- jQuery.timer.remove(item);
- });
-});
diff --git a/app/javascripts/jquery.ui.js b/app/javascripts/jquery.ui.js
deleted file mode 100755
index 16432ac3..00000000
--- a/app/javascripts/jquery.ui.js
+++ /dev/null
@@ -1,15040 +0,0 @@
-/*! jQuery UI - v1.10.4 - 2014-01-17
-* http://jqueryui.com
-* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.effect.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js, jquery.ui.menu.js, jquery.ui.position.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-(function( $, undefined ) {
-
-var uuid = 0,
- runiqueId = /^ui-id-\d+$/;
-
-// $.ui might exist from components with no dependencies, e.g., $.ui.position
-$.ui = $.ui || {};
-
-$.extend( $.ui, {
- version: "1.10.4",
-
- keyCode: {
- BACKSPACE: 8,
- COMMA: 188,
- DELETE: 46,
- DOWN: 40,
- END: 35,
- ENTER: 13,
- ESCAPE: 27,
- HOME: 36,
- LEFT: 37,
- NUMPAD_ADD: 107,
- NUMPAD_DECIMAL: 110,
- NUMPAD_DIVIDE: 111,
- NUMPAD_ENTER: 108,
- NUMPAD_MULTIPLY: 106,
- NUMPAD_SUBTRACT: 109,
- PAGE_DOWN: 34,
- PAGE_UP: 33,
- PERIOD: 190,
- RIGHT: 39,
- SPACE: 32,
- TAB: 9,
- UP: 38
- }
-});
-
-// plugins
-$.fn.extend({
- focus: (function( orig ) {
- return function( delay, fn ) {
- return typeof delay === "number" ?
- this.each(function() {
- var elem = this;
- setTimeout(function() {
- $( elem ).focus();
- if ( fn ) {
- fn.call( elem );
- }
- }, delay );
- }) :
- orig.apply( this, arguments );
- };
- })( $.fn.focus ),
-
- scrollParent: function() {
- var scrollParent;
- if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) {
- scrollParent = this.parents().filter(function() {
- return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
- }).eq(0);
- } else {
- scrollParent = this.parents().filter(function() {
- return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
- }).eq(0);
- }
-
- return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
- },
-
- zIndex: function( zIndex ) {
- if ( zIndex !== undefined ) {
- return this.css( "zIndex", zIndex );
- }
-
- if ( this.length ) {
- var elem = $( this[ 0 ] ), position, value;
- while ( elem.length && elem[ 0 ] !== document ) {
- // Ignore z-index if position is set to a value where z-index is ignored by the browser
- // This makes behavior of this function consistent across browsers
- // WebKit always returns auto if the element is positioned
- position = elem.css( "position" );
- if ( position === "absolute" || position === "relative" || position === "fixed" ) {
- // IE returns 0 when zIndex is not specified
- // other browsers return a string
- // we ignore the case of nested elements with an explicit value of 0
- // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
- value = parseInt( elem.css( "zIndex" ), 10 );
- if ( !isNaN( value ) && value !== 0 ) {
- return value;
- }
- }
- elem = elem.parent();
- }
- }
-
- return 0;
- },
-
- uniqueId: function() {
- return this.each(function() {
- if ( !this.id ) {
- this.id = "ui-id-" + (++uuid);
- }
- });
- },
-
- removeUniqueId: function() {
- return this.each(function() {
- if ( runiqueId.test( this.id ) ) {
- $( this ).removeAttr( "id" );
- }
- });
- }
-});
-
-// selectors
-function focusable( element, isTabIndexNotNaN ) {
- var map, mapName, img,
- nodeName = element.nodeName.toLowerCase();
- if ( "area" === nodeName ) {
- map = element.parentNode;
- mapName = map.name;
- if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
- return false;
- }
- img = $( "img[usemap=#" + mapName + "]" )[0];
- return !!img && visible( img );
- }
- return ( /input|select|textarea|button|object/.test( nodeName ) ?
- !element.disabled :
- "a" === nodeName ?
- element.href || isTabIndexNotNaN :
- isTabIndexNotNaN) &&
- // the element and all of its ancestors must be visible
- visible( element );
-}
-
-function visible( element ) {
- return $.expr.filters.visible( element ) &&
- !$( element ).parents().addBack().filter(function() {
- return $.css( this, "visibility" ) === "hidden";
- }).length;
-}
-
-$.extend( $.expr[ ":" ], {
- data: $.expr.createPseudo ?
- $.expr.createPseudo(function( dataName ) {
- return function( elem ) {
- return !!$.data( elem, dataName );
- };
- }) :
- // support: jQuery <1.8
- function( elem, i, match ) {
- return !!$.data( elem, match[ 3 ] );
- },
-
- focusable: function( element ) {
- return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
- },
-
- tabbable: function( element ) {
- var tabIndex = $.attr( element, "tabindex" ),
- isTabIndexNaN = isNaN( tabIndex );
- return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
- }
-});
-
-// support: jQuery <1.8
-if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
- $.each( [ "Width", "Height" ], function( i, name ) {
- var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
- type = name.toLowerCase(),
- orig = {
- innerWidth: $.fn.innerWidth,
- innerHeight: $.fn.innerHeight,
- outerWidth: $.fn.outerWidth,
- outerHeight: $.fn.outerHeight
- };
-
- function reduce( elem, size, border, margin ) {
- $.each( side, function() {
- size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
- if ( border ) {
- size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
- }
- if ( margin ) {
- size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
- }
- });
- return size;
- }
-
- $.fn[ "inner" + name ] = function( size ) {
- if ( size === undefined ) {
- return orig[ "inner" + name ].call( this );
- }
-
- return this.each(function() {
- $( this ).css( type, reduce( this, size ) + "px" );
- });
- };
-
- $.fn[ "outer" + name] = function( size, margin ) {
- if ( typeof size !== "number" ) {
- return orig[ "outer" + name ].call( this, size );
- }
-
- return this.each(function() {
- $( this).css( type, reduce( this, size, true, margin ) + "px" );
- });
- };
- });
-}
-
-// support: jQuery <1.8
-if ( !$.fn.addBack ) {
- $.fn.addBack = function( selector ) {
- return this.add( selector == null ?
- this.prevObject : this.prevObject.filter( selector )
- );
- };
-}
-
-// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
-if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
- $.fn.removeData = (function( removeData ) {
- return function( key ) {
- if ( arguments.length ) {
- return removeData.call( this, $.camelCase( key ) );
- } else {
- return removeData.call( this );
- }
- };
- })( $.fn.removeData );
-}
-
-
-
-
-
-// deprecated
-$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
-
-$.support.selectstart = "onselectstart" in document.createElement( "div" );
-$.fn.extend({
- disableSelection: function() {
- return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
- ".ui-disableSelection", function( event ) {
- event.preventDefault();
- });
- },
-
- enableSelection: function() {
- return this.unbind( ".ui-disableSelection" );
- }
-});
-
-$.extend( $.ui, {
- // $.ui.plugin is deprecated. Use $.widget() extensions instead.
- plugin: {
- add: function( module, option, set ) {
- var i,
- proto = $.ui[ module ].prototype;
- for ( i in set ) {
- proto.plugins[ i ] = proto.plugins[ i ] || [];
- proto.plugins[ i ].push( [ option, set[ i ] ] );
- }
- },
- call: function( instance, name, args ) {
- var i,
- set = instance.plugins[ name ];
- if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
- return;
- }
-
- for ( i = 0; i < set.length; i++ ) {
- if ( instance.options[ set[ i ][ 0 ] ] ) {
- set[ i ][ 1 ].apply( instance.element, args );
- }
- }
- }
- },
-
- // only used by resizable
- hasScroll: function( el, a ) {
-
- //If overflow is hidden, the element might have extra content, but the user wants to hide it
- if ( $( el ).css( "overflow" ) === "hidden") {
- return false;
- }
-
- var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
- has = false;
-
- if ( el[ scroll ] > 0 ) {
- return true;
- }
-
- // TODO: determine which cases actually cause this to happen
- // if the element doesn't have the scroll set, see if it's possible to
- // set the scroll
- el[ scroll ] = 1;
- has = ( el[ scroll ] > 0 );
- el[ scroll ] = 0;
- return has;
- }
-});
-
-})( jQuery );
-
-(function( $, undefined ) {
-
-var uuid = 0,
- slice = Array.prototype.slice,
- _cleanData = $.cleanData;
-$.cleanData = function( elems ) {
- for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
- try {
- $( elem ).triggerHandler( "remove" );
- // http://bugs.jquery.com/ticket/8235
- } catch( e ) {}
- }
- _cleanData( elems );
-};
-
-$.widget = function( name, base, prototype ) {
- var fullName, existingConstructor, constructor, basePrototype,
- // proxiedPrototype allows the provided prototype to remain unmodified
- // so that it can be used as a mixin for multiple widgets (#8876)
- proxiedPrototype = {},
- namespace = name.split( "." )[ 0 ];
-
- name = name.split( "." )[ 1 ];
- fullName = namespace + "-" + name;
-
- if ( !prototype ) {
- prototype = base;
- base = $.Widget;
- }
-
- // create selector for plugin
- $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
- return !!$.data( elem, fullName );
- };
-
- $[ namespace ] = $[ namespace ] || {};
- existingConstructor = $[ namespace ][ name ];
- constructor = $[ namespace ][ name ] = function( options, element ) {
- // allow instantiation without "new" keyword
- if ( !this._createWidget ) {
- return new constructor( options, element );
- }
-
- // allow instantiation without initializing for simple inheritance
- // must use "new" keyword (the code above always passes args)
- if ( arguments.length ) {
- this._createWidget( options, element );
- }
- };
- // extend with the existing constructor to carry over any static properties
- $.extend( constructor, existingConstructor, {
- version: prototype.version,
- // copy the object used to create the prototype in case we need to
- // redefine the widget later
- _proto: $.extend( {}, prototype ),
- // track widgets that inherit from this widget in case this widget is
- // redefined after a widget inherits from it
- _childConstructors: []
- });
-
- basePrototype = new base();
- // we need to make the options hash a property directly on the new instance
- // otherwise we'll modify the options hash on the prototype that we're
- // inheriting from
- basePrototype.options = $.widget.extend( {}, basePrototype.options );
- $.each( prototype, function( prop, value ) {
- if ( !$.isFunction( value ) ) {
- proxiedPrototype[ prop ] = value;
- return;
- }
- proxiedPrototype[ prop ] = (function() {
- var _super = function() {
- return base.prototype[ prop ].apply( this, arguments );
- },
- _superApply = function( args ) {
- return base.prototype[ prop ].apply( this, args );
- };
- return function() {
- var __super = this._super,
- __superApply = this._superApply,
- returnValue;
-
- this._super = _super;
- this._superApply = _superApply;
-
- returnValue = value.apply( this, arguments );
-
- this._super = __super;
- this._superApply = __superApply;
-
- return returnValue;
- };
- })();
- });
- constructor.prototype = $.widget.extend( basePrototype, {
- // TODO: remove support for widgetEventPrefix
- // always use the name + a colon as the prefix, e.g., draggable:start
- // don't prefix for widgets that aren't DOM-based
- widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name
- }, proxiedPrototype, {
- constructor: constructor,
- namespace: namespace,
- widgetName: name,
- widgetFullName: fullName
- });
-
- // If this widget is being redefined then we need to find all widgets that
- // are inheriting from it and redefine all of them so that they inherit from
- // the new version of this widget. We're essentially trying to replace one
- // level in the prototype chain.
- if ( existingConstructor ) {
- $.each( existingConstructor._childConstructors, function( i, child ) {
- var childPrototype = child.prototype;
-
- // redefine the child widget using the same prototype that was
- // originally used, but inherit from the new version of the base
- $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
- });
- // remove the list of existing child constructors from the old constructor
- // so the old child constructors can be garbage collected
- delete existingConstructor._childConstructors;
- } else {
- base._childConstructors.push( constructor );
- }
-
- $.widget.bridge( name, constructor );
-};
-
-$.widget.extend = function( target ) {
- var input = slice.call( arguments, 1 ),
- inputIndex = 0,
- inputLength = input.length,
- key,
- value;
- for ( ; inputIndex < inputLength; inputIndex++ ) {
- for ( key in input[ inputIndex ] ) {
- value = input[ inputIndex ][ key ];
- if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
- // Clone objects
- if ( $.isPlainObject( value ) ) {
- target[ key ] = $.isPlainObject( target[ key ] ) ?
- $.widget.extend( {}, target[ key ], value ) :
- // Don't extend strings, arrays, etc. with objects
- $.widget.extend( {}, value );
- // Copy everything else by reference
- } else {
- target[ key ] = value;
- }
- }
- }
- }
- return target;
-};
-
-$.widget.bridge = function( name, object ) {
- var fullName = object.prototype.widgetFullName || name;
- $.fn[ name ] = function( options ) {
- var isMethodCall = typeof options === "string",
- args = slice.call( arguments, 1 ),
- returnValue = this;
-
- // allow multiple hashes to be passed on init
- options = !isMethodCall && args.length ?
- $.widget.extend.apply( null, [ options ].concat(args) ) :
- options;
-
- if ( isMethodCall ) {
- this.each(function() {
- var methodValue,
- instance = $.data( this, fullName );
- if ( !instance ) {
- return $.error( "cannot call methods on " + name + " prior to initialization; " +
- "attempted to call method '" + options + "'" );
- }
- if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
- return $.error( "no such method '" + options + "' for " + name + " widget instance" );
- }
- methodValue = instance[ options ].apply( instance, args );
- if ( methodValue !== instance && methodValue !== undefined ) {
- returnValue = methodValue && methodValue.jquery ?
- returnValue.pushStack( methodValue.get() ) :
- methodValue;
- return false;
- }
- });
- } else {
- this.each(function() {
- var instance = $.data( this, fullName );
- if ( instance ) {
- instance.option( options || {} )._init();
- } else {
- $.data( this, fullName, new object( options, this ) );
- }
- });
- }
-
- return returnValue;
- };
-};
-
-$.Widget = function( /* options, element */ ) {};
-$.Widget._childConstructors = [];
-
-$.Widget.prototype = {
- widgetName: "widget",
- widgetEventPrefix: "",
- defaultElement: "<div>",
- options: {
- disabled: false,
-
- // callbacks
- create: null
- },
- _createWidget: function( options, element ) {
- element = $( element || this.defaultElement || this )[ 0 ];
- this.element = $( element );
- this.uuid = uuid++;
- this.eventNamespace = "." + this.widgetName + this.uuid;
- this.options = $.widget.extend( {},
- this.options,
- this._getCreateOptions(),
- options );
-
- this.bindings = $();
- this.hoverable = $();
- this.focusable = $();
-
- if ( element !== this ) {
- $.data( element, this.widgetFullName, this );
- this._on( true, this.element, {
- remove: function( event ) {
- if ( event.target === element ) {
- this.destroy();
- }
- }
- });
- this.document = $( element.style ?
- // element within the document
- element.ownerDocument :
- // element is window or document
- element.document || element );
- this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
- }
-
- this._create();
- this._trigger( "create", null, this._getCreateEventData() );
- this._init();
- },
- _getCreateOptions: $.noop,
- _getCreateEventData: $.noop,
- _create: $.noop,
- _init: $.noop,
-
- destroy: function() {
- this._destroy();
- // we can probably remove the unbind calls in 2.0
- // all event bindings should go through this._on()
- this.element
- .unbind( this.eventNamespace )
- // 1.9 BC for #7810
- // TODO remove dual storage
- .removeData( this.widgetName )
- .removeData( this.widgetFullName )
- // support: jquery <1.6.3
- // http://bugs.jquery.com/ticket/9413
- .removeData( $.camelCase( this.widgetFullName ) );
- this.widget()
- .unbind( this.eventNamespace )
- .removeAttr( "aria-disabled" )
- .removeClass(
- this.widgetFullName + "-disabled " +
- "ui-state-disabled" );
-
- // clean up events and states
- this.bindings.unbind( this.eventNamespace );
- this.hoverable.removeClass( "ui-state-hover" );
- this.focusable.removeClass( "ui-state-focus" );
- },
- _destroy: $.noop,
-
- widget: function() {
- return this.element;
- },
-
- option: function( key, value ) {
- var options = key,
- parts,
- curOption,
- i;
-
- if ( arguments.length === 0 ) {
- // don't return a reference to the internal hash
- return $.widget.extend( {}, this.options );
- }
-
- if ( typeof key === "string" ) {
- // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
- options = {};
- parts = key.split( "." );
- key = parts.shift();
- if ( parts.length ) {
- curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
- for ( i = 0; i < parts.length - 1; i++ ) {
- curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
- curOption = curOption[ parts[ i ] ];
- }
- key = parts.pop();
- if ( arguments.length === 1 ) {
- return curOption[ key ] === undefined ? null : curOption[ key ];
- }
- curOption[ key ] = value;
- } else {
- if ( arguments.length === 1 ) {
- return this.options[ key ] === undefined ? null : this.options[ key ];
- }
- options[ key ] = value;
- }
- }
-
- this._setOptions( options );
-
- return this;
- },
- _setOptions: function( options ) {
- var key;
-
- for ( key in options ) {
- this._setOption( key, options[ key ] );
- }
-
- return this;
- },
- _setOption: function( key, value ) {
- this.options[ key ] = value;
-
- if ( key === "disabled" ) {
- this.widget()
- .toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
- .attr( "aria-disabled", value );
- this.hoverable.removeClass( "ui-state-hover" );
- this.focusable.removeClass( "ui-state-focus" );
- }
-
- return this;
- },
-
- enable: function() {
- return this._setOption( "disabled", false );
- },
- disable: function() {
- return this._setOption( "disabled", true );
- },
-
- _on: function( suppressDisabledCheck, element, handlers ) {
- var delegateElement,
- instance = this;
-
- // no suppressDisabledCheck flag, shuffle arguments
- if ( typeof suppressDisabledCheck !== "boolean" ) {
- handlers = element;
- element = suppressDisabledCheck;
- suppressDisabledCheck = false;
- }
-
- // no element argument, shuffle and use this.element
- if ( !handlers ) {
- handlers = element;
- element = this.element;
- delegateElement = this.widget();
- } else {
- // accept selectors, DOM elements
- element = delegateElement = $( element );
- this.bindings = this.bindings.add( element );
- }
-
- $.each( handlers, function( event, handler ) {
- function handlerProxy() {
- // allow widgets to customize the disabled handling
- // - disabled as an array instead of boolean
- // - disabled class as method for disabling individual parts
- if ( !suppressDisabledCheck &&
- ( instance.options.disabled === true ||
- $( this ).hasClass( "ui-state-disabled" ) ) ) {
- return;
- }
- return ( typeof handler === "string" ? instance[ handler ] : handler )
- .apply( instance, arguments );
- }
-
- // copy the guid so direct unbinding works
- if ( typeof handler !== "string" ) {
- handlerProxy.guid = handler.guid =
- handler.guid || handlerProxy.guid || $.guid++;
- }
-
- var match = event.match( /^(\w+)\s*(.*)$/ ),
- eventName = match[1] + instance.eventNamespace,
- selector = match[2];
- if ( selector ) {
- delegateElement.delegate( selector, eventName, handlerProxy );
- } else {
- element.bind( eventName, handlerProxy );
- }
- });
- },
-
- _off: function( element, eventName ) {
- eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
- element.unbind( eventName ).undelegate( eventName );
- },
-
- _delay: function( handler, delay ) {
- function handlerProxy() {
- return ( typeof handler === "string" ? instance[ handler ] : handler )
- .apply( instance, arguments );
- }
- var instance = this;
- return setTimeout( handlerProxy, delay || 0 );
- },
-
- _hoverable: function( element ) {
- this.hoverable = this.hoverable.add( element );
- this._on( element, {
- mouseenter: function( event ) {
- $( event.currentTarget ).addClass( "ui-state-hover" );
- },
- mouseleave: function( event ) {
- $( event.currentTarget ).removeClass( "ui-state-hover" );
- }
- });
- },
-
- _focusable: function( element ) {
- this.focusable = this.focusable.add( element );
- this._on( element, {
- focusin: function( event ) {
- $( event.currentTarget ).addClass( "ui-state-focus" );
- },
- focusout: function( event ) {
- $( event.currentTarget ).removeClass( "ui-state-focus" );
- }
- });
- },
-
- _trigger: function( type, event, data ) {
- var prop, orig,
- callback = this.options[ type ];
-
- data = data || {};
- event = $.Event( event );
- event.type = ( type === this.widgetEventPrefix ?
- type :
- this.widgetEventPrefix + type ).toLowerCase();
- // the original event may come from any element
- // so we need to reset the target on the new event
- event.target = this.element[ 0 ];
-
- // copy original event properties over to the new event
- orig = event.originalEvent;
- if ( orig ) {
- for ( prop in orig ) {
- if ( !( prop in event ) ) {
- event[ prop ] = orig[ prop ];
- }
- }
- }
-
- this.element.trigger( event, data );
- return !( $.isFunction( callback ) &&
- callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
- event.isDefaultPrevented() );
- }
-};
-
-$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
- $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
- if ( typeof options === "string" ) {
- options = { effect: options };
- }
- var hasOptions,
- effectName = !options ?
- method :
- options === true || typeof options === "number" ?
- defaultEffect :
- options.effect || defaultEffect;
- options = options || {};
- if ( typeof options === "number" ) {
- options = { duration: options };
- }
- hasOptions = !$.isEmptyObject( options );
- options.complete = callback;
- if ( options.delay ) {
- element.delay( options.delay );
- }
- if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
- element[ method ]( options );
- } else if ( effectName !== method && element[ effectName ] ) {
- element[ effectName ]( options.duration, options.easing, callback );
- } else {
- element.queue(function( next ) {
- $( this )[ method ]();
- if ( callback ) {
- callback.call( element[ 0 ] );
- }
- next();
- });
- }
- };
-});
-
-})( jQuery );
-
-(function( $, undefined ) {
-
-var mouseHandled = false;
-$( document ).mouseup( function() {
- mouseHandled = false;
-});
-
-$.widget("ui.mouse", {
- version: "1.10.4",
- options: {
- cancel: "input,textarea,button,select,option",
- distance: 1,
- delay: 0
- },
- _mouseInit: function() {
- var that = this;
-
- this.element
- .bind("mousedown."+this.widgetName, function(event) {
- return that._mouseDown(event);
- })
- .bind("click."+this.widgetName, function(event) {
- if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
- $.removeData(event.target, that.widgetName + ".preventClickEvent");
- event.stopImmediatePropagation();
- return false;
- }
- });
-
- this.started = false;
- },
-
- // TODO: make sure destroying one instance of mouse doesn't mess with
- // other instances of mouse
- _mouseDestroy: function() {
- this.element.unbind("."+this.widgetName);
- if ( this._mouseMoveDelegate ) {
- $(document)
- .unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
- .unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
- }
- },
-
- _mouseDown: function(event) {
- // don't let more than one widget handle mouseStart
- if( mouseHandled ) { return; }
-
- // we may have missed mouseup (out of window)
- (this._mouseStarted && this._mouseUp(event));
-
- this._mouseDownEvent = event;
-
- var that = this,
- btnIsLeft = (event.which === 1),
- // event.target.nodeName works around a bug in IE 8 with
- // disabled inputs (#7620)
- elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
- if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
- return true;
- }
-
- this.mouseDelayMet = !this.options.delay;
- if (!this.mouseDelayMet) {
- this._mouseDelayTimer = setTimeout(function() {
- that.mouseDelayMet = true;
- }, this.options.delay);
- }
-
- if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
- this._mouseStarted = (this._mouseStart(event) !== false);
- if (!this._mouseStarted) {
- event.preventDefault();
- return true;
- }
- }
-
- // Click event may never have fired (Gecko & Opera)
- if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
- $.removeData(event.target, this.widgetName + ".preventClickEvent");
- }
-
- // these delegates are required to keep context
- this._mouseMoveDelegate = function(event) {
- return that._mouseMove(event);
- };
- this._mouseUpDelegate = function(event) {
- return that._mouseUp(event);
- };
- $(document)
- .bind("mousemove."+this.widgetName, this._mouseMoveDelegate)
- .bind("mouseup."+this.widgetName, this._mouseUpDelegate);
-
- event.preventDefault();
-
- mouseHandled = true;
- return true;
- },
-
- _mouseMove: function(event) {
- // IE mouseup check - mouseup happened when mouse was out of window
- if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
- return this._mouseUp(event);
- }
-
- if (this._mouseStarted) {
- this._mouseDrag(event);
- return event.preventDefault();
- }
-
- if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
- this._mouseStarted =
- (this._mouseStart(this._mouseDownEvent, event) !== false);
- (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
- }
-
- return !this._mouseStarted;
- },
-
- _mouseUp: function(event) {
- $(document)
- .unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
- .unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
-
- if (this._mouseStarted) {
- this._mouseStarted = false;
-
- if (event.target === this._mouseDownEvent.target) {
- $.data(event.target, this.widgetName + ".preventClickEvent", true);
- }
-
- this._mouseStop(event);
- }
-
- return false;
- },
-
- _mouseDistanceMet: function(event) {
- return (Math.max(
- Math.abs(this._mouseDownEvent.pageX - event.pageX),
- Math.abs(this._mouseDownEvent.pageY - event.pageY)
- ) >= this.options.distance
- );
- },
-
- _mouseDelayMet: function(/* event */) {
- return this.mouseDelayMet;
- },
-
- // These are placeholder methods, to be overriden by extending plugin
- _mouseStart: function(/* event */) {},
- _mouseDrag: function(/* event */) {},
- _mouseStop: function(/* event */) {},
- _mouseCapture: function(/* event */) { return true; }
-});
-
-})(jQuery);
-
-(function( $, undefined ) {
-
-$.widget("ui.draggable", $.ui.mouse, {
- version: "1.10.4",
- widgetEventPrefix: "drag",
- options: {
- addClasses: true,
- appendTo: "parent",
- axis: false,
- connectToSortable: false,
- containment: false,
- cursor: "auto",
- cursorAt: false,
- grid: false,
- handle: false,
- helper: "original",
- iframeFix: false,
- opacity: false,
- refreshPositions: false,
- revert: false,
- revertDuration: 500,
- scope: "default",
- scroll: true,
- scrollSensitivity: 20,
- scrollSpeed: 20,
- snap: false,
- snapMode: "both",
- snapTolerance: 20,
- stack: false,
- zIndex: false,
-
- // callbacks
- drag: null,
- start: null,
- stop: null
- },
- _create: function() {
-
- if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) {
- this.element[0].style.position = "relative";
- }
- if (this.options.addClasses){
- this.element.addClass("ui-draggable");
- }
- if (this.options.disabled){
- this.element.addClass("ui-draggable-disabled");
- }
-
- this._mouseInit();
-
- },
-
- _destroy: function() {
- this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
- this._mouseDestroy();
- },
-
- _mouseCapture: function(event) {
-
- var o = this.options;
-
- // among others, prevent a drag on a resizable-handle
- if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
- return false;
- }
-
- //Quit if we're not on a valid handle
- this.handle = this._getHandle(event);
- if (!this.handle) {
- return false;
- }
-
- $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
- $("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>")
- .css({
- width: this.offsetWidth+"px", height: this.offsetHeight+"px",
- position: "absolute", opacity: "0.001", zIndex: 1000
- })
- .css($(this).offset())
- .appendTo("body");
- });
-
- return true;
-
- },
-
- _mouseStart: function(event) {
-
- var o = this.options;
-
- //Create and append the visible helper
- this.helper = this._createHelper(event);
-
- this.helper.addClass("ui-draggable-dragging");
-
- //Cache the helper size
- this._cacheHelperProportions();
-
- //If ddmanager is used for droppables, set the global draggable
- if($.ui.ddmanager) {
- $.ui.ddmanager.current = this;
- }
-
- /*
- * - Position generation -
- * This block generates everything position related - it's the core of draggables.
- */
-
- //Cache the margins of the original element
- this._cacheMargins();
-
- //Store the helper's css position
- this.cssPosition = this.helper.css( "position" );
- this.scrollParent = this.helper.scrollParent();
- this.offsetParent = this.helper.offsetParent();
- this.offsetParentCssPosition = this.offsetParent.css( "position" );
-
- //The element's absolute position on the page minus margins
- this.offset = this.positionAbs = this.element.offset();
- this.offset = {
- top: this.offset.top - this.margins.top,
- left: this.offset.left - this.margins.left
- };
-
- //Reset scroll cache
- this.offset.scroll = false;
-
- $.extend(this.offset, {
- click: { //Where the click happened, relative to the element
- left: event.pageX - this.offset.left,
- top: event.pageY - this.offset.top
- },
- parent: this._getParentOffset(),
- relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
- });
-
- //Generate the original position
- this.originalPosition = this.position = this._generatePosition(event);
- this.originalPageX = event.pageX;
- this.originalPageY = event.pageY;
-
- //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
- (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
-
- //Set a containment if given in the options
- this._setContainment();
-
- //Trigger event + callbacks
- if(this._trigger("start", event) === false) {
- this._clear();
- return false;
- }
-
- //Recache the helper size
- this._cacheHelperProportions();
-
- //Prepare the droppable offsets
- if ($.ui.ddmanager && !o.dropBehaviour) {
- $.ui.ddmanager.prepareOffsets(this, event);
- }
-
-
- this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
-
- //If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
- if ( $.ui.ddmanager ) {
- $.ui.ddmanager.dragStart(this, event);
- }
-
- return true;
- },
-
- _mouseDrag: function(event, noPropagation) {
- // reset any necessary cached properties (see #5009)
- if ( this.offsetParentCssPosition === "fixed" ) {
- this.offset.parent = this._getParentOffset();
- }
-
- //Compute the helpers position
- this.position = this._generatePosition(event);
- this.positionAbs = this._convertPositionTo("absolute");
-
- //Call plugins and callbacks and use the resulting position if something is returned
- if (!noPropagation) {
- var ui = this._uiHash();
- if(this._trigger("drag", event, ui) === false) {
- this._mouseUp({});
- return false;
- }
- this.position = ui.position;
- }
-
- if(!this.options.axis || this.options.axis !== "y") {
- this.helper[0].style.left = this.position.left+"px";
- }
- if(!this.options.axis || this.options.axis !== "x") {
- this.helper[0].style.top = this.position.top+"px";
- }
- if($.ui.ddmanager) {
- $.ui.ddmanager.drag(this, event);
- }
-
- return false;
- },
-
- _mouseStop: function(event) {
-
- //If we are using droppables, inform the manager about the drop
- var that = this,
- dropped = false;
- if ($.ui.ddmanager && !this.options.dropBehaviour) {
- dropped = $.ui.ddmanager.drop(this, event);
- }
-
- //if a drop comes from outside (a sortable)
- if(this.dropped) {
- dropped = this.dropped;
- this.dropped = false;
- }
-
- //if the original element is no longer in the DOM don't bother to continue (see #8269)
- if ( this.options.helper === "original" && !$.contains( this.element[ 0 ].ownerDocument, this.element[ 0 ] ) ) {
- return false;
- }
-
- if((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
- $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
- if(that._trigger("stop", event) !== false) {
- that._clear();
- }
- });
- } else {
- if(this._trigger("stop", event) !== false) {
- this._clear();
- }
- }
-
- return false;
- },
-
- _mouseUp: function(event) {
- //Remove frame helpers
- $("div.ui-draggable-iframeFix").each(function() {
- this.parentNode.removeChild(this);
- });
-
- //If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
- if( $.ui.ddmanager ) {
- $.ui.ddmanager.dragStop(this, event);
- }
-
- return $.ui.mouse.prototype._mouseUp.call(this, event);
- },
-
- cancel: function() {
-
- if(this.helper.is(".ui-draggable-dragging")) {
- this._mouseUp({});
- } else {
- this._clear();
- }
-
- return this;
-
- },
-
- _getHandle: function(event) {
- return this.options.handle ?
- !!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
- true;
- },
-
- _createHelper: function(event) {
-
- var o = this.options,
- helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element);
-
- if(!helper.parents("body").length) {
- helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
- }
-
- if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
- helper.css("position", "absolute");
- }
-
- return helper;
-
- },
-
- _adjustOffsetFromHelper: function(obj) {
- if (typeof obj === "string") {
- obj = obj.split(" ");
- }
- if ($.isArray(obj)) {
- obj = {left: +obj[0], top: +obj[1] || 0};
- }
- if ("left" in obj) {
- this.offset.click.left = obj.left + this.margins.left;
- }
- if ("right" in obj) {
- this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
- }
- if ("top" in obj) {
- this.offset.click.top = obj.top + this.margins.top;
- }
- if ("bottom" in obj) {
- this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
- }
- },
-
- _getParentOffset: function() {
-
- //Get the offsetParent and cache its position
- var po = this.offsetParent.offset();
-
- // This is a special case where we need to modify a offset calculated on start, since the following happened:
- // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
- // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
- // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
- if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
- po.left += this.scrollParent.scrollLeft();
- po.top += this.scrollParent.scrollTop();
- }
-
- //This needs to be actually done for all browsers, since pageX/pageY includes this information
- //Ugly IE fix
- if((this.offsetParent[0] === document.body) ||
- (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
- po = { top: 0, left: 0 };
- }
-
- return {
- top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
- left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
- };
-
- },
-
- _getRelativeOffset: function() {
-
- if(this.cssPosition === "relative") {
- var p = this.element.position();
- return {
- top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
- left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
- };
- } else {
- return { top: 0, left: 0 };
- }
-
- },
-
- _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 over, c, ce,
- o = this.options;
-
- if ( !o.containment ) {
- this.containment = null;
- return;
- }
-
- if ( o.containment === "window" ) {
- this.containment = [
- $( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
- $( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
- $( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
- $( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
- ];
- return;
- }
-
- if ( o.containment === "document") {
- this.containment = [
- 0,
- 0,
- $( document ).width() - this.helperProportions.width - this.margins.left,
- ( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
- ];
- return;
- }
-
- if ( o.containment.constructor === Array ) {
- this.containment = o.containment;
- return;
- }
-
- if ( o.containment === "parent" ) {
- o.containment = this.helper[ 0 ].parentNode;
- }
-
- c = $( o.containment );
- ce = c[ 0 ];
-
- if( !ce ) {
- return;
- }
-
- over = c.css( "overflow" ) !== "hidden";
-
- this.containment = [
- ( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
- ( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ) ,
- ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right,
- ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top - this.margins.bottom
- ];
- this.relative_container = c;
- },
-
- _convertPositionTo: function(d, pos) {
-
- if(!pos) {
- pos = this.position;
- }
-
- var mod = d === "absolute" ? 1 : -1,
- scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent;
-
- //Cache the scroll
- if (!this.offset.scroll) {
- this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
- }
-
- return {
- top: (
- pos.top + // The absolute mouse position
- this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
- this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border)
- ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) * mod )
- ),
- left: (
- pos.left + // The absolute mouse position
- this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
- this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border)
- ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) * mod )
- )
- };
-
- },
-
- _generatePosition: function(event) {
-
- var containment, co, top, left,
- o = this.options,
- scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent,
- pageX = event.pageX,
- pageY = event.pageY;
-
- //Cache the scroll
- if (!this.offset.scroll) {
- this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
- }
-
- /*
- * - Position constraining -
- * Constrain the position to a mix of grid, containment.
- */
-
- // If we are not dragging yet, we won't check for options
- if ( this.originalPosition ) {
- if ( this.containment ) {
- if ( this.relative_container ){
- co = this.relative_container.offset();
- containment = [
- this.containment[ 0 ] + co.left,
- this.containment[ 1 ] + co.top,
- this.containment[ 2 ] + co.left,
- this.containment[ 3 ] + co.top
- ];
- }
- else {
- containment = this.containment;
- }
-
- if(event.pageX - this.offset.click.left < containment[0]) {
- pageX = containment[0] + this.offset.click.left;
- }
- if(event.pageY - this.offset.click.top < containment[1]) {
- pageY = containment[1] + this.offset.click.top;
- }
- if(event.pageX - this.offset.click.left > containment[2]) {
- pageX = containment[2] + this.offset.click.left;
- }
- if(event.pageY - this.offset.click.top > containment[3]) {
- pageY = containment[3] + this.offset.click.top;
- }
- }
-
- if(o.grid) {
- //Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
- top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
- pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
-
- left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
- pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
- }
-
- }
-
- return {
- top: (
- pageY - // The absolute mouse position
- this.offset.click.top - // Click offset (relative to the element)
- this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent
- this.offset.parent.top + // The offsetParent's offset without borders (offset + border)
- ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top )
- ),
- left: (
- pageX - // The absolute mouse position
- this.offset.click.left - // Click offset (relative to the element)
- this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent
- this.offset.parent.left + // The offsetParent's offset without borders (offset + border)
- ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left )
- )
- };
-
- },
-
- _clear: function() {
- this.helper.removeClass("ui-draggable-dragging");
- if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
- this.helper.remove();
- }
- this.helper = null;
- this.cancelHelperRemoval = false;
- },
-
- // From now on bulk stuff - mainly helpers
-
- _trigger: function(type, event, ui) {
- ui = ui || this._uiHash();
- $.ui.plugin.call(this, type, [event, ui]);
- //The absolute position has to be recalculated after plugins
- if(type === "drag") {
- this.positionAbs = this._convertPositionTo("absolute");
- }
- return $.Widget.prototype._trigger.call(this, type, event, ui);
- },
-
- plugins: {},
-
- _uiHash: function() {
- return {
- helper: this.helper,
- position: this.position,
- originalPosition: this.originalPosition,
- offset: this.positionAbs
- };
- }
-
-});
-
-$.ui.plugin.add("draggable", "connectToSortable", {
- start: function(event, ui) {
-
- var inst = $(this).data("ui-draggable"), o = inst.options,
- uiSortable = $.extend({}, ui, { item: inst.element });
- inst.sortables = [];
- $(o.connectToSortable).each(function() {
- var sortable = $.data(this, "ui-sortable");
- if (sortable && !sortable.options.disabled) {
- inst.sortables.push({
- instance: sortable,
- shouldRevert: sortable.options.revert
- });
- sortable.refreshPositions(); // Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
- sortable._trigger("activate", event, uiSortable);
- }
- });
-
- },
- stop: function(event, ui) {
-
- //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
- var inst = $(this).data("ui-draggable"),
- uiSortable = $.extend({}, ui, { item: inst.element });
-
- $.each(inst.sortables, function() {
- if(this.instance.isOver) {
-
- this.instance.isOver = 0;
-
- inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
- this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
-
- //The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid"
- if(this.shouldRevert) {
- this.instance.options.revert = this.shouldRevert;
- }
-
- //Trigger the stop of the sortable
- this.instance._mouseStop(event);
-
- this.instance.options.helper = this.instance.options._helper;
-
- //If the helper has been the original item, restore properties in the sortable
- if(inst.options.helper === "original") {
- this.instance.currentItem.css({ top: "auto", left: "auto" });
- }
-
- } else {
- this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
- this.instance._trigger("deactivate", event, uiSortable);
- }
-
- });
-
- },
- drag: function(event, ui) {
-
- var inst = $(this).data("ui-draggable"), that = this;
-
- $.each(inst.sortables, function() {
-
- var innermostIntersecting = false,
- thisSortable = this;
-
- //Copy over some variables to allow calling the sortable's native _intersectsWith
- this.instance.positionAbs = inst.positionAbs;
- this.instance.helperProportions = inst.helperProportions;
- this.instance.offset.click = inst.offset.click;
-
- if(this.instance._intersectsWith(this.instance.containerCache)) {
- innermostIntersecting = true;
- $.each(inst.sortables, function () {
- this.instance.positionAbs = inst.positionAbs;
- this.instance.helperProportions = inst.helperProportions;
- this.instance.offset.click = inst.offset.click;
- if (this !== thisSortable &&
- this.instance._intersectsWith(this.instance.containerCache) &&
- $.contains(thisSortable.instance.element[0], this.instance.element[0])
- ) {
- innermostIntersecting = false;
- }
- return innermostIntersecting;
- });
- }
-
-
- if(innermostIntersecting) {
- //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
- if(!this.instance.isOver) {
-
- this.instance.isOver = 1;
- //Now we fake the start of dragging for the sortable instance,
- //by cloning the list group item, appending it to the sortable and using it as inst.currentItem
- //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
- this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", true);
- this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
- this.instance.options.helper = function() { return ui.helper[0]; };
-
- event.target = this.instance.currentItem[0];
- this.instance._mouseCapture(event, true);
- this.instance._mouseStart(event, true, true);
-
- //Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
- this.instance.offset.click.top = inst.offset.click.top;
- this.instance.offset.click.left = inst.offset.click.left;
- this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
- this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
-
- inst._trigger("toSortable", event);
- inst.dropped = this.instance.element; //draggable revert needs that
- //hack so receive/update callbacks work (mostly)
- inst.currentItem = inst.element;
- this.instance.fromOutside = inst;
-
- }
-
- //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
- if(this.instance.currentItem) {
- this.instance._mouseDrag(event);
- }
-
- } else {
-
- //If it doesn't intersect with the sortable, and it intersected before,
- //we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
- if(this.instance.isOver) {
-
- this.instance.isOver = 0;
- this.instance.cancelHelperRemoval = true;
-
- //Prevent reverting on this forced stop
- this.instance.options.revert = false;
-
- // The out event needs to be triggered independently
- this.instance._trigger("out", event, this.instance._uiHash(this.instance));
-
- this.instance._mouseStop(event, true);
- this.instance.options.helper = this.instance.options._helper;
-
- //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
- this.instance.currentItem.remove();
- if(this.instance.placeholder) {
- this.instance.placeholder.remove();
- }
-
- inst._trigger("fromSortable", event);
- inst.dropped = false; //draggable revert needs that
- }
-
- }
-
- });
-
- }
-});
-
-$.ui.plugin.add("draggable", "cursor", {
- start: function() {
- var t = $("body"), o = $(this).data("ui-draggable").options;
- if (t.css("cursor")) {
- o._cursor = t.css("cursor");
- }
- t.css("cursor", o.cursor);
- },
- stop: function() {
- var o = $(this).data("ui-draggable").options;
- if (o._cursor) {
- $("body").css("cursor", o._cursor);
- }
- }
-});
-
-$.ui.plugin.add("draggable", "opacity", {
- start: function(event, ui) {
- var t = $(ui.helper), o = $(this).data("ui-draggable").options;
- if(t.css("opacity")) {
- o._opacity = t.css("opacity");
- }
- t.css("opacity", o.opacity);
- },
- stop: function(event, ui) {
- var o = $(this).data("ui-draggable").options;
- if(o._opacity) {
- $(ui.helper).css("opacity", o._opacity);
- }
- }
-});
-
-$.ui.plugin.add("draggable", "scroll", {
- start: function() {
- var i = $(this).data("ui-draggable");
- if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
- i.overflowOffset = i.scrollParent.offset();
- }
- },
- drag: function( event ) {
-
- var i = $(this).data("ui-draggable"), o = i.options, scrolled = false;
-
- if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
-
- if(!o.axis || o.axis !== "x") {
- if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
- i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
- } else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) {
- i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
- }
- }
-
- if(!o.axis || o.axis !== "y") {
- if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
- i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
- } else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) {
- i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
- }
- }
-
- } else {
-
- if(!o.axis || o.axis !== "x") {
- if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
- scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
- } else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
- scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
- }
- }
-
- if(!o.axis || o.axis !== "y") {
- if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
- scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
- } else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
- scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
- }
- }
-
- }
-
- if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
- $.ui.ddmanager.prepareOffsets(i, event);
- }
-
- }
-});
-
-$.ui.plugin.add("draggable", "snap", {
- start: function() {
-
- var i = $(this).data("ui-draggable"),
- o = i.options;
-
- i.snapElements = [];
-
- $(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
- var $t = $(this),
- $o = $t.offset();
- if(this !== i.element[0]) {
- i.snapElements.push({
- item: this,
- width: $t.outerWidth(), height: $t.outerHeight(),
- top: $o.top, left: $o.left
- });
- }
- });
-
- },
- drag: function(event, ui) {
-
- var ts, bs, ls, rs, l, r, t, b, i, first,
- inst = $(this).data("ui-draggable"),
- o = inst.options,
- d = o.snapTolerance,
- x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
- y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
-
- for (i = inst.snapElements.length - 1; i >= 0; i--){
-
- l = inst.snapElements[i].left;
- r = l + inst.snapElements[i].width;
- t = inst.snapElements[i].top;
- b = t + inst.snapElements[i].height;
-
- if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
- if(inst.snapElements[i].snapping) {
- (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
- }
- inst.snapElements[i].snapping = false;
- continue;
- }
-
- if(o.snapMode !== "inner") {
- ts = Math.abs(t - y2) <= d;
- bs = Math.abs(b - y1) <= d;
- ls = Math.abs(l - x2) <= d;
- rs = Math.abs(r - x1) <= d;
- if(ts) {
- ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
- }
- if(bs) {
- ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
- }
- if(ls) {
- ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
- }
- if(rs) {
- ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
- }
- }
-
- first = (ts || bs || ls || rs);
-
- if(o.snapMode !== "outer") {
- ts = Math.abs(t - y1) <= d;
- bs = Math.abs(b - y2) <= d;
- ls = Math.abs(l - x1) <= d;
- rs = Math.abs(r - x2) <= d;
- if(ts) {
- ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
- }
- if(bs) {
- ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
- }
- if(ls) {
- ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
- }
- if(rs) {
- ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
- }
- }
-
- if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
- (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
- }
- inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
-
- }
-
- }
-});
-
-$.ui.plugin.add("draggable", "stack", {
- start: function() {
- var min,
- o = this.data("ui-draggable").options,
- group = $.makeArray($(o.stack)).sort(function(a,b) {
- return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
- });
-
- if (!group.length) { return; }
-
- min = parseInt($(group[0]).css("zIndex"), 10) || 0;
- $(group).each(function(i) {
- $(this).css("zIndex", min + i);
- });
- this.css("zIndex", (min + group.length));
- }
-});
-
-$.ui.plugin.add("draggable", "zIndex", {
- start: function(event, ui) {
- var t = $(ui.helper), o = $(this).data("ui-draggable").options;
- if(t.css("zIndex")) {
- o._zIndex = t.css("zIndex");
- }
- t.css("zIndex", o.zIndex);
- },
- stop: function(event, ui) {
- var o = $(this).data("ui-draggable").options;
- if(o._zIndex) {
- $(ui.helper).css("zIndex", o._zIndex);
- }
- }
-});
-
-})(jQuery);
-
-(function( $, undefined ) {
-
-function isOverAxis( x, reference, size ) {
- return ( x > reference ) && ( x < ( reference + size ) );
-}
-
-$.widget("ui.droppable", {
- version: "1.10.4",
- widgetEventPrefix: "drop",
- options: {
- accept: "*",
- activeClass: false,
- addClasses: true,
- greedy: false,
- hoverClass: false,
- scope: "default",
- tolerance: "intersect",
-
- // callbacks
- activate: null,
- deactivate: null,
- drop: null,
- out: null,
- over: null
- },
- _create: function() {
-
- var proportions,
- o = this.options,
- accept = o.accept;
-
- this.isover = false;
- this.isout = true;
-
- this.accept = $.isFunction(accept) ? accept : function(d) {
- return d.is(accept);
- };
-
- this.proportions = function( /* valueToWrite */ ) {
- if ( arguments.length ) {
- // Store the droppable's proportions
- proportions = arguments[ 0 ];
- } else {
- // Retrieve or derive the droppable's proportions
- return proportions ?
- proportions :
- proportions = {
- width: this.element[ 0 ].offsetWidth,
- height: this.element[ 0 ].offsetHeight
- };
- }
- };
-
- // Add the reference and positions to the manager
- $.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
- $.ui.ddmanager.droppables[o.scope].push(this);
-
- (o.addClasses && this.element.addClass("ui-droppable"));
-
- },
-
- _destroy: function() {
- var i = 0,
- drop = $.ui.ddmanager.droppables[this.options.scope];
-
- for ( ; i < drop.length; i++ ) {
- if ( drop[i] === this ) {
- drop.splice(i, 1);
- }
- }
-
- this.element.removeClass("ui-droppable ui-droppable-disabled");
- },
-
- _setOption: function(key, value) {
-
- if(key === "accept") {
- this.accept = $.isFunction(value) ? value : function(d) {
- return d.is(value);
- };
- }
- $.Widget.prototype._setOption.apply(this, arguments);
- },
-
- _activate: function(event) {
- var draggable = $.ui.ddmanager.current;
- if(this.options.activeClass) {
- this.element.addClass(this.options.activeClass);
- }
- if(draggable){
- this._trigger("activate", event, this.ui(draggable));
- }
- },
-
- _deactivate: function(event) {
- var draggable = $.ui.ddmanager.current;
- if(this.options.activeClass) {
- this.element.removeClass(this.options.activeClass);
- }
- if(draggable){
- this._trigger("deactivate", event, this.ui(draggable));
- }
- },
-
- _over: function(event) {
-
- var draggable = $.ui.ddmanager.current;
-
- // Bail if draggable and droppable are same element
- if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
- return;
- }
-
- if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
- if(this.options.hoverClass) {
- this.element.addClass(this.options.hoverClass);
- }
- this._trigger("over", event, this.ui(draggable));
- }
-
- },
-
- _out: function(event) {
-
- var draggable = $.ui.ddmanager.current;
-
- // Bail if draggable and droppable are same element
- if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
- return;
- }
-
- if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
- if(this.options.hoverClass) {
- this.element.removeClass(this.options.hoverClass);
- }
- this._trigger("out", event, this.ui(draggable));
- }
-
- },
-
- _drop: function(event,custom) {
-
- var draggable = custom || $.ui.ddmanager.current,
- childrenIntersection = false;
-
- // Bail if draggable and droppable are same element
- if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
- return false;
- }
-
- this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() {
- var inst = $.data(this, "ui-droppable");
- if(
- inst.options.greedy &&
- !inst.options.disabled &&
- inst.options.scope === draggable.options.scope &&
- inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) &&
- $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
- ) { childrenIntersection = true; return false; }
- });
- if(childrenIntersection) {
- return false;
- }
-
- if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
- if(this.options.activeClass) {
- this.element.removeClass(this.options.activeClass);
- }
- if(this.options.hoverClass) {
- this.element.removeClass(this.options.hoverClass);
- }
- this._trigger("drop", event, this.ui(draggable));
- return this.element;
- }
-
- return false;
-
- },
-
- ui: function(c) {
- return {
- draggable: (c.currentItem || c.element),
- helper: c.helper,
- position: c.position,
- offset: c.positionAbs
- };
- }
-
-});
-
-$.ui.intersect = function(draggable, droppable, toleranceMode) {
-
- if (!droppable.offset) {
- return false;
- }
-
- var draggableLeft, draggableTop,
- x1 = (draggable.positionAbs || draggable.position.absolute).left,
- y1 = (draggable.positionAbs || draggable.position.absolute).top,
- x2 = x1 + draggable.helperProportions.width,
- y2 = y1 + draggable.helperProportions.height,
- l = droppable.offset.left,
- t = droppable.offset.top,
- r = l + droppable.proportions().width,
- b = t + droppable.proportions().height;
-
- switch (toleranceMode) {
- case "fit":
- return (l <= x1 && x2 <= r && t <= y1 && y2 <= b);
- case "intersect":
- return (l < x1 + (draggable.helperProportions.width / 2) && // Right Half
- x2 - (draggable.helperProportions.width / 2) < r && // Left Half
- t < y1 + (draggable.helperProportions.height / 2) && // Bottom Half
- y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
- case "pointer":
- draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left);
- draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top);
- return isOverAxis( draggableTop, t, droppable.proportions().height ) && isOverAxis( draggableLeft, l, droppable.proportions().width );
- case "touch":
- return (
- (y1 >= t && y1 <= b) || // Top edge touching
- (y2 >= t && y2 <= b) || // Bottom edge touching
- (y1 < t && y2 > b) // Surrounded vertically
- ) && (
- (x1 >= l && x1 <= r) || // Left edge touching
- (x2 >= l && x2 <= r) || // Right edge touching
- (x1 < l && x2 > r) // Surrounded horizontally
- );
- default:
- return false;
- }
-
-};
-
-/*
- This manager tracks offsets of draggables and droppables
-*/
-$.ui.ddmanager = {
- current: null,
- droppables: { "default": [] },
- prepareOffsets: function(t, event) {
-
- var i, j,
- m = $.ui.ddmanager.droppables[t.options.scope] || [],
- type = event ? event.type : null, // workaround for #2317
- list = (t.currentItem || t.element).find(":data(ui-droppable)").addBack();
-
- droppablesLoop: for (i = 0; i < m.length; i++) {
-
- //No disabled and non-accepted
- if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) {
- continue;
- }
-
- // Filter out elements in the current dragged item
- for (j=0; j < list.length; j++) {
- if(list[j] === m[i].element[0]) {
- m[i].proportions().height = 0;
- continue droppablesLoop;
- }
- }
-
- m[i].visible = m[i].element.css("display") !== "none";
- if(!m[i].visible) {
- continue;
- }
-
- //Activate the droppable if used directly from draggables
- if(type === "mousedown") {
- m[i]._activate.call(m[i], event);
- }
-
- m[ i ].offset = m[ i ].element.offset();
- m[ i ].proportions({ width: m[ i ].element[ 0 ].offsetWidth, height: m[ i ].element[ 0 ].offsetHeight });
-
- }
-
- },
- drop: function(draggable, event) {
-
- var dropped = false;
- // Create a copy of the droppables in case the list changes during the drop (#9116)
- $.each(($.ui.ddmanager.droppables[draggable.options.scope] || []).slice(), function() {
-
- if(!this.options) {
- return;
- }
- if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) {
- dropped = this._drop.call(this, event) || dropped;
- }
-
- if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
- this.isout = true;
- this.isover = false;
- this._deactivate.call(this, event);
- }
-
- });
- return dropped;
-
- },
- dragStart: function( draggable, event ) {
- //Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
- draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
- if( !draggable.options.refreshPositions ) {
- $.ui.ddmanager.prepareOffsets( draggable, event );
- }
- });
- },
- drag: function(draggable, event) {
-
- //If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
- if(draggable.options.refreshPositions) {
- $.ui.ddmanager.prepareOffsets(draggable, event);
- }
-
- //Run through all droppables and check their positions based on specific tolerance options
- $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
-
- if(this.options.disabled || this.greedyChild || !this.visible) {
- return;
- }
-
- var parentInstance, scope, parent,
- intersects = $.ui.intersect(draggable, this, this.options.tolerance),
- c = !intersects && this.isover ? "isout" : (intersects && !this.isover ? "isover" : null);
- if(!c) {
- return;
- }
-
- if (this.options.greedy) {
- // find droppable parents with same scope
- scope = this.options.scope;
- parent = this.element.parents(":data(ui-droppable)").filter(function () {
- return $.data(this, "ui-droppable").options.scope === scope;
- });
-
- if (parent.length) {
- parentInstance = $.data(parent[0], "ui-droppable");
- parentInstance.greedyChild = (c === "isover");
- }
- }
-
- // we just moved into a greedy child
- if (parentInstance && c === "isover") {
- parentInstance.isover = false;
- parentInstance.isout = true;
- parentInstance._out.call(parentInstance, event);
- }
-
- this[c] = true;
- this[c === "isout" ? "isover" : "isout"] = false;
- this[c === "isover" ? "_over" : "_out"].call(this, event);
-
- // we just moved out of a greedy child
- if (parentInstance && c === "isout") {
- parentInstance.isout = false;
- parentInstance.isover = true;
- parentInstance._over.call(parentInstance, event);
- }
- });
-
- },
- dragStop: function( draggable, event ) {
- draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
- //Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
- if( !draggable.options.refreshPositions ) {
- $.ui.ddmanager.prepareOffsets( draggable, event );
- }
- }
-};
-
-})(jQuery);
-
-(function( $, undefined ) {
-
-function num(v) {
- return parseInt(v, 10) || 0;
-}
-
-function isNumber(value) {
- return !isNaN(parseInt(value, 10));
-}
-
-$.widget("ui.resizable", $.ui.mouse, {
- version: "1.10.4",
- widgetEventPrefix: "resize",
- options: {
- alsoResize: false,
- animate: false,
- animateDuration: "slow",
- animateEasing: "swing",
- aspectRatio: false,
- autoHide: false,
- containment: false,
- ghost: false,
- grid: false,
- handles: "e,s,se",
- helper: false,
- maxHeight: null,
- maxWidth: null,
- minHeight: 10,
- minWidth: 10,
- // See #7960
- zIndex: 90,
-
- // callbacks
- resize: null,
- start: null,
- stop: null
- },
- _create: function() {
-
- var n, i, handle, axis, hname,
- that = this,
- o = this.options;
- this.element.addClass("ui-resizable");
-
- $.extend(this, {
- _aspectRatio: !!(o.aspectRatio),
- aspectRatio: o.aspectRatio,
- originalElement: this.element,
- _proportionallyResizeElements: [],
- _helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
- });
-
- //Wrap the element if it cannot hold child nodes
- if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
-
- //Create a wrapper element and set the wrapper to the new current internal element
- this.element.wrap(
- $("<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")
- })
- );
-
- //Overwrite the original this.element
- this.element = this.element.parent().data(
- "ui-resizable", this.element.data("ui-resizable")
- );
-
- this.elementIsWrapper = true;
-
- //Move margins to the wrapper
- this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
- this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
-
- //Prevent Safari textarea resize
- this.originalResizeStyle = this.originalElement.css("resize");
- this.originalElement.css("resize", "none");
-
- //Push the actual element to our proportionallyResize internal array
- this._proportionallyResizeElements.push(this.originalElement.css({ position: "static", zoom: 1, display: "block" }));
-
- // avoid IE jump (hard set the margin)
- this.originalElement.css({ margin: this.originalElement.css("margin") });
-
- // fix handlers offset
- this._proportionallyResize();
-
- }
-
- this.handles = o.handles || (!$(".ui-resizable-handle", this.element).length ? "e,s,se" : { 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" });
- if(this.handles.constructor === String) {
-
- if ( this.handles === "all") {
- this.handles = "n,e,s,w,se,sw,ne,nw";
- }
-
- n = this.handles.split(",");
- this.handles = {};
-
- for(i = 0; i < n.length; i++) {
-
- handle = $.trim(n[i]);
- hname = "ui-resizable-"+handle;
- axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
-
- // Apply zIndex to all handles - see #7960
- axis.css({ zIndex: o.zIndex });
-
- //TODO : What's going on here?
- if ("se" === handle) {
- axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
- }
-
- //Insert into internal handles object and append to element
- this.handles[handle] = ".ui-resizable-"+handle;
- this.element.append(axis);
- }
-
- }
-
- this._renderAxis = function(target) {
-
- var i, axis, padPos, padWrapper;
-
- target = target || this.element;
-
- for(i in this.handles) {
-
- if(this.handles[i].constructor === String) {
- this.handles[i] = $(this.handles[i], this.element).show();
- }
-
- //Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
- if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
-
- axis = $(this.handles[i], this.element);
-
- //Checking the correct pad and border
- padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
-
- //The padding type i have to apply...
- padPos = [ "padding",
- /ne|nw|n/.test(i) ? "Top" :
- /se|sw|s/.test(i) ? "Bottom" :
- /^e$/.test(i) ? "Right" : "Left" ].join("");
-
- target.css(padPos, padWrapper);
-
- this._proportionallyResize();
-
- }
-
- //TODO: What's that good for? There's not anything to be executed left
- if(!$(this.handles[i]).length) {
- continue;
- }
- }
- };
-
- //TODO: make renderAxis a prototype function
- this._renderAxis(this.element);
-
- this._handles = $(".ui-resizable-handle", this.element)
- .disableSelection();
-
- //Matching axis name
- this._handles.mouseover(function() {
- if (!that.resizing) {
- if (this.className) {
- axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
- }
- //Axis, default = se
- that.axis = axis && axis[1] ? axis[1] : "se";
- }
- });
-
- //If we want to auto hide the elements
- if (o.autoHide) {
- this._handles.hide();
- $(this.element)
- .addClass("ui-resizable-autohide")
- .mouseenter(function() {
- if (o.disabled) {
- return;
- }
- $(this).removeClass("ui-resizable-autohide");
- that._handles.show();
- })
- .mouseleave(function(){
- if (o.disabled) {
- return;
- }
- if (!that.resizing) {
- $(this).addClass("ui-resizable-autohide");
- that._handles.hide();
- }
- });
- }
-
- //Initialize the mouse interaction
- this._mouseInit();
-
- },
-
- _destroy: function() {
-
- this._mouseDestroy();
-
- var wrapper,
- _destroy = function(exp) {
- $(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
- .removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove();
- };
-
- //TODO: Unwrap at same DOM position
- if (this.elementIsWrapper) {
- _destroy(this.element);
- wrapper = this.element;
- this.originalElement.css({
- position: wrapper.css("position"),
- width: wrapper.outerWidth(),
- height: wrapper.outerHeight(),
- top: wrapper.css("top"),
- left: wrapper.css("left")
- }).insertAfter( wrapper );
- wrapper.remove();
- }
-
- this.originalElement.css("resize", this.originalResizeStyle);
- _destroy(this.originalElement);
-
- return this;
- },
-
- _mouseCapture: function(event) {
- var i, handle,
- capture = false;
-
- for (i in this.handles) {
- handle = $(this.handles[i])[0];
- if (handle === event.target || $.contains(handle, event.target)) {
- capture = true;
- }
- }
-
- return !this.options.disabled && capture;
- },
-
- _mouseStart: function(event) {
-
- var curleft, curtop, cursor,
- o = this.options,
- iniPos = this.element.position(),
- el = this.element;
-
- this.resizing = true;
-
- // bugfix for http://dev.jquery.com/ticket/1749
- if ( (/absolute/).test( el.css("position") ) ) {
- el.css({ position: "absolute", top: el.css("top"), left: el.css("left") });
- } else if (el.is(".ui-draggable")) {
- el.css({ position: "absolute", top: iniPos.top, left: iniPos.left });
- }
-
- this._renderProxy();
-
- curleft = num(this.helper.css("left"));
- curtop = num(this.helper.css("top"));
-
- if (o.containment) {
- curleft += $(o.containment).scrollLeft() || 0;
- curtop += $(o.containment).scrollTop() || 0;
- }
-
- //Store needed variables
- this.offset = this.helper.offset();
- this.position = { left: curleft, top: curtop };
- this.size = this._helper ? { width: this.helper.width(), height: this.helper.height() } : { width: el.width(), height: el.height() };
- this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
- this.originalPosition = { left: curleft, top: curtop };
- this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
- this.originalMousePosition = { left: event.pageX, top: event.pageY };
-
- //Aspect Ratio
- this.aspectRatio = (typeof o.aspectRatio === "number") ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
-
- cursor = $(".ui-resizable-" + this.axis).css("cursor");
- $("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
-
- el.addClass("ui-resizable-resizing");
- this._propagate("start", event);
- return true;
- },
-
- _mouseDrag: function(event) {
-
- //Increase performance, avoid regex
- var data,
- el = this.helper, props = {},
- smp = this.originalMousePosition,
- a = this.axis,
- prevTop = this.position.top,
- prevLeft = this.position.left,
- prevWidth = this.size.width,
- prevHeight = this.size.height,
- dx = (event.pageX-smp.left)||0,
- dy = (event.pageY-smp.top)||0,
- trigger = this._change[a];
-
- if (!trigger) {
- return false;
- }
-
- // Calculate the attrs that will be change
- data = trigger.apply(this, [event, dx, dy]);
-
- // Put this in the mouseDrag handler since the user can start pressing shift while resizing
- this._updateVirtualBoundaries(event.shiftKey);
- if (this._aspectRatio || event.shiftKey) {
- data = this._updateRatio(data, event);
- }
-
- data = this._respectSize(data, event);
-
- this._updateCache(data);
-
- // plugins callbacks need to be called first
- this._propagate("resize", event);
-
- if (this.position.top !== prevTop) {
- props.top = this.position.top + "px";
- }
- if (this.position.left !== prevLeft) {
- props.left = this.position.left + "px";
- }
- if (this.size.width !== prevWidth) {
- props.width = this.size.width + "px";
- }
- if (this.size.height !== prevHeight) {
- props.height = this.size.height + "px";
- }
- el.css(props);
-
- if (!this._helper && this._proportionallyResizeElements.length) {
- this._proportionallyResize();
- }
-
- // Call the user callback if the element was resized
- if ( ! $.isEmptyObject(props) ) {
- this._trigger("resize", event, this.ui());
- }
-
- return false;
- },
-
- _mouseStop: function(event) {
-
- this.resizing = false;
- var pr, ista, soffseth, soffsetw, s, left, top,
- o = this.options, that = this;
-
- if(this._helper) {
-
- pr = this._proportionallyResizeElements;
- ista = pr.length && (/textarea/i).test(pr[0].nodeName);
- soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height;
- soffsetw = ista ? 0 : that.sizeDiff.width;
-
- s = { width: (that.helper.width() - soffsetw), height: (that.helper.height() - soffseth) };
- left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null;
- top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
-
- if (!o.animate) {
- this.element.css($.extend(s, { top: top, left: left }));
- }
-
- that.helper.height(that.size.height);
- that.helper.width(that.size.width);
-
- if (this._helper && !o.animate) {
- this._proportionallyResize();
- }
- }
-
- $("body").css("cursor", "auto");
-
- this.element.removeClass("ui-resizable-resizing");
-
- this._propagate("stop", event);
-
- if (this._helper) {
- this.helper.remove();
- }
-
- return false;
-
- },
-
- _updateVirtualBoundaries: function(forceAspectRatio) {
- var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
- o = this.options;
-
- b = {
- minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
- maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
- minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
- maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
- };
-
- if(this._aspectRatio || forceAspectRatio) {
- // We want to create an enclosing box whose aspect ration is the requested one
- // First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
- pMinWidth = b.minHeight * this.aspectRatio;
- pMinHeight = b.minWidth / this.aspectRatio;
- pMaxWidth = b.maxHeight * this.aspectRatio;
- pMaxHeight = b.maxWidth / this.aspectRatio;
-
- if(pMinWidth > b.minWidth) {
- b.minWidth = pMinWidth;
- }
- if(pMinHeight > b.minHeight) {
- b.minHeight = pMinHeight;
- }
- if(pMaxWidth < b.maxWidth) {
- b.maxWidth = pMaxWidth;
- }
- if(pMaxHeight < b.maxHeight) {
- b.maxHeight = pMaxHeight;
- }
- }
- this._vBoundaries = b;
- },
-
- _updateCache: function(data) {
- this.offset = this.helper.offset();
- if (isNumber(data.left)) {
- this.position.left = data.left;
- }
- if (isNumber(data.top)) {
- this.position.top = data.top;
- }
- if (isNumber(data.height)) {
- this.size.height = data.height;
- }
- if (isNumber(data.width)) {
- this.size.width = data.width;
- }
- },
-
- _updateRatio: function( data ) {
-
- var cpos = this.position,
- csize = this.size,
- a = this.axis;
-
- if (isNumber(data.height)) {
- data.width = (data.height * this.aspectRatio);
- } else if (isNumber(data.width)) {
- data.height = (data.width / this.aspectRatio);
- }
-
- if (a === "sw") {
- data.left = cpos.left + (csize.width - data.width);
- data.top = null;
- }
- if (a === "nw") {
- data.top = cpos.top + (csize.height - data.height);
- data.left = cpos.left + (csize.width - data.width);
- }
-
- return data;
- },
-
- _respectSize: function( data ) {
-
- var o = this._vBoundaries,
- a = this.axis,
- ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
- isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
- dw = this.originalPosition.left + this.originalSize.width,
- dh = this.position.top + this.size.height,
- cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
- if (isminw) {
- data.width = o.minWidth;
- }
- if (isminh) {
- data.height = o.minHeight;
- }
- if (ismaxw) {
- data.width = o.maxWidth;
- }
- if (ismaxh) {
- data.height = o.maxHeight;
- }
-
- if (isminw && cw) {
- data.left = dw - o.minWidth;
- }
- if (ismaxw && cw) {
- data.left = dw - o.maxWidth;
- }
- if (isminh && ch) {
- data.top = dh - o.minHeight;
- }
- if (ismaxh && ch) {
- data.top = dh - o.maxHeight;
- }
-
- // fixing jump error on top/left - bug #2330
- if (!data.width && !data.height && !data.left && data.top) {
- data.top = null;
- } else if (!data.width && !data.height && !data.top && data.left) {
- data.left = null;
- }
-
- return data;
- },
-
- _proportionallyResize: function() {
-
- if (!this._proportionallyResizeElements.length) {
- return;
- }
-
- var i, j, borders, paddings, prel,
- element = this.helper || this.element;
-
- for ( i=0; i < this._proportionallyResizeElements.length; i++) {
-
- prel = this._proportionallyResizeElements[i];
-
- if (!this.borderDif) {
- this.borderDif = [];
- borders = [prel.css("borderTopWidth"), prel.css("borderRightWidth"), prel.css("borderBottomWidth"), prel.css("borderLeftWidth")];
- paddings = [prel.css("paddingTop"), prel.css("paddingRight"), prel.css("paddingBottom"), prel.css("paddingLeft")];
-
- for ( j = 0; j < borders.length; j++ ) {
- this.borderDif[ j ] = ( parseInt( borders[ j ], 10 ) || 0 ) + ( parseInt( paddings[ j ], 10 ) || 0 );
- }
- }
-
- prel.css({
- height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
- width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
- });
-
- }
-
- },
-
- _renderProxy: function() {
-
- var el = this.element, o = this.options;
- this.elementOffset = el.offset();
-
- if(this._helper) {
-
- this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
-
- this.helper.addClass(this._helper).css({
- width: this.element.outerWidth() - 1,
- height: this.element.outerHeight() - 1,
- position: "absolute",
- left: this.elementOffset.left +"px",
- top: this.elementOffset.top +"px",
- zIndex: ++o.zIndex //TODO: Don't modify option
- });
-
- this.helper
- .appendTo("body")
- .disableSelection();
-
- } else {
- this.helper = this.element;
- }
-
- },
-
- _change: {
- e: function(event, dx) {
- return { width: this.originalSize.width + dx };
- },
- w: function(event, dx) {
- var cs = this.originalSize, sp = this.originalPosition;
- return { left: sp.left + dx, width: cs.width - dx };
- },
- n: function(event, dx, dy) {
- var cs = this.originalSize, sp = this.originalPosition;
- return { top: sp.top + dy, height: cs.height - dy };
- },
- s: function(event, dx, dy) {
- return { height: this.originalSize.height + dy };
- },
- se: function(event, dx, dy) {
- return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
- },
- sw: function(event, dx, dy) {
- return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
- },
- ne: function(event, dx, dy) {
- return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
- },
- nw: function(event, dx, dy) {
- return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
- }
- },
-
- _propagate: function(n, event) {
- $.ui.plugin.call(this, n, [event, this.ui()]);
- (n !== "resize" && this._trigger(n, event, 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
- };
- }
-
-});
-
-/*
- * Resizable Extensions
- */
-
-$.ui.plugin.add("resizable", "animate", {
-
- stop: function( event ) {
- var that = $(this).data("ui-resizable"),
- o = that.options,
- pr = that._proportionallyResizeElements,
- ista = pr.length && (/textarea/i).test(pr[0].nodeName),
- soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height,
- soffsetw = ista ? 0 : that.sizeDiff.width,
- style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
- left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null,
- top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
-
- that.element.animate(
- $.extend(style, top && left ? { top: top, left: left } : {}), {
- duration: o.animateDuration,
- easing: o.animateEasing,
- step: function() {
-
- var data = {
- width: parseInt(that.element.css("width"), 10),
- height: parseInt(that.element.css("height"), 10),
- top: parseInt(that.element.css("top"), 10),
- left: parseInt(that.element.css("left"), 10)
- };
-
- if (pr && pr.length) {
- $(pr[0]).css({ width: data.width, height: data.height });
- }
-
- // propagating resize, and updating values for each animation step
- that._updateCache(data);
- that._propagate("resize", event);
-
- }
- }
- );
- }
-
-});
-
-$.ui.plugin.add("resizable", "containment", {
-
- start: function() {
- var element, p, co, ch, cw, width, height,
- that = $(this).data("ui-resizable"),
- o = that.options,
- el = that.element,
- oc = o.containment,
- ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
-
- if (!ce) {
- return;
- }
-
- that.containerElement = $(ce);
-
- if (/document/.test(oc) || oc === document) {
- that.containerOffset = { left: 0, top: 0 };
- that.containerPosition = { left: 0, top: 0 };
-
- that.parentData = {
- element: $(document), left: 0, top: 0,
- width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
- };
- }
-
- // i'm a node, so compute top, left, right, bottom
- else {
- element = $(ce);
- p = [];
- $([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
-
- that.containerOffset = element.offset();
- that.containerPosition = element.position();
- that.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
-
- co = that.containerOffset;
- ch = that.containerSize.height;
- cw = that.containerSize.width;
- width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw );
- height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
-
- that.parentData = {
- element: ce, left: co.left, top: co.top, width: width, height: height
- };
- }
- },
-
- resize: function( event ) {
- var woset, hoset, isParent, isOffsetRelative,
- that = $(this).data("ui-resizable"),
- o = that.options,
- co = that.containerOffset, cp = that.position,
- pRatio = that._aspectRatio || event.shiftKey,
- cop = { top:0, left:0 }, ce = that.containerElement;
-
- if (ce[0] !== document && (/static/).test(ce.css("position"))) {
- cop = co;
- }
-
- if (cp.left < (that._helper ? co.left : 0)) {
- that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left));
- if (pRatio) {
- that.size.height = that.size.width / that.aspectRatio;
- }
- that.position.left = o.helper ? co.left : 0;
- }
-
- if (cp.top < (that._helper ? co.top : 0)) {
- that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top);
- if (pRatio) {
- that.size.width = that.size.height * that.aspectRatio;
- }
- that.position.top = that._helper ? co.top : 0;
- }
-
- that.offset.left = that.parentData.left+that.position.left;
- that.offset.top = that.parentData.top+that.position.top;
-
- woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width );
- hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height );
-
- isParent = that.containerElement.get(0) === that.element.parent().get(0);
- isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position"));
-
- if ( isParent && isOffsetRelative ) {
- woset -= Math.abs( that.parentData.left );
- }
-
- if (woset + that.size.width >= that.parentData.width) {
- that.size.width = that.parentData.width - woset;
- if (pRatio) {
- that.size.height = that.size.width / that.aspectRatio;
- }
- }
-
- if (hoset + that.size.height >= that.parentData.height) {
- that.size.height = that.parentData.height - hoset;
- if (pRatio) {
- that.size.width = that.size.height * that.aspectRatio;
- }
- }
- },
-
- stop: function(){
- var that = $(this).data("ui-resizable"),
- o = that.options,
- co = that.containerOffset,
- cop = that.containerPosition,
- ce = that.containerElement,
- helper = $(that.helper),
- ho = helper.offset(),
- w = helper.outerWidth() - that.sizeDiff.width,
- h = helper.outerHeight() - that.sizeDiff.height;
-
- if (that._helper && !o.animate && (/relative/).test(ce.css("position"))) {
- $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
- }
-
- if (that._helper && !o.animate && (/static/).test(ce.css("position"))) {
- $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
- }
-
- }
-});
-
-$.ui.plugin.add("resizable", "alsoResize", {
-
- start: function () {
- var that = $(this).data("ui-resizable"),
- o = that.options,
- _store = function (exp) {
- $(exp).each(function() {
- var el = $(this);
- el.data("ui-resizable-alsoresize", {
- width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
- left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
- });
- });
- };
-
- if (typeof(o.alsoResize) === "object" && !o.alsoResize.parentNode) {
- if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
- else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
- }else{
- _store(o.alsoResize);
- }
- },
-
- resize: function (event, ui) {
- var that = $(this).data("ui-resizable"),
- o = that.options,
- os = that.originalSize,
- op = that.originalPosition,
- delta = {
- height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0,
- top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0
- },
-
- _alsoResize = function (exp, c) {
- $(exp).each(function() {
- var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
- css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
-
- $.each(css, function (i, prop) {
- var sum = (start[prop]||0) + (delta[prop]||0);
- if (sum && sum >= 0) {
- style[prop] = sum || null;
- }
- });
-
- el.css(style);
- });
- };
-
- if (typeof(o.alsoResize) === "object" && !o.alsoResize.nodeType) {
- $.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
- }else{
- _alsoResize(o.alsoResize);
- }
- },
-
- stop: function () {
- $(this).removeData("resizable-alsoresize");
- }
-});
-
-$.ui.plugin.add("resizable", "ghost", {
-
- start: function() {
-
- var that = $(this).data("ui-resizable"), o = that.options, cs = that.size;
-
- that.ghost = that.originalElement.clone();
- that.ghost
- .css({ opacity: 0.25, display: "block", position: "relative", height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
- .addClass("ui-resizable-ghost")
- .addClass(typeof o.ghost === "string" ? o.ghost : "");
-
- that.ghost.appendTo(that.helper);
-
- },
-
- resize: function(){
- var that = $(this).data("ui-resizable");
- if (that.ghost) {
- that.ghost.css({ position: "relative", height: that.size.height, width: that.size.width });
- }
- },
-
- stop: function() {
- var that = $(this).data("ui-resizable");
- if (that.ghost && that.helper) {
- that.helper.get(0).removeChild(that.ghost.get(0));
- }
- }
-
-});
-
-$.ui.plugin.add("resizable", "grid", {
-
- resize: function() {
- var that = $(this).data("ui-resizable"),
- o = that.options,
- cs = that.size,
- os = that.originalSize,
- op = that.originalPosition,
- a = that.axis,
- grid = typeof o.grid === "number" ? [o.grid, o.grid] : o.grid,
- gridX = (grid[0]||1),
- gridY = (grid[1]||1),
- ox = Math.round((cs.width - os.width) / gridX) * gridX,
- oy = Math.round((cs.height - os.height) / gridY) * gridY,
- newWidth = os.width + ox,
- newHeight = os.height + oy,
- isMaxWidth = o.maxWidth && (o.maxWidth < newWidth),
- isMaxHeight = o.maxHeight && (o.maxHeight < newHeight),
- isMinWidth = o.minWidth && (o.minWidth > newWidth),
- isMinHeight = o.minHeight && (o.minHeight > newHeight);
-
- o.grid = grid;
-
- if (isMinWidth) {
- newWidth = newWidth + gridX;
- }
- if (isMinHeight) {
- newHeight = newHeight + gridY;
- }
- if (isMaxWidth) {
- newWidth = newWidth - gridX;
- }
- if (isMaxHeight) {
- newHeight = newHeight - gridY;
- }
-
- if (/^(se|s|e)$/.test(a)) {
- that.size.width = newWidth;
- that.size.height = newHeight;
- } else if (/^(ne)$/.test(a)) {
- that.size.width = newWidth;
- that.size.height = newHeight;
- that.position.top = op.top - oy;
- } else if (/^(sw)$/.test(a)) {
- that.size.width = newWidth;
- that.size.height = newHeight;
- that.position.left = op.left - ox;
- } else {
- if ( newHeight - gridY > 0 ) {
- that.size.height = newHeight;
- that.position.top = op.top - oy;
- } else {
- that.size.height = gridY;
- that.position.top = op.top + os.height - gridY;
- }
- if ( newWidth - gridX > 0 ) {
- that.size.width = newWidth;
- that.position.left = op.left - ox;
- } else {
- that.size.width = gridX;
- that.position.left = op.left + os.width - gridX;
- }
- }
- }
-
-});
-
-})(jQuery);
-
-(function( $, undefined ) {
-
-$.widget("ui.selectable", $.ui.mouse, {
- version: "1.10.4",
- options: {
- appendTo: "body",
- autoRefresh: true,
- distance: 0,
- filter: "*",
- tolerance: "touch",
-
- // callbacks
- selected: null,
- selecting: null,
- start: null,
- stop: null,
- unselected: null,
- unselecting: null
- },
- _create: function() {
- var selectees,
- that = this;
-
- this.element.addClass("ui-selectable");
-
- this.dragged = false;
-
- // cache selectee children based on filter
- this.refresh = function() {
- selectees = $(that.options.filter, that.element[0]);
- selectees.addClass("ui-selectee");
- selectees.each(function() {
- var $this = $(this),
- pos = $this.offset();
- $.data(this, "selectable-item", {
- element: this,
- $element: $this,
- left: pos.left,
- top: pos.top,
- right: pos.left + $this.outerWidth(),
- bottom: pos.top + $this.outerHeight(),
- startselected: false,
- selected: $this.hasClass("ui-selected"),
- selecting: $this.hasClass("ui-selecting"),
- unselecting: $this.hasClass("ui-unselecting")
- });
- });
- };
- this.refresh();
-
- this.selectees = selectees.addClass("ui-selectee");
-
- this._mouseInit();
-
- this.helper = $("<div class='ui-selectable-helper'></div>");
- },
-
- _destroy: function() {
- this.selectees
- .removeClass("ui-selectee")
- .removeData("selectable-item");
- this.element
- .removeClass("ui-selectable ui-selectable-disabled");
- this._mouseDestroy();
- },
-
- _mouseStart: function(event) {
- var that = this,
- options = this.options;
-
- this.opos = [event.pageX, event.pageY];
-
- if (this.options.disabled) {
- return;
- }
-
- this.selectees = $(options.filter, this.element[0]);
-
- this._trigger("start", event);
-
- $(options.appendTo).append(this.helper);
- // position helper (lasso)
- this.helper.css({
- "left": event.pageX,
- "top": event.pageY,
- "width": 0,
- "height": 0
- });
-
- if (options.autoRefresh) {
- this.refresh();
- }
-
- this.selectees.filter(".ui-selected").each(function() {
- var selectee = $.data(this, "selectable-item");
- selectee.startselected = true;
- if (!event.metaKey && !event.ctrlKey) {
- selectee.$element.removeClass("ui-selected");
- selectee.selected = false;
- selectee.$element.addClass("ui-unselecting");
- selectee.unselecting = true;
- // selectable UNSELECTING callback
- that._trigger("unselecting", event, {
- unselecting: selectee.element
- });
- }
- });
-
- $(event.target).parents().addBack().each(function() {
- var doSelect,
- selectee = $.data(this, "selectable-item");
- if (selectee) {
- doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected");
- selectee.$element
- .removeClass(doSelect ? "ui-unselecting" : "ui-selected")
- .addClass(doSelect ? "ui-selecting" : "ui-unselecting");
- selectee.unselecting = !doSelect;
- selectee.selecting = doSelect;
- selectee.selected = doSelect;
- // selectable (UN)SELECTING callback
- if (doSelect) {
- that._trigger("selecting", event, {
- selecting: selectee.element
- });
- } else {
- that._trigger("unselecting", event, {
- unselecting: selectee.element
- });
- }
- return false;
- }
- });
-
- },
-
- _mouseDrag: function(event) {
-
- this.dragged = true;
-
- if (this.options.disabled) {
- return;
- }
-
- var tmp,
- that = this,
- options = this.options,
- x1 = this.opos[0],
- y1 = this.opos[1],
- x2 = event.pageX,
- y2 = event.pageY;
-
- if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }
- if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }
- this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
-
- this.selectees.each(function() {
- var selectee = $.data(this, "selectable-item"),
- hit = false;
-
- //prevent helper from being selected if appendTo: selectable
- if (!selectee || selectee.element === that.element[0]) {
- return;
- }
-
- if (options.tolerance === "touch") {
- hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
- } else if (options.tolerance === "fit") {
- hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
- }
-
- if (hit) {
- // SELECT
- if (selectee.selected) {
- selectee.$element.removeClass("ui-selected");
- selectee.selected = false;
- }
- if (selectee.unselecting) {
- selectee.$element.removeClass("ui-unselecting");
- selectee.unselecting = false;
- }
- if (!selectee.selecting) {
- selectee.$element.addClass("ui-selecting");
- selectee.selecting = true;
- // selectable SELECTING callback
- that._trigger("selecting", event, {
- selecting: selectee.element
- });
- }
- } else {
- // UNSELECT
- if (selectee.selecting) {
- if ((event.metaKey || event.ctrlKey) && selectee.startselected) {
- selectee.$element.removeClass("ui-selecting");
- selectee.selecting = false;
- selectee.$element.addClass("ui-selected");
- selectee.selected = true;
- } else {
- selectee.$element.removeClass("ui-selecting");
- selectee.selecting = false;
- if (selectee.startselected) {
- selectee.$element.addClass("ui-unselecting");
- selectee.unselecting = true;
- }
- // selectable UNSELECTING callback
- that._trigger("unselecting", event, {
- unselecting: selectee.element
- });
- }
- }
- if (selectee.selected) {
- if (!event.metaKey && !event.ctrlKey && !selectee.startselected) {
- selectee.$element.removeClass("ui-selected");
- selectee.selected = false;
-
- selectee.$element.addClass("ui-unselecting");
- selectee.unselecting = true;
- // selectable UNSELECTING callback
- that._trigger("unselecting", event, {
- unselecting: selectee.element
- });
- }
- }
- }
- });
-
- return false;
- },
-
- _mouseStop: function(event) {
- var that = this;
-
- this.dragged = false;
-
- $(".ui-unselecting", this.element[0]).each(function() {
- var selectee = $.data(this, "selectable-item");
- selectee.$element.removeClass("ui-unselecting");
- selectee.unselecting = false;
- selectee.startselected = false;
- that._trigger("unselected", event, {
- unselected: selectee.element
- });
- });
- $(".ui-selecting", this.element[0]).each(function() {
- var selectee = $.data(this, "selectable-item");
- selectee.$element.removeClass("ui-selecting").addClass("ui-selected");
- selectee.selecting = false;
- selectee.selected = true;
- selectee.startselected = true;
- that._trigger("selected", event, {
- selected: selectee.element
- });
- });
- this._trigger("stop", event);
-
- this.helper.remove();
-
- return false;
- }
-
-});
-
-})(jQuery);
-
-(function( $, undefined ) {
-
-function isOverAxis( x, reference, size ) {
- return ( x > reference ) && ( x < ( reference + size ) );
-}
-
-function isFloating(item) {
- return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
-}
-
-$.widget("ui.sortable", $.ui.mouse, {
- version: "1.10.4",
- widgetEventPrefix: "sort",
- ready: false,
- options: {
- appendTo: "parent",
- axis: false,
- connectWith: false,
- containment: false,
- cursor: "auto",
- cursorAt: false,
- dropOnEmpty: true,
- forcePlaceholderSize: false,
- forceHelperSize: false,
- grid: false,
- handle: false,
- helper: "original",
- items: "> *",
- opacity: false,
- placeholder: false,
- revert: false,
- scroll: true,
- scrollSensitivity: 20,
- scrollSpeed: 20,
- scope: "default",
- tolerance: "intersect",
- zIndex: 1000,
-
- // callbacks
- activate: null,
- beforeStop: null,
- change: null,
- deactivate: null,
- out: null,
- over: null,
- receive: null,
- remove: null,
- sort: null,
- start: null,
- stop: null,
- update: null
- },
- _create: function() {
-
- var o = this.options;
- this.containerCache = {};
- this.element.addClass("ui-sortable");
-
- //Get the items
- this.refresh();
-
- //Let's determine if the items are being displayed horizontally
- this.floating = this.items.length ? o.axis === "x" || isFloating(this.items[0].item) : false;
-
- //Let's determine the parent's offset
- this.offset = this.element.offset();
-
- //Initialize mouse events for interaction
- this._mouseInit();
-
- //We're ready to go
- this.ready = true;
-
- },
-
- _destroy: function() {
- this.element
- .removeClass("ui-sortable ui-sortable-disabled");
- this._mouseDestroy();
-
- for ( var i = this.items.length - 1; i >= 0; i-- ) {
- this.items[i].item.removeData(this.widgetName + "-item");
- }
-
- return this;
- },
-
- _setOption: function(key, value){
- if ( key === "disabled" ) {
- this.options[ key ] = value;
-
- this.widget().toggleClass( "ui-sortable-disabled", !!value );
- } else {
- // Don't call widget base _setOption for disable as it adds ui-state-disabled class
- $.Widget.prototype._setOption.apply(this, arguments);
- }
- },
-
- _mouseCapture: function(event, overrideHandle) {
- var currentItem = null,
- validHandle = false,
- that = this;
-
- if (this.reverting) {
- return false;
- }
-
- if(this.options.disabled || this.options.type === "static") {
- return false;
- }
-
- //We have to refresh the items data once first
- this._refreshItems(event);
-
- //Find out if the clicked node (or one of its parents) is a actual item in this.items
- $(event.target).parents().each(function() {
- if($.data(this, that.widgetName + "-item") === that) {
- currentItem = $(this);
- return false;
- }
- });
- if($.data(event.target, that.widgetName + "-item") === that) {
- currentItem = $(event.target);
- }
-
- if(!currentItem) {
- return false;
- }
- if(this.options.handle && !overrideHandle) {
- $(this.options.handle, currentItem).find("*").addBack().each(function() {
- if(this === event.target) {
- validHandle = true;
- }
- });
- if(!validHandle) {
- return false;
- }
- }
-
- this.currentItem = currentItem;
- this._removeCurrentsFromItems();
- return true;
-
- },
-
- _mouseStart: function(event, overrideHandle, noActivation) {
-
- var i, body,
- o = this.options;
-
- this.currentContainer = this;
-
- //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
- this.refreshPositions();
-
- //Create and append the visible helper
- this.helper = this._createHelper(event);
-
- //Cache the helper size
- this._cacheHelperProportions();
-
- /*
- * - Position generation -
- * This block generates everything position related - it's the core of draggables.
- */
-
- //Cache the margins of the original element
- this._cacheMargins();
-
- //Get the next scrolling parent
- this.scrollParent = this.helper.scrollParent();
-
- //The element's absolute position on the page minus margins
- this.offset = this.currentItem.offset();
- this.offset = {
- top: this.offset.top - this.margins.top,
- left: this.offset.left - this.margins.left
- };
-
- $.extend(this.offset, {
- click: { //Where the click happened, relative to the element
- left: event.pageX - this.offset.left,
- top: event.pageY - this.offset.top
- },
- parent: this._getParentOffset(),
- relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
- });
-
- // Only after we got the offset, we can change the helper's position to absolute
- // TODO: Still need to figure out a way to make relative sorting possible
- this.helper.css("position", "absolute");
- this.cssPosition = this.helper.css("position");
-
- //Generate the original position
- this.originalPosition = this._generatePosition(event);
- this.originalPageX = event.pageX;
- this.originalPageY = event.pageY;
-
- //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
- (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
-
- //Cache the former DOM position
- this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
-
- //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
- if(this.helper[0] !== this.currentItem[0]) {
- this.currentItem.hide();
- }
-
- //Create the placeholder
- this._createPlaceholder();
-
- //Set a containment if given in the options
- if(o.containment) {
- this._setContainment();
- }
-
- if( o.cursor && o.cursor !== "auto" ) { // cursor option
- body = this.document.find( "body" );
-
- // support: IE
- this.storedCursor = body.css( "cursor" );
- body.css( "cursor", o.cursor );
-
- this.storedStylesheet = $( "<style>*{ cursor: "+o.cursor+" !important; }</style>" ).appendTo( body );
- }
-
- if(o.opacity) { // opacity option
- if (this.helper.css("opacity")) {
- this._storedOpacity = this.helper.css("opacity");
- }
- this.helper.css("opacity", o.opacity);
- }
-
- if(o.zIndex) { // zIndex option
- if (this.helper.css("zIndex")) {
- this._storedZIndex = this.helper.css("zIndex");
- }
- this.helper.css("zIndex", o.zIndex);
- }
-
- //Prepare scrolling
- if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
- this.overflowOffset = this.scrollParent.offset();
- }
-
- //Call callbacks
- this._trigger("start", event, this._uiHash());
-
- //Recache the helper size
- if(!this._preserveHelperProportions) {
- this._cacheHelperProportions();
- }
-
-
- //Post "activate" events to possible containers
- if( !noActivation ) {
- for ( i = this.containers.length - 1; i >= 0; i-- ) {
- this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
- }
- }
-
- //Prepare possible droppables
- if($.ui.ddmanager) {
- $.ui.ddmanager.current = this;
- }
-
- if ($.ui.ddmanager && !o.dropBehaviour) {
- $.ui.ddmanager.prepareOffsets(this, event);
- }
-
- this.dragging = true;
-
- this.helper.addClass("ui-sortable-helper");
- this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
- return true;
-
- },
-
- _mouseDrag: function(event) {
- var i, item, itemElement, intersection,
- o = this.options,
- scrolled = false;
-
- //Compute the helpers position
- this.position = this._generatePosition(event);
- this.positionAbs = this._convertPositionTo("absolute");
-
- if (!this.lastPositionAbs) {
- this.lastPositionAbs = this.positionAbs;
- }
-
- //Do scrolling
- if(this.options.scroll) {
- if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
-
- if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
- this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
- } else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
- this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
- }
-
- if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
- this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
- } else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
- this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
- }
-
- } else {
-
- if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
- scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
- } else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
- scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
- }
-
- if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
- scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
- } else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
- scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
- }
-
- }
-
- if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
- $.ui.ddmanager.prepareOffsets(this, event);
- }
- }
-
- //Regenerate the absolute position used for position checks
- this.positionAbs = this._convertPositionTo("absolute");
-
- //Set the helper position
- if(!this.options.axis || this.options.axis !== "y") {
- this.helper[0].style.left = this.position.left+"px";
- }
- if(!this.options.axis || this.options.axis !== "x") {
- this.helper[0].style.top = this.position.top+"px";
- }
-
- //Rearrange
- for (i = this.items.length - 1; i >= 0; i--) {
-
- //Cache variables and intersection, continue if no intersection
- item = this.items[i];
- itemElement = item.item[0];
- intersection = this._intersectsWithPointer(item);
- if (!intersection) {
- continue;
- }
-
- // Only put the placeholder inside the current Container, skip all
- // items from other containers. This works because when moving
- // an item from one container to another the
- // currentContainer is switched before the placeholder is moved.
- //
- // Without this, moving items in "sub-sortables" can cause
- // the placeholder to jitter beetween the outer and inner container.
- if (item.instance !== this.currentContainer) {
- continue;
- }
-
- // cannot intersect with itself
- // no useless actions that have been done before
- // no action if the item moved is the parent of the item checked
- if (itemElement !== this.currentItem[0] &&
- this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement &&
- !$.contains(this.placeholder[0], itemElement) &&
- (this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
- ) {
-
- this.direction = intersection === 1 ? "down" : "up";
-
- if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) {
- this._rearrange(event, item);
- } else {
- break;
- }
-
- this._trigger("change", event, this._uiHash());
- break;
- }
- }
-
- //Post events to containers
- this._contactContainers(event);
-
- //Interconnect with droppables
- if($.ui.ddmanager) {
- $.ui.ddmanager.drag(this, event);
- }
-
- //Call callbacks
- this._trigger("sort", event, this._uiHash());
-
- this.lastPositionAbs = this.positionAbs;
- return false;
-
- },
-
- _mouseStop: function(event, noPropagation) {
-
- if(!event) {
- return;
- }
-
- //If we are using droppables, inform the manager about the drop
- if ($.ui.ddmanager && !this.options.dropBehaviour) {
- $.ui.ddmanager.drop(this, event);
- }
-
- if(this.options.revert) {
- var that = this,
- cur = this.placeholder.offset(),
- axis = this.options.axis,
- animation = {};
-
- if ( !axis || axis === "x" ) {
- animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft);
- }
- if ( !axis || axis === "y" ) {
- animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop);
- }
- this.reverting = true;
- $(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {
- that._clear(event);
- });
- } else {
- this._clear(event, noPropagation);
- }
-
- return false;
-
- },
-
- cancel: function() {
-
- if(this.dragging) {
-
- this._mouseUp({ target: null });
-
- if(this.options.helper === "original") {
- this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
- } else {
- this.currentItem.show();
- }
-
- //Post deactivating events to containers
- for (var i = this.containers.length - 1; i >= 0; i--){
- this.containers[i]._trigger("deactivate", null, this._uiHash(this));
- if(this.containers[i].containerCache.over) {
- this.containers[i]._trigger("out", null, this._uiHash(this));
- this.containers[i].containerCache.over = 0;
- }
- }
-
- }
-
- if (this.placeholder) {
- //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
- if(this.placeholder[0].parentNode) {
- this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
- }
- if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) {
- this.helper.remove();
- }
-
- $.extend(this, {
- helper: null,
- dragging: false,
- reverting: false,
- _noFinalSort: null
- });
-
- if(this.domPosition.prev) {
- $(this.domPosition.prev).after(this.currentItem);
- } else {
- $(this.domPosition.parent).prepend(this.currentItem);
- }
- }
-
- return this;
-
- },
-
- serialize: function(o) {
-
- var items = this._getItemsAsjQuery(o && o.connected),
- str = [];
- o = o || {};
-
- $(items).each(function() {
- var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/));
- if (res) {
- str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2]));
- }
- });
-
- if(!str.length && o.key) {
- str.push(o.key + "=");
- }
-
- return str.join("&");
-
- },
-
- toArray: function(o) {
-
- var items = this._getItemsAsjQuery(o && o.connected),
- ret = [];
-
- o = o || {};
-
- items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); });
- return ret;
-
- },
-
- /* Be careful with the following core functions */
- _intersectsWith: function(item) {
-
- var x1 = this.positionAbs.left,
- x2 = x1 + this.helperProportions.width,
- y1 = this.positionAbs.top,
- y2 = y1 + this.helperProportions.height,
- l = item.left,
- r = l + item.width,
- t = item.top,
- b = t + item.height,
- dyClick = this.offset.click.top,
- dxClick = this.offset.click.left,
- isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),
- isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),
- isOverElement = isOverElementHeight && isOverElementWidth;
-
- if ( this.options.tolerance === "pointer" ||
- this.options.forcePointerForContainers ||
- (this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"])
- ) {
- return isOverElement;
- } else {
-
- return (l < x1 + (this.helperProportions.width / 2) && // Right Half
- x2 - (this.helperProportions.width / 2) < r && // Left Half
- t < y1 + (this.helperProportions.height / 2) && // Bottom Half
- y2 - (this.helperProportions.height / 2) < b ); // Top Half
-
- }
- },
-
- _intersectsWithPointer: function(item) {
-
- var isOverElementHeight = (this.options.axis === "x") || isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
- isOverElementWidth = (this.options.axis === "y") || isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
- isOverElement = isOverElementHeight && isOverElementWidth,
- verticalDirection = this._getDragVerticalDirection(),
- horizontalDirection = this._getDragHorizontalDirection();
-
- if (!isOverElement) {
- return false;
- }
-
- return this.floating ?
- ( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 )
- : ( verticalDirection && (verticalDirection === "down" ? 2 : 1) );
-
- },
-
- _intersectsWithSides: function(item) {
-
- var isOverBottomHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
- isOverRightHalf = isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
- verticalDirection = this._getDragVerticalDirection(),
- horizontalDirection = this._getDragHorizontalDirection();
-
- if (this.floating && horizontalDirection) {
- return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf));
- } else {
- return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf));
- }
-
- },
-
- _getDragVerticalDirection: function() {
- var delta = this.positionAbs.top - this.lastPositionAbs.top;
- return delta !== 0 && (delta > 0 ? "down" : "up");
- },
-
- _getDragHorizontalDirection: function() {
- var delta = this.positionAbs.left - this.lastPositionAbs.left;
- return delta !== 0 && (delta > 0 ? "right" : "left");
- },
-
- refresh: function(event) {
- this._refreshItems(event);
- this.refreshPositions();
- return this;
- },
-
- _connectWith: function() {
- var options = this.options;
- return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;
- },
-
- _getItemsAsjQuery: function(connected) {
-
- var i, j, cur, inst,
- items = [],
- queries = [],
- connectWith = this._connectWith();
-
- if(connectWith && connected) {
- for (i = connectWith.length - 1; i >= 0; i--){
- cur = $(connectWith[i]);
- for ( j = cur.length - 1; j >= 0; j--){
- inst = $.data(cur[j], this.widgetFullName);
- if(inst && inst !== this && !inst.options.disabled) {
- queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
- }
- }
- }
- }
-
- queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
-
- function addItems() {
- items.push( this );
- }
- for (i = queries.length - 1; i >= 0; i--){
- queries[i][0].each( addItems );
- }
-
- return $(items);
-
- },
-
- _removeCurrentsFromItems: function() {
-
- var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
-
- this.items = $.grep(this.items, function (item) {
- for (var j=0; j < list.length; j++) {
- if(list[j] === item.item[0]) {
- return false;
- }
- }
- return true;
- });
-
- },
-
- _refreshItems: function(event) {
-
- this.items = [];
- this.containers = [this];
-
- var i, j, cur, inst, targetData, _queries, item, queriesLength,
- items = this.items,
- queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],
- connectWith = this._connectWith();
-
- if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
- for (i = connectWith.length - 1; i >= 0; i--){
- cur = $(connectWith[i]);
- for (j = cur.length - 1; j >= 0; j--){
- inst = $.data(cur[j], this.widgetFullName);
- if(inst && inst !== this && !inst.options.disabled) {
- queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
- this.containers.push(inst);
- }
- }
- }
- }
-
- for (i = queries.length - 1; i >= 0; i--) {
- targetData = queries[i][1];
- _queries = queries[i][0];
-
- for (j=0, queriesLength = _queries.length; j < queriesLength; j++) {
- item = $(_queries[j]);
-
- item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager)
-
- items.push({
- item: item,
- instance: targetData,
- width: 0, height: 0,
- left: 0, top: 0
- });
- }
- }
-
- },
-
- refreshPositions: function(fast) {
-
- //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
- if(this.offsetParent && this.helper) {
- this.offset.parent = this._getParentOffset();
- }
-
- var i, item, t, p;
-
- for (i = this.items.length - 1; i >= 0; i--){
- item = this.items[i];
-
- //We ignore calculating positions of all connected containers when we're not over them
- if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {
- continue;
- }
-
- t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
-
- if (!fast) {
- item.width = t.outerWidth();
- item.height = t.outerHeight();
- }
-
- p = t.offset();
- item.left = p.left;
- item.top = p.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--){
- p = this.containers[i].element.offset();
- this.containers[i].containerCache.left = p.left;
- this.containers[i].containerCache.top = p.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(that) {
- that = that || this;
- var className,
- o = that.options;
-
- if(!o.placeholder || o.placeholder.constructor === String) {
- className = o.placeholder;
- o.placeholder = {
- element: function() {
-
- var nodeName = that.currentItem[0].nodeName.toLowerCase(),
- element = $( "<" + nodeName + ">", that.document[0] )
- .addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
- .removeClass("ui-sortable-helper");
-
- if ( nodeName === "tr" ) {
- that.currentItem.children().each(function() {
- $( "<td>&#160;</td>", that.document[0] )
- .attr( "colspan", $( this ).attr( "colspan" ) || 1 )
- .appendTo( element );
- });
- } else if ( nodeName === "img" ) {
- element.attr( "src", that.currentItem.attr( "src" ) );
- }
-
- if ( !className ) {
- element.css( "visibility", "hidden" );
- }
-
- return element;
- },
- update: function(container, p) {
-
- // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
- // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
- if(className && !o.forcePlaceholderSize) {
- return;
- }
-
- //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
- if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); }
- if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); }
- }
- };
- }
-
- //Create the placeholder
- that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
-
- //Append it after the actual current item
- that.currentItem.after(that.placeholder);
-
- //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
- o.placeholder.update(that, that.placeholder);
-
- },
-
- _contactContainers: function(event) {
- var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, base, cur, nearBottom, floating,
- innermostContainer = null,
- innermostIndex = null;
-
- // get innermost container that intersects with item
- for (i = this.containers.length - 1; i >= 0; i--) {
-
- // never consider a container that's located within the item itself
- if($.contains(this.currentItem[0], this.containers[i].element[0])) {
- continue;
- }
-
- if(this._intersectsWith(this.containers[i].containerCache)) {
-
- // if we've already found a container and it's more "inner" than this, then continue
- if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {
- continue;
- }
-
- innermostContainer = this.containers[i];
- innermostIndex = i;
-
- } else {
- // container doesn't intersect. trigger "out" event if necessary
- if(this.containers[i].containerCache.over) {
- this.containers[i]._trigger("out", event, this._uiHash(this));
- this.containers[i].containerCache.over = 0;
- }
- }
-
- }
-
- // if no intersecting containers found, return
- if(!innermostContainer) {
- return;
- }
-
- // move the item into the container if it's not there already
- if(this.containers.length === 1) {
- if (!this.containers[innermostIndex].containerCache.over) {
- this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
- this.containers[innermostIndex].containerCache.over = 1;
- }
- } else {
-
- //When entering a new container, we will find the item with the least distance and append our item near it
- dist = 10000;
- itemWithLeastDistance = null;
- floating = innermostContainer.floating || isFloating(this.currentItem);
- posProperty = floating ? "left" : "top";
- sizeProperty = floating ? "width" : "height";
- base = this.positionAbs[posProperty] + this.offset.click[posProperty];
- for (j = this.items.length - 1; j >= 0; j--) {
- if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
- continue;
- }
- if(this.items[j].item[0] === this.currentItem[0]) {
- continue;
- }
- if (floating && !isOverAxis(this.positionAbs.top + this.offset.click.top, this.items[j].top, this.items[j].height)) {
- continue;
- }
- cur = this.items[j].item.offset()[posProperty];
- nearBottom = false;
- if(Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)){
- nearBottom = true;
- cur += this.items[j][sizeProperty];
- }
-
- if(Math.abs(cur - base) < dist) {
- dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
- this.direction = nearBottom ? "up": "down";
- }
- }
-
- //Check if dropOnEmpty is enabled
- if(!itemWithLeastDistance && !this.options.dropOnEmpty) {
- return;
- }
-
- if(this.currentContainer === this.containers[innermostIndex]) {
- return;
- }
-
- itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
- this._trigger("change", event, this._uiHash());
- this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
- this.currentContainer = this.containers[innermostIndex];
-
- //Update the placeholder
- this.options.placeholder.update(this.currentContainer, this.placeholder);
-
- this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
- this.containers[innermostIndex].containerCache.over = 1;
- }
-
-
- },
-
- _createHelper: function(event) {
-
- var o = this.options,
- helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem);
-
- //Add the helper to the DOM if that didn't happen already
- if(!helper.parents("body").length) {
- $(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
- }
-
- if(helper[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") };
- }
-
- if(!helper[0].style.width || o.forceHelperSize) {
- helper.width(this.currentItem.width());
- }
- if(!helper[0].style.height || o.forceHelperSize) {
- helper.height(this.currentItem.height());
- }
-
- return helper;
-
- },
-
- _adjustOffsetFromHelper: function(obj) {
- if (typeof obj === "string") {
- obj = obj.split(" ");
- }
- if ($.isArray(obj)) {
- obj = {left: +obj[0], top: +obj[1] || 0};
- }
- if ("left" in obj) {
- this.offset.click.left = obj.left + this.margins.left;
- }
- if ("right" in obj) {
- this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
- }
- if ("top" in obj) {
- this.offset.click.top = obj.top + this.margins.top;
- }
- if ("bottom" in obj) {
- this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
- }
- },
-
- _getParentOffset: function() {
-
-
- //Get the offsetParent and cache its position
- this.offsetParent = this.helper.offsetParent();
- var po = this.offsetParent.offset();
-
- // This is a special case where we need to modify a offset calculated on start, since the following happened:
- // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
- // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
- // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
- if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
- po.left += this.scrollParent.scrollLeft();
- po.top += this.scrollParent.scrollTop();
- }
-
- // This needs to be actually done for all browsers, since pageX/pageY includes this information
- // with an ugly IE fix
- if( this.offsetParent[0] === document.body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
- po = { top: 0, left: 0 };
- }
-
- return {
- top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
- left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
- };
-
- },
-
- _getRelativeOffset: function() {
-
- if(this.cssPosition === "relative") {
- var p = this.currentItem.position();
- return {
- top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
- left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
- };
- } else {
- 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 ce, co, over,
- o = this.options;
- if(o.containment === "parent") {
- o.containment = this.helper[0].parentNode;
- }
- if(o.containment === "document" || o.containment === "window") {
- this.containment = [
- 0 - this.offset.relative.left - this.offset.parent.left,
- 0 - this.offset.relative.top - this.offset.parent.top,
- $(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left,
- ($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
- ];
- }
-
- if(!(/^(document|window|parent)$/).test(o.containment)) {
- ce = $(o.containment)[0];
- co = $(o.containment).offset();
- over = ($(ce).css("overflow") !== "hidden");
-
- this.containment = [
- co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
- co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
- co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
- co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
- ];
- }
-
- },
-
- _convertPositionTo: function(d, pos) {
-
- if(!pos) {
- pos = this.position;
- }
- var mod = d === "absolute" ? 1 : -1,
- scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
- scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
-
- return {
- top: (
- pos.top + // The absolute mouse position
- this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
- this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border)
- ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
- ),
- left: (
- pos.left + // The absolute mouse position
- this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
- this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border)
- ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
- )
- };
-
- },
-
- _generatePosition: function(event) {
-
- var top, left,
- o = this.options,
- pageX = event.pageX,
- pageY = event.pageY,
- scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
-
- // This is another very weird special case that only happens for relative elements:
- // 1. If the css position is relative
- // 2. and the scroll parent is the document or similar to the offset parent
- // we have to refresh the relative offset during the scroll so there are no jumps
- if(this.cssPosition === "relative" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) {
- this.offset.relative = this._getRelativeOffset();
- }
-
- /*
- * - Position constraining -
- * Constrain the position to a mix of grid, containment.
- */
-
- if(this.originalPosition) { //If we are not dragging yet, we won't check for options
-
- if(this.containment) {
- if(event.pageX - this.offset.click.left < this.containment[0]) {
- pageX = this.containment[0] + this.offset.click.left;
- }
- if(event.pageY - this.offset.click.top < this.containment[1]) {
- pageY = this.containment[1] + this.offset.click.top;
- }
- if(event.pageX - this.offset.click.left > this.containment[2]) {
- pageX = this.containment[2] + this.offset.click.left;
- }
- if(event.pageY - this.offset.click.top > this.containment[3]) {
- pageY = this.containment[3] + this.offset.click.top;
- }
- }
-
- if(o.grid) {
- top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
- pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
-
- left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
- pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
- }
-
- }
-
- return {
- top: (
- pageY - // The absolute mouse position
- this.offset.click.top - // Click offset (relative to the element)
- this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent
- this.offset.parent.top + // The offsetParent's offset without borders (offset + border)
- ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
- ),
- left: (
- pageX - // The absolute mouse position
- this.offset.click.left - // Click offset (relative to the element)
- this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent
- this.offset.parent.left + // The offsetParent's offset without borders (offset + border)
- ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
- )
- };
-
- },
-
- _rearrange: function(event, i, a, hardRefresh) {
-
- a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling));
-
- //Various things done here to improve the performance:
- // 1. we create a setTimeout, that calls refreshPositions
- // 2. on the instance, we have a counter variable, that get's higher after every append
- // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
- // 4. this lets only the last addition to the timeout stack through
- this.counter = this.counter ? ++this.counter : 1;
- var counter = this.counter;
-
- this._delay(function() {
- if(counter === this.counter) {
- this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
- }
- });
-
- },
-
- _clear: function(event, noPropagation) {
-
- this.reverting = false;
- // We delay all events that have to be triggered to after the point where the placeholder has been removed and
- // everything else normalized again
- var i,
- delayedTriggers = [];
-
- // We first have to update the dom position of the actual currentItem
- // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
- if(!this._noFinalSort && this.currentItem.parent().length) {
- this.placeholder.before(this.currentItem);
- }
- this._noFinalSort = null;
-
- if(this.helper[0] === this.currentItem[0]) {
- for(i in this._storedCSS) {
- if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") {
- this._storedCSS[i] = "";
- }
- }
- this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
- } else {
- this.currentItem.show();
- }
-
- if(this.fromOutside && !noPropagation) {
- delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
- }
- if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {
- delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
- }
-
- // Check if the items Container has Changed and trigger appropriate
- // events.
- if (this !== this.currentContainer) {
- if(!noPropagation) {
- delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
- delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.currentContainer));
- delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.currentContainer));
- }
- }
-
-
- //Post events to containers
- function delayEvent( type, instance, container ) {
- return function( event ) {
- container._trigger( type, event, instance._uiHash( instance ) );
- };
- }
- for (i = this.containers.length - 1; i >= 0; i--){
- if (!noPropagation) {
- delayedTriggers.push( delayEvent( "deactivate", this, this.containers[ i ] ) );
- }
- if(this.containers[i].containerCache.over) {
- delayedTriggers.push( delayEvent( "out", this, this.containers[ i ] ) );
- this.containers[i].containerCache.over = 0;
- }
- }
-
- //Do what was originally in plugins
- if ( this.storedCursor ) {
- this.document.find( "body" ).css( "cursor", this.storedCursor );
- this.storedStylesheet.remove();
- }
- if(this._storedOpacity) {
- this.helper.css("opacity", this._storedOpacity);
- }
- if(this._storedZIndex) {
- this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex);
- }
-
- this.dragging = false;
- if(this.cancelHelperRemoval) {
- if(!noPropagation) {
- this._trigger("beforeStop", event, this._uiHash());
- for (i=0; i < delayedTriggers.length; i++) {
- delayedTriggers[i].call(this, event);
- } //Trigger all delayed events
- this._trigger("stop", event, this._uiHash());
- }
-
- this.fromOutside = false;
- return false;
- }
-
- if(!noPropagation) {
- this._trigger("beforeStop", event, this._uiHash());
- }
-
- //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
- this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
-
- if(this.helper[0] !== this.currentItem[0]) {
- this.helper.remove();
- }
- this.helper = null;
-
- if(!noPropagation) {
- for (i=0; i < delayedTriggers.length; i++) {
- delayedTriggers[i].call(this, event);
- } //Trigger all delayed events
- this._trigger("stop", event, this._uiHash());
- }
-
- this.fromOutside = false;
- return true;
-
- },
-
- _trigger: function() {
- if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
- this.cancel();
- }
- },
-
- _uiHash: function(_inst) {
- var inst = _inst || this;
- return {
- helper: inst.helper,
- placeholder: inst.placeholder || $([]),
- position: inst.position,
- originalPosition: inst.originalPosition,
- offset: inst.positionAbs,
- item: inst.currentItem,
- sender: _inst ? _inst.element : null
- };
- }
-
-});
-
-})(jQuery);
-
-(function($, undefined) {
-
-var dataSpace = "ui-effects-";
-
-$.effects = {
- effect: {}
-};
-
-/*!
- * jQuery Color Animations v2.1.2
- * https://github.com/jquery/jquery-color
- *
- * Copyright 2013 jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- *
- * Date: Wed Jan 16 08:47:09 2013 -0600
- */
-(function( jQuery, undefined ) {
-
- var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
-
- // plusequals test for += 100 -= 100
- rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
- // a set of RE's that can match strings and generate color tuples.
- stringParsers = [{
- re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
- parse: function( execResult ) {
- return [
- execResult[ 1 ],
- execResult[ 2 ],
- execResult[ 3 ],
- execResult[ 4 ]
- ];
- }
- }, {
- re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
- parse: function( execResult ) {
- return [
- execResult[ 1 ] * 2.55,
- execResult[ 2 ] * 2.55,
- execResult[ 3 ] * 2.55,
- execResult[ 4 ]
- ];
- }
- }, {
- // this regex ignores A-F because it's compared against an already lowercased string
- re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
- parse: function( execResult ) {
- return [
- parseInt( execResult[ 1 ], 16 ),
- parseInt( execResult[ 2 ], 16 ),
- parseInt( execResult[ 3 ], 16 )
- ];
- }
- }, {
- // this regex ignores A-F because it's compared against an already lowercased string
- re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
- parse: function( execResult ) {
- return [
- parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
- parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
- parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
- ];
- }
- }, {
- re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
- space: "hsla",
- parse: function( execResult ) {
- return [
- execResult[ 1 ],
- execResult[ 2 ] / 100,
- execResult[ 3 ] / 100,
- execResult[ 4 ]
- ];
- }
- }],
-
- // jQuery.Color( )
- color = jQuery.Color = function( color, green, blue, alpha ) {
- return new jQuery.Color.fn.parse( color, green, blue, alpha );
- },
- spaces = {
- 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"
- }
- }
- }
- },
- propTypes = {
- "byte": {
- floor: true,
- max: 255
- },
- "percent": {
- max: 1
- },
- "degrees": {
- mod: 360,
- floor: true
- }
- },
- support = color.support = {},
-
- // element for support tests
- supportElem = jQuery( "<p>" )[ 0 ],
-
- // colors = jQuery.Color.names
- colors,
-
- // local aliases of functions called often
- each = jQuery.each;
-
-// determine rgba support immediately
-supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
-support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
-
-// define cache name and alpha properties
-// for rgba and hsla spaces
-each( spaces, function( spaceName, space ) {
- space.cache = "_" + spaceName;
- space.props.alpha = {
- idx: 3,
- type: "percent",
- def: 1
- };
-});
-
-function clamp( value, prop, allowEmpty ) {
- var type = propTypes[ prop.type ] || {};
-
- if ( value == null ) {
- return (allowEmpty || !prop.def) ? null : prop.def;
- }
-
- // ~~ is an short way of doing floor for positive numbers
- value = type.floor ? ~~value : parseFloat( value );
-
- // IE will pass in empty strings as value for alpha,
- // which will hit this case
- if ( isNaN( value ) ) {
- return prop.def;
- }
-
- if ( type.mod ) {
- // we add mod before modding to make sure that negatives values
- // get converted properly: -10 -> 350
- return (value + type.mod) % type.mod;
- }
-
- // for now all property types without mod have min and max
- return 0 > value ? 0 : type.max < value ? type.max : value;
-}
-
-function stringParse( string ) {
- var inst = color(),
- rgba = inst._rgba = [];
-
- string = string.toLowerCase();
-
- each( stringParsers, function( i, parser ) {
- var parsed,
- match = parser.re.exec( string ),
- values = match && parser.parse( match ),
- spaceName = parser.space || "rgba";
-
- if ( values ) {
- parsed = inst[ spaceName ]( values );
-
- // if this was an rgba parse the assignment might happen twice
- // oh well....
- inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
- rgba = inst._rgba = parsed._rgba;
-
- // exit each( stringParsers ) here because we matched
- return false;
- }
- });
-
- // Found a stringParser that handled it
- if ( rgba.length ) {
-
- // if this came from a parsed string, force "transparent" when alpha is 0
- // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
- if ( rgba.join() === "0,0,0,0" ) {
- jQuery.extend( rgba, colors.transparent );
- }
- return inst;
- }
-
- // named colors
- return colors[ string ];
-}
-
-color.fn = jQuery.extend( color.prototype, {
- parse: function( red, green, blue, alpha ) {
- if ( red === undefined ) {
- this._rgba = [ null, null, null, null ];
- return this;
- }
- if ( red.jquery || red.nodeType ) {
- red = jQuery( red ).css( green );
- green = undefined;
- }
-
- var inst = this,
- type = jQuery.type( red ),
- rgba = this._rgba = [];
-
- // more than 1 argument specified - assume ( red, green, blue, alpha )
- if ( green !== undefined ) {
- red = [ red, green, blue, alpha ];
- type = "array";
- }
-
- if ( type === "string" ) {
- return this.parse( stringParse( red ) || colors._default );
- }
-
- if ( type === "array" ) {
- each( spaces.rgba.props, function( key, prop ) {
- rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
- });
- return this;
- }
-
- if ( type === "object" ) {
- if ( red instanceof color ) {
- each( spaces, function( spaceName, space ) {
- if ( red[ space.cache ] ) {
- inst[ space.cache ] = red[ space.cache ].slice();
- }
- });
- } else {
- each( spaces, function( spaceName, space ) {
- var cache = space.cache;
- each( space.props, function( key, prop ) {
-
- // if the cache doesn't exist, and we know how to convert
- if ( !inst[ cache ] && space.to ) {
-
- // if the value was null, we don't need to copy it
- // if the key was alpha, we don't need to copy it either
- if ( key === "alpha" || red[ key ] == null ) {
- return;
- }
- inst[ cache ] = space.to( inst._rgba );
- }
-
- // this is the only case where we allow nulls for ALL properties.
- // call clamp with alwaysAllowEmpty
- inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
- });
-
- // everything defined but alpha?
- if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
- // use the default of 1
- inst[ cache ][ 3 ] = 1;
- if ( space.from ) {
- inst._rgba = space.from( inst[ cache ] );
- }
- }
- });
- }
- return this;
- }
- },
- is: function( compare ) {
- var is = color( compare ),
- same = true,
- inst = this;
-
- each( spaces, function( _, space ) {
- var localCache,
- isCache = is[ space.cache ];
- if (isCache) {
- localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
- each( space.props, function( _, prop ) {
- if ( isCache[ prop.idx ] != null ) {
- same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
- return same;
- }
- });
- }
- return same;
- });
- return same;
- },
- _space: function() {
- var used = [],
- inst = this;
- each( spaces, function( spaceName, space ) {
- if ( inst[ space.cache ] ) {
- used.push( spaceName );
- }
- });
- return used.pop();
- },
- transition: function( other, distance ) {
- var end = color( other ),
- spaceName = end._space(),
- space = spaces[ spaceName ],
- startColor = this.alpha() === 0 ? color( "transparent" ) : this,
- start = startColor[ space.cache ] || space.to( startColor._rgba ),
- result = start.slice();
-
- end = end[ space.cache ];
- each( space.props, function( key, prop ) {
- var index = prop.idx,
- startValue = start[ index ],
- endValue = end[ index ],
- type = propTypes[ prop.type ] || {};
-
- // if null, don't override start value
- if ( endValue === null ) {
- return;
- }
- // if null - use end
- if ( startValue === null ) {
- result[ index ] = endValue;
- } else {
- if ( type.mod ) {
- if ( endValue - startValue > type.mod / 2 ) {
- startValue += type.mod;
- } else if ( startValue - endValue > type.mod / 2 ) {
- startValue -= type.mod;
- }
- }
- result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
- }
- });
- return this[ spaceName ]( result );
- },
- blend: function( opaque ) {
- // if we are already opaque - return ourself
- if ( this._rgba[ 3 ] === 1 ) {
- return this;
- }
-
- var rgb = this._rgba.slice(),
- a = rgb.pop(),
- blend = color( opaque )._rgba;
-
- return color( jQuery.map( rgb, function( v, i ) {
- return ( 1 - a ) * blend[ i ] + a * v;
- }));
- },
- toRgbaString: function() {
- var prefix = "rgba(",
- rgba = jQuery.map( this._rgba, function( v, i ) {
- return v == null ? ( i > 2 ? 1 : 0 ) : v;
- });
-
- if ( rgba[ 3 ] === 1 ) {
- rgba.pop();
- prefix = "rgb(";
- }
-
- return prefix + rgba.join() + ")";
- },
- toHslaString: function() {
- var prefix = "hsla(",
- hsla = jQuery.map( this.hsla(), function( v, i ) {
- if ( v == null ) {
- v = i > 2 ? 1 : 0;
- }
-
- // catch 1 and 2
- if ( i && i < 3 ) {
- v = Math.round( v * 100 ) + "%";
- }
- return v;
- });
-
- if ( hsla[ 3 ] === 1 ) {
- hsla.pop();
- prefix = "hsl(";
- }
- return prefix + hsla.join() + ")";
- },
- toHexString: function( includeAlpha ) {
- var rgba = this._rgba.slice(),
- alpha = rgba.pop();
-
- if ( includeAlpha ) {
- rgba.push( ~~( alpha * 255 ) );
- }
-
- return "#" + jQuery.map( rgba, function( v ) {
-
- // default to 0 when nulls exist
- v = ( v || 0 ).toString( 16 );
- return v.length === 1 ? "0" + v : v;
- }).join("");
- },
- toString: function() {
- return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
- }
-});
-color.fn.parse.prototype = color.fn;
-
-// hsla conversions adapted from:
-// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
-
-function hue2rgb( p, q, h ) {
- h = ( h + 1 ) % 1;
- if ( h * 6 < 1 ) {
- return p + (q - p) * h * 6;
- }
- if ( h * 2 < 1) {
- return q;
- }
- if ( h * 3 < 2 ) {
- return p + (q - p) * ((2/3) - h) * 6;
- }
- return p;
-}
-
-spaces.hsla.to = function ( rgba ) {
- if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
- return [ null, null, null, rgba[ 3 ] ];
- }
- var r = rgba[ 0 ] / 255,
- g = rgba[ 1 ] / 255,
- b = rgba[ 2 ] / 255,
- a = rgba[ 3 ],
- max = Math.max( r, g, b ),
- min = Math.min( r, g, b ),
- diff = max - min,
- add = max + min,
- l = add * 0.5,
- h, s;
-
- if ( min === max ) {
- h = 0;
- } else if ( r === max ) {
- h = ( 60 * ( g - b ) / diff ) + 360;
- } else if ( g === max ) {
- h = ( 60 * ( b - r ) / diff ) + 120;
- } else {
- h = ( 60 * ( r - g ) / diff ) + 240;
- }
-
- // chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
- // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
- if ( diff === 0 ) {
- s = 0;
- } else if ( l <= 0.5 ) {
- s = diff / add;
- } else {
- s = diff / ( 2 - add );
- }
- return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
-};
-
-spaces.hsla.from = function ( hsla ) {
- if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
- return [ null, null, null, hsla[ 3 ] ];
- }
- var h = hsla[ 0 ] / 360,
- s = hsla[ 1 ],
- l = hsla[ 2 ],
- a = hsla[ 3 ],
- q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
- p = 2 * l - q;
-
- return [
- Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
- Math.round( hue2rgb( p, q, h ) * 255 ),
- Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
- a
- ];
-};
-
-
-each( spaces, function( spaceName, space ) {
- var props = space.props,
- cache = space.cache,
- to = space.to,
- from = space.from;
-
- // makes rgba() and hsla()
- color.fn[ spaceName ] = function( value ) {
-
- // generate a cache for this space if it doesn't exist
- if ( to && !this[ cache ] ) {
- this[ cache ] = to( this._rgba );
- }
- if ( value === undefined ) {
- return this[ cache ].slice();
- }
-
- var ret,
- type = jQuery.type( value ),
- arr = ( type === "array" || type === "object" ) ? value : arguments,
- local = this[ cache ].slice();
-
- each( props, function( key, prop ) {
- var val = arr[ type === "object" ? key : prop.idx ];
- if ( val == null ) {
- val = local[ prop.idx ];
- }
- local[ prop.idx ] = clamp( val, prop );
- });
-
- if ( from ) {
- ret = color( from( local ) );
- ret[ cache ] = local;
- return ret;
- } else {
- return color( local );
- }
- };
-
- // makes red() green() blue() alpha() hue() saturation() lightness()
- each( props, function( key, prop ) {
- // alpha is included in more than one space
- if ( color.fn[ key ] ) {
- return;
- }
- color.fn[ key ] = function( value ) {
- var vtype = jQuery.type( value ),
- fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
- local = this[ fn ](),
- cur = local[ prop.idx ],
- match;
-
- if ( vtype === "undefined" ) {
- return cur;
- }
-
- if ( vtype === "function" ) {
- value = value.call( this, cur );
- vtype = jQuery.type( value );
- }
- if ( value == null && prop.empty ) {
- return this;
- }
- if ( vtype === "string" ) {
- match = rplusequals.exec( value );
- if ( match ) {
- value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
- }
- }
- local[ prop.idx ] = value;
- return this[ fn ]( local );
- };
- });
-});
-
-// add cssHook and .fx.step function for each named hook.
-// accept a space separated string of properties
-color.hook = function( hook ) {
- var hooks = hook.split( " " );
- each( hooks, function( i, hook ) {
- jQuery.cssHooks[ hook ] = {
- set: function( elem, value ) {
- var parsed, curElem,
- backgroundColor = "";
-
- if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
- value = color( parsed || value );
- if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
- curElem = hook === "backgroundColor" ? elem.parentNode : elem;
- while (
- (backgroundColor === "" || backgroundColor === "transparent") &&
- curElem && curElem.style
- ) {
- try {
- backgroundColor = jQuery.css( curElem, "backgroundColor" );
- curElem = curElem.parentNode;
- } catch ( e ) {
- }
- }
-
- value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
- backgroundColor :
- "_default" );
- }
-
- value = value.toRgbaString();
- }
- try {
- elem.style[ hook ] = value;
- } catch( e ) {
- // wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
- }
- }
- };
- jQuery.fx.step[ hook ] = function( fx ) {
- if ( !fx.colorInit ) {
- fx.start = color( fx.elem, hook );
- fx.end = color( fx.end );
- fx.colorInit = true;
- }
- jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
- };
- });
-
-};
-
-color.hook( stepHooks );
-
-jQuery.cssHooks.borderColor = {
- expand: function( value ) {
- var expanded = {};
-
- each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
- expanded[ "border" + part + "Color" ] = value;
- });
- return expanded;
- }
-};
-
-// Basic color names only.
-// Usage of any of the other color names requires adding yourself or including
-// jquery.color.svg-names.js.
-colors = jQuery.Color.names = {
- // 4.1. Basic color keywords
- 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",
-
- // 4.2.3. "transparent" color keyword
- transparent: [ null, null, null, 0 ],
-
- _default: "#ffffff"
-};
-
-})( jQuery );
-
-
-/******************************************************************************/
-/****************************** CLASS ANIMATIONS ******************************/
-/******************************************************************************/
-(function() {
-
-var classAnimationActions = [ "add", "remove", "toggle" ],
- shorthandStyles = {
- border: 1,
- borderBottom: 1,
- borderColor: 1,
- borderLeft: 1,
- borderRight: 1,
- borderTop: 1,
- borderWidth: 1,
- margin: 1,
- padding: 1
- };
-
-$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
- $.fx.step[ prop ] = function( fx ) {
- if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
- jQuery.style( fx.elem, prop, fx.end );
- fx.setAttr = true;
- }
- };
-});
-
-function getElementStyles( elem ) {
- var key, len,
- style = elem.ownerDocument.defaultView ?
- elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
- elem.currentStyle,
- styles = {};
-
- if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
- len = style.length;
- while ( len-- ) {
- key = style[ len ];
- if ( typeof style[ key ] === "string" ) {
- styles[ $.camelCase( key ) ] = style[ key ];
- }
- }
- // support: Opera, IE <9
- } else {
- for ( key in style ) {
- if ( typeof style[ key ] === "string" ) {
- styles[ key ] = style[ key ];
- }
- }
- }
-
- return styles;
-}
-
-
-function styleDifference( oldStyle, newStyle ) {
- var diff = {},
- name, value;
-
- for ( name in newStyle ) {
- value = newStyle[ name ];
- if ( oldStyle[ name ] !== value ) {
- if ( !shorthandStyles[ name ] ) {
- if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
- diff[ name ] = value;
- }
- }
- }
- }
-
- return diff;
-}
-
-// support: jQuery <1.8
-if ( !$.fn.addBack ) {
- $.fn.addBack = function( selector ) {
- return this.add( selector == null ?
- this.prevObject : this.prevObject.filter( selector )
- );
- };
-}
-
-$.effects.animateClass = function( value, duration, easing, callback ) {
- var o = $.speed( duration, easing, callback );
-
- return this.queue( function() {
- var animated = $( this ),
- baseClass = animated.attr( "class" ) || "",
- applyClassChange,
- allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
-
- // map the animated objects to store the original styles.
- allAnimations = allAnimations.map(function() {
- var el = $( this );
- return {
- el: el,
- start: getElementStyles( this )
- };
- });
-
- // apply class change
- applyClassChange = function() {
- $.each( classAnimationActions, function(i, action) {
- if ( value[ action ] ) {
- animated[ action + "Class" ]( value[ action ] );
- }
- });
- };
- applyClassChange();
-
- // map all animated objects again - calculate new styles and diff
- allAnimations = allAnimations.map(function() {
- this.end = getElementStyles( this.el[ 0 ] );
- this.diff = styleDifference( this.start, this.end );
- return this;
- });
-
- // apply original class
- animated.attr( "class", baseClass );
-
- // map all animated objects again - this time collecting a promise
- allAnimations = allAnimations.map(function() {
- var styleInfo = this,
- dfd = $.Deferred(),
- opts = $.extend({}, o, {
- queue: false,
- complete: function() {
- dfd.resolve( styleInfo );
- }
- });
-
- this.el.animate( this.diff, opts );
- return dfd.promise();
- });
-
- // once all animations have completed:
- $.when.apply( $, allAnimations.get() ).done(function() {
-
- // set the final class
- applyClassChange();
-
- // for each animated element,
- // clear all css properties that were animated
- $.each( arguments, function() {
- var el = this.el;
- $.each( this.diff, function(key) {
- el.css( key, "" );
- });
- });
-
- // this is guarnteed to be there if you use jQuery.speed()
- // it also handles dequeuing the next anim...
- o.complete.call( animated[ 0 ] );
- });
- });
-};
-
-$.fn.extend({
- addClass: (function( orig ) {
- return function( classNames, speed, easing, callback ) {
- return speed ?
- $.effects.animateClass.call( this,
- { add: classNames }, speed, easing, callback ) :
- orig.apply( this, arguments );
- };
- })( $.fn.addClass ),
-
- removeClass: (function( orig ) {
- return function( classNames, speed, easing, callback ) {
- return arguments.length > 1 ?
- $.effects.animateClass.call( this,
- { remove: classNames }, speed, easing, callback ) :
- orig.apply( this, arguments );
- };
- })( $.fn.removeClass ),
-
- toggleClass: (function( orig ) {
- return function( classNames, force, speed, easing, callback ) {
- if ( typeof force === "boolean" || force === undefined ) {
- if ( !speed ) {
- // without speed parameter
- return orig.apply( this, arguments );
- } else {
- return $.effects.animateClass.call( this,
- (force ? { add: classNames } : { remove: classNames }),
- speed, easing, callback );
- }
- } else {
- // without force parameter
- return $.effects.animateClass.call( this,
- { toggle: classNames }, force, speed, easing );
- }
- };
- })( $.fn.toggleClass ),
-
- switchClass: function( remove, add, speed, easing, callback) {
- return $.effects.animateClass.call( this, {
- add: add,
- remove: remove
- }, speed, easing, callback );
- }
-});
-
-})();
-
-/******************************************************************************/
-/*********************************** EFFECTS **********************************/
-/******************************************************************************/
-
-(function() {
-
-$.extend( $.effects, {
- version: "1.10.4",
-
- // Saves a set of properties in a data storage
- save: function( element, set ) {
- for( var i=0; i < set.length; i++ ) {
- if ( set[ i ] !== null ) {
- element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
- }
- }
- },
-
- // Restores a set of previously saved properties from a data storage
- restore: function( element, set ) {
- var val, i;
- for( i=0; i < set.length; i++ ) {
- if ( set[ i ] !== null ) {
- val = element.data( dataSpace + set[ i ] );
- // support: jQuery 1.6.2
- // http://bugs.jquery.com/ticket/9917
- // jQuery 1.6.2 incorrectly returns undefined for any falsy value.
- // We can't differentiate between "" and 0 here, so we just assume
- // empty string since it's likely to be a more common value...
- if ( val === undefined ) {
- val = "";
- }
- element.css( set[ i ], val );
- }
- }
- },
-
- setMode: function( el, mode ) {
- if (mode === "toggle") {
- mode = el.is( ":hidden" ) ? "show" : "hide";
- }
- return mode;
- },
-
- // Translates a [top,left] array into a baseline value
- // this should be a little more flexible in the future to handle a string & hash
- getBaseline: function( origin, original ) {
- var y, x;
- switch ( origin[ 0 ] ) {
- case "top": y = 0; break;
- case "middle": y = 0.5; break;
- case "bottom": y = 1; break;
- default: y = origin[ 0 ] / original.height;
- }
- switch ( origin[ 1 ] ) {
- case "left": x = 0; break;
- case "center": x = 0.5; break;
- case "right": x = 1; break;
- default: x = origin[ 1 ] / original.width;
- }
- return {
- x: x,
- y: y
- };
- },
-
- // Wraps the element around a wrapper that copies position properties
- createWrapper: function( element ) {
-
- // if the element is already wrapped, return it
- if ( element.parent().is( ".ui-effects-wrapper" )) {
- return element.parent();
- }
-
- // wrap the element
- var props = {
- width: element.outerWidth(true),
- height: element.outerHeight(true),
- "float": element.css( "float" )
- },
- wrapper = $( "<div></div>" )
- .addClass( "ui-effects-wrapper" )
- .css({
- fontSize: "100%",
- background: "transparent",
- border: "none",
- margin: 0,
- padding: 0
- }),
- // Store the size in case width/height are defined in % - Fixes #5245
- size = {
- width: element.width(),
- height: element.height()
- },
- active = document.activeElement;
-
- // support: Firefox
- // Firefox incorrectly exposes anonymous content
- // https://bugzilla.mozilla.org/show_bug.cgi?id=561664
- try {
- active.id;
- } catch( e ) {
- active = document.body;
- }
-
- element.wrap( wrapper );
-
- // Fixes #7595 - Elements lose focus when wrapped.
- if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
- $( active ).focus();
- }
-
- wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
-
- // transfer positioning properties to the wrapper
- if ( element.css( "position" ) === "static" ) {
- wrapper.css({ position: "relative" });
- element.css({ position: "relative" });
- } else {
- $.extend( props, {
- position: element.css( "position" ),
- zIndex: element.css( "z-index" )
- });
- $.each([ "top", "left", "bottom", "right" ], function(i, pos) {
- props[ pos ] = element.css( pos );
- if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
- props[ pos ] = "auto";
- }
- });
- element.css({
- position: "relative",
- top: 0,
- left: 0,
- right: "auto",
- bottom: "auto"
- });
- }
- element.css(size);
-
- return wrapper.css( props ).show();
- },
-
- removeWrapper: function( element ) {
- var active = document.activeElement;
-
- if ( element.parent().is( ".ui-effects-wrapper" ) ) {
- element.parent().replaceWith( element );
-
- // Fixes #7595 - Elements lose focus when wrapped.
- if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
- $( active ).focus();
- }
- }
-
-
- return element;
- },
-
- setTransition: function( element, list, factor, value ) {
- value = value || {};
- $.each( list, function( i, x ) {
- var unit = element.cssUnit( x );
- if ( unit[ 0 ] > 0 ) {
- value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
- }
- });
- return value;
- }
-});
-
-// return an effect options object for the given parameters:
-function _normalizeArguments( effect, options, speed, callback ) {
-
- // allow passing all options as the first parameter
- if ( $.isPlainObject( effect ) ) {
- options = effect;
- effect = effect.effect;
- }
-
- // convert to an object
- effect = { effect: effect };
-
- // catch (effect, null, ...)
- if ( options == null ) {
- options = {};
- }
-
- // catch (effect, callback)
- if ( $.isFunction( options ) ) {
- callback = options;
- speed = null;
- options = {};
- }
-
- // catch (effect, speed, ?)
- if ( typeof options === "number" || $.fx.speeds[ options ] ) {
- callback = speed;
- speed = options;
- options = {};
- }
-
- // catch (effect, options, callback)
- if ( $.isFunction( speed ) ) {
- callback = speed;
- speed = null;
- }
-
- // add options to effect
- if ( options ) {
- $.extend( effect, options );
- }
-
- speed = speed || options.duration;
- effect.duration = $.fx.off ? 0 :
- typeof speed === "number" ? speed :
- speed in $.fx.speeds ? $.fx.speeds[ speed ] :
- $.fx.speeds._default;
-
- effect.complete = callback || options.complete;
-
- return effect;
-}
-
-function standardAnimationOption( option ) {
- // Valid standard speeds (nothing, number, named speed)
- if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
- return true;
- }
-
- // Invalid strings - treat as "normal" speed
- if ( typeof option === "string" && !$.effects.effect[ option ] ) {
- return true;
- }
-
- // Complete callback
- if ( $.isFunction( option ) ) {
- return true;
- }
-
- // Options hash (but not naming an effect)
- if ( typeof option === "object" && !option.effect ) {
- return true;
- }
-
- // Didn't match any standard API
- return false;
-}
-
-$.fn.extend({
- effect: function( /* effect, options, speed, callback */ ) {
- var args = _normalizeArguments.apply( this, arguments ),
- mode = args.mode,
- queue = args.queue,
- effectMethod = $.effects.effect[ args.effect ];
-
- if ( $.fx.off || !effectMethod ) {
- // delegate to the original method (e.g., .show()) if possible
- if ( mode ) {
- return this[ mode ]( args.duration, args.complete );
- } else {
- return this.each( function() {
- if ( args.complete ) {
- args.complete.call( this );
- }
- });
- }
- }
-
- function run( next ) {
- var elem = $( this ),
- complete = args.complete,
- mode = args.mode;
-
- function done() {
- if ( $.isFunction( complete ) ) {
- complete.call( elem[0] );
- }
- if ( $.isFunction( next ) ) {
- next();
- }
- }
-
- // If the element already has the correct final state, delegate to
- // the core methods so the internal tracking of "olddisplay" works.
- if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
- elem[ mode ]();
- done();
- } else {
- effectMethod.call( elem[0], args, done );
- }
- }
-
- return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
- },
-
- show: (function( orig ) {
- return function( option ) {
- if ( standardAnimationOption( option ) ) {
- return orig.apply( this, arguments );
- } else {
- var args = _normalizeArguments.apply( this, arguments );
- args.mode = "show";
- return this.effect.call( this, args );
- }
- };
- })( $.fn.show ),
-
- hide: (function( orig ) {
- return function( option ) {
- if ( standardAnimationOption( option ) ) {
- return orig.apply( this, arguments );
- } else {
- var args = _normalizeArguments.apply( this, arguments );
- args.mode = "hide";
- return this.effect.call( this, args );
- }
- };
- })( $.fn.hide ),
-
- toggle: (function( orig ) {
- return function( option ) {
- if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
- return orig.apply( this, arguments );
- } else {
- var args = _normalizeArguments.apply( this, arguments );
- args.mode = "toggle";
- return this.effect.call( this, args );
- }
- };
- })( $.fn.toggle ),
-
- // helper functions
- cssUnit: function(key) {
- var style = this.css( key ),
- val = [];
-
- $.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
- if ( style.indexOf( unit ) > 0 ) {
- val = [ parseFloat( style ), unit ];
- }
- });
- return val;
- }
-});
-
-})();
-
-/******************************************************************************/
-/*********************************** EASING ***********************************/
-/******************************************************************************/
-
-(function() {
-
-// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
-
-var baseEasings = {};
-
-$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
- baseEasings[ name ] = function( p ) {
- return Math.pow( p, i + 2 );
- };
-});
-
-$.extend( baseEasings, {
- Sine: function ( p ) {
- return 1 - Math.cos( p * Math.PI / 2 );
- },
- Circ: function ( p ) {
- return 1 - Math.sqrt( 1 - p * p );
- },
- Elastic: function( p ) {
- return p === 0 || p === 1 ? p :
- -Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
- },
- Back: function( p ) {
- return p * p * ( 3 * p - 2 );
- },
- Bounce: function ( p ) {
- var pow2,
- bounce = 4;
-
- while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
- return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
- }
-});
-
-$.each( baseEasings, function( name, easeIn ) {
- $.easing[ "easeIn" + name ] = easeIn;
- $.easing[ "easeOut" + name ] = function( p ) {
- return 1 - easeIn( 1 - p );
- };
- $.easing[ "easeInOut" + name ] = function( p ) {
- return p < 0.5 ?
- easeIn( p * 2 ) / 2 :
- 1 - easeIn( p * -2 + 2 ) / 2;
- };
-});
-
-})();
-
-})(jQuery);
-
-(function( $, undefined ) {
-
-var uid = 0,
- hideProps = {},
- showProps = {};
-
-hideProps.height = hideProps.paddingTop = hideProps.paddingBottom =
- hideProps.borderTopWidth = hideProps.borderBottomWidth = "hide";
-showProps.height = showProps.paddingTop = showProps.paddingBottom =
- showProps.borderTopWidth = showProps.borderBottomWidth = "show";
-
-$.widget( "ui.accordion", {
- version: "1.10.4",
- options: {
- active: 0,
- animate: {},
- collapsible: false,
- event: "click",
- header: "> li > :first-child,> :not(li):even",
- heightStyle: "auto",
- icons: {
- activeHeader: "ui-icon-triangle-1-s",
- header: "ui-icon-triangle-1-e"
- },
-
- // callbacks
- activate: null,
- beforeActivate: null
- },
-
- _create: function() {
- var options = this.options;
- this.prevShow = this.prevHide = $();
- this.element.addClass( "ui-accordion ui-widget ui-helper-reset" )
- // ARIA
- .attr( "role", "tablist" );
-
- // don't allow collapsible: false and active: false / null
- if ( !options.collapsible && (options.active === false || options.active == null) ) {
- options.active = 0;
- }
-
- this._processPanels();
- // handle negative values
- if ( options.active < 0 ) {
- options.active += this.headers.length;
- }
- this._refresh();
- },
-
- _getCreateEventData: function() {
- return {
- header: this.active,
- panel: !this.active.length ? $() : this.active.next(),
- content: !this.active.length ? $() : this.active.next()
- };
- },
-
- _createIcons: function() {
- var icons = this.options.icons;
- if ( icons ) {
- $( "<span>" )
- .addClass( "ui-accordion-header-icon ui-icon " + icons.header )
- .prependTo( this.headers );
- this.active.children( ".ui-accordion-header-icon" )
- .removeClass( icons.header )
- .addClass( icons.activeHeader );
- this.headers.addClass( "ui-accordion-icons" );
- }
- },
-
- _destroyIcons: function() {
- this.headers
- .removeClass( "ui-accordion-icons" )
- .children( ".ui-accordion-header-icon" )
- .remove();
- },
-
- _destroy: function() {
- var contents;
-
- // clean up main element
- this.element
- .removeClass( "ui-accordion ui-widget ui-helper-reset" )
- .removeAttr( "role" );
-
- // clean up headers
- this.headers
- .removeClass( "ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
- .removeAttr( "role" )
- .removeAttr( "aria-expanded" )
- .removeAttr( "aria-selected" )
- .removeAttr( "aria-controls" )
- .removeAttr( "tabIndex" )
- .each(function() {
- if ( /^ui-accordion/.test( this.id ) ) {
- this.removeAttribute( "id" );
- }
- });
- this._destroyIcons();
-
- // clean up content panels
- contents = this.headers.next()
- .css( "display", "" )
- .removeAttr( "role" )
- .removeAttr( "aria-hidden" )
- .removeAttr( "aria-labelledby" )
- .removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled" )
- .each(function() {
- if ( /^ui-accordion/.test( this.id ) ) {
- this.removeAttribute( "id" );
- }
- });
- if ( this.options.heightStyle !== "content" ) {
- contents.css( "height", "" );
- }
- },
-
- _setOption: function( key, value ) {
- if ( key === "active" ) {
- // _activate() will handle invalid values and update this.options
- this._activate( value );
- return;
- }
-
- if ( key === "event" ) {
- if ( this.options.event ) {
- this._off( this.headers, this.options.event );
- }
- this._setupEvents( value );
- }
-
- this._super( key, value );
-
- // setting collapsible: false while collapsed; open first panel
- if ( key === "collapsible" && !value && this.options.active === false ) {
- this._activate( 0 );
- }
-
- if ( key === "icons" ) {
- this._destroyIcons();
- if ( value ) {
- this._createIcons();
- }
- }
-
- // #5332 - opacity doesn't cascade to positioned elements in IE
- // so we need to add the disabled class to the headers and panels
- if ( key === "disabled" ) {
- this.headers.add( this.headers.next() )
- .toggleClass( "ui-state-disabled", !!value );
- }
- },
-
- _keydown: function( event ) {
- if ( event.altKey || event.ctrlKey ) {
- return;
- }
-
- var keyCode = $.ui.keyCode,
- length = this.headers.length,
- currentIndex = this.headers.index( event.target ),
- toFocus = false;
-
- switch ( event.keyCode ) {
- case keyCode.RIGHT:
- case keyCode.DOWN:
- toFocus = this.headers[ ( currentIndex + 1 ) % length ];
- break;
- case keyCode.LEFT:
- case keyCode.UP:
- toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
- break;
- case keyCode.SPACE:
- case keyCode.ENTER:
- this._eventHandler( event );
- break;
- case keyCode.HOME:
- toFocus = this.headers[ 0 ];
- break;
- case keyCode.END:
- toFocus = this.headers[ length - 1 ];
- break;
- }
-
- if ( toFocus ) {
- $( event.target ).attr( "tabIndex", -1 );
- $( toFocus ).attr( "tabIndex", 0 );
- toFocus.focus();
- event.preventDefault();
- }
- },
-
- _panelKeyDown : function( event ) {
- if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
- $( event.currentTarget ).prev().focus();
- }
- },
-
- refresh: function() {
- var options = this.options;
- this._processPanels();
-
- // was collapsed or no panel
- if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) {
- options.active = false;
- this.active = $();
- // active false only when collapsible is true
- } else if ( options.active === false ) {
- this._activate( 0 );
- // was active, but active panel is gone
- } else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
- // all remaining panel are disabled
- if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) {
- options.active = false;
- this.active = $();
- // activate previous panel
- } else {
- this._activate( Math.max( 0, options.active - 1 ) );
- }
- // was active, active panel still exists
- } else {
- // make sure active index is correct
- options.active = this.headers.index( this.active );
- }
-
- this._destroyIcons();
-
- this._refresh();
- },
-
- _processPanels: function() {
- this.headers = this.element.find( this.options.header )
- .addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" );
-
- this.headers.next()
- .addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
- .filter(":not(.ui-accordion-content-active)")
- .hide();
- },
-
- _refresh: function() {
- var maxHeight,
- options = this.options,
- heightStyle = options.heightStyle,
- parent = this.element.parent(),
- accordionId = this.accordionId = "ui-accordion-" +
- (this.element.attr( "id" ) || ++uid);
-
- this.active = this._findActive( options.active )
- .addClass( "ui-accordion-header-active ui-state-active ui-corner-top" )
- .removeClass( "ui-corner-all" );
- this.active.next()
- .addClass( "ui-accordion-content-active" )
- .show();
-
- this.headers
- .attr( "role", "tab" )
- .each(function( i ) {
- var header = $( this ),
- headerId = header.attr( "id" ),
- panel = header.next(),
- panelId = panel.attr( "id" );
- if ( !headerId ) {
- headerId = accordionId + "-header-" + i;
- header.attr( "id", headerId );
- }
- if ( !panelId ) {
- panelId = accordionId + "-panel-" + i;
- panel.attr( "id", panelId );
- }
- header.attr( "aria-controls", panelId );
- panel.attr( "aria-labelledby", headerId );
- })
- .next()
- .attr( "role", "tabpanel" );
-
- this.headers
- .not( this.active )
- .attr({
- "aria-selected": "false",
- "aria-expanded": "false",
- tabIndex: -1
- })
- .next()
- .attr({
- "aria-hidden": "true"
- })
- .hide();
-
- // make sure at least one header is in the tab order
- if ( !this.active.length ) {
- this.headers.eq( 0 ).attr( "tabIndex", 0 );
- } else {
- this.active.attr({
- "aria-selected": "true",
- "aria-expanded": "true",
- tabIndex: 0
- })
- .next()
- .attr({
- "aria-hidden": "false"
- });
- }
-
- this._createIcons();
-
- this._setupEvents( options.event );
-
- if ( heightStyle === "fill" ) {
- maxHeight = parent.height();
- this.element.siblings( ":visible" ).each(function() {
- var elem = $( this ),
- position = elem.css( "position" );
-
- if ( position === "absolute" || position === "fixed" ) {
- return;
- }
- maxHeight -= elem.outerHeight( true );
- });
-
- this.headers.each(function() {
- maxHeight -= $( this ).outerHeight( true );
- });
-
- this.headers.next()
- .each(function() {
- $( this ).height( Math.max( 0, maxHeight -
- $( this ).innerHeight() + $( this ).height() ) );
- })
- .css( "overflow", "auto" );
- } else if ( heightStyle === "auto" ) {
- maxHeight = 0;
- this.headers.next()
- .each(function() {
- maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
- })
- .height( maxHeight );
- }
- },
-
- _activate: function( index ) {
- var active = this._findActive( index )[ 0 ];
-
- // trying to activate the already active panel
- if ( active === this.active[ 0 ] ) {
- return;
- }
-
- // trying to collapse, simulate a click on the currently active header
- active = active || this.active[ 0 ];
-
- this._eventHandler({
- target: active,
- currentTarget: active,
- preventDefault: $.noop
- });
- },
-
- _findActive: function( selector ) {
- return typeof selector === "number" ? this.headers.eq( selector ) : $();
- },
-
- _setupEvents: function( event ) {
- var events = {
- keydown: "_keydown"
- };
- if ( event ) {
- $.each( event.split(" "), function( index, eventName ) {
- events[ eventName ] = "_eventHandler";
- });
- }
-
- this._off( this.headers.add( this.headers.next() ) );
- this._on( this.headers, events );
- this._on( this.headers.next(), { keydown: "_panelKeyDown" });
- this._hoverable( this.headers );
- this._focusable( this.headers );
- },
-
- _eventHandler: function( event ) {
- var options = this.options,
- active = this.active,
- clicked = $( event.currentTarget ),
- clickedIsActive = clicked[ 0 ] === active[ 0 ],
- collapsing = clickedIsActive && options.collapsible,
- toShow = collapsing ? $() : clicked.next(),
- toHide = active.next(),
- eventData = {
- oldHeader: active,
- oldPanel: toHide,
- newHeader: collapsing ? $() : clicked,
- newPanel: toShow
- };
-
- event.preventDefault();
-
- if (
- // click on active header, but not collapsible
- ( clickedIsActive && !options.collapsible ) ||
- // allow canceling activation
- ( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
- return;
- }
-
- options.active = collapsing ? false : this.headers.index( clicked );
-
- // when the call to ._toggle() comes after the class changes
- // it causes a very odd bug in IE 8 (see #6720)
- this.active = clickedIsActive ? $() : clicked;
- this._toggle( eventData );
-
- // switch classes
- // corner classes on the previously active header stay after the animation
- active.removeClass( "ui-accordion-header-active ui-state-active" );
- if ( options.icons ) {
- active.children( ".ui-accordion-header-icon" )
- .removeClass( options.icons.activeHeader )
- .addClass( options.icons.header );
- }
-
- if ( !clickedIsActive ) {
- clicked
- .removeClass( "ui-corner-all" )
- .addClass( "ui-accordion-header-active ui-state-active ui-corner-top" );
- if ( options.icons ) {
- clicked.children( ".ui-accordion-header-icon" )
- .removeClass( options.icons.header )
- .addClass( options.icons.activeHeader );
- }
-
- clicked
- .next()
- .addClass( "ui-accordion-content-active" );
- }
- },
-
- _toggle: function( data ) {
- var toShow = data.newPanel,
- toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
-
- // handle activating a panel during the animation for another activation
- this.prevShow.add( this.prevHide ).stop( true, true );
- this.prevShow = toShow;
- this.prevHide = toHide;
-
- if ( this.options.animate ) {
- this._animate( toShow, toHide, data );
- } else {
- toHide.hide();
- toShow.show();
- this._toggleComplete( data );
- }
-
- toHide.attr({
- "aria-hidden": "true"
- });
- toHide.prev().attr( "aria-selected", "false" );
- // if we're switching panels, remove the old header from the tab order
- // if we're opening from collapsed state, remove the previous header from the tab order
- // if we're collapsing, then keep the collapsing header in the tab order
- if ( toShow.length && toHide.length ) {
- toHide.prev().attr({
- "tabIndex": -1,
- "aria-expanded": "false"
- });
- } else if ( toShow.length ) {
- this.headers.filter(function() {
- return $( this ).attr( "tabIndex" ) === 0;
- })
- .attr( "tabIndex", -1 );
- }
-
- toShow
- .attr( "aria-hidden", "false" )
- .prev()
- .attr({
- "aria-selected": "true",
- tabIndex: 0,
- "aria-expanded": "true"
- });
- },
-
- _animate: function( toShow, toHide, data ) {
- var total, easing, duration,
- that = this,
- adjust = 0,
- down = toShow.length &&
- ( !toHide.length || ( toShow.index() < toHide.index() ) ),
- animate = this.options.animate || {},
- options = down && animate.down || animate,
- complete = function() {
- that._toggleComplete( data );
- };
-
- if ( typeof options === "number" ) {
- duration = options;
- }
- if ( typeof options === "string" ) {
- easing = options;
- }
- // fall back from options to animation in case of partial down settings
- easing = easing || options.easing || animate.easing;
- duration = duration || options.duration || animate.duration;
-
- if ( !toHide.length ) {
- return toShow.animate( showProps, duration, easing, complete );
- }
- if ( !toShow.length ) {
- return toHide.animate( hideProps, duration, easing, complete );
- }
-
- total = toShow.show().outerHeight();
- toHide.animate( hideProps, {
- duration: duration,
- easing: easing,
- step: function( now, fx ) {
- fx.now = Math.round( now );
- }
- });
- toShow
- .hide()
- .animate( showProps, {
- duration: duration,
- easing: easing,
- complete: complete,
- step: function( now, fx ) {
- fx.now = Math.round( now );
- if ( fx.prop !== "height" ) {
- adjust += fx.now;
- } else if ( that.options.heightStyle !== "content" ) {
- fx.now = Math.round( total - toHide.outerHeight() - adjust );
- adjust = 0;
- }
- }
- });
- },
-
- _toggleComplete: function( data ) {
- var toHide = data.oldPanel;
-
- toHide
- .removeClass( "ui-accordion-content-active" )
- .prev()
- .removeClass( "ui-corner-top" )
- .addClass( "ui-corner-all" );
-
- // Work around for rendering bug in IE (#5421)
- if ( toHide.length ) {
- toHide.parent()[0].className = toHide.parent()[0].className;
- }
- this._trigger( "activate", null, data );
- }
-});
-
-})( jQuery );
-
-(function( $, undefined ) {
-
-$.widget( "ui.autocomplete", {
- version: "1.10.4",
- defaultElement: "<input>",
- options: {
- appendTo: null,
- autoFocus: false,
- delay: 300,
- minLength: 1,
- position: {
- my: "left top",
- at: "left bottom",
- collision: "none"
- },
- source: null,
-
- // callbacks
- change: null,
- close: null,
- focus: null,
- open: null,
- response: null,
- search: null,
- select: null
- },
-
- requestIndex: 0,
- pending: 0,
-
- _create: function() {
- // Some browsers only repeat keydown events, not keypress events,
- // so we use the suppressKeyPress flag to determine if we've already
- // handled the keydown event. #7269
- // Unfortunately the code for & in keypress is the same as the up arrow,
- // so we use the suppressKeyPressRepeat flag to avoid handling keypress
- // events when we know the keydown event was used to modify the
- // search term. #7799
- var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
- nodeName = this.element[0].nodeName.toLowerCase(),
- isTextarea = nodeName === "textarea",
- isInput = nodeName === "input";
-
- this.isMultiLine =
- // Textareas are always multi-line
- isTextarea ? true :
- // Inputs are always single-line, even if inside a contentEditable element
- // IE also treats inputs as contentEditable
- isInput ? false :
- // All other element types are determined by whether or not they're contentEditable
- this.element.prop( "isContentEditable" );
-
- this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
- this.isNewMenu = true;
-
- this.element
- .addClass( "ui-autocomplete-input" )
- .attr( "autocomplete", "off" );
-
- this._on( this.element, {
- keydown: function( event ) {
- if ( this.element.prop( "readOnly" ) ) {
- suppressKeyPress = true;
- suppressInput = true;
- suppressKeyPressRepeat = true;
- return;
- }
-
- suppressKeyPress = false;
- suppressInput = false;
- suppressKeyPressRepeat = false;
- var keyCode = $.ui.keyCode;
- switch( event.keyCode ) {
- case keyCode.PAGE_UP:
- suppressKeyPress = true;
- this._move( "previousPage", event );
- break;
- case keyCode.PAGE_DOWN:
- suppressKeyPress = true;
- this._move( "nextPage", event );
- break;
- case keyCode.UP:
- suppressKeyPress = true;
- this._keyEvent( "previous", event );
- break;
- case keyCode.DOWN:
- suppressKeyPress = true;
- this._keyEvent( "next", event );
- break;
- case keyCode.ENTER:
- case keyCode.NUMPAD_ENTER:
- // when menu is open and has focus
- if ( this.menu.active ) {
- // #6055 - Opera still allows the keypress to occur
- // which causes forms to submit
- suppressKeyPress = true;
- event.preventDefault();
- this.menu.select( event );
- }
- break;
- case keyCode.TAB:
- if ( this.menu.active ) {
- this.menu.select( event );
- }
- break;
- case keyCode.ESCAPE:
- if ( this.menu.element.is( ":visible" ) ) {
- this._value( this.term );
- this.close( event );
- // Different browsers have different default behavior for escape
- // Single press can mean undo or clear
- // Double press in IE means clear the whole form
- event.preventDefault();
- }
- break;
- default:
- suppressKeyPressRepeat = true;
- // search timeout should be triggered before the input value is changed
- this._searchTimeout( event );
- break;
- }
- },
- keypress: function( event ) {
- if ( suppressKeyPress ) {
- suppressKeyPress = false;
- if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
- event.preventDefault();
- }
- return;
- }
- if ( suppressKeyPressRepeat ) {
- return;
- }
-
- // replicate some key handlers to allow them to repeat in Firefox and Opera
- var keyCode = $.ui.keyCode;
- switch( event.keyCode ) {
- case keyCode.PAGE_UP:
- this._move( "previousPage", event );
- break;
- case keyCode.PAGE_DOWN:
- this._move( "nextPage", event );
- break;
- case keyCode.UP:
- this._keyEvent( "previous", event );
- break;
- case keyCode.DOWN:
- this._keyEvent( "next", event );
- break;
- }
- },
- input: function( event ) {
- if ( suppressInput ) {
- suppressInput = false;
- event.preventDefault();
- return;
- }
- this._searchTimeout( event );
- },
- focus: function() {
- this.selectedItem = null;
- this.previous = this._value();
- },
- blur: function( event ) {
- if ( this.cancelBlur ) {
- delete this.cancelBlur;
- return;
- }
-
- clearTimeout( this.searching );
- this.close( event );
- this._change( event );
- }
- });
-
- this._initSource();
- this.menu = $( "<ul>" )
- .addClass( "ui-autocomplete ui-front" )
- .appendTo( this._appendTo() )
- .menu({
- // disable ARIA support, the live region takes care of that
- role: null
- })
- .hide()
- .data( "ui-menu" );
-
- this._on( this.menu.element, {
- mousedown: function( event ) {
- // prevent moving focus out of the text field
- event.preventDefault();
-
- // IE doesn't prevent moving focus even with event.preventDefault()
- // so we set a flag to know when we should ignore the blur event
- this.cancelBlur = true;
- this._delay(function() {
- delete this.cancelBlur;
- });
-
- // clicking on the scrollbar causes focus to shift to the body
- // but we can't detect a mouseup or a click immediately afterward
- // so we have to track the next mousedown and close the menu if
- // the user clicks somewhere outside of the autocomplete
- var menuElement = this.menu.element[ 0 ];
- if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
- this._delay(function() {
- var that = this;
- this.document.one( "mousedown", function( event ) {
- if ( event.target !== that.element[ 0 ] &&
- event.target !== menuElement &&
- !$.contains( menuElement, event.target ) ) {
- that.close();
- }
- });
- });
- }
- },
- menufocus: function( event, ui ) {
- // support: Firefox
- // Prevent accidental activation of menu items in Firefox (#7024 #9118)
- if ( this.isNewMenu ) {
- this.isNewMenu = false;
- if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
- this.menu.blur();
-
- this.document.one( "mousemove", function() {
- $( event.target ).trigger( event.originalEvent );
- });
-
- return;
- }
- }
-
- var item = ui.item.data( "ui-autocomplete-item" );
- if ( false !== this._trigger( "focus", event, { item: item } ) ) {
- // use value to match what will end up in the input, if it was a key event
- if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
- this._value( item.value );
- }
- } else {
- // Normally the input is populated with the item's value as the
- // menu is navigated, causing screen readers to notice a change and
- // announce the item. Since the focus event was canceled, this doesn't
- // happen, so we update the live region so that screen readers can
- // still notice the change and announce it.
- this.liveRegion.text( item.value );
- }
- },
- menuselect: function( event, ui ) {
- var item = ui.item.data( "ui-autocomplete-item" ),
- previous = this.previous;
-
- // only trigger when focus was lost (click on menu)
- if ( this.element[0] !== this.document[0].activeElement ) {
- this.element.focus();
- this.previous = previous;
- // #6109 - IE triggers two focus events and the second
- // is asynchronous, so we need to reset the previous
- // term synchronously and asynchronously :-(
- this._delay(function() {
- this.previous = previous;
- this.selectedItem = item;
- });
- }
-
- if ( false !== this._trigger( "select", event, { item: item } ) ) {
- this._value( item.value );
- }
- // reset the term after the select event
- // this allows custom select handling to work properly
- this.term = this._value();
-
- this.close( event );
- this.selectedItem = item;
- }
- });
-
- this.liveRegion = $( "<span>", {
- role: "status",
- "aria-live": "polite"
- })
- .addClass( "ui-helper-hidden-accessible" )
- .insertBefore( this.element );
-
- // turning off autocomplete prevents the browser from remembering the
- // value when navigating through history, so we re-enable autocomplete
- // if the page is unloaded before the widget is destroyed. #7790
- this._on( this.window, {
- beforeunload: function() {
- this.element.removeAttr( "autocomplete" );
- }
- });
- },
-
- _destroy: function() {
- clearTimeout( this.searching );
- this.element
- .removeClass( "ui-autocomplete-input" )
- .removeAttr( "autocomplete" );
- this.menu.element.remove();
- this.liveRegion.remove();
- },
-
- _setOption: function( key, value ) {
- this._super( key, value );
- if ( key === "source" ) {
- this._initSource();
- }
- if ( key === "appendTo" ) {
- this.menu.element.appendTo( this._appendTo() );
- }
- if ( key === "disabled" && value && this.xhr ) {
- this.xhr.abort();
- }
- },
-
- _appendTo: function() {
- var element = this.options.appendTo;
-
- if ( element ) {
- element = element.jquery || element.nodeType ?
- $( element ) :
- this.document.find( element ).eq( 0 );
- }
-
- if ( !element ) {
- element = this.element.closest( ".ui-front" );
- }
-
- if ( !element.length ) {
- element = this.document[0].body;
- }
-
- return element;
- },
-
- _initSource: function() {
- var array, url,
- that = this;
- if ( $.isArray(this.options.source) ) {
- array = this.options.source;
- this.source = function( request, response ) {
- response( $.ui.autocomplete.filter( array, request.term ) );
- };
- } else if ( typeof this.options.source === "string" ) {
- url = this.options.source;
- this.source = function( request, response ) {
- if ( that.xhr ) {
- that.xhr.abort();
- }
- that.xhr = $.ajax({
- url: url,
- data: request,
- dataType: "json",
- success: function( data ) {
- response( data );
- },
- error: function() {
- response( [] );
- }
- });
- };
- } else {
- this.source = this.options.source;
- }
- },
-
- _searchTimeout: function( event ) {
- clearTimeout( this.searching );
- this.searching = this._delay(function() {
- // only search if the value has changed
- if ( this.term !== this._value() ) {
- this.selectedItem = null;
- this.search( null, event );
- }
- }, this.options.delay );
- },
-
- search: function( value, event ) {
- value = value != null ? value : this._value();
-
- // always save the actual value, not the one passed as an argument
- this.term = this._value();
-
- if ( value.length < this.options.minLength ) {
- return this.close( event );
- }
-
- if ( this._trigger( "search", event ) === false ) {
- return;
- }
-
- return this._search( value );
- },
-
- _search: function( value ) {
- this.pending++;
- this.element.addClass( "ui-autocomplete-loading" );
- this.cancelSearch = false;
-
- this.source( { term: value }, this._response() );
- },
-
- _response: function() {
- var index = ++this.requestIndex;
-
- return $.proxy(function( content ) {
- if ( index === this.requestIndex ) {
- this.__response( content );
- }
-
- this.pending--;
- if ( !this.pending ) {
- this.element.removeClass( "ui-autocomplete-loading" );
- }
- }, this );
- },
-
- __response: function( content ) {
- if ( content ) {
- content = this._normalize( content );
- }
- this._trigger( "response", null, { content: content } );
- if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
- this._suggest( content );
- this._trigger( "open" );
- } else {
- // use ._close() instead of .close() so we don't cancel future searches
- this._close();
- }
- },
-
- close: function( event ) {
- this.cancelSearch = true;
- this._close( event );
- },
-
- _close: function( event ) {
- if ( this.menu.element.is( ":visible" ) ) {
- this.menu.element.hide();
- this.menu.blur();
- this.isNewMenu = true;
- this._trigger( "close", event );
- }
- },
-
- _change: function( event ) {
- if ( this.previous !== this._value() ) {
- this._trigger( "change", event, { item: this.selectedItem } );
- }
- },
-
- _normalize: function( items ) {
- // assume all items have the right format when the first item is complete
- if ( items.length && items[0].label && items[0].value ) {
- return items;
- }
- return $.map( items, function( item ) {
- if ( typeof item === "string" ) {
- return {
- label: item,
- value: item
- };
- }
- return $.extend({
- label: item.label || item.value,
- value: item.value || item.label
- }, item );
- });
- },
-
- _suggest: function( items ) {
- var ul = this.menu.element.empty();
- this._renderMenu( ul, items );
- this.isNewMenu = true;
- this.menu.refresh();
-
- // size and position menu
- ul.show();
- this._resizeMenu();
- ul.position( $.extend({
- of: this.element
- }, this.options.position ));
-
- if ( this.options.autoFocus ) {
- this.menu.next();
- }
- },
-
- _resizeMenu: function() {
- var ul = this.menu.element;
- ul.outerWidth( Math.max(
- // Firefox wraps long text (possibly a rounding bug)
- // so we add 1px to avoid the wrapping (#7513)
- ul.width( "" ).outerWidth() + 1,
- this.element.outerWidth()
- ) );
- },
-
- _renderMenu: function( ul, items ) {
- var that = this;
- $.each( items, function( index, item ) {
- that._renderItemData( ul, item );
- });
- },
-
- _renderItemData: function( ul, item ) {
- return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
- },
-
- _renderItem: function( ul, item ) {
- return $( "<li>" )
- .append( $( "<a>" ).text( item.label ) )
- .appendTo( ul );
- },
-
- _move: function( direction, event ) {
- if ( !this.menu.element.is( ":visible" ) ) {
- this.search( null, event );
- return;
- }
- if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
- this.menu.isLastItem() && /^next/.test( direction ) ) {
- this._value( this.term );
- this.menu.blur();
- return;
- }
- this.menu[ direction ]( event );
- },
-
- widget: function() {
- return this.menu.element;
- },
-
- _value: function() {
- return this.valueMethod.apply( this.element, arguments );
- },
-
- _keyEvent: function( keyEvent, event ) {
- if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
- this._move( keyEvent, event );
-
- // prevents moving cursor to beginning/end of the text field in some browsers
- event.preventDefault();
- }
- }
-});
-
-$.extend( $.ui.autocomplete, {
- escapeRegex: function( value ) {
- return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
- },
- filter: function(array, term) {
- var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
- return $.grep( array, function(value) {
- return matcher.test( value.label || value.value || value );
- });
- }
-});
-
-
-// live region extension, adding a `messages` option
-// NOTE: This is an experimental API. We are still investigating
-// a full solution for string manipulation and internationalization.
-$.widget( "ui.autocomplete", $.ui.autocomplete, {
- options: {
- messages: {
- noResults: "No search results.",
- results: function( amount ) {
- return amount + ( amount > 1 ? " results are" : " result is" ) +
- " available, use up and down arrow keys to navigate.";
- }
- }
- },
-
- __response: function( content ) {
- var message;
- this._superApply( arguments );
- if ( this.options.disabled || this.cancelSearch ) {
- return;
- }
- if ( content && content.length ) {
- message = this.options.messages.results( content.length );
- } else {
- message = this.options.messages.noResults;
- }
- this.liveRegion.text( message );
- }
-});
-
-}( jQuery ));
-
-(function( $, undefined ) {
-
-var lastActive,
- baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
- typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
- formResetHandler = function() {
- var form = $( this );
- setTimeout(function() {
- form.find( ":ui-button" ).button( "refresh" );
- }, 1 );
- },
- radioGroup = function( radio ) {
- var name = radio.name,
- form = radio.form,
- radios = $( [] );
- if ( name ) {
- name = name.replace( /'/g, "\\'" );
- if ( form ) {
- radios = $( form ).find( "[name='" + name + "']" );
- } else {
- radios = $( "[name='" + name + "']", radio.ownerDocument )
- .filter(function() {
- return !this.form;
- });
- }
- }
- return radios;
- };
-
-$.widget( "ui.button", {
- version: "1.10.4",
- defaultElement: "<button>",
- options: {
- disabled: null,
- text: true,
- label: null,
- icons: {
- primary: null,
- secondary: null
- }
- },
- _create: function() {
- this.element.closest( "form" )
- .unbind( "reset" + this.eventNamespace )
- .bind( "reset" + this.eventNamespace, formResetHandler );
-
- if ( typeof this.options.disabled !== "boolean" ) {
- this.options.disabled = !!this.element.prop( "disabled" );
- } else {
- this.element.prop( "disabled", this.options.disabled );
- }
-
- this._determineButtonType();
- this.hasTitle = !!this.buttonElement.attr( "title" );
-
- var that = this,
- options = this.options,
- toggleButton = this.type === "checkbox" || this.type === "radio",
- activeClass = !toggleButton ? "ui-state-active" : "";
-
- if ( options.label === null ) {
- options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
- }
-
- this._hoverable( this.buttonElement );
-
- this.buttonElement
- .addClass( baseClasses )
- .attr( "role", "button" )
- .bind( "mouseenter" + this.eventNamespace, function() {
- if ( options.disabled ) {
- return;
- }
- if ( this === lastActive ) {
- $( this ).addClass( "ui-state-active" );
- }
- })
- .bind( "mouseleave" + this.eventNamespace, function() {
- if ( options.disabled ) {
- return;
- }
- $( this ).removeClass( activeClass );
- })
- .bind( "click" + this.eventNamespace, function( event ) {
- if ( options.disabled ) {
- event.preventDefault();
- event.stopImmediatePropagation();
- }
- });
-
- // Can't use _focusable() because the element that receives focus
- // and the element that gets the ui-state-focus class are different
- this._on({
- focus: function() {
- this.buttonElement.addClass( "ui-state-focus" );
- },
- blur: function() {
- this.buttonElement.removeClass( "ui-state-focus" );
- }
- });
-
- if ( toggleButton ) {
- this.element.bind( "change" + this.eventNamespace, function() {
- that.refresh();
- });
- }
-
- if ( this.type === "checkbox" ) {
- this.buttonElement.bind( "click" + this.eventNamespace, function() {
- if ( options.disabled ) {
- return false;
- }
- });
- } else if ( this.type === "radio" ) {
- this.buttonElement.bind( "click" + this.eventNamespace, function() {
- if ( options.disabled ) {
- return false;
- }
- $( this ).addClass( "ui-state-active" );
- that.buttonElement.attr( "aria-pressed", "true" );
-
- var radio = that.element[ 0 ];
- radioGroup( radio )
- .not( radio )
- .map(function() {
- return $( this ).button( "widget" )[ 0 ];
- })
- .removeClass( "ui-state-active" )
- .attr( "aria-pressed", "false" );
- });
- } else {
- this.buttonElement
- .bind( "mousedown" + this.eventNamespace, function() {
- if ( options.disabled ) {
- return false;
- }
- $( this ).addClass( "ui-state-active" );
- lastActive = this;
- that.document.one( "mouseup", function() {
- lastActive = null;
- });
- })
- .bind( "mouseup" + this.eventNamespace, function() {
- if ( options.disabled ) {
- return false;
- }
- $( this ).removeClass( "ui-state-active" );
- })
- .bind( "keydown" + this.eventNamespace, function(event) {
- if ( options.disabled ) {
- return false;
- }
- if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
- $( this ).addClass( "ui-state-active" );
- }
- })
- // see #8559, we bind to blur here in case the button element loses
- // focus between keydown and keyup, it would be left in an "active" state
- .bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
- $( this ).removeClass( "ui-state-active" );
- });
-
- if ( this.buttonElement.is("a") ) {
- this.buttonElement.keyup(function(event) {
- if ( event.keyCode === $.ui.keyCode.SPACE ) {
- // TODO pass through original event correctly (just as 2nd argument doesn't work)
- $( this ).click();
- }
- });
- }
- }
-
- // TODO: pull out $.Widget's handling for the disabled option into
- // $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
- // be overridden by individual plugins
- this._setOption( "disabled", options.disabled );
- this._resetButton();
- },
-
- _determineButtonType: function() {
- var ancestor, labelSelector, checked;
-
- if ( this.element.is("[type=checkbox]") ) {
- this.type = "checkbox";
- } else if ( this.element.is("[type=radio]") ) {
- this.type = "radio";
- } else if ( this.element.is("input") ) {
- this.type = "input";
- } else {
- this.type = "button";
- }
-
- if ( this.type === "checkbox" || this.type === "radio" ) {
- // we don't search against the document in case the element
- // is disconnected from the DOM
- ancestor = this.element.parents().last();
- labelSelector = "label[for='" + this.element.attr("id") + "']";
- this.buttonElement = ancestor.find( labelSelector );
- if ( !this.buttonElement.length ) {
- ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
- this.buttonElement = ancestor.filter( labelSelector );
- if ( !this.buttonElement.length ) {
- this.buttonElement = ancestor.find( labelSelector );
- }
- }
- this.element.addClass( "ui-helper-hidden-accessible" );
-
- checked = this.element.is( ":checked" );
- if ( checked ) {
- this.buttonElement.addClass( "ui-state-active" );
- }
- this.buttonElement.prop( "aria-pressed", checked );
- } else {
- this.buttonElement = this.element;
- }
- },
-
- widget: function() {
- return this.buttonElement;
- },
-
- _destroy: function() {
- this.element
- .removeClass( "ui-helper-hidden-accessible" );
- this.buttonElement
- .removeClass( baseClasses + " ui-state-active " + typeClasses )
- .removeAttr( "role" )
- .removeAttr( "aria-pressed" )
- .html( this.buttonElement.find(".ui-button-text").html() );
-
- if ( !this.hasTitle ) {
- this.buttonElement.removeAttr( "title" );
- }
- },
-
- _setOption: function( key, value ) {
- this._super( key, value );
- if ( key === "disabled" ) {
- this.element.prop( "disabled", !!value );
- if ( value ) {
- this.buttonElement.removeClass( "ui-state-focus" );
- }
- return;
- }
- this._resetButton();
- },
-
- refresh: function() {
- //See #8237 & #8828
- var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
-
- if ( isDisabled !== this.options.disabled ) {
- this._setOption( "disabled", isDisabled );
- }
- if ( this.type === "radio" ) {
- radioGroup( this.element[0] ).each(function() {
- if ( $( this ).is( ":checked" ) ) {
- $( this ).button( "widget" )
- .addClass( "ui-state-active" )
- .attr( "aria-pressed", "true" );
- } else {
- $( this ).button( "widget" )
- .removeClass( "ui-state-active" )
- .attr( "aria-pressed", "false" );
- }
- });
- } else if ( this.type === "checkbox" ) {
- if ( this.element.is( ":checked" ) ) {
- this.buttonElement
- .addClass( "ui-state-active" )
- .attr( "aria-pressed", "true" );
- } else {
- this.buttonElement
- .removeClass( "ui-state-active" )
- .attr( "aria-pressed", "false" );
- }
- }
- },
-
- _resetButton: function() {
- if ( this.type === "input" ) {
- if ( this.options.label ) {
- this.element.val( this.options.label );
- }
- return;
- }
- var buttonElement = this.buttonElement.removeClass( typeClasses ),
- buttonText = $( "<span></span>", this.document[0] )
- .addClass( "ui-button-text" )
- .html( this.options.label )
- .appendTo( buttonElement.empty() )
- .text(),
- icons = this.options.icons,
- multipleIcons = icons.primary && icons.secondary,
- buttonClasses = [];
-
- if ( icons.primary || icons.secondary ) {
- if ( this.options.text ) {
- buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
- }
-
- if ( icons.primary ) {
- buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
- }
-
- if ( icons.secondary ) {
- buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
- }
-
- if ( !this.options.text ) {
- buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
-
- if ( !this.hasTitle ) {
- buttonElement.attr( "title", $.trim( buttonText ) );
- }
- }
- } else {
- buttonClasses.push( "ui-button-text-only" );
- }
- buttonElement.addClass( buttonClasses.join( " " ) );
- }
-});
-
-$.widget( "ui.buttonset", {
- version: "1.10.4",
- options: {
- items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
- },
-
- _create: function() {
- this.element.addClass( "ui-buttonset" );
- },
-
- _init: function() {
- this.refresh();
- },
-
- _setOption: function( key, value ) {
- if ( key === "disabled" ) {
- this.buttons.button( "option", key, value );
- }
-
- this._super( key, value );
- },
-
- refresh: function() {
- var rtl = this.element.css( "direction" ) === "rtl";
-
- this.buttons = this.element.find( this.options.items )
- .filter( ":ui-button" )
- .button( "refresh" )
- .end()
- .not( ":ui-button" )
- .button()
- .end()
- .map(function() {
- return $( this ).button( "widget" )[ 0 ];
- })
- .removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
- .filter( ":first" )
- .addClass( rtl ? "ui-corner-right" : "ui-corner-left" )
- .end()
- .filter( ":last" )
- .addClass( rtl ? "ui-corner-left" : "ui-corner-right" )
- .end()
- .end();
- },
-
- _destroy: function() {
- this.element.removeClass( "ui-buttonset" );
- this.buttons
- .map(function() {
- return $( this ).button( "widget" )[ 0 ];
- })
- .removeClass( "ui-corner-left ui-corner-right" )
- .end()
- .button( "destroy" );
- }
-});
-
-}( jQuery ) );
-
-(function( $, undefined ) {
-
-$.extend($.ui, { datepicker: { version: "1.10.4" } });
-
-var PROP_NAME = "datepicker",
- instActive;
-
-/* Date picker manager.
- Use the singleton instance of this class, $.datepicker, to interact with the date picker.
- Settings for (groups of) date pickers are maintained in an instance object,
- allowing multiple different settings on the same page. */
-
-function Datepicker() {
- this._curInst = null; // The current instance in use
- this._keyEvent = false; // If the last event was a key event
- this._disabledInputs = []; // List of date picker inputs that have been disabled
- this._datepickerShowing = false; // True if the popup picker is showing , false if not
- this._inDialog = false; // True if showing within a "dialog", false if not
- this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
- this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
- this._appendClass = "ui-datepicker-append"; // The name of the append marker class
- this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
- this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
- this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
- this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
- this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
- this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
- this.regional = []; // Available regional settings, indexed by language code
- this.regional[""] = { // Default regional settings
- closeText: "Done", // Display text for close link
- prevText: "Prev", // Display text for previous month link
- nextText: "Next", // Display text for next month link
- currentText: "Today", // Display text for current month link
- monthNames: ["January","February","March","April","May","June",
- "July","August","September","October","November","December"], // Names of months for drop-down and formatting
- monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting
- dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting
- dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting
- dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa"], // Column headings for days starting at Sunday
- weekHeader: "Wk", // Column header for week of the year
- dateFormat: "mm/dd/yy", // See format options on parseDate
- firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
- isRTL: false, // True if right-to-left language, false if left-to-right
- showMonthAfterYear: false, // True if the year select precedes month, false for month then year
- yearSuffix: "" // Additional text to append to the year in the month headers
- };
- this._defaults = { // Global defaults for all the date picker instances
- showOn: "focus", // "focus" for popup on focus,
- // "button" for trigger button, or "both" for either
- showAnim: "fadeIn", // Name of jQuery animation for popup
- showOptions: {}, // Options for enhanced animations
- defaultDate: null, // Used when field is blank: actual date,
- // +/-number for offset from today, null for today
- appendText: "", // Display text following the input box, e.g. showing the format
- buttonText: "...", // Text for trigger button
- buttonImage: "", // URL for trigger button image
- buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
- hideIfNoPrevNext: false, // True to hide next/previous month links
- // if not applicable, false to just disable them
- navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
- gotoCurrent: false, // True if today link goes back to current selection instead
- changeMonth: false, // True if month can be selected directly, false if only prev/next
- changeYear: false, // True if year can be selected directly, false if only prev/next
- yearRange: "c-10:c+10", // Range of years to display in drop-down,
- // either relative to today's year (-nn:+nn), relative to currently displayed year
- // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
- showOtherMonths: false, // True to show dates in other months, false to leave blank
- selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
- showWeek: false, // True to show week of the year, false to not show it
- calculateWeek: this.iso8601Week, // How to calculate the week of the year,
- // takes a Date and returns the number of the week for it
- shortYearCutoff: "+10", // Short year values < this are in the current century,
- // > this are in the previous century,
- // string value starting with "+" for current year + value
- minDate: null, // The earliest selectable date, or null for no limit
- maxDate: null, // The latest selectable date, or null for no limit
- duration: "fast", // Duration of display/closure
- beforeShowDay: null, // Function that takes a date and returns an array with
- // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
- // [2] = cell title (optional), e.g. $.datepicker.noWeekends
- beforeShow: null, // Function that takes an input field and
- // returns a set of custom settings for the date picker
- onSelect: null, // Define a callback function when a date is selected
- onChangeMonthYear: null, // Define a callback function when the month or year is changed
- onClose: null, // Define a callback function when the datepicker is closed
- numberOfMonths: 1, // Number of months to show at a time
- showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
- stepMonths: 1, // Number of months to step back/forward
- stepBigMonths: 12, // Number of months to step back/forward for the big links
- altField: "", // Selector for an alternate field to store selected dates into
- altFormat: "", // The date format to use for the alternate field
- constrainInput: true, // The input is constrained by the current date format
- showButtonPanel: false, // True to show button panel, false to not show it
- autoSize: false, // True to size the input for the date format, false to leave as is
- disabled: false // The initial disabled state
- };
- $.extend(this._defaults, this.regional[""]);
- this.dpDiv = bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
-}
-
-$.extend(Datepicker.prototype, {
- /* Class name added to elements to indicate already configured with a date picker. */
- markerClassName: "hasDatepicker",
-
- //Keep track of the maximum number of rows displayed (see #7043)
- maxRows: 4,
-
- // TODO rename to "widget" when switching to widget factory
- _widgetDatepicker: function() {
- return this.dpDiv;
- },
-
- /* Override the default settings for all instances of the date picker.
- * @param settings object - the new settings to use as defaults (anonymous object)
- * @return the manager object
- */
- setDefaults: function(settings) {
- extendRemove(this._defaults, settings || {});
- return this;
- },
-
- /* Attach the date picker to a jQuery selection.
- * @param target element - the target input field or division or span
- * @param settings object - the new settings to use for this date picker instance (anonymous)
- */
- _attachDatepicker: function(target, settings) {
- var nodeName, inline, inst;
- nodeName = target.nodeName.toLowerCase();
- inline = (nodeName === "div" || nodeName === "span");
- if (!target.id) {
- this.uuid += 1;
- target.id = "dp" + this.uuid;
- }
- inst = this._newInst($(target), inline);
- inst.settings = $.extend({}, settings || {});
- if (nodeName === "input") {
- this._connectDatepicker(target, inst);
- } else if (inline) {
- this._inlineDatepicker(target, inst);
- }
- },
-
- /* Create a new instance object. */
- _newInst: function(target, inline) {
- var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars
- return {id: id, input: target, // associated target
- selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
- drawMonth: 0, drawYear: 0, // month being drawn
- inline: inline, // is datepicker inline or not
- dpDiv: (!inline ? this.dpDiv : // presentation div
- bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
- },
-
- /* Attach the date picker to an input field. */
- _connectDatepicker: function(target, inst) {
- var input = $(target);
- inst.append = $([]);
- inst.trigger = $([]);
- if (input.hasClass(this.markerClassName)) {
- return;
- }
- this._attachments(input, inst);
- input.addClass(this.markerClassName).keydown(this._doKeyDown).
- keypress(this._doKeyPress).keyup(this._doKeyUp);
- this._autoSize(inst);
- $.data(target, PROP_NAME, inst);
- //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
- if( inst.settings.disabled ) {
- this._disableDatepicker( target );
- }
- },
-
- /* Make attachments based on settings. */
- _attachments: function(input, inst) {
- var showOn, buttonText, buttonImage,
- appendText = this._get(inst, "appendText"),
- isRTL = this._get(inst, "isRTL");
-
- if (inst.append) {
- inst.append.remove();
- }
- if (appendText) {
- inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>");
- input[isRTL ? "before" : "after"](inst.append);
- }
-
- input.unbind("focus", this._showDatepicker);
-
- if (inst.trigger) {
- inst.trigger.remove();
- }
-
- showOn = this._get(inst, "showOn");
- if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field
- input.focus(this._showDatepicker);
- }
- if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked
- buttonText = this._get(inst, "buttonText");
- buttonImage = this._get(inst, "buttonImage");
- inst.trigger = $(this._get(inst, "buttonImageOnly") ?
- $("<img/>").addClass(this._triggerClass).
- attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
- $("<button type='button'></button>").addClass(this._triggerClass).
- html(!buttonImage ? buttonText : $("<img/>").attr(
- { src:buttonImage, alt:buttonText, title:buttonText })));
- input[isRTL ? "before" : "after"](inst.trigger);
- inst.trigger.click(function() {
- if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {
- $.datepicker._hideDatepicker();
- } else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {
- $.datepicker._hideDatepicker();
- $.datepicker._showDatepicker(input[0]);
- } else {
- $.datepicker._showDatepicker(input[0]);
- }
- return false;
- });
- }
- },
-
- /* Apply the maximum length for the date format. */
- _autoSize: function(inst) {
- if (this._get(inst, "autoSize") && !inst.inline) {
- var findMax, max, maxI, i,
- date = new Date(2009, 12 - 1, 20), // Ensure double digits
- dateFormat = this._get(inst, "dateFormat");
-
- if (dateFormat.match(/[DM]/)) {
- findMax = function(names) {
- max = 0;
- maxI = 0;
- for (i = 0; i < names.length; i++) {
- if (names[i].length > max) {
- max = names[i].length;
- maxI = i;
- }
- }
- return maxI;
- };
- date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
- "monthNames" : "monthNamesShort"))));
- date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
- "dayNames" : "dayNamesShort"))) + 20 - date.getDay());
- }
- inst.input.attr("size", this._formatDate(inst, date).length);
- }
- },
-
- /* Attach an inline date picker to a div. */
- _inlineDatepicker: function(target, inst) {
- var divSpan = $(target);
- if (divSpan.hasClass(this.markerClassName)) {
- return;
- }
- divSpan.addClass(this.markerClassName).append(inst.dpDiv);
- $.data(target, PROP_NAME, inst);
- this._setDate(inst, this._getDefaultDate(inst), true);
- this._updateDatepicker(inst);
- this._updateAlternate(inst);
- //If disabled option is true, disable the datepicker before showing it (see ticket #5665)
- if( inst.settings.disabled ) {
- this._disableDatepicker( target );
- }
- // Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
- // http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
- inst.dpDiv.css( "display", "block" );
- },
-
- /* Pop-up the date picker in a "dialog" box.
- * @param input element - ignored
- * @param date string or Date - the initial date to display
- * @param onSelect function - the function to call when a date is selected
- * @param settings object - update the dialog date picker instance's settings (anonymous object)
- * @param pos int[2] - coordinates for the dialog's position within the screen or
- * event - with x/y coordinates or
- * leave empty for default (screen centre)
- * @return the manager object
- */
- _dialogDatepicker: function(input, date, onSelect, settings, pos) {
- var id, browserWidth, browserHeight, scrollX, scrollY,
- inst = this._dialogInst; // internal instance
-
- if (!inst) {
- this.uuid += 1;
- id = "dp" + this.uuid;
- this._dialogInput = $("<input type='text' id='" + id +
- "' style='position: absolute; top: -100px; width: 0px;'/>");
- this._dialogInput.keydown(this._doKeyDown);
- $("body").append(this._dialogInput);
- inst = this._dialogInst = this._newInst(this._dialogInput, false);
- inst.settings = {};
- $.data(this._dialogInput[0], PROP_NAME, inst);
- }
- extendRemove(inst.settings, settings || {});
- date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
- this._dialogInput.val(date);
-
- this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
- if (!this._pos) {
- browserWidth = document.documentElement.clientWidth;
- browserHeight = document.documentElement.clientHeight;
- scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
- scrollY = document.documentElement.scrollTop || document.body.scrollTop;
- this._pos = // should use actual width/height below
- [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
- }
-
- // move input on screen for focus, but hidden behind dialog
- this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px");
- inst.settings.onSelect = onSelect;
- this._inDialog = true;
- this.dpDiv.addClass(this._dialogClass);
- this._showDatepicker(this._dialogInput[0]);
- if ($.blockUI) {
- $.blockUI(this.dpDiv);
- }
- $.data(this._dialogInput[0], PROP_NAME, inst);
- return this;
- },
-
- /* Detach a datepicker from its control.
- * @param target element - the target input field or division or span
- */
- _destroyDatepicker: function(target) {
- var nodeName,
- $target = $(target),
- inst = $.data(target, PROP_NAME);
-
- if (!$target.hasClass(this.markerClassName)) {
- return;
- }
-
- nodeName = target.nodeName.toLowerCase();
- $.removeData(target, PROP_NAME);
- if (nodeName === "input") {
- inst.append.remove();
- inst.trigger.remove();
- $target.removeClass(this.markerClassName).
- unbind("focus", this._showDatepicker).
- unbind("keydown", this._doKeyDown).
- unbind("keypress", this._doKeyPress).
- unbind("keyup", this._doKeyUp);
- } else if (nodeName === "div" || nodeName === "span") {
- $target.removeClass(this.markerClassName).empty();
- }
- },
-
- /* Enable the date picker to a jQuery selection.
- * @param target element - the target input field or division or span
- */
- _enableDatepicker: function(target) {
- var nodeName, inline,
- $target = $(target),
- inst = $.data(target, PROP_NAME);
-
- if (!$target.hasClass(this.markerClassName)) {
- return;
- }
-
- nodeName = target.nodeName.toLowerCase();
- if (nodeName === "input") {
- target.disabled = false;
- inst.trigger.filter("button").
- each(function() { this.disabled = false; }).end().
- filter("img").css({opacity: "1.0", cursor: ""});
- } else if (nodeName === "div" || nodeName === "span") {
- inline = $target.children("." + this._inlineClass);
- inline.children().removeClass("ui-state-disabled");
- inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
- prop("disabled", false);
- }
- this._disabledInputs = $.map(this._disabledInputs,
- function(value) { return (value === target ? null : value); }); // delete entry
- },
-
- /* Disable the date picker to a jQuery selection.
- * @param target element - the target input field or division or span
- */
- _disableDatepicker: function(target) {
- var nodeName, inline,
- $target = $(target),
- inst = $.data(target, PROP_NAME);
-
- if (!$target.hasClass(this.markerClassName)) {
- return;
- }
-
- nodeName = target.nodeName.toLowerCase();
- if (nodeName === "input") {
- target.disabled = true;
- inst.trigger.filter("button").
- each(function() { this.disabled = true; }).end().
- filter("img").css({opacity: "0.5", cursor: "default"});
- } else if (nodeName === "div" || nodeName === "span") {
- inline = $target.children("." + this._inlineClass);
- inline.children().addClass("ui-state-disabled");
- inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
- prop("disabled", true);
- }
- this._disabledInputs = $.map(this._disabledInputs,
- function(value) { return (value === target ? null : value); }); // delete entry
- this._disabledInputs[this._disabledInputs.length] = target;
- },
-
- /* Is the first field in a jQuery collection disabled as a datepicker?
- * @param target element - the target input field or division or span
- * @return boolean - true if disabled, false if enabled
- */
- _isDisabledDatepicker: function(target) {
- if (!target) {
- return false;
- }
- for (var i = 0; i < this._disabledInputs.length; i++) {
- if (this._disabledInputs[i] === target) {
- return true;
- }
- }
- return false;
- },
-
- /* Retrieve the instance data for the target control.
- * @param target element - the target input field or division or span
- * @return object - the associated instance data
- * @throws error if a jQuery problem getting data
- */
- _getInst: function(target) {
- try {
- return $.data(target, PROP_NAME);
- }
- catch (err) {
- throw "Missing instance data for this datepicker";
- }
- },
-
- /* Update or retrieve the settings for a date picker attached to an input field or division.
- * @param target element - the target input field or division or span
- * @param name object - the new settings to update or
- * string - the name of the setting to change or retrieve,
- * when retrieving also "all" for all instance settings or
- * "defaults" for all global defaults
- * @param value any - the new value for the setting
- * (omit if above is an object or to retrieve a value)
- */
- _optionDatepicker: function(target, name, value) {
- var settings, date, minDate, maxDate,
- inst = this._getInst(target);
-
- if (arguments.length === 2 && typeof name === "string") {
- return (name === "defaults" ? $.extend({}, $.datepicker._defaults) :
- (inst ? (name === "all" ? $.extend({}, inst.settings) :
- this._get(inst, name)) : null));
- }
-
- settings = name || {};
- if (typeof name === "string") {
- settings = {};
- settings[name] = value;
- }
-
- if (inst) {
- if (this._curInst === inst) {
- this._hideDatepicker();
- }
-
- date = this._getDateDatepicker(target, true);
- minDate = this._getMinMaxDate(inst, "min");
- maxDate = this._getMinMaxDate(inst, "max");
- extendRemove(inst.settings, settings);
- // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
- if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
- inst.settings.minDate = this._formatDate(inst, minDate);
- }
- if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {
- inst.settings.maxDate = this._formatDate(inst, maxDate);
- }
- if ( "disabled" in settings ) {
- if ( settings.disabled ) {
- this._disableDatepicker(target);
- } else {
- this._enableDatepicker(target);
- }
- }
- this._attachments($(target), inst);
- this._autoSize(inst);
- this._setDate(inst, date);
- this._updateAlternate(inst);
- this._updateDatepicker(inst);
- }
- },
-
- // change method deprecated
- _changeDatepicker: function(target, name, value) {
- this._optionDatepicker(target, name, value);
- },
-
- /* Redraw the date picker attached to an input field or division.
- * @param target element - the target input field or division or span
- */
- _refreshDatepicker: function(target) {
- var inst = this._getInst(target);
- if (inst) {
- this._updateDatepicker(inst);
- }
- },
-
- /* Set the dates for a jQuery selection.
- * @param target element - the target input field or division or span
- * @param date Date - the new date
- */
- _setDateDatepicker: function(target, date) {
- var inst = this._getInst(target);
- if (inst) {
- this._setDate(inst, date);
- this._updateDatepicker(inst);
- this._updateAlternate(inst);
- }
- },
-
- /* Get the date(s) for the first entry in a jQuery selection.
- * @param target element - the target input field or division or span
- * @param noDefault boolean - true if no default date is to be used
- * @return Date - the current date
- */
- _getDateDatepicker: function(target, noDefault) {
- var inst = this._getInst(target);
- if (inst && !inst.inline) {
- this._setDateFromField(inst, noDefault);
- }
- return (inst ? this._getDate(inst) : null);
- },
-
- /* Handle keystrokes. */
- _doKeyDown: function(event) {
- var onSelect, dateStr, sel,
- inst = $.datepicker._getInst(event.target),
- handled = true,
- isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
-
- inst._keyEvent = true;
- if ($.datepicker._datepickerShowing) {
- switch (event.keyCode) {
- case 9: $.datepicker._hideDatepicker();
- handled = false;
- break; // hide on tab out
- case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." +
- $.datepicker._currentClass + ")", inst.dpDiv);
- if (sel[0]) {
- $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
- }
-
- onSelect = $.datepicker._get(inst, "onSelect");
- if (onSelect) {
- dateStr = $.datepicker._formatDate(inst);
-
- // trigger custom callback
- onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
- } else {
- $.datepicker._hideDatepicker();
- }
-
- return false; // don't submit the form
- case 27: $.datepicker._hideDatepicker();
- break; // hide on escape
- case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
- -$.datepicker._get(inst, "stepBigMonths") :
- -$.datepicker._get(inst, "stepMonths")), "M");
- break; // previous month/year on page up/+ ctrl
- case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
- +$.datepicker._get(inst, "stepBigMonths") :
- +$.datepicker._get(inst, "stepMonths")), "M");
- break; // next month/year on page down/+ ctrl
- case 35: if (event.ctrlKey || event.metaKey) {
- $.datepicker._clearDate(event.target);
- }
- handled = event.ctrlKey || event.metaKey;
- break; // clear on ctrl or command +end
- case 36: if (event.ctrlKey || event.metaKey) {
- $.datepicker._gotoToday(event.target);
- }
- handled = event.ctrlKey || event.metaKey;
- break; // current on ctrl or command +home
- case 37: if (event.ctrlKey || event.metaKey) {
- $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D");
- }
- handled = event.ctrlKey || event.metaKey;
- // -1 day on ctrl or command +left
- if (event.originalEvent.altKey) {
- $.datepicker._adjustDate(event.target, (event.ctrlKey ?
- -$.datepicker._get(inst, "stepBigMonths") :
- -$.datepicker._get(inst, "stepMonths")), "M");
- }
- // next month/year on alt +left on Mac
- break;
- case 38: if (event.ctrlKey || event.metaKey) {
- $.datepicker._adjustDate(event.target, -7, "D");
- }
- handled = event.ctrlKey || event.metaKey;
- break; // -1 week on ctrl or command +up
- case 39: if (event.ctrlKey || event.metaKey) {
- $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D");
- }
- handled = event.ctrlKey || event.metaKey;
- // +1 day on ctrl or command +right
- if (event.originalEvent.altKey) {
- $.datepicker._adjustDate(event.target, (event.ctrlKey ?
- +$.datepicker._get(inst, "stepBigMonths") :
- +$.datepicker._get(inst, "stepMonths")), "M");
- }
- // next month/year on alt +right
- break;
- case 40: if (event.ctrlKey || event.metaKey) {
- $.datepicker._adjustDate(event.target, +7, "D");
- }
- handled = event.ctrlKey || event.metaKey;
- break; // +1 week on ctrl or command +down
- default: handled = false;
- }
- } else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home
- $.datepicker._showDatepicker(this);
- } else {
- handled = false;
- }
-
- if (handled) {
- event.preventDefault();
- event.stopPropagation();
- }
- },
-
- /* Filter entered characters - based on date format. */
- _doKeyPress: function(event) {
- var chars, chr,
- inst = $.datepicker._getInst(event.target);
-
- if ($.datepicker._get(inst, "constrainInput")) {
- chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat"));
- chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
- return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1);
- }
- },
-
- /* Synchronise manual entry and field/alternate field. */
- _doKeyUp: function(event) {
- var date,
- inst = $.datepicker._getInst(event.target);
-
- if (inst.input.val() !== inst.lastVal) {
- try {
- date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
- (inst.input ? inst.input.val() : null),
- $.datepicker._getFormatConfig(inst));
-
- if (date) { // only if valid
- $.datepicker._setDateFromField(inst);
- $.datepicker._updateAlternate(inst);
- $.datepicker._updateDatepicker(inst);
- }
- }
- catch (err) {
- }
- }
- return true;
- },
-
- /* Pop-up the date picker for a given input field.
- * If false returned from beforeShow event handler do not show.
- * @param input element - the input field attached to the date picker or
- * event - if triggered by focus
- */
- _showDatepicker: function(input) {
- input = input.target || input;
- if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger
- input = $("input", input.parentNode)[0];
- }
-
- if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here
- return;
- }
-
- var inst, beforeShow, beforeShowSettings, isFixed,
- offset, showAnim, duration;
-
- inst = $.datepicker._getInst(input);
- if ($.datepicker._curInst && $.datepicker._curInst !== inst) {
- $.datepicker._curInst.dpDiv.stop(true, true);
- if ( inst && $.datepicker._datepickerShowing ) {
- $.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );
- }
- }
-
- beforeShow = $.datepicker._get(inst, "beforeShow");
- beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
- if(beforeShowSettings === false){
- return;
- }
- extendRemove(inst.settings, beforeShowSettings);
-
- inst.lastVal = null;
- $.datepicker._lastInput = input;
- $.datepicker._setDateFromField(inst);
-
- if ($.datepicker._inDialog) { // hide cursor
- input.value = "";
- }
- if (!$.datepicker._pos) { // position below input
- $.datepicker._pos = $.datepicker._findPos(input);
- $.datepicker._pos[1] += input.offsetHeight; // add the height
- }
-
- isFixed = false;
- $(input).parents().each(function() {
- isFixed |= $(this).css("position") === "fixed";
- return !isFixed;
- });
-
- offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
- $.datepicker._pos = null;
- //to avoid flashes on Firefox
- inst.dpDiv.empty();
- // determine sizing offscreen
- inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"});
- $.datepicker._updateDatepicker(inst);
- // fix width for dynamic number of date pickers
- // and adjust position before showing
- offset = $.datepicker._checkOffset(inst, offset, isFixed);
- inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
- "static" : (isFixed ? "fixed" : "absolute")), display: "none",
- left: offset.left + "px", top: offset.top + "px"});
-
- if (!inst.inline) {
- showAnim = $.datepicker._get(inst, "showAnim");
- duration = $.datepicker._get(inst, "duration");
- inst.dpDiv.zIndex($(input).zIndex()+1);
- $.datepicker._datepickerShowing = true;
-
- if ( $.effects && $.effects.effect[ showAnim ] ) {
- inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration);
- } else {
- inst.dpDiv[showAnim || "show"](showAnim ? duration : null);
- }
-
- if ( $.datepicker._shouldFocusInput( inst ) ) {
- inst.input.focus();
- }
-
- $.datepicker._curInst = inst;
- }
- },
-
- /* Generate the date picker content. */
- _updateDatepicker: function(inst) {
- this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
- instActive = inst; // for delegate hover events
- inst.dpDiv.empty().append(this._generateHTML(inst));
- this._attachHandlers(inst);
- inst.dpDiv.find("." + this._dayOverClass + " a").mouseover();
-
- var origyearshtml,
- numMonths = this._getNumberOfMonths(inst),
- cols = numMonths[1],
- width = 17;
-
- inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
- if (cols > 1) {
- inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em");
- }
- inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") +
- "Class"]("ui-datepicker-multi");
- inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") +
- "Class"]("ui-datepicker-rtl");
-
- if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
- inst.input.focus();
- }
-
- // deffered render of the years select (to avoid flashes on Firefox)
- if( inst.yearshtml ){
- origyearshtml = inst.yearshtml;
- setTimeout(function(){
- //assure that inst.yearshtml didn't change.
- if( origyearshtml === inst.yearshtml && inst.yearshtml ){
- inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml);
- }
- origyearshtml = inst.yearshtml = null;
- }, 0);
- }
- },
-
- // #6694 - don't focus the input if it's already focused
- // this breaks the change event in IE
- // Support: IE and jQuery <1.9
- _shouldFocusInput: function( inst ) {
- return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
- },
-
- /* Check positioning to remain on screen. */
- _checkOffset: function(inst, offset, isFixed) {
- var dpWidth = inst.dpDiv.outerWidth(),
- dpHeight = inst.dpDiv.outerHeight(),
- inputWidth = inst.input ? inst.input.outerWidth() : 0,
- inputHeight = inst.input ? inst.input.outerHeight() : 0,
- viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),
- viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
-
- offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0);
- offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;
- offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
-
- // now check if datepicker is showing outside window viewport - move to a better place if so.
- offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
- Math.abs(offset.left + dpWidth - viewWidth) : 0);
- offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
- Math.abs(dpHeight + inputHeight) : 0);
-
- return offset;
- },
-
- /* Find an object's position on the screen. */
- _findPos: function(obj) {
- var position,
- inst = this._getInst(obj),
- isRTL = this._get(inst, "isRTL");
-
- while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {
- obj = obj[isRTL ? "previousSibling" : "nextSibling"];
- }
-
- position = $(obj).offset();
- return [position.left, position.top];
- },
-
- /* Hide the date picker from view.
- * @param input element - the input field attached to the date picker
- */
- _hideDatepicker: function(input) {
- var showAnim, duration, postProcess, onClose,
- inst = this._curInst;
-
- if (!inst || (input && inst !== $.data(input, PROP_NAME))) {
- return;
- }
-
- if (this._datepickerShowing) {
- showAnim = this._get(inst, "showAnim");
- duration = this._get(inst, "duration");
- postProcess = function() {
- $.datepicker._tidyDialog(inst);
- };
-
- // DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
- if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
- inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess);
- } else {
- inst.dpDiv[(showAnim === "slideDown" ? "slideUp" :
- (showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess);
- }
-
- if (!showAnim) {
- postProcess();
- }
- this._datepickerShowing = false;
-
- onClose = this._get(inst, "onClose");
- if (onClose) {
- onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]);
- }
-
- this._lastInput = null;
- if (this._inDialog) {
- this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" });
- if ($.blockUI) {
- $.unblockUI();
- $("body").append(this.dpDiv);
- }
- }
- this._inDialog = false;
- }
- },
-
- /* Tidy up after a dialog display. */
- _tidyDialog: function(inst) {
- inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar");
- },
-
- /* Close date picker if clicked elsewhere. */
- _checkExternalClick: function(event) {
- if (!$.datepicker._curInst) {
- return;
- }
-
- var $target = $(event.target),
- inst = $.datepicker._getInst($target[0]);
-
- if ( ( ( $target[0].id !== $.datepicker._mainDivId &&
- $target.parents("#" + $.datepicker._mainDivId).length === 0 &&
- !$target.hasClass($.datepicker.markerClassName) &&
- !$target.closest("." + $.datepicker._triggerClass).length &&
- $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||
- ( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {
- $.datepicker._hideDatepicker();
- }
- },
-
- /* Adjust one of the date sub-fields. */
- _adjustDate: function(id, offset, period) {
- var target = $(id),
- inst = this._getInst(target[0]);
-
- if (this._isDisabledDatepicker(target[0])) {
- return;
- }
- this._adjustInstDate(inst, offset +
- (period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning
- period);
- this._updateDatepicker(inst);
- },
-
- /* Action for current link. */
- _gotoToday: function(id) {
- var date,
- target = $(id),
- inst = this._getInst(target[0]);
-
- if (this._get(inst, "gotoCurrent") && inst.currentDay) {
- inst.selectedDay = inst.currentDay;
- inst.drawMonth = inst.selectedMonth = inst.currentMonth;
- inst.drawYear = inst.selectedYear = inst.currentYear;
- } else {
- date = new Date();
- inst.selectedDay = date.getDate();
- inst.drawMonth = inst.selectedMonth = date.getMonth();
- inst.drawYear = inst.selectedYear = date.getFullYear();
- }
- this._notifyChange(inst);
- this._adjustDate(target);
- },
-
- /* Action for selecting a new month/year. */
- _selectMonthYear: function(id, select, period) {
- var target = $(id),
- inst = this._getInst(target[0]);
-
- inst["selected" + (period === "M" ? "Month" : "Year")] =
- inst["draw" + (period === "M" ? "Month" : "Year")] =
- parseInt(select.options[select.selectedIndex].value,10);
-
- this._notifyChange(inst);
- this._adjustDate(target);
- },
-
- /* Action for selecting a day. */
- _selectDay: function(id, month, year, td) {
- var inst,
- target = $(id);
-
- if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
- return;
- }
-
- inst = this._getInst(target[0]);
- inst.selectedDay = inst.currentDay = $("a", td).html();
- inst.selectedMonth = inst.currentMonth = month;
- inst.selectedYear = inst.currentYear = year;
- this._selectDate(id, this._formatDate(inst,
- inst.currentDay, inst.currentMonth, inst.currentYear));
- },
-
- /* Erase the input field and hide the date picker. */
- _clearDate: function(id) {
- var target = $(id);
- this._selectDate(target, "");
- },
-
- /* Update the input field with the selected date. */
- _selectDate: function(id, dateStr) {
- var onSelect,
- target = $(id),
- inst = this._getInst(target[0]);
-
- dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
- if (inst.input) {
- inst.input.val(dateStr);
- }
- this._updateAlternate(inst);
-
- onSelect = this._get(inst, "onSelect");
- if (onSelect) {
- onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback
- } else if (inst.input) {
- inst.input.trigger("change"); // fire the change event
- }
-
- if (inst.inline){
- this._updateDatepicker(inst);
- } else {
- this._hideDatepicker();
- this._lastInput = inst.input[0];
- if (typeof(inst.input[0]) !== "object") {
- inst.input.focus(); // restore focus
- }
- this._lastInput = null;
- }
- },
-
- /* Update any alternate field to synchronise with the main field. */
- _updateAlternate: function(inst) {
- var altFormat, date, dateStr,
- altField = this._get(inst, "altField");
-
- if (altField) { // update alternate field too
- altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat");
- date = this._getDate(inst);
- dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
- $(altField).each(function() { $(this).val(dateStr); });
- }
- },
-
- /* Set as beforeShowDay function to prevent selection of weekends.
- * @param date Date - the date to customise
- * @return [boolean, string] - is this date selectable?, what is its CSS class?
- */
- noWeekends: function(date) {
- var day = date.getDay();
- return [(day > 0 && day < 6), ""];
- },
-
- /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
- * @param date Date - the date to get the week for
- * @return number - the number of the week within the year that contains this date
- */
- iso8601Week: function(date) {
- var time,
- checkDate = new Date(date.getTime());
-
- // Find Thursday of this week starting on Monday
- checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
-
- time = checkDate.getTime();
- checkDate.setMonth(0); // Compare with Jan 1
- checkDate.setDate(1);
- return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
- },
-
- /* Parse a string value into a date object.
- * See formatDate below for the possible formats.
- *
- * @param format string - the expected format of the date
- * @param value string - the date in the above format
- * @param settings Object - attributes include:
- * shortYearCutoff number - the cutoff year for determining the century (optional)
- * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
- * dayNames string[7] - names of the days from Sunday (optional)
- * monthNamesShort string[12] - abbreviated names of the months (optional)
- * monthNames string[12] - names of the months (optional)
- * @return Date - the extracted date value or null if value is blank
- */
- parseDate: function (format, value, settings) {
- if (format == null || value == null) {
- throw "Invalid arguments";
- }
-
- value = (typeof value === "object" ? value.toString() : value + "");
- if (value === "") {
- return null;
- }
-
- var iFormat, dim, extra,
- iValue = 0,
- shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,
- shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
- new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),
- dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
- dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
- monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
- monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
- year = -1,
- month = -1,
- day = -1,
- doy = -1,
- literal = false,
- date,
- // Check whether a format character is doubled
- lookAhead = function(match) {
- var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
- if (matches) {
- iFormat++;
- }
- return matches;
- },
- // Extract a number from the string value
- getNumber = function(match) {
- var isDoubled = lookAhead(match),
- size = (match === "@" ? 14 : (match === "!" ? 20 :
- (match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
- digits = new RegExp("^\\d{1," + size + "}"),
- num = value.substring(iValue).match(digits);
- if (!num) {
- throw "Missing number at position " + iValue;
- }
- iValue += num[0].length;
- return parseInt(num[0], 10);
- },
- // Extract a name from the string value and convert to an index
- getName = function(match, shortNames, longNames) {
- var index = -1,
- names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
- return [ [k, v] ];
- }).sort(function (a, b) {
- return -(a[1].length - b[1].length);
- });
-
- $.each(names, function (i, pair) {
- var name = pair[1];
- if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
- index = pair[0];
- iValue += name.length;
- return false;
- }
- });
- if (index !== -1) {
- return index + 1;
- } else {
- throw "Unknown name at position " + iValue;
- }
- },
- // Confirm that a literal character matches the string value
- checkLiteral = function() {
- if (value.charAt(iValue) !== format.charAt(iFormat)) {
- throw "Unexpected literal at position " + iValue;
- }
- iValue++;
- };
-
- for (iFormat = 0; iFormat < format.length; iFormat++) {
- if (literal) {
- if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
- literal = false;
- } else {
- checkLiteral();
- }
- } else {
- switch (format.charAt(iFormat)) {
- case "d":
- day = getNumber("d");
- break;
- case "D":
- getName("D", dayNamesShort, dayNames);
- break;
- case "o":
- doy = getNumber("o");
- break;
- case "m":
- month = getNumber("m");
- break;
- case "M":
- month = getName("M", monthNamesShort, monthNames);
- break;
- case "y":
- year = getNumber("y");
- break;
- case "@":
- date = new Date(getNumber("@"));
- year = date.getFullYear();
- month = date.getMonth() + 1;
- day = date.getDate();
- break;
- case "!":
- date = new Date((getNumber("!") - this._ticksTo1970) / 10000);
- year = date.getFullYear();
- month = date.getMonth() + 1;
- day = date.getDate();
- break;
- case "'":
- if (lookAhead("'")){
- checkLiteral();
- } else {
- literal = true;
- }
- break;
- default:
- checkLiteral();
- }
- }
- }
-
- if (iValue < value.length){
- extra = value.substr(iValue);
- if (!/^\s+/.test(extra)) {
- throw "Extra/unparsed characters found in date: " + extra;
- }
- }
-
- if (year === -1) {
- year = new Date().getFullYear();
- } else if (year < 100) {
- year += new Date().getFullYear() - new Date().getFullYear() % 100 +
- (year <= shortYearCutoff ? 0 : -100);
- }
-
- if (doy > -1) {
- month = 1;
- day = doy;
- do {
- dim = this._getDaysInMonth(year, month - 1);
- if (day <= dim) {
- break;
- }
- month++;
- day -= dim;
- } while (true);
- }
-
- date = this._daylightSavingAdjust(new Date(year, month - 1, day));
- if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
- throw "Invalid date"; // E.g. 31/02/00
- }
- return date;
- },
-
- /* Standard date formats. */
- ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
- 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", // RFC 822
- TICKS: "!",
- TIMESTAMP: "@",
- W3C: "yy-mm-dd", // ISO 8601
-
- _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
- Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
-
- /* Format a date object into a string value.
- * The format can be combinations of the following:
- * d - day of month (no leading zero)
- * dd - day of month (two digit)
- * o - day of year (no leading zeros)
- * oo - day of year (three digit)
- * D - day name short
- * DD - day name long
- * m - month of year (no leading zero)
- * mm - month of year (two digit)
- * M - month name short
- * MM - month name long
- * y - year (two digit)
- * yy - year (four digit)
- * @ - Unix timestamp (ms since 01/01/1970)
- * ! - Windows ticks (100ns since 01/01/0001)
- * "..." - literal text
- * '' - single quote
- *
- * @param format string - the desired format of the date
- * @param date Date - the date value to format
- * @param settings Object - attributes include:
- * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
- * dayNames string[7] - names of the days from Sunday (optional)
- * monthNamesShort string[12] - abbreviated names of the months (optional)
- * monthNames string[12] - names of the months (optional)
- * @return string - the date in the above format
- */
- formatDate: function (format, date, settings) {
- if (!date) {
- return "";
- }
-
- var iFormat,
- dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
- dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
- monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
- monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
- // Check whether a format character is doubled
- lookAhead = function(match) {
- var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
- if (matches) {
- iFormat++;
- }
- return matches;
- },
- // Format a number, with leading zero if necessary
- formatNumber = function(match, value, len) {
- var num = "" + value;
- if (lookAhead(match)) {
- while (num.length < len) {
- num = "0" + num;
- }
- }
- return num;
- },
- // Format a name, short or long as requested
- formatName = function(match, value, shortNames, longNames) {
- return (lookAhead(match) ? longNames[value] : shortNames[value]);
- },
- output = "",
- literal = false;
-
- if (date) {
- for (iFormat = 0; iFormat < format.length; iFormat++) {
- if (literal) {
- if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
- literal = false;
- } else {
- output += format.charAt(iFormat);
- }
- } else {
- switch (format.charAt(iFormat)) {
- case "d":
- output += formatNumber("d", date.getDate(), 2);
- break;
- case "D":
- output += formatName("D", date.getDay(), dayNamesShort, dayNames);
- break;
- case "o":
- output += formatNumber("o",
- Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
- break;
- case "m":
- output += formatNumber("m", date.getMonth() + 1, 2);
- break;
- case "M":
- output += formatName("M", date.getMonth(), monthNamesShort, monthNames);
- break;
- case "y":
- output += (lookAhead("y") ? date.getFullYear() :
- (date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100);
- break;
- case "@":
- output += date.getTime();
- break;
- case "!":
- output += date.getTime() * 10000 + this._ticksTo1970;
- break;
- case "'":
- if (lookAhead("'")) {
- output += "'";
- } else {
- literal = true;
- }
- break;
- default:
- output += format.charAt(iFormat);
- }
- }
- }
- }
- return output;
- },
-
- /* Extract all possible characters from the date format. */
- _possibleChars: function (format) {
- var iFormat,
- chars = "",
- literal = false,
- // Check whether a format character is doubled
- lookAhead = function(match) {
- var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
- if (matches) {
- iFormat++;
- }
- return matches;
- };
-
- for (iFormat = 0; iFormat < format.length; iFormat++) {
- if (literal) {
- if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
- literal = false;
- } else {
- chars += format.charAt(iFormat);
- }
- } else {
- switch (format.charAt(iFormat)) {
- case "d": case "m": case "y": case "@":
- chars += "0123456789";
- break;
- case "D": case "M":
- return null; // Accept anything
- case "'":
- if (lookAhead("'")) {
- chars += "'";
- } else {
- literal = true;
- }
- break;
- default:
- chars += format.charAt(iFormat);
- }
- }
- }
- return chars;
- },
-
- /* Get a setting value, defaulting if necessary. */
- _get: function(inst, name) {
- return inst.settings[name] !== undefined ?
- inst.settings[name] : this._defaults[name];
- },
-
- /* Parse existing date and initialise date picker. */
- _setDateFromField: function(inst, noDefault) {
- if (inst.input.val() === inst.lastVal) {
- return;
- }
-
- var dateFormat = this._get(inst, "dateFormat"),
- dates = inst.lastVal = inst.input ? inst.input.val() : null,
- defaultDate = this._getDefaultDate(inst),
- date = defaultDate,
- settings = this._getFormatConfig(inst);
-
- try {
- date = this.parseDate(dateFormat, dates, settings) || defaultDate;
- } catch (event) {
- dates = (noDefault ? "" : dates);
- }
- inst.selectedDay = date.getDate();
- inst.drawMonth = inst.selectedMonth = date.getMonth();
- inst.drawYear = inst.selectedYear = date.getFullYear();
- inst.currentDay = (dates ? date.getDate() : 0);
- inst.currentMonth = (dates ? date.getMonth() : 0);
- inst.currentYear = (dates ? date.getFullYear() : 0);
- this._adjustInstDate(inst);
- },
-
- /* Retrieve the default date shown on opening. */
- _getDefaultDate: function(inst) {
- return this._restrictMinMax(inst,
- this._determineDate(inst, this._get(inst, "defaultDate"), new Date()));
- },
-
- /* A date may be specified as an exact value or a relative one. */
- _determineDate: function(inst, date, defaultDate) {
- var offsetNumeric = function(offset) {
- var date = new Date();
- date.setDate(date.getDate() + offset);
- return date;
- },
- offsetString = function(offset) {
- try {
- return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
- offset, $.datepicker._getFormatConfig(inst));
- }
- catch (e) {
- // Ignore
- }
-
- var date = (offset.toLowerCase().match(/^c/) ?
- $.datepicker._getDate(inst) : null) || new Date(),
- year = date.getFullYear(),
- month = date.getMonth(),
- day = date.getDate(),
- pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
- matches = pattern.exec(offset);
-
- while (matches) {
- switch (matches[2] || "d") {
- case "d" : case "D" :
- day += parseInt(matches[1],10); break;
- case "w" : case "W" :
- day += parseInt(matches[1],10) * 7; break;
- case "m" : case "M" :
- month += parseInt(matches[1],10);
- day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
- break;
- case "y": case "Y" :
- year += parseInt(matches[1],10);
- day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
- break;
- }
- matches = pattern.exec(offset);
- }
- return new Date(year, month, day);
- },
- newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) :
- (typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
-
- newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate);
- if (newDate) {
- newDate.setHours(0);
- newDate.setMinutes(0);
- newDate.setSeconds(0);
- newDate.setMilliseconds(0);
- }
- return this._daylightSavingAdjust(newDate);
- },
-
- /* Handle switch to/from daylight saving.
- * Hours may be non-zero on daylight saving cut-over:
- * > 12 when midnight changeover, but then cannot generate
- * midnight datetime, so jump to 1AM, otherwise reset.
- * @param date (Date) the date to check
- * @return (Date) the corrected date
- */
- _daylightSavingAdjust: function(date) {
- if (!date) {
- return null;
- }
- date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
- return date;
- },
-
- /* Set the date(s) directly. */
- _setDate: function(inst, date, noChange) {
- var clear = !date,
- origMonth = inst.selectedMonth,
- origYear = inst.selectedYear,
- newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
-
- inst.selectedDay = inst.currentDay = newDate.getDate();
- inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
- inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
- if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {
- this._notifyChange(inst);
- }
- this._adjustInstDate(inst);
- if (inst.input) {
- inst.input.val(clear ? "" : this._formatDate(inst));
- }
- },
-
- /* Retrieve the date(s) directly. */
- _getDate: function(inst) {
- var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null :
- this._daylightSavingAdjust(new Date(
- inst.currentYear, inst.currentMonth, inst.currentDay)));
- return startDate;
- },
-
- /* Attach the onxxx handlers. These are declared statically so
- * they work with static code transformers like Caja.
- */
- _attachHandlers: function(inst) {
- var stepMonths = this._get(inst, "stepMonths"),
- id = "#" + inst.id.replace( /\\\\/g, "\\" );
- inst.dpDiv.find("[data-handler]").map(function () {
- var handler = {
- prev: function () {
- $.datepicker._adjustDate(id, -stepMonths, "M");
- },
- next: function () {
- $.datepicker._adjustDate(id, +stepMonths, "M");
- },
- hide: function () {
- $.datepicker._hideDatepicker();
- },
- today: function () {
- $.datepicker._gotoToday(id);
- },
- selectDay: function () {
- $.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
- return false;
- },
- selectMonth: function () {
- $.datepicker._selectMonthYear(id, this, "M");
- return false;
- },
- selectYear: function () {
- $.datepicker._selectMonthYear(id, this, "Y");
- return false;
- }
- };
- $(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
- });
- },
-
- /* Generate the HTML for the current state of the date picker. */
- _generateHTML: function(inst) {
- var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
- controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
- monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
- selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
- cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
- printDate, dRow, tbody, daySettings, otherMonth, unselectable,
- tempDate = new Date(),
- today = this._daylightSavingAdjust(
- new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time
- isRTL = this._get(inst, "isRTL"),
- showButtonPanel = this._get(inst, "showButtonPanel"),
- hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"),
- navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"),
- numMonths = this._getNumberOfMonths(inst),
- showCurrentAtPos = this._get(inst, "showCurrentAtPos"),
- stepMonths = this._get(inst, "stepMonths"),
- isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),
- currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
- new Date(inst.currentYear, inst.currentMonth, inst.currentDay))),
- minDate = this._getMinMaxDate(inst, "min"),
- maxDate = this._getMinMaxDate(inst, "max"),
- drawMonth = inst.drawMonth - showCurrentAtPos,
- drawYear = inst.drawYear;
-
- if (drawMonth < 0) {
- drawMonth += 12;
- drawYear--;
- }
- if (maxDate) {
- maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
- maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
- maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
- while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
- drawMonth--;
- if (drawMonth < 0) {
- drawMonth = 11;
- drawYear--;
- }
- }
- }
- inst.drawMonth = drawMonth;
- inst.drawYear = drawYear;
-
- prevText = this._get(inst, "prevText");
- prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
- this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
- this._getFormatConfig(inst)));
-
- prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
- "<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
- " title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" :
- (hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+ prevText +"'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>"));
-
- nextText = this._get(inst, "nextText");
- nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
- this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
- this._getFormatConfig(inst)));
-
- next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
- "<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
- " title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" :
- (hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+ nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>"));
-
- currentText = this._get(inst, "currentText");
- gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today);
- currentText = (!navigationAsDateFormat ? currentText :
- this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
-
- controls = (!inst.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(inst, "closeText") + "</button>" : "");
-
- buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") +
- (this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
- ">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : "";
-
- firstDay = parseInt(this._get(inst, "firstDay"),10);
- firstDay = (isNaN(firstDay) ? 0 : firstDay);
-
- showWeek = this._get(inst, "showWeek");
- dayNames = this._get(inst, "dayNames");
- dayNamesMin = this._get(inst, "dayNamesMin");
- monthNames = this._get(inst, "monthNames");
- monthNamesShort = this._get(inst, "monthNamesShort");
- beforeShowDay = this._get(inst, "beforeShowDay");
- showOtherMonths = this._get(inst, "showOtherMonths");
- selectOtherMonths = this._get(inst, "selectOtherMonths");
- defaultDate = this._getDefaultDate(inst);
- html = "";
- dow;
- for (row = 0; row < numMonths[0]; row++) {
- group = "";
- this.maxRows = 4;
- for (col = 0; col < numMonths[1]; col++) {
- selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
- cornerClass = " ui-corner-all";
- calender = "";
- if (isMultiMonth) {
- calender += "<div class='ui-datepicker-group";
- if (numMonths[1] > 1) {
- switch (col) {
- case 0: calender += " ui-datepicker-group-first";
- cornerClass = " ui-corner-" + (isRTL ? "right" : "left"); break;
- case numMonths[1]-1: calender += " ui-datepicker-group-last";
- cornerClass = " ui-corner-" + (isRTL ? "left" : "right"); break;
- default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
- }
- }
- calender += "'>";
- }
- calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
- (/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
- (/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
- this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
- row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
- "</div><table class='ui-datepicker-calendar'><thead>" +
- "<tr>";
- thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
- for (dow = 0; dow < 7; dow++) { // days of the week
- day = (dow + firstDay) % 7;
- thead += "<th" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
- "<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
- }
- calender += thead + "</tr></thead><tbody>";
- daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
- if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {
- inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
- }
- leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
- curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
- numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
- this.maxRows = numRows;
- printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
- for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows
- calender += "<tr>";
- tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
- this._get(inst, "calculateWeek")(printDate) + "</td>");
- for (dow = 0; dow < 7; dow++) { // create date picker days
- daySettings = (beforeShowDay ?
- beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]);
- otherMonth = (printDate.getMonth() !== drawMonth);
- unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
- (minDate && printDate < minDate) || (maxDate && printDate > maxDate);
- tbody += "<td class='" +
- ((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends
- (otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months
- ((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key
- (defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?
- // or defaultDate is current printedDate and defaultDate is selectedDate
- " " + this._dayOverClass : "") + // highlight selected day
- (unselectable ? " " + this._unselectableClass + " ui-state-disabled": "") + // highlight unselectable days
- (otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates
- (printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day
- (printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different)
- ((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2].replace(/'/g, "&#39;") + "'" : "") + // cell title
- (unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions
- (otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months
- (unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
- (printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") +
- (printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day
- (otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months
- "' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date
- printDate.setDate(printDate.getDate() + 1);
- printDate = this._daylightSavingAdjust(printDate);
- }
- calender += tbody + "</tr>";
- }
- drawMonth++;
- if (drawMonth > 11) {
- drawMonth = 0;
- drawYear++;
- }
- calender += "</tbody></table>" + (isMultiMonth ? "</div>" +
- ((numMonths[0] > 0 && col === numMonths[1]-1) ? "<div class='ui-datepicker-row-break'></div>" : "") : "");
- group += calender;
- }
- html += group;
- }
- html += buttonPanel;
- inst._keyEvent = false;
- return html;
- },
-
- /* Generate the month and year header. */
- _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
- secondary, monthNames, monthNamesShort) {
-
- var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
- changeMonth = this._get(inst, "changeMonth"),
- changeYear = this._get(inst, "changeYear"),
- showMonthAfterYear = this._get(inst, "showMonthAfterYear"),
- html = "<div class='ui-datepicker-title'>",
- monthHtml = "";
-
- // month selection
- if (secondary || !changeMonth) {
- monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>";
- } else {
- inMinYear = (minDate && minDate.getFullYear() === drawYear);
- inMaxYear = (maxDate && maxDate.getFullYear() === drawYear);
- monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
- for ( month = 0; month < 12; month++) {
- if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {
- monthHtml += "<option value='" + month + "'" +
- (month === drawMonth ? " selected='selected'" : "") +
- ">" + monthNamesShort[month] + "</option>";
- }
- }
- monthHtml += "</select>";
- }
-
- if (!showMonthAfterYear) {
- html += monthHtml + (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "");
- }
-
- // year selection
- if ( !inst.yearshtml ) {
- inst.yearshtml = "";
- if (secondary || !changeYear) {
- html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
- } else {
- // determine range of years to display
- years = this._get(inst, "yearRange").split(":");
- thisYear = new Date().getFullYear();
- determineYear = function(value) {
- var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) :
- (value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) :
- parseInt(value, 10)));
- return (isNaN(year) ? thisYear : year);
- };
- year = determineYear(years[0]);
- endYear = Math.max(year, determineYear(years[1] || ""));
- year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
- endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
- inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
- for (; year <= endYear; year++) {
- inst.yearshtml += "<option value='" + year + "'" +
- (year === drawYear ? " selected='selected'" : "") +
- ">" + year + "</option>";
- }
- inst.yearshtml += "</select>";
-
- html += inst.yearshtml;
- inst.yearshtml = null;
- }
- }
-
- html += this._get(inst, "yearSuffix");
- if (showMonthAfterYear) {
- html += (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "") + monthHtml;
- }
- html += "</div>"; // Close datepicker_header
- return html;
- },
-
- /* Adjust one of the date sub-fields. */
- _adjustInstDate: function(inst, offset, period) {
- var year = inst.drawYear + (period === "Y" ? offset : 0),
- month = inst.drawMonth + (period === "M" ? offset : 0),
- day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0),
- date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
-
- inst.selectedDay = date.getDate();
- inst.drawMonth = inst.selectedMonth = date.getMonth();
- inst.drawYear = inst.selectedYear = date.getFullYear();
- if (period === "M" || period === "Y") {
- this._notifyChange(inst);
- }
- },
-
- /* Ensure a date is within any min/max bounds. */
- _restrictMinMax: function(inst, date) {
- var minDate = this._getMinMaxDate(inst, "min"),
- maxDate = this._getMinMaxDate(inst, "max"),
- newDate = (minDate && date < minDate ? minDate : date);
- return (maxDate && newDate > maxDate ? maxDate : newDate);
- },
-
- /* Notify change of month/year. */
- _notifyChange: function(inst) {
- var onChange = this._get(inst, "onChangeMonthYear");
- if (onChange) {
- onChange.apply((inst.input ? inst.input[0] : null),
- [inst.selectedYear, inst.selectedMonth + 1, inst]);
- }
- },
-
- /* Determine the number of months to show. */
- _getNumberOfMonths: function(inst) {
- var numMonths = this._get(inst, "numberOfMonths");
- return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths));
- },
-
- /* Determine the current maximum date - ensure no time components are set. */
- _getMinMaxDate: function(inst, minMax) {
- return this._determineDate(inst, this._get(inst, minMax + "Date"), null);
- },
-
- /* Find the number of days in a given month. */
- _getDaysInMonth: function(year, month) {
- return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
- },
-
- /* Find the day of the week of the first of a month. */
- _getFirstDayOfMonth: function(year, month) {
- return new Date(year, month, 1).getDay();
- },
-
- /* Determines if we should allow a "next/prev" month display change. */
- _canAdjustMonth: function(inst, offset, curYear, curMonth) {
- var numMonths = this._getNumberOfMonths(inst),
- date = this._daylightSavingAdjust(new Date(curYear,
- curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
-
- if (offset < 0) {
- date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
- }
- return this._isInRange(inst, date);
- },
-
- /* Is the given date in the accepted range? */
- _isInRange: function(inst, date) {
- var yearSplit, currentYear,
- minDate = this._getMinMaxDate(inst, "min"),
- maxDate = this._getMinMaxDate(inst, "max"),
- minYear = null,
- maxYear = null,
- years = this._get(inst, "yearRange");
- if (years){
- yearSplit = years.split(":");
- currentYear = new Date().getFullYear();
- minYear = parseInt(yearSplit[0], 10);
- maxYear = parseInt(yearSplit[1], 10);
- if ( yearSplit[0].match(/[+\-].*/) ) {
- minYear += currentYear;
- }
- if ( yearSplit[1].match(/[+\-].*/) ) {
- maxYear += currentYear;
- }
- }
-
- return ((!minDate || date.getTime() >= minDate.getTime()) &&
- (!maxDate || date.getTime() <= maxDate.getTime()) &&
- (!minYear || date.getFullYear() >= minYear) &&
- (!maxYear || date.getFullYear() <= maxYear));
- },
-
- /* Provide the configuration settings for formatting/parsing. */
- _getFormatConfig: function(inst) {
- var shortYearCutoff = this._get(inst, "shortYearCutoff");
- shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff :
- new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
- return {shortYearCutoff: shortYearCutoff,
- dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"),
- monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")};
- },
-
- /* Format the given date for display. */
- _formatDate: function(inst, day, month, year) {
- if (!day) {
- inst.currentDay = inst.selectedDay;
- inst.currentMonth = inst.selectedMonth;
- inst.currentYear = inst.selectedYear;
- }
- var date = (day ? (typeof day === "object" ? day :
- this._daylightSavingAdjust(new Date(year, month, day))) :
- this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
- return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst));
- }
-});
-
-/*
- * Bind hover events for datepicker elements.
- * Done via delegate so the binding only occurs once in the lifetime of the parent div.
- * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
- */
-function bindHover(dpDiv) {
- var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
- return dpDiv.delegate(selector, "mouseout", function() {
- $(this).removeClass("ui-state-hover");
- if (this.className.indexOf("ui-datepicker-prev") !== -1) {
- $(this).removeClass("ui-datepicker-prev-hover");
- }
- if (this.className.indexOf("ui-datepicker-next") !== -1) {
- $(this).removeClass("ui-datepicker-next-hover");
- }
- })
- .delegate(selector, "mouseover", function(){
- if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) {
- $(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
- $(this).addClass("ui-state-hover");
- if (this.className.indexOf("ui-datepicker-prev") !== -1) {
- $(this).addClass("ui-datepicker-prev-hover");
- }
- if (this.className.indexOf("ui-datepicker-next") !== -1) {
- $(this).addClass("ui-datepicker-next-hover");
- }
- }
- });
-}
-
-/* jQuery extend now ignores nulls! */
-function extendRemove(target, props) {
- $.extend(target, props);
- for (var name in props) {
- if (props[name] == null) {
- target[name] = props[name];
- }
- }
- return target;
-}
-
-/* Invoke the datepicker functionality.
- @param options string - a command, optionally followed by additional parameters or
- Object - settings for attaching new datepicker functionality
- @return jQuery object */
-$.fn.datepicker = function(options){
-
- /* Verify an empty collection wasn't passed - Fixes #6976 */
- if ( !this.length ) {
- return this;
- }
-
- /* Initialise the date picker. */
- if (!$.datepicker.initialized) {
- $(document).mousedown($.datepicker._checkExternalClick);
- $.datepicker.initialized = true;
- }
-
- /* Append datepicker main container to body if not exist. */
- if ($("#"+$.datepicker._mainDivId).length === 0) {
- $("body").append($.datepicker.dpDiv);
- }
-
- var otherArgs = Array.prototype.slice.call(arguments, 1);
- if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) {
- return $.datepicker["_" + options + "Datepicker"].
- apply($.datepicker, [this[0]].concat(otherArgs));
- }
- if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") {
- return $.datepicker["_" + options + "Datepicker"].
- apply($.datepicker, [this[0]].concat(otherArgs));
- }
- return this.each(function() {
- typeof options === "string" ?
- $.datepicker["_" + options + "Datepicker"].
- apply($.datepicker, [this].concat(otherArgs)) :
- $.datepicker._attachDatepicker(this, options);
- });
-};
-
-$.datepicker = new Datepicker(); // singleton instance
-$.datepicker.initialized = false;
-$.datepicker.uuid = new Date().getTime();
-$.datepicker.version = "1.10.4";
-
-})(jQuery);
-
-(function( $, undefined ) {
-
-var sizeRelatedOptions = {
- buttons: true,
- height: true,
- maxHeight: true,
- maxWidth: true,
- minHeight: true,
- minWidth: true,
- width: true
- },
- resizableRelatedOptions = {
- maxHeight: true,
- maxWidth: true,
- minHeight: true,
- minWidth: true
- };
-
-$.widget( "ui.dialog", {
- version: "1.10.4",
- options: {
- appendTo: "body",
- autoOpen: true,
- buttons: [],
- closeOnEscape: true,
- closeText: "close",
- dialogClass: "",
- draggable: true,
- hide: null,
- height: "auto",
- maxHeight: null,
- maxWidth: null,
- minHeight: 150,
- minWidth: 150,
- modal: false,
- position: {
- my: "center",
- at: "center",
- of: window,
- collision: "fit",
- // Ensure the titlebar is always visible
- using: function( pos ) {
- var topOffset = $( this ).css( pos ).offset().top;
- if ( topOffset < 0 ) {
- $( this ).css( "top", pos.top - topOffset );
- }
- }
- },
- resizable: true,
- show: null,
- title: null,
- width: 300,
-
- // callbacks
- beforeClose: null,
- close: null,
- drag: null,
- dragStart: null,
- dragStop: null,
- focus: null,
- open: null,
- resize: null,
- resizeStart: null,
- resizeStop: null
- },
-
- _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");
- this.options.title = this.options.title || this.originalTitle;
-
- this._createWrapper();
-
- this.element
- .show()
- .removeAttr("title")
- .addClass("ui-dialog-content ui-widget-content")
- .appendTo( this.uiDialog );
-
- this._createTitlebar();
- this._createButtonPane();
-
- if ( this.options.draggable && $.fn.draggable ) {
- this._makeDraggable();
- }
- if ( this.options.resizable && $.fn.resizable ) {
- this._makeResizable();
- }
-
- this._isOpen = false;
- },
-
- _init: function() {
- if ( this.options.autoOpen ) {
- this.open();
- }
- },
-
- _appendTo: function() {
- var element = this.options.appendTo;
- if ( element && (element.jquery || element.nodeType) ) {
- return $( element );
- }
- return this.document.find( element || "body" ).eq( 0 );
- },
-
- _destroy: function() {
- var next,
- originalPosition = this.originalPosition;
-
- this._destroyOverlay();
-
- this.element
- .removeUniqueId()
- .removeClass("ui-dialog-content ui-widget-content")
- .css( this.originalCss )
- // Without detaching first, the following becomes really slow
- .detach();
-
- this.uiDialog.stop( true, true ).remove();
-
- if ( this.originalTitle ) {
- this.element.attr( "title", this.originalTitle );
- }
-
- next = originalPosition.parent.children().eq( originalPosition.index );
- // Don't try to place the dialog next to itself (#8613)
- if ( next.length && next[0] !== this.element[0] ) {
- next.before( this.element );
- } else {
- originalPosition.parent.append( this.element );
- }
- },
-
- widget: function() {
- return this.uiDialog;
- },
-
- disable: $.noop,
- enable: $.noop,
-
- close: function( event ) {
- var activeElement,
- that = this;
-
- if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
- return;
- }
-
- this._isOpen = false;
- this._destroyOverlay();
-
- if ( !this.opener.filter(":focusable").focus().length ) {
-
- // support: IE9
- // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
- try {
- activeElement = this.document[ 0 ].activeElement;
-
- // Support: IE9, IE10
- // If the <body> is blurred, IE will switch windows, see #4520
- if ( activeElement && activeElement.nodeName.toLowerCase() !== "body" ) {
-
- // Hiding a focused element doesn't trigger blur in WebKit
- // so in case we have nothing to focus on, explicitly blur the active element
- // https://bugs.webkit.org/show_bug.cgi?id=47182
- $( activeElement ).blur();
- }
- } catch ( error ) {}
- }
-
- this._hide( this.uiDialog, this.options.hide, function() {
- that._trigger( "close", event );
- });
- },
-
- isOpen: function() {
- return this._isOpen;
- },
-
- moveToTop: function() {
- this._moveToTop();
- },
-
- _moveToTop: function( event, silent ) {
- var moved = !!this.uiDialog.nextAll(":visible").insertBefore( this.uiDialog ).length;
- if ( moved && !silent ) {
- this._trigger( "focus", event );
- }
- return moved;
- },
-
- open: function() {
- var that = this;
- if ( this._isOpen ) {
- if ( this._moveToTop() ) {
- this._focusTabbable();
- }
- return;
- }
-
- this._isOpen = true;
- this.opener = $( this.document[0].activeElement );
-
- this._size();
- this._position();
- this._createOverlay();
- this._moveToTop( null, true );
- this._show( this.uiDialog, this.options.show, function() {
- that._focusTabbable();
- that._trigger("focus");
- });
-
- this._trigger("open");
- },
-
- _focusTabbable: function() {
- // Set focus to the first match:
- // 1. First element inside the dialog matching [autofocus]
- // 2. Tabbable element inside the content element
- // 3. Tabbable element inside the buttonpane
- // 4. The close button
- // 5. The dialog itself
- var hasFocus = this.element.find("[autofocus]");
- if ( !hasFocus.length ) {
- hasFocus = this.element.find(":tabbable");
- }
- if ( !hasFocus.length ) {
- hasFocus = this.uiDialogButtonPane.find(":tabbable");
- }
- if ( !hasFocus.length ) {
- hasFocus = this.uiDialogTitlebarClose.filter(":tabbable");
- }
- if ( !hasFocus.length ) {
- hasFocus = this.uiDialog;
- }
- hasFocus.eq( 0 ).focus();
- },
-
- _keepFocus: function( event ) {
- function checkFocus() {
- var activeElement = this.document[0].activeElement,
- isActive = this.uiDialog[0] === activeElement ||
- $.contains( this.uiDialog[0], activeElement );
- if ( !isActive ) {
- this._focusTabbable();
- }
- }
- event.preventDefault();
- checkFocus.call( this );
- // support: IE
- // IE <= 8 doesn't prevent moving focus even with event.preventDefault()
- // so we check again later
- this._delay( checkFocus );
- },
-
- _createWrapper: function() {
- this.uiDialog = $("<div>")
- .addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " +
- this.options.dialogClass )
- .hide()
- .attr({
- // Setting tabIndex makes the div focusable
- tabIndex: -1,
- role: "dialog"
- })
- .appendTo( this._appendTo() );
-
- this._on( this.uiDialog, {
- keydown: function( event ) {
- if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
- event.keyCode === $.ui.keyCode.ESCAPE ) {
- event.preventDefault();
- this.close( event );
- return;
- }
-
- // prevent tabbing out of dialogs
- if ( event.keyCode !== $.ui.keyCode.TAB ) {
- return;
- }
- var tabbables = this.uiDialog.find(":tabbable"),
- first = tabbables.filter(":first"),
- last = tabbables.filter(":last");
-
- if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
- first.focus( 1 );
- event.preventDefault();
- } else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
- last.focus( 1 );
- event.preventDefault();
- }
- },
- mousedown: function( event ) {
- if ( this._moveToTop( event ) ) {
- this._focusTabbable();
- }
- }
- });
-
- // We assume that any existing aria-describedby attribute means
- // that the dialog content is marked up properly
- // otherwise we brute force the content as the description
- if ( !this.element.find("[aria-describedby]").length ) {
- this.uiDialog.attr({
- "aria-describedby": this.element.uniqueId().attr("id")
- });
- }
- },
-
- _createTitlebar: function() {
- var uiDialogTitle;
-
- this.uiDialogTitlebar = $("<div>")
- .addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix")
- .prependTo( this.uiDialog );
- this._on( this.uiDialogTitlebar, {
- mousedown: function( event ) {
- // Don't prevent click on close button (#8838)
- // Focusing a dialog that is partially scrolled out of view
- // causes the browser to scroll it into view, preventing the click event
- if ( !$( event.target ).closest(".ui-dialog-titlebar-close") ) {
- // Dialog isn't getting focus when dragging (#8063)
- this.uiDialog.focus();
- }
- }
- });
-
- // support: IE
- // Use type="button" to prevent enter keypresses in textboxes from closing the
- // dialog in IE (#9312)
- this.uiDialogTitlebarClose = $( "<button type='button'></button>" )
- .button({
- label: this.options.closeText,
- icons: {
- primary: "ui-icon-closethick"
- },
- text: false
- })
- .addClass("ui-dialog-titlebar-close")
- .appendTo( this.uiDialogTitlebar );
- this._on( this.uiDialogTitlebarClose, {
- click: function( event ) {
- event.preventDefault();
- this.close( event );
- }
- });
-
- uiDialogTitle = $("<span>")
- .uniqueId()
- .addClass("ui-dialog-title")
- .prependTo( this.uiDialogTitlebar );
- this._title( uiDialogTitle );
-
- this.uiDialog.attr({
- "aria-labelledby": uiDialogTitle.attr("id")
- });
- },
-
- _title: function( title ) {
- if ( !this.options.title ) {
- title.html("&#160;");
- }
- title.text( this.options.title );
- },
-
- _createButtonPane: function() {
- this.uiDialogButtonPane = $("<div>")
- .addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");
-
- this.uiButtonSet = $("<div>")
- .addClass("ui-dialog-buttonset")
- .appendTo( this.uiDialogButtonPane );
-
- this._createButtons();
- },
-
- _createButtons: function() {
- var that = this,
- buttons = this.options.buttons;
-
- // if we already have a button pane, remove it
- this.uiDialogButtonPane.remove();
- this.uiButtonSet.empty();
-
- if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {
- this.uiDialog.removeClass("ui-dialog-buttons");
- return;
- }
-
- $.each( buttons, function( name, props ) {
- var click, buttonOptions;
- props = $.isFunction( props ) ?
- { click: props, text: name } :
- props;
- // Default to a non-submitting button
- props = $.extend( { type: "button" }, props );
- // Change the context for the click callback to be the main element
- click = props.click;
- props.click = function() {
- click.apply( that.element[0], arguments );
- };
- buttonOptions = {
- icons: props.icons,
- text: props.showText
- };
- delete props.icons;
- delete props.showText;
- $( "<button></button>", props )
- .button( buttonOptions )
- .appendTo( that.uiButtonSet );
- });
- this.uiDialog.addClass("ui-dialog-buttons");
- this.uiDialogButtonPane.appendTo( this.uiDialog );
- },
-
- _makeDraggable: function() {
- var that = this,
- options = this.options;
-
- function filteredUi( ui ) {
- return {
- position: ui.position,
- offset: ui.offset
- };
- }
-
- this.uiDialog.draggable({
- cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
- handle: ".ui-dialog-titlebar",
- containment: "document",
- start: function( event, ui ) {
- $( this ).addClass("ui-dialog-dragging");
- that._blockFrames();
- that._trigger( "dragStart", event, filteredUi( ui ) );
- },
- drag: function( event, ui ) {
- that._trigger( "drag", event, filteredUi( ui ) );
- },
- stop: function( event, ui ) {
- options.position = [
- ui.position.left - that.document.scrollLeft(),
- ui.position.top - that.document.scrollTop()
- ];
- $( this ).removeClass("ui-dialog-dragging");
- that._unblockFrames();
- that._trigger( "dragStop", event, filteredUi( ui ) );
- }
- });
- },
-
- _makeResizable: function() {
- var that = this,
- options = this.options,
- handles = options.resizable,
- // .ui-resizable has position: relative defined in the stylesheet
- // but dialogs have to use absolute or fixed positioning
- position = this.uiDialog.css("position"),
- resizeHandles = typeof handles === "string" ?
- handles :
- "n,e,s,w,se,sw,ne,nw";
-
- function filteredUi( ui ) {
- return {
- originalPosition: ui.originalPosition,
- originalSize: ui.originalSize,
- position: ui.position,
- size: ui.size
- };
- }
-
- this.uiDialog.resizable({
- cancel: ".ui-dialog-content",
- containment: "document",
- alsoResize: this.element,
- maxWidth: options.maxWidth,
- maxHeight: options.maxHeight,
- minWidth: options.minWidth,
- minHeight: this._minHeight(),
- handles: resizeHandles,
- start: function( event, ui ) {
- $( this ).addClass("ui-dialog-resizing");
- that._blockFrames();
- that._trigger( "resizeStart", event, filteredUi( ui ) );
- },
- resize: function( event, ui ) {
- that._trigger( "resize", event, filteredUi( ui ) );
- },
- stop: function( event, ui ) {
- options.height = $( this ).height();
- options.width = $( this ).width();
- $( this ).removeClass("ui-dialog-resizing");
- that._unblockFrames();
- that._trigger( "resizeStop", event, filteredUi( ui ) );
- }
- })
- .css( "position", position );
- },
-
- _minHeight: function() {
- var options = this.options;
-
- return options.height === "auto" ?
- options.minHeight :
- Math.min( options.minHeight, options.height );
- },
-
- _position: function() {
- // Need to show the dialog to get the actual offset in the position plugin
- var isVisible = this.uiDialog.is(":visible");
- if ( !isVisible ) {
- this.uiDialog.show();
- }
- this.uiDialog.position( this.options.position );
- if ( !isVisible ) {
- this.uiDialog.hide();
- }
- },
-
- _setOptions: function( options ) {
- var that = this,
- resize = false,
- resizableOptions = {};
-
- $.each( options, function( key, value ) {
- that._setOption( key, value );
-
- if ( key in sizeRelatedOptions ) {
- resize = true;
- }
- if ( key in resizableRelatedOptions ) {
- resizableOptions[ key ] = value;
- }
- });
-
- if ( resize ) {
- this._size();
- this._position();
- }
- if ( this.uiDialog.is(":data(ui-resizable)") ) {
- this.uiDialog.resizable( "option", resizableOptions );
- }
- },
-
- _setOption: function( key, value ) {
- var isDraggable, isResizable,
- uiDialog = this.uiDialog;
-
- if ( key === "dialogClass" ) {
- uiDialog
- .removeClass( this.options.dialogClass )
- .addClass( value );
- }
-
- if ( key === "disabled" ) {
- return;
- }
-
- this._super( key, value );
-
- if ( key === "appendTo" ) {
- this.uiDialog.appendTo( this._appendTo() );
- }
-
- if ( key === "buttons" ) {
- this._createButtons();
- }
-
- if ( key === "closeText" ) {
- this.uiDialogTitlebarClose.button({
- // Ensure that we always pass a string
- label: "" + value
- });
- }
-
- if ( key === "draggable" ) {
- isDraggable = uiDialog.is(":data(ui-draggable)");
- if ( isDraggable && !value ) {
- uiDialog.draggable("destroy");
- }
-
- if ( !isDraggable && value ) {
- this._makeDraggable();
- }
- }
-
- if ( key === "position" ) {
- this._position();
- }
-
- if ( key === "resizable" ) {
- // currently resizable, becoming non-resizable
- isResizable = uiDialog.is(":data(ui-resizable)");
- if ( isResizable && !value ) {
- uiDialog.resizable("destroy");
- }
-
- // currently resizable, changing handles
- if ( isResizable && typeof value === "string" ) {
- uiDialog.resizable( "option", "handles", value );
- }
-
- // currently non-resizable, becoming resizable
- if ( !isResizable && value !== false ) {
- this._makeResizable();
- }
- }
-
- if ( key === "title" ) {
- this._title( this.uiDialogTitlebar.find(".ui-dialog-title") );
- }
- },
-
- _size: function() {
- // If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
- // divs will both have width and height set, so we need to reset them
- var nonContentHeight, minContentHeight, maxContentHeight,
- options = this.options;
-
- // Reset content sizing
- this.element.show().css({
- width: "auto",
- minHeight: 0,
- maxHeight: "none",
- height: 0
- });
-
- if ( options.minWidth > options.width ) {
- options.width = options.minWidth;
- }
-
- // reset wrapper sizing
- // determine the height of all the non-content elements
- nonContentHeight = this.uiDialog.css({
- height: "auto",
- width: options.width
- })
- .outerHeight();
- minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
- maxContentHeight = typeof options.maxHeight === "number" ?
- Math.max( 0, options.maxHeight - nonContentHeight ) :
- "none";
-
- if ( options.height === "auto" ) {
- this.element.css({
- minHeight: minContentHeight,
- maxHeight: maxContentHeight,
- height: "auto"
- });
- } else {
- this.element.height( Math.max( 0, options.height - nonContentHeight ) );
- }
-
- if (this.uiDialog.is(":data(ui-resizable)") ) {
- this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
- }
- },
-
- _blockFrames: function() {
- this.iframeBlocks = this.document.find( "iframe" ).map(function() {
- var iframe = $( this );
-
- return $( "<div>" )
- .css({
- position: "absolute",
- width: iframe.outerWidth(),
- height: iframe.outerHeight()
- })
- .appendTo( iframe.parent() )
- .offset( iframe.offset() )[0];
- });
- },
-
- _unblockFrames: function() {
- if ( this.iframeBlocks ) {
- this.iframeBlocks.remove();
- delete this.iframeBlocks;
- }
- },
-
- _allowInteraction: function( event ) {
- if ( $( event.target ).closest(".ui-dialog").length ) {
- return true;
- }
-
- // TODO: Remove hack when datepicker implements
- // the .ui-front logic (#8989)
- return !!$( event.target ).closest(".ui-datepicker").length;
- },
-
- _createOverlay: function() {
- if ( !this.options.modal ) {
- return;
- }
-
- var that = this,
- widgetFullName = this.widgetFullName;
- if ( !$.ui.dialog.overlayInstances ) {
- // Prevent use of anchors and inputs.
- // We use a delay in case the overlay is created from an
- // event that we're going to be cancelling. (#2804)
- this._delay(function() {
- // Handle .dialog().dialog("close") (#4065)
- if ( $.ui.dialog.overlayInstances ) {
- this.document.bind( "focusin.dialog", function( event ) {
- if ( !that._allowInteraction( event ) ) {
- event.preventDefault();
- $(".ui-dialog:visible:last .ui-dialog-content")
- .data( widgetFullName )._focusTabbable();
- }
- });
- }
- });
- }
-
- this.overlay = $("<div>")
- .addClass("ui-widget-overlay ui-front")
- .appendTo( this._appendTo() );
- this._on( this.overlay, {
- mousedown: "_keepFocus"
- });
- $.ui.dialog.overlayInstances++;
- },
-
- _destroyOverlay: function() {
- if ( !this.options.modal ) {
- return;
- }
-
- if ( this.overlay ) {
- $.ui.dialog.overlayInstances--;
-
- if ( !$.ui.dialog.overlayInstances ) {
- this.document.unbind( "focusin.dialog" );
- }
- this.overlay.remove();
- this.overlay = null;
- }
- }
-});
-
-$.ui.dialog.overlayInstances = 0;
-
-// DEPRECATED
-if ( $.uiBackCompat !== false ) {
- // position option with array notation
- // just override with old implementation
- $.widget( "ui.dialog", $.ui.dialog, {
- _position: function() {
- var position = this.options.position,
- myAt = [],
- offset = [ 0, 0 ],
- isVisible;
-
- if ( position ) {
- if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) {
- myAt = position.split ? position.split(" ") : [ position[0], position[1] ];
- if ( myAt.length === 1 ) {
- myAt[1] = myAt[0];
- }
-
- $.each( [ "left", "top" ], function( i, offsetPosition ) {
- if ( +myAt[ i ] === myAt[ i ] ) {
- offset[ i ] = myAt[ i ];
- myAt[ i ] = offsetPosition;
- }
- });
-
- position = {
- my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
- myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
- at: myAt.join(" ")
- };
- }
-
- position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
- } else {
- position = $.ui.dialog.prototype.options.position;
- }
-
- // need to show the dialog to get the actual offset in the position plugin
- isVisible = this.uiDialog.is(":visible");
- if ( !isVisible ) {
- this.uiDialog.show();
- }
- this.uiDialog.position( position );
- if ( !isVisible ) {
- this.uiDialog.hide();
- }
- }
- });
-}
-
-}( jQuery ) );
-
-(function( $, undefined ) {
-
-var rvertical = /up|down|vertical/,
- rpositivemotion = /up|left|vertical|horizontal/;
-
-$.effects.effect.blind = function( o, done ) {
- // Create element
- var el = $( this ),
- props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
- mode = $.effects.setMode( el, o.mode || "hide" ),
- direction = o.direction || "up",
- vertical = rvertical.test( direction ),
- ref = vertical ? "height" : "width",
- ref2 = vertical ? "top" : "left",
- motion = rpositivemotion.test( direction ),
- animation = {},
- show = mode === "show",
- wrapper, distance, margin;
-
- // if already wrapped, the wrapper's properties are my property. #6245
- if ( el.parent().is( ".ui-effects-wrapper" ) ) {
- $.effects.save( el.parent(), props );
- } else {
- $.effects.save( el, props );
- }
- el.show();
- wrapper = $.effects.createWrapper( el ).css({
- overflow: "hidden"
- });
-
- distance = wrapper[ ref ]();
- margin = parseFloat( wrapper.css( ref2 ) ) || 0;
-
- animation[ ref ] = show ? distance : 0;
- if ( !motion ) {
- el
- .css( vertical ? "bottom" : "right", 0 )
- .css( vertical ? "top" : "left", "auto" )
- .css({ position: "absolute" });
-
- animation[ ref2 ] = show ? margin : distance + margin;
- }
-
- // start at 0 if we are showing
- if ( show ) {
- wrapper.css( ref, 0 );
- if ( ! motion ) {
- wrapper.css( ref2, margin + distance );
- }
- }
-
- // Animate
- wrapper.animate( animation, {
- duration: o.duration,
- easing: o.easing,
- queue: false,
- complete: function() {
- if ( mode === "hide" ) {
- el.hide();
- }
- $.effects.restore( el, props );
- $.effects.removeWrapper( el );
- done();
- }
- });
-
-};
-
-})(jQuery);
-
-(function( $, undefined ) {
-
-$.effects.effect.bounce = function( o, done ) {
- var el = $( this ),
- props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
-
- // defaults:
- mode = $.effects.setMode( el, o.mode || "effect" ),
- hide = mode === "hide",
- show = mode === "show",
- direction = o.direction || "up",
- distance = o.distance,
- times = o.times || 5,
-
- // number of internal animations
- anims = times * 2 + ( show || hide ? 1 : 0 ),
- speed = o.duration / anims,
- easing = o.easing,
-
- // utility:
- ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
- motion = ( direction === "up" || direction === "left" ),
- i,
- upAnim,
- downAnim,
-
- // we will need to re-assemble the queue to stack our animations in place
- queue = el.queue(),
- queuelen = queue.length;
-
- // Avoid touching opacity to prevent clearType and PNG issues in IE
- if ( show || hide ) {
- props.push( "opacity" );
- }
-
- $.effects.save( el, props );
- el.show();
- $.effects.createWrapper( el ); // Create Wrapper
-
- // default distance for the BIGGEST bounce is the outer Distance / 3
- if ( !distance ) {
- distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
- }
-
- if ( show ) {
- downAnim = { opacity: 1 };
- downAnim[ ref ] = 0;
-
- // if we are showing, force opacity 0 and set the initial position
- // then do the "first" animation
- el.css( "opacity", 0 )
- .css( ref, motion ? -distance * 2 : distance * 2 )
- .animate( downAnim, speed, easing );
- }
-
- // start at the smallest distance if we are hiding
- if ( hide ) {
- distance = distance / Math.pow( 2, times - 1 );
- }
-
- downAnim = {};
- downAnim[ ref ] = 0;
- // Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
- for ( i = 0; i < times; i++ ) {
- upAnim = {};
- upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
-
- el.animate( upAnim, speed, easing )
- .animate( downAnim, speed, easing );
-
- distance = hide ? distance * 2 : distance / 2;
- }
-
- // Last Bounce when Hiding
- if ( hide ) {
- upAnim = { opacity: 0 };
- upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
-
- el.animate( upAnim, speed, easing );
- }
-
- el.queue(function() {
- if ( hide ) {
- el.hide();
- }
- $.effects.restore( el, props );
- $.effects.removeWrapper( el );
- done();
- });
-
- // inject all the animations we just queued to be first in line (after "inprogress")
- if ( queuelen > 1) {
- queue.splice.apply( queue,
- [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
- }
- el.dequeue();
-
-};
-
-})(jQuery);
-
-(function( $, undefined ) {
-
-$.effects.effect.clip = function( o, done ) {
- // Create element
- var el = $( this ),
- props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
- mode = $.effects.setMode( el, o.mode || "hide" ),
- show = mode === "show",
- direction = o.direction || "vertical",
- vert = direction === "vertical",
- size = vert ? "height" : "width",
- position = vert ? "top" : "left",
- animation = {},
- wrapper, animate, distance;
-
- // Save & Show
- $.effects.save( el, props );
- el.show();
-
- // Create Wrapper
- wrapper = $.effects.createWrapper( el ).css({
- overflow: "hidden"
- });
- animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
- distance = animate[ size ]();
-
- // Shift
- if ( show ) {
- animate.css( size, 0 );
- animate.css( position, distance / 2 );
- }
-
- // Create Animation Object:
- animation[ size ] = show ? distance : 0;
- animation[ position ] = show ? 0 : distance / 2;
-
- // Animate
- animate.animate( animation, {
- queue: false,
- duration: o.duration,
- easing: o.easing,
- complete: function() {
- if ( !show ) {
- el.hide();
- }
- $.effects.restore( el, props );
- $.effects.removeWrapper( el );
- done();
- }
- });
-
-};
-
-})(jQuery);
-
-(function( $, undefined ) {
-
-$.effects.effect.drop = function( o, done ) {
-
- var el = $( this ),
- props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
- mode = $.effects.setMode( el, o.mode || "hide" ),
- show = mode === "show",
- direction = o.direction || "left",
- ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
- motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
- animation = {
- opacity: show ? 1 : 0
- },
- distance;
-
- // Adjust
- $.effects.save( el, props );
- el.show();
- $.effects.createWrapper( el );
-
- distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2;
-
- if ( show ) {
- el
- .css( "opacity", 0 )
- .css( ref, motion === "pos" ? -distance : distance );
- }
-
- // Animation
- animation[ ref ] = ( show ?
- ( motion === "pos" ? "+=" : "-=" ) :
- ( motion === "pos" ? "-=" : "+=" ) ) +
- distance;
-
- // Animate
- el.animate( animation, {
- queue: false,
- duration: o.duration,
- easing: o.easing,
- complete: function() {
- if ( mode === "hide" ) {
- el.hide();
- }
- $.effects.restore( el, props );
- $.effects.removeWrapper( el );
- done();
- }
- });
-};
-
-})(jQuery);
-
-(function( $, undefined ) {
-
-$.effects.effect.explode = function( o, done ) {
-
- var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
- cells = rows,
- el = $( this ),
- mode = $.effects.setMode( el, o.mode || "hide" ),
- show = mode === "show",
-
- // show and then visibility:hidden the element before calculating offset
- offset = el.show().css( "visibility", "hidden" ).offset(),
-
- // width and height of a piece
- width = Math.ceil( el.outerWidth() / cells ),
- height = Math.ceil( el.outerHeight() / rows ),
- pieces = [],
-
- // loop
- i, j, left, top, mx, my;
-
- // children animate complete:
- function childComplete() {
- pieces.push( this );
- if ( pieces.length === rows * cells ) {
- animComplete();
- }
- }
-
- // clone the element for each row and cell.
- for( i = 0; i < rows ; i++ ) { // ===>
- top = offset.top + i * height;
- my = i - ( rows - 1 ) / 2 ;
-
- for( j = 0; j < cells ; j++ ) { // |||
- left = offset.left + j * width;
- mx = j - ( cells - 1 ) / 2 ;
-
- // Create a clone of the now hidden main element that will be absolute positioned
- // within a wrapper div off the -left and -top equal to size of our pieces
- el
- .clone()
- .appendTo( "body" )
- .wrap( "<div></div>" )
- .css({
- position: "absolute",
- visibility: "visible",
- left: -j * width,
- top: -i * height
- })
-
- // select the wrapper - make it overflow: hidden and absolute positioned based on
- // where the original was located +left and +top equal to the size of pieces
- .parent()
- .addClass( "ui-effects-explode" )
- .css({
- position: "absolute",
- overflow: "hidden",
- width: width,
- height: height,
- left: left + ( show ? mx * width : 0 ),
- top: top + ( show ? my * height : 0 ),
- opacity: show ? 0 : 1
- }).animate({
- left: left + ( show ? 0 : mx * width ),
- top: top + ( show ? 0 : my * height ),
- opacity: show ? 1 : 0
- }, o.duration || 500, o.easing, childComplete );
- }
- }
-
- function animComplete() {
- el.css({
- visibility: "visible"
- });
- $( pieces ).remove();
- if ( !show ) {
- el.hide();
- }
- done();
- }
-};
-
-})(jQuery);
-
-(function( $, undefined ) {
-
-$.effects.effect.fade = function( o, done ) {
- var el = $( this ),
- mode = $.effects.setMode( el, o.mode || "toggle" );
-
- el.animate({
- opacity: mode
- }, {
- queue: false,
- duration: o.duration,
- easing: o.easing,
- complete: done
- });
-};
-
-})( jQuery );
-
-(function( $, undefined ) {
-
-$.effects.effect.fold = function( o, done ) {
-
- // Create element
- var el = $( this ),
- props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
- mode = $.effects.setMode( el, o.mode || "hide" ),
- show = mode === "show",
- hide = mode === "hide",
- size = o.size || 15,
- percent = /([0-9]+)%/.exec( size ),
- horizFirst = !!o.horizFirst,
- widthFirst = show !== horizFirst,
- ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
- duration = o.duration / 2,
- wrapper, distance,
- animation1 = {},
- animation2 = {};
-
- $.effects.save( el, props );
- el.show();
-
- // Create Wrapper
- wrapper = $.effects.createWrapper( el ).css({
- overflow: "hidden"
- });
- distance = widthFirst ?
- [ wrapper.width(), wrapper.height() ] :
- [ wrapper.height(), wrapper.width() ];
-
- if ( percent ) {
- size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
- }
- if ( show ) {
- wrapper.css( horizFirst ? {
- height: 0,
- width: size
- } : {
- height: size,
- width: 0
- });
- }
-
- // Animation
- animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
- animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
-
- // Animate
- wrapper
- .animate( animation1, duration, o.easing )
- .animate( animation2, duration, o.easing, function() {
- if ( hide ) {
- el.hide();
- }
- $.effects.restore( el, props );
- $.effects.removeWrapper( el );
- done();
- });
-
-};
-
-})(jQuery);
-
-(function( $, undefined ) {
-
-$.effects.effect.highlight = function( o, done ) {
- var elem = $( this ),
- props = [ "backgroundImage", "backgroundColor", "opacity" ],
- mode = $.effects.setMode( elem, o.mode || "show" ),
- animation = {
- backgroundColor: elem.css( "backgroundColor" )
- };
-
- if (mode === "hide") {
- animation.opacity = 0;
- }
-
- $.effects.save( elem, props );
-
- elem
- .show()
- .css({
- backgroundImage: "none",
- backgroundColor: o.color || "#ffff99"
- })
- .animate( animation, {
- queue: false,
- duration: o.duration,
- easing: o.easing,
- complete: function() {
- if ( mode === "hide" ) {
- elem.hide();
- }
- $.effects.restore( elem, props );
- done();
- }
- });
-};
-
-})(jQuery);
-
-(function( $, undefined ) {
-
-$.effects.effect.pulsate = function( o, done ) {
- var elem = $( this ),
- mode = $.effects.setMode( elem, o.mode || "show" ),
- show = mode === "show",
- hide = mode === "hide",
- showhide = ( show || mode === "hide" ),
-
- // showing or hiding leaves of the "last" animation
- anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
- duration = o.duration / anims,
- animateTo = 0,
- queue = elem.queue(),
- queuelen = queue.length,
- i;
-
- if ( show || !elem.is(":visible")) {
- elem.css( "opacity", 0 ).show();
- animateTo = 1;
- }
-
- // anims - 1 opacity "toggles"
- for ( i = 1; i < anims; i++ ) {
- elem.animate({
- opacity: animateTo
- }, duration, o.easing );
- animateTo = 1 - animateTo;
- }
-
- elem.animate({
- opacity: animateTo
- }, duration, o.easing);
-
- elem.queue(function() {
- if ( hide ) {
- elem.hide();
- }
- done();
- });
-
- // We just queued up "anims" animations, we need to put them next in the queue
- if ( queuelen > 1 ) {
- queue.splice.apply( queue,
- [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
- }
- elem.dequeue();
-};
-
-})(jQuery);
-
-(function( $, undefined ) {
-
-$.effects.effect.puff = function( o, done ) {
- var elem = $( this ),
- mode = $.effects.setMode( elem, o.mode || "hide" ),
- hide = mode === "hide",
- percent = parseInt( o.percent, 10 ) || 150,
- factor = percent / 100,
- original = {
- height: elem.height(),
- width: elem.width(),
- outerHeight: elem.outerHeight(),
- outerWidth: elem.outerWidth()
- };
-
- $.extend( o, {
- effect: "scale",
- queue: false,
- fade: true,
- mode: mode,
- complete: done,
- percent: hide ? percent : 100,
- from: hide ?
- original :
- {
- height: original.height * factor,
- width: original.width * factor,
- outerHeight: original.outerHeight * factor,
- outerWidth: original.outerWidth * factor
- }
- });
-
- elem.effect( o );
-};
-
-$.effects.effect.scale = function( o, done ) {
-
- // Create element
- var el = $( this ),
- options = $.extend( true, {}, o ),
- mode = $.effects.setMode( el, o.mode || "effect" ),
- percent = parseInt( o.percent, 10 ) ||
- ( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
- direction = o.direction || "both",
- origin = o.origin,
- original = {
- height: el.height(),
- width: el.width(),
- outerHeight: el.outerHeight(),
- outerWidth: el.outerWidth()
- },
- factor = {
- y: direction !== "horizontal" ? (percent / 100) : 1,
- x: direction !== "vertical" ? (percent / 100) : 1
- };
-
- // We are going to pass this effect to the size effect:
- options.effect = "size";
- options.queue = false;
- options.complete = done;
-
- // Set default origin and restore for show/hide
- if ( mode !== "effect" ) {
- options.origin = origin || ["middle","center"];
- options.restore = true;
- }
-
- options.from = o.from || ( mode === "show" ? {
- height: 0,
- width: 0,
- outerHeight: 0,
- outerWidth: 0
- } : original );
- options.to = {
- height: original.height * factor.y,
- width: original.width * factor.x,
- outerHeight: original.outerHeight * factor.y,
- outerWidth: original.outerWidth * factor.x
- };
-
- // Fade option to support puff
- if ( options.fade ) {
- if ( mode === "show" ) {
- options.from.opacity = 0;
- options.to.opacity = 1;
- }
- if ( mode === "hide" ) {
- options.from.opacity = 1;
- options.to.opacity = 0;
- }
- }
-
- // Animate
- el.effect( options );
-
-};
-
-$.effects.effect.size = function( o, done ) {
-
- // Create element
- var original, baseline, factor,
- el = $( this ),
- props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
-
- // Always restore
- props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
-
- // Copy for children
- props2 = [ "width", "height", "overflow" ],
- cProps = [ "fontSize" ],
- vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
- hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
-
- // Set options
- mode = $.effects.setMode( el, o.mode || "effect" ),
- restore = o.restore || mode !== "effect",
- scale = o.scale || "both",
- origin = o.origin || [ "middle", "center" ],
- position = el.css( "position" ),
- props = restore ? props0 : props1,
- zero = {
- height: 0,
- width: 0,
- outerHeight: 0,
- outerWidth: 0
- };
-
- if ( mode === "show" ) {
- el.show();
- }
- original = {
- height: el.height(),
- width: el.width(),
- outerHeight: el.outerHeight(),
- outerWidth: el.outerWidth()
- };
-
- if ( o.mode === "toggle" && mode === "show" ) {
- el.from = o.to || zero;
- el.to = o.from || original;
- } else {
- el.from = o.from || ( mode === "show" ? zero : original );
- el.to = o.to || ( mode === "hide" ? zero : original );
- }
-
- // Set scaling factor
- factor = {
- from: {
- y: el.from.height / original.height,
- x: el.from.width / original.width
- },
- to: {
- y: el.to.height / original.height,
- x: el.to.width / original.width
- }
- };
-
- // Scale the css box
- if ( scale === "box" || scale === "both" ) {
-
- // Vertical props scaling
- if ( factor.from.y !== factor.to.y ) {
- props = props.concat( vProps );
- el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
- el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
- }
-
- // Horizontal props scaling
- if ( factor.from.x !== factor.to.x ) {
- props = props.concat( hProps );
- el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
- el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
- }
- }
-
- // Scale the content
- if ( scale === "content" || scale === "both" ) {
-
- // Vertical props scaling
- if ( factor.from.y !== factor.to.y ) {
- props = props.concat( cProps ).concat( props2 );
- el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
- el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
- }
- }
-
- $.effects.save( el, props );
- el.show();
- $.effects.createWrapper( el );
- el.css( "overflow", "hidden" ).css( el.from );
-
- // Adjust
- if (origin) { // Calculate baseline shifts
- baseline = $.effects.getBaseline( origin, original );
- el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
- el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
- el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
- el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
- }
- el.css( el.from ); // set top & left
-
- // Animate
- if ( scale === "content" || scale === "both" ) { // Scale the children
-
- // Add margins/font-size
- vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
- hProps = hProps.concat([ "marginLeft", "marginRight" ]);
- props2 = props0.concat(vProps).concat(hProps);
-
- el.find( "*[width]" ).each( function(){
- var child = $( this ),
- c_original = {
- height: child.height(),
- width: child.width(),
- outerHeight: child.outerHeight(),
- outerWidth: child.outerWidth()
- };
- if (restore) {
- $.effects.save(child, props2);
- }
-
- child.from = {
- height: c_original.height * factor.from.y,
- width: c_original.width * factor.from.x,
- outerHeight: c_original.outerHeight * factor.from.y,
- outerWidth: c_original.outerWidth * factor.from.x
- };
- child.to = {
- height: c_original.height * factor.to.y,
- width: c_original.width * factor.to.x,
- outerHeight: c_original.height * factor.to.y,
- outerWidth: c_original.width * factor.to.x
- };
-
- // Vertical props scaling
- if ( factor.from.y !== factor.to.y ) {
- child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
- child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
- }
-
- // Horizontal props scaling
- if ( factor.from.x !== factor.to.x ) {
- child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
- child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
- }
-
- // Animate children
- child.css( child.from );
- child.animate( child.to, o.duration, o.easing, function() {
-
- // Restore children
- if ( restore ) {
- $.effects.restore( child, props2 );
- }
- });
- });
- }
-
- // Animate
- el.animate( el.to, {
- queue: false,
- duration: o.duration,
- easing: o.easing,
- complete: function() {
- if ( el.to.opacity === 0 ) {
- el.css( "opacity", el.from.opacity );
- }
- if( mode === "hide" ) {
- el.hide();
- }
- $.effects.restore( el, props );
- if ( !restore ) {
-
- // we need to calculate our new positioning based on the scaling
- if ( position === "static" ) {
- el.css({
- position: "relative",
- top: el.to.top,
- left: el.to.left
- });
- } else {
- $.each([ "top", "left" ], function( idx, pos ) {
- el.css( pos, function( _, str ) {
- var val = parseInt( str, 10 ),
- toRef = idx ? el.to.left : el.to.top;
-
- // if original was "auto", recalculate the new value from wrapper
- if ( str === "auto" ) {
- return toRef + "px";
- }
-
- return val + toRef + "px";
- });
- });
- }
- }
-
- $.effects.removeWrapper( el );
- done();
- }
- });
-
-};
-
-})(jQuery);
-
-(function( $, undefined ) {
-
-$.effects.effect.shake = function( o, done ) {
-
- var el = $( this ),
- props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
- mode = $.effects.setMode( el, o.mode || "effect" ),
- direction = o.direction || "left",
- distance = o.distance || 20,
- times = o.times || 3,
- anims = times * 2 + 1,
- speed = Math.round(o.duration/anims),
- ref = (direction === "up" || direction === "down") ? "top" : "left",
- positiveMotion = (direction === "up" || direction === "left"),
- animation = {},
- animation1 = {},
- animation2 = {},
- i,
-
- // we will need to re-assemble the queue to stack our animations in place
- queue = el.queue(),
- queuelen = queue.length;
-
- $.effects.save( el, props );
- el.show();
- $.effects.createWrapper( el );
-
- // Animation
- animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
- animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
- animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
-
- // Animate
- el.animate( animation, speed, o.easing );
-
- // Shakes
- for ( i = 1; i < times; i++ ) {
- el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
- }
- el
- .animate( animation1, speed, o.easing )
- .animate( animation, speed / 2, o.easing )
- .queue(function() {
- if ( mode === "hide" ) {
- el.hide();
- }
- $.effects.restore( el, props );
- $.effects.removeWrapper( el );
- done();
- });
-
- // inject all the animations we just queued to be first in line (after "inprogress")
- if ( queuelen > 1) {
- queue.splice.apply( queue,
- [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
- }
- el.dequeue();
-
-};
-
-})(jQuery);
-
-(function( $, undefined ) {
-
-$.effects.effect.slide = function( o, done ) {
-
- // Create element
- var el = $( this ),
- props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
- mode = $.effects.setMode( el, o.mode || "show" ),
- show = mode === "show",
- direction = o.direction || "left",
- ref = (direction === "up" || direction === "down") ? "top" : "left",
- positiveMotion = (direction === "up" || direction === "left"),
- distance,
- animation = {};
-
- // Adjust
- $.effects.save( el, props );
- el.show();
- distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
-
- $.effects.createWrapper( el ).css({
- overflow: "hidden"
- });
-
- if ( show ) {
- el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
- }
-
- // Animation
- animation[ ref ] = ( show ?
- ( positiveMotion ? "+=" : "-=") :
- ( positiveMotion ? "-=" : "+=")) +
- distance;
-
- // Animate
- el.animate( animation, {
- queue: false,
- duration: o.duration,
- easing: o.easing,
- complete: function() {
- if ( mode === "hide" ) {
- el.hide();
- }
- $.effects.restore( el, props );
- $.effects.removeWrapper( el );
- done();
- }
- });
-};
-
-})(jQuery);
-
-(function( $, undefined ) {
-
-$.effects.effect.transfer = function( o, done ) {
- var elem = $( this ),
- target = $( o.to ),
- targetFixed = target.css( "position" ) === "fixed",
- body = $("body"),
- fixTop = targetFixed ? body.scrollTop() : 0,
- fixLeft = targetFixed ? body.scrollLeft() : 0,
- endPosition = target.offset(),
- animation = {
- top: endPosition.top - fixTop ,
- left: endPosition.left - fixLeft ,
- height: target.innerHeight(),
- width: target.innerWidth()
- },
- startPosition = elem.offset(),
- transfer = $( "<div class='ui-effects-transfer'></div>" )
- .appendTo( document.body )
- .addClass( o.className )
- .css({
- top: startPosition.top - fixTop ,
- left: startPosition.left - fixLeft ,
- height: elem.innerHeight(),
- width: elem.innerWidth(),
- position: targetFixed ? "fixed" : "absolute"
- })
- .animate( animation, o.duration, o.easing, function() {
- transfer.remove();
- done();
- });
-};
-
-})(jQuery);
-
-(function( $, undefined ) {
-
-$.widget( "ui.menu", {
- version: "1.10.4",
- defaultElement: "<ul>",
- delay: 300,
- options: {
- icons: {
- submenu: "ui-icon-carat-1-e"
- },
- menus: "ul",
- position: {
- my: "left top",
- at: "right top"
- },
- role: "menu",
-
- // callbacks
- blur: null,
- focus: null,
- select: null
- },
-
- _create: function() {
- this.activeMenu = this.element;
- // flag used to prevent firing of the click handler
- // as the event bubbles up through nested menus
- this.mouseHandled = false;
- this.element
- .uniqueId()
- .addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
- .toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
- .attr({
- role: this.options.role,
- tabIndex: 0
- })
- // need to catch all clicks on disabled menu
- // not possible through _on
- .bind( "click" + this.eventNamespace, $.proxy(function( event ) {
- if ( this.options.disabled ) {
- event.preventDefault();
- }
- }, this ));
-
- if ( this.options.disabled ) {
- this.element
- .addClass( "ui-state-disabled" )
- .attr( "aria-disabled", "true" );
- }
-
- this._on({
- // Prevent focus from sticking to links inside menu after clicking
- // them (focus should always stay on UL during navigation).
- "mousedown .ui-menu-item > a": function( event ) {
- event.preventDefault();
- },
- "click .ui-state-disabled > a": function( event ) {
- event.preventDefault();
- },
- "click .ui-menu-item:has(a)": function( event ) {
- var target = $( event.target ).closest( ".ui-menu-item" );
- if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
- this.select( event );
-
- // Only set the mouseHandled flag if the event will bubble, see #9469.
- if ( !event.isPropagationStopped() ) {
- this.mouseHandled = true;
- }
-
- // Open submenu on click
- if ( target.has( ".ui-menu" ).length ) {
- this.expand( event );
- } else if ( !this.element.is( ":focus" ) && $( this.document[ 0 ].activeElement ).closest( ".ui-menu" ).length ) {
-
- // Redirect focus to the menu
- this.element.trigger( "focus", [ true ] );
-
- // If the active item is on the top level, let it stay active.
- // Otherwise, blur the active item since it is no longer visible.
- if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
- clearTimeout( this.timer );
- }
- }
- }
- },
- "mouseenter .ui-menu-item": function( event ) {
- var target = $( event.currentTarget );
- // Remove ui-state-active class from siblings of the newly focused menu item
- // to avoid a jump caused by adjacent elements both having a class with a border
- target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" );
- this.focus( event, target );
- },
- mouseleave: "collapseAll",
- "mouseleave .ui-menu": "collapseAll",
- focus: function( event, keepActiveItem ) {
- // If there's already an active item, keep it active
- // If not, activate the first item
- var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 );
-
- if ( !keepActiveItem ) {
- this.focus( event, item );
- }
- },
- blur: function( event ) {
- this._delay(function() {
- if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
- this.collapseAll( event );
- }
- });
- },
- keydown: "_keydown"
- });
-
- this.refresh();
-
- // Clicks outside of a menu collapse any open menus
- this._on( this.document, {
- click: function( event ) {
- if ( !$( event.target ).closest( ".ui-menu" ).length ) {
- this.collapseAll( event );
- }
-
- // Reset the mouseHandled flag
- this.mouseHandled = false;
- }
- });
- },
-
- _destroy: function() {
- // Destroy (sub)menus
- this.element
- .removeAttr( "aria-activedescendant" )
- .find( ".ui-menu" ).addBack()
- .removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" )
- .removeAttr( "role" )
- .removeAttr( "tabIndex" )
- .removeAttr( "aria-labelledby" )
- .removeAttr( "aria-expanded" )
- .removeAttr( "aria-hidden" )
- .removeAttr( "aria-disabled" )
- .removeUniqueId()
- .show();
-
- // Destroy menu items
- this.element.find( ".ui-menu-item" )
- .removeClass( "ui-menu-item" )
- .removeAttr( "role" )
- .removeAttr( "aria-disabled" )
- .children( "a" )
- .removeUniqueId()
- .removeClass( "ui-corner-all ui-state-hover" )
- .removeAttr( "tabIndex" )
- .removeAttr( "role" )
- .removeAttr( "aria-haspopup" )
- .children().each( function() {
- var elem = $( this );
- if ( elem.data( "ui-menu-submenu-carat" ) ) {
- elem.remove();
- }
- });
-
- // Destroy menu dividers
- this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
- },
-
- _keydown: function( event ) {
- var match, prev, character, skip, regex,
- preventDefault = true;
-
- function escape( value ) {
- return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
- }
-
- switch ( event.keyCode ) {
- case $.ui.keyCode.PAGE_UP:
- this.previousPage( event );
- break;
- case $.ui.keyCode.PAGE_DOWN:
- this.nextPage( event );
- break;
- case $.ui.keyCode.HOME:
- this._move( "first", "first", event );
- break;
- case $.ui.keyCode.END:
- this._move( "last", "last", event );
- break;
- case $.ui.keyCode.UP:
- this.previous( event );
- break;
- case $.ui.keyCode.DOWN:
- this.next( event );
- break;
- case $.ui.keyCode.LEFT:
- this.collapse( event );
- break;
- case $.ui.keyCode.RIGHT:
- if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
- this.expand( event );
- }
- break;
- case $.ui.keyCode.ENTER:
- case $.ui.keyCode.SPACE:
- this._activate( event );
- break;
- case $.ui.keyCode.ESCAPE:
- this.collapse( event );
- break;
- default:
- preventDefault = false;
- prev = this.previousFilter || "";
- character = String.fromCharCode( event.keyCode );
- skip = false;
-
- clearTimeout( this.filterTimer );
-
- if ( character === prev ) {
- skip = true;
- } else {
- character = prev + character;
- }
-
- regex = new RegExp( "^" + escape( character ), "i" );
- match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
- return regex.test( $( this ).children( "a" ).text() );
- });
- match = skip && match.index( this.active.next() ) !== -1 ?
- this.active.nextAll( ".ui-menu-item" ) :
- match;
-
- // If no matches on the current filter, reset to the last character pressed
- // to move down the menu to the first item that starts with that character
- if ( !match.length ) {
- character = String.fromCharCode( event.keyCode );
- regex = new RegExp( "^" + escape( character ), "i" );
- match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
- return regex.test( $( this ).children( "a" ).text() );
- });
- }
-
- if ( match.length ) {
- this.focus( event, match );
- if ( match.length > 1 ) {
- this.previousFilter = character;
- this.filterTimer = this._delay(function() {
- delete this.previousFilter;
- }, 1000 );
- } else {
- delete this.previousFilter;
- }
- } else {
- delete this.previousFilter;
- }
- }
-
- if ( preventDefault ) {
- event.preventDefault();
- }
- },
-
- _activate: function( event ) {
- if ( !this.active.is( ".ui-state-disabled" ) ) {
- if ( this.active.children( "a[aria-haspopup='true']" ).length ) {
- this.expand( event );
- } else {
- this.select( event );
- }
- }
- },
-
- refresh: function() {
- var menus,
- icon = this.options.icons.submenu,
- submenus = this.element.find( this.options.menus );
-
- this.element.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length );
-
- // Initialize nested menus
- submenus.filter( ":not(.ui-menu)" )
- .addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
- .hide()
- .attr({
- role: this.options.role,
- "aria-hidden": "true",
- "aria-expanded": "false"
- })
- .each(function() {
- var menu = $( this ),
- item = menu.prev( "a" ),
- submenuCarat = $( "<span>" )
- .addClass( "ui-menu-icon ui-icon " + icon )
- .data( "ui-menu-submenu-carat", true );
-
- item
- .attr( "aria-haspopup", "true" )
- .prepend( submenuCarat );
- menu.attr( "aria-labelledby", item.attr( "id" ) );
- });
-
- menus = submenus.add( this.element );
-
- // Don't refresh list items that are already adapted
- menus.children( ":not(.ui-menu-item):has(a)" )
- .addClass( "ui-menu-item" )
- .attr( "role", "presentation" )
- .children( "a" )
- .uniqueId()
- .addClass( "ui-corner-all" )
- .attr({
- tabIndex: -1,
- role: this._itemRole()
- });
-
- // Initialize unlinked menu-items containing spaces and/or dashes only as dividers
- menus.children( ":not(.ui-menu-item)" ).each(function() {
- var item = $( this );
- // hyphen, em dash, en dash
- if ( !/[^\-\u2014\u2013\s]/.test( item.text() ) ) {
- item.addClass( "ui-widget-content ui-menu-divider" );
- }
- });
-
- // Add aria-disabled attribute to any disabled menu item
- menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
-
- // If the active item has been removed, blur the menu
- if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
- this.blur();
- }
- },
-
- _itemRole: function() {
- return {
- menu: "menuitem",
- listbox: "option"
- }[ this.options.role ];
- },
-
- _setOption: function( key, value ) {
- if ( key === "icons" ) {
- this.element.find( ".ui-menu-icon" )
- .removeClass( this.options.icons.submenu )
- .addClass( value.submenu );
- }
- this._super( key, value );
- },
-
- focus: function( event, item ) {
- var nested, focused;
- this.blur( event, event && event.type === "focus" );
-
- this._scrollIntoView( item );
-
- this.active = item.first();
- focused = this.active.children( "a" ).addClass( "ui-state-focus" );
- // Only update aria-activedescendant if there's a role
- // otherwise we assume focus is managed elsewhere
- if ( this.options.role ) {
- this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
- }
-
- // Highlight active parent menu item, if any
- this.active
- .parent()
- .closest( ".ui-menu-item" )
- .children( "a:first" )
- .addClass( "ui-state-active" );
-
- if ( event && event.type === "keydown" ) {
- this._close();
- } else {
- this.timer = this._delay(function() {
- this._close();
- }, this.delay );
- }
-
- nested = item.children( ".ui-menu" );
- if ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {
- this._startOpening(nested);
- }
- this.activeMenu = item.parent();
-
- this._trigger( "focus", event, { item: item } );
- },
-
- _scrollIntoView: function( item ) {
- var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
- if ( this._hasScroll() ) {
- borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
- paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
- offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
- scroll = this.activeMenu.scrollTop();
- elementHeight = this.activeMenu.height();
- itemHeight = item.height();
-
- if ( offset < 0 ) {
- this.activeMenu.scrollTop( scroll + offset );
- } else if ( offset + itemHeight > elementHeight ) {
- this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
- }
- }
- },
-
- blur: function( event, fromFocus ) {
- if ( !fromFocus ) {
- clearTimeout( this.timer );
- }
-
- if ( !this.active ) {
- return;
- }
-
- this.active.children( "a" ).removeClass( "ui-state-focus" );
- this.active = null;
-
- this._trigger( "blur", event, { item: this.active } );
- },
-
- _startOpening: function( submenu ) {
- clearTimeout( this.timer );
-
- // Don't open if already open fixes a Firefox bug that caused a .5 pixel
- // shift in the submenu position when mousing over the carat icon
- if ( submenu.attr( "aria-hidden" ) !== "true" ) {
- return;
- }
-
- this.timer = this._delay(function() {
- this._close();
- this._open( submenu );
- }, this.delay );
- },
-
- _open: function( submenu ) {
- var position = $.extend({
- of: this.active
- }, this.options.position );
-
- clearTimeout( this.timer );
- this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
- .hide()
- .attr( "aria-hidden", "true" );
-
- submenu
- .show()
- .removeAttr( "aria-hidden" )
- .attr( "aria-expanded", "true" )
- .position( position );
- },
-
- collapseAll: function( event, all ) {
- clearTimeout( this.timer );
- this.timer = this._delay(function() {
- // If we were passed an event, look for the submenu that contains the event
- var currentMenu = all ? this.element :
- $( event && event.target ).closest( this.element.find( ".ui-menu" ) );
-
- // If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
- if ( !currentMenu.length ) {
- currentMenu = this.element;
- }
-
- this._close( currentMenu );
-
- this.blur( event );
- this.activeMenu = currentMenu;
- }, this.delay );
- },
-
- // With no arguments, closes the currently active menu - if nothing is active
- // it closes all menus. If passed an argument, it will search for menus BELOW
- _close: function( startMenu ) {
- if ( !startMenu ) {
- startMenu = this.active ? this.active.parent() : this.element;
- }
-
- startMenu
- .find( ".ui-menu" )
- .hide()
- .attr( "aria-hidden", "true" )
- .attr( "aria-expanded", "false" )
- .end()
- .find( "a.ui-state-active" )
- .removeClass( "ui-state-active" );
- },
-
- collapse: function( event ) {
- var newItem = this.active &&
- this.active.parent().closest( ".ui-menu-item", this.element );
- if ( newItem && newItem.length ) {
- this._close();
- this.focus( event, newItem );
- }
- },
-
- expand: function( event ) {
- var newItem = this.active &&
- this.active
- .children( ".ui-menu " )
- .children( ".ui-menu-item" )
- .first();
-
- if ( newItem && newItem.length ) {
- this._open( newItem.parent() );
-
- // Delay so Firefox will not hide activedescendant change in expanding submenu from AT
- this._delay(function() {
- this.focus( event, newItem );
- });
- }
- },
-
- next: function( event ) {
- this._move( "next", "first", event );
- },
-
- previous: function( event ) {
- this._move( "prev", "last", event );
- },
-
- 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( direction, filter, event ) {
- var next;
- if ( this.active ) {
- if ( direction === "first" || direction === "last" ) {
- next = this.active
- [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
- .eq( -1 );
- } else {
- next = this.active
- [ direction + "All" ]( ".ui-menu-item" )
- .eq( 0 );
- }
- }
- if ( !next || !next.length || !this.active ) {
- next = this.activeMenu.children( ".ui-menu-item" )[ filter ]();
- }
-
- this.focus( event, next );
- },
-
- nextPage: function( event ) {
- var item, base, height;
-
- if ( !this.active ) {
- this.next( event );
- return;
- }
- if ( this.isLastItem() ) {
- return;
- }
- if ( this._hasScroll() ) {
- base = this.active.offset().top;
- height = this.element.height();
- this.active.nextAll( ".ui-menu-item" ).each(function() {
- item = $( this );
- return item.offset().top - base - height < 0;
- });
-
- this.focus( event, item );
- } else {
- this.focus( event, this.activeMenu.children( ".ui-menu-item" )
- [ !this.active ? "first" : "last" ]() );
- }
- },
-
- previousPage: function( event ) {
- var item, base, height;
- if ( !this.active ) {
- this.next( event );
- return;
- }
- if ( this.isFirstItem() ) {
- return;
- }
- if ( this._hasScroll() ) {
- base = this.active.offset().top;
- height = this.element.height();
- this.active.prevAll( ".ui-menu-item" ).each(function() {
- item = $( this );
- return item.offset().top - base + height > 0;
- });
-
- this.focus( event, item );
- } else {
- this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
- }
- },
-
- _hasScroll: function() {
- return this.element.outerHeight() < this.element.prop( "scrollHeight" );
- },
-
- select: function( event ) {
- // TODO: It should never be possible to not have an active item at this
- // point, but the tests don't trigger mouseenter before click.
- this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
- var ui = { item: this.active };
- if ( !this.active.has( ".ui-menu" ).length ) {
- this.collapseAll( event, true );
- }
- this._trigger( "select", event, ui );
- }
-});
-
-}( jQuery ));
-
-(function( $, undefined ) {
-
-$.ui = $.ui || {};
-
-var cachedScrollbarWidth,
- max = Math.max,
- abs = Math.abs,
- round = Math.round,
- rhorizontal = /left|center|right/,
- rvertical = /top|center|bottom/,
- roffset = /[\+\-]\d+(\.[\d]+)?%?/,
- rposition = /^\w+/,
- rpercent = /%$/,
- _position = $.fn.position;
-
-function getOffsets( offsets, width, height ) {
- return [
- parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
- parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
- ];
-}
-
-function parseCss( element, property ) {
- return parseInt( $.css( element, property ), 10 ) || 0;
-}
-
-function getDimensions( elem ) {
- var raw = elem[0];
- if ( raw.nodeType === 9 ) {
- return {
- width: elem.width(),
- height: elem.height(),
- offset: { top: 0, left: 0 }
- };
- }
- if ( $.isWindow( raw ) ) {
- return {
- width: elem.width(),
- height: elem.height(),
- offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
- };
- }
- if ( raw.preventDefault ) {
- return {
- width: 0,
- height: 0,
- offset: { top: raw.pageY, left: raw.pageX }
- };
- }
- return {
- width: elem.outerWidth(),
- height: elem.outerHeight(),
- offset: elem.offset()
- };
-}
-
-$.position = {
- scrollbarWidth: function() {
- if ( cachedScrollbarWidth !== undefined ) {
- return cachedScrollbarWidth;
- }
- var w1, w2,
- div = $( "<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
- innerDiv = div.children()[0];
-
- $( "body" ).append( div );
- w1 = innerDiv.offsetWidth;
- div.css( "overflow", "scroll" );
-
- w2 = innerDiv.offsetWidth;
-
- if ( w1 === w2 ) {
- w2 = div[0].clientWidth;
- }
-
- div.remove();
-
- return (cachedScrollbarWidth = w1 - w2);
- },
- getScrollInfo: function( within ) {
- var overflowX = within.isWindow || within.isDocument ? "" :
- within.element.css( "overflow-x" ),
- overflowY = within.isWindow || within.isDocument ? "" :
- within.element.css( "overflow-y" ),
- hasOverflowX = overflowX === "scroll" ||
- ( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
- hasOverflowY = overflowY === "scroll" ||
- ( overflowY === "auto" && within.height < within.element[0].scrollHeight );
- return {
- width: hasOverflowY ? $.position.scrollbarWidth() : 0,
- height: hasOverflowX ? $.position.scrollbarWidth() : 0
- };
- },
- getWithinInfo: function( element ) {
- var withinElement = $( element || window ),
- isWindow = $.isWindow( withinElement[0] ),
- isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9;
- return {
- element: withinElement,
- isWindow: isWindow,
- isDocument: isDocument,
- offset: withinElement.offset() || { left: 0, top: 0 },
- scrollLeft: withinElement.scrollLeft(),
- scrollTop: withinElement.scrollTop(),
- width: isWindow ? withinElement.width() : withinElement.outerWidth(),
- height: isWindow ? withinElement.height() : withinElement.outerHeight()
- };
- }
-};
-
-$.fn.position = function( options ) {
- if ( !options || !options.of ) {
- return _position.apply( this, arguments );
- }
-
- // make a copy, we don't want to modify arguments
- options = $.extend( {}, options );
-
- var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
- target = $( options.of ),
- within = $.position.getWithinInfo( options.within ),
- scrollInfo = $.position.getScrollInfo( within ),
- collision = ( options.collision || "flip" ).split( " " ),
- offsets = {};
-
- dimensions = getDimensions( target );
- if ( target[0].preventDefault ) {
- // force left top to allow flipping
- options.at = "left top";
- }
- targetWidth = dimensions.width;
- targetHeight = dimensions.height;
- targetOffset = dimensions.offset;
- // clone to reuse original targetOffset later
- basePosition = $.extend( {}, targetOffset );
-
- // force my and at to have valid horizontal and vertical positions
- // if a value is missing or invalid, it will be converted to center
- $.each( [ "my", "at" ], function() {
- var pos = ( options[ this ] || "" ).split( " " ),
- horizontalOffset,
- verticalOffset;
-
- if ( pos.length === 1) {
- pos = rhorizontal.test( pos[ 0 ] ) ?
- pos.concat( [ "center" ] ) :
- rvertical.test( pos[ 0 ] ) ?
- [ "center" ].concat( pos ) :
- [ "center", "center" ];
- }
- pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
- pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
-
- // calculate offsets
- horizontalOffset = roffset.exec( pos[ 0 ] );
- verticalOffset = roffset.exec( pos[ 1 ] );
- offsets[ this ] = [
- horizontalOffset ? horizontalOffset[ 0 ] : 0,
- verticalOffset ? verticalOffset[ 0 ] : 0
- ];
-
- // reduce to just the positions without the offsets
- options[ this ] = [
- rposition.exec( pos[ 0 ] )[ 0 ],
- rposition.exec( pos[ 1 ] )[ 0 ]
- ];
- });
-
- // normalize collision option
- if ( collision.length === 1 ) {
- collision[ 1 ] = collision[ 0 ];
- }
-
- if ( options.at[ 0 ] === "right" ) {
- basePosition.left += targetWidth;
- } else if ( options.at[ 0 ] === "center" ) {
- basePosition.left += targetWidth / 2;
- }
-
- if ( options.at[ 1 ] === "bottom" ) {
- basePosition.top += targetHeight;
- } else if ( options.at[ 1 ] === "center" ) {
- basePosition.top += targetHeight / 2;
- }
-
- atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
- basePosition.left += atOffset[ 0 ];
- basePosition.top += atOffset[ 1 ];
-
- return this.each(function() {
- var collisionPosition, using,
- elem = $( this ),
- elemWidth = elem.outerWidth(),
- elemHeight = elem.outerHeight(),
- marginLeft = parseCss( this, "marginLeft" ),
- marginTop = parseCss( this, "marginTop" ),
- collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
- collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
- position = $.extend( {}, basePosition ),
- myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
-
- if ( options.my[ 0 ] === "right" ) {
- position.left -= elemWidth;
- } else if ( options.my[ 0 ] === "center" ) {
- position.left -= elemWidth / 2;
- }
-
- if ( options.my[ 1 ] === "bottom" ) {
- position.top -= elemHeight;
- } else if ( options.my[ 1 ] === "center" ) {
- position.top -= elemHeight / 2;
- }
-
- position.left += myOffset[ 0 ];
- position.top += myOffset[ 1 ];
-
- // if the browser doesn't support fractions, then round for consistent results
- if ( !$.support.offsetFractions ) {
- position.left = round( position.left );
- position.top = round( position.top );
- }
-
- collisionPosition = {
- marginLeft: marginLeft,
- marginTop: marginTop
- };
-
- $.each( [ "left", "top" ], function( i, dir ) {
- if ( $.ui.position[ collision[ i ] ] ) {
- $.ui.position[ collision[ i ] ][ dir ]( position, {
- targetWidth: targetWidth,
- targetHeight: targetHeight,
- elemWidth: elemWidth,
- elemHeight: elemHeight,
- collisionPosition: collisionPosition,
- collisionWidth: collisionWidth,
- collisionHeight: collisionHeight,
- offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
- my: options.my,
- at: options.at,
- within: within,
- elem : elem
- });
- }
- });
-
- if ( options.using ) {
- // adds feedback as second argument to using callback, if present
- using = function( props ) {
- var left = targetOffset.left - position.left,
- right = left + targetWidth - elemWidth,
- top = targetOffset.top - position.top,
- bottom = top + targetHeight - elemHeight,
- feedback = {
- target: {
- element: target,
- left: targetOffset.left,
- top: targetOffset.top,
- width: targetWidth,
- height: targetHeight
- },
- element: {
- element: elem,
- left: position.left,
- top: position.top,
- width: elemWidth,
- height: elemHeight
- },
- horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
- vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
- };
- if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
- feedback.horizontal = "center";
- }
- if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
- feedback.vertical = "middle";
- }
- if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
- feedback.important = "horizontal";
- } else {
- feedback.important = "vertical";
- }
- options.using.call( this, props, feedback );
- };
- }
-
- elem.offset( $.extend( position, { using: using } ) );
- });
-};
-
-$.ui.position = {
- fit: {
- left: function( position, data ) {
- var within = data.within,
- withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
- outerWidth = within.width,
- collisionPosLeft = position.left - data.collisionPosition.marginLeft,
- overLeft = withinOffset - collisionPosLeft,
- overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
- newOverRight;
-
- // element is wider than within
- if ( data.collisionWidth > outerWidth ) {
- // element is initially over the left side of within
- if ( overLeft > 0 && overRight <= 0 ) {
- newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
- position.left += overLeft - newOverRight;
- // element is initially over right side of within
- } else if ( overRight > 0 && overLeft <= 0 ) {
- position.left = withinOffset;
- // element is initially over both left and right sides of within
- } else {
- if ( overLeft > overRight ) {
- position.left = withinOffset + outerWidth - data.collisionWidth;
- } else {
- position.left = withinOffset;
- }
- }
- // too far left -> align with left edge
- } else if ( overLeft > 0 ) {
- position.left += overLeft;
- // too far right -> align with right edge
- } else if ( overRight > 0 ) {
- position.left -= overRight;
- // adjust based on position and margin
- } else {
- position.left = max( position.left - collisionPosLeft, position.left );
- }
- },
- top: function( position, data ) {
- var within = data.within,
- withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
- outerHeight = data.within.height,
- collisionPosTop = position.top - data.collisionPosition.marginTop,
- overTop = withinOffset - collisionPosTop,
- overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
- newOverBottom;
-
- // element is taller than within
- if ( data.collisionHeight > outerHeight ) {
- // element is initially over the top of within
- if ( overTop > 0 && overBottom <= 0 ) {
- newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
- position.top += overTop - newOverBottom;
- // element is initially over bottom of within
- } else if ( overBottom > 0 && overTop <= 0 ) {
- position.top = withinOffset;
- // element is initially over both top and bottom of within
- } else {
- if ( overTop > overBottom ) {
- position.top = withinOffset + outerHeight - data.collisionHeight;
- } else {
- position.top = withinOffset;
- }
- }
- // too far up -> align with top
- } else if ( overTop > 0 ) {
- position.top += overTop;
- // too far down -> align with bottom edge
- } else if ( overBottom > 0 ) {
- position.top -= overBottom;
- // adjust based on position and margin
- } else {
- position.top = max( position.top - collisionPosTop, position.top );
- }
- }
- },
- flip: {
- left: function( position, data ) {
- var within = data.within,
- withinOffset = within.offset.left + within.scrollLeft,
- outerWidth = within.width,
- offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
- collisionPosLeft = position.left - data.collisionPosition.marginLeft,
- overLeft = collisionPosLeft - offsetLeft,
- overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
- myOffset = data.my[ 0 ] === "left" ?
- -data.elemWidth :
- data.my[ 0 ] === "right" ?
- data.elemWidth :
- 0,
- atOffset = data.at[ 0 ] === "left" ?
- data.targetWidth :
- data.at[ 0 ] === "right" ?
- -data.targetWidth :
- 0,
- offset = -2 * data.offset[ 0 ],
- newOverRight,
- newOverLeft;
-
- if ( overLeft < 0 ) {
- newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
- if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
- position.left += myOffset + atOffset + offset;
- }
- }
- else if ( overRight > 0 ) {
- newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
- if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
- position.left += myOffset + atOffset + offset;
- }
- }
- },
- top: function( position, data ) {
- var within = data.within,
- withinOffset = within.offset.top + within.scrollTop,
- outerHeight = within.height,
- offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
- collisionPosTop = position.top - data.collisionPosition.marginTop,
- overTop = collisionPosTop - offsetTop,
- overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
- top = data.my[ 1 ] === "top",
- myOffset = top ?
- -data.elemHeight :
- data.my[ 1 ] === "bottom" ?
- data.elemHeight :
- 0,
- atOffset = data.at[ 1 ] === "top" ?
- data.targetHeight :
- data.at[ 1 ] === "bottom" ?
- -data.targetHeight :
- 0,
- offset = -2 * data.offset[ 1 ],
- newOverTop,
- newOverBottom;
- if ( overTop < 0 ) {
- newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
- if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
- position.top += myOffset + atOffset + offset;
- }
- }
- else if ( overBottom > 0 ) {
- newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
- if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
- position.top += myOffset + atOffset + offset;
- }
- }
- }
- },
- flipfit: {
- left: function() {
- $.ui.position.flip.left.apply( this, arguments );
- $.ui.position.fit.left.apply( this, arguments );
- },
- top: function() {
- $.ui.position.flip.top.apply( this, arguments );
- $.ui.position.fit.top.apply( this, arguments );
- }
- }
-};
-
-// fraction support test
-(function () {
- var testElement, testElementParent, testElementStyle, offsetLeft, i,
- body = document.getElementsByTagName( "body" )[ 0 ],
- div = document.createElement( "div" );
-
- //Create a "fake body" for testing based on method used in jQuery.support
- testElement = document.createElement( body ? "div" : "body" );
- testElementStyle = {
- visibility: "hidden",
- width: 0,
- height: 0,
- border: 0,
- margin: 0,
- background: "none"
- };
- if ( body ) {
- $.extend( testElementStyle, {
- position: "absolute",
- left: "-1000px",
- top: "-1000px"
- });
- }
- for ( i in testElementStyle ) {
- testElement.style[ i ] = testElementStyle[ i ];
- }
- testElement.appendChild( div );
- testElementParent = body || document.documentElement;
- testElementParent.insertBefore( testElement, testElementParent.firstChild );
-
- div.style.cssText = "position: absolute; left: 10.7432222px;";
-
- offsetLeft = $( div ).offset().left;
- $.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
-
- testElement.innerHTML = "";
- testElementParent.removeChild( testElement );
-})();
-
-}( jQuery ) );
-
-(function( $, undefined ) {
-
-$.widget( "ui.progressbar", {
- version: "1.10.4",
- options: {
- max: 100,
- value: 0,
-
- change: null,
- complete: null
- },
-
- min: 0,
-
- _create: function() {
- // Constrain initial value
- this.oldValue = this.options.value = this._constrainedValue();
-
- this.element
- .addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
- .attr({
- // Only set static values, aria-valuenow and aria-valuemax are
- // set inside _refreshValue()
- role: "progressbar",
- "aria-valuemin": this.min
- });
-
- this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
- .appendTo( this.element );
-
- this._refreshValue();
- },
-
- _destroy: function() {
- this.element
- .removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
- .removeAttr( "role" )
- .removeAttr( "aria-valuemin" )
- .removeAttr( "aria-valuemax" )
- .removeAttr( "aria-valuenow" );
-
- this.valueDiv.remove();
- },
-
- value: function( newValue ) {
- if ( newValue === undefined ) {
- return this.options.value;
- }
-
- this.options.value = this._constrainedValue( newValue );
- this._refreshValue();
- },
-
- _constrainedValue: function( newValue ) {
- if ( newValue === undefined ) {
- newValue = this.options.value;
- }
-
- this.indeterminate = newValue === false;
-
- // sanitize value
- if ( typeof newValue !== "number" ) {
- newValue = 0;
- }
-
- return this.indeterminate ? false :
- Math.min( this.options.max, Math.max( this.min, newValue ) );
- },
-
- _setOptions: function( options ) {
- // Ensure "value" option is set after other values (like max)
- var value = options.value;
- delete options.value;
-
- this._super( options );
-
- this.options.value = this._constrainedValue( value );
- this._refreshValue();
- },
-
- _setOption: function( key, value ) {
- if ( key === "max" ) {
- // Don't allow a max less than min
- value = Math.max( this.min, value );
- }
-
- this._super( key, value );
- },
-
- _percentage: function() {
- return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
- },
-
- _refreshValue: function() {
- var value = this.options.value,
- percentage = this._percentage();
-
- this.valueDiv
- .toggle( this.indeterminate || value > this.min )
- .toggleClass( "ui-corner-right", value === this.options.max )
- .width( percentage.toFixed(0) + "%" );
-
- this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
-
- if ( this.indeterminate ) {
- this.element.removeAttr( "aria-valuenow" );
- if ( !this.overlayDiv ) {
- this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
- }
- } else {
- this.element.attr({
- "aria-valuemax": this.options.max,
- "aria-valuenow": value
- });
- if ( this.overlayDiv ) {
- this.overlayDiv.remove();
- this.overlayDiv = null;
- }
- }
-
- if ( this.oldValue !== value ) {
- this.oldValue = value;
- this._trigger( "change" );
- }
- if ( value === this.options.max ) {
- this._trigger( "complete" );
- }
- }
-});
-
-})( jQuery );
-
-(function( $, undefined ) {
-
-// number of pages in a slider
-// (how many times can you page up/down to go through the whole range)
-var numPages = 5;
-
-$.widget( "ui.slider", $.ui.mouse, {
- version: "1.10.4",
- widgetEventPrefix: "slide",
-
- options: {
- animate: false,
- distance: 0,
- max: 100,
- min: 0,
- orientation: "horizontal",
- range: false,
- step: 1,
- value: 0,
- values: null,
-
- // callbacks
- change: null,
- slide: null,
- start: null,
- stop: null
- },
-
- _create: function() {
- this._keySliding = false;
- this._mouseSliding = false;
- this._animateOff = true;
- this._handleIndex = null;
- this._detectOrientation();
- this._mouseInit();
-
- this.element
- .addClass( "ui-slider" +
- " ui-slider-" + this.orientation +
- " ui-widget" +
- " ui-widget-content" +
- " ui-corner-all");
-
- this._refresh();
- this._setOption( "disabled", this.options.disabled );
-
- this._animateOff = false;
- },
-
- _refresh: function() {
- this._createRange();
- this._createHandles();
- this._setupEvents();
- this._refreshValue();
- },
-
- _createHandles: function() {
- var i, handleCount,
- options = this.options,
- existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
- handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
- handles = [];
-
- handleCount = ( options.values && options.values.length ) || 1;
-
- if ( existingHandles.length > handleCount ) {
- existingHandles.slice( handleCount ).remove();
- existingHandles = existingHandles.slice( 0, handleCount );
- }
-
- for ( i = existingHandles.length; i < handleCount; i++ ) {
- handles.push( handle );
- }
-
- this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
-
- this.handle = this.handles.eq( 0 );
-
- this.handles.each(function( i ) {
- $( this ).data( "ui-slider-handle-index", i );
- });
- },
-
- _createRange: function() {
- var options = this.options,
- classes = "";
-
- if ( options.range ) {
- if ( options.range === true ) {
- if ( !options.values ) {
- options.values = [ this._valueMin(), this._valueMin() ];
- } else if ( options.values.length && options.values.length !== 2 ) {
- options.values = [ options.values[0], options.values[0] ];
- } else if ( $.isArray( options.values ) ) {
- options.values = options.values.slice(0);
- }
- }
-
- if ( !this.range || !this.range.length ) {
- this.range = $( "<div></div>" )
- .appendTo( this.element );
-
- classes = "ui-slider-range" +
- // note: this isn't the most fittingly semantic framework class for this element,
- // but worked best visually with a variety of themes
- " ui-widget-header ui-corner-all";
- } else {
- this.range.removeClass( "ui-slider-range-min ui-slider-range-max" )
- // Handle range switching from true to min/max
- .css({
- "left": "",
- "bottom": ""
- });
- }
-
- this.range.addClass( classes +
- ( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) );
- } else {
- if ( this.range ) {
- this.range.remove();
- }
- this.range = null;
- }
- },
-
- _setupEvents: function() {
- var elements = this.handles.add( this.range ).filter( "a" );
- this._off( elements );
- this._on( elements, this._handleEvents );
- this._hoverable( elements );
- this._focusable( elements );
- },
-
- _destroy: function() {
- this.handles.remove();
- if ( this.range ) {
- this.range.remove();
- }
-
- this.element
- .removeClass( "ui-slider" +
- " ui-slider-horizontal" +
- " ui-slider-vertical" +
- " ui-widget" +
- " ui-widget-content" +
- " ui-corner-all" );
-
- this._mouseDestroy();
- },
-
- _mouseCapture: function( event ) {
- var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
- that = this,
- o = this.options;
-
- if ( o.disabled ) {
- return false;
- }
-
- this.elementSize = {
- width: this.element.outerWidth(),
- height: this.element.outerHeight()
- };
- this.elementOffset = this.element.offset();
-
- position = { x: event.pageX, y: event.pageY };
- normValue = this._normValueFromMouse( position );
- distance = this._valueMax() - this._valueMin() + 1;
- this.handles.each(function( i ) {
- var thisDistance = Math.abs( normValue - that.values(i) );
- if (( distance > thisDistance ) ||
- ( distance === thisDistance &&
- (i === that._lastChangedValue || that.values(i) === o.min ))) {
- distance = thisDistance;
- closestHandle = $( this );
- index = i;
- }
- });
-
- allowed = this._start( event, index );
- if ( allowed === false ) {
- return false;
- }
- this._mouseSliding = true;
-
- this._handleIndex = index;
-
- closestHandle
- .addClass( "ui-state-active" )
- .focus();
-
- offset = closestHandle.offset();
- mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
- this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
- left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
- top: event.pageY - offset.top -
- ( closestHandle.height() / 2 ) -
- ( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
- ( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
- ( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
- };
-
- if ( !this.handles.hasClass( "ui-state-hover" ) ) {
- this._slide( event, index, normValue );
- }
- this._animateOff = true;
- return true;
- },
-
- _mouseStart: function() {
- return true;
- },
-
- _mouseDrag: function( event ) {
- var position = { x: event.pageX, y: event.pageY },
- normValue = this._normValueFromMouse( position );
-
- this._slide( event, this._handleIndex, normValue );
-
- return false;
- },
-
- _mouseStop: function( event ) {
- this.handles.removeClass( "ui-state-active" );
- this._mouseSliding = false;
-
- this._stop( event, this._handleIndex );
- this._change( event, this._handleIndex );
-
- this._handleIndex = null;
- this._clickOffset = null;
- this._animateOff = false;
-
- return false;
- },
-
- _detectOrientation: function() {
- this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
- },
-
- _normValueFromMouse: function( position ) {
- var pixelTotal,
- pixelMouse,
- percentMouse,
- valueTotal,
- valueMouse;
-
- if ( this.orientation === "horizontal" ) {
- pixelTotal = this.elementSize.width;
- pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
- } else {
- pixelTotal = this.elementSize.height;
- pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
- }
-
- percentMouse = ( pixelMouse / pixelTotal );
- if ( percentMouse > 1 ) {
- percentMouse = 1;
- }
- if ( percentMouse < 0 ) {
- percentMouse = 0;
- }
- if ( this.orientation === "vertical" ) {
- percentMouse = 1 - percentMouse;
- }
-
- valueTotal = this._valueMax() - this._valueMin();
- valueMouse = this._valueMin() + percentMouse * valueTotal;
-
- return this._trimAlignValue( valueMouse );
- },
-
- _start: function( event, index ) {
- var uiHash = {
- handle: this.handles[ index ],
- value: this.value()
- };
- if ( this.options.values && this.options.values.length ) {
- uiHash.value = this.values( index );
- uiHash.values = this.values();
- }
- return this._trigger( "start", event, uiHash );
- },
-
- _slide: function( event, index, newVal ) {
- var otherVal,
- newValues,
- allowed;
-
- if ( this.options.values && this.options.values.length ) {
- otherVal = this.values( index ? 0 : 1 );
-
- if ( ( this.options.values.length === 2 && this.options.range === true ) &&
- ( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
- ) {
- newVal = otherVal;
- }
-
- if ( newVal !== this.values( index ) ) {
- newValues = this.values();
- newValues[ index ] = newVal;
- // A slide can be canceled by returning false from the slide callback
- allowed = this._trigger( "slide", event, {
- handle: this.handles[ index ],
- value: newVal,
- values: newValues
- } );
- otherVal = this.values( index ? 0 : 1 );
- if ( allowed !== false ) {
- this.values( index, newVal );
- }
- }
- } else {
- if ( newVal !== this.value() ) {
- // A slide can be canceled by returning false from the slide callback
- allowed = this._trigger( "slide", event, {
- handle: this.handles[ index ],
- value: newVal
- } );
- if ( allowed !== false ) {
- this.value( newVal );
- }
- }
- }
- },
-
- _stop: function( event, index ) {
- var uiHash = {
- handle: this.handles[ index ],
- value: this.value()
- };
- if ( this.options.values && this.options.values.length ) {
- uiHash.value = this.values( index );
- uiHash.values = this.values();
- }
-
- this._trigger( "stop", event, uiHash );
- },
-
- _change: function( event, index ) {
- if ( !this._keySliding && !this._mouseSliding ) {
- var uiHash = {
- handle: this.handles[ index ],
- value: this.value()
- };
- if ( this.options.values && this.options.values.length ) {
- uiHash.value = this.values( index );
- uiHash.values = this.values();
- }
-
- //store the last changed value index for reference when handles overlap
- this._lastChangedValue = index;
-
- this._trigger( "change", event, uiHash );
- }
- },
-
- value: function( newValue ) {
- if ( arguments.length ) {
- this.options.value = this._trimAlignValue( newValue );
- this._refreshValue();
- this._change( null, 0 );
- return;
- }
-
- return this._value();
- },
-
- values: function( index, newValue ) {
- var vals,
- newValues,
- i;
-
- if ( arguments.length > 1 ) {
- this.options.values[ index ] = this._trimAlignValue( newValue );
- this._refreshValue();
- this._change( null, index );
- return;
- }
-
- if ( arguments.length ) {
- if ( $.isArray( arguments[ 0 ] ) ) {
- vals = this.options.values;
- newValues = arguments[ 0 ];
- for ( i = 0; i < vals.length; i += 1 ) {
- vals[ i ] = this._trimAlignValue( newValues[ i ] );
- this._change( null, i );
- }
- this._refreshValue();
- } else {
- if ( this.options.values && this.options.values.length ) {
- return this._values( index );
- } else {
- return this.value();
- }
- }
- } else {
- return this._values();
- }
- },
-
- _setOption: function( key, value ) {
- var i,
- valsLength = 0;
-
- if ( key === "range" && this.options.range === true ) {
- if ( value === "min" ) {
- this.options.value = this._values( 0 );
- this.options.values = null;
- } else if ( value === "max" ) {
- this.options.value = this._values( this.options.values.length-1 );
- this.options.values = null;
- }
- }
-
- if ( $.isArray( this.options.values ) ) {
- valsLength = this.options.values.length;
- }
-
- $.Widget.prototype._setOption.apply( this, arguments );
-
- switch ( key ) {
- case "orientation":
- this._detectOrientation();
- this.element
- .removeClass( "ui-slider-horizontal ui-slider-vertical" )
- .addClass( "ui-slider-" + this.orientation );
- this._refreshValue();
- break;
- case "value":
- this._animateOff = true;
- this._refreshValue();
- this._change( null, 0 );
- this._animateOff = false;
- break;
- case "values":
- this._animateOff = true;
- this._refreshValue();
- for ( i = 0; i < valsLength; i += 1 ) {
- this._change( null, i );
- }
- this._animateOff = false;
- break;
- case "min":
- case "max":
- this._animateOff = true;
- this._refreshValue();
- this._animateOff = false;
- break;
- case "range":
- this._animateOff = true;
- this._refresh();
- this._animateOff = false;
- break;
- }
- },
-
- //internal value getter
- // _value() returns value trimmed by min and max, aligned by step
- _value: function() {
- var val = this.options.value;
- val = this._trimAlignValue( val );
-
- return val;
- },
-
- //internal values getter
- // _values() returns array of values trimmed by min and max, aligned by step
- // _values( index ) returns single value trimmed by min and max, aligned by step
- _values: function( index ) {
- var val,
- vals,
- i;
-
- if ( arguments.length ) {
- val = this.options.values[ index ];
- val = this._trimAlignValue( val );
-
- return val;
- } else if ( this.options.values && this.options.values.length ) {
- // .slice() creates a copy of the array
- // this copy gets trimmed by min and max and then returned
- vals = this.options.values.slice();
- for ( i = 0; i < vals.length; i+= 1) {
- vals[ i ] = this._trimAlignValue( vals[ i ] );
- }
-
- return vals;
- } else {
- return [];
- }
- },
-
- // returns the step-aligned value that val is closest to, between (inclusive) min and max
- _trimAlignValue: function( val ) {
- if ( val <= this._valueMin() ) {
- return this._valueMin();
- }
- if ( val >= this._valueMax() ) {
- return this._valueMax();
- }
- var step = ( this.options.step > 0 ) ? this.options.step : 1,
- valModStep = (val - this._valueMin()) % step,
- alignValue = val - valModStep;
-
- if ( Math.abs(valModStep) * 2 >= step ) {
- alignValue += ( valModStep > 0 ) ? step : ( -step );
- }
-
- // Since JavaScript has problems with large floats, round
- // the final value to 5 digits after the decimal point (see #4124)
- return parseFloat( alignValue.toFixed(5) );
- },
-
- _valueMin: function() {
- return this.options.min;
- },
-
- _valueMax: function() {
- return this.options.max;
- },
-
- _refreshValue: function() {
- var lastValPercent, valPercent, value, valueMin, valueMax,
- oRange = this.options.range,
- o = this.options,
- that = this,
- animate = ( !this._animateOff ) ? o.animate : false,
- _set = {};
-
- if ( this.options.values && this.options.values.length ) {
- this.handles.each(function( i ) {
- valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
- _set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
- $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
- if ( that.options.range === true ) {
- if ( that.orientation === "horizontal" ) {
- if ( i === 0 ) {
- that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
- }
- if ( i === 1 ) {
- that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
- }
- } else {
- if ( i === 0 ) {
- that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
- }
- if ( i === 1 ) {
- that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
- }
- }
- }
- lastValPercent = valPercent;
- });
- } else {
- value = this.value();
- valueMin = this._valueMin();
- valueMax = this._valueMax();
- valPercent = ( valueMax !== valueMin ) ?
- ( value - valueMin ) / ( valueMax - valueMin ) * 100 :
- 0;
- _set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
- this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
-
- if ( oRange === "min" && this.orientation === "horizontal" ) {
- this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
- }
- if ( oRange === "max" && this.orientation === "horizontal" ) {
- this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
- }
- if ( oRange === "min" && this.orientation === "vertical" ) {
- this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
- }
- if ( oRange === "max" && this.orientation === "vertical" ) {
- this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
- }
- }
- },
-
- _handleEvents: {
- keydown: function( event ) {
- var allowed, curVal, newVal, step,
- index = $( event.target ).data( "ui-slider-handle-index" );
-
- switch ( event.keyCode ) {
- case $.ui.keyCode.HOME:
- case $.ui.keyCode.END:
- case $.ui.keyCode.PAGE_UP:
- case $.ui.keyCode.PAGE_DOWN:
- case $.ui.keyCode.UP:
- case $.ui.keyCode.RIGHT:
- case $.ui.keyCode.DOWN:
- case $.ui.keyCode.LEFT:
- event.preventDefault();
- if ( !this._keySliding ) {
- this._keySliding = true;
- $( event.target ).addClass( "ui-state-active" );
- allowed = this._start( event, index );
- if ( allowed === false ) {
- return;
- }
- }
- break;
- }
-
- step = this.options.step;
- if ( this.options.values && this.options.values.length ) {
- curVal = newVal = this.values( index );
- } else {
- curVal = newVal = this.value();
- }
-
- switch ( event.keyCode ) {
- case $.ui.keyCode.HOME:
- newVal = this._valueMin();
- break;
- case $.ui.keyCode.END:
- newVal = this._valueMax();
- break;
- case $.ui.keyCode.PAGE_UP:
- newVal = this._trimAlignValue( curVal + ( (this._valueMax() - this._valueMin()) / numPages ) );
- break;
- case $.ui.keyCode.PAGE_DOWN:
- newVal = this._trimAlignValue( curVal - ( (this._valueMax() - this._valueMin()) / numPages ) );
- break;
- case $.ui.keyCode.UP:
- case $.ui.keyCode.RIGHT:
- if ( curVal === this._valueMax() ) {
- return;
- }
- newVal = this._trimAlignValue( curVal + step );
- break;
- case $.ui.keyCode.DOWN:
- case $.ui.keyCode.LEFT:
- if ( curVal === this._valueMin() ) {
- return;
- }
- newVal = this._trimAlignValue( curVal - step );
- break;
- }
-
- this._slide( event, index, newVal );
- },
- click: function( event ) {
- event.preventDefault();
- },
- keyup: function( event ) {
- var index = $( event.target ).data( "ui-slider-handle-index" );
-
- if ( this._keySliding ) {
- this._keySliding = false;
- this._stop( event, index );
- this._change( event, index );
- $( event.target ).removeClass( "ui-state-active" );
- }
- }
- }
-
-});
-
-}(jQuery));
-
-(function( $ ) {
-
-function modifier( fn ) {
- return function() {
- var previous = this.element.val();
- fn.apply( this, arguments );
- this._refresh();
- if ( previous !== this.element.val() ) {
- this._trigger( "change" );
- }
- };
-}
-
-$.widget( "ui.spinner", {
- version: "1.10.4",
- defaultElement: "<input>",
- widgetEventPrefix: "spin",
- options: {
- culture: null,
- icons: {
- down: "ui-icon-triangle-1-s",
- up: "ui-icon-triangle-1-n"
- },
- incremental: true,
- max: null,
- min: null,
- numberFormat: null,
- page: 10,
- step: 1,
-
- change: null,
- spin: null,
- start: null,
- stop: null
- },
-
- _create: function() {
- // handle string values that need to be parsed
- this._setOption( "max", this.options.max );
- this._setOption( "min", this.options.min );
- this._setOption( "step", this.options.step );
-
- // Only format if there is a value, prevents the field from being marked
- // as invalid in Firefox, see #9573.
- if ( this.value() !== "" ) {
- // Format the value, but don't constrain.
- this._value( this.element.val(), true );
- }
-
- this._draw();
- this._on( this._events );
- this._refresh();
-
- // turning off autocomplete prevents the browser from remembering the
- // value when navigating through history, so we re-enable autocomplete
- // if the page is unloaded before the widget is destroyed. #7790
- this._on( this.window, {
- beforeunload: function() {
- this.element.removeAttr( "autocomplete" );
- }
- });
- },
-
- _getCreateOptions: function() {
- var options = {},
- element = this.element;
-
- $.each( [ "min", "max", "step" ], function( i, option ) {
- var value = element.attr( option );
- if ( value !== undefined && value.length ) {
- options[ option ] = value;
- }
- });
-
- return options;
- },
-
- _events: {
- keydown: function( event ) {
- if ( this._start( event ) && this._keydown( event ) ) {
- event.preventDefault();
- }
- },
- keyup: "_stop",
- focus: function() {
- this.previous = this.element.val();
- },
- blur: function( event ) {
- if ( this.cancelBlur ) {
- delete this.cancelBlur;
- return;
- }
-
- this._stop();
- this._refresh();
- if ( this.previous !== this.element.val() ) {
- this._trigger( "change", event );
- }
- },
- mousewheel: function( event, delta ) {
- if ( !delta ) {
- return;
- }
- if ( !this.spinning && !this._start( event ) ) {
- return false;
- }
-
- this._spin( (delta > 0 ? 1 : -1) * this.options.step, event );
- clearTimeout( this.mousewheelTimer );
- this.mousewheelTimer = this._delay(function() {
- if ( this.spinning ) {
- this._stop( event );
- }
- }, 100 );
- event.preventDefault();
- },
- "mousedown .ui-spinner-button": function( event ) {
- var previous;
-
- // We never want the buttons to have focus; whenever the user is
- // interacting with the spinner, the focus should be on the input.
- // If the input is focused then this.previous is properly set from
- // when the input first received focus. If the input is not focused
- // then we need to set this.previous based on the value before spinning.
- previous = this.element[0] === this.document[0].activeElement ?
- this.previous : this.element.val();
- function checkFocus() {
- var isActive = this.element[0] === this.document[0].activeElement;
- if ( !isActive ) {
- this.element.focus();
- this.previous = previous;
- // support: IE
- // IE sets focus asynchronously, so we need to check if focus
- // moved off of the input because the user clicked on the button.
- this._delay(function() {
- this.previous = previous;
- });
- }
- }
-
- // ensure focus is on (or stays on) the text field
- event.preventDefault();
- checkFocus.call( this );
-
- // support: IE
- // IE doesn't prevent moving focus even with event.preventDefault()
- // so we set a flag to know when we should ignore the blur event
- // and check (again) if focus moved off of the input.
- this.cancelBlur = true;
- this._delay(function() {
- delete this.cancelBlur;
- checkFocus.call( this );
- });
-
- if ( this._start( event ) === false ) {
- return;
- }
-
- this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
- },
- "mouseup .ui-spinner-button": "_stop",
- "mouseenter .ui-spinner-button": function( event ) {
- // button will add ui-state-active if mouse was down while mouseleave and kept down
- if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
- return;
- }
-
- if ( this._start( event ) === false ) {
- return false;
- }
- this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
- },
- // TODO: do we really want to consider this a stop?
- // shouldn't we just stop the repeater and wait until mouseup before
- // we trigger the stop event?
- "mouseleave .ui-spinner-button": "_stop"
- },
-
- _draw: function() {
- var uiSpinner = this.uiSpinner = this.element
- .addClass( "ui-spinner-input" )
- .attr( "autocomplete", "off" )
- .wrap( this._uiSpinnerHtml() )
- .parent()
- // add buttons
- .append( this._buttonHtml() );
-
- this.element.attr( "role", "spinbutton" );
-
- // button bindings
- this.buttons = uiSpinner.find( ".ui-spinner-button" )
- .attr( "tabIndex", -1 )
- .button()
- .removeClass( "ui-corner-all" );
-
- // IE 6 doesn't understand height: 50% for the buttons
- // unless the wrapper has an explicit height
- if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&
- uiSpinner.height() > 0 ) {
- uiSpinner.height( uiSpinner.height() );
- }
-
- // disable spinner if element was already disabled
- if ( this.options.disabled ) {
- this.disable();
- }
- },
-
- _keydown: function( event ) {
- var options = this.options,
- keyCode = $.ui.keyCode;
-
- switch ( event.keyCode ) {
- case keyCode.UP:
- this._repeat( null, 1, event );
- return true;
- case keyCode.DOWN:
- this._repeat( null, -1, event );
- return true;
- case keyCode.PAGE_UP:
- this._repeat( null, options.page, event );
- return true;
- case keyCode.PAGE_DOWN:
- this._repeat( null, -options.page, event );
- return true;
- }
-
- return false;
- },
-
- _uiSpinnerHtml: function() {
- return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>";
- },
-
- _buttonHtml: function() {
- return "" +
- "<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" +
- "<span class='ui-icon " + this.options.icons.up + "'>&#9650;</span>" +
- "</a>" +
- "<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" +
- "<span class='ui-icon " + this.options.icons.down + "'>&#9660;</span>" +
- "</a>";
- },
-
- _start: function( event ) {
- if ( !this.spinning && this._trigger( "start", event ) === false ) {
- return false;
- }
-
- if ( !this.counter ) {
- this.counter = 1;
- }
- this.spinning = true;
- return true;
- },
-
- _repeat: function( i, steps, event ) {
- i = i || 500;
-
- clearTimeout( this.timer );
- this.timer = this._delay(function() {
- this._repeat( 40, steps, event );
- }, i );
-
- this._spin( steps * this.options.step, event );
- },
-
- _spin: function( step, event ) {
- var value = this.value() || 0;
-
- if ( !this.counter ) {
- this.counter = 1;
- }
-
- value = this._adjustValue( value + step * this._increment( this.counter ) );
-
- if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) {
- this._value( value );
- this.counter++;
- }
- },
-
- _increment: function( i ) {
- var incremental = this.options.incremental;
-
- if ( incremental ) {
- return $.isFunction( incremental ) ?
- incremental( i ) :
- Math.floor( i*i*i/50000 - i*i/500 + 17*i/200 + 1 );
- }
-
- return 1;
- },
-
- _precision: function() {
- var precision = this._precisionOf( this.options.step );
- if ( this.options.min !== null ) {
- precision = Math.max( precision, this._precisionOf( this.options.min ) );
- }
- return precision;
- },
-
- _precisionOf: function( num ) {
- var str = num.toString(),
- decimal = str.indexOf( "." );
- return decimal === -1 ? 0 : str.length - decimal - 1;
- },
-
- _adjustValue: function( value ) {
- var base, aboveMin,
- options = this.options;
-
- // make sure we're at a valid step
- // - find out where we are relative to the base (min or 0)
- base = options.min !== null ? options.min : 0;
- aboveMin = value - base;
- // - round to the nearest step
- aboveMin = Math.round(aboveMin / options.step) * options.step;
- // - rounding is based on 0, so adjust back to our base
- value = base + aboveMin;
-
- // fix precision from bad JS floating point math
- value = parseFloat( value.toFixed( this._precision() ) );
-
- // clamp the value
- if ( options.max !== null && value > options.max) {
- return options.max;
- }
- if ( options.min !== null && value < options.min ) {
- return options.min;
- }
-
- return value;
- },
-
- _stop: function( event ) {
- if ( !this.spinning ) {
- return;
- }
-
- clearTimeout( this.timer );
- clearTimeout( this.mousewheelTimer );
- this.counter = 0;
- this.spinning = false;
- this._trigger( "stop", event );
- },
-
- _setOption: function( key, value ) {
- if ( key === "culture" || key === "numberFormat" ) {
- var prevValue = this._parse( this.element.val() );
- this.options[ key ] = value;
- this.element.val( this._format( prevValue ) );
- return;
- }
-
- if ( key === "max" || key === "min" || key === "step" ) {
- if ( typeof value === "string" ) {
- value = this._parse( value );
- }
- }
- if ( key === "icons" ) {
- this.buttons.first().find( ".ui-icon" )
- .removeClass( this.options.icons.up )
- .addClass( value.up );
- this.buttons.last().find( ".ui-icon" )
- .removeClass( this.options.icons.down )
- .addClass( value.down );
- }
-
- this._super( key, value );
-
- if ( key === "disabled" ) {
- if ( value ) {
- this.element.prop( "disabled", true );
- this.buttons.button( "disable" );
- } else {
- this.element.prop( "disabled", false );
- this.buttons.button( "enable" );
- }
- }
- },
-
- _setOptions: modifier(function( options ) {
- this._super( options );
- this._value( this.element.val() );
- }),
-
- _parse: function( val ) {
- if ( typeof val === "string" && val !== "" ) {
- val = window.Globalize && this.options.numberFormat ?
- Globalize.parseFloat( val, 10, this.options.culture ) : +val;
- }
- return val === "" || isNaN( val ) ? null : val;
- },
-
- _format: function( value ) {
- if ( value === "" ) {
- return "";
- }
- return window.Globalize && this.options.numberFormat ?
- Globalize.format( value, this.options.numberFormat, this.options.culture ) :
- value;
- },
-
- _refresh: function() {
- this.element.attr({
- "aria-valuemin": this.options.min,
- "aria-valuemax": this.options.max,
- // TODO: what should we do with values that can't be parsed?
- "aria-valuenow": this._parse( this.element.val() )
- });
- },
-
- // update the value without triggering change
- _value: function( value, allowAny ) {
- var parsed;
- if ( value !== "" ) {
- parsed = this._parse( value );
- if ( parsed !== null ) {
- if ( !allowAny ) {
- parsed = this._adjustValue( parsed );
- }
- value = this._format( parsed );
- }
- }
- this.element.val( value );
- this._refresh();
- },
-
- _destroy: function() {
- this.element
- .removeClass( "ui-spinner-input" )
- .prop( "disabled", false )
- .removeAttr( "autocomplete" )
- .removeAttr( "role" )
- .removeAttr( "aria-valuemin" )
- .removeAttr( "aria-valuemax" )
- .removeAttr( "aria-valuenow" );
- this.uiSpinner.replaceWith( this.element );
- },
-
- stepUp: modifier(function( steps ) {
- this._stepUp( steps );
- }),
- _stepUp: function( steps ) {
- if ( this._start() ) {
- this._spin( (steps || 1) * this.options.step );
- this._stop();
- }
- },
-
- stepDown: modifier(function( steps ) {
- this._stepDown( steps );
- }),
- _stepDown: function( steps ) {
- if ( this._start() ) {
- this._spin( (steps || 1) * -this.options.step );
- this._stop();
- }
- },
-
- pageUp: modifier(function( pages ) {
- this._stepUp( (pages || 1) * this.options.page );
- }),
-
- pageDown: modifier(function( pages ) {
- this._stepDown( (pages || 1) * this.options.page );
- }),
-
- value: function( newVal ) {
- if ( !arguments.length ) {
- return this._parse( this.element.val() );
- }
- modifier( this._value ).call( this, newVal );
- },
-
- widget: function() {
- return this.uiSpinner;
- }
-});
-
-}( jQuery ) );
-
-(function( $, undefined ) {
-
-var tabId = 0,
- rhash = /#.*$/;
-
-function getNextTabId() {
- return ++tabId;
-}
-
-function isLocal( anchor ) {
- // support: IE7
- // IE7 doesn't normalize the href property when set via script (#9317)
- anchor = anchor.cloneNode( false );
-
- return anchor.hash.length > 1 &&
- decodeURIComponent( anchor.href.replace( rhash, "" ) ) ===
- decodeURIComponent( location.href.replace( rhash, "" ) );
-}
-
-$.widget( "ui.tabs", {
- version: "1.10.4",
- delay: 300,
- options: {
- active: null,
- collapsible: false,
- event: "click",
- heightStyle: "content",
- hide: null,
- show: null,
-
- // callbacks
- activate: null,
- beforeActivate: null,
- beforeLoad: null,
- load: null
- },
-
- _create: function() {
- var that = this,
- options = this.options;
-
- this.running = false;
-
- this.element
- .addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
- .toggleClass( "ui-tabs-collapsible", options.collapsible )
- // Prevent users from focusing disabled tabs via click
- .delegate( ".ui-tabs-nav > li", "mousedown" + this.eventNamespace, function( event ) {
- if ( $( this ).is( ".ui-state-disabled" ) ) {
- event.preventDefault();
- }
- })
- // support: IE <9
- // Preventing the default action in mousedown doesn't prevent IE
- // from focusing the element, so if the anchor gets focused, blur.
- // We don't have to worry about focusing the previously focused
- // element since clicking on a non-focusable element should focus
- // the body anyway.
- .delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
- if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
- this.blur();
- }
- });
-
- this._processTabs();
- options.active = this._initialActive();
-
- // Take disabling tabs via class attribute from HTML
- // into account and update option properly.
- if ( $.isArray( options.disabled ) ) {
- options.disabled = $.unique( options.disabled.concat(
- $.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
- return that.tabs.index( li );
- })
- ) ).sort();
- }
-
- // check for length avoids error when initializing empty list
- if ( this.options.active !== false && this.anchors.length ) {
- this.active = this._findActive( options.active );
- } else {
- this.active = $();
- }
-
- this._refresh();
-
- if ( this.active.length ) {
- this.load( options.active );
- }
- },
-
- _initialActive: function() {
- var active = this.options.active,
- collapsible = this.options.collapsible,
- locationHash = location.hash.substring( 1 );
-
- if ( active === null ) {
- // check the fragment identifier in the URL
- if ( locationHash ) {
- this.tabs.each(function( i, tab ) {
- if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
- active = i;
- return false;
- }
- });
- }
-
- // check for a tab marked active via a class
- if ( active === null ) {
- active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
- }
-
- // no active tab, set to false
- if ( active === null || active === -1 ) {
- active = this.tabs.length ? 0 : false;
- }
- }
-
- // handle numbers: negative, out of range
- if ( active !== false ) {
- active = this.tabs.index( this.tabs.eq( active ) );
- if ( active === -1 ) {
- active = collapsible ? false : 0;
- }
- }
-
- // don't allow collapsible: false and active: false
- if ( !collapsible && active === false && this.anchors.length ) {
- active = 0;
- }
-
- return active;
- },
-
- _getCreateEventData: function() {
- return {
- tab: this.active,
- panel: !this.active.length ? $() : this._getPanelForTab( this.active )
- };
- },
-
- _tabKeydown: function( event ) {
- var focusedTab = $( this.document[0].activeElement ).closest( "li" ),
- selectedIndex = this.tabs.index( focusedTab ),
- goingForward = true;
-
- if ( this._handlePageNav( event ) ) {
- return;
- }
-
- switch ( event.keyCode ) {
- case $.ui.keyCode.RIGHT:
- case $.ui.keyCode.DOWN:
- selectedIndex++;
- break;
- case $.ui.keyCode.UP:
- case $.ui.keyCode.LEFT:
- goingForward = false;
- selectedIndex--;
- break;
- case $.ui.keyCode.END:
- selectedIndex = this.anchors.length - 1;
- break;
- case $.ui.keyCode.HOME:
- selectedIndex = 0;
- break;
- case $.ui.keyCode.SPACE:
- // Activate only, no collapsing
- event.preventDefault();
- clearTimeout( this.activating );
- this._activate( selectedIndex );
- return;
- case $.ui.keyCode.ENTER:
- // Toggle (cancel delayed activation, allow collapsing)
- event.preventDefault();
- clearTimeout( this.activating );
- // Determine if we should collapse or activate
- this._activate( selectedIndex === this.options.active ? false : selectedIndex );
- return;
- default:
- return;
- }
-
- // Focus the appropriate tab, based on which key was pressed
- event.preventDefault();
- clearTimeout( this.activating );
- selectedIndex = this._focusNextTab( selectedIndex, goingForward );
-
- // Navigating with control key will prevent automatic activation
- if ( !event.ctrlKey ) {
- // Update aria-selected immediately so that AT think the tab is already selected.
- // Otherwise AT may confuse the user by stating that they need to activate the tab,
- // but the tab will already be activated by the time the announcement finishes.
- focusedTab.attr( "aria-selected", "false" );
- this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
-
- this.activating = this._delay(function() {
- this.option( "active", selectedIndex );
- }, this.delay );
- }
- },
-
- _panelKeydown: function( event ) {
- if ( this._handlePageNav( event ) ) {
- return;
- }
-
- // Ctrl+up moves focus to the current tab
- if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
- event.preventDefault();
- this.active.focus();
- }
- },
-
- // Alt+page up/down moves focus to the previous/next tab (and activates)
- _handlePageNav: function( event ) {
- if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
- this._activate( this._focusNextTab( this.options.active - 1, false ) );
- return true;
- }
- if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
- this._activate( this._focusNextTab( this.options.active + 1, true ) );
- return true;
- }
- },
-
- _findNextTab: function( index, goingForward ) {
- var lastTabIndex = this.tabs.length - 1;
-
- function constrain() {
- if ( index > lastTabIndex ) {
- index = 0;
- }
- if ( index < 0 ) {
- index = lastTabIndex;
- }
- return index;
- }
-
- while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
- index = goingForward ? index + 1 : index - 1;
- }
-
- return index;
- },
-
- _focusNextTab: function( index, goingForward ) {
- index = this._findNextTab( index, goingForward );
- this.tabs.eq( index ).focus();
- return index;
- },
-
- _setOption: function( key, value ) {
- if ( key === "active" ) {
- // _activate() will handle invalid values and update this.options
- this._activate( value );
- return;
- }
-
- if ( key === "disabled" ) {
- // don't use the widget factory's disabled handling
- this._setupDisabled( value );
- return;
- }
-
- this._super( key, value);
-
- if ( key === "collapsible" ) {
- this.element.toggleClass( "ui-tabs-collapsible", value );
- // Setting collapsible: false while collapsed; open first panel
- if ( !value && this.options.active === false ) {
- this._activate( 0 );
- }
- }
-
- if ( key === "event" ) {
- this._setupEvents( value );
- }
-
- if ( key === "heightStyle" ) {
- this._setupHeightStyle( value );
- }
- },
-
- _tabId: function( tab ) {
- return tab.attr( "aria-controls" ) || "ui-tabs-" + getNextTabId();
- },
-
- _sanitizeSelector: function( hash ) {
- return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
- },
-
- refresh: function() {
- var options = this.options,
- lis = this.tablist.children( ":has(a[href])" );
-
- // get disabled tabs from class attribute from HTML
- // this will get converted to a boolean if needed in _refresh()
- options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
- return lis.index( tab );
- });
-
- this._processTabs();
-
- // was collapsed or no tabs
- if ( options.active === false || !this.anchors.length ) {
- options.active = false;
- this.active = $();
- // was active, but active tab is gone
- } else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
- // all remaining tabs are disabled
- if ( this.tabs.length === options.disabled.length ) {
- options.active = false;
- this.active = $();
- // activate previous tab
- } else {
- this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
- }
- // was active, active tab still exists
- } else {
- // make sure active index is correct
- options.active = this.tabs.index( this.active );
- }
-
- this._refresh();
- },
-
- _refresh: function() {
- this._setupDisabled( this.options.disabled );
- this._setupEvents( this.options.event );
- this._setupHeightStyle( this.options.heightStyle );
-
- this.tabs.not( this.active ).attr({
- "aria-selected": "false",
- tabIndex: -1
- });
- this.panels.not( this._getPanelForTab( this.active ) )
- .hide()
- .attr({
- "aria-expanded": "false",
- "aria-hidden": "true"
- });
-
- // Make sure one tab is in the tab order
- if ( !this.active.length ) {
- this.tabs.eq( 0 ).attr( "tabIndex", 0 );
- } else {
- this.active
- .addClass( "ui-tabs-active ui-state-active" )
- .attr({
- "aria-selected": "true",
- tabIndex: 0
- });
- this._getPanelForTab( this.active )
- .show()
- .attr({
- "aria-expanded": "true",
- "aria-hidden": "false"
- });
- }
- },
-
- _processTabs: function() {
- var that = this;
-
- this.tablist = this._getList()
- .addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
- .attr( "role", "tablist" );
-
- this.tabs = this.tablist.find( "> li:has(a[href])" )
- .addClass( "ui-state-default ui-corner-top" )
- .attr({
- role: "tab",
- tabIndex: -1
- });
-
- this.anchors = this.tabs.map(function() {
- return $( "a", this )[ 0 ];
- })
- .addClass( "ui-tabs-anchor" )
- .attr({
- role: "presentation",
- tabIndex: -1
- });
-
- this.panels = $();
-
- this.anchors.each(function( i, anchor ) {
- var selector, panel, panelId,
- anchorId = $( anchor ).uniqueId().attr( "id" ),
- tab = $( anchor ).closest( "li" ),
- originalAriaControls = tab.attr( "aria-controls" );
-
- // inline tab
- if ( isLocal( anchor ) ) {
- selector = anchor.hash;
- panel = that.element.find( that._sanitizeSelector( selector ) );
- // remote tab
- } else {
- panelId = that._tabId( tab );
- selector = "#" + panelId;
- panel = that.element.find( selector );
- if ( !panel.length ) {
- panel = that._createPanel( panelId );
- panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
- }
- panel.attr( "aria-live", "polite" );
- }
-
- if ( panel.length) {
- that.panels = that.panels.add( panel );
- }
- if ( originalAriaControls ) {
- tab.data( "ui-tabs-aria-controls", originalAriaControls );
- }
- tab.attr({
- "aria-controls": selector.substring( 1 ),
- "aria-labelledby": anchorId
- });
- panel.attr( "aria-labelledby", anchorId );
- });
-
- this.panels
- .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
- .attr( "role", "tabpanel" );
- },
-
- // allow overriding how to find the list for rare usage scenarios (#7715)
- _getList: function() {
- return this.tablist || this.element.find( "ol,ul" ).eq( 0 );
- },
-
- _createPanel: function( id ) {
- return $( "<div>" )
- .attr( "id", id )
- .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
- .data( "ui-tabs-destroy", true );
- },
-
- _setupDisabled: function( disabled ) {
- if ( $.isArray( disabled ) ) {
- if ( !disabled.length ) {
- disabled = false;
- } else if ( disabled.length === this.anchors.length ) {
- disabled = true;
- }
- }
-
- // disable tabs
- for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {
- if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
- $( li )
- .addClass( "ui-state-disabled" )
- .attr( "aria-disabled", "true" );
- } else {
- $( li )
- .removeClass( "ui-state-disabled" )
- .removeAttr( "aria-disabled" );
- }
- }
-
- this.options.disabled = disabled;
- },
-
- _setupEvents: function( event ) {
- var events = {
- click: function( event ) {
- event.preventDefault();
- }
- };
- if ( event ) {
- $.each( event.split(" "), function( index, eventName ) {
- events[ eventName ] = "_eventHandler";
- });
- }
-
- this._off( this.anchors.add( this.tabs ).add( this.panels ) );
- this._on( this.anchors, events );
- this._on( this.tabs, { keydown: "_tabKeydown" } );
- this._on( this.panels, { keydown: "_panelKeydown" } );
-
- this._focusable( this.tabs );
- this._hoverable( this.tabs );
- },
-
- _setupHeightStyle: function( heightStyle ) {
- var maxHeight,
- parent = this.element.parent();
-
- if ( heightStyle === "fill" ) {
- maxHeight = parent.height();
- maxHeight -= this.element.outerHeight() - this.element.height();
-
- this.element.siblings( ":visible" ).each(function() {
- var elem = $( this ),
- position = elem.css( "position" );
-
- if ( position === "absolute" || position === "fixed" ) {
- return;
- }
- maxHeight -= elem.outerHeight( true );
- });
-
- this.element.children().not( this.panels ).each(function() {
- maxHeight -= $( this ).outerHeight( true );
- });
-
- this.panels.each(function() {
- $( this ).height( Math.max( 0, maxHeight -
- $( this ).innerHeight() + $( this ).height() ) );
- })
- .css( "overflow", "auto" );
- } else if ( heightStyle === "auto" ) {
- maxHeight = 0;
- this.panels.each(function() {
- maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
- }).height( maxHeight );
- }
- },
-
- _eventHandler: function( event ) {
- var options = this.options,
- active = this.active,
- anchor = $( event.currentTarget ),
- tab = anchor.closest( "li" ),
- clickedIsActive = tab[ 0 ] === active[ 0 ],
- collapsing = clickedIsActive && options.collapsible,
- toShow = collapsing ? $() : this._getPanelForTab( tab ),
- toHide = !active.length ? $() : this._getPanelForTab( active ),
- eventData = {
- oldTab: active,
- oldPanel: toHide,
- newTab: collapsing ? $() : tab,
- newPanel: toShow
- };
-
- event.preventDefault();
-
- if ( tab.hasClass( "ui-state-disabled" ) ||
- // tab is already loading
- tab.hasClass( "ui-tabs-loading" ) ||
- // can't switch durning an animation
- this.running ||
- // click on active header, but not collapsible
- ( clickedIsActive && !options.collapsible ) ||
- // allow canceling activation
- ( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
- return;
- }
-
- options.active = collapsing ? false : this.tabs.index( tab );
-
- this.active = clickedIsActive ? $() : tab;
- if ( this.xhr ) {
- this.xhr.abort();
- }
-
- if ( !toHide.length && !toShow.length ) {
- $.error( "jQuery UI Tabs: Mismatching fragment identifier." );
- }
-
- if ( toShow.length ) {
- this.load( this.tabs.index( tab ), event );
- }
- this._toggle( event, eventData );
- },
-
- // handles show/hide for selecting tabs
- _toggle: function( event, eventData ) {
- var that = this,
- toShow = eventData.newPanel,
- toHide = eventData.oldPanel;
-
- this.running = true;
-
- function complete() {
- that.running = false;
- that._trigger( "activate", event, eventData );
- }
-
- function show() {
- eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );
-
- if ( toShow.length && that.options.show ) {
- that._show( toShow, that.options.show, complete );
- } else {
- toShow.show();
- complete();
- }
- }
-
- // start out by hiding, then showing, then completing
- if ( toHide.length && this.options.hide ) {
- this._hide( toHide, this.options.hide, function() {
- eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
- show();
- });
- } else {
- eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
- toHide.hide();
- show();
- }
-
- toHide.attr({
- "aria-expanded": "false",
- "aria-hidden": "true"
- });
- eventData.oldTab.attr( "aria-selected", "false" );
- // If we're switching tabs, remove the old tab from the tab order.
- // If we're opening from collapsed state, remove the previous tab from the tab order.
- // If we're collapsing, then keep the collapsing tab in the tab order.
- if ( toShow.length && toHide.length ) {
- eventData.oldTab.attr( "tabIndex", -1 );
- } else if ( toShow.length ) {
- this.tabs.filter(function() {
- return $( this ).attr( "tabIndex" ) === 0;
- })
- .attr( "tabIndex", -1 );
- }
-
- toShow.attr({
- "aria-expanded": "true",
- "aria-hidden": "false"
- });
- eventData.newTab.attr({
- "aria-selected": "true",
- tabIndex: 0
- });
- },
-
- _activate: function( index ) {
- var anchor,
- active = this._findActive( index );
-
- // trying to activate the already active panel
- if ( active[ 0 ] === this.active[ 0 ] ) {
- return;
- }
-
- // trying to collapse, simulate a click on the current active header
- if ( !active.length ) {
- active = this.active;
- }
-
- anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
- this._eventHandler({
- target: anchor,
- currentTarget: anchor,
- preventDefault: $.noop
- });
- },
-
- _findActive: function( index ) {
- return index === false ? $() : this.tabs.eq( index );
- },
-
- _getIndex: function( index ) {
- // meta-function to give users option to provide a href string instead of a numerical index.
- if ( typeof index === "string" ) {
- index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) );
- }
-
- return index;
- },
-
- _destroy: function() {
- if ( this.xhr ) {
- this.xhr.abort();
- }
-
- this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" );
-
- this.tablist
- .removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
- .removeAttr( "role" );
-
- this.anchors
- .removeClass( "ui-tabs-anchor" )
- .removeAttr( "role" )
- .removeAttr( "tabIndex" )
- .removeUniqueId();
-
- this.tabs.add( this.panels ).each(function() {
- if ( $.data( this, "ui-tabs-destroy" ) ) {
- $( this ).remove();
- } else {
- $( this )
- .removeClass( "ui-state-default ui-state-active ui-state-disabled " +
- "ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" )
- .removeAttr( "tabIndex" )
- .removeAttr( "aria-live" )
- .removeAttr( "aria-busy" )
- .removeAttr( "aria-selected" )
- .removeAttr( "aria-labelledby" )
- .removeAttr( "aria-hidden" )
- .removeAttr( "aria-expanded" )
- .removeAttr( "role" );
- }
- });
-
- this.tabs.each(function() {
- var li = $( this ),
- prev = li.data( "ui-tabs-aria-controls" );
- if ( prev ) {
- li
- .attr( "aria-controls", prev )
- .removeData( "ui-tabs-aria-controls" );
- } else {
- li.removeAttr( "aria-controls" );
- }
- });
-
- this.panels.show();
-
- if ( this.options.heightStyle !== "content" ) {
- this.panels.css( "height", "" );
- }
- },
-
- enable: function( index ) {
- var disabled = this.options.disabled;
- if ( disabled === false ) {
- return;
- }
-
- if ( index === undefined ) {
- disabled = false;
- } else {
- index = this._getIndex( index );
- if ( $.isArray( disabled ) ) {
- disabled = $.map( disabled, function( num ) {
- return num !== index ? num : null;
- });
- } else {
- disabled = $.map( this.tabs, function( li, num ) {
- return num !== index ? num : null;
- });
- }
- }
- this._setupDisabled( disabled );
- },
-
- disable: function( index ) {
- var disabled = this.options.disabled;
- if ( disabled === true ) {
- return;
- }
-
- if ( index === undefined ) {
- disabled = true;
- } else {
- index = this._getIndex( index );
- if ( $.inArray( index, disabled ) !== -1 ) {
- return;
- }
- if ( $.isArray( disabled ) ) {
- disabled = $.merge( [ index ], disabled ).sort();
- } else {
- disabled = [ index ];
- }
- }
- this._setupDisabled( disabled );
- },
-
- load: function( index, event ) {
- index = this._getIndex( index );
- var that = this,
- tab = this.tabs.eq( index ),
- anchor = tab.find( ".ui-tabs-anchor" ),
- panel = this._getPanelForTab( tab ),
- eventData = {
- tab: tab,
- panel: panel
- };
-
- // not remote
- if ( isLocal( anchor[ 0 ] ) ) {
- return;
- }
-
- this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
-
- // support: jQuery <1.8
- // jQuery <1.8 returns false if the request is canceled in beforeSend,
- // but as of 1.8, $.ajax() always returns a jqXHR object.
- if ( this.xhr && this.xhr.statusText !== "canceled" ) {
- tab.addClass( "ui-tabs-loading" );
- panel.attr( "aria-busy", "true" );
-
- this.xhr
- .success(function( response ) {
- // support: jQuery <1.8
- // http://bugs.jquery.com/ticket/11778
- setTimeout(function() {
- panel.html( response );
- that._trigger( "load", event, eventData );
- }, 1 );
- })
- .complete(function( jqXHR, status ) {
- // support: jQuery <1.8
- // http://bugs.jquery.com/ticket/11778
- setTimeout(function() {
- if ( status === "abort" ) {
- that.panels.stop( false, true );
- }
-
- tab.removeClass( "ui-tabs-loading" );
- panel.removeAttr( "aria-busy" );
-
- if ( jqXHR === that.xhr ) {
- delete that.xhr;
- }
- }, 1 );
- });
- }
- },
-
- _ajaxSettings: function( anchor, event, eventData ) {
- var that = this;
- return {
- url: anchor.attr( "href" ),
- beforeSend: function( jqXHR, settings ) {
- return that._trigger( "beforeLoad", event,
- $.extend( { jqXHR : jqXHR, ajaxSettings: settings }, eventData ) );
- }
- };
- },
-
- _getPanelForTab: function( tab ) {
- var id = $( tab ).attr( "aria-controls" );
- return this.element.find( this._sanitizeSelector( "#" + id ) );
- }
-});
-
-})( jQuery );
-
-(function( $ ) {
-
-var increments = 0;
-
-function addDescribedBy( elem, id ) {
- var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
- describedby.push( id );
- elem
- .data( "ui-tooltip-id", id )
- .attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
-}
-
-function removeDescribedBy( elem ) {
- var id = elem.data( "ui-tooltip-id" ),
- describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
- index = $.inArray( id, describedby );
- if ( index !== -1 ) {
- describedby.splice( index, 1 );
- }
-
- elem.removeData( "ui-tooltip-id" );
- describedby = $.trim( describedby.join( " " ) );
- if ( describedby ) {
- elem.attr( "aria-describedby", describedby );
- } else {
- elem.removeAttr( "aria-describedby" );
- }
-}
-
-$.widget( "ui.tooltip", {
- version: "1.10.4",
- options: {
- content: function() {
- // support: IE<9, Opera in jQuery <1.7
- // .text() can't accept undefined, so coerce to a string
- var title = $( this ).attr( "title" ) || "";
- // Escape title, since we're going from an attribute to raw HTML
- return $( "<a>" ).text( title ).html();
- },
- hide: true,
- // Disabled elements have inconsistent behavior across browsers (#8661)
- items: "[title]:not([disabled])",
- position: {
- my: "left top+15",
- at: "left bottom",
- collision: "flipfit flip"
- },
- show: true,
- tooltipClass: null,
- track: false,
-
- // callbacks
- close: null,
- open: null
- },
-
- _create: function() {
- this._on({
- mouseover: "open",
- focusin: "open"
- });
-
- // IDs of generated tooltips, needed for destroy
- this.tooltips = {};
- // IDs of parent tooltips where we removed the title attribute
- this.parents = {};
-
- if ( this.options.disabled ) {
- this._disable();
- }
- },
-
- _setOption: function( key, value ) {
- var that = this;
-
- if ( key === "disabled" ) {
- this[ value ? "_disable" : "_enable" ]();
- this.options[ key ] = value;
- // disable element style changes
- return;
- }
-
- this._super( key, value );
-
- if ( key === "content" ) {
- $.each( this.tooltips, function( id, element ) {
- that._updateContent( element );
- });
- }
- },
-
- _disable: function() {
- var that = this;
-
- // close open tooltips
- $.each( this.tooltips, function( id, element ) {
- var event = $.Event( "blur" );
- event.target = event.currentTarget = element[0];
- that.close( event, true );
- });
-
- // remove title attributes to prevent native tooltips
- this.element.find( this.options.items ).addBack().each(function() {
- var element = $( this );
- if ( element.is( "[title]" ) ) {
- element
- .data( "ui-tooltip-title", element.attr( "title" ) )
- .attr( "title", "" );
- }
- });
- },
-
- _enable: function() {
- // restore title attributes
- this.element.find( this.options.items ).addBack().each(function() {
- var element = $( this );
- if ( element.data( "ui-tooltip-title" ) ) {
- element.attr( "title", element.data( "ui-tooltip-title" ) );
- }
- });
- },
-
- open: function( event ) {
- var that = this,
- target = $( event ? event.target : this.element )
- // we need closest here due to mouseover bubbling,
- // but always pointing at the same event target
- .closest( this.options.items );
-
- // No element to show a tooltip for or the tooltip is already open
- if ( !target.length || target.data( "ui-tooltip-id" ) ) {
- return;
- }
-
- if ( target.attr( "title" ) ) {
- target.data( "ui-tooltip-title", target.attr( "title" ) );
- }
-
- target.data( "ui-tooltip-open", true );
-
- // kill parent tooltips, custom or native, for hover
- if ( event && event.type === "mouseover" ) {
- target.parents().each(function() {
- var parent = $( this ),
- blurEvent;
- if ( parent.data( "ui-tooltip-open" ) ) {
- blurEvent = $.Event( "blur" );
- blurEvent.target = blurEvent.currentTarget = this;
- that.close( blurEvent, true );
- }
- if ( parent.attr( "title" ) ) {
- parent.uniqueId();
- that.parents[ this.id ] = {
- element: this,
- title: parent.attr( "title" )
- };
- parent.attr( "title", "" );
- }
- });
- }
-
- this._updateContent( target, event );
- },
-
- _updateContent: function( target, event ) {
- var content,
- contentOption = this.options.content,
- that = this,
- eventType = event ? event.type : null;
-
- if ( typeof contentOption === "string" ) {
- return this._open( event, target, contentOption );
- }
-
- content = contentOption.call( target[0], function( response ) {
- // ignore async response if tooltip was closed already
- if ( !target.data( "ui-tooltip-open" ) ) {
- return;
- }
- // IE may instantly serve a cached response for ajax requests
- // delay this call to _open so the other call to _open runs first
- that._delay(function() {
- // jQuery creates a special event for focusin when it doesn't
- // exist natively. To improve performance, the native event
- // object is reused and the type is changed. Therefore, we can't
- // rely on the type being correct after the event finished
- // bubbling, so we set it back to the previous value. (#8740)
- if ( event ) {
- event.type = eventType;
- }
- this._open( event, target, response );
- });
- });
- if ( content ) {
- this._open( event, target, content );
- }
- },
-
- _open: function( event, target, content ) {
- var tooltip, events, delayedShow,
- positionOption = $.extend( {}, this.options.position );
-
- if ( !content ) {
- return;
- }
-
- // Content can be updated multiple times. If the tooltip already
- // exists, then just update the content and bail.
- tooltip = this._find( target );
- if ( tooltip.length ) {
- tooltip.find( ".ui-tooltip-content" ).html( content );
- return;
- }
-
- // if we have a title, clear it to prevent the native tooltip
- // we have to check first to avoid defining a title if none exists
- // (we don't want to cause an element to start matching [title])
- //
- // We use removeAttr only for key events, to allow IE to export the correct
- // accessible attributes. For mouse events, set to empty string to avoid
- // native tooltip showing up (happens only when removing inside mouseover).
- if ( target.is( "[title]" ) ) {
- if ( event && event.type === "mouseover" ) {
- target.attr( "title", "" );
- } else {
- target.removeAttr( "title" );
- }
- }
-
- tooltip = this._tooltip( target );
- addDescribedBy( target, tooltip.attr( "id" ) );
- tooltip.find( ".ui-tooltip-content" ).html( content );
-
- function position( event ) {
- positionOption.of = event;
- if ( tooltip.is( ":hidden" ) ) {
- return;
- }
- tooltip.position( positionOption );
- }
- if ( this.options.track && event && /^mouse/.test( event.type ) ) {
- this._on( this.document, {
- mousemove: position
- });
- // trigger once to override element-relative positioning
- position( event );
- } else {
- tooltip.position( $.extend({
- of: target
- }, this.options.position ) );
- }
-
- tooltip.hide();
-
- this._show( tooltip, this.options.show );
- // Handle tracking tooltips that are shown with a delay (#8644). As soon
- // as the tooltip is visible, position the tooltip using the most recent
- // event.
- if ( this.options.show && this.options.show.delay ) {
- delayedShow = this.delayedShow = setInterval(function() {
- if ( tooltip.is( ":visible" ) ) {
- position( positionOption.of );
- clearInterval( delayedShow );
- }
- }, $.fx.interval );
- }
-
- this._trigger( "open", event, { tooltip: tooltip } );
-
- events = {
- keyup: function( event ) {
- if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
- var fakeEvent = $.Event(event);
- fakeEvent.currentTarget = target[0];
- this.close( fakeEvent, true );
- }
- },
- remove: function() {
- this._removeTooltip( tooltip );
- }
- };
- if ( !event || event.type === "mouseover" ) {
- events.mouseleave = "close";
- }
- if ( !event || event.type === "focusin" ) {
- events.focusout = "close";
- }
- this._on( true, target, events );
- },
-
- close: function( event ) {
- var that = this,
- target = $( event ? event.currentTarget : this.element ),
- tooltip = this._find( target );
-
- // disabling closes the tooltip, so we need to track when we're closing
- // to avoid an infinite loop in case the tooltip becomes disabled on close
- if ( this.closing ) {
- return;
- }
-
- // Clear the interval for delayed tracking tooltips
- clearInterval( this.delayedShow );
-
- // only set title if we had one before (see comment in _open())
- if ( target.data( "ui-tooltip-title" ) ) {
- target.attr( "title", target.data( "ui-tooltip-title" ) );
- }
-
- removeDescribedBy( target );
-
- tooltip.stop( true );
- this._hide( tooltip, this.options.hide, function() {
- that._removeTooltip( $( this ) );
- });
-
- target.removeData( "ui-tooltip-open" );
- this._off( target, "mouseleave focusout keyup" );
- // Remove 'remove' binding only on delegated targets
- if ( target[0] !== this.element[0] ) {
- this._off( target, "remove" );
- }
- this._off( this.document, "mousemove" );
-
- if ( event && event.type === "mouseleave" ) {
- $.each( this.parents, function( id, parent ) {
- $( parent.element ).attr( "title", parent.title );
- delete that.parents[ id ];
- });
- }
-
- this.closing = true;
- this._trigger( "close", event, { tooltip: tooltip } );
- this.closing = false;
- },
-
- _tooltip: function( element ) {
- var id = "ui-tooltip-" + increments++,
- tooltip = $( "<div>" )
- .attr({
- id: id,
- role: "tooltip"
- })
- .addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " +
- ( this.options.tooltipClass || "" ) );
- $( "<div>" )
- .addClass( "ui-tooltip-content" )
- .appendTo( tooltip );
- tooltip.appendTo( this.document[0].body );
- this.tooltips[ id ] = element;
- return tooltip;
- },
-
- _find: function( target ) {
- var id = target.data( "ui-tooltip-id" );
- return id ? $( "#" + id ) : $();
- },
-
- _removeTooltip: function( tooltip ) {
- tooltip.remove();
- delete this.tooltips[ tooltip.attr( "id" ) ];
- },
-
- _destroy: function() {
- var that = this;
-
- // close open tooltips
- $.each( this.tooltips, function( id, element ) {
- // Delegate to close method to handle common cleanup
- var event = $.Event( "blur" );
- event.target = event.currentTarget = element[0];
- that.close( event, true );
-
- // Remove immediately; destroying an open tooltip doesn't use the
- // hide animation
- $( "#" + id ).remove();
-
- // Restore the title
- if ( element.data( "ui-tooltip-title" ) ) {
- element.attr( "title", element.data( "ui-tooltip-title" ) );
- element.removeData( "ui-tooltip-title" );
- }
- });
- }
-});
-
-}( jQuery ) );
diff --git a/app/javascripts/jsjac.jingle.js b/app/javascripts/jsjac.jingle.js
deleted file mode 100644
index 322b9ee6..00000000
--- a/app/javascripts/jsjac.jingle.js
+++ /dev/null
@@ -1,18789 +0,0 @@
-/**
- * jsjac-jingle [uncompressed]
- * @fileoverview JSJaC Jingle library, implementation of XEP-0166.
- *
- * @version 0.8.0
- * @date 2014-10-13
- * @author Valérian Saliou https://valeriansaliou.name/
- * @license MPL 2.0
- *
- * @url https://github.com/valeriansaliou/jsjac-jingle
- * @repository git+https://github.com/valeriansaliou/jsjac-jingle.git
- * @depends https://github.com/sstrigler/JSJaC
- */
-
-// Underscore.js 1.7.0
-// http://underscorejs.org
-// (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
-// Underscore may be freely distributed under the MIT license.
-
-(function() {
-
- // Baseline setup
- // --------------
-
- // Establish the root object, `window` in the browser, or `exports` on the server.
- var root = this;
-
- // Save the previous value of the `_` variable.
- var previousUnderscore = root._;
-
- // Save bytes in the minified (but not gzipped) version:
- var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
-
- // Create quick reference variables for speed access to core prototypes.
- var
- push = ArrayProto.push,
- slice = ArrayProto.slice,
- concat = ArrayProto.concat,
- toString = ObjProto.toString,
- hasOwnProperty = ObjProto.hasOwnProperty;
-
- // All **ECMAScript 5** native function implementations that we hope to use
- // are declared here.
- var
- nativeIsArray = Array.isArray,
- nativeKeys = Object.keys,
- nativeBind = FuncProto.bind;
-
- // Create a safe reference to the Underscore object for use below.
- var _ = function(obj) {
- if (obj instanceof _) return obj;
- if (!(this instanceof _)) return new _(obj);
- this._wrapped = obj;
- };
-
- // Export the Underscore object for **Node.js**, with
- // backwards-compatibility for the old `require()` API. If we're in
- // the browser, add `_` as a global object.
- if (typeof exports !== 'undefined') {
- if (typeof module !== 'undefined' && module.exports) {
- exports = module.exports = _;
- }
- exports._ = _;
- } else {
- root._ = _;
- }
-
- // Current version.
- _.VERSION = '1.7.0';
-
- // Internal function that returns an efficient (for current engines) version
- // of the passed-in callback, to be repeatedly applied in other Underscore
- // functions.
- var createCallback = function(func, context, argCount) {
- if (context === void 0) return func;
- switch (argCount == null ? 3 : argCount) {
- case 1: return function(value) {
- return func.call(context, value);
- };
- case 2: return function(value, other) {
- return func.call(context, value, other);
- };
- case 3: return function(value, index, collection) {
- return func.call(context, value, index, collection);
- };
- case 4: return function(accumulator, value, index, collection) {
- return func.call(context, accumulator, value, index, collection);
- };
- }
- return function() {
- return func.apply(context, arguments);
- };
- };
-
- // A mostly-internal function to generate callbacks that can be applied
- // to each element in a collection, returning the desired result — either
- // identity, an arbitrary callback, a property matcher, or a property accessor.
- _.iteratee = function(value, context, argCount) {
- if (value == null) return _.identity;
- if (_.isFunction(value)) return createCallback(value, context, argCount);
- if (_.isObject(value)) return _.matches(value);
- return _.property(value);
- };
-
- // Collection Functions
- // --------------------
-
- // The cornerstone, an `each` implementation, aka `forEach`.
- // Handles raw objects in addition to array-likes. Treats all
- // sparse array-likes as if they were dense.
- _.each = _.forEach = function(obj, iteratee, context) {
- if (obj == null) return obj;
- iteratee = createCallback(iteratee, context);
- var i, length = obj.length;
- if (length === +length) {
- for (i = 0; i < length; i++) {
- iteratee(obj[i], i, obj);
- }
- } else {
- var keys = _.keys(obj);
- for (i = 0, length = keys.length; i < length; i++) {
- iteratee(obj[keys[i]], keys[i], obj);
- }
- }
- return obj;
- };
-
- // Return the results of applying the iteratee to each element.
- _.map = _.collect = function(obj, iteratee, context) {
- if (obj == null) return [];
- iteratee = _.iteratee(iteratee, context);
- var keys = obj.length !== +obj.length && _.keys(obj),
- length = (keys || obj).length,
- results = Array(length),
- currentKey;
- for (var index = 0; index < length; index++) {
- currentKey = keys ? keys[index] : index;
- results[index] = iteratee(obj[currentKey], currentKey, obj);
- }
- return results;
- };
-
- var reduceError = 'Reduce of empty array with no initial value';
-
- // **Reduce** builds up a single result from a list of values, aka `inject`,
- // or `foldl`.
- _.reduce = _.foldl = _.inject = function(obj, iteratee, memo, context) {
- if (obj == null) obj = [];
- iteratee = createCallback(iteratee, context, 4);
- var keys = obj.length !== +obj.length && _.keys(obj),
- length = (keys || obj).length,
- index = 0, currentKey;
- if (arguments.length < 3) {
- if (!length) throw new TypeError(reduceError);
- memo = obj[keys ? keys[index++] : index++];
- }
- for (; index < length; index++) {
- currentKey = keys ? keys[index] : index;
- memo = iteratee(memo, obj[currentKey], currentKey, obj);
- }
- return memo;
- };
-
- // The right-associative version of reduce, also known as `foldr`.
- _.reduceRight = _.foldr = function(obj, iteratee, memo, context) {
- if (obj == null) obj = [];
- iteratee = createCallback(iteratee, context, 4);
- var keys = obj.length !== + obj.length && _.keys(obj),
- index = (keys || obj).length,
- currentKey;
- if (arguments.length < 3) {
- if (!index) throw new TypeError(reduceError);
- memo = obj[keys ? keys[--index] : --index];
- }
- while (index--) {
- currentKey = keys ? keys[index] : index;
- memo = iteratee(memo, obj[currentKey], currentKey, obj);
- }
- return memo;
- };
-
- // Return the first value which passes a truth test. Aliased as `detect`.
- _.find = _.detect = function(obj, predicate, context) {
- var result;
- predicate = _.iteratee(predicate, context);
- _.some(obj, function(value, index, list) {
- if (predicate(value, index, list)) {
- result = value;
- return true;
- }
- });
- return result;
- };
-
- // Return all the elements that pass a truth test.
- // Aliased as `select`.
- _.filter = _.select = function(obj, predicate, context) {
- var results = [];
- if (obj == null) return results;
- predicate = _.iteratee(predicate, context);
- _.each(obj, function(value, index, list) {
- if (predicate(value, index, list)) results.push(value);
- });
- return results;
- };
-
- // Return all the elements for which a truth test fails.
- _.reject = function(obj, predicate, context) {
- return _.filter(obj, _.negate(_.iteratee(predicate)), context);
- };
-
- // Determine whether all of the elements match a truth test.
- // Aliased as `all`.
- _.every = _.all = function(obj, predicate, context) {
- if (obj == null) return true;
- predicate = _.iteratee(predicate, context);
- var keys = obj.length !== +obj.length && _.keys(obj),
- length = (keys || obj).length,
- index, currentKey;
- for (index = 0; index < length; index++) {
- currentKey = keys ? keys[index] : index;
- if (!predicate(obj[currentKey], currentKey, obj)) return false;
- }
- return true;
- };
-
- // Determine if at least one element in the object matches a truth test.
- // Aliased as `any`.
- _.some = _.any = function(obj, predicate, context) {
- if (obj == null) return false;
- predicate = _.iteratee(predicate, context);
- var keys = obj.length !== +obj.length && _.keys(obj),
- length = (keys || obj).length,
- index, currentKey;
- for (index = 0; index < length; index++) {
- currentKey = keys ? keys[index] : index;
- if (predicate(obj[currentKey], currentKey, obj)) return true;
- }
- return false;
- };
-
- // Determine if the array or object contains a given value (using `===`).
- // Aliased as `include`.
- _.contains = _.include = function(obj, target) {
- if (obj == null) return false;
- if (obj.length !== +obj.length) obj = _.values(obj);
- return _.indexOf(obj, target) >= 0;
- };
-
- // Invoke a method (with arguments) on every item in a collection.
- _.invoke = function(obj, method) {
- var args = slice.call(arguments, 2);
- var isFunc = _.isFunction(method);
- return _.map(obj, function(value) {
- return (isFunc ? method : value[method]).apply(value, args);
- });
- };
-
- // Convenience version of a common use case of `map`: fetching a property.
- _.pluck = function(obj, key) {
- return _.map(obj, _.property(key));
- };
-
- // Convenience version of a common use case of `filter`: selecting only objects
- // containing specific `key:value` pairs.
- _.where = function(obj, attrs) {
- return _.filter(obj, _.matches(attrs));
- };
-
- // Convenience version of a common use case of `find`: getting the first object
- // containing specific `key:value` pairs.
- _.findWhere = function(obj, attrs) {
- return _.find(obj, _.matches(attrs));
- };
-
- // Return the maximum element (or element-based computation).
- _.max = function(obj, iteratee, context) {
- var result = -Infinity, lastComputed = -Infinity,
- value, computed;
- if (iteratee == null && obj != null) {
- obj = obj.length === +obj.length ? obj : _.values(obj);
- for (var i = 0, length = obj.length; i < length; i++) {
- value = obj[i];
- if (value > result) {
- result = value;
- }
- }
- } else {
- iteratee = _.iteratee(iteratee, context);
- _.each(obj, function(value, index, list) {
- computed = iteratee(value, index, list);
- if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
- result = value;
- lastComputed = computed;
- }
- });
- }
- return result;
- };
-
- // Return the minimum element (or element-based computation).
- _.min = function(obj, iteratee, context) {
- var result = Infinity, lastComputed = Infinity,
- value, computed;
- if (iteratee == null && obj != null) {
- obj = obj.length === +obj.length ? obj : _.values(obj);
- for (var i = 0, length = obj.length; i < length; i++) {
- value = obj[i];
- if (value < result) {
- result = value;
- }
- }
- } else {
- iteratee = _.iteratee(iteratee, context);
- _.each(obj, function(value, index, list) {
- computed = iteratee(value, index, list);
- if (computed < lastComputed || computed === Infinity && result === Infinity) {
- result = value;
- lastComputed = computed;
- }
- });
- }
- return result;
- };
-
- // Shuffle a collection, using the modern version of the
- // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
- _.shuffle = function(obj) {
- var set = obj && obj.length === +obj.length ? obj : _.values(obj);
- var length = set.length;
- var shuffled = Array(length);
- for (var index = 0, rand; index < length; index++) {
- rand = _.random(0, index);
- if (rand !== index) shuffled[index] = shuffled[rand];
- shuffled[rand] = set[index];
- }
- return shuffled;
- };
-
- // Sample **n** random values from a collection.
- // If **n** is not specified, returns a single random element.
- // The internal `guard` argument allows it to work with `map`.
- _.sample = function(obj, n, guard) {
- if (n == null || guard) {
- if (obj.length !== +obj.length) obj = _.values(obj);
- return obj[_.random(obj.length - 1)];
- }
- return _.shuffle(obj).slice(0, Math.max(0, n));
- };
-
- // Sort the object's values by a criterion produced by an iteratee.
- _.sortBy = function(obj, iteratee, context) {
- iteratee = _.iteratee(iteratee, context);
- return _.pluck(_.map(obj, function(value, index, list) {
- return {
- value: value,
- index: index,
- criteria: iteratee(value, index, list)
- };
- }).sort(function(left, right) {
- var a = left.criteria;
- var b = right.criteria;
- if (a !== b) {
- if (a > b || a === void 0) return 1;
- if (a < b || b === void 0) return -1;
- }
- return left.index - right.index;
- }), 'value');
- };
-
- // An internal function used for aggregate "group by" operations.
- var group = function(behavior) {
- return function(obj, iteratee, context) {
- var result = {};
- iteratee = _.iteratee(iteratee, context);
- _.each(obj, function(value, index) {
- var key = iteratee(value, index, obj);
- behavior(result, value, key);
- });
- return result;
- };
- };
-
- // Groups the object's values by a criterion. Pass either a string attribute
- // to group by, or a function that returns the criterion.
- _.groupBy = group(function(result, value, key) {
- if (_.has(result, key)) result[key].push(value); else result[key] = [value];
- });
-
- // Indexes the object's values by a criterion, similar to `groupBy`, but for
- // when you know that your index values will be unique.
- _.indexBy = group(function(result, value, key) {
- result[key] = value;
- });
-
- // Counts instances of an object that group by a certain criterion. Pass
- // either a string attribute to count by, or a function that returns the
- // criterion.
- _.countBy = group(function(result, value, key) {
- if (_.has(result, key)) result[key]++; else result[key] = 1;
- });
-
- // Use a comparator function to figure out the smallest index at which
- // an object should be inserted so as to maintain order. Uses binary search.
- _.sortedIndex = function(array, obj, iteratee, context) {
- iteratee = _.iteratee(iteratee, context, 1);
- var value = iteratee(obj);
- var low = 0, high = array.length;
- while (low < high) {
- var mid = low + high >>> 1;
- if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
- }
- return low;
- };
-
- // Safely create a real, live array from anything iterable.
- _.toArray = function(obj) {
- if (!obj) return [];
- if (_.isArray(obj)) return slice.call(obj);
- if (obj.length === +obj.length) return _.map(obj, _.identity);
- return _.values(obj);
- };
-
- // Return the number of elements in an object.
- _.size = function(obj) {
- if (obj == null) return 0;
- return obj.length === +obj.length ? obj.length : _.keys(obj).length;
- };
-
- // Split a collection into two arrays: one whose elements all satisfy the given
- // predicate, and one whose elements all do not satisfy the predicate.
- _.partition = function(obj, predicate, context) {
- predicate = _.iteratee(predicate, context);
- var pass = [], fail = [];
- _.each(obj, function(value, key, obj) {
- (predicate(value, key, obj) ? pass : fail).push(value);
- });
- return [pass, fail];
- };
-
- // Array Functions
- // ---------------
-
- // Get the first element of an array. Passing **n** will return the first N
- // values in the array. Aliased as `head` and `take`. The **guard** check
- // allows it to work with `_.map`.
- _.first = _.head = _.take = function(array, n, guard) {
- if (array == null) return void 0;
- if (n == null || guard) return array[0];
- if (n < 0) return [];
- return slice.call(array, 0, n);
- };
-
- // Returns everything but the last entry of the array. Especially useful on
- // the arguments object. Passing **n** will return all the values in
- // the array, excluding the last N. The **guard** check allows it to work with
- // `_.map`.
- _.initial = function(array, n, guard) {
- return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
- };
-
- // Get the last element of an array. Passing **n** will return the last N
- // values in the array. The **guard** check allows it to work with `_.map`.
- _.last = function(array, n, guard) {
- if (array == null) return void 0;
- if (n == null || guard) return array[array.length - 1];
- return slice.call(array, Math.max(array.length - n, 0));
- };
-
- // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.
- // Especially useful on the arguments object. Passing an **n** will return
- // the rest N values in the array. The **guard**
- // check allows it to work with `_.map`.
- _.rest = _.tail = _.drop = function(array, n, guard) {
- return slice.call(array, n == null || guard ? 1 : n);
- };
-
- // Trim out all falsy values from an array.
- _.compact = function(array) {
- return _.filter(array, _.identity);
- };
-
- // Internal implementation of a recursive `flatten` function.
- var flatten = function(input, shallow, strict, output) {
- if (shallow && _.every(input, _.isArray)) {
- return concat.apply(output, input);
- }
- for (var i = 0, length = input.length; i < length; i++) {
- var value = input[i];
- if (!_.isArray(value) && !_.isArguments(value)) {
- if (!strict) output.push(value);
- } else if (shallow) {
- push.apply(output, value);
- } else {
- flatten(value, shallow, strict, output);
- }
- }
- return output;
- };
-
- // Flatten out an array, either recursively (by default), or just one level.
- _.flatten = function(array, shallow) {
- return flatten(array, shallow, false, []);
- };
-
- // Return a version of the array that does not contain the specified value(s).
- _.without = function(array) {
- return _.difference(array, slice.call(arguments, 1));
- };
-
- // Produce a duplicate-free version of the array. If the array has already
- // been sorted, you have the option of using a faster algorithm.
- // Aliased as `unique`.
- _.uniq = _.unique = function(array, isSorted, iteratee, context) {
- if (array == null) return [];
- if (!_.isBoolean(isSorted)) {
- context = iteratee;
- iteratee = isSorted;
- isSorted = false;
- }
- if (iteratee != null) iteratee = _.iteratee(iteratee, context);
- var result = [];
- var seen = [];
- for (var i = 0, length = array.length; i < length; i++) {
- var value = array[i];
- if (isSorted) {
- if (!i || seen !== value) result.push(value);
- seen = value;
- } else if (iteratee) {
- var computed = iteratee(value, i, array);
- if (_.indexOf(seen, computed) < 0) {
- seen.push(computed);
- result.push(value);
- }
- } else if (_.indexOf(result, value) < 0) {
- result.push(value);
- }
- }
- return result;
- };
-
- // Produce an array that contains the union: each distinct element from all of
- // the passed-in arrays.
- _.union = function() {
- return _.uniq(flatten(arguments, true, true, []));
- };
-
- // Produce an array that contains every item shared between all the
- // passed-in arrays.
- _.intersection = function(array) {
- if (array == null) return [];
- var result = [];
- var argsLength = arguments.length;
- for (var i = 0, length = array.length; i < length; i++) {
- var item = array[i];
- if (_.contains(result, item)) continue;
- for (var j = 1; j < argsLength; j++) {
- if (!_.contains(arguments[j], item)) break;
- }
- if (j === argsLength) result.push(item);
- }
- return result;
- };
-
- // Take the difference between one array and a number of other arrays.
- // Only the elements present in just the first array will remain.
- _.difference = function(array) {
- var rest = flatten(slice.call(arguments, 1), true, true, []);
- return _.filter(array, function(value){
- return !_.contains(rest, value);
- });
- };
-
- // Zip together multiple lists into a single array -- elements that share
- // an index go together.
- _.zip = function(array) {
- if (array == null) return [];
- var length = _.max(arguments, 'length').length;
- var results = Array(length);
- for (var i = 0; i < length; i++) {
- results[i] = _.pluck(arguments, i);
- }
- return results;
- };
-
- // Converts lists into objects. Pass either a single array of `[key, value]`
- // pairs, or two parallel arrays of the same length -- one of keys, and one of
- // the corresponding values.
- _.object = function(list, values) {
- if (list == null) return {};
- var result = {};
- for (var i = 0, length = list.length; i < length; i++) {
- if (values) {
- result[list[i]] = values[i];
- } else {
- result[list[i][0]] = list[i][1];
- }
- }
- return result;
- };
-
- // Return the position of the first occurrence of an item in an array,
- // or -1 if the item is not included in the array.
- // If the array is large and already in sort order, pass `true`
- // for **isSorted** to use binary search.
- _.indexOf = function(array, item, isSorted) {
- if (array == null) return -1;
- var i = 0, length = array.length;
- if (isSorted) {
- if (typeof isSorted == 'number') {
- i = isSorted < 0 ? Math.max(0, length + isSorted) : isSorted;
- } else {
- i = _.sortedIndex(array, item);
- return array[i] === item ? i : -1;
- }
- }
- for (; i < length; i++) if (array[i] === item) return i;
- return -1;
- };
-
- _.lastIndexOf = function(array, item, from) {
- if (array == null) return -1;
- var idx = array.length;
- if (typeof from == 'number') {
- idx = from < 0 ? idx + from + 1 : Math.min(idx, from + 1);
- }
- while (--idx >= 0) if (array[idx] === item) return idx;
- return -1;
- };
-
- // Generate an integer Array containing an arithmetic progression. A port of
- // the native Python `range()` function. See
- // [the Python documentation](http://docs.python.org/library/functions.html#range).
- _.range = function(start, stop, step) {
- if (arguments.length <= 1) {
- stop = start || 0;
- start = 0;
- }
- step = step || 1;
-
- var length = Math.max(Math.ceil((stop - start) / step), 0);
- var range = Array(length);
-
- for (var idx = 0; idx < length; idx++, start += step) {
- range[idx] = start;
- }
-
- return range;
- };
-
- // Function (ahem) Functions
- // ------------------
-
- // Reusable constructor function for prototype setting.
- var Ctor = function(){};
-
- // Create a function bound to a given object (assigning `this`, and arguments,
- // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
- // available.
- _.bind = function(func, context) {
- var args, bound;
- if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
- if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');
- args = slice.call(arguments, 2);
- bound = function() {
- if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));
- Ctor.prototype = func.prototype;
- var self = new Ctor;
- Ctor.prototype = null;
- var result = func.apply(self, args.concat(slice.call(arguments)));
- if (_.isObject(result)) return result;
- return self;
- };
- return bound;
- };
-
- // Partially apply a function by creating a version that has had some of its
- // arguments pre-filled, without changing its dynamic `this` context. _ acts
- // as a placeholder, allowing any combination of arguments to be pre-filled.
- _.partial = function(func) {
- var boundArgs = slice.call(arguments, 1);
- return function() {
- var position = 0;
- var args = boundArgs.slice();
- for (var i = 0, length = args.length; i < length; i++) {
- if (args[i] === _) args[i] = arguments[position++];
- }
- while (position < arguments.length) args.push(arguments[position++]);
- return func.apply(this, args);
- };
- };
-
- // Bind a number of an object's methods to that object. Remaining arguments
- // are the method names to be bound. Useful for ensuring that all callbacks
- // defined on an object belong to it.
- _.bindAll = function(obj) {
- var i, length = arguments.length, key;
- if (length <= 1) throw new Error('bindAll must be passed function names');
- for (i = 1; i < length; i++) {
- key = arguments[i];
- obj[key] = _.bind(obj[key], obj);
- }
- return obj;
- };
-
- // Memoize an expensive function by storing its results.
- _.memoize = function(func, hasher) {
- var memoize = function(key) {
- var cache = memoize.cache;
- var address = hasher ? hasher.apply(this, arguments) : key;
- if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);
- return cache[address];
- };
- memoize.cache = {};
- return memoize;
- };
-
- // Delays a function for the given number of milliseconds, and then calls
- // it with the arguments supplied.
- _.delay = function(func, wait) {
- var args = slice.call(arguments, 2);
- return setTimeout(function(){
- return func.apply(null, args);
- }, wait);
- };
-
- // Defers a function, scheduling it to run after the current call stack has
- // cleared.
- _.defer = function(func) {
- return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));
- };
-
- // Returns a function, that, when invoked, will only be triggered at most once
- // during a given window of time. Normally, the throttled function will run
- // as much as it can, without ever going more than once per `wait` duration;
- // but if you'd like to disable the execution on the leading edge, pass
- // `{leading: false}`. To disable execution on the trailing edge, ditto.
- _.throttle = function(func, wait, options) {
- var context, args, result;
- var timeout = null;
- var previous = 0;
- if (!options) options = {};
- var later = function() {
- previous = options.leading === false ? 0 : _.now();
- timeout = null;
- result = func.apply(context, args);
- if (!timeout) context = args = null;
- };
- return function() {
- var now = _.now();
- if (!previous && options.leading === false) previous = now;
- var remaining = wait - (now - previous);
- context = this;
- args = arguments;
- if (remaining <= 0 || remaining > wait) {
- clearTimeout(timeout);
- timeout = null;
- previous = now;
- result = func.apply(context, args);
- if (!timeout) context = args = null;
- } else if (!timeout && options.trailing !== false) {
- timeout = setTimeout(later, remaining);
- }
- return result;
- };
- };
-
- // Returns a function, that, as long as it continues to be invoked, will not
- // be triggered. The function will be called after it stops being called for
- // N milliseconds. If `immediate` is passed, trigger the function on the
- // leading edge, instead of the trailing.
- _.debounce = function(func, wait, immediate) {
- var timeout, args, context, timestamp, result;
-
- var later = function() {
- var last = _.now() - timestamp;
-
- if (last < wait && last > 0) {
- timeout = setTimeout(later, wait - last);
- } else {
- timeout = null;
- if (!immediate) {
- result = func.apply(context, args);
- if (!timeout) context = args = null;
- }
- }
- };
-
- return function() {
- context = this;
- args = arguments;
- timestamp = _.now();
- var callNow = immediate && !timeout;
- if (!timeout) timeout = setTimeout(later, wait);
- if (callNow) {
- result = func.apply(context, args);
- context = args = null;
- }
-
- return result;
- };
- };
-
- // Returns the first function passed as an argument to the second,
- // allowing you to adjust arguments, run code before and after, and
- // conditionally execute the original function.
- _.wrap = function(func, wrapper) {
- return _.partial(wrapper, func);
- };
-
- // Returns a negated version of the passed-in predicate.
- _.negate = function(predicate) {
- return function() {
- return !predicate.apply(this, arguments);
- };
- };
-
- // Returns a function that is the composition of a list of functions, each
- // consuming the return value of the function that follows.
- _.compose = function() {
- var args = arguments;
- var start = args.length - 1;
- return function() {
- var i = start;
- var result = args[start].apply(this, arguments);
- while (i--) result = args[i].call(this, result);
- return result;
- };
- };
-
- // Returns a function that will only be executed after being called N times.
- _.after = function(times, func) {
- return function() {
- if (--times < 1) {
- return func.apply(this, arguments);
- }
- };
- };
-
- // Returns a function that will only be executed before being called N times.
- _.before = function(times, func) {
- var memo;
- return function() {
- if (--times > 0) {
- memo = func.apply(this, arguments);
- } else {
- func = null;
- }
- return memo;
- };
- };
-
- // Returns a function that will be executed at most one time, no matter how
- // often you call it. Useful for lazy initialization.
- _.once = _.partial(_.before, 2);
-
- // Object Functions
- // ----------------
-
- // Retrieve the names of an object's properties.
- // Delegates to **ECMAScript 5**'s native `Object.keys`
- _.keys = function(obj) {
- if (!_.isObject(obj)) return [];
- if (nativeKeys) return nativeKeys(obj);
- var keys = [];
- for (var key in obj) if (_.has(obj, key)) keys.push(key);
- return keys;
- };
-
- // Retrieve the values of an object's properties.
- _.values = function(obj) {
- var keys = _.keys(obj);
- var length = keys.length;
- var values = Array(length);
- for (var i = 0; i < length; i++) {
- values[i] = obj[keys[i]];
- }
- return values;
- };
-
- // Convert an object into a list of `[key, value]` pairs.
- _.pairs = function(obj) {
- var keys = _.keys(obj);
- var length = keys.length;
- var pairs = Array(length);
- for (var i = 0; i < length; i++) {
- pairs[i] = [keys[i], obj[keys[i]]];
- }
- return pairs;
- };
-
- // Invert the keys and values of an object. The values must be serializable.
- _.invert = function(obj) {
- var result = {};
- var keys = _.keys(obj);
- for (var i = 0, length = keys.length; i < length; i++) {
- result[obj[keys[i]]] = keys[i];
- }
- return result;
- };
-
- // Return a sorted list of the function names available on the object.
- // Aliased as `methods`
- _.functions = _.methods = function(obj) {
- var names = [];
- for (var key in obj) {
- if (_.isFunction(obj[key])) names.push(key);
- }
- return names.sort();
- };
-
- // Extend a given object with all the properties in passed-in object(s).
- _.extend = function(obj) {
- if (!_.isObject(obj)) return obj;
- var source, prop;
- for (var i = 1, length = arguments.length; i < length; i++) {
- source = arguments[i];
- for (prop in source) {
- if (hasOwnProperty.call(source, prop)) {
- obj[prop] = source[prop];
- }
- }
- }
- return obj;
- };
-
- // Return a copy of the object only containing the whitelisted properties.
- _.pick = function(obj, iteratee, context) {
- var result = {}, key;
- if (obj == null) return result;
- if (_.isFunction(iteratee)) {
- iteratee = createCallback(iteratee, context);
- for (key in obj) {
- var value = obj[key];
- if (iteratee(value, key, obj)) result[key] = value;
- }
- } else {
- var keys = concat.apply([], slice.call(arguments, 1));
- obj = new Object(obj);
- for (var i = 0, length = keys.length; i < length; i++) {
- key = keys[i];
- if (key in obj) result[key] = obj[key];
- }
- }
- return result;
- };
-
- // Return a copy of the object without the blacklisted properties.
- _.omit = function(obj, iteratee, context) {
- if (_.isFunction(iteratee)) {
- iteratee = _.negate(iteratee);
- } else {
- var keys = _.map(concat.apply([], slice.call(arguments, 1)), String);
- iteratee = function(value, key) {
- return !_.contains(keys, key);
- };
- }
- return _.pick(obj, iteratee, context);
- };
-
- // Fill in a given object with default properties.
- _.defaults = function(obj) {
- if (!_.isObject(obj)) return obj;
- for (var i = 1, length = arguments.length; i < length; i++) {
- var source = arguments[i];
- for (var prop in source) {
- if (obj[prop] === void 0) obj[prop] = source[prop];
- }
- }
- return obj;
- };
-
- // Create a (shallow-cloned) duplicate of an object.
- _.clone = function(obj) {
- if (!_.isObject(obj)) return obj;
- return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
- };
-
- // Invokes interceptor with the obj, and then returns obj.
- // The primary purpose of this method is to "tap into" a method chain, in
- // order to perform operations on intermediate results within the chain.
- _.tap = function(obj, interceptor) {
- interceptor(obj);
- return obj;
- };
-
- // Internal recursive comparison function for `isEqual`.
- var eq = function(a, b, aStack, bStack) {
- // Identical objects are equal. `0 === -0`, but they aren't identical.
- // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
- if (a === b) return a !== 0 || 1 / a === 1 / b;
- // A strict comparison is necessary because `null == undefined`.
- if (a == null || b == null) return a === b;
- // Unwrap any wrapped objects.
- if (a instanceof _) a = a._wrapped;
- if (b instanceof _) b = b._wrapped;
- // Compare `[[Class]]` names.
- var className = toString.call(a);
- if (className !== toString.call(b)) return false;
- switch (className) {
- // Strings, numbers, regular expressions, dates, and booleans are compared by value.
- case '[object RegExp]':
- // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
- case '[object String]':
- // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
- // equivalent to `new String("5")`.
- return '' + a === '' + b;
- case '[object Number]':
- // `NaN`s are equivalent, but non-reflexive.
- // Object(NaN) is equivalent to NaN
- if (+a !== +a) return +b !== +b;
- // An `egal` comparison is performed for other numeric values.
- return +a === 0 ? 1 / +a === 1 / b : +a === +b;
- case '[object Date]':
- case '[object Boolean]':
- // Coerce dates and booleans to numeric primitive values. Dates are compared by their
- // millisecond representations. Note that invalid dates with millisecond representations
- // of `NaN` are not equivalent.
- return +a === +b;
- }
- if (typeof a != 'object' || typeof b != 'object') return false;
- // Assume equality for cyclic structures. The algorithm for detecting cyclic
- // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
- var length = aStack.length;
- while (length--) {
- // Linear search. Performance is inversely proportional to the number of
- // unique nested structures.
- if (aStack[length] === a) return bStack[length] === b;
- }
- // Objects with different constructors are not equivalent, but `Object`s
- // from different frames are.
- var aCtor = a.constructor, bCtor = b.constructor;
- if (
- aCtor !== bCtor &&
- // Handle Object.create(x) cases
- 'constructor' in a && 'constructor' in b &&
- !(_.isFunction(aCtor) && aCtor instanceof aCtor &&
- _.isFunction(bCtor) && bCtor instanceof bCtor)
- ) {
- return false;
- }
- // Add the first object to the stack of traversed objects.
- aStack.push(a);
- bStack.push(b);
- var size, result;
- // Recursively compare objects and arrays.
- if (className === '[object Array]') {
- // Compare array lengths to determine if a deep comparison is necessary.
- size = a.length;
- result = size === b.length;
- if (result) {
- // Deep compare the contents, ignoring non-numeric properties.
- while (size--) {
- if (!(result = eq(a[size], b[size], aStack, bStack))) break;
- }
- }
- } else {
- // Deep compare objects.
- var keys = _.keys(a), key;
- size = keys.length;
- // Ensure that both objects contain the same number of properties before comparing deep equality.
- result = _.keys(b).length === size;
- if (result) {
- while (size--) {
- // Deep compare each member
- key = keys[size];
- if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break;
- }
- }
- }
- // Remove the first object from the stack of traversed objects.
- aStack.pop();
- bStack.pop();
- return result;
- };
-
- // Perform a deep comparison to check if two objects are equal.
- _.isEqual = function(a, b) {
- return eq(a, b, [], []);
- };
-
- // Is a given array, string, or object empty?
- // An "empty" object has no enumerable own-properties.
- _.isEmpty = function(obj) {
- if (obj == null) return true;
- if (_.isArray(obj) || _.isString(obj) || _.isArguments(obj)) return obj.length === 0;
- for (var key in obj) if (_.has(obj, key)) return false;
- return true;
- };
-
- // Is a given value a DOM element?
- _.isElement = function(obj) {
- return !!(obj && obj.nodeType === 1);
- };
-
- // Is a given value an array?
- // Delegates to ECMA5's native Array.isArray
- _.isArray = nativeIsArray || function(obj) {
- return toString.call(obj) === '[object Array]';
- };
-
- // Is a given variable an object?
- _.isObject = function(obj) {
- var type = typeof obj;
- return type === 'function' || type === 'object' && !!obj;
- };
-
- // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp.
- _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) {
- _['is' + name] = function(obj) {
- return toString.call(obj) === '[object ' + name + ']';
- };
- });
-
- // Define a fallback version of the method in browsers (ahem, IE), where
- // there isn't any inspectable "Arguments" type.
- if (!_.isArguments(arguments)) {
- _.isArguments = function(obj) {
- return _.has(obj, 'callee');
- };
- }
-
- // Optimize `isFunction` if appropriate. Work around an IE 11 bug.
- if (typeof /./ !== 'function') {
- _.isFunction = function(obj) {
- return typeof obj == 'function' || false;
- };
- }
-
- // Is a given object a finite number?
- _.isFinite = function(obj) {
- return isFinite(obj) && !isNaN(parseFloat(obj));
- };
-
- // Is the given value `NaN`? (NaN is the only number which does not equal itself).
- _.isNaN = function(obj) {
- return _.isNumber(obj) && obj !== +obj;
- };
-
- // Is a given value a boolean?
- _.isBoolean = function(obj) {
- return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
- };
-
- // Is a given value equal to null?
- _.isNull = function(obj) {
- return obj === null;
- };
-
- // Is a given variable undefined?
- _.isUndefined = function(obj) {
- return obj === void 0;
- };
-
- // Shortcut function for checking if an object has a given property directly
- // on itself (in other words, not on a prototype).
- _.has = function(obj, key) {
- return obj != null && hasOwnProperty.call(obj, key);
- };
-
- // Utility Functions
- // -----------------
-
- // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
- // previous owner. Returns a reference to the Underscore object.
- _.noConflict = function() {
- root._ = previousUnderscore;
- return this;
- };
-
- // Keep the identity function around for default iteratees.
- _.identity = function(value) {
- return value;
- };
-
- _.constant = function(value) {
- return function() {
- return value;
- };
- };
-
- _.noop = function(){};
-
- _.property = function(key) {
- return function(obj) {
- return obj[key];
- };
- };
-
- // Returns a predicate for checking whether an object has a given set of `key:value` pairs.
- _.matches = function(attrs) {
- var pairs = _.pairs(attrs), length = pairs.length;
- return function(obj) {
- if (obj == null) return !length;
- obj = new Object(obj);
- for (var i = 0; i < length; i++) {
- var pair = pairs[i], key = pair[0];
- if (pair[1] !== obj[key] || !(key in obj)) return false;
- }
- return true;
- };
- };
-
- // Run a function **n** times.
- _.times = function(n, iteratee, context) {
- var accum = Array(Math.max(0, n));
- iteratee = createCallback(iteratee, context, 1);
- for (var i = 0; i < n; i++) accum[i] = iteratee(i);
- return accum;
- };
-
- // Return a random integer between min and max (inclusive).
- _.random = function(min, max) {
- if (max == null) {
- max = min;
- min = 0;
- }
- return min + Math.floor(Math.random() * (max - min + 1));
- };
-
- // A (possibly faster) way to get the current timestamp as an integer.
- _.now = Date.now || function() {
- return new Date().getTime();
- };
-
- // List of HTML entities for escaping.
- var escapeMap = {
- '&': '&amp;',
- '<': '&lt;',
- '>': '&gt;',
- '"': '&quot;',
- "'": '&#x27;',
- '`': '&#x60;'
- };
- var unescapeMap = _.invert(escapeMap);
-
- // Functions for escaping and unescaping strings to/from HTML interpolation.
- var createEscaper = function(map) {
- var escaper = function(match) {
- return map[match];
- };
- // Regexes for identifying a key that needs to be escaped
- var source = '(?:' + _.keys(map).join('|') + ')';
- var testRegexp = RegExp(source);
- var replaceRegexp = RegExp(source, 'g');
- return function(string) {
- string = string == null ? '' : '' + string;
- return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
- };
- };
- _.escape = createEscaper(escapeMap);
- _.unescape = createEscaper(unescapeMap);
-
- // If the value of the named `property` is a function then invoke it with the
- // `object` as context; otherwise, return it.
- _.result = function(object, property) {
- if (object == null) return void 0;
- var value = object[property];
- return _.isFunction(value) ? object[property]() : value;
- };
-
- // Generate a unique integer id (unique within the entire client session).
- // Useful for temporary DOM ids.
- var idCounter = 0;
- _.uniqueId = function(prefix) {
- var id = ++idCounter + '';
- return prefix ? prefix + id : id;
- };
-
- // By default, Underscore uses ERB-style template delimiters, change the
- // following template settings to use alternative delimiters.
- _.templateSettings = {
- evaluate : /<%([\s\S]+?)%>/g,
- interpolate : /<%=([\s\S]+?)%>/g,
- escape : /<%-([\s\S]+?)%>/g
- };
-
- // When customizing `templateSettings`, if you don't want to define an
- // interpolation, evaluation or escaping regex, we need one that is
- // guaranteed not to match.
- var noMatch = /(.)^/;
-
- // Certain characters need to be escaped so that they can be put into a
- // string literal.
- var escapes = {
- "'": "'",
- '\\': '\\',
- '\r': 'r',
- '\n': 'n',
- '\u2028': 'u2028',
- '\u2029': 'u2029'
- };
-
- var escaper = /\\|'|\r|\n|\u2028|\u2029/g;
-
- var escapeChar = function(match) {
- return '\\' + escapes[match];
- };
-
- // JavaScript micro-templating, similar to John Resig's implementation.
- // Underscore templating handles arbitrary delimiters, preserves whitespace,
- // and correctly escapes quotes within interpolated code.
- // NB: `oldSettings` only exists for backwards compatibility.
- _.template = function(text, settings, oldSettings) {
- if (!settings && oldSettings) settings = oldSettings;
- settings = _.defaults({}, settings, _.templateSettings);
-
- // Combine delimiters into one regular expression via alternation.
- var matcher = RegExp([
- (settings.escape || noMatch).source,
- (settings.interpolate || noMatch).source,
- (settings.evaluate || noMatch).source
- ].join('|') + '|$', 'g');
-
- // Compile the template source, escaping string literals appropriately.
- var index = 0;
- var source = "__p+='";
- text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
- source += text.slice(index, offset).replace(escaper, escapeChar);
- index = offset + match.length;
-
- if (escape) {
- source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
- } else if (interpolate) {
- source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
- } else if (evaluate) {
- source += "';\n" + evaluate + "\n__p+='";
- }
-
- // Adobe VMs need the match returned to produce the correct offest.
- return match;
- });
- source += "';\n";
-
- // If a variable is not specified, place data values in local scope.
- if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
-
- source = "var __t,__p='',__j=Array.prototype.join," +
- "print=function(){__p+=__j.call(arguments,'');};\n" +
- source + 'return __p;\n';
-
- try {
- var render = new Function(settings.variable || 'obj', '_', source);
- } catch (e) {
- e.source = source;
- throw e;
- }
-
- var template = function(data) {
- return render.call(this, data, _);
- };
-
- // Provide the compiled source as a convenience for precompilation.
- var argument = settings.variable || 'obj';
- template.source = 'function(' + argument + '){\n' + source + '}';
-
- return template;
- };
-
- // Add a "chain" function. Start chaining a wrapped Underscore object.
- _.chain = function(obj) {
- var instance = _(obj);
- instance._chain = true;
- return instance;
- };
-
- // OOP
- // ---------------
- // If Underscore is called as a function, it returns a wrapped object that
- // can be used OO-style. This wrapper holds altered versions of all the
- // underscore functions. Wrapped objects may be chained.
-
- // Helper function to continue chaining intermediate results.
- var result = function(obj) {
- return this._chain ? _(obj).chain() : obj;
- };
-
- // Add your own custom functions to the Underscore object.
- _.mixin = function(obj) {
- _.each(_.functions(obj), function(name) {
- var func = _[name] = obj[name];
- _.prototype[name] = function() {
- var args = [this._wrapped];
- push.apply(args, arguments);
- return result.call(this, func.apply(_, args));
- };
- });
- };
-
- // Add all of the Underscore functions to the wrapper object.
- _.mixin(_);
-
- // Add all mutator Array functions to the wrapper.
- _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
- var method = ArrayProto[name];
- _.prototype[name] = function() {
- var obj = this._wrapped;
- method.apply(obj, arguments);
- if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];
- return result.call(this, obj);
- };
- });
-
- // Add all accessor Array functions to the wrapper.
- _.each(['concat', 'join', 'slice'], function(name) {
- var method = ArrayProto[name];
- _.prototype[name] = function() {
- return result.call(this, method.apply(this._wrapped, arguments));
- };
- });
-
- // Extracts the result from a wrapped and chained object.
- _.prototype.value = function() {
- return this._wrapped;
- };
-
- // AMD registration happens at the end for compatibility with AMD loaders
- // that may not enforce next-turn semantics on modules. Even though general
- // practice for AMD registration is to be anonymous, underscore registers
- // as a named module because, like jQuery, it is a base library that is
- // popular enough to be bundled in a third party lib, but not be part of
- // an AMD load request. Those cases could generate an error when an
- // anonymous define() is called outside of a loader request.
- if (typeof define === 'function' && define.amd) {
- define('underscore', [], function() {
- return _;
- });
- }
-}.call(this));
-
-/*
-Ring.js
-
-Copyright (c) 2013, Nicolas Vanhoren
-
-Released under the MIT license
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-(function() {
-/* jshint es3: true, proto: true */
-"use strict";
-
-if (typeof(exports) !== "undefined") { // nodejs
- var underscore = require("underscore");
- underscore.extend(exports, declare(underscore));
-} else if (typeof(define) !== "undefined") { // amd
- define(["underscore"], declare);
-} else { // define global variable
- window.ring = declare(_);
-}
-
-
-function declare(_) {
- var ring = {};
-
- function RingObject() {}
- /**
- ring.Object
-
- The base class of all other classes. It doesn't have much uses except
- testing testing if an object uses the Ring.js class system using
- ring.instance(x, ring.Object)
- */
- ring.Object = RingObject;
- _.extend(ring.Object, {
- __mro__: [ring.Object],
- __properties__: {__ringConstructor__: function() {}},
- __classId__: 1,
- __parents__: [],
- __classIndex__: {"1": ring.Object}
- });
- _.extend(ring.Object.prototype, {
- __ringConstructor__: ring.Object.__properties__.__ringConstructor__
- });
-
- // utility function to have Object.create on all browsers
- var objectCreate = function(o) {
- function CreatedObject(){}
- CreatedObject.prototype = o;
- var tmp = new CreatedObject();
- tmp.__proto__ = o;
- return tmp;
- };
- ring.__objectCreate = objectCreate;
-
- var classCounter = 3;
- var fnTest = /xyz/.test(function(){xyz();}) ? /\$super\b/ : /.*/;
-
- /**
- ring.create([parents,] properties)
-
- Creates a new class and returns it.
-
- properties is a dictionary of the methods and attributes that should
- be added to the new class' prototype.
-
- parents is a list of the classes this new class should extend. If not
- specified or an empty list is specified this class will inherit from one
- class: ring.Object.
- */
- ring.create = function() {
- // arguments parsing
- var args = _.toArray(arguments);
- args.reverse();
- var props = args[0];
- var parents = args.length >= 2 ? args[1] : [];
- if (! (parents instanceof Array))
- parents = [parents];
- _.each(parents, function(el) {
- toRingClass(el);
- });
- if (parents.length === 0)
- parents = [ring.Object];
- // constructor handling
- var cons = props.constructor !== Object ? props.constructor : undefined;
- props = _.clone(props);
- delete props.constructor;
- if (cons)
- props.__ringConstructor__ = cons;
- else { //retro compatibility
- cons = props.init;
- delete props.init;
- if (cons)
- props.__ringConstructor__ = cons;
- }
- // create real class
- var claz = function Instance() {
- this.$super = null;
- this.__ringConstructor__.apply(this, arguments);
- };
- claz.__properties__ = props;
- // mro creation
- var toMerge = _.pluck(parents, "__mro__");
- toMerge = toMerge.concat([parents]);
- var __mro__ = [claz].concat(mergeMro(toMerge));
- //generate prototype
- var prototype = Object.prototype;
- _.each(_.clone(__mro__).reverse(), function(claz) {
- var current = objectCreate(prototype);
- _.extend(current, claz.__properties__);
- _.each(_.keys(current), function(key) {
- var p = current[key];
- if (typeof p !== "function" || ! fnTest.test(p) || p.__classId__ ||
- (key !== "__ringConstructor__" && claz.__ringConvertedObject__))
- return;
- current[key] = (function(name, fct, supProto) {
- return function() {
- var tmp = this.$super;
- this.$super = supProto[name];
- try {
- return fct.apply(this, arguments);
- } finally {
- this.$super = tmp;
- }
- };
- })(key, p, prototype);
- });
- current.constructor = claz;
- prototype = current;
- });
- // remaining operations
- var id = classCounter++;
- claz.__mro__ = __mro__;
- claz.__parents__ = parents;
- claz.prototype = prototype;
- claz.__classId__ = id;
- // construct classes index
- claz.__classIndex__ = {};
- _.each(claz.__mro__, function(c) {
- claz.__classIndex__[c.__classId__] = c;
- });
- // class init
- if (claz.prototype.classInit) {
- claz.__classInit__ = claz.prototype.classInit;
- delete claz.prototype.classInit;
- }
- _.each(_.chain(claz.__mro__).clone().reverse().value(), function(c) {
- if (c.__classInit__) {
- var ret = c.__classInit__(claz.prototype);
- if (ret !== undefined)
- claz.prototype = ret;
- }
- });
-
- return claz;
- };
-
- var mergeMro = function(toMerge) {
- /* jshint loopfunc:true */
- // C3 merge() implementation
- var __mro__ = [];
- var current = _.clone(toMerge);
- while (true) {
- var found = false;
- for (var i=0; i < current.length; i++) {
- if (current[i].length === 0)
- continue;
- var currentClass = current[i][0];
- var isInTail = _.find(current, function(lst) {
- return _.contains(_.rest(lst), currentClass);
- });
- if (! isInTail) {
- found = true;
- __mro__.push(currentClass);
- current = _.map(current, function(lst) {
- if (_.head(lst) === currentClass)
- return _.rest(lst);
- else
- return lst;
- });
- break;
- }
- }
- if (found)
- continue;
- if (_.all(current, function(i) { return i.length === 0; }))
- return __mro__;
- throw new ring.ValueError("Cannot create a consistent method resolution order (MRO)");
- }
- };
-
- /**
- Convert an existing class to be used with the ring.js class system.
- */
- var toRingClass = function(claz) {
- if (claz.__classId__)
- return;
- var proto = ! Object.getOwnPropertyNames ? claz.prototype : (function() {
- var keys = {};
- (function crawl(p) {
- if (p === Object.prototype)
- return;
- _.extend(keys, _.chain(Object.getOwnPropertyNames(p))
- .map(function(el) {return [el, true];})
- .object().value());
- crawl(Object.getPrototypeOf(p));
- })(claz.prototype);
- return _.object(_.map(_.keys(keys), function(k) {return [k, claz.prototype[k]];}));
- })();
- proto = _.chain(proto).map(function(v, k) { return [k, v]; })
- .filter(function(el) {return el[0] !== "constructor" && el[0] !== "__proto__";})
- .object().value();
- var id = classCounter++;
- _.extend(claz, {
- __mro__: [claz, ring.Object],
- __properties__: _.extend({}, proto, {
- __ringConstructor__: function() {
- this.$super.apply(this, arguments);
- var tmp = this.$super;
- this.$super = null;
- try {
- claz.apply(this, arguments);
- } finally {
- this.$super = tmp;
- }
- }
- }),
- __classId__: id,
- __parents__: [ring.Object],
- __classIndex__: {"1": ring.Object},
- __ringConvertedObject__: true
- });
- claz.__classIndex__[id] = claz;
- };
-
- /**
- ring.instance(obj, type)
-
- Returns true if obj is an instance of type or an instance of a sub-class of type.
-
- It is necessary to use this method instead of instanceof when using the Ring.js class
- system because instanceof will not be able to detect sub-classes.
-
- If used with obj or type that do not use the Ring.js class system this method will
- use instanceof instead. So it should be safe to replace all usages of instanceof
- by ring.instance() in any program, whether or not it uses Ring.js.
-
- Additionaly this method allows to test the type of simple JavaScript types like strings.
- To do so, pass a string instead of a type as second argument. Examples:
-
- ring.instance("", "string") // returns true
- ring.instance(function() {}, "function") // returns true
- ring.instance({}, "object") // returns true
- ring.instance(1, "number") // returns true
- */
- ring.instance = function(obj, type) {
- if (obj !== null && typeof(obj) === "object" && obj.constructor && obj.constructor.__classIndex__ &&
- typeof(type) === "function" && typeof(type.__classId__) === "number") {
- return obj.constructor.__classIndex__[type.__classId__] !== undefined;
- }
- if (typeof(type) === "string")
- return typeof(obj) === type;
- return obj instanceof type;
- };
-
- /**
- A class to easily create new classes representing exceptions. This class is special
- because it is a sub-class of the standard Error class of JavaScript. Examples:
-
- ring.instance(e, Error)
-
- e instanceof Error
-
- This two expressions will always be true if e is an instance of ring.Error or any
- sub-class of ring.Error.
-
- */
- ring.Error = ring.create({
- /**
- The name attribute is used in the default implementation of the toString() method
- of the standard JavaScript Error class. According to the standard, all sub-classes
- of Error should define a new name.
- */
- name: "ring.Error",
- /**
- A default message to use in instances of this class if there is no arguments given
- to the constructor.
- */
- defaultMessage: "",
- /**
- Constructor arguments:
-
- message: The message to put in the instance. If there is no message specified, the
- message will be this.defaultMessage.
- */
- constructor: function(message) {
- this.message = message || this.defaultMessage;
- },
- classInit: function(prototype) {
- // some black magic to reconstitute a complete prototype chain
- // with Error at the end
- var protos = [];
- var gather = function(proto) {
- if (! proto)
- return;
- protos.push(proto);
- gather(proto.__proto__);
- };
- gather(prototype);
- var current = new Error();
- _.each(_.clone(protos).reverse(), function(proto) {
- var tmp = objectCreate(current);
- // using _.each to avoid traversing prototypes
- _.each(proto, function(v, k) {
- if (k !== "__proto__")
- tmp[k] = v;
- });
- current = tmp;
- });
- return current;
- }
- });
-
- /**
- A type of exception to inform that a method received an argument with an incorrect value.
- */
- ring.ValueError = ring.create([ring.Error], {
- name: "ring.ValueError"
- });
-
- /**
- This method allows to find the super of a method when that method has been re-defined
- in a child class.
-
- Contrary to this.$super(), this function allows to find a super method in another method
- than the re-defining one. Example:
-
- var A = ring.create({
- fctA: function() {...};
- });
-
- var B = ring.create([A], {
- fctA: function() {...};
- fctB: function() {
- ring.getSuper(B, this, "fctA")(); // here we call the original fctA() method
- // as it was defined in the A class
- };
- });
-
- This method is much slower than this.$super(), so this.$super() should always be
- preferred when it is possible to use it.
-
- Arguments:
-
- * currentClass: The current class. It is necessary to specify it for this function
- to work properly.
- * obj: The current object (this in most cases).
- * attributeName: The name of the desired attribute as it appeared in the base class.
-
- Returns the attribute as it was defined in the base class. If that attribute is a function,
- it will be binded to obj.
- */
- ring.getSuper = function(currentClass, obj, attributeName) {
- var pos;
- var __mro__ = obj.constructor.__mro__;
- for (var i = 0; i < __mro__.length; i++) {
- if (__mro__[i] === currentClass) {
- pos = i;
- break;
- }
- }
- if (pos === undefined)
- throw new ring.ValueError("Class not found in instance's method resolution order.");
- var find = function(proto, counter) {
- if (counter === 0)
- return proto;
- return find(proto.__proto__, counter - 1);
- };
- var proto = find(obj.constructor.prototype, pos + 1);
- var att;
- if (attributeName !== "constructor" && attributeName !== "init") // retro compatibility
- att = proto[attributeName];
- else
- att = proto.__ringConstructor__;
- if (ring.instance(att, "function"))
- return _.bind(att, obj);
- else
- return att;
- };
-
- return ring;
-}
-})();
-
-/**
- * @fileoverview JSJaC Jingle library - Header
- *
- * @url https://github.com/valeriansaliou/jsjac-jingle
- * @depends https://github.com/sstrigler/JSJaC
- * @author Valérian Saliou https://valeriansaliou.name/
- * @license Mozilla Public License v2.0 (MPL v2.0)
- */
-
-
-/** @module jsjac-jingle/header */
-
-
-/**
- * Implements:
- *
- * See the PROTOCOL.md file for a list of supported protocol extensions
- *
- *
- * Workflow:
- *
- * This negotiation example associates JSJaCJingle.js methods to a real workflow
- * We assume in this workflow example remote user accepts the call he gets
- *
- * 1.cmt Local user wants to start a WebRTC session with remote user
- * 1.snd Local user sends a session-initiate type='set'
- * 1.hdl Remote user sends back a type='result' to '1.snd' stanza (ack)
- *
- * 2.cmt Local user waits silently for remote user to send a session-accept
- * 2.hdl Remote user sends a session-accept type='set'
- * 2.snd Local user sends back a type='result' to '2.hdl' stanza (ack)
- *
- * 3.cmt WebRTC session starts
- * 3.cmt Users chat, and chat, and chat. Happy Jabbering to them!
- *
- * 4.cmt Local user wants to stop WebRTC session with remote user
- * 4.snd Local user sends a session-terminate type='set'
- * 4.hdl Remote user sends back a type='result' to '4.snd' stanza (ack)
- */
-/**
- * @fileoverview JSJaC Jingle library - Constants map
- *
- * @url https://github.com/valeriansaliou/jsjac-jingle
- * @depends https://github.com/sstrigler/JSJaC
- * @author Valérian Saliou https://valeriansaliou.name/
- * @license Mozilla Public License v2.0 (MPL v2.0)
- */
-
-
-/** @module jsjac-jingle/constants */
-
-
-/**
- * JINGLE WEBRTC
- */
-
-/**
- * @constant
- * @global
- * @type {Function}
- * @readonly
- * @default
- * @public
- */
-var WEBRTC_GET_MEDIA = ( navigator.webkitGetUserMedia ||
- navigator.mozGetUserMedia ||
- navigator.msGetUserMedia ||
- navigator.getUserMedia );
-
-/**
- * @constant
- * @global
- * @type {Function}
- * @readonly
- * @default
- * @public
- */
-var WEBRTC_PEER_CONNECTION = ( window.webkitRTCPeerConnection ||
- window.mozRTCPeerConnection ||
- window.RTCPeerConnection );
-
-/**
- * @constant
- * @global
- * @type {Function}
- * @readonly
- * @default
- * @public
- */
-var WEBRTC_SESSION_DESCRIPTION = ( window.mozRTCSessionDescription ||
- window.RTCSessionDescription );
-
-/**
- * @constant
- * @global
- * @type {Function}
- * @readonly
- * @default
- * @public
- */
-var WEBRTC_ICE_CANDIDATE = ( window.mozRTCIceCandidate ||
- window.RTCIceCandidate );
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var WEBRTC_CONFIGURATION = {
- peer_connection : {
- config : {
- iceServers : [{
- url: 'stun:stun.jappix.com'
- }]
- },
-
- constraints : {
- optional : [{
- 'DtlsSrtpKeyAgreement': true
- }]
- }
- },
-
- create_offer : {
- mandatory: {
- 'OfferToReceiveAudio' : true,
- 'OfferToReceiveVideo' : true
- }
- },
-
- create_answer : {
- mandatory: {
- 'OfferToReceiveAudio' : true,
- 'OfferToReceiveVideo' : true
- }
- }
-};
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var WEBRTC_SDP_LINE_BREAK = '\r\n';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var WEBRTC_SDP_TYPE_OFFER = 'offer';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var WEBRTC_SDP_TYPE_ANSWER = 'answer';
-
-/**
- * @constant
- * @global
- * @type {RegExp}
- * @readonly
- * @default
- * @public
- */
-var R_WEBRTC_SHORT_CANDIDATE = 'candidate:(\\w{1,32}) (\\d{1,5}) (udp|tcp) (\\d{1,10}) ([a-zA-Z0-9:\\.]{1,45}) (\\d{1,5}) (typ) (host|srflx|prflx|relay)( (raddr) ([a-zA-Z0-9:\\.]{1,45}) (rport) (\\d{1,5}))?( (generation) (\\d))?';
-
-/**
- * @constant
- * @global
- * @type {RegExp}
- * @readonly
- * @default
- * @public
- */
-var R_WEBRTC_DATA_CANDIDATE = new RegExp('^(?:a=)?' + R_WEBRTC_SHORT_CANDIDATE, 'i');
-
-/**
- * @constant
- * @global
- * @type {RegExp}
- * @readonly
- * @default
- * @public
- */
-var R_WEBRTC_SDP_CANDIDATE = new RegExp('^a=' + R_WEBRTC_SHORT_CANDIDATE, 'i');
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var R_WEBRTC_SDP_ICE_PAYLOAD = {
- rtpmap : /^a=rtpmap:(\d+) (([^\s\/]+)\/(\d+)(\/([^\s\/]+))?)?/i,
- fmtp : /^a=fmtp:(\d+) (.+)/i,
- group : /^a=group:(\S+) (.+)/,
- rtcp_fb : /^a=rtcp-fb:(\S+) (\S+)( (\S+))?/i,
- rtcp_fb_trr_int : /^a=rtcp-fb:(\d+) trr-int (\d+)/i,
- pwd : /^a=ice-pwd:(\S+)/i,
- ufrag : /^a=ice-ufrag:(\S+)/i,
- ptime : /^a=ptime:(\d+)/i,
- maxptime : /^a=maxptime:(\d+)/i,
- ssrc : /^a=ssrc:(\d+) (\w+)(:(.+))?/i,
- ssrc_group : /^a=ssrc-group:(\S+) ([\d ]+)/i,
- rtcp_mux : /^a=rtcp-mux/i,
- crypto : /^a=crypto:(\d{1,9}) (\S+) (\S+)( (\S+))?/i,
- zrtp_hash : /^a=zrtp-hash:(\S+) (\S+)/i,
- fingerprint : /^a=fingerprint:(\S+) (\S+)/i,
- setup : /^a=setup:(\S+)/i,
- extmap : /^a=extmap:([^\s\/]+)(\/([^\s\/]+))? (\S+)/i,
- bandwidth : /^b=(\w+):(\d+)/i,
- media : /^m=(audio|video|application|data) /i
-};
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var R_NETWORK_PROTOCOLS = {
- stun: /^stun:/i
-};
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var R_NETWORK_IP = {
- all: {
- v4: /((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])/,
- v6: /^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i
- },
-
- lan: {
- v4: /(^127\.0\.0\.1)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)/,
- v6: /((::1)|(^fe80::))(.+)?/i
- }
-};
-
-/**
- * @constant
- * @global
- * @type {RegExp}
- * @readonly
- * @default
- * @public
- */
-var R_JSJAC_JINGLE_SERVICE_URI = /^(\w+):([^:\?]+)(?::(\d+))?(?:\?transport=(\w+))?/i;
-
-
-/**
- * JINGLE NAMESPACES
- */
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JINGLE = 'urn:xmpp:jingle:1';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JINGLE_ERRORS = 'urn:xmpp:jingle:errors:1';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JINGLE_APPS_RTP = 'urn:xmpp:jingle:apps:rtp:1';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JINGLE_APPS_RTP_INFO = 'urn:xmpp:jingle:apps:rtp:info:1';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JINGLE_APPS_RTP_AUDIO = 'urn:xmpp:jingle:apps:rtp:audio';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JINGLE_APPS_RTP_VIDEO = 'urn:xmpp:jingle:apps:rtp:video';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JINGLE_APPS_RTP_RTP_HDREXT = 'urn:xmpp:jingle:apps:rtp:rtp-hdrext:0';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JINGLE_APPS_RTP_RTCP_FB = 'urn:xmpp:jingle:apps:rtp:rtcp-fb:0';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JINGLE_APPS_RTP_ZRTP = 'urn:xmpp:jingle:apps:rtp:zrtp:1';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JINGLE_APPS_RTP_SSMA = 'urn:xmpp:jingle:apps:rtp:ssma:0';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JINGLE_APPS_STUB = 'urn:xmpp:jingle:apps:stub:0';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JINGLE_APPS_DTLS = 'urn:xmpp:tmp:jingle:apps:dtls:0';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JINGLE_APPS_GROUPING = 'urn:xmpp:jingle:apps:grouping:0';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JINGLE_TRANSPORTS_RAWUDP = 'urn:xmpp:jingle:transports:raw-udp:1';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JINGLE_TRANSPORTS_ICEUDP = 'urn:xmpp:jingle:transports:ice-udp:1';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JINGLE_TRANSPORTS_STUB = 'urn:xmpp:jingle:transports:stub:0';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JINGLE_SECURITY_STUB = 'urn:xmpp:jingle:security:stub:0';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JINGLE_MESSAGE = 'urn:xmpp:jingle-message:0';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JABBER_JINGLENODES = 'http://jabber.org/protocol/jinglenodes';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JABBER_JINGLENODES_CHANNEL = 'http://jabber.org/protocol/jinglenodes#channel';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JABBER_MUC = 'http://jabber.org/protocol/muc';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JABBER_MUC_OWNER = 'http://jabber.org/protocol/muc#owner';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JABBER_MUC_ROOMCONFIG = 'http://jabber.org/protocol/muc#roomconfig';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JABBER_MUC_USER = 'http://jabber.org/protocol/muc#user';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JABBER_CONFERENCE = 'jabber:x:conference';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_JABBER_DATA = 'jabber:x:data';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_MUJI = 'urn:xmpp:muji:tmp';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_MUJI_INVITE = 'urn:xmpp:muji:invite:tmp';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_EXTDISCO = 'urn:xmpp:extdisco:1';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_IETF_XMPP_STANZAS = 'urn:ietf:params:xml:ns:xmpp-stanzas';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_IETF_RFC_3264 = 'urn:ietf:rfc:3264';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_IETF_RFC_5576 = 'urn:ietf:rfc:5576';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var NS_IETF_RFC_5888 = 'urn:ietf:rfc:5888';
-
-/**
- * @constant
- * @global
- * @type {RegExp}
- * @readonly
- * @default
- * @public
- */
-var R_NS_JINGLE_APP = /^urn:xmpp:jingle:app:(\w+)(:(\w+))?(:(\d+))?$/;
-
-/**
- * @constant
- * @global
- * @type {RegExp}
- * @readonly
- * @default
- * @public
- */
-var R_NS_JINGLE_TRANSPORT = /^urn:xmpp:jingle:transport:(\w+)$/;
-
-/**
- * @constant
- * @global
- * @type {Array}
- * @readonly
- * @default
- * @public
- */
-var MAP_DISCO_JINGLE = [
- /* http://xmpp.org/extensions/xep-0166.html#support */
- /* http://xmpp.org/extensions/xep-0167.html#support */
- NS_JINGLE,
- NS_JINGLE_APPS_RTP,
- NS_JINGLE_APPS_RTP_AUDIO,
- NS_JINGLE_APPS_RTP_VIDEO,
-
- /* http://xmpp.org/extensions/xep-0177.html */
- NS_JINGLE_TRANSPORTS_RAWUDP,
-
- /* http://xmpp.org/extensions/xep-0176.html#support */
- NS_JINGLE_TRANSPORTS_ICEUDP,
- NS_IETF_RFC_3264,
-
- /* http://xmpp.org/extensions/xep-0339.html#disco */
- NS_IETF_RFC_5576,
-
- /* http://xmpp.org/extensions/xep-0338.html#disco */
- NS_IETF_RFC_5888,
-
- /* http://xmpp.org/extensions/xep-0293.html#determining-support */
- NS_JINGLE_APPS_RTP_RTCP_FB,
-
- /* http://xmpp.org/extensions/xep-0294.html#determining-support */
- NS_JINGLE_APPS_RTP_RTP_HDREXT,
-
- /* http://xmpp.org/extensions/xep-0320.html#disco */
- NS_JINGLE_APPS_DTLS,
-
- /* http://xmpp.org/extensions/xep-0262.html */
- NS_JINGLE_APPS_RTP_ZRTP,
-
- /* http://xmpp.org/extensions/xep-0353.html */
- NS_JINGLE_MESSAGE,
-
- /* http://xmpp.org/extensions/xep-0278.html */
- NS_JABBER_JINGLENODES,
-
- /* http://xmpp.org/extensions/xep-0215.html */
- NS_EXTDISCO
-];
-
-
-/**
- * @constant
- * @global
- * @type {Array}
- * @readonly
- * @default
- * @public
- */
-var MAP_DISCO_MUJI = [
- /* http://xmpp.org/extensions/xep-0272.html */
- NS_MUJI,
-
- /* http://xmpp.org/extensions/xep-0272.html#inviting */
- NS_MUJI_INVITE,
-
- /* http://xmpp.org/extensions/xep-0249.html */
- NS_JABBER_CONFERENCE
-];
-
-
-
-/**
- * JSJAC JINGLE CONSTANTS
- */
-
-/**
- * @constant
- * @global
- * @type {Boolean}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_AVAILABLE = WEBRTC_GET_MEDIA ? true : false;
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SESSION_SINGLE = 'single';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SESSION_MUJI = 'muji';
-
-/**
- * @constant
- * @global
- * @type {Number}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_PEER_TIMEOUT_DEFAULT = 15;
-
-/**
- * @constant
- * @global
- * @type {Number}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_PEER_TIMEOUT_DISCONNECT = 5;
-
-/**
- * @constant
- * @global
- * @type {Number}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MEDIA_READYSTATE_UNINITIALIZED = 0;
-
-/**
- * @constant
- * @global
- * @type {Number}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MEDIA_READYSTATE_LOADING = 1;
-
-/**
- * @constant
- * @global
- * @type {Number}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MEDIA_READYSTATE_LOADED = 2;
-
-/**
- * @constant
- * @global
- * @type {Number}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MEDIA_READYSTATE_INTERACTIVE = 3;
-
-/**
- * @constant
- * @global
- * @type {Number}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MEDIA_READYSTATE_COMPLETED = 4;
-
-/**
- * @constant
- * @global
- * @type {Number}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_STANZA_TIMEOUT = 10;
-
-/**
- * @constant
- * @global
- * @type {Number}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_BROADCAST_TIMEOUT = 30;
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_STANZA_ID_PRE = 'jj';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_NETWORK = '0';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_GENERATION = '0';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_DIRECTION_LOCAL = 'local';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_DIRECTION_REMOTE = 'remote';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_BROWSER_FIREFOX = 'Firefox';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_BROWSER_CHROME = 'Chrome';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_BROWSER_SAFARI = 'Safari';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_BROWSER_OPERA = 'Opera';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_BROWSER_IE = 'IE';
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SENDERS_BOTH = { jingle: 'both', sdp: 'sendrecv' };
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SENDERS_INITIATOR = { jingle: 'initiator', sdp: 'sendonly' };
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SENDERS_NONE = { jingle: 'none', sdp: 'inactive' };
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SENDERS_RESPONDER = { jingle: 'responder', sdp: 'recvonly' };
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_CREATOR_INITIATOR = 'initiator';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_CREATOR_RESPONDER = 'responder';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_STATUS_INACTIVE = 'inactive';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_STATUS_INITIATING = 'initiating';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_STATUS_INITIATED = 'initiated';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_STATUS_ACCEPTING = 'accepting';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_STATUS_ACCEPTED = 'accepted';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_STATUS_TERMINATING = 'terminating';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_STATUS_TERMINATED = 'terminated';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ACTION_CONTENT_ACCEPT = 'content-accept';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ACTION_CONTENT_ADD = 'content-add';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ACTION_CONTENT_MODIFY = 'content-modify';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ACTION_CONTENT_REJECT = 'content-reject';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ACTION_CONTENT_REMOVE = 'content-remove';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ACTION_DESCRIPTION_INFO = 'description-info';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ACTION_SECURITY_INFO = 'security-info';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ACTION_SESSION_ACCEPT = 'session-accept';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ACTION_SESSION_INFO = 'session-info';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ACTION_SESSION_INITIATE = 'session-initiate';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ACTION_SESSION_TERMINATE = 'session-terminate';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ACTION_TRANSPORT_ACCEPT = 'transport-accept';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ACTION_TRANSPORT_INFO = 'transport-info';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ACTION_TRANSPORT_REJECT = 'transport-reject';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ACTION_TRANSPORT_REPLACE = 'transport-replace';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MESSAGE_ACTION_PROPOSE = 'propose';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MESSAGE_ACTION_RETRACT = 'retract';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MESSAGE_ACTION_ACCEPT = 'accept';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MESSAGE_ACTION_PROCEED = 'proceed';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MESSAGE_ACTION_REJECT = 'reject';
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ERROR_OUT_OF_ORDER = { jingle: 'out-of-order', xmpp: 'unexpected-request', type: 'wait' };
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ERROR_TIE_BREAK = { jingle: 'tie-break', xmpp: 'conflict', type: 'cancel' };
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ERROR_UNKNOWN_SESSION = { jingle: 'unknown-session', xmpp: 'item-not-found', type: 'cancel' };
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ERROR_UNSUPPORTED_INFO = { jingle: 'unsupported-info', xmpp: 'feature-not-implemented', type: 'modify' };
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ERROR_SECURITY_REQUIRED = { jingle: 'security-required', xmpp: 'not-acceptable', type: 'cancel' };
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var XMPP_ERROR_UNEXPECTED_REQUEST = { xmpp: 'unexpected-request', type: 'wait' };
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var XMPP_ERROR_CONFLICT = { xmpp: 'conflict', type: 'cancel' };
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var XMPP_ERROR_ITEM_NOT_FOUND = { xmpp: 'item-not-found', type: 'cancel' };
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var XMPP_ERROR_NOT_ACCEPTABLE = { xmpp: 'not-acceptable', type: 'modify' };
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var XMPP_ERROR_NOT_AUTHORIZED = { xmpp: 'not-authorized', type: 'auth' };
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var XMPP_ERROR_FEATURE_NOT_IMPLEMENTED = { xmpp: 'feature-not-implemented', type: 'cancel' };
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var XMPP_ERROR_SERVICE_UNAVAILABLE = { xmpp: 'service-unavailable', type: 'cancel' };
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var XMPP_ERROR_REDIRECT = { xmpp: 'redirect', type: 'modify' };
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var XMPP_ERROR_RESOURCE_CONSTRAINT = { xmpp: 'resource-constraint', type: 'wait' };
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var XMPP_ERROR_BAD_REQUEST = { xmpp: 'bad-request', type: 'cancel' };
-
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_REASON_ALTERNATIVE_SESSION = 'alternative-session';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_REASON_BUSY = 'busy';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_REASON_CANCEL = 'cancel';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_REASON_CONNECTIVITY_ERROR = 'connectivity-error';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_REASON_DECLINE = 'decline';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_REASON_EXPIRED = 'expired';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_REASON_FAILED_APPLICATION = 'failed-application';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_REASON_FAILED_TRANSPORT = 'failed-transport';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_REASON_GENERAL_ERROR = 'general-error';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_REASON_GONE = 'gone';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_REASON_INCOMPATIBLE_PARAMETERS = 'incompatible-parameters';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_REASON_MEDIA_ERROR = 'media-error';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_REASON_SECURITY_ERROR = 'security-error';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_REASON_SUCCESS = 'success';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_REASON_TIMEOUT = 'timeout';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_REASON_UNSUPPORTED_APPLICATIONS = 'unsupported-applications';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_REASON_UNSUPPORTED_TRANSPORTS = 'unsupported-transports';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SESSION_INFO_ACTIVE = 'active';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SESSION_INFO_HOLD = 'hold';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SESSION_INFO_MUTE = 'mute';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SESSION_INFO_RINGING = 'ringing';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SESSION_INFO_UNHOLD = 'unhold';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SESSION_INFO_UNMUTE = 'unmute';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MEDIA_AUDIO = 'audio';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MEDIA_VIDEO = 'video';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_VIDEO_SOURCE_CAMERA = 'camera';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_VIDEO_SOURCE_SCREEN = 'screen';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_STANZA_IQ = 'iq';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_STANZA_MESSAGE = 'message';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_STANZA_PRESENCE = 'presence';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MESSAGE_TYPE_ALL = 'all';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MESSAGE_TYPE_NORMAL = 'normal';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MESSAGE_TYPE_CHAT = 'chat';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MESSAGE_TYPE_HEADLINE = 'headline';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MESSAGE_TYPE_GROUPCHAT = 'groupchat';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MESSAGE_TYPE_ERROR = 'error';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_PRESENCE_TYPE_ALL = 'all';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_PRESENCE_TYPE_AVAILABLE = 'available';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_PRESENCE_TYPE_UNAVAILABLE = 'unavailable';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_PRESENCE_TYPE_ERROR = 'error';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_IQ_TYPE_ALL = 'all';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_IQ_TYPE_RESULT = 'result';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_IQ_TYPE_SET = 'set';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_IQ_TYPE_GET = 'get';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_IQ_TYPE_ERROR = 'error';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ICE_CONNECTION_STATE_NEW = 'new';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ICE_CONNECTION_STATE_CHECKING = 'checking';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ICE_CONNECTION_STATE_CONNECTED = 'connected';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ICE_CONNECTION_STATE_COMPLETED = 'completed';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ICE_CONNECTION_STATE_FAILED = 'failed';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ICE_CONNECTION_STATE_DISCONNECTED = 'disconnected';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ICE_CONNECTION_STATE_CLOSED = 'closed';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_TYPE_HOST = 'host';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_TYPE_SRFLX = 'srflx';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_TYPE_PRFLX = 'prflx';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_TYPE_RELAY = 'relay';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_METHOD_ICE = 'ice';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_METHOD_RAW = 'raw';
-
-/**
- * @constant
- * @global
- * @type {Array}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_MAP_ICEUDP = [
- { n: 'component', r: 1 },
- { n: 'foundation', r: 1 },
- { n: 'generation', r: 1 },
- { n: 'id', r: 1 },
- { n: 'ip', r: 1 },
- { n: 'network', r: 1 },
- { n: 'port', r: 1 },
- { n: 'priority', r: 1 },
- { n: 'protocol', r: 1 },
- { n: 'rel-addr', r: 0 },
- { n: 'rel-port', r: 0 },
- { n: 'type', r: 1 }
-];
-
-/**
- * @constant
- * @global
- * @type {Array}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_MAP_RAWUDP = [
- { n: 'component', r: 1 },
- { n: 'generation', r: 1 },
- { n: 'id', r: 1 },
- { n: 'ip', r: 1 },
- { n: 'port', r: 1 },
- { n: 'type', r: 1 }
-];
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_SCOPE_LOCAL = 'IN';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_SCOPE_REMOTE = 'IN';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_IPVERSION_V4 = 'IP4';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_IPVERSION_V6 = 'IP6';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_PROTOCOL_TCP = 'tcp';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_PROTOCOL_UDP = 'udp';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_IP_V4 = '0.0.0.0';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_IP_V6 = '::';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_IP_DEFAULT = JSJAC_JINGLE_SDP_CANDIDATE_IP_V4;
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_PORT_DEFAULT = '1';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_SCOPE_DEFAULT = JSJAC_JINGLE_SDP_CANDIDATE_SCOPE_REMOTE;
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_IPVERSION_DEFAULT = JSJAC_JINGLE_SDP_CANDIDATE_IPVERSION_V4;
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_PROTOCOL_DEFAULT = JSJAC_JINGLE_SDP_CANDIDATE_PROTOCOL_UDP;
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_PRIORITY_DEFAULT = '1';
-
-
-
-/**
- * JSJAC JINGLE MUJI CONSTANTS
- */
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_ACTION_PREPARE = 'prepare';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_ACTION_INITIATE = 'initiate';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_ACTION_LEAVE = 'leave';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_STATUS_INACTIVE = 'inactive';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_STATUS_PREPARING = 'preparing';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_STATUS_PREPARED = 'prepared';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_STATUS_INITIATING = 'initiating';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_STATUS_INITIATED = 'initiated';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_STATUS_LEAVING = 'leaving';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_STATUS_LEFT = 'left';
-
-/**
- * @constant
- * @global
- * @type {Number}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_INITIATE_WAIT = 2;
-
-/**
- * @constant
- * @global
- * @type {Number}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_LEAVE_WAIT = 1;
-
-/**
- * @constant
- * @global
- * @type {Number}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_PARTICIPANT_ACCEPT_WAIT = 0.250;
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_HANDLER_GET_USER_MEDIA = 'get_user_media';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_MUC_AFFILIATION_ADMIN = 'admin';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_MUC_AFFILIATION_MEMBER = 'member';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_MUC_AFFILIATION_NONE = 'none';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_MUC_AFFILIATION_OUTCAST = 'outcast';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_MUC_AFFILIATION_OWNER = 'owner';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_MUC_OWNER_SUBMIT = 'submit';
-
-/**
- * @constant
- * @global
- * @type {String}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_MUC_CONFIG_SECRET = 'muc#roomconfig_roomsecret';
-
-
-
-/**
- * JSJSAC JINGLE CONSTANTS MAPPING
- */
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ICE_CONNECTION_STATES = {};
-JSJAC_JINGLE_ICE_CONNECTION_STATES[JSJAC_JINGLE_ICE_CONNECTION_STATE_NEW] = 1;
-JSJAC_JINGLE_ICE_CONNECTION_STATES[JSJAC_JINGLE_ICE_CONNECTION_STATE_CHECKING] = 1;
-JSJAC_JINGLE_ICE_CONNECTION_STATES[JSJAC_JINGLE_ICE_CONNECTION_STATE_CONNECTED] = 1;
-JSJAC_JINGLE_ICE_CONNECTION_STATES[JSJAC_JINGLE_ICE_CONNECTION_STATE_COMPLETED] = 1;
-JSJAC_JINGLE_ICE_CONNECTION_STATES[JSJAC_JINGLE_ICE_CONNECTION_STATE_FAILED] = 1;
-JSJAC_JINGLE_ICE_CONNECTION_STATES[JSJAC_JINGLE_ICE_CONNECTION_STATE_DISCONNECTED] = 1;
-JSJAC_JINGLE_ICE_CONNECTION_STATES[JSJAC_JINGLE_ICE_CONNECTION_STATE_CLOSED] = 1;
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SDP_CANDIDATE_TYPES = {};
-JSJAC_JINGLE_SDP_CANDIDATE_TYPES[JSJAC_JINGLE_SDP_CANDIDATE_TYPE_HOST] = JSJAC_JINGLE_SDP_CANDIDATE_METHOD_ICE;
-JSJAC_JINGLE_SDP_CANDIDATE_TYPES[JSJAC_JINGLE_SDP_CANDIDATE_TYPE_SRFLX] = JSJAC_JINGLE_SDP_CANDIDATE_METHOD_ICE;
-JSJAC_JINGLE_SDP_CANDIDATE_TYPES[JSJAC_JINGLE_SDP_CANDIDATE_TYPE_PRFLX] = JSJAC_JINGLE_SDP_CANDIDATE_METHOD_ICE;
-JSJAC_JINGLE_SDP_CANDIDATE_TYPES[JSJAC_JINGLE_SDP_CANDIDATE_TYPE_RELAY] = JSJAC_JINGLE_SDP_CANDIDATE_METHOD_RAW;
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_BROWSERS = {};
-JSJAC_JINGLE_BROWSERS[JSJAC_JINGLE_BROWSER_FIREFOX] = 1;
-JSJAC_JINGLE_BROWSERS[JSJAC_JINGLE_BROWSER_CHROME] = 1;
-JSJAC_JINGLE_BROWSERS[JSJAC_JINGLE_BROWSER_SAFARI] = 1;
-JSJAC_JINGLE_BROWSERS[JSJAC_JINGLE_BROWSER_OPERA] = 1;
-JSJAC_JINGLE_BROWSERS[JSJAC_JINGLE_BROWSER_IE] = 1;
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SENDERS = {};
-JSJAC_JINGLE_SENDERS[JSJAC_JINGLE_SENDERS_BOTH.jingle] = JSJAC_JINGLE_SENDERS_BOTH.sdp;
-JSJAC_JINGLE_SENDERS[JSJAC_JINGLE_SENDERS_INITIATOR.jingle] = JSJAC_JINGLE_SENDERS_INITIATOR.sdp;
-JSJAC_JINGLE_SENDERS[JSJAC_JINGLE_SENDERS_NONE.jingle] = JSJAC_JINGLE_SENDERS_NONE.sdp;
-JSJAC_JINGLE_SENDERS[JSJAC_JINGLE_SENDERS_RESPONDER.jingle] = JSJAC_JINGLE_SENDERS_RESPONDER.sdp;
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_CREATORS = {};
-JSJAC_JINGLE_CREATORS[JSJAC_JINGLE_CREATOR_INITIATOR] = 1;
-JSJAC_JINGLE_CREATORS[JSJAC_JINGLE_CREATOR_RESPONDER] = 1;
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_STATUSES = {};
-JSJAC_JINGLE_STATUSES[JSJAC_JINGLE_STATUS_INACTIVE] = 1;
-JSJAC_JINGLE_STATUSES[JSJAC_JINGLE_STATUS_INITIATING] = 1;
-JSJAC_JINGLE_STATUSES[JSJAC_JINGLE_STATUS_INITIATED] = 1;
-JSJAC_JINGLE_STATUSES[JSJAC_JINGLE_STATUS_ACCEPTING] = 1;
-JSJAC_JINGLE_STATUSES[JSJAC_JINGLE_STATUS_ACCEPTED] = 1;
-JSJAC_JINGLE_STATUSES[JSJAC_JINGLE_STATUS_TERMINATING] = 1;
-JSJAC_JINGLE_STATUSES[JSJAC_JINGLE_STATUS_TERMINATED] = 1;
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ACTIONS = {};
-JSJAC_JINGLE_ACTIONS[JSJAC_JINGLE_ACTION_CONTENT_ACCEPT] = 1;
-JSJAC_JINGLE_ACTIONS[JSJAC_JINGLE_ACTION_CONTENT_ADD] = 1;
-JSJAC_JINGLE_ACTIONS[JSJAC_JINGLE_ACTION_CONTENT_MODIFY] = 1;
-JSJAC_JINGLE_ACTIONS[JSJAC_JINGLE_ACTION_CONTENT_REJECT] = 1;
-JSJAC_JINGLE_ACTIONS[JSJAC_JINGLE_ACTION_CONTENT_REMOVE] = 1;
-JSJAC_JINGLE_ACTIONS[JSJAC_JINGLE_ACTION_DESCRIPTION_INFO] = 1;
-JSJAC_JINGLE_ACTIONS[JSJAC_JINGLE_ACTION_SECURITY_INFO] = 1;
-JSJAC_JINGLE_ACTIONS[JSJAC_JINGLE_ACTION_SESSION_ACCEPT] = 1;
-JSJAC_JINGLE_ACTIONS[JSJAC_JINGLE_ACTION_SESSION_INFO] = 1;
-JSJAC_JINGLE_ACTIONS[JSJAC_JINGLE_ACTION_SESSION_INITIATE] = 1;
-JSJAC_JINGLE_ACTIONS[JSJAC_JINGLE_ACTION_SESSION_TERMINATE] = 1;
-JSJAC_JINGLE_ACTIONS[JSJAC_JINGLE_ACTION_TRANSPORT_ACCEPT] = 1;
-JSJAC_JINGLE_ACTIONS[JSJAC_JINGLE_ACTION_TRANSPORT_INFO] = 1;
-JSJAC_JINGLE_ACTIONS[JSJAC_JINGLE_ACTION_TRANSPORT_REJECT] = 1;
-JSJAC_JINGLE_ACTIONS[JSJAC_JINGLE_ACTION_TRANSPORT_REPLACE] = 1;
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MESSAGE_ACTIONS = {};
-JSJAC_JINGLE_MESSAGE_ACTIONS[JSJAC_JINGLE_MESSAGE_ACTION_PROPOSE] = 1;
-JSJAC_JINGLE_MESSAGE_ACTIONS[JSJAC_JINGLE_MESSAGE_ACTION_RETRACT] = 1;
-JSJAC_JINGLE_MESSAGE_ACTIONS[JSJAC_JINGLE_MESSAGE_ACTION_ACCEPT] = 1;
-JSJAC_JINGLE_MESSAGE_ACTIONS[JSJAC_JINGLE_MESSAGE_ACTION_PROCEED] = 1;
-JSJAC_JINGLE_MESSAGE_ACTIONS[JSJAC_JINGLE_MESSAGE_ACTION_REJECT] = 1;
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_ERRORS = {};
-JSJAC_JINGLE_ERRORS[JSJAC_JINGLE_ERROR_OUT_OF_ORDER.jingle] = 1;
-JSJAC_JINGLE_ERRORS[JSJAC_JINGLE_ERROR_TIE_BREAK.jingle] = 1;
-JSJAC_JINGLE_ERRORS[JSJAC_JINGLE_ERROR_UNKNOWN_SESSION.jingle] = 1;
-JSJAC_JINGLE_ERRORS[JSJAC_JINGLE_ERROR_UNSUPPORTED_INFO.jingle] = 1;
-JSJAC_JINGLE_ERRORS[JSJAC_JINGLE_ERROR_SECURITY_REQUIRED.jingle] = 1;
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var XMPP_ERRORS = {};
-XMPP_ERRORS[XMPP_ERROR_UNEXPECTED_REQUEST.xmpp] = 1;
-XMPP_ERRORS[XMPP_ERROR_CONFLICT.xmpp] = 1;
-XMPP_ERRORS[XMPP_ERROR_ITEM_NOT_FOUND.xmpp] = 1;
-XMPP_ERRORS[XMPP_ERROR_NOT_ACCEPTABLE.xmpp] = 1;
-XMPP_ERRORS[XMPP_ERROR_FEATURE_NOT_IMPLEMENTED.xmpp] = 1;
-XMPP_ERRORS[XMPP_ERROR_SERVICE_UNAVAILABLE.xmpp] = 1;
-XMPP_ERRORS[XMPP_ERROR_REDIRECT.xmpp] = 1;
-XMPP_ERRORS[XMPP_ERROR_RESOURCE_CONSTRAINT.xmpp] = 1;
-XMPP_ERRORS[XMPP_ERROR_BAD_REQUEST.xmpp] = 1;
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_REASONS = {};
-JSJAC_JINGLE_REASONS[JSJAC_JINGLE_REASON_ALTERNATIVE_SESSION] = 1;
-JSJAC_JINGLE_REASONS[JSJAC_JINGLE_REASON_BUSY] = 1;
-JSJAC_JINGLE_REASONS[JSJAC_JINGLE_REASON_CANCEL] = 1;
-JSJAC_JINGLE_REASONS[JSJAC_JINGLE_REASON_CONNECTIVITY_ERROR] = 1;
-JSJAC_JINGLE_REASONS[JSJAC_JINGLE_REASON_DECLINE] = 1;
-JSJAC_JINGLE_REASONS[JSJAC_JINGLE_REASON_EXPIRED] = 1;
-JSJAC_JINGLE_REASONS[JSJAC_JINGLE_REASON_FAILED_APPLICATION] = 1;
-JSJAC_JINGLE_REASONS[JSJAC_JINGLE_REASON_FAILED_TRANSPORT] = 1;
-JSJAC_JINGLE_REASONS[JSJAC_JINGLE_REASON_GENERAL_ERROR] = 1;
-JSJAC_JINGLE_REASONS[JSJAC_JINGLE_REASON_GONE] = 1;
-JSJAC_JINGLE_REASONS[JSJAC_JINGLE_REASON_INCOMPATIBLE_PARAMETERS] = 1;
-JSJAC_JINGLE_REASONS[JSJAC_JINGLE_REASON_MEDIA_ERROR] = 1;
-JSJAC_JINGLE_REASONS[JSJAC_JINGLE_REASON_SECURITY_ERROR] = 1;
-JSJAC_JINGLE_REASONS[JSJAC_JINGLE_REASON_SUCCESS] = 1;
-JSJAC_JINGLE_REASONS[JSJAC_JINGLE_REASON_TIMEOUT] = 1;
-JSJAC_JINGLE_REASONS[JSJAC_JINGLE_REASON_UNSUPPORTED_APPLICATIONS] = 1;
-JSJAC_JINGLE_REASONS[JSJAC_JINGLE_REASON_UNSUPPORTED_TRANSPORTS] = 1;
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_SESSION_INFOS = {};
-JSJAC_JINGLE_SESSION_INFOS[JSJAC_JINGLE_SESSION_INFO_ACTIVE] = 1;
-JSJAC_JINGLE_SESSION_INFOS[JSJAC_JINGLE_SESSION_INFO_HOLD] = 1;
-JSJAC_JINGLE_SESSION_INFOS[JSJAC_JINGLE_SESSION_INFO_MUTE] = 1;
-JSJAC_JINGLE_SESSION_INFOS[JSJAC_JINGLE_SESSION_INFO_RINGING] = 1;
-JSJAC_JINGLE_SESSION_INFOS[JSJAC_JINGLE_SESSION_INFO_UNHOLD] = 1;
-JSJAC_JINGLE_SESSION_INFOS[JSJAC_JINGLE_SESSION_INFO_UNMUTE] = 1;
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MEDIAS = {};
-JSJAC_JINGLE_MEDIAS[JSJAC_JINGLE_MEDIA_AUDIO] = { label: '0' };
-JSJAC_JINGLE_MEDIAS[JSJAC_JINGLE_MEDIA_VIDEO] = { label: '1' };
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_VIDEO_SOURCES = {};
-JSJAC_JINGLE_VIDEO_SOURCES[JSJAC_JINGLE_VIDEO_SOURCE_CAMERA] = 1;
-JSJAC_JINGLE_VIDEO_SOURCES[JSJAC_JINGLE_VIDEO_SOURCE_SCREEN] = 1;
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MESSAGE_TYPES = {};
-JSJAC_JINGLE_MESSAGE_TYPES[JSJAC_JINGLE_MESSAGE_TYPE_ALL] = 1;
-JSJAC_JINGLE_MESSAGE_TYPES[JSJAC_JINGLE_MESSAGE_TYPE_NORMAL] = 1;
-JSJAC_JINGLE_MESSAGE_TYPES[JSJAC_JINGLE_MESSAGE_TYPE_CHAT] = 1;
-JSJAC_JINGLE_MESSAGE_TYPES[JSJAC_JINGLE_MESSAGE_TYPE_HEADLINE] = 1;
-JSJAC_JINGLE_MESSAGE_TYPES[JSJAC_JINGLE_MESSAGE_TYPE_GROUPCHAT] = 1;
-JSJAC_JINGLE_MESSAGE_TYPES[JSJAC_JINGLE_MESSAGE_TYPE_ERROR] = 1;
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_PRESENCE_TYPES = {};
-JSJAC_JINGLE_PRESENCE_TYPES[JSJAC_JINGLE_PRESENCE_TYPE_ALL] = 1;
-JSJAC_JINGLE_PRESENCE_TYPES[JSJAC_JINGLE_PRESENCE_TYPE_AVAILABLE] = 1;
-JSJAC_JINGLE_PRESENCE_TYPES[JSJAC_JINGLE_PRESENCE_TYPE_UNAVAILABLE] = 1;
-JSJAC_JINGLE_PRESENCE_TYPES[JSJAC_JINGLE_PRESENCE_TYPE_ERROR] = 1;
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_IQ_TYPES = {};
-JSJAC_JINGLE_IQ_TYPES[JSJAC_JINGLE_IQ_TYPE_ALL] = 1;
-JSJAC_JINGLE_IQ_TYPES[JSJAC_JINGLE_IQ_TYPE_RESULT] = 1;
-JSJAC_JINGLE_IQ_TYPES[JSJAC_JINGLE_IQ_TYPE_SET] = 1;
-JSJAC_JINGLE_IQ_TYPES[JSJAC_JINGLE_IQ_TYPE_GET] = 1;
-JSJAC_JINGLE_IQ_TYPES[JSJAC_JINGLE_IQ_TYPE_ERROR] = 1;
-
-
-
-/**
- * JSJAC JINGLE MUJI CONSTANTS MAPPING
- */
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_ACTIONS = {};
-JSJAC_JINGLE_MUJI_ACTIONS[JSJAC_JINGLE_MUJI_ACTION_PREPARE] = 1;
-JSJAC_JINGLE_MUJI_ACTIONS[JSJAC_JINGLE_MUJI_ACTION_INITIATE] = 1;
-JSJAC_JINGLE_MUJI_ACTIONS[JSJAC_JINGLE_MUJI_ACTION_LEAVE] = 1;
-
-/**
- * @constant
- * @global
- * @type {Object}
- * @readonly
- * @default
- * @public
- */
-var JSJAC_JINGLE_MUJI_STATUS = {};
-JSJAC_JINGLE_MUJI_STATUS[JSJAC_JINGLE_MUJI_STATUS_INACTIVE] = 1;
-JSJAC_JINGLE_MUJI_STATUS[JSJAC_JINGLE_MUJI_STATUS_PREPARING] = 1;
-JSJAC_JINGLE_MUJI_STATUS[JSJAC_JINGLE_MUJI_STATUS_PREPARED] = 1;
-JSJAC_JINGLE_MUJI_STATUS[JSJAC_JINGLE_MUJI_STATUS_INITIATING] = 1;
-JSJAC_JINGLE_MUJI_STATUS[JSJAC_JINGLE_MUJI_STATUS_INITIATED] = 1;
-JSJAC_JINGLE_MUJI_STATUS[JSJAC_JINGLE_MUJI_STATUS_LEAVING] = 1;
-JSJAC_JINGLE_MUJI_STATUS[JSJAC_JINGLE_MUJI_STATUS_LEFT] = 1;
-
-/**
- * @fileoverview JSJaC Jingle library - Storage layer
- *
- * @url https://github.com/valeriansaliou/jsjac-jingle
- * @depends https://github.com/sstrigler/JSJaC
- * @author Valérian Saliou https://valeriansaliou.name/
- * @license Mozilla private License v2.0 (MPL v2.0)
- */
-
-
-/** @module jsjac-jingle/storage */
-/** @exports JSJaCJingleStorage */
-
-
-/**
- * Storage layer wrapper.
- * @instance
- * @requires nicolas-van/ring.js
- * @requires jsjac-jingle/constants
- * @see {@link http://ringjs.neoname.eu/|Ring.js}
- * @see {@link http://stefan-strigler.de/jsjac-1.3.4/doc/|JSJaC Documentation}
- */
-var JSJaCJingleStorage = new (ring.create(
- /** @lends JSJaCJingleStorage.prototype */
- {
- /**
- * Constructor
- */
- constructor: function() {
- /**
- * JSJAC JINGLE STORAGE
- */
-
- /**
- * @member {JSJaCConnection}
- * @default
- * @private
- */
- this._connection = null;
-
- /**
- * @type {Object}
- * @default
- * @private
- */
- this._sessions = {};
- this._sessions[JSJAC_JINGLE_SESSION_SINGLE] = {};
- this._sessions[JSJAC_JINGLE_SESSION_MUJI] = {};
-
- /**
- * @type {Object}
- * @default
- * @private
- */
- this._broadcast_ids = {};
-
- /**
- * @type {Function}
- * @default
- * @private
- */
- this._single_initiate = undefined;
-
- /**
- * @type {Function}
- * @default
- * @private
- */
- this._single_propose = undefined;
-
- /**
- * @type {Function}
- * @default
- * @private
- */
- this._single_retract = undefined;
-
- /**
- * @type {Function}
- * @default
- * @private
- */
- this._single_accept = undefined;
-
- /**
- * @type {Function}
- * @default
- * @private
- */
- this._single_reject = undefined;
-
- /**
- * @type {Function}
- * @default
- * @private
- */
- this._single_proceed = undefined;
-
- /**
- * @type {Function}
- * @default
- * @private
- */
- this._muji_invite = undefined;
-
- /**
- * @type {Object}
- * @default
- * @private
- */
- this._debug = {
- log : function() {}
- };
-
- /**
- * @type {Object}
- * @default
- * @private
- */
- this._extdisco = {
- stun : [],
- turn : []
- };
-
- /**
- * @type {Object}
- * @default
- * @private
- */
- this._fallback = {
- stun : [],
- turn : []
- };
-
- /**
- * @type {Object}
- * @default
- * @private
- */
- this._relaynodes = {
- stun : []
- };
-
- /**
- * @type {Object}
- * @default
- * @private
- */
- this._defer = {
- deferred : false,
- count : 0,
- fn : []
- };
- },
-
-
-
- /**
- * JSJSAC JINGLE STORAGE GETTERS
- */
-
- /**
- * Gets the connection object
- * @public
- * @returns {JSJaCConnection} Connection
- */
- get_connection: function() {
- return this._connection;
- },
-
- /**
- * Gets the sessions storage
- * @public
- * @returns {Object} Sessions
- */
- get_sessions: function() {
- return this._sessions;
- },
-
- /**
- * Gets the broadcast_ids storage
- * @public
- * @returns {Object} Broadcast ID medias
- */
- get_broadcast_ids: function(id) {
- if(id in this._broadcast_ids)
- return this._broadcast_ids[id];
-
- return null;
- },
-
- /**
- * Gets the Single initiate function
- * @public
- * @returns {Function} Single initiate
- */
- get_single_initiate: function() {
- if(typeof this._single_initiate == 'function')
- return this._single_initiate;
-
- return function(stanza) {};
- },
-
- /**
- * Gets the Single initiate raw value
- * @public
- * @returns {Function} Single initiate raw value
- */
- get_single_initiate_raw: function() {
- return this._single_initiate;
- },
-
- /**
- * Gets the Single propose function
- * @public
- * @returns {Function} Single propose
- */
- get_single_propose: function() {
- if(typeof this._single_propose == 'function')
- return this._single_propose;
-
- return function(stanza) {};
- },
-
- /**
- * Gets the Single retract function
- * @public
- * @returns {Function} Single retract
- */
- get_single_retract: function() {
- if(typeof this._single_retract == 'function')
- return this._single_retract;
-
- return function(stanza) {};
- },
-
- /**
- * Gets the Single accept function
- * @public
- * @returns {Function} Single accept
- */
- get_single_accept: function() {
- if(typeof this._single_accept == 'function')
- return this._single_accept;
-
- return function(stanza) {};
- },
-
- /**
- * Gets the Single reject function
- * @public
- * @returns {Function} Single reject
- */
- get_single_reject: function() {
- if(typeof this._single_reject == 'function')
- return this._single_reject;
-
- return function(stanza) {};
- },
-
- /**
- * Gets the Single proceed function
- * @public
- * @returns {Function} Single proceed
- */
- get_single_proceed: function() {
- if(typeof this._single_proceed == 'function')
- return this._single_proceed;
-
- return function(stanza) {};
- },
-
- /**
- * Gets the Muji invite function
- * @public
- * @returns {Function} Muji invite
- */
- get_muji_invite: function() {
- if(typeof this._muji_invite == 'function')
- return this._muji_invite;
-
- return function(stanza) {};
- },
-
- /**
- * Gets the Muji invite raw value
- * @public
- * @returns {Function} Muji invite raw value
- */
- get_muji_invite_raw: function() {
- return this._muji_invite;
- },
-
- /**
- * Gets the debug interface
- * @public
- * @returns {Object} Debug
- */
- get_debug: function() {
- return this._debug;
- },
-
- /**
- * Gets the extdisco storage
- * @public
- * @returns {Object} Extdisco
- */
- get_extdisco: function() {
- return this._extdisco;
- },
-
- /**
- * Gets the fallback storage
- * @public
- * @returns {Object} Fallback
- */
- get_fallback: function() {
- return this._fallback;
- },
-
- /**
- * Gets the relay nodes storage
- * @public
- * @returns {Object} Relay nodes
- */
- get_relaynodes: function() {
- return this._relaynodes;
- },
-
- /**
- * Gets the defer storage
- * @public
- * @returns {Object} Defer
- */
- get_defer: function() {
- return this._defer;
- },
-
-
-
- /**
- * JSJSAC JINGLE STORAGE SETTERS
- */
-
- /**
- * Sets the connection object
- * @public
- * @param {JSJaCConnection} Connection
- */
- set_connection: function(connection) {
- this._connection = connection;
- },
-
- /**
- * Sets the sessions storage
- * @public
- * @param {Object} sessions
- */
- set_sessions: function(sessions) {
- this._sessions = sessions;
- },
-
- /**
- * Sets the broadcast IDs storage
- * @public
- * @param {String} id
- * @param {Object} medias
- * @param {Boolean} [proceed_unset]
- */
- set_broadcast_ids: function(id, medias, proceed_unset) {
- this._broadcast_ids[id] = medias;
-
- if(proceed_unset === true && id in this._broadcast_ids)
- delete this._broadcast_ids[id];
- },
-
- /**
- * Sets the Single initiate function
- * @public
- * @param {Function} Single initiate
- */
- set_single_initiate: function(single_initiate) {
- this._single_initiate = single_initiate;
- },
-
- /**
- * Sets the Single propose function
- * @public
- * @param {Function} Single propose
- */
- set_single_propose: function(single_propose) {
- this._single_propose = single_propose;
- },
-
- /**
- * Sets the Single retract function
- * @public
- * @param {Function} Single retract
- */
- set_single_retract: function(single_retract) {
- this._single_retract = single_retract;
- },
-
- /**
- * Sets the Single accept function
- * @public
- * @param {Function} Single accept
- */
- set_single_accept: function(single_accept) {
- this._single_accept = single_accept;
- },
-
- /**
- * Sets the Single reject function
- * @public
- * @param {Function} Single reject
- */
- set_single_reject: function(single_reject) {
- this._single_reject = single_reject;
- },
-
- /**
- * Sets the Single proceed function
- * @public
- * @param {Function} Single proceed
- */
- set_single_proceed: function(single_proceed) {
- this._single_proceed = single_proceed;
- },
-
- /**
- * Sets the Muji invite function
- * @public
- * @param {Function} Muji invite
- */
- set_muji_invite: function(muji_invite) {
- this._muji_invite = muji_invite;
- },
-
- /**
- * Sets the debug interface
- * @public
- * @param {Object} Debug
- */
- set_debug: function(debug) {
- this._debug = debug;
- },
-
- /**
- * Sets the extdisco storage
- * @public
- * @param {Object} Extdisco
- */
- set_extdisco: function(extdisco) {
- this._extdisco = extdisco;
- },
-
- /**
- * Sets the fallback storage
- * @public
- * @param {Object} Fallback
- */
- set_fallback: function(fallback) {
- this._fallback = fallback;
- },
-
- /**
- * Sets the relay nodes storage
- * @public
- * @param {Object} Relay nodes
- */
- set_relaynodes: function(relaynodes) {
- this._relaynodes = relaynodes;
- },
-
- /**
- * Sets the defer storage
- * @public
- * @param {Object} Defer
- */
- set_defer: function(defer) {
- this._defer = defer;
- },
- }
-))();
-
-/**
- * @fileoverview JSJaC Jingle library - Utilities
- *
- * @url https://github.com/valeriansaliou/jsjac-jingle
- * @depends https://github.com/sstrigler/JSJaC
- * @author Valérian Saliou https://valeriansaliou.name/
- * @license Mozilla Public License v2.0 (MPL v2.0)
- */
-
-
-/** @module jsjac-jingle/utils */
-/** @exports JSJaCJingleUtils */
-
-
-/**
- * Utilities class.
- * @class
- * @classdesc Utilities class.
- * @param {JSJaCJingleSingle|JSJaCJingleMuji} parent Parent class.
- * @requires nicolas-van/ring.js
- * @requires sstrigler/JSJaC
- * @see {@link http://ringjs.neoname.eu/|Ring.js}
- * @see {@link http://stefan-strigler.de/jsjac-1.3.4/doc/|JSJaC Documentation}
- */
-var JSJaCJingleUtils = ring.create(
- /** @lends JSJaCJingleUtils.prototype */
- {
- /**
- * Constructor
- */
- constructor: function(parent) {
- /**
- * @constant
- * @member {JSJaCJingleSingle|JSJaCJingleMuji}
- * @readonly
- * @default
- * @public
- */
- this.parent = parent;
- },
-
- /**
- * Removes a given array value
- * @public
- * @param {Array} array
- * @param {*} value
- * @returns {Array} New array
- */
- array_remove_value: function(array, value) {
- try {
- var i;
-
- for(i = 0; i < array.length; i++) {
- if(array[i] === value) {
- array.splice(i, 1); i--;
- }
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] array_remove_value > ' + e, 1);
- }
-
- return array;
- },
-
- /**
- * Returns whether an object is empty or not
- * @public
- * @param {Object} object
- * @returns {Number} Object length
- */
- object_length: function(object) {
- var key;
- var l = 0;
-
- try {
- for(key in object) {
- if(object.hasOwnProperty(key)) l++;
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] object_length > ' + e, 1);
- }
-
- return l;
- },
-
- /**
- * Returns whether given objects are equal or not
- * @public
- * @param {...Object} arguments - Objects to be compared
- * @returns {Boolean} Equality
- */
- object_equal: function() {
- var equal = true,
- last_value = null;
-
- if(arguments.length >= 1) {
- for(var i = 0; i < arguments.length; i++) {
- if(i > 0) {
- equal = (JSON.stringify(last_value) === JSON.stringify(arguments[i]));
- if(equal !== true) break;
- }
-
- last_value = arguments[i];
- }
- } else {
- equal = false;
- }
-
- return equal;
- },
-
- /**
- * Collects given objects
- * @public
- * @param {...Object} arguments - Objects to be collected
- * @returns {Object} Collected object
- */
- object_collect: function() {
- var i, p;
-
- var collect_obj = {};
-
- for(i = 0; i < arguments.length; i++) {
- for(p in arguments[i]) {
- if(arguments[i].hasOwnProperty(p))
- collect_obj[p] = arguments[i][p];
- }
- }
-
- return collect_obj;
- },
-
- /**
- * Collects given arrays
- * @public
- * @param {...Array} arguments - Arrays to be collected
- * @returns {Array} Collected array
- */
- array_collect: function() {
- var i, j, p,
- cur_arr;
-
- var collect_arr = [];
-
- for(i = 0; i < arguments.length; i++) {
- cur_arr = arguments[i];
-
- loop_arr: for(j = 0; j < cur_arr.length; j++) {
- // Ensure uniqueness of object
- for(p in collect_arr) {
- if(this.object_equal(cur_arr[j], collect_arr[p])) continue loop_arr;
- }
-
- collect_arr.push(cur_arr[j]);
- }
- }
-
- return collect_arr;
- },
-
- /**
- * Clones a given object
- * @public
- * @param {Object} object
- * @returns {Date|Array|Object} Cloned object
- */
- object_clone: function(object) {
- try {
- var copy, i, attr;
-
- // Assert
- if(object === null || typeof object !== 'object') return object;
-
- // Handle Date
- if(object instanceof Date) {
- copy = new Date();
- copy.setTime(object.getTime());
-
- return copy;
- }
-
- // Handle Array
- if(object instanceof Array) {
- copy = [];
-
- for(i = 0, len = object.length; i < len; i++)
- copy[i] = this.object_clone(object[i]);
-
- return copy;
- }
-
- // Handle Object
- if(object instanceof Object) {
- copy = {};
-
- for(attr in object) {
- if(object.hasOwnProperty(attr))
- copy[attr] = this.object_clone(object[attr]);
- }
-
- return copy;
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] object_clone > ' + e, 1);
- }
-
- this.parent.get_debug().log('[JSJaCJingle:utils] object_clone > Cannot clone this object.', 1);
- },
-
- /**
- * Gets the browser info
- * @public
- * @returns {Object} Browser info
- */
- browser: function() {
- var browser_info = {
- name : 'Generic'
- };
-
- try {
- var user_agent, detect_arr, cur_browser;
-
- detect_arr = {
- 'firefox' : JSJAC_JINGLE_BROWSER_FIREFOX,
- 'chrome' : JSJAC_JINGLE_BROWSER_CHROME,
- 'safari' : JSJAC_JINGLE_BROWSER_SAFARI,
- 'opera' : JSJAC_JINGLE_BROWSER_OPERA,
- 'msie' : JSJAC_JINGLE_BROWSER_IE
- };
-
- user_agent = navigator.userAgent.toLowerCase();
-
- for(cur_browser in detect_arr) {
- if(user_agent.indexOf(cur_browser) > -1) {
- browser_info.name = detect_arr[cur_browser];
- break;
- }
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] browser > ' + e, 1);
- }
-
- return browser_info;
- },
-
- /**
- * Gets the ICE config
- * @public
- * @returns {Object} ICE config
- */
- config_ice: function() {
- try {
- // Collect data (user + server)
- var stun_config = this.array_collect(
- this.parent.get_stun(),
- JSJaCJingleStorage.get_extdisco().stun,
- JSJaCJingleStorage.get_relaynodes().stun,
- JSJaCJingleStorage.get_fallback().stun
- );
-
- var turn_config = this.array_collect(
- this.parent.get_turn(),
- JSJaCJingleStorage.get_extdisco().turn,
- JSJaCJingleStorage.get_fallback().turn
- );
-
- // Can proceed?
- if(stun_config.length || turn_config.length) {
- var config = {
- iceServers : []
- };
-
- // STUN servers
- var i, cur_stun_obj, cur_stun_config;
-
- for(i in stun_config) {
- cur_stun_obj = stun_config[i];
-
- cur_stun_config = {};
- cur_stun_config.url = 'stun:' + cur_stun_obj.host;
-
- if(cur_stun_obj.port)
- cur_stun_config.url += ':' + cur_stun_obj.port;
-
- if(cur_stun_obj.transport && this.browser().name != JSJAC_JINGLE_BROWSER_FIREFOX)
- cur_stun_config.url += '?transport=' + cur_stun_obj.transport;
-
- (config.iceServers).push(cur_stun_config);
- }
-
- // TURN servers
- var j, cur_turn_obj, cur_turn_config;
-
- for(j in turn_config) {
- cur_turn_obj = turn_config[j];
-
- cur_turn_config = {};
- cur_turn_config.url = 'turn:' + cur_turn_obj.host;
-
- if(cur_turn_obj.port)
- cur_turn_config.url += ':' + cur_turn_obj.port;
-
- if(cur_turn_obj.transport)
- cur_turn_config.url += '?transport=' + cur_turn_obj.transport;
-
- if(cur_turn_obj.username)
- cur_turn_config.username = cur_turn_obj.username;
-
- if(cur_turn_obj.password)
- cur_turn_config.password = cur_turn_obj.password;
-
- (config.iceServers).push(cur_turn_config);
- }
-
- // Check we have at least a STUN server (if user can traverse NAT)
- var k;
- var has_stun = false;
-
- for(k in config.iceServers) {
- if((config.iceServers[k].url).match(R_NETWORK_PROTOCOLS.stun)) {
- has_stun = true; break;
- }
- }
-
- if(!has_stun) {
- (config.iceServers).push({
- url: (WEBRTC_CONFIGURATION.peer_connection.config.iceServers)[0].url
- });
- }
-
- return config;
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] config_ice > ' + e, 1);
- }
-
- return WEBRTC_CONFIGURATION.peer_connection.config;
- },
-
- /**
- * Gets the node value from a stanza element
- * @public
- * @param {DOM} stanza
- * @returns {String|Object} Node value
- */
- stanza_get_value: function(stanza) {
- try {
- return stanza.firstChild.nodeValue || null;
- } catch(e) {
- try {
- return (stanza[0]).firstChild.nodeValue || null;
- } catch(_e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_get_value > ' + _e, 1);
- }
- }
-
- return null;
- },
-
- /**
- * Gets the attribute value from a stanza element
- * @public
- * @param {DOM} stanza
- * @param {String} name
- * @returns {String|Object} Attribute value
- */
- stanza_get_attribute: function(stanza, name) {
- if(!name) return null;
-
- try {
- return stanza.getAttribute(name) || null;
- } catch(e) {
- try {
- return (stanza[0]).getAttribute(name) || null;
- } catch(_e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_get_attribute > ' + _e, 1);
- }
- }
-
- return null;
- },
-
- /**
- * Sets the attribute value to a stanza element
- * @public
- * @param {DOM} stanza
- * @param {String} name
- * @param {*} value
- */
- stanza_set_attribute: function(stanza, name, value) {
- if(!(name && value && stanza)) return;
-
- try {
- stanza.setAttribute(name, value);
- } catch(e) {
- try {
- (stanza[0]).setAttribute(name, value);
- } catch(_e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_set_attribute > ' + _e, 1);
- }
- }
- },
-
- /**
- * Gets the Jingle node from a stanza
- * @public
- * @param {DOM} stanza
- * @param {String} name
- * @param {String} [ns]
- * @returns {DOM} Selected DOM elements
- */
- stanza_get_element: function(stanza, name, ns) {
- var matches_result = [];
-
- // Assert
- if(!stanza) return matches_result;
- if(stanza.length) stanza = stanza[0];
-
- ns = (ns || '*');
-
- try {
- var i;
-
- // Get only in lower level (not all sub-levels)
- var matches = stanza.getElementsByTagNameNS(ns, name);
-
- if(matches && matches.length) {
- for(i = 0; i < matches.length; i++) {
- if(matches[i] && matches[i].parentNode == stanza)
- matches_result.push(matches[i]);
- }
- }
-
- return matches_result;
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_get_element > ' + e, 1);
- }
-
- return matches_result;
- },
-
- /**
- * Gets the error node from a stanza
- * @private
- * @param {JSJaCPacket} stanza
- * @param {Object} [error_match_obj]
- * @returns {Boolean} Password invalid state
- */
- stanza_get_error: function(stanza, error_match_obj) {
- var matches_result = [];
-
- try {
- var i,
- error_child, cur_error_child;
-
- error_child = stanza.getChild('error', NS_CLIENT);
-
- if(error_child && error_child.length) {
- for(i = 0; i < error_child.length; i++) {
- cur_error_child = error_child[i];
-
- if(typeof error_match_obj == 'object') {
- if(cur_error_child.getAttribute('type') === error_match_obj.type &&
- cur_error_child.getChild(error_match_obj.xmpp, NS_IETF_XMPP_STANZAS)) {
- matches_result.push(cur_error_child);
- }
- } else {
- matches_result.push(cur_error_child);
- }
- }
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:utils] stanza_get_error > ' + e, 1);
- }
-
- return matches_result;
- },
-
- /**
- * Gets the Jingle node from a stanza
- * @public
- * @param {JSJaCPacket} stanza
- * @returns {DOM|Object} Jingle node
- */
- stanza_jingle: function(stanza) {
- try {
- return stanza.getChild('jingle', this.parent.get_namespace());
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_jingle > ' + e, 1);
- }
-
- return null;
- },
-
- /**
- * Gets the Jingle Muji node from a stanza
- * @public
- * @param {JSJaCPacket} stanza
- * @returns {DOM|Object} Jingle node
- */
- stanza_muji: function(stanza) {
- try {
- return stanza.getChild('muji', NS_MUJI);
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_muji > ' + e, 1);
- }
-
- return null;
- },
-
- /**
- * Gets the from value from a stanza
- * @public
- * @param {JSJaCPacket} stanza
- * @returns {String|Object} From value
- */
- stanza_from: function(stanza) {
- try {
- return stanza.getFrom() || null;
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_from > ' + e, 1);
- }
-
- return null;
- },
-
- /**
- * Extracts username from stanza
- * @public
- * @param {JSJaCPacket} stanza
- * @returns {String|Object} Username
- */
- stanza_username: function(stanza) {
- try {
- return this.extract_username(stanza.getFrom());
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_username > ' + e, 1);
- }
-
- return null;
- },
-
- /**
- * Gets the SID value from a stanza
- * @public
- * @param {JSJaCPacket} stanza
- * @returns {String|Object} SID value
- */
- stanza_sid: function(stanza) {
- try {
- return this.stanza_get_attribute(
- this.stanza_jingle(stanza),
- 'sid'
- );
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_sid > ' + e, 1);
- }
- },
-
- /**
- * Checks if a stanza is safe (known SID + sender)
- * @public
- * @param {JSJaCPacket} stanza
- * @returns {Boolean} Safety state
- */
- stanza_safe: function(stanza) {
- try {
- return !((stanza.getType() == JSJAC_JINGLE_IQ_TYPE_SET && this.stanza_sid(stanza) != this.parent.get_sid()) || this.stanza_from(stanza) != this.parent.get_to());
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_safe > ' + e, 1);
- }
-
- return false;
- },
-
- /**
- * Gets a stanza terminate reason
- * @public
- * @param {JSJaCPacket} stanza
- * @returns {String|Object} Reason code
- */
- stanza_terminate_reason: function(stanza) {
- try {
- var jingle = this.stanza_jingle(stanza);
-
- if(jingle) {
- var reason = this.stanza_get_element(jingle, 'reason', this.parent.get_namespace());
-
- if(reason.length) {
- var cur_reason;
-
- for(cur_reason in JSJAC_JINGLE_REASONS) {
- if(this.stanza_get_element(reason[0], cur_reason, this.parent.get_namespace()).length)
- return cur_reason;
- }
- }
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_terminate_reason > ' + e, 1);
- }
-
- return null;
- },
-
- /**
- * Gets a stanza session info
- * @public
- * @param {JSJaCPacket} stanza
- * @returns {String|Object} Info code
- */
- stanza_session_info: function(stanza) {
- try {
- var jingle = this.stanza_jingle(stanza);
-
- if(jingle) {
- var cur_info;
-
- for(cur_info in JSJAC_JINGLE_SESSION_INFOS) {
- if(this.stanza_get_element(jingle, cur_info, NS_JINGLE_APPS_RTP_INFO).length)
- return cur_info;
- }
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_session_info > ' + e, 1);
- }
-
- return null;
- },
-
- /**
- * Set a timeout limit to a stanza
- * @public
- * @param {String} t_type
- * @param {String} t_id
- * @param {Object} [handlers]
- */
- stanza_timeout: function(t_node, t_type, t_id, handlers) {
- try {
- var t_sid = this.parent.get_sid();
- var t_status = this.parent.get_status();
-
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_timeout > Registered (node: ' + t_node + ', type: ' + t_type + ', id: ' + t_id + ', status: ' + t_status + ').', 4);
-
- var _this = this;
-
- setTimeout(function() {
- _this.parent.get_debug().log('[JSJaCJingle:utils] stanza_timeout > Cheking (node: ' + t_node + ', type: ' + t_type + ', id: ' + t_id + ', status: ' + t_status + '-' + _this.parent.get_status() + ').', 4);
-
- // State did not change?
- if(_this.parent.get_sid() == t_sid && _this.parent.get_status() == t_status && !(t_id in _this.parent.get_received_id())) {
- _this.parent.get_debug().log('[JSJaCJingle:utils] stanza_timeout > Stanza timeout.', 2);
-
- _this.parent.unregister_handler(t_node, t_type, t_id);
-
- if(typeof handlers == 'object') {
- if(handlers.external) (handlers.external)(_this);
- if(handlers.internal) (handlers.internal)();
- }
- } else {
- _this.parent.get_debug().log('[JSJaCJingle:utils] stanza_timeout > Stanza successful.', 4);
- }
- }, (JSJAC_JINGLE_STANZA_TIMEOUT * 1000));
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_timeout > ' + e, 1);
- }
- },
-
- /**
- * Parses stanza node
- * @public
- * @param {DOM} parent
- * @param {String} name
- * @param {String} ns
- * @param {Object} obj
- * @param {Array} attrs
- * @param {Object} [value]
- */
- stanza_parse_node: function(parent, name, ns, obj, attrs, value) {
- try {
- var i, j,
- error, child, child_arr;
- var children = this.stanza_get_element(parent, name, ns);
-
- if(children.length) {
- for(i = 0; i < children.length; i++) {
- // Initialize
- error = 0;
- child = children[i];
- child_arr = {};
-
- // Parse attributes
- for(j in attrs) {
- child_arr[attrs[j].n] = this.stanza_get_attribute(child, attrs[j].n);
-
- if(attrs[j].r && !child_arr[attrs[j].n]) {
- error++; break;
- }
- }
-
- // Parse value
- if(value) {
- child_arr[value.n] = this.stanza_get_value(child);
- if(value.r && !child_arr[value.n]) error++;
- }
-
- if(error !== 0) continue;
-
- // Push current children
- obj.push(child_arr);
- }
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_parse_node > ' + e, 1);
- }
- },
-
- /**
- * Parses stanza content
- * @public
- * @param {JSJaCPacket} stanza
- * @returns {Boolean} Success
- */
- stanza_parse_content: function(stanza) {
- try {
- var i,
- jingle, namespace, content, cur_content,
- content_creator, content_name, content_senders,
- cur_candidates;
-
- // Parse initiate stanza
- switch(stanza.name) {
- case JSJAC_JINGLE_STANZA_IQ:
- // Jingle elements are encapsulated into IQs
- jingle = this.stanza_jingle(stanza); break;
-
- case JSJAC_JINGLE_STANZA_PRESENCE:
- // Muji elements are encapsulated into Presences
- jingle = this.stanza_muji(stanza); break;
-
- default:
- throw 'Stanza is not Jingle, nor Muji.';
- }
-
- if(jingle) {
- // Childs
- content = this.stanza_get_element(jingle, 'content', this.parent.get_namespace());
-
- if(content && content.length) {
- for(i = 0; i < content.length; i++) {
- cur_content = content[i];
-
- // Attrs (avoids senders & creators to be changed later in the flow)
- content_name = this.stanza_get_attribute(cur_content, 'name');
- content_senders = this.parent.get_senders(content_name) || this.stanza_get_attribute(cur_content, 'senders');
- content_creator = this.parent.get_creator(content_name) || this.stanza_get_attribute(cur_content, 'creator');
-
- this.parent._set_name(content_name);
- this.parent._set_senders(content_name, content_senders);
- this.parent._set_creator(content_name, content_creator);
-
- // Payloads (non-destructive setters / cumulative)
- this.parent._set_payloads_remote_add(
- content_name,
- this.stanza_parse_payload(cur_content)
- );
-
- // Candidates (enqueue them for ICE processing, too)
- cur_candidate = this.stanza_parse_candidate(cur_content);
-
- this.parent._set_candidates_remote_add(
- content_name,
- cur_candidate
- );
-
- this.parent._set_candidates_queue_remote(
- content_name,
- cur_candidate
- );
- }
-
- return true;
- }
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_parse_content > ' + e, 1);
- }
-
- return false;
- },
-
- /**
- * Parses stanza group
- * @public
- * @param {JSJaCPacket} stanza
- * @returns {Boolean} Success
- */
- stanza_parse_group: function(stanza) {
- try {
- var i, j,
- jingle,
- group, cur_group,
- content, cur_content, group_content_names;
-
- // Parse initiate stanza
- jingle = this.stanza_jingle(stanza);
-
- if(jingle) {
- // Childs
- group = this.stanza_get_element(jingle, 'group', NS_JINGLE_APPS_GROUPING);
-
- if(group && group.length) {
- for(i = 0; i < group.length; i++) {
- cur_group = group[i];
- group_content_names = [];
-
- // Attrs
- group_semantics = this.stanza_get_attribute(cur_group, 'semantics');
-
- // Contents
- content = this.stanza_get_element(cur_group, 'content', NS_JINGLE_APPS_GROUPING);
-
- for(j = 0; j < content.length; j++) {
- cur_content = content[j];
-
- // Content attrs
- group_content_names.push(
- this.stanza_get_attribute(cur_content, 'name')
- );
- }
-
- // Payloads (non-destructive setters / cumulative)
- this.parent._set_group_remote(
- group_semantics,
- group_content_names
- );
- }
- }
- }
-
- return true;
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_parse_group > ' + e, 1);
- }
-
- return false;
- },
-
- /**
- * Parses stanza payload
- * @public
- * @param {DOM} stanza_content
- * @returns {Object} Payload object
- */
- stanza_parse_payload: function(stanza_content) {
- var payload_obj = {
- descriptions : {},
- transports : {}
- };
-
- try {
- // Common vars
- var j, k, l, error,
- cur_ssrc, cur_ssrc_id,
- cur_ssrc_group, cur_ssrc_group_semantics,
- cur_payload, cur_payload_arr, cur_payload_id;
-
- // Common functions
- var init_content = function() {
- var ic_key;
- var ic_arr = {
- 'attrs' : {},
- 'rtcp-fb' : [],
- 'bandwidth' : [],
- 'payload' : {},
- 'rtp-hdrext' : [],
- 'rtcp-mux' : 0,
-
- 'encryption' : {
- 'attrs' : {},
- 'crypto' : [],
- 'zrtp-hash' : []
- },
-
- 'ssrc': {},
- 'ssrc-group': {}
- };
-
- for(ic_key in ic_arr)
- if(!(ic_key in payload_obj.descriptions)) payload_obj.descriptions[ic_key] = ic_arr[ic_key];
- };
-
- var init_payload = function(id) {
- var ip_key;
- var ip_arr = {
- 'attrs' : {},
- 'parameter' : [],
- 'rtcp-fb' : [],
- 'rtcp-fb-trr-int' : []
- };
-
- if(!(id in payload_obj.descriptions.payload)) payload_obj.descriptions.payload[id] = {};
-
- for(ip_key in ip_arr)
- if(!(ip_key in payload_obj.descriptions.payload[id])) payload_obj.descriptions.payload[id][ip_key] = ip_arr[ip_key];
- };
-
- var init_ssrc_group_semantics = function(semantics) {
- if(typeof payload_obj.descriptions['ssrc-group'][semantics] != 'object')
- payload_obj.descriptions['ssrc-group'][semantics] = [];
- };
-
- // Parse session description
- var description = this.stanza_get_element(stanza_content, 'description', NS_JINGLE_APPS_RTP);
-
- if(description.length) {
- description = description[0];
-
- var cd_media = this.stanza_get_attribute(description, 'media');
- var cd_ssrc = this.stanza_get_attribute(description, 'ssrc');
-
- if(!cd_media)
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_parse_payload > No media attribute to ' + cc_name + ' stanza.', 1);
-
- // Initialize current description
- init_content();
-
- payload_obj.descriptions.attrs.media = cd_media;
- payload_obj.descriptions.attrs.ssrc = cd_ssrc;
-
- // Loop on multiple payloads
- var payload = this.stanza_get_element(description, 'payload-type', NS_JINGLE_APPS_RTP);
-
- if(payload.length) {
- for(j = 0; j < payload.length; j++) {
- error = 0;
- cur_payload = payload[j];
- cur_payload_arr = {};
-
- cur_payload_arr.channels = this.stanza_get_attribute(cur_payload, 'channels');
- cur_payload_arr.clockrate = this.stanza_get_attribute(cur_payload, 'clockrate');
- cur_payload_arr.id = this.stanza_get_attribute(cur_payload, 'id') || error++;
- cur_payload_arr.name = this.stanza_get_attribute(cur_payload, 'name');
-
- payload_obj.descriptions.attrs.ptime = this.stanza_get_attribute(cur_payload, 'ptime');
- payload_obj.descriptions.attrs.maxptime = this.stanza_get_attribute(cur_payload, 'maxptime');
-
- if(error !== 0) continue;
-
- // Initialize current payload
- cur_payload_id = cur_payload_arr.id;
- init_payload(cur_payload_id);
-
- // Push current payload
- payload_obj.descriptions.payload[cur_payload_id].attrs = cur_payload_arr;
-
- // Loop on multiple parameters
- this.stanza_parse_node(
- cur_payload,
- 'parameter',
- NS_JINGLE_APPS_RTP,
- payload_obj.descriptions.payload[cur_payload_id].parameter,
- [ { n: 'name', r: 1 }, { n: 'value', r: 0 } ]
- );
-
- // Loop on multiple RTCP-FB
- this.stanza_parse_node(
- cur_payload,
- 'rtcp-fb',
- NS_JINGLE_APPS_RTP_RTCP_FB,
- payload_obj.descriptions.payload[cur_payload_id]['rtcp-fb'],
- [ { n: 'type', r: 1 }, { n: 'subtype', r: 0 } ]
- );
-
- // Loop on multiple RTCP-FB-TRR-INT
- this.stanza_parse_node(
- cur_payload,
- 'rtcp-fb-trr-int',
- NS_JINGLE_APPS_RTP_RTCP_FB,
- payload_obj.descriptions.payload[cur_payload_id]['rtcp-fb-trr-int'],
- [ { n: 'value', r: 1 } ]
- );
- }
- }
-
- // Parse the encryption element
- var encryption = this.stanza_get_element(description, 'encryption', NS_JINGLE_APPS_RTP);
-
- if(encryption.length) {
- encryption = encryption[0];
-
- payload_obj.descriptions.encryption.attrs.required = this.stanza_get_attribute(encryption, 'required') || '0';
-
- // Loop on multiple cryptos
- this.stanza_parse_node(
- encryption,
- 'crypto',
- NS_JINGLE_APPS_RTP,
- payload_obj.descriptions.encryption.crypto,
- [ { n: 'crypto-suite', r: 1 }, { n: 'key-params', r: 1 }, { n: 'session-params', r: 0 }, { n: 'tag', r: 1 } ]
- );
-
- // Loop on multiple zrtp-hash
- this.stanza_parse_node(
- encryption,
- 'zrtp-hash',
- NS_JINGLE_APPS_RTP_ZRTP,
- payload_obj.descriptions.encryption['zrtp-hash'],
- [ { n: 'version', r: 1 } ],
- { n: 'value', r: 1 }
- );
- }
-
- // Parse the SSRC-GROUP elements
- var ssrc_group = this.stanza_get_element(description, 'ssrc-group', NS_JINGLE_APPS_RTP_SSMA);
-
- if(ssrc_group && ssrc_group.length) {
- for(k = 0; k < ssrc_group.length; k++) {
- cur_ssrc_group = ssrc_group[k];
- cur_ssrc_group_semantics = this.stanza_get_attribute(cur_ssrc_group, 'semantics') || null;
-
- if(cur_ssrc_group_semantics !== null) {
- cur_ssrc_group_semantics_obj = {
- 'sources': []
- };
-
- init_ssrc_group_semantics(cur_ssrc_group_semantics);
-
- this.stanza_parse_node(
- cur_ssrc_group,
- 'source',
- NS_JINGLE_APPS_RTP_SSMA,
- cur_ssrc_group_semantics_obj.sources,
- [ { n: 'ssrc', r: 1 } ]
- );
-
- payload_obj.descriptions['ssrc-group'][cur_ssrc_group_semantics].push(cur_ssrc_group_semantics_obj);
- }
- }
- }
-
- // Parse the SSRC (source) elements
- var ssrc = this.stanza_get_element(description, 'source', NS_JINGLE_APPS_RTP_SSMA);
-
- if(ssrc && ssrc.length) {
- for(l = 0; l < ssrc.length; l++) {
- cur_ssrc = ssrc[l];
- cur_ssrc_id = this.stanza_get_attribute(cur_ssrc, 'ssrc') || null;
-
- if(cur_ssrc_id !== null) {
- payload_obj.descriptions.ssrc[cur_ssrc_id] = [];
-
- this.stanza_parse_node(
- cur_ssrc,
- 'parameter',
- NS_JINGLE_APPS_RTP_SSMA,
- payload_obj.descriptions.ssrc[cur_ssrc_id],
- [ { n: 'name', r: 1 }, { n: 'value', r: 0 } ]
- );
- }
- }
- }
-
- // Loop on common RTCP-FB
- this.stanza_parse_node(
- description,
- 'rtcp-fb',
- NS_JINGLE_APPS_RTP_RTCP_FB,
- payload_obj.descriptions['rtcp-fb'],
- [ { n: 'type', r: 1 }, { n: 'subtype', r: 0 } ]
- );
-
- // Loop on bandwidth
- this.stanza_parse_node(
- description,
- 'bandwidth',
- NS_JINGLE_APPS_RTP,
- payload_obj.descriptions.bandwidth,
- [ { n: 'type', r: 1 } ],
- { n: 'value', r: 1 }
- );
-
- // Parse the RTP-HDREXT element
- this.stanza_parse_node(
- description,
- 'rtp-hdrext',
- NS_JINGLE_APPS_RTP_RTP_HDREXT,
- payload_obj.descriptions['rtp-hdrext'],
- [ { n: 'id', r: 1 }, { n: 'uri', r: 1 }, { n: 'senders', r: 0 } ]
- );
-
- // Parse the RTCP-MUX element
- var rtcp_mux = this.stanza_get_element(description, 'rtcp-mux', NS_JINGLE_APPS_RTP);
-
- if(rtcp_mux.length) {
- payload_obj.descriptions['rtcp-mux'] = 1;
- }
- }
-
- // Parse transport (need to get 'ufrag' and 'pwd' there)
- var transport = this.stanza_get_element(stanza_content, 'transport', NS_JINGLE_TRANSPORTS_ICEUDP);
-
- if(transport.length) {
- payload_obj.transports.pwd = this.stanza_get_attribute(transport, 'pwd');
- payload_obj.transports.ufrag = this.stanza_get_attribute(transport, 'ufrag');
-
- var fingerprint = this.stanza_get_element(transport, 'fingerprint', NS_JINGLE_APPS_DTLS);
-
- if(fingerprint.length) {
- payload_obj.transports.fingerprint = {};
- payload_obj.transports.fingerprint.setup = this.stanza_get_attribute(fingerprint, 'setup');
- payload_obj.transports.fingerprint.hash = this.stanza_get_attribute(fingerprint, 'hash');
- payload_obj.transports.fingerprint.value = this.stanza_get_value(fingerprint);
- }
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_parse_payload > ' + e, 1);
- }
-
- return payload_obj;
- },
-
- /**
- * Parses stanza candidate
- * @public
- * @param {Array} Candidates array
- */
- stanza_parse_candidate: function(stanza_content) {
- var candidate_arr = [];
-
- try {
- var _this = this;
-
- var fn_parse_transport = function(namespace, parse_obj) {
- var transport = _this.stanza_get_element(stanza_content, 'transport', namespace);
-
- if(transport.length) {
- _this.stanza_parse_node(
- transport,
- 'candidate',
- namespace,
- candidate_arr,
- parse_obj
- );
- }
- };
-
- // Parse ICE-UDP transport candidates
- fn_parse_transport(
- NS_JINGLE_TRANSPORTS_ICEUDP,
- JSJAC_JINGLE_SDP_CANDIDATE_MAP_ICEUDP
- );
-
- // Parse RAW-UDP transport candidates
- fn_parse_transport(
- NS_JINGLE_TRANSPORTS_RAWUDP,
- JSJAC_JINGLE_SDP_CANDIDATE_MAP_RAWUDP
- );
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_parse_candidate > ' + e, 1);
- }
-
- return candidate_arr;
- },
-
- /*
- * Builds stanza node
- * @param {JSJaCPacket} doc
- * @param {DOM} parent
- * @param {Array} children
- * @param {String} name
- * @param {String} ns
- * @param {String} [value]
- * @returns {DOM} Built node
- */
- stanza_build_node: function(doc, parent, children, name, ns, value) {
- var node = null;
-
- try {
- var i, child, attr;
-
- if(children && children.length) {
- for(i in children) {
- child = children[i];
-
- if(!child) continue;
-
- node = parent.appendChild(doc.buildNode(
- name,
- { 'xmlns': ns },
- (value && child[value]) ? child[value] : null
- ));
-
- for(attr in child)
- if(attr != value) this.stanza_set_attribute(node, attr, child[attr]);
- }
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_build_node > name: ' + name + ' > ' + e, 1);
- }
-
- return node;
- },
-
- /**
- * Generates stanza Jingle node
- * @public
- * @param {JSJaCPacket} stanza
- * @param {Object} attrs
- * @returns {DOM} Jingle node
- */
- stanza_generate_jingle: function(stanza, attrs) {
- var jingle = null;
-
- try {
- var cur_attr;
-
- jingle = stanza.getNode().appendChild(stanza.buildNode('jingle', { 'xmlns': this.parent.get_namespace() }));
-
- if(!attrs.sid) attrs.sid = this.parent.get_sid();
-
- for(cur_attr in attrs) this.stanza_set_attribute(jingle, cur_attr, attrs[cur_attr]);
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_generate_jingle > ' + e, 1);
- }
-
- return jingle;
- },
-
- /**
- * Generates stanza Muji node
- * @public
- * @param {JSJaCPacket} stanza
- * @returns {DOM} Muji node
- */
- stanza_generate_muji: function(stanza) {
- var muji = null;
-
- try {
- muji = stanza.getNode().appendChild(stanza.buildNode('muji', { 'xmlns': NS_MUJI }));
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_generate_muji > ' + e, 1);
- }
-
- return muji;
- },
-
- /**
- * Generates stanza session info
- * @public
- * @param {JSJaCPacket} stanza
- * @param {DOM} jingle
- * @param {Object} args
- */
- stanza_generate_session_info: function(stanza, jingle, args) {
- try {
- var info = jingle.appendChild(stanza.buildNode(args.info, { 'xmlns': NS_JINGLE_APPS_RTP_INFO }));
-
- // Info attributes
- switch(args.info) {
- case JSJAC_JINGLE_SESSION_INFO_MUTE:
- case JSJAC_JINGLE_SESSION_INFO_UNMUTE:
- this.stanza_set_attribute(info, 'creator', this.parent.get_creator_this());
- this.stanza_set_attribute(info, 'name', args.name);
-
- break;
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_generate_session_info > ' + e, 1);
- }
- },
-
- /**
- * Generates stanza local content
- * @public
- * @param {JSJaCPacket} stanza
- * @param {DOM} jingle
- * @param {Boolean} has_transport
- * @param {Object} [override_content]
- */
- stanza_generate_content_local: function(stanza, jingle, has_transport, override_content) {
- try {
- var cur_media;
- var content_local = override_content ? override_content : this.parent.get_content_local();
-
- var _this = this;
-
- var fn_build_transport = function(content, transport_obj, namespace) {
- var transport = _this.stanza_build_node(
- stanza,
- content,
- [transport_obj.attrs],
- 'transport',
- namespace
- );
-
- // Fingerprint
- _this.stanza_build_node(
- stanza,
- transport,
- [transport_obj.fingerprint],
- 'fingerprint',
- NS_JINGLE_APPS_DTLS,
- 'value'
- );
-
- // Candidates
- _this.stanza_build_node(
- stanza,
- transport,
- transport_obj.candidate,
- 'candidate',
- namespace
- );
- };
-
- for(cur_media in content_local) {
- var cur_content = content_local[cur_media];
-
- var content = jingle.appendChild(stanza.buildNode('content', { 'xmlns': this.parent.get_namespace() }));
-
- this.stanza_set_attribute(content, 'creator', cur_content.creator);
- this.stanza_set_attribute(content, 'name', cur_content.name);
- this.stanza_set_attribute(content, 'senders', cur_content.senders);
-
- // Build description (if action type allows that element)
- if(this.stanza_get_attribute(jingle, 'action') != JSJAC_JINGLE_ACTION_TRANSPORT_INFO) {
- var cs_description = cur_content.description;
- var cs_d_attrs = cs_description.attrs;
- var cs_d_rtcp_fb = cs_description['rtcp-fb'];
- var cs_d_bandwidth = cs_description.bandwidth;
- var cs_d_payload = cs_description.payload;
- var cs_d_encryption = cs_description.encryption;
- var cs_d_ssrc = cs_description.ssrc;
- var cs_d_ssrc_group = cs_description['ssrc-group'];
- var cs_d_rtp_hdrext = cs_description['rtp-hdrext'];
- var cs_d_rtcp_mux = cs_description['rtcp-mux'];
-
- var description = this.stanza_build_node(
- stanza, content,
- [cs_d_attrs],
- 'description',
- NS_JINGLE_APPS_RTP
- );
-
- // Payload-type
- if(cs_d_payload) {
- var i, j,
- cur_ssrc_id,
- cur_cs_d_ssrc_group_semantics, cur_cs_d_ssrc_group_semantics_sub,
- cs_d_p, payload_type;
-
- for(i in cs_d_payload) {
- cs_d_p = cs_d_payload[i];
-
- payload_type = this.stanza_build_node(
- stanza,
- description,
- [cs_d_p.attrs],
- 'payload-type',
- NS_JINGLE_APPS_RTP
- );
-
- // Parameter
- this.stanza_build_node(
- stanza,
- payload_type,
- cs_d_p.parameter,
- 'parameter',
- NS_JINGLE_APPS_RTP
- );
-
- // RTCP-FB (sub)
- this.stanza_build_node(
- stanza,
- payload_type,
- cs_d_p['rtcp-fb'],
- 'rtcp-fb',
- NS_JINGLE_APPS_RTP_RTCP_FB
- );
-
- // RTCP-FB-TRR-INT
- this.stanza_build_node(
- stanza,
- payload_type,
- cs_d_p['rtcp-fb-trr-int'],
- 'rtcp-fb-trr-int',
- NS_JINGLE_APPS_RTP_RTCP_FB
- );
- }
-
- // SSRC-GROUP
- if(cs_d_ssrc_group) {
- for(cur_cs_d_ssrc_group_semantics in cs_d_ssrc_group) {
- for(j in cs_d_ssrc_group[cur_cs_d_ssrc_group_semantics]) {
- cur_cs_d_ssrc_group_semantics_sub = cs_d_ssrc_group[cur_cs_d_ssrc_group_semantics][j];
-
- if(cur_cs_d_ssrc_group_semantics_sub !== undefined) {
- var ssrc_group = description.appendChild(stanza.buildNode('ssrc-group', {
- 'semantics': cur_cs_d_ssrc_group_semantics,
- 'xmlns': NS_JINGLE_APPS_RTP_SSMA
- }));
-
- this.stanza_build_node(
- stanza,
- ssrc_group,
- cur_cs_d_ssrc_group_semantics_sub.sources,
- 'source',
- NS_JINGLE_APPS_RTP_SSMA
- );
- }
- }
- }
- }
-
- // SSRC
- if(cs_d_ssrc) {
- for(cur_ssrc_id in cs_d_ssrc) {
- var ssrc = description.appendChild(stanza.buildNode('source', {
- 'ssrc': cur_ssrc_id,
- 'xmlns': NS_JINGLE_APPS_RTP_SSMA
- }));
-
- this.stanza_build_node(
- stanza,
- ssrc,
- cs_d_ssrc[cur_ssrc_id],
- 'parameter',
- NS_JINGLE_APPS_RTP_SSMA
- );
- }
- }
-
- // Encryption?
- if(has_transport === true) {
- if(cs_d_encryption &&
- (cs_d_encryption.crypto && cs_d_encryption.crypto.length ||
- cs_d_encryption['zrtp-hash'] && cs_d_encryption['zrtp-hash'].length)) {
- var encryption = description.appendChild(stanza.buildNode('encryption', { 'xmlns': NS_JINGLE_APPS_RTP }));
-
- this.stanza_set_attribute(encryption, 'required', (cs_d_encryption.attrs.required || '0'));
-
- // Crypto
- this.stanza_build_node(
- stanza,
- encryption,
- cs_d_encryption.crypto,
- 'crypto',
- NS_JINGLE_APPS_RTP
- );
-
- // ZRTP-HASH
- this.stanza_build_node(
- stanza,
- encryption,
- cs_d_encryption['zrtp-hash'],
- 'zrtp-hash',
- NS_JINGLE_APPS_RTP_ZRTP,
- 'value'
- );
- }
- }
-
- // RTCP-FB (common)
- this.stanza_build_node(
- stanza,
- description,
- cs_d_rtcp_fb,
- 'rtcp-fb',
- NS_JINGLE_APPS_RTP_RTCP_FB
- );
-
- // Bandwidth
- this.stanza_build_node(
- stanza,
- description,
- cs_d_bandwidth,
- 'bandwidth',
- NS_JINGLE_APPS_RTP,
- 'value'
- );
-
- // RTP-HDREXT
- this.stanza_build_node(
- stanza,
- description,
- cs_d_rtp_hdrext,
- 'rtp-hdrext',
- NS_JINGLE_APPS_RTP_RTP_HDREXT
- );
-
- // RTCP-MUX
- if(cs_d_rtcp_mux)
- description.appendChild(stanza.buildNode('rtcp-mux', { 'xmlns': NS_JINGLE_APPS_RTP }));
- }
- }
-
- // Build transport?
- if(has_transport === true) {
- var cs_transport = this.generate_transport(cur_content.transport);
-
- // Transport candidates: ICE-UDP
- if((cs_transport.ice.candidate).length > 0) {
- fn_build_transport(
- content,
- cs_transport.ice,
- NS_JINGLE_TRANSPORTS_ICEUDP
- );
- }
-
- // Transport candidates: RAW-UDP
- if((cs_transport.raw.candidate).length > 0) {
- fn_build_transport(
- content,
- cs_transport.raw,
- NS_JINGLE_TRANSPORTS_RAWUDP
- );
- }
- }
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_generate_content_local > ' + e, 1);
- }
- },
-
- /**
- * Generates stanza local group
- * @public
- * @param {JSJaCPacket} stanza
- * @param {DOM} jingle
- */
- stanza_generate_group_local: function(stanza, jingle) {
- try {
- var i,
- cur_semantics, cur_group, cur_group_name,
- group;
-
- var group_local = this.parent.get_group_local();
-
- for(cur_semantics in group_local) {
- cur_group = group_local[cur_semantics];
-
- group = jingle.appendChild(stanza.buildNode('group', {
- 'xmlns': NS_JINGLE_APPS_GROUPING,
- 'semantics': cur_semantics
- }));
-
- for(i in cur_group) {
- cur_group_name = cur_group[i];
-
- group.appendChild(stanza.buildNode('content', {
- 'xmlns': NS_JINGLE_APPS_GROUPING,
- 'name': cur_group_name
- }));
- }
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] stanza_generate_group_local > ' + e, 1);
- }
- },
-
- /**
- * Generates content
- * @public
- * @param {String} creator
- * @param {String} name
- * @param {Object} senders
- * @param {Object} payloads
- * @param {Object} transports
- * @returns {Object} Content object
- */
- generate_content: function(creator, name, senders, payloads, transports) {
- var content_obj = {};
-
- try {
- // Generation process
- content_obj.creator = creator;
- content_obj.name = name;
- content_obj.senders = senders;
- content_obj.description = {};
- content_obj.transport = {};
-
- // Generate description
- var i;
- var description_cpy = this.object_clone(payloads.descriptions);
- var description_ptime = description_cpy.attrs.ptime;
- var description_maxptime = description_cpy.attrs.maxptime;
-
- if(description_ptime) delete description_cpy.attrs.ptime;
- if(description_maxptime) delete description_cpy.attrs.maxptime;
-
- for(i in description_cpy.payload) {
- if(!('attrs' in description_cpy.payload[i]))
- description_cpy.payload[i].attrs = {};
-
- description_cpy.payload[i].attrs.ptime = description_ptime;
- description_cpy.payload[i].attrs.maxptime = description_maxptime;
- }
-
- content_obj.description = description_cpy;
-
- // Generate transport
- content_obj.transport.candidate = transports;
- content_obj.transport.attrs = {};
- content_obj.transport.attrs.pwd = payloads.transports ? payloads.transports.pwd : null;
- content_obj.transport.attrs.ufrag = payloads.transports ? payloads.transports.ufrag : null;
-
- if(payloads.transports && payloads.transports.fingerprint)
- content_obj.transport.fingerprint = payloads.transports.fingerprint;
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] generate_content > ' + e, 1);
- }
-
- return content_obj;
- },
-
- /**
- * Generates transport
- * @public
- * @param {Object} transport_init_obj
- * @returns {Object} Transport object
- */
- generate_transport: function(transport_init_obj) {
- var transport_obj = {
- 'ice': {},
- 'raw': {}
- };
-
- try {
- var i, j, k,
- cur_attr,
- cur_candidate, cur_transport;
-
- // Reduce RAW-UDP map object for simpler search
- var rawudp_map = {};
- for(i in JSJAC_JINGLE_SDP_CANDIDATE_MAP_RAWUDP) {
- rawudp_map[JSJAC_JINGLE_SDP_CANDIDATE_MAP_RAWUDP[i].n] = 1;
- }
-
- var fn_init_obj = function(transport_sub_obj) {
- transport_sub_obj.attrs = transport_init_obj.attrs;
- transport_sub_obj.fingerprint = transport_init_obj.fingerprint;
- transport_sub_obj.candidate = [];
- };
-
- for(j in transport_obj)
- fn_init_obj(transport_obj[j]);
-
- // Nest candidates in their category
- for(k = 0; k < (transport_init_obj.candidate).length; k++) {
- cur_candidate = this.object_clone(transport_init_obj.candidate[k]);
-
- if(cur_candidate.type in JSJAC_JINGLE_SDP_CANDIDATE_TYPES) {
- // Remove attributes that are not required by RAW-UDP (XEP-0177 compliance)
- if(JSJAC_JINGLE_SDP_CANDIDATE_TYPES[cur_candidate.type] === JSJAC_JINGLE_SDP_CANDIDATE_METHOD_RAW) {
- for(cur_attr in cur_candidate) {
- if(typeof rawudp_map[cur_attr] == 'undefined')
- delete cur_candidate[cur_attr];
- }
- }
-
- cur_transport = transport_obj[JSJAC_JINGLE_SDP_CANDIDATE_TYPES[cur_candidate.type]];
- cur_transport.candidate.push(cur_candidate);
- }
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] generate_transport > ' + e, 1);
- }
-
- return transport_obj;
- },
-
- /**
- * Builds local content
- * @public
- */
- build_content_local: function() {
- try {
- var cur_name;
-
- for(cur_name in this.parent.get_name()) {
- this.parent._set_content_local(
- cur_name,
-
- this.generate_content(
- JSJAC_JINGLE_SENDERS_INITIATOR.jingle,
- cur_name,
- this.parent.get_senders(cur_name),
- this.parent.get_payloads_local(cur_name),
- this.parent.get_candidates_local(cur_name)
- )
- );
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] build_content_local > ' + e, 1);
- }
- },
-
- /**
- * Builds remote content
- * @public
- */
- build_content_remote: function() {
- try {
- var cur_name;
-
- for(cur_name in this.parent.get_name()) {
- this.parent._set_content_remote(
- cur_name,
-
- this.generate_content(
- this.parent.get_creator(cur_name),
- cur_name,
- this.parent.get_senders(cur_name),
- this.parent.get_payloads_remote(cur_name),
- this.parent.get_candidates_remote(cur_name)
- )
- );
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] build_content_remote > ' + e, 1);
- }
- },
-
- /**
- * Generates media name
- * @public
- * @param {String} media
- * @returns {String} Media name
- */
- name_generate: function(media) {
- var name = null;
-
- try {
- var i, cur_name;
-
- var content_all = [];
-
- // Push remote contents
- var cur_participant, participants,
- content_remote = {};
-
- if(typeof this.parent.get_content_remote == 'function')
- content_remote = this.parent.get_content_remote();
-
- for(cur_participant in content_remote) {
- content_all.push(
- content_remote[cur_participant]
- );
- }
-
- // Push local content
- content_all.push(
- this.parent.get_content_local()
- );
-
- for(i in content_all) {
- for(cur_name in content_all[i]) {
- try {
- if(content_all[i][cur_name].description.attrs.media === media) {
- name = cur_name; break;
- }
- } catch(e) {}
- }
-
- if(name) break;
- }
-
- if(!name) name = media;
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] name_generate > ' + e, 1);
- }
-
- return name;
- },
-
- /**
- * Generates media
- * @public
- * @param {String} name
- * @returns {String} Media
- */
- media_generate: function(name) {
- var cur_media;
- var media = null;
-
- try {
- if(typeof name == 'number') {
- for(cur_media in JSJAC_JINGLE_MEDIAS) {
- if(name == parseInt(JSJAC_JINGLE_MEDIAS[cur_media].label, 10)) {
- media = cur_media; break;
- }
- }
- } else {
- for(cur_media in JSJAC_JINGLE_MEDIAS) {
- if(name == this.name_generate(cur_media)) {
- media = cur_media; break;
- }
- }
- }
-
- if(!media) media = name;
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] media_generate > ' + e, 1);
- }
-
- return media;
- },
-
- /**
- * Generates a MD5 hash from the given value
- * @public
- * @param {String} value
- * @returns {String} MD5 hash value
- */
- generate_hash_md5: function(value) {
- return hex_md5(value);
- },
-
- /**
- * Generates a random value
- * @public
- * @param {Number} i
- * @returns {String} Random value
- */
- generate_random: function(i) {
- return JSJaCUtils.cnonce(i);
- },
-
- /**
- * Generates a random SID value
- * @public
- * @returns {String} SID value
- */
- generate_sid: function() {
- return this.generate_random(16);
- },
-
- /**
- * Generates a random IID value
- * @public
- * @returns {String} IID value
- */
- generate_iid: function() {
- return this.generate_random(24);
- },
-
- /**
- * Generates a random password value
- * @public
- * @returns {String} Password value
- */
- generate_password: function() {
- return this.generate_random(64);
- },
-
- /**
- * Generates a random ID value
- * @public
- * @returns {String} ID value
- */
- generate_id: function() {
- return this.generate_random(10);
- },
-
- /**
- * Generates the constraints object
- * @public
- * @returns {Object} constraints object
- */
- generate_constraints: function() {
- var constraints = {
- audio : false,
- video : false
- };
-
- try {
- // Medias?
- constraints.audio = true;
- constraints.video = (this.parent.get_media() == JSJAC_JINGLE_MEDIA_VIDEO);
-
- // Video configuration
- if(constraints.video === true) {
- // Resolution?
- switch(this.parent.get_resolution()) {
- // 16:9
- case '720':
- case 'hd':
- constraints.video = {
- mandatory : {
- minWidth : 1280,
- minHeight : 720,
- minAspectRatio : 1.77
- }
- };
- break;
-
- case '360':
- case 'md':
- constraints.video = {
- mandatory : {
- minWidth : 640,
- minHeight : 360,
- minAspectRatio : 1.77
- }
- };
- break;
-
- case '180':
- case 'sd':
- constraints.video = {
- mandatory : {
- minWidth : 320,
- minHeight : 180,
- minAspectRatio : 1.77
- }
- };
- break;
-
- // 4:3
- case '960':
- constraints.video = {
- mandatory : {
- minWidth : 960,
- minHeight : 720
- }
- };
- break;
-
- case '640':
- case 'vga':
- constraints.video = {
- mandatory : {
- maxWidth : 640,
- maxHeight : 480
- }
- };
- break;
-
- case '320':
- constraints.video = {
- mandatory : {
- maxWidth : 320,
- maxHeight : 240
- }
- };
- break;
- }
-
- // Bandwidth?
- if(this.parent.get_bandwidth())
- constraints.video.optional = [{ bandwidth: this.parent.get_bandwidth() }];
-
- // FPS?
- if(this.parent.get_fps())
- constraints.video.mandatory.minFrameRate = this.parent.get_fps();
-
- // Custom video source? (screenshare)
- if(this.parent.get_media() == JSJAC_JINGLE_MEDIA_VIDEO &&
- this.parent.get_video_source() != JSJAC_JINGLE_VIDEO_SOURCE_CAMERA ) {
- if(document.location.protocol !== 'https:')
- this.parent.get_debug().log('[JSJaCJingle:utils] generate_constraints > HTTPS might be required to share screen, otherwise you may get a permission denied error.', 0);
-
- // Unsupported browser? (for that feature)
- if(this.browser().name != JSJAC_JINGLE_BROWSER_CHROME) {
- this.parent.get_debug().log('[JSJaCJingle:utils] generate_constraints > Video source not supported by ' + this.browser().name + ' (source: ' + this.parent.get_video_source() + ').', 1);
-
- this.parent.terminate(JSJAC_JINGLE_REASON_MEDIA_ERROR);
- return;
- }
-
- constraints.audio = false;
- constraints.video.mandatory = {
- 'chromeMediaSource': this.parent.get_video_source()
- };
- }
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] generate_constraints > ' + e, 1);
- }
-
- return constraints;
- },
-
- /**
- * Returns whether SDP credentials are common or not (fingerprint & so)
- * @public
- * @param {Array} payloads
- * @returns {Boolean} Credientials same state
- */
- is_sdp_common_credentials: function(payloads) {
- var is_same = true;
-
- try {
- var i,
- prev_credentials, cur_credentials;
-
- for(i in payloads) {
- cur_credentials = payloads[i].transports;
-
- if(typeof prev_credentials == 'object') {
- if((prev_credentials.ufrag !== cur_credentials.ufrag) ||
- (prev_credentials.pwd !== cur_credentials.pwd) ||
- this.object_equal(prev_credentials.fingerprint, cur_credentials.fingerprint)
- ) {
- is_same = false;
- break;
- }
- }
-
- prev_credentials = cur_credentials;
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] is_sdp_common_credentials > ' + e, 1);
- }
-
- return is_same;
- },
-
- /**
- * Returns number of candidates in candidates object
- * @public
- * @param {Object} candidates_obj
- * @returns {Number} Number of candidates
- */
- count_candidates: function(candidates_obj) {
- var count_candidates = 0;
-
- try {
- var i;
-
- for(i in candidates_obj) {
- count_candidates += (typeof candidates_obj[i] == 'object') ? candidates_obj[i].length : 0;
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] count_candidates > ' + e, 1);
- } finally {
- return count_candidates;
- }
-
- },
-
- /**
- * Extracts network main details
- * @public
- * @param {String} media
- * @param {Array} candidates
- * @returns {Object} Network details
- */
- network_extract_main: function(media, candidates) {
- var network_obj = {
- 'ip': JSJAC_JINGLE_SDP_CANDIDATE_IP_DEFAULT,
- 'port': JSJAC_JINGLE_SDP_CANDIDATE_PORT_DEFAULT,
- 'scope': JSJAC_JINGLE_SDP_CANDIDATE_SCOPE_DEFAULT,
- 'protocol': JSJAC_JINGLE_SDP_CANDIDATE_IPVERSION_DEFAULT
- };
-
- var local_obj, remote_obj;
-
- try {
- var i,
- cur_candidate, cur_candidate_parse;
-
- var fn_proceed_parse = function(type, candidate_eval) {
- var r_lan, protocol;
-
- var parse_obj = {
- 'ip': candidate_eval.ip,
- 'port': candidate_eval.port
- };
-
- if(candidate_eval.ip.match(R_NETWORK_IP.all.v4)) {
- r_lan = R_NETWORK_IP.lan.v4;
- parse_obj.protocol = JSJAC_JINGLE_SDP_CANDIDATE_IPVERSION_V4;
- } else if(candidate_eval.ip.match(R_NETWORK_IP.all.v6)) {
- r_lan = R_NETWORK_IP.lan.v6;
- parse_obj.protocol = JSJAC_JINGLE_SDP_CANDIDATE_IPVERSION_V6;
- } else {
- return;
- }
-
- if((type === JSJAC_JINGLE_SDP_CANDIDATE_TYPE_HOST) &&
- candidate_eval.ip.match(r_lan)) {
- // Local
- parse_obj.scope = JSJAC_JINGLE_SDP_CANDIDATE_SCOPE_LOCAL;
- } else if(type === JSJAC_JINGLE_SDP_CANDIDATE_TYPE_SRFLX) {
- // Remote
- parse_obj.scope = JSJAC_JINGLE_SDP_CANDIDATE_SCOPE_REMOTE;
- } else {
- return;
- }
-
- return parse_obj;
- };
-
- for(i in candidates) {
- cur_candidate = candidates[i];
-
- if(cur_candidate.id == media || cur_candidate.label == media) {
- cur_candidate_parse = this.parent.sdp._parse_candidate(cur_candidate.candidate);
-
- if(cur_candidate_parse.type === JSJAC_JINGLE_SDP_CANDIDATE_TYPE_HOST) {
- // Only proceed if no local network yet
- if(typeof local_obj == 'undefined') {
- local_obj = fn_proceed_parse(JSJAC_JINGLE_SDP_CANDIDATE_TYPE_HOST, cur_candidate_parse);
- }
- } else if(cur_candidate_parse.type === JSJAC_JINGLE_SDP_CANDIDATE_TYPE_SRFLX) {
- // Only proceed if no remote network yet
- if(typeof remote_obj == 'undefined') {
- remote_obj = fn_proceed_parse(JSJAC_JINGLE_SDP_CANDIDATE_TYPE_SRFLX, cur_candidate_parse);
- }
- }
- }
- }
-
- if(typeof remote_obj != 'undefined') {
- network_obj = remote_obj;
- } else if(typeof local_obj != 'undefined') {
- network_obj = local_obj;
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] network_extract_main > ' + e, 1);
- }
-
- return network_obj;
- },
-
- /**
- * Extracts username from full JID
- * @public
- * @param {String} full_jid
- * @returns {String|Object} Username
- */
- extract_username: function(full_jid) {
- try {
- return (new JSJaCJID(full_jid)).getResource();
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] extract_username > ' + e, 1);
- }
-
- return null;
- },
-
- /**
- * Returns our negotiation status
- * @public
- * @returns {String} Negotiation status
- */
- negotiation_status: function() {
- return (this.parent.get_initiator() == this.connection_jid()) ? JSJAC_JINGLE_SENDERS_INITIATOR.jingle : JSJAC_JINGLE_SENDERS_RESPONDER.jingle;
- },
-
- /**
- * Get my connection JID
- * @public
- * @returns {String} JID value
- */
- connection_jid: function() {
- return this.parent.get_connection().username + '@' +
- this.parent.get_connection().domain + '/' +
- this.parent.get_connection().resource;
- },
-
- /**
- * Get my connection username
- * @public
- * @returns {String} Username value
- */
- connection_username: function() {
- return this.parent.get_connection().username;
- },
-
- /**
- * Get my connection domain
- * @public
- * @returns {String} Domain value
- */
- connection_domain: function() {
- return this.parent.get_connection().domain;
- },
-
- /**
- * Get my connection resource
- * @public
- * @returns {String} Resource value
- */
- connection_resource: function() {
- return this.parent.get_connection().resource;
- },
-
- /**
- * Registers a view to map
- * @public
- * @param {String} type
- * @returns {Object} View register functions map
- */
- map_register_view: function(type) {
- var fn = {
- type : null,
- mute : false,
-
- view : {
- get : null,
- set : null
- },
-
- stream : {
- get : null,
- set : null
- }
- };
-
- try {
- switch(type) {
- case JSJAC_JINGLE_DIRECTION_LOCAL:
- fn.type = type;
- fn.mute = true;
- fn.view.get = this.parent.get_local_view;
- fn.view.set = this.parent._set_local_view;
- fn.stream.get = this.parent.get_local_stream;
- fn.stream.set = this.parent._set_local_stream;
- break;
-
- case JSJAC_JINGLE_DIRECTION_REMOTE:
- fn.type = type;
- fn.view.get = this.parent.get_remote_view;
- fn.view.set = this.parent._set_remote_view;
- fn.stream.get = this.parent.get_remote_stream;
- fn.stream.set = this.parent._set_remote_stream;
- break;
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:utils] map_register_view > ' + e, 1);
- }
-
- return fn;
- },
-
- /**
- * Unregister a view from map
- * @public
- * @param {String} type
- * @returns {Object} View unregister functions map
- */
- map_unregister_view: function(type) {
- return this.map_register_view(type);
- },
- }
-);
-
-/**
- * @fileoverview JSJaC Jingle library - SDP tools
- *
- * @url https://github.com/valeriansaliou/jsjac-jingle
- * @depends https://github.com/sstrigler/JSJaC
- * @author Valérian Saliou https://valeriansaliou.name/
- * @license Mozilla Public License v2.0 (MPL v2.0)
- */
-
-
-/** @module jsjac-jingle/sdp */
-/** @exports JSJaCJingleSDP */
-
-
-/**
- * SDP helpers class.
- * @class
- * @classdesc SDP helpers class.
- * @requires nicolas-van/ring.js
- * @requires sstrigler/JSJaC
- * @see {@link http://ringjs.neoname.eu/|Ring.js}
- * @param {JSJaCJingleSingle|JSJaCJingleMuji} parent Parent class.
- */
-var JSJaCJingleSDP = ring.create(
- /** @lends JSJaCJingleSDP.prototype */
- {
- /**
- * Constructor
- */
- constructor: function(parent) {
- /**
- * @constant
- * @member {JSJaCJingleSingle|JSJaCJingleMuji}
- * @readonly
- * @default
- * @public
- */
- this.parent = parent;
- },
-
-
- /**
- * Parses SDP payload
- * @private
- * @param {String} sdp_payload
- * @returns {Object} Parsed payload object
- */
- _parse_payload: function(sdp_payload) {
- var payload = {};
-
- try {
- if(!sdp_payload || sdp_payload.indexOf('\n') == -1) return payload;
-
- // Common vars
- var lines = sdp_payload.split('\n');
- var cur_name = null;
- var cur_media = null;
-
- var common_transports = {
- 'fingerprint' : {},
- 'pwd' : null,
- 'ufrag' : null
- };
-
- var error, i, j, k,
- cur_line,
- cur_fmtp, cur_fmtp_id, cur_fmtp_values, cur_fmtp_attrs, cur_fmtp_key, cur_fmtp_value,
- cur_rtpmap, cur_rtcp_fb, cur_rtcp_fb_trr_int,
- cur_crypto, cur_zrtp_hash, cur_fingerprint, cur_ssrc,
- cur_ssrc_group, cur_ssrc_group_semantics, cur_ssrc_group_ids, cur_ssrc_group_id,
- cur_extmap, cur_rtpmap_id, cur_rtcp_fb_id, cur_bandwidth,
- m_rtpmap, m_fmtp, m_rtcp_fb, m_rtcp_fb_trr_int, m_crypto, m_zrtp_hash,
- m_fingerprint, m_pwd, m_ufrag, m_ptime, m_maxptime, m_bandwidth, m_media, m_candidate,
- cur_check_name, cur_transport_sub;
-
- // Common functions
- var init_content = function(name) {
- if(!(name in payload)) payload[name] = {};
- };
-
- var init_descriptions = function(name, sub, sub_default) {
- init_content(name);
-
- if(!('descriptions' in payload[name])) payload[name].descriptions = {};
- if(!(sub in payload[name].descriptions)) payload[name].descriptions[sub] = sub_default;
- };
-
- var init_transports = function(name, sub, sub_default) {
- init_content(name);
-
- if(!('transports' in payload[name])) payload[name].transports = {};
- if(!(sub in payload[name].transports)) payload[name].transports[sub] = sub_default;
- };
-
- var init_ssrc = function(name, id) {
- init_descriptions(name, 'ssrc', {});
-
- if(!(id in payload[name].descriptions.ssrc))
- payload[name].descriptions.ssrc[id] = [];
- };
-
- var init_ssrc_group = function(name, semantics) {
- init_descriptions(name, 'ssrc-group', {});
-
- if(!(semantics in payload[name].descriptions['ssrc-group']))
- payload[name].descriptions['ssrc-group'][semantics] = [];
- };
-
- var init_payload = function(name, id) {
- init_descriptions(name, 'payload', {});
-
- if(!(id in payload[name].descriptions.payload)) {
- payload[name].descriptions.payload[id] = {
- 'attrs' : {},
- 'parameter' : [],
- 'rtcp-fb' : [],
- 'rtcp-fb-trr-int' : []
- };
- }
- };
-
- var init_encryption = function(name) {
- init_descriptions(name, 'encryption', {
- 'attrs' : {
- 'required' : '1'
- },
-
- 'crypto' : [],
- 'zrtp-hash' : []
- });
- };
-
- for(i in lines) {
- cur_line = lines[i];
-
- m_media = (R_WEBRTC_SDP_ICE_PAYLOAD.media).exec(cur_line);
-
- // 'audio/video' line?
- if(m_media) {
- cur_media = m_media[1];
- cur_name = this.parent.utils.name_generate(cur_media);
-
- // Push it to parent array
- init_descriptions(cur_name, 'attrs', {});
- payload[cur_name].descriptions.attrs.media = cur_media;
-
- continue;
- }
-
- m_bandwidth = (R_WEBRTC_SDP_ICE_PAYLOAD.bandwidth).exec(cur_line);
-
- // 'bandwidth' line?
- if(m_bandwidth) {
- // Populate current object
- error = 0;
- cur_bandwidth = {};
-
- cur_bandwidth.type = m_bandwidth[1] || error++;
- cur_bandwidth.value = m_bandwidth[2] || error++;
-
- // Incomplete?
- if(error !== 0) continue;
-
- // Push it to parent array
- init_descriptions(cur_name, 'bandwidth', []);
- payload[cur_name].descriptions.bandwidth.push(cur_bandwidth);
-
- continue;
- }
-
- m_rtpmap = (R_WEBRTC_SDP_ICE_PAYLOAD.rtpmap).exec(cur_line);
-
- // 'rtpmap' line?
- if(m_rtpmap) {
- // Populate current object
- error = 0;
- cur_rtpmap = {};
-
- cur_rtpmap.channels = m_rtpmap[6];
- cur_rtpmap.clockrate = m_rtpmap[4];
- cur_rtpmap.id = m_rtpmap[1] || error++;
- cur_rtpmap.name = m_rtpmap[3];
-
- // Incomplete?
- if(error !== 0) continue;
-
- cur_rtpmap_id = cur_rtpmap.id;
-
- // Push it to parent array
- init_payload(cur_name, cur_rtpmap_id);
- payload[cur_name].descriptions.payload[cur_rtpmap_id].attrs = cur_rtpmap;
-
- continue;
- }
-
- m_fmtp = (R_WEBRTC_SDP_ICE_PAYLOAD.fmtp).exec(cur_line);
-
- // 'fmtp' line?
- if(m_fmtp) {
- cur_fmtp_id = m_fmtp[1];
-
- if(cur_fmtp_id) {
- cur_fmtp_values = m_fmtp[2] ? (m_fmtp[2]).split(';') : [];
-
- for(j in cur_fmtp_values) {
- // Parse current attribute
- if(cur_fmtp_values[j].indexOf('=') !== -1) {
- cur_fmtp_attrs = cur_fmtp_values[j].split('=');
- cur_fmtp_key = cur_fmtp_attrs[0];
- cur_fmtp_value = cur_fmtp_attrs[1];
-
- while(cur_fmtp_key.length && !cur_fmtp_key[0])
- cur_fmtp_key = cur_fmtp_key.substring(1);
- } else {
- cur_fmtp_key = cur_fmtp_values[j];
- cur_fmtp_value = null;
- }
-
- // Populate current object
- error = 0;
- cur_fmtp = {};
-
- cur_fmtp.name = cur_fmtp_key || error++;
- cur_fmtp.value = cur_fmtp_value;
-
- // Incomplete?
- if(error !== 0) continue;
-
- // Push it to parent array
- init_payload(cur_name, cur_fmtp_id);
- payload[cur_name].descriptions.payload[cur_fmtp_id].parameter.push(cur_fmtp);
- }
- }
-
- continue;
- }
-
- m_rtcp_fb = (R_WEBRTC_SDP_ICE_PAYLOAD.rtcp_fb).exec(cur_line);
-
- // 'rtcp-fb' line?
- if(m_rtcp_fb) {
- // Populate current object
- error = 0;
- cur_rtcp_fb = {};
-
- cur_rtcp_fb.id = m_rtcp_fb[1] || error++;
- cur_rtcp_fb.type = m_rtcp_fb[2];
- cur_rtcp_fb.subtype = m_rtcp_fb[4];
-
- // Incomplete?
- if(error !== 0) continue;
-
- cur_rtcp_fb_id = cur_rtcp_fb.id;
-
- // Push it to parent array
- if(cur_rtcp_fb_id == '*') {
- init_descriptions(cur_name, 'rtcp-fb', []);
- (payload[cur_name].descriptions['rtcp-fb']).push(cur_rtcp_fb);
- } else {
- init_payload(cur_name, cur_rtcp_fb_id);
- (payload[cur_name].descriptions.payload[cur_rtcp_fb_id]['rtcp-fb']).push(cur_rtcp_fb);
- }
-
- continue;
- }
-
- m_rtcp_fb_trr_int = (R_WEBRTC_SDP_ICE_PAYLOAD.rtcp_fb_trr_int).exec(cur_line);
-
- // 'rtcp-fb-trr-int' line?
- if(m_rtcp_fb_trr_int) {
- // Populate current object
- error = 0;
- cur_rtcp_fb_trr_int = {};
-
- cur_rtcp_fb_trr_int.id = m_rtcp_fb_trr_int[1] || error++;
- cur_rtcp_fb_trr_int.value = m_rtcp_fb_trr_int[2] || error++;
-
- // Incomplete?
- if(error !== 0) continue;
-
- cur_rtcp_fb_trr_int_id = cur_rtcp_fb_trr_int.id;
-
- // Push it to parent array
- init_payload(cur_name, cur_rtcp_fb_trr_int_id);
- (payload[cur_name].descriptions.payload[cur_rtcp_fb_trr_int_id]['rtcp-fb-trr-int']).push(cur_rtcp_fb_trr_int);
-
- continue;
- }
-
- m_crypto = (R_WEBRTC_SDP_ICE_PAYLOAD.crypto).exec(cur_line);
-
- // 'crypto' line?
- if(m_crypto) {
- // Populate current object
- error = 0;
- cur_crypto = {};
-
- cur_crypto['crypto-suite'] = m_crypto[2] || error++;
- cur_crypto['key-params'] = m_crypto[3] || error++;
- cur_crypto['session-params'] = m_crypto[5];
- cur_crypto.tag = m_crypto[1] || error++;
-
- // Incomplete?
- if(error !== 0) continue;
-
- // Push it to parent array
- init_encryption(cur_name);
- (payload[cur_name].descriptions.encryption.crypto).push(cur_crypto);
-
- continue;
- }
-
- m_zrtp_hash = (R_WEBRTC_SDP_ICE_PAYLOAD.zrtp_hash).exec(cur_line);
-
- // 'zrtp-hash' line?
- if(m_zrtp_hash) {
- // Populate current object
- error = 0;
- cur_zrtp_hash = {};
-
- cur_zrtp_hash.version = m_zrtp_hash[1] || error++;
- cur_zrtp_hash.value = m_zrtp_hash[2] || error++;
-
- // Incomplete?
- if(error !== 0) continue;
-
- // Push it to parent array
- init_encryption(cur_name);
- (payload[cur_name].descriptions.encryption['zrtp-hash']).push(cur_zrtp_hash);
-
- continue;
- }
-
- m_ptime = (R_WEBRTC_SDP_ICE_PAYLOAD.ptime).exec(cur_line);
-
- // 'ptime' line?
- if(m_ptime) {
- // Push it to parent array
- init_descriptions(cur_name, 'attrs', {});
- payload[cur_name].descriptions.attrs.ptime = m_ptime[1];
-
- continue;
- }
-
- m_maxptime = (R_WEBRTC_SDP_ICE_PAYLOAD.maxptime).exec(cur_line);
-
- // 'maxptime' line?
- if(m_maxptime) {
- // Push it to parent array
- init_descriptions(cur_name, 'attrs', {});
- payload[cur_name].descriptions.attrs.maxptime = m_maxptime[1];
-
- continue;
- }
-
- m_ssrc = (R_WEBRTC_SDP_ICE_PAYLOAD.ssrc).exec(cur_line);
-
- // 'ssrc' line?
- if(m_ssrc) {
- // Populate current object
- error = 0;
- cur_ssrc = {};
-
- cur_ssrc_id = m_ssrc[1] || error++;
- cur_ssrc.name = m_ssrc[2] || error++;
- cur_ssrc.value = m_ssrc[4];
-
- // Incomplete?
- if(error !== 0) continue;
-
- // Push it to storage array
- init_ssrc(cur_name, cur_ssrc_id);
- (payload[cur_name].descriptions.ssrc[cur_ssrc_id]).push(cur_ssrc);
-
- // Push it to parent array (common attr required for Jingle)
- init_descriptions(cur_name, 'attrs', {});
- payload[cur_name].descriptions.attrs.ssrc = cur_ssrc_id;
-
- continue;
- }
-
- m_ssrc_group = (R_WEBRTC_SDP_ICE_PAYLOAD.ssrc_group).exec(cur_line);
-
- // 'ssrc-group' line?
- if(m_ssrc_group) {
- // Populate current object
- error = 0;
- cur_ssrc_group = {};
-
- cur_ssrc_group_semantics = m_ssrc_group[1] || error++;
- cur_ssrc_group_ids = m_ssrc_group[2] || error++;
-
- // Explode sources into a list
- cur_ssrc_group.sources = [];
- cur_ssrc_group_ids = cur_ssrc_group_ids.trim();
-
- if(cur_ssrc_group_ids) {
- cur_ssrc_group_ids = cur_ssrc_group_ids.split(' ');
-
- for(k in cur_ssrc_group_ids) {
- cur_ssrc_group_id = cur_ssrc_group_ids[k].trim();
-
- if(cur_ssrc_group_id) {
- cur_ssrc_group.sources.push({
- 'ssrc': cur_ssrc_group_id
- });
- }
- }
- }
-
- if(cur_ssrc_group.sources.length === 0) error++;
-
- // Incomplete?
- if(error !== 0) continue;
-
- // Push it to storage array
- init_ssrc_group(cur_name, cur_ssrc_group_semantics);
- (payload[cur_name].descriptions['ssrc-group'][cur_ssrc_group_semantics]).push(cur_ssrc_group);
-
- continue;
- }
-
- m_rtcp_mux = (R_WEBRTC_SDP_ICE_PAYLOAD.rtcp_mux).exec(cur_line);
-
- // 'rtcp-mux' line?
- if(m_rtcp_mux) {
- // Push it to parent array
- init_descriptions(cur_name, 'rtcp-mux', 1);
-
- continue;
- }
-
- m_extmap = (R_WEBRTC_SDP_ICE_PAYLOAD.extmap).exec(cur_line);
-
- // 'extmap' line?
- if(m_extmap) {
- // Populate current object
- error = 0;
- cur_extmap = {};
-
- cur_extmap.id = m_extmap[1] || error++;
- cur_extmap.uri = m_extmap[4] || error++;
- cur_extmap.senders = m_extmap[3];
-
- // Incomplete?
- if(error !== 0) continue;
-
- // Push it to parent array
- init_descriptions(cur_name, 'rtp-hdrext', []);
- (payload[cur_name].descriptions['rtp-hdrext']).push(cur_extmap);
-
- continue;
- }
-
- m_fingerprint = (R_WEBRTC_SDP_ICE_PAYLOAD.fingerprint).exec(cur_line);
-
- // 'fingerprint' line?
- if(m_fingerprint) {
- // Populate current object
- error = 0;
- cur_fingerprint = common_transports.fingerprint || {};
-
- cur_fingerprint.hash = m_fingerprint[1] || error++;
- cur_fingerprint.value = m_fingerprint[2] || error++;
-
- // Incomplete?
- if(error !== 0) continue;
-
- // Push it to parent array
- init_transports(cur_name, 'fingerprint', cur_fingerprint);
- common_transports.fingerprint = cur_fingerprint;
-
- continue;
- }
-
- m_setup = (R_WEBRTC_SDP_ICE_PAYLOAD.setup).exec(cur_line);
-
- // 'setup' line?
- if(m_setup) {
- // Populate current object
- cur_fingerprint = common_transports.fingerprint || {};
- cur_fingerprint.setup = m_setup[1];
-
- // Push it to parent array
- if(cur_fingerprint.setup) {
- // Map it to fingerprint as XML-wise it is related
- init_transports(cur_name, 'fingerprint', cur_fingerprint);
- common_transports.fingerprint = cur_fingerprint;
- }
-
- continue;
- }
-
- m_pwd = (R_WEBRTC_SDP_ICE_PAYLOAD.pwd).exec(cur_line);
-
- // 'pwd' line?
- if(m_pwd) {
- init_transports(cur_name, 'pwd', m_pwd[1]);
-
- if(!common_transports.pwd)
- common_transports.pwd = m_pwd[1];
-
- continue;
- }
-
- m_ufrag = (R_WEBRTC_SDP_ICE_PAYLOAD.ufrag).exec(cur_line);
-
- // 'ufrag' line?
- if(m_ufrag) {
- init_transports(cur_name, 'ufrag', m_ufrag[1]);
-
- if(!common_transports.ufrag)
- common_transports.ufrag = m_ufrag[1];
-
- continue;
- }
-
- // 'candidate' line? (shouldn't be there)
- m_candidate = R_WEBRTC_SDP_CANDIDATE.exec(cur_line);
-
- if(m_candidate) {
- this._parse_candidate_store({
- media : cur_media,
- candidate : cur_line
- });
-
- continue;
- }
- }
-
- // Filter medias
- for(cur_check_name in payload) {
- // Undesired media?
- if(!this.parent.get_name()[cur_check_name]) {
- delete payload[cur_check_name]; continue;
- }
-
- // Validate transports
- if(typeof payload[cur_check_name].transports !== 'object')
- payload[cur_check_name].transports = {};
-
- for(cur_transport_sub in common_transports) {
- if(!payload[cur_check_name].transports[cur_transport_sub])
- payload[cur_check_name].transports[cur_transport_sub] = common_transports[cur_transport_sub];
- }
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:sdp] _parse_payload > ' + e, 1);
- }
-
- return payload;
- },
-
- /**
- * Parses SDP group
- * @private
- * @param {String} sdp_payload
- * @returns {Object} Parsed group object
- */
- _parse_group: function(sdp_payload) {
- var group = {};
-
- try {
- if(!sdp_payload || sdp_payload.indexOf('\n') == -1) return group;
-
- // Common vars
- var lines = sdp_payload.split('\n');
- var i, cur_line,
- m_group;
-
- var init_group = function(semantics) {
- if(!(semantics in group)) group[semantics] = [];
- };
-
- for(i in lines) {
- cur_line = lines[i];
-
- // 'group' line?
- m_group = (R_WEBRTC_SDP_ICE_PAYLOAD.group).exec(cur_line);
-
- if(m_group) {
- if(m_group[1] && m_group[2]) {
- init_group(m_group[1]);
-
- group[m_group[1]] = (m_group[2].indexOf(' ') === -1 ? [m_group[2]] : m_group[2].split(' '));
- }
-
- continue;
- }
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:sdp] _parse_group > ' + e, 1);
- }
-
- return group;
- },
-
- /**
- * Update video resolution in payload
- * @private
- * @param {Object} payload
- * @returns {Object} Updated payload
- */
- _resolution_payload: function(payload) {
- try {
- if(!payload || typeof payload !== 'object') return {};
-
- // No video?
- if(this.parent.get_media_all().indexOf(JSJAC_JINGLE_MEDIA_VIDEO) === -1) return payload;
-
- var i, j, k, cur_media;
- var cur_payload, res_arr, constraints;
- var res_height = null;
- var res_width = null;
-
- // Try local view? (more reliable)
- for(i in this.parent.get_local_view()) {
- if(typeof this.parent.get_local_view()[i].videoWidth == 'number' &&
- typeof this.parent.get_local_view()[i].videoHeight == 'number' ) {
- res_height = this.parent.get_local_view()[i].videoHeight;
- res_width = this.parent.get_local_view()[i].videoWidth;
-
- if(res_height && res_width) break;
- }
- }
-
- // Try media constraints? (less reliable)
- if(!res_height || !res_width) {
- this.parent.get_debug().log('[JSJaCJingle:sdp] _resolution_payload > Could not get local video resolution, falling back on constraints (local video may not be ready).', 0);
-
- constraints = this.parent.utils.generate_constraints();
-
- // Still nothing?!
- if(typeof constraints.video !== 'object' ||
- typeof constraints.video.mandatory !== 'object' ||
- typeof constraints.video.mandatory.minWidth !== 'number' ||
- typeof constraints.video.mandatory.minHeight !== 'number' ) {
- this.parent.get_debug().log('[JSJaCJingle:sdp] _resolution_payload > Could not get local video resolution (not sending it).', 1);
- return payload;
- }
-
- res_height = constraints.video.mandatory.minHeight;
- res_width = constraints.video.mandatory.minWidth;
- }
-
- // Constraints to be used
- res_arr = [
- {
- name : 'height',
- value : res_height
- },
-
- {
- name : 'width',
- value : res_width
- }
- ];
-
- for(cur_media in payload) {
- if(cur_media != JSJAC_JINGLE_MEDIA_VIDEO) continue;
-
- cur_payload = payload[cur_media].descriptions.payload;
-
- for(j in cur_payload) {
- if(typeof cur_payload[j].parameter !== 'object') cur_payload[j].parameter = [];
-
- for(k in res_arr)
- (cur_payload[j].parameter).push(res_arr[k]);
- }
- }
-
- this.parent.get_debug().log('[JSJaCJingle:sdp] _resolution_payload > Got local video resolution (' + res_width + 'x' + res_height + ').', 2);
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:sdp] _resolution_payload > ' + e, 1);
- }
-
- return payload;
- },
-
- /**
- * Parses SDP candidate
- * @private
- * @param {String} sdp_candidate
- * @returns {Object} Parsed candidates object
- */
- _parse_candidate: function(sdp_candidate) {
- var candidate = {};
-
- try {
- if(!sdp_candidate) return candidate;
-
- var error = 0;
- var matches = R_WEBRTC_DATA_CANDIDATE.exec(sdp_candidate);
-
- // Matches!
- if(matches) {
- candidate.component = matches[2] || error++;
- candidate.foundation = matches[1] || error++;
- candidate.generation = matches[16] || JSJAC_JINGLE_GENERATION;
- candidate.id = this.parent.utils.generate_id();
- candidate.ip = matches[5] || error++;
- candidate.network = JSJAC_JINGLE_NETWORK;
- candidate.port = matches[6] || error++;
- candidate.priority = matches[4] || error++;
- candidate.protocol = matches[3] || error++;
- candidate['rel-addr'] = matches[11];
- candidate['rel-port'] = matches[13];
- candidate.type = matches[8] || error++;
- }
-
- // Incomplete?
- if(error !== 0) return {};
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:sdp] _parse_candidate > ' + e, 1);
- }
-
- return candidate;
- },
-
- /**
- * Parses SDP candidate & store it
- * @private
- * @param {Object} sdp_candidate
- */
- _parse_candidate_store: function(sdp_candidate) {
- // Store received candidate
- var candidate_media = sdp_candidate.media;
- var candidate_data = sdp_candidate.candidate;
-
- // Convert SDP raw data to an object
- var candidate_obj = this._parse_candidate(candidate_data);
- var candidate_name = this.parent.utils.name_generate(candidate_media);
-
- this.parent._set_candidates_local(
- candidate_name,
- candidate_obj
- );
-
- // Enqueue candidate
- this.parent._set_candidates_queue_local(
- candidate_name,
- candidate_obj
- );
- },
-
- /**
- * Parses SDP candidate & store it from data
- * @private
- * @param {Object} data
- */
- _parse_candidate_store_store_data: function(data) {
- this._parse_candidate_store({
- media : (isNaN(data.candidate.sdpMid) ? data.candidate.sdpMid
- : this.parent.utils.media_generate(parseInt(data.candidate.sdpMid, 10))),
- candidate : data.candidate.candidate
- });
- },
-
- /**
- * Generates SDP description
- * @private
- * @param {String} type
- * @param {Object} group
- * @param {Object} payloads
- * @param {Object} candidates
- * @returns {Object} SDP object
- */
- _generate: function(type, group, payloads, candidates) {
- try {
- var sdp_obj = {};
-
- sdp_obj.candidates = this._generate_candidates(candidates);
- sdp_obj.description = this._generate_description(type, group, payloads, sdp_obj.candidates);
-
- return sdp_obj;
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:sdp] _generate > ' + e, 1);
- }
-
- return {};
- },
-
- /**
- * Generate SDP candidates
- * @private
- * @param {Object} candidates
- * @returns {Array} SDP candidates array
- */
- _generate_candidates: function(candidates) {
- var candidates_arr = [];
-
- try {
- // Parse candidates
- var i,
- cur_media, cur_name, cur_c_name, cur_candidate, cur_label, cur_id, cur_candidate_str;
-
- for(cur_name in candidates) {
- cur_c_name = candidates[cur_name];
- cur_media = this.parent.utils.media_generate(cur_name);
-
- for(i in cur_c_name) {
- cur_candidate = cur_c_name[i];
-
- cur_label = JSJAC_JINGLE_MEDIAS[cur_media].label;
- cur_id = cur_label;
- cur_candidate_str = '';
-
- cur_candidate_str += 'a=candidate:';
- cur_candidate_str += (cur_candidate.foundation || cur_candidate.id);
- cur_candidate_str += ' ';
- cur_candidate_str += cur_candidate.component;
- cur_candidate_str += ' ';
- cur_candidate_str += cur_candidate.protocol || JSJAC_JINGLE_SDP_CANDIDATE_PROTOCOL_DEFAULT;
- cur_candidate_str += ' ';
- cur_candidate_str += cur_candidate.priority || JSJAC_JINGLE_SDP_CANDIDATE_PRIORITY_DEFAULT;
- cur_candidate_str += ' ';
- cur_candidate_str += cur_candidate.ip;
- cur_candidate_str += ' ';
- cur_candidate_str += cur_candidate.port;
-
- if(cur_candidate.type) {
- cur_candidate_str += ' ';
- cur_candidate_str += 'typ';
- cur_candidate_str += ' ';
- cur_candidate_str += cur_candidate.type;
- }
-
- if(cur_candidate['rel-addr'] && cur_candidate['rel-port']) {
- cur_candidate_str += ' ';
- cur_candidate_str += 'raddr';
- cur_candidate_str += ' ';
- cur_candidate_str += cur_candidate['rel-addr'];
- cur_candidate_str += ' ';
- cur_candidate_str += 'rport';
- cur_candidate_str += ' ';
- cur_candidate_str += cur_candidate['rel-port'];
- }
-
- if(cur_candidate.generation) {
- cur_candidate_str += ' ';
- cur_candidate_str += 'generation';
- cur_candidate_str += ' ';
- cur_candidate_str += cur_candidate.generation;
- }
-
- cur_candidate_str += WEBRTC_SDP_LINE_BREAK;
-
- candidates_arr.push({
- label : cur_label,
- id : cur_id,
- candidate : cur_candidate_str
- });
- }
- }
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:sdp] _generate_candidates > ' + e, 1);
- }
-
- return candidates_arr;
- },
-
- /**
- * Generates SDP description
- * @private
- * @param {String} type
- * @param {Object} group
- * @param {Object} payloads
- * @param {Object} sdp_candidates
- * @returns {Object} SDP description payloads
- */
- _generate_description: function(type, group, payloads, sdp_candidates) {
- var payloads_obj = {};
-
- try {
- var payloads_str = '';
- var is_common_credentials = this.parent.utils.is_sdp_common_credentials(payloads);
-
- // Common vars
- var i, c, j, k, l, m, n, o, p, q, r, s, t, u,
- cur_name, cur_name_first, cur_name_obj,
- cur_media, cur_senders,
- cur_group_semantics, cur_group_names, cur_group_name,
- cur_network_obj, cur_transports_obj, cur_transports_obj_first, cur_description_obj,
- cur_d_pwd, cur_d_ufrag, cur_d_fingerprint,
- cur_d_attrs, cur_d_rtcp_fb, cur_d_bandwidth, cur_d_encryption,
- cur_d_ssrc, cur_d_ssrc_id, cur_d_ssrc_obj, cur_d_ssrc_group, cur_d_ssrc_group_semantics, cur_d_ssrc_group_obj,
- cur_d_rtcp_fb_obj,
- cur_d_payload, cur_d_payload_obj, cur_d_payload_obj_attrs, cur_d_payload_obj_id,
- cur_d_payload_obj_parameter, cur_d_payload_obj_parameter_obj, cur_d_payload_obj_parameter_str,
- cur_d_payload_obj_rtcp_fb, cur_d_payload_obj_rtcp_fb_obj,
- cur_d_payload_obj_rtcp_fb_ttr_int, cur_d_payload_obj_rtcp_fb_ttr_int_obj,
- cur_d_crypto_obj, cur_d_zrtp_hash_obj,
- cur_d_rtp_hdrext, cur_d_rtp_hdrext_obj,
- cur_d_rtcp_mux;
-
- // Payloads headers
- payloads_str += this._generate_protocol_version();
- payloads_str += WEBRTC_SDP_LINE_BREAK;
- payloads_str += this._generate_origin();
- payloads_str += WEBRTC_SDP_LINE_BREAK;
- payloads_str += this._generate_session_name();
- payloads_str += WEBRTC_SDP_LINE_BREAK;
- payloads_str += this._generate_timing();
- payloads_str += WEBRTC_SDP_LINE_BREAK;
-
- // Add groups
- for(cur_group_semantics in group) {
- cur_group_names = group[cur_group_semantics];
-
- payloads_str += 'a=group:' + cur_group_semantics;
-
- for(s in cur_group_names) {
- cur_group_name = cur_group_names[s];
- payloads_str += ' ' + cur_group_name;
- }
-
- payloads_str += WEBRTC_SDP_LINE_BREAK;
- }
-
- // Common credentials?
- if(is_common_credentials === true) {
- for(cur_name_first in payloads) {
- cur_transports_obj_first = payloads[cur_name_first].transports || {};
-
- payloads_str += this._generate_credentials(
- cur_transports_obj_first.ufrag,
- cur_transports_obj_first.pwd,
- cur_transports_obj_first.fingerprint
- );
-
- break;
- }
- }
-
- // Add media groups
- for(cur_name in payloads) {
- cur_name_obj = payloads[cur_name];
- cur_senders = this.parent.get_senders(cur_name);
- cur_media = this.parent.get_name(cur_name) ? this.parent.utils.media_generate(cur_name) : null;
-
- // No media?
- if(!cur_media) continue;
-
- // Network
- cur_network_obj = this.parent.utils.network_extract_main(cur_name, sdp_candidates);
-
- // Transports
- cur_transports_obj = cur_name_obj.transports || {};
- cur_d_pwd = cur_transports_obj.pwd;
- cur_d_ufrag = cur_transports_obj.ufrag;
- cur_d_fingerprint = cur_transports_obj.fingerprint;
-
- // Descriptions
- cur_description_obj = cur_name_obj.descriptions;
- cur_d_attrs = cur_description_obj.attrs;
- cur_d_rtcp_fb = cur_description_obj['rtcp-fb'];
- cur_d_bandwidth = cur_description_obj.bandwidth;
- cur_d_payload = cur_description_obj.payload;
- cur_d_encryption = cur_description_obj.encryption;
- cur_d_ssrc = cur_description_obj.ssrc;
- cur_d_ssrc_group = cur_description_obj['ssrc-group'];
- cur_d_rtp_hdrext = cur_description_obj['rtp-hdrext'];
- cur_d_rtcp_mux = cur_description_obj['rtcp-mux'];
-
- // Current media
- payloads_str += this._generate_description_media(
- cur_media,
- cur_network_obj.port,
- cur_d_encryption,
- cur_d_fingerprint,
- cur_d_payload
- );
- payloads_str += WEBRTC_SDP_LINE_BREAK;
-
- payloads_str += 'c=' +
- cur_network_obj.scope + ' ' +
- cur_network_obj.protocol + ' ' +
- cur_network_obj.ip;
- payloads_str += WEBRTC_SDP_LINE_BREAK;
-
- payloads_str += 'a=rtcp:' +
- cur_network_obj.port + ' ' +
- cur_network_obj.scope + ' ' +
- cur_network_obj.protocol + ' ' +
- cur_network_obj.ip;
- payloads_str += WEBRTC_SDP_LINE_BREAK;
-
- // Specific credentials?
- if(is_common_credentials === false) {
- payloads_str += this._generate_credentials(
- cur_d_ufrag,
- cur_d_pwd,
- cur_d_fingerprint
- );
- }
-
- // Fingerprint
- if(cur_d_fingerprint && cur_d_fingerprint.setup) {
- payloads_str += 'a=setup:' + cur_d_fingerprint.setup;
- payloads_str += WEBRTC_SDP_LINE_BREAK;
- }
-
- // RTP-HDREXT
- if(cur_d_rtp_hdrext && cur_d_rtp_hdrext.length) {
- for(i in cur_d_rtp_hdrext) {
- cur_d_rtp_hdrext_obj = cur_d_rtp_hdrext[i];
-
- payloads_str += 'a=extmap:' + cur_d_rtp_hdrext_obj.id;
-
- if(cur_d_rtp_hdrext_obj.senders)
- payloads_str += '/' + cur_d_rtp_hdrext_obj.senders;
-
- payloads_str += ' ' + cur_d_rtp_hdrext_obj.uri;
- payloads_str += WEBRTC_SDP_LINE_BREAK;
- }
- }
-
- // Senders
- if(cur_senders) {
- payloads_str += 'a=' + JSJAC_JINGLE_SENDERS[cur_senders];
- payloads_str += WEBRTC_SDP_LINE_BREAK;
- }
-
- // Name
- if(cur_media && JSJAC_JINGLE_MEDIAS[cur_media]) {
- payloads_str += 'a=mid:' + (JSJAC_JINGLE_MEDIAS[cur_media]).label;
- payloads_str += WEBRTC_SDP_LINE_BREAK;
- }
-
- // RTCP-MUX
- // WARNING: no spec!
- // See: http://code.google.com/p/libjingle/issues/detail?id=309
- // http://mail.jabber.org/pipermail/jingle/2011-December/001761.html
- if(cur_d_rtcp_mux) {
- payloads_str += 'a=rtcp-mux';
- payloads_str += WEBRTC_SDP_LINE_BREAK;
- }
-
- // 'encryption'
- if(cur_d_encryption) {
- // 'crypto'
- for(j in cur_d_encryption.crypto) {
- cur_d_crypto_obj = cur_d_encryption.crypto[j];
-
- payloads_str += 'a=crypto:' +
- cur_d_crypto_obj.tag + ' ' +
- cur_d_crypto_obj['crypto-suite'] + ' ' +
- cur_d_crypto_obj['key-params'] +
- (cur_d_crypto_obj['session-params'] ? (' ' + cur_d_crypto_obj['session-params']) : '');
-
- payloads_str += WEBRTC_SDP_LINE_BREAK;
- }
-
- // 'zrtp-hash'
- for(p in cur_d_encryption['zrtp-hash']) {
- cur_d_zrtp_hash_obj = cur_d_encryption['zrtp-hash'][p];
-
- payloads_str += 'a=zrtp-hash:' +
- cur_d_zrtp_hash_obj.version + ' ' +
- cur_d_zrtp_hash_obj.value;
-
- payloads_str += WEBRTC_SDP_LINE_BREAK;
- }
- }
-
- // 'rtcp-fb' (common)
- for(n in cur_d_rtcp_fb) {
- cur_d_rtcp_fb_obj = cur_d_rtcp_fb[n];
-
- payloads_str += 'a=rtcp-fb:*';
- payloads_str += ' ' + cur_d_rtcp_fb_obj.type;
-
- if(cur_d_rtcp_fb_obj.subtype)
- payloads_str += ' ' + cur_d_rtcp_fb_obj.subtype;
-
- payloads_str += WEBRTC_SDP_LINE_BREAK;
- }
-
- // 'bandwidth' (common)
- for(q in cur_d_bandwidth) {
- cur_d_bandwidth_obj = cur_d_bandwidth[q];
-
- payloads_str += 'b=' + cur_d_bandwidth_obj.type;
- payloads_str += ':' + cur_d_bandwidth_obj.value;
- payloads_str += WEBRTC_SDP_LINE_BREAK;
- }
-
- // 'payload-type'
- for(k in cur_d_payload) {
- cur_d_payload_obj = cur_d_payload[k];
- cur_d_payload_obj_attrs = cur_d_payload_obj.attrs;
- cur_d_payload_obj_parameter = cur_d_payload_obj.parameter;
- cur_d_payload_obj_rtcp_fb = cur_d_payload_obj['rtcp-fb'];
- cur_d_payload_obj_rtcp_fb_ttr_int = cur_d_payload_obj['rtcp-fb-trr-int'];
-
- cur_d_payload_obj_id = cur_d_payload_obj_attrs.id;
-
- payloads_str += 'a=rtpmap:' + cur_d_payload_obj_id;
-
- // 'rtpmap'
- if(cur_d_payload_obj_attrs.name) {
- payloads_str += ' ' + cur_d_payload_obj_attrs.name;
-
- if(cur_d_payload_obj_attrs.clockrate) {
- payloads_str += '/' + cur_d_payload_obj_attrs.clockrate;
-
- if(cur_d_payload_obj_attrs.channels)
- payloads_str += '/' + cur_d_payload_obj_attrs.channels;
- }
- }
-
- payloads_str += WEBRTC_SDP_LINE_BREAK;
-
- // 'parameter'
- if(cur_d_payload_obj_parameter.length) {
- payloads_str += 'a=fmtp:' + cur_d_payload_obj_id + ' ';
- cur_d_payload_obj_parameter_str = '';
-
- for(o in cur_d_payload_obj_parameter) {
- cur_d_payload_obj_parameter_obj = cur_d_payload_obj_parameter[o];
-
- if(cur_d_payload_obj_parameter_str) cur_d_payload_obj_parameter_str += ';';
-
- cur_d_payload_obj_parameter_str += cur_d_payload_obj_parameter_obj.name;
-
- if(cur_d_payload_obj_parameter_obj.value !== null) {
- cur_d_payload_obj_parameter_str += '=';
- cur_d_payload_obj_parameter_str += cur_d_payload_obj_parameter_obj.value;
- }
- }
-
- payloads_str += cur_d_payload_obj_parameter_str;
- payloads_str += WEBRTC_SDP_LINE_BREAK;
- }
-
- // 'rtcp-fb' (sub)
- for(l in cur_d_payload_obj_rtcp_fb) {
- cur_d_payload_obj_rtcp_fb_obj = cur_d_payload_obj_rtcp_fb[l];
-
- payloads_str += 'a=rtcp-fb:' + cur_d_payload_obj_id;
- payloads_str += ' ' + cur_d_payload_obj_rtcp_fb_obj.type;
-
- if(cur_d_payload_obj_rtcp_fb_obj.subtype)
- payloads_str += ' ' + cur_d_payload_obj_rtcp_fb_obj.subtype;
-
- payloads_str += WEBRTC_SDP_LINE_BREAK;
- }
-
- // 'rtcp-fb-ttr-int'
- for(m in cur_d_payload_obj_rtcp_fb_ttr_int) {
- cur_d_payload_obj_rtcp_fb_ttr_int_obj = cur_d_payload_obj_rtcp_fb_ttr_int[m];
-
- payloads_str += 'a=rtcp-fb:' + cur_d_payload_obj_id;
- payloads_str += ' ' + 'trr-int';
- payloads_str += ' ' + cur_d_payload_obj_rtcp_fb_ttr_int_obj.value;
- payloads_str += WEBRTC_SDP_LINE_BREAK;
- }
- }
-
- if(cur_d_attrs.ptime) payloads_str += 'a=ptime:' + cur_d_attrs.ptime + WEBRTC_SDP_LINE_BREAK;
- if(cur_d_attrs.maxptime) payloads_str += 'a=maxptime:' + cur_d_attrs.maxptime + WEBRTC_SDP_LINE_BREAK;
-
- // 'ssrc-group'
- for(cur_d_ssrc_group_semantics in cur_d_ssrc_group) {
- for(t in cur_d_ssrc_group[cur_d_ssrc_group_semantics]) {
- cur_d_ssrc_group_obj = cur_d_ssrc_group[cur_d_ssrc_group_semantics][t];
-
- payloads_str += 'a=ssrc-group';
- payloads_str += ':' + cur_d_ssrc_group_semantics;
-
- for(u in cur_d_ssrc_group_obj.sources) {
- payloads_str += ' ' + cur_d_ssrc_group_obj.sources[u].ssrc;
- }
-
- payloads_str += WEBRTC_SDP_LINE_BREAK;
- }
- }
-
- // 'ssrc'
- for(cur_d_ssrc_id in cur_d_ssrc) {
- for(r in cur_d_ssrc[cur_d_ssrc_id]) {
- cur_d_ssrc_obj = cur_d_ssrc[cur_d_ssrc_id][r];
-
- payloads_str += 'a=ssrc';
- payloads_str += ':' + cur_d_ssrc_id;
- payloads_str += ' ' + cur_d_ssrc_obj.name;
-
- if(cur_d_ssrc_obj.value)
- payloads_str += ':' + cur_d_ssrc_obj.value;
-
- payloads_str += WEBRTC_SDP_LINE_BREAK;
- }
- }
-
- // Candidates (some browsers require them there, too)
- if(typeof sdp_candidates == 'object') {
- for(c in sdp_candidates) {
- if((sdp_candidates[c]).label == JSJAC_JINGLE_MEDIAS[cur_media].label)
- payloads_str += (sdp_candidates[c]).candidate;
- }
- }
- }
-
- // Push to object
- payloads_obj.type = type;
- payloads_obj.sdp = payloads_str;
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:sdp] _generate_description > ' + e, 1);
- }
-
- return payloads_obj;
- },
-
- /**
- * Generates SDP protocol version
- * @private
- * @returns {String} SDP protocol version raw text
- */
- _generate_protocol_version: function() {
- return 'v=0';
- },
-
- /**
- * Generates SDP origin
- * @private
- * @returns {String} SDP origin raw text
- */
- _generate_origin: function() {
- var sdp_origin = '';
-
- try {
- // Values
- var jid = new JSJaCJID(this.parent.get_initiator());
-
- var username = jid.getNode() ? jid.getNode() : '-';
- var session_id = '1';
- var session_version = '1';
- var nettype = JSJAC_JINGLE_SDP_CANDIDATE_SCOPE_DEFAULT;
- var addrtype = JSJAC_JINGLE_SDP_CANDIDATE_IPVERSION_DEFAULT;
- var unicast_address = JSJAC_JINGLE_SDP_CANDIDATE_IP_DEFAULT;
-
- // Line content
- sdp_origin += 'o=';
- sdp_origin += username + ' ';
- sdp_origin += session_id + ' ';
- sdp_origin += session_version + ' ';
- sdp_origin += nettype + ' ';
- sdp_origin += addrtype + ' ';
- sdp_origin += unicast_address;
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:sdp] _generate_origin > ' + e, 1);
- }
-
- return sdp_origin;
- },
-
- /**
- * Generates SDP session name
- * @private
- * @returns {String} SDP session name raw text
- */
- _generate_session_name: function() {
- return 's=' + (this.parent.get_sid() || '-');
- },
-
- /**
- * Generates SDP timing
- * @private
- * @returns {String} SDP timing raw text
- */
- _generate_timing: function() {
- return 't=0 0';
- },
-
- /**
- * Generates SDP credentials
- * @private
- * @param {String} ufrag
- * @param {String} pwd
- * @param {Object} fingerprint
- * @returns {String} SDP credentials raw text
- */
- _generate_credentials: function(ufrag, pwd, fingerprint) {
- var sdp = '';
-
- // ICE credentials
- if(ufrag) sdp += 'a=ice-ufrag:' + ufrag + WEBRTC_SDP_LINE_BREAK;
- if(pwd) sdp += 'a=ice-pwd:' + pwd + WEBRTC_SDP_LINE_BREAK;
-
- // Fingerprint
- if(fingerprint) {
- if(fingerprint.hash && fingerprint.value) {
- sdp += 'a=fingerprint:' + fingerprint.hash + ' ' + fingerprint.value;
- sdp += WEBRTC_SDP_LINE_BREAK;
- }
- }
-
- return sdp;
- },
-
- /**
- * Generates SDP media description
- * @private
- * @param {String} media
- * @param {String} port
- * @param {String} crypto
- * @param {Object} fingerprint
- * @param {Array} payload
- * @returns {String} SDP media raw text
- */
- _generate_description_media: function(media, port, crypto, fingerprint, payload) {
- var sdp_media = '';
-
- try {
- var i;
- var type_ids = [];
-
- sdp_media += 'm=' + media + ' ' + port + ' ';
-
- // Protocol
- if((crypto && crypto.length) || (fingerprint && fingerprint.hash && fingerprint.value))
- sdp_media += 'RTP/SAVPF';
- else
- sdp_media += 'RTP/AVPF';
-
- // Payload type IDs
- for(i in payload) type_ids.push(payload[i].attrs.id);
-
- sdp_media += ' ' + type_ids.join(' ');
- } catch(e) {
- this.parent.get_debug().log('[JSJaCJingle:sdp] _generate_description_media > ' + e, 1);
- }
-
- return sdp_media;
- },
- }
-);
-
-/**
- * @fileoverview JSJaC Jingle library - Base call lib
- *
- * @url https://github.com/valeriansaliou/jsjac-jingle
- * @depends https://github.com/sstrigler/JSJaC
- * @author Valérian Saliou https://valeriansaliou.name/
- * @license Mozilla Public License v2.0 (MPL v2.0)
- */
-
-
-/** @module jsjac-jingle/base */
-/** @exports __JSJaCJingleBase */
-
-
-/**
- * Abstract base class for XMPP Jingle sessions.
- * @abstract
- * @class
- * @classdesc Abstract base class for XMPP Jingle sessions.
- * @requires nicolas-van/ring.js
- * @requires sstrigler/JSJaC
- * @requires jsjac-jingle/utils
- * @requires jsjac-jingle/sdp
- * @see {@link http://ringjs.neoname.eu/|Ring.js}
- * @see {@link http://stefan-strigler.de/jsjac-1.3.4/doc/|JSJaC Documentation}
- * @param {Object} [args] - Jingle session arguments.
- * @property {DOM} [args.local_view] - The path to the local stream view element.
- * @property {Boolean} [args.local_stream_readonly] - Whether the local stream is read-only or not.
- * @property {String} [args.to] - The full JID to start the Jingle session with.
- * @property {String} [args.connection] - The connection to be attached to.
- * @property {String} [args.media] - The media type to be used in the Jingle session.
- * @property {String} [args.resolution] - The resolution to be used for video in the Jingle session.
- * @property {String} [args.bandwidth] - The bandwidth to be limited for video in the Jingle session.
- * @property {String} [args.fps] - The framerate to be used for video in the Jingle session.
- * @property {Array} [args.stun] - A list of STUN servers to use (override the default one).
- * @property {Array} [args.turn] - A list of TURN servers to use.
- * @property {Boolean} [args.sdp_trace] - Log SDP trace in console (requires a debug interface).
- * @property {Boolean} [args.net_trace] - Log network packet trace in console (requires a debug interface).
- * @property {JSJaCDebugger} [args.debug] - A reference to a debugger implementing the JSJaCDebugger interface.
- */
-var __JSJaCJingleBase = ring.create(
- /** @lends __JSJaCJingleBase.prototype */
- {
- /**
- * Constructor
- */
- constructor: function(args) {
- /**
- * @constant
- * @member {JSJaCJingleUtils}
- * @readonly
- * @default
- * @public
- */
- this.utils = new JSJaCJingleUtils(this);
-
- /**
- * @constant
- * @member {JSJaCJingleSDP}
- * @readonly
- * @default
- * @public
- */
- this.sdp = new JSJaCJingleSDP(this);
-
- if(args && args.to)
- /**
- * @constant
- * @member {String}
- * @default
- * @private
- */
- this._to = args.to;
-
- if(args && args.connection) {
- /**
- * @constant
- * @member {JSJaCConnection}
- * @default
- * @private
- */
- this._connection = args.connection;
- } else {
- /**
- * @constant
- * @member {JSJaCConnection}
- * @default
- * @private
- */
- this._connection = JSJaCJingleStorage.get_connection();
- }
-
- if(args && args.media)
- /**
- * @member {String}
- * @default
- * @private
- */
- this._media = args.media;
-
- if(args && args.video_source)
- /**
- * @member {String}
- * @default
- * @private
- */
- this._video_source = args.video_source;
-
- if(args && args.resolution)
- /**
- * @member {String}
- * @default
- * @private
- */
- this._resolution = args.resolution;
-
- if(args && args.bandwidth)
- /**
- * @member {Number}
- * @default
- * @private
- */
- this._bandwidth = args.bandwidth;
-
- if(args && args.fps)
- /**
- * @member {Number}
- * @default
- * @private
- */
- this._fps = args.fps;
-
- if(args && args.local_view) {
- if(args.local_view instanceof Array) {
- /**
- * @member {DOM}
- * @default
- * @private
- */
- this._local_view = args.local_view;
- } else {
- /**
- * @member {DOM}
- * @default
- * @private
- */
- this._local_view = [args.local_view];
- }
- }
-
- if(args && args.local_stream_readonly) {
- /**
- * @constant
- * @member {Boolean}
- * @default
- * @private
- */
- this._local_stream_readonly = args.local_stream_readonly;
- } else {
- this._local_stream_readonly = false;
- }
-
- if(args && args.stun) {
- /**
- * @constant
- * @member {Array}
- * @default
- * @private
- */
- this._stun = args.stun;
- } else {
- this._stun = [];
- }
-
- if(args && args.turn) {
- /**
- * @constant
- * @member {Array}
- * @default
- * @private
- */
- this._turn = args.turn;
- } else {
- this._turn = [];
- }
-
- if(args && args.sdp_trace)
- /**
- * @member {Boolean}
- * @default
- * @private
- */
- this._sdp_trace = args.sdp_trace;
-
- if(args && args.net_trace)
- /**
- * @member {Boolean}
- * @default
- * @private
- */
- this._net_trace = args.net_trace;
-
- if(args && args.debug && args.debug.log) {
- /**
- * @member {JSJaCDebugger}
- * @default
- * @private
- */
- this._debug = args.debug;
- } else {
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._debug = JSJaCJingleStorage.get_debug();
- }
-
- /**
- * @member {String}
- * @default
- * @private
- */
- this._initiator = '';
-
- /**
- * @member {String}
- * @default
- * @private
- */
- this._responder = '';
-
- /**
- * @member {Object}
- * @default
- * @private
- */
- this._creator = {};
-
- /**
- * @member {Object}
- * @default
- * @private
- */
- this._senders = {};
-
- /**
- * @member {Object}
- * @default
- * @private
- */
- this._local_stream = null;
-
- /**
- * @member {Object}
- * @default
- * @private
- */
- this._content_local = [];
-
- /**
- * @member {Object}
- * @default
- * @private
- */
- this._peer_connection = {};
-
- /**
- * @member {Number}
- * @default
- * @private
- */
- this._id = 0;
-
- /**
- * @member {Object}
- * @default
- * @private
- */
- this._sent_id = {};
-
- /**
- * @member {Object}
- * @default
- * @private
- */
- this._received_id = {};
-
- /**
- * @member {Array}
- * @default
- * @private
- */
- this._payloads_local = [];
-
- /**
- * @member {Object}
- * @default
- * @private
- */
- this._group_local = {};
-
- /**
- * @member {Object}
- * @default
- * @private
- */
- this._candidates_local = {};
-
- /**
- * @member {Object}
- * @default
- * @private
- */
- this._candidates_queue_local = {};
-
- /**
- * @member {Object}
- * @default
- * @private
- */
- this._registered_handlers = {};
-
- /**
- * @member {Object}
- * @default
- * @private
- */
- this._deferred_handlers = {};
-
- /**
- * @member {Object}
- * @default
- * @private
- */
- this._mute = {};
-
- /**
- * @member {Boolean}
- * @default
- * @private
- */
- this._lock = false;
-
- /**
- * @member {Boolean}
- * @default
- * @private
- */
- this._media_busy = false;
-
- /**
- * @member {String}
- * @default
- * @private
- */
- this._sid = '';
-
- /**
- * @member {Object}
- * @default
- * @private
- */
- this._name = {};
- },
-
-
-
- /**
- * JSJSAC JINGLE REGISTERS
- */
-
- /**
- * Registers a given handler on a given Jingle stanza
- * @public
- * @param {String} node
- * @param {String} type
- * @param {String} id
- * @param {Function} fn
- * @returns {Boolean} Success
- */
- register_handler: function(node, type, id, fn) {
- this.get_debug().log('[JSJaCJingle:base] register_handler', 4);
-
- try {
- if(typeof fn !== 'function') {
- this.get_debug().log('[JSJaCJingle:base] register_handler > fn parameter not passed or not a function!', 1);
- return false;
- }
-
- if(id) {
- this._set_registered_handlers(node, type, id, fn);
-
- this.get_debug().log('[JSJaCJingle:base] register_handler > Registered handler for node: ' + node + ', id: ' + id + ' and type: ' + type, 3);
- return true;
- } else {
- this.get_debug().log('[JSJaCJingle:base] register_handler > Could not register handler (no ID).', 1);
- return false;
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:base] register_handler > ' + e, 1);
- }
-
- return false;
- },
-
- /**
- * Unregisters the given handler on a given Jingle stanza
- * @public
- * @param {String} node
- * @param {String} type
- * @param {String} id
- * @returns {Boolean} Success
- */
- unregister_handler: function(node, type, id) {
- this.get_debug().log('[JSJaCJingle:base] unregister_handler', 4);
-
- try {
- if(this.get_registered_handlers(node, type, id).length >= 1) {
- this._set_registered_handlers(node, type, id, null);
-
- this.get_debug().log('[JSJaCJingle:base] unregister_handler > Unregistered handler for node: ' + node + ', id: ' + id + ' and type: ' + type, 3);
- return true;
- } else {
- this.get_debug().log('[JSJaCJingle:base] unregister_handler > Could not unregister handler with node: ' + node + ', id: ' + id + ' and type: ' + type + ' (not found).', 2);
- return false;
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:base] unregister_handler > ' + e, 1);
- }
-
- return false;
- },
-
- /**
- * Defers a given handler
- * @public
- * @param {String} ns
- * @param {Function} fn
- * @returns {Boolean} Success
- */
- defer_handler: function(ns, fn) {
- this.get_debug().log('[JSJaCJingle:base] defer_handler', 4);
-
- try {
- if(typeof fn !== 'function') {
- this.get_debug().log('[JSJaCJingle:base] defer_handler > fn parameter not passed or not a function!', 1);
- return false;
- }
-
- this._set_deferred_handlers(ns, fn);
-
- this.get_debug().log('[JSJaCJingle:base] defer_handler > Deferred handler for namespace: ' + ns, 3);
- return true;
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:base] defer_handler > ' + e, 1);
- }
-
- return false;
- },
-
- /**
- * Undefers the given handler
- * @public
- * @param {String} ns
- * @returns {Boolean} Success
- */
- undefer_handler: function(ns) {
- this.get_debug().log('[JSJaCJingle:base] undefer_handler', 4);
-
- try {
- if(ns in this._deferred_handlers) {
- this._set_deferred_handlers(ns, null);
-
- this.get_debug().log('[JSJaCJingle:base] undefer_handler > Undeferred handler for namespace: ' + ns, 3);
- return true;
- } else {
- this.get_debug().log('[JSJaCJingle:base] undefer_handler > Could not undefer handler with namespace: ' + ns + ' (not found).', 2);
- return false;
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:base] undefer_handler > ' + e, 1);
- }
-
- return false;
- },
-
- /**
- * Registers a view element
- * @public
- * @param {String} tyoe
- * @param {DOM} view
- * @returns {Boolean} Success
- */
- register_view: function(type, view) {
- this.get_debug().log('[JSJaCJingle:base] register_view', 4);
-
- try {
- // Get view functions
- var fn = this.utils.map_register_view(type);
-
- if(fn.type == type) {
- var i;
-
- // Check view is not already registered
- for(i in (fn.view.get)()) {
- if((fn.view.get)()[i] == view) {
- this.get_debug().log('[JSJaCJingle:base] register_view > Could not register view of type: ' + type + ' (already registered).', 2);
- return true;
- }
- }
-
- // Proceeds registration
- (fn.view.set)(view);
-
- this.utils._peer_stream_attach(
- [view],
- (fn.stream.get)(),
- fn.mute
- );
-
- this.get_debug().log('[JSJaCJingle:base] register_view > Registered view of type: ' + type, 3);
-
- return true;
- } else {
- this.get_debug().log('[JSJaCJingle:base] register_view > Could not register view of type: ' + type + ' (type unknown).', 1);
- return false;
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:base] register_view > ' + e, 1);
- }
-
- return false;
- },
-
- /**
- * Unregisters a view element
- * @public
- * @param {String} type
- * @param {DOM} view
- * @returns {Boolean} Success
- */
- unregister_view: function(type, view) {
- this.get_debug().log('[JSJaCJingle:base] unregister_view', 4);
-
- try {
- // Get view functions
- var fn = this.utils.map_unregister_view(type);
-
- if(fn.type == type) {
- var i;
-
- // Check view is registered
- for(i in (fn.view.get)()) {
- if((fn.view.get)()[i] == view) {
- // Proceeds un-registration
- this.utils._peer_stream_detach(
- [view]
- );
-
- this.utils.array_remove_value(
- (fn.view.get)(),
- view
- );
-
- this.get_debug().log('[JSJaCJingle:base] unregister_view > Unregistered view of type: ' + type, 3);
- return true;
- }
- }
-
- this.get_debug().log('[JSJaCJingle:base] unregister_view > Could not unregister view of type: ' + type + ' (not found).', 2);
- return true;
- } else {
- this.get_debug().log('[JSJaCJingle:base] unregister_view > Could not unregister view of type: ' + type + ' (type unknown).', 1);
- return false;
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:base] unregister_view > ' + e, 1);
- }
-
- return false;
- },
-
-
-
- /**
- * JSJSAC JINGLE PEER TOOLS
- */
-
- /**
- * Creates a new peer connection
- * @private
- * @param {Function} sdp_message_callback
- */
- _peer_connection_create: function(sdp_message_callback) {
- this.get_debug().log('[JSJaCJingle:base] _peer_connection_create', 4);
-
- try {
- // Create peer connection instance
- this._peer_connection_create_instance();
-
- // Event callbacks
- this._peer_connection_callbacks(sdp_message_callback);
-
- // Add local stream
- this._peer_connection_create_local_stream();
-
- // Create offer/answer
- this._peer_connection_create_dispatch(sdp_message_callback);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:base] _peer_connection_create > ' + e, 1);
- }
- },
-
- /**
- * Creates peer connection local stream
- * @private
- */
- _peer_connection_create_local_stream: function() {
- this.get_debug().log('[JSJaCJingle:base] _peer_connection_create_local_stream', 4);
-
- try {
- this.get_peer_connection().addStream(
- this.get_local_stream()
- );
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:base] _peer_connection_create_local_stream > ' + e, 1);
- }
- },
-
- /**
- * Requests the user media (audio/video)
- * @private
- * @param {Function} callback
- */
- _peer_get_user_media: function(callback) {
- this.get_debug().log('[JSJaCJingle:base] _peer_get_user_media', 4);
-
- try {
- if(this.get_local_stream() === null) {
- this.get_debug().log('[JSJaCJingle:base] _peer_get_user_media > Getting user media...', 2);
-
- (WEBRTC_GET_MEDIA.bind(navigator))(
- this.utils.generate_constraints(),
- this._peer_got_user_media_success.bind(this, callback),
- this._peer_got_user_media_error.bind(this)
- );
- } else {
- this.get_debug().log('[JSJaCJingle:base] _peer_get_user_media > User media already acquired.', 2);
-
- callback();
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:base] _peer_get_user_media > ' + e, 1);
- }
- },
-
- /**
- * Triggers the media obtained success event
- * @private
- * @param {Function} callback
- * @param {Object} stream
- */
- _peer_got_user_media_success: function(callback, stream) {
- this.get_debug().log('[JSJaCJingle:base] _peer_got_user_media_success', 4);
-
- try {
- this.get_debug().log('[JSJaCJingle:base] _peer_got_user_media_success > Got user media.', 2);
-
- this._set_local_stream(stream);
-
- if(callback && typeof callback == 'function') {
- if((this.get_media() == JSJAC_JINGLE_MEDIA_VIDEO) && this.get_local_view().length) {
- var _this = this;
-
- var fn_loaded = function() {
- _this.get_debug().log('[JSJaCJingle:base] _peer_got_user_media_success > Local video loaded.', 2);
-
- this.removeEventListener('loadeddata', fn_loaded, false);
- callback();
- };
-
- if(_this.get_local_view()[0].readyState >= JSJAC_JINGLE_MEDIA_READYSTATE_LOADED) {
- fn_loaded();
- } else {
- this.get_debug().log('[JSJaCJingle:base] _peer_got_user_media_success > Waiting for local video to be loaded...', 2);
-
- _this.get_local_view()[0].addEventListener('loadeddata', fn_loaded, false);
- }
- } else {
- callback();
- }
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:base] _peer_got_user_media_success > ' + e, 1);
- }
- },
-
- /**
- * Triggers the SDP description retrieval success event
- * @private
- * @param {Object} sdp_local
- * @param {Function} [sdp_message_callback]
- */
- _peer_got_description: function(sdp_local, sdp_message_callback) {
- this.get_debug().log('[JSJaCJingle:base] _peer_got_description', 4);
-
- try {
- this.get_debug().log('[JSJaCJingle:base] _peer_got_description > Got local description.', 2);
-
- if(this.get_sdp_trace()) this.get_debug().log('[JSJaCJingle:base] _peer_got_description > SDP (local:raw)' + '\n\n' + sdp_local.sdp, 4);
-
- // Convert SDP raw data to an object
- var cur_name;
- var payload_parsed = this.sdp._parse_payload(sdp_local.sdp);
- this.sdp._resolution_payload(payload_parsed);
-
- for(cur_name in payload_parsed) {
- this._set_payloads_local(
- cur_name,
- payload_parsed[cur_name]
- );
- }
-
- var cur_semantics;
- var group_parsed = this.sdp._parse_group(sdp_local.sdp);
-
- for(cur_semantics in group_parsed) {
- this._set_group_local(
- cur_semantics,
- group_parsed[cur_semantics]
- );
- }
-
- // Filter our local description (remove unused medias)
- var sdp_local_desc = this.sdp._generate_description(
- sdp_local.type,
- this.get_group_local(),
- this.get_payloads_local(),
-
- this.sdp._generate_candidates(
- this.get_candidates_local()
- )
- );
-
- if(this.get_sdp_trace()) this.get_debug().log('[JSJaCJingle:base] _peer_got_description > SDP (local:gen)' + '\n\n' + sdp_local_desc.sdp, 4);
-
- var _this = this;
-
- this.get_peer_connection().setLocalDescription(
- (new WEBRTC_SESSION_DESCRIPTION(sdp_local_desc)),
-
- function() {
- // Success (descriptions are compatible)
- },
-
- function(e) {
- var error_str = (typeof e == 'string') ? e : null;
- error_str = (error_str || e.message || e.name || 'Unknown error');
-
- if(_this.get_sdp_trace()) _this.get_debug().log('[JSJaCJingle:base] _peer_got_description > SDP (local:error)' + '\n\n' + error_str, 1);
-
- // Error (descriptions are incompatible)
- }
- );
-
- // Need to wait for local candidates?
- if(typeof sdp_message_callback == 'function') {
- this.get_debug().log('[JSJaCJingle:base] _peer_got_description > Executing SDP message callback.', 2);
-
- /* @function */
- sdp_message_callback();
- } else if(this.utils.count_candidates(this._shortcut_local_user_candidates()) === 0) {
- this.get_debug().log('[JSJaCJingle:base] _peer_got_description > Waiting for local candidates...', 2);
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:base] _peer_got_description > ' + e, 1);
- }
- },
-
- /**
- * Triggers the SDP description not retrieved error event
- * @private
- */
- _peer_fail_description: function() {
- this.get_debug().log('[JSJaCJingle:base] _peer_fail_description', 4);
-
- try {
- this.get_debug().log('[JSJaCJingle:base] _peer_fail_description > Could not get local description!', 1);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:base] _peer_fail_description > ' + e, 1);
- }
- },
-
- /**
- * Enables/disables the local stream sound
- * @private
- * @param {Boolean} enable
- */
- _peer_sound: function(enable) {
- this.get_debug().log('[JSJaCJingle:base] _peer_sound', 4);
-
- try {
- this.get_debug().log('[JSJaCJingle:base] _peer_sound > Enable: ' + enable, 2);
-
- var i;
- var audio_tracks = this.get_local_stream().getAudioTracks();
-
- for(i = 0; i < audio_tracks.length; i++)
- audio_tracks[i].enabled = enable;
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:base] _peer_sound > ' + e, 1);
- }
- },
-
- /**
- * Attaches given stream to given DOM element
- * @private
- * @param {DOM} element
- * @param {Object} stream
- * @param {Boolean} mute
- */
- _peer_stream_attach: function(element, stream, mute) {
- try {
- var i;
- var stream_src = stream ? URL.createObjectURL(stream) : '';
-
- for(i in element) {
- element[i].src = stream_src;
-
- if(navigator.mozGetUserMedia)
- element[i].play();
- else
- element[i].autoplay = true;
-
- if(typeof mute == 'boolean') element[i].muted = mute;
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:base] _peer_stream_attach > ' + e, 1);
- }
- },
-
- /**
- * Detaches stream from given DOM element
- * @private
- * @param {DOM} element
- */
- _peer_stream_detach: function(element) {
- try {
- var i;
-
- for(i in element) {
- element[i].pause();
- element[i].src = '';
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:base] _peer_stream_detach > ' + e, 1);
- }
- },
-
-
-
- /**
- * JSJSAC JINGLE STATES
- */
-
- /**
- * Am I responder?
- * @public
- * @returns {Boolean} Receiver state
- */
- is_responder: function() {
- return this.utils.negotiation_status() == JSJAC_JINGLE_SENDERS_RESPONDER.jingle;
- },
-
- /**
- * Am I initiator?
- * @public
- * @returns {Boolean} Initiator state
- */
- is_initiator: function() {
- return this.utils.negotiation_status() == JSJAC_JINGLE_SENDERS_INITIATOR.jingle;
- },
-
-
-
- /**
- * JSJSAC JINGLE SHORTCUTS
- */
-
- /**
- * Gets function handler for given member
- * @private
- * @param {Function|Object} member
- * @returns {Function} Handler
- */
- _shortcut_get_handler: function(member) {
- if(typeof member == 'function')
- return member;
-
- return function() {};
- },
-
-
-
- /**
- * JSJSAC JINGLE GETTERS
- */
-
- /**
- * Gets the namespace
- * @public
- * @returns {String} Namespace value
- */
- get_namespace: function() {
- return this._namespace;
- },
-
- /**
- * Gets the local payloads
- * @public
- * @param {String} [name]
- * @returns {Object} Local payloads object
- */
- get_payloads_local: function(name) {
- if(name)
- return (name in this._payloads_local) ? this._payloads_local[name] : {};
-
- return this._payloads_local;
- },
-
- /**
- * Gets the local group
- * @public
- * @param {String} [semantics]
- * @returns {Object} Local group object
- */
- get_group_local: function(semantics) {
- if(semantics)
- return (semantics in this._group_local) ? this._group_local[semantics] : {};
-
- return this._group_local;
- },
-
- /**
- * Gets the local candidates
- * @public
- * @param {String} [name]
- * @returns {Object} Local candidates object
- */
- get_candidates_local: function(name) {
- if(name)
- return (name in this._candidates_local) ? this._candidates_local[name] : {};
-
- return this._candidates_local;
- },
-
- /**
- * Gets the local candidates queue
- * @public
- * @param {String} [name]
- * @returns {Object} Local candidates queue object
- */
- get_candidates_queue_local: function(name) {
- if(name)
- return (name in this._candidates_queue_local) ? this._candidates_queue_local[name] : {};
-
- return this._candidates_queue_local;
- },
-
- /**
- * Gets the local content
- * @public
- * @param {String} [name]
- * @returns {Object} Local content object
- */
- get_content_local: function(name) {
- if(name)
- return (name in this._content_local) ? this._content_local[name] : {};
-
- return this._content_local;
- },
-
- /**
- * Gets the peer connection
- * @public
- * @returns {Object} Peer connection
- */
- get_peer_connection: function() {
- return this._peer_connection;
- },
-
- /**
- * Gets the ID
- * @public
- * @returns {Number} ID value
- */
- get_id: function() {
- return this._id;
- },
-
- /**
- * Gets the new ID
- * @public
- * @returns {String} New ID value
- */
- get_id_new: function() {
- var trans_id = this.get_id() + 1;
- this._set_id(trans_id);
-
- return this.get_id_pre() + trans_id;
- },
-
- /**
- * Gets the sent IDs
- * @public
- * @returns {Object} Sent IDs object
- */
- get_sent_id: function() {
- return this._sent_id;
- },
-
- /**
- * Gets the received IDs
- * @public
- * @returns {Object} Received IDs object
- */
- get_received_id: function() {
- return this._received_id;
- },
-
- /**
- * Gets the registered stanza handler
- * @public
- * @param {String} node
- * @param {String} type
- * @param {String} id
- * @returns {Array} Stanza handler
- */
- get_registered_handlers: function(node, type, id) {
- if(id && node in this._registered_handlers &&
- type in this._registered_handlers[node] &&
- typeof this._registered_handlers[node][type][id] == 'object')
- return this._registered_handlers[node][type][id];
-
- return [];
- },
-
- /**
- * Gets the deferred stanza handler
- * @public
- * @param {String} ns
- * @returns {Array} Stanza handler
- */
- get_deferred_handlers: function(ns) {
- return this._deferred_handlers[ns] || [];
- },
-
- /**
- * Gets the mute state
- * @public
- * @param {String} [name]
- * @returns {Boolean} Mute value
- */
- get_mute: function(name) {
- if(!name) name = '*';
-
- return (name in this._mute) ? this._mute[name] : false;
- },
-
- /**
- * Gets the lock value
- * @public
- * @returns {Boolean} Lock value
- */
- get_lock: function() {
- return this._lock || !JSJAC_JINGLE_AVAILABLE;
- },
-
- /**
- * Gets the media busy value
- * @public
- * @returns {Boolean} Media busy value
- */
- get_media_busy: function() {
- return this._media_busy;
- },
-
- /**
- * Gets the sid value
- * @public
- * @returns {String} SID value
- */
- get_sid: function() {
- return this._sid;
- },
-
- /**
- * Gets the status value
- * @public
- * @returns {String} Status value
- */
- get_status: function() {
- return this._status;
- },
-
- /**
- * Gets the connection value
- * @public
- * @returns {JSJaCConnection} Connection value
- */
- get_connection: function() {
- return this._connection;
- },
-
- /**
- * Gets the to value
- * @public
- * @returns {String} To value
- */
- get_to: function() {
- return this._to;
- },
-
- /**
- * Gets the initiator value
- * @public
- * @returns {String} Initiator value
- */
- get_initiator: function() {
- return this._initiator;
- },
-
- /**
- * Gets the responder value
- * @public
- * @returns {String} Responder value
- */
- get_responder: function() {
- return this._responder;
- },
-
- /**
- * Gets the creator value
- * @public
- * @param {String} [name]
- * @returns {String|Object} Creator value
- */
- get_creator: function(name) {
- if(name)
- return (name in this._creator) ? this._creator[name] : null;
-
- return this._creator;
- },
-
- /**
- * Gets the creator value (for this)
- * @public
- * @param {String} name
- * @returns {String} Creator value
- */
- get_creator_this: function(name) {
- return this.get_responder() == this.get_to() ? JSJAC_JINGLE_CREATOR_INITIATOR : JSJAC_JINGLE_CREATOR_RESPONDER;
- },
-
- /**
- * Gets the senders value
- * @public
- * @param {String} [name]
- * @returns {String} Senders value
- */
- get_senders: function(name) {
- if(name)
- return (name in this._senders) ? this._senders[name] : null;
-
- return this._senders;
- },
-
- /**
- * Gets the media value
- * @public
- * @returns {String} Media value
- */
- get_media: function() {
- return (this._media && this._media in JSJAC_JINGLE_MEDIAS) ? this._media : JSJAC_JINGLE_MEDIA_VIDEO;
- },
-
- /**
- * Gets a list of medias in use
- * @public
- * @returns {Object} Media list
- */
- get_media_all: function() {
- if(this.get_media() == JSJAC_JINGLE_MEDIA_AUDIO)
- return [JSJAC_JINGLE_MEDIA_AUDIO];
-
- return [JSJAC_JINGLE_MEDIA_AUDIO, JSJAC_JINGLE_MEDIA_VIDEO];
- },
-
- /**
- * Gets the video source value
- * @public
- * @returns {String} Video source value
- */
- get_video_source: function() {
- return (this._video_source && this._video_source in JSJAC_JINGLE_VIDEO_SOURCES) ? this._video_source : JSJAC_JINGLE_VIDEO_SOURCE_CAMERA;
- },
-
- /**
- * Gets the resolution value
- * @public
- * @returns {String} Resolution value
- */
- get_resolution: function() {
- return this._resolution ? (this._resolution).toString() : null;
- },
-
- /**
- * Gets the bandwidth value
- * @public
- * @returns {String} Bandwidth value
- */
- get_bandwidth: function() {
- return this._bandwidth ? (this._bandwidth).toString() : null;
- },
-
- /**
- * Gets the FPS value
- * @public
- * @returns {String} FPS value
- */
- get_fps: function() {
- return this._fps ? (this._fps).toString() : null;
- },
-
- /**
- * Gets the name value
- * @public
- * @param {String} [name]
- * @returns {String} Name value
- */
- get_name: function(name) {
- if(name)
- return name in this._name;
-
- return this._name;
- },
-
- /**
- * Gets the local stream
- * @public
- * @returns {Object} Local stream instance
- */
- get_local_stream: function() {
- return this._local_stream;
- },
-
- /**
- * Gets the local stream read-only state
- * @public
- * @returns {Boolean} Read-only state
- */
- get_local_stream_readonly: function() {
- return this._local_stream_readonly;
- },
-
- /**
- * Gets the local view value
- * @public
- * @returns {DOM} Local view
- */
- get_local_view: function() {
- return (typeof this._local_view == 'object') ? this._local_view : [];
- },
-
- /**
- * Gets the STUN servers
- * @public
- * @returns {Array} STUN servers
- */
- get_stun: function() {
- return (typeof this._stun == 'object') ? this._stun : [];
- },
-
- /**
- * Gets the TURN servers
- * @public
- * @returns {Array} TURN servers
- */
- get_turn: function() {
- return (typeof this._turn == 'object') ? this._turn : [];
- },
-
- /**
- * Gets the SDP trace value
- * @public
- * @returns {Boolean} SDP trace value
- */
- get_sdp_trace: function() {
- return (this._sdp_trace === true);
- },
-
- /**
- * Gets the network packet trace value
- * @public
- * @returns {Boolean} Network packet trace value
- */
- get_net_trace: function() {
- return (this._net_trace === true);
- },
-
- /**
- * Gets the debug value
- * @public
- * @returns {JSJaCDebugger} Debug value
- */
- get_debug: function() {
- return this._debug;
- },
-
-
-
- /**
- * JSJSAC JINGLE SETTERS
- */
-
- /**
- * Sets the namespace
- * @private
- * @param {String} Namespace value
- */
- _set_namespace: function(namespace) {
- this._namespace = namespace;
- },
-
- /**
- * Sets the local stream
- * @private
- * @param {Object} local_stream
- */
- _set_local_stream: function(local_stream) {
- try {
- if(this.get_local_stream_readonly() === true) {
- this.get_debug().log('[JSJaCJingle:base] _set_local_stream > Local stream is read-only, not setting it.', 0); return;
- }
-
- if(!local_stream && this._local_stream) {
- (this._local_stream).stop();
-
- this._peer_stream_detach(
- this.get_local_view()
- );
- }
-
- this._set_local_stream_raw(local_stream);
-
- if(local_stream) {
- this._peer_stream_attach(
- this.get_local_view(),
- this.get_local_stream(),
- true
- );
- } else {
- this._peer_stream_detach(
- this.get_local_view()
- );
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:base] _set_local_stream > ' + e, 1);
- }
- },
-
- /**
- * Sets the local stream raw object (no further processing)
- * @private
- * @param {Object} local_stream
- */
- _set_local_stream_raw: function(local_stream) {
- this._local_stream = local_stream;
- },
-
- /**
- * Sets the local stream read-only state
- * @private
- * @param {Boolean} local_stream_readonly
- */
- _set_local_stream_readonly: function(local_stream_readonly) {
- this._local_stream_readonly = local_stream_readonly;
- },
-
- /**
- * Sets the local view
- * @private
- * @param {DOM} local_view
- */
- _set_local_view: function(local_view) {
- if(typeof this._local_view !== 'object')
- this._local_view = [];
-
- this._local_view.push(local_view);
- },
-
- /**
- * Sets the local payload
- * @private
- * @param {String} name
- * @param {Object} payload_data
- */
- _set_payloads_local: function(name, payload_data) {
- this._payloads_local[name] = payload_data;
- },
-
- /**
- * Sets the local group
- * @private
- * @param {String} name
- * @param {Object} group_data
- */
- _set_group_local: function(semantics, group_data) {
- this._group_local[semantics] = group_data;
- },
-
- /**
- * Sets the local candidates
- * @private
- * @param {String} name
- * @param {Object} candidate_data
- */
- _set_candidates_local: function(name, candidate_data) {
- if(!(name in this._candidates_local)) this._candidates_local[name] = [];
-
- (this._candidates_local[name]).push(candidate_data);
- },
-
- /**
- * Sets the local candidates queue
- * @private
- * @param {String} name
- * @param {Object} candidate_data
- */
- _set_candidates_queue_local: function(name, candidate_data) {
- try {
- if(name === null) {
- this._candidates_queue_local = {};
- } else {
- if(!(name in this._candidates_queue_local)) this._candidates_queue_local[name] = [];
-
- (this._candidates_queue_local[name]).push(candidate_data);
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:base] _set_candidates_queue_local > ' + e, 1);
- }
- },
-
- /**
- * Sets the local content
- * @private
- * @param {String} name
- * @param {Object} content_local
- */
- _set_content_local: function(name, content_local) {
- this._content_local[name] = content_local;
- },
-
- /**
- * Sets the peer connection
- * @private
- * @param {Object} peer_connection
- */
- _set_peer_connection: function(peer_connection) {
- this._peer_connection = peer_connection;
- },
-
- /**
- * Sets the ID
- * @private
- * @param {String|Number} id
- */
- _set_id: function(id) {
- this._id = id;
- },
-
- /**
- * Sets the sent ID
- * @private
- * @param {String|Number} sent_id
- */
- _set_sent_id: function(sent_id) {
- this._sent_id[sent_id] = 1;
- },
-
- /**
- * Sets the last received ID
- * @private
- * @param {String|Number} received_id
- */
- _set_received_id: function(received_id) {
- this._received_id[received_id] = 1;
- },
-
- /**
- * Sets the registered stanza handlers
- * @private
- * @param {String} node
- * @param {String} type
- * @param {String|Number} id
- * @param {Function} handler
- */
- _set_registered_handlers: function(node, type, id, handler) {
- if(!(node in this._registered_handlers)) this._registered_handlers[node] = {};
- if(!(type in this._registered_handlers[node])) this._registered_handlers[node][type] = {};
-
- if(handler === null) {
- if(id in this._registered_handlers[node][type])
- delete this._registered_handlers[node][type][id];
- } else {
- if(typeof this._registered_handlers[node][type][id] != 'object')
- this._registered_handlers[node][type][id] = [];
-
- this._registered_handlers[node][type][id].push(handler);
- }
- },
-
- /**
- * Sets the deferred stanza handlers
- * @private
- * @param {String} ns
- * @param {Function|Object} handler
- */
- _set_deferred_handlers: function(ns, handler) {
- if(!(ns in this._deferred_handlers)) this._deferred_handlers[ns] = [];
-
- if(handler === null)
- delete this._deferred_handlers[ns];
- else
- this._deferred_handlers[ns].push(handler);
- },
-
- /**
- * Sets the mute state
- * @private
- * @param {String} [name]
- * @param {String} mute
- */
- _set_mute: function(name, mute) {
- if(!name || name == '*') {
- this._mute = {};
- name = '*';
- }
-
- this._mute[name] = mute;
- },
-
- /**
- * Sets the lock value
- * @private
- * @param {Boolean} lock
- */
- _set_lock: function(lock) {
- this._lock = lock;
- },
-
- /**
- * Gets the media busy value
- * @private
- * @param {Boolean} busy
- */
- _set_media_busy: function(busy) {
- this._media_busy = busy;
- },
-
- /**
- * Sets the session ID
- * @private
- * @param {String} sid
- */
- _set_sid: function(sid) {
- this._sid = sid;
- },
-
- /**
- * Sets the session status
- * @private
- * @param {String} status
- */
- _set_status: function(status) {
- this._status = status;
- },
-
- /**
- * Sets the session to value
- * @private
- * @param {String} to
- */
- _set_to: function(to) {
- this._to = to;
- },
-
- /**
- * Sets the session connection value
- * @private
- * @param {JSJaCConnection} connection
- */
- _set_connection: function(connection) {
- this._connection = connection;
- },
-
- /**
- * Sets the session initiator
- * @private
- * @param {String} initiator
- */
- _set_initiator: function(initiator) {
- this._initiator = initiator;
- },
-
- /**
- * Sets the session responder
- * @private
- * @param {String} responder
- */
- _set_responder: function(responder) {
- this._responder = responder;
- },
-
- /**
- * Sets the session creator
- * @private
- * @param {String} name
- * @param {String} creator
- */
- _set_creator: function(name, creator) {
- if(!(creator in JSJAC_JINGLE_CREATORS)) creator = JSJAC_JINGLE_CREATOR_INITIATOR;
-
- this._creator[name] = creator;
- },
-
- /**
- * Sets the session senders
- * @private
- * @param {String} name
- * @param {String} senders
- */
- _set_senders: function(name, senders) {
- if(!(senders in JSJAC_JINGLE_SENDERS)) senders = JSJAC_JINGLE_SENDERS_BOTH.jingle;
-
- this._senders[name] = senders;
- },
-
- /**
- * Sets the session media
- * @private
- * @param {String} media
- */
- _set_media: function(media) {
- this._media = media;
- },
-
- /**
- * Sets the video source
- * @private
- */
- _set_video_source: function() {
- this._video_source = video_source;
- },
-
- /**
- * Sets the video resolution
- * @private
- * @param {String} resolution
- */
- _set_resolution: function(resolution) {
- this._resolution = resolution;
- },
-
- /**
- * Sets the video bandwidth
- * @private
- * @param {Number} bandwidth
- */
- _set_bandwidth: function(bandwidth) {
- this._bandwidth = bandwidth;
- },
-
- /**
- * Sets the video FPS
- * @private
- * @param {Number} fps
- */
- _set_fps: function(fps) {
- this._fps = fps;
- },
-
- /**
- * Sets the source name
- * @private
- * @param {String} name
- */
- _set_name: function(name) {
- this._name[name] = 1;
- },
-
- /**
- * Sets the STUN server address
- * @private
- * @param {String} stun_host
- * @param {Object} stun_data
- */
- _set_stun: function(stun_host, stun_data) {
- this._stun.push(
- this.utils.object_collect(
- { 'host': stun_host },
- stun_data
- )
- );
- },
-
- /**
- * Sets the TURN server address
- * @private
- * @param {String} turn_host
- * @param {Object} turn_data
- */
- _set_turn: function(turn_host, turn_data) {
- this._turn.push(
- this.utils.object_collect(
- { 'host': turn_host },
- turn_data
- )
- );
- },
-
- /**
- * Enables/disables SDP traces
- * @public
- * @param {Boolean} sdp_trace
- */
- set_sdp_trace: function(sdp_trace) {
- this._sdp_trace = sdp_trace;
- },
-
- /**
- * Enables/disables network traces
- * @public
- * @param {Boolean} net_trace
- */
- set_net_trace: function(net_trace) {
- this._net_trace = net_trace;
- },
-
- /**
- * Sets the debugging wrapper
- * @public
- * @param {JSJaCDebugger} debug
- */
- set_debug: function(debug) {
- this._debug = debug;
- },
- }
-);
-
-/**
- * @fileoverview JSJaC Jingle library - Single (one-to-one) call lib
- *
- * @url https://github.com/valeriansaliou/jsjac-jingle
- * @depends https://github.com/sstrigler/JSJaC
- * @author Valérian Saliou https://valeriansaliou.name/
- * @license Mozilla Public License v2.0 (MPL v2.0)
- */
-
-
-/** @module jsjac-jingle/single */
-/** @exports JSJaCJingleSingle */
-
-
-/**
- * Creates a new XMPP Jingle session.
- * @class
- * @classdesc Creates a new XMPP Jingle session.
- * @augments __JSJaCJingleBase
- * @requires nicolas-van/ring.js
- * @requires sstrigler/JSJaC
- * @requires jsjac-jingle/main
- * @requires jsjac-jingle/base
- * @see {@link http://xmpp.org/extensions/xep-0166.html|XEP-0166: Jingle}
- * @see {@link http://ringjs.neoname.eu/|Ring.js}
- * @see {@link http://stefan-strigler.de/jsjac-1.3.4/doc/|JSJaC Documentation}
- * @param {Object} [args] - Jingle session arguments.
- * @property {*} [args.*] - Herits of JSJaCJingle() baseclass prototype.
- * @property {Function} [args.session_initiate_pending] - The initiate pending custom handler.
- * @property {Function} [args.session_initiate_success] - The initiate success custom handler.
- * @property {Function} [args.session_initiate_error] - The initiate error custom handler.
- * @property {Function} [args.session_initiate_request] - The initiate request custom handler.
- * @property {Function} [args.session_accept_pending] - The accept pending custom handler.
- * @property {Function} [args.session_accept_success] - The accept success custom handler.
- * @property {Function} [args.session_accept_error] - The accept error custom handler.
- * @property {Function} [args.session_accept_request] - The accept request custom handler.
- * @property {Function} [args.session_info_pending] - The info request custom handler.
- * @property {Function} [args.session_info_success] - The info success custom handler.
- * @property {Function} [args.session_info_error] - The info error custom handler.
- * @property {Function} [args.session_info_request] - The info request custom handler.
- * @property {Function} [args.session_terminate_pending] - The terminate pending custom handler.
- * @property {Function} [args.session_terminate_success] - The terminate success custom handler.
- * @property {Function} [args.session_terminate_error] - The terminate error custom handler.
- * @property {Function} [args.session_terminate_request] - The terminate request custom handler.
- * @property {Function} [args.stream_add] - The stream add custom handler.
- * @property {Function} [args.stream_remove] - The stream remove custom handler.
- * @property {Function} [args.stream_connected] - The stream connected custom handler.
- * @property {Function} [args.stream_disconnected] - The stream disconnected custom handler.
- * @property {DOM} [args.remote_view] - The path to the remote stream view element.
- * @property {DOM} [args.sid] - The session ID (forced).
- */
-var JSJaCJingleSingle = ring.create([__JSJaCJingleBase],
- /** @lends JSJaCJingleSingle.prototype */
- {
- /**
- * Constructor
- */
- constructor: function(args) {
- this.$super(args);
-
- if(args && args.session_initiate_pending)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_initiate_pending = args.session_initiate_pending;
-
- if(args && args.session_initiate_success)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_initiate_success = args.session_initiate_success;
-
- if(args && args.session_initiate_error)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_initiate_error = args.session_initiate_error;
-
- if(args && args.session_initiate_request)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_initiate_request = args.session_initiate_request;
-
- if(args && args.session_accept_pending)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_accept_pending = args.session_accept_pending;
-
- if(args && args.session_accept_success)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_accept_success = args.session_accept_success;
-
- if(args && args.session_accept_error)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_accept_error = args.session_accept_error;
-
- if(args && args.session_accept_request)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_accept_request = args.session_accept_request;
-
- if(args && args.session_info_pending)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_info_pending = args.session_info_pending;
-
- if(args && args.session_info_success)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_info_success = args.session_info_success;
-
- if(args && args.session_info_error)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_info_error = args.session_info_error;
-
- if(args && args.session_info_request)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_info_request = args.session_info_request;
-
- if(args && args.session_terminate_pending)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_terminate_pending = args.session_terminate_pending;
-
- if(args && args.session_terminate_success)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_terminate_success = args.session_terminate_success;
-
- if(args && args.session_terminate_error)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_terminate_error = args.session_terminate_error;
-
- if(args && args.session_terminate_request)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_terminate_request = args.session_terminate_request;
-
- if(args && args.stream_add)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._stream_add = args.stream_add;
-
- if(args && args.stream_remove)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._stream_remove = args.stream_remove;
-
- if(args && args.stream_connected)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._stream_connected = args.stream_connected;
-
- if(args && args.stream_disconnected)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._stream_disconnected = args.stream_disconnected;
-
- if(args && args.remote_view)
- /**
- * @member {Object}
- * @default
- * @private
- */
- this._remote_view = [args.remote_view];
-
- if(args && args.sid)
- /**
- * @member {String}
- * @default
- * @private
- */
- this._sid = [args.sid];
-
- /**
- * @member {Object}
- * @default
- * @private
- */
- this._remote_stream = {};
-
- /**
- * @member {Object}
- * @default
- * @private
- */
- this._content_remote = {};
-
- /**
- * @member {Object}
- * @default
- * @private
- */
- this._payloads_remote = {};
-
- /**
- * @member {Object}
- * @default
- * @private
- */
- this._group_remote = {};
-
- /**
- * @member {Object}
- * @default
- * @private
- */
- this._candidates_remote = {};
-
- /**
- * @member {Object}
- * @default
- * @private
- */
- this._candidates_queue_remote = {};
-
- /**
- * @member {String|Object}
- * @default
- * @private
- */
- this._last_ice_state = null;
-
- /**
- * @constant
- * @member {String}
- * @default
- * @private
- */
- this._status = JSJAC_JINGLE_STATUS_INACTIVE;
-
- /**
- * @constant
- * @member {String}
- * @default
- * @private
- */
- this._reason = JSJAC_JINGLE_REASON_CANCEL;
-
- /**
- * @constant
- * @member {String}
- * @default
- * @private
- */
- this._namespace = NS_JINGLE;
- },
-
-
- /**
- * Initiates a new Jingle session.
- * @public
- * @fires JSJaCJingleSingle#get_session_initiate_pending
- */
- initiate: function() {
- this.get_debug().log('[JSJaCJingle:single] initiate', 4);
-
- try {
- // Locked?
- if(this.get_lock()) {
- this.get_debug().log('[JSJaCJingle:single] initiate > Cannot initiate, resource locked. Please open another session or check WebRTC support.', 0);
- return;
- }
-
- // Defer?
- var _this = this;
-
- if(JSJaCJingle._defer(function() { _this.initiate(); })) {
- this.get_debug().log('[JSJaCJingle:single] initiate > Deferred (waiting for the library components to be initiated).', 0);
- return;
- }
-
- // Slot unavailable?
- if(this.get_status() !== JSJAC_JINGLE_STATUS_INACTIVE) {
- this.get_debug().log('[JSJaCJingle:single] initiate > Cannot initiate, resource not inactive (status: ' + this.get_status() + ').', 0);
- return;
- }
-
- this.get_debug().log('[JSJaCJingle:single] initiate > New Jingle Single session with media: ' + this.get_media(), 2);
-
- // Common vars
- var i, cur_name;
-
- // Trigger init pending custom callback
- /* @function */
- (this.get_session_initiate_pending())(this);
-
- // Change session status
- this._set_status(JSJAC_JINGLE_STATUS_INITIATING);
-
- // Set session values
- if(!this.get_sid()) this._set_sid(this.utils.generate_sid());
-
- this._set_initiator(this.utils.connection_jid());
- this._set_responder(this.get_to());
-
- for(i in this.get_media_all()) {
- cur_name = this.utils.name_generate(
- this.get_media_all()[i]
- );
-
- this._set_name(cur_name);
-
- this._set_senders(
- cur_name,
- JSJAC_JINGLE_SENDERS_BOTH.jingle
- );
-
- this._set_creator(
- cur_name,
- JSJAC_JINGLE_CREATOR_INITIATOR
- );
- }
-
- // Register session to common router
- JSJaCJingle._add(JSJAC_JINGLE_SESSION_SINGLE, this.get_sid(), this);
-
- // Initialize WebRTC
- this._peer_get_user_media(function() {
- _this._peer_connection_create(
- function() {
- _this.get_debug().log('[JSJaCJingle:single] initiate > Ready to begin Jingle negotiation.', 2);
-
- _this.send(JSJAC_JINGLE_IQ_TYPE_SET, { action: JSJAC_JINGLE_ACTION_SESSION_INITIATE });
- }
- );
- });
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] initiate > ' + e, 1);
- }
- },
-
- /**
- * Accepts the Jingle session.
- * @public
- * @fires JSJaCJingleSingle#get_session_accept_pending
- */
- accept: function() {
- this.get_debug().log('[JSJaCJingle:single] accept', 4);
-
- try {
- // Locked?
- if(this.get_lock()) {
- this.get_debug().log('[JSJaCJingle:single] accept > Cannot accept, resource locked. Please open another session or check WebRTC support.', 0);
- return;
- }
-
- // Defer?
- var _this = this;
-
- if(JSJaCJingle._defer(function() { _this.accept(); })) {
- this.get_debug().log('[JSJaCJingle:single] accept > Deferred (waiting for the library components to be initiated).', 0);
- return;
- }
-
- // Slot unavailable?
- if(this.get_status() !== JSJAC_JINGLE_STATUS_INITIATED) {
- this.get_debug().log('[JSJaCJingle:single] accept > Cannot accept, resource not initiated (status: ' + this.get_status() + ').', 0);
- return;
- }
-
- this.get_debug().log('[JSJaCJingle:single] accept > New Jingle session with media: ' + this.get_media(), 2);
-
- // Trigger accept pending custom callback
- /* @function */
- (this.get_session_accept_pending())(this);
-
- // Change session status
- this._set_status(JSJAC_JINGLE_STATUS_ACCEPTING);
-
- // Initialize WebRTC
- this._peer_get_user_media(function() {
- _this._peer_connection_create(
- function() {
- _this.get_debug().log('[JSJaCJingle:single] accept > Ready to complete Jingle negotiation.', 2);
-
- // Process accept actions
- _this.send(JSJAC_JINGLE_IQ_TYPE_SET, { action: JSJAC_JINGLE_ACTION_SESSION_ACCEPT });
- }
- );
- });
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] accept > ' + e, 1);
- }
- },
-
- /**
- * Sends a Jingle session info.
- * @public
- * @param {String} name
- * @param {Object} [args]
- */
- info: function(name, args) {
- this.get_debug().log('[JSJaCJingle:single] info', 4);
-
- try {
- // Locked?
- if(this.get_lock()) {
- this.get_debug().log('[JSJaCJingle:single] info > Cannot accept, resource locked. Please open another session or check WebRTC support.', 0);
- return;
- }
-
- // Defer?
- var _this = this;
-
- if(JSJaCJingle._defer(function() { _this.info(name, args); })) {
- this.get_debug().log('[JSJaCJingle:single] info > Deferred (waiting for the library components to be initiated).', 0);
- return;
- }
-
- // Slot unavailable?
- if(!(this.get_status() === JSJAC_JINGLE_STATUS_INITIATED ||
- this.get_status() === JSJAC_JINGLE_STATUS_ACCEPTING ||
- this.get_status() === JSJAC_JINGLE_STATUS_ACCEPTED)) {
- this.get_debug().log('[JSJaCJingle:single] info > Cannot send info, resource not active (status: ' + this.get_status() + ').', 0);
- return;
- }
-
- // Trigger info pending custom callback
- /* @function */
- (this.get_session_info_pending())(this);
-
- if(typeof args !== 'object') args = {};
-
- // Build final args parameter
- args.action = JSJAC_JINGLE_ACTION_SESSION_INFO;
- if(name) args.info = name;
-
- this.send(JSJAC_JINGLE_IQ_TYPE_SET, args);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] info > ' + e, 1);
- }
- },
-
- /**
- * Terminates the Jingle session.
- * @public
- * @fires JSJaCJingleSingle#get_session_terminate_pending
- * @param {String} reason
- */
- terminate: function(reason) {
- this.get_debug().log('[JSJaCJingle:single] terminate', 4);
-
- try {
- // Locked?
- if(this.get_lock()) {
- this.get_debug().log('[JSJaCJingle:single] terminate > Cannot terminate, resource locked. Please open another session or check WebRTC support.', 0);
- return;
- }
-
- // Defer?
- var _this = this;
-
- if(JSJaCJingle._defer(function() { _this.terminate(reason); })) {
- this.get_debug().log('[JSJaCJingle:single] terminate > Deferred (waiting for the library components to be initiated).', 0);
- return;
- }
-
- // Slot unavailable?
- if(this.get_status() === JSJAC_JINGLE_STATUS_TERMINATED) {
- this.get_debug().log('[JSJaCJingle:single] terminate > Cannot terminate, resource already terminated (status: ' + this.get_status() + ').', 0);
- return;
- }
-
- // Change session status
- this._set_status(JSJAC_JINGLE_STATUS_TERMINATING);
-
- // Trigger terminate pending custom callback
- /* @function */
- (this.get_session_terminate_pending())(this);
-
- // Process terminate actions
- this.send(JSJAC_JINGLE_IQ_TYPE_SET, { action: JSJAC_JINGLE_ACTION_SESSION_TERMINATE, reason: reason });
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] terminate > ' + e, 1);
- }
- },
-
- /**
- * Aborts the Jingle session.
- * @public
- * @param {Boolean} [set_lock]
- */
- abort: function(set_lock) {
- this.get_debug().log('[JSJaCJingle:single] abort', 4);
-
- try {
- // Change session status
- this._set_status(JSJAC_JINGLE_STATUS_TERMINATED);
-
- // Stop WebRTC
- this._peer_stop();
-
- // Lock session? (cannot be used later)
- if(set_lock === true) this._set_lock(true);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] abort > ' + e, 1);
- }
- },
-
- /**
- * Sends a given Jingle stanza packet
- * @public
- * @param {String} type
- * @param {Object} [args]
- * @returns {Boolean} Success
- */
- send: function(type, args) {
- this.get_debug().log('[JSJaCJingle:single] send', 4);
-
- try {
- // Locked?
- if(this.get_lock()) {
- this.get_debug().log('[JSJaCJingle:single] send > Cannot send, resource locked. Please open another session or check WebRTC support.', 0);
- return false;
- }
-
- // Defer?
- var _this = this;
-
- if(JSJaCJingle._defer(function() { _this.send(type, args); })) {
- this.get_debug().log('[JSJaCJingle:single] send > Deferred (waiting for the library components to be initiated).', 0);
- return false;
- }
-
- // Assert
- if(typeof args !== 'object') args = {};
-
- // Build stanza
- var stanza = new JSJaCIQ();
- stanza.setTo(this.get_to());
-
- if(type) stanza.setType(type);
-
- if(!args.id) args.id = this.get_id_new();
- stanza.setID(args.id);
-
- if(type == JSJAC_JINGLE_IQ_TYPE_SET) {
- if(!(args.action && args.action in JSJAC_JINGLE_ACTIONS)) {
- this.get_debug().log('[JSJaCJingle:single] send > Stanza action unknown: ' + (args.action || 'undefined'), 1);
- return false;
- }
-
- // Submit to registered handler
- switch(args.action) {
- case JSJAC_JINGLE_ACTION_CONTENT_ACCEPT:
- this._send_content_accept(stanza); break;
-
- case JSJAC_JINGLE_ACTION_CONTENT_ADD:
- this._send_content_add(stanza); break;
-
- case JSJAC_JINGLE_ACTION_CONTENT_MODIFY:
- this._send_content_modify(stanza); break;
-
- case JSJAC_JINGLE_ACTION_CONTENT_REJECT:
- this._send_content_reject(stanza); break;
-
- case JSJAC_JINGLE_ACTION_CONTENT_REMOVE:
- this._send_content_remove(stanza); break;
-
- case JSJAC_JINGLE_ACTION_DESCRIPTION_INFO:
- this._send_description_info(stanza); break;
-
- case JSJAC_JINGLE_ACTION_SECURITY_INFO:
- this._send_security_info(stanza); break;
-
- case JSJAC_JINGLE_ACTION_SESSION_ACCEPT:
- this._send_session_accept(stanza, args); break;
-
- case JSJAC_JINGLE_ACTION_SESSION_INFO:
- this._send_session_info(stanza, args); break;
-
- case JSJAC_JINGLE_ACTION_SESSION_INITIATE:
- this._send_session_initiate(stanza, args); break;
-
- case JSJAC_JINGLE_ACTION_SESSION_TERMINATE:
- this._send_session_terminate(stanza, args); break;
-
- case JSJAC_JINGLE_ACTION_TRANSPORT_ACCEPT:
- this._send_transport_accept(stanza); break;
-
- case JSJAC_JINGLE_ACTION_TRANSPORT_INFO:
- this._send_transport_info(stanza, args); break;
-
- case JSJAC_JINGLE_ACTION_TRANSPORT_REJECT:
- this._send_transport_reject(stanza); break;
-
- case JSJAC_JINGLE_ACTION_TRANSPORT_REPLACE:
- this._send_transport_replace(stanza); break;
-
- default:
- this.get_debug().log('[JSJaCJingle:single] send > Unexpected error.', 1);
-
- return false;
- }
- } else if(type != JSJAC_JINGLE_IQ_TYPE_RESULT) {
- this.get_debug().log('[JSJaCJingle:single] send > Stanza type must either be set or result.', 1);
-
- return false;
- }
-
- this._set_sent_id(args.id);
-
- this.get_connection().send(stanza);
-
- if(this.get_net_trace()) this.get_debug().log('[JSJaCJingle:single] send > Outgoing packet sent' + '\n\n' + stanza.xml());
-
- return true;
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] send > ' + e, 1);
- }
-
- return false;
- },
-
- /**
- * Handles a given Jingle stanza response
- * @private
- * @fires JSJaCJingleSingle#_handle_content_accept
- * @fires JSJaCJingleSingle#_handle_content_add
- * @fires JSJaCJingleSingle#_handle_content_modify
- * @fires JSJaCJingleSingle#_handle_content_reject
- * @fires JSJaCJingleSingle#_handle_content_remove
- * @fires JSJaCJingleSingle#_handle_description_info
- * @fires JSJaCJingleSingle#_handle_security_info
- * @fires JSJaCJingleSingle#_handle_session_accept
- * @fires JSJaCJingleSingle#_handle_session_info
- * @fires JSJaCJingleSingle#_handle_session_initiate
- * @fires JSJaCJingleSingle#_handle_session_terminate
- * @fires JSJaCJingleSingle#_handle_transport_accept
- * @fires JSJaCJingleSingle#_handle_transport_info
- * @fires JSJaCJingleSingle#_handle_transport_reject
- * @fires JSJaCJingleSingle#_handle_transport_replace
- * @param {JSJaCPacket} stanza
- */
- handle: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] handle', 4);
-
- try {
- if(this.get_net_trace()) this.get_debug().log('[JSJaCJingle:single] handle > Incoming packet received' + '\n\n' + stanza.xml());
-
- // Locked?
- if(this.get_lock()) {
- this.get_debug().log('[JSJaCJingle:single] handle > Cannot handle, resource locked. Please open another session or check WebRTC support.', 0);
- return;
- }
-
- // Defer?
- var _this = this;
-
- if(JSJaCJingle._defer(function() { _this.handle(stanza); })) {
- this.get_debug().log('[JSJaCJingle:single] handle > Deferred (waiting for the library components to be initiated).', 0);
- return;
- }
-
- var id = stanza.getID();
- var type = stanza.getType();
-
- if(id && type == JSJAC_JINGLE_IQ_TYPE_RESULT) this._set_received_id(id);
-
- // Submit to custom handler
- var i, handlers = this.get_registered_handlers(JSJAC_JINGLE_STANZA_IQ, type, id);
-
- if(typeof handlers == 'object' && handlers.length) {
- this.get_debug().log('[JSJaCJingle:single] handle > Submitted to custom registered handlers.', 2);
-
- for(i in handlers) {
- /* @function */
- handlers[i](stanza);
- }
-
- this.unregister_handler(JSJAC_JINGLE_STANZA_IQ, type, id);
-
- return;
- }
-
- var jingle = this.utils.stanza_jingle(stanza);
-
- // Don't handle non-Jingle stanzas there...
- if(!jingle) return;
-
- var action = this.utils.stanza_get_attribute(jingle, 'action');
-
- // Don't handle action-less Jingle stanzas there...
- if(!action) return;
-
- // Submit to registered handler
- switch(action) {
- case JSJAC_JINGLE_ACTION_CONTENT_ACCEPT:
- this._handle_content_accept(stanza); break;
-
- case JSJAC_JINGLE_ACTION_CONTENT_ADD:
- this._handle_content_add(stanza); break;
-
- case JSJAC_JINGLE_ACTION_CONTENT_MODIFY:
- this._handle_content_modify(stanza); break;
-
- case JSJAC_JINGLE_ACTION_CONTENT_REJECT:
- this._handle_content_reject(stanza); break;
-
- case JSJAC_JINGLE_ACTION_CONTENT_REMOVE:
- this._handle_content_remove(stanza); break;
-
- case JSJAC_JINGLE_ACTION_DESCRIPTION_INFO:
- this._handle_description_info(stanza); break;
-
- case JSJAC_JINGLE_ACTION_SECURITY_INFO:
- this._handle_security_info(stanza); break;
-
- case JSJAC_JINGLE_ACTION_SESSION_ACCEPT:
- this._handle_session_accept(stanza); break;
-
- case JSJAC_JINGLE_ACTION_SESSION_INFO:
- this._handle_session_info(stanza); break;
-
- case JSJAC_JINGLE_ACTION_SESSION_INITIATE:
- this._handle_session_initiate(stanza); break;
-
- case JSJAC_JINGLE_ACTION_SESSION_TERMINATE:
- this._handle_session_terminate(stanza); break;
-
- case JSJAC_JINGLE_ACTION_TRANSPORT_ACCEPT:
- this._handle_transport_accept(stanza); break;
-
- case JSJAC_JINGLE_ACTION_TRANSPORT_INFO:
- this._handle_transport_info(stanza); break;
-
- case JSJAC_JINGLE_ACTION_TRANSPORT_REJECT:
- this._handle_transport_reject(stanza); break;
-
- case JSJAC_JINGLE_ACTION_TRANSPORT_REPLACE:
- this._handle_transport_replace(stanza); break;
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] handle > ' + e, 1);
- }
- },
-
- /**
- * Mutes a Jingle session (local)
- * @public
- * @param {String} name
- */
- mute: function(name) {
- this.get_debug().log('[JSJaCJingle:single] mute', 4);
-
- try {
- // Locked?
- if(this.get_lock()) {
- this.get_debug().log('[JSJaCJingle:single] mute > Cannot mute, resource locked. Please open another session or check WebRTC support.', 0);
- return;
- }
-
- // Defer?
- var _this = this;
-
- if(JSJaCJingle._defer(function() { _this.mute(name); })) {
- this.get_debug().log('[JSJaCJingle:single] mute > Deferred (waiting for the library components to be initiated).', 0);
- return;
- }
-
- // Already muted?
- if(this.get_mute(name) === true) {
- this.get_debug().log('[JSJaCJingle:single] mute > Resource already muted.', 0);
- return;
- }
-
- this._peer_sound(false);
- this._set_mute(name, true);
-
- this.send(JSJAC_JINGLE_IQ_TYPE_SET, { action: JSJAC_JINGLE_ACTION_SESSION_INFO, info: JSJAC_JINGLE_SESSION_INFO_MUTE, name: name });
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] mute > ' + e, 1);
- }
- },
-
- /**
- * Unmutes a Jingle session (local)
- * @public
- * @param {String} name
- */
- unmute: function(name) {
- this.get_debug().log('[JSJaCJingle:single] unmute', 4);
-
- try {
- // Locked?
- if(this.get_lock()) {
- this.get_debug().log('[JSJaCJingle:single] unmute > Cannot unmute, resource locked. Please open another session or check WebRTC support.', 0);
- return;
- }
-
- // Defer?
- var _this = this;
-
- if(JSJaCJingle._defer(function() { _this.unmute(name); })) {
- this.get_debug().log('[JSJaCJingle:single] unmute > Deferred (waiting for the library components to be initiated).', 0);
- return;
- }
-
- // Already unmute?
- if(this.get_mute(name) === false) {
- this.get_debug().log('[JSJaCJingle:single] unmute > Resource already unmuted.', 0);
- return;
- }
-
- this._peer_sound(true);
- this._set_mute(name, false);
-
- this.send(JSJAC_JINGLE_IQ_TYPE_SET, { action: JSJAC_JINGLE_ACTION_SESSION_INFO, info: JSJAC_JINGLE_SESSION_INFO_UNMUTE, name: name });
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] unmute > ' + e, 1);
- }
- },
-
- /**
- * Toggles media type in a Jingle session
- * @todo Code media() (Single version)
- * @public
- * @param {String} [media]
- */
- media: function(media) {
- /* DEV: don't expect this to work as of now! */
- /* MEDIA() - SINGLE VERSION */
-
- this.get_debug().log('[JSJaCJingle:single] media', 4);
-
- try {
- // Locked?
- if(this.get_lock()) {
- this.get_debug().log('[JSJaCJingle:single] media > Cannot change media, resource locked. Please open another session or check WebRTC support.', 0);
- return;
- }
-
- // Defer?
- var _this = this;
-
- if(JSJaCJingle._defer(function() { _this.media(media); })) {
- this.get_debug().log('[JSJaCJingle:single] media > Deferred (waiting for the library components to be initiated).', 0);
- return;
- }
-
- // Toggle media?
- if(!media)
- media = (this.get_media() == JSJAC_JINGLE_MEDIA_VIDEO) ? JSJAC_JINGLE_MEDIA_AUDIO : JSJAC_JINGLE_MEDIA_VIDEO;
-
- // Media unknown?
- if(!(media in JSJAC_JINGLE_MEDIAS)) {
- this.get_debug().log('[JSJaCJingle:single] media > No media provided or media unsupported (media: ' + media + ').', 0);
- return;
- }
-
- // Already using provided media?
- if(this.get_media() == media) {
- this.get_debug().log('[JSJaCJingle:single] media > Resource already using this media (media: ' + media + ').', 0);
- return;
- }
-
- // Switch locked for now? (another one is being processed)
- if(this.get_media_busy()) {
- this.get_debug().log('[JSJaCJingle:single] media > Resource already busy switching media (busy: ' + this.get_media() + ', media: ' + media + ').', 0);
- return;
- }
-
- this.get_debug().log('[JSJaCJingle:single] media > Changing media to: ' + media + '...', 2);
-
- // Store new media
- this._set_media(media);
- this._set_media_busy(true);
-
- // Toggle video mode (add/remove)
- if(media == JSJAC_JINGLE_MEDIA_VIDEO) {
- /* @todo the flow is something like that... */
- /*this._peer_get_user_media(function() {
- this._peer_connection_create(
- function() {
- this.get_debug().log('[JSJaCJingle:muji] media > Ready to change media (to: ' + media + ').', 2);
-
- // 'content-add' >> video
- // @todo restart video stream configuration
-
- // WARNING: only change get user media, DO NOT TOUCH THE STREAM THING (don't stop active stream as it's flowing!!)
-
- this.send(JSJAC_JINGLE_IQ_TYPE_SET, { action: JSJAC_JINGLE_ACTION_CONTENT_ADD, name: JSJAC_JINGLE_MEDIA_VIDEO });
- }
- )
- });*/
- } else {
- /* @todo the flow is something like that... */
- /*this._peer_get_user_media(function() {
- this._peer_connection_create(
- function() {
- this.get_debug().log('[JSJaCJingle:muji] media > Ready to change media (to: ' + media + ').', 2);
-
- // 'content-remove' >> video
- // @todo remove video stream configuration
-
- // WARNING: only change get user media, DO NOT TOUCH THE STREAM THING (don't stop active stream as it's flowing!!)
- // here, only stop the video stream, do not touch the audio stream
-
- this.send(JSJAC_JINGLE_IQ_TYPE_SET, { action: JSJAC_JINGLE_ACTION_CONTENT_REMOVE, name: JSJAC_JINGLE_MEDIA_VIDEO });
- }
- )
- });*/
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] media > ' + e, 1);
- }
- },
-
-
- /**
- * JSJSAC JINGLE SENDERS
- */
-
- /**
- * Sends the Jingle content accept
- * @private
- * @param {JSJaCPacket} stanza
- */
- _send_content_accept: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _send_content_accept', 4);
-
- try {
- /* @todo remove from remote 'content-add' queue */
- /* @todo reprocess content_local/content_remote */
-
- // Not implemented for now
- this.get_debug().log('[JSJaCJingle:single] _send_content_accept > Feature not implemented!', 0);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _send_content_accept > ' + e, 1);
- }
- },
-
- /**
- * Sends the Jingle content add
- * @private
- * @param {JSJaCPacket} stanza
- */
- _send_content_add: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _send_content_add', 4);
-
- try {
- /* @todo push to local 'content-add' queue */
-
- // Not implemented for now
- this.get_debug().log('[JSJaCJingle:single] _send_content_add > Feature not implemented!', 0);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _send_content_add > ' + e, 1);
- }
- },
-
- /**
- * Sends the Jingle content modify
- * @private
- * @param {JSJaCPacket} stanza
- */
- _send_content_modify: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _send_content_modify', 4);
-
- try {
- /* @todo push to local 'content-modify' queue */
-
- // Not implemented for now
- this.get_debug().log('[JSJaCJingle:single] _send_content_modify > Feature not implemented!', 0);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _send_content_modify > ' + e, 1);
- }
- },
-
- /**
- * Sends the Jingle content reject
- * @private
- * @param {JSJaCPacket} stanza
- */
- _send_content_reject: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _send_content_reject', 4);
-
- try {
- /* @todo remove from remote 'content-add' queue */
-
- // Not implemented for now
- this.get_debug().log('[JSJaCJingle:single] _send_content_reject > Feature not implemented!', 0);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _send_content_reject > ' + e, 1);
- }
- },
-
- /**
- * Sends the Jingle content remove
- * @private
- * @param {JSJaCPacket} stanza
- */
- _send_content_remove: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _send_content_remove', 4);
-
- try {
- /* @todo add to local 'content-remove' queue */
-
- // Not implemented for now
- this.get_debug().log('[JSJaCJingle:single] _send_content_remove > Feature not implemented!', 0);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _send_content_remove > ' + e, 1);
- }
- },
-
- /**
- * Sends the Jingle description info
- * @private
- * @param {JSJaCPacket} stanza
- */
- _send_description_info: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _send_description_info', 4);
-
- try {
- // Not implemented for now
- this.get_debug().log('[JSJaCJingle:single] _send_description_info > Feature not implemented!', 0);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _send_description_info > ' + e, 1);
- }
- },
-
- /**
- * Sends the Jingle security info
- * @private
- * @param {JSJaCPacket} stanza
- */
- _send_security_info: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _send_security_info', 4);
-
- try {
- // Not implemented for now
- this.get_debug().log('[JSJaCJingle:single] _send_security_info > Feature not implemented!', 0);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _send_security_info > ' + e, 1);
- }
- },
-
- /**
- * Sends the Jingle session accept
- * @private
- * @fires JSJaCJingleSingle#_handle_session_accept_success
- * @fires JSJaCJingleSingle#_handle_session_accept_error
- * @fires JSJaCJingleSingle#get_session_accept_success
- * @fires JSJaCJingleSingle#get_session_accept_error
- * @param {JSJaCPacket} stanza
- * @param {Object} args
- */
- _send_session_accept: function(stanza, args) {
- this.get_debug().log('[JSJaCJingle:single] _send_session_accept', 4);
-
- try {
- if(this.get_status() !== JSJAC_JINGLE_STATUS_ACCEPTING) {
- this.get_debug().log('[JSJaCJingle:single] _send_session_accept > Cannot send accept stanza, resource not accepting (status: ' + this.get_status() + ').', 0);
- this._send_error(stanza, JSJAC_JINGLE_ERROR_OUT_OF_ORDER);
- return;
- }
-
- if(!args) {
- this.get_debug().log('[JSJaCJingle:single] _send_session_accept > Arguments not provided.', 1);
- return;
- }
-
- // Build Jingle stanza
- var jingle = this.utils.stanza_generate_jingle(stanza, {
- 'action' : JSJAC_JINGLE_ACTION_SESSION_ACCEPT,
- 'responder' : this.get_responder()
- });
-
- this.utils.stanza_generate_content_local(stanza, jingle, true);
- this.utils.stanza_generate_group_local(stanza, jingle);
-
- // Schedule success
- var _this = this;
-
- this.register_handler(JSJAC_JINGLE_STANZA_IQ, JSJAC_JINGLE_IQ_TYPE_RESULT, args.id, function(stanza) {
- /* @function */
- (_this.get_session_accept_success())(_this, stanza);
- _this._handle_session_accept_success(stanza);
- });
-
- // Schedule error timeout
- this.utils.stanza_timeout(JSJAC_JINGLE_STANZA_IQ, JSJAC_JINGLE_IQ_TYPE_RESULT, args.id, {
- /* @function */
- external: this.get_session_accept_error().bind(this),
- internal: this._handle_session_accept_error.bind(this)
- });
-
- this.get_debug().log('[JSJaCJingle:single] _send_session_accept > Sent.', 4);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _send_session_accept > ' + e, 1);
- }
- },
-
- /**
- * Sends the Jingle session info
- * @private
- * @fires JSJaCJingleSingle#_handle_session_info_success
- * @fires JSJaCJingleSingle#_handle_session_info_error
- * @param {JSJaCPacket} stanza
- * @param {Object} args
- */
- _send_session_info: function(stanza, args) {
- this.get_debug().log('[JSJaCJingle:single] _send_session_info', 4);
-
- try {
- if(!args) {
- this.get_debug().log('[JSJaCJingle:single] _send_session_info > Arguments not provided.', 1);
- return;
- }
-
- // Filter info
- args.info = args.info || JSJAC_JINGLE_SESSION_INFO_ACTIVE;
-
- // Build Jingle stanza
- var jingle = this.utils.stanza_generate_jingle(stanza, {
- 'action' : JSJAC_JINGLE_ACTION_SESSION_INFO,
- 'initiator' : this.get_initiator()
- });
-
- this.utils.stanza_generate_session_info(stanza, jingle, args);
-
- // Schedule success
- var _this = this;
-
- this.register_handler(JSJAC_JINGLE_STANZA_IQ, JSJAC_JINGLE_IQ_TYPE_RESULT, args.id, function(stanza) {
- /* @function */
- (_this.get_session_info_success())(this, stanza);
- _this._handle_session_info_success(stanza);
- });
-
- // Schedule error timeout
- this.utils.stanza_timeout(JSJAC_JINGLE_STANZA_IQ, JSJAC_JINGLE_IQ_TYPE_RESULT, args.id, {
- /* @function */
- external: this.get_session_info_error().bind(this),
- internal: this._handle_session_info_error.bind(this)
- });
-
- this.get_debug().log('[JSJaCJingle:single] _send_session_info > Sent (name: ' + args.info + ').', 2);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _send_session_info > ' + e, 1);
- }
- },
-
- /**
- * Sends the Jingle session initiate
- * @private
- * @fires JSJaCJingleSingle#_handle_initiate_info_success
- * @fires JSJaCJingleSingle#_handle_initiate_info_error
- * @fires JSJaCJingleSingle#get_session_initiate_success
- * @fires JSJaCJingleSingle#get_session_initiate_error
- * @param {JSJaCPacket} stanza
- * @param {Object} args
- */
- _send_session_initiate: function(stanza, args) {
- this.get_debug().log('[JSJaCJingle:single] _send_session_initiate', 4);
-
- try {
- if(this.get_status() !== JSJAC_JINGLE_STATUS_INITIATING) {
- this.get_debug().log('[JSJaCJingle:single] _send_session_initiate > Cannot send initiate stanza, resource not initiating (status: ' + this.get_status() + ').', 0);
- return;
- }
-
- if(!args) {
- this.get_debug().log('[JSJaCJingle:single] _send_session_initiate > Arguments not provided.', 1);
- return;
- }
-
- // Build Jingle stanza
- var jingle = this.utils.stanza_generate_jingle(stanza, {
- 'action' : JSJAC_JINGLE_ACTION_SESSION_INITIATE,
- 'initiator' : this.get_initiator()
- });
-
- this.utils.stanza_generate_content_local(stanza, jingle, true);
- this.utils.stanza_generate_group_local(stanza, jingle);
-
- // Schedule success
- var _this = this;
-
- this.register_handler(JSJAC_JINGLE_STANZA_IQ, JSJAC_JINGLE_IQ_TYPE_RESULT, args.id, function(stanza) {
- /* @function */
- (_this.get_session_initiate_success())(_this, stanza);
- _this._handle_session_initiate_success(stanza);
- });
-
- // Schedule error timeout
- this.utils.stanza_timeout(JSJAC_JINGLE_STANZA_IQ, JSJAC_JINGLE_IQ_TYPE_RESULT, args.id, {
- /* @function */
- external: this.get_session_initiate_error().bind(this),
- internal: this._handle_session_initiate_error.bind(this)
- });
-
- this.get_debug().log('[JSJaCJingle:single] _send_session_initiate > Sent.', 2);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _send_session_initiate > ' + e, 1);
- }
- },
-
- /**
- * Sends the Jingle session terminate
- * @private
- * @fires JSJaCJingleSingle#_handle_session_terminate_success
- * @fires JSJaCJingleSingle#_handle_session_terminate_error
- * @fires JSJaCJingleSingle#get_session_terminate_success
- * @fires JSJaCJingleSingle#get_session_terminate_error
- * @param {JSJaCPacket} stanza
- * @param {Object} args
- */
- _send_session_terminate: function(stanza, args) {
- this.get_debug().log('[JSJaCJingle:single] _send_session_terminate', 4);
-
- try {
- if(this.get_status() !== JSJAC_JINGLE_STATUS_TERMINATING) {
- this.get_debug().log('[JSJaCJingle:single] _send_session_terminate > Cannot send terminate stanza, resource not terminating (status: ' + this.get_status() + ').', 0);
- return;
- }
-
- if(!args) {
- this.get_debug().log('[JSJaCJingle:single] _send_session_terminate > Arguments not provided.', 1);
- return;
- }
-
- // Filter reason
- args.reason = args.reason || JSJAC_JINGLE_REASON_SUCCESS;
-
- // Store terminate reason
- this._set_reason(args.reason);
-
- // Build terminate stanza
- var jingle = this.utils.stanza_generate_jingle(stanza, {
- 'action': JSJAC_JINGLE_ACTION_SESSION_TERMINATE
- });
-
- var jingle_reason = jingle.appendChild(stanza.buildNode('reason', {'xmlns': this.get_namespace()}));
- jingle_reason.appendChild(stanza.buildNode(args.reason, {'xmlns': this.get_namespace()}));
-
- // Schedule success
- var _this = this;
-
- this.register_handler(JSJAC_JINGLE_STANZA_IQ, JSJAC_JINGLE_IQ_TYPE_RESULT, args.id, function(stanza) {
- /* @function */
- (_this.get_session_terminate_success())(_this, stanza);
- _this._handle_session_terminate_success(stanza);
- });
-
- // Schedule error timeout
- this.utils.stanza_timeout(JSJAC_JINGLE_STANZA_IQ, JSJAC_JINGLE_IQ_TYPE_RESULT, args.id, {
- /* @function */
- external: this.get_session_terminate_error().bind(this),
- internal: this._handle_session_terminate_error.bind(this)
- });
-
- this.get_debug().log('[JSJaCJingle:single] _send_session_terminate > Sent (reason: ' + args.reason + ').', 2);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _send_session_terminate > ' + e, 1);
- }
- },
-
- /**
- * Sends the Jingle transport accept
- * @private
- * @param {JSJaCPacket} stanza
- */
- _send_transport_accept: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _send_transport_accept', 4);
-
- try {
- // Not implemented for now
- this.get_debug().log('[JSJaCJingle:single] _send_transport_accept > Feature not implemented!', 0);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _send_transport_accept > ' + e, 1);
- }
- },
-
- /**
- * Sends the Jingle transport info
- * @private
- * @fires JSJaCJingleSingle#_handle_transport_info_success
- * @fires JSJaCJingleSingle#_handle_transport_info_error
- * @param {JSJaCPacket} stanza
- * @param {Object} args
- */
- _send_transport_info: function(stanza, args) {
- this.get_debug().log('[JSJaCJingle:single] _send_transport_info', 4);
-
- try {
- if(this.get_status() !== JSJAC_JINGLE_STATUS_INITIATED &&
- this.get_status() !== JSJAC_JINGLE_STATUS_ACCEPTING &&
- this.get_status() !== JSJAC_JINGLE_STATUS_ACCEPTED) {
- this.get_debug().log('[JSJaCJingle:single] _send_transport_info > Cannot send transport info, resource not initiated, nor accepting, nor accepted (status: ' + this.get_status() + ').', 0);
- return;
- }
-
- if(!args) {
- this.get_debug().log('[JSJaCJingle:single] _send_transport_info > Arguments not provided.', 1);
- return;
- }
-
- if(this.utils.object_length(this.get_candidates_queue_local()) === 0) {
- this.get_debug().log('[JSJaCJingle:single] _send_transport_info > No local candidate in queue.', 1);
- return;
- }
-
- // Build Jingle stanza
- var jingle = this.utils.stanza_generate_jingle(stanza, {
- 'action' : JSJAC_JINGLE_ACTION_TRANSPORT_INFO,
- 'initiator' : this.get_initiator()
- });
-
- // Build queue content
- var cur_name;
- var content_queue_local = {};
-
- for(cur_name in this.get_name()) {
- content_queue_local[cur_name] = this.utils.generate_content(
- this.get_creator(cur_name),
- cur_name,
- this.get_senders(cur_name),
- this.get_payloads_local(cur_name),
- this.get_candidates_queue_local(cur_name)
- );
- }
-
- this.utils.stanza_generate_content_local(stanza, jingle, true, content_queue_local);
- this.utils.stanza_generate_group_local(stanza, jingle);
-
- // Schedule success
- var _this = this;
-
- this.register_handler(JSJAC_JINGLE_STANZA_IQ, JSJAC_JINGLE_IQ_TYPE_RESULT, args.id, function(stanza) {
- _this._handle_transport_info_success(stanza);
- });
-
- // Schedule error timeout
- this.utils.stanza_timeout(JSJAC_JINGLE_STANZA_IQ, JSJAC_JINGLE_IQ_TYPE_RESULT, args.id, {
- internal: this._handle_transport_info_error.bind(this)
- });
-
- this.get_debug().log('[JSJaCJingle:single] _send_transport_info > Sent.', 2);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _send_transport_info > ' + e, 1);
- }
- },
-
- /**
- * Sends the Jingle transport reject
- * @private
- * @param {JSJaCPacket} stanza
- */
- _send_transport_reject: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _send_transport_reject', 4);
-
- try {
- // Not implemented for now
- this.get_debug().log('[JSJaCJingle:single] _send_transport_reject > Feature not implemented!', 0);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _send_transport_reject > ' + e, 1);
- }
- },
-
- /**
- * Sends the Jingle transport replace
- * @private
- * @param {JSJaCPacket} stanza
- */
- _send_transport_replace: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _send_transport_replace', 4);
-
- try {
- // Not implemented for now
- this.get_debug().log('[JSJaCJingle:single] _send_transport_replace > Feature not implemented!', 0);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _send_transport_replace > ' + e, 1);
- }
- },
-
- /**
- * Sends the Jingle transport replace
- * @private
- * @param {JSJaCPacket} stanza
- * @param {Object} error
- */
- _send_error: function(stanza, error) {
- this.get_debug().log('[JSJaCJingle:single] _send_error', 4);
-
- try {
- // Assert
- if(!('type' in error)) {
- this.get_debug().log('[JSJaCJingle:single] _send_error > Type unknown.', 1);
- return;
- }
-
- if('jingle' in error && !(error.jingle in JSJAC_JINGLE_ERRORS)) {
- this.get_debug().log('[JSJaCJingle:single] _send_error > Jingle condition unknown (' + error.jingle + ').', 1);
- return;
- }
-
- if('xmpp' in error && !(error.xmpp in XMPP_ERRORS)) {
- this.get_debug().log('[JSJaCJingle:single] _send_error > XMPP condition unknown (' + error.xmpp + ').', 1);
- return;
- }
-
- var stanza_error = new JSJaCIQ();
-
- stanza_error.setType('error');
- stanza_error.setID(stanza.getID());
- stanza_error.setTo(this.get_to());
-
- var error_node = stanza_error.getNode().appendChild(stanza_error.buildNode('error', {'xmlns': NS_CLIENT, 'type': error.type}));
-
- if('xmpp' in error) error_node.appendChild(stanza_error.buildNode(error.xmpp, { 'xmlns': NS_STANZAS }));
- if('jingle' in error) error_node.appendChild(stanza_error.buildNode(error.jingle, { 'xmlns': NS_JINGLE_ERRORS }));
-
- this.get_connection().send(stanza_error);
-
- this.get_debug().log('[JSJaCJingle:single] _send_error > Sent: ' + (error.jingle || error.xmpp), 2);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _send_error > ' + e, 1);
- }
- },
-
-
-
- /**
- * JSJSAC JINGLE HANDLERS
- */
-
- /**
- * Handles the Jingle content accept
- * @private
- * @event JSJaCJingleSingle#_handle_content_accept
- * @param {JSJaCPacket} stanza
- */
- _handle_content_accept: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_content_accept', 4);
-
- try {
- /* @todo start to flow accepted stream */
- /* @todo remove accepted content from local 'content-add' queue */
- /* @todo reprocess content_local/content_remote */
-
- // Not implemented for now
- this._send_error(stanza, XMPP_ERROR_FEATURE_NOT_IMPLEMENTED);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_content_accept > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle content add
- * @private
- * @event JSJaCJingleSingle#_handle_content_add
- * @param {JSJaCPacket} stanza
- */
- _handle_content_add: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_content_add', 4);
-
- try {
- /* @todo request the user to start this content (need a custom handler)
- * on accept: send content-accept */
- /* @todo push to remote 'content-add' queue */
- /* @todo reprocess content_local/content_remote */
-
- // Not implemented for now
- this._send_error(stanza, XMPP_ERROR_FEATURE_NOT_IMPLEMENTED);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_content_add > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle content modify
- * @private
- * @event JSJaCJingleSingle#_handle_content_modify
- * @param {JSJaCPacket} stanza
- */
- _handle_content_modify: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_content_modify', 4);
-
- try {
- /* @todo change 'senders' value (direction of the stream)
- * if(send:from_me): notify the user that media is requested
- * if(unacceptable): terminate the session
- * if(accepted): change local/remote SDP */
- /* @todo reprocess content_local/content_remote */
-
- // Not implemented for now
- this._send_error(stanza, XMPP_ERROR_FEATURE_NOT_IMPLEMENTED);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_content_modify > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle content reject
- * @private
- * @event JSJaCJingleSingle#_handle_content_reject
- * @param {JSJaCPacket} stanza
- */
- _handle_content_reject: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_content_reject', 4);
-
- try {
- /* @todo remove rejected content from local 'content-add' queue */
-
- // Not implemented for now
- this._send_error(stanza, XMPP_ERROR_FEATURE_NOT_IMPLEMENTED);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_content_reject > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle content remove
- * @private
- * @event JSJaCJingleSingle#_handle_content_remove
- * @param {JSJaCPacket} stanza
- */
- _handle_content_remove: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_content_remove', 4);
-
- try {
- /* @todo stop flowing removed stream */
- /* @todo reprocess content_local/content_remote */
-
- // Not implemented for now
- this._send_error(stanza, XMPP_ERROR_FEATURE_NOT_IMPLEMENTED);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_content_remove > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle description info
- * @private
- * @event JSJaCJingleSingle#_handle_description_info
- * @param {JSJaCPacket} stanza
- */
- _handle_description_info: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_description_info', 4);
-
- try {
- // Not implemented for now
- this._send_error(stanza, XMPP_ERROR_FEATURE_NOT_IMPLEMENTED);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_description_info > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle security info
- * @private
- * @event JSJaCJingleSingle#_handle_security_info
- * @param {JSJaCPacket} stanza
- */
- _handle_security_info: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_security_info', 4);
-
- try {
- // Not implemented for now
- this._send_error(stanza, XMPP_ERROR_FEATURE_NOT_IMPLEMENTED);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_security_info > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session accept
- * @private
- * @event JSJaCJingleSingle#_handle_session_accept
- * @fires JSJaCJingleSingle#_handle_session_accept_success
- * @fires JSJaCJingleSingle#_handle_session_accept_error
- * @fires JSJaCJingleSingle#get_session_accept_success
- * @fires JSJaCJingleSingle#get_session_accept_error
- * @fires JSJaCJingleSingle#get_session_accept_request
- * @param {JSJaCPacket} stanza
- */
- _handle_session_accept: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_accept', 4);
-
- try {
- // Security preconditions
- if(!this.utils.stanza_safe(stanza)) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_accept > Dropped unsafe stanza.', 0);
-
- this._send_error(stanza, JSJAC_JINGLE_ERROR_UNKNOWN_SESSION);
- return;
- }
-
- // Can now safely dispatch the stanza
- switch(stanza.getType()) {
- case JSJAC_JINGLE_IQ_TYPE_RESULT:
- /* @function */
- (this.get_session_accept_success())(this, stanza);
- this._handle_session_accept_success(stanza);
-
- break;
-
- case 'error':
- /* @function */
- (this.get_session_accept_error())(this, stanza);
- this._handle_session_accept_error(stanza);
-
- break;
-
- case JSJAC_JINGLE_IQ_TYPE_SET:
- // External handler must be set before internal one here...
- /* @function */
- (this.get_session_accept_request())(this, stanza);
- this._handle_session_accept_request(stanza);
-
- break;
-
- default:
- this._send_error(stanza, XMPP_ERROR_FEATURE_NOT_IMPLEMENTED);
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_accept > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session accept success
- * @private
- * @event JSJaCJingleSingle#_handle_session_accept_success
- * @param {JSJaCPacket} stanza
- */
- _handle_session_accept_success: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_accept_success', 4);
-
- try {
- // Change session status
- this._set_status(JSJAC_JINGLE_STATUS_ACCEPTED);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_accept_success > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session accept error
- * @private
- * @event JSJaCJingleSingle#_handle_session_accept_error
- * @param {JSJaCPacket} stanza
- */
- _handle_session_accept_error: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_accept_error', 4);
-
- try {
- // Terminate the session (timeout)
- this.terminate(JSJAC_JINGLE_REASON_TIMEOUT);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_accept_error > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session accept request
- * @private
- * @event JSJaCJingleSingle#_handle_session_accept_request
- * @fires JSJaCJingleSingle#_handle_session_accept_success
- * @fires JSJaCJingleSingle#_handle_session_accept_error
- * @fires JSJaCJingleSingle#get_session_accept_success
- * @fires JSJaCJingleSingle#get_session_accept_error
- * @param {JSJaCPacket} stanza
- */
- _handle_session_accept_request: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_accept_request', 4);
-
- try {
- // Slot unavailable?
- if(this.get_status() !== JSJAC_JINGLE_STATUS_INITIATED) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_accept_request > Cannot handle, resource already accepted (status: ' + this.get_status() + ').', 0);
- this._send_error(stanza, JSJAC_JINGLE_ERROR_OUT_OF_ORDER);
- return;
- }
-
- // Common vars
- var i, cur_candidate_obj;
-
- // Change session status
- this._set_status(JSJAC_JINGLE_STATUS_ACCEPTING);
-
- var rd_sid = this.utils.stanza_sid(stanza);
-
- // Request is valid?
- if(rd_sid && this.is_initiator() && this.utils.stanza_parse_content(stanza)) {
- // Handle additional data (optional)
- this.utils.stanza_parse_group(stanza);
-
- // Generate and store content data
- this.utils.build_content_remote();
-
- // Trigger accept success callback
- /* @function */
- (this.get_session_accept_success())(this, stanza);
- this._handle_session_accept_success(stanza);
-
- var sdp_remote = this.sdp._generate(
- WEBRTC_SDP_TYPE_ANSWER,
- this.get_group_remote(),
- this.get_payloads_remote(),
- this.get_candidates_queue_remote()
- );
-
- if(this.get_sdp_trace()) this.get_debug().log('[JSJaCJingle:single] SDP (remote)' + '\n\n' + sdp_remote.description.sdp, 4);
-
- // Remote description
- var _this = this;
-
- this.get_peer_connection().setRemoteDescription(
- (new WEBRTC_SESSION_DESCRIPTION(sdp_remote.description)),
-
- function() {
- // Success (descriptions are compatible)
- },
-
- function(e) {
- if(_this.get_sdp_trace()) _this.get_debug().log('[JSJaCJingle:single] SDP (remote:error)' + '\n\n' + (e.message || e.name || 'Unknown error'), 4);
-
- // Error (descriptions are incompatible)
- _this.terminate(JSJAC_JINGLE_REASON_INCOMPATIBLE_PARAMETERS);
- }
- );
-
- // ICE candidates
- for(i in sdp_remote.candidates) {
- cur_candidate_obj = sdp_remote.candidates[i];
-
- this.get_peer_connection().addIceCandidate(
- new WEBRTC_ICE_CANDIDATE({
- sdpMLineIndex : cur_candidate_obj.id,
- candidate : cur_candidate_obj.candidate
- })
- );
- }
-
- // Empty the unapplied candidates queue
- this._set_candidates_queue_remote(null);
-
- // Success reply
- this.send(JSJAC_JINGLE_IQ_TYPE_RESULT, { id: stanza.getID() });
- } else {
- // Trigger accept error callback
- /* @function */
- (this.get_session_accept_error())(this, stanza);
- this._handle_session_accept_error(stanza);
-
- // Send error reply
- this._send_error(stanza, XMPP_ERROR_BAD_REQUEST);
-
- this.get_debug().log('[JSJaCJingle:single] _handle_session_accept_request > Error.', 1);
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_accept_request > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session info
- * @private
- * @event JSJaCJingleSingle#_handle_session_info
- * @fires JSJaCJingleSingle#_handle_session_info_success
- * @fires JSJaCJingleSingle#_handle_session_info_error
- * @fires JSJaCJingleSingle#_handle_session_info_request
- * @fires JSJaCJingleSingle#get_session_info_success
- * @fires JSJaCJingleSingle#get_session_info_error
- * @fires JSJaCJingleSingle#get_session_info_request
- * @param {JSJaCPacket} stanza
- */
- _handle_session_info: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_info', 4);
-
- try {
- // Security preconditions
- if(!this.utils.stanza_safe(stanza)) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_info > Dropped unsafe stanza.', 0);
-
- this._send_error(stanza, JSJAC_JINGLE_ERROR_UNKNOWN_SESSION);
- return;
- }
-
- // Can now safely dispatch the stanza
- switch(stanza.getType()) {
- case JSJAC_JINGLE_IQ_TYPE_RESULT:
- /* @function */
- (this.get_session_info_success())(this, stanza);
- this._handle_session_info_success(stanza);
-
- break;
-
- case 'error':
- /* @function */
- (this.get_session_info_error())(this, stanza);
- this._handle_session_info_error(stanza);
-
- break;
-
- case JSJAC_JINGLE_IQ_TYPE_SET:
- /* @function */
- (this.get_session_info_request())(this, stanza);
- this._handle_session_info_request(stanza);
-
- break;
-
- default:
- this._send_error(stanza, XMPP_ERROR_FEATURE_NOT_IMPLEMENTED);
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_info > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session info success
- * @private
- * @event JSJaCJingleSingle#_handle_session_info_success
- * @param {JSJaCPacket} stanza
- */
- _handle_session_info_success: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_info_success', 4);
- },
-
- /**
- * Handles the Jingle session info error
- * @private
- * @event JSJaCJingleSingle#_handle_session_info_error
- * @param {JSJaCPacket} stanza
- */
- _handle_session_info_error: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_info_error', 4);
- },
-
- /**
- * Handles the Jingle session info request
- * @private
- * @event JSJaCJingleSingle#_handle_session_info_request
- * @fires JSJaCJingleSingle#_handle_session_info_success
- * @fires JSJaCJingleSingle#_handle_session_info_error
- * @fires JSJaCJingleSingle#get_session_info_success
- * @fires JSJaCJingleSingle#get_session_info_error
- * @param {JSJaCPacket} stanza
- */
- _handle_session_info_request: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_info_request', 4);
-
- try {
- // Parse stanza
- var info_name = this.utils.stanza_session_info(stanza);
- var info_result = false;
-
- switch(info_name) {
- case JSJAC_JINGLE_SESSION_INFO_ACTIVE:
- case JSJAC_JINGLE_SESSION_INFO_RINGING:
- case JSJAC_JINGLE_SESSION_INFO_MUTE:
- case JSJAC_JINGLE_SESSION_INFO_UNMUTE:
- info_result = true; break;
- }
-
- if(info_result) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_info_request > (name: ' + (info_name || 'undefined') + ').', 3);
-
- // Process info actions
- this.send(JSJAC_JINGLE_IQ_TYPE_RESULT, { id: stanza.getID() });
-
- // Trigger info success custom callback
- /* @function */
- (this.get_session_info_success())(this, stanza);
- this._handle_session_info_success(stanza);
- } else {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_info_request > Error (name: ' + (info_name || 'undefined') + ').', 1);
-
- // Send error reply
- this._send_error(stanza, XMPP_ERROR_FEATURE_NOT_IMPLEMENTED);
-
- // Trigger info error custom callback
- /* @function */
- (this.get_session_info_error())(this, stanza);
- this._handle_session_info_error(stanza);
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_info_request > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session initiate
- * @private
- * @event JSJaCJingleSingle#_handle_session_initiate
- * @fires JSJaCJingleSingle#_handle_session_initiate_success
- * @fires JSJaCJingleSingle#_handle_session_initiate_error
- * @fires JSJaCJingleSingle#_handle_session_initiate_request
- * @fires JSJaCJingleSingle#get_session_initiate_success
- * @fires JSJaCJingleSingle#get_session_initiate_error
- * @fires JSJaCJingleSingle#get_session_initiate_request
- * @param {JSJaCPacket} stanza
- */
- _handle_session_initiate: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_initiate', 4);
-
- try {
- switch(stanza.getType()) {
- case JSJAC_JINGLE_IQ_TYPE_RESULT:
- /* @function */
- (this.get_session_initiate_success())(this, stanza);
- this._handle_session_initiate_success(stanza);
-
- break;
-
- case 'error':
- /* @function */
- (this.get_session_initiate_error())(this, stanza);
- this._handle_session_initiate_error(stanza);
-
- break;
-
- case JSJAC_JINGLE_IQ_TYPE_SET:
- /* @function */
- (this.get_session_initiate_request())(this, stanza);
- this._handle_session_initiate_request(stanza);
-
- break;
-
- default:
- this._send_error(stanza, XMPP_ERROR_FEATURE_NOT_IMPLEMENTED);
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_initiate > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session initiate success
- * @private
- * @event JSJaCJingleSingle#_handle_session_initiate_success
- * @param {JSJaCPacket} stanza
- */
- _handle_session_initiate_success: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_initiate_success', 4);
-
- try {
- // Change session status
- this._set_status(JSJAC_JINGLE_STATUS_INITIATED);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_initiate_success > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session initiate error
- * @private
- * @event JSJaCJingleSingle#_handle_session_initiate_error
- * @param {JSJaCPacket} stanza
- */
- _handle_session_initiate_error: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_initiate_error', 4);
-
- try {
- // Change session status
- this._set_status(JSJAC_JINGLE_STATUS_INACTIVE);
-
- // Stop WebRTC
- this._peer_stop();
-
- // Lock session (cannot be used later)
- this._set_lock(true);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_initiate_error > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session initiate request
- * @private
- * @event JSJaCJingleSingle#_handle_session_initiate_request
- * @fires JSJaCJingleSingle#_handle_session_initiate_success
- * @fires JSJaCJingleSingle#_handle_session_initiate_error
- * @fires JSJaCJingleSingle#get_session_initiate_success
- * @fires JSJaCJingleSingle#get_session_initiate_error
- * @param {JSJaCPacket} stanza
- */
- _handle_session_initiate_request: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_initiate_request', 4);
-
- try {
- // Slot unavailable?
- if(this.get_status() !== JSJAC_JINGLE_STATUS_INACTIVE) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_initiate_request > Cannot handle, resource already initiated (status: ' + this.get_status() + ').', 0);
- this._send_error(stanza, JSJAC_JINGLE_ERROR_OUT_OF_ORDER);
- return;
- }
-
- // Change session status
- this._set_status(JSJAC_JINGLE_STATUS_INITIATING);
-
- // Common vars
- var rd_from = this.utils.stanza_from(stanza);
- var rd_sid = this.utils.stanza_sid(stanza);
-
- // Request is valid?
- if(rd_sid && this.utils.stanza_parse_content(stanza)) {
- // Handle additional data (optional)
- this.utils.stanza_parse_group(stanza);
-
- // Set session values
- this._set_sid(rd_sid);
- this._set_to(rd_from);
- this._set_initiator(rd_from);
- this._set_responder(this.utils.connection_jid());
-
- // Register session to common router
- JSJaCJingle._add(JSJAC_JINGLE_SESSION_SINGLE, rd_sid, this);
-
- // Generate and store content data
- this.utils.build_content_remote();
-
- // Video or audio-only session?
- if(JSJAC_JINGLE_MEDIA_VIDEO in this.get_content_remote()) {
- this._set_media(JSJAC_JINGLE_MEDIA_VIDEO);
- } else if(JSJAC_JINGLE_MEDIA_AUDIO in this.get_content_remote()) {
- this._set_media(JSJAC_JINGLE_MEDIA_AUDIO);
- } else {
- // Session initiation not done
- /* @function */
- (this.get_session_initiate_error())(this, stanza);
- this._handle_session_initiate_error(stanza);
-
- // Error (no media is supported)
- this.terminate(JSJAC_JINGLE_REASON_UNSUPPORTED_APPLICATIONS);
-
- this.get_debug().log('[JSJaCJingle:single] _handle_session_initiate_request > Error (unsupported media).', 1);
- return;
- }
-
- // Session initiate done
- /* @function */
- (this.get_session_initiate_success())(this, stanza);
- this._handle_session_initiate_success(stanza);
-
- this.send(JSJAC_JINGLE_IQ_TYPE_RESULT, { id: stanza.getID() });
- } else {
- // Session initiation not done
- /* @function */
- (this.get_session_initiate_error())(this, stanza);
- this._handle_session_initiate_error(stanza);
-
- // Send error reply
- this._send_error(stanza, XMPP_ERROR_BAD_REQUEST);
-
- this.get_debug().log('[JSJaCJingle:single] _handle_session_initiate_request > Error (bad request).', 1);
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_initiate_request > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session terminate
- * @private
- * @event JSJaCJingleSingle#_handle_session_terminate
- * @fires JSJaCJingleSingle#_handle_session_terminate_success
- * @fires JSJaCJingleSingle#_handle_session_terminate_error
- * @fires JSJaCJingleSingle#_handle_session_terminate_request
- * @fires JSJaCJingleSingle#get_session_terminate_success
- * @fires JSJaCJingleSingle#get_session_terminate_error
- * @fires JSJaCJingleSingle#get_session_terminate_request
- * @param {JSJaCPacket} stanza
- */
- _handle_session_terminate: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_terminate', 4);
-
- try {
- var type = stanza.getType();
-
- // Security preconditions
- if(!this.utils.stanza_safe(stanza)) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_terminate > Dropped unsafe stanza.', 0);
-
- this._send_error(stanza, JSJAC_JINGLE_ERROR_UNKNOWN_SESSION);
- return;
- }
-
- // Can now safely dispatch the stanza
- switch(stanza.getType()) {
- case JSJAC_JINGLE_IQ_TYPE_RESULT:
- /* @function */
- (this.get_session_terminate_success())(this, stanza);
- this._handle_session_terminate_success(stanza);
-
- break;
-
- case 'error':
- /* @function */
- (this.get_session_terminate_error())(this, stanza);
- this._handle_session_terminate_error(stanza);
-
- break;
-
- case JSJAC_JINGLE_IQ_TYPE_SET:
- /* @function */
- (this.get_session_terminate_request())(this, stanza);
- this._handle_session_terminate_request(stanza);
-
- break;
-
- default:
- this._send_error(stanza, XMPP_ERROR_FEATURE_NOT_IMPLEMENTED);
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_terminate > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session terminate success
- * @private
- * @event JSJaCJingleSingle#_handle_session_terminate_success
- * @param {JSJaCPacket} stanza
- */
- _handle_session_terminate_success: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_terminate_success', 4);
-
- try {
- this.abort();
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_terminate_success > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session terminate error
- * @private
- * @event JSJaCJingleSingle#_handle_session_terminate_error
- * @param {JSJaCPacket} stanza
- */
- _handle_session_terminate_error: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_terminate_error', 4);
-
- try {
- this.abort(true);
-
- this.get_debug().log('[JSJaCJingle:single] _handle_session_terminate_error > Forced session termination locally.', 0);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_terminate_error > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session terminate request
- * @private
- * @event JSJaCJingleSingle#_handle_session_terminate_request
- * @fires JSJaCJingleSingle#_handle_session_terminate_success
- * @fires JSJaCJingleSingle#get_session_terminate_success
- * @param {JSJaCPacket} stanza
- */
- _handle_session_terminate_request: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_terminate_request', 4);
-
- try {
- // Slot unavailable?
- if(this.get_status() === JSJAC_JINGLE_STATUS_INACTIVE ||
- this.get_status() === JSJAC_JINGLE_STATUS_TERMINATED) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_terminate_request > Cannot handle, resource not active (status: ' + this.get_status() + ').', 0);
- this._send_error(stanza, JSJAC_JINGLE_ERROR_OUT_OF_ORDER);
- return;
- }
-
- // Change session status
- this._set_status(JSJAC_JINGLE_STATUS_TERMINATING);
-
- // Store termination reason
- this._set_reason(this.utils.stanza_terminate_reason(stanza));
-
- // Trigger terminate success callbacks
- /* @function */
- (this.get_session_terminate_success())(this, stanza);
- this._handle_session_terminate_success(stanza);
-
- // Process terminate actions
- this.send(JSJAC_JINGLE_IQ_TYPE_RESULT, { id: stanza.getID() });
-
- this.get_debug().log('[JSJaCJingle:single] _handle_session_terminate_request > (reason: ' + this.get_reason() + ').', 3);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_session_terminate_request > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle transport accept
- * @private
- * @event JSJaCJingleSingle#_handle_transport_accept
- * @param {JSJaCPacket} stanza
- */
- _handle_transport_accept: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_transport_accept', 4);
-
- try {
- // Not implemented for now
- this._send_error(stanza, XMPP_ERROR_FEATURE_NOT_IMPLEMENTED);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_content_accept > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle transport info
- * @private
- * @event JSJaCJingleSingle#_handle_transport_info
- * @param {JSJaCPacket} stanza
- */
- _handle_transport_info: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_transport_info', 4);
-
- try {
- // Slot unavailable?
- if(this.get_status() !== JSJAC_JINGLE_STATUS_INITIATED &&
- this.get_status() !== JSJAC_JINGLE_STATUS_ACCEPTING &&
- this.get_status() !== JSJAC_JINGLE_STATUS_ACCEPTED) {
- this.get_debug().log('[JSJaCJingle:single] _handle_transport_info > Cannot handle, resource not initiated, nor accepting, nor accepted (status: ' + this.get_status() + ').', 0);
- this._send_error(stanza, JSJAC_JINGLE_ERROR_OUT_OF_ORDER);
- return;
- }
-
- // Common vars
- var i, cur_candidate_obj;
-
- // Parse the incoming transport
- var rd_sid = this.utils.stanza_sid(stanza);
-
- // Request is valid?
- if(rd_sid && this.utils.stanza_parse_content(stanza)) {
- // Handle additional data (optional)
- // Still unsure if it is relevant to parse groups there... (are they allowed in such stanza?)
- //this.utils.stanza_parse_group(stanza);
-
- // Re-generate and store new content data
- this.utils.build_content_remote();
-
- var sdp_candidates_remote = this.sdp._generate_candidates(
- this.get_candidates_queue_remote()
- );
-
- // ICE candidates
- for(i in sdp_candidates_remote) {
- cur_candidate_obj = sdp_candidates_remote[i];
-
- this.get_peer_connection().addIceCandidate(
- new WEBRTC_ICE_CANDIDATE({
- sdpMLineIndex : cur_candidate_obj.id,
- candidate : cur_candidate_obj.candidate
- })
- );
- }
-
- // Empty the unapplied candidates queue
- this._set_candidates_queue_remote(null);
-
- // Success reply
- this.send(JSJAC_JINGLE_IQ_TYPE_RESULT, { id: stanza.getID() });
- } else {
- // Send error reply
- this._send_error(stanza, XMPP_ERROR_BAD_REQUEST);
-
- this.get_debug().log('[JSJaCJingle:single] _handle_transport_info > Error.', 1);
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_transport_info > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle transport info success
- * @private
- * @event JSJaCJingleSingle#_handle_transport_info_success
- * @param {JSJaCPacket} stanza
- */
- _handle_transport_info_success: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_transport_info_success', 4);
- },
-
- /**
- * Handles the Jingle transport info error
- * @private
- * @event JSJaCJingleSingle#_handle_transport_info_error
- * @param {JSJaCPacket} stanza
- */
- _handle_transport_info_error: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_transport_info_error', 4);
- },
-
- /**
- * Handles the Jingle transport reject
- * @private
- * @event JSJaCJingleSingle#_handle_transport_reject
- * @param {JSJaCPacket} stanza
- */
- _handle_transport_reject: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_transport_reject', 4);
-
- try {
- // Not implemented for now
- this._send_error(stanza, XMPP_ERROR_FEATURE_NOT_IMPLEMENTED);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_transport_reject > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle transport replace
- * @private
- * @event JSJaCJingleSingle#_handle_transport_replace
- * @param {JSJaCPacket} stanza
- */
- _handle_transport_replace: function(stanza) {
- this.get_debug().log('[JSJaCJingle:single] _handle_transport_replace', 4);
-
- try {
- // Not implemented for now
- this._send_error(stanza, XMPP_ERROR_FEATURE_NOT_IMPLEMENTED);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _handle_transport_replace > ' + e, 1);
- }
- },
-
-
-
- /**
- * JSJSAC JINGLE PEER TOOLS
- */
-
- /**
- * Creates peer connection instance
- * @private
- */
- _peer_connection_create_instance: function() {
- this.get_debug().log('[JSJaCJingle:single] _peer_connection_create_instance', 4);
-
- try {
- // Log STUN servers in use
- var i;
- var ice_config = this.utils.config_ice();
-
- if(typeof ice_config.iceServers == 'object') {
- for(i = 0; i < (ice_config.iceServers).length; i++)
- this.get_debug().log('[JSJaCJingle:single] _peer_connection_create_instance > Using ICE server at: ' + ice_config.iceServers[i].url + ' (' + (i + 1) + ').', 2);
- } else {
- this.get_debug().log('[JSJaCJingle:single] _peer_connection_create_instance > No ICE server configured. Network may not work properly.', 0);
- }
-
- // Create the RTCPeerConnection object
- this._set_peer_connection(
- new WEBRTC_PEER_CONNECTION(
- ice_config,
- WEBRTC_CONFIGURATION.peer_connection.constraints
- )
- );
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _peer_connection_create_instance > ' + e, 1);
- }
- },
-
- /**
- * Attaches peer connection callbacks
- * @private
- * @fires JSJaCJingleSingle#_peer_connection_callback_onicecandidate
- * @fires JSJaCJingleSingle#_peer_connection_callback_oniceconnectionstatechange
- * @fires JSJaCJingleSingle#_peer_connection_callback_onaddstream
- * @fires JSJaCJingleSingle#_peer_connection_callback_onremovestream
- * @param {Function} sdp_message_callback
- */
- _peer_connection_callbacks: function(sdp_message_callback) {
- this.get_debug().log('[JSJaCJingle:single] _peer_connection_callbacks', 4);
-
- try {
- var _this = this;
-
- /**
- * Listens for incoming ICE candidates
- * @event JSJaCJingleSingle#_peer_connection_callback_onicecandidate
- * @type {Function}
- */
- this.get_peer_connection().onicecandidate = function(data) {
- _this._peer_connection_callback_onicecandidate.bind(this)(_this, sdp_message_callback, data);
- };
-
- /**
- * Listens for ICE connection state change
- * @event JSJaCJingleSingle#_peer_connection_callback_oniceconnectionstatechange
- * @type {Function}
- */
- this.get_peer_connection().oniceconnectionstatechange = function(data) {
- switch(this.iceConnectionState) {
- case JSJAC_JINGLE_ICE_CONNECTION_STATE_CONNECTED:
- case JSJAC_JINGLE_ICE_CONNECTION_STATE_COMPLETED:
- if(_this.get_last_ice_state() !== JSJAC_JINGLE_ICE_CONNECTION_STATE_CONNECTED) {
- /* @function */
- (_this.get_stream_connected()).bind(this)(_this, data);
- _this._set_last_ice_state(JSJAC_JINGLE_ICE_CONNECTION_STATE_CONNECTED);
- } break;
-
- case JSJAC_JINGLE_ICE_CONNECTION_STATE_DISCONNECTED:
- case JSJAC_JINGLE_ICE_CONNECTION_STATE_CLOSED:
- if(_this.get_last_ice_state() !== JSJAC_JINGLE_ICE_CONNECTION_STATE_DISCONNECTED) {
- /* @function */
- (_this.get_stream_disconnected()).bind(this)(_this, data);
- _this._set_last_ice_state(JSJAC_JINGLE_ICE_CONNECTION_STATE_DISCONNECTED);
- } break;
- }
-
- _this._peer_connection_callback_oniceconnectionstatechange.bind(this)(_this, data);
- };
-
- /**
- * Listens for stream add
- * @event JSJaCJingleSingle#_peer_connection_callback_onaddstream
- * @type {Function}
- */
- this.get_peer_connection().onaddstream = function(data) {
- /* @function */
- (_this.get_stream_add()).bind(this)(_this, data);
- _this._peer_connection_callback_onaddstream.bind(this)(_this, data);
- };
-
- /**
- * Listens for stream remove
- * @event JSJaCJingleSingle#_peer_connection_callback_onremovestream
- * @type {Function}
- */
- this.get_peer_connection().onremovestream = function(data) {
- /* @function */
- (_this.get_stream_remove()).bind(this)(_this, data);
- _this._peer_connection_callback_onremovestream.bind(this)(_this, data);
- };
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _peer_connection_callbacks > ' + e, 1);
- }
- },
-
- /**
- * Generates peer connection callback for 'onicecandidate'
- * @private
- * @callback
- * @param {JSJaCJingleSingle} _this
- * @param {Function} sdp_message_callback
- * @param {Object} data
- */
- _peer_connection_callback_onicecandidate: function(_this, sdp_message_callback, data) {
- _this.get_debug().log('[JSJaCJingle:single] _peer_connection_callback_onicecandidate', 4);
-
- try {
- if(data.candidate) {
- _this.sdp._parse_candidate_store_store_data(data);
- } else {
- // Build or re-build content (local)
- _this.utils.build_content_local();
-
- // In which action stanza should candidates be sent?
- if((_this.is_initiator() && _this.get_status() === JSJAC_JINGLE_STATUS_INITIATING) ||
- (_this.is_responder() && _this.get_status() === JSJAC_JINGLE_STATUS_ACCEPTING)) {
- _this.get_debug().log('[JSJaCJingle:single] _peer_connection_callback_onicecandidate > Got initial candidates.', 2);
-
- // Execute what's next (initiate/accept session)
- sdp_message_callback();
- } else {
- _this.get_debug().log('[JSJaCJingle:single] _peer_connection_callback_onicecandidate > Got more candidates (on the go).', 2);
-
- // Send unsent candidates
- var candidates_queue_local = _this.get_candidates_queue_local();
-
- if(_this.utils.object_length(candidates_queue_local) > 0)
- _this.send(JSJAC_JINGLE_IQ_TYPE_SET, { action: JSJAC_JINGLE_ACTION_TRANSPORT_INFO, candidates: candidates_queue_local });
- }
-
- // Empty the unsent candidates queue
- _this._set_candidates_queue_local(null);
- }
- } catch(e) {
- _this.get_debug().log('[JSJaCJingle:single] _peer_connection_callback_onicecandidate > ' + e, 1);
- }
- },
-
- /**
- * Generates peer connection callback for 'oniceconnectionstatechange'
- * @private
- * @callback
- * @param {JSJaCJingleSingle} _this
- * @param {Object} data
- */
- _peer_connection_callback_oniceconnectionstatechange: function(_this, data) {
- _this.get_debug().log('[JSJaCJingle:single] _peer_connection_callback_oniceconnectionstatechange', 4);
-
- try {
- // Connection errors?
- switch(this.iceConnectionState) {
- case 'disconnected':
- _this._peer_timeout(this.iceConnectionState, {
- timer : JSJAC_JINGLE_PEER_TIMEOUT_DISCONNECT,
- reason : JSJAC_JINGLE_REASON_CONNECTIVITY_ERROR
- });
- break;
-
- case 'checking':
- _this._peer_timeout(this.iceConnectionState); break;
- }
-
- _this.get_debug().log('[JSJaCJingle:single] _peer_connection_callback_oniceconnectionstatechange > (state: ' + this.iceConnectionState + ').', 2);
- } catch(e) {
- _this.get_debug().log('[JSJaCJingle:single] _peer_connection_callback_oniceconnectionstatechange > ' + e, 1);
- }
- },
-
- /**
- * Generates peer connection callback for 'onaddstream'
- * @private
- * @callback
- * @param {JSJaCJingleSingle} _this
- * @param {Object} data
- */
- _peer_connection_callback_onaddstream: function(_this, data) {
- _this.get_debug().log('[JSJaCJingle:single] _peer_connection_callback_onaddstream', 4);
-
- try {
- if(!data) {
- _this.get_debug().log('[JSJaCJingle:single] _peer_connection_callback_onaddstream > No data passed, dropped.', 2); return;
- }
-
- // Attach remote stream to DOM view
- _this._set_remote_stream(data.stream);
- } catch(e) {
- _this.get_debug().log('[JSJaCJingle:single] _peer_connection_callback_onaddstream > ' + e, 1);
- }
- },
-
- /**
- * Generates peer connection callback for 'onremovestream'
- * @private
- * @callback
- * @param {JSJaCJingleSingle} _this
- * @param {Object} data
- */
- _peer_connection_callback_onremovestream: function(_this, data) {
- _this.get_debug().log('[JSJaCJingle:single] _peer_connection_callback_onremovestream', 4);
-
- try {
- // Detach remote stream from DOM view
- _this._set_remote_stream(null);
- } catch(e) {
- _this.get_debug().log('[JSJaCJingle:single] _peer_connection_callback_onremovestream > ' + e, 1);
- }
- },
-
- /**
- * Dispatches peer connection to correct creator (offer/answer)
- * @private
- * @param {Function} [sdp_message_callback] - Not used there
- */
- _peer_connection_create_dispatch: function(sdp_message_callback) {
- this.get_debug().log('[JSJaCJingle:single] _peer_connection_create_dispatch', 4);
-
- try {
- if(this.is_initiator())
- this._peer_connection_create_offer();
- else
- this._peer_connection_create_answer();
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _peer_connection_create_dispatch > ' + e, 1);
- }
- },
-
- /**
- * Creates peer connection offer
- * @private
- * @param {Function} [sdp_message_callback] - Not used there
- */
- _peer_connection_create_offer: function(sdp_message_callback) {
- this.get_debug().log('[JSJaCJingle:single] _peer_connection_create_offer', 4);
-
- try {
- // Create offer
- this.get_debug().log('[JSJaCJingle:single] _peer_connection_create_offer > Getting local description...', 2);
-
- // Local description
- var _this = this;
-
- this.get_peer_connection().createOffer(
- function(sdp_local) {
- _this._peer_got_description(sdp_local);
- }.bind(this),
-
- this._peer_fail_description.bind(this),
- WEBRTC_CONFIGURATION.create_offer
- );
-
- // Then, wait for responder to send back its remote description
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _peer_connection_create_offer > ' + e, 1);
- }
- },
-
- /**
- * Creates peer connection answer
- * @private
- */
- _peer_connection_create_answer: function() {
- this.get_debug().log('[JSJaCJingle:single] _peer_connection_create_answer', 4);
-
- try {
- // Create offer
- this.get_debug().log('[JSJaCJingle:single] _peer_connection_create_answer > Getting local description...', 2);
-
- // Apply SDP data
- sdp_remote = this.sdp._generate(
- WEBRTC_SDP_TYPE_OFFER,
- this.get_group_remote(),
- this.get_payloads_remote(),
- this.get_candidates_queue_remote()
- );
-
- if(this.get_sdp_trace()) this.get_debug().log('[JSJaCJingle:single] _peer_connection_create_answer > SDP (remote)' + '\n\n' + sdp_remote.description.sdp, 4);
-
- // Remote description
- var _this = this;
-
- this.get_peer_connection().setRemoteDescription(
- (new WEBRTC_SESSION_DESCRIPTION(sdp_remote.description)),
-
- function() {
- // Success (descriptions are compatible)
- },
-
- function(e) {
- if(_this.get_sdp_trace()) _this.get_debug().log('[JSJaCJingle:single] _peer_connection_create_answer > SDP (remote:error)' + '\n\n' + (e.message || e.name || 'Unknown error'), 4);
-
- // Error (descriptions are incompatible)
- _this.terminate(JSJAC_JINGLE_REASON_INCOMPATIBLE_PARAMETERS);
- }
- );
-
- // Local description
- this.get_peer_connection().createAnswer(
- function(sdp_local) {
- _this._peer_got_description(sdp_local);
- }.bind(this),
-
- this._peer_fail_description.bind(this),
- WEBRTC_CONFIGURATION.create_answer
- );
-
- // ICE candidates
- var c;
- var cur_candidate_obj;
-
- for(c in sdp_remote.candidates) {
- cur_candidate_obj = sdp_remote.candidates[c];
-
- this.get_peer_connection().addIceCandidate(
- new WEBRTC_ICE_CANDIDATE({
- sdpMLineIndex : cur_candidate_obj.id,
- candidate : cur_candidate_obj.candidate
- })
- );
- }
-
- // Empty the unapplied candidates queue
- this._set_candidates_queue_remote(null);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _peer_connection_create_answer > ' + e, 1);
- }
- },
-
- /**
- * Triggers the media not obtained error event
- * @private
- * @fires JSJaCJingleSingle#get_session_initiate_error
- * @param {Object} error
- */
- _peer_got_user_media_error: function(error) {
- this.get_debug().log('[JSJaCJingle:single] _peer_got_user_media_error', 4);
-
- try {
- /* @function */
- (this.get_session_initiate_error())(this);
-
- // Not needed in case we are the responder (breaks termination)
- if(this.is_initiator()) this._handle_session_initiate_error();
-
- // Not needed in case we are the initiator (no packet sent, ever)
- if(this.is_responder()) this.terminate(JSJAC_JINGLE_REASON_MEDIA_ERROR);
-
- this.get_debug().log('[JSJaCJingle:single] _peer_got_user_media_error > Failed (' + (error.PERMISSION_DENIED ? 'permission denied' : 'unknown' ) + ').', 1);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _peer_got_user_media_error > ' + e, 1);
- }
- },
-
- /**
- * Set a timeout limit to peer connection
- * @private
- * @param {String} state
- * @param {Object} [args]
- */
- _peer_timeout: function(state, args) {
- try {
- // Assert
- if(typeof args !== 'object') args = {};
-
- var t_sid = this.get_sid();
-
- var _this = this;
-
- setTimeout(function() {
- // State did not change?
- if(_this.get_sid() == t_sid && _this.get_peer_connection().iceConnectionState == state) {
- _this.get_debug().log('[JSJaCJingle:single] _peer_timeout > Peer timeout.', 2);
-
- // Error (transports are incompatible)
- _this.terminate(args.reason || JSJAC_JINGLE_REASON_FAILED_TRANSPORT);
- }
- }, ((args.timer || JSJAC_JINGLE_PEER_TIMEOUT_DEFAULT) * 1000));
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _peer_timeout > ' + e, 1);
- }
- },
-
- /**
- * Stops ongoing peer connections
- * @private
- */
- _peer_stop: function() {
- this.get_debug().log('[JSJaCJingle:single] _peer_stop', 4);
-
- // Detach media streams from DOM view
- this._set_local_stream(null);
- this._set_remote_stream(null);
-
- // Close the media stream
- if(this.get_peer_connection() &&
- (typeof this.get_peer_connection().close == 'function'))
- this.get_peer_connection().close();
-
- // Remove this session from router
- JSJaCJingle._remove(JSJAC_JINGLE_SESSION_SINGLE, this.get_sid());
- },
-
-
-
- /**
- * JSJSAC JINGLE SHORTCUTS
- */
-
- /**
- * Returns local user candidates
- * @private
- * @returns {Object} Candidates
- */
- _shortcut_local_user_candidates: function() {
- return this.get_candidates_local();
- },
-
-
-
- /**
- * JSJSAC JINGLE GETTERS
- */
-
- /**
- * Gets the session initiate pending callback function
- * @public
- * @event JSJaCJingleSingle#get_session_initiate_pending
- * @returns {Function} Callback function
- */
- get_session_initiate_pending: function() {
- return this._shortcut_get_handler(
- this._session_initiate_pending
- );
- },
-
- /**
- * Gets the session initiate success callback function
- * @public
- * @event JSJaCJingleSingle#get_session_initiate_success
- * @returns {Function} Callback function
- */
- get_session_initiate_success: function() {
- return this._shortcut_get_handler(
- this._session_initiate_success
- );
- },
-
- /**
- * Gets the session initiate error callback function
- * @public
- * @event JSJaCJingleSingle#get_session_initiate_error
- * @returns {Function} Callback function
- */
- get_session_initiate_error: function() {
- return this._shortcut_get_handler(
- this._session_initiate_error
- );
- },
-
- /**
- * Gets the session initiate request callback function
- * @public
- * @event JSJaCJingleSingle#get_session_initiate_request
- * @returns {Function} Callback function
- */
- get_session_initiate_request: function() {
- return this._shortcut_get_handler(
- this._session_initiate_request
- );
- },
-
- /**
- * Gets the session accept pending callback function
- * @public
- * @event JSJaCJingleSingle#get_session_accept_pending
- * @returns {Function} Callback function
- */
- get_session_accept_pending: function() {
- return this._shortcut_get_handler(
- this._session_accept_pending
- );
- },
-
- /**
- * Gets the session accept success callback function
- * @public
- * @event JSJaCJingleSingle#get_session_accept_success
- * @returns {Function} Callback function
- */
- get_session_accept_success: function() {
- return this._shortcut_get_handler(
- this._session_accept_success
- );
- },
-
- /**
- * Gets the session accept error callback function
- * @public
- * @event JSJaCJingleSingle#get_session_accept_error
- * @returns {Function} Callback function
- */
- get_session_accept_error: function() {
- return this._shortcut_get_handler(
- this._session_accept_error
- );
- },
-
- /**
- * Gets the session accept request callback function
- * @public
- * @event JSJaCJingleSingle#get_session_accept_request
- * @returns {Function} Callback function
- */
- get_session_accept_request: function() {
- return this._shortcut_get_handler(
- this._session_accept_request
- );
- },
-
- /**
- * Gets the session info pending callback function
- * @public
- * @event JSJaCJingleSingle#get_session_info_pending
- * @returns {Function} Callback function
- */
- get_session_info_pending: function() {
- return this._shortcut_get_handler(
- this._session_info_pending
- );
- },
-
- /**
- * Gets the session info success callback function
- * @public
- * @event JSJaCJingleSingle#get_session_info_success
- * @returns {Function} Callback function
- */
- get_session_info_success: function() {
- return this._shortcut_get_handler(
- this._session_info_success
- );
- },
-
- /**
- * Gets the session info error callback function
- * @public
- * @event JSJaCJingleSingle#get_session_info_error
- * @returns {Function} Callback function
- */
- get_session_info_error: function() {
- return this._shortcut_get_handler(
- this._session_info_error
- );
- },
-
- /**
- * Gets the session info request callback function
- * @public
- * @event JSJaCJingleSingle#get_session_info_request
- * @returns {Function} Callback function
- */
- get_session_info_request: function() {
- return this._shortcut_get_handler(
- this._session_info_request
- );
- },
-
- /**
- * Gets the session terminate pending callback function
- * @public
- * @event JSJaCJingleSingle#get_session_terminate_pending
- * @returns {Function} Callback function
- */
- get_session_terminate_pending: function() {
- return this._shortcut_get_handler(
- this._session_terminate_pending
- );
- },
-
- /**
- * Gets the session terminate success callback function
- * @public
- * @event JSJaCJingleSingle#get_session_terminate_success
- * @returns {Function} Callback function
- */
- get_session_terminate_success: function() {
- return this._shortcut_get_handler(
- this._session_terminate_success
- );
- },
-
- /**
- * Gets the session terminate error callback function
- * @public
- * @event JSJaCJingleSingle#get_session_terminate_error
- * @returns {Function} Callback function
- */
- get_session_terminate_error: function() {
- return this._shortcut_get_handler(
- this._session_terminate_error
- );
- },
-
- /**
- * Gets the session terminate request callback function
- * @public
- * @event JSJaCJingleSingle#get_session_terminate_request
- * @returns {Function} Callback function
- */
- get_session_terminate_request: function() {
- return this._shortcut_get_handler(
- this._session_terminate_request
- );
- },
-
- /**
- * Gets the stream add event callback function
- * @public
- * @event JSJaCJingleSingle#stream_add
- * @returns {Function} Callback function
- */
- get_stream_add: function() {
- return this._shortcut_get_handler(
- this._stream_add
- );
- },
-
- /**
- * Gets the stream remove event callback function
- * @public
- * @event JSJaCJingleSingle#stream_remove
- * @returns {Function} Callback function
- */
- get_stream_remove: function() {
- return this._shortcut_get_handler(
- this._stream_remove
- );
- },
-
- /**
- * Gets the stream connected event callback function
- * @public
- * @event JSJaCJingleSingle#stream_connected
- * @returns {Function} Callback function
- */
- get_stream_connected: function() {
- return this._shortcut_get_handler(
- this._stream_connected
- );
- },
-
- /**
- * Gets the stream disconnected event callback function
- * @public
- * @event JSJaCJingleSingle#stream_disconnected
- * @returns {Function} Callback function
- */
- get_stream_disconnected: function() {
- return this._shortcut_get_handler(
- this._stream_disconnected
- );
- },
-
- /**
- * Gets the prepended ID
- * @public
- * @returns {String} Prepended ID value
- */
- get_id_pre: function() {
- return JSJAC_JINGLE_STANZA_ID_PRE + '_' + (this.get_sid() || '0') + '_';
- },
-
- /**
- * Gets the reason value
- * @public
- * @returns {String} Reason value
- */
- get_reason: function() {
- return this._reason;
- },
-
- /**
- * Gets the remote_view value
- * @public
- * @returns {DOM} Remote view
- */
- get_remote_view: function() {
- return this._remote_view;
- },
-
- /**
- * Gets the remote stream
- * @public
- * @returns {Object} Remote stream instance
- */
- get_remote_stream: function() {
- return this._remote_stream;
- },
-
- /**
- * Gets the remote content
- * @public
- * @param {String} [name]
- * @returns {Object} Remote content object
- */
- get_content_remote: function(name) {
- if(name)
- return (name in this._content_remote) ? this._content_remote[name] : {};
-
- return this._content_remote;
- },
-
- /**
- * Gets the remote payloads
- * @public
- * @param {String} [name]
- * @returns {Object} Remote payloads object
- */
- get_payloads_remote: function(name) {
- if(name)
- return (name in this._payloads_remote) ? this._payloads_remote[name] : {};
-
- return this._payloads_remote;
- },
-
- /**
- * Gets the remote group
- * @public
- * @param {String} [semantics]
- * @returns {Object} Remote group object
- */
- get_group_remote: function(semantics) {
- if(semantics)
- return (semantics in this._group_remote) ? this._group_remote[semantics] : {};
-
- return this._group_remote;
- },
-
- /**
- * Gets the remote candidates
- * @public
- * @param {String} [name]
- * @returns {Object} Remote candidates object
- */
- get_candidates_remote: function(name) {
- if(name)
- return (name in this._candidates_remote) ? this._candidates_remote[name] : [];
-
- return this._candidates_remote;
- },
-
- /**
- * Gets the remote candidates queue
- * @public
- * @param {String} [name]
- * @returns {Object} Remote candidates queue object
- */
- get_candidates_queue_remote: function(name) {
- if(name)
- return (name in this._candidates_queue_remote) ? this._candidates_queue_remote[name] : {};
-
- return this._candidates_queue_remote;
- },
-
- /**
- * Gets the last ICE state value
- * @public
- * @returns {String|Object} Last ICE state value
- */
- get_last_ice_state: function() {
- return this._last_ice_state;
- },
-
-
-
- /**
- * JSJSAC JINGLE SETTERS
- */
-
- /**
- * Sets the session initiate pending callback function
- * @private
- * @param {Function} session_initiate_pending
- */
- _set_session_initiate_pending: function(session_initiate_pending) {
- this._session_initiate_pending = session_initiate_pending;
- },
-
- /**
- * Sets the session initiate success callback function
- * @private
- * @param {Function} initiate_success
- */
- _set_session_initiate_success: function(initiate_success) {
- this._session_initiate_success = initiate_success;
- },
-
- /**
- * Sets the session initiate error callback function
- * @private
- * @param {Function} initiate_error
- */
- _set_session_initiate_error: function(initiate_error) {
- this._session_initiate_error = initiate_error;
- },
-
- /**
- * Sets the session initiate request callback function
- * @private
- * @param {Function} initiate_request
- */
- _set_session_initiate_request: function(initiate_request) {
- this._session_initiate_request = initiate_request;
- },
-
- /**
- * Sets the session accept pending callback function
- * @private
- * @param {Function} accept_pending
- */
- _set_session_accept_pending: function(accept_pending) {
- this._session_accept_pending = accept_pending;
- },
-
- /**
- * Sets the session accept success callback function
- * @private
- * @param {Function} accept_success
- */
- _set_session_accept_success: function(accept_success) {
- this._session_accept_success = accept_success;
- },
-
- /**
- * Sets the session accept error callback function
- * @private
- * @param {Function} accept_error
- */
- _set_session_accept_error: function(accept_error) {
- this._session_accept_error = accept_error;
- },
-
- /**
- * Sets the session accept request callback function
- * @private
- * @param {Function} accept_request
- */
- _set_session_accept_request: function(accept_request) {
- this._session_accept_request = accept_request;
- },
-
- /**
- * Sets the session info pending callback function
- * @private
- * @param {Function} info_pending
- */
- _set_session_info_pending: function(info_pending) {
- this._session_info_pending = info_pending;
- },
-
- /**
- * Sets the session info success callback function
- * @private
- * @param {Function} info_success
- */
- _set_session_info_success: function(info_success) {
- this._session_info_success = info_success;
- },
-
- /**
- * Sets the session info error callback function
- * @private
- * @param {Function} info_error
- */
- _set_session_info_error: function(info_error) {
- this._session_info_error = info_error;
- },
-
- /**
- * Sets the session info request callback function
- * @private
- * @param {Function} info_request
- */
- _set_session_info_request: function(info_request) {
- this._session_info_request = info_request;
- },
-
- /**
- * Sets the session terminate pending callback function
- * @private
- * @param {Function} terminate_pending
- */
- _set_session_terminate_pending: function(terminate_pending) {
- this._session_terminate_pending = terminate_pending;
- },
-
- /**
- * Sets the session terminate success callback function
- * @private
- * @param {Function} terminate_success
- */
- _set_session_terminate_success: function(terminate_success) {
- this._session_terminate_success = terminate_success;
- },
-
- /**
- * Sets the session terminate error callback function
- * @private
- * @param {Function} terminate_error
- */
- _set_session_terminate_error: function(terminate_error) {
- this._session_terminate_error = terminate_error;
- },
-
- /**
- * Sets the session terminate request callback function
- * @private
- * @param {Function} terminate_request
- */
- _set_session_terminate_request: function(terminate_request) {
- this._session_terminate_request = terminate_request;
- },
-
- /**
- * Sets the stream add event callback function
- * @private
- * @param {Function} stream_add
- */
- _set_stream_add: function(stream_add) {
- this._stream_add = stream_add;
- },
-
- /**
- * Sets the stream remove event callback function
- * @private
- * @param {Function} stream_remove
- */
- _set_stream_remove: function(stream_remove) {
- this._stream_remove = stream_remove;
- },
-
- /**
- * Sets the stream connected event callback function
- * @private
- * @param {Function} stream_connected
- */
- _set_stream_connected: function(stream_connected) {
- this._stream_connected = stream_connected;
- },
-
- /**
- * Sets the stream disconnected event callback function
- * @private
- * @param {Function} stream_disconnected
- */
- _set_stream_disconnected: function(stream_disconnected) {
- this._stream_disconnected = stream_disconnected;
- },
-
- /**
- * Sets the termination reason
- * @private
- * @param {String} reason
- */
- _set_reason: function(reason) {
- this._reason = reason || JSJAC_JINGLE_REASON_CANCEL;
- },
-
- /**
- * Sets the remote stream
- * @private
- * @param {DOM} [remote_stream]
- */
- _set_remote_stream: function(remote_stream) {
- try {
- if(!remote_stream && this._remote_stream !== null) {
- this._peer_stream_detach(
- this.get_remote_view()
- );
- }
-
- if(remote_stream) {
- this._remote_stream = remote_stream;
-
- this._peer_stream_attach(
- this.get_remote_view(),
- this.get_remote_stream(),
- false
- );
- } else {
- this._remote_stream = null;
-
- this._peer_stream_detach(
- this.get_remote_view()
- );
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _set_remote_stream > ' + e, 1);
- }
- },
-
- /**
- * Sets the remote view
- * @private
- * @param {DOM} [remote_view]
- */
- _set_remote_view: function(remote_view) {
- if(typeof this._remote_view !== 'object')
- this._remote_view = [];
-
- this._remote_view.push(remote_view);
- },
-
- /**
- * Sets the remote content
- * @private
- * @param {String} name
- * @param {Object} content_remote
- */
- _set_content_remote: function(name, content_remote) {
- this._content_remote[name] = content_remote;
- },
-
- /**
- * Sets the remote payloads
- * @private
- * @param {String} name
- * @param {Object} payload_data
- */
- _set_payloads_remote: function(name, payload_data) {
- this._payloads_remote[name] = payload_data;
- },
-
- /**
- * Adds a remote payload
- * @private
- * @param {String} name
- * @param {Object} payload_data
- */
- _set_payloads_remote_add: function(name, payload_data) {
- try {
- if(!(name in this._payloads_remote)) {
- this._set_payloads_remote(name, payload_data);
- } else {
- var key;
- var payloads_store = this._payloads_remote[name].descriptions.payload;
- var payloads_add = payload_data.descriptions.payload;
-
- for(key in payloads_add) {
- if(!(key in payloads_store))
- payloads_store[key] = payloads_add[key];
- }
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _set_payloads_remote_add > ' + e, 1);
- }
- },
-
- /**
- * Sets the remote group
- * @private
- * @param {String} semantics
- * @param {Object} group_data
- */
- _set_group_remote: function(semantics, group_data) {
- this._group_remote[semantics] = group_data;
- },
-
- /**
- * Sets the remote candidates
- * @private
- * @param {String} name
- * @param {Object} candidate_data
- */
- _set_candidates_remote: function(name, candidate_data) {
- this._candidates_remote[name] = candidate_data;
- },
-
- /**
- * Sets the session initiate pending callback function
- * @private
- * @param {String} name
- * @param {Object} candidate_data
- */
- _set_candidates_queue_remote: function(name, candidate_data) {
- if(name === null)
- this._candidates_queue_remote = {};
- else
- this._candidates_queue_remote[name] = (candidate_data);
- },
-
- /**
- * Adds a remote candidate
- * @private
- * @param {String} name
- * @param {Object} candidate_data
- */
- _set_candidates_remote_add: function(name, candidate_data) {
- try {
- if(!name) return;
-
- if(!(name in this._candidates_remote))
- this._set_candidates_remote(name, []);
-
- var c, i;
- var candidate_ids = [];
-
- for(c in this.get_candidates_remote(name))
- candidate_ids.push(this.get_candidates_remote(name)[c].id);
-
- for(i in candidate_data) {
- if((candidate_data[i].id).indexOf(candidate_ids) !== -1)
- this.get_candidates_remote(name).push(candidate_data[i]);
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:single] _set_candidates_remote_add > ' + e, 1);
- }
- },
-
- /**
- * Sets the last ICE state value
- * @private
- * @param {String|Object} last_ice_state
- */
- _set_last_ice_state: function(last_ice_state) {
- this._last_ice_state = last_ice_state;
- },
- }
-);
-
-/**
- * @fileoverview JSJaC Jingle library - Multi-user call lib
- *
- * @url https://github.com/valeriansaliou/jsjac-jingle
- * @depends https://github.com/sstrigler/JSJaC
- * @author Valérian Saliou https://valeriansaliou.name/
- * @license Mozilla Public License v2.0 (MPL v2.0)
- */
-
-
-/** @module jsjac-jingle/muji */
-/** @exports JSJaCJingleMuji */
-
-
-/**
- * Creates a new XMPP Jingle Muji session.
- * @class
- * @classdesc Creates a new XMPP Jingle Muji session.
- * @augments __JSJaCJingleBase
- * @requires nicolas-van/ring.js
- * @requires sstrigler/JSJaC
- * @requires jsjac-jingle/main
- * @requires jsjac-jingle/base
- * @see {@link http://xmpp.org/extensions/xep-0272.html|XEP-0272: Multiparty Jingle (Muji)}
- * @see {@link http://ringjs.neoname.eu/|Ring.js}
- * @see {@link http://stefan-strigler.de/jsjac-1.3.4/doc/|JSJaC Documentation}
- * @param {Object} [args] - Muji session arguments.
- * @property {*} [args.*] - Herits of JSJaCJingle() baseclass prototype.
- * @property {String} [args.username] - The username when joining room.
- * @property {String} [args.password] - The room password.
- * @property {Boolean} [args.password_protect] - Automatically password-protect the MUC if first joiner.
- * @property {Function} [args.room_message_in] - The incoming message custom handler.
- * @property {Function} [args.room_message_out] - The outgoing message custom handler.
- * @property {Function} [args.room_presence_in] - The incoming presence custom handler.
- * @property {Function} [args.room_presence_out] - The outgoing presence custom handler.
- * @property {Function} [args.session_prepare_pending] - The session prepare pending custom handler.
- * @property {Function} [args.session_prepare_success] - The session prepare success custom handler.
- * @property {Function} [args.session_prepare_error] - The session prepare error custom handler.
- * @property {Function} [args.session_initiate_pending] - The session initiate pending custom handler.
- * @property {Function} [args.session_initiate_success] - The session initiate success custom handler.
- * @property {Function} [args.session_initiate_error] - The session initiate error custom handler.
- * @property {Function} [args.session_leave_pending] - The session leave pending custom handler.
- * @property {Function} [args.session_leave_success] - The session leave success custom handler.
- * @property {Function} [args.session_leave_error] - The session leave error custom handler.
- * @property {Function} [args.participant_prepare] - The participant prepare custom handler.
- * @property {Function} [args.participant_initiate] - The participant initiate custom handler.
- * @property {Function} [args.participant_leave] - The participant session leave custom handler.
- * @property {Function} [args.participant_session_initiate_pending] - The participant session initiate pending custom handler.
- * @property {Function} [args.participant_session_initiate_success] - The participant session initiate success custom handler.
- * @property {Function} [args.participant_session_initiate_error] - The participant session initiate error custom handler.
- * @property {Function} [args.participant_session_initiate_request] - The participant session initiate request custom handler.
- * @property {Function} [args.participant_session_accept_pending] - The participant session accept pending custom handler.
- * @property {Function} [args.participant_session_accept_success] - The participant session accept success custom handler.
- * @property {Function} [args.participant_session_accept_error] - The participant session accept error custom handler.
- * @property {Function} [args.participant_session_accept_request] - The participant session accept request custom handler.
- * @property {Function} [args.participant_session_info_pending] - The participant session info request custom handler.
- * @property {Function} [args.participant_session_info_success] - The participant session info success custom handler.
- * @property {Function} [args.participant_session_info_error] - The participant session info error custom handler.
- * @property {Function} [args.participant_session_info_request] - The participant session info request custom handler.
- * @property {Function} [args.participant_session_terminate_pending] - The participant session terminate pending custom handler.
- * @property {Function} [args.participant_session_terminate_success] - The participant session terminate success custom handler.
- * @property {Function} [args.participant_session_terminate_error] - The participant session terminate error custom handler.
- * @property {Function} [args.participant_session_terminate_request] - The participant session terminate request custom handler.
- * @property {Function} [args.participant_stream_add] - The participant stream add custom handler.
- * @property {Function} [args.participant_stream_remove] - The participant stream remove custom handler.
- * @property {Function} [args.participant_stream_connected] - The participant stream connected custom handler.
- * @property {Function} [args.participant_stream_disconnected] - The participant stream disconnected custom handler.
- * @property {Function} [args.add_remote_view] - The remote view media add (audio/video) custom handler.
- * @property {Function} [args.remove_remote_view] - The remote view media removal (audio/video) custom handler.
- */
-var JSJaCJingleMuji = ring.create([__JSJaCJingleBase],
- /** @lends JSJaCJingleMuji.prototype */
- {
- /**
- * Constructor
- */
- constructor: function(args) {
- this.$super(args);
-
- if(args && args.room_message_in)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._room_message_in = args.room_message_in;
-
- if(args && args.room_message_out)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._room_message_out = args.room_message_out;
-
- if(args && args.room_presence_in)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._room_presence_in = args.room_presence_in;
-
- if(args && args.room_presence_out)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._room_presence_out = args.room_presence_out;
-
- if(args && args.session_prepare_pending)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_prepare_pending = args.session_prepare_pending;
-
- if(args && args.session_prepare_success)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_prepare_success = args.session_prepare_success;
-
- if(args && args.session_prepare_error)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_prepare_error = args.session_prepare_error;
-
- if(args && args.session_initiate_pending)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_initiate_pending = args.session_initiate_pending;
-
- if(args && args.session_initiate_success)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_initiate_success = args.session_initiate_success;
-
- if(args && args.session_initiate_error)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_initiate_error = args.session_initiate_error;
-
- if(args && args.session_leave_pending)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_leave_pending = args.session_leave_pending;
-
- if(args && args.session_leave_success)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_leave_success = args.session_leave_success;
-
- if(args && args.session_leave_error)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._session_leave_error = args.session_leave_error;
-
- if(args && args.participant_prepare)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_prepare = args.participant_prepare;
-
- if(args && args.participant_initiate)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_initiate = args.participant_initiate;
-
- if(args && args.participant_leave)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_leave = args.participant_leave;
-
- if(args && args.participant_session_initiate_pending)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_session_initiate_pending = args.participant_session_initiate_pending;
-
- if(args && args.participant_session_initiate_success)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_session_initiate_success = args.participant_session_initiate_success;
-
- if(args && args.participant_session_initiate_error)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_session_initiate_error = args.participant_session_initiate_error;
-
- if(args && args.participant_session_initiate_request)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_session_initiate_request = args.participant_session_initiate_request;
-
- if(args && args.participant_session_accept_pending)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_session_accept_pending = args.participant_session_accept_pending;
-
- if(args && args.participant_session_accept_success)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_session_accept_success = args.participant_session_accept_success;
-
- if(args && args.participant_session_accept_error)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_session_accept_error = args.participant_session_accept_error;
-
- if(args && args.participant_session_accept_request)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_session_accept_request = args.participant_session_accept_request;
-
- if(args && args.participant_session_info_pending)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_session_info_pending = args.participant_session_info_pending;
-
- if(args && args.participant_session_info_success)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_session_info_success = args.participant_session_info_success;
-
- if(args && args.participant_session_info_error)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_session_info_error = args.participant_session_info_error;
-
- if(args && args.participant_session_info_request)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_session_info_request = args.participant_session_info_request;
-
- if(args && args.participant_session_terminate_pending)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_session_terminate_pending = args.participant_session_terminate_pending;
-
- if(args && args.participant_session_terminate_success)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_session_terminate_success = args.participant_session_terminate_success;
-
- if(args && args.participant_session_terminate_error)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_session_terminate_error = args.participant_session_terminate_error;
-
- if(args && args.participant_session_terminate_request)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_session_terminate_request = args.participant_session_terminate_request;
-
- if(args && args.participant_stream_add)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_stream_add = args.participant_stream_add;
-
- if(args && args.participant_stream_remove)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_stream_remove = args.participant_stream_remove;
-
- if(args && args.participant_stream_connected)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_stream_connected = args.participant_stream_connected;
-
- if(args && args.participant_stream_disconnected)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._participant_stream_disconnected = args.participant_stream_disconnected;
-
- if(args && args.add_remote_view)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._add_remote_view = args.add_remote_view;
-
- if(args && args.remove_remote_view)
- /**
- * @member {Function}
- * @default
- * @private
- */
- this._remove_remote_view = args.remove_remote_view;
-
- if(args && args.username) {
- /**
- * @member {String}
- * @default
- * @private
- */
- this._username = args.username;
- } else {
- /**
- * @member {String}
- * @default
- * @private
- */
- this._username = this.utils.connection_username();
- }
-
- if(args && args.password)
- /**
- * @member {String}
- * @default
- * @private
- */
- this._password = args.password;
-
- if(args && args.password_protect)
- /**
- * @member {Boolean}
- * @default
- * @private
- */
- this._password_protect = args.password_protect;
-
- /**
- * @member {Object}
- * @default
- * @private
- */
- this._participants = {};
-
- /**
- * @member {String}
- * @default
- * @private
- */
- this._iid = '';
-
- /**
- * @member {Boolean}
- * @default
- * @private
- */
- this._is_room_owner = false;
-
- /**
- * @constant
- * @member {String}
- * @default
- * @private
- */
- this._status = JSJAC_JINGLE_MUJI_STATUS_INACTIVE;
-
- /**
- * @constant
- * @member {String}
- * @default
- * @private
- */
- this._namespace = NS_MUJI;
- },
-
-
- /**
- * Initiates a new Muji session.
- * @public
- * @fires JSJaCJingleMuji#get_session_initiate_pending
- */
- join: function() {
- this.get_debug().log('[JSJaCJingle:muji] join', 4);
-
- try {
- // Locked?
- if(this.get_lock()) {
- this.get_debug().log('[JSJaCJingle:muji] join > Cannot join, resource locked. Please open another session or check WebRTC support.', 0);
- return;
- }
-
- // Defer?
- var _this = this;
-
- if(JSJaCJingle._defer(function() { _this.join(); })) {
- this.get_debug().log('[JSJaCJingle:muji] join > Deferred (waiting for the library components to be initiated).', 0);
- return;
- }
-
- // Slot unavailable?
- if(this.get_status() !== JSJAC_JINGLE_STATUS_INACTIVE) {
- this.get_debug().log('[JSJaCJingle:muji] join > Cannot join, resource not inactive (status: ' + this.get_status() + ').', 0);
- return;
- }
-
- this.get_debug().log('[JSJaCJingle:muji] join > New Jingle Muji session with media: ' + this.get_media(), 2);
-
- // Common vars
- var i, cur_name;
-
- // Trigger session prepare pending custom callback
- /* @function */
- (this.get_session_prepare_pending())(this);
-
- // Change session status
- this._set_status(JSJAC_JINGLE_MUJI_STATUS_PREPARING);
-
- // Set session values
- this._set_iid(this.utils.generate_iid());
- this._set_sid(
- this.utils.generate_hash_md5(this.get_to())
- );
-
- this._set_initiator(this.get_to());
- this._set_responder(this.utils.connection_jid());
-
- for(i in this.get_media_all()) {
- cur_name = this.utils.name_generate(
- this.get_media_all()[i]
- );
-
- this._set_name(cur_name);
-
- this._set_senders(
- cur_name,
- JSJAC_JINGLE_SENDERS_BOTH.jingle
- );
-
- this._set_creator(
- cur_name,
- JSJAC_JINGLE_CREATOR_INITIATOR
- );
- }
-
- // Register session to common router
- JSJaCJingle._add(JSJAC_JINGLE_SESSION_MUJI, this.get_to(), this);
-
- // Send initial join presence
- this.send_presence({ action: JSJAC_JINGLE_MUJI_ACTION_PREPARE });
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] join > ' + e, 1);
- }
- },
-
-
- /**
- * Leaves current Muji session.
- * @public
- * @fires JSJaCJingleMuji#get_session_leave_pending
- */
- leave: function() {
- this.get_debug().log('[JSJaCJingle:muji] leave', 4);
-
- try {
- // Locked?
- if(this.get_lock()) {
- this.get_debug().log('[JSJaCJingle:muji] leave > Cannot leave, resource locked. Please open another session or check WebRTC support.', 0);
- return;
- }
-
- // Defer?
- var _this = this;
-
- if(JSJaCJingle._defer(function() { _this.leave(); })) {
- this.get_debug().log('[JSJaCJingle:muji] leave > Deferred (waiting for the library components to be initiated).', 0);
- return;
- }
-
- // Slot unavailable?
- if(this.get_status() === JSJAC_JINGLE_MUJI_STATUS_LEFT) {
- this.get_debug().log('[JSJaCJingle:muji] leave > Cannot terminate, resource already terminated (status: ' + this.get_status() + ').', 0);
- return;
- }
-
- // Change session status
- this._set_status(JSJAC_JINGLE_MUJI_STATUS_LEAVING);
-
- // Trigger session leave pending custom callback
- /* @function */
- (this.get_session_leave_pending())(this);
-
- // Leave the room (after properly terminating participant sessions)
- this._terminate_participant_sessions(true, function() {
- _this.send_presence({ action: JSJAC_JINGLE_MUJI_ACTION_LEAVE });
- });
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] leave > ' + e, 1);
- }
- },
-
- /**
- * Aborts current Muji session.
- * @public
- * @param {Boolean} [set_lock]
- */
- abort: function(set_lock) {
- this.get_debug().log('[JSJaCJingle:muji] abort', 4);
-
- try {
- // Change session status
- this._set_status(JSJAC_JINGLE_MUJI_STATUS_LEFT);
-
- // Stop WebRTC
- this._peer_stop();
-
- // Flush all participant content
- this._set_participants(null);
-
- // Lock session? (cannot be used later)
- if(set_lock === true) this._set_lock(true);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] abort > ' + e, 1);
- }
- },
-
- /**
- * Invites people to current Muji session
- * @public
- * @param {String|Array} jid
- * @param {String} [reason]
- */
- invite: function(jid, reason) {
- this.get_debug().log('[JSJaCJingle:muji] invite', 4);
-
- try {
- // Locked?
- if(this.get_lock()) {
- this.get_debug().log('[JSJaCJingle:muji] invite > Cannot invite, resource locked. Please open another session or check WebRTC support.', 0);
- return;
- }
-
- // Defer?
- var _this = this;
-
- if(JSJaCJingle._defer(function() { _this.invite(jid); })) {
- this.get_debug().log('[JSJaCJingle:muji] invite > Deferred (waiting for the library components to be initiated).', 0);
- return;
- }
-
- if(!jid) {
- this.get_debug().log('[JSJaCJingle:muji] invite > JID parameter not provided or blank.', 0);
- return;
- }
-
- var i;
- jid_arr = (jid instanceof Array) ? jid : [jid];
-
- for(i = 0; i < jid_arr.length; i++) this._send_invite(jid_arr[i], reason);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] invite > ' + e, 1);
- }
- },
-
- /**
- * Mutes a Muji session (local)
- * @public
- * @param {String} name
- */
- mute: function(name) {
- this.get_debug().log('[JSJaCJingle:muji] mute', 4);
-
- try {
- // Locked?
- if(this.get_lock()) {
- this.get_debug().log('[JSJaCJingle:muji] mute > Cannot mute, resource locked. Please open another session or check WebRTC support.', 0);
- return;
- }
-
- // Defer?
- var _this = this;
-
- if(JSJaCJingle._defer(function() { _this.mute(name); })) {
- this.get_debug().log('[JSJaCJingle:muji] mute > Deferred (waiting for the library components to be initiated).', 0);
- return;
- }
-
- // Already muted?
- if(this.get_mute(name) === true) {
- this.get_debug().log('[JSJaCJingle:muji] mute > Resource already muted.', 0);
- return;
- }
-
- this._peer_sound(false);
- this._set_mute(name, true);
-
- // Mute all participants
- this._toggle_participants_mute(name, JSJAC_JINGLE_SESSION_INFO_MUTE);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] mute > ' + e, 1);
- }
- },
-
- /**
- * Unmutes a Muji session (local)
- * @public
- * @param {String} name
- */
- unmute: function(name) {
- this.get_debug().log('[JSJaCJingle:muji] unmute', 4);
-
- try {
- // Locked?
- if(this.get_lock()) {
- this.get_debug().log('[JSJaCJingle:muji] unmute > Cannot unmute, resource locked. Please open another session or check WebRTC support.', 0);
- return;
- }
-
- // Defer?
- var _this = this;
-
- if(JSJaCJingle._defer(function() { _this.unmute(name); })) {
- this.get_debug().log('[JSJaCJingle:muji] unmute > Deferred (waiting for the library components to be initiated).', 0);
- return;
- }
-
- // Already unmute?
- if(this.get_mute(name) === false) {
- this.get_debug().log('[JSJaCJingle:muji] unmute > Resource already unmuted.', 0);
- return;
- }
-
- this._peer_sound(true);
- this._set_mute(name, false);
-
- // Unmute all participants
- this._toggle_participants_mute(name, JSJAC_JINGLE_SESSION_INFO_UNMUTE);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] unmute > ' + e, 1);
- }
- },
-
- /**
- * Toggles media type in a Muji session (local)
- * @todo Code media() (Muji version)
- * @public
- * @param {String} [media]
- */
- media: function(media) {
- /* DEV: don't expect this to work as of now! */
- /* MEDIA() - MUJI VERSION */
-
- this.get_debug().log('[JSJaCJingle:muji] media', 4);
-
- try {
- // Locked?
- if(this.get_lock()) {
- this.get_debug().log('[JSJaCJingle:muji] media > Cannot change media, resource locked. Please open another session or check WebRTC support.', 0);
- return;
- }
-
- // Defer?
- var _this = this;
-
- if(JSJaCJingle._defer(function() { _this.media(media); })) {
- this.get_debug().log('[JSJaCJingle:muji] media > Deferred (waiting for the library components to be initiated).', 0);
- return;
- }
-
- // Toggle media?
- if(!media)
- media = (this.get_media() == JSJAC_JINGLE_MEDIA_VIDEO) ? JSJAC_JINGLE_MEDIA_AUDIO : JSJAC_JINGLE_MEDIA_VIDEO;
-
- // Media unknown?
- if(!(media in JSJAC_JINGLE_MEDIAS)) {
- this.get_debug().log('[JSJaCJingle:muji] media > No media provided or media unsupported (media: ' + media + ').', 0);
- return;
- }
-
- // Already using provided media?
- if(this.get_media() == media) {
- this.get_debug().log('[JSJaCJingle:muji] media > Resource already using this media (media: ' + media + ').', 0);
- return;
- }
-
- // Switch locked for now? (another one is being processed)
- if(this.get_media_busy()) {
- this.get_debug().log('[JSJaCJingle:muji] media > Resource already busy switching media (busy: ' + this.get_media() + ', media: ' + media + ').', 0);
- return;
- }
-
- this.get_debug().log('[JSJaCJingle:muji] media > Changing media to: ' + media + '...', 2);
-
- // Store new media
- this._set_media(media);
- this._set_media_busy(true);
-
- // Toggle video mode (add/remove)
- if(media == JSJAC_JINGLE_MEDIA_VIDEO) {
- /* @todo the flow is something like that... */
- /*this._peer_get_user_media(function() {
- this._peer_connection_create(
- function() {
- this.get_debug().log('[JSJaCJingle:muji] media > Ready to change media (to: ' + media + ').', 2);
-
- // 'content-add' >> video
- // @todo restart video stream configuration
-
- // WARNING: only change get user media, DO NOT TOUCH THE STREAM THING (don't stop active stream as it's flowing!!)
-
- this.send(JSJAC_JINGLE_IQ_TYPE_SET, { action: JSJAC_JINGLE_ACTION_CONTENT_ADD, name: JSJAC_JINGLE_MEDIA_VIDEO });
- }
- )
- });*/
- } else {
- /* @todo the flow is something like that... */
- /*this._peer_get_user_media(function() {
- this._peer_connection_create(
- function() {
- this.get_debug().log('[JSJaCJingle:muji] media > Ready to change media (to: ' + media + ').', 2);
-
- // 'content-remove' >> video
- // @todo remove video stream configuration
-
- // WARNING: only change get user media, DO NOT TOUCH THE STREAM THING (don't stop active stream as it's flowing!!)
- // here, only stop the video stream, do not touch the audio stream
-
- this.send(JSJAC_JINGLE_IQ_TYPE_SET, { action: JSJAC_JINGLE_ACTION_CONTENT_REMOVE, name: JSJAC_JINGLE_MEDIA_VIDEO });
- }
- )
- });*/
- }
-
- /* @todo loop on participant sessions and toggle medias individually */
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] media > ' + e, 1);
- }
- },
-
- /**
- * Sends a given Muji presence stanza
- * @public
- * @fires JSJaCJingleMuji#get_room_presence_out
- * @param {Object} [args]
- * @returns {Boolean} Success
- */
- send_presence: function(args) {
- this.get_debug().log('[JSJaCJingle:muji] send_presence', 4);
-
- try {
- // Locked?
- if(this.get_lock()) {
- this.get_debug().log('[JSJaCJingle:muji] send_presence > Cannot send, resource locked. Please open another session or check WebRTC support.', 0);
- return false;
- }
-
- // Defer?
- var _this = this;
-
- if(JSJaCJingle._defer(function() { _this.send_presence(args); })) {
- this.get_debug().log('[JSJaCJingle:muji] send_presence > Deferred (waiting for the library components to be initiated).', 0);
- return false;
- }
-
- if(typeof args !== 'object') args = {};
-
- // Build stanza
- var stanza = new JSJaCPresence();
- stanza.setTo(this.get_muc_to());
-
- if(!args.id) args.id = this.get_id_new();
- stanza.setID(args.id);
-
- // Submit to registered handler
- switch(args.action) {
- case JSJAC_JINGLE_MUJI_ACTION_PREPARE:
- this._send_session_prepare(stanza, args); break;
-
- case JSJAC_JINGLE_MUJI_ACTION_INITIATE:
- this._send_session_initiate(stanza, args); break;
-
- case JSJAC_JINGLE_MUJI_ACTION_LEAVE:
- this._send_session_leave(stanza, args); break;
-
- default:
- this.get_debug().log('[JSJaCJingle:muji] send_presence > Unexpected error.', 1);
-
- return false;
- }
-
- this._set_sent_id(args.id);
-
- this.get_connection().send(stanza);
-
- if(this.get_net_trace()) this.get_debug().log('[JSJaCJingle:muji] send_presence > Outgoing packet sent' + '\n\n' + stanza.xml());
-
- // Trigger custom callback
- /* @function */
- (this.get_room_presence_out())(this, stanza);
-
- return true;
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] send_presence > ' + e, 1);
- }
-
- return false;
- },
-
- /**
- * Sends a given Muji message stanza
- * @public
- * @fires JSJaCJingleMuji#get_room_message_out
- * @param {String} body
- * @returns {Boolean} Success
- */
- send_message: function(body) {
- this.get_debug().log('[JSJaCJingle:muji] send_message', 4);
-
- try {
- // Missing args?
- if(!body) {
- this.get_debug().log('[JSJaCJingle:muji] send_message > Message body missing.', 0);
- return false;
- }
-
- // Locked?
- if(this.get_lock()) {
- this.get_debug().log('[JSJaCJingle:muji] send_message > Cannot send, resource locked. Please open another session or check WebRTC support.', 0);
- return false;
- }
-
- // Defer?
- var _this = this;
-
- if(JSJaCJingle._defer(function() { _this.send_message(body); })) {
- this.get_debug().log('[JSJaCJingle:muji] send_message > Deferred (waiting for the library components to be initiated).', 0);
- return false;
- }
-
- // Build stanza
- var stanza = new JSJaCMessage();
-
- stanza.setTo(this.get_to());
- stanza.setType(JSJAC_JINGLE_MESSAGE_TYPE_GROUPCHAT);
- stanza.setBody(body);
-
- this.get_connection().send(stanza);
-
- if(this.get_net_trace()) this.get_debug().log('[JSJaCJingle:muji] send_message > Outgoing packet sent' + '\n\n' + stanza.xml());
-
- // Trigger custom callback
- /* @function */
- (this.get_room_message_out())(this, stanza);
-
- return true;
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] send_message > ' + e, 1);
- }
-
- return false;
- },
-
- /**
- * Handles a Muji presence stanza
- * @public
- * @fires JSJaCJingleMuji#_handle_participant_prepare
- * @fires JSJaCJingleMuji#_handle_participant_initiate
- * @fires JSJaCJingleMuji#_handle_participant_leave
- * @fires JSJaCJingleMuji#get_room_presence_in
- * @fires JSJaCJingleMuji#get_participant_prepare
- * @fires JSJaCJingleMuji#get_participant_initiate
- * @fires JSJaCJingleMuji#get_participant_leave
- * @param {JSJaCPacket} stanza
- */
- handle_presence: function(stanza) {
- this.get_debug().log('[JSJaCJingle:muji] handle_presence', 4);
-
- try {
- if(this.get_net_trace()) this.get_debug().log('[JSJaCJingle:muji] handle_presence > Incoming packet received' + '\n\n' + stanza.xml());
-
- // Locked?
- if(this.get_lock()) {
- this.get_debug().log('[JSJaCJingle:muji] handle_presence > Cannot handle, resource locked. Please open another session or check WebRTC support.', 0);
- return;
- }
-
- // Defer?
- var _this = this;
-
- if(JSJaCJingle._defer(function() { _this.handle_presence(stanza); })) {
- this.get_debug().log('[JSJaCJingle:muji] handle_presence > Deferred (waiting for the library components to be initiated).', 0);
- return;
- }
-
- // Trigger custom callback
- /* @function */
- (this.get_room_presence_in())(this, stanza);
-
- var id = stanza.getID();
- var type = (stanza.getType() || JSJAC_JINGLE_PRESENCE_TYPE_AVAILABLE);
-
- if(id) this._set_received_id(id);
-
- // Submit to custom handler (only for local user packets)
- var i, handlers, is_stanza_from_local;
-
- handlers = this.get_registered_handlers(JSJAC_JINGLE_STANZA_PRESENCE, type, id);
- is_stanza_from_local = this.is_stanza_from_local(stanza);
-
- if(typeof handlers == 'object' && handlers.length && is_stanza_from_local === true) {
- this.get_debug().log('[JSJaCJingle:muji] handle_presence > Submitted to custom registered handlers.', 2);
-
- for(i in handlers) {
- /* @function */
- handlers[i](stanza);
- }
-
- this.unregister_handler(JSJAC_JINGLE_STANZA_PRESENCE, type, id);
-
- return;
- }
-
- // Local stanza?
- if(is_stanza_from_local === true) {
- if(stanza.getType() === JSJAC_JINGLE_PRESENCE_TYPE_UNAVAILABLE) {
- this.get_debug().log('[JSJaCJingle:muji] handle_presence > Conference room going offline, forcing termination...', 1);
-
- // Change session status
- this._set_status(JSJAC_JINGLE_MUJI_STATUS_LEAVING);
-
- this._terminate_participant_sessions();
-
- // Trigger leave error handlers
- /* @function */
- this.get_session_leave_error()(this, stanza);
- this._handle_session_leave_error(stanza);
- } else {
- this.get_debug().log('[JSJaCJingle:muji] handle_presence > Dropped local stanza.', 1);
- }
- } else {
- // Defer if user media not ready yet
- this._defer_participant_handlers(function(is_deferred) {
- // Remote stanza handlers
- if(stanza.getType() === JSJAC_JINGLE_PRESENCE_TYPE_UNAVAILABLE) {
- _this._handle_participant_leave(stanza, is_deferred);
-
- /* @function */
- _this.get_participant_leave()(stanza);
- } else {
- var muji = _this.utils.stanza_muji(stanza);
-
- // Don't handle non-Muji stanzas there...
- if(!muji) return;
-
- // Submit to registered handler
- var username = _this.utils.stanza_username(stanza);
- var status = _this._shortcut_participant_status(username);
-
- var fn_log_drop = function() {
- _this.get_debug().log('[JSJaCJingle:muji] handle_presence > Dropped out-of-order participant stanza with status: ' + status, 1);
- };
-
- if(_this._stanza_has_preparing(muji)) {
- if(!status || status === JSJAC_JINGLE_MUJI_STATUS_INACTIVE) {
- _this._handle_participant_prepare(stanza, is_deferred);
-
- /* @function */
- _this.get_participant_prepare()(_this, stanza);
- } else {
- fn_log_drop();
- }
- } else if(_this._stanza_has_content(muji)) {
- if(!status || status === JSJAC_JINGLE_MUJI_STATUS_INACTIVE || status === JSJAC_JINGLE_MUJI_STATUS_PREPARED) {
- _this._handle_participant_initiate(stanza, is_deferred);
-
- /* @function */
- _this.get_participant_initiate()(_this, stanza);
- } else {
- fn_log_drop();
- }
- } else if(_this.is_stanza_from_participant(stanza)) {
- if(!status || status === JSJAC_JINGLE_MUJI_STATUS_INACTIVE || status === JSJAC_JINGLE_MUJI_STATUS_INITIATED) {
- _this._handle_participant_leave(stanza, is_deferred);
-
- /* @function */
- _this.get_participant_leave()(_this, stanza);
- } else {
- fn_log_drop();
- }
- }
- }
- });
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] handle_presence > ' + e, 1);
- }
- },
-
- /**
- * Handles a Muji message stanza
- * @public
- * @fires JSJaCJingleMuji#get_room_message_in
- * @param {JSJaCPacket} stanza
- */
- handle_message: function(stanza) {
- this.get_debug().log('[JSJaCJingle:muji] handle_message', 4);
-
- try {
- var stanza_type = stanza.getType();
-
- if(stanza_type != JSJAC_JINGLE_MESSAGE_TYPE_GROUPCHAT) {
- this.get_debug().log('[JSJaCJingle:muji] handle_message > Dropped invalid stanza type: ' + stanza_type, 0);
- return;
- }
-
- if(this.get_net_trace()) this.get_debug().log('[JSJaCJingle:muji] handle_message > Incoming packet received' + '\n\n' + stanza.xml());
-
- // Locked?
- if(this.get_lock()) {
- this.get_debug().log('[JSJaCJingle:muji] handle_message > Cannot handle, resource locked. Please open another session or check WebRTC support.', 0);
- return;
- }
-
- // Trigger custom callback
- /* @function */
- (this.get_room_message_in())(this, stanza);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] handle_message > ' + e, 1);
- }
- },
-
-
-
- /**
- * JSJSAC JINGLE MUJI SENDERS
- */
-
- /**
- * Sends the invite message.
- * @private
- * @param {String} jid
- */
- _send_invite: function(jid, reason) {
- this.get_debug().log('[JSJaCJingle:muji] _send_invite', 4);
-
- try {
- var cur_participant, participants,
- stanza, x_invite;
-
- stanza = new JSJaCMessage();
- stanza.setTo(jid);
-
- x_invite = stanza.buildNode('x', {
- 'jid': this.get_to(),
- 'xmlns': NS_JABBER_CONFERENCE
- });
-
- if(reason)
- x_invite.setAttribute('reason', reason);
- if(this.get_password())
- x_invite.setAttribute('password', this.get_password());
-
- stanza.getNode().appendChild(x_invite);
-
- stanza.appendNode('x', {
- 'media': this.get_media(),
- 'xmlns': NS_MUJI_INVITE
- });
-
- this.get_connection().send(stanza);
-
- if(this.get_net_trace()) this.get_debug().log('[JSJaCJingle:muji] _send_invite > Outgoing packet sent' + '\n\n' + stanza.xml());
-
- // Trigger custom callback
- /* @function */
- (this.get_room_message_out())(this, stanza);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _send_invite > ' + e, 1);
- }
- },
-
- /**
- * Sends the session prepare event.
- * @private
- * @fires JSJaCJingleMuji#_handle_session_prepare_success
- * @fires JSJaCJingleMuji#_handle_session_prepare_error
- * @fires JSJaCJingleMuji#get_session_prepare_success
- * @fires JSJaCJingleMuji#get_session_prepare_error
- * @fires JSJaCJingleMuji#get_session_prepare_pending
- * @param {JSJaCPacket} stanza
- * @param {Object} args
- */
- _send_session_prepare: function(stanza, args) {
- this.get_debug().log('[JSJaCJingle:muji] _send_session_prepare', 4);
-
- try {
- if(this.get_status() !== JSJAC_JINGLE_MUJI_STATUS_PREPARING) {
- this.get_debug().log('[JSJaCJingle:muji] _send_session_prepare > Cannot send prepare stanza, resource already prepared (status: ' + this.get_status() + ').', 0);
- return;
- }
-
- if(!args) {
- this.get_debug().log('[JSJaCJingle:muji] _send_session_prepare > Arguments not provided.', 1);
- return;
- }
-
- // Build Muji stanza
- var muji = this.utils.stanza_generate_muji(stanza);
- muji.appendChild(stanza.buildNode('preparing', { 'xmlns': NS_MUJI }));
-
- // Password-protected room?
- if(this.get_password()) {
- var x_muc = stanza.getNode().appendChild(stanza.buildNode('x', { 'xmlns': NS_JABBER_MUC }));
-
- x_muc.appendChild(
- stanza.buildNode('password', { 'xmlns': NS_JABBER_MUC }, this.get_password())
- );
- }
-
- // Schedule success
- var _this = this;
-
- this.register_handler(JSJAC_JINGLE_STANZA_PRESENCE, JSJAC_JINGLE_PRESENCE_TYPE_AVAILABLE, args.id, function(stanza) {
- /* @function */
- (_this.get_session_prepare_success())(_this, stanza);
- _this._handle_session_prepare_success(stanza);
- });
-
- this.register_handler(JSJAC_JINGLE_STANZA_PRESENCE, JSJAC_JINGLE_PRESENCE_TYPE_ERROR, args.id, function(stanza) {
- /* @function */
- (_this.get_session_prepare_error())(_this, stanza);
- _this._handle_session_prepare_error(stanza);
- });
-
- // Schedule timeout
- this.utils.stanza_timeout(JSJAC_JINGLE_STANZA_PRESENCE, JSJAC_JINGLE_PRESENCE_TYPE_AVAILABLE, args.id, {
- /* @function */
- external: this.get_session_prepare_error().bind(this),
- internal: this._handle_session_prepare_error.bind(this)
- });
- this.utils.stanza_timeout(JSJAC_JINGLE_STANZA_PRESENCE, JSJAC_JINGLE_PRESENCE_TYPE_ERROR, args.id);
-
- this.get_debug().log('[JSJaCJingle:muji] _send_session_prepare > Sent.', 2);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _send_session_prepare > ' + e, 1);
- }
- },
-
- /**
- * Sends the session initiate event.
- * @private
- * @fires JSJaCJingleMuji#_handle_session_initiate_success
- * @fires JSJaCJingleMuji#_handle_session_initiate_error
- * @fires JSJaCJingleMuji#get_session_initiate_success
- * @fires JSJaCJingleMuji#get_session_initiate_error
- * @param {JSJaCPacket} stanza
- * @param {Object} args
- */
- _send_session_initiate: function(stanza, args) {
- this.get_debug().log('[JSJaCJingle:muji] _send_session_initiate', 4);
-
- try {
- if(this.get_status() !== JSJAC_JINGLE_MUJI_STATUS_INITIATING) {
- this.get_debug().log('[JSJaCJingle:muji] _send_session_initiate > Cannot send initiate stanza, resource already initiated (status: ' + this.get_status() + ').', 0);
- return;
- }
-
- if(!args) {
- this.get_debug().log('[JSJaCJingle:muji] _send_session_initiate > Arguments not provided.', 1);
- return;
- }
-
- // Build Muji stanza
- var muji = this.utils.stanza_generate_muji(stanza);
-
- this.utils.stanza_generate_content_local(stanza, muji, false);
- this.utils.stanza_generate_group_local(stanza, muji);
-
- // Schedule success
- var _this = this;
-
- this.register_handler(JSJAC_JINGLE_STANZA_PRESENCE, JSJAC_JINGLE_PRESENCE_TYPE_AVAILABLE, args.id, function(stanza) {
- /* @function */
- (_this.get_session_initiate_success())(_this, stanza);
- _this._handle_session_initiate_success(stanza);
- });
-
- this.register_handler(JSJAC_JINGLE_STANZA_PRESENCE, JSJAC_JINGLE_PRESENCE_TYPE_ERROR, args.id, function(stanza) {
- /* @function */
- (_this.get_session_initiate_error())(_this, stanza);
- _this._handle_session_initiate_error(stanza);
- });
-
- // Schedule timeout
- this.utils.stanza_timeout(JSJAC_JINGLE_STANZA_PRESENCE, JSJAC_JINGLE_PRESENCE_TYPE_AVAILABLE, args.id, {
- /* @function */
- external: this.get_session_initiate_error().bind(this),
- internal: this._handle_session_initiate_error.bind(this)
- });
- this.utils.stanza_timeout(JSJAC_JINGLE_STANZA_PRESENCE, JSJAC_JINGLE_PRESENCE_TYPE_ERROR, args.id);
-
- this.get_debug().log('[JSJaCJingle:muji] _send_session_initiate > Sent.', 2);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _send_session_initiate > ' + e, 1);
- }
- },
-
- /**
- * Sends the session leave event.
- * @private
- * @fires JSJaCJingleMuji#_handle_session_leave_success
- * @fires JSJaCJingleMuji#_handle_session_leave_error
- * @fires JSJaCJingleMuji#get_session_leave_success
- * @fires JSJaCJingleMuji#get_session_leave_error
- * @param {JSJaCPacket} stanza
- * @param {Object} args
- */
- _send_session_leave: function(stanza, args) {
- this.get_debug().log('[JSJaCJingle:muji] _send_session_leave', 4);
-
- try {
- if(this.get_status() !== JSJAC_JINGLE_MUJI_STATUS_LEAVING) {
- this.get_debug().log('[JSJaCJingle:muji] _send_session_leave > Cannot send leave stanza, resource already left (status: ' + this.get_status() + ').', 0);
- return;
- }
-
- if(!args) {
- this.get_debug().log('[JSJaCJingle:muji] _send_session_leave > Arguments not provided.', 1);
- return;
- }
-
- stanza.setType(JSJAC_JINGLE_PRESENCE_TYPE_UNAVAILABLE);
-
- // Schedule success
- var _this = this;
-
- this.register_handler(JSJAC_JINGLE_STANZA_PRESENCE, JSJAC_JINGLE_PRESENCE_TYPE_UNAVAILABLE, args.id, function(stanza) {
- /* @function */
- (_this.get_session_leave_success())(_this, stanza);
- _this._handle_session_leave_success(stanza);
- });
-
- this.register_handler(JSJAC_JINGLE_STANZA_PRESENCE, JSJAC_JINGLE_PRESENCE_TYPE_ERROR, args.id, function(stanza) {
- /* @function */
- (_this.get_session_leave_error())(_this, stanza);
- _this._handle_session_leave_error(stanza);
- });
-
- // Schedule timeout
- this.utils.stanza_timeout(JSJAC_JINGLE_STANZA_PRESENCE, JSJAC_JINGLE_PRESENCE_TYPE_UNAVAILABLE, args.id, {
- /* @function */
- external: this.get_session_leave_error().bind(this),
- internal: this._handle_session_leave_error.bind(this)
- });
- this.utils.stanza_timeout(JSJAC_JINGLE_STANZA_PRESENCE, JSJAC_JINGLE_PRESENCE_TYPE_ERROR, args.id);
-
- this.get_debug().log('[JSJaCJingle:muji] _send_session_leave > Sent.', 2);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _send_session_leave > ' + e, 1);
- }
- },
-
-
-
- /**
- * JSJSAC JINGLE MUJI HANDLERS
- */
-
- /**
- * Handles the Jingle session prepare success
- * @private
- * @event JSJaCJingleMuji#_handle_session_prepare_success
- * @param {JSJaCPacket} stanza
- */
- _handle_session_prepare_success: function(stanza) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_session_prepare_success', 4);
-
- try {
- if(this.get_status() !== JSJAC_JINGLE_MUJI_STATUS_PREPARING) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_session_prepare_success > Cannot handle prepare success stanza, resource already prepared (status: ' + this.get_status() + ').', 0);
- return;
- }
-
- var username = this.utils.stanza_username(stanza);
-
- if(!username) {
- throw 'No username provided, not accepting session prepare stanza.';
- }
-
- if(this._stanza_has_room_owner(stanza)) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_session_prepare_success > Current MUC affiliation is owner.', 2);
-
- this._set_is_room_owner(true);
- }
-
- if(this._stanza_has_password_invalid(stanza)) {
- // Password protected room?
- this.get_debug().log('[JSJaCJingle:muji] _handle_session_prepare_success > Password-protected room, aborting.', 1);
-
- /* @function */
- (this.get_session_leave_success())(this, stanza);
- this._handle_session_leave_success(stanza);
- } else if(this._stanza_has_username_conflict(stanza)) {
- // Username conflict
- var alt_username = (this.get_username() + this.utils.generate_random(4));
-
- this.get_debug().log('[JSJaCJingle:muji] _handle_session_prepare_success > Conflicting username, changing it to: ' + alt_username, 2);
-
- this._set_username(alt_username);
- this.send_presence({ action: JSJAC_JINGLE_MUJI_ACTION_PREPARE });
- } else {
- // Change session status
- this._set_status(JSJAC_JINGLE_MUJI_STATUS_PREPARED);
-
- // Initialize WebRTC
- var _this = this;
-
- this._peer_get_user_media(function() {
- _this._peer_connection_create(function() {
- _this.get_debug().log('[JSJaCJingle:muji] _handle_session_prepare_success > Ready to begin Muji initiation.', 2);
-
- // Trigger session initiate pending custom callback
- /* @function */
- (_this.get_session_initiate_pending())(_this);
-
- // Build content (local)
- _this.utils.build_content_local();
-
- // Change session status
- _this._set_status(JSJAC_JINGLE_MUJI_STATUS_INITIATING);
-
- _this.send_presence({ action: JSJAC_JINGLE_MUJI_ACTION_INITIATE });
- });
- });
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_session_prepare_success > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session prepare error
- * @private
- * @event JSJaCJingleMuji#_handle_session_prepare_error
- * @param {JSJaCPacket} stanza
- */
- _handle_session_prepare_error: function(stanza) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_session_prepare_error', 4);
-
- try {
- if(this.get_status() !== JSJAC_JINGLE_MUJI_STATUS_PREPARING) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_session_prepare_error > Cannot handle prepare error stanza, resource already prepared (status: ' + this.get_status() + ').', 0);
- return;
- }
-
- this.leave();
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_session_prepare_error > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session initiate success
- * @private
- * @event JSJaCJingleMuji#_handle_session_initiate_success
- * @param {JSJaCPacket} stanza
- */
- _handle_session_initiate_success: function(stanza) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_session_initiate_success', 4);
-
- try {
- if(this.get_status() !== JSJAC_JINGLE_MUJI_STATUS_INITIATING) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_session_initiate_success > Cannot handle initiate success stanza, resource already initiated (status: ' + this.get_status() + ').', 0);
- return;
- }
-
- // Change session status
- this._set_status(JSJAC_JINGLE_MUJI_STATUS_INITIATED);
-
- // Undefer pending participant handlers
- this._undefer_participant_handlers();
-
- // Autoconfigure room password if new MUC
- if(this.get_is_room_owner() === true &&
- this.get_password_protect() === true &&
- this.utils.object_length(this.get_participants()) === 0) {
- this._autoconfigure_room_password();
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_session_initiate_success > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session initiate error
- * @private
- * @event JSJaCJingleMuji#_handle_session_initiate_error
- * @param {JSJaCPacket} stanza
- */
- _handle_session_initiate_error: function(stanza) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_session_initiate_error', 4);
-
- try {
- if(this.get_status() !== JSJAC_JINGLE_MUJI_STATUS_INITIATING) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_session_initiate_error > Cannot handle initiate error stanza, resource already initiated (status: ' + this.get_status() + ').', 0);
- return;
- }
-
- this.leave();
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_session_initiate_error > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session leave success
- * @private
- * @event JSJaCJingleMuji#_handle_session_leave_success
- * @param {JSJaCPacket} stanza
- */
- _handle_session_leave_success: function(stanza) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_session_leave_success', 4);
-
- try {
- if(this.get_status() !== JSJAC_JINGLE_MUJI_STATUS_LEAVING) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_session_leave_success > Cannot handle leave success stanza, resource already left (status: ' + this.get_status() + ').', 0);
- return;
- }
-
- this.abort();
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_session_leave_success > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session leave error
- * @private
- * @event JSJaCJingleMuji#_handle_session_leave_error
- * @param {JSJaCPacket} stanza
- */
- _handle_session_leave_error: function(stanza) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_session_leave_error', 4);
-
- try {
- if(this.get_status() !== JSJAC_JINGLE_MUJI_STATUS_LEAVING) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_session_leave_success > Cannot handle leave error stanza, resource already left (status: ' + this.get_status() + ').', 0);
- return;
- }
-
- this.abort(true);
-
- this.get_debug().log('[JSJaCJingle:muji] _handle_session_leave_error > Forced session exit locally.', 0);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_session_leave_error > ' + e, 1);
- }
- },
-
- /**
- * Handles the participant prepare event.
- * @private
- * @event JSJaCJingleMuji#_handle_participant_prepare
- * @param {JSJaCPacket} stanza
- * @param {Boolean} [is_deferred]
- */
- _handle_participant_prepare: function(stanza, is_deferred) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_prepare', 4);
-
- try {
- var username = this.utils.stanza_username(stanza);
-
- if(!username) {
- throw 'No username provided, not accepting participant prepare stanza.';
- }
-
- // Local slot unavailable?
- if(this.get_status() === JSJAC_JINGLE_MUJI_STATUS_INACTIVE ||
- this.get_status() === JSJAC_JINGLE_MUJI_STATUS_LEAVING ||
- this.get_status() === JSJAC_JINGLE_MUJI_STATUS_LEFT) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_prepare > [' + username + '] > Cannot handle, resource not available (status: ' + this.get_status() + ').', 0);
- return;
- }
-
- // Remote slot unavailable?
- var status = this._shortcut_participant_status(username);
-
- if(status !== JSJAC_JINGLE_MUJI_STATUS_INACTIVE) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_prepare > [' + username + '] > Cannot handle prepare stanza, participant already prepared (status: ' + status + ').', 0);
- return;
- }
-
- this._set_participants(username, {
- status: JSJAC_JINGLE_MUJI_STATUS_PREPARED,
- view: this._shortcut_participant_view(username)
- });
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_prepare > ' + e, 1);
- }
- },
-
- /**
- * Handles the participant initiate event.
- * @private
- * @event JSJaCJingleMuji#_handle_participant_initiate
- * @param {JSJaCPacket} stanza
- * @param {Boolean} [is_deferred]
- */
- _handle_participant_initiate: function(stanza, is_deferred) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_initiate', 4);
-
- try {
- var username = this.utils.stanza_username(stanza);
-
- if(!username) {
- throw 'No username provided, not accepting participant initiate stanza.';
- }
-
- // Local slot unavailable?
- if(this.get_status() === JSJAC_JINGLE_MUJI_STATUS_INACTIVE ||
- this.get_status() === JSJAC_JINGLE_MUJI_STATUS_LEAVING ||
- this.get_status() === JSJAC_JINGLE_MUJI_STATUS_LEFT) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_initiate > [' + username + '] > Cannot handle, resource not available (status: ' + this.get_status() + ').', 0);
- return;
- }
-
- // Remote slot unavailable?
- var status = this._shortcut_participant_status(username);
-
- if(status !== JSJAC_JINGLE_MUJI_STATUS_INACTIVE &&
- status !== JSJAC_JINGLE_MUJI_STATUS_PREPARED) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_initiate > [' + username + '] > Cannot handle initiate stanza, participant already initiated (status: ' + status + ').', 0);
- return;
- }
-
- // Need to initiate? (participant was here before we joined)
- /* @see {@link http://xmpp.org/extensions/xep-0272.html#joining|XEP-0272: Multiparty Jingle (Muji) - Joining a Conference} */
- if(is_deferred === true) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_initiate > [' + username + '] Initiating participant Jingle session...', 2);
-
- // Create Jingle session
- this._create_participant_session(username).initiate();
- } else {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_initiate > [' + username + '] Waiting for participant Jingle initiation request...', 2);
-
- this._set_participants(username, {
- status: JSJAC_JINGLE_MUJI_STATUS_INITIATED,
- view: this._shortcut_participant_view(username)
- });
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_initiate > ' + e, 1);
- }
- },
-
- /**
- * Handles the participant leave event.
- * @private
- * @event JSJaCJingleMuji#_handle_participant_leave
- * @param {JSJaCPacket} stanza
- * @param {Boolean} [is_deferred]
- */
- _handle_participant_leave: function(stanza, is_deferred) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_leave', 4);
-
- try {
- var username = this.utils.stanza_username(stanza);
-
- if(!username) {
- throw 'No username provided, not accepting participant leave stanza.';
- }
-
- // Local slot unavailable?
- if(this.get_status() === JSJAC_JINGLE_MUJI_STATUS_INACTIVE ||
- this.get_status() === JSJAC_JINGLE_MUJI_STATUS_LEAVING ||
- this.get_status() === JSJAC_JINGLE_MUJI_STATUS_LEFT) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_leave > [' + username + '] > Cannot handle, resource not available (status: ' + this.get_status() + ').', 0);
- return;
- }
-
- // Remote slot unavailable?
- var status = this._shortcut_participant_status(username);
-
- if(status !== JSJAC_JINGLE_MUJI_STATUS_PREPARED &&
- status !== JSJAC_JINGLE_MUJI_STATUS_INITIATED) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_leave > [' + username + '] > Cannot handle leave stanza, participant already left or inactive (status: ' + status + ').', 0);
- return;
- }
-
- // Remove participant session
- var session = (this.get_participants(username) || {}).session;
-
- if(session && session.get_status() !== JSJAC_JINGLE_STATUS_TERMINATED)
- session.abort(true);
-
- this._set_participants(username, null);
- this.get_remove_remote_view()(this, username);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_leave > ' + e, 1);
- }
- },
-
-
-
- /**
- * JSJSAC JINGLE SESSION HANDLERS
- */
-
- /**
- * Handles the Jingle session prepare success
- * @private
- * @event JSJaCJingleMuji#_handle_participant_session_initiate_pending
- * @param {JSJaCJingleSingle} session
- */
- _handle_participant_session_initiate_pending: function(session) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_initiate_pending', 4);
-
- try {
- /* @function */
- (this.get_participant_session_initiate_pending())(this, session);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_initiate_pending > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session prepare success
- * @private
- * @event JSJaCJingleMuji#_handle_participant_session_initiate_success
- * @param {JSJaCJingleSingle} session
- * @param {JSJaCPacket} stanza
- */
- _handle_participant_session_initiate_success: function(session, stanza) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_initiate_success', 4);
-
- try {
- /* @function */
- (this.get_participant_session_initiate_success())(this, session, stanza);
-
- // Mute participant?
- var cur_media_name;
-
- for(cur_media_name in this._mute) {
- if(this.get_mute(cur_media_name) === true) {
- this._toggle_participants_mute(
- cur_media_name,
- JSJAC_JINGLE_SESSION_INFO_MUTE,
- username
- );
- }
- }
-
- // Auto-accept incoming sessions
- if(session.is_responder()) {
- // Accept after a while
- setTimeout(function() {
- session.accept();
- }, (JSJAC_JINGLE_MUJI_PARTICIPANT_ACCEPT_WAIT * 1000));
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_initiate_success > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session prepare success
- * @private
- * @event JSJaCJingleMuji#_handle_participant_session_initiate_error
- * @param {JSJaCJingleSingle} session
- * @param {JSJaCPacket} stanza
- */
- _handle_participant_session_initiate_error: function(session, stanza) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_initiate_error', 4);
-
- try {
- /* @function */
- (this.get_participant_session_initiate_error())(this, session, stanza);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_initiate_error > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session prepare success
- * @private
- * @event JSJaCJingleMuji#_handle_participant_session_initiate_request
- * @param {JSJaCJingleSingle} session
- * @param {JSJaCPacket} stanza
- */
- _handle_participant_session_initiate_request: function(session, stanza) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_initiate_request', 4);
-
- try {
- /* @function */
- (this.get_participant_session_initiate_request())(this, session, stanza);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_initiate_request > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session prepare success
- * @private
- * @event JSJaCJingleMuji#_handle_participant_session_accept_pending
- * @param {JSJaCJingleSingle} session
- */
- _handle_participant_session_accept_pending: function(session) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_accept_pending', 4);
-
- try {
- /* @function */
- (this.get_participant_session_accept_pending())(this, session);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_accept_pending > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session prepare success
- * @private
- * @event JSJaCJingleMuji#_handle_participant_session_accept_success
- * @param {JSJaCJingleSingle} session
- * @param {JSJaCPacket} stanza
- */
- _handle_participant_session_accept_success: function(session, stanza) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_accept_success', 4);
-
- try {
- /* @function */
- (this.get_participant_session_accept_success())(this, session, stanza);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_accept_success > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session prepare success
- * @private
- * @event JSJaCJingleMuji#_handle_participant_session_accept_error
- * @param {JSJaCJingleSingle} session
- * @param {JSJaCPacket} stanza
- */
- _handle_participant_session_accept_error: function(session, stanza) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_accept_error', 4);
-
- try {
- /* @function */
- (this.get_participant_session_accept_error())(this, session, stanza);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_accept_error > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session prepare success
- * @private
- * @event JSJaCJingleMuji#_handle_participant_session_accept_request
- * @param {JSJaCJingleSingle} session
- * @param {JSJaCPacket} stanza
- */
- _handle_participant_session_accept_request: function(session, stanza) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_accept_request', 4);
-
- try {
- /* @function */
- (this.get_participant_session_accept_request())(this, session, stanza);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_accept_request > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session prepare success
- * @private
- * @event JSJaCJingleMuji#_handle_participant_session_info_pending
- * @param {JSJaCJingleSingle} session
- */
- _handle_participant_session_info_pending: function(session) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_info_pending', 4);
-
- try {
- /* @function */
- (this.get_participant_session_info_pending())(this, session);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_info_pending > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session prepare success
- * @private
- * @event JSJaCJingleMuji#_handle_participant_session_info_success
- * @param {JSJaCJingleSingle} session
- * @param {JSJaCPacket} stanza
- */
- _handle_participant_session_info_success: function(session, stanza) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_info_success', 4);
-
- try {
- /* @function */
- (this.get_participant_session_info_success())(this, session, stanza);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_info_success > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session prepare success
- * @private
- * @event JSJaCJingleMuji#_handle_participant_session_info_error
- * @param {JSJaCJingleSingle} session
- * @param {JSJaCPacket} stanza
- */
- _handle_participant_session_info_error: function(session, stanza) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_info_error', 4);
-
- try {
- /* @function */
- (this.get_participant_session_info_error())(this, session, stanza);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_info_error > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session prepare success
- * @private
- * @event JSJaCJingleMuji#_handle_participant_session_info_request
- * @param {JSJaCJingleSingle} session
- * @param {JSJaCPacket} stanza
- */
- _handle_participant_session_info_request: function(session, stanza) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_info_request', 4);
-
- try {
- /* @function */
- (this.get_participant_session_info_request())(this, session, stanza);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_info_request > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session prepare success
- * @private
- * @event JSJaCJingleMuji#_handle_participant_session_terminate_pending
- * @param {JSJaCJingleSingle} session
- */
- _handle_participant_session_terminate_pending: function(session) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_terminate_pending', 4);
-
- try {
- /* @function */
- (this.get_participant_session_terminate_pending())(this, session);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_terminate_pending > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session prepare success
- * @private
- * @event JSJaCJingleMuji#_handle_participant_session_terminate_success
- * @param {JSJaCJingleSingle} session
- * @param {JSJaCPacket} stanza
- */
- _handle_participant_session_terminate_success: function(session, stanza) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_terminate_success', 4);
-
- try {
- /* @function */
- (this.get_participant_session_terminate_success())(this, session, stanza);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_terminate_success > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session prepare success
- * @private
- * @event JSJaCJingleMuji#_handle_participant_session_terminate_error
- * @param {JSJaCJingleSingle} session
- * @param {JSJaCPacket} stanza
- */
- _handle_participant_session_terminate_error: function(session, stanza) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_terminate_error', 4);
-
- try {
- /* @function */
- (this.get_participant_session_terminate_error())(this, session, stanza);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_terminate_error > ' + e, 1);
- }
- },
-
- /**
- * Handles the Jingle session prepare success
- * @private
- * @event JSJaCJingleMuji#_handle_participant_session_terminate_request
- * @param {JSJaCJingleSingle} session
- * @param {JSJaCPacket} stanza
- */
- _handle_participant_session_terminate_request: function(session, stanza) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_terminate_request', 4);
-
- try {
- /* @function */
- (this.get_participant_session_terminate_request())(this, session, stanza);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_session_terminate_request > ' + e, 1);
- }
- },
-
- /**
- * Handles the stream add event
- * @private
- * @event JSJaCJingleMuji#_handle_participant_stream_add
- * @param {JSJaCJingleSingle} session
- * @param {MediaStreamEvent} data
- */
- _handle_participant_stream_add: function(session, data) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_stream_add', 4);
-
- try {
- /* @function */
- (this.get_participant_stream_add())(this, session, data);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_stream_add > ' + e, 1);
- }
- },
-
- /**
- * Handles the stream remove event
- * @private
- * @event JSJaCJingleMuji#_handle_participant_stream_remove
- * @param {JSJaCJingleSingle} session
- * @param {MediaStreamEvent} data
- */
- _handle_participant_stream_remove: function(session, data) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_stream_remove', 4);
-
- try {
- /* @function */
- (this.get_participant_stream_remove())(this, session, data);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_stream_remove > ' + e, 1);
- }
- },
-
- /**
- * Handles the stream connected event
- * @private
- * @event JSJaCJingleMuji#_handle_participant_stream_connected
- * @param {JSJaCJingleSingle} session
- * @param {MediaStreamEvent} data
- */
- _handle_participant_stream_connected: function(session, data) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_stream_connected', 4);
-
- try {
- /* @function */
- (this.get_participant_stream_connected())(this, session, data);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_stream_connected > ' + e, 1);
- }
- },
-
- /**
- * Handles the stream disconnected event
- * @private
- * @event JSJaCJingleMuji#_handle_participant_stream_disconnected
- * @param {JSJaCJingleSingle} session
- * @param {MediaStreamEvent} data
- */
- _handle_participant_stream_disconnected: function(session, data) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_stream_disconnected', 4);
-
- try {
- /* @function */
- (this.get_participant_stream_disconnected())(this, session, data);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _handle_participant_stream_disconnected > ' + e, 1);
- }
- },
-
-
-
- /**
- * JSJSAC JINGLE STANZA PARSERS
- */
-
- /**
- * Returns whether user is preparing or not
- * @private
- * @param {DOM} muji
- * @returns {Boolean} Preparing state
- */
- _stanza_has_preparing: function(muji) {
- return this.utils.stanza_get_element(muji, 'preparing', NS_MUJI).length && true;
- },
-
- /**
- * Returns whether user has content or not
- * @private
- * @param {DOM} muji
- * @returns {Boolean} Content state
- */
- _stanza_has_content: function(muji) {
- return this.utils.stanza_get_element(muji, 'content', NS_MUJI).length && true;
- },
-
- /**
- * Returns whether stanza has the room owner code or not
- * @private
- * @param {JSJaCPacket} stanza
- * @returns {Boolean} Room owner state
- */
- _stanza_has_room_owner: function(stanza) {
- var is_room_owner = false;
-
- try {
- var i, items,
- x_muc_user = stanza.getChild('x', NS_JABBER_MUC_USER);
-
- if(x_muc_user) {
- items = this.utils.stanza_get_element(x_muc_user, 'item', NS_JABBER_MUC_USER);
-
- for(i = 0; i < items.length; i++) {
- if(items[i].getAttribute('affiliation') === JSJAC_JINGLE_MUJI_MUC_AFFILIATION_OWNER) {
- is_room_owner = true; break;
- }
- }
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _stanza_has_room_owner > ' + e, 1);
- } finally {
- return is_room_owner;
- }
- },
-
- /**
- * Returns whether stanza is a password invalid or not
- * @private
- * @param {JSJaCPacket} stanza
- * @returns {Boolean} Password invalid state
- */
- _stanza_has_password_invalid: function(stanza) {
- return (this.utils.stanza_get_error(stanza, XMPP_ERROR_NOT_AUTHORIZED).length >= 1) && true;
- },
-
- /**
- * Returns whether stanza is an username conflict or not
- * @private
- * @param {JSJaCPacket} stanza
- * @returns {Boolean} Local user state
- */
- _stanza_has_username_conflict: function(stanza) {
- return (this.utils.stanza_get_error(stanza, XMPP_ERROR_CONFLICT).length >= 1) && true;
- },
-
-
-
- /**
- * JSJSAC JINGLE PEER TOOLS
- */
-
- /**
- * Creates peer connection instance
- * @private
- */
- _peer_connection_create_instance: function() {
- this.get_debug().log('[JSJaCJingle:muji] _peer_connection_create_instance', 4);
-
- try {
- // Create the RTCPeerConnection object
- this._set_peer_connection(
- new WEBRTC_PEER_CONNECTION(
- null,
- WEBRTC_CONFIGURATION.peer_connection.constraints
- )
- );
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _peer_connection_create_instance > ' + e, 1);
- }
- },
-
- /**
- * Attaches peer connection callbacks (not used)
- * @private
- * @param {Function} [sdp_message_callback]
- */
- _peer_connection_callbacks: function(sdp_message_callback) {
- this.get_debug().log('[JSJaCJingle:muji] _peer_connection_callbacks', 4);
-
- try {
- // Not used for Muji
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _peer_connection_callbacks > ' + e, 1);
- }
- },
-
- /**
- * Dispatches peer connection to correct creator (offer/answer)
- * @private
- * @param {Function} [sdp_message_callback]
- */
- _peer_connection_create_dispatch: function(sdp_message_callback) {
- this.get_debug().log('[JSJaCJingle:muji] _peer_connection_create_dispatch', 4);
-
- try {
- this._peer_connection_create_offer(sdp_message_callback);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _peer_connection_create_dispatch > ' + e, 1);
- }
- },
-
- /**
- * Creates peer connection offer
- * @private
- * @param {Function} [sdp_message_callback]
- */
- _peer_connection_create_offer: function(sdp_message_callback) {
- this.get_debug().log('[JSJaCJingle:muji] _peer_connection_create_offer', 4);
-
- try {
- // Create offer
- this.get_debug().log('[JSJaCJingle:muji] _peer_connection_create_offer > Getting local description...', 2);
-
- // Local description
- this.get_peer_connection().createOffer(
- function(sdp_local) {
- this._peer_got_description(sdp_local, sdp_message_callback);
- }.bind(this),
-
- this._peer_fail_description.bind(this),
- WEBRTC_CONFIGURATION.create_offer
- );
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _peer_connection_create_offer > ' + e, 1);
- }
- },
-
- /**
- * Triggers the media not obtained error event
- * @private
- * @fires JSJaCJingleMuji#get_session_initiate_error
- * @param {Object} error
- */
- _peer_got_user_media_error: function(error) {
- this.get_debug().log('[JSJaCJingle:muji] _peer_got_user_media_error', 4);
-
- try {
- /* @function */
- (this.get_session_initiate_error())(this);
- this.handle_session_initiate_error();
-
- this.get_debug().log('[JSJaCJingle:muji] _peer_got_user_media_error > Failed (' + (error.PERMISSION_DENIED ? 'permission denied' : 'unknown' ) + ').', 1);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _peer_got_user_media_error > ' + e, 1);
- }
- },
-
- /**
- * Set a timeout limit to peer connection
- * @private
- * @param {String} state
- * @param {Object} [args]
- */
- _peer_timeout: function(state, args) {
- try {
- // Assert
- if(typeof args !== 'object') args = {};
-
- var t_iid = this.get_iid();
-
- var _this = this;
-
- setTimeout(function() {
- try {
- // State did not change?
- if(_this.get_iid() == t_iid && _this.get_peer_connection().iceConnectionState == state) {
- _this.get_debug().log('[JSJaCJingle:muji] _peer_timeout > Peer timeout.', 2);
- }
- } catch(e) {
- _this.get_debug().log('[JSJaCJingle:muji] _peer_timeout > ' + e, 1);
- }
- }, ((args.timer || JSJAC_JINGLE_PEER_TIMEOUT_DEFAULT) * 1000));
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _peer_timeout > ' + e, 1);
- }
- },
-
- /**
- * Stops ongoing peer connections
- * @private
- */
- _peer_stop: function() {
- this.get_debug().log('[JSJaCJingle:muji] _peer_stop', 4);
-
- // Detach media streams from DOM view
- this._set_local_stream(null);
-
- // Close the media stream
- if(this.get_peer_connection() &&
- (typeof this.get_peer_connection().close == 'function'))
- this.get_peer_connection().close();
-
- // Remove this session from router
- JSJaCJingle._remove(JSJAC_JINGLE_SESSION_SINGLE, this.get_sid());
- },
-
-
-
- /**
- * JSJSAC JINGLE STATES
- */
-
- /**
- * Is user media ready?
- * @public
- * @returns {Boolean} Ready state
- */
- is_ready_user_media: function() {
- return (this.get_local_stream() !== null) && true;
- },
-
- /**
- * Is this stanza from a participant?
- * @public
- * @param {JSJaCPacket} stanza
- * @returns {Boolean} Participant state
- */
- is_stanza_from_participant: function(stanza) {
- var username = this.utils.stanza_username(stanza);
- return (this.get_participants(username) in JSJAC_JINGLE_MUJI_STATUS) && true;
- },
-
- /**
- * Is this stanza from local user?
- * @public
- * @param {JSJaCPacket} stanza
- * @returns {Boolean} Local user state
- */
- is_stanza_from_local: function(stanza) {
- return this.utils.stanza_username(stanza) === this.get_username();
- },
-
-
-
- /**
- * JSJSAC JINGLE SHORTCUTS
- */
-
- /**
- * Returns participant status (even if inexistant)
- * @private
- * @param {String} username
- * @returns {String} Status
- */
- _shortcut_participant_status: function(username) {
- return ((this.get_participants(username) || {}).status || JSJAC_JINGLE_MUJI_STATUS_INACTIVE);
- },
-
- /**
- * Returns local user candidates
- * @private
- * @returns {Object} Candidates
- */
- _shortcut_local_user_candidates: function() {
- return this.get_candidates_local();
- },
-
- /**
- * Gets participant view (or create it)
- * @private
- * @param {String} username
- * @returns {Object} View
- */
- _shortcut_participant_view: function(username) {
- if((this.get_participants(username) || {}).view)
- return this.get_participants(username).view;
-
- return this.get_add_remote_view()(this, username, this.get_media());
- },
-
-
-
- /**
- * JSJSAC JINGLE VARIOUS TOOLS
- */
-
- /**
- * Terminate participant sessions
- * @private
- * @param {Boolean} [send_terminate]
- * @param {Function} [leave_callback]
- */
- _terminate_participant_sessions: function(send_terminate, leave_callback) {
- try {
- // Terminate each session
- var cur_username, cur_participant,
- participants = this.get_participants();
-
- for(cur_username in participants) {
- cur_participant = participants[cur_username];
-
- if(typeof cur_participant.session != 'undefined') {
- if(send_terminate === true)
- cur_participant.session.terminate();
-
- this.get_remove_remote_view()(this, cur_username);
- }
- }
-
- // Execute callback after a while
- var _this = this;
-
- if(typeof leave_callback == 'function') {
- setTimeout(function() {
- try {
- leave_callback();
- } catch(e) {
- _this.get_debug().log('[JSJaCJingle:muji] _terminate_participant_sessions > ' + e, 1);
- }
- }, (JSJAC_JINGLE_MUJI_LEAVE_WAIT * 1000));
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _terminate_participant_sessions > ' + e, 1);
- }
- },
-
- /**
- * Mutes/unmutes all or given participant(s)
- * @private
- * @param {String} media_name
- * @param {String} mute_action
- * @param {String} [username]
- */
- _toggle_participants_mute: function(media_name, mute_action, username) {
- try {
- var i, cur_participant;
- var participants = {};
-
- // One specific or all?
- if(username)
- participants[username] = this.get_participants(username);
- else
- participants = this.get_participants();
-
- for(i in participants) {
- cur_participant = participants[i];
-
- if(cur_participant.session.get_status() === JSJAC_JINGLE_STATUS_ACCEPTED) {
- switch(mute_action) {
- case JSJAC_JINGLE_SESSION_INFO_MUTE:
- cur_participant.session.mute(media_name); break;
-
- case JSJAC_JINGLE_SESSION_INFO_UNMUTE:
- cur_participant.session.unmute(media_name); break;
- }
- }
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _toggle_participants_mute > ' + e, 1);
- }
- },
-
- /**
- * Defers given participant handler (or executes it)
- * @private
- * @param {Function} fn
- * @returns {Boolean} Defer status
- */
- _defer_participant_handlers: function(fn) {
- var is_deferred = false;
-
- try {
- var _this = this;
-
- if(this.get_status() !== JSJAC_JINGLE_MUJI_STATUS_INITIATED &&
- this.get_status() !== JSJAC_JINGLE_MUJI_STATUS_LEAVING &&
- this.get_status() !== JSJAC_JINGLE_MUJI_STATUS_LEFT
- ) {
- this.defer_handler(JSJAC_JINGLE_MUJI_HANDLER_GET_USER_MEDIA, function() {
- fn.bind(_this)(true);
- });
-
- is_deferred = true;
-
- this.get_debug().log('[JSJaCJingle:muji] _defer_participant_handlers > Deferred participant handler (waiting for user media).', 0);
- } else {
- fn(false);
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _defer_participant_handlers > ' + e, 1);
- } finally {
- return is_deferred;
- }
- },
-
- /**
- * Undefers participant handlers
- * @private
- */
- _undefer_participant_handlers: function() {
- try {
- // Undefer pending handlers
- var i, handlers;
- handlers = this.get_deferred_handlers(JSJAC_JINGLE_MUJI_HANDLER_GET_USER_MEDIA);
-
- if(typeof handlers == 'object' && handlers.length) {
- this.get_debug().log('[JSJaCJingle:muji] _undefer_participant_handlers > Submitted to deferred handlers.', 2);
-
- for(i = 0; i < handlers.length; i++) {
- /* @function */
- handlers[i]();
- }
-
- this.undefer_handler(JSJAC_JINGLE_MUJI_HANDLER_GET_USER_MEDIA);
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _undefer_participant_handlers > ' + e, 1);
- }
- },
-
- /**
- * Creates participant Jingle session
- * @private
- * @param {String} username
- * @returns {JSJaCJingleSingle|Object} Jingle session instance
- */
- _create_participant_session: function(username) {
- var session = null;
-
- try {
- // Create Jingle session
- var session_args = this._generate_participant_session_args(username);
-
- session = new JSJaCJingleSingle(session_args);
-
- this._set_participants(username, {
- status: JSJAC_JINGLE_MUJI_STATUS_INITIATED,
- session: session,
- view: session_args.remote_view
- });
-
- // Configure Jingle session
- this.get_participants(username).session._set_local_stream_raw(
- this.get_local_stream()
- );
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _create_participant_session > ' + e, 1);
- } finally {
- return session;
- }
- },
-
- /**
- * Generates participant Jingle session arguments
- * @private
- * @param {String} username
- * @returns {Object} Jingle session arguments
- */
- _generate_participant_session_args: function(username) {
- args = {};
-
- try {
- // Main values
- args.connection = this.get_connection();
- args.to = this.get_to() + '/' + username;
- args.local_view = this.get_local_view();
- args.remote_view = this._shortcut_participant_view(username);
- args.local_stream_readonly = true;
-
- // Propagate values
- args.media = this.get_media();
- args.video_source = this.get_video_source();
- args.resolution = this.get_resolution();
- args.bandwidth = this.get_bandwidth();
- args.fps = this.get_fps();
- args.stun = this.get_stun();
- args.turn = this.get_turn();
- args.sdp_trace = this.get_sdp_trace();
- args.net_trace = this.get_net_trace();
- args.debug = this.get_debug();
-
- // Handlers
- args.session_initiate_pending = this._handle_participant_session_initiate_pending.bind(this);
- args.session_initiate_success = this._handle_participant_session_initiate_success.bind(this);
- args.session_initiate_error = this._handle_participant_session_initiate_error.bind(this);
- args.session_initiate_request = this._handle_participant_session_initiate_request.bind(this);
-
- args.session_accept_pending = this._handle_participant_session_accept_pending.bind(this);
- args.session_accept_success = this._handle_participant_session_accept_success.bind(this);
- args.session_accept_error = this._handle_participant_session_accept_error.bind(this);
- args.session_accept_request = this._handle_participant_session_accept_request.bind(this);
-
- args.session_info_pending = this._handle_participant_session_info_pending.bind(this);
- args.session_info_success = this._handle_participant_session_info_success.bind(this);
- args.session_info_error = this._handle_participant_session_info_error.bind(this);
- args.session_info_request = this._handle_participant_session_info_request.bind(this);
-
- args.session_terminate_pending = this._handle_participant_session_terminate_pending.bind(this);
- args.session_terminate_success = this._handle_participant_session_terminate_success.bind(this);
- args.session_terminate_error = this._handle_participant_session_terminate_error.bind(this);
- args.session_terminate_request = this._handle_participant_session_terminate_request.bind(this);
-
- args.stream_add = this._handle_participant_stream_add.bind(this);
- args.stream_remove = this._handle_participant_stream_remove.bind(this);
- args.stream_connected = this._handle_participant_stream_connected.bind(this);
- args.stream_disconnected = this._handle_participant_stream_disconnected.bind(this);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _generate_participant_session_args > ' + e, 1);
- } finally {
- return args;
- }
- },
-
- /**
- * Autoconfigures MUC room password
- * @private
- */
- _autoconfigure_room_password: function() {
- try {
- // Build stanza
- stanza = new JSJaCIQ();
-
- stanza.setTo(this.get_to());
- stanza.setType(JSJAC_JINGLE_IQ_TYPE_GET);
-
- stanza.setQuery(NS_JABBER_MUC_OWNER);
-
- var _this = this;
-
- this.get_connection().send(stanza, function(_stanza) {
- if(_this.get_net_trace()) _this.get_debug().log('[JSJaCJingle:muji] _autoconfigure_room_password > Incoming packet received' + '\n\n' + _stanza.xml());
-
- if(_stanza.getType() === JSJAC_JINGLE_IQ_TYPE_ERROR)
- _this.get_debug().log('[JSJaCJingle:muji] _autoconfigure_room_password > Could not get room configuration.', 1);
- else
- _this._receive_autoconfigure_room_password(_stanza);
- });
-
- if(this.get_net_trace()) this.get_debug().log('[JSJaCJingle:muji] _autoconfigure_room_password > Outgoing packet sent' + '\n\n' + stanza.xml());
-
- this.get_debug().log('[JSJaCJingle:muji] _autoconfigure_room_password > Getting room configuration...', 4);
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _autoconfigure_room_password > ' + e, 1);
- }
- },
-
- /**
- * Receives MUC room password configuration
- * @private
- * @param {JSJaCPacket} stanza
- */
- _receive_autoconfigure_room_password: function(stanza) {
- try {
- var parse_obj = this._parse_autoconfigure_room_password(stanza);
-
- this._set_password(parse_obj.password);
-
- if(parse_obj.password != parse_obj.old_password) {
- this._send_autoconfigure_room_password(stanza, parse_obj);
- } else {
- this.get_debug().log('[JSJaCJingle:muji] _parse_autoconfigure_room_password > Room password already configured (password: ' + parse_obj.password + ').', 2);
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _receive_autoconfigure_room_password > ' + e, 1);
- }
- },
-
- /**
- * Parses MUC room password configuration
- * @private
- * @param {JSJaCPacket} stanza
- * @returns {Object} Parse results
- */
- _parse_autoconfigure_room_password: function(stanza) {
- var i,
- x_data_sel, field_item_sel, password_field_sel, password_value_sel,
- old_password, password;
-
- try {
- // Get stanza items
- query_sel = stanza.getQuery(NS_JABBER_MUC_OWNER);
-
- if(!query_sel) throw 'No query element received.';
-
- x_data_sel = this.utils.stanza_get_element(query_sel, 'x', NS_JABBER_DATA);
- if(!x_data_sel || x_data_sel.length === 0) throw 'No X data element received.';
-
- x_data_sel = x_data_sel[0];
-
- field_item_sel = this.utils.stanza_get_element(x_data_sel, 'field', NS_JABBER_DATA);
- if(!field_item_sel || field_item_sel.length === 0) throw 'No field element received.';
-
- for(i = 0; i < field_item_sel.length; i++) {
- if(field_item_sel[i].getAttribute('var') === JSJAC_JINGLE_MUJI_MUC_CONFIG_SECRET) {
- password_field_sel = field_item_sel[i]; break;
- }
- }
-
- if(password_field_sel === undefined) throw 'No password field element received.';
-
- password_value_sel = this.utils.stanza_get_element(password_field_sel, 'value', NS_JABBER_DATA);
- if(!password_value_sel || password_value_sel.length === 0) throw 'No password field value element received.';
-
- password_value_sel = password_value_sel[0];
-
- // Get old password
- old_password = password_value_sel.nodeValue;
-
- // Apply password?
- if(this.get_password() && old_password != this.get_password()) {
- password = this.get_password();
- } else if(old_password) {
- password = old_password;
- } else {
- password = this.utils.generate_password();
- }
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _parse_autoconfigure_room_password > ' + e, 1);
- } finally {
- return {
- password : password,
- old_password : old_password,
- x_data_sel : x_data_sel,
- field_item_sel : field_item_sel,
- password_field_sel : password_field_sel,
- password_value_sel : password_value_sel,
- };
- }
- },
-
- /**
- * Receives MUC room password configuration
- * @private
- * @param {JSJaCPacket} stanza
- * @param {Object} parse_obj
- */
- _send_autoconfigure_room_password: function(stanza, parse_obj) {
- try {
- // Change stanza headers
- stanza.setID(this.get_id_new());
- stanza.setType(JSJAC_JINGLE_IQ_TYPE_SET);
- stanza.setTo(stanza.getFrom());
- stanza.setFrom(null);
-
- // Change stanza items
- parse_obj.x_data_sel.setAttribute('type', JSJAC_JINGLE_MUJI_MUC_OWNER_SUBMIT);
-
- parse_obj.password_value_sel.parentNode.removeChild(parse_obj.password_value_sel);
- parse_obj.password_field_sel.appendChild(
- stanza.buildNode('value', { 'xmlns': NS_JABBER_DATA }, parse_obj.password)
- );
-
- var _this = this;
-
- this.get_connection().send(stanza, function(_stanza) {
- if(_this.get_net_trace()) _this.get_debug().log('[JSJaCJingle:muji] _send_autoconfigure_room_password > Incoming packet received' + '\n\n' + _stanza.xml());
-
- if(_stanza.getType() === JSJAC_JINGLE_IQ_TYPE_ERROR) {
- _this._set_password(undefined);
-
- _this.get_debug().log('[JSJaCJingle:muji] _send_autoconfigure_room_password > Could not autoconfigure room password.', 1);
- } else {
- _this.get_debug().log('[JSJaCJingle:muji] _send_autoconfigure_room_password > Successfully autoconfigured room password.', 2);
- }
- });
-
- this.get_debug().log('[JSJaCJingle:muji] _send_autoconfigure_room_password > Autoconfiguring room password (password: ' + parse_obj.password + ')...', 4);
-
- if(this.get_net_trace()) this.get_debug().log('[JSJaCJingle:muji] _send_autoconfigure_room_password > Outgoing packet sent' + '\n\n' + stanza.xml());
- } catch(e) {
- this.get_debug().log('[JSJaCJingle:muji] _send_autoconfigure_room_password > ' + e, 1);
- }
- },
-
-
-
- /**
- * JSJSAC JINGLE MUJI GETTERS
- */
-
- /**
- * Gets the participants object
- * @public
- * @param {String} username
- * @returns {Object} Participants object
- */
- get_participants: function(username) {
- if(username)
- return this._participants[username];
-
- return this._participants;
- },
-
- /**
- * Gets the creator value
- * @public
- * @returns {String} Creator value
- */
- get_creator: function() {
- return this.get_to();
- },
-
- /**
- * Gets the incoming message callback function
- * @public
- * @event JSJaCJingleMuji#get_room_message_in
- * @returns {Function} Incoming message callback function
- */
- get_room_message_in: function() {
- return this._shortcut_get_handler(
- this._room_message_in
- );
- },
-
- /**
- * Gets the outgoing message callback function
- * @public
- * @event JSJaCJingleMuji#get_room_message_out
- * @returns {Function} Outgoing message callback function
- */
- get_room_message_out: function() {
- return this._shortcut_get_handler(
- this._room_message_out
- );
- },
-
- /**
- * Gets the incoming presence callback function
- * @public
- * @event JSJaCJingleMuji#get_room_presence_in
- * @returns {Function} Incoming presence callback function
- */
- get_room_presence_in: function() {
- return this._shortcut_get_handler(
- this._room_presence_in
- );
- },
-
- /**
- * Gets the outgoing presence callback function
- * @public
- * @event JSJaCJingleMuji#get_room_presence_out
- * @returns {Function} Outgoing presence callback function
- */
- get_room_presence_out: function() {
- return this._shortcut_get_handler(
- this._room_presence_out
- );
- },
-
- /**
- * Gets the session prepare pending callback function
- * @public
- * @event JSJaCJingleMuji#get_session_prepare_pending
- * @returns {Function} Session prepare pending callback function
- */
- get_session_prepare_pending: function() {
- return this._shortcut_get_handler(
- this._session_prepare_pending
- );
- },
-
- /**
- * Gets the session prepare success callback function
- * @public
- * @event JSJaCJingleMuji#get_session_prepare_success
- * @returns {Function} Session prepare success callback function
- */
- get_session_prepare_success: function() {
- return this._shortcut_get_handler(
- this._session_prepare_success
- );
- },
-
- /**
- * Gets the session prepare error callback function
- * @public
- * @event JSJaCJingleMuji#get_session_prepare_error
- * @returns {Function} Session prepare error callback function
- */
- get_session_prepare_error: function() {
- return this._shortcut_get_handler(
- this._session_prepare_error
- );
- },
-
- /**
- * Gets the session initiate pending callback function
- * @public
- * @event JSJaCJingleMuji#get_session_initiate_pending
- * @returns {Function} Session initiate pending callback function
- */
- get_session_initiate_pending: function() {
- return this._shortcut_get_handler(
- this._session_initiate_pending
- );
- },
-
- /**
- * Gets the session initiate success callback function
- * @public
- * @event JSJaCJingleMuji#get_session_initiate_success
- * @returns {Function} Session initiate success callback function
- */
- get_session_initiate_success: function() {
- return this._shortcut_get_handler(
- this._session_initiate_success
- );
- },
-
- /**
- * Gets the session initiate error callback function
- * @public
- * @event JSJaCJingleMuji#get_session_initiate_error
- * @returns {Function} Session initiate error callback function
- */
- get_session_initiate_error: function() {
- return this._shortcut_get_handler(
- this._session_initiate_error
- );
- },
-
- /**
- * Gets the session leave pending callback function
- * @public
- * @event JSJaCJingleMuji#get_session_leave_pending
- * @returns {Function} Session leave pending callback function
- */
- get_session_leave_pending: function() {
- return this._shortcut_get_handler(
- this._session_leave_pending
- );
- },
-
- /**
- * Gets the session leave success callback function
- * @public
- * @event JSJaCJingleMuji#get_session_leave_success
- * @returns {Function} Session leave success callback function
- */
- get_session_leave_success: function() {
- return this._shortcut_get_handler(
- this._session_leave_success
- );
- },
-
- /**
- * Gets the session leave error callback function
- * @public
- * @event JSJaCJingleMuji#get_session_leave_error
- * @returns {Function} Session leave error callback function
- */
- get_session_leave_error: function() {
- return this._shortcut_get_handler(
- this._session_leave_error
- );
- },
-
- /**
- * Gets the participant prepare callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_prepare
- * @returns {Function} Participant prepare callback function
- */
- get_participant_prepare: function() {
- return this._shortcut_get_handler(
- this._participant_prepare
- );
- },
-
- /**
- * Gets the participant initiate callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_initiate
- * @returns {Function} Participant initiate callback function
- */
- get_participant_initiate: function() {
- return this._shortcut_get_handler(
- this._participant_initiate
- );
- },
-
- /**
- * Gets the participant leave callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_leave
- * @returns {Function} Participant leave callback function
- */
- get_participant_leave: function() {
- return this._shortcut_get_handler(
- this._participant_leave
- );
- },
-
- /**
- * Gets the participant session initiate pending callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_session_initiate_pending
- * @returns {Function} Participant session initiate pending callback function
- */
- get_participant_session_initiate_pending: function() {
- return this._shortcut_get_handler(
- this._participant_session_initiate_pending
- );
- },
-
- /**
- * Gets the participant session initiate success callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_session_initiate_success
- * @returns {Function} Participant session initiate success callback function
- */
- get_participant_session_initiate_success: function() {
- return this._shortcut_get_handler(
- this._participant_session_initiate_success
- );
- },
-
- /**
- * Gets the participant session initiate error callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_session_initiate_error
- * @returns {Function} Participant session initiate error callback function
- */
- get_participant_session_initiate_error: function() {
- return this._shortcut_get_handler(
- this._participant_session_initiate_error
- );
- },
-
- /**
- * Gets the participant session initiate request callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_session_initiate_request
- * @returns {Function} Participant session initiate request callback function
- */
- get_participant_session_initiate_request: function() {
- return this._shortcut_get_handler(
- this._participant_session_initiate_request
- );
- },
-
- /**
- * Gets the participant session accept pending callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_session_accept_pending
- * @returns {Function} Participant session accept pending callback function
- */
- get_participant_session_accept_pending: function() {
- return this._shortcut_get_handler(
- this._participant_session_accept_pending
- );
- },
-
- /**
- * Gets the participant session accept success callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_session_accept_success
- * @returns {Function} Participant session accept success callback function
- */
- get_participant_session_accept_success: function() {
- return this._shortcut_get_handler(
- this._participant_session_accept_success
- );
- },
-
- /**
- * Gets the participant session accept error callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_session_accept_error
- * @returns {Function} Participant session accept error callback function
- */
- get_participant_session_accept_error: function() {
- return this._shortcut_get_handler(
- this._participant_session_accept_error
- );
- },
-
- /**
- * Gets the participant session accept request callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_session_accept_request
- * @returns {Function} Participant session accept request callback function
- */
- get_participant_session_accept_request: function() {
- return this._shortcut_get_handler(
- this._participant_session_accept_request
- );
- },
-
- /**
- * Gets the participant session info pending callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_session_info_pending
- * @returns {Function} Participant session info pending callback function
- */
- get_participant_session_info_pending: function() {
- return this._shortcut_get_handler(
- this._participant_session_info_pending
- );
- },
-
- /**
- * Gets the participant session info success callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_session_info_success
- * @returns {Function} Participant session info success callback function
- */
- get_participant_session_info_success: function() {
- return this._shortcut_get_handler(
- this._participant_session_info_success
- );
- },
-
- /**
- * Gets the participant session info error callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_session_info_error
- * @returns {Function} Participant session info error callback function
- */
- get_participant_session_info_error: function() {
- return this._shortcut_get_handler(
- this._participant_session_info_error
- );
- },
-
- /**
- * Gets the participant session info request callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_session_info_request
- * @returns {Function} Participant session info request callback function
- */
- get_participant_session_info_request: function() {
- return this._shortcut_get_handler(
- this._participant_session_info_request
- );
- },
-
- /**
- * Gets the participant session terminate pending callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_session_terminate_pending
- * @returns {Function} Participant session terminate pending callback function
- */
- get_participant_session_terminate_pending: function() {
- return this._shortcut_get_handler(
- this._participant_session_terminate_pending
- );
- },
-
- /**
- * Gets the participant session terminate success callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_session_terminate_success
- * @returns {Function} Participant session terminate success callback function
- */
- get_participant_session_terminate_success: function() {
- return this._shortcut_get_handler(
- this._participant_session_terminate_success
- );
- },
-
- /**
- * Gets the participant session terminate error callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_session_terminate_error
- * @returns {Function} Participant session terminate error callback function
- */
- get_participant_session_terminate_error: function() {
- return this._shortcut_get_handler(
- this._participant_session_terminate_error
- );
- },
-
- /**
- * Gets the participant session terminate request callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_session_terminate_request
- * @returns {Function} Participant session terminate request callback function
- */
- get_participant_session_terminate_request: function() {
- return this._shortcut_get_handler(
- this._participant_session_terminate_request
- );
- },
-
- /**
- * Gets the participant stream add event callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_stream_add
- * @returns {Function} Participant stream add event callback function
- */
- get_participant_stream_add: function() {
- return this._shortcut_get_handler(
- this._participant_stream_add
- );
- },
-
- /**
- * Gets the participant stream remove event callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_stream_remove
- * @returns {Function} Participant stream remove event callback function
- */
- get_participant_stream_remove: function() {
- return this._shortcut_get_handler(
- this._participant_stream_remove
- );
- },
-
- /**
- * Gets the participant stream connected event callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_stream_connected
- * @returns {Function} Participant stream connected event callback function
- */
- get_participant_stream_connected: function() {
- return this._shortcut_get_handler(
- this._participant_stream_connected
- );
- },
-
- /**
- * Gets the participant stream disconnected event callback function
- * @public
- * @event JSJaCJingleMuji#get_participant_stream_disconnected
- * @returns {Function} Participant stream disconnected event callback function
- */
- get_participant_stream_disconnected: function() {
- return this._shortcut_get_handler(
- this._participant_stream_disconnected
- );
- },
-
- /**
- * Gets the remote view add callback function
- * @public
- * @event JSJaCJingleMuji#get_add_remote_view
- * @returns {Function} Remote view add callback function
- */
- get_add_remote_view: function() {
- return this._shortcut_get_handler(
- this._add_remote_view
- );
- },
-
- /**
- * Gets the remote view removal callback function
- * @public
- * @event JSJaCJingleMuji#get_remove_remote_view
- * @returns {Function} Remote view removal callback function
- */
- get_remove_remote_view: function() {
- return this._shortcut_get_handler(
- this._remove_remote_view
- );
- },
-
- /**
- * Gets the local username
- * @public
- * @returns {String} Local username
- */
- get_username: function() {
- return this._username;
- },
-
- /**
- * Gets the room password
- * @public
- * @returns {String} Room password
- */
- get_password: function() {
- return this._password;
- },
-
- /**
- * Gets the password protect state
- * @public
- * @returns {Boolean} Password protect state
- */
- get_password_protect: function() {
- return this._password_protect;
- },
-
- /**
- * Gets the MUC to value
- * @public
- * @returns {String} To value for MUC
- */
- get_muc_to: function() {
- return (this.get_to() + '/' + this.get_username());
- },
-
- /**
- * Gets the prepended ID
- * @public
- * @returns {String} Prepended ID value
- */
- get_id_pre: function() {
- return JSJAC_JINGLE_STANZA_ID_PRE + '_' + (this.get_sid() || '0') + '_' + this.get_username() + '_';
- },
-
- /**
- * Gets the instance ID
- * @public
- * @returns {String} IID value
- */
- get_iid: function() {
- return this._iid;
- },
-
- /**
- * Gets the room owner state
- * @public
- * @returns {Boolean} Room owner state
- */
- get_is_room_owner: function() {
- return this._is_room_owner;
- },
-
-
-
- /**
- * JSJSAC JINGLE MUJI SETTERS
- */
-
- /**
- * Sets the room message in callback function
- * @private
- * @param {Function} room_message_in
- */
- _set_room_message_in: function(room_message_in) {
- this._room_message_in = room_message_in;
- },
-
- /**
- * Sets the room message out callback function
- * @private
- * @param {Function} room_message_out
- */
- _set_room_message_out: function(room_message_out) {
- this._room_message_out = room_message_out;
- },
-
- /**
- * Sets the room presence in callback function
- * @private
- * @param {Function} room_presence_in
- */
- _set_room_presence_in: function(room_presence_in) {
- this._room_presence_in = room_presence_in;
- },
-
- /**
- * Sets the room presence out callback function
- * @private
- * @param {Function} room_presence_out
- */
- _set_room_presence_out: function(room_presence_out) {
- this._room_presence_out = room_presence_out;
- },
-
- /**
- * Sets the session prepare pending callback function
- * @private
- * @param {Function} session_prepare_pending
- */
- _set_session_prepare_pending: function(session_prepare_pending) {
- this._session_prepare_pending = session_prepare_pending;
- },
-
- /**
- * Sets the session prepare success callback function
- * @private
- * @param {Function} session_prepare_success
- */
- _set_session_prepare_success: function(session_prepare_success) {
- this._session_prepare_success = session_prepare_success;
- },
-
- /**
- * Sets the session prepare error callback function
- * @private
- * @param {Function} session_prepare_error
- */
- _set_session_prepare_error: function(session_prepare_error) {
- this._session_prepare_error = session_prepare_error;
- },
-
- /**
- * Sets the session initiate pending callback function
- * @private
- * @param {Function} session_initiate_pending
- */
- _set_session_initiate_pending: function(session_initiate_pending) {
- this._session_initiate_pending = session_initiate_pending;
- },
-
- /**
- * Sets the session initiate success callback function
- * @private
- * @param {Function} session_initiate_success
- */
- _set_session_initiate_success: function(session_initiate_success) {
- this._session_initiate_success = session_initiate_success;
- },
-
- /**
- * Sets the session initiate error callback function
- * @private
- * @param {Function} session_initiate_error
- */
- _set_session_initiate_error: function(session_initiate_error) {
- this._session_initiate_error = session_initiate_error;
- },
-
- /**
- * Sets the session leave pending callback function
- * @private
- * @param {Function} session_leave_pending
- */
- _set_session_leave_pending: function(session_leave_pending) {
- this._session_leave_pending = session_leave_pending;
- },
-
- /**
- * Sets the session leave success callback function
- * @private
- * @param {Function} session_leave_success
- */
- _set_session_leave_success: function(session_leave_success) {
- this._session_leave_success = session_leave_success;
- },
-
- /**
- * Sets the session leave error callback function
- * @private
- * @param {Function} session_leave_error
- */
- _set_session_leave_error: function(session_leave_error) {
- this._session_leave_error = session_leave_error;
- },
-
- /**
- * Sets the participant prepare callback function
- * @private
- * @param {Function} participant_prepare
- */
- _set_participant_prepare: function(participant_prepare) {
- this._participant_prepare = participant_prepare;
- },
-
- /**
- * Sets the participant initiate callback function
- * @private
- * @param {Function} participant_initiate
- */
- _set_participant_initiate: function(participant_initiate) {
- this._participant_initiate = participant_initiate;
- },
-
- /**
- * Sets the participant leave callback function
- * @private
- * @param {Function} participant_leave
- */
- _set_participant_leave: function(participant_leave) {
- this._participant_leave = participant_leave;
- },
-
- /**
- * Sets the participant session initiate pending callback function
- * @private
- * @param {Function} participant_session_initiate_pending
- */
- _set_participant_session_initiate_pending: function(participant_session_initiate_pending) {
- this._participant_session_initiate_pending = participant_session_initiate_pending;
- },
-
- /**
- * Sets the participant session initiate success callback function
- * @private
- * @param {Function} participant_session_initiate_success
- */
- _set_participant_session_initiate_success: function(participant_session_initiate_success) {
- this._participant_session_initiate_success = participant_session_initiate_success;
- },
-
- /**
- * Sets the participant session initiate error callback function
- * @private
- * @param {Function} participant_session_initiate_error
- */
- _set_participant_session_initiate_error: function(participant_session_initiate_error) {
- this._participant_session_initiate_error = participant_session_initiate_error;
- },
-
- /**
- * Sets the participant session initiate request callback function
- * @private
- * @param {Function} participant_session_initiate_request
- */
- _set_participant_session_initiate_request: function(participant_session_initiate_request) {
- this._participant_session_initiate_request = participant_session_initiate_request;
- },
-
- /**
- * Sets the participant session accept pending callback function
- * @private
- * @param {Function} participant_session_accept_pending
- */
- _set_participant_session_accept_pending: function(participant_session_accept_pending) {
- this._participant_session_accept_pending = participant_session_accept_pending;
- },
-
- /**
- * Sets the participant session accept success callback function
- * @private
- * @param {Function} participant_session_accept_success
- */
- _set_participant_session_accept_success: function(participant_session_accept_success) {
- this._participant_session_accept_success = participant_session_accept_success;
- },
-
- /**
- * Sets the participant session accept error callback function
- * @private
- * @param {Function} participant_session_accept_error
- */
- _set_participant_session_accept_error: function(participant_session_accept_error) {
- this._participant_session_accept_error = participant_session_accept_error;
- },
-
- /**
- * Sets the participant session accept request callback function
- * @private
- * @param {Function} participant_session_accept_request
- */
- _set_participant_session_accept_request: function(participant_session_accept_request) {
- this._participant_session_accept_request = participant_session_accept_request;
- },
-
- /**
- * Sets the participant session info pending callback function
- * @private
- * @param {Function} participant_session_info_pending
- */
- _set_participant_session_info_pending: function(participant_session_info_pending) {
- this._participant_session_info_pending = participant_session_info_pending;
- },
-
- /**
- * Sets the participant session info success callback function
- * @private
- * @param {Function} participant_session_info_success
- */
- _set_participant_session_info_success: function(participant_session_info_success) {
- this._participant_session_info_success = participant_session_info_success;
- },
-
- /**
- * Sets the participant session info error callback function
- * @private
- * @param {Function} participant_session_info_error
- */
- _set_participant_session_info_error: function(participant_session_info_error) {
- this._participant_session_info_error = participant_session_info_error;
- },
-
- /**
- * Sets the participant session info request callback function
- * @private
- * @param {Function} participant_session_info_request
- */
- _set_participant_session_info_request: function(participant_session_info_request) {
- this._participant_session_info_request = participant_session_info_request;
- },
-
- /**
- * Sets the participant session terminate pending callback function
- * @private
- * @param {Function} participant_session_terminate_pending
- */
- _set_participant_session_terminate_pending: function(participant_session_terminate_pending) {
- this._participant_session_terminate_pending = participant_session_terminate_pending;
- },
-
- /**
- * Sets the participant session terminate success callback function
- * @private
- * @param {Function} participant_session_terminate_success
- */
- _set_participant_session_terminate_success: function(participant_session_terminate_success) {
- this._participant_session_terminate_success = participant_session_terminate_success;
- },
-
- /**
- * Sets the participant session terminate error callback function
- * @private
- * @param {Function} participant_session_terminate_error
- */
- _set_participant_session_terminate_error: function(participant_session_terminate_error) {
- this._participant_session_terminate_error = participant_session_terminate_error;
- },
-
- /**
- * Sets the participant session terminate request callback function
- * @private
- * @param {Function} participant_session_terminate_request
- */
- _set_participant_session_terminate_request: function(participant_session_terminate_request) {
- this._participant_session_terminate_request = participant_session_terminate_request;
- },
-
- /**
- * Sets the participant stream add event callback function
- * @private
- * @param {Function} participant_stream_add
- */
- _set_participant_stream_add: function(participant_stream_add) {
- this._participant_stream_add = participant_stream_add;
- },
-
- /**
- * Sets the participant stream remove event callback function
- * @private
- * @param {Function} participant_stream_remove
- */
- _set_participant_stream_remove: function(participant_stream_remove) {
- this._participant_stream_remove = participant_stream_remove;
- },
-
- /**
- * Sets the participant stream connected event callback function
- * @private
- * @param {Function} participant_stream_connected
- */
- _set_participant_stream_connected: function(participant_stream_connected) {
- this._participant_stream_connected = participant_stream_connected;
- },
-
- /**
- * Sets the participant stream disconnected event callback function
- * @private
- * @param {Function} participant_stream_disconnected
- */
- _set_participant_stream_disconnected: function(participant_stream_disconnected) {
- this._participant_stream_disconnected = participant_stream_disconnected;
- },
-
- /**
- * Sets the add remote view callback function
- * @private
- * @param {Function} add_remote_view
- */
- _set_add_remote_view: function(add_remote_view) {
- this._add_remote_view = add_remote_view;
- },
-
- /**
- * Sets the remove remote view pending callback function
- * @private
- * @param {Function} remove_remote_view
- */
- _set_remove_remote_view: function(remove_remote_view) {
- this._remove_remote_view = remove_remote_view;
- },
-
- /**
- * Sets the participants object
- * @private
- * @param {String} username
- * @param {Object} data_obj
- */
- _set_participants: function(username, data_obj) {
- if(username === null) {
- this._participants = {};
- } else if(data_obj === null) {
- if(username in this._participants)
- delete this._participants[username];
- } else if(username) {
- this._participants[username] = data_obj;
- }
- },
-
- /**
- * Sets the local username
- * @private
- * @param {String} username
- */
- _set_username: function(username) {
- this._username = username;
- },
-
- /**
- * Sets the room password
- * @private
- * @param {String} password
- */
- _set_password: function(password) {
- this._password = password;
- },
-
- /**
- * Sets the password protect state
- * @private
- * @param {Boolean} password_protect
- */
- _set_password_protect: function(password_protect) {
- this._password_protect = password_protect;
- },
-
- /**
- * Sets the instance ID
- * @private
- * @param {String} iid
- */
- _set_iid: function(iid) {
- this._iid = iid;
- },
-
- /**
- * Sets the room owner state
- * @private
- * @param {Boolean} is_room_owner
- */
- _set_is_room_owner: function(is_room_owner) {
- this._is_room_owner = is_room_owner;
- },
- }
-);
-/**
- * @fileoverview JSJaC Jingle library - Initialization broadcast lib (XEP-0353)
- *
- * @url https://github.com/valeriansaliou/jsjac-jingle
- * @depends https://github.com/sstrigler/JSJaC
- * @author Valérian Saliou https://valeriansaliou.name/
- * @license Mozilla Public License v2.0 (MPL v2.0)
- */
-
-
-/** @module jsjac-jingle/broadcast */
-/** @exports JSJaCJingleBroadcast */
-
-
-/**
- * Library initialization class.
- * @class
- * @classdesc Initialization broadcast class.
- * @requires nicolas-van/ring.js
- * @requires jsjac-jingle/main
- * @see {@link http://ringjs.neoname.eu/|Ring.js}
- * @see {@link http://stefan-strigler.de/jsjac-1.3.4/doc/|JSJaC Documentation}
- * @see {@link http://xmpp.org/extensions/xep-0353.html|XEP-0353: Jingle Message Initiation}
- */
-var JSJaCJingleBroadcast = new (ring.create(
- /** @lends JSJaCJingleBroadcast.prototype */
- {
- /**
- * Proposes a call
- * @public
- * @param {String} to
- * @param {Object} medias
- * @returns {String} Call ID
- */
- propose: function(to, medias, cb_timeout) {
- var id, self;
-
- try {
- self = this;
- id = this._send_remote_propose(to, medias);
-
- if(typeof cb_timeout == 'function') {
- setTimeout(function() {
- // Call answered
- if(self._exists_id(id) === false) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] propose > Propose successful.', 4);
- } else {
- cb_timeout(id);
-
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] propose > Propose timeout.', 2);
- }
- }, (JSJAC_JINGLE_BROADCAST_TIMEOUT * 1000));
- }
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] propose > ' + e, 1);
- } finally {
- return id;
- }
- },
-
- /**
- * Retracts from a call
- * @public
- * @param {String} to
- * @param {String} id
- */
- retract: function(to, id) {
- try {
- this._send_remote_retract(to, id);
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] retract > ' + e, 1);
- }
- },
-
- /**
- * Accepts a call
- * @public
- * @param {String} to
- * @param {String} id
- * @param {Object} medias
- */
- accept: function(to, id, medias) {
- try {
- this._register_id(id, medias);
-
- this._send_local_accept(id);
- this._send_remote_proceed(to, id);
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] accept > ' + e, 1);
- }
- },
-
- /**
- * Rejects a call
- * @public
- * @param {String} to
- * @param {String} id
- * @param {Object} medias
- */
- reject: function(to, id, medias) {
- try {
- this._register_id(id, medias);
-
- this._send_local_reject(id);
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] reject > ' + e, 1);
- }
- },
-
- /**
- * Handles a call
- * @public
- * @param {JSJaCPacket} stanza
- */
- handle: function(stanza) {
- var i,
- is_handled, stanza_child,
- description, cur_description, cur_media,
- proposed_medias,
- id;
-
- try {
- is_handled = false;
-
- stanza_child = stanza.getChild(
- '*', NS_JINGLE_MESSAGE
- );
-
- if(stanza_child) {
- var _this = this;
-
- var id_unregister_fn = function(stanza) {
- id = _this.get_call_id(stanza);
- if(id) _this._unregister_id(id);
- };
-
- switch(stanza_child.tagName) {
- case JSJAC_JINGLE_MESSAGE_ACTION_PROPOSE:
- proposed_medias = {};
-
- description = stanza_child.getElementsByTagNameNS(
- NS_JINGLE_APPS_RTP, 'description'
- );
-
- for(i = 0; i < description.length; i++) {
- cur_description = description[i];
-
- if(cur_description) {
- cur_media = cur_description.getAttribute('media');
-
- if(cur_media && cur_media in JSJAC_JINGLE_MEDIAS) {
- proposed_medias[cur_media] = 1;
- }
- }
- }
-
- JSJaCJingleStorage.get_single_propose()(stanza, proposed_medias);
-
- is_handled = true; break;
-
- case JSJAC_JINGLE_MESSAGE_ACTION_RETRACT:
- JSJaCJingleStorage.get_single_retract()(stanza);
- id_unregister_fn(stanza);
-
- is_handled = true; break;
-
- case JSJAC_JINGLE_MESSAGE_ACTION_ACCEPT:
- JSJaCJingleStorage.get_single_accept()(stanza);
- id_unregister_fn(stanza);
-
- is_handled = true; break;
-
- case JSJAC_JINGLE_MESSAGE_ACTION_REJECT:
- JSJaCJingleStorage.get_single_reject()(stanza);
- id_unregister_fn(stanza);
-
- is_handled = true; break;
-
- case JSJAC_JINGLE_MESSAGE_ACTION_PROCEED:
- JSJaCJingleStorage.get_single_proceed()(stanza);
- id_unregister_fn(stanza);
-
- is_handled = true; break;
- }
- }
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] handle > ' + e, 1);
- } finally {
- return is_handled;
- }
- },
-
- /**
- * Returns the call ID
- * @public
- * @param {JSJaCPacket} stanza
- * @returns {String} Call ID
- */
- get_call_id: function(stanza) {
- var call_id = null;
-
- try {
- var stanza_child = stanza.getChild(
- '*', NS_JINGLE_MESSAGE
- );
-
- if(stanza_child) {
- call_id = stanza_child.getAttribute('id') || null;
- }
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] get_call_id > ' + e, 1);
- } finally {
- return call_id;
- }
- },
-
- /**
- * Returns the call medias
- * @public
- * @param {String} id
- * @returns {Object} Call medias
- */
- get_call_medias: function(id) {
- var call_medias = [];
-
- try {
- call_medias = JSJaCJingleStorage.get_broadcast_ids(id) || [];
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] get_call_medias > ' + e, 1);
- } finally {
- return call_medias;
- }
- },
-
- /**
- * Broadcasts a Jingle session proposal (remote packet)
- * @private
- * @see {@link http://xmpp.org/extensions/xep-0353.html#intent|XEP-0353 - Propose}
- */
- _send_remote_propose: function(to, medias) {
- var i, cur_media, propose, id;
-
- try {
- id = this._register_id(null, medias);
- propose = this._build_stanza(
- to, id, JSJAC_JINGLE_MESSAGE_ACTION_PROPOSE
- );
-
- if(medias && typeof medias == 'object' && medias.length) {
- for(i = 0; i < medias.length; i++) {
- cur_media = medias[i];
-
- if(cur_media) {
- propose[1].appendChild(
- propose[0].buildNode('description', {
- 'xmlns': NS_JINGLE_APPS_RTP,
- 'media': cur_media
- })
- );
- }
- }
- }
-
- this._send_stanza(propose);
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] _send_remote_propose > ' + e, 1);
- } finally {
- return id;
- }
- },
-
- /**
- * Broadcasts a Jingle session retract (remote packet)
- * @private
- * @see {@link http://xmpp.org/extensions/xep-0353.html#retract|XEP-0353 - Retract}
- */
- _send_remote_retract: function(to, id) {
- try {
- if(this._exists_id(id) === true) {
- var retract = this._build_stanza(
- to, id, JSJAC_JINGLE_MESSAGE_ACTION_RETRACT
- );
-
- this._send_stanza(retract);
- this._unregister_id(id);
- } else {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] _send_remote_retract > Cannot retract, target ID not existing.', 0);
- }
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] _send_remote_retract > ' + e, 1);
- }
- },
-
- /**
- * Broadcasts a Jingle session proceed (remote packet)
- * @private
- * @see {@link http://xmpp.org/extensions/xep-0353.html#accept|XEP-0353 - Accept}
- */
- _send_remote_proceed: function(to, id) {
- try {
- // ID shouldn't exist at this point since we're the receiving party
- if(this._exists_id(id) === true) {
- var proceed = this._build_stanza(
- to, id, JSJAC_JINGLE_MESSAGE_ACTION_PROCEED
- );
-
- this._send_stanza(proceed);
- this._unregister_id(id);
- } else {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] _send_remote_proceed > Cannot proceed, target ID not existing.', 0);
- }
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] _send_remote_proceed > ' + e, 1);
- }
- },
-
- /**
- * Broadcasts a Jingle session accept (local packet)
- * @private-
- * @see {@link http://xmpp.org/extensions/xep-0353.html#accept|XEP-0353 - Accept}
- */
- _send_local_accept: function(id) {
- try {
- // ID shouldn't exist at this point since we're the receiving party
- if(this._exists_id(id) === true) {
- var accept = this._build_stanza(
- null, id, JSJAC_JINGLE_MESSAGE_ACTION_ACCEPT
- );
-
- this._send_stanza(accept);
- } else {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] _send_local_accept > Cannot accept, target ID not existing.', 0);
- }
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] _send_local_accept > ' + e, 1);
- }
- },
-
- /**
- * Broadcasts a Jingle session reject (local packet)
- * @private
- * @see {@link http://xmpp.org/extensions/xep-0353.html#reject|XEP-0353 - Reject}
- */
- _send_local_reject: function(id) {
- try {
- // ID shouldn't exist at this point since we're the receiving party
- if(this._exists_id(id) === true) {
- var reject = this._build_stanza(
- null, id, JSJAC_JINGLE_MESSAGE_ACTION_REJECT
- );
-
- this._send_stanza(reject);
- } else {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] _send_local_reject > Cannot reject, target ID not existing.', 0);
- }
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] _send_local_reject > ' + e, 1);
- }
- },
-
- /**
- * Builds a XEP-0353 stanza
- * @private
- */
- _build_stanza: function(to, id, action) {
- stanza_arr = [];
-
- try {
- var connection, stanza, node;
-
- stanza = new JSJaCMessage();
-
- // Set to connection user?
- if(to === null) {
- connection = JSJaCJingleStorage.get_connection();
- to = (connection.username + '@' + connection.domain);
- }
-
- stanza.setTo(to);
-
- node = stanza.getNode().appendChild(
- stanza.buildNode(action, {
- 'xmlns': NS_JINGLE_MESSAGE,
- 'id': id
- })
- );
-
- stanza_arr = [stanza, node];
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] _build_stanza > ' + e, 1);
- } finally {
- return stanza_arr;
- }
- },
-
- /**
- * Sends a XEP-0353 stanza
- * @private
- */
- _send_stanza: function(stanza_arr) {
- try {
- JSJaCJingleStorage.get_connection().send(
- stanza_arr[0]
- );
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] _send_stanza > ' + e, 1);
- }
- },
-
- /**
- * Returns whether an ID exists or not
- * @private
- */
- _exists_id: function(id) {
- var is_existing = false;
-
- try {
- is_existing = (JSJaCJingleStorage.get_broadcast_ids(id) !== null) && true;
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] _exists_id > ' + e, 1);
- } finally {
- return is_existing;
- }
- },
-
- /**
- * Registers an ID
- * @private
- */
- _register_id: function(id, medias) {
- try {
- id = id || JSJaCUtils.cnonce(16);
-
- JSJaCJingleStorage.set_broadcast_ids(id, medias);
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] _register_id > ' + e, 1);
- } finally {
- return id;
- }
- },
-
- /**
- * Unregisters an ID
- * @private
- */
- _unregister_id: function(id) {
- try {
- JSJaCJingleStorage.set_broadcast_ids(id, null, true);
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:broadcast] _unregister_id > ' + e, 1);
- }
- },
- }
-))();
-
-/**
- * @fileoverview JSJaC Jingle library - Initialization components
- *
- * @url https://github.com/valeriansaliou/jsjac-jingle
- * @depends https://github.com/sstrigler/JSJaC
- * @author Valérian Saliou https://valeriansaliou.name/
- * @license Mozilla Public License v2.0 (MPL v2.0)
- */
-
-
-/** @module jsjac-jingle/init */
-/** @exports JSJaCJingleInit */
-
-
-/**
- * Library initialization class.
- * @class
- * @classdesc Library initialization class.
- * @requires nicolas-van/ring.js
- * @requires jsjac-jingle/main
- * @see {@link http://ringjs.neoname.eu/|Ring.js}
- * @see {@link http://stefan-strigler.de/jsjac-1.3.4/doc/|JSJaC Documentation}
- */
-var JSJaCJingleInit = new (ring.create(
- /** @lends JSJaCJingleInit.prototype */
- {
- /**
- * Query the server for external services
- * @private
- */
- _extdisco: function() {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _extdisco > Discovering available services...', 2);
-
- try {
- // Pending state (defer other requests)
- JSJaCJingle._defer(true);
-
- // Build request
- var request = new JSJaCIQ();
-
- request.setTo(JSJaCJingleStorage.get_connection().domain);
- request.setType(JSJAC_JINGLE_IQ_TYPE_GET);
-
- request.getNode().appendChild(request.buildNode('services', { 'xmlns': NS_EXTDISCO }));
-
- JSJaCJingleStorage.get_connection().send(request, function(response) {
- try {
- // Parse response
- if(response.getType() == JSJAC_JINGLE_IQ_TYPE_RESULT) {
- var i,
- service_arr, cur_service,
- cur_host, cur_password, cur_port, cur_transport, cur_type, cur_username,
- store_obj;
-
- var services = response.getChild('services', NS_EXTDISCO);
-
- if(services) {
- service_arr = services.getElementsByTagNameNS(NS_EXTDISCO, 'service');
-
- for(i = 0; i < service_arr.length; i++) {
- cur_service = service_arr[i];
-
- cur_host = cur_service.getAttribute('host') || null;
- cur_port = cur_service.getAttribute('port') || null;
- cur_transport = cur_service.getAttribute('transport') || null;
- cur_type = cur_service.getAttribute('type') || null;
-
- cur_username = cur_service.getAttribute('username') || null;
- cur_password = cur_service.getAttribute('password') || null;
-
- if(!cur_host || !cur_type) continue;
-
- if(!(cur_type in JSJaCJingleStorage.get_extdisco())) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _extdisco > handle > Service skipped (type: ' + cur_type + ', host: ' + cur_host + ', port: ' + cur_port + ', transport: ' + cur_transport + ').', 4);
- continue;
- }
-
- store_obj = {
- 'host' : cur_host,
- 'port' : cur_port,
- 'transport' : cur_transport,
- 'type' : cur_type
- };
-
- if(cur_type == 'turn') {
- store_obj.username = cur_username;
- store_obj.password = cur_password;
- }
-
- JSJaCJingleStorage.get_extdisco()[cur_type].push(store_obj);
-
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _extdisco > handle > Service stored (type: ' + cur_type + ', host: ' + cur_host + ', port: ' + cur_port + ', transport: ' + cur_transport + ').', 4);
- }
- }
-
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _extdisco > handle > Discovered available services.', 2);
- } else {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _extdisco > handle > Could not discover services (server might not support XEP-0215).', 0);
- }
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _extdisco > handle > ' + e, 1);
- }
-
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _extdisco > Ready.', 2);
-
- // Execute deferred requests
- JSJaCJingle._defer(false);
- });
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _extdisco > ' + e, 1);
-
- // Execute deferred requests
- JSJaCJingle._defer(false);
- }
- },
-
- /**
- * Query the server for Jingle Relay Nodes services
- * @private
- */
- _relaynodes: function() {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _relaynodes > Discovering available Jingle Relay Nodes services...', 2);
-
- try {
- // Pending state (defer other requests)
- JSJaCJingle._defer(true);
-
- // Build request
- var request = new JSJaCIQ();
-
- request.setTo(JSJaCJingleStorage.get_connection().domain);
- request.setType(JSJAC_JINGLE_IQ_TYPE_GET);
-
- request.getNode().appendChild(request.buildNode('services', { 'xmlns': NS_JABBER_JINGLENODES }));
-
- JSJaCJingleStorage.get_connection().send(request, function(response) {
- try {
- // Parse response
- if(response.getType() == JSJAC_JINGLE_IQ_TYPE_RESULT) {
- var i,
- stun_arr, cur_stun,
- cur_policy, cur_address, cur_protocol;
-
- var services = response.getChild('services', NS_JABBER_JINGLENODES);
-
- if(services) {
- // Parse STUN servers
- stun_arr = services.getElementsByTagNameNS(NS_JABBER_JINGLENODES, 'stun');
-
- for(i = 0; i < stun_arr.length; i++) {
- cur_stun = stun_arr[i];
-
- cur_policy = cur_stun.getAttribute('policy') || null;
- cur_address = cur_stun.getAttribute('address') || null;
- cur_port = cur_stun.getAttribute('port') || null;
- cur_protocol = cur_stun.getAttribute('protocol') || null;
-
- if(!cur_address || !cur_protocol || !cur_policy || (cur_policy && cur_policy != 'public')) continue;
-
- JSJaCJingleStorage.get_relaynodes().stun.push({
- 'host' : cur_address,
- 'port' : cur_port,
- 'transport' : cur_protocol,
- 'type' : 'stun'
- });
-
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _relaynodes > handle > STUN service stored (address: ' + cur_address + ', port: ' + cur_port + ', policy: ' + cur_policy + ', protocol: ' + cur_protocol + ').', 4);
- }
- }
-
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _relaynodes > handle > Discovered available Jingle Relay Nodes services.', 2);
- } else {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _relaynodes > handle > Could not discover Jingle Relay Nodes services (server might not support XEP-0278).', 0);
- }
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _relaynodes > handle > ' + e, 1);
- }
-
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _relaynodes > Ready.', 2);
-
- // Execute deferred requests
- JSJaCJingle._defer(false);
- });
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _relaynodes > ' + e, 1);
-
- // Execute deferred requests
- JSJaCJingle._defer(false);
- }
- },
-
- /**
- * Query some external APIs for fallback STUN/TURN (must be configured)
- * @private
- * @param {String} fallback_url
- */
- _fallback: function(fallback_url) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _fallback > Discovering fallback services...', 2);
-
- try {
- // Pending state (defer other requests)
- JSJaCJingle._defer(true);
-
- // Generate fallback API URL
- fallback_url += '?username=' +
- encodeURIComponent(JSJaCJingleStorage.get_connection().username + '@' + JSJaCJingleStorage.get_connection().domain);
-
- // Proceed request
- var xhr = new XMLHttpRequest();
- xhr.open('GET', fallback_url, true);
-
- xhr.onreadystatechange = function() {
- if(xhr.readyState === 4) {
- // Success?
- if(xhr.status === 200) {
- var data = JSON.parse(xhr.responseText);
-
- var cur_parse,
- i, cur_url,
- cur_type, cur_host, cur_port, cur_transport,
- cur_username, cur_password,
- store_obj;
-
- if(data.uris && data.uris.length) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _fallback > handle > Parsing ' + data.uris.length + ' URIs...', 2);
-
- for(i in data.uris) {
- cur_url = data.uris[i];
-
- if(cur_url) {
- // Parse current URL
- cur_parse = R_JSJAC_JINGLE_SERVICE_URI.exec(cur_url);
-
- if(cur_parse) {
- cur_type = cur_parse[1] || null;
- cur_host = cur_parse[2] || null;
- cur_port = cur_parse[3] || null;
- cur_transport = cur_parse[4] || null;
-
- cur_username = data.username || null;
- cur_password = data.password || null;
-
- if(!cur_host || !cur_type) continue;
-
- if(!(cur_type in JSJaCJingleStorage.get_fallback())) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _fallback > handle > Service skipped (type: ' + cur_type + ', host: ' + cur_host + ', port: ' + cur_port + ', transport: ' + cur_transport + ').', 4);
- continue;
- }
-
- store_obj = {
- 'host' : cur_host,
- 'port' : cur_port,
- 'transport' : cur_transport,
- 'type' : cur_type
- };
-
- if(cur_type == 'turn') {
- store_obj.username = cur_username;
- store_obj.password = cur_password;
- }
-
- JSJaCJingleStorage.get_fallback()[cur_type].push(store_obj);
-
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _fallback > handle > Fallback service stored (type: ' + cur_type + ', host: ' + cur_host + ', port: ' + cur_port + ', transport: ' + cur_transport + ').', 4);
- } else {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _fallback > handle > Fallback service not stored, weird URI (' + cur_url + ').', 0);
- }
- }
- }
-
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _fallback > handle > Finished parsing URIs.', 2);
- } else {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _fallback > handle > No URI to parse.', 2);
- }
-
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _fallback > handle > Discovered fallback services.', 2);
- } else {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _fallback > handle > Could not discover fallback services (API malfunction).', 0);
- }
-
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _fallback > Ready.', 2);
-
- // Execute deferred requests
- JSJaCJingle._defer(false);
- }
- };
-
- xhr.send();
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:init] _fallback > ' + e, 1);
- }
- },
- }
-))();
-/**
- * @fileoverview JSJaC Jingle library - Common components
- *
- * @url https://github.com/valeriansaliou/jsjac-jingle
- * @depends https://github.com/sstrigler/JSJaC
- * @author Valérian Saliou https://valeriansaliou.name/
- * @license Mozilla Public License v2.0 (MPL v2.0)
- */
-
-
-/** @module jsjac-jingle/main */
-/** @exports JSJaCJingle */
-
-
-/**
- * Library main class.
- * @instance
- * @requires nicolas-van/ring.js
- * @requires sstrigler/JSJaC
- * @requires jsjac-jingle/init
- * @requires jsjac-jingle/single
- * @requires jsjac-jingle/muji
- * @see {@link http://ringjs.neoname.eu/|Ring.js}
- * @see {@link http://stefan-strigler.de/jsjac-1.3.4/doc/|JSJaC Documentation}
- */
-var JSJaCJingle = new (ring.create(
- /** @lends JSJaCJingle.prototype */
- {
- /**
- * Starts a new Jingle session
- * @public
- * @param {String} type
- * @param {Object} [args]
- * @returns {JSJaCJingleSingle|JSJaCJingleMuji} JSJaCJingle session instance
- */
- session: function(type, args) {
- var jingle;
-
- try {
- switch(type) {
- case JSJAC_JINGLE_SESSION_SINGLE:
- jingle = new JSJaCJingleSingle(args);
- break;
-
- case JSJAC_JINGLE_SESSION_MUJI:
- jingle = new JSJaCJingleMuji(args);
- break;
-
- default:
- throw ('Unknown session type: ' + type);
- }
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] session > ' + e, 1);
- } finally {
- return jingle;
- }
- },
-
- /**
- * Listens for Jingle events
- * @public
- * @param {Object} [args]
- * @property {JSJaCConnection} [args.connection] - The connection to be attached to.
- * @property {Function} [args.single_initiate] - The Jingle session initiate request custom handler.
- * @property {Function} [args.single_propose] - The Jingle session propose request custom handler.
- * @property {Function} [args.single_retract] - The Jingle session retract request custom handler.
- * @property {Function} [args.single_accept] - The Jingle session accept request custom handler.
- * @property {Function} [args.single_reject] - The Jingle session reject request custom handler.
- * @property {Function} [args.single_proceed] - The Jingle session proceed request custom handler.
- * @property {Function} [args.muji_invite] - The Muji session invite message custom handler.
- * @property {JSJaCDebugger} [args.debug] - A reference to a debugger implementing the JSJaCDebugger interface.
- * @property {Boolean} [args.extdisco] - Whether or not to discover external services as per XEP-0215.
- * @property {Boolean} [args.relaynodes] - Whether or not to discover relay nodes as per XEP-0278.
- * @property {Boolean} [args.fallback] - Whether or not to request STUN/TURN from a fallback URL.
- * @see {@link https://github.com/valeriansaliou/jsjac-jingle/blob/master/examples/fallback.json|Fallback JSON Sample} - Fallback URL format.
- */
- listen: function(args) {
- try {
- // Apply arguments
- if(args && args.connection)
- JSJaCJingleStorage.set_connection(args.connection);
- if(args && args.single_initiate)
- JSJaCJingleStorage.set_single_initiate(args.single_initiate);
- if(args && args.single_propose)
- JSJaCJingleStorage.set_single_propose(args.single_propose);
- if(args && args.single_retract)
- JSJaCJingleStorage.set_single_retract(args.single_retract);
- if(args && args.single_accept)
- JSJaCJingleStorage.set_single_accept(args.single_accept);
- if(args && args.single_reject)
- JSJaCJingleStorage.set_single_reject(args.single_reject);
- if(args && args.single_proceed)
- JSJaCJingleStorage.set_single_proceed(args.single_proceed);
- if(args && args.muji_invite)
- JSJaCJingleStorage.set_muji_invite(args.muji_invite);
- if(args && args.debug)
- JSJaCJingleStorage.set_debug(args.debug);
-
- // Incoming IQs handler
- var cur_type, route_map = {};
- route_map[JSJAC_JINGLE_STANZA_IQ] = this._route_iq;
- route_map[JSJAC_JINGLE_STANZA_MESSAGE] = this._route_message;
- route_map[JSJAC_JINGLE_STANZA_PRESENCE] = this._route_presence;
-
- for(cur_type in route_map) {
- JSJaCJingleStorage.get_connection().registerHandler(
- cur_type,
- route_map[cur_type].bind(this)
- );
- }
-
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] listen > Listening.', 2);
-
- // Discover available network services
- if(!args || args.extdisco !== false)
- JSJaCJingleInit._extdisco();
- if(!args || args.relaynodes !== false)
- JSJaCJingleInit._relaynodes();
- if(args.fallback && typeof args.fallback === 'string')
- JSJaCJingleInit._fallback(args.fallback);
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] listen > ' + e, 1);
- }
- },
-
- /**
- * Maps the Jingle disco features
- * @public
- * @returns {Array} Feature namespaces
- */
- disco: function() {
- // Check for listen status
- var has_muji = (typeof JSJaCJingleStorage.get_muji_invite_raw() == 'function' && true);
- var has_jingle = ((has_muji || (typeof JSJaCJingleStorage.get_single_initiate_raw() == 'function')) && true);
-
- if(JSJAC_JINGLE_AVAILABLE && has_jingle) {
- if(has_muji) {
- return MAP_DISCO_JINGLE.concat(MAP_DISCO_MUJI);
- } else {
- return MAP_DISCO_JINGLE;
- }
- }
-
- return [];
- },
-
- /**
- * Routes Jingle IQ stanzas
- * @private
- * @param {JSJaCPacket} stanza
- */
- _route_iq: function(stanza) {
- try {
- var from = stanza.getFrom();
-
- if(from) {
- var jid_obj = new JSJaCJID(from);
- var from_bare = (jid_obj.getNode() + '@' + jid_obj.getDomain());
-
- // Single or Muji?
- var is_muji = (this._read(JSJAC_JINGLE_SESSION_MUJI, from_bare) !== null);
- var is_single = !is_muji;
-
- var action = null;
- var sid = null;
- var session_route = null;
-
- // Route the incoming stanza
- var jingle = stanza.getChild('jingle', NS_JINGLE);
-
- if(jingle) {
- sid = jingle.getAttribute('sid');
- action = jingle.getAttribute('action');
- } else {
- var stanza_id = stanza.getID();
-
- if(stanza_id) {
- var is_jingle = stanza_id.indexOf(JSJAC_JINGLE_STANZA_ID_PRE + '_') !== -1;
-
- if(is_jingle) {
- var stanza_id_split = stanza_id.split('_');
- sid = stanza_id_split[1];
- }
- }
- }
-
- // WebRTC not available ATM?
- if(jingle && !JSJAC_JINGLE_AVAILABLE) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] _route_iq > Dropped Jingle packet (WebRTC not available).', 0);
-
- (new JSJaCJingleSingle({ to: from }))._send_error(stanza, XMPP_ERROR_SERVICE_UNAVAILABLE);
- } else if(is_muji) {
- var username, participant;
-
- username = jid_obj.getResource();
- session_route = this._read(JSJAC_JINGLE_SESSION_MUJI, from_bare);
- participant = session_route.get_participants(username);
-
- // Muji: new session? Or registered one?
- if(participant && participant.session &&
- (participant.session instanceof JSJaCJingleSingle)) {
- // Route to Single session
- var session_route_single = this._read(
- JSJAC_JINGLE_SESSION_SINGLE,
- participant.session.get_sid()
- );
-
- if(session_route_single !== null) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] _route_iq > [' + username + '] > Routed to Muji participant session (sid: ' + sid + ').', 2);
-
- session_route_single.handle(stanza);
- } else if(stanza.getType() == JSJAC_JINGLE_IQ_TYPE_SET && from) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] _route_iq > Unknown Muji participant session route (sid: ' + sid + ').', 0);
-
- (new JSJaCJingleSingle({ to: from }))._send_error(stanza, JSJAC_JINGLE_ERROR_UNKNOWN_SESSION);
- }
- } else if(sid) {
- if(action == JSJAC_JINGLE_ACTION_SESSION_INITIATE) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] _route_iq > [' + username + '] > New Muji participant session (sid: ' + sid + ').', 2);
-
- session_route._create_participant_session(username).handle(stanza);
- } else if(stanza.getType() == JSJAC_JINGLE_IQ_TYPE_SET && from) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] _route_iq > Unknown Muji participant session (sid: ' + sid + ').', 0);
-
- (new JSJaCJingleSingle({ to: from }))._send_error(stanza, JSJAC_JINGLE_ERROR_UNKNOWN_SESSION);
- }
- }
- } else if(is_single) {
- // Single: new session? Or registered one?
- session_route = this._read(JSJAC_JINGLE_SESSION_SINGLE, sid);
-
- if(action == JSJAC_JINGLE_ACTION_SESSION_INITIATE && session_route === null) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] _route_iq > New Jingle session (sid: ' + sid + ').', 2);
-
- JSJaCJingleStorage.get_single_initiate()(stanza);
- } else if(sid) {
- if(session_route !== null) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] _route_iq > Routed to Jingle session (sid: ' + sid + ').', 2);
-
- session_route.handle(stanza);
- } else if(stanza.getType() == JSJAC_JINGLE_IQ_TYPE_SET && from) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] _route_iq > Unknown Jingle session (sid: ' + sid + ').', 0);
-
- (new JSJaCJingleSingle({ to: from }))._send_error(stanza, JSJAC_JINGLE_ERROR_UNKNOWN_SESSION);
- }
- }
- } else {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] _route_iq > No route to session, not Jingle nor Muji (sid: ' + sid + ').', 0);
- }
- }
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] _route_iq > ' + e, 1);
- }
- },
-
- /**
- * Routes Jingle message stanzas
- * @private
- * @param {JSJaCPacket} stanza
- */
- _route_message: function(stanza) {
- try {
- var from = stanza.getFrom();
-
- if(from) {
- var jid = new JSJaCJID(from);
-
- // Broadcast message?
- var is_handled_broadcast = JSJaCJingleBroadcast.handle(stanza);
-
- if(is_handled_broadcast === true) {
- // XEP-0353: Jingle Message Initiation
- // Nothing to do there.
- } else {
- // Muji?
- var room = jid.getNode() + '@' + jid.getDomain();
-
- var session_route = this._read(JSJAC_JINGLE_SESSION_MUJI, room);
-
- var x_conference = stanza.getChild('x', NS_JABBER_CONFERENCE);
- var x_invite = stanza.getChild('x', NS_MUJI_INVITE);
-
- var is_invite = (x_conference && x_invite && true);
-
- if(is_invite === true) {
- if(session_route === null) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] _route_message > Muji invite received (room: ' + room + ').', 2);
-
- // Read invite data
- var err = 0;
- var args = {
- from : (from || err++),
- jid : (x_conference.getAttribute('jid') || err++),
- password : (x_conference.getAttribute('password') || null),
- reason : (x_conference.getAttribute('reason') || null),
- media : (x_invite.getAttribute('media') || err++)
- };
-
- if(err === 0) {
- JSJaCJingleStorage.get_muji_invite()(stanza, args);
- } else {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] _route_message > Dropped invite because incomplete (room: ' + room + ').', 0);
- }
- } else {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] _route_message > Dropped invite because Muji already joined (room: ' + room + ').', 0);
- }
- } else {
- if(session_route !== null) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] _route_message > Routed to Jingle session (room: ' + room + ').', 2);
-
- session_route.handle_message(stanza);
- }
- }
- }
- }
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] _route_message > ' + e, 1);
- }
- },
-
- /**
- * Routes Jingle presence stanzas
- * @private
- * @param {JSJaCPacket} stanza
- */
- _route_presence: function(stanza) {
- try {
- // Muji?
- var from = stanza.getFrom();
-
- if(from) {
- var jid = new JSJaCJID(from);
- var room = jid.getNode() + '@' + jid.getDomain();
-
- var session_route = this._read(JSJAC_JINGLE_SESSION_MUJI, room);
-
- if(session_route !== null) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] _route_presence > Routed to Jingle session (room: ' + room + ').', 2);
-
- session_route.handle_presence(stanza);
- }
- }
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] _route_presence > ' + e, 1);
- }
- },
-
- /**
- * Adds a new Jingle session
- * @private
- * @param {String} type
- * @param {String} sid
- * @param {Object} obj
- */
- _add: function(type, sid, obj) {
- JSJaCJingleStorage.get_sessions()[type][sid] = obj;
- },
-
- /**
- * Reads a new Jingle session
- * @private
- * @param {String} type
- * @param {String} sid
- * @returns {Object} Session
- */
- _read: function(type, sid) {
- return (sid in JSJaCJingleStorage.get_sessions()[type]) ? JSJaCJingleStorage.get_sessions()[type][sid] : null;
- },
-
- /**
- * Removes a new Jingle session
- * @private
- * @param {String} type
- * @param {String} sid
- */
- _remove: function(type, sid) {
- delete JSJaCJingleStorage.get_sessions()[type][sid];
- },
-
- /**
- * Defer given task/execute deferred tasks
- * @private
- * @param {(Function|Boolean)} arg
- */
- _defer: function(arg) {
- try {
- if(typeof arg == 'function') {
- // Deferring?
- if(JSJaCJingleStorage.get_defer().deferred) {
- (JSJaCJingleStorage.get_defer().fn).push(arg);
-
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] defer > Registered a function to be executed once ready.', 2);
- }
-
- return JSJaCJingleStorage.get_defer().deferred;
- } else if(!arg || typeof arg == 'boolean') {
- JSJaCJingleStorage.get_defer().deferred = (arg === true);
-
- if(JSJaCJingleStorage.get_defer().deferred === false) {
- // Execute deferred tasks?
- if((--JSJaCJingleStorage.get_defer().count) <= 0) {
- JSJaCJingleStorage.get_defer().count = 0;
-
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] defer > Executing ' + JSJaCJingleStorage.get_defer().fn.length + ' deferred functions...', 2);
-
- while(JSJaCJingleStorage.get_defer().fn.length)
- ((JSJaCJingleStorage.get_defer().fn).shift())();
-
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] defer > Done executing deferred functions.', 2);
- }
- } else {
- ++JSJaCJingleStorage.get_defer().count;
- }
- }
- } catch(e) {
- JSJaCJingleStorage.get_debug().log('[JSJaCJingle:main] defer > ' + e, 1);
- }
- },
- }
-))();
diff --git a/app/javascripts/jsjac.js b/app/javascripts/jsjac.js
deleted file mode 100644
index 3e870100..00000000
--- a/app/javascripts/jsjac.js
+++ /dev/null
@@ -1,5090 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the JSJaC library for Jappix (from trunk)
-
--------------------------------------------------
-
-Licenses: Mozilla Public License version 1.1, GNU GPL, AGPL
-Authors: Stefan Strigler, Valérian Saliou, Zash, Maranda
-
-*/
-
-/**
- * @fileoverview Magic dependency loading. Taken from script.aculo.us
- * and modified to break it.
- * @author Stefan Strigler steve@zeank.in-berlin.de
- * @version 1.3
- */
-
-var JSJaC = {
- Version: '1.3',
- bind: function(fn, obj, optArg) {
- return function(arg) {
- return fn.apply(obj, [arg, optArg]);
- };
- }
-};
-
-
-
-/* Copyright 2006 Erik Arvidsson
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you
- * may not use this file except in compliance with the License. You
- * may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied. See the License for the specific language governing
- * permissions and limitations under the License.
- */
-
-/**
- * @fileoverview Wrapper to make working with XmlHttpRequest and the
- * DOM more convenient (cross browser compliance).
- * this code is taken from
- * http://webfx.eae.net/dhtml/xmlextras/xmlextras.html
- * @author Stefan Strigler steve@zeank.in-berlin.de
- * @version 1.3
- */
-
-/**
- * XmlHttp factory
- * @private
- */
-function XmlHttp() {}
-
-/**
- * creates a cross browser compliant XmlHttpRequest object
- */
-XmlHttp.create = function () {
- try {
- // Are we cross-domain?
- if(!BOSH_SAME_ORIGIN) {
- // Able to use CORS?
- if (window.XMLHttpRequest) {
- var req = new XMLHttpRequest();
-
- if (req.withCredentials !== undefined)
- return req;
- }
-
- // Fallback on JSONP
- return new jXHR();
- }
- // Might be local-domain?
- if (window.XMLHttpRequest) {
- var req = new XMLHttpRequest();
-
- // some versions of Moz do not support the readyState property
- // and the onreadystate event so we patch it!
- if (req.readyState == null) {
- req.readyState = 1;
- req.addEventListener("load", function () {
- req.readyState = 4;
- if (typeof req.onreadystatechange == "function")
- req.onreadystatechange();
- }, false);
- }
-
- return req;
- }
- if (window.ActiveXObject) {
- return new ActiveXObject(XmlHttp.getPrefix() + ".XmlHttp");
- }
- }
- catch (ex) {}
- // fell through
- throw new Error("Your browser does not support XmlHttp objects");
-};
-
-/**
- * used to find the Automation server name
- * @private
- */
-XmlHttp.getPrefix = function() {
- if (XmlHttp.prefix) // I know what you did last summer
- return XmlHttp.prefix;
-
- var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
- var o;
- for (var i = 0; i < prefixes.length; i++) {
- try {
- // try to create the objects
- o = new ActiveXObject(prefixes[i] + ".XmlHttp");
- return XmlHttp.prefix = prefixes[i];
- }
- catch (ex) {};
- }
-
- throw new Error("Could not find an installed XML parser");
-};
-
-
-/**
- * XmlDocument factory
- * @private
- */
-function XmlDocument() {}
-
-XmlDocument.create = function (name,ns) {
- name = name || 'foo';
- ns = ns || '';
-
- try {
- var doc;
- // DOM2
- if (document.implementation && document.implementation.createDocument) {
- doc = document.implementation.createDocument(ns, name, null);
- // some versions of Moz do not support the readyState property
- // and the onreadystate event so we patch it!
- if (doc.readyState == null) {
- doc.readyState = 1;
- doc.addEventListener("load", function () {
- doc.readyState = 4;
- if (typeof doc.onreadystatechange == "function")
- doc.onreadystatechange();
- }, false);
- }
- } else if (window.ActiveXObject) {
- doc = new ActiveXObject(XmlDocument.getPrefix() + ".DomDocument");
- }
-
- if (!doc.documentElement || doc.documentElement.tagName != name ||
- (doc.documentElement.namespaceURI &&
- doc.documentElement.namespaceURI != ns)) {
- try {
- if (ns != '')
- doc.appendChild(doc.createElement(name)).
- setAttribute('xmlns',ns);
- else
- doc.appendChild(doc.createElement(name));
- } catch (dex) {
- doc = document.implementation.createDocument(ns,name,null);
-
- if (doc.documentElement == null)
- doc.appendChild(doc.createElement(name));
-
- // fix buggy opera 8.5x
- if (ns != '' &&
- doc.documentElement.getAttribute('xmlns') != ns) {
- doc.documentElement.setAttribute('xmlns',ns);
- }
- }
- }
-
- return doc;
- }
- catch (ex) { }
- throw new Error("Your browser does not support XmlDocument objects");
-};
-
-/**
- * used to find the Automation server name
- * @private
- */
-XmlDocument.getPrefix = function() {
- if (XmlDocument.prefix)
- return XmlDocument.prefix;
-
- var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
- var o;
- for (var i = 0; i < prefixes.length; i++) {
- try {
- // try to create the objects
- o = new ActiveXObject(prefixes[i] + ".DomDocument");
- return XmlDocument.prefix = prefixes[i];
- }
- catch (ex) {};
- }
-
- throw new Error("Could not find an installed XML parser");
-};
-
-
-// Create the loadXML method
-if (typeof(Document) != 'undefined' && window.DOMParser) {
-
- /**
- * XMLDocument did not extend the Document interface in some
- * versions of Mozilla.
- * @private
- */
- Document.prototype.loadXML = function (s) {
-
- // parse the string to a new doc
- var doc2 = (new DOMParser()).parseFromString(s, "text/xml");
-
- // remove all initial children
- while (this.hasChildNodes())
- this.removeChild(this.lastChild);
-
- // insert and import nodes
- for (var i = 0; i < doc2.childNodes.length; i++) {
- this.appendChild(this.importNode(doc2.childNodes[i], true));
- }
- };
- }
-
-// Create xml getter for Mozilla
-if (window.XMLSerializer &&
- window.Node && Node.prototype && Node.prototype.__defineGetter__) {
-
- /**
- * xml getter
- *
- * This serializes the DOM tree to an XML String
- *
- * Usage: var sXml = oNode.xml
- * @deprecated
- * @private
- */
- // XMLDocument did not extend the Document interface in some versions
- // of Mozilla. Extend both!
- XMLDocument.prototype.__defineGetter__("xml", function () {
- return (new XMLSerializer()).serializeToString(this);
- });
- /**
- * xml getter
- *
- * This serializes the DOM tree to an XML String
- *
- * Usage: var sXml = oNode.xml
- * @deprecated
- * @private
- */
- Document.prototype.__defineGetter__("xml", function () {
- return (new XMLSerializer()).serializeToString(this);
- });
-
- /**
- * xml getter
- *
- * This serializes the DOM tree to an XML String
- *
- * Usage: var sXml = oNode.xml
- * @deprecated
- * @private
- */
- Node.prototype.__defineGetter__("xml", function () {
- return (new XMLSerializer()).serializeToString(this);
- });
- }
-
-
-/**
- * @fileoverview Collection of functions to make live easier
- * @author Stefan Strigler
- * @version 1.3
- */
-
-/**
- * Convert special chars to HTML entities
- * @addon
- * @return The string with chars encoded for HTML
- * @type String
- */
-String.prototype.htmlEnc = function() {
- if(!this)
- return this;
-
- return this.replace(/&(?!(amp|apos|gt|lt|quot);)/g,"&amp;")
- .replace(/</g,"&lt;")
- .replace(/>/g,"&gt;")
- .replace(/\'/g,"&apos;")
- .replace(/\"/g,"&quot;")
- .replace(/\n/g,"<br />");
-};
-
-/**
- * Convert HTML entities to special chars
- * @addon
- * @return The normal string
- * @type String
- */
-String.prototype.revertHtmlEnc = function() {
- if(!this)
- return this;
-
- var str = this.replace(/&amp;/gi,'&');
- str = str.replace(/&lt;/gi,'<');
- str = str.replace(/&gt;/gi,'>');
- str = str.replace(/&apos;/gi,'\'');
- str = str.replace(/&quot;/gi,'\"');
- str = str.replace(/<br( )?(\/)?>/gi,'\n');
- return str;
-};
-
-/**
- * Converts from jabber timestamps to JavaScript Date objects
- * @addon
- * @param {String} ts A string representing a jabber datetime timestamp as
- * defined by {@link http://www.xmpp.org/extensions/xep-0082.html XEP-0082}
- * @return A javascript Date object corresponding to the jabber DateTime given
- * @type Date
- */
-Date.jab2date = function(ts) {
- // Timestamp
- if(!isNaN(ts))
- return new Date(ts * 1000);
-
- // Get the UTC date
- var date = new Date(Date.UTC(ts.substr(0,4),ts.substr(5,2)-1,ts.substr(8,2),ts.substr(11,2),ts.substr(14,2),ts.substr(17,2)));
-
- if (ts.substr(ts.length-6,1) != 'Z') { // there's an offset
- var date_offset = date.getTimezoneOffset() * 60 * 1000;
- var offset = new Date();
- offset.setTime(0);
- offset.setUTCHours(ts.substr(ts.length-5,2));
- offset.setUTCMinutes(ts.substr(ts.length-2,2));
- if (ts.substr(ts.length-6,1) == '+')
- date.setTime(date.getTime() + offset.getTime() + date_offset);
- else if (ts.substr(ts.length-6,1) == '-')
- date.setTime(date.getTime() - offset.getTime() + date_offset);
- }
- return date;
-};
-
-/**
- * Takes a timestamp in the form of 2004-08-13T12:07:04+02:00 as argument
- * and converts it to some sort of humane readable format
- * @addon
- */
-Date.hrTime = function(ts) {
- return Date.jab2date(ts).toLocaleString();
-};
-
-
- /**
- * Current timestamp.
- * @return Seconds since 1.1.1970.
- * @type int
- */
- if (!Date.now) {
- Date.now = function() { return new Date().getTime(); }
- }
-
- /**
- * somewhat opposit to {@link #hrTime}
- * expects a javascript Date object as parameter and returns a jabber
- * date string conforming to
- * {@link http://www.xmpp.org/extensions/xep-0082.html XEP-0082}
- * @see #hrTime
- * @return The corresponding jabber DateTime string
- * @type String
- */
-Date.prototype.jabberDate = function() {
- var padZero = function(i) {
- if (i < 10) return "0" + i;
- return i;
- };
-
- var jDate = this.getUTCFullYear() + "-";
- jDate += padZero(this.getUTCMonth()+1) + "-";
- jDate += padZero(this.getUTCDate()) + "T";
- jDate += padZero(this.getUTCHours()) + ":";
- jDate += padZero(this.getUTCMinutes()) + ":";
- jDate += padZero(this.getUTCSeconds()) + "Z";
-
- return jDate;
-};
-
-/**
- * Determines the maximum of two given numbers
- * @addon
- * @param {Number} A a number
- * @param {Number} B another number
- * @return the maximum of A and B
- * @type Number
- */
-Number.max = function(A, B) {
- return (A > B)? A : B;
-};
-
-Number.min = function(A, B) {
- return (A < B)? A : B;
-};
-
-
-/* Copyright (c) 1998 - 2007, Paul Johnston & 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.
- *
- * Neither the name of the author 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.
- *
- */
-
-/**
- * @fileoverview Collection of MD5 and SHA1 hashing and encoding
- * methods.
- * @author Stefan Strigler steve@zeank.in-berlin.de
- */
-
-
-/*
- * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
- * in FIPS PUB 180-1
- * Version 2.1a Copyright Paul Johnston 2000 - 2002.
- * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
- * Distributed under the BSD License
- * See http://pajhome.org.uk/crypt/md5 for details.
- */
-
-/*
- * Configurable variables. You may need to tweak these to be compatible with
- * the server-side, but the defaults work in most cases.
- */
-var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
-var b64pad = "="; /* base-64 pad character. "=" for strict RFC compliance */
-var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
-
-/*
- * These are the functions you'll usually want to call
- * They take string arguments and return either hex or base-64 encoded strings
- */
-function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));}
-function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length * chrsz));}
-function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length * chrsz));}
-function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));}
-function b64_hmac_sha1(key, data){ return binb2b64(core_hmac_sha1(key, data));}
-function str_hmac_sha1(key, data){ return binb2str(core_hmac_sha1(key, data));}
-
-/*
- * Perform a simple self-test to see if the VM is working
- */
-function sha1_vm_test()
-{
- return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
-}
-
-/*
- * Calculate the SHA-1 of an array of big-endian words, and a bit length
- */
-function core_sha1(x, len)
-{
- /* append padding */
- x[len >> 5] |= 0x80 << (24 - len % 32);
- x[((len + 64 >> 9) << 4) + 15] = len;
-
- var w = new Array(80);
- var a = 1732584193;
- var b = -271733879;
- var c = -1732584194;
- var d = 271733878;
- var e = -1009589776;
-
- var i, j, t, olda, oldb, oldc, oldd, olde;
- for (i = 0; i < x.length; i += 16)
- {
- olda = a;
- oldb = b;
- oldc = c;
- oldd = d;
- olde = e;
-
- for (j = 0; j < 80; j++)
- {
- if (j < 16) { w[j] = x[i + j]; }
- else { w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1); }
- t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),
- safe_add(safe_add(e, w[j]), sha1_kt(j)));
- e = d;
- d = c;
- c = rol(b, 30);
- b = a;
- a = t;
- }
-
- a = safe_add(a, olda);
- b = safe_add(b, oldb);
- c = safe_add(c, oldc);
- d = safe_add(d, oldd);
- e = safe_add(e, olde);
- }
- return [a, b, c, d, e];
-}
-
-/*
- * Perform the appropriate triplet combination function for the current
- * iteration
- */
-function sha1_ft(t, b, c, d)
-{
- if (t < 20) { return (b & c) | ((~b) & d); }
- if (t < 40) { return b ^ c ^ d; }
- if (t < 60) { return (b & c) | (b & d) | (c & d); }
- return b ^ c ^ d;
-}
-
-/*
- * Determine the appropriate additive constant for the current iteration
- */
-function sha1_kt(t)
-{
- return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 :
- (t < 60) ? -1894007588 : -899497514;
-}
-
-/*
- * Calculate the HMAC-SHA1 of a key and some data
- */
-function core_hmac_sha1(key, data)
-{
- var bkey = str2binb(key);
- if (bkey.length > 16) { bkey = core_sha1(bkey, key.length * chrsz); }
-
- var ipad = new Array(16), opad = new Array(16);
- for (var i = 0; i < 16; i++)
- {
- ipad[i] = bkey[i] ^ 0x36363636;
- opad[i] = bkey[i] ^ 0x5C5C5C5C;
- }
-
- var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);
- return core_sha1(opad.concat(hash), 512 + 160);
-}
-
-/*
- * Add integers, wrapping at 2^32. This uses 16-bit operations internally
- * to work around bugs in some JS interpreters.
- */
-function safe_add(x, y)
-{
- var lsw = (x & 0xFFFF) + (y & 0xFFFF);
- var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
- return (msw << 16) | (lsw & 0xFFFF);
-}
-
-/*
- * Bitwise rotate a 32-bit number to the left.
- */
-function rol(num, cnt)
-{
- return (num << cnt) | (num >>> (32 - cnt));
-}
-
-/*
- * Convert an 8-bit or 16-bit string to an array of big-endian words
- * In 8-bit function, characters >255 have their hi-byte silently ignored.
- */
-function str2binb(str)
-{
- var bin = [];
- var mask = (1 << chrsz) - 1;
- for (var i = 0; i < str.length * chrsz; i += chrsz)
- {
- bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32);
- }
- return bin;
-}
-
-/*
- * Convert an array of big-endian words to a string
- */
-function binb2str(bin)
-{
- var str = "";
- var mask = (1 << chrsz) - 1;
- for (var i = 0; i < bin.length * 32; i += chrsz)
- {
- str += String.fromCharCode((bin[i>>5] >>> (32 - chrsz - i%32)) & mask);
- }
- return str;
-}
-
-/*
- * Convert an array of big-endian words to a hex string.
- */
-function binb2hex(binarray)
-{
- var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
- var str = "";
- for (var i = 0; i < binarray.length * 4; i++)
- {
- str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
- hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF);
- }
- return str;
-}
-
-/*
- * Convert an array of big-endian words to a base-64 string
- */
-function binb2b64(binarray)
-{
- var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
- var str = "";
- var triplet, j;
- for (var i = 0; i < binarray.length * 4; i += 3)
- {
- triplet = (((binarray[i >> 2] >> 8 * (3 - i %4)) & 0xFF) << 16) |
- (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 ) |
- ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF);
- for (j = 0; j < 4; j++)
- {
- if (i * 8 + j * 6 > binarray.length * 32) { str += b64pad; }
- else { str += tab.charAt((triplet >> 6*(3-j)) & 0x3F); }
- }
- }
- return str;
-}
-
-
-/*
- * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
- * Digest Algorithm, as defined in RFC 1321.
- * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
- * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
- * Distributed under the BSD License
- * See http://pajhome.org.uk/crypt/md5 for more info.
- */
-
-/*
- * These are the functions you'll usually want to call
- * They take string arguments and return either hex or base-64 encoded strings
- */
-function hex_md5(s) { return rstr2hex(rstr_md5(str2rstr_utf8(s))); }
-function b64_md5(s) { return rstr2b64(rstr_md5(str2rstr_utf8(s))); }
-function any_md5(s, e) { return rstr2any(rstr_md5(str2rstr_utf8(s)), e); }
-function hex_hmac_md5(k, d)
- { return rstr2hex(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); }
-function b64_hmac_md5(k, d)
- { return rstr2b64(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); }
-function any_hmac_md5(k, d, e)
- { return rstr2any(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d)), e); }
-
-/*
- * Perform a simple self-test to see if the VM is working
- */
-function md5_vm_test()
-{
- return hex_md5("abc").toLowerCase() == "900150983cd24fb0d6963f7d28e17f72";
-}
-
-/*
- * Calculate the MD5 of a raw string
- */
-function rstr_md5(s)
-{
- return binl2rstr(binl_md5(rstr2binl(s), s.length * 8));
-}
-
-/*
- * Calculate the HMAC-MD5, of a key and some data (raw strings)
- */
-function rstr_hmac_md5(key, data)
-{
- var bkey = rstr2binl(key);
- if(bkey.length > 16) bkey = binl_md5(bkey, key.length * 8);
-
- var ipad = Array(16), opad = Array(16);
- for(var i = 0; i < 16; i++)
- {
- ipad[i] = bkey[i] ^ 0x36363636;
- opad[i] = bkey[i] ^ 0x5C5C5C5C;
- }
-
- var hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
- return binl2rstr(binl_md5(opad.concat(hash), 512 + 128));
-}
-
-/*
- * Convert a raw string to a hex string
- */
-function rstr2hex(input)
-{
- try { hexcase } catch(e) { hexcase=0; }
- var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
- var output = "";
- var x;
- for(var i = 0; i < input.length; i++)
- {
- x = input.charCodeAt(i);
- output += hex_tab.charAt((x >>> 4) & 0x0F)
- + hex_tab.charAt( x & 0x0F);
- }
- return output;
-}
-
-/*
- * Convert a raw string to a base-64 string
- */
-function rstr2b64(input)
-{
- try { b64pad } catch(e) { b64pad=''; }
- var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
- var output = "";
- var len = input.length;
- for(var i = 0; i < len; i += 3)
- {
- var triplet = (input.charCodeAt(i) << 16)
- | (i + 1 < len ? input.charCodeAt(i+1) << 8 : 0)
- | (i + 2 < len ? input.charCodeAt(i+2) : 0);
- for(var j = 0; j < 4; j++)
- {
- if(i * 8 + j * 6 > input.length * 8) output += b64pad;
- else output += tab.charAt((triplet >>> 6*(3-j)) & 0x3F);
- }
- }
- return output;
-}
-
-/*
- * Convert a raw string to an arbitrary string encoding
- */
-function rstr2any(input, encoding)
-{
- var divisor = encoding.length;
- var i, j, q, x, quotient;
-
- /* Convert to an array of 16-bit big-endian values, forming the dividend */
- var dividend = Array(Math.ceil(input.length / 2));
- for(i = 0; i < dividend.length; i++)
- {
- dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1);
- }
-
- /*
- * Repeatedly perform a long division. The binary array forms the dividend,
- * the length of the encoding is the divisor. Once computed, the quotient
- * forms the dividend for the next step. All remainders are stored for later
- * use.
- */
- var full_length = Math.ceil(input.length * 8 /
- (Math.log(encoding.length) / Math.log(2)));
- var remainders = Array(full_length);
- for(j = 0; j < full_length; j++)
- {
- quotient = Array();
- x = 0;
- for(i = 0; i < dividend.length; i++)
- {
- x = (x << 16) + dividend[i];
- q = Math.floor(x / divisor);
- x -= q * divisor;
- if(quotient.length > 0 || q > 0)
- quotient[quotient.length] = q;
- }
- remainders[j] = x;
- dividend = quotient;
- }
-
- /* Convert the remainders to the output string */
- var output = "";
- for(i = remainders.length - 1; i >= 0; i--)
- output += encoding.charAt(remainders[i]);
-
- return output;
-}
-
-/*
- * Encode a string as utf-8.
- * For efficiency, this assumes the input is valid utf-16.
- */
-function str2rstr_utf8(input)
-{
- var output = "";
- var i = -1;
- var x, y;
-
- while(++i < input.length)
- {
- /* Decode utf-16 surrogate pairs */
- x = input.charCodeAt(i);
- y = i + 1 < input.length ? input.charCodeAt(i + 1) : 0;
- if(0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF)
- {
- x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);
- i++;
- }
-
- /* Encode output as utf-8 */
- if(x <= 0x7F)
- output += String.fromCharCode(x);
- else if(x <= 0x7FF)
- output += String.fromCharCode(0xC0 | ((x >>> 6 ) & 0x1F),
- 0x80 | ( x & 0x3F));
- else if(x <= 0xFFFF)
- output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F),
- 0x80 | ((x >>> 6 ) & 0x3F),
- 0x80 | ( x & 0x3F));
- else if(x <= 0x1FFFFF)
- output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07),
- 0x80 | ((x >>> 12) & 0x3F),
- 0x80 | ((x >>> 6 ) & 0x3F),
- 0x80 | ( x & 0x3F));
- }
- return output;
-}
-
-/*
- * Encode a string as utf-16
- */
-function str2rstr_utf16le(input)
-{
- var output = "";
- for(var i = 0; i < input.length; i++)
- output += String.fromCharCode( input.charCodeAt(i) & 0xFF,
- (input.charCodeAt(i) >>> 8) & 0xFF);
- return output;
-}
-
-function str2rstr_utf16be(input)
-{
- var output = "";
- for(var i = 0; i < input.length; i++)
- output += String.fromCharCode((input.charCodeAt(i) >>> 8) & 0xFF,
- input.charCodeAt(i) & 0xFF);
- return output;
-}
-
-/*
- * Convert a raw string to an array of little-endian words
- * Characters >255 have their high-byte silently ignored.
- */
-function rstr2binl(input)
-{
- var output = Array(input.length >> 2);
- for(var i = 0; i < output.length; i++)
- output[i] = 0;
- for(var i = 0; i < input.length * 8; i += 8)
- output[i>>5] |= (input.charCodeAt(i / 8) & 0xFF) << (i%32);
- return output;
-}
-
-/*
- * Convert an array of little-endian words to a string
- */
-function binl2rstr(input)
-{
- var output = "";
- for(var i = 0; i < input.length * 32; i += 8)
- output += String.fromCharCode((input[i>>5] >>> (i % 32)) & 0xFF);
- return output;
-}
-
-/*
- * Calculate the MD5 of an array of little-endian words, and a bit length.
- */
-function binl_md5(x, len)
-{
- /* append padding */
- x[len >> 5] |= 0x80 << ((len) % 32);
- x[(((len + 64) >>> 9) << 4) + 14] = len;
-
- var a = 1732584193;
- var b = -271733879;
- var c = -1732584194;
- var d = 271733878;
-
- for(var i = 0; i < x.length; i += 16)
- {
- var olda = a;
- var oldb = b;
- var oldc = c;
- var oldd = d;
-
- a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
- d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
- c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
- b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
- a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
- d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
- c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
- b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
- a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
- d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
- c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
- b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
- a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
- d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
- c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
- b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
-
- a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
- d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
- c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
- b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
- a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
- d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
- c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
- b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
- a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
- d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
- c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
- b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
- a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
- d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
- c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
- b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
-
- a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
- d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
- c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
- b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
- a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
- d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
- c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
- b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
- a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
- d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
- c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
- b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
- a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
- d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
- c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
- b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
-
- a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
- d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
- c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
- b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
- a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
- d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
- c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
- b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
- a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
- d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
- c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
- b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
- a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
- d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
- c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
- b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
-
- a = safe_add(a, olda);
- b = safe_add(b, oldb);
- c = safe_add(c, oldc);
- d = safe_add(d, oldd);
- }
- return Array(a, b, c, d);
-}
-
-/*
- * 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);
-}
-
-/*
- * Add integers, wrapping at 2^32. This uses 16-bit operations internally
- * to work around bugs in some JS interpreters.
- */
-function safe_add(x, y)
-{
- var lsw = (x & 0xFFFF) + (y & 0xFFFF);
- var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
- return (msw << 16) | (lsw & 0xFFFF);
-}
-
-/*
- * Bitwise rotate a 32-bit number to the left.
- */
-function bit_rol(num, cnt)
-{
- return (num << cnt) | (num >>> (32 - cnt));
-}
-
-
-/* #############################################################################
- UTF-8 Decoder and Encoder
- base64 Encoder and Decoder
- written by Tobias Kieslich, justdreams
- Contact: tobias@justdreams.de http://www.justdreams.de/
- ############################################################################# */
-
-// returns an array of byterepresenting dezimal numbers which represent the
-// plaintext in an UTF-8 encoded version. Expects a string.
-// This function includes an exception management for those nasty browsers like
-// NN401, which returns negative decimal numbers for chars>128. I hate it!!
-// This handling is unfortunately limited to the user's charset. Anyway, it works
-// in most of the cases! Special signs with an unicode>256 return numbers, which
-// can not be converted to the actual unicode and so not to the valid utf-8
-// representation. Anyway, this function does always return values which can not
-// misinterpretd by RC4 or base64 en- or decoding, because every value is >0 and
-// <255!!
-// Arrays are faster and easier to handle in b64 encoding or encrypting....
-function utf8t2d(t)
-{
- t = t.replace(/\r\n/g,"\n");
- var d=new Array; var test=String.fromCharCode(237);
- if (test.charCodeAt(0) < 0)
- for(var n=0; n<t.length; n++)
- {
- var c=t.charCodeAt(n);
- if (c>0)
- d[d.length]= c;
- else {
- d[d.length]= (((256+c)>>6)|192);
- d[d.length]= (((256+c)&63)|128);}
- }
- else
- for(var n=0; n<t.length; n++)
- {
- var c=t.charCodeAt(n);
- // all the signs of asci => 1byte
- if (c<128)
- d[d.length]= c;
- // all the signs between 127 and 2047 => 2byte
- else if((c>127) && (c<2048)) {
- d[d.length]= ((c>>6)|192);
- d[d.length]= ((c&63)|128);}
- // all the signs between 2048 and 66536 => 3byte
- else {
- d[d.length]= ((c>>12)|224);
- d[d.length]= (((c>>6)&63)|128);
- d[d.length]= ((c&63)|128);}
- }
- return d;
-}
-
-// returns plaintext from an array of bytesrepresenting dezimal numbers, which
-// represent an UTF-8 encoded text; browser which does not understand unicode
-// like NN401 will show "?"-signs instead
-// expects an array of byterepresenting decimals; returns a string
-function utf8d2t(d)
-{
- var r=new Array; var i=0;
- while(i<d.length)
- {
- if (d[i]<128) {
- r[r.length]= String.fromCharCode(d[i]); i++;}
- else if((d[i]>191) && (d[i]<224)) {
- r[r.length]= String.fromCharCode(((d[i]&31)<<6) | (d[i+1]&63)); i+=2;}
- else {
- r[r.length]= String.fromCharCode(((d[i]&15)<<12) | ((d[i+1]&63)<<6) | (d[i+2]&63)); i+=3;}
- }
- return r.join("");
-}
-
-// included in <body onload="b64arrays"> it creates two arrays which makes base64
-// en- and decoding faster
-// this speed is noticeable especially when coding larger texts (>5k or so)
-function b64arrays() {
- var b64s='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
- b64 = new Array();f64 =new Array();
- for (var i=0; i<b64s.length ;i++) {
- b64[i] = b64s.charAt(i);
- f64[b64s.charAt(i)] = i;
- }
-}
-
-// creates a base64 encoded text out of an array of byerepresenting dezimals
-// it is really base64 :) this makes serversided handling easier
-// expects an array; returns a string
-function b64d2t(d) {
- var r=new Array; var i=0; var dl=d.length;
- // this is for the padding
- if ((dl%3) == 1) {
- d[d.length] = 0; d[d.length] = 0;}
- if ((dl%3) == 2)
- d[d.length] = 0;
- // from here conversion
- while (i<d.length)
- {
- r[r.length] = b64[d[i]>>2];
- r[r.length] = b64[((d[i]&3)<<4) | (d[i+1]>>4)];
- r[r.length] = b64[((d[i+1]&15)<<2) | (d[i+2]>>6)];
- r[r.length] = b64[d[i+2]&63];
- i+=3;
- }
- // this is again for the padding
- if ((dl%3) == 1)
- r[r.length-1] = r[r.length-2] = "=";
- if ((dl%3) == 2)
- r[r.length-1] = "=";
- // we join the array to return a textstring
- var t=r.join("");
- return t;
-}
-
-// returns array of byterepresenting numbers created of an base64 encoded text
-// it is still the slowest function in this modul; I hope I can make it faster
-// expects string; returns an array
-function b64t2d(t) {
- var d=new Array; var i=0;
- // here we fix this CRLF sequenz created by MS-OS; arrrgh!!!
- t=t.replace(/\n|\r/g,""); t=t.replace(/=/g,"");
- while (i<t.length)
- {
- d[d.length] = (f64[t.charAt(i)]<<2) | (f64[t.charAt(i+1)]>>4);
- d[d.length] = (((f64[t.charAt(i+1)]&15)<<4) | (f64[t.charAt(i+2)]>>2));
- d[d.length] = (((f64[t.charAt(i+2)]&3)<<6) | (f64[t.charAt(i+3)]));
- i+=4;
- }
- if (t.length%4 == 2)
- d = d.slice(0, d.length-2);
- if (t.length%4 == 3)
- d = d.slice(0, d.length-1);
- return d;
-}
-
-if (typeof(atob) == 'undefined' || typeof(btoa) == 'undefined')
- b64arrays();
-
-if (typeof(atob) == 'undefined') {
- b64decode = function(s) {
- return utf8d2t(b64t2d(s));
- }
-} else {
- b64decode = function(s) {
- return decodeURIComponent(escape(atob(s)));
- }
-}
-
-if (typeof(btoa) == 'undefined') {
- b64encode = function(s) {
- return b64d2t(utf8t2d(s));
- }
-} else {
- b64encode = function(s) {
- return btoa(unescape(encodeURIComponent(s)));
- }
-}
-
-function cnonce(size) {
- var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
- var cnonce = '';
- for (var i=0; i<size; i++) {
- cnonce += tab.charAt(Math.round(Math.random(new Date().getTime())*(tab.length-1)));
- }
- return cnonce;
-}
-
-
-JSJAC_HAVEKEYS = true; // whether to use keys
-JSJAC_NKEYS = 16; // number of keys to generate
-
-JSJAC_INACTIVITY = 300; // qnd hack to make suspend/resume
- // work more smoothly with polling
-JSJAC_ERR_COUNT = 10; // number of retries in case of connection
- // errors
-
-JSJAC_ALLOW_PLAIN = true; // whether to allow plaintext logins
-
-JSJAC_CHECKQUEUEINTERVAL = 100; // msecs to poll send queue
-JSJAC_CHECKINQUEUEINTERVAL = 100; // msecs to poll incoming queue
-JSJAC_TIMERVAL = 2000; // default polling interval
-
-JSJAC_ALLOW_PLAIN = true; // whether to allow plaintext logins
-JSJAC_ALLOW_SCRAM = false; // allow usage of SCRAM-SHA-1 authentication; please note that it is quite slow so it is disable by default
-
-JSJAC_RETRYDELAY = 5000; // msecs to wait before trying next
- // request after error
-
-JSJAC_REGID_TIMEOUT = 20000; // time in msec until registered
- // callbacks for ids timeout
-
-/* Options specific to HTTP Binding (BOSH) */
-JSJACHBC_MAX_HOLD = 1; // default for number of connctions
- // held by connection manager
-
-JSJACHBC_MAX_WAIT = 20; // default 'wait' param - how long an
- // idle connection should be held by
- // connection manager
-
-JSJACHBC_BOSH_VERSION = "1.6";
-JSJACHBC_USE_BOSH_VER = true;
-
-JSJACHBC_MAXPAUSE = 20; // how long a suspend/resume cycle may take
-
-/*** END CONFIG ***/
-
-
-/* Copyright (c) 2005-2007 Sam Stephenson
- *
- * 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 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.
- */
-
-/*
- json.js
- taken from prototype.js, made static
-*/
-function JSJaCJSON() {}
-JSJaCJSON.toString = function (obj) {
- var m = {
- '\b': '\\b',
- '\t': '\\t',
- '\n': '\\n',
- '\f': '\\f',
- '\r': '\\r',
- '"' : '\\"',
- '\\': '\\\\'
- },
- s = {
- array: function (x) {
- var a = ['['], b, f, i, l = x.length, v;
- for (i = 0; i < l; i += 1) {
- v = x[i];
- f = s[typeof v];
- if (f) {
- try {
- v = f(v);
- if (typeof v == 'string') {
- if (b) {
- a[a.length] = ',';
- }
- a[a.length] = v;
- b = true;
- }
- } catch(e) {
- }
- }
- }
- a[a.length] = ']';
- return a.join('');
- },
- 'boolean': function (x) {
- return String(x);
- },
- 'null': function (x) {
- return "null";
- },
- number: function (x) {
- return isFinite(x) ? String(x) : 'null';
- },
- object: function (x) {
- if (x) {
- if (x instanceof Array) {
- return s.array(x);
- }
- var a = ['{'], b, f, i, v;
- for (i in x) {
- if (x.hasOwnProperty(i)) {
- v = x[i];
- f = s[typeof v];
- if (f) {
- try {
- v = f(v);
- if (typeof v == 'string') {
- if (b) {
- a[a.length] = ',';
- }
- a.push(s.string(i), ':', v);
- b = true;
- }
- } catch(e) {
- }
- }
- }
- }
-
- a[a.length] = '}';
- return a.join('');
- }
- return 'null';
- },
- string: function (x) {
- if (/["\\\x00-\x1f]/.test(x)) {
- x = x.replace(/([\x00-\x1f\\"])/g, function(a, b) {
- var c = m[b];
- if (c) {
- return c;
- }
- c = b.charCodeAt();
- return '\\u00' +
- Math.floor(c / 16).toString(16) +
- (c % 16).toString(16);
- });
- }
- return '"' + x + '"';
-}
- };
-
-switch (typeof(obj)) {
- case 'object':
- return s.object(obj);
- case 'array':
- return s.array(obj);
-
- }
-};
-
-JSJaCJSON.parse = function (str) {
- try {
- return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
- str.replace(/"(\\.|[^"\\])*"/g, ''))) &&
- eval('(' + str + ')');
- } catch (e) {
- return false;
- }
-};
-
-
-/**
- * @fileoverview This file contains all things that make life easier when
- * dealing with JIDs
- * @author Stefan Strigler
- * @version 1.3
- */
-
-/**
- * list of forbidden chars for nodenames
- * @private
- */
-var JSJACJID_FORBIDDEN = ['"',' ','&','\'','/',':','<','>','@'];
-
-/**
- * Creates a new JSJaCJID object
- * @class JSJaCJID models xmpp jid objects
- * @constructor
- * @param {Object} jid jid may be either of type String or a JID represented
- * by JSON with fields 'node', 'domain' and 'resource'
- * @throws JSJaCJIDInvalidException Thrown if jid is not valid
- * @return a new JSJaCJID object
- */
-function JSJaCJID(jid) {
- /**
- *@private
- */
- this._node = '';
- /**
- *@private
- */
- this._domain = '';
- /**
- *@private
- */
- this._resource = '';
-
- if (typeof(jid) == 'string') {
- if (jid.indexOf('@') != -1) {
- this.setNode(jid.substring(0,jid.indexOf('@')));
- jid = jid.substring(jid.indexOf('@')+1);
- }
- if (jid.indexOf('/') != -1) {
- this.setResource(jid.substring(jid.indexOf('/')+1));
- jid = jid.substring(0,jid.indexOf('/'));
- }
- this.setDomain(jid);
- } else {
- this.setNode(jid.node);
- this.setDomain(jid.domain);
- this.setResource(jid.resource);
- }
-}
-
-
-/**
- * Gets the node part of the jid
- * @return A string representing the node name
- * @type String
- */
-JSJaCJID.prototype.getNode = function() { return this._node; };
-
-/**
- * Gets the domain part of the jid
- * @return A string representing the domain name
- * @type String
- */
-JSJaCJID.prototype.getDomain = function() { return this._domain; };
-
-/**
- * Gets the resource part of the jid
- * @return A string representing the resource
- * @type String
- */
-JSJaCJID.prototype.getResource = function() { return this._resource; };
-
-
-/**
- * Sets the node part of the jid
- * @param {String} node Name of the node
- * @throws JSJaCJIDInvalidException Thrown if node name contains invalid chars
- * @return This object
- * @type JSJaCJID
- */
-JSJaCJID.prototype.setNode = function(node) {
- JSJaCJID._checkNodeName(node);
- this._node = node || '';
- return this;
-};
-
-/**
- * Sets the domain part of the jid
- * @param {String} domain Name of the domain
- * @throws JSJaCJIDInvalidException Thrown if domain name contains invalid
- * chars or is empty
- * @return This object
- * @type JSJaCJID
- */
-JSJaCJID.prototype.setDomain = function(domain) {
- if (!domain || domain == '')
- throw new JSJaCJIDInvalidException("domain name missing");
- // chars forbidden for a node are not allowed in domain names
- // anyway, so let's check
- JSJaCJID._checkNodeName(domain);
- this._domain = domain;
- return this;
-};
-
-/**
- * Sets the resource part of the jid
- * @param {String} resource Name of the resource
- * @return This object
- * @type JSJaCJID
- */
-JSJaCJID.prototype.setResource = function(resource) {
- this._resource = resource || '';
- return this;
-};
-
-/**
- * The string representation of the full jid
- * @return A string representing the jid
- * @type String
- */
-JSJaCJID.prototype.toString = function() {
- var jid = '';
- if (this.getNode() && this.getNode() != '')
- jid = this.getNode() + '@';
- jid += this.getDomain(); // we always have a domain
- if (this.getResource() && this.getResource() != "")
- jid += '/' + this.getResource();
- return jid;
-};
-
-/**
- * Removes the resource part of the jid
- * @return This object
- * @type JSJaCJID
- */
-JSJaCJID.prototype.removeResource = function() {
- return this.setResource();
-};
-
-/**
- * creates a copy of this JSJaCJID object
- * @return A copy of this
- * @type JSJaCJID
- */
-JSJaCJID.prototype.clone = function() {
- return new JSJaCJID(this.toString());
-};
-
-/**
- * Compares two jids if they belong to the same entity (i.e. w/o resource)
- * @param {String} jid a jid as string or JSJaCJID object
- * @return 'true' if jid is same entity as this
- * @type Boolean
- */
-JSJaCJID.prototype.isEntity = function(jid) {
- if (typeof jid == 'string')
- jid = (new JSJaCJID(jid));
- jid.removeResource();
- return (this.clone().removeResource().toString() === jid.toString());
-};
-
-/**
- * Check if node name is valid
- * @private
- * @param {String} node A name for a node
- * @throws JSJaCJIDInvalidException Thrown if name for node is not allowed
- */
-JSJaCJID._checkNodeName = function(nodeprep) {
- if (!nodeprep || nodeprep == '')
- return;
- for (var i=0; i< JSJACJID_FORBIDDEN.length; i++) {
- if (nodeprep.indexOf(JSJACJID_FORBIDDEN[i]) != -1) {
- throw new JSJaCJIDInvalidException("forbidden char in nodename: "+JSJACJID_FORBIDDEN[i]);
- }
- }
-};
-
-/**
- * Creates a new Exception of type JSJaCJIDInvalidException
- * @class Exception to indicate invalid values for a jid
- * @constructor
- * @param {String} message The message associated with this Exception
- */
-function JSJaCJIDInvalidException(message) {
- /**
- * The exceptions associated message
- * @type String
- */
- this.message = message;
- /**
- * The name of the exception
- * @type String
- */
- this.name = "JSJaCJIDInvalidException";
-}
-
-
-/* Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
- *
- * 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.
- */
-
-/**
- * @private
- * This code is taken from {@link
- * http://wiki.script.aculo.us/scriptaculous/show/Builder
- * script.aculo.us' Dom Builder} and has been modified to suit our
- * needs.<br/>
- * The original parts of the code do have the following
- * copyright and license notice:<br/>
- * Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us,
- * http://mir.acu lo.us) <br/>
- * script.aculo.us is freely distributable under the terms of an
- * MIT-style license.<br>
- * For details, see the script.aculo.us web site:
- * http://script.aculo.us/<br>
- */
-var JSJaCBuilder = {
- /**
- * @private
- */
- buildNode: function(doc, elementName) {
-
- var element, ns = arguments[4];
-
- // attributes (or text)
- if(arguments[2])
- if(JSJaCBuilder._isStringOrNumber(arguments[2]) ||
- (arguments[2] instanceof Array)) {
- element = this._createElement(doc, elementName, ns);
- JSJaCBuilder._children(doc, element, arguments[2]);
- } else {
- ns = arguments[2]['xmlns'] || ns;
- element = this._createElement(doc, elementName, ns);
- for(attr in arguments[2]) {
- if (arguments[2].hasOwnProperty(attr) && attr != 'xmlns')
- element.setAttribute(attr, arguments[2][attr]);
- }
- }
- else
- element = this._createElement(doc, elementName, ns);
- // text, or array of children
- if(arguments[3])
- JSJaCBuilder._children(doc, element, arguments[3], ns);
-
- return element;
- },
-
- _createElement: function(doc, elementName, ns) {
- try {
- if (ns)
- return doc.createElementNS(ns, elementName);
- } catch (ex) { }
-
- var el = doc.createElement(elementName);
-
- if (ns)
- el.setAttribute("xmlns", ns);
-
- return el;
- },
-
- /**
- * @private
- */
- _text: function(doc, text) {
- return doc.createTextNode(text);
- },
-
- /**
- * @private
- */
- _children: function(doc, element, children, ns) {
- if(typeof children=='object') { // array can hold nodes and text
- for (var i in children) {
- if (children.hasOwnProperty(i)) {
- var e = children[i];
- if (typeof e=='object') {
- if (e instanceof Array) {
- var node = JSJaCBuilder.buildNode(doc, e[0], e[1], e[2], ns);
- element.appendChild(node);
- } else {
- element.appendChild(e);
- }
- } else {
- if(JSJaCBuilder._isStringOrNumber(e)) {
- element.appendChild(JSJaCBuilder._text(doc, e));
- }
- }
- }
- }
- } else {
- if(JSJaCBuilder._isStringOrNumber(children)) {
- element.appendChild(JSJaCBuilder._text(doc, children));
- }
- }
- },
-
- _attributes: function(attributes) {
- var attrs = [];
- for(attribute in attributes)
- if (attributes.hasOwnProperty(attribute))
- attrs.push(attribute +
- '="' + attributes[attribute].toString().htmlEnc() + '"');
- return attrs.join(" ");
- },
-
- _isStringOrNumber: function(param) {
- return(typeof param=='string' || typeof param=='number');
- }
-};
-
-
-/**
- * @fileoverview Contains all Jabber/XMPP packet related classes.
- * @author Stefan Strigler steve@zeank.in-berlin.de
- * @version 1.3
- */
-
-var JSJACPACKET_USE_XMLNS = true;
-
-/**
- * Creates a new packet with given root tag name (for internal use)
- * @class Somewhat abstract base class for all kinds of specialised packets
- * @param {String} name The root tag name of the packet
- * (i.e. one of 'message', 'iq' or 'presence')
- */
-function JSJaCPacket(name) {
- /**
- * @private
- */
- this.name = name;
-
- if (typeof(JSJACPACKET_USE_XMLNS) != 'undefined' && JSJACPACKET_USE_XMLNS)
- /**
- * @private
- */
- this.doc = XmlDocument.create(name,'jabber:client');
- else
- /**
- * @private
- */
- this.doc = XmlDocument.create(name,'');
-}
-
-/**
- * Gets the type (name of root element) of this packet, i.e. one of
- * 'presence', 'message' or 'iq'
- * @return the top level tag name
- * @type String
- */
-JSJaCPacket.prototype.pType = function() { return this.name; };
-
-/**
- * Gets the associated Document for this packet.
- * @type {@link http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#i-Document Document}
- */
-JSJaCPacket.prototype.getDoc = function() {
- return this.doc;
-};
-/**
- * Gets the root node of this packet
- * @type {@link http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247 Node}
- */
-JSJaCPacket.prototype.getNode = function() {
- if (this.getDoc() && this.getDoc().documentElement)
- return this.getDoc().documentElement;
- else
- return null;
-};
-
-/**
- * Sets the 'to' attribute of the root node of this packet
- * @param {String} to
- * @type JSJaCPacket
- */
-JSJaCPacket.prototype.setTo = function(to) {
- if (!to || to == '')
- this.getNode().removeAttribute('to');
- else if (typeof(to) == 'string')
- this.getNode().setAttribute('to',to);
- else
- this.getNode().setAttribute('to',to.toString());
- return this;
-};
-/**
- * Sets the 'from' attribute of the root node of this
- * packet. Usually this is not needed as the server will take care
- * of this automatically.
- * @type JSJaCPacket
- */
-JSJaCPacket.prototype.setFrom = function(from) {
- if (!from || from == '')
- this.getNode().removeAttribute('from');
- else if (typeof(from) == 'string')
- this.getNode().setAttribute('from',from);
- else
- this.getNode().setAttribute('from',from.toString());
- return this;
-};
-/**
- * Sets 'id' attribute of the root node of this packet.
- * @param {String} id The id of the packet.
- * @type JSJaCPacket
- */
-JSJaCPacket.prototype.setID = function(id) {
- if (!id || id == '')
- this.getNode().removeAttribute('id');
- else
- this.getNode().setAttribute('id',id);
- return this;
-};
-/**
- * Sets the 'type' attribute of the root node of this packet.
- * @param {String} type The type of the packet.
- * @type JSJaCPacket
- */
-JSJaCPacket.prototype.setType = function(type) {
- if (!type || type == '')
- this.getNode().removeAttribute('type');
- else
- this.getNode().setAttribute('type',type);
- return this;
-};
-/**
- * Sets 'xml:lang' for this packet
- * @param {String} xmllang The xml:lang of the packet.
- * @type JSJaCPacket
- */
-JSJaCPacket.prototype.setXMLLang = function(xmllang) {
- // Fix IE bug with xml:lang attribute
-
- // Also due to issues with both BD and jQuery being used, employ a simple regexp since the detection
- // here is very limited.
- if (navigator.appVersion.match(/^.*MSIE (\d)/) || navigator.appVersion.match(/Trident/))
- return this;
- if (!xmllang || xmllang == '')
- this.getNode().removeAttribute('xml:lang');
- else
- this.getNode().setAttribute('xml:lang',xmllang);
- return this;
-};
-
-/**
- * Gets the 'to' attribute of this packet
- * @type String
- */
-JSJaCPacket.prototype.getTo = function() {
- return this.getNode().getAttribute('to');
-};
-/**
- * Gets the 'from' attribute of this packet.
- * @type String
- */
-JSJaCPacket.prototype.getFrom = function() {
- return this.getNode().getAttribute('from');
-};
-/**
- * Gets the 'to' attribute of this packet as a JSJaCJID object
- * @type JSJaCJID
- */
-JSJaCPacket.prototype.getToJID = function() {
- return new JSJaCJID(this.getTo());
-};
-/**
- * Gets the 'from' attribute of this packet as a JSJaCJID object
- * @type JSJaCJID
- */
-JSJaCPacket.prototype.getFromJID = function() {
- return new JSJaCJID(this.getFrom());
-};
-/**
- * Gets the 'id' of this packet
- * @type String
- */
-JSJaCPacket.prototype.getID = function() {
- return this.getNode().getAttribute('id');
-};
-/**
- * Gets the 'type' of this packet
- * @type String
- */
-JSJaCPacket.prototype.getType = function() {
- return this.getNode().getAttribute('type');
-};
-/**
- * Gets the 'xml:lang' of this packet
- * @type String
- */
-JSJaCPacket.prototype.getXMLLang = function() {
- return this.getNode().getAttribute('xml:lang');
-};
-/**
- * Gets the 'xmlns' (xml namespace) of the root node of this packet
- * @type String
- */
-JSJaCPacket.prototype.getXMLNS = function() {
- return this.getNode().namespaceURI || this.getNode().getAttribute('xmlns');
-};
-
-/**
- * Gets a child element of this packet. If no params given returns first child.
- * @param {String} name Tagname of child to retrieve. Use '*' to match any tag. [optional]
- * @param {String} ns Namespace of child. Use '*' to match any ns.[optional]
- * @return The child node, null if none found
- * @type {@link http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247 Node}
- */
-JSJaCPacket.prototype.getChild = function(name, ns) {
- if (!this.getNode()) {
- return null;
- }
-
- name = name || '*';
- ns = ns || '*';
-
- if (this.getNode().getElementsByTagNameNS) {
- return this.getNode().getElementsByTagNameNS(ns, name).item(0);
- }
-
- // fallback
- var nodes = this.getNode().getElementsByTagName(name);
- if (ns != '*') {
- for (var i=0; i<nodes.length; i++) {
- if (nodes.item(i).namespaceURI == ns || nodes.item(i).getAttribute('xmlns') == ns) {
- return nodes.item(i);
- }
- }
- } else {
- return nodes.item(0);
- }
- return null; // nothing found
-};
-
-/**
- * Gets the node value of a child element of this packet.
- * @param {String} name Tagname of child to retrieve.
- * @param {String} ns Namespace of child
- * @return The value of the child node, empty string if none found
- * @type String
- */
-JSJaCPacket.prototype.getChildVal = function(name, ns) {
- var node = this.getChild(name, ns);
- var ret = '';
- if (node && node.hasChildNodes()) {
- // concatenate all values from childNodes
- for (var i=0; i<node.childNodes.length; i++)
- if (node.childNodes.item(i).nodeValue)
- ret += node.childNodes.item(i).nodeValue;
- }
- return ret;
-};
-
-/**
- * Returns a copy of this node
- * @return a copy of this node
- * @type JSJaCPacket
- */
-JSJaCPacket.prototype.clone = function() {
- return JSJaCPacket.wrapNode(this.getNode());
-};
-
-/**
- * Checks if packet is of type 'error'
- * @return 'true' if this packet is of type 'error', 'false' otherwise
- * @type boolean
- */
-JSJaCPacket.prototype.isError = function() {
- return (this.getType() == 'error');
-};
-
-/**
- * Returns an error condition reply according to {@link http://www.xmpp.org/extensions/xep-0086.html XEP-0086}. Creates a clone of the calling packet with senders and recipient exchanged and error stanza appended.
- * @param {STANZA_ERROR} stanza_error an error stanza containing error cody, type and condition of the error to be indicated
- * @return an error reply packet
- * @type JSJaCPacket
- */
-JSJaCPacket.prototype.errorReply = function(stanza_error) {
- var rPacket = this.clone();
- rPacket.setTo(this.getFrom());
- rPacket.setFrom();
- rPacket.setType('error');
-
- rPacket.appendNode('error',
- {code: stanza_error.code, type: stanza_error.type},
- [[stanza_error.cond]]);
-
- return rPacket;
-};
-
-/**
- * Returns a string representation of the raw xml content of this packet.
- * @type String
- */
-JSJaCPacket.prototype.xml = typeof XMLSerializer != 'undefined' ?
-function() {
- var r = (new XMLSerializer()).serializeToString(this.getNode());
- if (typeof(r) == 'undefined')
- r = (new XMLSerializer()).serializeToString(this.doc); // oldschool
- return r
-} :
-function() {// IE
- return this.getDoc().xml
-};
-
-
-// PRIVATE METHODS DOWN HERE
-
-/**
- * Gets an attribute of the root element
- * @private
- */
-JSJaCPacket.prototype._getAttribute = function(attr) {
- return this.getNode().getAttribute(attr);
-};
-
-
-if (document.ELEMENT_NODE == null) {
- document.ELEMENT_NODE = 1;
- document.ATTRIBUTE_NODE = 2;
- document.TEXT_NODE = 3;
- document.CDATA_SECTION_NODE = 4;
- document.ENTITY_REFERENCE_NODE = 5;
- document.ENTITY_NODE = 6;
- document.PROCESSING_INSTRUCTION_NODE = 7;
- document.COMMENT_NODE = 8;
- document.DOCUMENT_NODE = 9;
- document.DOCUMENT_TYPE_NODE = 10;
- document.DOCUMENT_FRAGMENT_NODE = 11;
- document.NOTATION_NODE = 12;
-}
-
-/**
- * import node into this packets document
- * @private
- */
-JSJaCPacket.prototype._importNode = function(node, allChildren) {
- switch (node.nodeType) {
- case document.ELEMENT_NODE:
-
- if (this.getDoc().createElementNS) {
- var newNode = this.getDoc().createElementNS(node.namespaceURI, node.nodeName);
- } else {
- var newNode = this.getDoc().createElement(node.nodeName);
- }
-
- /* does the node have any attributes to add? */
- if (node.attributes && node.attributes.length > 0)
- for (var i = 0, il = node.attributes.length;i < il; i++) {
- var attr = node.attributes.item(i);
- if (attr.nodeName == 'xmlns' && newNode.getAttribute('xmlns') != null ) continue;
- if (newNode.setAttributeNS && attr.namespaceURI) {
- newNode.setAttributeNS(attr.namespaceURI,
- attr.nodeName,
- attr.nodeValue);
- } else {
- newNode.setAttribute(attr.nodeName,
- attr.nodeValue);
- }
- }
- /* are we going after children too, and does the node have any? */
- if (allChildren && node.childNodes && node.childNodes.length > 0) {
- for (var i = 0, il = node.childNodes.length; i < il; i++) {
- newNode.appendChild(this._importNode(node.childNodes.item(i), allChildren));
- }
- }
- return newNode;
- break;
- case document.TEXT_NODE:
- case document.CDATA_SECTION_NODE:
- case document.COMMENT_NODE:
- return this.getDoc().createTextNode(node.nodeValue);
- break;
- }
-};
-
-/**
- * Set node value of a child node
- * @private
- */
-JSJaCPacket.prototype._setChildNode = function(nodeName, nodeValue) {
- var aNode = this.getChild(nodeName);
- var tNode = this.getDoc().createTextNode(nodeValue);
- if (aNode)
- try {
- aNode.replaceChild(tNode,aNode.firstChild);
- } catch (e) { }
- else {
- try {
- aNode = this.getDoc().createElementNS(this.getNode().namespaceURI,
- nodeName);
- } catch (ex) {
- aNode = this.getDoc().createElement(nodeName)
- }
- this.getNode().appendChild(aNode);
- aNode.appendChild(tNode);
- }
- return aNode;
-};
-
-/**
- * Builds a node using {@link
- * http://wiki.script.aculo.us/scriptaculous/show/Builder
- * script.aculo.us' Dom Builder} notation.
- * This code is taken from {@link
- * http://wiki.script.aculo.us/scriptaculous/show/Builder
- * script.aculo.us' Dom Builder} and has been modified to suit our
- * needs.<br/>
- * The original parts of the code do have the following copyright
- * and license notice:<br/>
- * Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us,
- * http://mir.acu lo.us) <br/>
- * script.aculo.us is freely distributable under the terms of an
- * MIT-style licen se. // For details, see the script.aculo.us web
- * site: http://script.aculo.us/<br>
- * @author Thomas Fuchs
- * @author Stefan Strigler
- * @return The newly created node
- * @type {@link http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247 Node}
- */
-JSJaCPacket.prototype.buildNode = function(elementName) {
- return JSJaCBuilder.buildNode(this.getDoc(),
- elementName,
- arguments[1],
- arguments[2]);
-};
-
-/**
- * Appends node created by buildNode to this packets parent node.
- * @param {@link http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247 Node} element The node to append or
- * @param {String} element A name plus an object hash with attributes (optional) plus an array of childnodes (optional)
- * @see #buildNode
- * @return This packet
- * @type JSJaCPacket
- */
-JSJaCPacket.prototype.appendNode = function(element) {
- if (typeof element=='object') { // seems to be a prebuilt node
- return this.getNode().appendChild(element)
- } else { // build node
- return this.getNode().appendChild(this.buildNode(element,
- arguments[1],
- arguments[2],
- null,
- this.getNode().namespaceURI));
- }
-};
-
-
-/**
- * A jabber/XMPP presence packet
- * @class Models the XMPP notion of a 'presence' packet
- * @extends JSJaCPacket
- */
-function JSJaCPresence() {
- /**
- * @ignore
- */
- this.base = JSJaCPacket;
- this.base('presence');
-}
-JSJaCPresence.prototype = new JSJaCPacket;
-
-/**
- * Sets the status message for current status. Usually this is set
- * to some human readable string indicating what the user is
- * doing/feel like currently.
- * @param {String} status A status message
- * @return this
- * @type JSJaCPacket
- */
-JSJaCPresence.prototype.setStatus = function(status) {
- this._setChildNode("status", status);
- return this;
-};
-/**
- * Sets the online status for this presence packet.
- * @param {String} show An XMPP complient status indicator. Must
- * be one of 'chat', 'away', 'xa', 'dnd'
- * @return this
- * @type JSJaCPacket
- */
-JSJaCPresence.prototype.setShow = function(show) {
- if (show == 'chat' || show == 'away' || show == 'xa' || show == 'dnd')
- this._setChildNode("show",show);
- return this;
-};
-/**
- * Sets the priority of the resource bind to with this connection
- * @param {int} prio The priority to set this resource to
- * @return this
- * @type JSJaCPacket
- */
-JSJaCPresence.prototype.setPriority = function(prio) {
- this._setChildNode("priority", prio);
- return this;
-};
-/**
- * Some combined method that allowes for setting show, status and
- * priority at once
- * @param {String} show A status message
- * @param {String} status A status indicator as defined by XMPP
- * @param {int} prio A priority for this resource
- * @return this
- * @type JSJaCPacket
- */
-JSJaCPresence.prototype.setPresence = function(show,status,prio) {
- if (show)
- this.setShow(show);
- if (status)
- this.setStatus(status);
- if (prio)
- this.setPriority(prio);
- return this;
-};
-
-/**
- * Gets the status message of this presence
- * @return The (human readable) status message
- * @type String
- */
-JSJaCPresence.prototype.getStatus = function() {
- return this.getChildVal('status');
-};
-/**
- * Gets the status of this presence.
- * Either one of 'chat', 'away', 'xa' or 'dnd' or null.
- * @return The status indicator as defined by XMPP
- * @type String
- */
-JSJaCPresence.prototype.getShow = function() {
- return this.getChildVal('show');
-};
-/**
- * Gets the priority of this status message
- * @return A resource priority
- * @type int
- */
-JSJaCPresence.prototype.getPriority = function() {
- return this.getChildVal('priority');
-};
-
-
-/**
- * A jabber/XMPP iq packet
- * @class Models the XMPP notion of an 'iq' packet
- * @extends JSJaCPacket
- */
-function JSJaCIQ() {
- /**
- * @ignore
- */
- this.base = JSJaCPacket;
- this.base('iq');
-}
-JSJaCIQ.prototype = new JSJaCPacket;
-
-/**
- * Some combined method to set 'to', 'type' and 'id' at once
- * @param {String} to the recepients JID
- * @param {String} type A XMPP compliant iq type (one of 'set', 'get', 'result' and 'error'
- * @param {String} id A packet ID
- * @return this
- * @type JSJaCIQ
- */
-JSJaCIQ.prototype.setIQ = function(to,type,id) {
- if (to)
- this.setTo(to);
- if (type)
- this.setType(type);
- if (id)
- this.setID(id);
- return this;
-};
-/**
- * Creates a 'query' child node with given XMLNS
- * @param {String} xmlns The namespace for the 'query' node
- * @return The query node
- * @type {@link http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247 Node}
- */
-JSJaCIQ.prototype.setQuery = function(xmlns) {
- var query;
- try {
- query = this.getDoc().createElementNS(xmlns,'query');
- } catch (e) {
- query = this.getDoc().createElement('query');
- query.setAttribute('xmlns',xmlns);
- }
- this.getNode().appendChild(query);
- return query;
-};
-
-/**
- * Gets the 'query' node of this packet
- * @return The query node
- * @type {@link http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247 Node}
- */
-JSJaCIQ.prototype.getQuery = function() {
- return this.getNode().getElementsByTagName('query').item(0);
-};
-/**
- * Gets the XMLNS of the query node contained within this packet
- * @return The namespace of the query node
- * @type String
- */
-JSJaCIQ.prototype.getQueryXMLNS = function() {
- if (this.getQuery()) {
- return this.getQuery().namespaceURI || this.getQuery().getAttribute('xmlns');
- } else {
- return null;
- }
-};
-
-/**
- * Creates an IQ reply with type set to 'result'. If given appends payload to first child if IQ. Payload maybe XML as string or a DOM element (or an array of such elements as well).
- * @param {Element} payload A payload to be appended [optional]
- * @return An IQ reply packet
- * @type JSJaCIQ
- */
-JSJaCIQ.prototype.reply = function(payload) {
- var rIQ = this.clone();
- rIQ.setTo(this.getFrom());
- rIQ.setFrom();
- rIQ.setType('result');
- if (payload) {
- if (typeof payload == 'string')
- rIQ.getChild().appendChild(rIQ.getDoc().loadXML(payload));
- else if (payload.constructor == Array) {
- var node = rIQ.getChild();
- for (var i=0; i<payload.length; i++)
- if(typeof payload[i] == 'string')
- node.appendChild(rIQ.getDoc().loadXML(payload[i]));
- else if (typeof payload[i] == 'object')
- node.appendChild(payload[i]);
- }
- else if (typeof payload == 'object')
- rIQ.getChild().appendChild(payload);
- }
- return rIQ;
-};
-
-/**
- * A jabber/XMPP message packet
- * @class Models the XMPP notion of an 'message' packet
- * @extends JSJaCPacket
- */
-function JSJaCMessage() {
- /**
- * @ignore
- */
- this.base = JSJaCPacket;
- this.base('message');
-}
-JSJaCMessage.prototype = new JSJaCPacket;
-
-/**
- * Sets the body of the message
- * @param {String} body Your message to be sent along
- * @return this message
- * @type JSJaCMessage
- */
-JSJaCMessage.prototype.setBody = function(body) {
- this._setChildNode("body",body);
- return this;
-};
-/**
- * Sets the subject of the message
- * @param {String} subject Your subject to be sent along
- * @return this message
- * @type JSJaCMessage
- */
-JSJaCMessage.prototype.setSubject = function(subject) {
- this._setChildNode("subject",subject);
- return this;
-};
-/**
- * Sets the 'tread' attribute for this message. This is used to identify
- * threads in chat conversations
- * @param {String} thread Usually a somewhat random hash.
- * @return this message
- * @type JSJaCMessage
- */
-JSJaCMessage.prototype.setThread = function(thread) {
- this._setChildNode("thread", thread);
- return this;
-};
-/**
- * Sets the 'nick' attribute for this message.
- * This is sometime sused to detect the sender nickname when he's not in the roster
- * @param {String} nickname
- * @return this message
- * @type JSJaCMessage
- */
-JSJaCMessage.prototype.setNick = function(nick) {
- var aNode = this.getChild("nick");
- var tNode = this.getDoc().createTextNode(nick);
- if (aNode)
- try {
- aNode.replaceChild(tNode,aNode.firstChild);
- } catch (e) { }
- else {
- try {
- aNode = this.getDoc().createElementNS('http://jabber.org/protocol/nick',
- "nick");
- } catch (ex) {
- aNode = this.getDoc().createElement("nick")
- }
- this.getNode().appendChild(aNode);
- aNode.appendChild(tNode);
- }
- return this;
-};
-/**
- * Gets the 'thread' identifier for this message
- * @return A thread identifier
- * @type String
- */
-JSJaCMessage.prototype.getThread = function() {
- return this.getChildVal('thread');
-};
-/**
- * Gets the body of this message
- * @return The body of this message
- * @type String
- */
-JSJaCMessage.prototype.getBody = function() {
- return this.getChildVal('body');
-};
-/**
- * Gets the subject of this message
- * @return The subject of this message
- * @type String
- */
-JSJaCMessage.prototype.getSubject = function() {
- return this.getChildVal('subject')
-};
-/**
- * Gets the nickname of this message
- * @return The nickname of this message
- * @type String
- */
-JSJaCMessage.prototype.getNick = function() {
- return this.getChildVal('nick');
-};
-
-
-/**
- * Tries to transform a w3c DOM node to JSJaC's internal representation
- * (JSJaCPacket type, one of JSJaCPresence, JSJaCMessage, JSJaCIQ)
- * @param: {Node
- * http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247}
- * node The node to be transformed
- * @return A JSJaCPacket representing the given node. If node's root
- * elemenent is not one of 'message', 'presence' or 'iq',
- * <code>null</code> is being returned.
- * @type JSJaCPacket
- */
-JSJaCPacket.wrapNode = function(node) {
- var oPacket = null;
-
- switch (node.nodeName.toLowerCase()) {
- case 'presence':
- oPacket = new JSJaCPresence();
- break;
- case 'message':
- oPacket = new JSJaCMessage();
- break;
- case 'iq':
- oPacket = new JSJaCIQ();
- break;
- }
-
- if (oPacket) {
- oPacket.getDoc().replaceChild(oPacket._importNode(node, true),
- oPacket.getNode());
- }
-
- return oPacket;
-};
-
-
-
-/**
- * an error packet for internal use
- * @private
- * @constructor
- */
-function JSJaCError(code,type,condition) {
- var xmldoc = XmlDocument.create("error","jsjac");
-
- xmldoc.documentElement.setAttribute('code',code);
- xmldoc.documentElement.setAttribute('type',type);
- if (condition)
- xmldoc.documentElement.appendChild(xmldoc.createElement(condition)).
- setAttribute('xmlns','urn:ietf:params:xml:ns:xmpp-stanzas');
- return xmldoc.documentElement;
-}
-
-
-
-/**
- * Creates a new set of hash keys
- * @class Reflects a set of sha1/md5 hash keys for securing sessions
- * @constructor
- * @param {Function} func The hash function to be used for creating the keys
- * @param {Debugger} oDbg Reference to debugger implementation [optional]
- */
-function JSJaCKeys(func,oDbg) {
- var seed = Math.random();
-
- /**
- * @private
- */
- this._k = new Array();
- this._k[0] = seed.toString();
- if (oDbg)
- /**
- * Reference to Debugger
- * @type Debugger
- */
- this.oDbg = oDbg;
- else {
- this.oDbg = {};
- this.oDbg.log = function() {};
- }
-
- if (func) {
- for (var i=1; i<JSJAC_NKEYS; i++) {
- this._k[i] = func(this._k[i-1]);
- oDbg.log(i+": "+this._k[i],4);
- }
- }
-
- /**
- * @private
- */
- this._indexAt = JSJAC_NKEYS-1;
- /**
- * Gets next key from stack
- * @return New hash key
- * @type String
- */
- this.getKey = function() {
- return this._k[this._indexAt--];
- };
- /**
- * Indicates whether there's only one key left
- * @return <code>true</code> if there's only one key left, false otherwise
- * @type boolean
- */
- this.lastKey = function() { return (this._indexAt == 0); };
- /**
- * Returns number of overall/initial stack size
- * @return Number of keys created
- * @type int
- */
- this.size = function() { return this._k.length; };
-
- /**
- * @private
- */
- this._getSuspendVars = function() {
- return ('_k,_indexAt').split(',');
- }
-}
-
-
-/**
- * @fileoverview Contains all things in common for all subtypes of connections
- * supported.
- * @author Stefan Strigler steve@zeank.in-berlin.de
- * @version 1.3
- */
-
-/**
- * Creates a new Jabber connection (a connection to a jabber server)
- * @class Somewhat abstract base class for jabber connections. Contains all
- * of the code in common for all jabber connections
- * @constructor
- * @param {JSON http://www.json.org/index} oArg JSON with properties: <br>
- * * <code>httpbase</code> the http base address of the service to be used for
- * connecting to jabber<br>
- * * <code>oDbg</code> (optional) a reference to a debugger interface
- */
-function JSJaCConnection(oArg) {
-
- if (oArg && oArg.oDbg && oArg.oDbg.log) {
- /**
- * Reference to debugger interface
- * (needs to implement method <code>log</code>)
- * @type Debugger
- */
- this.oDbg = oArg.oDbg;
- } else {
- this.oDbg = new Object(); // always initialise a debugger
- this.oDbg.log = function() { };
- }
-
- if (oArg && oArg.timerval)
- this.setPollInterval(oArg.timerval);
- else
- this.setPollInterval(JSJAC_TIMERVAL);
-
- if (oArg && oArg.httpbase)
- /**
- * @private
- */
- this._httpbase = oArg.httpbase;
-
- if (oArg &&oArg.allow_plain)
- /**
- * @private
- */
- this.allow_plain = oArg.allow_plain;
- else
- this.allow_plain = JSJAC_ALLOW_PLAIN;
-
- if (oArg && oArg.cookie_prefix)
- /**
- * @private
- */
- this._cookie_prefix = oArg.cookie_prefix;
- else
- this._cookie_prefix = "";
-
- /**
- * @private
- */
- this._connected = false;
- /**
- * @private
- */
- this._events = new Array();
- /**
- * @private
- */
- this._keys = null;
- /**
- * @private
- */
- this._ID = 0;
- /**
- * @private
- */
- this._inQ = new Array();
- /**
- * @private
- */
- this._pQueue = new Array();
- /**
- * @private
- */
- this._regIDs = new Array();
- /**
- * @private
- */
- this._req = new Array();
- /**
- * @private
- */
- this._status = 'intialized';
- /**
- * @private
- */
- this._errcnt = 0;
- /**
- * @private
- */
- this._inactivity = JSJAC_INACTIVITY;
- /**
- * @private
- */
- this._sendRawCallbacks = new Array();
-}
-
-// Generates an ID
-var STANZA_ID = 1;
-
-function genID() {
- return STANZA_ID++;
-}
-
-JSJaCConnection.prototype.connect = function(oArg) {
- this._setStatus('connecting');
-
- this.domain = oArg.domain || 'localhost';
- this.username = oArg.username;
- this.resource = oArg.resource;
- this.pass = oArg.pass;
- this.register = oArg.register;
-
- this.authhost = oArg.authhost || this.domain;
- this.authtype = oArg.authtype || 'sasl';
-
- if (oArg.xmllang && oArg.xmllang != '')
- this._xmllang = oArg.xmllang;
- else
- this._xmllang = 'en';
-
- this.host = oArg.host || this.domain;
- this.port = oArg.port || 5222;
- if (oArg.secure)
- this.secure = 'true';
- else
- this.secure = 'false';
-
- if (oArg.wait)
- this._wait = oArg.wait;
-
- this.jid = this.username + '@' + this.domain;
- this.fulljid = this.jid + '/' + this.resource;
-
- this._rid = Math.round( 100000.5 + ( ( (900000.49999) - (100000.5) ) * Math.random() ) );
-
- // setupRequest must be done after rid is created but before first use in reqstr
- var slot = this._getFreeSlot();
- this._req[slot] = this._setupRequest(true);
-
- var reqstr = this._getInitialRequestString();
-
- this.oDbg.log(reqstr,4);
-
- this._req[slot].r.onreadystatechange =
- JSJaC.bind(function() {
- var r = this._req[slot].r;
- if (r.readyState == 4) {
- this.oDbg.log("async recv: "+r.responseText,4);
- this._handleInitialResponse(r); // handle response
- }
- }, this);
-
- if (typeof(this._req[slot].r.onerror) != 'undefined') {
- this._req[slot].r.onerror =
- JSJaC.bind(function(e) {
- this.oDbg.log('XmlHttpRequest error',1);
- return false;
- }, this);
- }
-
- this._req[slot].r.send(reqstr);
-};
-
-/**
- * Tells whether this connection is connected
- * @return <code>true</code> if this connections is connected,
- * <code>false</code> otherwise
- * @type boolean
- */
-JSJaCConnection.prototype.connected = function() { return this._connected; };
-
-/**
- * Disconnects from jabber server and terminates session (if applicable)
- */
-JSJaCConnection.prototype.disconnect = function() {
- this._setStatus('disconnecting');
-
- if (!this.connected())
- return;
- this._connected = false;
-
- clearInterval(this._interval);
- clearInterval(this._inQto);
-
- if (this._timeout)
- clearTimeout(this._timeout); // remove timer
-
- var slot = this._getFreeSlot();
- // Intentionally synchronous
- this._req[slot] = this._setupRequest(false);
-
- request = this._getRequestString(false, true);
-
- this.oDbg.log("Disconnecting: " + request,4);
- this._req[slot].r.send(request);
-
- try {
- DataStore.removeDB(MINI_HASH, 'jsjac', 'state');
- } catch (e) {}
-
- this.oDbg.log("Disconnected: "+this._req[slot].r.responseText,2);
- this._handleEvent('ondisconnect');
-};
-
-/**
- * Gets current value of polling interval
- * @return Polling interval in milliseconds
- * @type int
- */
-JSJaCConnection.prototype.getPollInterval = function() {
- return this._timerval;
-};
-
-/**
- * Registers an event handler (callback) for this connection.
-
- * <p>Note: All of the packet handlers for specific packets (like
- * message_in, presence_in and iq_in) fire only if there's no
- * callback associated with the id.<br>
-
- * <p>Example:<br/>
- * <code>con.registerHandler('iq', 'query', 'jabber:iq:version', handleIqVersion);</code>
-
-
- * @param {String} event One of
-
- * <ul>
- * <li>onConnect - connection has been established and authenticated</li>
- * <li>onDisconnect - connection has been disconnected</li>
- * <li>onResume - connection has been resumed</li>
-
- * <li>onStatusChanged - connection status has changed, current
- * status as being passed argument to handler. See {@link #status}.</li>
-
- * <li>onError - an error has occured, error node is supplied as
- * argument, like this:<br><code>&lt;error code='404' type='cancel'&gt;<br>
- * &lt;item-not-found xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/&gt;<br>
- * &lt;/error&gt;</code></li>
-
- * <li>packet_in - a packet has been received (argument: the
- * packet)</li>
-
- * <li>packet_out - a packet is to be sent(argument: the
- * packet)</li>
-
- * <li>message_in | message - a message has been received (argument:
- * the packet)</li>
-
- * <li>message_out - a message packet is to be sent (argument: the
- * packet)</li>
-
- * <li>presence_in | presence - a presence has been received
- * (argument: the packet)</li>
-
- * <li>presence_out - a presence packet is to be sent (argument: the
- * packet)</li>
-
- * <li>iq_in | iq - an iq has been received (argument: the packet)</li>
- * <li>iq_out - an iq is to be sent (argument: the packet)</li>
- * </ul>
-
- * @param {String} childName A childnode's name that must occur within a
- * retrieved packet [optional]
-
- * @param {String} childNS A childnode's namespace that must occure within
- * a retrieved packet (works only if childName is given) [optional]
-
- * @param {String} type The type of the packet to handle (works only if childName and chidNS are given (both may be set to '*' in order to get skipped) [optional]
-
- * @param {Function} handler The handler to be called when event occurs. If your handler returns 'true' it cancels bubbling of the event. No other registered handlers for this event will be fired.
- */
-JSJaCConnection.prototype.registerHandler = function(event) {
- event = event.toLowerCase(); // don't be case-sensitive here
- var eArg = {handler: arguments[arguments.length-1],
- childName: '*',
- childNS: '*',
- type: '*'};
- if (arguments.length > 2)
- eArg.childName = arguments[1];
- if (arguments.length > 3)
- eArg.childNS = arguments[2];
- if (arguments.length > 4)
- eArg.type = arguments[3];
- if (!this._events[event])
- this._events[event] = new Array(eArg);
- else
- this._events[event] = this._events[event].concat(eArg);
-
- // sort events in order how specific they match criterias thus using
- // wildcard patterns puts them back in queue when it comes to
- // bubbling the event
- this._events[event] =
- this._events[event].sort(function(a,b) {
- var aRank = 0;
- var bRank = 0;
- with (a) {
- if (type == '*')
- aRank++;
- if (childNS == '*')
- aRank++;
- if (childName == '*')
- aRank++;
- }
- with (b) {
- if (type == '*')
- bRank++;
- if (childNS == '*')
- bRank++;
- if (childName == '*')
- bRank++;
- }
- if (aRank > bRank)
- return 1;
- if (aRank < bRank)
- return -1;
- return 0;
- });
- this.oDbg.log("registered handler for event '"+event+"'",2);
-};
-
-JSJaCConnection.prototype.unregisterHandler = function(event,handler) {
- event = event.toLowerCase(); // don't be case-sensitive here
-
- if (!this._events[event])
- return;
-
- var arr = this._events[event], res = new Array();
- for (var i=0; i<arr.length; i++)
- if (arr[i].handler != handler)
- res.push(arr[i]);
-
- if (arr.length != res.length) {
- this._events[event] = res;
- this.oDbg.log("unregistered handler for event '"+event+"'",2);
- }
-};
-
-/**
- * Register for iq packets of type 'get'.
- * @param {String} childName A childnode's name that must occur within a
- * retrieved packet
-
- * @param {String} childNS A childnode's namespace that must occure within
- * a retrieved packet (works only if childName is given)
-
- * @param {Function} handler The handler to be called when event occurs. If your handler returns 'true' it cancels bubbling of the event. No other registered handlers for this event will be fired.
- */
-JSJaCConnection.prototype.registerIQGet = function(childName, childNS, handler) {
- this.registerHandler('iq', childName, childNS, 'get', handler);
-};
-
-/**
- * Register for iq packets of type 'set'.
- * @param {String} childName A childnode's name that must occur within a
- * retrieved packet
-
- * @param {String} childNS A childnode's namespace that must occure within
- * a retrieved packet (works only if childName is given)
-
- * @param {Function} handler The handler to be called when event occurs. If your handler returns 'true' it cancels bubbling of the event. No other registered handlers for this event will be fired.
- */
-JSJaCConnection.prototype.registerIQSet = function(childName, childNS, handler) {
- this.registerHandler('iq', childName, childNS, 'set', handler);
-};
-
-/**
- * Resumes this connection from saved state (cookie)
- * @return Whether resume was successful
- * @type boolean
- */
-JSJaCConnection.prototype.resume = function() {
- try {
- var json = DataStore.getDB(MINI_HASH, 'jsjac', 'state');
- this.oDbg.log('read cookie: '+json,2);
- DataStore.removeDB(MINI_HASH, 'jsjac', 'state');
-
- return this.resumeFromData(JSJaCJSON.parse(json));
- } catch (e) {}
- return false; // sth went wrong
-};
-
-/**
- * Resumes BOSH connection from data
- * @param {Object} serialized jsjac state information
- * @return Whether resume was successful
- * @type boolean
- */
-JSJaCConnection.prototype.resumeFromData = function(data) {
- try {
- this._setStatus('resuming');
-
- for (var i in data)
- if (data.hasOwnProperty(i))
- this[i] = data[i];
-
- // copy keys - not being very generic here :-/
- if (this._keys) {
- this._keys2 = new JSJaCKeys();
- var u = this._keys2._getSuspendVars();
- for (var i=0; i<u.length; i++)
- this._keys2[u[i]] = this._keys[u[i]];
- this._keys = this._keys2;
- }
-
- if (this._connected) {
- // don't poll too fast!
- this._handleEvent('onresume');
- setTimeout(JSJaC.bind(this._resume, this),this.getPollInterval());
- this._interval = setInterval(JSJaC.bind(this._checkQueue, this),
- JSJAC_CHECKQUEUEINTERVAL);
- this._inQto = setInterval(JSJaC.bind(this._checkInQ, this),
- JSJAC_CHECKINQUEUEINTERVAL);
- }
-
- return (this._connected === true);
- } catch (e) {
- if (e.message)
- this.oDbg.log("Resume failed: "+e.message, 1);
- else
- this.oDbg.log("Resume failed: "+e, 1);
- return false;
- }
-};
-
-/**
- * Sends a JSJaCPacket
- * @param {JSJaCPacket} packet The packet to send
- * @param {Function} cb The callback to be called if there's a reply
- * to this packet (identified by id) [optional]
- * @param {Object} arg Arguments passed to the callback
- * (additionally to the packet received) [optional]
- * @return 'true' if sending was successfull, 'false' otherwise
- * @type boolean
- */
-JSJaCConnection.prototype.send = function(packet,cb,arg) {
- if (!packet || !packet.pType) {
- this.oDbg.log("no packet: "+packet, 1);
- return false;
- }
-
- if (!this.connected())
- return false;
-
- // generate an ID for the packet
- if (!packet.getID())
- packet.setID(genID());
-
- // packet xml:lang
- if (!packet.getXMLLang())
- packet.setXMLLang(XML_LANG);
-
- // remember id for response if callback present
- if (cb)
- this._registerPID(packet, cb, arg);
-
- try {
- this._handleEvent(packet.pType()+'_out', packet);
- this._handleEvent("packet_out", packet);
- this._pQueue = this._pQueue.concat(packet.xml());
- } catch (e) {
- this.oDbg.log(e.toString(),1);
- return false;
- }
-
- return true;
-};
-
-/**
- * Sends an IQ packet. Has default handlers for each reply type.
- * Those maybe overriden by passing an appropriate handler.
- * @param {JSJaCIQPacket} iq - the iq packet to send
- * @param {Object} handlers - object with properties 'error_handler',
- * 'result_handler' and 'default_handler'
- * with appropriate functions
- * @param {Object} arg - argument to handlers
- * @return 'true' if sending was successfull, 'false' otherwise
- * @type boolean
- */
-JSJaCConnection.prototype.sendIQ = function(iq, handlers, arg) {
- if (!iq || iq.pType() != 'iq') {
- return false;
- }
-
- handlers = handlers || {};
- var error_handler = handlers.error_handler || JSJaC.bind(function(aIq) {
- this.oDbg.log(aIq.xml(), 1);
- }, this);
-
- var result_handler = handlers.result_handler || JSJaC.bind(function(aIq) {
- this.oDbg.log(aIq.xml(), 2);
- }, this);
-
- var iqHandler = function(aIq, arg) {
- switch (aIq.getType()) {
- case 'error':
- error_handler(aIq);
- break;
- case 'result':
- result_handler(aIq, arg);
- break;
- }
- };
- return this.send(iq, iqHandler, arg);
-};
-
-/**
- * Sets polling interval for this connection
- * @param {int} timerval Milliseconds to set timer to
- * @return effective interval this connection has been set to
- * @type int
- */
-JSJaCConnection.prototype.setPollInterval = function(timerval) {
- if (timerval && !isNaN(timerval))
- this._timerval = timerval;
- return this._timerval;
-};
-
-/**
- * Returns current status of this connection
- * @return String to denote current state. One of
- * <ul>
- * <li>'initializing' ... well
- * <li>'connecting' if connect() was called
- * <li>'resuming' if resume() was called
- * <li>'processing' if it's about to operate as normal
- * <li>'onerror_fallback' if there was an error with the request object
- * <li>'protoerror_fallback' if there was an error at the http binding protocol flow (most likely that's where you interested in)
- * <li>'internal_server_error' in case of an internal server error
- * <li>'suspending' if suspend() is being called
- * <li>'aborted' if abort() was called
- * <li>'disconnecting' if disconnect() has been called
- * </ul>
- * @type String
- */
-JSJaCConnection.prototype.status = function() { return this._status; };
-
-/**
- * Suspends this connection (saving state for later resume)
- * Saves state to cookie
- * @return Whether suspend (saving to cookie) was successful
- * @type boolean
- */
-JSJaCConnection.prototype.suspend = function(has_pause) {
- var data = this.suspendToData(has_pause);
-
- try {
- var c = DataStore.setDB(MINI_HASH, 'jsjac', 'state', JSJaCJSON.toString(data));
- return c;
- } catch (e) {
- this.oDbg.log("Failed creating cookie '"+this._cookie_prefix+
- "JSJaC_State': "+e.message,1);
- }
- return false;
-};
-
-/**
- * Suspend connection and return serialized JSJaC connection state
- * @return JSJaC connection state object
- * @type Object
- */
-JSJaCConnection.prototype.suspendToData = function(has_pause) {
-
- // remove timers
- if(has_pause) {
- clearTimeout(this._timeout);
- clearInterval(this._interval);
- clearInterval(this._inQto);
-
- this._suspend();
- }
-
- var u = ('_connected,_keys,_ID,_inQ,_pQueue,_regIDs,_errcnt,_inactivity,domain,username,resource,jid,fulljid,_sid,_httpbase,_timerval,_is_polling').split(',');
- u = u.concat(this._getSuspendVars());
- var s = new Object();
-
- for (var i=0; i<u.length; i++) {
- if (!this[u[i]]) continue; // hu? skip these!
- if (this[u[i]]._getSuspendVars) {
- var uo = this[u[i]]._getSuspendVars();
- var o = new Object();
- for (var j=0; j<uo.length; j++)
- o[uo[j]] = this[u[i]][uo[j]];
- } else
- var o = this[u[i]];
-
- s[u[i]] = o;
- }
-
- if(has_pause) {
- this._connected = false;
- this._setStatus('suspending');
- }
-
- return s;
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._abort = function() {
- clearTimeout(this._timeout); // remove timer
-
- clearInterval(this._inQto);
- clearInterval(this._interval);
-
- this._connected = false;
-
- this._setStatus('aborted');
-
- this.oDbg.log("Disconnected.",1);
- this._handleEvent('ondisconnect');
- this._handleEvent('onerror',
- JSJaCError('500','cancel','service-unavailable'));
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._checkInQ = function() {
- for (var i=0; i<this._inQ.length && i<10; i++) {
- var item = this._inQ[0];
- this._inQ = this._inQ.slice(1,this._inQ.length);
- var packet = JSJaCPacket.wrapNode(item);
-
- if (!packet)
- return;
-
- this._handleEvent("packet_in", packet);
-
- if (packet.pType && !this._handlePID(packet)) {
- this._handleEvent(packet.pType()+'_in',packet);
- this._handleEvent(packet.pType(),packet);
- }
- }
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._checkQueue = function() {
- if (this._pQueue.length != 0)
- this._process();
- return true;
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._doAuth = function() {
- if (this.has_sasl && this.authtype == 'nonsasl')
- this.oDbg.log("Warning: SASL present but not used", 1);
-
- if (!this._doSASLAuth() &&
- !this._doLegacyAuth()) {
- this.oDbg.log("Auth failed for authtype "+this.authtype,1);
- this.disconnect();
- return false;
- }
- return true;
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._doInBandReg = function() {
- if (this.authtype == 'saslanon' || this.authtype == 'anonymous')
- return; // bullshit - no need to register if anonymous
-
- /* ***
- * In-Band Registration see JEP-0077
- */
-
- var iq = new JSJaCIQ();
- iq.setType('set');
- iq.setID('reg1');
- iq.appendNode("query", {xmlns: "jabber:iq:register"},
- [["username", this.username],
- ["password", this.pass]]);
-
- this.send(iq,this._doInBandRegDone);
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._doInBandRegDone = function(iq) {
- if (iq && iq.getType() == 'error') { // we failed to register
- this.oDbg.log("registration failed for "+this.username,0);
- this._handleEvent('onerror',iq.getChild('error'));
- return;
- }
-
- this.oDbg.log(this.username + " registered succesfully",0);
-
- this._doAuth();
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._doLegacyAuth = function() {
- if (this.authtype != 'nonsasl' && this.authtype != 'anonymous')
- return false;
-
- /* ***
- * Non-SASL Authentication as described in JEP-0078
- */
- var iq = new JSJaCIQ();
- iq.setIQ(null,'get','auth1');
- iq.appendNode('query', {xmlns: 'jabber:iq:auth'},
- [['username', this.username]]);
-
- this.send(iq,this._doLegacyAuth2);
- return true;
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._doLegacyAuth2 = function(iq) {
- if (!iq || iq.getType() != 'result') {
- if (iq && iq.getType() == 'error')
- this._handleEvent('onerror',iq.getChild('error'));
- this.disconnect();
- return;
- }
-
- var use_digest = (iq.getChild('digest') != null);
-
- /* ***
- * Send authentication
- */
- var iq = new JSJaCIQ();
- iq.setIQ(null,'set','auth2');
-
- query = iq.appendNode('query', {xmlns: 'jabber:iq:auth'},
- [['username', this.username],
- ['resource', this.resource]]);
-
- if (use_digest) { // digest login
- query.appendChild(iq.buildNode('digest', {xmlns: 'jabber:iq:auth'},
- hex_sha1(this.streamid + this.pass)));
- } else if (this.allow_plain) { // use plaintext auth
- query.appendChild(iq.buildNode('password', {xmlns: 'jabber:iq:auth'},
- this.pass));
- } else {
- this.oDbg.log("no valid login mechanism found",1);
- this.disconnect();
- return false;
- }
-
- this.send(iq,this._doLegacyAuthDone);
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._doLegacyAuthDone = function(iq) {
- if (iq.getType() != 'result') { // auth' failed
- if (iq.getType() == 'error')
- this._handleEvent('onerror',iq.getChild('error'));
- this.disconnect();
- } else
- this._handleEvent('onconnect');
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._doSASLAuth = function() {
- if (this.authtype == 'nonsasl' || this.authtype == 'anonymous')
- return false;
-
- if (this.authtype == 'saslanon') {
- if (this.mechs['ANONYMOUS']) {
- this.oDbg.log("SASL using mechanism 'ANONYMOUS'",2);
- return this._sendRaw("<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='ANONYMOUS'/>",
- this._doSASLAuthDone);
- }
- this.oDbg.log("SASL ANONYMOUS requested but not supported",1);
- } else {
- if (this.mechs['DIGEST-MD5']) {
- this.oDbg.log("SASL using mechanism 'DIGEST-MD5'",2);
- return this._sendRaw("<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='DIGEST-MD5'/>",
- this._doSASLAuthDigestMd5S1);
- } else if (this.allow_plain && this.mechs['PLAIN']) {
- this.oDbg.log("SASL using mechanism 'PLAIN'",2);
- var authStr = this.username+'@'+
- this.domain+String.fromCharCode(0)+
- this.username+String.fromCharCode(0)+
- this.pass;
- this.oDbg.log("authenticating with '"+authStr+"'",2);
- authStr = b64encode(authStr);
- return this._sendRaw("<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='PLAIN'>"+authStr+"</auth>",
- this._doSASLAuthDone);
- }
- this.oDbg.log("No SASL mechanism applied",1);
- this.authtype = 'nonsasl'; // fallback
- }
- return false;
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._doSASLAuthDigestMd5S1 = function(el) {
- if (el.nodeName != "challenge") {
- this.oDbg.log("challenge missing",1);
- this._handleEvent('onerror',JSJaCError('401','auth','not-authorized'));
- this.disconnect();
- } else {
- var challenge = b64decode(el.firstChild.nodeValue);
- this.oDbg.log("got challenge: "+challenge,2);
- this._nonce = challenge.substring(challenge.indexOf("nonce=")+7);
- this._nonce = this._nonce.substring(0,this._nonce.indexOf("\""));
- this.oDbg.log("nonce: "+this._nonce,2);
- if (this._nonce == '' || this._nonce.indexOf('\"') != -1) {
- this.oDbg.log("nonce not valid, aborting",1);
- this.disconnect();
- return;
- }
-
- this._digest_uri = "xmpp/";
- // if (typeof(this.host) != 'undefined' && this.host != '') {
- // this._digest-uri += this.host;
- // if (typeof(this.port) != 'undefined' && this.port)
- // this._digest-uri += ":" + this.port;
- // this._digest-uri += '/';
- // }
- this._digest_uri += this.domain;
-
- this._cnonce = cnonce(14);
-
- this._nc = '00000001';
-
- var X = this.username+':'+this.domain+':'+this.pass;
- var Y = rstr_md5(str2rstr_utf8(X));
-
- var A1 = Y+':'+this._nonce+':'+this._cnonce;
- var HA1 = rstr2hex(rstr_md5(A1));
-
- var A2 = 'AUTHENTICATE:'+this._digest_uri;
- var HA2 = hex_md5(A2);
-
- var response = hex_md5(HA1+':'+this._nonce+':'+this._nc+':'+
- this._cnonce+':auth:'+HA2);
-
- var rPlain = 'username="'+this.username+'",realm="'+this.domain+
- '",nonce="'+this._nonce+'",cnonce="'+this._cnonce+'",nc="'+this._nc+
- '",qop=auth,digest-uri="'+this._digest_uri+'",response="'+response+
- '",charset="utf-8"';
-
- this.oDbg.log("response: "+rPlain,2);
-
- this._sendRaw("<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>"+
- b64encode(rPlain)+"</response>",
- this._doSASLAuthDigestMd5S2);
- }
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._doSASLAuthDigestMd5S2 = function(el) {
- if (el.nodeName == 'failure') {
- if (el.xml)
- this.oDbg.log("auth error: "+el.xml,1);
- else
- this.oDbg.log("auth error",1);
- this._handleEvent('onerror',JSJaCError('401','auth','not-authorized'));
- this.disconnect();
- return;
- }
-
- var response = b64decode(el.firstChild.nodeValue);
- this.oDbg.log("response: "+response,2);
-
- var rspauth = response.substring(response.indexOf("rspauth=")+8);
- this.oDbg.log("rspauth: "+rspauth,2);
-
- var X = this.username+':'+this.domain+':'+this.pass;
- var Y = rstr_md5(str2rstr_utf8(X));
-
- var A1 = Y+':'+this._nonce+':'+this._cnonce;
- var HA1 = rstr2hex(rstr_md5(A1));
-
- var A2 = ':'+this._digest_uri;
- var HA2 = hex_md5(A2);
-
- var rsptest = hex_md5(HA1+':'+this._nonce+':'+this._nc+':'+
- this._cnonce+':auth:'+HA2);
- this.oDbg.log("rsptest: "+rsptest,2);
-
- if (rsptest != rspauth) {
- this.oDbg.log("SASL Digest-MD5: server repsonse with wrong rspauth",1);
- this.disconnect();
- return;
- }
-
- if (el.nodeName == 'success') {
- this._reInitStream(JSJaC.bind(this._doStreamBind, this));
- } else { // some extra turn
- this._sendRaw("<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>",
- this._doSASLAuthDone);
- }
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._doSASLAuthDone = function (el) {
- if (el.nodeName != 'success') {
- this.oDbg.log("auth failed",1);
- this._handleEvent('onerror',JSJaCError('401','auth','not-authorized'));
- this.disconnect();
- } else {
- this._reInitStream(JSJaC.bind(this._doStreamBind, this));
- }
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._doStreamBind = function() {
- var iq = new JSJaCIQ();
- iq.setIQ(null,'set','bind_1');
- iq.appendNode("bind", {xmlns: "urn:ietf:params:xml:ns:xmpp-bind"},
- [["resource", this.resource]]);
- this.oDbg.log(iq.xml());
- this.send(iq,this._doXMPPSess);
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._doXMPPSess = function(iq) {
- if (iq.getType() != 'result' || iq.getType() == 'error') { // failed
- this.disconnect();
- if (iq.getType() == 'error')
- this._handleEvent('onerror',iq.getChild('error'));
- return;
- }
-
- this.fulljid = iq.getChildVal("jid");
- this.jid = this.fulljid.substring(0,this.fulljid.lastIndexOf('/'));
-
- if (!this.legacy_sessions) {
- this._handleEvent('onconnect');
- return;
- }
-
- iq = new JSJaCIQ();
- iq.setIQ(null,'set','sess_1');
- iq.appendNode("session", {xmlns: "urn:ietf:params:xml:ns:xmpp-session"},
- []);
- this.oDbg.log(iq.xml());
- this.send(iq,this._doXMPPSessDone);
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._doXMPPSessDone = function(iq) {
- if (iq.getType() != 'result' || iq.getType() == 'error') { // failed
- this.disconnect();
- if (iq.getType() == 'error')
- this._handleEvent('onerror',iq.getChild('error'));
- return;
- } else
- this._handleEvent('onconnect');
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._handleEvent = function(event,arg) {
- event = event.toLowerCase(); // don't be case-sensitive here
- this.oDbg.log("incoming event '"+event+"'",3);
- if (!this._events[event])
- return;
- this.oDbg.log("handling event '"+event+"'",2);
- for (var i=0;i<this._events[event].length; i++) {
- var aEvent = this._events[event][i];
- if (typeof aEvent.handler == 'function') {
- try {
- if (arg) {
- if (arg.pType) { // it's a packet
- if ((!arg.getNode().hasChildNodes() && aEvent.childName != '*') ||
- (arg.getNode().hasChildNodes() &&
- !arg.getChild(aEvent.childName, aEvent.childNS)))
- continue;
- if (aEvent.type != '*' &&
- arg.getType() != aEvent.type)
- continue;
- this.oDbg.log(aEvent.childName+"/"+aEvent.childNS+"/"+aEvent.type+" => match for handler "+aEvent.handler,3);
- }
- if (aEvent.handler(arg)) {
- // handled!
- break;
- }
- }
- else
- if (aEvent.handler()) {
- // handled!
- break;
- }
- } catch (e) {
-
- if (e.fileName&&e.lineNumber) {
- this.oDbg.log(aEvent.handler+"\n>>>"+e.name+": "+ e.message+' in '+e.fileName+' line '+e.lineNumber,1);
- } else {
- this.oDbg.log(aEvent.handler+"\n>>>"+e.name+": "+ e.message,1);
- }
-
- }
- }
- }
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._handlePID = function(packet) {
- if (!packet.getID())
- return false;
-
- var jid = packet.getFrom() || this.jid;
-
- if (packet.getFrom() == this.domain)
- jid = this.jid;
-
- var id = packet.getID();
- if (this._regIDs[jid] && this._regIDs[jid][id]) {
- try {
- this.oDbg.log("handling id "+id,3);
- var reg = this._regIDs[jid][id];
- if (reg.cb.call(this, packet, reg.arg) === false) {
- // don't unregister
- return false;
- } else {
- delete this._regIDs[jid][id];
- return true;
- }
- } catch (e) {
- // broken handler?
- this.oDbg.log(e.name+": "+ e.message, 1);
- delete this._regIDs[jid][id];
- return true;
- }
- } else {
- this.oDbg.log("not handling id '"+id+"' from jid "+jid, 1);
- }
- return false;
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._handleResponse = function(req) {
- var rootEl = this._parseResponse(req);
-
- if (!rootEl)
- return;
-
- for (var i=0; i<rootEl.childNodes.length; i++) {
- if (this._sendRawCallbacks.length) {
- var cb = this._sendRawCallbacks[0];
- this._sendRawCallbacks = this._sendRawCallbacks.slice(1, this._sendRawCallbacks.length);
- cb.fn.call(this, rootEl.childNodes.item(i), cb.arg);
- continue;
- }
- this._inQ = this._inQ.concat(rootEl.childNodes.item(i));
- }
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._parseStreamFeatures = function(doc) {
- if (!doc) {
- this.oDbg.log("nothing to parse ... aborting",1);
- return false;
- }
-
- var errorTag;
- if (doc.getElementsByTagNameNS) {
- errorTag = doc.getElementsByTagNameNS("http://etherx.jabber.org/streams", "error").item(0);
- } else {
- var errors = doc.getElementsByTagName("error");
- for (var i=0; i<errors.length; i++)
- if (errors.item(i).namespaceURI == "http://etherx.jabber.org/streams" ||
- errors.item(i).getAttribute('xmlns') == "http://etherx.jabber.org/streams") {
- errorTag = errors.item(i);
- break;
- }
- }
-
- if (errorTag) {
- this._setStatus("internal_server_error");
- clearTimeout(this._timeout); // remove timer
- clearInterval(this._interval);
- clearInterval(this._inQto);
- this._handleEvent('onerror',JSJaCError('503','cancel','session-terminate'));
- this._connected = false;
- this.oDbg.log("Disconnected.",1);
- this._handleEvent('ondisconnect');
- return false;
- }
-
- this.mechs = new Object();
- var lMec1 = doc.getElementsByTagName("mechanisms");
- this.has_sasl = false;
- for (var i=0; i<lMec1.length; i++)
- if (lMec1.item(i).getAttribute("xmlns") ==
- "urn:ietf:params:xml:ns:xmpp-sasl") {
- this.has_sasl=true;
- var lMec2 = lMec1.item(i).getElementsByTagName("mechanism");
- for (var j=0; j<lMec2.length; j++)
- this.mechs[lMec2.item(j).firstChild.nodeValue] = true;
- break;
- }
- if (this.has_sasl)
- this.oDbg.log("SASL detected",2);
- else {
- this.oDbg.log("No support for SASL detected",2);
- return false;
- }
-
- // Get the server CAPS (if available)
- this.server_caps=null;
- var sCaps = doc.getElementsByTagName("c");
- for (var i=0; i<sCaps.length; i++) {
- var c_sCaps=sCaps.item(i);
- var x_sCaps=c_sCaps.getAttribute("xmlns");
- var v_sCaps=c_sCaps.getAttribute("ver");
-
- if ((x_sCaps == NS_CAPS) && v_sCaps) {
- this.server_caps=v_sCaps;
- break;
- }
- }
-
- // Get legacy session capability if available
- this.legacy_sessions=null;
- if (doc.getElementsByTagName("session")) {
- this.legacy_sessions=true;
- }
-
- return true;
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._process = function(timerval) {
- if (!this.connected()) {
- this.oDbg.log("Connection lost ...",1);
- if (this._interval)
- clearInterval(this._interval);
- return;
- }
-
- this.setPollInterval(timerval);
-
- if (this._timeout)
- clearTimeout(this._timeout);
-
- var slot = this._getFreeSlot();
-
- if (slot < 0)
- return;
-
- if (typeof(this._req[slot]) != 'undefined' &&
- typeof(this._req[slot].r) != 'undefined' &&
- this._req[slot].r.readyState != 4) {
- this.oDbg.log("Slot "+slot+" is not ready");
- return;
- }
-
- if (!this.isPolling() && this._pQueue.length == 0 &&
- this._req[(slot+1)%2] && this._req[(slot+1)%2].r.readyState != 4) {
- this.oDbg.log("all slots busy, standby ...", 2);
- return;
- }
-
- if (!this.isPolling())
- this.oDbg.log("Found working slot at "+slot,2);
-
- this._req[slot] = this._setupRequest(true);
-
- /* setup onload handler for async send */
- this._req[slot].r.onreadystatechange =
- JSJaC.bind(function() {
- if (this._req[slot].r.readyState == 4) {
- this._setStatus('processing');
- this.oDbg.log("async recv: "+this._req[slot].r.responseText,4);
- this._handleResponse(this._req[slot]);
-
- if (!this.connected())
- return;
-
- // schedule next tick
- if (this._pQueue.length) {
- this._timeout = setTimeout(JSJaC.bind(this._process, this),100);
- } else {
- this.oDbg.log("scheduling next poll in "+this.getPollInterval()+
- " msec", 4);
- this._timeout = setTimeout(JSJaC.bind(this._process, this),this.getPollInterval());
- }
- }
- }, this);
-
- try {
- this._req[slot].r.onerror =
- JSJaC.bind(function() {
- if (!this.connected())
- return;
- this._errcnt++;
- this.oDbg.log('XmlHttpRequest error ('+this._errcnt+')',1);
- if (this._errcnt > JSJAC_ERR_COUNT) {
- // abort
- this._abort();
- return false;
- }
-
- this._setStatus('onerror_fallback');
-
- // schedule next tick
- setTimeout(JSJaC.bind(this._resume, this),this.getPollInterval());
- return false;
- }, this);
- } catch(e) { } // well ... no onerror property available, maybe we
- // can catch the error somewhere else ...
-
- var reqstr = this._getRequestString();
-
- if (typeof(this._rid) != 'undefined') // remember request id if any
- this._req[slot].rid = this._rid;
-
- this.oDbg.log("sending: " + reqstr,4);
- this._req[slot].r.send(reqstr);
-};
-
-/**
- * @private
- @param {JSJaCPacket} packet The packet to be sent.
- @param {function} cb The callback to be called when response is received.
- @param {any} arg Optional arguments to be passed to 'cb' when executing it.
- @return Whether registering an ID was successful
- @type boolean
- */
-JSJaCConnection.prototype._registerPID = function(packet, cb, arg) {
- this.oDbg.log("registering id for packet "+packet.xml(), 3);
- var id = packet.getID();
- if (!id) {
- this.oDbg.log("id missing", 1);
- return false;
- }
-
- if (typeof cb != 'function') {
- this.oDbg.log("callback is not a function", 1);
- return false;
- }
-
- var jid = packet.getTo() || this.jid;
-
- if (packet.getTo() == this.domain)
- jid = this.jid;
-
- if (!this._regIDs[jid]) {
- this._regIDs[jid] = {};
- }
-
- if (this._regIDs[jid][id] != null) {
- this.oDbg.log("id already registered: " + id, 1);
- return false;
- }
- this._regIDs[jid][id] = {
- cb: cb,
- arg: arg,
- ts: Date.now()
- };
- this.oDbg.log("registered id "+id,3);
- this._cleanupRegisteredPIDs();
- return true;
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._cleanupRegisteredPIDs = function() {
- var now = Date.now();
- for (var jid in this._regIDs) {
- if (this._regIDs.hasOwnProperty(jid)) {
- for (var id in this._regIDs[jid]) {
- if (this._regIDs[jid].hasOwnProperty(id)) {
- if (this._regIDs[jid][id].ts + JSJAC_REGID_TIMEOUT < now) {
- this.oDbg.log("deleting registered id '"+id+ "' due to timeout", 1);
- delete this._regIDs[jid][id];
- }
- }
- }
- }
- }
-};
-
-/**
- * Partial function binding sendEmpty to callback
- * @private
- */
-JSJaCConnection.prototype._prepSendEmpty = function(cb, ctx) {
- return function() {
- ctx._sendEmpty(JSJaC.bind(cb, ctx));
- };
-};
-
-/**
- * send empty request
- * waiting for stream id to be able to proceed with authentication
- * @private
- */
-JSJaCConnection.prototype._sendEmpty = function(cb) {
- var slot = this._getFreeSlot();
- this._req[slot] = this._setupRequest(true);
-
- this._req[slot].r.onreadystatechange =
- JSJaC.bind(function() {
- if (this._req[slot].r.readyState == 4) {
- this.oDbg.log("async recv: "+this._req[slot].r.responseText,4);
- cb(this._req[slot].r); // handle response
- }
- },this);
-
- if (typeof(this._req[slot].r.onerror) != 'undefined') {
- this._req[slot].r.onerror =
- JSJaC.bind(function(e) {
- this.oDbg.log('XmlHttpRequest error',1);
- return false;
- }, this);
- }
-
- var reqstr = this._getRequestString();
- this.oDbg.log("sending: " + reqstr,4);
- this._req[slot].r.send(reqstr);
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._sendRaw = function(xml,cb,arg) {
- if (cb)
- this._sendRawCallbacks.push({fn: cb, arg: arg});
-
- this._pQueue.push(xml);
- this._process();
-
- return true;
-};
-
-/**
- * @private
- */
-JSJaCConnection.prototype._setStatus = function(status) {
- if (!status || status == '')
- return;
- if (status != this._status) { // status changed!
- this._status = status;
- this._handleEvent('onstatuschanged', status);
- this._handleEvent('status_changed', status);
- }
-};
-
-
-/**
- * @fileoverview All stuff related to HTTP Binding
- * @author Stefan Strigler steve@zeank.in-berlin.de
- * @version 1.3
- */
-
-/**
- * Instantiates an HTTP Binding session
- * @class Implementation of {@link
- * http://www.xmpp.org/extensions/xep-0206.html XMPP Over BOSH}
- * formerly known as HTTP Binding.
- * @extends JSJaCConnection
- * @constructor
- */
-function JSJaCHttpBindingConnection(oArg) {
- /**
- * @ignore
- */
- this.base = JSJaCConnection;
- this.base(oArg);
-
- // member vars
- /**
- * @private
- */
- this._hold = JSJACHBC_MAX_HOLD;
- /**
- * @private
- */
- this._inactivity = 0;
- /**
- * @private
- */
- this._last_requests = new Object(); // 'hash' storing hold+1 last requests
- /**
- * @private
- */
- this._last_rid = 0; // I know what you did last summer
- /**
- * @private
- */
- this._min_polling = 0;
-
- /**
- * @private
- */
- this._pause = 0;
- /**
- * @private
- */
- this._wait = JSJACHBC_MAX_WAIT;
-}
-JSJaCHttpBindingConnection.prototype = new JSJaCConnection();
-
-/**
- * Inherit an instantiated HTTP Binding session
- */
-JSJaCHttpBindingConnection.prototype.inherit = function(oArg) {
- if (oArg.jid) {
- var oJid = new JSJaCJID(oArg.jid);
- this.domain = oJid.getDomain();
- this.username = oJid.getNode();
- this.resource = oJid.getResource();
- } else {
- this.domain = oArg.domain || 'localhost';
- this.username = oArg.username;
- this.resource = oArg.resource;
- }
- this._sid = oArg.sid;
- this._rid = oArg.rid;
- this._min_polling = oArg.polling;
- this._inactivity = oArg.inactivity;
- this._setHold(oArg.requests-1);
- this.setPollInterval(this._timerval);
- if (oArg.wait)
- this._wait = oArg.wait; // for whatever reason
-
- this._connected = true;
-
- this._handleEvent('onconnect');
-
- this._interval= setInterval(JSJaC.bind(this._checkQueue, this),
- JSJAC_CHECKQUEUEINTERVAL);
- this._inQto = setInterval(JSJaC.bind(this._checkInQ, this),
- JSJAC_CHECKINQUEUEINTERVAL);
- this._timeout = setTimeout(JSJaC.bind(this._process, this),
- this.getPollInterval());
-};
-
-/**
- * Sets poll interval
- * @param {int} timerval the interval in seconds
- */
-JSJaCHttpBindingConnection.prototype.setPollInterval = function(timerval) {
- if (timerval && !isNaN(timerval)) {
- if (!this.isPolling())
- this._timerval = 100;
- else if (this._min_polling && timerval < this._min_polling*1000)
- this._timerval = this._min_polling*1000;
- else if (this._inactivity && timerval > this._inactivity*1000)
- this._timerval = this._inactivity*1000;
- else
- this._timerval = timerval;
- }
- return this._timerval;
-};
-
-/**
- * whether this session is in polling mode
- * @type boolean
- */
-JSJaCHttpBindingConnection.prototype.isPolling = function() { return (this._hold == 0) };
-
-/**
- * @private
- */
-JSJaCHttpBindingConnection.prototype._getFreeSlot = function() {
- for (var i=0; i<this._hold+1; i++)
- if (typeof(this._req[i]) == 'undefined' || typeof(this._req[i].r) == 'undefined' || this._req[i].r.readyState == 4)
- return i;
- return -1; // nothing found
-};
-
-/**
- * @private
- */
-JSJaCHttpBindingConnection.prototype._getHold = function() { return this._hold; };
-
-/**
- * @private
- */
-JSJaCHttpBindingConnection.prototype._getRequestString = function(raw, last) {
- raw = raw || '';
- var reqstr = '';
-
- // check if we're repeating a request
-
- if (this._rid <= this._last_rid && typeof(this._last_requests[this._rid]) != 'undefined') // repeat!
- reqstr = this._last_requests[this._rid].xml;
- else { // grab from queue
- var xml = '';
- while (this._pQueue.length) {
- var curNode = this._pQueue[0];
- xml += curNode;
- this._pQueue = this._pQueue.slice(1,this._pQueue.length);
- }
-
- reqstr = "<body xml:lang='"+XML_LANG+"' rid='"+this._rid+"' sid='"+this._sid+"' xmlns='http://jabber.org/protocol/httpbind' ";
- if (JSJAC_HAVEKEYS) {
- reqstr += "key='"+this._keys.getKey()+"' ";
- if (this._keys.lastKey()) {
- this._keys = new JSJaCKeys(hex_sha1,this.oDbg);
- reqstr += "newkey='"+this._keys.getKey()+"' ";
- }
- }
- if (last)
- reqstr += "type='terminate'";
- else if (this._reinit) {
- if (JSJACHBC_USE_BOSH_VER)
- reqstr += "xmpp:restart='true' xmlns:xmpp='urn:xmpp:xbosh' to='"+this.domain+"'";
- this._reinit = false;
- }
-
- if (xml != '' || raw != '') {
- reqstr += ">" + raw + xml + "</body>";
- } else {
- reqstr += "/>";
- }
-
- this._last_requests[this._rid] = new Object();
- this._last_requests[this._rid].xml = reqstr;
- this._last_rid = this._rid;
-
- for (var i in this._last_requests)
- if (this._last_requests.hasOwnProperty(i) &&
- i < this._rid-this._hold)
- delete(this._last_requests[i]); // truncate
- }
-
- return reqstr;
-};
-
-/**
- * @private
- */
-JSJaCHttpBindingConnection.prototype._getInitialRequestString = function() {
- var reqstr = "<body xml:lang='"+XML_LANG+"' content='text/xml; charset=utf-8' hold='"+this._hold+"' xmlns='http://jabber.org/protocol/httpbind' to='"+this.authhost+"' wait='"+this._wait+"' rid='"+this._rid+"'";
- if (this.secure)
- reqstr += " secure='"+this.secure+"'";
- if (JSJAC_HAVEKEYS) {
- this._keys = new JSJaCKeys(hex_sha1,this.oDbg); // generate first set of keys
- key = this._keys.getKey();
- reqstr += " newkey='"+key+"'";
- }
-
- if (JSJACHBC_USE_BOSH_VER) {
- reqstr += " ver='" + JSJACHBC_BOSH_VERSION + "'";
- reqstr += " xmlns:xmpp='urn:xmpp:xbosh'";
- if (this.authtype == 'sasl' || this.authtype == 'saslanon')
- reqstr += " xmpp:version='1.0'";
- }
- reqstr += "/>";
- return reqstr;
-};
-
-/**
- * @private
- */
-JSJaCHttpBindingConnection.prototype._getStreamID = function(req) {
-
- this.oDbg.log(req.responseText,4);
-
- if (!req.responseXML || !req.responseXML.documentElement) {
- this._handleEvent('onerror',JSJaCError('503','cancel','service-unavailable'));
- return;
- }
- var body = req.responseXML.documentElement;
-
- // any session error?
- if(body.getAttribute('type') == 'terminate') {
- this._handleEvent('onerror',JSJaCError('503','cancel','service-unavailable'));
- return;
- }
-
- // extract stream id used for non-SASL authentication
- if (body.getAttribute('authid')) {
- this.streamid = body.getAttribute('authid');
- this.oDbg.log("got streamid: "+this.streamid,2);
- }
-
- if (!this._parseStreamFeatures(body)) {
- this._sendEmpty(JSJaC.bind(this._getStreamID, this));
- return;
- }
-
- this._timeout = setTimeout(JSJaC.bind(this._process, this),
- this.getPollInterval());
-
- if (this.register)
- this._doInBandReg();
- else
- this._doAuth();
-};
-
-/**
- * @private
- */
-JSJaCHttpBindingConnection.prototype._getSuspendVars = function() {
- return ('host,port,secure,_rid,_last_rid,_wait,_min_polling,_inactivity,_hold,_last_requests,_pause').split(',');
-};
-
-/**
- * @private
- */
-JSJaCHttpBindingConnection.prototype._handleInitialResponse = function(req) {
- try {
- // This will throw an error on Mozilla when the connection was refused
- this.oDbg.log(req.getAllResponseHeaders(),4);
- this.oDbg.log(req.responseText,4);
- } catch(ex) {
- this.oDbg.log("No response",4);
- }
-
- if (req.status != 200 || !req.responseXML) {
- this.oDbg.log("initial response broken (status: "+req.status+")",1);
- this._handleEvent('onerror',JSJaCError('503','cancel','service-unavailable'));
- return;
- }
- var body = req.responseXML.documentElement;
-
- if (!body || body.tagName != 'body' || body.namespaceURI != 'http://jabber.org/protocol/httpbind') {
- this.oDbg.log("no body element or incorrect body in initial response",1);
- this._handleEvent("onerror",JSJaCError("500","wait","internal-service-error"));
- return;
- }
-
- // Check for errors from the server
- if (body.getAttribute("type") == "terminate") {
- this.oDbg.log("invalid response:\n" + req.responseText,1);
- clearTimeout(this._timeout); // remove timer
- this._connected = false;
- this.oDbg.log("Disconnected.",1);
- this._handleEvent('ondisconnect');
- this._handleEvent('onerror',JSJaCError('503','cancel','service-unavailable'));
- return;
- }
-
- // get session ID
- this._sid = body.getAttribute('sid');
- this.oDbg.log("got sid: "+this._sid,2);
-
- // get attributes from response body
- if (body.getAttribute('polling'))
- this._min_polling = body.getAttribute('polling');
-
- if (body.getAttribute('inactivity'))
- this._inactivity = body.getAttribute('inactivity');
-
- if (body.getAttribute('requests'))
- this._setHold(body.getAttribute('requests')-1);
- this.oDbg.log("set hold to " + this._getHold(),2);
-
- if (body.getAttribute('ver'))
- this._bosh_version = body.getAttribute('ver');
-
- if (body.getAttribute('maxpause'))
- this._pause = Number.min(body.getAttribute('maxpause'), JSJACHBC_MAXPAUSE);
-
- // must be done after response attributes have been collected
- this.setPollInterval(this._timerval);
-
- /* start sending from queue for not polling connections */
- this._connected = true;
-
- this._inQto = setInterval(JSJaC.bind(this._checkInQ, this),
- JSJAC_CHECKINQUEUEINTERVAL);
- this._interval= setInterval(JSJaC.bind(this._checkQueue, this),
- JSJAC_CHECKQUEUEINTERVAL);
-
- /* wait for initial stream response to extract streamid needed
- * for digest auth
- */
- this._getStreamID(req);
-};
-
-/**
- * @private
- */
-JSJaCHttpBindingConnection.prototype._parseResponse = function(req) {
- if (!this.connected() || !req)
- return null;
-
- var r = req.r; // the XmlHttpRequest
-
- try {
- if (r.status == 404 || r.status == 403) {
- // connection manager killed session
- this._abort();
- return null;
- }
-
- if (r.status != 200 || !r.responseXML) {
- this._errcnt++;
- var errmsg = "invalid response ("+r.status+"):\n" + r.getAllResponseHeaders()+"\n"+r.responseText;
- if (!r.responseXML)
- errmsg += "\nResponse failed to parse!";
- this.oDbg.log(errmsg,1);
- if (this._errcnt > JSJAC_ERR_COUNT) {
- // abort
- this._abort();
- return null;
- }
-
- if (this.connected()) {
- this.oDbg.log("repeating ("+this._errcnt+")",1);
- this._setStatus('proto_error_fallback');
-
- // schedule next tick
- setTimeout(JSJaC.bind(this._resume, this),
- this.getPollInterval());
- }
-
- return null;
- }
- } catch (e) {
- this.oDbg.log("XMLHttpRequest error: status not available", 1);
- this._errcnt++;
- if (this._errcnt > JSJAC_ERR_COUNT) {
- // abort
- this._abort();
- } else {
- if (this.connected()) {
- this.oDbg.log("repeating ("+this._errcnt+")",1);
-
- this._setStatus('proto_error_fallback');
-
- // schedule next tick
- setTimeout(JSJaC.bind(this._resume, this),
- this.getPollInterval());
- }
- }
- return null;
- }
-
- var body = r.responseXML.documentElement;
- if (!body || body.tagName != 'body' ||
- body.namespaceURI != 'http://jabber.org/protocol/httpbind') {
- this.oDbg.log("invalid response:\n" + r.responseText,1);
-
- clearTimeout(this._timeout); // remove timer
- clearInterval(this._interval);
- clearInterval(this._inQto);
-
- this._connected = false;
- this.oDbg.log("Disconnected.",1);
- this._handleEvent('ondisconnect');
-
- this._setStatus('internal_server_error');
- this._handleEvent('onerror',
- JSJaCError('500','wait','internal-server-error'));
-
- return null;
- }
-
- if (typeof(req.rid) != 'undefined' && this._last_requests[req.rid]) {
- if (this._last_requests[req.rid].handled) {
- this.oDbg.log("already handled "+req.rid,2);
- return null;
- } else
- this._last_requests[req.rid].handled = true;
- }
-
-
- // Check for errors from the server
- if (body.getAttribute("type") == "terminate") {
- // read condition
- var condition = body.getAttribute('condition');
-
- if (condition != "item-not-found") {
- this.oDbg.log("session terminated:\n" + r.responseText,1);
-
- clearTimeout(this._timeout); // remove timer
- clearInterval(this._interval);
- clearInterval(this._inQto);
-
- try {
- DataStore.removeDB(MINI_HASH, 'jsjac', 'state');
- } catch (e) {}
-
- this._connected = false;
-
- if (condition == "remote-stream-error")
- if (body.getElementsByTagName("conflict").length > 0)
- this._setStatus("session-terminate-conflict");
- if (condition == null)
- condition = 'session-terminate';
- this._handleEvent('onerror',JSJaCError('503','cancel',condition));
-
- this.oDbg.log("Aborting remaining connections",4);
-
- for (var i=0; i<this._hold+1; i++) {
- try {
- this._req[i].r.abort();
- } catch(e) { this.oDbg.log(e, 1); }
- }
-
- this.oDbg.log("parseResponse done with terminating", 3);
-
- this.oDbg.log("Disconnected.",1);
- this._handleEvent('ondisconnect');
- } else {
- this._errcnt++;
- if (this._errcnt > JSJAC_ERR_COUNT)
- this._abort();
- }
- return null;
- }
-
- // no error
- this._errcnt = 0;
- return r.responseXML.documentElement;
-};
-
-/**
- * @private
- */
-JSJaCHttpBindingConnection.prototype._reInitStream = function(cb) {
- // tell http binding to reinit stream with/before next request
- this._reinit = true;
-
- this._sendEmpty(this._prepReInitStreamWait(cb));
-};
-
-
-JSJaCHttpBindingConnection.prototype._prepReInitStreamWait = function(cb) {
- return JSJaC.bind(function(req) {
- this._reInitStreamWait(req, cb);
- }, this);
-};
-
-/**
- * @private
- */
-JSJaCHttpBindingConnection.prototype._reInitStreamWait = function(req, cb) {
- this.oDbg.log("checking for stream features");
- var doc = req.responseXML.documentElement;
- this.oDbg.log(doc);
- if (doc.getElementsByTagNameNS) {
- this.oDbg.log("checking with namespace");
- var features = doc.getElementsByTagNameNS('http://etherx.jabber.org/streams',
- 'features').item(0);
- if (features) {
- var bind = features.getElementsByTagNameNS('urn:ietf:params:xml:ns:xmpp-bind',
- 'bind').item(0);
- }
- } else {
- var featuresNL = doc.getElementsByTagName('stream:features');
- for (var i=0, l=featuresNL.length; i<l; i++) {
- if (featuresNL.item(i).namespaceURI == 'http://etherx.jabber.org/streams' ||
- featuresNL.item(i).getAttribute('xmlns') ==
- 'http://etherx.jabber.org/streams') {
- var features = featuresNL.item(i);
- break;
- }
- }
- if (features) {
- var bind = features.getElementsByTagName('bind');
- for (var i=0, l=bind.length; i<l; i++) {
- if (bind.item(i).namespaceURI == 'urn:ietf:params:xml:ns:xmpp-bind' ||
- bind.item(i).getAttribute('xmlns') ==
- 'urn:ietf:params:xml:ns:xmpp-bind') {
- bind = bind.item(i);
- break;
- }
- }
- }
- }
- this.oDbg.log(features);
- this.oDbg.log(bind);
-
- if (features) {
- if (bind) {
- cb();
- } else {
- this.oDbg.log("no bind feature - giving up",1);
- this._handleEvent('onerror',JSJaCError('503','cancel',"service-unavailable"));
- this._connected = false;
- this.oDbg.log("Disconnected.",1);
- this._handleEvent('ondisconnect');
- }
- } else {
- // wait
- this._sendEmpty(this._prepReInitStreamWait(cb));
- }
-};
-
-/**
- * @private
- */
-JSJaCHttpBindingConnection.prototype._resume = function() {
- /* make sure to repeat last request as we can be sure that
- * it had failed (only if we're not using the 'pause' attribute
- */
- if (this._pause == 0 && this._rid >= this._last_rid)
- this._rid = this._last_rid-1;
-
- this._process();
-};
-
-/**
- * @private
- */
-JSJaCHttpBindingConnection.prototype._setHold = function(hold) {
- if (!hold || isNaN(hold) || hold < 0)
- hold = 0;
- else if (hold > JSJACHBC_MAX_HOLD)
- hold = JSJACHBC_MAX_HOLD;
- this._hold = hold;
- return this._hold;
-};
-
-/**
- * @private
- */
-JSJaCHttpBindingConnection.prototype._setupRequest = function(async) {
- var req = new Object();
- var r = XmlHttp.create();
- try {
- r.open("POST",this._httpbase,async);
- r.setRequestHeader('Content-Type','text/xml; charset=utf-8');
- } catch(e) { this.oDbg.log(e,1); }
- req.r = r;
- this._rid++;
- req.rid = this._rid;
- return req;
-};
-
-/**
- * @private
- */
-JSJaCHttpBindingConnection.prototype._suspend = function() {
- if (this._pause == 0)
- return; // got nothing to do
-
- var slot = this._getFreeSlot();
- // Intentionally synchronous
- this._req[slot] = this._setupRequest(false);
-
- var reqstr = "<body xml:lang='"+XML_LANG+"' pause='"+this._pause+"' xmlns='http://jabber.org/protocol/httpbind' sid='"+this._sid+"' rid='"+this._rid+"'";
- if (JSJAC_HAVEKEYS) {
- reqstr += " key='"+this._keys.getKey()+"'";
- if (this._keys.lastKey()) {
- this._keys = new JSJaCKeys(hex_sha1,this.oDbg);
- reqstr += " newkey='"+this._keys.getKey()+"'";
- }
-
- }
- reqstr += ">";
-
- while (this._pQueue.length) {
- var curNode = this._pQueue[0];
- reqstr += curNode;
- this._pQueue = this._pQueue.slice(1,this._pQueue.length);
- }
-
- //reqstr += "<presence type='unavailable' xmlns='jabber:client'/>";
- reqstr += "</body>";
-
- this.oDbg.log("Disconnecting: " + reqstr,4);
- this._req[slot].r.send(reqstr);
-};
-
-/**
- * @author Janusz Dziemidowicz rraptorr@nails.eu.org
- * @fileoverview All stuff related to WebSocket
- * <pre>
- * The WebSocket protocol is a bit of a mess. Various, incompatible,
- * protocol drafts were implemented in browsers. Fortunately, recently
- * a finished protocol was released in RFC6455. Further description
- * assumes RFC6455 WebSocket protocol version.
- *
- * WebSocket browser support. Current (November 2012) browser status:
- * - Chrome 16+ - works properly and supports RFC6455
- * - Firefox 16+ - works properly and support RFC6455 (ealier versions
- * have problems with proxies)
- * - Opera 12.10 - supports RFC6455, but does not work at all if a
- * proxy is configured (earlier versions do not support RFC6455)
- * - Internet Explorer 10+ - works properly and supports RFC6455
- *
- * Due to the above status, this code is currently recommended on
- * Chrome 16+, Firefox 16+ and Internet Explorer 10+. Using it on
- * other browsers is discouraged.
- *
- * Please also note that some users are only able to connect to ports
- * 80 and 443. Port 80 is sometimes intercepted by transparent HTTP
- * proxies, which mostly does not support WebSocket, so port 443 is
- * the best choice currently (it does not have to be
- * encrypted). WebSocket also usually does not work well with reverse
- * proxies, be sure to make extensive tests if you use one.
- *
- * There is no standard for XMPP over WebSocket. However, there is a
- * draft (http://tools.ietf.org/html/draft-ietf-xmpp-websocket-00) and
- * this implementation follows it.
- *
- * Tested servers:
- *
- * - node-xmpp-bosh (https://github.com/dhruvbird/node-xmpp-bosh) -
- * supports RFC6455 and works with no problems since 0.6.1, it also
- * transparently uses STARTTLS if necessary
- * - wxg (https://github.com/Gordin/wxg) - supports RFC6455 and works
- * with no problems, but cannot connect to servers requiring
- * STARTTLS (original wxg at https://github.com/hocken/wxg has some
- * issues, that were fixed by Gordin).
- * - ejabberd-websockets
- * (https://github.com/superfeedr/ejabberd-websockets) - does not
- * support RFC6455 hence it does not work, adapting it to support
- * RFC6455 should be quite easy for anyone knowing Erlang (some work
- * in progress can be found on github)
- * - Openfire (http://www.igniterealtime.org/projects/openfire/) -
- * unofficial plugin is available, but it lacks support
- * for RFC6455 hence it does not work
- * - Apache Vysper (http://mina.apache.org/vysper/) - does
- * not support RFC6455 hence does not work
- * - Tigase (http://www.tigase.org/) - works fine since 5.2.0.
- * - MongooseIM (https://github.com/esl/ejabberd) - a fork of ejabberd
- * with support for XMPP over Websockets.
- * </pre>
- */
-
-/*exported JSJaCWebSocketConnection */
-
-/**
- * Instantiates a WebSocket session.
- * @class Implementation of {@link http://tools.ietf.org/html/draft-ietf-xmpp-websocket-00 | An XMPP Sub-protocol for WebSocket}.
- * @extends JSJaCConnection
- * @constructor
- * @param {Object} oArg connection properties.
- * @param {string} oArg.httpbase WebSocket connection endpoint (i.e. ws://localhost:5280)
- * @param {JSJaCDebugger} [oArg.oDbg] A reference to a debugger implementing the JSJaCDebugger interface.
- */
-function JSJaCWebSocketConnection(oArg) {
- this.base = JSJaCConnection;
- this.base(oArg);
-
- this._ws = null;
-
- this.registerHandler('onerror', JSJaC.bind(this._cleanupWebSocket, this));
-}
-
-JSJaCWebSocketConnection.prototype = new JSJaCConnection();
-
-JSJaCWebSocketConnection.prototype._cleanupWebSocket = function() {
- if (this._ws !== null) {
- this._ws.onclose = null;
- this._ws.onerror = null;
- this._ws.onopen = null;
- this._ws.onmessage = null;
-
- this._ws.close();
- this._ws = null;
- }
-};
-
-/**
- * Connect to a jabber/XMPP server.
- * @param {Object} oArg The configuration to be used for connecting.
- * @param {string} oArg.domain The domain name of the XMPP service.
- * @param {string} oArg.username The username (nodename) to be logged in with.
- * @param {string} oArg.resource The resource to identify the login with.
- * @param {string} oArg.password The user's password.
- * @param {string} [oArg.authzid] Authorization identity. Used to act as another user, in most cases not needed and rarely supported by servers. If present should be a bare JID (user@example.net).
- * @param {boolean} [oArg.allow_plain] Whether to allow plain text logins.
- * @param {boolean} [oArg.allow_scram] Whether to allow SCRAM-SHA-1 authentication. Please note that it is quite slow, do some testing on all required browsers before enabling.
- * @param {boolean} [oArg.register] Whether to register a new account.
- * @param {string} [oArg.authhost] The host that handles the actualy authorization. There are cases where this is different from the settings above, e.g. if there's a service that provides anonymous logins at 'anon.example.org'.
- * @param {string} [oArg.authtype] Must be one of 'sasl' (default), 'nonsasl', 'saslanon', or 'anonymous'.
- * @param {string} [oArg.xmllang] The requested language for this login. Typically XMPP server try to respond with error messages and the like in this language if available.
- */
-JSJaCWebSocketConnection.prototype.connect = function(oArg) {
- this._setStatus('connecting');
-
- this.domain = oArg.domain || 'localhost';
- this.username = oArg.username;
- this.resource = oArg.resource;
- this.pass = oArg.password || oArg.pass;
- this.authzid = oArg.authzid || '';
- this.register = oArg.register;
-
- this.authhost = oArg.authhost || this.domain;
- this.authtype = oArg.authtype || 'sasl';
-
- this.jid = this.username + '@' + this.domain;
- this.fulljid = this.jid + '/' + this.resource;
-
- if (oArg.allow_plain) {
- this._allow_plain = oArg.allow_plain;
- } else {
- this._allow_plain = JSJAC_ALLOW_PLAIN;
- }
-
- if (oArg.allow_scram) {
- this._allow_scram = oArg.allow_scram;
- } else {
- this._allow_scram = JSJAC_ALLOW_SCRAM;
- }
-
- if (oArg.xmllang && oArg.xmllang !== '') {
- this._xmllang = oArg.xmllang;
- } else {
- this._xmllang = 'en';
- }
-
- if (typeof WebSocket === 'undefined') {
- this._handleEvent('onerror', JSJaCError('503', 'cancel', 'service-unavailable'));
- return;
- }
-
- this._ws = new WebSocket(this._httpbase, 'xmpp');
- this._ws.onclose = JSJaC.bind(this._onclose, this);
- this._ws.onerror = JSJaC.bind(this._onerror, this);
- this._ws.onopen = JSJaC.bind(this._onopen, this);
-};
-
-/**
- * @private
- */
-JSJaCWebSocketConnection.prototype._onopen = function() {
- var reqstr = this._getInitialRequestString();
-
- this.oDbg.log(reqstr, 4);
-
- this._ws.onmessage = JSJaC.bind(this._handleOpenStream, this);
- this._ws.send(reqstr);
-};
-
-/**
- * @private
- */
-JSJaCWebSocketConnection.prototype._handleOpenStream = function(event) {
- var open, stream;
-
- this.oDbg.log(event.data, 4);
-
- open = event.data;
- // skip XML prolog if any
- open = open.substr(open.indexOf('<stream:stream'));
- if (open.substr(-2) !== '/>' && open.substr(-16) !== '</stream:stream>') {
- // some servers send closed opening tag, some not
- open += '</stream:stream>';
- }
- stream = this._parseXml(open);
- if(!stream) {
- this._handleEvent('onerror', JSJaCError('503', 'cancel', 'service-unavailable'));
- return;
- }
-
- // extract stream id used for non-SASL authentication
- this.streamid = stream.getAttribute('id');
-
- this.oDbg.log('got streamid: ' + this.streamid, 2);
- this._ws.onmessage = JSJaC.bind(this._handleInitialResponse, this);
-};
-
-/**
- * @private
- */
-JSJaCWebSocketConnection.prototype._handleInitialResponse = function(event) {
- var doc = this._parseXml(event.data);
- if (!this._parseStreamFeatures(doc)) {
- this._handleEvent('onerror', JSJaCError('503', 'cancel', 'service-unavailable'));
- return;
- }
-
- this._connected = true;
-
- if (this.register) {
- this._doInBandReg();
- } else {
- this._doAuth();
- }
-};
-
-/**
- * Disconnect from XMPP service
- *
- * When called upon leaving a page needs to use 'onbeforeunload' event
- * as Websocket would be closed already otherwise prior to this call.
- */
-JSJaCWebSocketConnection.prototype.disconnect = function() {
- this._setStatus('disconnecting');
-
- if (!this.connected()) {
- return;
- }
- this._connected = false;
-
- this.oDbg.log('Disconnecting', 4);
- this._sendRaw('</stream:stream>', JSJaC.bind(this._cleanupWebSocket, this));
-
- this.oDbg.log('Disconnected', 2);
- this._handleEvent('ondisconnect');
-};
-
-/**
- * @private
- */
-JSJaCWebSocketConnection.prototype._onclose = function() {
- this.oDbg.log('websocket closed', 2);
- if (this._status !== 'disconnecting') {
- this._connected = false;
- this._handleEvent('onerror', JSJaCError('503', 'cancel', 'service-unavailable'));
- }
-};
-
-/**
- * @private
- */
-JSJaCWebSocketConnection.prototype._onerror = function() {
- this.oDbg.log('websocket error', 1);
- this._connected = false;
- this._handleEvent('onerror', JSJaCError('503', 'cancel', 'service-unavailable'));
-};
-
-/**
- * @private
- */
-JSJaCWebSocketConnection.prototype._onmessage = function(event) {
- var stanza, node, packet;
-
- stanza = event.data;
- this._setStatus('processing');
- if (!stanza || stanza === '') {
- return;
- }
-
- // WebSocket works only on modern browsers, so it is safe to assume
- // that namespaceURI and getElementsByTagNameNS are available.
- node = this._parseXml(stanza);
- if (node.namespaceURI === NS_STREAM && node.localName === 'error') {
- if (node.getElementsByTagNameNS(NS_STREAMS, 'conflict').length > 0) {
- this._setStatus('session-terminate-conflict');
- }
- this._connected = false;
- this._handleEvent('onerror', JSJaCError('503', 'cancel', 'remote-stream-error'));
- return;
- }
-
- packet = JSJaCPacket.wrapNode(node);
- if (!packet) {
- return;
- }
-
- this.oDbg.log('async recv: ' + event.data, 4);
- this._handleEvent('packet_in', packet);
-
- if (packet.pType && !this._handlePID(packet)) {
- this._handleEvent(packet.pType() + '_in', packet);
- this._handleEvent(packet.pType(), packet);
- }
-};
-
-/**
- * Parse single XML stanza. As proposed in XMPP Sub-protocol for
- * WebSocket draft, it assumes that every stanza is sent in a separate
- * WebSocket frame, which greatly simplifies parsing.
- * @private
- */
-JSJaCWebSocketConnection.prototype._parseXml = function(s) {
- var doc;
-
- this.oDbg.log('Parsing: ' + s, 4);
- try {
- doc = XmlDocument.create('stream', NS_STREAM);
- if(s.trim() == '</stream:stream>') {
- // Consider session as closed
- this.oDbg.log("session terminated", 1);
-
- clearTimeout(this._timeout); // remove timer
- clearInterval(this._interval);
- clearInterval(this._inQto);
-
- try {
- DataStore.removeDB(MINI_HASH, 'jsjac', 'state');
- } catch (e) {}
-
- this._connected = false;
- this._handleEvent('onerror',JSJaCError('503','cancel','session-terminate'));
-
- this.oDbg.log("Disconnected.",1);
- this._handleEvent('ondisconnect');
-
- return null;
- } else if(s.indexOf('<stream:stream') === -1) {
- // Wrap every stanza into stream element, so that XML namespaces work properly.
- doc.loadXML("<stream:stream xmlns:stream='" + NS_STREAM + "' xmlns='jabber:client'>" + s + "</stream:stream>");
- return doc.documentElement.firstChild;
- } else {
- doc.loadXML(s);
- return doc.documentElement;
- }
- } catch (e) {
- this.oDbg.log('Error: ' + e);
- this._connected = false;
- this._handleEvent('onerror', JSJaCError('500', 'wait', 'internal-service-error'));
- }
-
- return null;
-};
-
-/**
- * @private
- */
-JSJaCWebSocketConnection.prototype._getInitialRequestString = function() {
- var streamto, reqstr;
-
- streamto = this.domain;
- if (this.authhost) {
- streamto = this.authhost;
- }
-
- reqstr = '<stream:stream to="' + streamto + '" xmlns="jabber:client" xmlns:stream="' + NS_STREAM + '"';
- if (this.authtype === 'sasl' || this.authtype === 'saslanon') {
- reqstr += ' version="1.0"';
- }
- reqstr += '>';
- return reqstr;
-};
-
-JSJaCWebSocketConnection.prototype.send = function(packet, cb, arg) {
- this._ws.onmessage = JSJaC.bind(this._onmessage, this);
- if (!packet || !packet.pType) {
- this.oDbg.log('no packet: ' + packet, 1);
- return false;
- }
-
- if (!this.connected()) {
- return false;
- }
-
- // remember id for response if callback present
- if (cb) {
- if (!packet.getID()) {
- packet.setID('JSJaCID_' + this._ID++); // generate an ID
- }
-
- // register callback with id
- this._registerPID(packet, cb, arg);
- }
-
- try {
- this._handleEvent(packet.pType() + '_out', packet);
- this._handleEvent('packet_out', packet);
- this._ws.send(packet.xml());
- } catch (e) {
- this.oDbg.log(e.toString(), 1);
- return false;
- }
-
- return true;
-};
-
-/**
- * Resuming connections is not supported by WebSocket.
- */
-JSJaCWebSocketConnection.prototype.resume = function() {
- return false; // not supported for websockets
-};
-
-/**
- * Suspending connections is not supported by WebSocket.
- */
-JSJaCWebSocketConnection.prototype.suspend = function() {
- return false; // not supported for websockets
-};
-
-/**
- * @private
- */
-JSJaCWebSocketConnection.prototype._doSASLAuthScramSha1S1 = function(event) {
- var el = this._parseXml(event.data);
- return JSJaC.bind(JSJaCConnection.prototype._doSASLAuthScramSha1S1, this)(el);
-};
-
-/**
- * @private
- */
-JSJaCWebSocketConnection.prototype._doSASLAuthScramSha1S2 = function(event) {
- var el = this._parseXml(event.data);
- return JSJaC.bind(JSJaCConnection.prototype._doSASLAuthScramSha1S2, this)(el);
-};
-
-/**
- * @private
- */
-JSJaCWebSocketConnection.prototype._doSASLAuthDigestMd5S1 = function(event) {
- var el = this._parseXml(event.data);
- return JSJaC.bind(JSJaCConnection.prototype._doSASLAuthDigestMd5S1, this)(el);
-};
-
-/**
- * @private
- */
-JSJaCWebSocketConnection.prototype._doSASLAuthDigestMd5S2 = function(event) {
- var el = this._parseXml(event.data);
- return JSJaC.bind(JSJaCConnection.prototype._doSASLAuthDigestMd5S2, this)(el);
-};
-
-/**
- * @private
- */
-JSJaCWebSocketConnection.prototype._doSASLAuthDone = function(event) {
- var el = this._parseXml(event.data);
- return JSJaC.bind(JSJaCConnection.prototype._doSASLAuthDone, this)(el);
-};
-
-/**
- * @private
- */
-JSJaCWebSocketConnection.prototype._reInitStream = function(cb) {
- var reqstr, streamto = this.domain;
- if (this.authhost) {
- streamto = this.authhost;
- }
-
- reqstr = '<stream:stream xmlns:stream="' + NS_STREAM + '" xmlns="jabber:client" to="' + streamto + '" version="1.0">';
- this._sendRaw(reqstr, cb);
-};
-
-/**
- * @private
- */
-JSJaCWebSocketConnection.prototype._sendRaw = function(xml, cb, arg) {
- if (!this._ws) {
- // Socket might have been closed already because of an 'onerror'
- // event. In this case we'd try to send a closing stream element
- // 'ondisconnect' which won't work.
- return false;
- }
- if (cb) {
- this._ws.onmessage = JSJaC.bind(cb, this, arg);
- }
- this._ws.send(xml);
- return true;
-};
-
-/*exported JSJaCUtils */
-
-/**
- * Various utilities put together so that they don't pollute global
- * name space.
- * @namespace
- */
-var JSJaCUtils = {
- /**
- * XOR two strings of equal length.
- * @param {string} s1 first string to XOR.
- * @param {string} s2 second string to XOR.
- * @return {string} s1 ^ s2.
- */
- xor: function(s1, s2) {
- /*jshint bitwise: false */
- if(!s1) {
- return s2;
- }
- if(!s2) {
- return s1;
- }
-
- var result = '';
- for(var i = 0; i < s1.length; i++) {
- result += String.fromCharCode(s1.charCodeAt(i) ^ s2.charCodeAt(i));
- }
- return result;
- },
-
- /**
- * Create nonce value of given size.
- * @param {int} size size of the nonce that should be generated.
- * @return {string} generated nonce.
- */
- cnonce: function(size) {
- var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
- var cnonce = '';
- for (var i = 0; i < size; i++) {
- cnonce += tab.charAt(Math.round(Math.random(new Date().getTime()) * (tab.length - 1)));
- }
- return cnonce;
- },
-
- /**
- * Current timestamp.
- * @return Seconds since 1.1.1970.
- * @type int
- */
- now: function() {
- if (Date.now && typeof Date.now == 'function') {
- return Date.now();
- } else {
- return new Date().getTime();
- }
- }
-
-};
diff --git a/app/javascripts/jxhr.js b/app/javascripts/jxhr.js
deleted file mode 100644
index 48e53a78..00000000
--- a/app/javascripts/jxhr.js
+++ /dev/null
@@ -1,116 +0,0 @@
-// jXHR.js (JSON-P XHR)
-// v0.1 (c) Kyle Simpson
-// License: MIT
-// modified by gueron Jonathan to work with strophe lib
-// for http://www.iadvize.com
-
-(function(global){
- var SETTIMEOUT = global.setTimeout, // for better compression
- doc = global.document,
- callback_counter = 0;
-
- global.jXHR = function() {
- var script_url,
- script_loaded,
- jsonp_callback,
- scriptElem,
- publicAPI = null;
-
- function removeScript() { try { scriptElem.parentNode.removeChild(scriptElem); } catch (err) { } }
-
- function reset() {
- script_loaded = false;
- script_url = "";
- removeScript();
- scriptElem = null;
- fireReadyStateChange(0);
- }
-
- function ThrowError(msg) {
- try {
- publicAPI.onerror.call(publicAPI,msg,script_url);
- } catch (err) {
- //throw new Error(msg);
- }
- }
-
- function handleScriptLoad() {
- if ((this.readyState && this.readyState!=="complete" && this.readyState!=="loaded") || script_loaded) { return; }
- this.onload = this.onreadystatechange = null; // prevent memory leak
- script_loaded = true;
- if (publicAPI.readyState !== 4) ThrowError("handleScriptLoad: Script failed to load ["+script_url+"].");
- removeScript();
- }
-
- function parseXMLString(xmlStr) {
- var xmlDoc = null;
- if(window.DOMParser) {
- var parser = new DOMParser();
- xmlDoc = parser.parseFromString(xmlStr,"text/xml");
- }
- else {
- xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
- xmlDoc.async="false";
- xmlDoc.loadXML(xmlStr);
- }
- return xmlDoc;
- }
-
- function fireReadyStateChange(rs,args) {
-
- args = args || [];
- publicAPI.readyState = rs;
- if (rs == 4) {
- publicAPI.responseText = args[0].reply;
- publicAPI.responseXML = parseXMLString(args[0].reply);
- }
- if (typeof publicAPI.onreadystatechange === "function") publicAPI.onreadystatechange.apply(publicAPI,args);
- }
-
- publicAPI = {
- onerror:null,
- onreadystatechange:null,
- readyState:0,
- status:200,
- responseBody: null,
- responseText: null,
- responseXML: null,
- open:function(method,url){
- reset();
- var internal_callback = "cb"+(callback_counter++);
- (function(icb){
- global.jXHR[icb] = function() {
- try { fireReadyStateChange.call(publicAPI,4,arguments); }
- catch(err) {
- publicAPI.readyState = -1;
- ThrowError("Script failed to run ["+script_url+"].");
- }
- global.jXHR[icb] = null;
- };
- })(internal_callback);
- script_url = url + '?callback=?jXHR&data=';
- script_url = script_url.replace(/=\?jXHR/,"=jXHR."+internal_callback);
- fireReadyStateChange(1);
- },
- send:function(data){
- script_url = script_url + encodeURIComponent(data);
- SETTIMEOUT(function(){
- scriptElem = doc.createElement("script");
- scriptElem.setAttribute("type","text/javascript");
- scriptElem.onload = scriptElem.onreadystatechange = function(){handleScriptLoad.call(scriptElem);};
- scriptElem.setAttribute("src",script_url);
- doc.getElementsByTagName("head")[0].appendChild(scriptElem);
- },0);
- fireReadyStateChange(2);
- },
- abort:function(){},
- setRequestHeader:function(){}, // noop
- getResponseHeader:function(){return "";}, // basically noop
- getAllResponseHeaders:function(){return [];} // ditto
- };
-
- reset();
-
- return publicAPI;
- };
-})(window);
diff --git a/app/javascripts/links.js b/app/javascripts/links.js
deleted file mode 100644
index 44e6b630..00000000
--- a/app/javascripts/links.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the links JS script for Jappix
-
--------------------------------------------------
-
-License: dual-licensed under AGPL and MPLv2
-Authors: Valérian Saliou, Maranda
-
-*/
-
-// Bundle
-var Links = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Apply links in a string
- * @public
- * @param {string} string
- * @param {string} mode
- * @param {string} style
- * @return {string}
- */
- self.apply = function(string, mode, style) {
-
- try {
- var target;
-
- // Links style
- if(!style) {
- style = '';
- } else {
- style = ' style="' + style + '"';
- }
-
- // Open in new tabs
- if(mode != 'xhtml-im') {
- target = ' target="_blank"';
- } else {
- target = '';
- }
-
- // XMPP address
- string = string.replace(
- /(\s|<br \/>|^)(([a-zA-Z0-9\._-]+)@([a-zA-Z0-9\.\/_-]+))(,|\s|$)/gi,
- '$1<a href="xmpp:$2" target="_blank"' + style + '>$2</a>$5'
- );
-
- // Simple link
- string = string.replace(
- /(\s|<br \/>|^|\()((https?|ftp|file|xmpp|irc|mailto|vnc|webcal|ssh|ldap|smb|magnet|spotify)(:)([^<>'"\s\)]+))/gim,
- '$1<a href="$2"' + target + style + '>$2</a>'
- );
-
- return string;
- } catch(e) {
- Console.error('Links.apply', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
-
-var JappixLinks = Links; \ No newline at end of file
diff --git a/app/javascripts/mam.js b/app/javascripts/mam.js
deleted file mode 100644
index 0fe64b90..00000000
--- a/app/javascripts/mam.js
+++ /dev/null
@@ -1,450 +0,0 @@
-/*
-
-Jappix - An open social platform
-Implementation of XEP-0313: Message Archive Management
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var MAM = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Constants */
- self.REQ_MAX = 50;
- self.SCROLL_THRESHOLD = 200;
-
- self.PREF_DEFAULTS = {
- 'always' : 1,
- 'never' : 1,
- 'roster' : 1
- };
-
-
- /* Variables */
- self.map_reqs = {};
- self.map_pending = {};
- self.map_states = {};
- self.map_messages = {};
- self.msg_queue = {};
-
-
- /**
- * Gets the MAM configuration
- * @public
- * @return {undefined}
- */
- self.getConfig = function() {
-
- try {
- // Lock the archiving options
- $('#archiving').attr('disabled', true);
-
- // Get the archiving configuration
- var iq = new JSJaCIQ();
- iq.setType('get');
-
- iq.appendNode('prefs', { 'xmlns': NS_URN_MAM });
-
- con.send(iq, self.handleConfig);
- } catch(e) {
- Console.error('MAM.getConfig', e);
- }
-
- };
-
-
- /**
- * Handles the MAM configuration
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleConfig = function(iq) {
-
- try {
- if(iq.getType() != 'error') {
- // Read packet
- var cur_default = $(iq.getNode()).find('prefs').attr('default') || 'never';
-
- if(!(cur_default in self.PREF_DEFAULTS)) {
- cur_default = 'never';
- }
-
- // Apply value to options
- $('#archiving').val(cur_default);
- }
-
- // Unlock the archiving option
- $('#archiving').removeAttr('disabled');
-
- // All done.
- Options.wait('mam');
- } catch(e) {
- Console.error('MAM.handleConfig', e);
- }
-
- };
-
-
- /**
- * Sets the MAM configuration
- * @public
- * @param {string} pref_default
- * @return {undefined}
- */
- self.setConfig = function(pref_default) {
-
- try {
- // Check parameters
- if(!(pref_default in self.PREF_DEFAULTS)) {
- pref_default = 'never';
- }
-
- // Send new configuration
- var iq = new JSJaCIQ();
- iq.setType('set');
-
- iq.appendNode('prefs', { 'xmlns': NS_URN_MAM, 'default': pref_default });
-
- con.send(iq);
- } catch(e) {
- Console.error('MAM.setConfig', e);
- }
-
- };
-
-
- /**
- * Removes all (or given) MAM archives
- * @public
- * @param {object} args
- * @return {undefined}
- */
- self.purgeArchives = function(args) {
-
- try {
- if(typeof args != 'object') {
- args = {};
- }
-
- var iq = new JSJaCIQ();
- iq.setType('set');
-
- var purge = iq.appendNode('purge', { 'xmlns': NS_METRONOME_MAM_PURGE });
-
- for(var c in args) {
- if(args[c]) purge.appendChild(iq.buildNode(c, {'xmlns': NS_METRONOME_MAM_PURGE}, args[c]));
- }
-
- con.send(iq, function(iq) {
- if(iq.getType() == 'result') {
- Console.info('Archives purged (MAM).');
- } else {
- Console.error('Error purging archives (MAM).');
- }
- });
- } catch(e) {
- Console.error('MAM.purgeArchives', e);
- }
-
- };
-
-
- /**
- * Gets the MAM configuration
- * @public
- * @param {object} args
- * @param {object} rsm_args
- * @param {function} callback
- * @return {undefined}
- */
- self.getArchives = function(args, rsm_args, callback) {
-
- try {
- if(typeof args != 'object') {
- args = {};
- }
-
- var req_id = genID();
-
- if(args['with']) {
- self.map_pending[args['with']] = 1;
- self.map_reqs[req_id] = args['with'];
- }
-
- var iq = new JSJaCIQ();
- iq.setType('get');
- iq.setID(req_id);
-
- var query = iq.setQuery(NS_URN_MAM);
-
- for(var c in args) {
- if(args[c] !== null) query.appendChild(iq.buildNode(c, {'xmlns': NS_URN_MAM}, args[c]));
- }
-
- if(rsm_args && typeof rsm_args == 'object') {
- var rsm_set = query.appendChild(iq.buildNode('set', {'xmlns': NS_RSM}));
-
- for(var r in rsm_args) {
- if(rsm_args[r] !== null) rsm_set.appendChild(iq.buildNode(r, {'xmlns': NS_RSM}, rsm_args[r]));
- }
- }
-
- con.send(iq, function(res_iq) {
- self.handleArchives(res_iq, callback);
- });
- } catch(e) {
- Console.error('MAM.getArchives', e);
- }
-
- };
-
-
- /**
- * Handles the MAM configuration
- * @public
- * @param {object} iq
- * @param {function} callback
- * @return {undefined}
- */
- self.handleArchives = function(iq, callback) {
-
- try {
- var res_id = iq.getID();
- var res_with;
-
- if(res_id && res_id in self.map_reqs) {
- res_with = self.map_reqs[res_id];
- }
-
- if(iq.getType() != 'error') {
- if(res_with) {
- var res_sel = $(iq.getQuery());
- var res_rsm_sel = res_sel.find('set[xmlns="' + NS_RSM + '"]');
-
- // Store that data
- self.map_states[res_with] = {
- 'date': {
- 'start': res_sel.find('start').eq(0).text(),
- 'end': res_sel.find('end').eq(0).text()
- },
-
- 'rsm': {
- 'first': res_rsm_sel.find('first').eq(0).text(),
- 'last': res_rsm_sel.find('last').eq(0).text(),
- 'count': parseInt(res_rsm_sel.find('count').eq(0).text() || 0)
- }
- };
-
- // Generate stamps for easy operations
- var start_stamp = DateUtils.extractStamp(Date.jab2date(self.map_states[res_with].date.start));
- var start_end = DateUtils.extractStamp(Date.jab2date(self.map_states[res_with].date.end));
-
- // Create MAM messages target
- var target_html = '<div class="mam-chunk" data-start="' + Common.encodeQuotes(start_stamp) + '" data-end="' + Common.encodeQuotes(start_end) + '"></div>';
-
- var target_content_sel = $('#' + hex_md5(res_with) + ' .content');
- var target_wait_sel = target_content_sel.find('.wait-mam');
-
- if(target_wait_sel.size()) {
- target_wait_sel.after(target_html);
- } else {
- target_content_sel.prepend(target_html);
- }
-
- // Any enqueued message to display?
- if(typeof self.msg_queue[res_with] == 'object') {
- for(var i in self.msg_queue[res_with]) {
- (self.msg_queue[res_with][i])();
- }
-
- delete self.msg_queue[res_with];
- }
-
- // Remove XID from pending list
- if(res_with in self.map_pending) {
- delete self.map_pending[res_with];
- }
-
- Console.info('Got archives from: ' + res_with);
- } else {
- Console.warn('Could not associate archive response with a known JID.');
- }
- } else {
- Console.error('Error handing archives (MAM).');
- }
-
- // Execute callback?
- if(typeof callback == 'function') {
- callback(iq);
- }
- } catch(e) {
- Console.error('MAM.handleArchives', e);
- }
-
- };
-
-
- /**
- * Handles a MAM-forwarded message stanza
- * @public
- * @param {object} fwd_stanza
- * @param {object} c_delay
- * @return {undefined}
- */
- self.handleMessage = function(fwd_stanza, c_delay) {
-
- try {
- // Build message node
- var c_message = fwd_stanza.find('message');
-
- if(c_message[0]) {
- // Re-build a proper JSJaC message stanza
- var message = JSJaCPacket.wrapNode(c_message[0]);
- var message_node = message.getNode();
-
- // Check message type
- var type = message.getType() || 'chat';
-
- if(type == 'chat') {
- // Display function
- var c_display_fn;
- var c_display_msg_bool = false;
-
- // Read message data
- var xid = Common.bareXID(Common.getStanzaFrom(message));
- var id = message.getID();
- var from_xid = xid;
- var b_name = Name.getBuddy(xid);
- var mode = (xid == Common.getXID()) ? 'me': 'him';
-
- // Refactor chat XID (in case we were the sender of the archived message)
- if(mode == 'me') {
- xid = Common.bareXID(message.getTo());
- }
-
- var hash = hex_md5(xid);
- var body = message.getBody();
-
- // Content message?
- if(body) {
- // Read delay (required since we deal w/ a past message!)
- var time, stamp;
- var delay = c_delay.attr('stamp');
-
- if(delay) {
- time = DateUtils.relative(delay);
- stamp = DateUtils.extractStamp(Date.jab2date(delay));
- }
-
- // Last-minute checks before display
- if(time && stamp) {
- var mam_chunk_path = '#' + hash + ' .mam-chunk';
-
- // Markable message?
- var is_markable = Markers.hasRequestMarker(message_node);
-
- // No chat auto-scroll?
- var no_scroll = Common.exists(mam_chunk_path);
-
- // Select the custom target
- var c_target_sel = function() {
- return $(mam_chunk_path).filter(function() {
- return $(this).attr('data-start') <= stamp && $(this).attr('data-end') >= stamp;
- }).filter(':first');
- };
-
- // Display the message in that target
- c_display_fn = function() {
- // Display message
- Message.display(
- type,
- from_xid,
- hash,
- b_name.htmlEnc(),
- body,
- time,
- stamp,
- 'old-message',
- true,
- null,
- mode,
- id + '-mam',
- c_target_sel(),
- no_scroll,
- undefined,
- undefined,
- undefined,
- is_markable
- );
-
- self.map_messages[id] = 1;
- };
-
- c_display_msg_bool = c_target_sel().size() ? true : false;
-
- // Hack: do not display the message in case we would duplicate it w/ current session messages
- // only used when initiating a new chat, avoids collisions
- if(!(xid in self.map_states) && $('#' + hash).find('.one-line.user-message:last').text() == body) {
- return;
- }
- }
- } else if(Markers.hasResponseMarker(message_node)) {
- // Marked message? (by other party)
- if(mode == 'him') {
- var marked_message_id = Markers.getMessageID(message_node);
-
- c_display_fn = function() {
- var is_mam_marker = true;
-
- Markers.handle(
- from_xid,
- message_node,
- is_mam_marker
- );
- };
-
- c_display_msg_bool = (self.map_messages[marked_message_id] === 1) ? true : false;
- }
- }
-
- // Display message?
- if(typeof c_display_fn == 'function') {
- if(c_display_msg_bool === true) {
- // Display message now
- c_display_fn();
- } else {
- // Delay display (we may not have received the MAM reply ATM)
- if(typeof self.msg_queue[xid] != 'object') {
- self.msg_queue[xid] = [];
- }
-
- self.msg_queue[xid].push(c_display_fn);
- }
- }
- }
- }
- } catch(e) {
- Console.error('MAM.handleMessage', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
diff --git a/app/javascripts/markers.js b/app/javascripts/markers.js
deleted file mode 100644
index badfca9c..00000000
--- a/app/javascripts/markers.js
+++ /dev/null
@@ -1,428 +0,0 @@
-/*
-
-Jappix - An open social platform
-Implementation of XEP-0333: Chat Markers
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Markers = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Constants */
- self.MARK_TYPE_MARKABLE = 'markable';
- self.MARK_TYPE_RECEIVED = 'received';
- self.MARK_TYPE_DISPLAYED = 'displayed';
- self.MARK_TYPE_ACKNOWLEDGED = 'acknowledged';
-
- self.MARK_TYPES = {};
- self.MARK_TYPES[self.MARK_TYPE_MARKABLE] = 1;
- self.MARK_TYPES[self.MARK_TYPE_RECEIVED] = 1;
- self.MARK_TYPES[self.MARK_TYPE_DISPLAYED] = 1;
- self.MARK_TYPES[self.MARK_TYPE_ACKNOWLEDGED] = 1;
-
-
- /**
- * Returns whether entity supports message markers
- * @public
- * @param {string} xid
- * @return {boolean}
- */
- self.hasSupport = function(xid) {
-
- var has_support = false;
-
- try {
- has_support = true ? $('#' + hex_md5(xid)).attr('data-markers') == 'true' : false;
- } catch(e) {
- Console.error('Markers.hasSupport', e);
- } finally {
- return has_support;
- }
-
- };
-
-
- /**
- * Returns whether request message is marked or not
- * @public
- * @param {object} message
- * @return {boolean}
- */
- self.hasRequestMarker = function(message) {
-
- var has_request_marker = false;
-
- try {
- has_request_marker = ($(message).find('markable[xmlns="' + NS_URN_MARKERS + '"]').size() ? true : false);
- } catch(e) {
- Console.error('Markers.hasRequestMarker', e);
- } finally {
- return has_request_marker;
- }
-
- };
-
-
- /**
- * Returns whether response message is marked or not
- * @public
- * @param {object} message
- * @return {boolean}
- */
- self.hasResponseMarker = function(message) {
-
- var has_response_marker = false;
-
- try {
- var marker_sel = $(message).find('[xmlns="' + NS_URN_MARKERS + '"]');
-
- if(marker_sel.size()) {
- var mark_type = marker_sel.prop('tagName').toLowerCase();
-
- switch(mark_type) {
- case self.MARK_TYPE_RECEIVED:
- case self.MARK_TYPE_DISPLAYED:
- case self.MARK_TYPE_ACKNOWLEDGED:
- has_response_marker = true;
- break;
- }
- }
- } catch(e) {
- Console.error('Markers.hasResponseMarker', e);
- } finally {
- return has_response_marker;
- }
-
- };
-
-
- /**
- * Returns the marked message ID
- * @public
- * @param {object} message
- * @return {boolean}
- */
- self.getMessageID = function(message) {
-
- var message_id = null;
-
- try {
- message_id = $(message).find('[xmlns="' + NS_URN_MARKERS + '"]').attr('id');
- } catch(e) {
- Console.error('Markers.getMessageID', e);
- } finally {
- return message_id;
- }
-
- };
-
-
- /**
- * Marks a message
- * @public
- * @param {object} message
- * @return {undefined}
- */
- self.mark = function(message) {
-
- try {
- message.appendNode('markable', {
- 'xmlns': NS_URN_MARKERS
- });
- } catch(e) {
- Console.error('Markers.mark', e);
- }
-
- };
-
-
- /**
- * Changes received message status (once received or read)
- * @public
- * @param {string} mark_type
- * @param {object} message_id
- * @return {undefined}
- */
- self.change = function(to, mark_type, message_id, message_sel) {
-
- try {
- if(!(mark_type in self.MARK_TYPES)) {
- throw 'Marker type (' + mark_type + ') not supported, aborting.';
- }
-
- // Store mark state
- message_sel.attr('data-mark', mark_type);
-
- var message = new JSJaCMessage();
-
- message.setType('chat');
- message.setTo(to);
-
- message.appendNode(mark_type, {
- 'xmlns': NS_URN_MARKERS,
- 'id': message_id
- });
-
- con.send(message);
-
- Console.debug('Markers.change', 'Changed marker to: ' + mark_type + ' for message with ID: ' + message_id + ' from: ' + to);
- } catch(e) {
- Console.error('Markers.change', e);
- }
-
- };
-
-
- /**
- * Handles marker change coming from Carbons
- * @public
- * @param {string} message
- * @return {undefined}
- */
- self.handleCarbonChange = function(message) {
-
- try {
- // Check the marker element is existing
- var marker_sel = $(message).find('[xmlns="' + NS_URN_MARKERS + '"]');
-
- if(marker_sel.size()) {
- var xid = Common.bareXID(message.getTo());
-
- var mark_type = marker_sel.prop('tagName').toLowerCase();
- var mark_handle = false;
-
- // Filter allowed markers
- switch(mark_type) {
- case self.MARK_TYPE_RECEIVED:
- case self.MARK_TYPE_DISPLAYED:
- case self.MARK_TYPE_ACKNOWLEDGED:
- mark_handle = true;
- break;
- }
-
- if(mark_handle === true) {
- var mark_message_id = marker_sel.attr('id');
-
- var message_sel = $('#' + hex_md5(xid) + ' .content .one-line[data-mode="him"][data-markable="true"]').filter(function() {
- return ($(this).attr('data-id') + '') === (mark_message_id + '');
- }).filter(':last');
-
- if(!message_sel.size()) {
- Console.warn('Markers.handleCarbonChange', 'Unknown message marker to keep in sync with Carbons for: ' + xid);
- return false;
- }
-
- // Store mark state
- message_sel.attr('data-mark', mark_type);
-
- Console.debug('Markers.handleCarbonChange', 'Received Carbons chat marker (' + mark_type + ') from another resource for: ' + from);
- }
- }
- } catch(e) {
- Console.error('Markers.handleCarbonChange', e);
- }
-
- };
-
-
- /**
- * Handles a marked message
- * @public
- * @param {string} from
- * @param {object} message
- * @param {boolean} is_mam_marker
- * @return {undefined}
- */
- self.handle = function(from, message, is_mam_marker, is_groupchat_user) {
-
- try {
- var xid = ((is_groupchat_user !== true && Common.bareXID(from)) || from);
- var marker_sel = $(message).find('[xmlns="' + NS_URN_MARKERS + '"]');
-
- if(marker_sel.size()) {
- var mark_type = marker_sel.prop('tagName').toLowerCase();
- var mark_message_id = marker_sel.attr('id');
-
- if(is_mam_marker === true) {
- mark_message_id += '-mam';
- }
-
- // Filter allowed markers
- var mark_valid = false;
-
- switch(mark_type) {
- case self.MARK_TYPE_RECEIVED:
- case self.MARK_TYPE_DISPLAYED:
- case self.MARK_TYPE_ACKNOWLEDGED:
- mark_valid = true;
- break;
- }
-
- if(mark_valid === false) {
- Console.warn('Markers.handle', 'Dropping unexpected chat marker (' + mark_type + ') from: ' + from);
- return false;
- }
-
- // Find marked message target
- var message_sel = $('#' + hex_md5(xid) + ' .content .one-line[data-mode="me"]').filter(function() {
- return ($(this).attr('data-id') + '') === (mark_message_id + '');
- }).filter(':last');
-
- if(!message_sel.size()) {
- Console.warn('Markers.handle', 'Dropping chat marker (' + mark_type + ') for inexisting message ID (' + mark_message_id + ') from: ' + from);
- return false;
- }
-
- Console.debug('Markers.handle', 'Received chat marker (' + mark_type + ') from: ' + from);
-
- // Finally display received marker
- self._display(xid, message_sel, mark_type);
-
- return true;
- }
-
- return false;
- } catch(e) {
- Console.error('Markers.handle', e);
- return false;
- }
-
- };
-
-
- /**
- * Adds the markers input events
- * @public
- * @param {object} target
- * @param {string} xid
- * @param {string} hash
- * @param {string} type
- * @return {undefined}
- */
- self.events = function(target, xid, hash, type) {
-
- try {
- target.focus(function() {
- // Not needed
- if(target.is(':disabled')) {
- return;
- }
-
- // Send displayed message marker?
- if(type == 'chat' && self.hasSupport(xid) === true) {
- var last_message = $('#' + hash + ' .content .one-line.user-message[data-markable="true"]:last');
-
- if(last_message.attr('data-mark') != self.MARK_TYPE_DISPLAYED) {
- var last_message_id = last_message.attr('data-id');
- var full_xid = Presence.highestPriority(xid) || xid;
-
- if(last_message_id) {
- self.change(
- full_xid,
- self.MARK_TYPE_DISPLAYED,
- last_message_id,
- last_message
- );
- }
- }
- }
- });
- } catch(e) {
- Console.error('Markers.events', e);
- }
-
- };
-
-
- /**
- * Displays a marker
- * @private
- * @param {string} xid
- * @param {object} message_sel
- * @param {string} mark_type
- * @return {boolean}
- */
- self._display = function(xid, message_sel, mark_type) {
-
- try {
- // Get marker state translation
- var marker_sel = message_sel.find('.message-marker');
- var mark_message = null;
- var css_classes = 'talk-images message-marker-read';
- var marker_category = null;
-
- switch(mark_type) {
- case self.MARK_TYPE_RECEIVED:
- marker_category = 'delivered';
-
- marker_sel.removeClass(css_classes);
- marker_sel.text(
- Common._e("Delivered")
- );
- break;
-
- case self.MARK_TYPE_DISPLAYED:
- case self.MARK_TYPE_ACKNOWLEDGED:
- marker_category = 'read';
-
- marker_sel.addClass(css_classes);
- marker_sel.text(
- Common._e("Read")
- );
- break;
-
- default:
- return false;
- }
-
- if(marker_category !== null) {
- marker_sel.attr('data-category', marker_category);
- }
-
- // Reset sending state
- message_sel.removeClass('is-sending');
-
- // Toggle marker visibility
- message_sel.parents('.content').find('.one-line .message-marker').filter(function() {
- var data_category = $(this).attr('data-category');
-
- if(data_category != 'delivered' && data_category != 'read') {
- return false;
- }
-
- // Leave older "read" checkpoint on screen
- if(marker_category == 'delivered') {
- return data_category == marker_category;
- }
-
- return true;
- }).hide();
- marker_sel.show();
-
- return true;
- } catch(e) {
- Console.error('Markers._display', e);
- return false;
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/me.js b/app/javascripts/me.js
deleted file mode 100644
index 44c3daa2..00000000
--- a/app/javascripts/me.js
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the Jappix Me tool functions for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Me = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Opens the Me tools
- * @public
- * @return {undefined}
- */
- self.open = function() {
-
- try {
- // Popup HTML content
- var html =
- '<div class="top">' + Common._e("Public profile") + '</div>' +
-
- '<div class="content">' +
- '<a class="me-images logo" href="https://me.jappix.com/" target="_blank"></a>' +
-
- '<div class="infos">' +
- '<p class="infos-title">' + Common._e("Your profile anywhere on the Web.") + '</p>' +
- '<p>' + Common.printf(Common._e("%s is a Jappix.com service which makes your XMPP profile public. It is easier to share it. No XMPP account is required to view your social channel, your current position and your contact details."), '<a href="https://me.jappix.com/" target="_blank">Jappix Me</a>') + '</p>' +
- '<p>' + Common._e("Furthermore, every picture you post in your social channel is added to a beautiful picture timeline. You can now view the pictures you shared year by year.") + '</p>' +
- '<p>' + Common._e("You can also use your XMPP avatar as a single avatar for every website, blog and forum you use. When you change it on XMPP, the new avatar appears everywhere. What a genius improvement!") + '</p>' +
- '</div>' +
-
- '<a class="go one-button" href="https://me.jappix.com/new" target="_blank">' + Common._e("Yay, let's create your public profile!") + '</a>' +
- '</div>' +
-
- '<div class="bottom">' +
- '<a href="#" class="finish">' + Common._e("Close") + '</a>' +
- '</div>';
-
- // Create the popup
- Popup.create('me', html);
-
- // Associate the events
- self.instance();
-
- Console.log('Public profile tool opened.');
- } catch(e) {
- Console.error('Me.open', e);
- }
-
- };
-
-
- /**
- * Closes the Me tools
- * @public
- * @return {boolean}
- */
- self.close = function() {
-
- try {
- // Destroy the popup
- Popup.destroy('me');
-
- // We finished
- Welcome.is_done = false;
- } catch(e) {
- Console.error('Me.close', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.instance = function() {
-
- try {
- var me_sel = $('#me');
-
- // Click events
- me_sel.find('.content a.go').click(function() {
- self.close();
- });
-
- me_sel.find('.bottom .finish').click(self.close);
- } catch(e) {
- Console.error('Me.instance', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/message.js b/app/javascripts/message.js
deleted file mode 100644
index 8374ab81..00000000
--- a/app/javascripts/message.js
+++ /dev/null
@@ -1,2070 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the messages JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Authors: Valérian Saliou, Maranda
-
-*/
-
-// Bundle
-var Message = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Handles MAM forwared messages
- * @private
- * @param {object} c_mam
- * @return {boolean}
- */
- self._handleMAM = function(c_mam) {
-
- try {
- var c_mam_sel = $(c_mam);
- var c_mam_delay = c_mam_sel.find('delay[xmlns="' + NS_URN_DELAY + '"]');
- var c_mam_forward = c_mam_sel.find('forwarded[xmlns="' + NS_URN_FORWARD + '"]');
-
- if(c_mam_forward.size()) {
- MAM.handleMessage(c_mam_forward, c_mam_delay);
- }
- } catch(e) {
- Console.error('Message._handleMAM', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Handles chatstate messages
- * @private
- * @param {string} from
- * @param {string} hash
- * @param {string} type
- * @param {object} node
- * @return {undefined}
- */
- self._handleChatstate = function(from, hash, type, node) {
-
- try {
- /* REF: http://xmpp.org/extensions/xep-0085.html */
-
- var node_sel = $(node);
-
- // Re-process the hash?
- var chatstate_hash = (type == 'groupchat') ? hex_md5(from) : hash;
-
- // Do something depending of the received state
- if(node_sel.find('active').size()) {
- ChatState.display('active', chatstate_hash, type);
-
- // Tell Jappix the entity supports chatstates
- $('#' + chatstate_hash + ' .message-area').attr('data-chatstates', 'true');
-
- Console.log('Active chatstate received from: ' + from);
- } else if(node_sel.find('composing').size()) {
- ChatState.display('composing', chatstate_hash, type);
-
- Console.log('Composing chatstate received from: ' + from);
- } else if(node_sel.find('paused').size()) {
- ChatState.display('paused', chatstate_hash, type);
-
- Console.log('Paused chatstate received from: ' + from);
- } else if(node_sel.find('inactive').size()){
- ChatState.display('inactive', chatstate_hash, type);
-
- Console.log('Inactive chatstate received from: ' + from);
- } else if(node_sel.find('gone').size()){
- ChatState.display('gone', chatstate_hash, type);
-
- Console.log('Gone chatstate received from: ' + from);
- }
- } catch(e) {
- Console.error('Message._doThat', e);
- }
-
- };
-
-
- /**
- * Handles Jappix App messages
- * @private
- * @param {string} xid
- * @param {string} body
- * @param {object} node
- * @return {boolean}
- */
- self._handleJappixApp = function(xid, body, node) {
-
- var is_exit = false;
-
- try {
- var node_sel = $(node);
-
- // Get notification data
- var jappix_app_node = node_sel.find('app[xmlns="jappix:app"]');
- var jappix_app_name = jappix_app_node.find('name');
-
- var jappix_app_name_id = jappix_app_name.attr('id');
- var jappix_app_name_value = jappix_app_name.text();
-
- // Jappix Me notification?
- if(jappix_app_name_id == 'me') {
- // Get more notification data
- var jappix_app_data = jappix_app_node.find('data[xmlns="jappix:app:me"]');
- var jappix_app_data_action = jappix_app_data.find('action');
- var jappix_app_data_url = jappix_app_data.find('url');
-
- var jappix_app_data_action_type = jappix_app_data_action.attr('type');
- var jappix_app_data_action_success = jappix_app_data_action.attr('success');
- var jappix_app_data_action_job = jappix_app_data_action.attr('job');
- var jappix_app_data_url_value = jappix_app_data_url.text();
-
- // Validate data
- if(jappix_app_data_action_type && jappix_app_data_action_success && jappix_app_data_action_job) {
- // Filter success
- jappix_app_data_action_success = parseInt(jappix_app_data_action_success) == 1 ? 'success' : 'error';
-
- // Generate notification namespace
- var jappix_me_notification_ns = jappix_app_name_id + '_' + jappix_app_data_action_type + '_' + jappix_app_data_action_job + '_' + jappix_app_data_action_success;
-
- // Open a new notification
- Notification.create(jappix_me_notification_ns, xid, [jappix_app_name_value, jappix_app_data_url_value], body);
-
- Console.log('Jappix Me notification from: ' + xid + ' with namespace: ' + jappix_me_notification_ns);
-
- is_exit = true;
- }
- }
- } catch(e) {
- Console.error('Message._handleJappixApp', e);
- } finally {
- return is_exit;
- }
-
- };
-
-
- /**
- * Handles invite messages
- * @private
- * @param {string} body
- * @param {object} node
- * @return {boolean}
- */
- self._handleInvite = function(body, node) {
-
- try {
- var node_sel = $(node);
-
- // We get the needed values
- var iFrom = node_sel.find('x[xmlns="' + NS_MUC_USER + '"] invite').attr('from');
- var iRoom = node_sel.find('x[xmlns="' + NS_XCONFERENCE + '"]').attr('jid') || from;
-
- // We display the notification
- Notification.create('invite_room', iFrom, [iRoom], body);
-
- Console.log('Invite Request from: ' + iFrom + ' to join: ' + iRoom);
- } catch(e) {
- Console.error('Message._handleInvite', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Handles request messages
- * @private
- * @param {string} xid
- * @param {object} message
- * @param {string} body
- * @return {boolean}
- */
- self._handleRequest = function(xid, message, body) {
-
- try {
- // Open a new notification
- Notification.create('request', xid, [message], body);
-
- Console.log('HTTP Request from: ' + xid);
- } catch(e) {
- Console.error('Message._handleRequest', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Handles OOB messages
- * @private
- * @param {string} from
- * @param {string} xid
- * @param {string} id
- * @param {object} node
- * @return {boolean}
- */
- self._handleOOB = function(from, xid, id, node) {
-
- try {
- OOB.handle(from, id, 'x', node);
-
- Console.log('Message OOB request from: ' + xid);
- } catch(e) {
- Console.error('Message._handleOOB', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Handles Roster Item Exchange messages
- * @private
- * @param {string} xid
- * @param {object} message
- * @param {string} body
- * @return {boolean}
- */
- self._handleRosterItemExchange = function(xid, message, body) {
-
- try {
- // Open a new notification
- Notification.create('rosterx', xid, [message], body);
-
- Console.log('Roster Item Exchange from: ' + xid);
- } catch(e) {
- Console.error('Message._handleRosterItemExchange', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Handles attention messages
- * @private
- * @param {string} xid
- * @param {string} body
- * @return {boolean}
- */
- self._handleAttention = function(xid, body) {
-
- try {
- Attention.receive(xid, body);
- } catch(e) {
- Console.error('Message._handleAttention', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Handles normal messages
- * @private
- * @param {string} xid
- * @param {string} subject
- * @param {string} body
- * @param {string} delay
- * @return {boolean}
- */
- self._handleNormal = function(xid, subject, body, delay) {
-
- try {
- var message_date = delay || DateUtils.getXMPPTime('utc');
- var message_id = hex_md5(xid + subject + message_date);
-
- // Store the received message
- Inbox.storeMessage(xid, subject, body, 'unread', message_id, message_date);
-
- // Display the inbox message
- if(Common.exists('#inbox')) {
- Inbox.displayMessage(xid, subject, body, 'unread', message_id, message_date);
- }
-
- // Check we have new messages (play a sound if any unread messages)
- if(Inbox.checkMessages()) {
- Audio.play('notification');
- }
-
- // Send it to the server
- Inbox.store();
- } catch(e) {
- Console.error('Message._handleNormal', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Handles Pubsub event messages
- * @private
- * @param {string} xid
- * @param {string} hash
- * @param {object} message
- * @param {object} node
- * @return {boolean}
- */
- self._handlePubsub = function(xid, hash, message, node) {
-
- try {
- // We get the needed values
- var items_sel = $(node).find('event items');
- var node_attr = items_sel.attr('node');
- var text;
-
- // Turn around the different result cases
- if(node_attr) {
- switch(node_attr) {
- // Mood
- case NS_MOOD:
- // Retrieve the values
- var mood = items_sel.find('mood');
- var value = '';
- text = '';
-
- // There's something
- if(mood.children().size()) {
- value = node.getElementsByTagName('mood').item(0).childNodes.item(0).nodeName || '';
- text = mood.find('text').text();
- }
-
- // Store the PEP event (and display it)
- PEP.store(xid, 'mood', value, text);
-
- break;
-
- // Activity
- case NS_ACTIVITY:
- // Retrieve the values
- var activity_sel = items_sel.find('activity');
- text = '';
-
- // There's something
- if(activity_sel.children().size()) {
- value = node.getElementsByTagName('activity').item(0).childNodes.item(0).nodeName || '';
- text = activity_sel.find('text').text();
- }
-
- // Store the PEP event (and display it)
- PEP.store(xid, 'activity', value, text);
-
- break;
-
- // Tune
- case NS_TUNE:
- // Retrieve the values
- var tune_sel = items_sel.find('tune');
- var artist = tune_sel.find('artist').text();
- var source = tune_sel.find('source').text();
- var title = tune_sel.find('title').text();
- var uri = tune_sel.find('uri').text();
-
- // Store the PEP event (and display it)
- PEP.store(xid, 'tune', artist, title, source, uri);
-
- break;
-
- // Geolocation
- case NS_GEOLOC:
- // Retrieve the values
- var geoloc_sel = items_sel.find('geoloc');
- var lat = geoloc_sel.find('lat').text();
- var lon = geoloc_sel.find('lon').text();
-
- // Any extra-values?
- var locality = geoloc_sel.find('locality').text();
- var region = geoloc_sel.find('region').text();
- var country = geoloc_sel.find('country').text();
- var human = PEP.humanPosition(locality, region, country);
-
- // Store the PEP event (and display it)
- PEP.store(xid, 'geoloc', lat, lon, human);
-
- break;
-
- // Microblog
- case NS_URN_MBLOG:
- Microblog.display(message, xid, hash, 'mixed', 'push');
-
- break;
-
- // Inbox
- case NS_URN_INBOX:
- // Do not handle friend's notifications
- if(xid == Common.getXID()) {
- Notification.handle(message);
- }
-
- break;
- }
- }
- } catch(e) {
- Console.error('Message._handlePubsub', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Handles room topic messages
- * @private
- * @param {string} type
- * @param {string} from
- * @param {string} hash
- * @param {string} subject
- * @param {string} resource
- * @param {string} time
- * @param {string} stamp
- * @return {undefined}
- */
- self._handleRoomTopic = function(type, from, hash, subject, resource, time, stamp) {
-
- try {
- // Filter the vars
- var filter_subject = subject.replace(/\n+/g, ' ');
- var filteredSubject = Filter.message(filter_subject, resource, true);
- var filteredName = resource.htmlEnc();
-
- // Display the new subject at the top
- $('#' + hash + ' .top .name .bc-infos .muc-topic').replaceWith(
- '<span class="muc-topic" title="' + filter_subject + '">' + filteredSubject + '</span>'
- );
-
- // Display the new subject as a system message
- if(resource) {
- var topic_body = filteredName + ' ' + Common._e("changed the subject to:") + ' ' + Filter.message(subject, resource, true);
- self.display(type, from, hash, filteredName, topic_body, time, stamp, 'system-message', false);
- }
- } catch(e) {
- Console.error('Message._handleRoomTopic', e);
- }
-
- };
-
-
- /**
- * Handles groupchat messages
- * @private
- * @param {string} from
- * @param {string} hash
- * @param {string} type
- * @param {string} resource
- * @param {string} id
- * @param {string} body
- * @param {string} raw_body
- * @param {string} time
- * @param {number} stamp
- * @param {boolean} html_escape
- * @param {string} delay
- * @param {object} message_edit
- * @param {boolean} is_storable
- * @return {undefined}
- */
- self._handleGroupchat = function(from, hash, type, resource, id, body, raw_body, time, stamp, html_escape, delay, message_edit, is_storable) {
-
- try {
- /* REF: http://xmpp.org/extensions/xep-0045.html */
-
- // Message type
- var message_type = 'user-message';
-
- if(delay && resource) {
- // Old message
- message_type = 'old-message';
- } else if(!resource) {
- // System message
- message_type = 'system-message';
- }
-
- var nickQuote = '';
-
- // If this is not an old message
- if(message_type == 'user-message') {
- var myNick = Name.getMUCNick(hash);
-
- // If an user quoted our nick (with some checks)
- var regex = new RegExp('((^)|( )|(@))' + Common.escapeRegex(myNick) + '(($)|(:)|(,)|( ))', 'gi');
-
- if(body.match(regex) && (myNick != resource) && (message_type == 'user-message')) {
- nickQuote = ' my-nick';
- }
-
- // We notify the user if there's a new personal message
- if(nickQuote) {
- Interface.messageNotify(hash, 'personal');
- Board.quick(from, 'groupchat', raw_body, resource);
- Audio.play('receive-message');
- }
-
- // We notify the user there's a new unread MUC message
- else {
- Interface.messageNotify(hash, 'unread');
-
- // Play sound to all users in the MUC, except user who sent the message.
- if(myNick != resource) {
- Audio.play('receive-message');
- }
- }
- }
-
- // Display the received message
- self.display(
- type,
- from,
- hash,
- resource.htmlEnc(),
- body,
- time,
- stamp,
- message_type,
- html_escape,
- nickQuote,
- undefined,
- id,
- undefined,
- undefined,
- message_edit.is_edited,
- message_edit.next_count,
- is_storable
- );
- } catch(e) {
- Console.error('Message._handleGroupchat', e);
- }
-
- };
-
-
- /**
- * Handles chat messages
- * @private
- * @param {string} from
- * @param {string} xid
- * @param {string} hash
- * @param {string} type
- * @param {string} resource
- * @param {string} id
- * @param {string} body
- * @param {string} raw_body
- * @param {string} time
- * @param {number} stamp
- * @param {boolean} html_escape
- * @param {object} message_edit
- * @param {boolean} is_storable
- * @param {boolean} is_markable
- * @param {boolean} is_groupchat_user
- * @param {object} message
- * @return {undefined}
- */
- self._handleChat = function(from, xid, hash, type, resource, id, body, raw_body, time, stamp, html_escape, message_edit, is_storable, is_markable, is_groupchat_user, message) {
-
- try {
- // Gets the nickname of the user
- var fromName = resource;
- var chatType = 'chat';
-
- // Must send a receipt notification?
- if(Receipts.has(message) && (id !== null)) {
- Receipts.sendReceived(type, from, id);
- }
-
- // It does not come from a groupchat user, get the full name
- if(!is_groupchat_user) {
- if (!Name.buddyIsAnonymous(xid)) {
- fromName = Name.getBuddy(xid);
- }
- } else {
- chatType = 'private';
- }
-
- // If the chat isn't yet opened, open it !
- if(!Common.exists('#' + hash)) {
- // We create a new chat
- Chat.create(hash, xid, fromName, chatType);
-
- // We tell the user that a new chat has started
- Audio.play('new-chat');
- } else {
- Audio.play('receive-message');
- }
-
- // Display the received message
- var message_sel = self.display(
- type,
- xid,
- hash,
- fromName.htmlEnc(),
- body,
- time,
- stamp,
- 'user-message',
- html_escape,
- '',
- 'him',
- id,
- undefined,
- undefined,
- message_edit.is_edited,
- message_edit.next_count,
- is_storable,
- is_markable
- );
-
- // We notify the user
- Interface.messageNotify(hash, 'personal');
- Board.quick(xid, 'chat', raw_body, fromName);
-
- // Mark the message
- if(is_markable === true && Markers.hasSupport(xid)) {
- var mark_type = Markers.MARK_TYPE_RECEIVED;
-
- if(Interface.hasChanFocus(hash) === true) {
- mark_type = Markers.MARK_TYPE_DISPLAYED;
- }
-
- Markers.change(from, mark_type, id, message_sel);
- }
- } catch(e) {
- Console.error('Message._handleChat', e);
- }
-
- };
-
-
- /**
- * Sends an help message
- * @private
- * @param {string} type
- * @param {string} xid
- * @param {string} hash
- * @return {undefined}
- */
- self._sendHelp = function(type, xid, hash) {
-
- try {
- // Help text
- var help_text = '<p class="help" xmlns="http://www.w3.org/1999/xhtml">';
- help_text += '<b>' + Common._e("Available shortcuts:") + '</b>';
-
- // Shortcuts array
- var shortcuts = [];
-
- // Common shortcuts
- shortcuts.push(Common.printf(Common._e("%s removes the chat logs"), '<em>/clear</em>'));
- shortcuts.push(Common.printf(Common._e("%s joins a groupchat"), '<em>/join jid</em>'));
- shortcuts.push(Common.printf(Common._e("%s closes the chat"), '<em>/part</em>'));
- shortcuts.push(Common.printf(Common._e("%s shows the user profile"), '<em>/whois jid</em>'));
-
- // Groupchat shortcuts
- if(type == 'groupchat') {
- shortcuts.push(Common.printf(Common._e("%s sends a message to the room"), '<em>/say message</em>'));
- shortcuts.push(Common.printf(Common._e("%s changes your nickname"), '<em>/nick nickname</em>'));
- shortcuts.push(Common.printf(Common._e("%s sends a message to someone in the room"), '<em>/msg nickname message</em>'));
- shortcuts.push(Common.printf(Common._e("%s changes the room topic"), '<em>/topic subject</em>'));
- shortcuts.push(Common.printf(Common._e("%s kicks a user of the room"), '<em>/kick [reason:] nickname</em>'));
- shortcuts.push(Common.printf(Common._e("%s bans a user of the room"), '<em>/ban [reason:] nickname</em>'));
- shortcuts.push(Common.printf(Common._e("%s invites someone to join the room"), '<em>/invite jid message</em>'));
- }
-
- // Generate the code from the array
- shortcuts = shortcuts.sort();
-
- for(var s in shortcuts) {
- help_text += shortcuts[s] + '<br />';
- }
-
- help_text += '</p>';
-
- // Display the message
- self.display(type, xid, hash, 'help', help_text, DateUtils.getCompleteTime(), DateUtils.getTimeStamp(), 'system-message', false);
-
- // Reset chatstate
- ChatState.send('active', xid, hash);
- } catch(e) {
- Console.error('Message._sendHelp', e);
- }
-
- };
-
-
- /**
- * Sends a clear message
- * @private
- * @param {string} xid
- * @param {string} hash
- * @return {undefined}
- */
- self._sendClear = function(xid, hash) {
-
- try {
- Chat.clean(hex_md5(xid));
-
- // Reset chatstate
- ChatState.send('active', xid, hash);
- } catch(e) {
- Console.error('Message._sendClear', e);
- }
-
- };
-
-
- /**
- * Sends a join message
- * @private
- * @param {string} xid
- * @param {string} hash
- * @param {string} e_1
- * @param {string} e_2
- * @return {undefined}
- */
- self._sendJoin = function(xid, hash, e_1, e_2) {
-
- try {
- // Join
- var room_gen = Common.generateXID(e_1, 'groupchat');
- var pass = e_2;
-
- Chat.checkCreate(room_gen, 'groupchat');
-
- // Reset chatstate
- ChatState.send('active', xid, hash);
- } catch(e) {
- Console.error('Message._sendJoin', e);
- }
-
- };
-
-
- /**
- * Sends a part message
- * @private
- * @param {string} xid
- * @param {string} type
- * @return {undefined}
- */
- self._sendPart = function(xid, type) {
-
- try {
- Interface.quitThisChat(xid, hex_md5(xid), type);
- } catch(e) {
- Console.error('Message._sendPart', e);
- }
-
- };
-
-
- /**
- * Sends a WHOIS message
- * @private
- * @param {string} type
- * @param {string} xid
- * @param {string} hash
- * @param {string} e_3
- * @return {undefined}
- */
- self._sendWHOIS = function(type, xid, hash, e_3) {
-
- try {
- var whois_xid = RegExp.$3;
-
- // Groupchat WHOIS
- if(type == 'groupchat') {
- nXID = Utils.getMUCUserXID(xid, whois_xid);
-
- if(!nXID) {
- Board.openThisInfo(6);
- } else {
- UserInfos.open(nXID);
- }
- }
-
- // Chat or private WHOIS
- else {
- if(!whois_xid) {
- UserInfos.open(xid);
- } else {
- UserInfos.open(whois_xid);
- }
- }
-
- // Reset chatstate
- ChatState.send('active', xid, hash);
- } catch(e) {
- Console.error('Message._sendWHOIS', e);
- }
-
- };
-
-
- /**
- * Sends an attention message
- * @private
- * @param {string} xid
- * @param {string} e_2
- * @return {undefined}
- */
- self._sendAttention = function(xid, e_2) {
-
- try {
- Attention.send(
- xid,
- $.trim(e_2)
- );
- } catch(e) {
- Console.error('Message._sendAttention', e);
- }
-
- };
-
-
- /**
- * Sends a chat message
- * @private
- * @param {string} xid
- * @param {string} hash
- * @param {string} id
- * @param {string} body
- * @param {object} message_packet
- * @return {undefined}
- */
- self._sendChat = function(xid, hash, id, body, message_packet) {
-
- try {
- message_packet.setType('chat');
-
- // Generates the correct message depending of the choosen style
- var genMsg = self.generate(message_packet, body, hash);
- var html_escape = (genMsg !== 'XHTML');
-
- // Receipt request
- var receipt_request = Receipts.request(hash);
-
- if(receipt_request) {
- message_packet.appendNode('request', {
- 'xmlns': NS_URN_RECEIPTS
- });
- }
-
- // Chatstate
- message_packet.appendNode('active', {
- 'xmlns': NS_CHATSTATES
- });
-
- // Markable message?
- var has_markers = Markers.hasSupport(xid);
-
- if(has_markers === true) {
- Markers.mark(message_packet);
- }
-
- // Send it!
- con.send(message_packet, Errors.handleReply);
-
- // Filter the xHTML message (for us!)
- if(!html_escape) {
- body = Filter.xhtml(message_packet.getNode());
- }
-
- // Finally we display the message we just sent
- var my_xid = Common.getXID();
-
- var message_sel = self.display(
- 'chat',
- my_xid,
- hash,
- Name.getBuddy(my_xid).htmlEnc(),
- body,
- DateUtils.getCompleteTime(),
- DateUtils.getTimeStamp(),
- 'user-message',
- html_escape,
- '',
- 'me',
- id
- );
-
- if(has_markers === true) {
- message_sel.addClass('is-sending');
- message_sel.find('.message-marker').text(
- Common._e("Sending...")
- ).show();
- }
-
- // Receipt timer
- if(receipt_request) {
- Receipts.checkReceived(hash, id);
- }
- } catch(e) {
- Console.error('Message._sendChat', e);
- }
-
- };
-
-
- /**
- * Sends a groupchat say message
- * @private
- * @param {string} hash
- * @param {string} body
- * @param {object} message_packet
- * @return {undefined}
- */
- self._sendGroupchatSat = function(hash, body, message_packet) {
-
- try {
- body = body.replace(/^\/say (.+)/, '$1');
-
- message_packet.setType('groupchat');
- self.generate(message_packet, body, hash);
-
- con.send(message_packet, Errors.handleReply);
- } catch(e) {
- Console.error('Message._sendGroupchatSat', e);
- }
-
- };
-
-
- /**
- * Sends a groupchat nick message
- * @private
- * @param {string} xid
- * @param {string} hash
- * @param {string} nick
- * @param {string} body
- * @return {undefined}
- */
- self._sendGroupchatNick = function(xid, hash, e_1, body) {
-
- try {
- var nick = $.trim(e_1);
-
- // Does not exist yet?
- if(nick && !Utils.getMUCUserXID(xid, nick)) {
- // Send a new presence
- Presence.send(
- (xid + '/' + nick),
- '',
- Presence.getUserShow(),
- Presence.getUserStatus(),
- '',
- false,
- false,
- Errors.handleReply
- );
-
- // Change the stored nickname
- $('#' + hex_md5(xid)).attr('data-nick', escape(nick));
-
- // Reset chatstate
- ChatState.send('active', xid, hash);
- }
- } catch(e) {
- Console.error('Message._sendGroupchatNick', e);
- }
-
- };
-
-
- /**
- * Sends a groupchat msg message
- * @private
- * @param {string} xid
- * @param {string} hash
- * @param {string} e_1
- * @param {string} e_2
- * @param {object} message_packet
- * @return {undefined}
- */
- self._sendGroupchatMsg = function(xid, hash, e_1, e_2, message_packet) {
-
- try {
- var msg_nick = e_1;
- var msg_body = e_2;
- var nick_xid = Utils.getMUCUserXID(xid, msg_nick);
-
- // We check if the user exists
- if(!nick_xid) {
- Board.openThisInfo(6);
- } else if(msg_body) {
- message_packet.setType('chat');
- message_packet.setTo(nick_xid);
- self.generate(message_packet, msg_body, hash);
-
- con.send(message_packet, Errors.handleReply);
- }
- } catch(e) {
- Console.error('Message._sendGroupchatMsg', e);
- }
-
- };
-
-
- /**
- * Sends a groupchat XXX message
- * @private
- * @param {string} xid
- * @param {string} hash
- * @param {string} body
- * @param {object} message_packet
- * @return {undefined}
- */
- self._sendGroupchatTopic = function(xid, hash, body, message_packet) {
-
- try {
- var topic = body.replace(/^\/topic (.+)/, '$1');
-
- message_packet.setType('groupchat');
- message_packet.setSubject(topic);
-
- con.send(message_packet, Errors.handleMessage);
-
- // Reset chatstate
- ChatState.send('active', xid, hash);
- } catch(e) {
- Console.error('Message._sendGroupchatTopic', e);
- }
-
- };
-
-
- /**
- * Sends a groupchat XXX message
- * @private
- * @param {string} xid
- * @param {string} hash
- * @param {string} body
- * @param {string} e_1
- * @param {string} e_2
- * @return {undefined}
- */
- self._sendGroupchatBan = function(xid, hash, body, e_1, e_2) {
-
- try {
- var ban_nick = $.trim(e_1);
- var ban_reason = '';
-
- // We check if the user exists, if not it may be because a reason is given
- // we do not check it at first because the nickname could contain ':'
- var ban_xid = Utils.getMUCUserRealXID(xid, ban_nick);
-
- if(!ban_xid && (body.match(/^\/ban ([^:]+)[:]*(.*)/))) {
- ban_reason = $.trim(e_1);
- ban_nick = $.trim(e_2);
-
- if(ban_nick.length === 0) {
- ban_nick = ban_reason;
- ban_reason = '';
- }
-
- ban_xid = Utils.getMUCUserXID(xid, ban_nick);
- }
-
- Groupchat.banUser(xid, ban_xid, ban_reason);
-
- // Reset chatstate
- ChatState.send('active', xid, hash);
- } catch(e) {
- Console.error('Message._sendGroupchatBan', e);
- }
-
- };
-
-
- /**
- * Sends a groupchat XXX message
- * @private
- * @param {string} xid
- * @param {string} hash
- * @param {string} body
- * @param {string} e_1
- * @param {string} e_2
- * @return {undefined}
- */
- self._sendGroupchatKick = function(xid, hash, body, e_1, e_2) {
-
- try {
- var kick_nick = $.trim(e_1);
- var kick_reason = '';
-
- // We check if the user exists, if not it may be because a reason is given
- // we do not check it at first because the nickname could contain ':'
- var kick_xid = Utils.getMUCUserRealXID(xid, kick_nick);
-
- if(!kick_xid && (body.match(/^\/kick ([^:]+)[:]*(.*)/))) {
- kick_reason = $.trim(e_1);
- kick_nick = $.trim(e_2);
-
- if(kick_nick.length === 0) {
- kick_nick = kick_reason;
- kick_reason = '';
- }
-
- kick_xid = Utils.getMUCUserXID(xid, kick_nick);
- }
-
- Groupchat.kickUser(xid, kick_xid, kick_nick, kick_reason);
-
- // Reset chatstate
- ChatState.send('active', xid, hash);
- } catch(e) {
- Console.error('Message._sendGroupchatKick', e);
- }
-
- };
-
-
- /**
- * Sends a groupchat XXX message
- * @private
- * @param {string} xid
- * @param {string} hash
- * @param {string} e_1
- * @param {string} e_2
- * @param {object} message_packet
- * @return {undefined}
- */
- self._sendGroupchatInvite = function(xid, hash, e_1, e_2, message_packet) {
-
- try {
- var i_xid = e_1;
- var invite_reason = e_2;
-
- var x = message_packet.appendNode('x', {
- 'xmlns': NS_MUC_USER
- });
-
- var node = x.appendChild(message_packet.buildNode('invite', {
- 'to': i_xid,
- 'xmlns': NS_MUC_USER
- }));
-
- if(invite_reason) {
- node.appendChild(message_packet.buildNode('reason', {
- 'xmlns': NS_MUC_USER
- }, invite_reason));
- }
-
- con.send(message_packet, Errors.handleReply);
-
- // Reset chatstate
- ChatState.send('active', xid, hash);
- } catch(e) {
- Console.error('Message._sendGroupchatInvite', e);
- }
-
- };
-
-
- /**
- * Sends a groupchat XXX message
- * @private
- * @param {string} xid
- * @param {string} hash
- * @param {string} type
- * @param {string} body
- * @param {object} message_packet
- * @return {undefined}
- */
- self._sendGroupchatMessage = function(xid, hash, type, body, message_packet) {
-
- try {
- message_packet.setType('groupchat');
-
- // Chatstate
- message_packet.appendNode('active', {
- 'xmlns': NS_CHATSTATES
- });
-
- self.generate(message_packet, body, hash);
-
- con.send(message_packet, Errors.handleMessage);
-
- Console.info('Message sent to: ' + xid + ' / ' + type);
- } catch(e) {
- Console.error('Message._sendGroupchatMessage', e);
- }
-
- };
-
-
- /**
- * Sends a groupchat message
- * @private
- * @param {string} xid
- * @param {string} hash
- * @param {string} type
- * @param {string} body
- * @param {object} message_packet
- * @return {undefined}
- */
- self._sendGroupchat = function(xid, hash, type, body, message_packet) {
-
- try {
- // /say shortcut
- if(body.match(/^\/say (.+)/)) {
- self._sendGroupchatSat(
- hash,
- body,
- message_packet
- );
- }
-
- // /nick shortcut
- else if(body.match(/^\/nick (.+)/)) {
- self._sendGroupchatNick(
- xid,
- hash,
- RegExp.$1,
- body
- );
- }
-
- // /msg shortcut
- else if(body.match(/^\/msg (\S+)\s+(.+)/)) {
- self._sendGroupchatMsg(
- xid,
- hash,
- RegExp.$1,
- RegExp.$2,
- message_packet
- );
- }
-
- // /topic shortcut
- else if(body.match(/^\/topic (.+)/)) {
- self._sendGroupchatTopic(
- xid,
- hash,
- body,
- message_packet
- );
- }
-
- // /ban shortcut
- else if(body.match(/^\/ban (.*)/)) {
- self._sendGroupchatBan(
- xid,
- hash,
- body,
- RegExp.$1,
- RegExp.$2
- );
- }
-
- // /kick shortcut
- else if(body.match(/^\/kick (.*)/)) {
- self._sendGroupchatKick(
- xid,
- hash,
- body,
- RegExp.$1,
- RegExp.$2
- );
- }
-
- // /invite shortcut
- else if(body.match(/^\/invite (\S+)\s*(.*)/)) {
- self._sendGroupchatInvite(
- xid,
- hash,
- RegExp.$1,
- RegExp.$2,
- message_packet
- );
- }
-
- // No shortcut, this is a message
- else {
- self._sendGroupchatMessage(
- xid,
- hash,
- type,
- body,
- message_packet
- );
- }
- } catch(e) {
- Console.error('Message._sendGroupchat', e);
- }
-
- };
-
-
- /**
- * Handles the incoming message packets
- * @public
- * @param {object} message
- * @return {boolean}
- */
- self.handle = function(message) {
-
- try {
- // Error packet? Stop!
- if(Errors.handleReply(message)) {
- return;
- }
-
- // Carbon-forwarded message?
- if(message.getChild('sent', NS_URN_CARBONS)) {
- Carbons.handleSent(message); return;
- }
- if(message.getChild('received', NS_URN_CARBONS)) {
- Carbons.handleReceived(message); return;
- }
-
- // MAM-forwarded message?
- var c_mam = message.getChild('result', NS_URN_MAM);
-
- if(c_mam) {
- return self._handleMAM(c_mam);
- }
-
- // We get the message items
- var from = Common.fullXID(Common.getStanzaFrom(message));
- var id = message.getID();
- var type = message.getType();
- var body = $.trim(message.getBody());
- var node = message.getNode();
- var subject = $.trim(message.getSubject());
-
- // Keep raw message body
- var raw_body = body;
-
- // We generate some values
- var xid = Common.bareXID(from);
- var resource = Common.thisResource(from);
- var hash = hex_md5(xid);
- var xHTML_sel = $(node).find('html body');
- var xHTML = xHTML_sel.size();
- var is_groupchat_user = false;
-
- // Check for non-empty body
- var has_body = (((xHTML && Filter.has_xhtml_body(xHTML_sel)) || body) && true);
-
- // This message comes from a Muji room (ignore)
- if(Muji.is_room(xid)) {
- return false;
- }
-
- // This message comes from a groupchat user
- if(Utils.isPrivate(xid) && ((type == 'chat') || !type) && resource) {
- is_groupchat_user = true;
- xid = from;
- hash = hex_md5(xid);
- }
-
- // Get message date
- var time, stamp;
- var delay = DateUtils.readMessageDelay(node);
-
- // Any delay?
- if(delay) {
- time = DateUtils.relative(delay);
- stamp = DateUtils.extractStamp(Date.jab2date(delay));
- } else {
- time = DateUtils.getCompleteTime();
- stamp = DateUtils.extractStamp(new Date());
- }
-
- // Received message
- if(Receipts.hasReceived(message)) {
- return Receipts.messageReceived(hash, id);
- }
-
- // Chatstate message
- if(node && !delay &&
- ((((type == 'chat') || !type) && !Common.exists('#page-switch .' + hash + ' .unavailable')) || (type == 'groupchat'))) {
- self._handleChatstate(from, hash, type, node);
- }
-
- // Jappix App message
- if(message.getChild('app', 'jappix:app')) {
- if(self._handleJappixApp(xid, body, node) === true) {
- return false;
- }
- }
-
- // Invite message
- if($(node).find('x[xmlns="' + NS_MUC_USER + '"] invite').size()) {
- return self._handleInvite(body, node);
- }
-
- // Request message
- if(message.getChild('confirm', NS_HTTP_AUTH)) {
- return self._handleRequest(xid, message, body);
- }
-
- // OOB message
- if(message.getChild('x', NS_XOOB)) {
- return self._handleOOB(from, xid, id, node);
- }
-
- // Roster Item Exchange message
- if(message.getChild('x', NS_ROSTERX)) {
- return self._handleRosterItemExchange(xid, message, body);
- }
-
- // Attention message
- if(message.getChild('attention', NS_URN_ATTENTION)) {
- return self._handleAttention(xid, body);
- }
-
- // Normal message
- if((type == 'normal') && body) {
- return self._handleNormal(xid, subject, body, delay);
- }
-
- // PubSub event
- if($(node).find('event').attr('xmlns') == NS_PUBSUB_EVENT) {
- return self._handlePubsub(xid, hash, message, node);
- }
-
- // If this is a room topic message
- if(subject && (type == 'groupchat')) {
- self._handleRoomTopic(type, from, hash, subject, resource, time, stamp);
- }
-
- // If the message has a content
- if(has_body === true) {
- var filteredMessage;
- var html_escape = true;
-
- // IE bug fix
- if((BrowserDetect.browser == 'Explorer') && (BrowserDetect.version < 9)) {
- xHTML = 0;
- }
-
- // If this is a xHTML message
- if(xHTML) {
- html_escape = false;
-
- // Filter the xHTML message
- body = Filter.xhtml(node);
- }
-
- // Catch message edit (XEP-0308)
- var message_edit = Correction.catch(message, hash, type);
-
- // Storable message?
- var is_storable = message.getChild('no-permanent-storage', NS_URN_HINTS) ? false : true;
-
- // Groupchat message
- if(type == 'groupchat') {
- self._handleGroupchat(
- from,
- hash,
- type,
- resource,
- id,
- body,
- raw_body,
- time,
- stamp,
- html_escape,
- delay,
- message_edit,
- is_storable
- );
- } else {
- // Markable message?
- var is_markable = Markers.hasRequestMarker(node);
-
- self._handleChat(
- from,
- xid,
- hash,
- type,
- resource,
- id,
- body,
- raw_body,
- time,
- stamp,
- html_escape,
- message_edit,
- is_storable,
- is_markable,
- is_groupchat_user,
- message
- );
- }
- }
-
- // Message marker?
- if(Markers.hasResponseMarker(node)) {
- return Markers.handle(from, node, false, is_groupchat_user);
- }
-
- return false;
- } catch(e) {
- Console.error('Message.handle', e);
- }
-
- };
-
-
- /**
- * Sends a given message
- * @public
- * @param {string} hash
- * @param {string} type
- * @return {boolean}
- */
- self.send = function(hash, type) {
-
- try {
- // Get the values
- var message_area = $('#' + hash + ' .message-area');
- var body = $.trim(message_area.val());
- var xid = unescape(message_area.attr('data-to'));
- var nXID;
-
- // If the user didn't entered any message, stop
- if(!body || !xid) {
- return false;
- }
-
- // We send the message through the XMPP network
- var message_packet = new JSJaCMessage();
- message_packet.setTo(xid);
-
- // Set an ID
- var id = genID();
- message_packet.setID(id);
-
- // /help shortcut
- if(body.match(/^\/help\s*(.*)/)) {
- self._sendHelp(type, xid, hash);
- }
-
- // /clear shortcut
- else if(body.match(/^\/clear/)) {
- self._sendClear(xid, hash);
- }
-
- // /join shortcut
- else if(body.match(/^\/join (\S+)\s*(.*)/)) {
- self._sendJoin(xid, hash, RegExp.$1, RegExp.$2);
- }
-
- // /part shortcut
- else if(body.match(/^\/part\s*(.*)/) &&
- (!Utils.isAnonymous() || (Utils.isAnonymous() &&
- (xid != Common.generateXID(ANONYMOUS_ROOM, 'groupchat'))))) {
- self._sendPart(xid, type);
- }
-
- // /whois shortcut
- else if(body.match(/^\/whois(( (\S+))|($))/)) {
- self._sendWHOIS(type, xid, hash, RegExp.$3);
- }
-
- // /attention shortcut
- else if(body.match(/^\/attention( (.*))?/) && type == 'chat') {
- self._sendAttention(xid, RegExp.$2);
- }
-
- // Chat message type
- else if(type == 'chat') {
- self._sendChat(
- xid,
- hash,
- id,
- body,
- message_packet
- );
- }
-
- // Groupchat message type
- else if(type == 'groupchat') {
- self._sendGroupchat(
- xid,
- hash,
- type,
- body,
- message_packet
- );
- }
-
- // We reset the message input
- $('#' + hash + ' .message-area').val('');
- } catch(e) {
- Console.error('Message.send', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Generates the correct message area style
- * @public
- * @param {string} hash
- * @return {string}
- */
- self.generateStyle = function() {
-
- try {
- // Initialize the vars
- var styles = '#' + hash + ' div.bubble-style';
- var font = styles + ' a.font-current';
- var fontsize = styles + ' a.fontsize-current';
- var checkbox = styles + ' input[type="checkbox"]';
- var color = '#' + hash + ' .message-area[data-color]';
- var style = '';
-
- // Get the font value
- $(font).filter('[data-font]').each(function() {
- style += 'font-family: ' + $(this).attr('data-font') + ';';
- });
-
- // Get the font value
- $(fontsize).filter('[data-value]').each(function() {
- style += 'font-size: ' + $(this).attr('data-value') + 'px;';
- });
-
- // Loop the input values
- $(checkbox).filter(':checked').each(function() {
- // If there is a previous element
- if(style) {
- style += ' ';
- }
-
- // Get the current style
- switch($(this).attr('class')) {
- case 'bold':
- style += 'font-weight: bold;';
- break;
-
- case 'italic':
- style += 'font-style: italic;';
- break;
-
- case 'underline':
- style += 'text-decoration: underline;';
- break;
- }
- });
-
- // Get the color value
- $(color).each(function() {
- style += 'color: #' + $(this).attr('data-color');
- });
-
- return style;
- } catch(e) {
- Console.error('Message.generateStyle', e);
- }
-
- };
-
-
- /**
- * Read messages from local archive
- * @public
- * @param {string} hash
- * @return {string}
- */
- self.readLocalArchive = function(hash) {
-
- try {
- return DataStore.getPersistent(Common.getXID(), 'history', hash);
- } catch(e) {
- Console.error('Message.readLocalArchive', e);
- }
-
- };
-
-
- /**
- * Stores message in local archive
- * @public
- * @param {string} hash
- * @param {string} store_html
- * @return {undefined}
- */
- self.storeLocalArchive = function(hash, store_html) {
-
- try {
- if(DataStore.getDB(Connection.desktop_hash, 'options', 'localarchives') != '0') {
- DataStore.setPersistent(Common.getXID(), 'history', hash, store_html);
- }
- } catch(e) {
- Console.error('Message.storeLocalArchive', e);
- }
-
- };
-
-
- /**
- * Removes messages from local archive
- * @public
- * @param {string} hash
- * @return {undefined}
- */
- self.removeLocalArchive = function(hash) {
-
- try {
- DataStore.removePersistent(Common.getXID(), 'history', hash);
- } catch(e) {
- Console.error('Message.removeLocalArchive', e);
- }
-
- };
-
-
- /**
- * Flushes local messages archive
- * @public
- * @return {undefined}
- */
- self.flushLocalArchive = function() {
-
- try {
- var flush_count = 0;
- var db_regex = new RegExp(('^' + Common.getXID() + '_') + ('history_'));
-
- for(var i = 0; i < JappixDataStore.storagePersistent.length; i++) {
- var db_current = JappixDataStore.storagePersistent.key(i);
-
- if(db_regex.exec(db_current)) {
- JappixDataStore.storagePersistent.removeItem(db_current);
- flush_count++;
- }
- }
-
- Console.info('Flushed ' + flush_count + ' archives in total.');
- } catch(e) {
- Console.error('Message.flushLocalArchive', e);
- }
-
- };
-
-
- /**
- * Generates the correct message code
- * @public
- * @param {object} message_packet
- * @param {string} body
- * @param {string} hash
- * @return {string}
- */
- self.generate = function(message_packet, body, hash) {
-
- try {
- // Create the classical body
- message_packet.setBody(body);
-
- // Get the style
- var style = $('#' + hash + ' .message-area').attr('style');
-
- // A message style is choosen
- if(style) {
- // Explode the message body new lines (to create one <p /> element by line)
- var new_lines = new Array(body);
-
- if(body.match(/\n/)) {
- new_lines = body.split('\n');
- }
-
- // Create the XML elements
- var html_node = message_packet.appendNode('html', {
- 'xmlns': NS_XHTML_IM
- });
-
- var body_node = html_node.appendChild(message_packet.buildNode('body', {
- 'xmlns': NS_XHTML
- }));
-
- // Use the exploded body array to create one element per entry
- for(var i in new_lines) {
- // Current line
- var cLine = new_lines[i];
-
- // Blank line, we put a <br />
- if(cLine.match(/(^)(\s+)($)/) || !cLine) {
- body_node.appendChild(message_packet.buildNode('br', {'xmlns': NS_XHTML}));
- }
-
- // Line with content, we put a <p />
- else {
- // HTML encode the line
- cLine = cLine.htmlEnc();
-
- // Filter the links
- cLine = Links.apply(cLine, 'xhtml-im', style);
-
- // Append the filtered line
- $(body_node).append($('<p style="' + style + '">' + cLine + '</p>'));
- }
- }
-
- return 'XHTML';
- }
-
- return 'PLAIN';
- } catch(e) {
- Console.error('Message.generate', e);
- }
-
- };
-
-
- /**
- * Displays a given message in a chat tab
- * @public
- * @param {string} type
- * @param {string} xid
- * @param {string} hash
- * @param {string} name
- * @param {string} body
- * @param {string} time
- * @param {string} stamp
- * @param {string} message_type
- * @param {boolean} html_escape
- * @param {string} nick_quote
- * @param {string} mode
- * @param {string} id
- * @param {object} c_target_sel
- * @param {boolean} no_scroll
- * @param {boolean} is_edited
- * @param {number} edit_count
- * @param {boolean} is_storable
- * @param {boolean} is_markable
- * @return {object}
- */
- self.display = function(type, xid, hash, name, body, time, stamp, message_type, html_escape, nick_quote, mode, id, c_target_sel, no_scroll, is_edited, edit_count, is_storable, is_markable) {
-
- var message_sel = null;
-
- try {
- // Target
- if(typeof c_target_sel === 'undefined') {
- c_target_sel = $('#' + hash + ' .content');
- }
-
- // Auto-calculate mode for groupchat?
- if(type == 'groupchat' && !mode) {
- var own_groupchat_nickname = $('#' + hash).attr('data-nick') || '';
- own_groupchat_nickname = unescape(own_groupchat_nickname);
-
- if(name == own_groupchat_nickname) {
- mode = 'me';
- } else {
- mode = 'him';
- }
- }
-
- // Generate some stuffs
- var has_avatar = false;
- var xid_hash = '';
-
- if(!nick_quote) {
- nick_quote = '';
- }
-
- if(message_type != 'system-message') {
- has_avatar = true;
- xid_hash = hex_md5(xid);
- }
-
- // Can scroll?
- var cont_scroll = document.getElementById('chat-content-' + hash);
- var can_scroll = false;
-
- if((!cont_scroll.scrollTop || ((cont_scroll.clientHeight + cont_scroll.scrollTop) == cont_scroll.scrollHeight)) && no_scroll !== true) {
- can_scroll = true;
- }
-
- // Any ID?
- var data_id = '';
-
- if(id) {
- data_id = ' data-id="' + id + '"';
- }
-
- // Edited state?
- var data_edited = '';
- var data_edit_count = '';
-
- if(is_edited === true) {
- data_edited = ' data-edited="true"';
- data_edit_count = ' data-edit-count="' + (edit_count || 0) + '"';
- }
-
- // Markable state?
- var data_markable = (is_markable === true) ? ' data-markable="true"' : '';
-
- // Filter the message
- var filteredMessage = Filter.message(body, name, html_escape);
-
- // Display the received message in the room
- var message_code = '<div class="one-line ' + message_type + nick_quote + '" data-stamp="' + stamp + '" data-mode="' + mode + '"' + data_id + data_edited + data_markable + data_edit_count + '><div class="message-content">';
-
- // Name color attribute
- if(type == 'groupchat') {
- attribute = ' style="color: ' + Common.generateColor(name) + ';" class="name';
- } else {
- attribute = ' class="name';
-
- if(mode) {
- attribute += ' ' + mode;
- }
- }
-
- // Close the class attribute
- if(message_type == 'system-message') {
- attribute += ' hidden"';
- } else {
- attribute += '"';
- }
-
- // Filter the previous displayed message
- var last = c_target_sel.find('.one-group:not(.from-history):last');
- var last_name = last.find('b.name').attr('data-xid');
- var last_type = last.attr('data-type');
- var last_stamp = parseInt(last.attr('data-stamp'));
- var grouped = false;
-
- // We can group it with another previous message
- if((last_name == xid) && (message_type == last_type) && ((stamp - last_stamp) <= 1800)) {
- grouped = true;
- }
-
- // Is it a /me command?
- if(body.match(/(^|>)(\/me )([^<]+)/)) {
- filteredMessage = '<i>' + filteredMessage + '</i>';
- }
-
- message_code += filteredMessage + '</div>';
-
- // Message correction containers
- if(message_type == 'user-message') {
- // Message edit properties
- message_code += '<a class="correction-edit" href="#">' + Common._e("Edit") + '</a>';
-
- if(is_edited === true) {
- var edit_text = Common._e("Edited");
-
- if(edit_count > 1) {
- edit_text = Common._e(Common.printf("Edited (%s)", edit_count));
- }
-
- message_code += '<span class="corrected-info">' + edit_text + '</span>';
- }
- }
-
- // Message marker container
- if(type == 'chat') {
- message_code += '<span class="message-marker"></span>';
- }
-
- message_code += '</div>';
-
- // Must group it?
- if(!grouped) {
- // Generate message headers
- var message_head = '';
-
- // Any avatar to add?
- if(has_avatar) {
- message_head += '<div class="avatar-container"><img class="avatar" src="' + './images/others/default-avatar.png' + '" alt="" /></div>';
- }
-
- // Add the date & the name
- message_head += '<span class="date">' + time + '</span><b data-xid="' + Common.encodeQuotes(xid) + '" ' + attribute + '>' + name + '</b>';
-
- // Generate message code
- message_code = '<div class="one-group ' + xid_hash + '" data-type="' + message_type + '" data-stamp="' + stamp + '">' + message_head + message_code + '</div>';
- }
-
- // Write the code in the DOM
- if(grouped) {
- c_target_sel.find('.one-group:last').append(message_code);
- } else {
- c_target_sel.append(message_code);
- }
-
- message_sel = c_target_sel.find('.one-line:last');
-
- // Store the last MAM.REQ_MAX message groups
- if(!Features.enabledMAM() && (type == 'chat') && (message_type == 'user-message')) {
- // Filter the DOM
- var dom_filter = $('#' + hash + ' .content').clone().contents();
- var default_avatar = ('./images/others/default-avatar.png').replace(/&amp;/g, '&'); // Fixes #252
-
- $(dom_filter).find('.system-message').parent().remove();
- $(dom_filter).find('.avatar-container img.avatar').attr('src', default_avatar);
- $(dom_filter).find('.one-line').parent().slice(0, $(dom_filter).find('.one-line').parent().size() - MAM.REQ_MAX).remove();
-
- var store_html = $(dom_filter).parent().html();
-
- // Store the data
- if(store_html && is_storable !== false) {
- self.storeLocalArchive(hash, store_html);
- }
-
- if(is_storable === false) {
- Console.info('Message.display', 'Won\'t store message since it\'s labeled as not storable (' + xid + ')');
- }
- }
-
- // Must get the avatar?
- if(has_avatar && xid && !grouped) {
- Avatar.get(xid, 'cache', 'true', 'forget');
- }
-
- // Scroll to this message
- if(can_scroll) {
- Interface.autoScroll(hash);
- }
-
- // Add click events
- var xid_to = $('#' + hash).attr('data-xid');
-
- if(xid_to) {
- xid_to = unescape(xid_to);
-
- $('#' + hash + ' .content .one-line:last .correction-edit').click(function() {
- Correction.enter(xid_to);
- return false;
- });
- }
- } catch(e) {
- Console.error('Message.display', e);
- } finally {
- return message_sel;
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
diff --git a/app/javascripts/microblog.js b/app/javascripts/microblog.js
deleted file mode 100644
index 192b12ab..00000000
--- a/app/javascripts/microblog.js
+++ /dev/null
@@ -1,1967 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the microblog JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Authors: Valérian Saliou, Maranda
-
-*/
-
-// Bundle
-var Microblog = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Completes arrays of an entry's attached files
- * @public
- * @param {string} selector
- * @param {object} tFName
- * @param {object} tFURL
- * @param {object} tFThumb
- * @param {object} tFSource
- * @param {object} tFLength
- * @param {object} tFEComments
- * @param {object} tFNComments
- * @return {undefined}
- */
- self.attached = function(selector, tFName, tFURL, tFThumb, tFSource, tFType, tFLength, tFEComments, tFNComments) {
-
- try {
- tFName.push($(selector).attr('title') || '');
- tFURL.push($(selector).attr('href') || '');
- tFThumb.push($(selector).find('link[rel="self"][title="thumb"]:first').attr('href') || '');
- tFSource.push($(selector).attr('source') || '');
- tFType.push($(selector).attr('type') || '');
- tFLength.push($(selector).attr('length') || '');
-
- // Comments?
- var comments_href_c = $(selector).find('link[rel="replies"][title="comments_file"]:first').attr('href');
-
- if(comments_href_c && comments_href_c.match(/^xmpp:(.+)\?;node=(.+)/)) {
- tFEComments.push(RegExp.$1);
- tFNComments.push(decodeURIComponent(RegExp.$2));
- } else {
- tFEComments.push('');
- tFNComments.push('');
- }
- } catch(e) {
- Console.error('Microblog.attached', e);
- }
-
- };
-
-
- /**
- * Displays a given microblog item
- * @public
- * @param {object} packet
- * @param {string} from
- * @param {string} hash
- * @param {string} mode
- * @param {string} way
- * @return {undefined}
- */
- self.display = function(packet, from, hash, mode, way) {
-
- try {
- // Get some values
- var iParse = $(packet.getNode()).find('items item');
-
- iParse.each(function() {
- var this_sel = $(this);
-
- // Initialize
- var tContent, tFiltered, tTime, tDate, tStamp, tBody, tName, tID, tHash, tIndividual, tFEClick;
- var tHTMLEscape = false;
-
- // Arrays
- var tFName = [];
- var tFURL = [];
- var tFThumb = [];
- var tFSource = [];
- var tFType = [];
- var tFLength = [];
- var tFEComments = [];
- var tFNComments = [];
- var aFURL = [];
- var aFCat = [];
-
- // Get the values
- tDate = this_sel.find('published').text();
- tBody = this_sel.find('body').text();
- tID = this_sel.attr('id');
- tName = Name.getBuddy(from);
- tHash = 'update-' + hex_md5(tName + tDate + tID);
-
- // Read attached files with a thumb (place them at first)
- this_sel.find('link[rel="enclosure"]:has(link[rel="self"][title="thumb"])').each(function() {
- self.attached(this, tFName, tFURL, tFThumb, tFSource, tFType, tFLength, tFEComments, tFNComments);
- });
-
- // Read attached files without any thumb
- this_sel.find('link[rel="enclosure"]:not(:has(link[rel="self"][title="thumb"]))').each(function() {
- self.attached(this, tFName, tFURL, tFThumb, tFSource, tFType, tFLength, tFEComments, tFNComments);
- });
-
- // Get the repeat value
- var uRepeat = [this_sel.find('author name').text(), Common.explodeThis(':', this_sel.find('author uri').text(), 1)];
- var uRepeated = false;
-
- if(!uRepeat[0])
- uRepeat = [Name.getBuddy(from), uRepeat[1]];
- if(!uRepeat[1])
- uRepeat = [uRepeat[0], from];
-
- // Repeated?
- if(uRepeat[1] != from)
- uRepeated = true;
-
- // Get the comments node
- var entityComments, nodeComments;
-
- // Get the comments
- var comments_href = this_sel.find('link[title="comments"]:first').attr('href');
-
- if(comments_href && comments_href.match(/^xmpp:(.+)\?;node=(.+)/)) {
- entityComments = RegExp.$1;
- nodeComments = decodeURIComponent(RegExp.$2);
- }
-
- // No comments node?
- if(!entityComments || !nodeComments) {
- entityComments = '';
- nodeComments = '';
- }
-
- // Get the stamp & time
- if(tDate) {
- tStamp = DateUtils.extractStamp(Date.jab2date(tDate));
- tTime = DateUtils.relative(tDate);
- }
-
- else {
- tStamp = DateUtils.getTimeStamp();
- tTime = '';
- }
-
- // Get the item geoloc
- var tGeoloc = '';
- var sGeoloc = this_sel.find('geoloc:first');
- var gLat = sGeoloc.find('lat').text();
- var gLon = sGeoloc.find('lon').text();
-
- if(gLat && gLon) {
- tGeoloc += '<a class="geoloc talk-images" href="http://maps.google.com/?q=' + Common.encodeQuotes(gLat) + ',' + Common.encodeQuotes(gLon) + '" target="_blank">';
-
- // Human-readable name?
- var gHuman = PEP.humanPosition(
- sGeoloc.find('locality').text(),
- sGeoloc.find('region').text(),
- sGeoloc.find('country').text()
- );
-
- if(gHuman) {
- tGeoloc += gHuman.htmlEnc();
- } else {
- tGeoloc += gLat.htmlEnc() + '; ' + gLon.htmlEnc();
- }
-
- tGeoloc += '</a>';
- }
-
- // Entry content: HTML, parse!
- if(this_sel.find('content[type="html"]').size()) {
- // Filter the xHTML message
- tContent = Filter.xhtml(this);
- tHTMLEscape = false;
- }
-
- // Entry content: Fallback on PLAIN?
- if(!tContent) {
- tContent = this_sel.find('content[type="text"]').text();
-
- if(!tContent) {
- // Legacy?
- tContent = this_sel.find('title:not(source > title)').text();
-
- // Last chance?
- if(!tContent) {
- tContent = tBody;
- }
- }
-
- // Trim the content
- tContent = $.trim(tContent);
- tHTMLEscape = true;
- }
-
- // Any content?
- if(tContent) {
- // Apply links to message body
- tFiltered = Filter.message(tContent, tName.htmlEnc(), tHTMLEscape);
-
- // Display the received message
- var html = '<div class="one-update update_' + hash + ' ' + tHash + '" data-stamp="' + Common.encodeQuotes(tStamp) + '" data-id="' + Common.encodeQuotes(tID) + '" data-xid="' + Common.encodeQuotes(from) + '">' +
- '<div class="' + hash + '">' +
- '<div class="avatar-container">' +
- '<img class="avatar" src="' + './images/others/default-avatar.png' + '" alt="" />' +
- '</div>' +
- '</div>' +
-
- '<div class="body">' +
- '<p>';
-
- // Is it a repeat?
- if(uRepeated)
- html += '<a href="#" class="repeat talk-images" title="' + Common.encodeQuotes(Common.printf(Common._e("This is a repeat from %s"), uRepeat[0] + ' (' + uRepeat[1] + ')')) + '" onclick="return Chat.checkCreate(\'' + Utils.encodeOnclick(uRepeat[1]) + '\', \'chat\');" data-xid="' + Common.encodeQuotes(uRepeat[1]) + '"></a>';
-
- html += '<b title="' + from + '" class="name">' + tName.htmlEnc() + '</b> <span>' + tFiltered + '</span></p>' +
- '<p class="infos">' + tTime + tGeoloc + '</p>';
-
- // Any file to display?
- if(tFURL.length)
- html += '<p class="file">';
-
- // Generate an array of the files URL
- for(var a = 0; a < tFURL.length; a++) {
- // Not enough data?
- if(!tFURL[a]) {
- continue;
- }
-
- // Push the current URL! (YouTube or file)
- if(tFURL[a].match(/(\w{3,5})(:)(\S+)((\.youtube\.com\/watch(\?v|\?\S+v|\#\!v|\#\!\S+v)\=)|(youtu\.be\/))([^& ]+)((&amp;\S)|(&\S)|\s|$)/gim)) {
- aFURL.push($.trim(RegExp.$8));
- aFCat.push('youtube');
- }
-
- else if(IntegrateBox.can(Common.strAfterLast('.', tFURL[a]))) {
- aFURL.push(tFURL[a]);
- aFCat.push(Utils.fileCategory(Common.strAfterLast('.', tFURL[a])));
- }
- }
-
- // Add each file code
- for(var f = 0; f < tFURL.length; f++) {
- // Not enough data?
- if(!tFURL[f]) {
- continue;
- }
-
- // Get the file type
- var tFLink = tFURL[f];
- var tFExt = Common.strAfterLast('.', tFLink);
- var tFCat = Utils.fileCategory(tFExt);
-
- // Youtube video?
- if(tFLink.match(/(\w{3,5})(:)(\S+)((\.youtube\.com\/watch(\?v|\?\S+v|\#\!v|\#\!\S+v)\=)|(youtu\.be\/))([^& ]+)((&amp;\S)|(&\S)|\s|$)/gim)) {
- tFLink = $.trim(RegExp.$8);
- tFCat = 'youtube';
- }
-
- // Supported image/video/sound
- if(IntegrateBox.can(tFExt) || (tFCat == 'youtube')) {
- tFEClick = 'onclick="return IntegrateBox.apply(\'' + Utils.encodeOnclick(tFLink) + '\', \'' + Utils.encodeOnclick(tFCat) + '\', \'' + Utils.encodeOnclick(aFURL) + '\', \'' + Utils.encodeOnclick(aFCat) + '\', \'' + Utils.encodeOnclick(tFEComments) + '\', \'' + Utils.encodeOnclick(tFNComments) + '\', \'large\');" ';
- } else {
- tFEClick = '';
- }
-
- // Any thumbnail?
- if(tFThumb[f]) {
- html += '<a class="thumb" ' + tFEClick + 'href="' + Common.encodeQuotes(tFURL[f]) + '" target="_blank" title="' + Common.encodeQuotes(tFName[f]) + '" data-node="' + Common.encodeQuotes(tFNComments[f]) + '"><img src="' + Common.encodeQuotes(tFThumb[f]) + '" alt="" /></a>';
- } else {
- html += '<a class="' + Common.encodeQuotes(tFCat) + ' link talk-images" ' + tFEClick + 'href="' + Common.encodeQuotes(tFURL[f]) + '" target="_blank" data-node="' + Common.encodeQuotes(tFNComments[f]) + '">' + tFName[f].htmlEnc() + '</a>';
- }
- }
-
- if(tFURL.length) {
- html += '</p>';
- }
-
- // It's my own notice, we can remove it!
- if(from == Common.getXID()) {
- html += '<a href="#" onclick="return Microblog.remove(\'' + Utils.encodeOnclick(tID) + '\', \'' + Utils.encodeOnclick(tHash) + '\', \'' + Utils.encodeOnclick(entityComments) + '\', \'' + Utils.encodeOnclick(nodeComments) + '\');" title="' + Common._e("Remove this notice") + '" class="mbtool remove talk-images"></a>';
- }
-
- // Notice from another user
- else {
- // User profile
- html += '<a href="#" title="' + Common._e("View profile") + '" class="mbtool profile talk-images" onclick="return UserInfos.open(\'' + Utils.encodeOnclick(from) + '\');"></a>';
-
- // If PEP is enabled
- if(Features.enabledPEP() && tHTMLEscape) {
- html += '<a href="#" title="' + Common._e("Repeat this notice") + '" class="mbtool repost talk-images"></a>';
- }
- }
-
- html += '</div><div class="comments-container" data-node="' + Common.encodeQuotes(nodeComments) + '"></div></div>';
-
- // Mixed mode
- if((mode == 'mixed') && !Common.exists('.mixed .' + tHash)) {
- // Remove the old element
- if(way == 'push') {
- $('#channel .content.mixed .one-update.update_' + hash).remove();
- }
-
- // Get the nearest element
- var nearest = Search.sortElementByStamp(tStamp, '#channel .mixed .one-update');
-
- // Append the content at the right position (date relative)
- if(nearest === 0) {
- $('#channel .content.mixed').append(html);
- } else {
- $('#channel .one-update[data-stamp="' + nearest + '"]:first').before(html);
- }
-
- // Show the new item
- if(way == 'push') {
- $('#channel .content.mixed .one-update.' + tHash).fadeIn('fast');
- } else {
- $('#channel .content.mixed .one-update.' + tHash).show();
- }
-
- // Remove the old notices to make the DOM lighter
- var oneUpdate = '#channel .content.mixed .one-update';
-
- if($(oneUpdate).size() > 80) {
- $(oneUpdate + ':last').remove();
- }
-
- // Click event on avatar/name
- $('.mixed .' + tHash + ' .avatar-container, .mixed .' + tHash + ' .body b').click(function() {
- self.get(from, hash);
- });
- }
-
- // Individual mode
- tIndividual = '#channel .content.individual.microblog-' + hash;
-
- // Can append individual content?
- var can_individual = true;
-
- if($('#channel .top.individual input[name="comments"]').val() && Common.exists(tIndividual + ' .one-update')) {
- can_individual = false;
- }
-
- if(can_individual && Common.exists(tIndividual) && !Common.exists('.individual .' + tHash)) {
- if(mode == 'mixed') {
- $(tIndividual).prepend(html);
- } else {
- $(tIndividual + ' a.more').before(html);
- }
-
- // Show the new item
- if(way == 'push') {
- $('#channel .content.individual .one-update.' + tHash).fadeIn('fast');
- } else {
- $('#channel .content.individual .one-update.' + tHash).show();
- }
-
- // Make 'more' link visible
- $(tIndividual + ' a.more').css('visibility', 'visible');
-
- // Click event on name (if not me!)
- if(from != Common.getXID()) {
- $('.individual .' + tHash + ' .avatar-container, .individual .' + tHash + ' .body b').click(function() {
- Chat.checkCreate(from, 'chat');
- });
- }
- }
-
- // Apply the click event
- $('.' + tHash + ' a.repost:not([data-event="true"])').click(function() {
- return self.publish(tContent, tFName, tFURL, tFType, tFLength, tFThumb, uRepeat, entityComments, nodeComments, tFEComments, tFNComments);
- })
-
- .attr('data-event', 'true');
-
- // Apply the hover event
- if(nodeComments) {
- $('.' + mode + ' .' + tHash).hover(function() {
- self.showComments($(this), entityComments, nodeComments, tHash);
- }, function() {
- if($(this).find('div.comments a.one-comment.loading').size()) {
- $(this).find('div.comments').remove();
- }
- });
- }
- }
- });
-
- // Display the avatar of this buddy
- Avatar.get(from, 'cache', 'true', 'forget');
- } catch(e) {
- Console.error('Microblog.display', e);
- }
-
- };
-
-
- /**
- * Removes a given microblog item
- * @public
- * @param {string} id
- * @param {string} hash
- * @param {string} pserver
- * @param {string} cnode
- * @return {boolean}
- */
- self.remove = function(id, hash, pserver, cnode) {
-
- /* REF: http://xmpp.org/extensions/xep-0060.html#publisher-delete */
-
- try {
- // Initialize
- var selector = $('.' + hash);
- var get_last = false;
-
- // Get the latest item for the mixed mode
- if(Common.exists('#channel .content.mixed .' + hash)) {
- get_last = true;
- }
-
- // Remove the item from our DOM
- selector.fadeOut('fast', function() {
- $(this).remove();
- });
-
- // Send the IQ to remove the item (and get eventual error callback)
- // Also attempt to remove the comments node.
- var retract_iq = new JSJaCIQ();
- retract_iq.setType('set');
-
- retract_iq.appendNode('pubsub', {
- 'xmlns': NS_PUBSUB
- }).appendChild(retract_iq.buildNode('retract', {
- 'node': NS_URN_MBLOG,
- 'xmlns': NS_PUBSUB
- })).appendChild(retract_iq.buildNode('item', {
- 'id': id,
- 'xmlns': NS_PUBSUB
- }));
-
- var comm_delete_iq;
- if(pserver !== '' && cnode !== '') {
- comm_delete_iq = new JSJaCIQ();
- comm_delete_iq.setType('set');
- comm_delete_iq.setTo(pserver);
- comm_delete_iq.appendNode('pubsub', {
- 'xmlns': 'http://jabber.org/protocol/pubsub#owner'
- }).appendChild(comm_delete_iq.buildNode('delete', {
- 'node': cnode,
- 'xmlns': 'http://jabber.org/protocol/pubsub#owner'
- }));
- }
-
- if(get_last) {
- if(comm_delete_iq) {
- con.send(comm_delete_iq);
- }
-
- con.send(retract_iq, self.handleRemove);
- } else {
- if(comm_delete_iq) {
- con.send(comm_delete_iq);
- }
-
- con.send(retract_iq, Errors.handleReply);
- }
- } catch(e) {
- Console.error('Microblog.remove', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Handles the microblog item removal
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleRemove = function(iq) {
-
- try {
- // Handle the error reply
- Errors.handleReply(iq);
-
- // Get the latest item
- self.request(Common.getXID(), '1', false, self.handleUpdateRemove);
- } catch(e) {
- Console.error('Microblog.handleRemove', e);
- }
-
- };
-
-
- /**
- * Handles the microblog update
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleUpdateRemove = function(iq) {
-
- try {
- // Error?
- if(iq.getType() == 'error') {
- return;
- }
-
- // Initialize
- var xid = Common.bareXID(Common.getStanzaFrom(iq));
- var hash = hex_md5(xid);
-
- // Display the item!
- self.display(iq, xid, hash, 'mixed', 'push');
- } catch(e) {
- Console.error('Microblog.handleUpdateRemove', e);
- }
-
- };
-
-
- /**
- * Gets a given microblog comments node
- * @public
- * @param {string} server
- * @param {string} node
- * @param {string} id
- * @return {boolean}
- */
- self.getComments = function(server, node, id) {
-
- /* REF: http://xmpp.org/extensions/xep-0060.html#subscriber-retrieve-requestall */
-
- try {
- var iq = new JSJaCIQ();
- iq.setType('get');
- iq.setID('get_' + genID() + '-' + id);
- iq.setTo(server);
-
- var pubsub = iq.appendNode('pubsub', {
- 'xmlns': NS_PUBSUB
- });
-
- pubsub.appendChild(iq.buildNode('items', {
- 'node': node,
- 'xmlns': NS_PUBSUB
- }));
-
- con.send(iq, self.handleComments);
- } catch(e) {
- Console.error('Microblog.getComments', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Handles a microblog comments node items
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleComments = function(iq) {
-
- try {
- // Path
- var id = Common.explodeThis('-', iq.getID(), 1);
- var path = 'div.comments[data-id="' + id + '"] div.comments-content';
-
- // Does not exist?
- if(!Common.exists(path)) {
- return false;
- }
-
- var path_sel = $(path);
-
- // Any error?
- if(Errors.handleReply(iq)) {
- path_sel.html('<div class="one-comment loading">' + Common._e("Could not get the comments!") + '</div>');
-
- return false;
- }
-
- // Initialize
- var data = iq.getNode();
- var server = Common.bareXID(Common.getStanzaFrom(iq));
- var node = $(data).find('items:first').attr('node');
- var users_xid = [];
- var code = '';
-
- // No node?
- if(!node) {
- node = $(data).find('publish:first').attr('node');
- }
-
- // Get the parent microblog item
- var parent_select = $('#channel .one-update:has(*[data-node="' + node + '"])');
- var parent_data = [parent_select.attr('data-xid'), NS_URN_MBLOG, parent_select.attr('data-id')];
-
- // Get the owner XID
- var owner_xid = parent_select.attr('data-xid');
- var repeat_xid = parent_select.find('a.repeat').attr('data-xid');
-
- // Must we create the complete DOM?
- var complete = true;
-
- if(path_sel.find('.one-comment.compose').size()) {
- complete = false;
- }
-
- // Add the comment tool
- if(complete) {
- code += '<div class="one-comment compose">' +
- '<span class="icon talk-images"></span><input type="text" placeholder="' + Common._e("Type your comment here...") + '" />' +
- '</div>';
- }
-
- // Append the comments
- $(data).find('item').each(function() {
- var this_sel = $(this);
-
- // Get comment
- var current_id = this_sel.attr('id');
- var current_xid = Common.explodeThis(':', this_sel.find('author uri').text(), 1);
- var current_name = this_sel.find('author name').text();
- var current_date = this_sel.find('published').text();
- var current_body = this_sel.find('content[type="text"]').text();
- var current_bname = Name.getBuddy(current_xid);
-
- // Legacy?
- if(!current_body) {
- current_body = this_sel.find('title:not(source > title)').text();
- }
-
- // Yet displayed? (continue the loop)
- if(path_sel.find('.one-comment[data-id="' + current_id + '"]').size()) {
- return;
- }
-
- // No XID?
- if(!current_xid) {
- current_xid = '';
-
- if(!current_name) {
- current_name = Common._e("unknown");
- }
- }
-
- else if(!current_name || (current_bname != Common.getXIDNick(current_xid))) {
- current_name = current_bname;
- }
-
- // Any date?
- if(current_date) {
- current_date = DateUtils.relative(current_date);
- } else {
- current_date = DateUtils.getCompleteTime();
- }
-
- // Click event
- var onclick = 'false';
-
- if(current_xid != Common.getXID()) {
- onclick = 'Chat.checkCreate(\'' + Utils.encodeOnclick(current_xid) + '\', \'chat\')';
- }
-
- // If this is my comment, add a marker
- var type = 'him';
- var marker = '';
- var remove = '';
-
- if(current_xid == Common.getXID()) {
- type = 'me';
- marker = '<div class="marker"></div>';
- remove = '<a href="#" class="remove" onclick="return Microblog.removeComment(\'' + Utils.encodeOnclick(server) + '\', \'' + Utils.encodeOnclick(node) + '\', \'' + Utils.encodeOnclick(current_id) + '\');">' + Common._e("Remove") + '</a>';
- }
-
- // New comment?
- var new_class = '';
-
- if(!complete) {
- new_class = ' new';
- }
-
- // Add the comment
- if(current_body) {
- // Add the XID
- if(!Utils.existArrayValue(users_xid, current_xid)) {
- users_xid.push(current_xid);
- }
-
- // Add the HTML code
- code = '<div class="one-comment ' + hex_md5(current_xid) + ' ' + type + new_class + '" data-id="' + Common.encodeQuotes(current_id) + '">' +
- marker +
-
- '<div class="avatar-container" onclick="return ' + onclick + ';">' +
- '<img class="avatar" src="' + './images/others/default-avatar.png' + '" alt="" />' +
- '</div>' +
-
- '<div class="comment-container">' +
- '<a href="#" onclick="return ' + onclick + ';" title="' + Common.encodeQuotes(current_xid) + '" class="name">' + current_name.htmlEnc() + '</a>' +
- '<span class="date">' + current_date.htmlEnc() + '</span>' +
- remove +
-
- '<p class="body">' + Filter.message(current_body, current_name, true) + '</p>' +
- '</div>' +
-
- '<div class="clear"></div>' +
- '</div>' + code;
- }
- });
-
- // Add the HTML
- if(complete) {
- path_sel.html(code);
-
- // Focus on the compose input
- $(document).oneTime(10, function() {
- path_sel.find('.one-comment.compose input').focus();
- });
- }
-
- else {
- path_sel.find('.one-comment.compose').before(code);
-
- // Beautiful effect
- path_sel.find('.one-comment.new').slideDown('fast', function() {
- self.adaptComment(id);
- }).removeClass('new');
- }
-
- // Set the good widths
- self.adaptComment(id);
-
- // Get the avatars
- for(var a in users_xid) {
- Avatar.get(users_xid[a], 'cache', 'true', 'forget');
- }
-
- // Add the owner XID
- if(owner_xid && owner_xid.match('@') && !Utils.existArrayValue(users_xid, owner_xid)) {
- users_xid.push(owner_xid);
- }
-
- // Add the repeated from XID
- if(repeat_xid && repeat_xid.match('@') && !Utils.existArrayValue(users_xid, repeat_xid)) {
- users_xid.push(repeat_xid);
- }
-
- // Remove my own XID
- Utils.removeArrayValue(users_xid, Common.getXID());
-
- // DOM events
- if(complete) {
- // Update timer
- path_sel.everyTime('60s', function() {
- self.getComments(server, node, id);
-
- Console.log('Updating comments node: ' + node + ' on ' + server + '...');
- });
-
- // Input key event
- var comment_compose_input_sel = path_sel.find('.one-comment.compose input');
-
- comment_compose_input_sel.placeholder();
- comment_compose_input_sel.keyup(function(e) {
- var this_input_sel = $(this);
-
- if((e.keyCode == 13) && this_input_sel.val()) {
- // Send the comment!
- self.sendComment(this_input_sel.val(), server, node, id, users_xid, parent_data);
-
- // Reset the input value
- this_input_sel.val('');
-
- return false;
- }
- });
- }
- } catch(e) {
- Console.error('Microblog.handleComments', e);
- }
-
- };
-
-
- /**
- * Shows the microblog comments box
- * @public
- * @param {string} path
- * @param {string} entityComments
- * @param {string} nodeComments
- * @param {string} tHash
- * @return {undefined}
- */
- self.showComments = function(path, entityComments, nodeComments, tHash) {
-
- try {
- // Do not display it twice!
- if(path.find('div.comments').size())
- return;
-
- // Generate an unique ID
- var idComments = genID();
-
- // Create comments container
- path.find('div.comments-container').append(
- '<div class="comments" data-id="' + Common.encodeQuotes(idComments) + '">' +
- '<div class="arrow talk-images"></div>' +
- '<div class="comments-content">' +
- '<a href="#" class="one-comment loading"><span class="icon talk-images"></span>' + Common._e("Show comments") + '</a>' +
- '</div>' +
- '</div>'
- );
-
- // Click event
- path.find('div.comments a.one-comment').click(function() {
- // Set loading info
- $(this).parent().html('<div class="one-comment loading"><span class="icon talk-images"></span>' + Common._e("Loading comments...") + '</div>');
-
- // Request comments
- self.getComments(entityComments, nodeComments, idComments);
-
- // Remove the comments from the DOM if click away
- if(tHash) {
- $('#channel').off('click');
-
- $('#channel').on('click', function(evt) {
- if(!$(evt.target).parents('.' + tHash).size()) {
- $('#channel').off('click');
- $('#channel .one-update div.comments-content').stopTime();
- $('#channel .one-update div.comments').remove();
- }
- });
- }
-
- return false;
- });
- } catch(e) {
- Console.error('Microblog.showComments', e);
- }
-
- };
-
-
- /**
- * Sends a comment on a given microblog comments node
- * @public
- * @param {string} value
- * @param {string} server
- * @param {string} node
- * @param {string} id
- * @param {object} notifiy_arr
- * @param {string} parent_data
- * @return {boolean}
- */
- self.sendComment = function(value, server, node, id, notifiy_arr, parent_data) {
-
- /* REF: http://xmpp.org/extensions/xep-0060.html#publisher-publish */
-
- try {
- // Not enough data?
- if(!value || !server || !node) {
- return false;
- }
-
- // Get some values
- var date = DateUtils.getXMPPTime('utc');
- var hash = hex_md5(value + date);
-
- // New IQ
- var iq = new JSJaCIQ();
- iq.setType('set');
- iq.setTo(server);
- iq.setID('set_' + genID() + '-' + id);
-
- // PubSub main elements
- var pubsub = iq.appendNode('pubsub', {
- 'xmlns': NS_PUBSUB
- });
-
- var publish = pubsub.appendChild(iq.buildNode('publish', {
- 'node': node,
- 'xmlns': NS_PUBSUB
- }));
-
- var item = publish.appendChild(iq.buildNode('item', {
- 'id': hash,
- 'xmlns': NS_PUBSUB
- }));
-
- var entry = item.appendChild(iq.buildNode('entry', {
- 'xmlns': NS_ATOM
- }));
-
- entry.appendChild(iq.buildNode('title', {
- 'xmlns': NS_ATOM
- }));
-
- // Author infos
- var author = entry.appendChild(iq.buildNode('author', {
- 'xmlns': NS_ATOM
- }));
-
- author.appendChild(iq.buildNode('name', {
- 'xmlns': NS_ATOM
- }, Name.get()));
-
- author.appendChild(iq.buildNode('uri', {
- 'xmlns': NS_ATOM
- }, 'xmpp:' + Common.getXID()));
-
- // Create the comment
- entry.appendChild(iq.buildNode('content', {
- 'type': 'text',
- 'xmlns': NS_ATOM
- }, value));
-
- entry.appendChild(iq.buildNode('published', {
- 'xmlns': NS_ATOM
- }, date));
-
- con.send(iq);
-
- // Handle this comment!
- iq.setFrom(server);
- self.handleComments(iq);
-
- // Notify users
- if(notifiy_arr && notifiy_arr.length) {
- // XMPP link to the item
- var href = 'xmpp:' + server + '?;node=' + encodeURIComponent(node) + ';item=' + encodeURIComponent(hash);
-
- // Loop!
- for(var n in notifiy_arr) {
- Notification.send(notifiy_arr[n], 'comment', href, value, parent_data);
- }
- }
- } catch(e) {
- Console.error('Microblog.sendComment', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Removes a given microblog comment item
- * @public
- * @param {string} server
- * @param {string} node
- * @param {string} id
- * @return {undefined}
- */
- self.removeComment = function(server, node, id) {
-
- /* REF: http://xmpp.org/extensions/xep-0060.html#publisher-delete */
-
- try {
- // Remove the item from our DOM
- $('.one-comment[data-id="' + id + '"]').slideUp('fast', function() {
- var this_sel = $(this);
-
- // Get the parent ID
- var parent_id = this_sel.parents('div.comments').attr('data-id');
-
- // Remove it!
- this_sel.remove();
-
- // Adapt the width
- self.adaptComment(parent_id);
- });
-
- // Send the IQ to remove the item (and get eventual error callback)
- var iq = new JSJaCIQ();
- iq.setType('set');
- iq.setTo(server);
-
- var pubsub = iq.appendNode('pubsub', {
- 'xmlns': NS_PUBSUB
- });
-
- var retract = pubsub.appendChild(iq.buildNode('retract', {
- 'node': node,
- 'xmlns': NS_PUBSUB
- }));
-
- retract.appendChild(iq.buildNode('item', {
- 'id': id,
- 'xmlns': NS_PUBSUB
- }));
-
- con.send(iq);
- } catch(e) {
- Console.error('Microblog.removeComment', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Adapts the comment elements width
- * @public
- * @param {string} id
- * @return {undefined}
- */
- self.adaptComment = function(id) {
-
- try {
- var selector = $('div.comments[data-id="' + id + '"] div.comments-content');
- var selector_width = selector.width();
-
- // Change widths
- selector.find('.one-comment.compose input').css('width', selector_width - 60);
- selector.find('.one-comment .comment-container').css('width', selector_width - 55);
- } catch(e) {
- Console.error('Microblog.adaptComment', e);
- }
-
- };
-
-
- /**
- * Handles the microblog of an user
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handle = function(iq) {
-
- try {
- // Get the from attribute of this IQ
- var from = Common.bareXID(Common.getStanzaFrom(iq));
-
- // Define the selector path
- var selector = '#channel .top.individual input[name=';
-
- // Is this request still alive?
- if(from == $(selector + 'jid]').val()) {
- var hash = hex_md5(from);
-
- // Update the items counter
- var old_count = parseInt($(selector + 'counter]').val());
- $(selector + 'counter]').val(old_count + 20);
-
- // Display the microblog
- self.display(iq, from, hash, 'individual', 'request');
-
- // Hide the waiting icon
- self.wait(
- Features.enabledPEP() ? 'sync' : 'unsync'
- );
-
- // Hide the 'more items' link?
- if($(iq.getNode()).find('item').size() < old_count)
- $('#channel .individual a.more').remove();
-
- // Get the comments?
- var comments_node = $('#channel .top.individual input[name="comments"]').val();
-
- if(comments_node && comments_node.match(/^xmpp:(.+)\?;node=(.+);item=(.+)/)) {
- // Get the values
- var comments_entity = RegExp.$1;
- comments_node = decodeURIComponent(RegExp.$2);
-
- // Selectors
- var file_link = $('#channel .individual .one-update p.file a[data-node="' + comments_node + '"]');
- var entry_link = $('#channel .individual .one-update:has(.comments-container[data-node="' + comments_node + '"])');
-
- // Is it a microblog entry (or a lonely entry file)?
- if(entry_link.size()) {
- self.showComments(entry_link, comments_entity, comments_node);
- entry_link.find('a.one-comment').click();
- }
-
- // Is it a file?
- else if(file_link.size()) {
- file_link.click();
- }
- }
- }
-
- Console.info('Microblog got: ' + from);
- } catch(e) {
- Console.error('Microblog.handle', e);
- }
-
- };
-
-
- /**
- * Handles the microblog of an user (from roster)
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleRoster = function(iq) {
-
- try {
- // Get the from attribute of this IQ
- var from = Common.bareXID(Common.getStanzaFrom(iq));
-
- // Display the microblog
- self.display(iq, from, hex_md5(from), 'mixed', 'push');
- } catch(e) {
- Console.error('Microblog.handleRoster', e);
- }
-
- };
-
-
- /**
- * Resets the microblog elements
- * @public
- * @return {boolean}
- */
- self.reset = function() {
-
- try {
- var channel_sel = $('#channel');
- var individual_sel = channel_sel.find('.individual');
-
- // Reset everything
- individual_sel.find('.one-update div.comments-content').stopTime();
- individual_sel.remove();
- channel_sel.find('.mixed').show();
-
- // Hide the waiting icon
- self.wait(
- Features.enabledPEP() ? 'sync' : 'unsync'
- );
- } catch(e) {
- Console.error('Microblog.reset', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Gets the user's microblog to check it exists
- * @public
- * @return {undefined}
- */
- self.getInit = function() {
-
- try {
- self.get(Common.getXID(), hex_md5(Common.getXID()), true);
- } catch(e) {
- Console.error('Microblog.getInit', e);
- }
-
- };
-
-
- /**
- * Handles the user's microblog to create it in case of error
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleInit = function(iq) {
-
- try {
- // Any error?
- if((iq.getType() == 'error') && $(iq.getNode()).find('item-not-found').size()) {
- // The node may not exist, create it!
- Pubsub.setup('', NS_URN_MBLOG, '1', '1000000', '', '', true);
-
- Console.warn('Error while getting microblog, trying to reconfigure the PubSub node!');
- }
- } catch(e) {
- Console.error('Microblog.handleInit', e);
- }
-
- };
-
-
- /**
- * Requests an user's microblog
- * @public
- * @param {type} name
- * @return {undefined}
- */
- self.request = function(xid, items, get_item, handler) {
-
- try {
- // Ask the server the user's microblog
- var iq = new JSJaCIQ();
- iq.setType('get');
- iq.setTo(xid);
-
- var pubsub = iq.appendNode('pubsub', {
- 'xmlns': NS_PUBSUB
- });
-
- var ps_items = pubsub.appendChild(iq.buildNode('items', {
- 'node': NS_URN_MBLOG,
- 'xmlns': NS_PUBSUB
- }));
-
- // Request a particular item?
- if(get_item) {
- ps_items.appendChild(iq.buildNode('item', {
- 'id': get_item,
- 'xmlns': NS_PUBSUB
- }));
- } else {
- ps_items.setAttribute('max_items', items);
- }
-
- if(handler) {
- con.send(iq, handler);
- } else {
- con.send(iq, self.handle);
- }
- } catch(e) {
- Console.error('Microblog.request', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Gets the microblog of an user
- * @public
- * @param {string} xid
- * @param {string} hash
- * @param {boolean} check
- * @return {boolean}
- */
- self.get = function(xid, hash, check) {
-
- /* REF: http://xmpp.org/extensions/xep-0060.html#subscriber-retrieve */
-
- try {
- Console.info('Get the microblog: ' + xid);
-
- var channel_sel = $('#channel');
-
- // Fire the wait event
- self.wait('fetch');
-
- // XMPP URI?
- var get_item = '';
-
- if(xid.match(/^xmpp:(.+)\?;node=(.+);item=(.+)/)) {
- xid = RegExp.$1;
- get_item = decodeURIComponent(RegExp.$3);
- }
-
- // No hash?
- if(!hash) {
- hash = hex_md5(xid);
- }
-
- // Can display the individual channel?
- if(!check && !Common.exists('#channel .individual')) {
- // Hide the mixed channel
- channel_sel.find('.mixed').hide();
-
- // Get the channel title depending on the XID
- var cTitle;
- var cShortcuts = '';
-
- if(xid == Common.getXID()) {
- cTitle = Common._e("Your channel");
- } else {
- cTitle = Common._e("Channel of") + ' ' + Name.getBuddy(xid).htmlEnc();
- cShortcuts = '<div class="shortcuts">' +
- '<a href="#" class="message talk-images" title="' + Common._e("Send him/her a message") + '" onclick="return Inbox.composeMessage(\'' + Utils.encodeOnclick(xid) + '\');"></a>' +
- '<a href="#" class="chat talk-images" title="' + Common._e("Start a chat with him/her") + '" onclick="return Chat.checkCreate(\'' + Utils.encodeOnclick(xid) + '\', \'chat\');"></a>' +
- '<a href="#" class="command talk-images" title="' + Common._e("Command") + '" onclick="return AdHoc.retrieve(\'' + Utils.encodeOnclick(xid) + '\');"></a>' +
- '<a href="#" class="profile talk-images" title="' + Common._e("Show user profile") + '" onclick="return UserInfos.open(\'' + Utils.encodeOnclick(xid) + '\');"></a>' +
- '</div>';
- }
-
- // Create a new individual channel
- channel_sel.find('.content.mixed').after(
- '<div class="content individual microblog-' + hash + '">' +
- '<a href="#" class="more home-images" onclick="if($(\'#channel .footer div.fetch\').is(\':hidden\')) { return Microblog.get(\'' + Utils.encodeOnclick(xid) + '\', \'' + Utils.encodeOnclick(hash) + '\'); } return false;">' + Common._e("More notices...") + '</a>' +
- '</div>'
- )
-
- .before(
- '<div class="top individual ' + hash + '">' +
- '<div class="avatar-container">' +
- '<img class="avatar" src="' + './images/others/default-avatar.png' + '" alt="" />' +
- '</div>' +
-
- '<div class="update">' +
- '<h2>' + cTitle + '</h2>' +
- '<a href="#" onclick="return Microblog.reset();">« ' + Common._e("Previous") + '</a>' +
- '</div>' +
-
- cShortcuts +
-
- '<input type="hidden" name="jid" value="' + Common.encodeQuotes(xid) + '" />' +
- '<input type="hidden" name="counter" value="20" />' +
- '</div>'
- );
-
- // Microblog navigation
- channel_sel.find('.content.individual').scroll(function() {
- if(channel_sel.find('.footer div.fetch').is(':hidden') &&
- channel_sel.find('.individual a.more:visible').size() &&
- channel_sel.find('.content.individual').scrollTop() >= (channel_sel.find('.content.individual')[0].scrollHeight - channel_sel.find('.content.individual').height() - 200)) {
- channel_sel.find('.individual a.more').click();
- }
- });
-
- // Display the user avatar
- Avatar.get(xid, 'cache', 'true', 'forget');
- }
-
- // Get the number of items to retrieve
- var items = !check ? channel_sel.find('.top.individual input[name="counter"]').val() : '0';
-
- // Request
- self.request(
- xid,
- items,
- get_item,
- (check ? self.handleInit : self.handle)
- );
- } catch(e) {
- Console.error('Microblog.get', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Show a given microblog waiting status
- * @public
- * @param {string} type
- * @return {undefined}
- */
- self.wait = function(type) {
-
- try {
- // First hide all the infos elements
- $('#channel .footer div').hide();
-
- // Display the good one
- $('#channel .footer div.' + type).show();
-
- // Depending on the type, disable/enable certain tools
- var selector = $('#channel .top input[name="microblog_body"]');
-
- if(type == 'unsync') {
- selector.attr('disabled', true);
- } else if(type == 'sync') {
- $(document).oneTime(10, function() {
- selector.removeAttr('disabled').focus();
- });
- }
- } catch(e) {
- Console.error('Microblog.wait', e);
- }
-
- };
-
-
- /**
- * Gets the microblog configuration
- * @public
- * @return {undefined}
- */
- self.getConfig = function() {
-
- try {
- // Lock the microblog options
- $('#persistent, #maxnotices').attr('disabled', true);
-
- // Get the microblog configuration
- var iq = new JSJaCIQ();
- iq.setType('get');
-
- var pubsub = iq.appendNode('pubsub', {
- 'xmlns': NS_PUBSUB_OWNER
- });
-
- pubsub.appendChild(iq.buildNode('configure', {
- 'node': NS_URN_MBLOG,
- 'xmlns': NS_PUBSUB_OWNER
- }));
-
- con.send(iq, self.handleGetConfig);
- } catch(e) {
- Console.error('Microblog.getConfig', e);
- }
-
- };
-
-
- /**
- * Handles the microblog configuration
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleGetConfig = function(iq) {
-
- try {
- // Reset the options stuffs
- Options.wait('microblog');
-
- // Unlock the microblog options
- $('#persistent, #maxnotices').removeAttr('disabled');
-
- // End if not a result
- if(!iq || (iq.getType() != 'result')) {
- return;
- }
-
- // Initialize the values
- var selector = $(iq.getNode());
- var persistent = '0';
- var maxnotices = '1000000';
-
- // Get the values
- var xPersistent = selector.find('field[var="pubsub#persist_items"] value:first').text();
- var xMaxnotices = selector.find('field[var="pubsub#max_items"] value:first').text();
-
- // Any value?
- if(xPersistent) {
- persistent = xPersistent;
- }
-
- if(xMaxnotices) {
- maxnotices = xMaxnotices;
- }
-
- // Change the maxnotices value
- switch(maxnotices) {
- case '1':
- case '100':
- case '1000':
- case '10000':
- case '100000':
- case '1000000':
- break;
-
- default:
- maxnotices = '1000000';
- break;
- }
-
- // Apply persistent value
- $('#persistent').attr(
- 'checked',
- (persistent == '0' ? false : true)
- );
-
- // Apply maxnotices value
- $('#maxnotices').val(maxnotices);
- } catch(e) {
- Console.error('Microblog.handleGetConfig', e);
- }
-
- };
-
-
- /**
- * Handles the user's microblog
- * @public
- * @param {object} packet
- * @return {undefined}
- */
- self.handleMine = function(packet) {
-
- try {
- var input_body_sel = $('#channel .top input[name="microblog_body"]');
-
- // Reset the entire form
- input_body_sel.removeAttr('disabled').val('');
- input_body_sel.placeholder();
-
- self.unattach();
-
- // Check for errors
- Errors.handleReply(packet);
- } catch(e) {
- Console.error('Microblog.handleMy', e);
- }
-
- };
-
-
- /**
- * Performs the microblog sender checks
- * @public
- * @param {type} name
- * @return {boolean}
- */
- self.send = function() {
-
- try {
- // Get the values
- var selector = $('#channel .top input[name="microblog_body"]');
- var body = $.trim(selector.val());
-
- // Sufficient parameters
- if(body) {
- // Disable & blur our input
- selector.attr('disabled', true).blur();
-
- // Files array
- var fName = [];
- var fType = [];
- var fLength = [];
- var fURL = [];
- var fThumb = [];
-
- // Read the files
- $('#attach .one-file').each(function() {
- var this_sel = $(this);
-
- // Push the values!
- fName.push(this_sel.find('a.link').text());
- fType.push(this_sel.attr('data-type'));
- fLength.push(this_sel.attr('data-length'));
- fURL.push(this_sel.find('a.link').attr('href'));
- fThumb.push(this_sel.attr('data-thumb'));
- });
-
- // Containing YouTube videos?
- var yt_matches = body.match(/(\w{3,5})(:)(\S+)((\.youtube\.com\/watch(\?v|\?\S+v|\#\!v|\#\!\S+v)\=)|(youtu\.be\/))([^& ]+)((&amp;\S)|(&\S)|\s|$)/gim);
-
- for(var y in yt_matches) {
- fName.push('');
- fType.push('text/html');
- fLength.push('');
- fURL.push($.trim(yt_matches[y]));
- fThumb.push('https://img.youtube.com/vi/' + $.trim(yt_matches[y].replace(/(\w{3,5})(:)(\S+)((\.youtube\.com\/watch(\?v|\?\S+v|\#\!v|\#\!\S+v)\=)|(youtu\.be\/))([^& ]+)((&amp;\S)|(&\S)|\s|$)/gim, '$8')) + '/0.jpg');
- }
-
- // Send the message on the XMPP network
- self.publish(body, fName, fURL, fType, fLength, fThumb);
- }
- } catch(e) {
- Console.error('Microblog.send', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Publishes a given microblog item
- * @public
- * @param {type} body
- * @param {type} attachedname
- * @param {type} attachedurl
- * @param {type} attachedtype
- * @param {type} attachedlength
- * @param {type} attachedthumb
- * @param {type} repeat
- * @param {type} comments_entity
- * @param {type} comments_node
- * @param {type} comments_entity_file
- * @param {type} comments_node_file
- * @return {boolean}
- */
- self.publish = function(body, attachedname, attachedurl, attachedtype, attachedlength, attachedthumb, repeat, comments_entity, comments_node, comments_entity_file, comments_node_file) {
-
- /* REF: http://xmpp.org/extensions/xep-0277.html */
-
- try {
- // Generate some values
- var time = DateUtils.getXMPPTime('utc');
- var id = hex_md5(body + time);
- var nick = Name.get();
- var xid = Common.getXID();
-
- // Define repeat options
- var author_nick = nick;
- var author_xid = xid;
-
- if(repeat && repeat.length) {
- author_nick = repeat[0];
- author_xid = repeat[1];
- }
-
- // Define comments options
- var node_create = false;
-
- if(!comments_entity || !comments_node) {
- node_create = true;
- comments_entity = HOST_PUBSUB;
- comments_node = NS_URN_MBLOG + ':comments/' + id;
- }
-
- if(!comments_entity_file) {
- comments_entity_file = [];
- }
-
- if(!comments_node_file) {
- comments_node_file = [];
- }
-
- // Don't create another comments node if only 1 file is attached
- if(attachedurl && (attachedurl.length == 1) && (!comments_entity_file[0] || !comments_node_file[0])) {
- comments_entity_file = [comments_entity];
- comments_node_file = [comments_node];
- }
-
- // New IQ
- var iq = new JSJaCIQ();
- iq.setType('set');
- iq.setTo(xid);
-
- // Create the main XML nodes/childs
- var pubsub = iq.appendNode('pubsub', {'xmlns': NS_PUBSUB});
- var publish = pubsub.appendChild(iq.buildNode('publish', {'node': NS_URN_MBLOG, 'xmlns': NS_PUBSUB}));
- var item = publish.appendChild(iq.buildNode('item', {'id': id, 'xmlns': NS_PUBSUB}));
- var entry = item.appendChild(iq.buildNode('entry', {'xmlns': NS_ATOM}));
- entry.appendChild(iq.buildNode('title', {'xmlns': NS_ATOM}));
-
- // Create the XML author childs
- var author = entry.appendChild(iq.buildNode('author', {'xmlns': NS_ATOM}));
- author.appendChild(iq.buildNode('name', {'xmlns': NS_ATOM}, author_nick));
- author.appendChild(iq.buildNode('uri', {'xmlns': NS_ATOM}, 'xmpp:' + author_xid));
-
- // Create the XML entry childs
- entry.appendChild(iq.buildNode('content', {'type': 'text', 'xmlns': NS_ATOM}, body));
- entry.appendChild(iq.buildNode('published', {'xmlns': NS_ATOM}, time));
- entry.appendChild(iq.buildNode('updated', {'xmlns': NS_ATOM}, time));
- entry.appendChild(iq.buildNode('link', {
- 'rel': 'alternate',
- 'href': 'xmpp:' + xid + '?;node=' + encodeURIComponent(NS_URN_MBLOG) + ';item=' + encodeURIComponent(id),
- 'xmlns': NS_ATOM
- }));
-
- // Create the attached files nodes
- for(var i = 0; i < attachedurl.length; i++) {
- // Not enough data?
- if(!attachedurl[i]) {
- continue;
- }
-
- // Append a new file element
- var file = entry.appendChild(iq.buildNode('link', {'xmlns': NS_ATOM, 'rel': 'enclosure', 'href': attachedurl[i]}));
-
- // Add attributes
- if(attachedname[i])
- file.setAttribute('title', attachedname[i]);
- if(attachedtype[i])
- file.setAttribute('type', attachedtype[i]);
- if(attachedlength[i])
- file.setAttribute('length', attachedlength[i]);
-
- // Any thumbnail?
- if(attachedthumb[i]) {
- file.appendChild(iq.buildNode('link', {'xmlns': NS_URN_MBLOG, 'rel': 'self', 'title': 'thumb', 'type': attachedtype[i], 'href': attachedthumb[i]}));
- }
-
- // Any comments node?
- if(!comments_entity_file[i] || !comments_node_file[i]) {
- // Generate values
- comments_entity_file[i] = HOST_PUBSUB;
- comments_node_file[i] = NS_URN_MBLOG + ':comments/' + hex_md5(attachedurl[i] + attachedname[i] + attachedtype[i] + attachedlength[i] + time);
-
- // Create the node
- Pubsub.setup(comments_entity_file[i], comments_node_file[i], '1', '1000000', 'open', 'open', true);
- }
-
- file.appendChild(iq.buildNode('link', {'xmlns': NS_URN_MBLOG, 'rel': 'replies', 'title': 'comments_file', 'href': 'xmpp:' + comments_entity_file[i] + '?;node=' + encodeURIComponent(comments_node_file[i])}));
- }
-
- // Create the comments child
- entry.appendChild(iq.buildNode('link', {'xmlns': NS_ATOM, 'rel': 'replies', 'title': 'comments', 'href': 'xmpp:' + comments_entity + '?;node=' + encodeURIComponent(comments_node)}));
-
- // Create the geoloc child
- var geoloc_xml = DataStore.getDB(Connection.desktop_hash, 'geolocation', 'now');
-
- if(geoloc_xml) {
- // Create two position arrays
- var geo_names = ['lat', 'lon', 'country', 'countrycode', 'region', 'postalcode', 'locality', 'street', 'building', 'text', 'uri', 'timestamp'];
- var geo_values = PEP.parsePosition(Common.XMLFromString(geoloc_xml));
-
- // New geoloc child
- var geoloc = entry.appendChild(iq.buildNode('geoloc', {
- 'xmlns': NS_GEOLOC
- }));
-
- // Append the geoloc content
- for(var g = 0; g < geo_names.length; g++) {
- if(geo_names[g] && geo_values[g]) {
- geoloc.appendChild(iq.buildNode(geo_names[g], {
- 'xmlns': NS_GEOLOC
- }, geo_values[g]));
- }
- }
- }
-
- // Send the IQ
- con.send(iq, self.handleMine);
-
- // Create the XML comments PubSub nodes
- if(node_create) {
- Pubsub.setup(comments_entity, comments_node, '1', '1000000', 'open', 'open', true);
- }
- } catch(e) {
- Console.error('Microblog.publish', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Attaches a file to a microblog post
- * @public
- * @return {undefined}
- */
- self.attach = function() {
-
- try {
- // File upload vars
- var attach_options = {
- dataType: 'xml',
- beforeSubmit: self.waitAttach,
- success: self.handleAttach
- };
-
- // Upload form submit event
- $('#attach').submit(function() {
- if(!Common.exists('#attach .wait') && $('#attach input[type="file"]').val()) {
- $(this).ajaxSubmit(attach_options);
- }
-
- return false;
- });
-
- // Upload input change event
- $('#attach input[type="file"]').change(function() {
- if(!Common.exists('#attach .wait') && $(this).val())
- $('#attach').ajaxSubmit(attach_options);
-
- return false;
- });
- } catch(e) {
- Console.error('Microblog.attach', e);
- }
-
- };
-
-
- /**
- * Unattaches a microblog file
- * @public
- * @param {string} id
- * @return {boolean}
- */
- self.unattach = function(id) {
-
- try {
- // Individual removal?
- if(id) {
- $('#attach .one-file[data-id="' + id + '"]').remove();
- } else {
- $('#attach .one-file').remove();
- }
-
- // Must enable the popup again?
- if(!Common.exists('#attach .one-file')) {
- // Restore the bubble class
- $('#attach').addClass('bubble');
-
- // Enable the bubble click events
- if(id) {
- $('#attach').hide();
- Bubble.show('#attach');
- } else {
- Bubble.close();
- }
- }
- } catch(e) {
- Console.error('Microblog.unattach', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Wait event for file attaching
- * @public
- * @return {undefined}
- */
- self.waitAttach = function() {
-
- try {
- // Append the wait icon
- $('#attach input[type="submit"]').after('<div class="wait wait-medium"></div>');
-
- // Lock the bubble
- $('#attach').removeClass('bubble');
- } catch(e) {
- Console.error('Microblog.waitAttach', e);
- }
-
- };
-
-
- /**
- * Success event for file attaching
- * @public
- * @param {string} responseXML
- * @return {undefined}
- */
- self.handleAttach = function(responseXML) {
-
- try {
- // Data selector
- var dData = $(responseXML).find('jappix');
-
- // Process the returned data
- if(!dData.find('error').size()) {
- // Do not allow this bubble to be hidden
- $('#attach').removeClass('bubble');
-
- // Get the file values
- var fName = dData.find('title').text();
- var fType = dData.find('type').text();
- var fLength = dData.find('length').text();
- var fURL = dData.find('href').text();
- var fThumb = dData.find('thumb').text();
-
- // Generate a file ID
- var fID = hex_md5(fURL);
-
- // Add this file
- $('#attach .attach-subitem').append(
- '<div class="one-file" data-type="' + Common.encodeQuotes(fType) + '" data-length="' + Common.encodeQuotes(fLength) + '" data-thumb="' + Common.encodeQuotes(fThumb) + '" data-id="' + fID + '">' +
- '<a class="remove talk-images" href="#" title="' + Common.encodeQuotes(Common._e("Unattach the file")) + '"></a>' +
- '<a class="link" href="' + Common.encodeQuotes(fURL) + '" target="_blank">' + fName.htmlEnc() + '</a>' +
- '</div>'
- );
-
- // Click event
- $('#attach .one-file[data-id="' + fID + '"] a.remove').click(function() {
- return self.unattach(fID);
- });
-
- Console.info('File attached.');
- }
-
- // Any error?
- else {
- Board.openThisError(4);
-
- // Unlock the bubble?
- if(!Common.exists('#attach .one-file')) {
- $('#attach').addClass('bubble').hide();
-
- // Show the bubble again!
- Bubble.show('#attach');
- }
-
- Console.error('Error while attaching the file', dData.find('error').text());
- }
-
- // Reset the attach bubble
- $('#attach input[type="file"]').val('');
- $('#attach .wait').remove();
-
- // Focus on the text input
- $(document).oneTime(10, function() {
- $('#channel .top input[name="microblog_body"]').focus();
- });
- } catch(e) {
- Console.error('Microblog.handleAttach', e);
- }
-
- };
-
-
- /**
- * Shows the microblog of an user from his infos
- * @public
- * @param {string} xid
- * @param {string} hash
- * @return {undefined}
- */
- self.fromInfos = function(xid, hash) {
-
- try {
- // Renitialize the channel
- self.reset();
-
- // Switch to the channel
- Interface.switchChan('channel');
-
- // Get the microblog
- self.get(xid, hash);
- } catch(e) {
- Console.error('Microblog.fromInfos', e);
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.instance = function() {
-
- try {
- var microblog_body_sel = $('#channel .top input[name="microblog_body"]');
-
- // Keyboard event
- microblog_body_sel.keyup(function(e) {
- // Enter pressed: send the microblog notice
- if((e.keyCode == 13) && !Common.exists('#attach .wait')) {
- return self.send();
- }
- });
-
- // Placeholder
- microblog_body_sel.placeholder();
-
- // Microblog file attacher
- self.attach();
- } catch(e) {
- Console.error('Microblog.instance', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/mini.js b/app/javascripts/mini.js
deleted file mode 100644
index 6f7b9863..00000000
--- a/app/javascripts/mini.js
+++ /dev/null
@@ -1,4408 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the Jappix Mini JS scripts for Jappix
-
--------------------------------------------------
-
-License: dual-licensed under AGPL and MPLv2
-Authors: Valérian Saliou, hunterjm, Camaran, regilero, Kloadut, Maranda
-
-*/
-
-// Jappix Mini globals
-var MINI_DISCONNECT = false;
-var MINI_AUTOCONNECT = false;
-var MINI_SHOWPANE = false;
-var MINI_INITIALIZED = false;
-var MINI_ROSTER_INIT = false;
-var MINI_ROSTER_NOGROUP = 'jm_nogroup';
-var MINI_ANONYMOUS = false;
-var MINI_ANIMATE = false;
-var MINI_RANDNICK = false;
-var MINI_GROUPCHAT_PRESENCE = false;
-var MINI_DISABLE_MOBILE = false;
-var MINI_NICKNAME = '';
-var MINI_TITLE = null;
-var MINI_DOMAIN = null;
-var MINI_USER = null;
-var MINI_PASSWORD = null;
-var MINI_HASH = null;
-var MINI_ACTIVE = null;
-var MINI_RECONNECT = 0;
-var MINI_RECONNECT_MAX = 100;
-var MINI_RECONNECT_INTERVAL = 1;
-var MINI_PIXEL_STREAM_DURATION = 300;
-var MINI_PIXEL_STREAM_INTERVAL = 7200;
-var MINI_QUEUE = [];
-var MINI_CHATS = [];
-var MINI_GROUPCHATS = [];
-var MINI_SUGGEST_CHATS = [];
-var MINI_SUGGEST_GROUPCHATS = [];
-var MINI_SUGGEST_PASSWORDS = [];
-var MINI_PASSWORDS = [];
-var MINI_PRIORITY = 1;
-var MINI_RESOURCE = JAPPIX_RESOURCE + ' Mini';
-var MINI_ERROR_LINK = 'https://mini.jappix.com/issues';
-
-
-// Bundle
-var JappixMini = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Setups connection handlers
- * @public
- * @param {object} con
- * @return {undefined}
- */
- self.setupCon = function(con) {
-
- try {
- con.registerHandler('message', self.handleMessage);
- con.registerHandler('presence', self.handlePresence);
- con.registerHandler('iq', self.handleIQ);
- con.registerHandler('onerror', self.handleError);
- con.registerHandler('onconnect', self.connected);
- } catch(e) {
- JappixConsole.error('JappixMini.setupCon', e);
- }
-
- };
-
-
- /**
- * Connects the user with the given logins
- * @public
- * @param {type} domain
- * @param {type} user
- * @param {type} password
- * @return {boolean}
- */
- self.connect = function(domain, user, password) {
-
- try {
- oArgs = {};
-
- // Check BOSH origin
- BOSH_SAME_ORIGIN = Origin.isSame(oArgs.httpbase);
-
- // We create the new http-binding connection
- con = new JSJaCHttpBindingConnection({
- httpbase: (HOST_BOSH_MINI || HOST_BOSH)
- });
-
- // And we handle everything that happen
- self.setupCon(con);
-
- // fixes #339
- var store_resource = (BrowserDetect.browser != 'Explorer');
- var random_resource = null;
-
- if(store_resource) {
- // Randomize resource?
- random_resource = JappixDataStore.getDB(MINI_HASH, 'jappix-mini', 'resource');
- }
-
- if(!random_resource) {
- random_resource = MINI_RESOURCE + ' (' + (new Date()).getTime() + ')';
- }
-
- // We retrieve what the user typed in the login inputs
- oArgs = {};
- oArgs.secure = true;
- oArgs.xmllang = XML_LANG;
- oArgs.resource = random_resource;
- oArgs.domain = domain;
-
- // Store the resource (for reconnection)
- if(store_resource) {
- JappixDataStore.setDB(MINI_HASH, 'jappix-mini', 'resource', random_resource);
- }
-
- // Anonymous login?
- if(MINI_ANONYMOUS) {
- // Anonymous mode disabled?
- if(!JappixCommon.allowedAnonymous()) {
- JappixConsole.warn('Not allowed to use anonymous mode.');
-
- // Notify this error
- self.notifyError();
-
- return false;
- }
-
- // Bad domain?
- else if(JappixCommon.lockHost() && (domain != HOST_ANONYMOUS)) {
- JappixConsole.warn('Not allowed to connect to this anonymous domain: ' + domain);
-
- // Notify this error
- self.notifyError();
-
- return false;
- }
-
- oArgs.authtype = 'saslanon';
- }
-
- // Normal login
- else {
- // Bad domain?
- if(JappixCommon.lockHost() && (domain != HOST_MAIN)) {
- JappixConsole.warn('Not allowed to connect to this main domain: ' + domain);
-
- // Notify this error
- self.notifyError();
-
- return false;
- }
-
- // No nickname?
- if(!MINI_NICKNAME) {
- MINI_NICKNAME = user;
- }
-
- oArgs.username = user;
- oArgs.pass = password;
- }
-
- // We connect !
- con.connect(oArgs);
-
- JappixConsole.info('Jappix Mini is connecting...');
- } catch(e) {
- JappixConsole.error('JappixMini.connect', e);
-
- // Reset Jappix Mini
- self.disconnected();
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * When the user is connected
- * @public
- * @return {undefined}
- */
- self.connected = function() {
-
- try {
- // Do not get the roster if anonymous
- if(!MINI_RECONNECT) {
- // Update the roster
- jQuery('#jappix_mini a.jm_pane.jm_button span.jm_counter').text('0');
-
- if(MINI_ANONYMOUS) {
- self.initialize();
- } else {
- self.getRoster();
- }
-
- JappixConsole.info('Jappix Mini is now connected.');
- } else {
- self.reconnected();
-
- JappixConsole.info('Jappix Mini is now reconnected.');
- }
-
- // Reset reconnect var
- MINI_RECONNECT = 0;
- JappixDataStore.removeDB(MINI_HASH, 'jappix-mini', 'reconnect');
-
- // Execute enqueued events
- self.dequeue();
- } catch(e) {
- JappixConsole.error('JappixMini.connected', e);
- }
-
- };
-
-
- /**
- * When the user is reconnected
- * @public
- * @return {undefined}
- */
- self.reconnected = function() {
-
- try {
- var last_presence = JappixDataStore.getDB(MINI_HASH, 'jappix-mini', 'presence-last') || 'available';
-
- // Flush presence storage
- self.flushStorage('presence');
-
- // Empty groupchat messages
- jQuery('#jappix_mini div.jm_conversation.jm_type_groupchat div.jm_received-messages div.jm_group').remove();
-
- // Re-send all presences
- jQuery('#jappix_mini div.jm_status_picker a[data-status="' + JappixCommon.encodeQuotes(last_presence) + '"]').click();
- } catch(e) {
- JappixConsole.error('JappixMini.reconnected', e);
- }
-
- };
-
-
- /**
- * When the user disconnects
- * @public
- * @return {undefined}
- */
- self.saveSession = function() {
-
- try {
- // Not initialized?
- if(!MINI_INITIALIZED) {
- return;
- }
-
- // Reset Jappix Mini DOM before saving it
- self.resetPixStream();
-
- // Save the actual Jappix Mini DOM
- JappixDataStore.setDB(MINI_HASH, 'jappix-mini', 'dom', jQuery('#jappix_mini').html());
- JappixDataStore.setDB(MINI_HASH, 'jappix-mini', 'nickname', MINI_NICKNAME);
-
- // Save the scrollbar position
- var scroll_position = '';
- var scroll_hash = jQuery('#jappix_mini div.jm_conversation:has(a.jm_pane.jm_clicked)').attr('data-hash');
-
- if(scroll_hash) {
- scroll_position = document.getElementById('received-' + scroll_hash).scrollTop + '';
- }
-
- JappixDataStore.setDB(MINI_HASH, 'jappix-mini', 'scroll', scroll_position);
-
- // Suspend connection
- if(JappixCommon.isConnected()) {
- con.suspend(false);
- } else {
- JappixDataStore.setDB(MINI_HASH, 'jappix-mini', 'reconnect', ((MINI_RECONNECT === 0) ? 0 : (MINI_RECONNECT - 1)));
- self.serializeQueue();
- }
-
- JappixConsole.info('Jappix Mini session save tool launched.');
- } catch(e) {
- JappixConsole.error('JappixMini.saveSession', e);
- }
-
- };
-
-
- /**
- * Flushes Jappix Mini storage database
- * @public
- * @param {string} r_override
- * @return {undefined}
- */
- self.flushStorage = function(r_override) {
-
- try {
- var i,
- db_regex, db_current;
-
- db_regex = new RegExp(('^' + MINI_HASH + '_') + 'jappix-mini' + (r_override ? ('_' + r_override) : ''));
-
- for(i = 0; i < JappixDataStore.storageDB.length; i++) {
- db_current = JappixDataStore.storageDB.key(i);
-
- if(db_regex.exec(db_current)) {
- JappixDataStore.storageDB.removeItem(db_current);
- }
- }
-
- JappixConsole.log('Jappix Mini DB has been successfully flushed (' + (r_override ? 'partly' : 'completely') + ').');
- } catch(e) {
- JappixConsole.error('JappixMini.flushStorage', e);
- }
-
- };
-
-
- /**
- * Disconnects the connected user
- * @public
- * @return {boolean}
- */
- self.disconnect = function() {
-
- try {
- // No connection?
- if(!JappixCommon.isConnected()) {
- return false;
- }
-
- JappixConsole.info('Jappix Mini is disconnecting...');
-
- // Change markers
- MINI_DISCONNECT = true;
- MINI_INITIALIZED = false;
-
- // Flush storage
- self.flushStorage();
-
- // Add disconnection handler
- con.registerHandler('ondisconnect', function() {
- self.disconnected();
- });
-
- // Disconnect the user
- con.disconnect();
-
- return false;
- } catch(e) {
- JappixConsole.error('JappixMini.disconnect', e);
- }
-
- };
-
-
- /**
- * When the user is disconnected
- * @public
- * @return {boolean}
- */
- self.disconnected = function() {
-
- try {
- // Connection error?
- if(!MINI_DISCONNECT || MINI_INITIALIZED) {
- // Reset reconnect timer
- jQuery('#jappix_mini').stopTime();
-
- // Try to reconnect after a while
- if(MINI_INITIALIZED && (MINI_RECONNECT++ < MINI_RECONNECT_MAX)) {
- // Set timer
- jQuery('#jappix_mini').oneTime(MINI_RECONNECT_INTERVAL * 1000, function() {
- JappixConsole.debug('Trying to reconnect... (attempt: ' + MINI_RECONNECT + ' / ' + MINI_RECONNECT_MAX + ')');
-
- // Silently reconnect user
- self.connect(MINI_DOMAIN, MINI_USER, MINI_PASSWORD);
- });
-
- JappixConsole.info('Jappix Mini is encountering connectivity issues.');
- } else {
- // Remove the stored items
- self.flushStorage();
-
- // Notify this error
- self.notifyError();
-
- // Reset markers
- MINI_DISCONNECT = false;
- MINI_INITIALIZED = false;
-
- JappixConsole.info('Jappix Mini is giving up. Server seems to be down.');
- }
- }
-
- // Normal disconnection?
- else {
- launchMini(false, MINI_SHOWPANE, MINI_DOMAIN, MINI_USER, MINI_PASSWORD);
-
- // Reset markers
- MINI_DISCONNECT = false;
- MINI_INITIALIZED = false;
-
- JappixConsole.info('Jappix Mini is now disconnected.');
- }
- } catch(e) {
- JappixConsole.error('JappixMini.disconnected', e);
- }
-
- };
-
-
- /**
- * Handles the incoming errors
- * @public
- * @param {object} err
- * @return {undefined}
- */
- self.handleError = function(err) {
-
- try {
- // First level error (connection error)
- if(jQuery(err).is('error')) {
- // Notify this error
- self.disconnected();
-
- JappixConsole.error('First level error received.');
- }
- } catch(e) {
- JappixConsole.error('JappixMini.handleError', e);
- }
-
- };
-
-
- /**
- * Handles the incoming messages
- * @public
- * @param {object} msg
- * @return {undefined}
- */
- self.handleMessage = function(msg) {
-
- try {
- var type = msg.getType();
-
- // This is a message Jappix can handle
- if((type == 'chat') || (type == 'normal') || (type == 'groupchat') || !type) {
- // Get the packet data
- var node = msg.getNode();
- var subject = jQuery.trim(msg.getSubject());
- var body = subject ? subject : jQuery.trim(msg.getBody());
-
- // Get the sender data
- var from = JappixCommon.fullXID(JappixCommon.getStanzaFrom(msg));
- var xid = JappixCommon.bareXID(from);
- var hash = hex_md5(xid);
-
- // Any attached message body?
- if(body) {
- // Get more sender data
- var use_xid = xid;
- var nick = JappixCommon.thisResource(from);
-
- // Read the delay
- var delay = JappixDateUtils.readMessageDelay(node);
- var d_stamp;
-
- // Manage this delay
- if(delay) {
- time = JappixDateUtils.relative(delay);
- d_stamp = Date.jab2date(delay);
- }
-
- else {
- time = JappixDateUtils.getCompleteTime();
- d_stamp = new Date();
- }
-
- // Get the stamp
- var stamp = JappixDateUtils.extractStamp(d_stamp);
-
- // Is this a groupchat private message?
- if(JappixCommon.exists('#jappix_mini #chat-' + hash + '[data-type="groupchat"]')) {
- // Regenerate some stuffs
- if((type == 'chat') || (type == 'normal') || !type) {
- xid = from;
- hash = hex_md5(xid);
- }
-
- // XID to use for a groupchat
- else {
- use_xid = from;
- }
- }
-
- // Message type
- var message_type = 'user-message';
-
- // Grouphat values
- if(type == 'groupchat') {
- // Old message
- if(msg.getChild('delay', NS_URN_DELAY) || msg.getChild('x', NS_DELAY)) {
- message_type = 'old-message';
- }
-
- // System message?
- if(!nick || subject) {
- nick = '';
- message_type = 'system-message';
- }
- }
-
- // Chat values
- else {
- nick = jQuery('#jappix_mini a#friend-' + hash).text().revertHtmlEnc();
-
- // No nickname?
- if(!nick) {
- // If the roster does not give us any nick the user may have send us a nickname to use with his first message
- // @see http://xmpp.org/extensions/xep-0172.html
- var unknown_entry = jQuery('#jappix_mini a.jm_unknown[data-xid="' + xid + '"]');
-
- if(unknown_entry.size() > 0) {
- nick = unknown_entry.attr('data-nick');
- } else {
- var msgnick = msg.getNick();
- nick = JappixCommon.getXIDNick(xid);
-
- if(msgnick) {
- // If there is a nickname in the message which differs from the jid-extracted nick then tell it to the user
- if(nick != msgnick)
- nick = msgnick + ' (' + nick + ')';
- }
-
- // Push that unknown guy in a temporary roster entry
- unknown_entry = jQuery('<a class="jm_unknown jm_offline" href="#"></a>').attr('data-nick', nick).attr('data-xid', xid);
- unknown_entry.appendTo('#jappix_mini div.jm_roster div.jm_buddies');
- }
- }
- }
-
- // Define the target div
- var target = '#jappix_mini #chat-' + hash;
-
- // Create the chat if it does not exist
- if(!JappixCommon.exists(target) && (type != 'groupchat')) {
- self.chat(type, xid, nick, hash);
- }
-
- // Display the message
- self.displayMessage(type, body, use_xid, nick, hash, time, stamp, message_type);
-
- // Notify the user if not focused & the message is not a groupchat old one
- if((!jQuery(target + ' a.jm_chat-tab').hasClass('jm_clicked') || !JappixCommon.isFocused() || (MINI_ACTIVE != hash)) && (message_type == 'user-message')) {
- // Play a sound
- if(type != 'groupchat') {
- self.soundPlay();
- }
-
- // Show a notification bubble
- self.notifyMessage(hash);
- }
-
- JappixConsole.log('Message received from: ' + from);
- }
-
- // Chatstate groupchat filter
- if(JappixCommon.exists('#jappix_mini #chat-' + hash + '[data-type="groupchat"]')) {
- xid = from;
- hash = hex_md5(xid);
- }
-
- // Reset current chatstate
- self.resetChatstate(xid, hash, type);
-
- // Apply new chatstate (if supported)
- if(jQuery(node).find('active[xmlns="' + NS_CHATSTATES + '"]').size() || jQuery(node).find('composing[xmlns="' + NS_CHATSTATES + '"]').size()) {
- // Set marker to tell other user supports chatstates
- jQuery('#jappix_mini #chat-' + hash + ' input.jm_send-messages').attr('data-chatstates', 'true');
-
- // Composing?
- if(jQuery(node).find('composing[xmlns="' + NS_CHATSTATES + '"]').size()) {
- self.displayChatstate('composing', xid, hash, type);
- }
- }
- }
- } catch(e) {
- JappixConsole.error('JappixMini.handleMessage', e);
- }
-
- };
-
-
- /**
- * Handles the incoming IQs
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleIQ = function(iq) {
-
- try {
- // Define some variables
- var iqFrom = JappixCommon.fullXID(JappixCommon.getStanzaFrom(iq));
- var iqID = iq.getID();
- var iqQueryXMLNS = iq.getQueryXMLNS();
- var iqType = iq.getType();
- var iqNode = iq.getNode();
- var iqQuery;
-
- // Build the response
- var iqResponse = new JSJaCIQ();
-
- iqResponse.setID(iqID);
- iqResponse.setTo(iqFrom);
- iqResponse.setType('result');
-
- // Software version query
- if((iqQueryXMLNS == NS_VERSION) && (iqType == 'get')) {
- /* REF: http://xmpp.org/extensions/xep-0092.html */
-
- iqQuery = iqResponse.setQuery(NS_VERSION);
-
- iqQuery.appendChild(iq.buildNode('name', {'xmlns': NS_VERSION}, 'Jappix Mini'));
- iqQuery.appendChild(iq.buildNode('version', {'xmlns': NS_VERSION}, JAPPIX_VERSION));
- iqQuery.appendChild(iq.buildNode('os', {'xmlns': NS_VERSION}, navigator.platform));
-
- con.send(iqResponse);
-
- JappixConsole.log('Received software version query: ' + iqFrom);
- }
-
- // Roster push
- else if((iqQueryXMLNS == NS_ROSTER) && (iqType == 'set')) {
- // Display the friend
- self.handleRoster(iq);
-
- con.send(iqResponse);
-
- JappixConsole.log('Received a roster push.');
- }
-
- // Disco info query
- else if((iqQueryXMLNS == NS_DISCO_INFO) && (iqType == 'get')) {
- /* REF: http://xmpp.org/extensions/xep-0030.html */
-
- iqQuery = iqResponse.setQuery(NS_DISCO_INFO);
-
- // We set the name of the client
- iqQuery.appendChild(iq.appendNode('identity', {
- 'category': 'client',
- 'type': 'web',
- 'name': 'Jappix Mini',
- 'xmlns': NS_DISCO_INFO
- }));
-
- // We set all the supported features
- var fArray = [
- NS_DISCO_INFO,
- NS_VERSION,
- NS_ROSTER,
- NS_MUC,
- NS_VERSION,
- NS_URN_TIME
- ];
-
- for(var i in fArray) {
- iqQuery.appendChild(iq.buildNode('feature', {'var': fArray[i], 'xmlns': NS_DISCO_INFO}));
- }
-
- con.send(iqResponse);
-
- JappixConsole.log('Received a disco#infos query.');
- }
-
- // User time query
- else if(jQuery(iqNode).find('time').size() && (iqType == 'get')) {
- /* REF: http://xmpp.org/extensions/xep-0202.html */
-
- var iqTime = iqResponse.appendNode('time', {'xmlns': NS_URN_TIME});
- iqTime.appendChild(iq.buildNode('tzo', {'xmlns': NS_URN_TIME}, JappixDateUtils.getTZO()));
- iqTime.appendChild(iq.buildNode('utc', {'xmlns': NS_URN_TIME}, JappixDateUtils.getXMPPTime('utc')));
-
- con.send(iqResponse);
-
- JappixConsole.log('Received local time query: ' + iqFrom);
- }
-
- // Ping
- else if(jQuery(iqNode).find('ping').size() && (iqType == 'get')) {
- /* REF: http://xmpp.org/extensions/xep-0199.html */
-
- con.send(iqResponse);
-
- JappixConsole.log('Received a ping: ' + iqFrom);
- }
-
- // Not implemented
- else if(!jQuery(iqNode).find('error').size() && ((iqType == 'get') || (iqType == 'set'))) {
- // Append stanza content
- for(var c = 0; c < iqNode.childNodes.length; c++) {
- iqResponse.getNode().appendChild(iqNode.childNodes.item(c).cloneNode(true));
- }
-
- // Append error content
- var iqError = iqResponse.appendNode('error', {'xmlns': NS_CLIENT, 'code': '501', 'type': 'cancel'});
- iqError.appendChild(iq.buildNode('feature-not-implemented', {'xmlns': NS_STANZAS}));
- iqError.appendChild(iq.buildNode('text', {'xmlns': NS_STANZAS}, JappixCommon._e("The feature requested is not implemented by the recipient or server and therefore cannot be processed.")));
-
- con.send(iqResponse);
-
- JappixConsole.log('Received an unsupported IQ query from: ' + iqFrom);
- }
- } catch(e) {
- JappixConsole.error('JappixMini.handleIQ', e);
- }
-
- };
-
-
- /**
- * Handles the incoming presences
- * @public
- * @param {object} pr
- * @return {undefined}
- */
- self.handlePresence = function(pr) {
-
- try {
- // Get the values
- var xml = pr.getNode();
- var from = JappixCommon.fullXID(JappixCommon.getStanzaFrom(pr));
- var xid = JappixCommon.bareXID(from);
- var resource = JappixCommon.thisResource(from);
- var resources_obj = {};
-
- // Is this a groupchat?
- if(JappixCommon.exists('#jappix_mini div.jm_conversation[data-type="groupchat"][data-xid="' + JappixCommon.escapeQuotes(xid) + '"]')) {
- xid = from;
- }
-
- // Store presence stanza
- JappixDataStore.setDB(MINI_HASH, 'jappix-mini', 'presence-stanza-' + from, pr.xml());
- resources_obj = self.addResourcePresence(xid, resource);
-
- // Re-process presence storage for this buddy
- self.processPresence(xid, resource, resources_obj);
-
- // Display that presence
- self.displayPresence(xid);
-
- JappixConsole.log('Presence received from: ' + from);
- } catch(e) {
- JappixConsole.error('JappixMini.handlePresence', e);
- }
-
- };
-
-
- /**
- * Reads a stored presence
- * @public
- * @param {string} from
- * @return {undefined}
- */
- self.readPresence = function(from) {
-
- try {
- var pr = JappixDataStore.getDB(MINI_HASH, 'jappix-mini', 'presence-stanza-' + from);
-
- if(!pr) {
- pr = '<presence type="unavailable"></presence>';
- }
-
- return JappixCommon.XMLFromString(pr);
- } catch(e) {
- JappixConsole.error('JappixMini.readPresence', e);
- }
-
- };
-
-
- /**
- * Lists presence resources for an user
- * @public
- * @param {string} xid
- * @return {object}
- */
- self.resourcesPresence = function(xid) {
-
- var resources_obj = {};
-
- try {
- var resources_db = JappixDataStore.getDB(MINI_HASH, 'jappix-mini', 'presence-resources-' + xid);
-
- if(resources_db) {
- resources_obj = jQuery.evalJSON(resources_db);
- }
- } catch(e) {
- JappixConsole.error('JappixMini.resourcesPresence', e);
- } finally {
- return resources_obj;
- }
-
- };
-
-
- /**
- * Adds a given presence resource for an user
- * @public
- * @param {string} xid
- * @param {string} resource
- * @return {object}
- */
- self.addResourcePresence = function(xid, resource) {
-
- try {
- var resources_obj = self.resourcesPresence(xid);
-
- resources_obj[resource] = 1;
- JappixDataStore.setDB(MINI_HASH, 'jappix-mini', 'presence-resources-' + xid, jQuery.toJSON(resources_obj));
-
- return resources_obj;
- } catch(e) {
- JappixConsole.error('JappixMini.addResourcePresence', e);
-
- return null;
- }
-
- };
-
-
- /**
- * Removes a given presence resource for an user
- * @public
- * @param {string} xid
- * @param {string} resource
- * @return {object}
- */
- self.removeResourcePresence = function(xid, resource) {
-
- try {
- var resources_obj = self.resourcesPresence(xid);
-
- delete resources_obj[resource];
- JappixDataStore.setDB(MINI_HASH, 'jappix-mini', 'presence-resources-' + xid, jQuery.toJSON(resources_obj));
-
- return resources_obj;
- } catch(e) {
- JappixConsole.error('JappixMini.removeResourcePresence', e);
-
- return null;
- }
-
- };
-
-
- /**
- * Process presence storage for a given contact
- * @public
- * @param {string} xid
- * @param {string} resource
- * @param {object} resources_obj
- * @return {undefined}
- */
- self.processPresence = function(xid, resource, resources_obj) {
-
- try {
- if(!xid) {
- JappixConsole.warn('No XID value for precense processing.');
- return;
- }
-
- // Initialize vars
- var cur_resource, cur_from, cur_pr,
- cur_xml, cur_priority,
- from_highest;
-
- from_highest = null;
- max_priority = null;
-
- // Groupchat presence? (no priority here)
- if(xid.indexOf('/') !== -1) {
- from_highest = xid;
-
- JappixConsole.log('Processed presence for groupchat user: ' + xid);
- } else {
- if(!self.priorityPresence(xid)) {
- from_highest = xid + '/' + resource;
-
- JappixConsole.log('Processed initial presence for regular user: ' + xid + ' (highest priority for: ' + (from_highest || 'none') + ')');
- } else {
- for(cur_resource in resources_obj) {
- // Read presence data
- cur_from = xid + '/' + cur_resource;
- cur_pr = JappixDataStore.getDB(MINI_HASH, 'jappix-mini', 'presence-stanza-' + cur_from);
-
- if(cur_pr) {
- // Parse presence data
- cur_xml = JappixCommon.XMLFromString(cur_pr);
- cur_priority = jQuery(cur_xml).find('priority').text();
- cur_priority = !isNaN(cur_priority) ? parseInt(cur_priority) : 0;
-
- // Higher priority?
- if((cur_priority >= max_priority) || (max_priority === null)) {
- max_priority = cur_priority;
- from_highest = cur_from;
- }
- }
- }
-
- JappixConsole.log('Processed presence for regular user: ' + xid + ' (highest priority for: ' + (from_highest || 'none') + ')');
- }
- }
-
- if(from_highest) {
- JappixDataStore.setDB(MINI_HASH, 'jappix-mini', 'presence-priority-' + xid, from_highest);
- } else {
- JappixDataStore.removeDB(MINI_HASH, 'jappix-mini', 'presence-priority-' + xid);
- }
- } catch(e) {
- JappixConsole.error('JappixMini.processPresence', e);
- }
-
- };
-
-
- /**
- * Returns highest presence priority
- * @public
- * @param {string} xid
- * @return {string}
- */
- self.priorityPresence = function(xid) {
-
- try {
- return JappixDataStore.getDB(MINI_HASH, 'jappix-mini', 'presence-priority-' + xid) || '';
- } catch(e) {
- JappixConsole.error('JappixMini.priorityPresence', e);
-
- return null;
- }
-
- };
-
-
- /**
- * Displays a Jappix Mini presence
- * @public
- * @param {string} xid
- * @return {undefined}
- */
- self.displayPresence = function(xid) {
-
- try {
- // Get the values
- var from = self.priorityPresence(xid);
- var xml = self.readPresence(from);
- var pr = jQuery(xml).find('presence');
- var resource = JappixCommon.thisResource(from);
- var bare_xid = JappixCommon.bareXID(xid);
- var hash = hex_md5(bare_xid);
- var type = pr.attr('type');
- var show = pr.find('show').text();
-
- // Manage the received presence values
- if((type == 'error') || (type == 'unavailable')) {
- show = 'unavailable';
- } else {
- switch(show) {
- case 'chat':
- case 'away':
- case 'xa':
- case 'dnd':
- break;
-
- default:
- show = 'available';
-
- break;
- }
- }
-
- // Is this a groupchat presence?
- var groupchat_path = '#jappix_mini #chat-' + hash + '[data-type="groupchat"]';
- var is_groupchat = false;
-
- if(JappixCommon.exists(groupchat_path)) {
- // Groupchat exists
- is_groupchat = true;
-
- // Groupchat buddy presence (not me)
- if(resource != JappixCommon.unescapeQuotes(jQuery(groupchat_path).attr('data-nick'))) {
- // Regenerate some stuffs
- var groupchat = xid;
- var groupchat_hash = hash;
- xid = from;
- hash = hex_md5(xid);
-
- // Process this groupchat user presence
- var log_message;
-
- if(show == 'unavailable') {
- // Remove from roster view
- self.removeBuddy(hash, groupchat);
-
- // Generate log message
- log_message = JappixCommon.printf(JappixCommon._e("%s left"), resource.htmlEnc());
- } else {
- // Add to roster view
- self.addBuddy(xid, hash, resource, groupchat);
-
- // Generate log message
- log_message = JappixCommon.printf(JappixCommon._e("%s joined"), resource.htmlEnc());
- }
-
- // Log message in chat view
- if(MINI_GROUPCHAT_PRESENCE && log_message && (jQuery(groupchat_path).attr('data-init') == 'true')) {
- self.displayMessage('groupchat', log_message, xid, '', groupchat_hash, JappixDateUtils.getCompleteTime(), JappixDateUtils.getTimeStamp(), 'system-message');
- }
- }
- }
-
- // Friend path
- var chat = '#jappix_mini #chat-' + hash;
- var friend = '#jappix_mini a#friend-' + hash;
- var send_input = chat + ' input.jm_send-messages';
-
- // Is this friend online?
- if(show == 'unavailable') {
- // Offline marker
- jQuery(friend).addClass('jm_offline').removeClass('jm_online jm_hover');
-
- // Hide the friend just to be safe since the search uses .hide() and .show() which can override the CSS display attribute
- jQuery(friend).hide();
-
- // Disable the chat tools
- if(is_groupchat) {
- jQuery(chat).addClass('jm_disabled').attr('data-init', 'false');
- jQuery(send_input).blur().attr('disabled', true).attr('data-value', JappixCommon._e("Unavailable")).val(JappixCommon._e("Unavailable"));
- }
- } else {
- // Online marker
- jQuery(friend).removeClass('jm_offline').addClass('jm_online');
-
- // Check against search string
- var search = jQuery('#jappix_mini div.jm_roster div.jm_search input.jm_searchbox').val();
- var regex = new RegExp('((^)|( ))' + JappixCommon.escapeRegex(search), 'gi');
- var nick = JappixCommon.unescapeQuotes(jQuery(friend).data('nick'));
-
- if(search && !nick.match(regex)) {
- jQuery(friend).hide();
- } else {
- jQuery(friend).show();
- }
-
- // Enable the chat input
- if(is_groupchat) {
- jQuery(chat).removeClass('jm_disabled');
- jQuery(send_input).removeAttr('disabled').val('');
- }
- }
-
- // Change the show presence of this buddy
- jQuery(friend + ' span.jm_presence, ' + chat + ' span.jm_presence').attr('class', 'jm_presence jm_images jm_' + show);
-
- // Update the presence counter
- self.updateRoster();
-
- // Update groups visibility
- self.updateGroups();
-
- JappixConsole.log('Presence displayed for user: ' + xid);
- } catch(e) {
- JappixConsole.error('JappixMini.displayPresence', e);
- }
-
- };
-
-
- /**
- * Handles the MUC main elements
- * @public
- * @param {object} pr
- * @return {undefined}
- */
- self.handleMUC = function(pr) {
-
- try {
- // We get the xml content
- var xml = pr.getNode();
- var from = JappixCommon.fullXID(JappixCommon.getStanzaFrom(pr));
- var room = JappixCommon.bareXID(from);
- var hash = hex_md5(room);
- var resource = JappixCommon.thisResource(from);
-
- // Is it a valid server presence?
- var valid = false;
-
- if(!resource || (resource == JappixCommon.unescapeQuotes(jQuery('#jappix_mini #chat-' + hash + '[data-type="groupchat"]').attr('data-nick')))) {
- valid = true;
- }
-
- // Password required?
- if(valid && jQuery(xml).find('error[type="auth"] not-authorized').size()) {
- // Create a new prompt
- self.openPrompt(JappixCommon.printf(JappixCommon._e("This room (%s) is protected with a password."), room));
-
- // When prompt submitted
- jQuery('#jappix_popup div.jm_prompt form').submit(function() {
- try {
- // Read the value
- var password = self.closePrompt();
-
- // Any submitted chat to join?
- if(password) {
- // Send the password
- self.presence('', '', '', '', from, password, true, self.handleMUC);
-
- // Focus on the pane again
- self.switchPane('chat-' + hash, hash);
- }
- }
-
- catch(e) {}
-
- finally {
- return false;
- }
- });
-
- return;
- }
-
- // Nickname conflict?
- else if(valid && jQuery(xml).find('error[type="cancel"] conflict').size()) {
- // New nickname
- var nickname = resource + '_';
-
- // Send the new presence
- self.presence('', '', '', '', room + '/' + nickname, '', true, self.handleMUC);
-
- // Update the nickname marker
- jQuery('#jappix_mini #chat-' + hash).attr('data-nick', JappixCommon.escapeQuotes(nickname));
- }
-
- // Handle normal presence
- else {
- // Start the initial timer
- jQuery('#jappix_mini #chat-' + hash).oneTime('10s', function() {
- jQuery(this).attr('data-init', 'true');
- });
-
- // Trigger presence handler
- self.handlePresence(pr);
- }
- } catch(e) {
- JappixConsole.error('JappixMini.handleMUC', e);
- }
-
- };
-
-
- /**
- * Updates the user presence
- * @public
- * @param {string} type
- * @param {string} show
- * @param {number} priority
- * @param {string} status
- * @param {string} to
- * @param {string} password
- * @param {boolean} limit_history
- * @param {function} handler
- * @return {undefined}
- */
- self.presence = function(type, show, priority, status, to, password, limit_history, handler) {
-
- try {
- var pr = new JSJaCPresence();
-
- // Add the attributes
- if(to)
- pr.setTo(to);
- if(type)
- pr.setType(type);
- if(show)
- pr.setShow(show);
- if(status)
- pr.setStatus(status);
-
- if(priority) {
- pr.setPriority(priority);
- } else if(MINI_PRIORITY && !to) {
- pr.setPriority(MINI_PRIORITY);
- }
-
- // Special presence elements
- if(password || limit_history) {
- var x = pr.appendNode('x', {'xmlns': NS_MUC});
-
- // Any password?
- if(password) {
- x.appendChild(pr.buildNode('password', {'xmlns': NS_MUC}, password));
- }
-
- // Any history limit?
- if(limit_history) {
- x.appendChild(pr.buildNode('history', {'maxstanzas': 10, 'seconds': 86400, 'xmlns': NS_MUC}));
- }
- }
-
- // Send the packet
- if(handler) {
- con.send(pr, handler);
- } else {
- con.send(pr);
- }
-
- JappixConsole.info('Presence sent (to: ' + (to || 'none') + ', show: ' + (show || 'none') + ', type: ' + (type || 'none') + ')');
- } catch(e) {
- JappixConsole.error('JappixMini.presence', e);
- }
-
- };
-
-
- /**
- * Sends a given message
- * @public
- * @param {object} aForm
- * @return {boolean}
- */
- self.sendMessage = function(aForm) {
-
- try {
- var body = jQuery.trim(aForm.body.value);
- var xid = aForm.xid.value;
- var type = aForm.type.value;
- var hash = hex_md5(xid);
-
- if(body && xid) {
- // Send the message
- var aMsg = new JSJaCMessage();
-
- // If the roster does not give us any nick the user may have send us a nickname to use with his first message
- // @see http://xmpp.org/extensions/xep-0172.html
- var known_roster_entry = jQuery('#jappix_mini a.jm_friend[data-xid="' + JappixCommon.escapeQuotes(xid) + '"]');
-
- if(known_roster_entry.size() === 0) {
- var subscription = known_roster_entry.attr('data-sub');
-
- // The other may not know my nickname if we do not have both a roster entry, or if he doesn't have one
- if(('both' != subscription) && ('from' != subscription)) {
- aMsg.setNick(MINI_NICKNAME);
- }
- }
-
- // Message data
- aMsg.setTo(xid);
- aMsg.setType(type);
- aMsg.setBody(body);
-
- // Chatstate
- aMsg.appendNode('active', {'xmlns': NS_CHATSTATES});
-
- // Send it!
- self.enqueue(aMsg);
-
- // Clear the input
- aForm.body.value = '';
-
- // Display the message we sent
- if(type != 'groupchat') {
- self.displayMessage(type, body, JappixCommon.getXID(), 'me', hash, JappixDateUtils.getCompleteTime(), JappixDateUtils.getTimeStamp(), 'user-message');
- }
-
- JappixConsole.log('Message (' + type + ') sent to: ' + xid);
- }
- } catch(e) {
- JappixConsole.error('JappixMini.sendMessage', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Enqueues a stanza (to be sent over the network)
- * @public
- * @param {object} stanza
- * @return {undefined}
- */
- self.enqueue = function(stanza) {
-
- try {
- // Send stanza over the network or enqueue it?
- if(JappixCommon.isConnected()) {
- con.send(stanza);
- } else {
- MINI_QUEUE.push(
- stanza.xml()
- );
-
- JappixConsole.log('Enqueued an event (to be sent when connectivity is back).');
- }
- } catch(e) {
- JappixConsole.error('JappixMini.enqueue', e);
- }
-
- };
-
-
- /**
- * Dequeues stanzas and send them over the network
- * @public
- * @return {undefined}
- */
- self.dequeue = function() {
-
- try {
- var stanza_str, stanza_childs,
- stanza;
-
- // Execute deferred tasks
- while(MINI_QUEUE.length) {
- stanza_str = MINI_QUEUE.shift();
- stanza_childs = JappixCommon.XMLFromString(stanza_str).childNodes;
-
- if(stanza_childs && stanza_childs[0]) {
- stanza = JSJaCPacket.wrapNode(stanza_childs[0]);
- con.send(stanza);
- }
-
- JappixConsole.log('Dequeued a stanza.');
- }
- } catch(e) {
- JappixConsole.error('JappixMini.dequeue', e);
- }
-
- };
-
-
- /**
- * Serializes and store the queue storage
- * @public
- * @return {undefined}
- */
- self.serializeQueue = function() {
-
- try {
- JappixDataStore.setDB(MINI_HASH, 'jappix-mini', 'queue', jQuery.toJSON(MINI_QUEUE));
- } catch(e) {
- JappixConsole.error('JappixMini.serializeQueue', e);
- }
-
- };
-
-
- /**
- * Unserializes and update the queue storage
- * @public
- * @return {undefined}
- */
- self.unserializeQueue = function() {
-
- try {
- var start_body, end_body,
- start_args, end_args;
-
- var s_queue = JappixDataStore.getDB(MINI_HASH, 'jappix-mini', 'queue');
- JappixDataStore.removeDB(MINI_HASH, 'jappix-mini', 'queue');
-
- if(s_queue) {
- MINI_QUEUE = jQuery.evalJSON(s_queue);
- }
- } catch(e) {
- JappixConsole.error('JappixMini.unserialize', e);
- }
-
- };
-
-
- /**
- * Generates the asked smiley image
- * @public
- * @param {string} image
- * @param {string} text
- * @return {string}
- */
- self.smiley = function(image, text) {
-
- try {
- return ' <img class="jm_smiley jm_smiley-' + image + ' jm_images" alt="' + JappixCommon.encodeQuotes(text) + '" src="' + JAPPIX_STATIC + 'images/others/blank.gif' + '" /> ';
- } catch(e) {
- JappixConsole.error('JappixMini.smiley', e);
-
- return null;
- }
-
- };
-
-
- /**
- * Notifies incoming chat messages
- * @public
- * @param {string} hash
- * @return {undefined}
- */
- self.notifyMessage = function(hash) {
-
- try {
- // Define the paths
- var tab = '#jappix_mini #chat-' + hash + ' a.jm_chat-tab';
- var notify = tab + ' span.jm_notify';
- var notify_middle = notify + ' span.jm_notify_middle';
-
- // Notification box not yet added?
- if(!JappixCommon.exists(notify)) {
- jQuery(tab).append(
- '<span class="jm_notify">' +
- '<span class="jm_notify_left jm_images"></span>' +
- '<span class="jm_notify_middle">0</span>' +
- '<span class="jm_notify_right jm_images"></span>' +
- '</span>'
- );
- }
-
- // Increment the notification number
- var number = parseInt(jQuery(notify_middle).text());
- jQuery(notify_middle).text(number + 1);
-
- // Update the notification counters
- self.notifyCounters();
- } catch(e) {
- JappixConsole.error('JappixMini.notifyMessage', e);
- }
-
- };
-
-
- /**
- * Notifies the user from a session error
- * @public
- * @return {undefined}
- */
- self.notifyError = function() {
-
- try {
- // Replace the Jappix Mini DOM content
- jQuery('#jappix_mini').html(
- '<div class="jm_starter">' +
- '<a class="jm_pane jm_button jm_images" href="' + MINI_ERROR_LINK + '" target="_blank" title="' + JappixCommon._e("Click here to solve the error") + '">' +
- '<span class="jm_counter jm_error jm_images">' + JappixCommon._e("Error") + '</span>' +
- '</a>' +
- '</div>'
- );
- } catch(e) {
- JappixConsole.error('JappixMini.notifyError', e);
- }
-
- };
-
-
- /**
- * Updates the global counter with the new notifications
- * @public
- * @return {undefined}
- */
- self.notifyCounters = function() {
-
- try {
- // Count the number of notifications
- var number = 0;
-
- jQuery('#jappix_mini span.jm_notify span.jm_notify_middle').each(function() {
- number = number + parseInt(jQuery(this).text());
- });
-
- // Update the notification link counters
- jQuery('#jappix_mini a.jm_switch').removeClass('jm_notifnav');
-
- if(number) {
- // Left?
- if(jQuery('#jappix_mini div.jm_conversation:visible:first').prevAll().find('span.jm_notify').size())
- jQuery('#jappix_mini a.jm_switch.jm_left').addClass('jm_notifnav');
-
- // Right?
- if(jQuery('#jappix_mini div.jm_conversation:visible:last').nextAll().find('span.jm_notify').size())
- jQuery('#jappix_mini a.jm_switch.jm_right').addClass('jm_notifnav');
- }
-
- // No saved title? Abort!
- if(MINI_TITLE === null) {
- return;
- }
-
- // Page title code
- var title = MINI_TITLE;
-
- // No new stuffs? Reset the title!
- if(number) {
- title = '[' + number + '] ' + title;
- }
-
- // Apply the title
- document.title = title;
- } catch(e) {
- JappixConsole.error('JappixMini.notifyCounters', e);
- }
-
- };
-
-
- /**
- * Clears the notifications
- * @public
- * @param {string} hash
- * @return {boolean}
- */
- self.clearNotifications = function(hash) {
-
- try {
- // Not focused?
- if(!JappixCommon.isFocused()) {
- return false;
- }
-
- // Remove the notifications counter
- jQuery('#jappix_mini #chat-' + hash + ' span.jm_notify').remove();
-
- // Update the global counters
- self.notifyCounters();
-
- return true;
- } catch(e) {
- JappixConsole.error('JappixMini.clearNotifications', e);
-
- return false;
- }
-
- };
-
-
- /**
- * Updates the roster counter
- * @public
- * @return {undefined}
- */
- self.updateRoster = function() {
-
- try {
- // Update online counter
- jQuery('#jappix_mini a.jm_button span.jm_counter').text(jQuery('#jappix_mini a.jm_online').size());
- } catch(e) {
- JappixConsole.error('JappixMini.updateRoster', e);
- }
-
- };
-
-
- /**
- * Updates the visibility of roster groups
- * @public
- * @return {undefined}
- */
- self.updateGroups = function() {
-
- try {
- jQuery('.jm_grouped_roster').filter(':not(:has(.jm_friend.jm_online:visible))').hide();
- } catch(e) {
- JappixConsole.error('JappixMini.updateGroups', e);
- }
-
- };
-
-
- /**
- * Updates the chat overflow
- * @public
- * @return {undefined}
- */
- self.updateOverflow = function() {
-
- try {
- // Process overflow
- var number_visible = parseInt((jQuery(window).width() - 380) / 140);
- var number_visible_dom = jQuery('#jappix_mini div.jm_conversation:visible').size();
-
- if(number_visible <= 0) {
- number_visible = 1;
- }
-
- // Need to reprocess?
- if(number_visible != number_visible_dom) {
- // Show hidden chats
- jQuery('#jappix_mini div.jm_conversation:hidden').show();
-
- // Get total number of chats
- var number_total = jQuery('#jappix_mini div.jm_conversation').size();
-
- // Must add the overflow switcher?
- if(number_visible < number_total) {
- // Create the overflow handler?
- if(!jQuery('#jappix_mini a.jm_switch').size()) {
- // Add the navigation links
- jQuery('#jappix_mini div.jm_conversations').before(
- '<a class="jm_switch jm_left jm_pane jm_images" href="#">' +
- '<span class="jm_navigation jm_images"></span>' +
- '</a>'
- );
-
- jQuery('#jappix_mini div.jm_conversations').after(
- '<a class="jm_switch jm_right jm_pane jm_images" href="#">' +
- '<span class="jm_navigation jm_images"></span>' +
- '</a>'
- );
-
- // Add the click events
- self.overflowEvents();
- }
-
- // Show first visible chats
- var first_visible = jQuery('#jappix_mini div.jm_conversation:visible:first').index();
- var index_visible = number_visible - first_visible - 1;
-
- jQuery('#jappix_mini div.jm_conversation:visible:gt(' + index_visible + ')').hide();
-
- // Close the opened chat
- if(jQuery('#jappix_mini div.jm_conversation:hidden a.jm_pane.jm_clicked').size()) {
- self.switchPane();
- }
-
- // Update navigation buttons
- jQuery('#jappix_mini a.jm_switch').removeClass('jm_nonav');
-
- if(!jQuery('#jappix_mini div.jm_conversation:visible:first').prev().size()) {
- jQuery('#jappix_mini a.jm_switch.jm_left').addClass('jm_nonav');
- }
-
- if(!jQuery('#jappix_mini div.jm_conversation:visible:last').next().size()) {
- jQuery('#jappix_mini a.jm_switch.jm_right').addClass('jm_nonav');
- }
- }
-
- // Must remove the overflow switcher?
- else {
- jQuery('#jappix_mini a.jm_switch').remove();
- jQuery('#jappix_mini div.jm_conversation:hidden').show();
- }
- }
- } catch(e) {
- JappixConsole.error('JappixMini.updateOverflow', e);
- }
-
- };
-
-
- /**
- * Click events on the chat overflow
- * @public
- * @return {undefined}
- */
- self.overflowEvents = function() {
-
- try {
- jQuery('#jappix_mini a.jm_switch').click(function() {
- var this_sel = jQuery(this);
-
- // Nothing to do?
- if(this_sel.hasClass('jm_nonav')) {
- return false;
- }
-
- var hide_this = '';
- var show_this = '';
-
- // Go left?
- if(this_sel.is('.jm_left')) {
- show_this = jQuery('#jappix_mini div.jm_conversation:visible:first').prev();
-
- if(show_this.size()) {
- hide_this = jQuery('#jappix_mini div.jm_conversation:visible:last');
- }
- }
-
- // Go right?
- else {
- show_this = jQuery('#jappix_mini div.jm_conversation:visible:last').next();
-
- if(show_this.size()) {
- hide_this = jQuery('#jappix_mini div.jm_conversation:visible:first');
- }
- }
-
- // Update overflow content
- if(show_this && show_this.size()) {
- // Hide
- if(hide_this && hide_this.size()) {
- hide_this.hide();
-
- // Close the opened chat
- if(hide_this.find('a.jm_pane').hasClass('jm_clicked')) {
- self.switchPane();
- }
- }
-
- // Show
- show_this.show();
-
- // Update navigation buttons
- jQuery('#jappix_mini a.jm_switch').removeClass('jm_nonav');
-
- if((this_sel.is('.jm_right') && !show_this.next().size()) || (this_sel.is('.jm_left') && !show_this.prev().size())) {
- this_sel.addClass('jm_nonav');
- }
-
- // Update notification counters
- self.notifyCounters();
- }
-
- return false;
- });
- } catch(e) {
- JappixConsole.error('JappixMini.overflowEvents', e);
- }
-
- };
-
-
- /**
- * Creates the Jappix Mini DOM content
- * @public
- * @param {string} domain
- * @param {string} user
- * @param {string} password
- * @return {undefined}
- */
- self.create = function(domain, user, password) {
-
- try {
- // Try to restore the DOM
- var dom = JappixDataStore.getDB(MINI_HASH, 'jappix-mini', 'dom');
- var suspended = false;
- var resumed = false;
-
- // Reset DOM storage (free memory)
- JappixDataStore.removeDB(MINI_HASH, 'jappix-mini', 'dom');
-
- // Invalid stored DOM?
- if(dom && isNaN(jQuery(dom).find('a.jm_pane.jm_button span.jm_counter').text())) {
- dom = null;
- }
-
- // Old DOM? (saved session)
- if(dom) {
- // Attempt to resume connection
- con = new JSJaCHttpBindingConnection();
-
- self.setupCon(con);
- resumed = con.resume();
-
- // Read the old nickname
- MINI_NICKNAME = JappixDataStore.getDB(MINI_HASH, 'jappix-mini', 'nickname');
-
- // Marker
- suspended = true;
- MINI_ROSTER_INIT = true;
- }
-
- // New DOM?
- else {
- dom = '<div class="jm_position">' +
- '<div class="jm_conversations"></div>' +
-
- '<div class="jm_starter">' +
- '<div class="jm_roster">' +
- '<div class="jm_actions">' +
- '<a class="jm_logo jm_images" href="https://mini.jappix.com/" target="_blank"></a>' +
- '<a class="jm_one-action jm_join jm_images" title="' + JappixCommon._e("Join a chat") + '" href="#"></a>' +
- '<a class="jm_one-action jm_status" title="' + JappixCommon._e("Status") + '" href="#">' +
- '<span class="jm_presence jm_images jm_available"></span>' +
- '</a>' +
-
- '<div class="jm_status_picker">' +
- '<a href="#" data-status="available">' +
- '<span class="jm_presence jm_images jm_available"></span>' +
- '<span class="jm_show_text">' + JappixCommon._e("Available") + '</span>' +
- '</a>' +
-
- '<a href="#" data-status="away">' +
- '<span class="jm_presence jm_images jm_away"></span>' +
- '<span class="jm_show_text">' + JappixCommon._e("Away") + '</span>' +
- '</a>' +
-
- '<a href="#" data-status="dnd">' +
- '<span class="jm_presence jm_images jm_dnd"></span>' +
- '<span class="jm_show_text">' + JappixCommon._e("Busy") + '</span>' +
- '</a>' +
-
- '<a href="#" data-status="unavailable">' +
- '<span class="jm_presence jm_images jm_unavailable"></span>' +
- '<span class="jm_show_text">' + JappixCommon._e("Offline") + '</span>' +
- '</a>' +
- '</div>' +
- '</div>' +
- '<div class="jm_buddies"></div>' +
- '<div class="jm_search">' +
- '<input type="text" class="jm_searchbox jm_images" placeholder="' + JappixCommon._e("Filter") + '" data-value="" />' +
- '</div>' +
- '</div>' +
-
- '<a class="jm_pane jm_button jm_images" href="#">' +
- '<span class="jm_counter jm_images">' + JappixCommon._e("Please wait...") + '</span>' +
- '</a>' +
- '</div>' +
- '</div>';
- }
-
- // Create the DOM
- jQuery('body').append('<div id="jappix_mini" style="display: none;" dir="' + (JappixCommon.isRTL() ? 'rtl' : 'ltr') + '">' + dom + '</div>');
-
- // Hide the roster picker panels
- jQuery('#jappix_mini a.jm_status.active, #jappix_mini a.jm_join.active').removeClass('active');
- jQuery('#jappix_mini div.jm_status_picker').hide();
- jQuery('#jappix_mini div.jm_chan_suggest').remove();
-
- // Chat navigation overflow events
- self.overflowEvents();
-
- // Delay to fix DOM lag bug (CSS file not yet loaded)
- jQuery('#jappix_mini').everyTime(100, function() {
- var this_sel = jQuery(this);
-
- if(this_sel.is(':visible')) {
- JappixConsole.info('CSS loaded asynchronously.');
-
- this_sel.stopTime();
-
- // Re-process chat overflow
- self.updateOverflow();
-
- // Adapt roster height
- self.adaptRoster();
-
- // Update current pixel streams
- self.updatePixStream();
- }
- });
-
- // Auto-check if ads should be added
- if(ADS_ENABLE === 'on' && GADS_CLIENT && GADS_SLOT) {
- jQuery('#jappix_mini div.jm_conversations').everyTime('60s', function() {
- JappixConsole.debug('JappixMini.create[timer]', 'Auto-updating ads...');
-
- self.updatePixStream();
-
- JappixConsole.debug('JappixMini.create[timer]', 'Done auto-updating ads.');
- });
- }
-
- // CSS refresh (Safari display bug when restoring old DOM)
- jQuery('#jappix_mini div.jm_starter').css('float', 'right');
- jQuery('#jappix_mini div.jm_conversations, #jappix_mini div.jm_conversation, #jappix_mini a.jm_switch').css('float', 'left');
-
- // The click events
- jQuery('#jappix_mini a.jm_button').click(function() {
- // Using a try/catch override IE issues
- try {
- // Presence counter
- var counter = '#jappix_mini a.jm_pane.jm_button span.jm_counter';
-
- // Cannot open the roster?
- if(jQuery(counter).text() == JappixCommon._e("Please wait...")) {
- return false;
- }
-
- // Not yet connected?
- if(jQuery(counter).text() == JappixCommon._e("Chat")) {
- // Remove the animated bubble
- jQuery('#jappix_mini div.jm_starter span.jm_animate').remove();
-
- // Add a waiting marker
- jQuery(counter).text(JappixCommon._e("Please wait..."));
-
- // Launch the connection!
- self.connect(domain, user, password);
-
- return false;
- }
-
- // Normal actions
- if(!jQuery(this).hasClass('jm_clicked')) {
- self.showRoster();
- } else {
- self.hideRoster();
- }
- }
-
- catch(e) {}
-
- finally {
- return false;
- }
- });
-
- jQuery('#jappix_mini a.jm_status').click(function() {
- // Using a try/catch override IE issues
- try {
- var this_sel = jQuery(this);
- var is_active = this_sel.hasClass('active');
-
- jQuery('#jappix_mini div.jm_actions a').blur().removeClass('active');
-
- if(is_active) {
- jQuery('#jappix_mini div.jm_status_picker').hide();
- } else {
- jQuery('#jappix_mini div.jm_chan_suggest').remove();
- jQuery('#jappix_mini div.jm_status_picker').show();
- this_sel.addClass('active');
- }
- }
-
- catch(e) {}
-
- finally {
- return false;
- }
- });
-
- jQuery('#jappix_mini div.jm_status_picker a').click(function() {
- // Using a try/catch override IE issues
- try {
- var this_sel = jQuery(this);
-
- // Generate an array of presence change XIDs
- var pr_xid = [''];
-
- jQuery('#jappix_mini div.jm_conversation[data-type="groupchat"]').each(function() {
- var this_sub_sel = jQuery(this);
- pr_xid.push(JappixCommon.unescapeQuotes(this_sub_sel.attr('data-xid')) + '/' + JappixCommon.unescapeQuotes(this_sub_sel.attr('data-nick')));
- });
-
- // Loop on XIDs
- var new_status = this_sel.data('status');
-
- jQuery.each(pr_xid, function(key, value) {
- switch(new_status) {
- case 'available':
- self.presence('', '', '', '', value);
- break;
-
- case 'away':
- self.presence('', 'away', '', '', value);
- break;
-
- case 'dnd':
- self.presence('', 'dnd', '', '', value);
- break;
-
- case 'unavailable':
- self.disconnect();
- break;
-
- default:
- self.presence('', '', '', '', value);
- break;
- }
- });
-
- // Switch the status
- if(new_status != 'unavailable') {
- jQuery('#jappix_mini a.jm_status span').removeClass('jm_available jm_away jm_dnd jm_unavailable')
- .addClass('jm_' + this_sel.data('status'));
-
- jQuery('#jappix_mini div.jm_status_picker').hide();
- jQuery('#jappix_mini a.jm_status').blur().removeClass('active');
- }
- }
-
- catch(e) {}
-
- finally {
- return false;
- }
- });
-
- jQuery('#jappix_mini div.jm_actions a.jm_join').click(function() {
- // Using a try/catch override IE issues
- try {
- var this_sel = jQuery(this);
-
- // Any suggested chat/groupchat?
- if((MINI_SUGGEST_CHATS && MINI_SUGGEST_CHATS.length) || (MINI_SUGGEST_GROUPCHATS && MINI_SUGGEST_GROUPCHATS.length)) {
- var is_active = this_sel.hasClass('active');
- jQuery('#jappix_mini div.jm_actions a').blur().removeClass('active');
-
- if(is_active) {
- jQuery('#jappix_mini div.jm_chan_suggest').remove();
- } else {
- // Button style
- jQuery('#jappix_mini div.jm_status_picker').hide();
- this_sel.addClass('active');
-
- // Generate selector code
- var chans_html = '';
-
- // Generate the groupchat links HTML
- for(var i = 0; i < MINI_SUGGEST_GROUPCHATS.length; i++) {
- // Empty value?
- if(!MINI_SUGGEST_GROUPCHATS[i]) {
- continue;
- }
-
- // Using a try/catch override IE issues
- try {
- var chat_room = JappixCommon.bareXID(JappixCommon.generateXID(MINI_SUGGEST_GROUPCHATS[i], 'groupchat'));
- var chat_pwd = MINI_SUGGEST_PASSWORDS[i] || '';
-
- chans_html +=
- '<a class="jm_suggest_groupchat" href="#" data-xid="' + JappixCommon.escapeQuotes(chat_room) + '" data-pwd="' + JappixCommon.escapeQuotes(chat_pwd) + '">' +
- '<span class="jm_chan_icon jm_images"></span>' +
- '<span class="jm_chan_name">' + JappixCommon.getXIDNick(chat_room).htmlEnc() + '</span>' +
- '</a>';
- }
-
- catch(e) {}
- }
-
- // Any separation space to add?
- if(chans_html) {
- chans_html += '<div class="jm_space"></div>';
- }
-
- // Generate the chat links HTML
- for(var j = 0; j < MINI_SUGGEST_CHATS.length; j++) {
- // Empty value?
- if(!MINI_SUGGEST_CHATS[j]) {
- continue;
- }
-
- // Using a try/catch override IE issues
- try {
- // Read current chat values
- var chat_xid = JappixCommon.bareXID(JappixCommon.generateXID(MINI_SUGGEST_CHATS[j], 'chat'));
- var chat_hash = hex_md5(chat_xid);
- var chat_nick = jQuery('#jappix_mini a#friend-' + chat_hash).attr('data-nick');
-
- // Get current chat nickname
- if(!chat_nick) {
- chat_nick = JappixCommon.getXIDNick(chat_xid);
- } else {
- chat_nick = JappixCommon.unescapeQuotes(chat_nick);
- }
-
- // Generate HTML for current chat
- chans_html +=
- '<a class="jm_suggest_chat" href="#" data-xid="' + JappixCommon.escapeQuotes(chat_xid) + '">' +
- '<span class="jm_chan_icon jm_images"></span>' +
- '<span class="jm_chan_name">' + JappixCommon.getXIDNick(chat_nick).htmlEnc() + '</span>' +
- '</a>';
- }
-
- catch(e) {}
- }
-
- // Any separation space to add?
- if(chans_html) {
- chans_html += '<div class="jm_space"></div>';
- }
-
- // Append selector code
- jQuery('#jappix_mini div.jm_actions').append(
- '<div class="jm_chan_suggest">' +
- chans_html +
-
- '<a class="jm_suggest_prompt" href="#">' +
- '<span class="jm_chan_icon"></span>' +
- '<span class="jm_chan_name">' + JappixCommon._e("Other") + '</span>' +
- '</a>' +
- '</div>'
- );
-
- // Click events
- jQuery('#jappix_mini div.jm_chan_suggest a').click(function() {
- // Using a try/catch override IE issues
- try {
- var this_sub_sel = jQuery(this);
-
- // Chat?
- if(this_sub_sel.is('.jm_suggest_chat')) {
- var current_chat = JappixCommon.unescapeQuotes(this_sub_sel.attr('data-xid'));
-
- self.chat('chat', current_chat, this_sub_sel.find('span.jm_chan_name').text(), hex_md5(current_chat));
- }
-
- // Groupchat?
- else if(this_sub_sel.is('.jm_suggest_groupchat')) {
- var current_groupchat = JappixCommon.unescapeQuotes(this_sub_sel.attr('data-xid'));
- var current_password = this_sub_sel.attr('data-pwd') || null;
-
- if(current_password)
- current_password = JappixCommon.unescapeQuotes(current_password);
-
- self.chat('groupchat', current_groupchat, this_sub_sel.find('span.jm_chan_name').text(), hex_md5(current_groupchat), current_password);
- }
-
- // Default prompt?
- else {
- self.groupchatPrompt();
- }
- }
-
- catch(e) {}
-
- finally {
- return false;
- }
- });
-
- // Adapt chan suggest height
- self.adaptRoster();
- }
- }
-
- // Default action
- else {
- self.groupchatPrompt();
- }
- }
-
- catch(e) {}
-
- finally {
- return false;
- }
- });
-
- // Updates the roster with only searched terms
- jQuery('#jappix_mini div.jm_roster div.jm_search input.jm_searchbox').keyup(function(e) {
- var this_sel = jQuery(this);
-
- // Avoid buddy navigation to be reseted
- if((e.keyCode == 38) || (e.keyCode == 40)) {
- return;
- }
-
- // Escape key pressed?
- if(e.keyCode == 27) {
- this_sel.val('');
- }
-
- // Save current value
- this_sel.attr('data-value', this_sel.val());
-
- // Don't filter at each key up (faster for computer)
- var _this = this;
-
- JappixCommon.typewatch()(function() {
- // Using a try/catch to override IE issues
- try {
- // Get values
- var search = jQuery(_this).val();
- var regex = new RegExp('((^)|( ))' + JappixCommon.escapeRegex(search), 'gi');
-
- // Reset results
- jQuery('#jappix_mini a.jm_friend.jm_hover').removeClass('jm_hover');
- jQuery('#jappix_mini div.jm_roster div.jm_grouped').show();
-
- // If there is no search, we don't need to loop over buddies
- if(!search) {
- jQuery('#jappix_mini div.jm_roster div.jm_buddies a.jm_online').show();
-
- // Update groups visibility
- self.updateGroups();
-
- return;
- }
-
- // Filter buddies
- jQuery('#jappix_mini div.jm_roster div.jm_buddies a.jm_online').each(function() {
- var this_sub_sel = jQuery(this);
- var nick = JappixCommon.unescapeQuotes(this_sub_sel.data('nick'));
-
- if(nick.match(regex)) {
- this_sub_sel.show();
- } else {
- this_sub_sel.hide();
- }
- });
-
- // Filter groups
- jQuery('#jappix_mini div.jm_roster div.jm_grouped').each(function() {
- var this_sub_sel = jQuery(this);
-
- if(!this_sub_sel.find('a.jm_online:visible').size()) {
- this_sub_sel.hide();
- }
- });
-
- // Focus on the first buddy
- jQuery('#jappix_mini div.jm_roster div.jm_buddies a.jm_online:visible:first').addClass('jm_hover');
- }
-
- catch(e) {}
-
- finally {
- return false;
- }
- }, 500);
- });
-
- // Roster navigation
- jQuery(document).keydown(function(e) {
- // Cannot work if roster is not opened
- if(jQuery('#jappix_mini div.jm_roster').is(':hidden')) {
- return;
- }
-
- // Up/Down keys
- if((e.keyCode == 38) || (e.keyCode == 40)) {
- // Hover the last/first buddy
- if(!jQuery('#jappix_mini a.jm_online.jm_hover').size()) {
- if(e.keyCode == 38) {
- jQuery('#jappix_mini a.jm_online:visible:last').addClass('jm_hover');
- } else {
- jQuery('#jappix_mini a.jm_online:visible:first').addClass('jm_hover');
- }
- }
-
- // Hover the previous/next buddy
- else if(jQuery('#jappix_mini a.jm_online:visible').size() > 1) {
- var hover_index = jQuery('#jappix_mini a.jm_online:visible').index(jQuery('a.jm_hover'));
-
- // Up (decrement) or down (increment)?
- if(e.keyCode == 38) {
- hover_index--;
- } else {
- hover_index++;
- }
-
- if(!hover_index) {
- hover_index = 0;
- }
-
- // No buddy before/after?
- if(!jQuery('#jappix_mini a.jm_online:visible').eq(hover_index).size()) {
- if(e.keyCode == 38) {
- hover_index = jQuery('#jappix_mini a.jm_online:visible:last').index();
- } else {
- hover_index = 0;
- }
- }
-
- // Hover the previous/next buddy
- jQuery('#jappix_mini a.jm_friend.jm_hover').removeClass('jm_hover');
- jQuery('#jappix_mini a.jm_online:visible').eq(hover_index).addClass('jm_hover');
- }
-
- // Scroll to the hovered buddy (if out of limits)
- jQuery('#jappix_mini div.jm_roster div.jm_buddies').scrollTo(jQuery('#jappix_mini a.jm_online.jm_hover'), 0, {margin: true});
-
- return false;
- }
-
- // Enter key
- if((e.keyCode == 13) && jQuery('#jappix_mini a.jm_friend.jm_hover').size()) {
- jQuery('#jappix_mini a.jm_friend.jm_hover').click();
-
- return false;
- }
- });
-
- // Chat type re-focus
- jQuery(document).keypress(function(evt) {
- // Cannot work if an input/textarea is already focused or chat is not opened
- var path = '#jappix_mini div.jm_conversation div.jm_chat-content';
-
- if(jQuery('input, textarea').is(':focus') || !jQuery(path).is(':visible')) {
- return;
- }
-
- // May cause some compatibility issues
- try {
- // Get key value
- var key_value = jQuery.trim(String.fromCharCode(evt.which));
-
- // Re-focus on opened chat?
- if(key_value) {
- // Path to chat input
- var path_input = path + ' input.jm_send-messages';
-
- // Use a timer to override the DOM lag issue
- jQuery(document).oneTime(10, function() {
- // Get input values
- select_input = jQuery(path_input);
- value_input = select_input.val();
-
- // Append pressed key value
- select_input.val(value_input + key_value);
- select_input.focus();
-
- // Put cursor at the end of input
- select_input[0].selectionStart = select_input[0].selectionEnd = value_input.length + 1;
- });
- }
- } catch(e) {}
- });
-
- // Hides the roster when clicking away of Jappix Mini
- jQuery(document).click(function(evt) {
- if(!jQuery(evt.target).parents('#jappix_mini').size() && !JappixCommon.exists('#jappix_popup')) {
- self.hideRoster();
- }
- });
-
- // Hides all panes double clicking away of Jappix Mini
- jQuery(document).dblclick(function(evt) {
- if(!jQuery(evt.target).parents('#jappix_mini').size() && !JappixCommon.exists('#jappix_popup')) {
- self.switchPane();
- }
- });
-
- // Suspended session resumed?
- if(suspended) {
- // Initialized marker
- MINI_INITIALIZED = true;
-
- // Not resumed? (need to reconnect)
- if(!resumed) {
- // Restore previous reconnect counter
- var reconnect = JappixDataStore.getDB(MINI_HASH, 'jappix-mini', 'reconnect');
-
- if(!isNaN(reconnect)) {
- MINI_RECONNECT = parseInt(reconnect);
- }
-
- // Restore queued functions
- self.unserializeQueue();
-
- // Simulate a network error to get the same silent reconnect effect
- self.disconnected();
- }
-
- // Restore chat input values
- jQuery('#jappix_mini div.jm_conversation input.jm_send-messages').each(function() {
- var this_sub_sel = jQuery(this);
- var chat_value = this_sub_sel.attr('data-value');
-
- if(chat_value) {
- this_sub_sel.val(chat_value);
- }
- });
-
- // Restore roster filter value
- var search_box = jQuery('#jappix_mini div.jm_roster div.jm_search input.jm_searchbox');
- var filter_value = search_box.attr('data-value');
-
- if(filter_value) {
- search_box.val(filter_value).keyup();
- }
-
- // Restore buddy events
- self.eventsBuddy('#jappix_mini a.jm_friend');
-
- // Restore chat click events
- jQuery('#jappix_mini div.jm_conversation').each(function() {
- var this_sub_sel = jQuery(this);
- self.chatEvents(this_sub_sel.attr('data-type'), JappixCommon.unescapeQuotes(this_sub_sel.attr('data-xid')), this_sub_sel.attr('data-hash'));
- });
-
- // Restore init marker on all groupchats
- jQuery('#jappix_mini div.jm_conversation[data-type="groupchat"]').attr('data-init', 'true');
-
- // Scroll down to the last message
- var scroll_hash = jQuery('#jappix_mini div.jm_conversation:has(a.jm_pane.jm_clicked)').attr('data-hash');
- var scroll_position = JappixDataStore.getDB(MINI_HASH, 'jappix-mini', 'scroll');
-
- // Any scroll position?
- if(scroll_position) {
- scroll_position = parseInt(scroll_position);
- }
-
- if(scroll_hash) {
- // Use a timer to override the DOM lag issue
- jQuery(document).oneTime(200, function() {
- self.messageScroll(scroll_hash, scroll_position);
- });
- }
-
- // Update notification counters
- self.notifyCounters();
- }
-
- // Can auto-connect?
- else if(MINI_AUTOCONNECT) {
- self.connect(domain, user, password);
- }
-
- // Cannot auto-connect?
- else {
- // Chat text
- jQuery('#jappix_mini a.jm_pane.jm_button span.jm_counter').text(JappixCommon._e("Chat"));
-
- // Must animate?
- if(MINI_ANIMATE) {
- // Add content
- jQuery('#jappix_mini div.jm_starter').prepend(
- '<span class="jm_animate jm_images_animate"></span>'
- );
- }
- }
- } catch(e) {
- JappixConsole.error('JappixMini.create', e);
- }
-
- };
-
-
- /**
- * Buddy events
- * @public
- * @param {string} path
- * @return {undefined}
- */
- self.eventsBuddy = function(path) {
-
- try {
- var selector = jQuery(path);
-
- // Restore buddy click events
- selector.click(function() {
- // Using a try/catch override IE issues
- try {
- var this_sel = jQuery(this);
- self.chat('chat', JappixCommon.unescapeQuotes(this_sel.attr('data-xid')), JappixCommon.unescapeQuotes(this_sel.attr('data-nick')), this_sel.attr('data-hash'));
- }
-
- catch(e) {}
-
- finally {
- return false;
- }
- });
-
- // Restore buddy hover events
- selector.hover(function() {
- jQuery('#jappix_mini a.jm_friend.jm_hover').removeClass('jm_hover');
- jQuery(this).addClass('jm_hover');
- }, function() {
- jQuery(this).removeClass('jm_hover');
- });
-
- // Restore buddy mousedown events
- selector.mousedown(function() {
- jQuery('#jappix_mini a.jm_friend.jm_hover').removeClass('jm_hover');
- jQuery(this).addClass('jm_hover');
- });
-
- // Restore buddy focus events
- selector.focus(function() {
- jQuery('#jappix_mini a.jm_friend.jm_hover').removeClass('jm_hover');
- jQuery(this).addClass('jm_hover');
- });
-
- // Restore buddy blur events
- selector.blur(function() {
- jQuery(this).removeClass('jm_hover');
- });
- } catch(e) {
- JappixConsole.error('JappixMini.eventsBuddy', e);
- }
-
- };
-
-
- /**
- * Displays a given message
- * @public
- * @param {string} type
- * @param {string} body
- * @param {string} xid
- * @param {string} nick
- * @param {string} hash
- * @param {string} time
- * @param {string} stamp
- * @param {string} message_type
- * @return {undefined}
- */
- self.displayMessage = function(type, body, xid, nick, hash, time, stamp, message_type) {
-
- try {
- // Generate path
- var path = '#chat-' + hash;
-
- // Can scroll?
- var cont_scroll = document.getElementById('received-' + hash);
- var can_scroll = false;
-
- if(!cont_scroll.scrollTop || ((cont_scroll.clientHeight + cont_scroll.scrollTop) == cont_scroll.scrollHeight)) {
- can_scroll = true;
- }
-
- // Remove the previous message border if needed
- var last = jQuery(path + ' div.jm_group:last');
- var last_stamp = parseInt(last.attr('data-stamp'));
- var last_b = jQuery(path + ' b:last');
- var last_xid = last_b.attr('data-xid');
- var last_type = last.attr('data-type');
- var grouped = false;
- var header = '';
-
- if((last_xid == xid) && (message_type == last_type) && ((stamp - last_stamp) <= 1800)) {
- grouped = true;
- } else {
- // Write the message date
- if(nick)
- header += '<span class="jm_date">' + time + '</span>';
-
- // Write the buddy name at the top of the message group
- if(type == 'groupchat')
- header += '<b class="jm_name" style="color: ' + JappixCommon.generateColor(nick) + ';" data-xid="' + JappixCommon.encodeQuotes(xid) + '">' + nick.htmlEnc() + '</b>';
- else if(nick == 'me')
- header += '<b class="jm_name jm_me" data-xid="' + JappixCommon.encodeQuotes(xid) + '">' + JappixCommon._e("You") + '</b>';
- else
- header += '<b class="jm_name jm_him" data-xid="' + JappixCommon.encodeQuotes(xid) + '">' + nick.htmlEnc() + '</b>';
- }
-
- // Apply the /me command
- var me_command = false;
-
- if(body.match(/^\/me /i)) {
- body = body.replace(/^\/me /i, nick + ' ');
-
- // Marker
- me_command = true;
- }
-
- // HTML-encode the message
- body = body.htmlEnc();
-
- // Apply the smileys
- body = body.replace(/(;-?\))(\s|$)/gi, self.smiley('wink', '$1'))
- .replace(/(:-?3)(\s|$)/gi, self.smiley('waii', '$1'))
- .replace(/(:-?\()(\s|$)/gi, self.smiley('unhappy', '$1'))
- .replace(/(:-?P)(\s|$)/gi, self.smiley('tongue', '$1'))
- .replace(/(:-?O)(\s|$)/gi, self.smiley('surprised', '$1'))
- .replace(/(:-?\))(\s|$)/gi, self.smiley('smile', '$1'))
- .replace(/(\^_?\^)(\s|$)/gi, self.smiley('happy', '$1'))
- .replace(/(:-?D)(\s|$)/gi, self.smiley('grin', '$1'));
-
- // Format the text
- body = body.replace(/(^|\s|>|\()((\*)([^<>'"\*]+)(\*))($|\s|<|\))/gi, '$1<b>$2</b>$6')
- .replace(/(^|\s|>|\()((\/)([^<>'"\/]+)(\/))($|\s|<|\))/gi, '$1<em>$2</em>$6')
- .replace(/(^|\s|>|\()((_)([^<>'"_]+)(_))($|\s|<|\))/gi, '$1<span style="text-decoration: underline;">$2</span>$6');
-
- // Filter the links
- body = JappixLinks.apply(body, 'mini');
-
- // Generate the message code
- if(me_command) {
- body = '<em>' + body + '</em>';
- }
-
- body = '<p>' + body + '</p>';
-
- // Create the message
- if(grouped) {
- jQuery('#jappix_mini #chat-' + hash + ' div.jm_received-messages div.jm_group:last').append(body);
- } else {
- jQuery('#jappix_mini #chat-' + hash + ' div.jm_chatstate_typing').before('<div class="jm_group jm_' + message_type + '" data-type="' + message_type + '" data-stamp="' + stamp + '">' + header + body + '</div>');
- }
-
- // Scroll to this message
- if(can_scroll) {
- self.messageScroll(hash);
- }
- } catch(e) {
- JappixConsole.error('JappixMini.displayMessage', e);
- }
-
- };
-
-
- /**
- * Switches to a given point
- * @public
- * @param {string} element
- * @param {string} hash
- * @return {undefined}
- */
- self.switchPane = function(element, hash) {
-
- try {
- // Hide every item
- self.hideRoster();
- jQuery('#jappix_mini a.jm_pane').removeClass('jm_clicked');
- jQuery('#jappix_mini div.jm_chat-content').hide();
-
- // Show the asked element
- if(element && (element != 'roster')) {
- var current = '#jappix_mini #' + element;
-
- // Navigate to this chat
- if(jQuery(current).size() && jQuery(current).is(':hidden')) {
- var click_nav = '';
-
- // Before or after?
- if(jQuery('#jappix_mini div.jm_conversation:visible:first').prevAll().is('#' + element))
- click_nav = jQuery('#jappix_mini a.jm_switch.jm_left');
- else
- click_nav = jQuery('#jappix_mini a.jm_switch.jm_right');
-
- // Click previous or next
- if(click_nav) {
- while(jQuery(current).is(':hidden') && !click_nav.hasClass('jm_nonav'))
- click_nav.click();
- }
- }
-
- // Show it
- jQuery(current + ' a.jm_pane').addClass('jm_clicked');
- jQuery(current + ' div.jm_chat-content').show();
-
- // Use a timer to override the DOM lag issue
- jQuery(document).oneTime(10, function() {
- jQuery(current + ' input.jm_send-messages').focus();
- });
-
- // Scroll to the last message & adapt chat
- if(hash) {
- self.messageScroll(hash);
- self.updatePixStream(hash);
- }
- }
- } catch(e) {
- JappixConsole.error('JappixMini.switchPane', e);
- }
-
- };
-
-
- /**
- * Scrolls to the last chat message
- * @public
- * @param {string} hash
- * @param {string} position
- * @return {undefined}
- */
- self.messageScroll = function(hash, position) {
-
- try {
- var id = document.getElementById('received-' + hash);
-
- // No defined position?
- if(!position) {
- position = id.scrollHeight;
- }
-
- id.scrollTop = position;
- } catch(e) {
- JappixConsole.error('JappixMini.messageScroll', e);
- }
-
- };
-
-
- /**
- * Prompts the user with a given text
- * @public
- * @param {string} text
- * @param {string} value
- * @return {undefined}
- */
- self.openPrompt = function(text, value) {
-
- try {
- // Initialize
- var prompt = '#jappix_popup div.jm_prompt';
- var input = prompt + ' form input';
- var value_input = input + '[type="text"]';
-
- // Remove the existing prompt
- self.closePrompt();
-
- // Add the prompt
- jQuery('body').append(
- '<div id="jappix_popup" dir="' + (JappixCommon.isRTL() ? 'rtl' : 'ltr') + '">' +
- '<div class="jm_prompt">' +
- '<form>' +
- text +
- '<input class="jm_text" type="text" value="" />' +
- '<input class="jm_submit" type="submit" value="' + JappixCommon._e("Submit") + '" />' +
- '<input class="jm_submit" type="reset" value="' + JappixCommon._e("Cancel") + '" />' +
- '<div class="jm_clear"></div>' +
- '</form>' +
- '</div>' +
- '</div>'
- );
-
- // Vertical center
- var vert_pos = '-' + ((jQuery(prompt).height() / 2) + 10) + 'px';
- jQuery(prompt).css('margin-top', vert_pos);
-
- // Apply the value?
- if(value) {
- jQuery(value_input).val(value);
- }
-
- // Focus on the input
- jQuery(document).oneTime(10, function() {
- jQuery(value_input).focus();
- });
-
- // Cancel event
- jQuery(input + '[type="reset"]').click(function() {
- try {
- self.closePrompt();
- }
-
- catch(e) {}
-
- finally {
- return false;
- }
- });
- } catch(e) {
- JappixConsole.error('JappixMini.openPrompt', e);
- }
-
- };
-
-
- /**
- * Returns the prompt value
- * @public
- * @return {string}
- */
- self.closePrompt = function() {
-
- try {
- // Read the value
- var value = jQuery('#jappix_popup div.jm_prompt form input').val();
-
- // Remove the popup
- jQuery('#jappix_popup').remove();
-
- return value;
- } catch(e) {
- JappixConsole.error('JappixMini.closePrompt', e);
- }
-
- };
-
-
- /**
- * Opens the new groupchat prompt
- * @public
- * @return {undefined}
- */
- self.groupchatPrompt = function() {
-
- try {
- // Create a new prompt
- self.openPrompt(JappixCommon._e("Please enter the group chat address to join."));
-
- // When prompt submitted
- jQuery('#jappix_popup div.jm_prompt form').submit(function() {
- try {
- // Read the value
- var join_this = self.closePrompt();
-
- // Any submitted chat to join?
- if(join_this) {
- // Get the chat room to join
- chat_room = JappixCommon.bareXID(JappixCommon.generateXID(join_this, 'groupchat'));
-
- // Create a new groupchat
- self.chat('groupchat', chat_room, JappixCommon.getXIDNick(chat_room), hex_md5(chat_room));
- }
- }
-
- catch(e) {}
-
- finally {
- return false;
- }
- });
- } catch(e) {
- JappixConsole.error('JappixMini.groupchatPrompt', e);
- }
-
- };
-
-
- /**
- * Manages and creates a chat
- * @public
- * @param {string} type
- * @param {string} xid
- * @param {string} nick
- * @param {string} hash
- * @param {string} pwd
- * @param {boolean} show_pane
- * @return {boolean}
- */
- self.chat = function(type, xid, nick, hash, pwd, show_pane) {
-
- try {
- var current = '#jappix_mini #chat-' + hash;
- var nickname = null;
-
- // Not yet added?
- if(!JappixCommon.exists(current)) {
- // Groupchat nickname
- if(type == 'groupchat') {
- // Random nickname?
- if(!MINI_NICKNAME && MINI_RANDNICK)
- MINI_NICKNAME = self.randomNick();
-
- nickname = MINI_NICKNAME;
-
- // No nickname?
- if(!nickname) {
- // Create a new prompt
- self.openPrompt(JappixCommon.printf(JappixCommon._e("Please enter your nickname to join %s."), xid));
-
- // When prompt submitted
- jQuery('#jappix_popup div.jm_prompt form').submit(function() {
- try {
- // Read the value
- var nickname = self.closePrompt();
-
- // Update the stored one
- if(nickname) {
- MINI_NICKNAME = nickname;
- }
-
- // Launch it again!
- self.chat(type, xid, nick, hash, pwd);
- }
-
- catch(e) {}
-
- finally {
- return false;
- }
- });
-
- return;
- }
- }
-
- // Create the HTML markup
- var html = '<div class="jm_conversation jm_type_' + type + '" id="chat-' + hash + '" data-xid="' + JappixCommon.escapeQuotes(xid) + '" data-type="' + type + '" data-nick="' + JappixCommon.escapeQuotes(nick) + '" data-hash="' + hash + '" data-origin="' + JappixCommon.escapeQuotes(JappixCommon.cutResource(xid)) + '">' +
- '<div class="jm_chat-content">' +
- '<div class="jm_actions">' +
- '<span class="jm_nick">' + nick + '</span>';
-
- // Check if the chat/groupchat exists
- var groupchat_exists = false;
- var chat_exists = false;
-
- if((type == 'groupchat') && MINI_GROUPCHATS && MINI_GROUPCHATS.length) {
- for(var g in MINI_GROUPCHATS) {
- if(xid == JappixCommon.bareXID(JappixCommon.generateXID(MINI_GROUPCHATS[g], 'groupchat'))) {
- groupchat_exists = true;
-
- break;
- }
- }
- }
-
- if((type == 'chat') && MINI_CHATS && MINI_CHATS.length) {
- for(var c in MINI_CHATS) {
- if(xid == JappixCommon.bareXID(JappixCommon.generateXID(MINI_CHATS[c], 'chat'))) {
- chat_exists = true;
-
- break;
- }
- }
- }
-
- // Any close button to display?
- if(((type == 'groupchat') && !groupchat_exists) || ((type == 'chat') && !chat_exists) || ((type != 'groupchat') && (type != 'chat'))) {
- html += '<a class="jm_one-action jm_close jm_images" title="' + JappixCommon._e("Close") + '" href="#"></a>';
- }
-
- html +=
- '</div>' +
- '<div class="jm_pix_stream"></div>' +
-
- '<div class="jm_received-messages" id="received-' + hash + '">' +
- '<div class="jm_chatstate_typing">' + JappixCommon.printf(JappixCommon._e("%s is typing..."), nick.htmlEnc()) + '</div>' +
- '</div>' +
-
- '<form action="#" method="post">' +
- '<input type="text" class="jm_send-messages" name="body" autocomplete="off" placeholder="' + JappixCommon._e("Chat") + '" data-value="" />' +
- '<input type="hidden" name="xid" value="' + xid + '" />' +
- '<input type="hidden" name="type" value="' + type + '" />' +
- '</form>' +
- '</div>' +
-
- '<a class="jm_pane jm_chat-tab jm_images" href="#">' +
- '<span class="jm_name">' + nick.htmlEnc() + '</span>' +
- '</a>' +
- '</div>';
-
- jQuery('#jappix_mini div.jm_conversations').prepend(html);
-
- // Get the presence of this friend
- if(type != 'groupchat') {
- var selector = jQuery('#jappix_mini a#friend-' + hash + ' span.jm_presence');
-
- // Default presence
- var show = 'available';
-
- // Read the presence
- if(selector.hasClass('jm_unavailable') || !selector.size()) {
- show = 'unavailable';
- } else if(selector.hasClass('jm_chat')) {
- show = 'chat';
- } else if(selector.hasClass('jm_away')) {
- show = 'away';
- } else if(selector.hasClass('jm_xa')) {
- show = 'xa';
- } else if(selector.hasClass('jm_dnd')) {
- show = 'dnd';
- }
-
- // Create the presence marker
- jQuery(current + ' a.jm_chat-tab').prepend('<span class="jm_presence jm_images jm_' + show + '"></span>');
- }
-
- // The chat events
- self.chatEvents(type, xid, hash);
-
- // Join the groupchat
- if(type == 'groupchat') {
- // Add nickname & init values
- jQuery(current).attr('data-nick', JappixCommon.escapeQuotes(nickname))
- .attr('data-init', 'false');
-
- // Send the first groupchat presence
- self.presence('', '', '', '', xid + '/' + nickname, pwd, true, self.handleMUC);
- }
- }
-
- // Focus on our pane
- if(show_pane !== false) {
- jQuery(document).oneTime(10, function() {
- self.switchPane('chat-' + hash, hash);
- });
- }
-
- // Update chat overflow
- self.updateOverflow();
- } catch(e) {
- JappixConsole.error('JappixMini.chat', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Events on the chat tool
- * @public
- * @param {string} type
- * @param {string} xid
- * @param {string} hash
- * @return {undefined}
- */
- self.chatEvents = function(type, xid, hash) {
-
- try {
- var current_sel = jQuery('#jappix_mini #chat-' + hash);
-
- // Submit the form
- current_sel.find('form').submit(function() {
- return self.sendMessage(this);
- });
-
- // Click on the tab
- current_sel.find('a.jm_chat-tab').click(function() {
- // Using a try/catch override IE issues
- try {
- // Not yet opened: open it!
- if(!jQuery(this).hasClass('jm_clicked')) {
- // Show it!
- self.switchPane('chat-' + hash, hash);
-
- // Clear the eventual notifications
- self.clearNotifications(hash);
- } else {
- self.switchPane();
- }
- }
-
- catch(e) {}
-
- finally {
- return false;
- }
- });
-
- // Click on the close button
- current_sel.find('div.jm_actions').click(function(evt) {
- // Using a try/catch override IE issues
- try {
- // Close button?
- if(jQuery(evt.target).is('a.jm_close')) {
- // Gone chatstate
- if(type != 'groupchat') {
- self.sendChatstate('gone', xid, hash);
- }
-
- current_sel.stopTime().remove();
-
- // Quit the groupchat?
- if(type == 'groupchat') {
- // Send an unavailable presence
- self.presence('unavailable', '', '', '', xid + '/' + JappixCommon.unescapeQuotes(current_sel.attr('data-nick')));
-
- // Remove this groupchat!
- self.removeGroupchat(xid);
- }
-
- // Update chat overflow
- self.updateOverflow();
- } else {
- // Minimize current chat
- current_sel.find('a.jm_chat-tab.jm_clicked').click();
- }
- }
-
- catch(e) {}
-
- finally {
- return false;
- }
- });
-
- // Focus on the chat input
- current_sel.find('input.jm_send-messages').focus(function() {
- self.clearNotifications(hash);
- })
-
- // Change on the chat input
- .keyup(function() {
- var this_sel = jQuery(this);
- this_sel.attr('data-value', this_sel.val());
- })
-
- // Chat tabulate or escape press
- .keydown(function(e) {
- // Tabulate?
- if(e.keyCode == 9) {
- self.switchChat();
-
- return false;
- }
-
- // Escape?
- if(e.keyCode == 27) {
- if(current_sel.find('a.jm_close').size()) {
- // Open next/previous chat
- if(current_sel.next('div.jm_conversation').size()) {
- current_sel.next('div.jm_conversation').find('a.jm_pane').click();
- } else if(current_sel.prev('div.jm_conversation').size()) {
- current_sel.prev('div.jm_conversation').find('a.jm_pane').click();
- }
-
- // Close current chat
- current_sel.find('a.jm_close').click();
- }
-
- return false;
- }
- });
-
- // Focus/Blur events
- jQuery('#jappix_mini #chat-' + hash + ' input.jm_send-messages').focus(function() {
- // Store active chat
- MINI_ACTIVE = hash;
- })
-
- .blur(function() {
- // Reset active chat
- if(MINI_ACTIVE == hash) {
- MINI_ACTIVE = null;
- }
- });
-
- // Chatstate events
- self.eventsChatstate(xid, hash, type);
- } catch(e) {
- JappixConsole.error('JappixMini.chatEvents', e);
- }
-
- };
-
-
- /**
- * Opens the next chat
- * @public
- * @return {undefined}
- */
- self.switchChat = function() {
-
- try {
- if(jQuery('#jappix_mini div.jm_conversation').size() <= 1) {
- return;
- }
-
- // Get the current chat index
- var chat_index = jQuery('#jappix_mini div.jm_conversation:has(a.jm_pane.jm_clicked)').index();
- chat_index++;
-
- if(!chat_index) {
- chat_index = 0;
- }
-
- // No chat after?
- if(!jQuery('#jappix_mini div.jm_conversation').eq(chat_index).size()) {
- chat_index = 0;
- }
-
- // Avoid disabled chats
- while(jQuery('#jappix_mini div.jm_conversation').eq(chat_index).hasClass('jm_disabled')) {
- chat_index++;
- }
-
- // Show the next chat
- var chat_hash = jQuery('#jappix_mini div.jm_conversation').eq(chat_index).attr('data-hash');
-
- if(chat_hash) {
- self.switchPane('chat-' + chat_hash, chat_hash);
- }
- } catch(e) {
- JappixConsole.error('JappixMini.switchChat', e);
- }
-
- };
-
-
- /**
- * Shows the roster
- * @public
- * @return {undefined}
- */
- self.showRoster = function() {
-
- try {
- self.switchPane('roster');
- jQuery('#jappix_mini div.jm_roster').show();
- jQuery('#jappix_mini a.jm_button').addClass('jm_clicked');
-
- // Update groups visibility
- self.updateGroups();
-
- jQuery(document).oneTime(10, function() {
- jQuery('#jappix_mini div.jm_roster div.jm_search input.jm_searchbox').focus();
- });
- } catch(e) {
- JappixConsole.error('JappixMini.showRoster', e);
- }
-
- };
-
-
- /**
- * Hides the roster
- * @public
- * @return {undefined}
- */
- self.hideRoster = function() {
-
- try {
- // Close the roster pickers
- jQuery('#jappix_mini a.jm_status.active, #jappix_mini a.jm_join.active').click();
-
- // Hide the roster box
- jQuery('#jappix_mini div.jm_roster').hide();
- jQuery('#jappix_mini a.jm_button').removeClass('jm_clicked');
-
- // Clear the search box and show all online contacts
- jQuery('#jappix_mini div.jm_roster div.jm_search input.jm_searchbox').val('').attr('data-value', '');
- jQuery('#jappix_mini div.jm_roster div.jm_grouped').show();
- jQuery('#jappix_mini div.jm_roster div.jm_buddies a.jm_online').show();
- jQuery('#jappix_mini a.jm_friend.jm_hover').removeClass('jm_hover');
- } catch(e) {
- JappixConsole.error('JappixMini.hideRoster', e);
- }
-
- };
-
-
- /**
- * Removes a groupchat from DOM
- * @public
- * @param {string} xid
- * @return {undefined}
- */
- self.removeGroupchat = function(xid) {
-
- try {
- // Remove the groupchat private chats & the groupchat buddies from the roster
- jQuery('#jappix_mini div.jm_conversation[data-origin="' + JappixCommon.escapeQuotes(JappixCommon.cutResource(xid)) + '"], #jappix_mini div.jm_roster div.jm_grouped[data-xid="' + JappixCommon.escapeQuotes(xid) + '"]').remove();
-
- // Update the presence counter
- self.updateRoster();
- } catch(e) {
- JappixConsole.error('JappixMini.removeGroupchat', e);
- }
-
- };
-
-
- /**
- * Initializes Jappix Mini
- * @public
- * @return {undefined}
- */
- self.initialize = function() {
-
- try {
- // Update the marker
- MINI_INITIALIZED = true;
-
- // Send the initial presence
- self.presence();
-
- // Join the groupchats (first)
- for(var i = 0; i < MINI_GROUPCHATS.length; i++) {
- // Empty value?
- if(!MINI_GROUPCHATS[i]) {
- continue;
- }
-
- // Using a try/catch override IE issues
- try {
- // Current chat room
- var chat_room = JappixCommon.bareXID(JappixCommon.generateXID(MINI_GROUPCHATS[i], 'groupchat'));
-
- // Open the current chat
- self.chat('groupchat', chat_room, JappixCommon.getXIDNick(chat_room), hex_md5(chat_room), MINI_PASSWORDS[i], MINI_SHOWPANE);
- }
-
- catch(e) {}
- }
-
- // Join the chats (then)
- for(var j = 0; j < MINI_CHATS.length; j++) {
- // Empty value?
- if(!MINI_CHATS[j]) {
- continue;
- }
-
- // Using a try/catch override IE issues
- try {
- // Current chat user
- var chat_xid = JappixCommon.bareXID(JappixCommon.generateXID(MINI_CHATS[j], 'chat'));
- var chat_hash = hex_md5(chat_xid);
- var chat_nick = jQuery('#jappix_mini a#friend-' + chat_hash).attr('data-nick');
-
- if(!chat_nick) {
- chat_nick = JappixCommon.getXIDNick(chat_xid);
- } else {
- chat_nick = JappixCommon.unescapeQuotes(chat_nick);
- }
-
- // Open the current chat
- self.chat('chat', chat_xid, chat_nick, chat_hash);
- }
-
- catch(e) {}
- }
-
- // Must show the roster?
- if(!MINI_AUTOCONNECT && !MINI_GROUPCHATS.length && !MINI_CHATS.length) {
- jQuery(document).oneTime(10, function() {
- self.showRoster();
- });
- }
- } catch(e) {
- JappixConsole.error('JappixMini.initialize', e);
- }
-
- };
-
-
- /**
- * Displays a list of roster buddy
- * @public
- * @param {object} buddy_arr
- * @return {boolean}
- */
- self.addListBuddy = function(buddy_arr) {
-
- try {
- var c, b,
- nick, hash, xid, subscription;
-
- var buddy_str = '';
-
- // Loop on groups
- for(c in buddy_arr) {
- buddy_arr[c] = buddy_arr[c].sort();
-
- // Group: start
- if(c != MINI_ROSTER_NOGROUP) {
- buddy_str += '<div class="jm_grouped jm_grouped_roster" data-name="' + JappixCommon.escapeQuotes(c) + '">';
- buddy_str += '<div class="jm_name">' + c.htmlEnc() + '</div>';
- }
-
- // Loop on buddies
- for(b in buddy_arr[c]) {
- // Current buddy data
- buddy_str += self.codeAddBuddy(
- buddy_arr[c][b][0],
- buddy_arr[c][b][1],
- buddy_arr[c][b][2],
- buddy_arr[c][b][3],
- false
- );
- }
-
- // Group: end
- if(c != MINI_ROSTER_NOGROUP) {
- buddy_str += '</div>';
- }
- }
-
- // Append code
- jQuery('#jappix_mini div.jm_roster div.jm_buddies').html(buddy_str);
-
- // Events on these buddies
- self.eventsBuddy('#jappix_mini a.jm_friend');
-
- return true;
- } catch(e) {
- JappixConsole.error('JappixMini.addListBuddy', e);
-
- return false;
- }
-
- };
-
-
- /**
- * Displays a roster buddy
- * @public
- * @param {string} xid
- * @param {string} hash
- * @param {string} nick
- * @param {string} groupchat
- * @param {string} subscription
- * @param {string} group
- * @return {boolean}
- */
- self.addBuddy = function(xid, hash, nick, groupchat, subscription, group) {
-
- try {
- var bare_xid = JappixCommon.bareXID(xid);
-
- // Element
- var element = '#jappix_mini a#friend-' + hash;
-
- // Yet added?
- if(JappixCommon.exists(element)) {
- jQuery(element).remove();
- }
-
- // Generate the path
- var path = '#jappix_mini div.jm_roster div.jm_buddies';
-
- // Generate the groupchat group path
- if(groupchat) {
- path = '#jappix_mini div.jm_roster div.jm_grouped_groupchat[data-xid="' + JappixCommon.escapeQuotes(bare_xid) + '"]';
-
- // Must add a groupchat group?
- if(!JappixCommon.exists(path)) {
- jQuery('#jappix_mini div.jm_roster div.jm_buddies').append(
- '<div class="jm_grouped jm_grouped_groupchat" data-xid="' + JappixCommon.escapeQuotes(bare_xid) + '">' +
- '<div class="jm_name">' + JappixCommon.getXIDNick(groupchat).htmlEnc() + '</div>' +
- '</div>'
- );
- }
- } else if(group) {
- path = '#jappix_mini div.jm_roster div.jm_grouped_roster[data-name="' + JappixCommon.escapeQuotes(group) + '"]';
-
- // Must add a roster group?
- if(!JappixCommon.exists(path)) {
- jQuery('#jappix_mini div.jm_roster div.jm_buddies').append(
- '<div class="jm_grouped jm_grouped_roster" data-name="' + JappixCommon.escapeQuotes(group) + '">' +
- '<div class="jm_name">' + group.htmlEnc() + '</div>' +
- '</div>'
- );
- }
- }
-
- // Append this buddy content
- var code = self.codeAddBuddy(
- nick,
- hash,
- xid,
- subscription
- );
-
- if(groupchat || group) {
- jQuery(path).append(code);
- } else {
- jQuery(path).prepend(code);
- }
-
- // Need to hide this buddy?
- if(jQuery('#jappix_mini div.jm_actions a.jm_toggle_view.jm_toggled').size()) {
- jQuery(element).filter('.jm_offline').hide();
- }
-
- // Events on this buddy
- self.eventsBuddy(element);
-
- return true;
- } catch(e) {
- JappixConsole.error('JappixMini.addBuddy', e);
-
- return false;
- }
-
- };
-
-
- /**
- * Returns the code for a single buddy to add
- * @public
- * @param {string} nick
- * @param {string} hash
- * @param {string} xid
- * @param {string} subscription
- * @return {string}
- */
- self.codeAddBuddy = function(nick, hash, xid, subscription) {
-
- var buddy_str = '';
-
- try {
- // Buddy: start
- buddy_str += '<a class="jm_friend jm_offline jm_friend-' + hash;
- buddy_str += '" id="friend-' + hash;
- buddy_str += '" title="' + JappixCommon.encodeQuotes(xid) + '"';
- buddy_str += '" data-xid="' + JappixCommon.escapeQuotes(xid) + '"';
- buddy_str += '" data-nick="' + JappixCommon.escapeQuotes(nick) + '"';
- buddy_str += '" data-hash="' + hash + '"';
- buddy_str += ' ' + (subscription ? ' data-sub="' + subscription + '" ' : '');
- buddy_str += '>';
-
- // Buddy: inner
- buddy_str += '<span class="jm_presence jm_images jm_unavailable"></span>';
- buddy_str += nick.htmlEnc();
- buddy_str += '<span class="jm_jingle_icon jm_images"></span>';
-
- // Buddy: end
- buddy_str += '</a>';
- } catch(e) {
- JappixConsole.error('JappixMini.codeAddBuddy', e);
- } finally {
- return buddy_str;
- }
-
- };
-
-
- /**
- * Removes a roster buddy
- * @public
- * @param {string} hash
- * @param {string} groupchat
- * @return {undefined}
- */
- self.removeBuddy = function(hash, groupchat) {
-
- try {
- // Remove the buddy from the roster
- jQuery('#jappix_mini a#friend-' + hash).remove();
-
- // Empty group?
- var group = '#jappix_mini div.jm_roster div.jm_grouped_groupchat[data-xid="' + JappixCommon.escapeQuotes(groupchat) + '"]';
-
- if(groupchat && !jQuery(group + ' a.jm_friend').size()) {
- jQuery(group).remove();
- }
-
- return true;
- } catch(e) {
- JappixConsole.error('JappixMini.removeBuddy', e);
-
- return false;
- }
-
- };
-
-
- /**
- * Gets the user's roster
- * @public
- * @return {undefined}
- */
- self.getRoster = function() {
-
- try {
- var iq = new JSJaCIQ();
- iq.setType('get');
- iq.setQuery(NS_ROSTER);
- con.send(iq, self.handleRoster);
-
- JappixConsole.info('Getting roster...');
- } catch(e) {
- JappixConsole.error('JappixMini.getRoster', e);
- }
-
- };
-
-
- /**
- * Handles the user's roster
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleRoster = function(iq) {
-
- try {
- var buddies, pointer,
- cur_buddy, cur_groups, cur_group,
- current, xid, subscription,
- nick, hash, j, c;
-
- // Added to sort buddies by name
- buddies = {};
- pointer = {};
-
- // Parse the roster
- jQuery(iq.getQuery()).find('item').each(function() {
- var this_sub_sel = jQuery(this);
-
- // Get the values
- current = this_sub_sel;
- xid = current.attr('jid');
- subscription = current.attr('subscription');
-
- // Not a gateway
- if(!JappixCommon.isGateway(xid)) {
- // Read current values
- nick = current.attr('name');
- hash = hex_md5(xid);
-
- // No name defined?
- if(!nick) nick = JappixCommon.getXIDNick(xid);
-
- // Populate buddy array
- cur_buddy = [];
-
- cur_buddy[0] = nick;
- cur_buddy[1] = hash;
- cur_buddy[2] = xid;
- cur_buddy[3] = subscription;
-
- // Append to groups this buddy belongs to
- cur_groups = {};
-
- if(this_sub_sel.find('group').size()) {
- this_sub_sel.find('group').each(function() {
- cur_group = jQuery(this).text();
-
- if(cur_group) {
- cur_groups[cur_group] = 1;
- }
- });
- } else {
- cur_groups[MINI_ROSTER_NOGROUP] = 1;
- }
-
- for(var cur_group in cur_groups) {
- // Prepare multidimentional array
- if(typeof pointer[cur_group] != 'number') {
- pointer[cur_group] = 0;
- }
-
- if(typeof buddies[cur_group] != 'object') {
- buddies[cur_group] = [];
- }
-
- // Push buddy data
- buddies[cur_group][(pointer[cur_group])++] = cur_buddy;
- }
- }
- });
-
- // No buddies? (ATM)
- if(!MINI_ROSTER_INIT) {
- MINI_ROSTER_INIT = true;
-
- self.addListBuddy(buddies);
- } else {
- for(c in buddies) {
- for(j = 0; j < buddies[c].length; j++) {
- if(!buddies[c][j]) {
- continue;
- }
-
- // Current buddy information
- nick = buddies[c][j][0];
- hash = buddies[c][j][1];
- xid = buddies[c][j][2];
- subscription = buddies[c][j][3];
-
- // Apply current buddy action
- if(subscription == 'remove') {
- self.removeBuddy(hash);
- } else {
- self.addBuddy(xid, hash, nick, null, subscription, (c != MINI_ROSTER_NOGROUP ? c : null));
- }
- }
- }
- }
-
- // Not yet initialized
- if(!MINI_INITIALIZED) {
- self.initialize();
- }
-
- JappixConsole.info('Roster got.');
- } catch(e) {
- JappixConsole.error('JappixMini.handleRoster', e);
- }
-
- };
-
-
- /**
- * Adapts the roster height to the window
- * @public
- * @return {undefined}
- */
- self.adaptRoster = function() {
-
- try {
- // Adapt buddy list height
- var roster_height = jQuery(window).height() - 85;
- jQuery('#jappix_mini div.jm_roster div.jm_buddies').css('max-height', roster_height);
-
- // Adapt chan suggest height
- var suggest_height = jQuery('#jappix_mini div.jm_roster').height() - 46;
- jQuery('#jappix_mini div.jm_chan_suggest').css('max-height', suggest_height);
- } catch(e) {
- JappixConsole.error('JappixMini.adaptRoster', e);
- }
-
- };
-
-
- /**
- * Generates a random nickname
- * @public
- * @return {string}
- */
- self.randomNick = function() {
-
- try {
- // First nickname block
- var first_arr = [
- 'Just',
- 'Bob',
- 'Jar',
- 'Pedr',
- 'Yod',
- 'Maz',
- 'Vez',
- 'Car',
- 'Erw',
- 'Tiet',
- 'Iot',
- 'Wal',
- 'Bez',
- 'Pop',
- 'Klop',
- 'Zaz',
- 'Yoy',
- 'Raz'
- ];
-
- // Second nickname block
- var second_arr = [
- 'io',
- 'ice',
- 'a',
- 'u',
- 'o',
- 'ou',
- 'oi',
- 'ana',
- 'oro',
- 'izi',
- 'ozo',
- 'aza',
- 'ato',
- 'ito',
- 'ofa',
- 'oki',
- 'ima',
- 'omi'
- ];
-
- // Last nickname block
- var last_arr = [
- 't',
- 'z',
- 'r',
- 'n',
- 'tt',
- 'zz',
- 'pp',
- 'j',
- 'k',
- 'v',
- 'c',
- 'x',
- 'ti',
- 'to',
- 'ta',
- 'ra',
- 'ro',
- 'ri'
- ];
-
- // Select random values from the arrays
- var rand_nick = JappixCommon.randomArrayValue(first_arr) +
- JappixCommon.randomArrayValue(second_arr) +
- JappixCommon.randomArrayValue(last_arr);
-
- return rand_nick;
- } catch(e) {
- JappixConsole.error('JappixMini.randomNick', e);
- }
-
- };
-
-
- /**
- * Sends a given chatstate to a given entity
- * @public
- * @param {string} state
- * @param {string} xid
- * @param {string} hash
- * @return {undefined}
- */
- self.sendChatstate = function(state, xid, hash) {
-
- try {
- var user_type = jQuery('#jappix_mini #chat-' + hash).attr('data-type');
- var user_storage = jQuery('#jappix_mini #chat-' + hash + ' input.jm_send-messages');
-
- // If the friend client supports chatstates and is online
- if((user_type == 'groupchat') || ((user_type == 'chat') && user_storage.attr('data-chatstates') && !JappixCommon.exists('#jappix_mini a#friend-' + hash + '.jm_offline'))) {
- // Already sent?
- if(user_storage.attr('data-chatstate') == state) {
- return;
- }
-
- // Store the state
- user_storage.attr('data-chatstate', state);
-
- // Send the state
- var aMsg = new JSJaCMessage();
- aMsg.setTo(xid);
- aMsg.setType(user_type);
-
- aMsg.appendNode(state, {'xmlns': NS_CHATSTATES});
-
- con.send(aMsg);
-
- JappixConsole.log('Sent ' + state + ' chatstate to ' + xid);
- }
- } catch(e) {
- JappixConsole.error('JappixMini.sendChatstate', e);
- }
-
- };
-
-
- /**
- * Displays a given chatstate in a given chat
- * @public
- * @param {string} state
- * @param {string} xid
- * @param {string} hash
- * @param {string} type
- * @return {undefined}
- */
- self.displayChatstate = function(state, xid, hash, type) {
-
- try {
- // Groupchat not supported
- if(type == 'groupchat') {
- return;
- }
-
- // Composing?
- if(state == 'composing') {
- jQuery('#jappix_mini #chat-' + hash + ' div.jm_chatstate_typing').css('visibility', 'visible');
- } else {
- self.resetChatstate(xid, hash, type);
- }
-
- JappixConsole.log('Received ' + state + ' chatstate from ' + xid);
- } catch(e) {
- JappixConsole.error('JappixMini.displayChatstate', e);
- }
-
- };
-
-
- /**
- * Resets the chatstate switcher marker
- * @public
- * @param {string} xid
- * @param {string} hash
- * @param {string} type
- * @return {undefined}
- */
- self.resetChatstate = function(xid, hash, type) {
-
- try {
- // Groupchat not supported
- if(type == 'groupchat') {
- return;
- }
-
- jQuery('#jappix_mini #chat-' + hash + ' div.jm_chatstate_typing').css('visibility', 'hidden');
- } catch(e) {
- JappixConsole.error('JappixMini.resetChatstate', e);
- }
-
- };
-
-
- /**
- * Adds the chatstate events
- * @public
- * @param {string} xid
- * @param {string} hash
- * @param {string} type
- * @return {undefined}
- */
- self.eventsChatstate = function(xid, hash, type) {
-
- try {
- // Groupchat not supported
- if(type == 'groupchat') {
- return;
- }
-
- jQuery('#jappix_mini #chat-' + hash + ' input.jm_send-messages').keyup(function(e) {
- var this_sel = jQuery(this);
-
- if(e.keyCode != 13) {
- // Composing a message
- if(this_sel.val() && (this_sel.attr('data-composing') != 'on')) {
- // We change the state detect input
- this_sel.attr('data-composing', 'on');
-
- // We send the friend a "composing" chatstate
- self.sendChatstate('composing', xid, hash);
- }
-
- // Stopped composing a message
- else if(!this_sel.val() && (this_sel.attr('data-composing') == 'on')) {
- // We change the state detect input
- this_sel.attr('data-composing', 'off');
-
- // We send the friend an "active" chatstate
- self.sendChatstate('active', xid, hash);
- }
- }
- })
-
- .change(function() {
- // Reset the composing database entry
- jQuery(this).attr('data-composing', 'off');
- })
-
- .focus(function() {
- var this_sel = jQuery(this);
-
- // Not needed
- if(this_sel.is(':disabled')) {
- return;
- }
-
- // Nothing in the input, user is active
- if(!this_sel.val()) {
- self.sendChatstate('active', xid, hash);
- } else {
- self.sendChatstate('composing', xid, hash);
- }
- })
-
- .blur(function() {
- var this_sel = jQuery(this);
-
- // Not needed
- if(this_sel.is(':disabled')) {
- return;
- }
-
- // Nothing in the input, user is inactive
- if(!this_sel.val()) {
- self.sendChatstate('inactive', xid, hash);
- } else {
- self.sendChatstate('paused', xid, hash);
- }
- });
- } catch(e) {
- JappixConsole.error('JappixMini.eventsChatstate', e);
- }
-
- };
-
-
- /**
- * Plays a sound
- * @public
- * @return {boolean}
- */
- self.soundPlay = function() {
-
- try {
- // Not supported!
- if((BrowserDetect.browser == 'Explorer') && (BrowserDetect.version < 9)) {
- return false;
- }
-
- // Append the sound container
- if(!JappixCommon.exists('#jappix_mini #jm_audio')) {
- jQuery('#jappix_mini').append(
- '<div id="jm_audio">' +
- '<audio preload="auto">' +
- '<source src="' + JAPPIX_STATIC + 'sounds/receive-message.mp3" />' +
- '<source src="' + JAPPIX_STATIC + 'sounds/receive-message.oga" />' +
- '</audio>' +
- '</div>'
- );
- }
-
- // Play the sound
- var audio_select = document.getElementById('jm_audio').getElementsByTagName('audio')[0];
-
- // Avoids Safari bug (2011 and less versions)
- try {
- audio_select.load();
- } finally {
- audio_select.play();
- }
- } catch(e) {
- JappixConsole.error('JappixMini.soundPlay', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Adapts chat size
- * @public
- * @param {string} conversation_path
- * @return {undefined}
- */
- self.adaptChat = function(conversation_path) {
-
- try {
- var conversation_sel = jQuery('#jappix_mini div.jm_conversation');
-
- if(conversation_path) {
- conversation_sel = conversation_sel.filter(conversation_path);
- }
-
- if(conversation_sel.size()) {
- // Reset before doing anything else...
- conversation_sel.find('div.jm_received-messages').css({
- 'max-height': 'none',
- 'margin-top': 0
- });
-
- // Update sizes of chat
- var pix_stream_sel = conversation_sel.find('div.jm_pix_stream');
- var received_messages_sel = conversation_sel.find('div.jm_received-messages');
- var pix_stream_height = pix_stream_sel.height();
-
- if(pix_stream_sel.find('*').size() && pix_stream_height > 0) {
- received_messages_sel.css({
- 'margin-top': pix_stream_height,
- 'max-height': (received_messages_sel.height() - pix_stream_sel.height())
- });
- }
- }
- } catch(e) {
- JappixConsole.error('JappixMini.adaptChat', e);
- }
-
- };
-
-
- /**
- * Updates given pixel stream
- * @public
- * @param {string} hash
- * @return {undefined}
- */
- self.updatePixStream = function(hash) {
-
- try {
- // Feature supported? (we rely on local storage)
- if(window.localStorage !== undefined) {
- // Select chat(s)
- var conversation_path = '#chat-' + hash;
- var conversation_sel = jQuery('#jappix_mini div.jm_conversation');
- var conversation_all_sel = conversation_sel;
-
- if(hash) {
- conversation_sel = conversation_sel.filter(conversation_path);
- } else {
- conversation_sel = conversation_sel.filter(':has(div.jm_chat-content:visible):first');
-
- if(conversation_sel.size()) {
- conversation_path = '#' + conversation_sel.attr('id');
- } else {
- conversation_path = null;
- }
- }
-
- // Parse stored dates
- var stamp_now = JappixDateUtils.getTimeStamp();
- var stamp_start = JappixDataStore.getPersistent(MINI_HASH, 'pixel-stream', 'start');
- var stamp_end = JappixDataStore.getPersistent(MINI_HASH, 'pixel-stream', 'end');
-
- var in_schedule = false;
- var to_reschedule = true;
-
- if(stamp_start && stamp_end && !isNaN(stamp_start) && !isNaN(stamp_end)) {
- stamp_start = parseInt(stamp_start, 10);
- stamp_end = parseInt(stamp_end, 10);
-
- in_schedule = (stamp_now >= stamp_start && stamp_end >= stamp_now);
- to_reschedule = (stamp_now >= stamp_end + MINI_PIXEL_STREAM_INTERVAL);
- }
-
- // Should add ads?
- if(in_schedule || to_reschedule) {
- // Store new schedules
- if(to_reschedule) {
- JappixDataStore.setPersistent(MINI_HASH, 'pixel-stream', 'start', stamp_now);
- JappixDataStore.setPersistent(MINI_HASH, 'pixel-stream', 'end', stamp_now + MINI_PIXEL_STREAM_DURATION);
- }
-
- // Process HTML code
- if(conversation_path && ADS_ENABLE === 'on' && GADS_CLIENT && GADS_SLOT) {
- var pix_stream_sel = conversation_sel.find('div.jm_pix_stream');
-
- if(!pix_stream_sel.find('*').size()) {
- JappixConsole.info('JappixMini.updatePixStream', 'Loading pixel stream...');
-
- var pix_stream_other_added = conversation_all_sel.find('div.jm_pix_stream ins.adsbygoogle:first').clone();
-
- if(pix_stream_other_added.size()) {
- JappixConsole.log('JappixMini.updatePixStream', 'Copy existing pixel stream from DOM');
-
- pix_stream_sel.html(pix_stream_other_added);
- } else {
- JappixConsole.log('JappixMini.updatePixStream', 'Fetch fresh pixel stream from server');
-
- pix_stream_sel.html(
- '<ins class="adsbygoogle"' +
- 'style="display:block;width:320px;height:50px;"' +
- 'data-ad-client="' + JappixCommon.encodeQuotes(GADS_CLIENT) + '"' +
- 'data-ad-slot="' + JappixCommon.encodeQuotes(GADS_SLOT) + '"></ins>' +
- '<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>'
- );
- }
-
- jQuery.getScript('//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js', function() {
- self.adaptChat(conversation_path);
-
- JappixConsole.info('JappixMini.updatePixStream', 'Finished loading pixel stream');
- });
- } else {
- JappixConsole.info('JappixMini.updatePixStream', 'Pixel stream already loaded');
- }
- } else {
- self.resetPixStream();
- }
- } else {
- self.resetPixStream();
- }
-
- // Update chat height
- if(conversation_path) {
- self.adaptChat(conversation_path);
- }
- }
- } catch(e) {
- JappixConsole.error('JappixMini.updatePixStream', e);
- }
-
- };
-
-
- /**
- * Resets all pixel streams
- * @public
- * @return {undefined}
- */
- self.resetPixStream = function() {
-
- try {
- jQuery('#jappix_mini div.jm_pix_stream').empty();
- } catch(e) {
- JappixConsole.error('JappixMini.resetPixStream', e);
- }
-
- };
-
-
- /**
- * Returns whether browser is legacy/unsupported or not (IE 7 and less)
- * @public
- * @return {undefined}
- */
- self.isLegacy = function() {
-
- try {
- return BrowserDetect.browser == 'Explorer' && BrowserDetect.version <= 7;
- } catch(e) {
- JappixConsole.error('JappixMini.isLegacy', e);
- }
-
- };
-
-
- /**
- * Loads the Jappix Mini stylesheet
- * @public
- * @return {boolean}
- */
- self.loadStylesheet = function() {
-
- try {
- var css_url = [];
- var css_html = '';
-
- // Do we know the optimized Get API path?
- if(JAPPIX_MINI_CSS) {
- css_url.push(JAPPIX_MINI_CSS);
- } else {
- // Fallback to non-optimized way, used with standalone Jappix Mini
- css_url.push(JAPPIX_STATIC + 'stylesheets/mini.css');
- }
-
- // Append final stylesheet HTML
- for(var u in css_url) {
- css_html += '<link rel="stylesheet" href="' + JappixCommon.encodeQuotes(css_url[u].replace(/&amp;/g, '&')) + '" type="text/css" media="all" />';
- }
-
- jQuery('head').append(css_html);
-
- return true;
- } catch(e) {
- JappixConsole.error('JappixMini.loadStylesheet', e);
-
- return false;
- }
-
- };
-
-
- /**
- * Plugin configurator
- * @public
- * @param {object} config_args
- * @return {undefined}
- */
- self.configure = function(config_args) {
-
- try {
- if(typeof config_args !== 'object') {
- config_args = {};
- }
-
- // Read configuration subs
- connection_config = config_args.connection || {};
- application_config = config_args.application || {};
-
- application_network_config = application_config.network || {};
- application_interface_config = application_config.interface || {};
- application_user_config = application_config.user || {};
- application_chat_config = application_config.chat || {};
- application_groupchat_config = application_config.groupchat || {};
-
- // Apply new configuration (falling back to defaults if not set)
- MINI_AUTOCONNECT = application_network_config.autoconnect || MINI_AUTOCONNECT;
- MINI_SHOWPANE = application_interface_config.showpane || MINI_SHOWPANE;
- MINI_ANIMATE = application_interface_config.animate || MINI_ANIMATE;
- MINI_RANDNICK = application_user_config.random_nickname || MINI_RANDNICK;
- MINI_GROUPCHAT_PRESENCE = application_groupchat_config.show_presence || MINI_GROUPCHAT_PRESENCE;
- MINI_DISABLE_MOBILE = application_interface_config.no_mobile || MINI_DISABLE_MOBILE;
- MINI_NICKNAME = application_user_config.nickname || MINI_NICKNAME;
- MINI_DOMAIN = connection_config.domain || MINI_DOMAIN;
- MINI_USER = connection_config.user || MINI_USER;
- MINI_PASSWORD = connection_config.password || MINI_PASSWORD;
- MINI_RECONNECT_MAX = application_network_config.reconnect_max || MINI_RECONNECT_MAX;
- MINI_RECONNECT_INTERVAL = application_network_config.reconnect_interval || MINI_RECONNECT_INTERVAL;
- MINI_CHATS = application_chat_config.open || MINI_CHATS;
- MINI_GROUPCHATS = application_groupchat_config.open || MINI_GROUPCHATS;
- MINI_SUGGEST_CHATS = application_chat_config.suggest || MINI_CHATS;
- MINI_SUGGEST_GROUPCHATS = application_groupchat_config.suggest || MINI_SUGGEST_GROUPCHATS;
- MINI_SUGGEST_PASSWORDS = application_groupchat_config.suggest_passwords || MINI_SUGGEST_PASSWORDS;
- MINI_PASSWORDS = application_groupchat_config.open_passwords || MINI_PASSWORDS;
- MINI_PRIORITY = connection_config.priority || MINI_PRIORITY;
- MINI_RESOURCE = connection_config.resource || MINI_RESOURCE;
- MINI_ERROR_LINK = application_interface_config.error_link || MINI_ERROR_LINK;
- } catch(e) {
- JappixConsole.error('JappixMini.configure', e);
- }
-
- };
-
-
- /**
- * Plugin processor
- * @public
- * @param {boolean} autoconnect
- * @param {boolean} show_pane
- * @param {string} domain
- * @param {string} user
- * @param {string} password
- * @param {number} priority
- * @return {undefined}
- */
- self.process = function(autoconnect, show_pane, domain, user, password, priority) {
-
- try {
- // Disabled on mobile?
- if(MINI_DISABLE_MOBILE && JappixCommon.isMobile()) {
- JappixConsole.log('Jappix Mini disabled on mobile.'); return;
- }
-
- // Legacy browser? (unsupported)
- if(self.isLegacy()) {
- JappixConsole.warn('Jappix Mini cannot load on this browser (unsupported because too old)'); return;
- }
-
- // Save infos to reconnect
- MINI_DOMAIN = domain;
- MINI_USER = user;
- MINI_PASSWORD = password;
- MINI_HASH = 'jm.' + hex_md5(MINI_USER + '@' + MINI_DOMAIN);
-
- if(priority !== undefined) {
- MINI_PRIORITY = priority;
- }
-
- // Anonymous mode?
- if(!user || !password) {
- MINI_ANONYMOUS = true;
- } else {
- MINI_ANONYMOUS = false;
- }
-
- // Autoconnect (only if storage available to avoid floods)?
- if(autoconnect && JappixDataStore.hasDB()) {
- MINI_AUTOCONNECT = true;
- } else {
- MINI_AUTOCONNECT = false;
- }
-
- // Show pane?
- if(show_pane) {
- MINI_SHOWPANE = true;
- } else {
- MINI_SHOWPANE = false;
- }
-
- // Remove Jappix Mini
- jQuery('#jappix_mini').remove();
-
- // Reconnect?
- if(MINI_RECONNECT) {
- JappixConsole.log('Trying to reconnect (try: ' + MINI_RECONNECT + ')!');
-
- return self.create(domain, user, password);
- }
-
- // Load the Mini stylesheet
- self.loadStylesheet();
-
- // Disables the browser HTTP-requests stopper
- jQuery(document).keydown(function(e) {
- if((e.keyCode == 27) && !JappixSystem.isDeveloper()) {
- return false;
- }
- });
-
- // Save the page title
- MINI_TITLE = document.title;
-
- // Adapts the content to the window size
- jQuery(window).resize(function() {
- self.adaptRoster();
- self.updateOverflow();
- });
-
- // Logouts when Jappix is closed
- if(BrowserDetect.browser == 'Opera') {
- // Emulates onbeforeunload on Opera (link clicked)
- jQuery('a[href]:not([onclick])').click(function() {
- var this_sel = jQuery(this);
-
- // Link attributes
- var href = this_sel.attr('href') || '';
- var target = this_sel.attr('target') || '';
-
- // Not new window or JS link
- if(href && !href.match(/^#/i) && !target.match(/_blank|_new/i)) {
- self.saveSession();
- }
- });
-
- // Emulates onbeforeunload on Opera (form submitted)
- jQuery('form:not([onsubmit])').submit(self.saveSession);
- }
-
- jQuery(window).bind('beforeunload', self.saveSession);
-
- // Create the Jappix Mini DOM content
- self.create(domain, user, password);
-
- JappixConsole.log('Welcome to Jappix Mini! Happy coding in developer mode!');
- } catch(e) {
- JappixConsole.error('JappixMini.process', e);
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @param {object} args
- * @return {undefined}
- */
- self.launch = function(args) {
-
- try {
- // Configure the app
- self.configure(args);
-
- // Initialize the app!
- self.process(
- MINI_AUTOCONNECT,
- MINI_SHOWPANE,
- MINI_DOMAIN,
- MINI_USER,
- MINI_PASSWORD,
- MINI_PRIORITY
- );
- } catch(e) {
- JappixConsole.error('JappixMini.launch', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
-
-/* Legacy compatibility layer */
-var launchMini = JappixMini.process;
diff --git a/app/javascripts/mobile.js b/app/javascripts/mobile.js
deleted file mode 100644
index 99ad6788..00000000
--- a/app/javascripts/mobile.js
+++ /dev/null
@@ -1,1101 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the Jappix Mobile lightweight JS script
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Mobile = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Proceeds connection
- * @public
- * @param {object} aForm
- * @return {undefined}
- */
- self.doLogin = function(aForm) {
-
- try {
- // Reset the panels
- self.resetPanel();
-
- // Get the values
- var xid = aForm.xid.value;
- var username, domain;
-
- // A domain is specified
- if(xid.indexOf('@') != -1) {
- username = self.getXIDNick(xid);
- domain = self.getXIDHost(xid);
-
- // Domain is locked and not the same
- if((LOCK_HOST == 'on') && (domain != HOST_MAIN)) {
- self.showThis('error');
-
- return false;
- }
- } else {
- // No "@" in the XID, we should add the default domain
- username = xid;
- domain = HOST_MAIN;
- }
-
- var pwd = aForm.pwd.value;
- var reg = false;
-
- if(aForm.reg) {
- reg = aForm.reg.checked;
- }
-
- // Enough parameters
- if(username && domain && pwd) {
- // Show the info notification
- self.showThis('info');
-
- if(HOST_WEBSOCKET && typeof window.WebSocket != 'undefined') {
- // WebSocket supported & configured
- con = new JSJaCWebSocketConnection({
- httpbase: HOST_WEBSOCKET
- });
- } else {
- var httpbase = (HOST_BOSH_MAIN || HOST_BOSH);
-
- // Check BOSH origin
- BOSH_SAME_ORIGIN = Origin.isSame(httpbase);
-
- // We create the new http-binding connection
- con = new JSJaCHttpBindingConnection({
- httpbase: httpbase
- });
- }
-
- // And we handle everything that happen
- con.registerHandler('message', self.handleMessage);
- con.registerHandler('presence', self.handlePresence);
- con.registerHandler('iq', self.handleIQ);
- con.registerHandler('onconnect', self.handleConnected);
- con.registerHandler('onerror', self.handleError);
- con.registerHandler('ondisconnect', self.handleDisconnected);
-
- // We retrieve what the user typed in the login inputs
- oArgs = {};
- oArgs.username = username;
- oArgs.domain = domain;
- oArgs.resource = JAPPIX_RESOURCE + ' Mobile (' + (new Date()).getTime() + ')';
- oArgs.pass = pwd;
- oArgs.secure = true;
- oArgs.xmllang = XML_LANG;
-
- // Register?
- if(reg) {
- oArgs.register = true;
- }
-
- // We connect !
- con.connect(oArgs);
- }
-
- // Not enough parameters
- else {
- self.showThis('error');
- }
- } catch(e) {
- Console.error('Mobile.doLogin', e);
-
- // An error happened
- self.resetPanel('error');
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Proceeds disconnection
- * @public
- * @return {undefined}
- */
- self.doLogout = function() {
-
- try {
- con.disconnect();
- } catch(e) {
- Console.error('Mobile.doLogout', e);
- }
-
- };
-
-
- /**
- * Proceeds client initialization
- * @public
- * @return {undefined}
- */
- self.doInitialize = function() {
-
- try {
- if(typeof HTTP_AUTH === 'object' &&
- HTTP_AUTH.user && HTTP_AUTH.password && HTTP_AUTH.host) {
- var form_sel = document.forms['login-form'];
-
- form_sel.elements.xid.value = (HTTP_AUTH.user + '@' + HTTP_AUTH.host);
- form_sel.elements.pwd.value = HTTP_AUTH.password;
-
- self.doLogin(form_sel);
- }
- } catch(e) {
- Console.error('Mobile.doInitialize', e);
- }
-
- };
-
-
- /**
- * Shows target element
- * @public
- * @param {string} id
- * @return {undefined}
- */
- self.showThis = function(id) {
-
- try {
- var element = document.getElementById(id);
-
- if(element) {
- element.style.display = 'block';
- }
- } catch(e) {
- Console.error('Mobile.showThis', e);
- }
-
- };
-
-
- /**
- * Hides target element
- * @public
- * @param {string} id
- * @return {undefined}
- */
- self.hideThis = function(id) {
-
- try {
- var element = document.getElementById(id);
-
- if(element) {
- element.style.display = 'none';
- }
- } catch(e) {
- Console.error('Mobile.hideThis', e);
- }
-
- };
-
-
- /**
- * Resets notification panel
- * @public
- * @param {string} id
- * @return {undefined}
- */
- self.resetPanel = function(id) {
-
- try {
- // Hide the opened panels
- self.hideThis('info');
- self.hideThis('error');
-
- //Show the target panel
- if(id) {
- self.showThis(id);
- }
- } catch(e) {
- Console.error('Mobile.resetPanel', e);
- }
-
- };
-
-
- /**
- * Resets DOM to its initial state
- * @public
- * @return {undefined}
- */
- self.resetDOM = function() {
-
- try {
- // Reset the "secret" input values
- document.getElementById('pwd').value = '';
-
- // Remove the useless DOM elements
- var body = document.getElementsByTagName('body')[0];
- body.removeChild(document.getElementById('talk'));
- body.removeChild(document.getElementById('chat'));
- } catch(e) {
- Console.error('Mobile.resetDOM', e);
- }
-
- };
-
-
- /**
- * Returns whether target item exists or not
- * @public
- * @param {type} id
- * @return {boolean}
- */
- self.exists = function(id) {
-
- does_exist = false;
-
- try {
- if(document.getElementById(id)) {
- does_exist = true;
- }
- } catch(e) {
- Console.error('Mobile.exists', e);
- } finally {
- return does_exist;
- }
-
- };
-
-
- /**
- * Returns translated string (placeholder function for Get API)
- * @public
- * @param {string} string
- * @return {string}
- */
- self._e = function(string) {
-
- try {
- return string;
- } catch(e) {
- Console.error('Mobile._e', e);
- }
-
- };
-
-
- /**
- * Escapes a string for onclick usage
- * @public
- * @param {string} str
- * @return {string}
- */
- self.encodeOnclick = function(str) {
-
- try {
- return str.replace(/'/g, '\\$&').replace(/"/g, '&quot;');
- } catch(e) {
- Console.error('Mobile.encodeOnclick', e);
- }
-
- };
-
-
- /**
- * Handles message stanza
- * @public
- * @param {object} msg
- * @return {undefined}
- */
- self.handleMessage = function(msg) {
-
- try {
- var type = msg.getType();
-
- if(type == 'chat' || type == 'normal') {
- // Get the body
- var body = msg.getBody();
-
- if(body) {
- // Get the values
- var xid = self.cutResource(msg.getFrom());
- var hash = hex_md5(xid);
- var nick = self.getNick(xid, hash);
-
- // No nickname?
- if(!nick) {
- nick = xid;
- }
-
- // Create the chat if it does not exist
- self.chat(xid, nick);
-
- // Display the message
- self.displayMessage(xid, body, nick, hash);
- }
- }
- } catch(e) {
- Console.error('Mobile.handleMessage', e);
- }
-
- };
-
-
- /**
- * Handles presence stanza
- * @public
- * @param {object} pre
- * @return {undefined}
- */
- self.handlePresence = function(pre) {
-
- try {
- // Define the variables
- var xid = self.cutResource(pre.getFrom());
- var hash = hex_md5(xid);
- var type = pre.getType();
- var show = pre.getShow();
-
- // Online buddy
- if(!type) {
- // Display the correct presence
- switch(show) {
- case 'chat':
- self.displayPresence(hash, show);
- break;
-
- case 'away':
- self.displayPresence(hash, show);
- break;
-
- case 'xa':
- self.displayPresence(hash, show);
- break;
-
- case 'dnd':
- self.displayPresence(hash, show);
- break;
-
- default:
- self.displayPresence(hash, 'available');
- break;
- }
- }
- } catch(e) {
- Console.error('Mobile.handlePresence', e);
- }
-
- };
-
-
- /**
- * Handles IQ stanza
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleIQ = function(iq) {
-
- try {
- // Get the content
- var iqFrom = iq.getFrom();
- var iqID = iq.getID();
- var iqQueryXMLNS = iq.getQueryXMLNS();
- var iqType = iq.getType();
- var iqQuery;
-
- // Create the response
- var iqResponse = new JSJaCIQ();
-
- if((iqType == 'get') && ((iqQueryXMLNS == NS_DISCO_INFO) || (iqQueryXMLNS == NS_VERSION))) {
- iqResponse.setID(iqID);
- iqResponse.setTo(iqFrom);
- iqResponse.setType('result');
- }
-
- // Disco#infos query
- if((iqQueryXMLNS == NS_DISCO_INFO) && (iqType == 'get')) {
- /* REF: http://xmpp.org/extensions/xep-0030.html */
-
- iqQuery = iqResponse.setQuery(NS_DISCO_INFO);
-
- // We set the name of the client
- iqQuery.appendChild(iq.appendNode('identity', {
- 'category': 'client',
- 'type': 'mobile',
- 'name': 'Jappix Mobile'
- }));
-
- // We set all the supported features
- var fArray = new Array(
- NS_DISCO_INFO,
- NS_VERSION
- );
-
- for(var i in fArray) {
- iqQuery.appendChild(iq.buildNode('feature', {'var': fArray[i]}));
- }
-
- con.send(iqResponse);
- }
-
- // Software version query
- else if((iqQueryXMLNS == NS_VERSION) && (iqType == 'get')) {
- /* REF: http://xmpp.org/extensions/xep-0092.html */
-
- iqQuery = iqResponse.setQuery(NS_VERSION);
-
- iqQuery.appendChild(iq.buildNode('name', 'Jappix Mobile'));
- iqQuery.appendChild(iq.buildNode('version', JAPPIX_VERSION));
- iqQuery.appendChild(iq.buildNode('os', BrowserDetect.OS));
-
- con.send(iqResponse);
- }
- } catch(e) {
- Console.error('Mobile.handleIQ', e);
- }
-
- };
-
-
- /**
- * Handles connected state
- * @public
- * @return {undefined}
- */
- self.handleConnected = function() {
-
- try {
- // Reset the elements
- self.hideThis('home');
- self.resetPanel();
-
- // Create the talk page
- document.getElementsByTagName('body')[0].innerHTML +=
- '<div id="talk">' +
- '<div class="header">' +
- '<div class="mobile-images"></div>' +
- '<button onclick="Mobile.doLogout();">' + self._e("Disconnect") + '</button>' +
- '</div>' +
-
- '<div id="roster"></div>' +
- '</div>' +
-
- '<div id="chat">' +
- '<div class="header">' +
- '<div class="mobile-images"></div>' +
- '<button onclick="Mobile.returnToRoster();">' + self._e("Previous") + '</button>' +
- '</div>' +
-
- '<div id="chans"></div>' +
- '</div>';
-
- // Get the roster items
- self.getRoster();
- } catch(e) {
- Console.error('Mobile.handleConnected', e);
- }
-
- };
-
-
- /**
- * Handles error stanza
- * @public
- * @param {object} error
- * @return {undefined}
- */
- self.handleError = function(error) {
-
- try {
- self.resetPanel('error');
- } catch(e) {
- Console.error('Mobile.handleError', e);
- }
-
- };
-
-
- /**
- * Handles disconnected state
- * @public
- * @return {undefined}
- */
- self.handleDisconnected = function() {
-
- try {
- // Reset the elements
- self.resetDOM();
-
- // Show the home page
- self.showThis('home');
- } catch(e) {
- Console.error('Mobile.handleDisconnected', e);
- }
-
- };
-
-
- /**
- * Handles roster response
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleRoster = function(iq) {
-
- try {
- // Error: send presence anyway
- if(!iq || (iq.getType() != 'result'))
- return self.sendPresence('', 'available', 1);
-
- // Define some pre-vars
- var current, xid, nick, oneBuddy, oneID, hash, cur_buddy;
- var roster_buddies = [];
-
- var roster = document.getElementById('roster');
-
- // Get roster items
- var iqNode = iq.getNode();
- var bItems = iqNode.getElementsByTagName('item');
-
- // Display each elements from the roster
- for(var i = 0; i < bItems.length; i++) {
- // Get the values
- current = iqNode.getElementsByTagName('item').item(i);
- xid = current.getAttribute('jid').htmlEnc();
- nick = current.getAttribute('name');
- hash = hex_md5(xid);
-
- // No defined nick?
- if(!nick) {
- nick = self.getDirectNick(xid);
- }
-
- roster_buddies.push({
- 'xid': xid,
- 'hash': hash,
- 'nick': nick
- });
- }
-
- // Sort the values
- self.sortRoster(roster_buddies);
-
- // Display the values
- for(var j = 0; j < roster_buddies.length; j++) {
- cur_buddy = roster_buddies[j];
-
- self.displayRoster(
- roster,
- cur_buddy.xid,
- cur_buddy.hash,
- cur_buddy.nick
- );
- }
-
- // Start handling buddies presence
- self.sendPresence('', 'available', 1);
- } catch(e) {
- Console.error('Mobile.handleRoster', e);
- }
-
- };
-
-
- /**
- * Sends message w/ provided data
- * @public
- * @param {object} aForm
- * @return {boolean}
- */
- self.sendMessage = function(aForm) {
-
- try {
- var body = aForm.body.value;
- var xid = aForm.xid.value;
- var hash = hex_md5(xid);
-
- if(body && xid) {
- // Send the message
- var aMsg = new JSJaCMessage();
- aMsg.setTo(xid);
- aMsg.setType('chat');
- aMsg.setBody(body);
- con.send(aMsg);
-
- // Clear our input
- aForm.body.value = '';
-
- // Display the message we sent
- self.displayMessage(xid, body, 'me', hash);
- }
- } catch(e) {
- Console.error('Mobile.sendMessage', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Sends presence w/ provided data
- * @public
- * @param {string} type
- * @param {string} show
- * @param {number} priority
- * @param {string} status
- * @return {undefined}
- */
- self.sendPresence = function(type, show, priority, status) {
-
- try {
- var presence = new JSJaCPresence();
-
- if(type)
- presence.setType(type);
- if(show)
- presence.setShow(show);
- if(priority)
- presence.setPriority(priority);
- if(status)
- presence.setStatus(status);
-
- con.send(presence);
- } catch(e) {
- Console.error('Mobile.sendPresence', e);
- }
-
- };
-
-
- /**
- * Requests the user roster
- * @public
- * @return {undefined}
- */
- self.getRoster = function() {
-
- try {
- iq = new JSJaCIQ();
- iq.setType('get');
- iq.setQuery(NS_ROSTER);
-
- con.send(iq, self.handleRoster);
- } catch(e) {
- Console.error('Mobile.getRoster', e);
- }
-
- };
-
-
- /**
- * Gets user nick (the dumb way)
- * @public
- * @param {string} xid
- * @return {string}
- */
- self.getDirectNick = function(xid) {
-
- try {
- return self.explodeThis('@', xid, 0);
- } catch(e) {
- Console.error('Mobile.getDirectNick', e);
- }
-
- };
-
-
- /**
- * Gets user nick (the smarter way)
- * @public
- * @param {string} xid
- * @param {string} hash
- * @return {string}
- */
- self.getNick = function(xid, hash) {
-
- try {
- var path = 'buddy-' + hash;
-
- if(self.exists(path)) {
- return document.getElementById(path).innerHTML;
- } else {
- self.getDirectNick(xid);
- }
- } catch(e) {
- Console.error('Mobile.getNick', e);
- }
-
- };
-
-
- /**
- * Explodes a string w/ given character
- * @public
- * @param {string} toEx
- * @param {string} toStr
- * @param {number} i
- * @return {string}
- */
- self.explodeThis = function(toEx, toStr, i) {
-
- try {
- // Get the index of our char to explode
- var index = toStr.indexOf(toEx);
-
- // We split if necessary the string
- if(index !== -1) {
- if(i === 0) {
- toStr = toStr.substr(0, index);
- } else {
- toStr = toStr.substr(index + 1);
- }
- }
-
- // We return the value
- return toStr;
- } catch(e) {
- Console.error('Mobile.explodeThis', e);
- }
-
- };
-
-
- /**
- * Removes the resource part from a XID
- * @public
- * @param {string} aXID
- * @return {string}
- */
- self.cutResource = function(aXID) {
-
- try {
- return self.explodeThis('/', aXID, 0);
- } catch(e) {
- Console.error('Mobile.cutResource', e);
- }
-
- };
-
-
- /**
- * Gets the nick part of a XID
- * @public
- * @param {string} aXID
- * @return {string}
- */
- self.getXIDNick = function(aXID) {
-
- try {
- return self.explodeThis('@', aXID, 0);
- } catch(e) {
- Console.error('Mobile.getXIDNick', e);
- }
-
- };
-
-
- /**
- * Gets the host part of a XID
- * @public
- * @param {string} aXID
- * @return {string}
- */
- self.getXIDHost = function(aXID) {
-
- try {
- return self.explodeThis('@', aXID, 1);
- } catch(e) {
- Console.error('Mobile.getXIDHost', e);
- }
-
- };
-
-
- /**
- * Filters message for display
- * @public
- * @param {string} msg
- * @return {string}
- */
- self.filter = function(msg) {
-
- try {
- // Encode in HTML
- msg = msg.htmlEnc();
-
- // Highlighted text
- msg = msg.replace(/(\s|^)\*(.+)\*(\s|$)/gi,'$1<em>$2</em>$3');
-
- // Links
- msg = Links.apply(msg, 'mini');
-
- return msg;
- } catch(e) {
- Console.error('Mobile.filter', e);
- }
-
- };
-
-
- /**
- * Displays message into chat view
- * @public
- * @param {string} xid
- * @param {string} body
- * @param {string} nick
- * @param {string} hash
- * @return {undefined}
- */
- self.displayMessage = function(xid, body, nick, hash) {
-
- try {
- // Get the path
- var path = 'content-' + hash;
-
- // Display the message
- html = '<span><b';
-
- if(nick == 'me') {
- html += ' class="me">' + self._e("You");
- } else {
- html += ' class="him">' + nick;
- }
-
- html += '</b> ' + self.filter(body) + '</span>';
-
- document.getElementById(path).innerHTML += html;
-
- // Scroll to the last element
- document.getElementById(path).lastChild.scrollIntoView();
- } catch(e) {
- Console.error('Mobile.displayMessage', e);
- }
-
- };
-
-
- /**
- * Displays a roster buddy
- * @public
- * @param {object} roster
- * @param {string} xid
- * @param {string} hash
- * @param {string} nick
- * @return {undefined}
- */
- self.displayRoster = function(roster, xid, hash, nick) {
-
- try {
- oneBuddy = document.createElement('a');
- oneID = 'buddy-' + hash;
-
- oneBuddy.setAttribute('href', '#');
- oneBuddy.setAttribute('id', oneID);
- oneBuddy.setAttribute('class', 'one-buddy');
- oneBuddy.setAttribute('onclick', 'return Mobile.chat(\'' + self.encodeOnclick(xid) + '\', \'' + self.encodeOnclick(nick) + '\');');
- oneBuddy.innerHTML = nick.htmlEnc();
-
- roster.appendChild(oneBuddy);
- } catch(e) {
- Console.error('Mobile.displayRoster', e);
- }
-
- };
-
-
- /**
- * Sorts the roster buddies by nickname
- * @public
- * @param {object} roster_buddies
- * @return {object}
- */
- self.sortRoster = function(roster_buddies) {
-
- try {
- var one_nick, two_nick;
-
- roster_buddies.sort(function(one, two) {
- one_nick = (one.nick + '').toLowerCase();
- two_nick = (two.nick + '').toLowerCase();
-
- return one_nick < two_nick ? -1 : (one_nick > two_nick ? 1 : 0);
- });
- } catch(e) {
- Console.error('Mobile.sortRoster', e);
- } finally {
- return roster_buddies;
- }
-
- };
-
-
- /**
- * Goes back to roster view
- * @public
- * @return {undefined}
- */
- self.returnToRoster = function() {
-
- try {
- // Hide the chats
- self.hideThis('chat');
-
- // Show the roster
- self.showThis('talk');
- } catch(e) {
- Console.error('Mobile.returnToRoster', e);
- }
-
- };
-
-
- /**
- * Switches view to target chat
- * @public
- * @param {string} hash
- * @return {undefined}
- */
- self.chatSwitch = function(hash) {
-
- try {
- // Hide the roster page
- self.hideThis('talk');
-
- // Hide the other chats
- var divs = document.getElementsByTagName('div');
-
- for(var i = 0; i < divs.length; i++) {
- if(divs.item(i).getAttribute('class') == 'one-chat') {
- divs.item(i).style.display = 'none';
- }
- }
-
- // Show the chat
- self.showThis('chat');
- self.showThis(hash);
- } catch(e) {
- Console.error('Mobile.chatSwitch', e);
- }
-
- };
-
-
- /**
- * Creates given chat
- * @public
- * @param {string} xid
- * @param {string} nick
- * @param {string} hash
- * @return {undefined}
- */
- self.createChat = function(xid, nick, hash) {
-
- try {
- // Define the variables
- var chat = document.getElementById('chans');
- var oneChat = document.createElement('div');
-
- // Apply the DOM modification
- oneChat.setAttribute('id', 'chat-' + hash);
- oneChat.setAttribute('class', 'one-chat');
- oneChat.innerHTML = '<p>' + nick + '</p><div id="content-' + hash + '"></div><form action="#" method="post" onsubmit="return Mobile.sendMessage(this);"><input type="text" name="body" /><input type="hidden" name="xid" value="' + xid + '" /><input type="submit" class="submit" value="OK" /></form>';
- chat.appendChild(oneChat);
- } catch(e) {
- Console.error('Mobile.createChat', e);
- }
-
- };
-
-
- /**
- * Launches a chat
- * @public
- * @param {string} xid
- * @param {string} nick
- * @return {boolean}
- */
- self.chat = function(xid, nick) {
-
- try {
- var hash = hex_md5(xid);
-
- // If the chat was not yet opened
- if(!self.exists('chat-' + hash)) {
- // No nick?
- if(!nick) {
- nick = self.getNick(xid, hash);
- }
-
- // Create the chat
- self.createChat(xid, nick, hash);
- }
-
- // Switch to the chat
- self.chatSwitch('chat-' + hash);
- } catch(e) {
- Console.error('Mobile.chat', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Displays given presence
- * @public
- * @param {string} hash
- * @param {string} show
- * @return {undefined}
- */
- self.displayPresence = function(hash, show) {
-
- try {
- var element = document.getElementById('buddy-' + hash);
-
- if(element) {
- element.setAttribute('class', 'one-buddy ' + show);
- }
- } catch(e) {
- Console.error('Mobile.displayPresence', e);
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.launch = function() {
-
- try {
- onbeforeunload = self.doLogout;
- onload = self.doInitialize;
- } catch(e) {
- Console.error('Mobile.launch', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
-
-Mobile.launch(); \ No newline at end of file
diff --git a/app/javascripts/mucadmin.js b/app/javascripts/mucadmin.js
deleted file mode 100644
index 1c034e8d..00000000
--- a/app/javascripts/mucadmin.js
+++ /dev/null
@@ -1,580 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the mucadmin JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Authors: Valérian Saliou, Maranda
-
-*/
-
-// Bundle
-var MUCAdmin = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Opens the MUC admin popup
- * @public
- * @param {string} xid
- * @param {string} aff
- * @return {undefined}
- */
- self.open = function(xid, aff) {
-
- try {
- // Popup HTML content
- var html_full =
- '<div class="top">' + Common._e("MUC administration") + '</div>' +
-
- '<div class="content">' +
- '<div class="head mucadmin-head">' +
- '<div class="head-text mucadmin-head-text">' + Common._e("You administrate this room") + '</div>' +
-
- '<div class="mucadmin-head-jid">' + xid + '</div>' +
- '</div>' +
-
- '<div class="mucadmin-forms">' +
- '<div class="mucadmin-topic">' +
- '<fieldset>' +
- '<legend>' + Common._e("Subject") + '</legend>' +
-
- '<label for="topic-text">' + Common._e("Enter new subject") + '</label>' +
- '<textarea id="topic-text" name="room-topic" rows="8" cols="60" ></textarea>' +
- '</fieldset>' +
- '</div>' +
-
- '<div class="mucadmin-conf">' +
- '<fieldset>' +
- '<legend>' + Common._e("Configuration") + '</legend>' +
-
- '<div class="results mucadmin-results"></div>' +
- '</fieldset>' +
- '</div>' +
-
- '<div class="mucadmin-aut">' +
- '<fieldset>' +
- '<legend>' + Common._e("Authorizations") + '</legend>' +
-
- '<label>' + Common._e("Member list") + '</label>' +
- '<div class="aut-member aut-group">' +
- '<a href="#" class="aut-add" onclick="return MUCAdmin.addInput(\'\', \'member\');">' + Common._e("Add an input") + '</a>' +
- '</div>' +
-
- '<label>' + Common._e("Owner list") + '</label>' +
- '<div class="aut-owner aut-group">' +
- '<a href="#" class="aut-add" onclick="return MUCAdmin.addInput(\'\', \'owner\');">' + Common._e("Add an input") + '</a>' +
- '</div>' +
-
- '<label>' + Common._e("Administrator list") + '</label>' +
- '<div class="aut-admin aut-group">' +
- '<a href="#" class="aut-add" onclick="return MUCAdmin.addInput(\'\', \'admin\');">' + Common._e("Add an input") + '</a>' +
- '</div>' +
-
- '<label>' + Common._e("Outcast list") + '</label>' +
- '<div class="aut-outcast aut-group">' +
- '<a href="#" class="aut-add" onclick="return MUCAdmin.addInput(\'\', \'outcast\');">' + Common._e("Add an input") + '</a>' +
- '</div>' +
- '</fieldset>' +
- '</div>' +
-
- '<div class="mucadmin-others">' +
- '<fieldset>' +
- '<legend>' + Common._e("Others") + '</legend>' +
-
- '<label>' + Common._e("Destroy this MUC") + '</label>' +
- '<a href="#" onclick="return MUCAdmin.destroy();">' + Common._e("Yes, let's do it!") + '</a>' +
- '</fieldset>' +
- '</div>' +
- '</div>' +
- '</div>' +
-
- '<div class="bottom">' +
- '<div class="wait wait-medium"></div>' +
-
- '<a href="#" class="finish save">' + Common._e("Save") + '</a>' +
- '<a href="#" class="finish cancel">' + Common._e("Cancel") + '</a>' +
- '</div>';
-
- var html_partial =
- '<div class="top">' + Common._e("MUC administration") + '</div>' +
-
- '<div class="content">' +
- '<div class="head mucadmin-head">' +
- '<div class="head-text mucadmin-head-text">' + Common._e("You administrate this room") + '</div>' +
-
- '<div class="mucadmin-head-jid">' + xid + '</div>' +
- '</div>' +
-
- '<div class="mucadmin-forms">' +
- '<div class="mucadmin-aut">' +
- '<fieldset>' +
- '<legend>' + Common._e("Authorizations") + '</legend>' +
-
- '<label>' + Common._e("Member list") + '</label>' +
- '<div class="aut-member aut-group">' +
- '<a href="#" class="aut-add" onclick="return MUCAdmin.addInput(\'\', \'member\');">' + Common._e("Add an input") + '</a>' +
- '</div>' +
-
- '<label>' + Common._e("Outcast list") + '</label>' +
- '<div class="aut-outcast aut-group">' +
- '<a href="#" class="aut-add" onclick="return MUCAdmin.addInput(\'\', \'outcast\');">' + Common._e("Add an input") + '</a>' +
- '</div>' +
- '</fieldset>' +
- '</div>' +
- '</div>' +
- '</div>' +
-
- '<div class="bottom">' +
- '<div class="wait wait-medium"></div>' +
-
- '<a href="#" class="finish save">' + Common._e("Save") + '</a>' +
- '<a href="#" class="finish cancel">' + Common._e("Cancel") + '</a>' +
- '</div>';
-
- // Create the popup
- if(aff == 'owner')
- Popup.create('mucadmin', html_full);
- if(aff == 'admin')
- Popup.create('mucadmin', html_partial);
-
- // Associate the events
- self.instance();
-
- // We get the affiliated user's privileges
- if(aff == 'owner') {
- self.query(xid, 'member');
- self.query(xid, 'owner');
- self.query(xid, 'admin');
- self.query(xid, 'outcast');
-
- // We query the room to edit
- DataForm.go(xid, 'muc', '', '', 'mucadmin');
- } else if(aff == 'admin') {
- self.query(xid, 'member');
- self.query(xid, 'outcast');
- }
- } catch(e) {
- Console.error('MUCAdmin.open', e);
- }
-
- };
-
-
- /**
- * Closes the MUC admin popup
- * @public
- * @return {boolean}
- */
- self.close = function() {
-
- try {
- // Destroy the popup
- Popup.destroy('mucadmin');
- } catch(e) {
- Console.error('MUCAdmin.close', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Removes a MUC admin input
- * @public
- * @param {string} element
- * @return {boolean}
- */
- self.removeInput = function(element) {
-
- try {
- var path = $(element).parent();
-
- // We first hide the container of the input
- path.hide();
-
- // Then, we add a special class to the input
- path.find('input').addClass('aut-dustbin');
- } catch(e) {
- Console.error('MUCAdmin.removeInput', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Adds a MUC admin input
- * @public
- * @param {type} xid
- * @param {type} affiliation
- * @return {boolean}
- */
- self.addInput = function(xid, affiliation) {
-
- try {
- var hash = hex_md5(xid + affiliation);
-
- // Add the HTML code
- $('#mucadmin .aut-' + affiliation + ' .aut-add').after(
- '<div class="one-aut ' + hash + '">' +
- '<input id="aut-' + affiliation + '" name="' + affiliation + '" type="text" class="mucadmin-i" value="' + xid + '" />' +
- '<a href="#" class="aut-remove">[-]</a>' +
- '</div>'
- );
-
- // Click event
- $('#mucadmin .' + hash + ' .aut-remove').click(function() {
- return self.removeInput(this);
- });
-
- // Focus on the input we added
- if(!xid) {
- $(document).oneTime(10, function() {
- $('#mucadmin .' + hash + ' input').focus();
- });
- }
- } catch(e) {
- Console.error('MUCAdmin.addInput', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Handles the MUC admin form
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleAuth = function(iq) {
-
- try {
- // We got the authorizations results
- $(iq.getQuery()).find('item').each(function() {
- // We parse the received xml
- var xid = $(this).attr('jid');
- var affiliation = $(this).attr('affiliation');
-
- // We create one input for one XID
- self.addInput(xid, affiliation);
- });
-
- // Hide the wait icon
- $('#mucadmin .wait').hide();
-
- Console.log('MUC admin items received: ' + Common.fullXID(Common.getStanzaFrom(iq)));
- } catch(e) {
- Console.error('MUCAdmin.handleAuth', e);
- }
-
- };
-
-
- /**
- * Queries the MUC admin form
- * @public
- * @param {string} xid
- * @param {string} type
- * @return {undefined}
- */
- self.query = function(xid, type) {
-
- try {
- // Show the wait icon
- $('#mucadmin .wait').show();
-
- // New IQ
- var iq = new JSJaCIQ();
-
- iq.setTo(xid);
- iq.setType('get');
-
- var iqQuery = iq.setQuery(NS_MUC_ADMIN);
- iqQuery.appendChild(iq.buildNode('item', {'affiliation': type, 'xmlns': NS_MUC_ADMIN}));
-
- con.send(iq, self.handleAuth);
- } catch(e) {
- Console.error('MUCAdmin.query', e);
- }
-
- };
-
-
- /**
- * Sends the new chat-room topic
- * @public
- * @param {string} xid
- * @return {undefined}
- */
- self.sendTopic = function(xid) {
-
- try {
- // We get the new topic
- var topic = $('.mucadmin-topic textarea').val();
-
- // We send the new topic if not blank
- if(topic) {
- var m = new JSJaCMessage();
- m.setTo(xid);
- m.setType('groupchat');
- m.setSubject(topic);
- con.send(m);
-
- Console.info('MUC admin topic sent: ' + topic);
- }
- } catch(e) {
- Console.error('MUCAdmin.sendTopic', e);
- }
-
- };
-
-
- /**
- * Sends the MUC admin auth form
- * @public
- * @param {string} xid
- * @return {undefined}
- */
- self.sendAuth = function(xid) {
-
- try {
- // We define the values array
- var types = new Array('member', 'owner', 'admin', 'outcast');
-
- $.each(types, function(i) {
- // We get the current type
- var tType = types[i];
-
- // We loop for all the elements
- $('.mucadmin-aut .aut-' + tType + ' input').each(function() {
- // We get the needed values
- var value = $(this).val();
- var affiliation = ($(this).hasClass('aut-dustbin') && value) ? 'none' : tType;
-
- // Submit affiliation
- if(value && affiliation) {
- self.setAffiliation(xid, value, affiliation);
- }
- });
- });
-
- Console.info('MUC admin authorizations form sent: ' + xid);
- } catch(e) {
- Console.error('MUCAdmin.sendAuth', e);
- }
-
- };
-
-
- /**
- * Sets the affiliation for a given user
- * @public
- * @param {string} muc_xid
- * @param {string} user_xid
- * @param {string} affiliation
- * @return {undefined}
- */
- self.setAffiliation = function(muc_xid, user_xid, affiliation) {
-
- try {
- // If no affiliation set, assume it's 'none'
- affiliation = affiliation || 'none';
-
- // Go Go Go!!
- var iq = new JSJaCIQ();
- iq.setTo(muc_xid);
- iq.setType('set');
-
- var iqQuery = iq.setQuery(NS_MUC_ADMIN);
-
- var item = iqQuery.appendChild(iq.buildNode('item', {
- 'jid': user_xid,
- 'affiliation': affiliation,
- 'xmlns': NS_MUC_ADMIN
- }));
-
- con.send(iq, Errors.handleReply);
- } catch(e) {
- Console.error('MUCAdmin.setAffiliation', e);
- }
-
- };
-
-
- /**
- * Checks if the MUC room was destroyed
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleDestroyIQ = function(iq) {
-
- try {
- if(!Errors.handleReply(iq)) {
- // We close the groupchat
- var room = Common.fullXID(Common.getStanzaFrom(iq));
- var hash = hex_md5(room);
- Interface.quitThisChat(room, hash, 'groupchat');
-
- // We close the muc admin popup
- self.close();
-
- // We tell the user that all is okay
- Board.openThisInfo(5);
-
- // We remove the user's favorite
- if(DataStore.existDB(Connection.desktop_hash, 'favorites', room)) {
- Favorites.removeThis(room, Common.explodeThis('@', room, 0));
- }
-
- Console.info('MUC admin destroyed: ' + room);
- }
-
- // We hide the wait icon
- $('#mucadmin .wait').hide();
- } catch(e) {
- Console.error('MUCAdmin.handleDestroyIQ', e);
- }
-
- };
-
-
- /**
- * Destroys a MUC room
- * @public
- * @param {string} xid
- * @return {boolean}
- */
- self.destroyIQ = function(xid) {
-
- try {
- // We ask the server to delete the room
- var iq = new JSJaCIQ();
-
- iq.setTo(xid);
- iq.setType('set');
- var iqQuery = iq.setQuery(NS_MUC_OWNER);
- iqQuery.appendChild(iq.buildNode('destroy', {'xmlns': NS_MUC_OWNER}));
-
- con.send(iq, self.handleDestroyIQ);
-
- Console.info('MUC admin destroy sent: ' + xid);
- } catch(e) {
- Console.error('MUCAdmin.destroyIQ', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Performs the MUC room destroy functions
- * @public
- * @return {undefined}
- */
- self.destroy = function() {
-
- try {
- // We get the XID of the current room
- var xid = $('#mucadmin .mucadmin-head-jid').text();
-
- // We show the wait icon
- $('#mucadmin .wait').show();
-
- // We send the iq
- self.destroyIQ(xid);
- } catch(e) {
- Console.error('MUCAdmin.destroy', e);
- }
-
- };
-
-
- /**
- * Sends all the MUC admin stuffs
- * @public
- * @return {undefined}
- */
- self.send = function() {
-
- try {
- // We get the XID of the current room
- var xid = $('#mucadmin .mucadmin-head-jid').text();
-
- // We change the room topic
- self.sendTopic(xid);
-
- // We send the needed queries
- DataForm.send('x', 'submit', 'submit', $('#mucadmin .mucadmin-results').attr('data-session'), xid, '', '', 'mucadmin');
- self.sendAuth(xid);
- } catch(e) {
- Console.error('MUCAdmin.send', e);
- }
-
- };
-
-
- /**
- * Saves the MUC admin elements
- * @public
- * @return {boolean}
- */
- self.save = function() {
-
- try {
- // We send the new options
- self.send();
-
- // And we quit the popup
- return self.close();
- } catch(e) {
- Console.error('MUCAdmin.save', e);
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.instance = function() {
-
- try {
- // Click events
- $('#mucadmin .bottom .finish').click(function() {
- if($(this).is('.cancel')) {
- return self.close();
- }
-
- if($(this).is('.save')) {
- return self.save();
- }
- });
- } catch(e) {
- Console.error('MUCAdmin.instance', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/muji.js b/app/javascripts/muji.js
deleted file mode 100644
index 2f9a0daf..00000000
--- a/app/javascripts/muji.js
+++ /dev/null
@@ -1,1845 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the Muji helpers & launchers
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Muji = (function() {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Constants */
- self.INVITE_MAX_DELAY = 60;
-
-
- /* Variables */
- self._session = null;
- self._caller_xid = null;
-
-
- /**
- * Opens the Muji interface (depending on the state)
- * @public
- * @return {boolean}
- */
- self.open = function() {
-
- try {
- var call_tool_sel = $('#top-content .tools.call');
-
- if(call_tool_sel.is('.active')) {
- Console.info('Opened call notification drawer');
- } else if(call_tool_sel.is('.streaming')) {
- self._show_interface();
-
- Console.info('Opened Muji box');
- } else {
- Console.warn('Could not open any Muji tool (race condition on state)');
- }
- } catch(e) {
- Console.error('Muji.open', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Returns the Muji session arguments (used to configure it)
- * @private
- * @param connection
- * @param xid
- * @param hash
- * @param local_view
- * @return {object}
- */
- self._args = function(connection, xid, hash, media, local_view) {
-
- args = {};
-
- try {
- // Network configuration
- var ice_servers = Call.generate_ice_servers();
-
- // Muji arguments
- args = {
- // Configuration (required)
- connection: connection,
- to: xid,
- media: media,
- local_view: local_view,
- stun: ice_servers.stun,
- turn: ice_servers.turn,
- resolution: 'sd',
- debug: Call._consoleAdapter,
-
- // Safety options (optional)
- password_protect: true,
-
- // Custom handlers (optional)
- room_message_in: function(muji, stanza) {
- var from = muji.utils.stanza_from(stanza);
- var username = muji.utils.extract_username(from);
- var body = stanza.getBody();
- var muji_sel = $('#muji');
-
- var mode = (username === $('#muji').attr('data-username')) ? 'me' : 'him';
-
- if(username && body && muji_sel.size()) {
- var avatar_html = '';
-
- if(mode === 'him') {
- avatar_html =
- '<div class="message_avatar avatar-container">' +
- '<img class="avatar" src="' + './images/others/default-avatar.png' + '" alt="" />' +
- '</div>';
- }
-
- muji_sel.find('.chatroom .chatroom_view').append(
- '<div class="room_message ' + mode + ' ' + hex_md5(from) + '">' +
- avatar_html +
-
- '<div class="message_content">' +
- '<span class="message_bubble">' + body.htmlEnc() + '</span>' +
- '<span class="message_author">' + username.htmlEnc() + '</span>' +
- '</div>' +
-
- '<div class="clear"></div>' +
- '</div>'
- );
-
- if($('#muji').is(':visible')) {
- self._message_scroll();
- } else {
- self._message_notify();
- }
-
- Console.log('Muji._args > room_message_in', 'Displayed Muji message from: ' + username);
- }
-
- Console.log('Muji._args', 'room_message_in');
- },
-
- room_message_out: function(muji, stanza) {
- Console.log('Muji._args', 'room_message_out');
- },
-
- room_presence_in: function(muji, stanza) {
- Console.log('Muji._args', 'room_presence_in');
- },
-
- room_presence_out: function(muji, stanza) {
- Console.log('Muji._args', 'room_presence_out');
- },
-
- session_prepare_pending: function(muji, stanza) {
- // Temporary username
- $('#muji').attr('data-username', muji.get_username());
-
- // Notify user about preparing call
- Call.notify(
- JSJAC_JINGLE_SESSION_MUJI,
- muji.get_to(),
- 'preparing',
- muji.get_media(),
- self.get_caller_xid()
- );
-
- Console.log('Muji._args', 'session_prepare_pending');
- },
-
- session_prepare_success: function(muji, stanza) {
- // Final username
- $('#muji').attr('data-username', muji.get_username());
-
- Console.log('Muji._args', 'session_prepare_success');
- },
-
- session_prepare_error: function(muji, stanza) {
- self._reset();
-
- Call.notify(
- JSJAC_JINGLE_SESSION_MUJI,
- muji.get_to(),
- 'error',
- muji.get_media(),
- self.get_caller_xid()
- );
-
- Console.log('Muji._args', 'session_prepare_error');
- },
-
- session_initiate_pending: function(muji) {
- Call.notify(
- JSJAC_JINGLE_SESSION_MUJI,
- muji.get_to(),
- 'waiting',
- muji.get_media(),
- self.get_caller_xid()
- );
-
- Console.log('Muji._args', 'session_initiate_pending');
- },
-
- session_initiate_success: function(muji, stanza) {
- Call._unnotify();
-
- // Start call! Go Go Go!
- Call.start_session(muji.get_media());
- self._show_interface();
- Call.start_counter();
-
- Console.log('Muji._args', 'session_initiate_success');
- },
-
- session_initiate_error: function(muji, stanza) {
- self._reset();
-
- Call.notify(
- JSJAC_JINGLE_SESSION_MUJI,
- muji.get_to(),
- 'error',
- muji.get_media(),
- self.get_caller_xid()
- );
-
- Console.log('Muji._args', 'session_initiate_error');
- },
-
- session_leave_pending: function(muji) {
- self._reset();
-
- Call.notify(
- JSJAC_JINGLE_SESSION_MUJI,
- muji.get_to(),
- 'ending',
- muji.get_media(),
- self.get_caller_xid()
- );
-
- Console.log('Muji._args', 'session_leave_pending');
- },
-
- session_leave_success: function(muji, stanza) {
- self._reset();
-
- Call.notify(
- JSJAC_JINGLE_SESSION_MUJI,
- muji.get_to(),
- 'ended',
- muji.get_media(),
- self.get_caller_xid()
- );
-
- Console.log('Muji._args', 'session_leave_success');
- },
-
- session_leave_error: function(muji, stanza) {
- self._reset();
-
- if(typeof muji.parent != 'undefined') {
- muji = muji.parent;
- }
-
- Call.notify(
- JSJAC_JINGLE_SESSION_MUJI,
- muji.get_to(),
- 'ended',
- muji.get_media(),
- self.get_caller_xid()
- );
-
- Console.log('Muji._args', 'session_leave_error');
- },
-
- participant_prepare: function(muji, stanza) {
- Console.log('Muji._args', 'participant_prepare');
- },
-
- participant_initiate: function(muji, stanza) {
- Console.log('Muji._args', 'participant_initiate');
- },
-
- participant_leave: function(muji, stanza) {
- Console.log('Muji._args', 'participant_leave');
- },
-
- participant_session_initiate_pending: function(muji, session) {
- Console.log('Muji._args', 'participant_session_initiate_pending');
- },
-
- participant_session_initiate_success: function(muji, session, stanza) {
- Console.log('Muji._args', 'participant_session_initiate_success');
- },
-
- participant_session_initiate_error: function(muji, session, stanza) {
- Console.log('Muji._args', 'participant_session_initiate_error');
- },
-
- participant_session_initiate_request: function(muji, session, stanza) {
- Console.log('Muji._args', 'participant_session_initiate_request');
- },
-
- participant_session_accept_pending: function(muji, session) {
- Console.log('Muji._args', 'participant_session_accept_pending');
- },
-
- participant_session_accept_success: function(muji, session, stanza) {
- Console.log('Muji._args', 'participant_session_accept_success');
- },
-
- participant_session_accept_error: function(muji, session, stanza) {
- Console.log('Muji._args', 'participant_session_accept_error');
- },
-
- participant_session_accept_request: function(muji, session, stanza) {
- Console.log('Muji._args', 'participant_session_accept_request');
- },
-
- participant_session_info_pending: function(muji, session) {
- Console.log('Muji._args', 'participant_session_info_pending');
- },
-
- participant_session_info_success: function(muji, session, stanza) {
- Console.log('Muji._args', 'participant_session_info_success');
- },
-
- participant_session_info_error: function(muji, session, stanza) {
- Console.log('Muji._args', 'participant_session_info_error');
- },
-
- participant_session_info_request: function(muji, session, stanza) {
- Console.log('Muji._args', 'participant_session_info_request');
- },
-
- participant_session_terminate_pending: function(muji, session) {
- Console.log('Muji._args', 'participant_session_terminate_pending');
- },
-
- participant_session_terminate_success: function(muji, session, stanza) {
- Console.log('Muji._args', 'participant_session_terminate_success');
- },
-
- participant_session_terminate_error: function(muji, session, stanza) {
- Console.log('Muji._args', 'participant_session_terminate_error');
- },
-
- participant_session_terminate_request: function(muji, session, stanza) {
- Console.log('Muji._args', 'participant_session_terminate_request');
- },
-
- add_remote_view: function(muji, username, media) {
- Console.log('Muji._args', 'add_remote_view');
-
- var muji_sel = $('#muji');
- var nobody_sel = muji_sel.find('.empty_message');
- var remote_container_sel = $('#muji .remote_container');
- var remote_video_shaper_sel = remote_container_sel.find('.remote_video_shaper');
-
- var view_sel = null;
- var container_sel = remote_video_shaper_sel.filter(function() {
- return ($(this).attr('data-username') + '') === (username + '');
- });
-
- var count_participants = remote_video_shaper_sel.filter(':has(video)').size();
-
- // Not already in view?
- if(!container_sel.size()) {
- // Select first empty view
- var first_empty_view_sel = remote_video_shaper_sel.filter(':not(:has(video)):first');
-
- if(first_empty_view_sel.size()) {
- container_sel = first_empty_view_sel;
-
- // Remote poster
- var remote_poster = './images/placeholders/jingle_video_remote.png';
-
- if(media === 'audio') {
- remote_poster = './images/placeholders/jingle_audio_remote.png';
- }
-
- // Append view
- view_sel = $('<video src="" alt="" poster="' + remote_poster + '"></video>');
-
- container_sel.attr('data-username', username);
- view_sel.appendTo(container_sel);
-
- // Append username label
- container_sel.append(
- '<span class="label_username">' + username.htmlEnc() + '</span>'
- );
-
- // Update counter
- muji_sel.attr(
- 'data-count',
- ++count_participants
- );
- } else {
- // Room is full...
- muji_sel.find('.chatroom_participants .participants_full:hidden').show();
- }
- }
-
- nobody_sel.hide();
- Muji._update_count_participants(count_participants);
- Muji._update_invite_participants();
-
- // IMPORTANT: return view selector
- return (view_sel !== null) ? view_sel[0] : view_sel;
- },
-
- remove_remote_view: function(muji, username) {
- Console.log('Muji._args', 'remove_remote_view');
-
- var muji_sel = $('#muji');
- var nobody_sel = muji_sel.find('.empty_message');
- var remote_container_sel = $('#muji .remote_container');
- var remote_video_shaper_sel = remote_container_sel.find('.remote_video_shaper');
-
- var container_sel = remote_video_shaper_sel.filter(function() {
- return ($(this).attr('data-username') + '') === (username + '');
- });
-
- var count_participants = remote_video_shaper_sel.filter(':has(video)').size();
-
- // Exists in view?
- if(container_sel.size()) {
- var view_sel = container_sel.find('video');
-
- // Remove video
- view_sel.stop(true).fadeOut(250, function() {
- container_sel.empty();
-
- // Update counter
- muji_sel.attr(
- 'data-count',
- --count_participants
- );
-
- // Nobody left in the room?
- if(!remote_video_shaper_sel.find('video').size()) {
- nobody_sel.show();
- muji_sel.removeAttr('data-count');
- }
-
- // Update participants counter
- muji_sel.find('.chatroom_participants .participants_full:visible').hide();
- Muji._update_count_participants(count_participants);
- Muji._update_invite_participants();
- });
-
- // IMPORTANT: return view selector
- if(view_sel.size()) {
- return view_sel[0];
- }
- }
-
- return null;
- }
- };
- } catch(e) {
- Console.error('Muji._args', e);
- } finally {
- return args;
- }
-
- };
-
-
- /**
- * Launch a new Muji session with given buddy
- * @private
- * @param room
- * @param mode
- * @param args_invite
- * @return {boolean}
- */
- self._new = function(room, mode, stanza, args_invite) {
-
- var status = false;
-
- try {
- if(!room) {
- throw 'No room to be joined given!';
- }
-
- var hash = hex_md5(room);
-
- // Create interface for video containers
- $('body').addClass('in_muji_call');
- var muji_sel = self._create_interface(room, mode);
-
- // Filter media
- var media = null;
-
- switch(mode) {
- case 'audio':
- media = JSJAC_JINGLE_MEDIA_AUDIO; break;
- case 'video':
- media = JSJAC_JINGLE_MEDIA_VIDEO; break;
- }
-
- // Start the Jingle negotiation
- var args = self._args(
- con,
- room,
- hash,
- media,
- muji_sel.find('.local_video video')[0]
- );
-
- if(typeof args_invite == 'object') {
- if(args_invite.password) {
- args.password = args_invite.password;
- }
-
- args.media = (args_invite.media == JSJAC_JINGLE_MEDIA_VIDEO) ? JSJAC_JINGLE_MEDIA_VIDEO
- : JSJAC_JINGLE_MEDIA_AUDIO;
-
- self._session = new JSJaCJingle.session(JSJAC_JINGLE_SESSION_MUJI, args);
- self._caller_xid = Common.bareXID(args_invite.from);
-
- Console.debug('Receive Muji call: ' + room);
- } else {
- self._session = new JSJaCJingle.session(JSJAC_JINGLE_SESSION_MUJI, args);
- self._caller_xid = Common.getXID();
-
- self._session.join();
-
- Console.debug('Create Muji call: ' + room);
- }
-
- Console.debug('Join Muji conference: ' + room);
-
- status = true;
- } catch(e) {
- Console.error('Muji._new', e);
- } finally {
- return status;
- }
-
- };
-
-
- /**
- * Updates the participants counter value
- * @private
- * @param {number} count_participants
- * @return {undefined}
- */
- self._update_count_participants = function(count_participants) {
-
- try {
- count_participants = (count_participants || 0);
-
- var participants_counter_sel = $('#muji .chatroom_participants .participants_counter');
-
- if(count_participants === 1) {
- participants_counter_sel.text(
- Common.printf(Common._e("%s participant"), count_participants)
- );
- } else {
- participants_counter_sel.text(
- Common.printf(Common._e("%s participants"), count_participants)
- );
- }
- } catch(e) {
- Console.error('Muji._update_count_participants', e);
- }
-
- };
-
-
- /**
- * Updates the participants invite tool
- * @private
- * @return {undefined}
- */
- self._update_invite_participants = function() {
-
- try {
- var chatroom_participants_sel = $('#muji .chatroom_participants');
-
- var participants_invite_sel = chatroom_participants_sel.find('.participants_invite');
- var participants_invite_box_sel = chatroom_participants_sel.find('.participants_invite_box');
-
- if(self.is_full()) {
- if(participants_invite_box_sel.is(':visible')) {
- participants_invite_box_sel.stop(true);
- participants_invite_sel.click();
- }
-
- participants_invite_sel.filter(':visible').hide();
- } else {
- participants_invite_sel.filter(':hidden').show();
- }
- } catch(e) {
- Console.error('Muji._update_invite_participants', e);
- }
-
- };
-
-
- /**
- * Resets the participants invite filter
- * @private
- * @return {undefined}
- */
- self._reset_participants_invite_filter = function() {
-
- try {
- // Selectors
- var chatroom_sel = $('#muji .chatroom');
- var invite_form_sel = chatroom_sel.find('form.participants_invite_form');
- var invite_search_sel = chatroom_sel.find('.participants_invite_search');
-
- // Apply
- invite_form_sel.find('input.invite_xid').val('');
-
- invite_search_sel.empty();
- } catch(e) {
- Console.error('Muji._reset_participants_invite_filter', e);
- }
-
- };
-
-
- /**
- * Engages the participants invite filter
- * @private
- * @param {string} value
- * @return {undefined}
- */
- self._engage_participants_invite_filter = function(value) {
-
- try {
- // Selectors
- var chatroom_sel = $('#muji .chatroom');
- var invite_input_sel = chatroom_sel.find('form.participants_invite_form input.invite_xid');
- var invite_search_sel = chatroom_sel.find('.participants_invite_search');
-
- // Reset UI
- invite_search_sel.empty();
-
- // Proceed search
- var results_arr = Search.processBuddy(value);
- var results_html = '';
- var bold_regex = new RegExp('((^)|( ))' + value, 'gi');
-
- // Exclude already selected buddies
- var exclude_obj = self._list_participants_invite_list();
-
- if(results_arr && results_arr.length) {
- var i, j,
- cur_xid, cur_full_xid, cur_hash, cur_support, cur_name, cur_title,
- cur_name_bolded, cur_support_class;
-
- for(i = 0; i < results_arr.length; i++) {
- // Generate result data
- cur_xid = results_arr[i];
-
- if(exclude_obj[cur_xid] !== 1) {
- cur_hash = hex_md5(cur_xid);
- cur_name = Name.getBuddy(cur_xid);
-
- // Get target's full XID
- cur_full_xid = Caps.getFeatureResource(cur_xid, NS_MUJI);
- cur_support = null;
-
- if(cur_full_xid) {
- if(Caps.getFeatureResource(cur_xid, NS_JINGLE_APPS_RTP_VIDEO)) {
- cur_support = 'video';
- } else {
- cur_support = 'audio';
- }
- }
-
- // Generate a hint title & a class
- if(cur_support) {
- cur_title = Common.printf(Common._e("%s is able to receive group calls."), cur_name);
- cur_support_class = 'participant_search_has_' + cur_support;
- } else {
- cur_title = Common.printf(Common._e("%s may not support group calls."), cur_name);
- cur_support_class = 'participant_search_unsupported';
- }
-
- // Bold matches in name
- cur_name_bolded = cur_name.htmlEnc().replace(bold_regex, '<b>$&</b>');
-
- // Generate result HTML
- results_html +=
- '<a class="participant_search_one ' + cur_support_class + ' ' + cur_hash + '" href="#" title="' + Common.encodeQuotes(cur_title) + '" data-xid="' + Common.encodeQuotes(cur_full_xid || cur_xid) + '" data-support="' + Common.encodeQuotes(cur_support) + '">' +
- '<span class="avatar-container">' +
- '<img class="avatar" src="' + './images/others/default-avatar.png' + '" alt="" />' +
- '</span>' +
-
- '<span class="details">' +
- '<span class="name">' + cur_name_bolded + '</span>' +
- '<span class="feature call-images"></span>' +
- '</span>' +
- '</a>';
- }
- }
-
- // Add to DOM
- invite_search_sel.append(results_html);
-
- var search_one_sel = invite_search_sel.find('a.participant_search_one');
- search_one_sel.filter(':first').addClass('hover');
-
- // Apply avatars
- for(j = 0; j < results_arr.length; j++) {
- Avatar.get(results_arr[j], 'cache', 'true', 'forget');
- }
-
- // Apply events
- search_one_sel.click(function() {
- var this_sel = $(this);
-
- self._add_participants_invite_list(
- this_sel.attr('data-xid'),
- this_sel.text(),
- this_sel.attr('data-support')
- );
-
- self._reset_participants_invite_filter();
- invite_input_sel.focus();
- });
-
- search_one_sel.hover(function() {
- search_one_sel.filter('.hover').removeClass('hover');
- $(this).addClass('hover');
- }, function() {
- $(this).removeClass('hover');
- });
- }
- } catch(e) {
- Console.error('Muji._engage_participants_invite_filter', e);
- }
-
- };
-
-
- /**
- * Sends participant actual Muji invite
- * @private
- * @param {string|object} xid
- * @return {undefined}
- */
- self._send_participants_invite_list = function(xid) {
-
- try {
- if(self.in_call()) {
- self._session.invite(xid);
- }
- } catch(e) {
- Console.error('Muji._send_participants_invite_list', e);
- }
-
- };
-
-
- /**
- * Adds a participant to the invite list
- * @private
- * @param {string} xid
- * @param {string} name
- * @param {string} support
- * @return {undefined}
- */
- self._add_participants_invite_list = function(xid, name, support) {
-
- try {
- // Selectors
- var chatroom_sel = $('#muji .chatroom');
- var invite_form_sel = chatroom_sel.find('form.participants_invite_form');
- var invite_list_sel = chatroom_sel.find('.participants_invite_list');
-
- var pre_invite_one_sel = invite_list_sel.find('.invite_one').filter(function() {
- return (xid === $(this).attr('data-xid')) && true;
- });
-
- if(pre_invite_one_sel.size()) {
- throw 'Already existing for: ' + xid;
- }
-
- var title;
- var _class = [];
-
- switch(support) {
- case 'audio':
- case 'video':
- title = Common.printf(Common._e("%s is able to receive group calls."), name); break;
-
- default:
- title = Common.printf(Common._e("%s may not support group calls."), name);
- _class.push('invite_unsupported');
- }
-
- // Append element
- var invite_one_sel = $('<span class="invite_one ' + _class.join(' ') + '" data-xid="' + Common.encodeQuotes(xid) + '" title="' + title + '">' + name.htmlEnc() + '<a class="invite_one_remove call-images" href="#"></a></span>');
- invite_one_sel.appendTo(invite_list_sel);
-
- // Events
- invite_one_sel.find('a.invite_one_remove').click(function() {
- self._remove_participants_invite_list(invite_one_sel);
- });
-
- if(invite_list_sel.find('.invite_one').size() >= 1) {
- invite_form_sel.find('.invite_validate').show();
- invite_list_sel.filter(':hidden').show();
- }
- } catch(e) {
- Console.error('Muji._add_participants_invite_list', e);
- }
-
- };
-
-
- /**
- * Removes a participant from the invite list
- * @private
- * @param {object} participant_sel
- * @return {undefined}
- */
- self._remove_participants_invite_list = function(participant_sel) {
-
- try {
- // Selectors
- var chatroom_sel = $('#muji .chatroom');
- var invite_form_sel = chatroom_sel.find('form.participants_invite_form');
- var invite_list_sel = chatroom_sel.find('.participants_invite_list');
-
- participant_sel.remove();
-
- if(invite_list_sel.find('.invite_one').size() === 0) {
- invite_form_sel.find('.invite_validate').hide();
- invite_list_sel.filter(':visible').hide();
- }
-
- invite_form_sel.find('input.invite_xid').focus();
- } catch(e) {
- Console.error('Muji._remove_participants_invite_list', e);
- }
-
- };
-
-
- /**
- * Hovers either the next or previous participant
- * @private
- * @param {string} direction
- * @return {undefined}
- */
- self._hover_participants_invite_list = function(direction) {
-
- try {
- // Up/down: navigate through results
- var chatroom_sel = $('#muji .chatroom');
- var participants_invite_search_sel = chatroom_sel.find('.participants_invite_search');
- var participant_search_one_sel = chatroom_sel.find('.participant_search_one');
-
- if(participant_search_one_sel.size()) {
- var hover_index = participant_search_one_sel.index($('.hover'));
-
- // Up (decrement) or down (increment)?
- if(direction === 'up') {
- hover_index--;
- } else {
- hover_index++;
- }
-
- if(!hover_index) {
- hover_index = 0;
- }
-
- // Nobody before/after?
- if(participant_search_one_sel.eq(hover_index).size() === 0) {
- if(direction === 'up') {
- hover_index = participant_search_one_sel.filter(':last').index();
- } else {
- hover_index = 0;
- }
- }
-
- // Hover the previous/next user
- participant_search_one_sel.removeClass('hover');
- participant_search_one_sel.eq(hover_index).addClass('hover');
-
- // Scroll to the hovered user (if out of limits)
- participants_invite_search_sel.scrollTo(
- participant_search_one_sel.filter('.hover:first'), 0, { margin: true }
- );
- }
- } catch(e) {
- Console.error('Muji._hover_participants_invite_list', e);
- }
-
- };
-
-
- /**
- * Lists the participants in the invite list
- * @private
- * @return {object}
- */
- self._list_participants_invite_list = function() {
-
- var participants_obj = {};
-
- try {
- $('#muji .chatroom .participants_invite_list .invite_one').each(function() {
- participants_obj[$(this).attr('data-xid')] = 1;
- });
- } catch(e) {
- Console.error('Muji._list_participants_invite_list', e);
- } finally {
- return participants_obj;
- }
-
- };
-
-
- /**
- * Adapts the Muji view to the window size
- * @private
- * @return {undefined}
- */
- self._adapt = function() {
-
- try {
- if(self.in_call() && Common.exists('#muji')) {
- Call.adapt_local(
- $('#muji .local_video')
- );
-
- Call.adapt_remote(
- $('#muji .videoroom')
- );
- }
- } catch(e) {
- Console.error('Muji._adapt', e);
- }
-
- };
-
-
- /**
- * Scrolls down to last received message
- * @private
- * @return {undefined}
- */
- self._message_scroll = function() {
-
- try {
- var chatroom_view_sel = $('#muji .chatroom .chatroom_view');
-
- // Scroll down to message
- if(chatroom_view_sel.size() && chatroom_view_sel.is(':visible')) {
- chatroom_view_sel[0].scrollTop = chatroom_view_sel[0].scrollHeight;
- }
- } catch(e) {
- Console.error('Muji._message_scroll', e);
- }
-
- };
-
-
- /**
- * Notifies that a new message has been received
- * @private
- * @return {undefined}
- */
- self._message_notify = function() {
-
- try {
- // Selectors
- var tools_call_sel = $('#top-content .tools.call');
- var notify_sel = tools_call_sel.find('.notify');
-
- if(!notify_sel.size()) {
- notify_sel = $(
- '<div class="notify one-counter" data-counter="0">0</div>'
- );
-
- notify_sel.appendTo(tools_call_sel);
- }
-
- // Count & update
- var count_notifications = parseInt((notify_sel.attr('data-counter') || 0), 10);
- count_notifications++;
-
- notify_sel.text(count_notifications);
- notify_sel.attr('data-counter', count_notifications);
-
- // Update general interface
- Interface.updateTitle();
- } catch(e) {
- Console.error('Muji._message_notify', e);
- }
-
- };
-
-
- /**
- * Removes displayed message notifications
- * @private
- * @return {undefined}
- */
- self._message_unnotify = function() {
-
- try {
- $('#top-content .tools.call .notify').remove();
-
- // Update general interface
- Interface.updateTitle();
- } catch(e) {
- Console.error('Muji._message_unnotify', e);
- }
-
- };
-
-
- /**
- * Receive a Muji call
- * @public
- * @param {object} args
- * @param {object} stanza
- * @return {boolean}
- */
- self.receive = function(args, stanza) {
-
- try {
- if(!Call.is_ongoing()) {
- // Outdated invite?
- var invite_delay = DateUtils.readMessageDelay(stanza.getNode(), true);
- var date_now = DateUtils.getTimeStamp();
-
- if(invite_delay &&
- (date_now - DateUtils.extractStamp(invite_delay)) >= self.INVITE_MAX_DELAY) {
- Console.warn('Muji.receive', 'Discarded outdated invite from: ' + Common.getStanzaFrom(stanza));
- return;
- }
-
- // Create call session
- self._new(
- args.jid,
- (args.media || JSJAC_JINGLE_MEDIA_VIDEO),
- stanza,
- args
- );
-
- // Notify user
- Call.notify(
- JSJAC_JINGLE_SESSION_MUJI,
- args.jid,
- ('call_' + (args.media || 'video')),
- args.media,
- Common.bareXID(args.from)
- );
-
- Audio.play('incoming-call', true);
- }
- } catch(e) {
- Console.error('Muji.receive', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Start a Muji call
- * @public
- * @param {string} room
- * @param {string} mode
- * @return {boolean}
- */
- self.start = function(room, mode) {
-
- try {
- if(!Call.is_ongoing()) {
- self._new(room, mode);
- }
- } catch(e) {
- Console.error('Muji.start', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Reset current Muji call
- * @public
- * @return {boolean}
- */
- self._reset = function() {
-
- try {
- // Trash interface
- Call.stop_counter();
- Call.stop_session();
- self._destroy_interface();
- $('body').removeClass('in_muji_call');
-
- // Clean notifications
- self._message_unnotify();
-
- // Hack: stop audio in case it is still ringing
- Audio.stop('incoming-call');
- Audio.stop('outgoing-call');
- } catch(e) {
- Console.error('Muji._reset', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Stops current Muji call
- * @public
- * @param {boolean} abort
- * @return {boolean}
- */
- self.stop = function(abort) {
-
- try {
- // Reset interface
- self._reset();
-
- // Stop Muji session
- if(self._session !== null) {
- if(abort === true) {
- self._session.abort();
- self._session.get_session_leave_error(self._session, null);
- } else {
- self._session.leave();
- }
-
- Console.debug('Stopping current Muji call...');
- } else {
- Console.warn('No Muji call to be terminated!');
- }
- } catch(e) {
- Console.error('Muji.stop', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Mutes current Muji call
- * @public
- * @return {undefined}
- */
- self.mute = function() {
-
- try {
- Call.mute(
- $('#muji .videoroom .topbar .controls a')
- );
- } catch(e) {
- Console.error('Muji.mute', e);
- }
-
- };
-
-
- /**
- * Unmutes current Muji call
- * @public
- * @return {undefined}
- */
- self.unmute = function() {
-
- try {
- Call.unmute(
- $('#muji .videoroom .topbar .controls a')
- );
- } catch(e) {
- Console.error('Muji.mute', e);
- }
-
- };
-
-
- /**
- * Checks whether room given is Muji room or not
- * @public
- * @param {string} room
- * @return {boolean}
- */
- self.is_room = function(room) {
-
- is_room = false;
-
- try {
- if(self.in_call() && self._session.get_to()) {
- is_room = (room === self._session.get_to());
- }
- } catch(e) {
- Console.error('Muji.is_room', e);
- } finally {
- return is_room;
- }
-
- };
-
-
- /**
- * Checks whether room is full or not (over-capacity)
- * @public
- * @return {boolean}
- */
- self.is_full = function() {
-
- is_full = false;
-
- try {
- if($('#muji .chatroom_participants .participants_full').is(':visible')) {
- is_full = true;
- }
- } catch(e) {
- Console.error('Muji.is_full', e);
- } finally {
- return is_full;
- }
-
- };
-
-
- /**
- * Checks whether user is in call or not
- * @public
- * @return {boolean}
- */
- self.in_call = function() {
-
- in_call = false;
-
- try {
- if(self._session &&
- (self._session.get_status() === JSJAC_JINGLE_MUJI_STATUS_PREPARING ||
- self._session.get_status() === JSJAC_JINGLE_MUJI_STATUS_PREPARED ||
- self._session.get_status() === JSJAC_JINGLE_MUJI_STATUS_INITIATING ||
- self._session.get_status() === JSJAC_JINGLE_MUJI_STATUS_INITIATED ||
- self._session.get_status() === JSJAC_JINGLE_MUJI_STATUS_LEAVING)) {
- in_call = true;
- }
- } catch(e) {
- Console.error('Muji.in_call', e);
- } finally {
- return in_call;
- }
-
- };
-
-
- /**
- * Checks if the given call SID is the same as the current call's one
- * @public
- * @param {object}
- * @return {boolean}
- */
- self.is_same_sid = function(muji) {
-
- try {
- return Call.is_same_sid(self._session, muji);
- } catch(e) {
- Console.error('Muji.is_same_sid', e);
- }
-
- };
-
-
- /**
- * Returns if current Muji call is audio
- * @public
- * @return {boolean}
- */
- self.is_audio = function() {
-
- try {
- return Call.is_audio(self._session);
- } catch(e) {
- Console.error('Muji.is_audio', e);
- }
-
- };
-
-
- /**
- * Returns if current Muji call is video
- * @public
- * @return {boolean}
- */
- self.is_video = function() {
-
- try {
- return Call.is_video(self._session);
- } catch(e) {
- Console.error('Muji.is_video', e);
- }
-
- };
-
-
- /**
- * Returns the caller XID
- * @public
- * @return {string}
- */
- self.get_caller_xid = function() {
-
- try {
- return self._caller_xid || Common.getXID();
- } catch(e) {
- Console.error('Muji.get_caller_xid', e);
- }
-
- };
-
-
- /**
- * Get the notification map
- * @private
- * @return {object}
- */
- self._notify_map = function() {
-
- try {
- return {
- 'call_audio': {
- 'text': Common._e("Incoming group call"),
-
- 'buttons': {
- 'accept': {
- 'text': Common._e("Accept"),
- 'color': 'green',
- 'cb': function(xid, mode) {
- self._session.join();
- Audio.stop('incoming-call');
- }
- },
-
- 'decline': {
- 'text': Common._e("Decline"),
- 'color': 'red',
- 'cb': function(xid, mode) {
- self.stop(true);
- Audio.stop('incoming-call');
- }
- }
- }
- },
-
- 'call_video': {
- 'text': Common._e("Incoming group call"),
-
- 'buttons': {
- 'accept': {
- 'text': Common._e("Accept"),
- 'color': 'green',
- 'cb': function(xid, mode) {
- self._session.join();
- Audio.stop('incoming-call');
- }
- },
-
- 'decline': {
- 'text': Common._e("Decline"),
- 'color': 'red',
- 'cb': function(xid, mode) {
- self.stop(true);
- Audio.stop('incoming-call');
- }
- }
- }
- },
-
- 'preparing': {
- 'text': Common._e("Preparing group call..."),
-
- 'buttons': {
- 'cancel': {
- 'text': Common._e("Cancel"),
- 'color': 'red',
- 'cb': function(xid, mode) {
- self.stop(true);
- }
- }
- }
- },
-
- 'waiting': {
- 'text': Common._e("Preparing group call..."),
-
- 'buttons': {
- 'cancel': {
- 'text': Common._e("Cancel"),
- 'color': 'red',
- 'cb': function(xid, mode) {
- self._session.leave();
- }
- }
- }
- },
-
- 'connecting': {
- 'text': Common._e("Connecting to group call..."),
-
- 'buttons': {
- 'cancel': {
- 'text': Common._e("Cancel"),
- 'color': 'red',
- 'cb': function(xid, mode) {
- self._session.leave();
- }
- }
- }
- },
-
- 'error': {
- 'text': Common._e("Group call error"),
-
- 'buttons': {
- 'retry': {
- 'text': Common._e("Retry"),
- 'color': 'blue',
- 'cb': function(xid, mode) {
- self.start(xid, mode);
- }
- },
-
- 'cancel': {
- 'text': Common._e("Cancel"),
- 'color': 'red',
- 'cb': function(xid, mode) {
- self._reset();
- }
- }
- }
- },
-
- 'ending': {
- 'text': Common._e("Ending group call...")
- },
-
- 'ended': {
- 'text': Common._e("Group call ended"),
-
- 'buttons': {
- 'okay': {
- 'text': Common._e("Okay"),
- 'color': 'blue',
- 'cb': function(xid, mode) {
- self._reset();
- }
- }
- }
- }
- };
- } catch(e) {
- Console.error('Muji._notify_map', e);
-
- return {};
- }
-
- };
-
-
- /**
- * Create the Muji interface
- * @public
- * @param {string} room
- * @param {string} mode
- * @return {object}
- */
- self._create_interface = function(room, mode) {
-
- try {
- // Jingle interface already exists?
- if(Common.exists('#muji')) {
- throw 'Muji interface already exist!';
- }
-
- // Local poster
- var local_poster = './images/placeholders/jingle_video_local.png';
-
- if(mode === 'audio') {
- local_poster = './images/placeholders/jingle_audio_local.png';
- }
-
- // Create DOM
- $('body').append(
- '<div id="muji" class="videochat_box lock removable ' + hex_md5(room) + '" data-room="' + Common.encodeQuotes(room) + '" data-mode="' + Common.encodeQuotes(mode) + '">' +
- '<div class="videochat_items">' +
- '<div class="videoroom">' +
- '<div class="topbar">' +
- '<div class="controls">' +
- '<a href="#" class="leave control-button" data-type="leave"><span class="icon call-images"></span>' + Common._e("Leave") + '</a>' +
- '<a href="#" class="mute control-button" data-type="mute"><span class="icon call-images"></span>' + Common._e("Mute") + '</a>' +
- '<a href="#" class="unmute control-button" data-type="unmute"><span class="icon call-images"></span>' + Common._e("Unmute") + '</a>' +
- '</div>' +
-
- '<div class="elapsed">00:00:00</div>' +
-
- '<div class="actions">' +
- '<a href="#" class="close action-button call-images" data-type="close"></a>' +
- '</div>' +
- '</div>' +
-
- '<div class="local_video">' +
- '<video src="" alt="" poster="' + local_poster + '"></video>' +
- '</div>' +
-
- '<div class="remote_container">' +
- '<div class="remote_video_shaper remote_video"></div>' +
- '<div class="remote_video_shaper remote_video"></div>' +
- '<div class="remote_video_shaper remote_video"></div>' +
- '<div class="remote_video_shaper remote_video"></div>' +
- '<div class="remote_video_shaper remote_video"></div>' +
- '<div class="remote_video_shaper remote_video"></div>' +
- '</div>' +
-
- '<div class="empty_message">' +
- '<span class="text">' + Common._e("Nobody there. Invite some people!") + '</span>' +
- '</div>' +
- '</div>' +
-
- '<div class="chatroom">' +
- '<div class="chatroom_participants">' +
- '<div class="participants_default_view">' +
- '<div class="participants_default_details">' +
- '<span class="participants_counter">' + Common.printf(Common._e("%s participants"), 0) + '</span>' +
- '<span class="participants_full">' + Common._e("(full)") + '</span>' +
- '</div>' +
-
- '<a class="participants_invite call-images" href="#" title="' + Common._e("Invite people...") + '"></a>' +
- '</div>' +
-
- '<div class="participants_invite_box">' +
- '<div class="participants_invite_list"></div>' +
-
- '<form class="participants_invite_form" action="#" method="post">' +
- '<div class="invite_input_container">' +
- '<input class="invite_xid input-reset" name="xid" type="text" placeholder="' + Common._e("Enter people names...") + '" autocomplete="off" />' +
- '</div>' +
-
- '<a class="invite_validate" href="#">' +
- '<span class="invite_validate_icon call-images"></span>' +
- '</a>' +
- '</form>' +
-
- '<div class="participants_invite_search"></div>' +
- '</div>' +
- '</div>' +
-
- '<div class="chatroom_view"></div>' +
-
- '<form class="chatroom_form" action="#" method="post">' +
- '<span class="message_icon call-images"></span>' +
- '<span class="message_separator"></span>' +
-
- '<div class="message_input_container">' +
- '<input class="message_input input-reset" name="message" type="text" placeholder="' + Common._e("Send a message...") + '" autocomplete="off" />' +
- '</div>' +
- '</form>' +
- '</div>' +
- '</div>' +
- '</div>'
- );
-
- // Apply events
- self._events_interface();
-
- // Apply user avatar
- Avatar.get(xid, 'cache', 'true', 'forget');
- } catch(e) {
- Console.error('Muji._create_interface', e);
- } finally {
- return $('#muji');
- }
-
- };
-
-
- /**
- * Destroy the Muji interface
- * @public
- * @return {undefined}
- */
- self._destroy_interface = function() {
-
- try {
- Call.destroy_interface(
- $('#muji')
- );
- } catch(e) {
- Console.error('Muji._destroy_interface', e);
- }
-
- };
-
-
- /**
- * Show the Muji interface
- * @private
- * @return {boolean}
- */
- self._show_interface = function() {
-
- try {
- Call.show_interface(
- self,
- $('#muji'),
- $('#muji .videoroom')
- );
-
- self._message_scroll();
- self._message_unnotify();
- } catch(e) {
- Console.error('Muji._show_interface', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Hide the Muji interface
- * @private
- * @return {boolean}
- */
- self._hide_interface = function() {
-
- try {
- Call.hide_interface(
- $('#muji'),
- $('#muji .videoroom')
- );
- } catch(e) {
- Console.error('Muji._hide_interface', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Attaches interface events
- * @private
- * @return {boolean}
- */
- self._events_interface = function() {
-
- try {
- // Common selectors
- var muji_chatroom = $('#muji .chatroom');
- var chatroom_form = muji_chatroom.find('form.chatroom_form');
- var chatroom_participants = muji_chatroom.find('.chatroom_participants');
- var participants_invite = chatroom_participants.find('.participants_default_view .participants_invite');
- var participants_invite_box = chatroom_participants.find('.participants_invite_box');
- var participants_invite_list = participants_invite_box.find('.participants_invite_list');
- var participants_invite_form = participants_invite_box.find('.participants_invite_form');
- var participants_invite_input = participants_invite_form.find('input[name="xid"]');
- var participants_invite_validate = participants_invite_form.find('.invite_validate');
- var participants_invite_search = participants_invite_box.find('.participants_invite_search');
-
- // Apply events
- Call.events_interface(
- self,
- $('#muji'),
- $('#muji .videoroom')
- );
-
- // People invite event
- participants_invite.click(function() {
- try {
- if(!participants_invite_box.is(':animated')) {
- if(participants_invite_box.is(':hidden')) {
- participants_invite_box.stop(true).slideDown(250, function() {
- participants_invite_input.focus();
- });
- } else {
- participants_invite_input.blur();
- participants_invite_box.stop(true).slideUp(250, function() {
- // Reset everything
- participants_invite_list.empty().hide();
- participants_invite_validate.hide();
- participants_invite_input.val('');
- self._reset_participants_invite_filter();
- });
- }
- }
- } catch(_e) {
- Console.error('Muji._show_interface[event]', _e);
- } finally {
- return false;
- }
- });
-
- // Invite input key events
- participants_invite_input.keydown(function(e) {
- try {
- if(e.keyCode == 9) {
- self._hover_participants_invite_list('down');
-
- return false;
- }
- } catch(_e) {
- Console.error('Muji._show_interface[event]', _e);
- }
- });
-
- participants_invite_input.keyup(function(e) {
- try {
- var this_sel = $(this);
-
- if(e.keyCode == 27) {
- // Escape: close interface
- if(!this_sel.val().trim()) {
- participants_invite.click();
- } else {
- self._reset_participants_invite_filter();
- }
-
- return false;
- } else if(e.keyCode == 9) {
- // Tabulate: skip there (see keydown above)
- return false;
- } else if(e.keyCode == 38 || e.keyCode == 40) {
- var direction = (e.keyCode == 38) ? 'up' : 'down';
- self._hover_participants_invite_list(direction);
-
- return false;
- } else {
- // Other keys: assume something has been typed
- self._engage_participants_invite_filter(
- this_sel.val()
- );
- }
- } catch(_e) {
- Console.error('Muji._show_interface[event]', _e);
- }
- });
-
- // Input auto-focus
- chatroom_form.click(function() {
- chatroom_form.find('input[name="message"]').focus();
- });
-
- // Invite form send event
- participants_invite_form.submit(function() {
- try {
- if(participants_invite_search.find('.participant_search_one.hover').size()) {
- // Add the hovered user
- var participant_search_one_hover_sel = participants_invite_search.find('.participant_search_one.hover:first');
-
- if(participant_search_one_hover_sel.size() >= 1) {
- participant_search_one_hover_sel.click();
-
- return false;
- }
- } else {
- var invite_arr = Object.keys(self._list_participants_invite_list());
-
- if(invite_arr && invite_arr.length) {
- self._send_participants_invite_list(invite_arr);
- }
-
- participants_invite.click();
- }
- } catch(_e) {
- Console.error('Muji._show_interface[event]', _e);
- } finally {
- return false;
- }
- });
-
- // Invite form validate event
- participants_invite_validate.click(function() {
- try {
- participants_invite_form.submit();
- } catch(_e) {
- Console.error('Muji._show_interface[event]', _e);
- } finally {
- return false;
- }
- });
-
- // Message send event
- chatroom_form.submit(function() {
- try {
- if(self._session === null) {
- throw 'Muji session unavailable';
- }
-
- var input_sel = $(this).find('input[name="message"]');
- var body = input_sel.val();
-
- if(body) {
- self._session.send_message(body);
- input_sel.val('');
- }
- } catch(_e) {
- Console.error('Muji._show_interface[event]', _e);
- } finally {
- return false;
- }
- });
- } catch(e) {
- Console.error('Muji._events_interface', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.launch = function() {
-
- try {
- $(window).resize(self._adapt());
- } catch(e) {
- Console.error('Muji.launch', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
-
-Muji.launch(); \ No newline at end of file
diff --git a/app/javascripts/music.js b/app/javascripts/music.js
deleted file mode 100644
index 0f2d91d6..00000000
--- a/app/javascripts/music.js
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the music JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Music = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Opens the music bubble
- * @public
- * @return {boolean}
- */
- self.open = function() {
-
- try {
- var path = '.music-content';
-
- // Show the music bubble
- Bubble.show(path);
-
- $(document).oneTime(10, function() {
- $(path + ' input').focus();
- });
- } catch(e) {
- Console.error('Music.open', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Parses the music search XML
- * @public
- * @param {string} xml
- * @param {string} type
- * @return {undefined}
- */
- self.parse = function(xml, type) {
-
- try {
- var path = '.music-content ';
- var content = path + '.list';
- var path_type = content + ' .' + type;
-
- // Create the result container
- if(!Common.exists(path_type)) {
- var code = '<div class="' + type + '"></div>';
-
- if(type == 'local') {
- $(content).prepend(code);
- } else {
- $(content).append(code);
- }
- }
-
- // Fill the results
- $(xml).find('track').each(function() {
- // Parse the XML
- var this_sel = $(this);
-
- var id = this_sel.find('id').text() || hex_md5(uri);
- var title = this_sel.find('name').text();
- var artist = this_sel.find('artist').text();
- var source = this_sel.find('source').text();
- var duration = this_sel.find('duration').text();
- var uri = this_sel.find('url').text();
- var mime = this_sel.find('type').text() || 'audio/ogg';
-
- // Local URL?
- if(type == 'local') {
- uri = Utils.generateURL(uri);
- }
-
- // Append the HTML code
- $(path_type).append('<a href="#" class="song" data-id="' + id + '">' + title + '</a>');
-
- // Current playing song?
- var current_song = $(path_type + ' a[data-id="' + id + '"]');
-
- if(Common.exists('.music-audio[data-id="' + id + '"]')) {
- current_song.addClass('playing');
- }
-
- // Click event
- current_song.click(function() {
- return self.add(id, title, artist, source, duration, uri, mime, type);
- });
- });
-
- // The search is finished
- if(Common.exists(content + ' .jamendo') && Common.exists(content + ' .local')) {
- // Get the result values
- var jamendo = $(content + ' .jamendo').text();
- var local = $(content + ' .local').text();
-
- // Enable the input
- $(path + 'input').val('').removeAttr('disabled');
-
- // No result
- if(!jamendo && !local) {
- $(path + '.no-results').show();
- }
-
- // We must put a separator between the categories
- if(jamendo && local) {
- $(content + ' .local').addClass('special');
- }
- }
- } catch(e) {
- Console.error('Music.parse', e);
- }
-
- };
-
-
- /**
- * Sends the music search requests
- * @public
- * @return {undefined}
- */
- self.search = function() {
-
- try {
- var path = '.music-content ';
-
- // We get the input string
- var string = $(path + 'input').val();
-
- // We lock the search input
- $(path + 'input').attr('disabled', true);
-
- // We reset the results
- $(path + '.list div').remove();
- $(path + '.no-results').hide();
-
- // Get the Jamendo results
- $.get('./server/music-search.php', {searchquery: string, location: 'jamendo'}, function(data) {
- self.parse(data, 'jamendo');
- });
-
- // Get the local results
- $.get('./server/music-search.php', {
- searchquery: string,
- location: JAPPIX_LOCATION
- }, function(data) {
- self.parse(data, 'local');
- });
- } catch(e) {
- Console.error('Music.search', e);
- }
-
- };
-
-
- /**
- * Performs an action on the music player
- * @public
- * @param {string} action
- * @return {boolean}
- */
- self.action = function(action) {
-
- try {
- // Initialize
- var audio_sel = document.getElementById('top-content').getElementsByTagName('audio')[0];
-
- // Nothing to play, exit
- if(!audio_sel) {
- return false;
- }
-
- var stopButton = $('#top-content a.stop');
-
- // User play a song
- if(action == 'play') {
- stopButton.show();
- audio_sel.load();
- audio_sel.play();
-
- audio_sel.addEventListener('ended', function() {
- self.action('stop');
- }, true);
-
- Console.log('Music is now playing.');
- } else if(action == 'stop') {
- // User stop the song / end of song
- stopButton.hide();
- audio_sel.pause();
-
- $('#top-content .music').removeClass('actived');
- $('.music-content .list a').removeClass('playing');
- $('.music-audio').remove();
-
- self.publish();
-
- Console.log('Music is now stopped.');
- }
- } catch(e) {
- Console.error('Music.action', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Publishes the current title over PEP
- * @public
- * @param {string} title
- * @param {string} artist
- * @param {string} source
- * @param {string} duration
- * @param {string} uri
- * @return {undefined}
- */
- self.publish = function(title, artist, source, duration, uri) {
-
- /* REF: http://xmpp.org/extensions/xep-0118.html */
-
- try {
- // We share the tune on PEP if enabled
- if(Features.enabledPEP()) {
- var iq = new JSJaCIQ();
- iq.setType('set');
-
- // Create the main PubSub nodes
- var pubsub = iq.appendNode('pubsub', {'xmlns': NS_PUBSUB});
- var publish = pubsub.appendChild(iq.buildNode('publish', {'node': NS_TUNE, 'xmlns': NS_PUBSUB}));
- var item = publish.appendChild(iq.buildNode('item', {'xmlns': NS_PUBSUB}));
- var tune = item.appendChild(iq.buildNode('tune', {'xmlns': NS_TUNE}));
-
- // Enough data?
- if(title || artist || source || uri) {
- var music_data = {
- 'title': title,
- 'artist': artist,
- 'source': source,
- 'length': length,
- 'uri': uri
- };
-
- // Create the children nodes
- var cur_value;
-
- for(var cur_name in music_data) {
- cur_value = music_data[cur_name];
-
- if(cur_value) {
- tune.appendChild(iq.buildNode(cur_name, {
- 'xmlns': NS_TUNE
- }, cur_value));
- }
- }
- }
-
- con.send(iq);
-
- Console.info('New tune sent: ' + title);
- }
- } catch(e) {
- Console.error('Music.publish', e);
- }
-
- };
-
-
- /**
- * Adds a music title to the results
- * @public
- * @param {string} id
- * @param {string} title
- * @param {string} artist
- * @param {string} source
- * @param {string} duration
- * @param {string} uri
- * @param {string} mime
- * @param {string} type
- * @return {boolean}
- */
- self.add = function(id, title, artist, source, duration, uri, mime, type) {
-
- try {
- var path = '.music-content ';
- var music_audio_sel = $('.music-audio');
-
- // We remove & create a new audio tag
- music_audio_sel.remove();
- $(path + '.player').prepend('<audio class="music-audio" type="' + mime + '" data-id="' + id + '" />');
-
- // We apply the new source to the player
- if(type == 'jamendo') {
- music_audio_sel.attr('src', 'http://api.jamendo.com/get2/stream/track/redirect/?id=' + id + '&streamencoding=ogg2');
- } else {
- music_audio_sel.attr('src', uri);
- }
-
- // We play the target sound
- self.action('play');
-
- // We set the actived class
- $('#top-content .music').addClass('actived');
-
- // We set a current played track indicator
- $(path + '.list a').removeClass('playing');
- $(path + 'a[data-id="' + id + '"]').addClass('playing');
-
- // We publish what we listen
- self.publish(title, artist, source, duration, uri);
- } catch(e) {
- Console.error('Music.add', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @param {type} name
- * @return {undefined}
- */
- self.instance = function() {
-
- try {
- // When music search string submitted
- $('.music-content input').keyup(function(e) {
- // Enter : send
- if(e.keyCode == 13 && $(this).val()) {
- self.search();
- }
-
- // Escape : quit
- if(e.keyCode == 27) {
- Bubble.close();
- }
- });
- } catch(e) {
- Console.error('Music.instance', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/name.js b/app/javascripts/name.js
deleted file mode 100644
index 5a0a5520..00000000
--- a/app/javascripts/name.js
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the buddy name related JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Name = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Gets an user name for buddy add tool
- * @public
- * @param {string} xid
- * @return {undefined}
- */
- self.getAddUser = function(xid) {
-
- try {
- var iq = new JSJaCIQ();
- iq.setType('get');
- iq.setTo(xid);
-
- iq.appendNode('vCard', {'xmlns': NS_VCARD});
-
- con.send(iq, self.handleAddUser);
- } catch(e) {
- Console.error('Name.getAddUser', e);
- }
-
- };
-
-
- /**
- * Handles an user name for buddy add tool
- * @public
- * @param {object} iq
- * @return {boolean}
- */
- self.handleAddUser = function(iq) {
-
- try {
- // Was it an obsolete request?
- if(!Common.exists('.add-contact-name-get[data-for="' + escape(Common.bareXID(Common.getStanzaFrom(iq))) + '"]')) {
- return false;
- }
-
- // Reset the waiting item
- $('.add-contact-name-get').hide().removeAttr('data-for');
-
- // Get the names
- if(iq.getType() == 'result') {
- var full_name = self.generateBuddy(iq)[0];
-
- if(full_name) {
- $('.add-contact-name').val(full_name);
- }
- }
- } catch(e) {
- Console.error('Name.handleAddUser', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Generates the good buddy name from a vCard IQ reply
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.generateBuddy = function(iq) {
-
- try {
- // Get the IQ content
- var vcard_sel = $(iq.getNode()).find('vCard');
-
- // Get the full name & the nickname
- var pFull = vcard_sel.find('FN:first').text();
- var pNick = vcard_sel.find('NICKNAME:first').text();
-
- // No full name?
- if(!pFull) {
- // Get the given name
- var pN = vcard_sel.find('N:first');
- var pGiven = pN.find('GIVEN:first').text();
-
- if(pGiven) {
- pFull = pGiven;
-
- // Get the family name (optional)
- var pFamily = pN.find('FAMILY:first').text();
-
- if(pFamily) {
- pFull += ' ' + pFamily;
- }
- }
- }
-
- return [pFull, pNick];
- } catch(e) {
- Console.error('Name.generateBuddy', e);
- }
-
- };
-
-
- /**
- * Returns the given XID buddy name
- * @public
- * @param {string} xid
- * @return {string}
- */
- self.getBuddy = function(xid) {
-
- try {
- // Initialize
- var cname, bname;
-
- // If the buddy is an anonymous account we use the resource
- // if not empty
- if (self.buddyIsAnonymous(xid) && Common.thisResource(xid)) {
- bname = Common.thisResource(xid);
- } else {
-
- // Cut the XID resource
- xid = Common.bareXID(xid);
-
- // This is me?
- if(Utils.isAnonymous() && !xid) {
- bname = Common._e("You");
- } else if(xid == Common.getXID()) {
- bname = self.get();
- }
-
- // Not me!
- else {
- cname = $('#roster .buddy[data-xid="' + escape(xid) + '"]:first .buddy-name').html();
-
- // Complete name exists?
- if(cname) {
- bname = cname.revertHtmlEnc();
- } else {
- bname = Common.getXIDNick(xid);
- }
- }
- }
-
- return bname;
- } catch(e) {
- Console.error('Name.getBuddy', e);
- }
-
- };
-
-
- /**
- * Gets the nickname of the user
- * @public
- * @return {string}
- */
- self.getNick = function() {
-
- try {
- // Try to read the user nickname
- var nick = DataStore.getDB(Connection.desktop_hash, 'profile', 'nick');
-
- // No nick?
- if(!nick) {
- nick = con.username;
- }
-
- return nick;
- } catch(e) {
- Console.error('Name.getNick', e);
- }
-
- };
-
-
- /**
- * Gets the full name of the user
- * @public
- * @return {string}
- */
- self.get = function() {
-
- try {
- // Try to read the user name
- var name = DataStore.getDB(Connection.desktop_hash, 'profile', 'name');
-
- // No name? Use the nickname instead
- if(!name) {
- name = self.getNick();
- }
-
- return name;
- } catch(e) {
- Console.error('Name.get', e);
- }
-
- };
-
-
- /**
- * Gets the MUC nickname of the user
- * @public
- * @param {string} id
- * @return {string}
- */
- self.getMUCNick = function(id) {
-
- try {
- return unescape($('#' + id).attr('data-nick'));
- } catch(e) {
- Console.error('Name.getMUCNick', e);
- }
-
- };
-
- /*
- * Checks if the XID is from an anonymous account
- * @public
- * @param {string} xid
- */
- self.buddyIsAnonymous = function(xid) {
- return /^([a-f\d]{8}(-[a-f\d]{4}){3}-[a-f\d]{12}?)@/ig.test(xid);
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
diff --git a/app/javascripts/notification.js b/app/javascripts/notification.js
deleted file mode 100644
index 4310d1a1..00000000
--- a/app/javascripts/notification.js
+++ /dev/null
@@ -1,658 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the notification JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Notification = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Resets the notifications alert if no one remaining
- * @public
- * @return {undefined}
- */
- self.closeEmpty = function() {
-
- try {
- if(!$('.one-notification').size()) {
- Bubble.close();
- }
- } catch(e) {
- Console.error('Notification.closeEmpty', e);
- }
-
- };
-
-
- /**
- * Checks if there are pending notifications
- * @public
- * @return {undefined}
- */
- self.check = function() {
-
- try {
- // Define the selectors
- var notif = '#top-content .notifications';
- var nothing = '.notifications-content .nothing';
- var empty = '.notifications-content .empty';
-
- // Get the notifications number
- var number = $('.one-notification').size();
-
- // Remove the red notify bubble
- $(notif + ' .notify').remove();
-
- // Any notification?
- if(number) {
- $(notif).prepend('<div class="notify one-counter" data-counter="' + number + '">' + number + '</div>');
- $(nothing).hide();
- $(empty).show();
- } else {
- $(empty).hide();
- $(nothing).show();
-
- // Purge the social inbox node
- self.purge();
- }
-
- // Update the page title
- Interface.updateTitle();
- } catch(e) {
- Console.error('Notification.check', e);
- }
-
- };
-
-
- /**
- * Creates a new notification
- * @public
- * @param {string} type
- * @param {string} from
- * @param {string} data
- * @param {string} body
- * @param {string} id
- * @param {boolean} inverse
- * @return {undefined}
- */
- self.create = function(type, from, data, body, id, inverse) {
-
- try {
- if(!type || !from) {
- return;
- }
-
- // Generate an ID hash
- if(!id) {
- id = hex_md5(type + from);
- }
-
- // Generate the text to be displayed
- var text, action, code;
- var yes_path = 'href="#"';
-
- // User things
- from = Common.bareXID(from);
- var hash = hex_md5(from);
-
- switch(type) {
- case 'subscribe':
- // Get the name to display
- var display_name = data[1];
-
- if(!display_name)
- display_name = data[0];
-
- text = '<b>' + display_name.htmlEnc() + '</b> ' + Common._e("would like to add you as a friend.") + ' ' + Common._e("Do you accept?");
-
- break;
-
- case 'invite_room':
- text = '<b>' + Name.getBuddy(from).htmlEnc() + '</b> ' + Common._e("would like you to join this chatroom:") + ' <em>' + data[0].htmlEnc() + '</em> ' + Common._e("Do you accept?");
-
- break;
-
- case 'request':
- text = '<b>' + from.htmlEnc() + '</b> ' + Common._e("would like to get authorization.") + ' ' + Common._e("Do you accept?");
-
- break;
-
- case 'send':
- yes_path = 'href="' + Common.encodeQuotes(data[1]) + '" target="_blank"';
-
- text = '<b>' + Name.getBuddy(from).htmlEnc() + '</b> ' + Common.printf(Common._e("would like to send you a file: “%s”.").htmlEnc(), '<em>' + Utils.truncate(body, 25).htmlEnc() + '</em>') + ' ' + Common._e("Do you accept?");
-
- break;
-
- case 'send_pending':
- text = '<b>' + Name.getBuddy(from).htmlEnc() + '</b> ' + Common.printf(Common._e("has received a file exchange request: “%s”.").htmlEnc(), '<em>' + Utils.truncate(body, 25).htmlEnc() + '</em>');
-
- break;
-
- case 'send_accept':
- text = '<b>' + Name.getBuddy(from).htmlEnc() + '</b> ' + Common.printf(Common._e("has accepted to receive your file: “%s”.").htmlEnc(), '<em>' + Utils.truncate(body, 25).htmlEnc() + '</em>');
-
- break;
-
- case 'send_reject':
- text = '<b>' + Name.getBuddy(from).htmlEnc() + '</b> ' + Common.printf(Common._e("has rejected to receive your file: “%s”.").htmlEnc(), '<em>' + Utils.truncate(body, 25).htmlEnc() + '</em>');
-
- break;
-
- case 'send_fail':
- text = '<b>' + Name.getBuddy(from).htmlEnc() + '</b> ' + Common.printf(Common._e("could not receive your file: “%s”.").htmlEnc(), '<em>' + Utils.truncate(body, 25).htmlEnc() + '</em>');
-
- break;
-
- case 'rosterx':
- text = Common.printf(Common._e("Do you want to see the friends %s suggests you?").htmlEnc(), '<b>' + Name.getBuddy(from).htmlEnc() + '</b>');
-
- break;
-
- case 'comment':
- text = '<b>' + data[0].htmlEnc() + '</b> ' + Common.printf(Common._e("commented an item you follow: “%s”.").htmlEnc(), '<em>' + Utils.truncate(body, 25).htmlEnc() + '</em>');
-
- break;
-
- case 'like':
- text = '<b>' + data[0].htmlEnc() + '</b> ' + Common.printf(Common._e("liked your post: “%s”.").htmlEnc(), '<em>' + Utils.truncate(body, 25).htmlEnc() + '</em>');
-
- break;
-
- case 'quote':
- text = '<b>' + data[0].htmlEnc() + '</b> ' + Common.printf(Common._e("quoted you somewhere: “%s”.").htmlEnc(), '<em>' + Utils.truncate(body, 25).htmlEnc() + '</em>');
-
- break;
-
- case 'wall':
- text = '<b>' + data[0].htmlEnc() + '</b> ' + Common.printf(Common._e("published on your wall: “%s”.").htmlEnc(), '<em>' + Utils.truncate(body, 25).htmlEnc() + '</em>');
-
- break;
-
- case 'photo':
- text = '<b>' + data[0].htmlEnc() + '</b> ' + Common.printf(Common._e("tagged you in a photo (%s).").htmlEnc(), '<em>' + Utils.truncate(body, 25).htmlEnc() + '</em>');
-
- break;
-
- case 'video':
- text = '<b>' + data[0].htmlEnc() + '</b> ' + Common.printf(Common._e("tagged you in a video (%s).").htmlEnc(), '<em>' + Utils.truncate(body, 25).htmlEnc() + '</em>');
-
- break;
-
- case 'me_profile_new_success':
- yes_path = 'href="' + Common.encodeQuotes(data[1]) + '" target="_blank"';
-
- text = '<b>' + data[0].htmlEnc() + '</b> ' + Common._e("validated your account. Your public profile will be available in a few moments.").htmlEnc();
-
- break;
-
- case 'me_profile_remove_success':
- yes_path = 'href="' + Common.encodeQuotes(data[1]) + '" target="_blank"';
-
- text = '<b>' + data[0].htmlEnc() + '</b> ' + Common._e("has removed your public profile after your request. We will miss you!").htmlEnc();
-
- break;
-
- case 'me_profile_update_success':
- yes_path = 'href="' + Common.encodeQuotes(data[1]) + '" target="_blank"';
-
- text = '<b>' + data[0].htmlEnc() + '</b> ' + Common._e("has saved your new public profile settings. They will be applied in a few moments.").htmlEnc();
-
- break;
-
- case 'me_profile_check_error':
- yes_path = 'href="' + Common.encodeQuotes(data[1]) + '" target="_blank"';
-
- text = '<b>' + data[0].htmlEnc() + '</b> ' + Common._e("could not validate your account to create or update your public profile. Check your credentials.").htmlEnc();
-
- break;
-
- default:
- break;
- }
-
- // No text?
- if(!text) {
- return;
- }
-
- // Action links?
- switch(type) {
- // Hide/Show actions
- case 'send_pending':
- case 'send_accept':
- case 'send_reject':
- case 'send_fail':
- case 'comment':
- case 'like':
- case 'quote':
- case 'wall':
- case 'photo':
- case 'video':
- action = '<a href="#" class="no">' + Common._e("Hide") + '</a>';
-
- // Any parent link?
- if((type == 'comment') && data[2]) {
- action = '<a href="#" class="yes">' + Common._e("Show") + '</a>' + action;
- }
-
- break;
-
- // Jappix Me actions
- case 'me_profile_new_success':
- case 'me_profile_remove_success':
- case 'me_profile_update_success':
- case 'me_profile_check_error':
- action = '<a ' + yes_path + ' class="yes">' + Common._e("Open") + '</a><a href="#" class="no">' + Common._e("Hide") + '</a>';
-
- break;
-
- // Default actions
- default:
- action = '<a ' + yes_path + ' class="yes">' + Common._e("Yes") + '</a><a href="#" class="no">' + Common._e("No") + '</a>';
- }
-
- if(text) {
- // We display the notification
- if(!Common.exists('.notifications-content .' + id)) {
- // We create the html markup depending of the notification type
- code = '<div class="one-notification ' + id + ' ' + hash + '" title="' + Common.encodeQuotes(body) + ' - ' + Common._e("This notification is only informative, maybe the data it links to have been removed.") + '" data-type="' + Common.encodeQuotes(type) + '">' +
- '<div class="avatar-container">' +
- '<img class="avatar" src="' + './images/others/default-avatar.png' + '" alt="" />' +
- '</div>' +
-
- '<p class="notification-text">' + text + '</p>' +
- '<p class="notification-actions">' +
- '<span class="talk-images" />' +
- action +
- '</p>' +
- '</div>';
-
- // Add the HTML code
- if(inverse) {
- $('.notifications-content .nothing').before(code);
- } else {
- $('.notifications-content .empty').after(code);
- }
-
- // Play a sound to alert the user
- Audio.play('notification');
-
- // The yes click function
- $('.' + id + ' a.yes').click(function() {
- self.action(type, data, 'yes', id);
-
- if(($(this).attr('href') == '#') && ($(this).attr('target') != '_blank')) {
- return false;
- }
- });
-
- // The no click function
- $('.' + id + ' a.no').click(function() {
- return self.action(type, data, 'no', id);
- });
-
- // Get the user avatar
- Avatar.get(from, 'cache', 'true', 'forget');
- }
- }
-
- // We tell the user he has a new pending notification
- self.check();
-
- Console.info('New notification: ' + from);
- } catch(e) {
- Console.error('Notification.new', e);
- }
-
- };
-
-
- /**
- * Performs an action on a given notification
- * @public
- * @param {string} type
- * @param {string} data
- * @param {string} value
- * @param {string} id
- * @return {boolean}
- */
- self.action = function(type, data, value, id) {
-
- try {
- // We launch a function depending of the type
- if((type == 'subscribe') && (value == 'yes')) {
- Presence.acceptSubscribe(data[0], data[1]);
- } else if((type == 'subscribe') && (value == 'no')) {
- Presence.sendSubscribe(data[0], 'unsubscribed');
- } else if((type == 'invite_room') && (value == 'yes')) {
- Chat.checkCreate(data[0], 'groupchat');
- } else if(type == 'request') {
- HTTPReply.go(value, data[0]);
- }
-
- if((type == 'send') && (value == 'yes')) {
- OOB.reply(data[0], data[3], 'accept', data[2], data[4]);
- } else if((type == 'send') && (value == 'no')) {
- OOB.reply(data[0], data[3], 'reject', data[2], data[4]);
- } else if((type == 'rosterx') && (value == 'yes')) {
- RosterX.open(data[0]);
- } else if((type == 'comment') || (type == 'like') || (type == 'quote') || (type == 'wall') || (type == 'photo') || (type == 'video')) {
- if(value == 'yes') {
- // Get the microblog item
- Microblog.fromInfos(data[2]);
-
- // Append the marker
- $('#channel .top.individual').append('<input type="hidden" name="comments" value="' + Common.encodeQuotes(data[1]) + '" />');
- }
-
- self.remove(data[3]);
- }
-
- // We remove the notification
- $('.notifications-content .' + id).remove();
-
- // We check if there's any other pending notification
- self.closeEmpty();
- self.check();
- } catch(e) {
- Console.error('Notification.action', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Clear the social notifications
- * @public
- * @return {undefined}
- */
- self.clear = function() {
-
- try {
- // Remove notifications
- $('.one-notification').remove();
-
- // Refresh
- self.closeEmpty();
- self.check();
- } catch(e) {
- Console.error('Notification.clear', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Gets the pending social notifications
- * @public
- * @return {undefined}
- */
- self.get = function() {
-
- try {
- var iq = new JSJaCIQ();
- iq.setType('get');
-
- var pubsub = iq.appendNode('pubsub', {'xmlns': NS_PUBSUB});
- pubsub.appendChild(iq.buildNode('items', {'node': NS_URN_INBOX, 'xmlns': NS_PUBSUB}));
-
- con.send(iq, self.handle);
-
- Console.log('Getting social notifications...');
- } catch(e) {
- Console.error('Notification.get', e);
- }
-
- };
-
-
- /**
- * Handles the social notifications
- * @public
- * @param {object} stanza
- * @return {undefined}
- */
- self.handle = function(stanza) {
-
- try {
- // Any error?
- if((stanza.getType() == 'error') && $(stanza.getNode()).find('item-not-found').size()) {
- // The node may not exist, create it!
- Pubsub.setup('', NS_URN_INBOX, '1', '1000000', 'whitelist', 'open', true);
-
- Console.warn('Error while getting social notifications, trying to reconfigure the Pubsub node!');
- }
-
- // Selector
- var items = $(stanza.getNode()).find('item');
-
- // Should we inverse?
- var inverse = true;
-
- if(items.size() == 1) {
- inverse = false;
- }
-
- // Parse notifications
- items.each(function() {
- var this_sel = $(this);
-
- // Parse the current item
- var current_item = this_sel.attr('id');
- var current_type = this_sel.find('link[rel="via"]:first').attr('title');
- var current_href = this_sel.find('link[rel="via"]:first').attr('href');
- var current_parent_href = this_sel.find('link[rel="related"]:first').attr('href');
- var current_xid = Common.explodeThis(':', this_sel.find('author uri').text(), 1);
- var current_name = this_sel.find('author name').text();
- var current_text = this_sel.find('content[type="text"]:first').text();
- var current_bname = Name.getBuddy(current_xid);
- var current_id = hex_md5(current_type + current_xid + current_href + current_text);
-
- // Choose the good name!
- if(!current_name || (current_bname != Common.getXIDNick(current_xid))) {
- current_name = current_bname;
- }
-
- // Create it!
- self.create(current_type, current_xid, [current_name, current_href, current_parent_href, current_item], current_text, current_id, inverse);
- });
-
- Console.info(items.size() + ' social notification(s) got!');
- } catch(e) {
- Console.error('Notification.handle', e);
- }
-
- };
-
-
- /**
- * Sends a social notification
- * @public
- * @param {string} xid
- * @param {string} type
- * @param {string} href
- * @param {string} text
- * @param {object} parent
- * @return {undefined}
- */
- self.send = function(xid, type, href, text, parent) {
-
- try {
- // Notification ID
- var id = hex_md5(xid + text + DateUtils.getTimeStamp());
-
- // IQ
- var iq = new JSJaCIQ();
- iq.setType('set');
- iq.setTo(xid);
-
- // ATOM content
- var pubsub = iq.appendNode('pubsub', {'xmlns': NS_PUBSUB});
- var publish = pubsub.appendChild(iq.buildNode('publish', {'node': NS_URN_INBOX, 'xmlns': NS_PUBSUB}));
- var item = publish.appendChild(iq.buildNode('item', {'id': id, 'xmlns': NS_PUBSUB}));
- var entry = item.appendChild(iq.buildNode('entry', {'xmlns': NS_ATOM}));
-
- // Notification author (us)
- var author = entry.appendChild(iq.buildNode('author', {'xmlns': NS_ATOM}));
- author.appendChild(iq.buildNode('name', {'xmlns': NS_ATOM}, Name.get()));
- author.appendChild(iq.buildNode('uri', {'xmlns': NS_ATOM}, 'xmpp:' + Common.getXID()));
-
- // Notification content
- entry.appendChild(iq.buildNode('published', {'xmlns': NS_ATOM}, DateUtils.getXMPPTime('utc')));
- entry.appendChild(iq.buildNode('content', {'type': 'text', 'xmlns': NS_ATOM}, text));
- entry.appendChild(iq.buildNode('link', {'rel': 'via', 'title': type, 'href': href, 'xmlns': NS_ATOM}));
-
- // Any parent item?
- if(parent && parent[0] && parent[1] && parent[2]) {
- // Generate the parent XMPP URI
- var parent_href = 'xmpp:' + parent[0] + '?;node=' + encodeURIComponent(parent[1]) + ';item=' + encodeURIComponent(parent[2]);
-
- entry.appendChild(iq.buildNode('link', {'rel': 'related', 'href': parent_href, 'xmlns': NS_ATOM}));
- }
-
- con.send(iq);
-
- Console.log('Sending a social notification to ' + xid + ' (type: ' + type + ')...');
- } catch(e) {
- Console.error('Notification.send', e);
- }
-
- };
-
-
- /**
- * Removes a social notification
- * @public
- * @param {string} id
- * @return {undefined}
- */
- self.remove = function(id) {
-
- try {
- var iq = new JSJaCIQ();
- iq.setType('set');
-
- var pubsub = iq.appendNode('pubsub', {'xmlns': NS_PUBSUB});
- var retract = pubsub.appendChild(iq.buildNode('retract', {'node': NS_URN_INBOX, 'xmlns': NS_PUBSUB}));
- retract.appendChild(iq.buildNode('item', {'id': id, 'xmlns': NS_PUBSUB}));
-
- con.send(iq);
- } catch(e) {
- Console.error('Notification.remove', e);
- }
-
- };
-
-
- /**
- * Purge the social notifications
- * @public
- * @param {type} name
- * @return {boolean}
- */
- self.purge = function() {
-
- try {
- var iq = new JSJaCIQ();
- iq.setType('set');
-
- var pubsub = iq.appendNode('pubsub', {'xmlns': NS_PUBSUB_OWNER});
- pubsub.appendChild(iq.buildNode('purge', {'node': NS_URN_INBOX, 'xmlns': NS_PUBSUB_OWNER}));
-
- con.send(iq);
- } catch(e) {
- Console.error('Notification.purge', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Adapt the notifications bubble max-height
- * @public
- * @return {undefined}
- */
- self.adapt = function() {
-
- try {
- // Process the new height
- var max_height = $('#right-content').height() - 22;
-
- // New height too small
- if(max_height < 250) {
- max_height = 250;
- }
-
- // Apply the new height
- $('.notifications-content .tools-content-subitem').css('max-height', max_height);
- } catch(e) {
- Console.error('Notification.adapt', e);
- }
-
- };
-
-
- /**
- * Plugin instance launcher
- * @public
- * @return {undefined}
- */
- self.instance = function() {
-
- try {
- // Adapt the notifications height
- self.adapt();
- } catch(e) {
- Console.error('Notification.instance', e);
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.launch = function() {
-
- try {
- // Adapt the notifications height
- $(window).resize(self.adapt);
- } catch(e) {
- Console.error('Notification.launch', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
-
-Notification.launch(); \ No newline at end of file
diff --git a/app/javascripts/oob.js b/app/javascripts/oob.js
deleted file mode 100644
index 4df6990b..00000000
--- a/app/javascripts/oob.js
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the Out of Band Data JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var OOB = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Sends an OOB request to someone
- * @public
- * @param {string} to
- * @param {string} type
- * @param {string} url
- * @param {string} desc
- * @return {undefined}
- */
- self.send = function(to, type, url, desc) {
-
- try {
- // IQ stanza?
- if(type == 'iq') {
- // Get some values
- var id = hex_md5(genID() + to + url + desc);
- to = Caps.getFeatureResource(to, NS_IQOOB);
-
- // IQs cannot be sent to offline users
- if(!to) {
- return;
- }
-
- // Register the ID
- DataStore.setDB(Connection.desktop_hash, 'send/url', id, url);
- DataStore.setDB(Connection.desktop_hash, 'send/desc', id, desc);
-
- var aIQ = new JSJaCIQ();
- aIQ.setTo(Common.fullXID(to));
- aIQ.setType('set');
- aIQ.setID(id);
-
- // Append the query content
- var aQuery = aIQ.setQuery(NS_IQOOB);
- aQuery.appendChild(aIQ.buildNode('url', {'xmlns': NS_IQOOB}, url));
- aQuery.appendChild(aIQ.buildNode('desc', {'xmlns': NS_IQOOB}, desc));
-
- con.send(aIQ);
- }
-
- // Message stanza?
- else {
- var aMsg = new JSJaCMessage();
- aMsg.setTo(Common.bareXID(to));
-
- // Append the content
- aMsg.setBody(desc);
- var aX = aMsg.appendNode('x', {'xmlns': NS_XOOB});
- aX.appendChild(aMsg.buildNode('url', {'xmlns': NS_XOOB}, url));
-
- con.send(aMsg);
- }
-
- Console.log('Sent OOB request to: ' + to + ' (' + desc + ')');
- } catch(e) {
- Console.error('OOB.send', e);
- }
-
- };
-
-
- /**
- * Handles an OOB request
- * @public
- * @param {string} from
- * @param {string} id
- * @param {string} type
- * @param {string} node
- * @return {undefined}
- */
- self.handle = function(from, id, type, node) {
-
- try {
- var xid = '', url = '', desc = '';
-
- if(type == 'iq') {
- // IQ stanza
- xid = Common.fullXID(from);
- url = $(node).find('url').text();
- desc = $(node).find('desc').text();
- } else {
- // Message stanza
- xid = Common.bareXID(from);
- url = $(node).find('url').text();
- desc = $(node).find('body').text();
- }
-
- // No desc?
- if(!desc) {
- desc = url;
- }
-
- // Open a new notification
- if(type && xid && url && desc) {
- Notification.create('send', xid, [xid, url, type, id, node], desc, hex_md5(xid + url + desc + id));
- }
- } catch(e) {
- Console.error('OOB.handle', e);
- }
-
- };
-
-
- /**
- * Replies to an OOB request
- * @public
- * @param {string} to
- * @param {string} id
- * @param {string} choice
- * @param {string} type
- * @param {object} node
- * @return {undefined}
- */
- self.reply = function(to, id, choice, type, node) {
-
- try {
- // Not IQ type?
- if(type != 'iq') {
- return;
- }
-
- // New IQ
- var aIQ = new JSJaCIQ();
- aIQ.setTo(to);
- aIQ.setID(id);
-
- // OOB request accepted
- if(choice == 'accept') {
- aIQ.setType('result');
-
- Console.info('Accepted file request from: ' + to);
- }
-
- // OOB request rejected
- else {
- aIQ.setType('error');
-
- // Append stanza content
- for(var i = 0; i < node.childNodes.length; i++) {
- aIQ.getNode().appendChild(node.childNodes.item(i).cloneNode(true));
- }
-
- // Append error content
- var aError = aIQ.appendNode('error', {
- 'xmlns': NS_CLIENT,
- 'code': '406',
- 'type': 'modify'
- });
-
- aError.appendChild(aIQ.buildNode('not-acceptable', {'xmlns': NS_STANZAS}));
-
- Console.info('Rejected file request from: ' + to);
- }
-
- con.send(aIQ);
- } catch(e) {
- Console.error('OOB.reply', e);
- }
-
- };
-
-
- /**
- * Wait event for OOB upload
- * @public
- * @return {undefined}
- */
- self.waitUpload = function() {
-
- try {
- // Append the wait icon
- var chat_tools_file_sel = page_engine_sel.find('.chat-tools-file:not(.mini)');
- var subitem_sel = chat_tools_file_sel.find('.tooltip-subitem');
-
- subitem_sel.find('*').hide();
- subitem_sel.append(
- '<div class="wait wait-medium"></div>'
- );
-
- // Lock the bubble
- chat_tools_file_sel.addClass('mini');
- } catch(e) {
- Console.error('OOB.waitUpload', e);
- }
-
- };
-
-
- /**
- * Success event for OOB upload
- * @public
- * @param {string} responseXML
- * @return {undefined}
- */
- self.handleUpload = function(responseXML) {
-
- try {
- var page_engine_sel = $('#page-engine');
-
- // Data selector
- var dData = $(responseXML).find('jappix');
-
- // Get the values
- var fID = dData.find('id').text();
- var fURL = dData.find('url').text();
- var fDesc = dData.find('desc').text();
-
- // Get the OOB values
- var oob_has;
-
- // No ID provided?
- if(!fID) {
- oob_has = ':has(.wait)';
- } else {
- oob_has = ':has(#oob-upload input[value="' + fID + '"])';
- }
-
- var xid = page_engine_sel.find('.page-engine-chan' + oob_has).attr('data-xid');
- var oob_type = page_engine_sel.find('.chat-tools-file' + oob_has).attr('data-oob');
-
- // Reset the file send tool
- page_engine_sel.find('.chat-tools-file' + oob_has).removeClass('mini');
- page_engine_sel.find('.bubble-file' + oob_has).remove();
-
- // Not available?
- if(page_engine_sel.find('.chat-tools-file' + oob_has).is(':hidden') && (oob_type == 'iq')) {
- Board.openThisError(4);
-
- // Remove the file we sent
- if(fURL) {
- $.get(fURL + '&action=remove');
- }
- }
-
- // Everything okay?
- else if(fURL && fDesc && !dData.find('error').size()) {
- // Send the OOB request
- self.send(xid, oob_type, fURL, fDesc);
-
- // Notify the sender
- Notification.create('send_pending', xid, [xid, fURL, oob_type, '', ''], fDesc, hex_md5(fURL + fDesc + fID));
-
- Console.info('File request sent.');
- } else {
- Board.openThisError(4);
-
- Console.error('Error while sending the file', dData.find('error').text());
- }
- } catch(e) {
- Console.error('OOB.handleUpload', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/options.js b/app/javascripts/options.js
deleted file mode 100644
index 190c5b62..00000000
--- a/app/javascripts/options.js
+++ /dev/null
@@ -1,1008 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the options JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou, Maranda
-
-*/
-
-// Bundle
-var Options = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Opens the options popup
- * @public
- * @return {boolean}
- */
- self.open = function() {
-
- try {
- // Popup HTML content
- var html =
- '<div class="top">' + Common._e("Edit options") + '</div>' +
-
- '<div class="tab">' +
- '<a href="#" class="tab-general tab-active" data-key="1">' + Common._e("General") + '</a>' +
- '<a href="#" class="tab-channel pubsub-hidable pubsub-hidable-cn" data-key="2">' + Common._e("Channel") + '</a>' +
- '<a href="#" class="tab-account" data-key="3">' + Common._e("Account") + '</a>' +
- '</div>' +
-
- '<div class="content">' +
- '<div id="conf1" class="lap-active one-lap forms">' +
- '<fieldset class="privacy">' +
- '<legend>' + Common._e("Privacy") + '</legend>' +
-
- '<div class="geolocation">' +
- '<label for="geolocation" class="pep-hidable">' + Common._e("Geolocation") + '</label>' +
- '<input id="geolocation" type="checkbox" class="pep-hidable" />' +
- '</div>' +
-
- '<div class="archiving">' +
- '<label for="archiving" class="mam-hidable">' + Common._e("Message archiving") + '</label>' +
- '<select id="archiving" class="mam-hidable">' +
- '<option value="never">' + Common._e("Disabled") + '</option>' +
- '<option value="roster">' + Common._e("Store friend chats") + '</option>' +
- '<option value="always">' + Common._e("Store all chats") + '</option>' +
- '</select>' +
- '<a href="#" class="linked empty-archives mam-purge-hidable">' + Common._e("Remove all archives") + '</a>' +
- '</div>' +
- '</fieldset>' +
-
- '<fieldset class="application">' +
- '<legend>' + Common._e("Application") + '</legend>' +
-
- '<div class="sounds">' +
- '<label for="sounds">' + Common._e("Sounds") + '</label>' +
- '<input id="sounds" type="checkbox" />' +
- '</div>' +
-
- '<div class="showall">' +
- '<label for="showall">' + Common._e("Show all friends") + '</label>' +
- '<input id="showall" type="checkbox" />' +
- '</div>' +
-
- '<div class="groupchatpresence">' +
- '<label for="groupchatpresence">' + Common._e("Groupchat presence messages") + '</label>' +
- '<input id="groupchatpresence" type="checkbox" />' +
- '</div>' +
-
- '<div class="noxhtmlimg">' +
- '<label for="noxhtmlimg">' + Common._e("No chat images auto-load") + '</label>' +
- '<input id="noxhtmlimg" type="checkbox" />' +
- '</div>' +
-
- '<div class="integratemedias">' +
- '<label for="integratemedias">' + Common._e("Media integration") + '</label>' +
- '<input id="integratemedias" type="checkbox" />' +
- '</div>' +
-
- '<div class="localarchives mam-showable">' +
- '<label for="localarchives">' + Common._e("Keep local chat archives") + '</label>' +
- '<input id="localarchives" type="checkbox" />' +
- '</div>' +
-
- '<div class="xmpplinks">' +
- '<label class="xmpplinks-hidable">' + Common._e("XMPP links") + '</label>' +
- '<a href="#" class="linked xmpp-links xmpplinks-hidable">' + Common._e("Open XMPP links with Jappix") + '</a>' +
- '</div>' +
- '</fieldset>' +
-
- '<div class="sub-ask sub-ask-mam sub-ask-element">' +
- '<div class="sub-ask-top">' +
- '<div class="sub-ask-title">' + Common._e("Remove all archives") + '</div>' +
- '<a href="#" class="sub-ask-close">X</a>' +
- '</div>' +
-
- '<div class="sub-ask-content">' +
- '<label>' + Common._e("Password") + '</label>' +
- '<input type="password" class="purge-archives check-mam" required="" />' +
- '</div>' +
-
- '<a href="#" class="sub-ask-bottom">' + Common._e("Remove") + ' &raquo;</a>' +
- '</div>' +
- '</div>' +
-
- '<div id="conf2" class="one-lap forms">' +
- '<fieldset class="channel">' +
- '<legend>' + Common._e("Channel") + '</legend>' +
-
- '<div class="empty-channel">' +
- '<label>' + Common._e("Empty") + '</label>' +
- '<a href="#" class="linked empty-channel">' + Common._e("Empty channel") + '</a>' +
- '</div>' +
-
- '<div class="persistent">' +
- '<label>' + Common._e("Persistent") + '</label>' +
- '<input id="persistent" type="checkbox" />' +
- '</div>' +
-
- '<div class="maxnotices">' +
- '<label>' + Common._e("Maximum notices") + '</label>' +
- '<select id="maxnotices">' +
- '<option value="1">1</option>' +
- '<option value="100">100</option>' +
- '<option value="1000">1000</option>' +
- '<option value="10000">10000</option>' +
- '<option value="100000">100000</option>' +
- '<option value="1000000">1000000</option>' +
- '</select>' +
- '</div>' +
-
- '</fieldset>' +
-
- '<div class="sub-ask sub-ask-empty sub-ask-element">' +
- '<div class="sub-ask-top">' +
- '<div class="sub-ask-title">' + Common._e("Empty channel") + '</div>' +
- '<a href="#" class="sub-ask-close">X</a>' +
- '</div>' +
-
- '<div class="sub-ask-content">' +
- '<label>' + Common._e("Password") + '</label>' +
- '<input type="password" class="purge-microblog check-empty" required="" />' +
- '</div>' +
-
- '<a href="#" class="sub-ask-bottom">' + Common._e("Empty") + ' &raquo;</a>' +
- '</div>' +
- '</div>' +
-
- '<div id="conf3" class="one-lap forms">' +
- '<fieldset>' +
- '<legend>' + Common._e("Account") + '</legend>' +
-
- '<label>' + Common._e("Password") + '</label>' +
- '<a href="#" class="linked change-password">' + Common._e("Change password") + '</a>' +
-
- '<label>' + Common._e("Delete") + '</label>' +
- '<a href="#" class="linked delete-account">' + Common._e("Delete account") + '</a>' +
- '</fieldset>' +
-
- '<div class="sub-ask sub-ask-pass sub-ask-element">' +
- '<div class="sub-ask-top">' +
- '<div class="sub-ask-title">' + Common._e("Change password") + '</div>' +
- '<a href="#" class="sub-ask-close">X</a>' +
- '</div>' +
-
- '<div class="sub-ask-content">' +
- '<label>' + Common._e("Old") + '</label>' +
- '<input type="password" class="password-change old" required="" />' +
-
- '<label>' + Common._e("New (2 times)") + '</label>' +
- '<input type="password" class="password-change new1" required="" />' +
- '<input type="password" class="password-change new2" required="" />' +
- '</div>' +
-
- '<a href="#" class="sub-ask-bottom">' + Common._e("Continue") + ' &raquo;</a>' +
- '</div>' +
-
- '<div class="sub-ask sub-ask-delete sub-ask-element">' +
- '<div class="sub-ask-top">' +
- '<div class="sub-ask-title">' + Common._e("Delete account") + '</div>' +
- '<a href="#" class="sub-ask-close">X</a>' +
- '</div>' +
-
- '<div class="sub-ask-content">' +
- '<label>' + Common._e("Password") + '</label>' +
- '<input type="password" class="delete-account check-password" required="" />' +
- '</div>' +
-
- '<a href="#" class="sub-ask-bottom">' + Common._e("Delete") + ' &raquo;</a>' +
- '</div>' +
- '</div>' +
- '</div>' +
-
- '<div class="bottom">' +
- '<div class="wait wait-medium"></div>' +
-
- '<a href="#" class="finish save">' + Common._e("Save") + '</a>' +
- '<a href="#" class="finish cancel">' + Common._e("Cancel") + '</a>' +
- '</div>';
-
- // Create the popup
- Popup.create('options', html);
-
- // Apply the features
- Features.apply('options');
-
- // Associate the events
- self.instance();
- } catch(e) {
- Console.error('Options.open', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Closes the options popup
- * @public
- * @return {boolean}
- */
- self.close = function() {
-
- try {
- // Destroy the popup
- Popup.destroy('options');
- } catch(e) {
- Console.error('Options.close', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Checks whether the options are loaded or not
- * @public
- * @return {boolean}
- */
- self.loaded = function() {
-
- is_loaded = false;
-
- try {
- if($('.options-hidable').is(':visible')) {
- is_loaded = true;
- }
- } catch(e) {
- Console.error('Options.loaded', e);
- } finally {
- return is_loaded;
- }
-
- };
-
-
- /**
- * Switches between the options tabs
- * @public
- * @param {string} id
- * @return {boolean}
- */
- self.switchTab = function(id) {
-
- try {
- var options_sel = $('#options');
-
- options_sel.find('.one-lap').hide();
- options_sel.find('#conf' + id).show();
- options_sel.find('.tab a').removeClass('tab-active');
- options_sel.find('.tab a[data-key="' + id + '"]').addClass('tab-active');
- options_sel.find('.sub-ask .sub-ask-close').click();
- } catch(e) {
- Console.error('Options.switchTab', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Manages the options wait item
- * @public
- * @param {string} id
- * @return {undefined}
- */
- self.wait = function(id) {
-
- try {
- var options_sel = $('#options');
- var content_sel = options_sel.find('.content');
-
- // Remove the current item class
- content_sel.removeClass(id);
-
- // Hide the waiting items if all was received
- if(!content_sel.hasClass('microblog') && !content_sel.hasClass('mam')) {
- options_sel.find('.wait').hide();
- options_sel.find('.finish:first').removeClass('disabled');
- }
- } catch(e) {
- Console.error('Options.wait', e);
- }
-
- };
-
-
- /**
- * Sends the options to the XMPP server
- * @public
- * @return {undefined}
- */
- self.store = function() {
-
- try {
- // Get the values
- var sounds = DataStore.getDB(Connection.desktop_hash, 'options', 'sounds');
- var geolocation = DataStore.getDB(Connection.desktop_hash, 'options', 'geolocation');
- var showall = DataStore.getDB(Connection.desktop_hash, 'options', 'roster-showall');
- var noxhtmlimg = DataStore.getDB(Connection.desktop_hash, 'options', 'no-xhtml-images');
- var groupchatpresence = DataStore.getDB(Connection.desktop_hash, 'options', 'groupchatpresence');
- var integratemedias = DataStore.getDB(Connection.desktop_hash, 'options', 'integratemedias');
- var localarchives = DataStore.getDB(Connection.desktop_hash, 'options', 'localarchives');
- var status = DataStore.getDB(Connection.desktop_hash, 'options', 'presence-status');
-
- // Create an array to be looped
- var oType = ['sounds', 'geolocation', 'roster-showall', 'no-xhtml-images', 'groupchatpresence', 'integratemedias', 'localarchives', 'presence-status'];
- var oContent = [sounds, geolocation, showall, noxhtmlimg, groupchatpresence, integratemedias, localarchives, status];
-
- // New IQ
- var iq = new JSJaCIQ();
- iq.setType('set');
-
- var query = iq.setQuery(NS_PRIVATE);
- var storage = query.appendChild(iq.buildNode('storage', {'xmlns': NS_OPTIONS}));
-
- // Loop the array
- for(var i in oType) {
- storage.appendChild(iq.buildNode('option', {'type': oType[i], 'xmlns': NS_OPTIONS}, oContent[i]));
- }
-
- con.send(iq, self.handleStore);
-
- Console.info('Storing options...');
- } catch(e) {
- Console.error('Options.store', e);
- }
-
- };
-
-
- /**
- * Handles the option storing
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleStore = function(iq) {
-
- try {
- if(!iq || (iq.getType() != 'result')) {
- Console.warn('Options not stored.');
- } else {
- Console.info('Options stored.');
- }
- } catch(e) {
- Console.error('Options.handleStore', e);
- }
-
- };
-
-
- /**
- * Saves the user options
- * @public
- * @return {boolean}
- */
- self.save = function() {
-
- try {
- // We apply the sounds
- var sounds = '0';
-
- if($('#sounds').filter(':checked').size()) {
- sounds = '1';
- }
-
- DataStore.setDB(Connection.desktop_hash, 'options', 'sounds', sounds);
-
- // We apply the geolocation
- if($('#geolocation').filter(':checked').size()) {
- DataStore.setDB(Connection.desktop_hash, 'options', 'geolocation', '1');
-
- // We geolocate the user on the go
- PEP.geolocate();
- } else {
- DataStore.setDB(Connection.desktop_hash, 'options', 'geolocation', '0');
-
- // We delete the geolocation informations
- PEP.sendPosition();
- DataStore.removeDB(Connection.desktop_hash, 'geolocation', 'now');
- }
-
- // We apply the roster show all
- if($('#showall').filter(':checked').size()) {
- DataStore.setDB(Connection.desktop_hash, 'options', 'roster-showall', '1');
- Interface.showAllBuddies('options');
- } else {
- DataStore.setDB(Connection.desktop_hash, 'options', 'roster-showall', '0');
- Interface.showOnlineBuddies('options');
- }
-
- // We apply the XHTML-IM images filter
- var noxhtmlimg = '1' ? $('#noxhtmlimg').filter(':checked').size() : '0';
- DataStore.setDB(Connection.desktop_hash, 'options', 'no-xhtml-images', noxhtmlimg);
-
- // We apply the groupchat presence messages configuration
- var groupchatpresence = '1' ? $('#groupchatpresence').filter(':checked').size() : '0';
- DataStore.setDB(Connection.desktop_hash, 'options', 'groupchatpresence', groupchatpresence);
-
- // We apply the media integration
- var integratemedias = '1' ? $('#integratemedias').filter(':checked').size() : '0';
- DataStore.setDB(Connection.desktop_hash, 'options', 'integratemedias', integratemedias);
-
- // We apply the local archiving
- var localarchives = '1' ? $('#localarchives').filter(':checked').size() : '0';
- DataStore.setDB(Connection.desktop_hash, 'options', 'localarchives', localarchives);
-
- // Flush local archives?
- if(localarchives === '0') {
- Message.flushLocalArchive();
- }
-
- // We apply the message archiving
- if(Features.enabledMAM()) {
- MAM.setConfig($('#archiving').val() || 'never');
- }
-
- // We apply the microblog configuration
- var persist = '1' ? $('#persist').filter(':checked').size() : '0';
- var maximum = $('#maxnotices').val();
-
- if(Features.enabledPEP() && (Features.enabledPubSub() || Features.enabledPubSubCN())) {
- Pubsub.setup('', NS_URN_MBLOG, persist, maximum, '', '', false);
- }
-
- // We send the options to the database
- self.store();
-
- // Close the options
- self.close();
- } catch(e) {
- Console.error('Options.save', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Handles the password changing
- * @public
- * @param {string} iq
- * @return {undefined}
- */
- self.handlePwdChange = function(iq) {
-
- try {
- // Remove the general wait item
- Interface.removeGeneralWait();
-
- // If no errors
- if(!Errors.handleReply(iq)) {
- Connection.clearLastSession();
- Connection.quit();
- Board.openThisInfo(1);
-
- Console.info('Password changed.');
- } else {
- Console.warn('Password not changed.');
- }
- } catch(e) {
- Console.error('Options.handlePwdChange', e);
- }
-
- };
-
-
- /**
- * Sends the new account password
- * @public
- * @return {boolean}
- */
- self.sendNewPassword = function() {
-
- /* REF: http://xmpp.org/extensions/xep-0077.html#usecases-changepw */
-
- try {
- var password0 = $('#options .old').val();
- var password1 = $('#options .new1').val();
- var password2 = $('#options .new2').val();
-
- if ((password1 == password2) && (password0 == Utils.getPassword())) {
- // We show the waiting image
- Interface.showGeneralWait();
-
- // We send the IQ
- var iq = new JSJaCIQ();
-
- iq.setTo(Utils.getServer());
- iq.setType('set');
-
- var iqQuery = iq.setQuery(NS_REGISTER);
-
- iqQuery.appendChild(iq.buildNode('username', {'xmlns': NS_REGISTER}, con.username));
- iqQuery.appendChild(iq.buildNode('password', {'xmlns': NS_REGISTER}, password1));
-
- con.send(iq, self.handlePwdChange);
-
- Console.info('Password change sent.');
- } else {
- $('.sub-ask-pass input').each(function() {
- var select = $(this);
-
- if(!select.val()) {
- $(document).oneTime(10, function() {
- select.addClass('please-complete').focus();
- });
- } else {
- select.removeClass('please-complete');
- }
- });
-
- if(password0 != Utils.getPassword()) {
- $(document).oneTime(10, function() {
- $('#options .old').addClass('please-complete').focus();
- });
- }
-
- if(password1 != password2) {
- $(document).oneTime(10, function() {
- $('#options .new1, #options .new2').addClass('please-complete').focus();
- });
- }
- }
- } catch(e) {
- Console.error('Options.sendNewPassword', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Handles the account deletion request
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleAccDeletion = function(iq) {
-
- try {
- // Remove the general wait item
- Interface.removeGeneralWait();
-
- // If no errors
- if(!Errors.handleReply(iq)) {
- Connection.clearLastSession();
- Talk.destroy();
- Board.openThisInfo(2);
- Connection.logout();
-
- Console.info('Account deleted.');
- } else {
- Console.warn('Account not deleted.');
- }
- } catch(e) {
- Console.error('Options.handleAccDeletion', e);
- }
-
- };
-
-
- /**
- * Purge the user's archives (MAM)
- * @public
- * @return {boolean}
- */
- self.purgeMyArchives = function() {
-
- try {
- var pwd_input_sel = $('#options .check-mam');
- var password = pwd_input_sel.val();
-
- if(password == Utils.getPassword()) {
- MAM.purgeArchives();
-
- // Clear archives in UI
- $('.page-engine-chan[data-type="chat"] .tools-clear').click();
-
- // Hide the tool
- pwd_input_sel.val('');
- $('#options .sub-ask-mam .sub-ask-close').click();
- } else {
- var selector = $('#options .check-mam');
-
- if(password != Utils.getPassword()) {
- $(document).oneTime(10, function() {
- selector.addClass('please-complete').focus();
- });
- } else {
- selector.removeClass('please-complete');
- }
- }
- } catch(e) {
- Console.error('Options.purgeMyArchives', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Purge the user's microblog items
- * @public
- * @return {boolean}
- */
- self.purgeMyMicroblog = function() {
-
- /* REF: http://xmpp.org/extensions/xep-0060.html#owner-purge */
-
- try {
- var pwd_input_sel = $('#options .check-empty');
- var password = pwd_input_sel.val();
-
- if(password == Utils.getPassword()) {
- // Send the IQ to remove the item (and get eventual error callback)
- var iq = new JSJaCIQ();
- iq.setType('set');
-
- var pubsub = iq.appendNode('pubsub', {'xmlns': NS_PUBSUB_OWNER});
- pubsub.appendChild(iq.buildNode('purge', {'node': NS_URN_MBLOG, 'xmlns': NS_PUBSUB_OWNER}));
-
- con.send(iq, self.handleMicroblogPurge);
-
- // Hide the tool
- pwd_input_sel.val('');
- $('#options .sub-ask-empty .sub-ask-close').click();
-
- Console.info('Microblog purge sent.');
- } else {
- var selector = $('#options .check-empty');
-
- if(password != Utils.getPassword()) {
- $(document).oneTime(10, function() {
- selector.addClass('please-complete').focus();
- });
- } else {
- selector.removeClass('please-complete');
- }
- }
- } catch(e) {
- Console.error('Options.purgeMyMicroblog', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Handles the microblog purge
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleMicroblogPurge = function(iq) {
-
- try {
- // If no errors
- if(!Errors.handleReply(iq)) {
- // Remove the microblog items
- $('.one-update.update_' + hex_md5(Common.getXID())).remove();
-
- Console.info('Microblog purged.');
- } else {
- Console.warn('Microblog not purged.');
- }
- } catch(e) {
- Console.error('Options.handleMicroblogPurge', e);
- }
-
- };
-
-
- /**
- * Deletes the user's account
- * @public
- * @return {boolean}
- */
- self.deleteMyAccount = function() {
-
- /* REF: http://xmpp.org/extensions/xep-0077.html#usecases-cancel */
-
- try {
- var password = $('#options .check-password').val();
-
- if(password == Utils.getPassword()) {
- // We show the waiting image
- Interface.showGeneralWait();
-
- // We send the IQ
- var iq = new JSJaCIQ();
- iq.setType('set');
-
- var iqQuery = iq.setQuery(NS_REGISTER);
- iqQuery.appendChild(iq.buildNode('remove', {'xmlns': NS_REGISTER}));
-
- con.send(iq, self.handleAccDeletion);
-
- Console.info('Delete account sent.');
- } else {
- var selector = $('#options .check-password');
-
- if(password != Utils.getPassword()) {
- $(document).oneTime(10, function() {
- selector.addClass('please-complete').focus();
- });
- } else {
- selector.removeClass('please-complete');
- }
- }
- } catch(e) {
- Console.error('Options.deleteMyAccount', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Loads the user options
- * @public
- * @return {undefined}
- */
- self.load = function() {
-
- try {
- // Process the good stuffs, depending of the server features
- var enabled_mam = Features.enabledMAM();
- var enabled_pubsub = Features.enabledPubSub();
- var enabled_pubsub_cn = Features.enabledPubSubCN();
- var enabled_pep = Features.enabledPEP();
- var sWait = $('#options .content');
-
- // Show the waiting items if necessary
- if(enabled_mam || (enabled_pep && (enabled_pubsub || enabled_pubsub_cn))) {
- $('#options .wait').show();
- $('#options .finish:first').addClass('disabled');
- }
-
- // We get the archiving configuration
- if(enabled_mam) {
- sWait.addClass('mam');
- MAM.getConfig();
- }
-
- // We get the microblog configuration
- if((enabled_pubsub || enabled_pubsub_cn) && enabled_pep) {
- sWait.addClass('microblog');
- Microblog.getConfig();
- }
-
- // We show the "privacy" form if something is visible into it
- if(enabled_mam || enabled_pep) {
- $('#options fieldset.privacy').show();
- }
-
- // We get the values of the forms for the sounds
- if(DataStore.getDB(Connection.desktop_hash, 'options', 'sounds') == '0') {
- $('#sounds').attr('checked', false);
- } else {
- $('#sounds').attr('checked', true);
- }
-
- // We get the values of the forms for the geolocation
- if(DataStore.getDB(Connection.desktop_hash, 'options', 'geolocation') == '1') {
- $('#geolocation').attr('checked', true);
- } else {
- $('#geolocation').attr('checked', false);
- }
-
- // We get the values of the forms for the roster show all
- if(DataStore.getDB(Connection.desktop_hash, 'options', 'roster-showall') == '1') {
- $('#showall').attr('checked', true);
- } else {
- $('#showall').attr('checked', false);
- }
-
- // We get the values of the forms for the XHTML-IM images filter
- if(DataStore.getDB(Connection.desktop_hash, 'options', 'no-xhtml-images') == '1') {
- $('#noxhtmlimg').attr('checked', true);
- } else {
- $('#noxhtmlimg').attr('checked', false);
- }
-
- // We get the values of the forms for the integratemedias
- if(DataStore.getDB(Connection.desktop_hash, 'options', 'integratemedias') == '0') {
- $('#integratemedias').attr('checked', false);
- } else {
- $('#integratemedias').attr('checked', true);
- }
-
- // We get the values of the forms for the groupchatpresence
- if(DataStore.getDB(Connection.desktop_hash, 'options', 'groupchatpresence') == '0') {
- $('#groupchatpresence').attr('checked', false);
- } else {
- $('#groupchatpresence').attr('checked', true);
- }
-
- // We get the values of the forms for the localarchives
- if(DataStore.getDB(Connection.desktop_hash, 'options', 'localarchives') == '0') {
- $('#localarchives').attr('checked', false);
- } else {
- $('#localarchives').attr('checked', true);
- }
- } catch(e) {
- Console.error('Options.load', e);
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.instance = function() {
-
- try {
- // Click events
- $('#options .tab a').click(function() {
- // Yet active?
- if($(this).hasClass('tab-active'))
- return false;
-
- // Switch to the good tab
- var key = parseInt($(this).attr('data-key'));
-
- return self.switchTab(key);
- });
-
- $('#options .linked').click(function() {
- $('#options .sub-ask').hide();
- $('#options .forms').removeClass('in_background');
- });
-
- $('#options .xmpp-links').click(function() {
- Utils.xmppLinksHandler();
-
- return false;
- });
-
- $('#options .empty-archives').click(function() {
- var selector = '#options .sub-ask-mam';
-
- $(selector).show();
- $('#options .forms').addClass('in_background');
-
- $(document).oneTime(10, function() {
- $(selector + ' input').focus();
- });
-
- return false;
- });
-
- $('#options .empty-channel').click(function() {
- var selector = '#options .sub-ask-empty';
-
- $(selector).show();
- $('#options .forms').addClass('in_background');
-
- $(document).oneTime(10, function() {
- $(selector + ' input').focus();
- });
-
- return false;
- });
-
- $('#options .change-password').click(function() {
- var selector = '#options .sub-ask-pass';
-
- $(selector).show();
- $('#options .forms').addClass('in_background');
-
- $(document).oneTime(10, function() {
- $(selector + ' input:first').focus();
- });
-
- return false;
- });
-
- $('#options .delete-account').click(function() {
- var selector = '#options .sub-ask-delete';
-
- $(selector).show();
- $('#options .forms').addClass('in_background');
-
- $(document).oneTime(10, function() {
- $(selector + ' input').focus();
- });
-
- return false;
- });
-
- $('#options .sub-ask-pass .sub-ask-bottom').click(function() {
- return self.sendNewPassword();
- });
-
- $('#options .sub-ask-mam .sub-ask-bottom').click(function() {
- return self.purgeMyArchives();
- });
-
- $('#options .sub-ask-empty .sub-ask-bottom').click(function() {
- return self.purgeMyMicroblog();
- });
-
- $('#options .sub-ask-delete .sub-ask-bottom').click(function() {
- return self.deleteMyAccount();
- });
-
- $('#options .sub-ask-close').click(function() {
- $('#options .sub-ask').hide();
- $('#options .forms').removeClass('in_background');
-
- return false;
- });
-
- $('#options .bottom .finish').click(function() {
- if($(this).is('.save') && !$(this).hasClass('disabled')) {
- return self.save();
- }
-
- if($(this).is('.cancel')) {
- return self.close();
- }
-
- return false;
- });
-
- // The keyup events
- $('#options .sub-ask input').keyup(function(e) {
- if(e.keyCode == 13) {
- // Archives purge
- if($(this).is('.purge-archives')) {
- return self.purgeMyArchives();
- }
-
- // Microblog purge
- else if($(this).is('.purge-microblog')) {
- return self.purgeMyMicroblog();
- }
-
- // Password change
- else if($(this).is('.password-change')) {
- return self.sendNewPassword();
- }
-
- // Account deletion
- else if($(this).is('.delete-account')) {
- return self.deleteMyAccount();
- }
- }
- });
-
- // Load the options
- self.load();
- } catch(e) {
- Console.error('Options.instance', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/origin.js b/app/javascripts/origin.js
deleted file mode 100644
index c84b89d6..00000000
--- a/app/javascripts/origin.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the origin JS script for Jappix
-
--------------------------------------------------
-
-License: dual-licensed under AGPL and MPLv2
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Origin = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Checks if the URL passed has the same origin than Jappix itself
- * @public
- * @param {string} url
- * @return {undefined}
- */
- self.isSame = function(url) {
-
- /* Source: http://stackoverflow.com/questions/9404793/check-if-same-origin-policy-applies */
-
- try {
- var loc = window.location,
- a = document.createElement('a');
-
- a.href = url;
-
- return (!a.hostname || (a.hostname == loc.hostname)) &&
- (!a.port || (a.port == loc.port)) &&
- (!a.protocol || (a.protocol == loc.protocol));
- } catch(e) {
- Console.error('Origin.isSame', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
-
-var JappixOrigin = Origin; \ No newline at end of file
diff --git a/app/javascripts/pep.js b/app/javascripts/pep.js
deleted file mode 100644
index 432455f5..00000000
--- a/app/javascripts/pep.js
+++ /dev/null
@@ -1,1413 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the PEP JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var PEP = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Generates display object
- * @private
- * @return {object}
- */
- self._generateDisplayObject = function() {
-
- var display_object = {
- 'pep_value': '',
- 'pep_text': '',
- 'style_value': '',
- 'style_text': '',
- 'display_text': '',
- 'final_link': '',
- 'final_uri': ''
- };
-
- try {
- // Nothing to do there
- } catch(e) {
- Console.error('PEP._generateDisplayObject', e);
- } finally {
- return display_object;
- }
-
- };
-
-
- /**
- * Abstracts mood and activity display helpers
- * @private
- * @param {object} node_sel
- * @param {function} icon_fn
- * @return {object}
- */
- self._abstractDisplayMoodActivity = function(node_sel, icon_fn) {
-
- var display_args = self._generateDisplayObject();
-
- try {
- if(node_sel) {
- display_args.pep_value = node_sel.find('value').text() || 'none';
- display_args.pep_text = node_sel.find('text').text();
-
- display_args.style_value = icon_fn(display_args.pep_value);
- display_args.style_text = display_args.pep_text ? display_args.pep_text : Common._e("unknown");
- } else {
- display_args.style_value = icon_fn('undefined');
- display_args.style_text = Common._e("unknown");
- }
-
- display_args.display_text = display_args.style_text;
- display_args.style_text = display_args.style_text.htmlEnc();
- } catch(e) {
- Console.error('PEP._abstractDisplayMoodActivity', e);
- } finally {
- return display_args;
- }
-
- };
-
-
- /**
- * Displays PEP mood
- * @private
- * @param {object} node_sel
- * @return {object}
- */
- self._displayMood = function(node_sel) {
-
- var mood_args = self._abstractDisplayMoodActivity(
- node_sel,
- self.moodIcon
- );
-
- try {
- // Nothing to do there
- } catch(e) {
- Console.error('PEP._displayMood', e);
- } finally {
- return mood_args;
- }
-
- };
-
-
- /**
- * Displays PEP activity
- * @private
- * @param {object} node_sel
- * @return {object}
- */
- self._displayActivity = function(node_sel) {
-
- var activity_args = self._abstractDisplayMoodActivity(
- node_sel,
- self.activityIcon
- );
-
- try {
- // Nothing to do there
- } catch(e) {
- Console.error('PEP._displayActivity', e);
- } finally {
- return activity_args;
- }
-
- };
-
-
- /**
- * Displays PEP tune
- * @private
- * @param {object} node_sel
- * @return {object}
- */
- self._displayTune = function(node_sel) {
-
- var tune_args = self._generateDisplayObject();
-
- try {
- tune_args.style_value = 'tune-note';
-
- if(node_sel) {
- // Parse the tune XML
- var tune_artist = node_sel.find('artist').text();
- var tune_title = node_sel.find('title').text();
- var tune_album = node_sel.find('album').text();
- var tune_uri = node_sel.find('uri').text();
-
- // Apply the good values
- if(!tune_artist && !tune_album && !tune_title) {
- tune_args.style_text = Common._e("unknown");
- tune_args.display_text = tune_args.style_text;
- } else {
- tune_args.final_uri = tune_uri ||
- 'http://grooveshark.com/search?q=' + encodeURIComponent(tune_artist + ' ' + tune_title + ' ' + tune_album);
-
- var final_artist = tune_artist || Common._e("unknown");
- var final_title = tune_title || Common._e("unknown");
- var final_album = tune_album || Common._e("unknown");
-
- tune_args.final_link = ' href="' + tune_args.final_uri + '" target="_blank"';
-
- // Generate the text to be displayed
- tune_args.display_text = final_artist + ' - ' + final_title + ' (' + final_album + ')';
- tune_args.style_text = '<a' + tune_args.final_link + '>' + tune_args.display_text + '</a>';
- }
- } else {
- tune_args.style_text = Common._e("unknown");
- tune_args.display_text = tune_args.style_text;
- }
- } catch(e) {
- Console.error('PEP._displayTune', e);
- } finally {
- return tune_args;
- }
-
- };
-
-
- /**
- * Displays PEP geolocation
- * @private
- * @param {object} node_sel
- * @return {object}
- */
- self._displayGeolocation = function(node_sel) {
-
- var geolocation_args = self._generateDisplayObject();
-
- try {
- geolocation_args.style_value = 'location-world';
-
- if(node_sel) {
- geolocation_args.geoloc_lat = node_sel.find('lat').text();
- geolocation_args.geoloc_lon = node_sel.find('lon').text();
- geolocation_args.geoloc_human = node_sel.find('human').text() ||
- Common._e("See his/her position on the globe");
- geolocation_args.geoloc_real = geolocation_args.geoloc_human;
-
- // Text to be displayed
- if(geolocation_args.geoloc_lat && geolocation_args.geoloc_lon) {
- geolocation_args.final_uri = 'http://maps.google.com/?q=' + Common.encodeQuotes(geolocation_args.geoloc_lat) + ',' + Common.encodeQuotes(geolocation_args.geoloc_lon);
- geolocation_args.final_link = ' href="' + geolocation_args.final_uri + '" target="_blank"';
-
- geolocation_args.style_text = '<a' + geolocation_args.final_link + '>' +
- geolocation_args.geoloc_human.htmlEnc() +
- '</a>';
- geolocation_args.display_text = geolocation_args.geoloc_real ||
- (geolocation_args.geoloc_lat + '; ' + geolocation_args.geoloc_lon);
- } else {
- geolocation_args.style_text = Common._e("unknown");
- geolocation_args.display_text = geolocation_args.style_text;
- }
- } else {
- geolocation_args.style_text = Common._e("unknown");
- geolocation_args.display_text = geolocation_args.style_text;
- }
- } catch(e) {
- Console.error('PEP._displayGeolocation', e);
- } finally {
- return geolocation_args;
- }
-
- };
-
-
- /**
- * Add foreign display object to DOM
- * @private
- * @param {string} xid
- * @param {string} hash
- * @param {string} type
- * @param {object} display_args
- * @return {undefined}
- */
- self._appendForeignDisplayObject = function(xid, hash, type, display_args) {
-
- try {
- var this_buddy = '#roster .buddy[data-xid="' + escape(xid) + '"]';
-
- if(Common.exists(this_buddy)) {
- $(this_buddy + ' .bi-' + type).replaceWith(
- '<p class="bi-' + type + ' talk-images ' + display_args.style_value + '" title="' + Common.encodeQuotes(display_args.display_text) + '">' + display_args.style_text + '</p>'
- );
- }
-
- // Apply the text to the buddy chat
- if(Common.exists('#' + hash)) {
- // Selector
- var bc_pep = $('#' + hash + ' .bc-pep');
-
- // We remove the old PEP item
- bc_pep.find('a.bi-' + type).remove();
-
- // If the new PEP item is not null, create a new one
- if(display_args.style_text != Common._e("unknown")) {
- bc_pep.prepend(
- '<a' + display_args.final_link + ' class="bi-' + type + ' talk-images ' + display_args.style_value + '" title="' + Common.encodeQuotes(display_args.display_text) + '"></a>'
- );
- }
-
- // Process the new status position
- Presence.adaptChat(hash);
- }
- } catch(e) {
- Console.error('PEP._appendOwnDisplayObject', e);
- }
-
- };
-
-
- /**
- * Add own display object to DOM
- * @private
- * @param {string} type
- * @param {object} display_args
- * @return {undefined}
- */
- self._appendOwnDisplayObject = function(type, display_args) {
-
- try {
- // Change the icon/value of the target element
- if((type == 'mood') || (type == 'activity')) {
- // Change the input value
- var display_value = '';
- var display_attribute = display_args.pep_value;
-
- // Must apply default values?
- if(display_args.pep_value == 'none') {
- if(type == 'mood') {
- display_attribute = 'happy';
- } else {
- display_attribute = 'exercising';
- }
- }
-
- // No text?
- if(display_args.display_text != Common._e("unknown")) {
- display_value = display_args.display_text;
- }
-
- // Store this user event in our database
- DataStore.setDB(Connection.desktop_hash, type + '-value', 1, display_attribute);
- DataStore.setDB(Connection.desktop_hash, type + '-text', 1, display_value);
-
- // Apply this PEP event
- $('#my-infos .f-' + type + ' a.picker').attr('data-value', display_attribute);
- $('#my-infos .f-' + type + ' input').val(display_value);
- $('#my-infos .f-' + type + ' input').placeholder();
- } else if((type == 'tune') || (type == 'geoloc')) {
- // Reset the values
- $('#my-infos .f-others a.' + type).remove();
-
- // Not empty?
- if(display_args.display_text != Common._e("unknown")) {
- // Specific stuffs
- var href, title, icon_class;
-
- if(type == 'tune') {
- href = display_args.final_uri;
- title = display_args.display_text;
- icon_class = 'tune-note';
- } else {
- href = 'http://maps.google.com/?q=' + Common.encodeQuotes(display_args.geoloc_lat) + ',' + Common.encodeQuotes(display_args.geoloc_lon);
- title = Common._e("Where are you?") + ' (' + display_args.display_text + ')';
- icon_class = 'location-world';
- }
-
- // Must create the container?
- if(!Common.exists('#my-infos .f-others')) {
- $('#my-infos .content').append('<div class="element f-others"></div>');
- }
-
- // Create the element
- $('#my-infos .f-others').prepend(
- '<a class="icon ' + type + '" href="' + Common.encodeQuotes(href) + '" target="_blank" title="' + Common.encodeQuotes(title) + '">' +
- '<span class="talk-images ' + icon_class + '"></span>' +
- '</a>'
- );
- }
-
- // Empty?
- else if(!Common.exists('#my-infos .f-others a.icon')) {
- $('#my-infos .f-others').remove();
- }
-
- // Process the roster height again
- Roster.adapt();
- }
- } catch(e) {
- Console.error('PEP._appendOwnDisplayObject', e);
- }
-
- };
-
-
- /**
- * Generates storage data
- * @private
- * @param {object} args
- * @return {string}
- */
- self._generateStore = function(args) {
-
- var storage_data = '';
-
- try {
- var cur_value;
-
- for(var cur_arg in args) {
- storage_data += '<' + cur_arg + '>' +
- (args[cur_arg] || '').htmlEnc() +
- '</' + cur_arg + '>';
- }
- } catch(e) {
- Console.error('PEP._generateStore', e);
- } finally {
- return storage_data;
- }
-
- };
-
-
- /**
- * Proceeds mood picker event callback
- * @private
- * @param {object} picker_sel
- * @return {boolean}
- */
- self._callbackMoodPicker = function(picker_sel) {
-
- try {
- // Initialize some vars
- var path = '#my-infos .f-mood div.bubble';
- var mood_val = picker_sel.attr('data-value');
-
- var moods_obj = {
- 'crazy': Common._e("Crazy"),
- 'excited': Common._e("Excited"),
- 'playful': Common._e("Playful"),
- 'happy': Common._e("Happy"),
- 'shocked': Common._e("Shocked"),
- 'hot': Common._e("Hot"),
- 'sad': Common._e("Sad"),
- 'amorous': Common._e("Amorous"),
- 'confident': Common._e("Confident")
- };
-
- // Yet displayed?
- var can_append = !Common.exists(path);
-
- // Add this bubble!
- Bubble.show(path);
-
- if(!can_append) {
- return false;
- }
-
- // Generate the HTML code
- var html = '<div class="bubble removable">';
-
- for(var cur_mood_name in moods_obj) {
- // Yet in use: no need to display it!
- if(cur_mood_name == mood_val) {
- continue;
- }
-
- html += '<a href="#" class="talk-images" data-value="' + cur_mood_name + '" title="' + moods_obj[cur_mood_name] + '"></a>';
- }
-
- html += '</div>';
-
- // Append the HTML code
- $('#my-infos .f-mood').append(html);
-
- // Click event
- $(path + ' a').click(function() {
- // Update the mood marker
- picker_sel.attr(
- 'data-value',
- $(this).attr('data-value')
- );
-
- // Close the bubble
- Bubble.close();
-
- // Focus on the status input
- $(document).oneTime(10, function() {
- $('#mood-text').focus();
- });
-
- return;
- });
- } catch(e) {
- Console.error('PEP._callbackMoodPicker', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Proceeds activity picker event callback
- * @private
- * @param {object} picker_sel
- * @return {boolean}
- */
- self._callbackActivityPicker = function(picker_sel) {
-
- try {
- // Initialize some vars
- var path = '#my-infos .f-activity div.bubble';
- var activity_val = picker_sel.attr('data-value');
-
- var activities_obj = {
- 'doing_chores': Common._e("Chores"),
- 'drinking': Common._e("Drinking"),
- 'eating': Common._e("Eating"),
- 'exercising': Common._e("Exercising"),
- 'grooming': Common._e("Grooming"),
- 'having_appointment': Common._e("Appointment"),
- 'inactive': Common._e("Inactive"),
- 'relaxing': Common._e("Relaxing"),
- 'talking': Common._e("Talking"),
- 'traveling': Common._e("Traveling"),
- 'working': Common._e("Working")
- };
-
- var can_append = !Common.exists(path);
-
- // Add this bubble!
- Bubble.show(path);
-
- if(!can_append) {
- return false;
- }
-
- // Generate the HTML code
- var html = '<div class="bubble removable">';
-
- for(var cur_activity_name in activities_obj) {
- // Yet in use: no need to display it!
- if(cur_activity_name == activity_val) {
- continue;
- }
-
- html += '<a href="#" class="talk-images" data-value="' + cur_activity_name + '" title="' + activities_obj[cur_activity_name] + '"></a>';
- }
-
- html += '</div>';
-
- // Append the HTML code
- $('#my-infos .f-activity').append(html);
-
- // Click event
- $(path + ' a').click(function() {
- // Update the activity marker
- picker_sel.attr('data-value', $(this).attr('data-value'));
-
- // Close the bubble
- Bubble.close();
-
- // Focus on the status input
- $(document).oneTime(10, function() {
- $('#activity-text').focus();
- });
-
- return false;
- });
- } catch(e) {
- Console.error('PEP._callbackActivityPicker', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Attaches common text events
- * @private
- * @param {string} name
- * @param {object} element_text_sel
- * @param {function} send_fn
- * @return {undefined}
- */
- self._eventsCommonText = function(name, element_text_sel, send_fn) {
-
- try {
- // Submit events
- element_text_sel.placeholder();
- element_text_sel.keyup(function(e) {
- if(e.keyCode == 13) {
- $(this).blur();
-
- return false;
- }
- });
-
- // Input blur handler
- element_text_sel.blur(function() {
- // Read the parameters
- var value = $('#my-infos .f-' + name + ' a.picker').attr('data-value');
- var text = $(this).val();
-
- // Must send?
- if((value != DataStore.getDB(Connection.desktop_hash, name + '-value', 1)) || (text != DataStore.getDB(Connection.desktop_hash, name + '-text', 1))) {
- // Update the local stored values
- DataStore.setDB(Connection.desktop_hash, name + '-value', 1, value);
- DataStore.setDB(Connection.desktop_hash, name + '-text', 1, text);
-
- // Send it!
- send_fn(value, undefined, text);
- }
- });
-
- // Input focus handler
- element_text_sel.focus(function() {
- Bubble.close();
- });
- } catch(e) {
- Console.error('PEP._eventsCommonText', e);
- }
-
- };
-
-
- /**
- * Attaches mood text events
- * @private
- * @param {object} mood_text_sel
- * @return {undefined}
- */
- self._eventsMoodText = function(mood_text_sel) {
-
- try {
- self._eventsCommonText(
- 'mood',
- mood_text_sel,
- self.sendMood
- );
- } catch(e) {
- Console.error('PEP._eventsMoodText', e);
- }
-
- };
-
-
- /**
- * Attaches activity text events
- * @private
- * @param {object} activity_text_sel
- * @return {undefined}
- */
- self._eventsActivityText = function(activity_text_sel) {
-
- try {
- self._eventsCommonText(
- 'activity',
- activity_text_sel,
- self.sendActivity
- );
- } catch(e) {
- Console.error('PEP._eventsActivityText', e);
- }
-
- };
-
-
- /**
- * Stores the PEP items
- * @public
- * @param {string} xid
- * @param {string} type
- * @param {string} value1
- * @param {string} value2
- * @param {string} value3
- * @param {string} value4
- * @return {undefined}
- */
- self.store = function(xid, type, value1, value2, value3, value4) {
-
- try {
- if(value1 || value2 || value3 || value4) {
- var xml = '<pep type="' + type + '">';
-
- // Generate the subnodes
- switch(type) {
- case 'tune':
- xml += self._generateStore({
- 'artist': value1,
- 'title': value2,
- 'album': value3,
- 'uri': value4
- });
- break;
-
- case 'geoloc':
- xml += self._generateStore({
- 'lat': value1,
- 'lon': value2,
- 'human': value3
- });
- break;
-
- default:
- xml += self._generateStore({
- 'value': value1,
- 'text': value2
- });
- }
-
- // End the XML node
- xml += '</pep>';
-
- // Update the input with the new value
- DataStore.setDB(Connection.desktop_hash, 'pep-' + type, xid, xml);
- } else {
- DataStore.removeDB(Connection.desktop_hash, 'pep-' + type, xid);
- }
-
- // Display the PEP event
- self.display(xid, type);
- } catch(e) {
- Console.error('PEP.store', e);
- }
-
- };
-
-
- /**
- * Displays a PEP item
- * @public
- * @param {string} xid
- * @param {string} type
- * @return {undefined}
- */
- self.display = function(xid, type) {
-
- try {
- // Read the target input for values
- var value = $(Common.XMLFromString(
- DataStore.getDB(Connection.desktop_hash, 'pep-' + type, xid))
- );
-
- // If the PEP element exists
- if(type) {
- // Get the user hash
- var hash = hex_md5(xid);
- var display_args = {};
-
- // Parse the XML for mood and activity
- switch(type) {
- case 'mood':
- display_args = self._displayMood(value);
- break;
-
- case 'activity':
- display_args = self._displayActivity(value);
- break;
-
- case 'tune':
- display_args = self._displayTune(value);
- break;
-
- case 'geoloc':
- display_args = self._displayGeolocation(value);
- break;
- }
-
- // Append foreign PEP user values
- self._appendForeignDisplayObject(xid, hash, type, display_args);
-
- // PEP values of the logged in user?
- if(xid == Common.getXID()) {
- self._appendOwnDisplayObject(type, display_args);
- }
- }
- } catch(e) {
- Console.error('PEP.display', e);
- }
-
- };
-
-
- /**
- * Changes the mood icon
- * @public
- * @param {string} value
- * @return {string}
- */
- self.moodIcon = function(value) {
-
- try {
- // The main var
- var icon;
-
- // Switch the values
- switch(value) {
- case 'angry':
- case 'cranky':
- case 'hot':
- case 'invincible':
- case 'mean':
- case 'restless':
- case 'serious':
- case 'strong':
- icon = 'mood-one';
- break;
-
- case 'contemplative':
- case 'happy':
- case 'playful':
- icon = 'mood-two';
- break;
-
- case 'aroused':
- case 'envious':
- case 'excited':
- case 'interested':
- case 'lucky':
- case 'proud':
- case 'relieved':
- case 'satisfied':
- case 'shy':
- icon = 'mood-three';
- break;
-
- case 'calm':
- case 'cautious':
- case 'contented':
- case 'creative':
- case 'humbled':
- case 'lonely':
- case 'undefined':
- case 'none':
- icon = 'mood-four';
- break;
-
- case 'afraid':
- case 'amazed':
- case 'confused':
- case 'dismayed':
- case 'hungry':
- case 'in_awe':
- case 'indignant':
- case 'jealous':
- case 'lost':
- case 'offended':
- case 'outraged':
- case 'shocked':
- case 'surprised':
- case 'embarrassed':
- case 'impressed':
- icon = 'mood-five';
- break;
-
- case 'crazy':
- case 'distracted':
- case 'neutral':
- case 'relaxed':
- case 'thirsty':
- icon = 'mood-six';
- break;
-
- case 'amorous':
- case 'curious':
- case 'in_love':
- case 'nervous':
- case 'sarcastic':
- icon = 'mood-eight';
- break;
-
- case 'brave':
- case 'confident':
- case 'hopeful':
- case 'grateful':
- case 'spontaneous':
- case 'thankful':
- icon = 'mood-nine';
- break;
-
- default:
- icon = 'mood-seven';
- break;
- }
-
- // Return the good icon name
- return icon;
- } catch(e) {
- Console.error('PEP.moodIcon', e);
- }
-
- };
-
-
- /**
- * Changes the activity icon
- * @public
- * @param {string} value
- * @return {string}
- */
- self.activityIcon = function(value) {
-
- try {
- // The main var
- var icon;
-
- // Switch the values
- switch(value) {
- case 'doing_chores':
- icon = 'activity-doing_chores';
- break;
-
- case 'drinking':
- icon = 'activity-drinking';
- break;
-
- case 'eating':
- icon = 'activity-eating';
- break;
-
- case 'grooming':
- icon = 'activity-grooming';
- break;
-
- case 'having_appointment':
- icon = 'activity-having_appointment';
- break;
-
- case 'inactive':
- icon = 'activity-inactive';
- break;
-
- case 'relaxing':
- icon = 'activity-relaxing';
- break;
-
- case 'talking':
- icon = 'activity-talking';
- break;
-
- case 'traveling':
- icon = 'activity-traveling';
- break;
-
- case 'working':
- icon = 'activity-working';
- break;
- default:
- icon = 'activity-exercising';
- break;
- }
-
- // Return the good icon name
- return icon;
- } catch(e) {
- Console.error('PEP.activityIcon', e);
- }
-
- };
-
-
- /**
- * Sends the user's mood
- * @public
- * @param {string} value
- * @param {string} text
- * @return {undefined}
- */
- self.sendMood = function(value, _, text) {
-
- /* REF: http://xmpp.org/extensions/xep-0107.html */
-
- try {
- // We propagate the mood on the xmpp network
- var iq = new JSJaCIQ();
- iq.setType('set');
-
- // We create the XML document
- var pubsub = iq.appendNode('pubsub', {'xmlns': NS_PUBSUB});
- var publish = pubsub.appendChild(iq.buildNode('publish', {'node': NS_MOOD, 'xmlns': NS_PUBSUB}));
- var item = publish.appendChild(iq.buildNode('item', {'xmlns': NS_PUBSUB}));
- var mood = item.appendChild(iq.buildNode('mood', {'xmlns': NS_MOOD}));
-
- if(value != 'none') {
- mood.appendChild(iq.buildNode(value, {'xmlns': NS_MOOD}));
- mood.appendChild(iq.buildNode('text', {'xmlns': NS_MOOD}, text));
- }
-
- // And finally we send the mood that is set
- con.send(iq);
-
- Console.info('New mood sent: ' + value + ' (' + text + ')');
- } catch(e) {
- Console.error('PEP.sendMood', e);
- }
-
- };
-
-
- /**
- * Sends the user's activity
- * @public
- * @param {string} main
- * @param {string} sub
- * @param {string} text
- * @return {undefined}
- */
- self.sendActivity = function(main, sub, text) {
-
- try {
- // We propagate the mood on the xmpp network
- var iq = new JSJaCIQ();
- iq.setType('set');
-
- // We create the XML document
- var pubsub = iq.appendNode('pubsub', {
- 'xmlns': NS_PUBSUB
- });
-
- var publish = pubsub.appendChild(iq.buildNode('publish', {
- 'node': NS_ACTIVITY,
- 'xmlns': NS_PUBSUB
- }));
-
- var item = publish.appendChild(iq.buildNode('item', {
- 'xmlns': NS_PUBSUB
- }));
-
- var activity = item.appendChild(iq.buildNode('activity', {
- 'xmlns': NS_ACTIVITY
- }));
-
- if(main != 'none') {
- var mainType = activity.appendChild(iq.buildNode(main, {
- 'xmlns': NS_ACTIVITY
- }));
-
- // Child nodes
- if(sub) {
- mainType.appendChild(iq.buildNode(sub, {
- 'xmlns': NS_ACTIVITY
- }));
- }
-
- if(text) {
- activity.appendChild(iq.buildNode('text', {
- 'xmlns': NS_ACTIVITY
- }, text));
- }
- }
-
- // And finally we send the mood that is set
- con.send(iq);
-
- Console.info('New activity sent: ' + main + ' (' + text + ')');
- } catch(e) {
- Console.error('PEP.sendActivity', e);
- }
-
- };
-
-
- /**
- * Sends the user's geographic position
- * @public
- * @param {string} lat
- * @param {string} lon
- * @param {string} vAlt
- * @param {string} country
- * @param {string} countrycode
- * @param {string} region
- * @param {string} postalcode
- * @param {string} locality
- * @param {string} street
- * @param {string} building
- * @param {string} text
- * @param {string} uri
- * @return {undefined}
- */
- self.sendPosition = function(lat, lon, alt, country, countrycode, region, postalcode, locality, street, building, text, uri) {
-
- /* REF: http://xmpp.org/extensions/xep-0080.html */
-
- try {
- var iq = new JSJaCIQ();
- iq.setType('set');
-
- // Create XML nodes
- var pubsub = iq.appendNode('pubsub', {
- 'xmlns': NS_PUBSUB
- });
-
- var publish = pubsub.appendChild(iq.buildNode('publish', {
- 'node': NS_GEOLOC,
- 'xmlns': NS_PUBSUB
- }));
-
- var item = publish.appendChild(iq.buildNode('item', {
- 'xmlns': NS_PUBSUB
- }));
-
- var geoloc = item.appendChild(iq.buildNode('geoloc', {
- 'xmlns': NS_GEOLOC
- }));
-
- // Position object
- var position_obj = {
- 'lat': lat,
- 'lon': lon,
- 'alt': alt,
- 'country': country,
- 'countrycode': countrycode,
- 'region': region,
- 'postalcode': postalcode,
- 'locality': locality,
- 'street': street,
- 'building': building,
- 'text': text,
- 'uri': uri,
- 'timestamp': DateUtils.getXMPPTime('utc'),
- 'tzo': DateUtils.getTZO()
- };
-
- var cur_position_val;
-
- for(var cur_position_type in position_obj) {
- cur_position_val = position_obj[cur_position_type];
-
- if(cur_position_val) {
- geoloc.appendChild(
- iq.buildNode(cur_position_type, {
- 'xmlns': NS_GEOLOC
- }, cur_position_val)
- );
- }
- }
-
- // And finally we send the XML
- con.send(iq);
-
- // For logger
- if(lat && lon) {
- Console.info('Geolocated.');
- } else {
- Console.warn('Not geolocated.');
- }
- } catch(e) {
- Console.error('PEP.sendPosition', e);
- }
-
- };
-
-
- /**
- * Parses the user's geographic position
- * @public
- * @param {string} data
- * @return {object}
- */
- self.parsePosition = function(data) {
-
- try {
- var result = $(data).find('result:first');
-
- // Get latitude and longitude
- var geometry_sel = result.find('geometry:first location:first');
-
- var lat = geometry_sel.find('lat').text();
- var lng = geometry_sel.find('lng').text();
-
- var addr_comp_sel = result.find('address_component');
-
- var array = [
- lat,
- lng,
- addr_comp_sel.filter(':has(type:contains("country")):first').find('long_name').text(),
- addr_comp_sel.filter(':has(type:contains("country")):first').find('short_name').text(),
- addr_comp_sel.filter(':has(type:contains("administrative_area_level_1")):first').find('long_name').text(),
- addr_comp_sel.filter(':has(type:contains("postal_code")):first').find('long_name').text(),
- addr_comp_sel.filter(':has(type:contains("locality")):first').find('long_name').text(),
- addr_comp_sel.filter(':has(type:contains("route")):first').find('long_name').text(),
- addr_comp_sel.filter(':has(type:contains("street_number")):first').find('long_name').text(),
- result.find('formatted_address:first').text(),
- 'http://maps.google.com/?q=' + Common.encodeQuotes(lat) + ',' + Common.encodeQuotes(lng)
- ];
-
- return array;
- } catch(e) {
- Console.error('PEP.parsePosition', e);
- }
-
- };
-
-
- /**
- * Converts a position into an human-readable one
- * @public
- * @param {string} locality
- * @param {string} region
- * @param {string} country
- * @return {string}
- */
- self.humanPosition = function(locality, region, country) {
-
- var human_value = '';
-
- try {
- if(locality) {
- // Any locality
- human_value += locality;
-
- if(region) {
- human_value += ', ' + region;
- }
-
- if(country) {
- human_value += ', ' + country;
- }
- } else if(region) {
- // Any region
- human_value += region;
-
- if(country) {
- human_value += ', ' + country;
- }
- } else if(country) {
- // Any country
- human_value += country;
- }
- } catch(e) {
- Console.error('PEP.humanPosition', e);
- } finally {
- return human_value;
- }
-
- };
-
-
- /**
- * Gets the user's geographic position
- * @public
- * @param {object} position
- * @return {undefined}
- */
- self.getPosition = function(position) {
-
- try {
- // Convert integers to strings
- var lat = '' + position.coords.latitude;
- var lon = '' + position.coords.longitude;
- var alt = '' + position.coords.altitude;
-
- // Get full position (from Google Maps API)
- $.get('./server/geolocation.php', {
- latitude: lat,
- longitude: lon,
- language: XML_LANG
- }, function(data) {
- // Still connected?
- if(Common.isConnected()) {
- var results = self.parsePosition(data);
-
- self.sendPosition(
- (Utils.isNumber(lat) ? lat : null),
- (Utils.isNumber(lon) ? lon : null),
- (Utils.isNumber(alt) ? alt : null),
- results[2],
- results[3],
- results[4],
- results[5],
- results[6],
- results[7],
- results[8],
- results[9],
- results[10]
- );
-
- // Store data
- DataStore.setDB(Connection.desktop_hash, 'geolocation', 'now', Common.xmlToString(data));
-
- Console.log('Position details got from Google Maps API.');
- }
- });
-
- Console.log('Position got: latitude > ' + lat + ' / longitude > ' + lon + ' / altitude > ' + alt);
- } catch(e) {
- Console.error('PEP.getPosition', e);
- }
-
- };
-
-
- /**
- * Geolocates the user
- * @public
- * @return {undefined}
- */
- self.geolocate = function() {
-
- try {
- // Don't fire it until options & features are not retrieved!
- if(!DataStore.getDB(Connection.desktop_hash, 'options', 'geolocation') ||
- (DataStore.getDB(Connection.desktop_hash, 'options', 'geolocation') == '0') ||
- !Features.enabledPEP()) {
- return;
- }
-
- // We publish the user location if allowed
- if(navigator.geolocation) {
- // Wait a bit... (to fix a bug)
- $('#my-infos').stopTime().oneTime('1s', function() {
- navigator.geolocation.getCurrentPosition(self.getPosition);
- });
-
- Console.info('Geolocating...');
- } else {
- Console.error('Not geolocated: browser does not support it.');
- }
- } catch(e) {
- Console.error('PEP.geolocate', e);
- }
-
- };
-
-
- /**
- * Gets the user's geolocation to check it exists
- * @public
- * @return {undefined}
- */
- self.getInitGeoloc = function() {
-
- try {
- var iq = new JSJaCIQ();
- iq.setType('get');
-
- var pubsub = iq.appendNode('pubsub', {
- 'xmlns': NS_PUBSUB
- });
-
- var ps_items = pubsub.appendChild(iq.buildNode('items', {
- 'node': NS_GEOLOC,
- 'xmlns': NS_PUBSUB
- }));
-
- ps_items.setAttribute('max_items', '0');
-
- con.send(iq, self.handleInitGeoloc);
- } catch(e) {
- Console.error('PEP.getInitGeoloc', e);
- }
-
- };
-
-
- /**
- * Handles the user's geolocation to create note in case of error
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleInitGeoloc = function(iq) {
-
- try {
- // Any error?
- if((iq.getType() == 'error') && $(iq.getNode()).find('item-not-found').size()) {
- // The node may not exist, create it!
- Pubsub.setup('', NS_GEOLOC, '1', '1', '', '', true);
-
- Console.warn('Error while getting geoloc, trying to reconfigure the PubSub node!');
- }
- } catch(e) {
- Console.error('PEP.handleInitGeoloc', e);
- }
-
- };
-
-
- /**
- * Displays all the supported PEP events for a given XID
- * @public
- * @return {undefined}
- */
- self.displayAll = function() {
-
- try {
- self.display(xid, 'mood');
- self.display(xid, 'activity');
- self.display(xid, 'tune');
- self.display(xid, 'geoloc');
- } catch(e) {
- Console.error('PEP.displayAll', e);
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.instance = function() {
-
- try {
- // Apply empty values to the PEP database
- DataStore.setDB(Connection.desktop_hash, 'mood-value', 1, '');
- DataStore.setDB(Connection.desktop_hash, 'mood-text', 1, '');
- DataStore.setDB(Connection.desktop_hash, 'activity-value', 1, '');
- DataStore.setDB(Connection.desktop_hash, 'activity-text', 1, '');
-
- // Click event for user mood
- $('#my-infos .f-mood a.picker').click(function() {
- return PEP._callbackMoodPicker(
- $(this)
- );
- });
-
- // Click event for user activity
- $('#my-infos .f-activity a.picker').click(function() {
- return PEP._callbackActivityPicker(
- $(this)
- );
- });
-
- // Attach events
- self._eventsMoodText(
- $('#mood-text')
- );
-
- self._eventsActivityText(
- $('#activity-text')
- );
- } catch(e) {
- Console.error('PEP.instance', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/popup.js b/app/javascripts/popup.js
deleted file mode 100644
index f3825fd3..00000000
--- a/app/javascripts/popup.js
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the popup JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Popup = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Creates a popup code
- * @public
- * @param {string} id
- * @param {string} content
- * @return {boolean}
- */
- self.create = function(id, content) {
-
- try {
- // Popup exists?
- if(Common.exists('#' + id)) {
- return false;
- }
-
- // Popop on top of another one?
- var top_of = Common.exists('div.lock:has(div.popup)');
-
- // Append the popup code
- $('body').append(
- '<div id="' + id + '" class="lock removable">' +
- '<div class="popup">' +
- content +
- '</div>' +
- '</div>'
- );
-
- // Avoids darker popup background (if on top of another popup)
- if(top_of) {
- $('#' + id).css('background', 'transparent');
- }
-
- // Attach popup events
- self.instance(id);
-
- return true;
- } catch(e) {
- Console.error('Popup.create', e);
- }
-
- };
-
-
- /**
- * Destroys a popup code
- * @public
- * @param {string} id
- * @return {undefined}
- */
- self.destroy = function(id) {
-
- try {
- // Stop the popup timers
- $('#' + id + ' *').stopTime();
-
- // Remove the popup
- $('#' + id).remove();
-
- // Manage input focus
- Interface.inputFocus();
- } catch(e) {
- Console.error('Popup.destroy', e);
- }
-
- };
-
-
- /**
- * Attaches popup events
- * @public
- * @param {string} id
- * @return {undefined}
- */
- self.instance = function(id) {
-
- try {
- // Click events
- $('#' + id).click(function(evt) {
- // Click on lock background?
- if($(evt.target).is('.lock:not(.unavoidable)')) {
- // Destroy the popup
- self.destroy(id);
-
- return false;
- }
- });
- } catch(e) {
- Console.error('Popup.instance', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/presence.js b/app/javascripts/presence.js
deleted file mode 100644
index 7c915f8a..00000000
--- a/app/javascripts/presence.js
+++ /dev/null
@@ -1,1950 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the presence JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Presence = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Variables */
- self.first_sent = false;
- self.auto_idle = false;
-
-
- /**
- * Handles groupchat presence
- * @private
- * @param {string} from
- * @param {string} xid
- * @param {string} hash
- * @param {string} type
- * @param {string} show
- * @param {string} status
- * @param {string} xid_hash
- * @param {string} resource
- * @param {object} node_sel
- * @param {object} presence
- * @param {number} priority
- * @param {boolean} has_photo
- * @param {string} checksum
- * @param {string} caps
- * @return {undefined}
- */
- self._handleGroupchat = function(from, xid, hash, type, show, status, xid_hash, resource, node_sel, presence, priority, has_photo, checksum, caps) {
-
- try {
- var resources_obj, xml;
-
- var x_muc = node_sel.find('x[xmlns="' + NS_MUC_USER + '"]:first');
- var item_sel = x_muc.find('item');
-
- var affiliation = item_sel.attr('affiliation');
- var role = item_sel.attr('role');
- var reason = item_sel.find('reason').text();
- var iXID = item_sel.attr('jid');
- var iNick = item_sel.attr('nick');
-
- var nick = resource;
- var message_time = DateUtils.getCompleteTime();
- var not_initial = !Common.exists('#' + xid_hash + '[data-initial="true"]');
-
- // Read the status code
- var status_code = [];
-
- x_muc.find('status').each(function() {
- status_code.push(parseInt($(this).attr('code')));
- });
-
- if(type && (type == 'unavailable')) {
- // User quitting
- self.displayMUC(
- from,
- xid_hash,
- hash,
- type,
- show,
- status,
- affiliation,
- role,
- reason,
- status_code,
- iXID,
- iNick,
- message_time,
- nick,
- not_initial
- );
-
- DataStore.removeDB(Connection.desktop_hash, 'presence-stanza', from);
- resources_obj = self.removeResource(xid, resource);
- } else {
- // User joining
-
- // Fixes M-Link first presence bug (missing ID!)
- if(nick == Name.getMUCNick(xid_hash) &&
- presence.getID() === null &&
- !Common.exists('#page-engine #' + xid_hash + ' .list .' + hash)) {
- Groupchat.handleMUC(presence);
-
- Console.warn('Passed M-Link MUC first presence handling.');
- } else {
- self.displayMUC(
- from,
- xid_hash,
- hash,
- type,
- show,
- status,
- affiliation,
- role,
- reason,
- status_code,
- iXID,
- iNick,
- message_time,
- nick,
- not_initial
- );
-
- xml = '<presence from="' + Common.encodeQuotes(from) + '">' +
- '<priority>' + priority.htmlEnc() + '</priority>' +
- '<show>' + show.htmlEnc() + '</show>' +
- '<type>' + type.htmlEnc() + '</type>' +
- '<status>' + status.htmlEnc() + '</status>' +
- '<avatar>' + has_photo.htmlEnc() + '</avatar>' +
- '<checksum>' + checksum.htmlEnc() + '</checksum>' +
- '<caps>' + caps.htmlEnc() + '</caps>' +
- '</presence>';
-
- DataStore.setDB(Connection.desktop_hash, 'presence-stanza', from, xml);
- resources_obj = self.addResource(xid, resource);
- }
- }
-
- // Manage the presence
- self.processPriority(from, resource, resources_obj);
- self.funnel(from, hash);
- } catch(e) {
- Console.error('Groupchat._handleGroupchat', e);
- }
-
- };
-
-
- /**
- * Handles user presence
- * @private
- * @param {string} from
- * @param {string} xid
- * @param {string} type
- * @param {string} show
- * @param {string} status
- * @param {string} xid_hash
- * @param {string} resource
- * @param {object} node_sel
- * @param {number} priority
- * @param {boolean} has_photo
- * @param {string} checksum
- * @param {string} caps
- * @return {undefined}
- */
- self._handleUser = function(from, xid, type, show, status, xid_hash, resource, node_sel, priority, has_photo, checksum, caps) {
-
- try {
- var resources_obj, xml;
-
- // Subscribed/Unsubscribed stanzas
- if((type == 'subscribed') || (type == 'unsubscribed')) {
- return;
- }
-
- // Subscribe stanza
- else if(type == 'subscribe') {
- // This is a buddy we can safely authorize, because we added him to our roster
- if(Common.exists('#roster .buddy[data-xid="' + escape(xid) + '"]')) {
- self.acceptSubscribe(xid);
- }
-
- // We do not know this entity, we'd be better ask the user
- else {
- // Get the nickname
- var nickname = node_sel.find('nick[xmlns="' + NS_NICK + '"]:first').text();
-
- // New notification
- Notification.create('subscribe', xid, [xid, nickname], status);
- }
- }
-
- // Unsubscribe stanza
- else if(type == 'unsubscribe') {
- Roster.send(xid, 'remove');
- }
-
- // Other stanzas
- else {
- // Unavailable/error presence
- if(type == 'unavailable') {
- DataStore.removeDB(Connection.desktop_hash, 'presence-stanza', from);
- resources_obj = self.removeResource(xid, resource);
- } else {
- xml = '<presence from="' + Common.encodeQuotes(from) + '">' +
- '<priority>' + priority.htmlEnc() + '</priority>' +
- '<show>' + show.htmlEnc() + '</show>' +
- '<type>' + type.htmlEnc() + '</type>' +
- '<status>' + status.htmlEnc() + '</status>' +
- '<avatar>' + has_photo.htmlEnc() + '</avatar>' +
- '<checksum>' + checksum.htmlEnc() + '</checksum>' +
- '<caps>' + caps.htmlEnc() + '</caps>' +
- '</presence>';
-
- DataStore.setDB(Connection.desktop_hash, 'presence-stanza', from, xml);
- resources_obj = self.addResource(xid, resource);
- }
-
- // We manage the presence
- self.processPriority(xid, resource, resources_obj);
- self.funnel(xid, xid_hash);
-
- // We display the presence in the current chat
- if(Common.exists('#' + xid_hash)) {
- var dStatus = self.filterStatus(xid, status, false);
-
- if(dStatus) {
- dStatus = ' (' + dStatus + ')';
- }
-
- // Generate the presence-in-chat code
- var dName = Name.getBuddy(from).htmlEnc();
- var dBody = dName + ' (' + from + ') ' + Common._e("is now") + ' ' + self.humanShow(show, type) + dStatus;
-
- // Check whether it has been previously displayed
- var can_display = ($('#' + xid_hash + ' .one-line.system-message:last').html() != dBody);
-
- if(can_display) {
- Message.display(
- 'chat',
- xid,
- xid_hash,
- dName,
- dBody,
- DateUtils.getCompleteTime(),
- DateUtils.getTimeStamp(),
- 'system-message',
- false
- );
- }
- }
- }
-
- // Get disco#infos for this presence (related to Caps)
- Caps.getDiscoInfos(from, caps);
- } catch(e) {
- Console.error('Groupchat._handleUser', e);
- }
-
- };
-
-
- /**
- * Attaches picker events
- * @private
- * @param {string} name
- * @param {object} element_text_sel
- * @param {function} send_fn
- * @return {boolean}
- */
- self._eventsPicker = function(element_picker_sel) {
-
- try {
- // Disabled?
- if(element_picker_sel.hasClass('disabled')) {
- return false;
- }
-
- // Initialize some vars
- var path = '#my-infos .f-presence div.bubble';
- var show_val = self.getUserShow();
-
- var shows_obj = {
- 'xa': Common._e("Not available"),
- 'away': Common._e("Away"),
- 'available': Common._e("Available")
- };
-
- var can_append = !Common.exists(path);
-
- // Add this bubble!
- Bubble.show(path);
-
- if(!can_append) {
- return false;
- }
-
- // Generate the HTML code
- var html = '<div class="bubble removable">';
-
- for(var cur_show_name in shows_obj) {
- // Yet in use: no need to display it!
- if(cur_show_name == show_val) {
- continue;
- }
-
- html += '<a href="#" class="talk-images" data-value="' + cur_show_name + '" title="' + shows_obj[cur_show_name] + '"></a>';
- }
-
- html += '</div>';
-
- // Append the HTML code
- $('#my-infos .f-presence').append(html);
-
- // Click event
- $(path + ' a').click(function() {
- // Update the presence show marker
- $('#my-infos .f-presence a.picker').attr(
- 'data-value',
- $(this).attr('data-value')
- );
-
- // Close the bubble
- Bubble.close();
-
- // Focus on the status input
- $(document).oneTime(10, function() {
- $('#presence-status').focus();
- });
-
- return false;
- });
- } catch(e) {
- Console.error('Groupchat._eventsPicker', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Sends the user first presence
- * @public
- * @param {string} checksum
- * @return {undefined}
- */
- self.sendFirst = function(checksum) {
-
- try {
- Console.info('First presence sent.');
-
- var presence_status_sel = $('#presence-status');
-
- // Jappix is now ready: change the title
- Interface.title('talk');
-
- // Anonymous check
- var is_anonymous = Utils.isAnonymous();
-
- // Update our marker
- self.first_sent = true;
-
- // Try to use the last status message
- var status = DataStore.getDB(Connection.desktop_hash, 'options', 'presence-status') || '';
-
- // We tell the world that we are online
- if(!is_anonymous) {
- self.send('', '', '', status, checksum);
- }
-
- // Any status to apply?
- if(status) {
- presence_status_sel.val(status);
- }
-
- // Enable the presence picker
- presence_status_sel.removeAttr('disabled');
- $('#my-infos .f-presence a.picker').removeClass('disabled');
-
- // We set the last activity stamp
- DateUtils.presence_last_activity = DateUtils.getTimeStamp();
-
- // We store our presence
- DataStore.setDB(Connection.desktop_hash, 'presence-show', 1, 'available');
-
- // Not anonymous
- if(!is_anonymous) {
- // We get the stored bookmarks (because of the photo hash and some other stuffs, we must get it later)
- Storage.get(NS_BOOKMARKS);
-
- // We open a new chat if a XMPP link was submitted
- if((parent.location.hash != '#OK') && XMPPLinks.links_var.x) {
- // A link is submitted in the URL
- XMPPLinks.go(XMPPLinks.links_var.x);
-
- // Set a OK status
- parent.location.hash = 'OK';
- }
- }
- } catch(e) {
- Console.error('Presence.sendFirst', e);
- }
-
- };
-
-
- /**
- * Handles incoming presence packets
- * @public
- * @param {object} presence
- * @return {undefined}
- */
- self.handle = function(presence) {
-
- try {
- // We define everything needed here
- var from = Common.fullXID(Common.getStanzaFrom(presence));
- var hash = hex_md5(from);
- var node_sel = $(presence.getNode());
- var xid = Common.bareXID(from);
- var xid_hash = hex_md5(xid);
- var resource = Common.thisResource(from);
-
- // We get the type content
- var type = presence.getType() || '';
-
- // We get the priority content
- var priority = presence.getPriority() + '';
- if(!priority || (type == 'error')) {
- priority = '0';
- }
-
- // We get the show content
- var show = presence.getShow();
- if(!show || (type == 'error')) {
- show = '';
- }
-
- // We get the status content
- var status = presence.getStatus();
- if(!status || (type == 'error')) {
- status = '';
- }
-
- // We get the photo content
- var photo = node_sel.find('x[xmlns="' + NS_VCARD_P + '"]:first photo');
- var checksum = photo.text();
- var has_photo = (photo.size() && (type != 'error')) ? 'true' : 'false';
-
- // We get the CAPS content
- var caps = node_sel.find('c[xmlns="' + NS_CAPS + '"]:first').attr('ver');
- if(!caps || (type == 'error')) {
- caps = '';
- }
-
- // This presence comes from another resource of my account with a difference avatar checksum
- if(xid == Common.getXID() &&
- has_photo == 'true' &&
- checksum != DataStore.getDB(Connection.desktop_hash, 'checksum', 1)) {
- Avatar.get(Common.getXID(), 'force', 'true', 'forget');
- }
-
- if(Utils.isPrivate(xid)) {
- // Groupchat presence
- self._handleGroupchat(
- from,
- xid,
- hash,
- type,
- show,
- status,
- xid_hash,
- resource,
- node_sel,
- presence,
- priority,
- has_photo,
- checksum,
- caps
- );
- } else {
- // User or gateway presence
- self._handleUser(
- from,
- xid,
- type,
- show,
- status,
- xid_hash,
- resource,
- node_sel,
- priority,
- has_photo,
- checksum,
- caps
- );
- }
-
- Console.log('Presence received (type: ' + (type || 'available') + ', show: ' + (show || 'none') + ') from ' + from);
- } catch(e) {
- Console.error('Presence.handle', e);
- }
-
- };
-
-
- /**
- * Displays a MUC presence
- * @public
- * @param {string} from
- * @param {string} roomHash
- * @param {string} hash
- * @param {string} type
- * @param {string} show
- * @param {string} status
- * @param {string} affiliation
- * @param {string} role
- * @param {string} reason
- * @param {string} status_code
- * @param {string} iXID
- * @param {string} iNick
- * @param {string} message_time
- * @param {string} nick
- * @param {boolean} initial
- * @return {undefined}
- */
- self.displayMUC = function(from, roomHash, hash, type, show, status, affiliation, role, reason, status_code, iXID, iNick, message_time, nick, initial) {
-
- try {
- // Generate the values
- var room_xid = Common.bareXID(from);
- var thisUser = '#page-engine #' + roomHash + ' .list .' + hash;
- var thisPrivate = $('#' + hash + ' .message-area');
- var nick_html = nick.htmlEnc();
- var real_xid = '';
- var write = nick_html + ' ';
- var notify = false;
-
- // Reset data?
- if(!role) {
- role = 'participant';
- }
- if(!affiliation) {
- affiliation = 'none';
- }
-
- // Must update the role?
- if(Common.exists(thisUser) && (($(thisUser).attr('data-role') != role) || ($(thisUser).attr('data-affiliation') != affiliation))) {
- $(thisUser).remove();
- }
-
- // Any XID submitted?
- if(iXID) {
- real_xid = ' data-realxid="' + iXID + '"';
- iXID = Common.bareXID(iXID);
- write += ' (<a onclick="return Chat.checkCreate(\'' + Utils.encodeOnclick(iXID) + '\', \'chat\');" href="xmpp:' + Utils.encodeOnclick(iXID) + '">' + iXID + '</a>) ';
- }
-
- // User does not exists yet
- if(!Common.exists(thisUser) && (!type || (type == 'available'))) {
- var myself = '';
-
- // Is it me?
- if(nick == Name.getMUCNick(roomHash)) {
- // Enable the room
- $('#' + roomHash + ' .message-area').removeAttr('disabled');
-
- // Marker
- myself = ' myself';
- }
-
- // Set the user in the MUC list
- $('#' + roomHash + ' .list .' + role + ' .title').after(
- '<div class="user ' + hash + myself + '" data-xid="' + Common.encodeQuotes(from) + '" data-nick="' + escape(nick) + '"' + real_xid + ' data-role="' + Common.encodeQuotes(role) + '" data-affiliation="' + Common.encodeQuotes(affiliation) + '">' +
- '<div class="user-details">' +
- '<div class="name talk-images available">' + nick_html + '</div>' +
-
- '<div class="avatar-container">' +
- '<img class="avatar" src="' + './images/others/default-avatar.png' + '" alt="" />' +
- '</div>' +
-
- '<div class="clear"></div>' +
- '</div>' +
-
- '<div class="user-actions">' +
- '<span class="action promote">' +
- '<a href="#" class="talk-images" title="' + Common._e("Promote as moderator") + '"></a>' +
- '</span>' +
-
- '<span class="action demote">' +
- '<a href="#" class="talk-images" title="' + Common._e("Remove moderator status") + '"></a>' +
- '</span>' +
-
- '<span class="action add">' +
- '<a href="#" class="talk-images" title="' + Common._e("Add to my contacts") + '"></a>' +
- '</span>' +
-
- '<span class="action kick">' +
- '<a href="#" class="talk-images" title="' + Common._e("Kick from room") + '"></a>' +
- '</span>' +
-
- '<div class="clear"></div>' +
- '</div>' +
- '</div>'
- );
-
- // Click event
- if(nick != Name.getMUCNick(roomHash)) {
- $(thisUser).hover(function() {
- if(iXID && Groupchat.affiliationMe(room_xid).code >= 2) {
- var user_actions_sel = $(this).find('.user-actions');
- var user_actions_btn_sel = user_actions_sel.find('.action');
-
- // Update buttons
- var i;
- var hide_btns = [];
-
- var user_affiliation = Groupchat.affiliationUser(room_xid, nick);
-
- if(user_affiliation.name == 'owner') {
- hide_btns.push(
- 'promote',
- 'demote',
- 'kick'
- );
- } else if(user_affiliation.name === 'admin') {
- hide_btns.push(
- 'promote',
- 'kick'
- );
- } else {
- hide_btns.push(
- 'demote'
- );
- }
-
- if(Roster.isFriend(iXID)) {
- hide_btns.push(
- 'add'
- );
- }
-
- // Go Go Go!!
- for(i in hide_btns) {
- user_actions_btn_sel.filter('.' + hide_btns[i]).hide();
- }
-
- // Slide down?
- if(hide_btns.length < user_actions_btn_sel.size()) {
- user_actions_sel.stop(true).slideDown(250);
- }
- }
- }, function() {
- var user_actions_sel = $(this).find('.user-actions');
-
- if(user_actions_sel.is(':visible')) {
- user_actions_sel.stop(true).slideUp(200, function() {
- user_actions_sel.find('.action').show();
- });
- }
- });
-
- $(thisUser).find('.user-details').on('click', function() {
- Chat.checkCreate(from, 'private');
- });
-
- $(thisUser).find('.user-actions .action a').on('click', function() {
- var this_parent_sel = $(this).parent();
-
- if(this_parent_sel.is('.promote')) {
- Groupchat.promoteModerator(room_xid, iXID);
- } else if(this_parent_sel.is('.demote')) {
- Groupchat.demoteModerator(room_xid, iXID);
- } else if(this_parent_sel.is('.add')) {
- this_parent_sel.hide();
- Roster.addThisContact(iXID, nick);
- } else if(this_parent_sel.is('.kick')) {
- Groupchat.kickUser(room_xid, (iXID || from), nick);
- }
-
- return false;
- });
- }
-
- // We tell the user that someone entered the room
- if(!initial && DataStore.getDB(Connection.desktop_hash, 'options', 'groupchatpresence') !== '0') {
- notify = true;
- write += Common._e("joined the chat room");
-
- // Any status?
- if(status) {
- write += ' (' + Filter.message(status, nick_html, true) + ')';
- } else {
- write += ' (' + Common._e("no status") + ')';
- }
- }
-
- // Enable the private chat input
- thisPrivate.removeAttr('disabled');
- }
-
- else if((type == 'unavailable') || (type == 'error')) {
- // Is it me?
- if(nick == Name.getMUCNick(roomHash)) {
- $(thisUser).remove();
-
- // Disable the groupchat input
- $('#' + roomHash + ' .message-area').attr('disabled', true);
-
- // Remove all the groupchat users
- $('#' + roomHash + ' .list .user').remove();
- }
-
- // Someone has been kicked or banned?
- if(Utils.existArrayValue(status_code, 301) || Utils.existArrayValue(status_code, 307)) {
- $(thisUser).remove();
- notify = true;
-
- // Kicked?
- if(Utils.existArrayValue(status_code, 307)) {
- write += Common._e("has been kicked");
- }
-
- // Banned?
- if(Utils.existArrayValue(status_code, 301)) {
- write += Common._e("has been banned");
- }
-
- // Any reason?
- if(reason) {
- write += ' (' + Filter.message(reason, nick_html, true) + ')';
- } else {
- write += ' (' + Common._e("no reason") + ')';
- }
- }
-
- // Nickname change?
- else if(Utils.existArrayValue(status_code, 303) && iNick) {
- notify = true;
- write += Common.printf(Common._e("changed his/her nickname to %s"), iNick.htmlEnc());
-
- // New values
- var new_xid = Common.cutResource(from) + '/' + iNick;
- var new_hash = hex_md5(new_xid);
- var new_class = 'user ' + new_hash;
-
- if($(thisUser).hasClass('myself')) {
- new_class += ' myself';
- }
-
- // Die the click event
- $(thisUser).off('click');
-
- // Change to the new nickname
- $(thisUser).attr('data-nick', escape(iNick))
- .attr('data-xid', new_xid)
- .find('.name').text(iNick);
-
- // Change the user class
- $(thisUser).attr('class', new_class);
-
- // New click event
- $('#page-engine #' + roomHash + ' .list .' + new_hash).on('click', function() {
- Chat.checkCreate(new_xid, 'private');
- });
- }
-
- // We tell the user that someone left the room
- else if(!initial && DataStore.getDB(Connection.desktop_hash, 'options', 'groupchatpresence') !== '0') {
- $(thisUser).remove();
- notify = true;
- write += Common._e("left the chat room");
-
- // Any status?
- if(status) {
- write += ' (' + Filter.message(status, nick_html, true) + ')';
- } else {
- write += ' (' + Common._e("no status") + ')';
- }
- }
-
- // Disable the private chat input
- thisPrivate.attr('disabled', true);
- }
-
- // Must notify something
- if(notify) {
- Message.display('groupchat', from, roomHash, nick_html, write, message_time, DateUtils.getTimeStamp(), 'system-message', false);
- }
-
- // Set the good status show icon
- switch(show) {
- case 'chat':
- case 'away':
- case 'xa':
- case 'dnd':
- break;
-
- default:
- show = 'available';
- break;
- }
-
- $(thisUser + ' .name').attr('class', 'name talk-images ' + show);
-
- // Set the good status text
- var uTitle = nick;
-
- // Any XID to add?
- if(iXID) {
- uTitle += ' (' + iXID + ')';
- }
-
- // Any status to add?
- if(status) {
- uTitle += ' - ' + status;
- }
-
- $(thisUser).attr('title', uTitle);
-
- // Show or hide the role category, depending of its content
- $('#' + roomHash + ' .list .role').each(function() {
- var this_sel = $(this);
-
- if(this_sel.find('.user').size()) {
- this_sel.show();
- } else {
- this_sel.hide();
- }
- });
- } catch(e) {
- Console.error('Presence.displayMUC', e);
- }
-
- };
-
-
- /**
- * Filters a given status
- * @public
- * @param {string} xid
- * @param {string} status
- * @param {boolean} cut
- * @return {string}
- */
- self.filterStatus = function(xid, status, cut) {
-
- try {
- var dStatus = '';
-
- if(!status) {
- status = '';
- } else {
- if(cut) {
- dStatus = Utils.truncate(status, 50);
- } else {
- dStatus = status;
- }
-
- dStatus = Filter.message(dStatus, Name.getBuddy(xid).htmlEnc(), true);
- }
-
- return dStatus;
- } catch(e) {
- Console.error('Presence.filterStatus', e);
- }
-
- };
-
-
- /**
- * Displays a user's presence
- * @public
- * @param {string} value
- * @param {string} type
- * @param {string} show
- * @param {string} status
- * @param {string} hash
- * @param {string} xid
- * @param {string} avatar
- * @param {string} checksum
- * @param {string} caps
- * @return {undefined}
- */
- self.display = function(value, type, show, status, hash, xid, avatar, checksum, caps) {
-
- try {
- // Display the presence in the roster
- var path = '#roster .' + hash;
- var buddy = $('#roster .content .' + hash);
- var dStatus = self.filterStatus(xid, status, false);
- var tStatus = Common.encodeQuotes(status);
- var biStatus;
-
- // The buddy presence behind his name
- $(path + ' .name .buddy-presence').replaceWith('<p class="buddy-presence talk-images ' + type + '">' + value + '</p>');
-
- // The buddy presence in the buddy infos
- if(dStatus) {
- biStatus = dStatus;
- } else {
- biStatus = value;
- }
-
- $(path + ' .bi-status').replaceWith('<p class="bi-status talk-images ' + type + '" title="' + tStatus + '">' + biStatus + '</p>');
-
- // When the buddy disconnect himself, we hide him
- if((type == 'unavailable') || (type == 'error')) {
- // Set a special class to the buddy
- buddy.addClass('hidden-buddy');
-
- // No filtering is launched?
- if(!Search.search_filtered) {
- buddy.hide();
- }
-
- // All the buddies are shown?
- if(Roster.blist_all) {
- buddy.show();
- }
-
- // Chat stuffs
- if(Common.exists('#' + hash)) {
- // Remove the chatstate stuffs
- ChatState.reset(hash);
- $('#' + hash + ' .chatstate').remove();
- $('#' + hash + ' .message-area').removeAttr('data-chatstates');
-
- // Get the buddy avatar (only if a chat is opened)
- Avatar.get(xid, 'cache', 'true', 'forget');
- }
- }
-
- // If the buddy is online
- else {
- // When the buddy is online, we show it
- buddy.removeClass('hidden-buddy');
-
- // No filtering is launched?
- if(!Search.search_filtered) {
- buddy.show();
- }
-
- // Get the online buddy avatar if not a gateway
- Avatar.get(xid, 'cache', avatar, checksum);
- }
-
- // Display the presence in the chat
- if(Common.exists('#' + hash)) {
- // We generate a well formed status message
- if(dStatus) {
- // No need to write the same status two times
- if(dStatus == value) {
- dStatus = '';
- } else {
- dStatus = ' (' + dStatus + ')';
- }
- }
-
- // We show the presence value
- $('#' + hash + ' .bc-infos').replaceWith('<p class="bc-infos" title="' + tStatus + '"><span class="' + type + ' show talk-images">' + value + '</span>' + dStatus + '</p>');
-
- // Process the new status position
- self.adaptChat(hash);
- }
-
- // Display the presence in the switcher
- if(Common.exists('#page-switch .' + hash)) {
- $('#page-switch .' + hash + ' .icon').removeClass('available unavailable error away busy').addClass(type);
- }
-
- // Update roster groups
- if(!Search.search_filtered) {
- Roster.updateGroups();
- } else {
- Search.funnelFilterBuddy();
- }
-
- // Get the disco#infos for this user
- var highest = self.highestPriority(xid);
-
- if(highest) {
- Caps.getDiscoInfos(highest, caps);
- } else {
- Caps.displayDiscoInfos(xid, '');
- }
- } catch(e) {
- Console.error('Presence.display', e);
- }
-
- };
-
-
- /**
- * Process the chat presence position
- * @public
- * @param {string} hash
- * @return {undefined}
- */
- self.adaptChat = function(hash) {
-
- try {
- // Get values
- var pep_numb = $('#' + hash + ' .bc-pep').find('a').size();
-
- // Process the left/right position
- var presence_h = 12;
-
- if(pep_numb) {
- presence_h = (pep_numb * 20) + 18;
- }
-
- // Apply the left/right position
- var presence_h_tag = ($('html').attr('dir') == 'rtl') ? 'left' : 'right';
- $('#' + hash + ' p.bc-infos').css(presence_h_tag, presence_h);
- } catch(e) {
- Console.error('Presence.adaptChat', e);
- }
-
- };
-
-
- /**
- * Convert the presence "show" element into a human-readable output
- * @public
- * @param {string} show
- * @param {string} type
- * @return {undefined}
- */
- self.humanShow = function(show, type) {
-
- try {
- if(type == 'unavailable') {
- show = Common._e("Unavailable");
- } else if(type == 'error') {
- show = Common._e("Error");
- } else {
- switch(show) {
- case 'chat':
- show = Common._e("Talkative");
- break;
-
- case 'away':
- show = Common._e("Away");
- break;
-
- case 'xa':
- show = Common._e("Not available");
- break;
-
- case 'dnd':
- show = Common._e("Busy");
- break;
-
- default:
- show = Common._e("Available");
- break;
- }
- }
-
- return show;
- } catch(e) {
- Console.error('Presence.humanShow', e);
- }
-
- };
-
-
- /**
- * Makes the presence data go in the right way
- * @public
- * @param {string} type
- * @param {string} show
- * @param {string} status
- * @param {string} hash
- * @param {string} xid
- * @param {string} avatar
- * @param {string} checksum
- * @param {string} caps
- * @return {undefined}
- */
- self.IA = function(type, show, status, hash, xid, avatar, checksum, caps) {
-
- try {
- // Any status defined?
- status = status || self.humanShow(show, type);
-
- // Handle events
- if(type == 'error') {
- self.display(Common._e("Error"), 'error', show, status, hash, xid, avatar, checksum, caps);
- } else if(type == 'unavailable') {
- self.display(Common._e("Unavailable"), 'unavailable', show, status, hash, xid, avatar, checksum, caps);
- } else {
- switch(show) {
- case 'chat':
- self.display(Common._e("Talkative"), 'available', show, status, hash, xid, avatar, checksum, caps);
- break;
-
- case 'away':
- self.display(Common._e("Away"), 'away', show, status, hash, xid, avatar, checksum, caps);
- break;
-
- case 'xa':
- self.display(Common._e("Not available"), 'busy', show, status, hash, xid, avatar, checksum, caps);
- break;
-
- case 'dnd':
- self.display(Common._e("Busy"), 'busy', show, status, hash, xid, avatar, checksum, caps);
- break;
-
- default:
- self.display(Common._e("Available"), 'available', show, status, hash, xid, avatar, checksum, caps);
- break;
- }
- }
- } catch(e) {
- Console.error('Presence.IA', e);
- }
-
- };
-
-
- /**
- * Flush the presence data for a given user
- * @public
- * @param {string} xid
- * @return {boolean}
- */
- self.flush = function(xid) {
-
- try {
- var flushed_marker = false;
- var db_regex = new RegExp(('^' + Connection.desktop_hash + '_') + 'presence' + ('_(.+)'));
-
- for(var i = 0; i < DataStore.storageDB.length; i++) {
- // Get the pointer values
- var current = DataStore.storageDB.key(i);
-
- // If the pointer is on a stored presence
- if(current.match(db_regex)) {
- // Get the current XID
- var now_full = RegExp.$1;
- var now_bare = Common.bareXID(now_full);
-
- // If the current XID equals the asked XID
- if(now_bare == xid) {
- if(DataStore.removeDB(Connection.desktop_hash, 'presence-stanza', now_full)) {
- Console.info('Presence data flushed for: ' + now_full);
-
- flushed_marker = true;
- i--;
- }
- }
- }
- }
-
- return flushed_marker;
- } catch(e) {
- Console.error('Presence.flush', e);
- }
-
- };
-
-
- /**
- * Process the highest resource priority for an user
- * @public
- * @param {string} xid
- * @param {string} resource
- * @param {object} resources_obj
- * @return {undefined}
- */
- self.processPriority = function(xid, resource, resources_obj) {
-
- try {
- if(!xid) {
- Console.warn('No XID value');
- return;
- }
-
- // Initialize vars
- var cur_resource, cur_from, cur_pr,
- cur_xml, cur_priority,
- from_highest;
-
- from_highest = null;
- max_priority = null;
-
- // Groupchat or gateway presence? (no priority here)
- if(xid.indexOf('/') !== -1 || Common.isGateway(xid)) {
- from_highest = xid;
-
- Console.log('Processed presence for groupchat user: ' + xid);
- } else {
- if(!self.highestPriority(xid)) {
- from_highest = xid;
-
- if(resource) {
- from_highest += '/' + resource;
- }
-
- Console.log('Processed initial presence for regular user: ' + xid + ' (highest priority for: ' + (from_highest || 'none') + ')');
- } else {
- var fn_parse_resource = function(cur_resource) {
- // Read presence data
- cur_from = xid;
-
- if(cur_resource) {
- cur_from += '/' + cur_resource;
- }
-
- cur_pr = DataStore.getDB(Connection.desktop_hash, 'presence-stanza', cur_from);
-
- if(cur_pr) {
- // Parse presence data
- cur_xml = Common.XMLFromString(cur_pr);
- cur_priority = $(cur_xml).find('priority').text();
- cur_priority = !isNaN(cur_priority) ? parseInt(cur_priority) : 0;
-
- // Higher priority?
- if((cur_priority >= max_priority) || (max_priority === null)) {
- max_priority = cur_priority;
- from_highest = cur_from;
- }
- }
- };
-
- // Parse bare presences (used by gateway contacts, mostly)
- if(resources_obj.bare === 1) {
- fn_parse_resource(null);
- }
-
- // Parse resources
- for(cur_resource in resources_obj.list) {
- fn_parse_resource(cur_resource);
- }
-
- Console.log('Processed presence for regular user: ' + xid + ' (highest priority for: ' + (from_highest || 'none') + ')');
- }
- }
-
- if(from_highest) {
- DataStore.setDB(Connection.desktop_hash, 'presence-priority', xid, from_highest);
- } else {
- DataStore.removeDB(Connection.desktop_hash, 'presence-priority', xid);
- }
- } catch(e) {
- Console.error('Presence.processPriority', e);
- }
-
- };
-
-
- /**
- * Returns the highest presence priority XID for an user
- * @public
- * @param {string} xid
- * @return {string}
- */
- self.highestPriority = function(xid) {
-
- try {
- return DataStore.getDB(Connection.desktop_hash, 'presence-priority', xid) || '';
- } catch(e) {
- Console.error('Presence.highestPriority', e);
- }
-
- };
-
-
- /**
- * Gets the presence stanza for given full XID
- * @public
- * @param {string} xid_full
- * @return {object}
- */
- self.readStanza = function(xid_full) {
-
- try {
- var pr = DataStore.getDB(Connection.desktop_hash, 'presence-stanza', xid_full);
-
- if(!pr) {
- pr = '<presence><type>unavailable</type></presence>';
- }
-
- return Common.XMLFromString(pr);
- } catch(e) {
- Console.error('Presence.readStanza', e);
- }
-
- };
-
-
- /**
- * Gets the resource from a XID which has the highest priority
- * @public
- * @param {string} xid
- * @return {object}
- */
- self.highestPriorityStanza = function(xid) {
-
- try {
- return self.readStanza(
- self.highestPriority(xid)
- );
- } catch(e) {
- Console.error('Presence.highestPriorityStanza', e);
- }
-
- };
-
-
- /**
- * Lists presence resources for an user
- * @public
- * @param {string} xid
- * @return {object}
- */
- self.resources = function(xid) {
-
- try {
- var resources_obj = {
- 'bare': 0,
- 'list': {}
- };
-
- var resources_db = DataStore.getDB(Connection.desktop_hash, 'presence-resources', xid);
-
- if(resources_db) {
- resources_obj = $.evalJSON(resources_db);
- }
-
- return resources_obj;
- } catch(e) {
- Console.error('Presence.resources', e);
- }
-
- };
-
-
- /**
- * Adds a given presence resource for an user
- * @public
- * @param {string} xid
- * @param {string} resource
- * @return {object}
- */
- self.addResource = function(xid, resource) {
-
- var resources_obj = null;
-
- try {
- resources_obj = self.resources(xid);
-
- if(resource) {
- resources_obj.list[resource] = 1;
- } else {
- resources_obj.bare = 1;
- }
-
- DataStore.setDB(Connection.desktop_hash, 'presence-resources', xid, $.toJSON(resources_obj));
- } catch(e) {
- Console.error('Presence.addResource', e);
- } finally {
- return resources_obj;
- }
-
- };
-
-
- /**
- * Removes a given presence resource for an user
- * @public
- * @param {string} xid
- * @param {string} resource
- * @return {object}
- */
- self.removeResource = function(xid, resource) {
-
- var resources_obj = null;
-
- try {
- resources_obj = self.resources(xid);
-
- if(resource) {
- delete resources_obj.list[resource];
- } else {
- resources_obj.bare = 0;
- }
-
- DataStore.setDB(Connection.desktop_hash, 'presence-resources', xid, $.toJSON(resources_obj));
- } catch(e) {
- Console.error('Presence.removeResource', e);
- } finally {
- return resources_obj;
- }
-
- };
-
-
- /**
- * Makes something easy to process for the presence IA
- * @public
- * @param {string} xid
- * @param {string} hash
- * @return {undefined}
- */
- self.funnel = function(xid, hash) {
-
- try {
- // Get the highest priority presence value
- var presence_node = $(self.highestPriorityStanza(xid));
-
- var type = presence_node.find('type').text();
- var show = presence_node.find('show').text();
- var status = presence_node.find('status').text();
- var avatar = presence_node.find('avatar').text();
- var checksum = presence_node.find('checksum').text();
- var caps = presence_node.find('caps').text();
-
- // Display the presence with that stored value
- if(!type && !show) {
- self.IA('', 'available', status, hash, xid, avatar, checksum, caps);
- } else {
- self.IA(type, show, status, hash, xid, avatar, checksum, caps);
- }
- } catch(e) {
- Console.error('Presence.funnel', e);
- }
-
- };
-
-
- /**
- * Sends a defined presence packet
- * @public
- * @param {string} to
- * @param {string} type
- * @param {string} show
- * @param {string} status
- * @param {string} checksum
- * @param {number} limit_history
- * @param {string} password
- * @param {function} handle
- * @return {undefined}
- */
- self.send = function(to, type, show, status, checksum, limit_history, password, handle) {
-
- try {
- // Get some stuffs
- var priority = '0';
-
- if(show != 'away' && show != 'xa') {
- priority = DataStore.getDB(Connection.desktop_hash, 'priority', 1) || '1';
- }
-
- checksum = checksum || DataStore.getDB(Connection.desktop_hash, 'checksum', 1);
-
- if(show == 'available') {
- show = '';
- }
-
- if(type == 'available') {
- type = '';
- }
-
- // New presence
- var presence = new JSJaCPresence();
-
- // Avoid "null" or "none" if nothing stored
- if(!checksum || (checksum == 'none')) {
- checksum = '';
- }
-
- // Presence headers
- if(to)
- presence.setTo(to);
- if(type)
- presence.setType(type);
- if(show)
- presence.setShow(show);
- if(status)
- presence.setStatus(status);
-
- presence.setPriority(priority);
-
- // CAPS (entity capabilities)
- presence.appendNode('c', {
- 'xmlns': NS_CAPS,
- 'hash': 'sha-1',
- 'node': 'https://jappix.org/',
- 'ver': Caps.mine()
- });
-
- // Nickname
- var nickname = Name.get();
-
- if(nickname && !limit_history) {
- presence.appendNode('nick', {
- 'xmlns': NS_NICK
- }, nickname);
- }
-
- // vcard-temp:x:update node
- var x = presence.appendNode('x', {
- 'xmlns': NS_VCARD_P
- });
-
- x.appendChild(presence.buildNode('photo', {
- 'xmlns': NS_VCARD_P
- }, checksum));
-
- // MUC X data
- if(limit_history || password) {
- var xMUC = presence.appendNode('x', {
- 'xmlns': NS_MUC
- });
-
- // Max messages age (for MUC)
- if(limit_history) {
- xMUC.appendChild(presence.buildNode('history', {
- 'maxstanzas': 20,
- 'seconds': 86400,
- 'xmlns': NS_MUC
- }));
- }
-
- // Room password
- if(password) {
- xMUC.appendChild(presence.buildNode('password', {
- 'xmlns': NS_MUC
- }, password));
- }
- }
-
- // Reachability details
- if(type != 'unavailable') {
- var reach_regex = new RegExp('[^+0-9]', 'g');
- var reach_phone = DataStore.getDB(Connection.desktop_hash, 'profile', 'phone') || '';
- reach_phone = reach_phone.replace(reach_regex, '');
-
- if(reach_phone) {
- /* REF: http://www.xmpp.org/extensions/xep-0152.html */
- var reach_node = presence.appendNode(presence.buildNode('reach', {
- 'xmlns': NS_URN_REACH
- }));
-
- reach_node.appendChild(
- presence.buildNode('addr', {
- 'uri': 'tel:' + reach_phone,
- 'xmlns': NS_URN_REACH
- })
- );
- }
- }
-
- // If away, send a last activity time
- if((show == 'away') || (show == 'xa')) {
- /* REF: http://xmpp.org/extensions/xep-0256.html */
- presence.appendNode(presence.buildNode('query', {
- 'xmlns': NS_LAST,
- 'seconds': DateUtils.getPresenceLast()
- }));
-
- /* REF: http://xmpp.org/extensions/xep-0319.html */
- presence.appendNode(presence.buildNode('idle', {
- 'xmlns': NS_URN_IDLE,
- 'since': DateUtils.getLastActivityDate()
- }));
- } else {
- DateUtils.presence_last_activity = DateUtils.getTimeStamp();
- }
-
- // Send presence packet
- if(typeof handle == 'function') {
- con.send(presence, handle);
- } else {
- con.send(presence);
- }
-
- Console.info('Presence sent: ' + (type || 'available'));
- } catch(e) {
- Console.error('Presence.send', e);
- }
-
- };
-
-
- /**
- * Performs all the actions to get the presence data
- * @public
- * @param {string} checksum
- * @param {boolean} autoidle
- * @return {undefined}
- */
- self.sendActions = function(checksum, autoidle) {
-
- try {
- // We get the values of the inputs
- var show = self.getUserShow();
- var status = self.getUserStatus();
-
- // Send the presence
- if(!Utils.isAnonymous()) {
- self.send('', '', show, status, checksum);
- }
-
- // We set the good icon
- self.icon(show);
-
- // We store our presence
- if(!autoidle)
- DataStore.setDB(Connection.desktop_hash, 'presence-show', 1, show);
-
- // We send the presence to our active MUC
- $('.page-engine-chan[data-type="groupchat"]').each(function() {
- var tmp_nick = $(this).attr('data-nick');
-
- if(!tmp_nick) {
- return;
- }
-
- var room = unescape($(this).attr('data-xid'));
- var nick = unescape(tmp_nick);
-
- // Must re-initialize?
- if(Connection.resume) {
- Groupchat.getMUC(room, nick);
- }
-
- // Not disabled?
- else if(!$(this).find('.message-area').attr('disabled')) {
- self.send(room + '/' + nick, '', show, status, '', true);
- }
- });
- } catch(e) {
- Console.error('Presence.quickSend', e);
- }
-
- };
-
-
- /**
- * Changes the presence icon
- * @public
- * @param {string} value
- * @return {undefined}
- */
- self.icon = function(value) {
-
- try {
- $('#my-infos .f-presence a.picker').attr('data-value', value);
- } catch(e) {
- Console.error('Presence.icon', e);
- }
-
- };
-
-
- /**
- * Sends a subscribe stanza
- * @public
- * @param {string} to
- * @param {string} type
- * @return {undefined}
- */
- self.sendSubscribe = function(to, type) {
-
- try {
- var status = '';
-
- // Subscribe request?
- if(type == 'subscribe') {
- status = Common.printf(Common._e("Hi, I am %s, I would like to add you as my friend."), Name.get());
- }
-
- self.send(to, type, '', status);
- } catch(e) {
- Console.error('Presence.sendSubscribe', e);
- }
-
- };
-
-
- /**
- * Accepts the subscription from another entity
- * @public
- * @param {string} xid
- * @param {string} name
- * @return {undefined}
- */
- self.acceptSubscribe = function(xid, name) {
-
- try {
- // We update our chat
- $('#' + hex_md5(xid) + ' .tools-add').hide();
-
- // We send a subsribed presence (to confirm)
- self.sendSubscribe(xid, 'subscribed');
-
- // We send a subscription request (subscribe both sides)
- self.sendSubscribe(xid, 'subscribe');
-
- // Specify the buddy name (if any)
- if(name) {
- Roster.send(xid, '', name);
- }
- } catch(e) {
- Console.error('Presence.acceptSubscribe', e);
- }
-
- };
-
-
- /**
- * Sends automatic away presence
- * @public
- * @return {undefined}
- */
- self.autoIdle = function() {
-
- try {
- // Not connected?
- if(!Common.isConnected()) {
- return;
- }
-
- // Stop if an xa presence was set manually
- var last_presence = self.getUserShow();
-
- if(!self.auto_idle && ((last_presence == 'away') || (last_presence == 'xa'))) {
- return;
- }
-
- var idle_presence;
- var activity_limit;
-
- // Can we extend to auto extended away mode (20 minutes)?
- if(self.auto_idle && (last_presence == 'away')) {
- idle_presence = 'xa';
- activity_limit = 1200;
- } else {
- idle_presence = 'away';
- activity_limit = 600;
- }
-
- // The user is really inactive and has set another presence than extended away
- if(((!self.auto_idle && (last_presence != 'away')) || (self.auto_idle && (last_presence == 'away'))) && (DateUtils.getLastActivity() >= activity_limit)) {
- // Then tell we use an auto presence
- self.auto_idle = true;
-
- // Get the old status message
- var status = DataStore.getDB(Connection.desktop_hash, 'options', 'presence-status') || '';
-
- // Change the presence input
- $('#my-infos .f-presence a.picker').attr('data-value', idle_presence);
- $('#presence-status').val(status);
-
- // Then send the xa presence
- self.sendActions('', true);
-
- Console.info('Auto-idle presence sent: ' + idle_presence);
- }
- } catch(e) {
- Console.error('Presence.autoIdle', e);
- }
-
- };
-
-
- /**
- * Restores the old presence on a document bind
- * @public
- * @return {undefined}
- */
- self.eventIdle = function() {
-
- try {
- // If we were idle, restore our old presence
- if(self.auto_idle) {
- var presence_status_sel = $('#presence-status');
-
- // Get the values
- var show = DataStore.getDB(Connection.desktop_hash, 'presence-show', 1);
- var status = DataStore.getDB(Connection.desktop_hash, 'options', 'presence-status');
-
- // Change the presence input
- $('#my-infos .f-presence a.picker').attr('data-value', show);
- presence_status_sel.val(status);
- presence_status_sel.placeholder();
-
- // Then restore the old presence
- self.sendActions('', true);
-
- Console.info('Presence restored: ' + (show || 'available'));
- }
-
- // Apply some values
- self.auto_idle = false;
- DateUtils.last_activity = DateUtils.getTimeStamp();
- } catch(e) {
- Console.error('Presence.eventIdle', e);
- }
-
- };
-
-
- /**
- * Lives the auto idle functions
- * @public
- * @return {undefined}
- */
- self.liveIdle = function() {
-
- try {
- // Apply the autoIdle function every minute
- self.auto_idle = false;
- $('#my-infos .f-presence').everyTime('30s', self.autoIdle);
-
- // On body bind (click & key event)
- $('body').on('mousedown', self.eventIdle)
- .on('mousemove', self.eventIdle)
- .on('keydown', self.eventIdle);
- } catch(e) {
- Console.error('Presence.liveIdle', e);
- }
-
- };
-
-
- /**
- * Kills the auto idle functions
- * @public
- * @return {undefined}
- */
- self.dieIdle = function() {
-
- try {
- // Remove the event detector
- $('body').off('mousedown', self.eventIdle)
- .off('mousemove', self.eventIdle)
- .off('keydown', self.eventIdle);
- } catch(e) {
- Console.error('Presence.dieIdle', e);
- }
-
- };
-
-
- /**
- * Gets the user presence show
- * @public
- * @return {string}
- */
- self.getUserShow = function() {
-
- try {
- return $('#my-infos .f-presence a.picker').attr('data-value');
- } catch(e) {
- Console.error('Presence.getUserShow', e);
- }
-
- };
-
-
- /**
- * Gets the user presence status
- * @public
- * @return {string}
- */
- self.getUserStatus = function() {
-
- try {
- return $('#presence-status').val();
- } catch(e) {
- Console.error('Presence.getUserStatus', e);
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.instance = function() {
-
- try {
- // Click event for user presence show
- $('#my-infos .f-presence a.picker').click(function() {
- return self._eventsPicker(
- $(this)
- );
- });
-
- // Submit events for user presence status
- var presence_status_sel = $('#presence-status');
-
- presence_status_sel.placeholder();
-
- presence_status_sel.keyup(function(e) {
- if(e.keyCode == 13) {
- $(this).blur();
-
- return false;
- }
- });
-
- presence_status_sel.blur(function() {
- // Read the parameters
- var show = self.getUserShow();
- var status = self.getUserStatus();
-
- // Read the old parameters
- var old_show = DataStore.getDB(Connection.desktop_hash, 'presence-show', 1);
- var old_status = DataStore.getDB(Connection.desktop_hash, 'options', 'presence-status');
-
- // Must send the presence?
- if((show != old_show) || (status != old_status)) {
- // Update the local stored status
- DataStore.setDB(Connection.desktop_hash, 'options', 'presence-status', status);
-
- // Update the server stored status
- if(status != old_status) {
- Options.store();
- }
-
- // Send the presence
- self.sendActions();
- }
- });
-
- // Input focus handler
- presence_status_sel.focus(function() {
- Bubble.close();
- });
- } catch(e) {
- Console.error('Presence.instance', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
diff --git a/app/javascripts/privacy.js b/app/javascripts/privacy.js
deleted file mode 100644
index 617e498c..00000000
--- a/app/javascripts/privacy.js
+++ /dev/null
@@ -1,1271 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the privacy JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Privacy = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Opens the privacy popup
- * @public
- * @return {boolean}
- */
- self.open = function() {
-
- try {
- // Popup HTML content
- var html =
- '<div class="top">' + Common._e("Privacy") + '</div>' +
-
- '<div class="content">' +
- '<div class="privacy-head">' +
- '<div class="list-left">' +
- '<span>' + Common._e("Choose") + '</span>' +
- '<select disabled=""></select>' +
- '<a href="#" class="list-remove one-button talk-images" title="' + Common._e("Remove") + '"></a>' +
- '</div>' +
-
- '<div class="list-center"></div>' +
-
- '<div class="list-right">' +
- '<span>' + Common._e("Add") + '</span>' +
- '<input type="text" placeholder="' + Common._e("List name") + '" />' +
- '</div>' +
- '</div>' +
-
- '<div class="privacy-item">' +
- '<span>' + Common._e("Item") + '</span>' +
- '<select disabled=""></select>' +
- '<a href="#" class="item-add one-button talk-images" title="' + Common._e("Add") + '"></a>' +
- '<a href="#" class="item-remove one-button talk-images" title="' + Common._e("Remove") + '"></a>' +
- '<a href="#" class="item-save one-button talk-images">' + Common._e("Save") + '</a>' +
-
- '<div class="clear"></div>' +
- '</div>' +
-
- '<div class="privacy-form">' +
- '<div class="privacy-first">' +
- '<label><input type="radio" name="action" value="allow" disabled="" />' + Common._e("Allow") + '</label>' +
- '<label><input type="radio" name="action" value="deny" disabled="" />' + Common._e("Deny") + '</label>' +
- '</div>' +
-
- '<div class="privacy-second">' +
- '<label><input type="radio" name="type" value="jid" disabled="" />' + Common._e("Address") + '</label>' +
- '<input type="text" name="jid" disabled="" />' +
-
- '<label><input type="radio" name="type" value="group" disabled="" />' + Common._e("Group") + '</label>' +
- '<select name="group" disabled="">' + self.groupsToHTML() + '</select>' +
-
- '<label><input type="radio" name="type" value="subscription" disabled="" />' + Common._e("Subscription") + '</label>' +
- '<select name="subscription" disabled="">' +
- '<option value="none">' + Common._e("None") + '</option>' +
- '<option value="both">' + Common._e("Both") + '</option>' +
- '<option value="from">' + Common._e("From") + '</option>' +
- '<option value="to">' + Common._e("To") + '</option>' +
- '</select>' +
-
- '<label><input type="radio" name="type" value="everybody" disabled="" />' + Common._e("Everybody") + '</label>' +
- '</div>' +
-
- '<div class="privacy-third">' +
- '<label><input type="checkbox" name="send-messages" disabled="" />' + Common._e("Send messages") + '</label>' +
- '<label><input type="checkbox" name="send-queries" disabled="" />' + Common._e("Send queries") + '</label>' +
- '<label><input type="checkbox" name="see-status" disabled="" />' + Common._e("See my status") + '</label>' +
- '<label><input type="checkbox" name="send-status" disabled="" />' + Common._e("Send his/her status") + '</label>' +
- '<label><input type="checkbox" name="everything" disabled="" />' + Common._e("Everything") + '</label>' +
- '</div>' +
-
- '<div class="clear"></div>' +
- '</div>' +
-
- '<div class="privacy-active">' +
- '<label>' + Common._e("Order") + '<input type="text" name="order" value="1" disabled="" /></label>' +
-
- '<div class="privacy-active-elements">' +
- '<label><input type="checkbox" name="active" disabled="" />' + Common._e("Active for this session") + '</label>' +
- '<label><input type="checkbox" name="default" disabled="" />' + Common._e("Always active") + '</label>' +
- '</div>' +
- '</div>' +
- '</div>' +
-
- '<div class="bottom">' +
- '<div class="wait wait-medium"></div>' +
-
- '<a href="#" class="finish">' + Common._e("Close") + '</a>' +
- '</div>';
-
- // Create the popup
- Popup.create('privacy', html);
-
- // Associate the events
- self.instance();
-
- // Display the available privacy lists
- self.displayLists();
-
- // Get the first list items
- self.displayItems();
- } catch(e) {
- Console.error('Privacy.open', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Quits the privacy popup
- * @public
- * @return {boolean}
- */
- self.close = function() {
-
- try {
- // Destroy the popup
- Popup.destroy('privacy');
- } catch(e) {
- Console.error('Privacy.close', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Sets the received state for privacy block list
- * @public
- * @return {undefined}
- */
- self.received = function() {
-
- try {
- // Store marker
- DataStore.setDB(Connection.desktop_hash, 'privacy-marker', 'available', 'true');
-
- // Show privacy elements
- $('.privacy-hidable').show();
- } catch(e) {
- Console.error('Privacy.received', e);
- }
-
- };
-
-
- /**
- * Gets available privacy lists
- * @public
- * @return {undefined}
- */
- self.list = function() {
-
- try {
- // Build query
- var iq = new JSJaCIQ();
- iq.setType('get');
-
- iq.setQuery(NS_PRIVACY);
-
- con.send(iq, self.handleList);
-
- Console.log('Getting available privacy list(s)...');
- } catch(e) {
- Console.error('Privacy.list', e);
- }
-
- };
-
-
- /**
- * Handles available privacy lists
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleList = function(iq) {
-
- try {
- // Error?
- if(iq.getType() == 'error') {
- return Console.warn('Privacy lists not supported!');
- }
-
- // Get IQ query content
- var iqQuery = iq.getQuery();
-
- // Save the content
- DataStore.setDB(Connection.desktop_hash, 'privacy-lists', 'available', Common.xmlToString(iqQuery));
-
- // Any block list?
- if($(iqQuery).find('list[name="block"]').size()) {
- // Not the default one?
- if(!$(iqQuery).find('default[name="block"]').size()) {
- self.change('block', 'default');
- } else {
- DataStore.setDB(Connection.desktop_hash, 'privacy-marker', 'default', 'block');
- }
-
- // Not the active one?
- if(!$(iqQuery).find('active[name="block"]').size()) {
- self.change('block', 'active');
- } else {
- DataStore.setDB(Connection.desktop_hash, 'privacy-marker', 'active', 'block');
- }
-
- // Get the block list rules
- self.get('block');
- }
-
- // Apply the received marker here
- else {
- Privacy.received();
- }
-
- Console.info('Got available privacy list(s).');
- } catch(e) {
- Console.error('Privacy.handleList', e);
- }
-
- };
-
-
- /**
- * Gets privacy lists
- * @public
- * @param {object} list
- * @return {undefined}
- */
- self.get = function(list) {
-
- try {
- // Build query
- var iq = new JSJaCIQ();
- iq.setType('get');
-
- // Privacy query
- var iqQuery = iq.setQuery(NS_PRIVACY);
- iqQuery.appendChild(iq.buildNode('list', {'xmlns': NS_PRIVACY, 'name': list}));
-
- con.send(iq, self.handleGet);
-
- // Must show the wait item?
- if(Common.exists('#privacy')) {
- $('#privacy .wait').show();
- }
-
- Console.log('Getting privacy list(s): ' + list);
- } catch(e) {
- Console.error('Privacy.get', e);
- }
-
- };
-
-
- /**
- * Handles privacy lists
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleGet = function(iq) {
-
- try {
- // Apply a "received" marker
- Privacy.received();
-
- // Store the data for each list
- $(iq.getQuery()).find('list').each(function() {
- // Read list name
- var list_name = $(this).attr('name');
-
- // Store list content
- DataStore.setDB(Connection.desktop_hash, 'privacy', list_name, Common.xmlToString(this));
-
- // Is this a block list?
- if(list_name == 'block') {
- // Reset buddies
- $('#roster .buddy').removeClass('blocked');
-
- // XID types
- $(this).find('item[action="deny"][type="jid"]').each(function() {
- $('#roster .buddy[data-xid="' + escape($(this).attr('value')) + '"]').addClass('blocked');
- });
-
- // Group types
- $(this).find('item[action="deny"][type="group"]').each(function() {
- $('#roster .group' + hex_md5($(this).attr('value')) + ' .buddy').addClass('blocked');
- });
- }
- });
-
- // Must display it to the popup?
- if(Common.exists('#privacy')) {
- self.displayItems();
-
- $('#privacy .wait').hide();
- }
-
- Console.info('Got privacy list(s).');
- } catch(e) {
- Console.error('Privacy.handleGet', e);
- }
-
- };
-
-
- /**
- * Sets a privacy list
- * @public
- * @param {string} list
- * @param {object} types
- * @param {object} values
- * @param {object} actions
- * @param {object} orders
- * @param {object} presence_in
- * @param {object} presence_out
- * @param {object} msg
- * @param {object} iq_p
- * @return {undefined}
- */
- self.set = function(list, types, values, actions, orders, presence_in, presence_out, msg, iq_p) {
-
- try {
- // Build query
- var iq = new JSJaCIQ();
- iq.setType('set');
-
- // Privacy query
- var iqQuery = iq.setQuery(NS_PRIVACY);
- var iqList = iqQuery.appendChild(iq.buildNode('list', {'xmlns': NS_PRIVACY, 'name': list}));
-
- // Build the item elements
- if(types && types.length) {
- for(var i = 0; i < types.length; i++) {
- // Item element
- var iqItem = iqList.appendChild(iq.buildNode('item', {'xmlns': NS_PRIVACY}));
-
- // Item attributes
- if(types[i])
- iqItem.setAttribute('type', types[i]);
- if(values[i])
- iqItem.setAttribute('value', values[i]);
- if(actions[i])
- iqItem.setAttribute('action', actions[i]);
- if(orders[i])
- iqItem.setAttribute('order', orders[i]);
-
- // Child elements
- if(presence_in[i])
- iqItem.appendChild(iq.buildNode('presence-in', {'xmlns': NS_PRIVACY}));
- if(presence_out[i])
- iqItem.appendChild(iq.buildNode('presence-out', {'xmlns': NS_PRIVACY}));
- if(msg[i])
- iqItem.appendChild(iq.buildNode('message', {'xmlns': NS_PRIVACY}));
- if(iq_p[i])
- iqItem.appendChild(iq.buildNode('iq', {'xmlns': NS_PRIVACY}));
- }
- }
-
- con.send(iq, function(iq) {
- if(iq.getType() == 'result') {
- Console.log('Sent privacy list.');
- } else {
- Console.error('Error sending privacy list.');
- }
- });
-
- Console.log('Sending privacy list: ' + list);
- } catch(e) {
- Console.error('Privacy.set', e);
- }
-
- };
-
-
- /**
- * Push a privacy list item to a list
- * @public
- * @param {string} list
- * @param {string} type
- * @param {string} value
- * @param {string} action
- * @param {boolean} presence_in
- * @param {boolean} presence_out
- * @param {boolean} msg
- * @param {boolean} iq_p
- * @param {string} hash
- * @param {string} special_action
- * @return {undefined}
- */
- self.push = function(list, type, value, action, presence_in, presence_out, msg, iq_p, hash, special_action) {
-
- try {
- // Read the stored elements (to add them)
- var stored = Common.XMLFromString(DataStore.getDB(Connection.desktop_hash, 'privacy', list));
-
- // Read the first value
- var first_val = value[0];
-
- // Order generation flow
- var order = [];
- var highest_order = 0;
-
- // Must remove the given value?
- if(special_action == 'remove') {
- type = [];
- value = [];
- action = [];
- presence_in = [];
- presence_out = [];
- iq_p = [];
- }
-
- // Serialize them to an array
- $(stored).find('item').each(function() {
- // Attributes
- var c_type = $(this).attr('type');
- var c_value = $(this).attr('value');
- var c_action = $(this).attr('action');
- var c_order = $(this).attr('order');
-
- // Generate hash
- var c_hash = hex_md5(c_type + c_value);
-
- // Do not push it twice!
- if(((c_hash != hash) && (special_action != 'roster')) || ((first_val != c_value) && (special_action == 'roster'))) {
- if(!c_type)
- c_type = '';
- if(!c_value)
- c_value = '';
- if(!c_action)
- c_action = '';
- if(!c_order)
- c_order = '';
-
- if(!isNaN(c_order) && parseInt(c_order) > highest_order) {
- highest_order = parseInt(c_order);
- }
-
- type.push(c_type);
- value.push(c_value);
- action.push(c_action);
- order.push(c_order);
-
- // Child elements
- if($(this).find('presence-in').size()) {
- presence_in.push(true);
- } else {
- presence_in.push(false);
- }
-
- if($(this).find('presence-out').size()) {
- presence_out.push(true);
- } else {
- presence_out.push(false);
- }
-
- if($(this).find('message').size()) {
- msg.push(true);
- } else {
- msg.push(false);
- }
-
- if($(this).find('iq').size()) {
- iq_p.push(true);
- } else {
- iq_p.push(false);
- }
- }
- });
-
- order.unshift((++highest_order) + '');
-
- // Send it!
- self.set(list, type, value, action, order, presence_in, presence_out, msg, iq_p);
- } catch(e) {
- Console.error('Privacy.push', e);
- }
-
- };
-
-
- /**
- * Change a privacy list status
- * @public
- * @param {string} list
- * @param {string} status
- * @return {undefined}
- */
- self.change = function(list, status) {
-
- try {
- // Yet sent?
- if(DataStore.getDB(Connection.desktop_hash, 'privacy-marker', status) == list) {
- return;
- }
-
- // Write a marker
- DataStore.setDB(Connection.desktop_hash, 'privacy-marker', status, list);
-
- // Build query
- var iq = new JSJaCIQ();
- iq.setType('set');
-
- // Privacy query
- var iqQuery = iq.setQuery(NS_PRIVACY);
- var iqStatus = iqQuery.appendChild(iq.buildNode(status, {'xmlns': NS_PRIVACY}));
-
- // Can add a "name" attribute?
- if(list) {
- iqStatus.setAttribute('name', list);
- }
-
- con.send(iq);
-
- Console.log('Changing privacy list status: ' + list + ' to: ' + status);
- } catch(e) {
- Console.error('Privacy.change', e);
- }
-
- };
-
-
- /**
- * Checks the privacy status (action) of a value
- * @public
- * @param {string} list
- * @param {string} value
- * @return {undefined}
- */
- self.status = function(list, value) {
-
- try {
- return $(Common.XMLFromString(DataStore.getDB(Connection.desktop_hash, 'privacy', list))).find('item[value="' + value + '"]').attr('action');
- } catch(e) {
- Console.error('Privacy.status', e);
- }
-
- };
-
-
- /**
- * Converts the groups array into a <option /> string
- * @public
- * @return {string}
- */
- self.groupsToHTML = function() {
-
- var html = '';
-
- try {
- var groups = Roster.getAllGroups();
-
- // Generate HTML
- for(var i in groups) {
- html += '<option value="' + Common.encodeQuotes(groups[i]) +'">' + groups[i].htmlEnc() + '</option>';
- }
- } catch(e) {
- Console.error('Privacy.groupsToHTML', e);
- } finally {
- return html;
- }
-
- };
-
-
- /**
- * Displays the privacy lists
- * @public
- * @return {boolean}
- */
- self.displayLists = function() {
-
- try {
- // Initialize
- var code = '';
- var select = $('#privacy .privacy-head .list-left select');
- var data = Common.XMLFromString(DataStore.getDB(Connection.desktop_hash, 'privacy-lists', 'available'));
-
- // Parse the XML data!
- $(data).find('list').each(function() {
- var list_name = $(this).attr('name');
-
- if(list_name) {
- code += '<option value="' + Common.encodeQuotes(list_name) + '">' + list_name.htmlEnc() + '</option>';
- }
- });
-
- // Apply HTML code
- select.html(code);
-
- // Not empty?
- if(code) {
- select.removeAttr('disabled');
- } else {
- select.attr('disabled', true);
- }
- } catch(e) {
- Console.error('Privacy.displayLists', e);
- } finally {
- return true;
- }
-
- };
-
-
- /**
- * Displays the privacy items for a list
- * @public
- * @return {boolean}
- */
- self.displayItems = function() {
-
- try {
- // Reset the form
- self.clearForm();
- self.disableForm();
-
- // Initialize
- var code = '';
- var select = $('#privacy .privacy-item select');
- var list = $('#privacy .privacy-head .list-left select').val();
-
- // Reset the item select
- select.html('');
-
- // No list?
- if(!list) {
- return false;
- }
-
- // Reset the list status
- $('#privacy .privacy-active input[type="checkbox"]').removeAttr('checked');
-
- // Display the list status
- var status = ['active', 'default'];
-
- for(var s in status) {
- if(DataStore.getDB(Connection.desktop_hash, 'privacy-marker', status[s]) == list) {
- $('#privacy .privacy-active input[name=' + status[s] + ']').attr('checked', true);
- }
- }
-
- // Try to read the stored items
- var items = Common.XMLFromString(DataStore.getDB(Connection.desktop_hash, 'privacy', list));
-
- // Must retrieve the data?
- if(!items) {
- select.attr('disabled', true);
-
- return self.get(list);
- } else {
- select.removeAttr('disabled');
- }
-
- // Parse the XML data!
- $(items).find('item').each(function() {
- // Read attributes
- var item_type = $(this).attr('type');
- var item_value = $(this).attr('value');
- var item_action = $(this).attr('action');
- var item_order = $(this).attr('order');
-
- // Generate hash
- var item_hash = hex_md5(item_type + item_value + item_action + item_order);
-
- // Read sub-elements
- var item_presencein = $(this).find('presence-in').size();
- var item_presenceout = $(this).find('presence-out').size();
- var item_message = $(this).find('message').size();
- var item_iq = $(this).find('iq').size();
-
- // Apply default values (if missing)
- if(!item_type)
- item_type = '';
- if(!item_value)
- item_value = '';
- if(!item_action)
- item_action = 'allow';
- if(!item_order)
- item_order = '1';
-
- // Apply sub-elements values
- if(item_presencein)
- item_presencein = 'true';
- else
- item_presencein = 'false';
-
- if(item_presenceout)
- item_presenceout = 'true';
- else
- item_presenceout = 'false';
-
- if(item_message)
- item_message = 'true';
- else
- item_message = 'false';
-
- if(item_iq)
- item_iq = 'true';
- else
- item_iq = 'false';
-
- // Generate item description
- var desc = '';
- var desc_arr = [item_type, item_value, item_action, item_order];
-
- for(var d in desc_arr) {
- // Nothing to display?
- if(!desc_arr[d])
- continue;
-
- if(desc)
- desc += ' - ';
-
- desc += desc_arr[d];
- }
-
- // Add the select option
- code += '<option data-type="' + Common.encodeQuotes(item_type) + '" data-value="' + Common.encodeQuotes(item_value) + '" data-action="' + Common.encodeQuotes(item_action) + '" data-order="' + Common.encodeQuotes(item_order) + '" data-presence_in="' + Common.encodeQuotes(item_presencein) + '" data-presence_out="' + Common.encodeQuotes(item_presenceout) + '" data-message="' + Common.encodeQuotes(item_message) + '" data-iq="' + Common.encodeQuotes(item_iq) + '" data-hash="' + Common.encodeQuotes(item_hash) + '">' +
- desc +
- '</option>';
- });
-
- // Append the code
- select.append(code);
-
- // Display the first item form
- var first_item = select.find('option:first');
- self.displayForm(
- first_item.attr('data-type'),
- first_item.attr('data-value'),
- first_item.attr('data-action'),
- first_item.attr('data-order'),
- first_item.attr('data-presence_in'),
- first_item.attr('data-presence_out'),
- first_item.attr('data-message'),
- first_item.attr('data-iq')
- );
-
- return true;
- } catch(e) {
- Console.error('Privacy.displayItems', e);
- }
-
- };
-
-
- /**
- * Displays the privacy form for an item
- * @public
- * @param {string} type
- * @param {string} value
- * @param {string} action
- * @param {string} order
- * @param {string} presence_in
- * @param {string} presence_out
- * @param {string} message
- * @param {string} iq
- * @return {undefined}
- */
- self.displayForm = function(type, value, action, order, presence_in, presence_out, message, iq) {
-
- try {
- // Reset the form
- self.clearForm();
-
- // Apply the action
- $('#privacy .privacy-first input[name="action"][value="' + action + '"]').attr('checked', true);
-
- // Apply the type & value
- var privacy_second = '#privacy .privacy-second';
- var privacy_type = privacy_second + ' input[name="type"]';
- var type_check, value_input;
-
- switch(type) {
- case 'jid':
- type_check = privacy_type + '[value="jid"]';
- value_input = privacy_second + ' input[type="text"][name="jid"]';
-
- break;
-
- case 'group':
- type_check = privacy_type + '[value="group"]';
- value_input = privacy_second + ' select[name="group"]';
-
- break;
-
- case 'subscription':
- type_check = privacy_type + '[value="subscription"]';
- value_input = privacy_second + ' select[name="subscription"]';
-
- break;
-
- default:
- type_check = privacy_type + '[value="everybody"]';
-
- break;
- }
-
- // Check the target
- $(type_check).attr('checked', true);
-
- // Can apply a value?
- if(value_input) {
- $(value_input).val(value);
- }
-
- // Apply the things to do
- var privacy_do = '#privacy .privacy-third input[type="checkbox"]';
-
- if(presence_in == 'true')
- $(privacy_do + '[name="send-status"]').attr('checked', true);
- if(presence_out == 'true')
- $(privacy_do + '[name="see-status"]').attr('checked', true);
- if(message == 'true')
- $(privacy_do + '[name="send-messages"]').attr('checked', true);
- if(iq == 'true')
- $(privacy_do + '[name="send-queries"]').attr('checked', true);
-
- if(!$(privacy_do).filter(':checked').size())
- $(privacy_do + '[name="everything"]').attr('checked', true);
-
- // Apply the order
- $('#privacy .privacy-active input[name="order"]').val(order);
-
- // Enable the forms
- $('#privacy .privacy-form input, #privacy .privacy-form select, #privacy .privacy-active input').removeAttr('disabled');
- } catch(e) {
- Console.error('Privacy.displayForm', e);
- }
-
- };
-
-
- /**
- * Clears the privacy list form
- * @public
- * @return {undefined}
- */
- self.clearForm = function() {
-
- try {
- // Uncheck checkboxes & radio inputs
- $('#privacy .privacy-form input[type="checkbox"], #privacy .privacy-form input[type="radio"]').removeAttr('checked');
-
- // Reset select
- $('#privacy .privacy-form select option').removeAttr('selected');
- $('#privacy .privacy-form select option:first').attr('selected', true);
-
- // Reset text input
- $('#privacy .privacy-form input[type="text"]').val('');
-
- // Reset order input
- $('#privacy .privacy-active input[name="order"]').val('1');
- } catch(e) {
- Console.error('Privacy.clearForm', e);
- }
-
- };
-
-
- /**
- * Disables the privacy list form
- * @public
- * @return {undefined}
- */
- self.disableForm = function() {
-
- try {
- $('#privacy .privacy-form input, #privacy .privacy-form select, #privacy .privacy-active input').attr('disabled', true);
- } catch(e) {
- Console.error('Privacy.disableForm', e);
- }
-
- };
-
-
- /**
- * Enables the privacy list form
- * @public
- * @param {string} rank
- * @return {undefined}
- */
- self.enableForm = function(rank) {
-
- try {
- $('#privacy .privacy-' + rank + ' input, #privacy .privacy-' + rank + ' select').removeAttr('disabled');
- } catch(e) {
- Console.error('Privacy.enableForm', e);
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.instance = function() {
-
- try {
- // Click events
- $('#privacy .bottom .finish').click(Privacy.close);
-
- // Placeholder events
- $('#privacy input[placeholder]').placeholder();
-
- // Form events
- $('#privacy .privacy-head a.list-remove').click(function() {
- // Get list name
- var list = $('#privacy .privacy-head .list-left select').val();
-
- // No value?
- if(!list) {
- return false;
- }
-
- // Remove it from popup
- $('#privacy .privacy-head .list-left select option[value="' + list + '"]').remove();
-
- // Nothing remaining?
- if(!Common.exists('#privacy .privacy-head .list-left select option'))
- $('#privacy .privacy-head .list-left select option').attr('disabled', true);
-
- // Empty the item select
- $('#privacy .privacy-item select').attr('disabled', true).html('');
-
- // Disable this list before removing it
- var status = ['active', 'default'];
-
- for(var s in status) {
- if(DataStore.getDB(Connection.desktop_hash, 'privacy-marker', status[s]) == list) {
- self.change('', status[s]);
- }
- }
-
- // Remove from server
- self.set(list);
-
- // Reset the form
- self.clearForm();
- self.disableForm();
-
- return false;
- });
-
- $('#privacy .privacy-head .list-right input').keyup(function(e) {
- // Not enter?
- if(e.keyCode != 13) {
- return;
- }
-
- // Get list name
- var list = $('#privacy .privacy-head .list-right input').val();
- var select = '#privacy .privacy-head .list-left select';
- var existed = true;
-
- // Create the new element
- if(!Common.exists(select + ' option[value="' + list + '"]')) {
- // Marker
- existed = false;
-
- // Create a new option
- $(select).append('<option value="' + Common.encodeQuotes(list) + '">' + list.htmlEnc() + '</option>');
-
- // Reset the item select
- $('#privacy .privacy-item select').attr('disabled', true).html('');
- }
-
- // Change the select value & enable it
- $(select).val(list).removeAttr('disabled');
-
- // Reset its value
- $(this).val('');
-
- // Reset the form
- self.clearForm();
- self.disableForm();
-
- // Must reload the list items?
- if(existed) {
- self.displayItems();
- $('#privacy .privacy-item select').removeAttr('disabled');
- }
- });
-
- $('#privacy .privacy-head .list-left select').change(self.displayItems);
-
- $('#privacy .privacy-item select').change(function() {
- // Get the selected item
- var item = $(this).find('option:selected');
-
- // Display the data!
- self.displayForm(
- item.attr('data-type'),
- item.attr('data-value'),
- item.attr('data-action'),
- item.attr('data-order'),
- item.attr('data-presence_in'),
- item.attr('data-presence_out'),
- item.attr('data-message'),
- item.attr('data-iq')
- );
- });
-
- $('#privacy .privacy-item a.item-add').click(function() {
- // Cannot add anything?
- if(!Common.exists('#privacy .privacy-head .list-left select option:selected')) {
- return false;
- }
-
- // Disable item select
- $('#privacy .privacy-item select').attr('disabled', true);
-
- // Reset the form
- self.clearForm();
- self.disableForm();
-
- // Enable first form item
- self.enableForm('first');
- self.enableForm('active');
-
- return false;
- });
-
- $('#privacy .privacy-item a.item-remove').click(function() {
- // Cannot add anything?
- if(!Common.exists('#privacy .privacy-head .list-left select option:selected')) {
- return false;
- }
-
- // Get values
- var list = $('#privacy .privacy-head .list-left select').val();
- var selected = $('#privacy .privacy-item select option:selected');
- var item = selected.attr('data-value');
- var hash = selected.attr('data-hash');
-
- // Remove it from popup
- $('#privacy .privacy-item select option:selected').remove();
-
- // No more items in this list?
- if(!Common.exists('#privacy .privacy-item select option')) {
- // Disable this select
- $('#privacy .privacy-item select').attr('disabled', true);
-
- // Remove the privacy list select item
- $('#privacy .privacy-head .list-left select option[value="' + list + '"]').remove();
-
- // No more privacy lists?
- if(!Common.exists('#privacy .privacy-head .list-left select option')) {
- $('#privacy .privacy-head .list-left select').attr('disabled', true);
- }
-
- // Disable this list before removing it
- var status = ['active', 'default'];
-
- for(var s in status) {
- if(DataStore.getDB(Connection.desktop_hash, 'privacy-marker', status[s]) == list) {
- self.change('', status[s]);
- }
- }
- }
-
- // Synchronize it with server
- self.push(list, [], [item], [], [], [], [], [], [], hash, 'remove');
-
- // Reset the form
- self.clearForm();
- self.disableForm();
-
- return false;
- });
-
- $('#privacy .privacy-item a.item-save').click(function() {
- // Canot push item?
- if(Common.exists('#privacy .privacy-form input:disabled')) {
- return false;
- }
-
- // Get the hash
- var item_hash = '';
-
- if(!$('#privacy .privacy-item select').is(':disabled')) {
- item_hash = $('#privacy .privacy-item select option:selected').attr('data-hash');
- }
-
- // Read the form
- var privacy_second = '#privacy .privacy-second';
- var item_list = $('#privacy .privacy-head .list-left select').val();
- var item_action = $('#privacy .privacy-first input[name="action"]').filter(':checked').val();
- var item_type = $(privacy_second + ' input[name="type"]').filter(':checked').val();
- var item_order = $('#privacy .privacy-active input[name="order"]').val();
- var item_value = '';
-
- // Switch the type to get the value
- switch(item_type) {
- case 'jid':
- item_value = $(privacy_second + ' input[type="text"][name="jid"]').val();
-
- break;
-
- case 'group':
- item_value = $(privacy_second + ' select[name="group"]').val();
-
- break;
-
- case 'subscription':
- item_value = $(privacy_second + ' select[name="subscription"]').val();
-
- break;
-
- default:
- item_type = '';
-
- break;
- }
-
- // Get the selected things to do
- var privacy_third_cb = '#privacy .privacy-third input[type="checkbox"]';
- var item_prin = false;
- var item_prout = false;
- var item_msg = false;
- var item_iq = false;
-
- // Individual select?
- if(!$(privacy_third_cb + '[name="everything"]').filter(':checked').size()) {
- if($(privacy_third_cb + '[name="send-messages"]').filter(':checked').size())
- item_msg = true;
- if($(privacy_third_cb + '[name="send-queries"]').filter(':checked').size())
- item_iq = true;
- if($(privacy_third_cb + '[name="send-queries"]').filter(':checked').size())
- item_iq = true;
- if($(privacy_third_cb + '[name="see-status"]').filter(':checked').size())
- item_prout = true;
- if($(privacy_third_cb + '[name="send-status"]').filter(':checked').size())
- item_prin = true;
- }
-
- // Push item to the server!
- self.push(
- item_list,
- [item_type],
- [item_value],
- [item_action],
- [item_order],
- [item_prin],
- [item_prout],
- [item_msg],
- [item_iq],
- item_hash
- );
-
- return false;
- });
-
- $('#privacy .privacy-first input').change(function() {
- self.enableForm('second');
- });
-
- $('#privacy .privacy-second input').change(function() {
- self.enableForm('third');
- });
-
- $('#privacy .privacy-third input[type="checkbox"]').change(function() {
- // Target
- var target = '#privacy .privacy-third input[type="checkbox"]';
-
- // Must tick "everything" checkbox?
- if(!$(target).filter(':checked').size()) {
- $(target + '[name="everything"]').attr('checked', true);
- }
-
- // Must untick the other checkboxes?
- else if($(this).is('[name="everything"]')) {
- $(target + ':not([name="everything"])').removeAttr('checked');
- }
-
- // Must untick "everything" checkbox?
- else {
- $(target + '[name="everything"]').removeAttr('checked');
- }
- });
-
- $('#privacy .privacy-active input[name="order"]').keyup(function() {
- // Get the value
- var value = $(this).val();
-
- // No value?
- if(!value) {
- return;
- }
-
- // Not a number?
- if(isNaN(value)) {
- value = 1;
- } else {
- value = parseInt(value);
- }
-
- // Negative?
- if(value < 0)
- value = value * -1;
-
- // Apply the filtered value
- $(this).val(value);
- })
-
- .blur(function() {
- // No value?
- if(!$(this).val()) {
- $(this).val('1');
- }
- });
-
- $('#privacy .privacy-active .privacy-active-elements input').change(function() {
- // Get the values
- var list_name = $('#privacy .privacy-head .list-left select').val();
- var state_name = $(this).attr('name');
-
- // Cannot continue?
- if(!list_name || !state_name) {
- return;
- }
-
- // Change the current list status
- if($(this).filter(':checked').size()) {
- self.change(list_name, state_name);
- } else {
- self.change('', state_name);
- }
- });
- } catch(e) {
- Console.error('Privacy.instance', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/pubsub.js b/app/javascripts/pubsub.js
deleted file mode 100644
index f80fc2d9..00000000
--- a/app/javascripts/pubsub.js
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the Pubsub JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Pubsub = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Setups a Pubsub node
- * @public
- * @param {string} entity
- * @param {object} node
- * @param {boolean} persist
- * @param {number} maximum
- * @param {string} access
- * @param {string} publish
- * @param {boolean} create
- * @return {undefined}
- */
- self.setup = function(entity, node, persist, maximum, access, publish, create) {
-
- /* REF: http://xmpp.org/extensions/xep-0060.html#owner-create-and-configure */
-
- try {
- // Create the PubSub node
- var iq = new JSJaCIQ();
- iq.setType('set');
-
- // Any external entity?
- if(entity) {
- iq.setTo(entity);
- }
-
- // Create it?
- var pubsub;
-
- if(create) {
- pubsub = iq.appendNode('pubsub', {'xmlns': NS_PUBSUB});
- pubsub.appendChild(iq.buildNode('create', {'xmlns': NS_PUBSUB, 'node': node}));
- } else {
- pubsub = iq.appendNode('pubsub', {'xmlns': NS_PUBSUB_OWNER});
- }
-
- // Configure it!
- var configure = pubsub.appendChild(iq.buildNode('configure', {'node': node, 'xmlns': NS_PUBSUB}));
- var x = configure.appendChild(iq.buildNode('x', {'xmlns': NS_XDATA, 'type': 'submit'}));
-
- var field1 = x.appendChild(iq.buildNode('field', {'var': 'FORM_TYPE', 'type': 'hidden', 'xmlns': NS_XDATA}));
- field1.appendChild(iq.buildNode('value', {'xmlns': NS_XDATA}, NS_PUBSUB_NC));
-
- // Persist items?
- if(persist) {
- var field2 = x.appendChild(iq.buildNode('field', {'var': 'pubsub#persist_items', 'xmlns': NS_XDATA}));
- field2.appendChild(iq.buildNode('value', {'xmlns': NS_XDATA}, persist));
- }
-
- // Maximum items?
- if(maximum) {
- var field3 = x.appendChild(iq.buildNode('field', {'var': 'pubsub#max_items', 'xmlns': NS_XDATA}));
- field3.appendChild(iq.buildNode('value', {'xmlns': NS_XDATA}, maximum));
- }
-
- // Access rights?
- if(access) {
- var field4 = x.appendChild(iq.buildNode('field', {'var': 'pubsub#access_model', 'xmlns': NS_XDATA}));
- field4.appendChild(iq.buildNode('value', {'xmlns': NS_XDATA}, access));
- }
-
- // Publish rights?
- if(publish) {
- var field5 = x.appendChild(iq.buildNode('field', {'var': 'pubsub#publish_model', 'xmlns': NS_XDATA}));
- field5.appendChild(iq.buildNode('value', {'xmlns': NS_XDATA}, publish));
- }
-
- con.send(iq);
- } catch(e) {
- Console.error('Pubsub.setup', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/receipts.js b/app/javascripts/receipts.js
deleted file mode 100644
index 834ef23a..00000000
--- a/app/javascripts/receipts.js
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the receipts JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Receipts = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Checks if we can send a receipt request
- * @public
- * @param {string} hash
- * @return {boolean}
- */
- self.request = function(hash) {
-
- has_support = false;
-
- try {
- // Entity have support for receipt?
- if($('#' + hash + ' .message-area').attr('data-receipts') == 'true') {
- has_support = true;
- }
- } catch(e) {
- Console.error('Receipts.request', e);
- } finally {
- return has_support;
- }
-
- };
-
-
- /**
- * Checks if there is a receipt request
- * @public
- * @param {object} packet
- * @return {boolean}
- */
- self.has = function(packet) {
-
- has_receipt = false;
-
- try {
- // Any receipt request?
- if(packet.getChild('request', NS_URN_RECEIPTS)) {
- has_receipt = true;
- }
- } catch(e) {
- Console.error('Receipts.has', e);
- } finally {
- return has_receipt;
- }
-
- };
-
-
- /**
- * Checks if there is a received reply
- * @public
- * @param {object} packet
- * @return {boolean}
- */
- self.hasReceived = function(packet) {
-
- has_received = false;
-
- try {
- // Any received reply?
- if(packet.getChild('received', NS_URN_RECEIPTS)) {
- has_received = true;
- }
- } catch(e) {
- Console.error('Receipts.received', e);
- } finally {
- return has_received;
- }
-
- };
-
-
- /**
- * Sends a received notification
- * @public
- * @param {string} type
- * @param {string} to
- * @param {string} id
- * @return {undefined}
- */
- self.sendReceived = function(type, to, id) {
-
- try {
- var aMsg = new JSJaCMessage();
- aMsg.setTo(to);
- aMsg.setID(id);
-
- // Any type?
- if(type) {
- aMsg.setType(type);
- }
-
- // Append the received node
- aMsg.appendNode('received', {'xmlns': NS_URN_RECEIPTS, 'id': id});
-
- con.send(aMsg);
-
- Console.log('Sent received to: ' + to);
- } catch(e) {
- Console.error('Receipts.sendReceived', e);
- }
-
- };
-
-
- /**
- * Tells the message has been received
- * @public
- * @param {string} hash
- * @param {string} id
- * @return {boolean}
- */
- self.messageReceived = function(hash, id) {
-
- try {
- // Line selector
- var path = $('#' + hash + ' .one-line[data-id="' + id + '"]');
-
- // Add a received marker
- path.attr('data-received', 'true')
- .removeAttr('data-lost');
-
- // Group selector
- var group = path.parent();
-
- // Remove the group marker
- if(!group.find('.one-line[data-lost]').size()) {
- group.find('b.name').removeClass('talk-images')
- .removeAttr('title');
- }
- } catch(e) {
- Console.error('Receipts.messageReceived', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Checks if the message has been received
- * @public
- * @param {string} hash
- * @param {string} id
- * @return {undefined}
- */
- self.checkReceived = function(hash, id) {
-
- try {
- // Fire a check 10 seconds later
- $('#' + hash + ' .one-line[data-id="' + id + '"]').oneTime('10s', function() {
- var this_sel = $(this);
-
- // Not received?
- if(this_sel.attr('data-received') != 'true') {
- // Add a "lost" marker
- this_sel.attr('data-lost', 'true');
-
- // Add a warn on the buddy-name
- this_sel.parent().find('b.name').addClass('talk-images')
- .attr(
- 'title',
- Common._e("Your friend seems not to have received your message(s)!")
- );
- }
- });
- } catch(e) {
- Console.error('Receipts.checkReceived', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/roster.js b/app/javascripts/roster.js
deleted file mode 100644
index b763117e..00000000
--- a/app/javascripts/roster.js
+++ /dev/null
@@ -1,1555 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the roster JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Roster = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Variables */
- self.blist_all = false;
-
-
- /**
- * Gets the roster items
- * @public
- * @return {undefined}
- */
- self.get = function() {
-
- try {
- var iq = new JSJaCIQ();
-
- iq.setType('get');
- iq.setQuery(NS_ROSTER);
-
- con.send(iq, self.handle);
- } catch(e) {
- Console.error('Roster.get', e);
- }
-
- };
-
-
- /**
- * Handles the roster items
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handle = function(iq) {
-
- try {
- // Parse the roster xml
- $(iq.getQuery()).find('item').each(function() {
- // Get user data
- var this_sel = $(this);
- var user_xid = this_sel.attr('jid');
- var user_subscription = this_sel.attr('subscription');
-
- // Parse roster data & display user
- self.parse(this_sel, 'load');
-
- // Request user microblog (populates channel)
- if(user_xid && ((user_subscription == 'both') || (user_subscription == 'to'))) {
- // Openfire has an issue, forget about it!
- if(Features.getServerName() != 'openfire') {
- Microblog.request(user_xid, 1, null, Microblog.handleRoster);
- }
- }
- });
-
- // Update our avatar (if changed), and send our presence
- Avatar.get(Common.getXID(), 'force', 'true', 'forget');
-
- Console.log('Roster received.');
- } catch(e) {
- Console.error('Roster.handle', e);
- }
-
- };
-
-
- /**
- * Parses the group XML and display the roster
- * @public
- * @param {string} current
- * @param {string} mode
- * @return {undefined}
- */
- self.parse = function(current, mode) {
-
- try {
- // Get the values
- xid = current.attr('jid');
- dName = current.attr('name');
- subscription = current.attr('subscription');
- xidHash = hex_md5(xid);
-
- // Create an array containing the groups
- var groups = [];
-
- current.find('group').each(function() {
- var group_text = $(this).text();
-
- if(group_text) {
- groups.push(group_text);
- }
- });
-
- // No group?
- if(!groups.length) {
- groups.push(Common._e("Unclassified"));
- }
-
- // If no name is defined, we get the default nick of the buddy
- if(!dName) {
- dName = Common.getXIDNick(xid);
- }
-
- self.display(xid, xidHash, dName, subscription, groups, mode);
- } catch(e) {
- Console.error('Roster.parse', e);
- }
-
- };
-
-
- /**
- * Updates the roster groups
- * @public
- * @return {undefined}
- */
- self.updateGroups = function() {
-
- try {
- $('#roster .one-group').each(function() {
- var this_sel = $(this);
-
- // Current values
- var check = this_sel.find('.buddy').size();
- var hidden = this_sel.find('.buddy:not(.hidden-buddy:hidden)').size();
-
- // Special case: the filtering tool
- if(Search.search_filtered) {
- hidden = this_sel.find('.buddy:visible').size();
- }
-
- // If the group is empty
- if(!check) {
- this_sel.remove();
- }
-
- // If the group contains no online buddy (and is not just hidden)
- if(!hidden && this_sel.find('a.group').hasClass('minus')) {
- this_sel.hide();
- } else {
- this_sel.show();
- }
- });
- } catch(e) {
- Console.error('Roster.updateGroups', e);
- }
-
- };
-
-
- /**
- * Displays a defined roster item
- * @public
- * @param {string} dXID
- * @param {string} dXIDHash
- * @param {string} dName
- * @param {string} dSubscription
- * @param {string} dGroup
- * @param {string} dMode
- * @return {undefined}
- */
- self.display = function(dXID, dXIDHash, dName, dSubscription, dGroup, dMode) {
-
- try {
- // First remove the buddy
- $('#roster .' + dXIDHash).remove();
-
- // Define some things around the groups
- var is_gateway = Common.isGateway(dXID);
- var gateway = '';
-
- if(is_gateway) {
- gateway = ' gateway';
- dGroup = new Array(Common._e("Gateways"));
- }
-
- // Remove request
- if(dSubscription == 'remove') {
- // Flush presence
- Presence.flush(dXID);
- Presence.funnel(dXID, dXIDHash);
-
- // Empty social channel
- $('#channel .mixed .one-update.update_' + dXIDHash).remove();
- }
-
- // Other request
- else {
- // Is this buddy blocked?
- var privacy_class = '';
- var privacy_state = Privacy.status('block', dXID);
-
- if(privacy_state == 'deny') {
- privacy_class = ' blocked';
- }
-
- // For each group this buddy has
- $.each(dGroup, function(i, cGroup) {
- if(cGroup) {
- // Process some vars
- var groupHash = 'group' + hex_md5(cGroup);
- var groupContent = '#roster .' + groupHash;
- var groupBuddies = groupContent + ' .group-buddies';
-
- // Is this group blocked?
- if((Privacy.status('block', cGroup) == 'deny') && (privacy_state != 'allow')) {
- privacy_class = ' blocked';
- }
-
- // Group not yet displayed
- if(!Common.exists(groupContent)) {
- // Define some things
- var groupCont = '#roster .content';
- var groupToggle = groupCont + ' .' + groupHash + ' a.group';
-
- // Create the HTML markup of the group
- $(groupCont).prepend(
- '<div class="' + groupHash + ' one-group" data-group="' + escape(cGroup) + '">' +
- '<a href="#" class="group talk-images minus">' + cGroup.htmlEnc() + '</a>' +
- '<div class="group-buddies"></div>' +
- '</div>'
- );
-
- // Create the click event which will hide and show the content
- $(groupToggle).click(function() {
- var group = $(groupBuddies);
- var group_toggle = $(groupContent + ' a.group');
-
- // We must hide the buddies
- if(group_toggle.hasClass('minus')) {
- group.hide();
- group_toggle.removeClass('minus').addClass('plus');
-
- // Remove the group opened buddy-info
- Bubble.close();
- }
-
- // We must show the buddies
- else {
- group_toggle.removeClass('plus').addClass('minus');
- group.show();
- }
-
- return false;
- });
- }
-
- // Initialize the HTML code
- var name_code = '<p class="buddy-name">' + dName.htmlEnc() + '</p>';
- var presence_code = '<p class="buddy-presence talk-images unavailable">' + Common._e("Unavailable") + '</p>';
-
- var html = '<div class="hidden-buddy buddy ibubble ' + dXIDHash + gateway + privacy_class + '" data-xid="' + escape(dXID) + '">' +
- '<div class="buddy-click">';
-
- // Display avatar if not gateway
- if(!is_gateway) {
- html += '<div class="avatar-container">' +
- '<img class="avatar" src="' + './images/others/default-avatar.png' + '" alt="" />' +
- '</div>';
- }
-
- html += '<div class="name">';
-
- // Special gateway code
- if(is_gateway) {
- html += presence_code +
- name_code;
- } else {
- html += name_code +
- presence_code;
- }
-
- html += '</div></div></div>';
-
- // Create the DOM element for this buddy
- $(groupBuddies).append(html);
-
- // Apply the hover event
- self.applyBuddyHover(dXID, dXIDHash, dName, dSubscription, dGroup, groupHash);
- }
- });
-
- // Click event on this buddy
- $('#roster .' + dXIDHash + ' .buddy-click').click(function() {
- return Chat.checkCreate(dXID, 'chat');
- });
-
- // We get the user presence if necessary
- if(dMode == 'presence') {
- Presence.funnel(dXID, dXIDHash);
- }
-
- // If the buddy must be shown
- if(self.blist_all) {
- $('#roster .' + dXIDHash).show();
- }
- }
-
- // We update our groups
- if(!Search.search_filtered) {
- self.updateGroups();
- } else {
- Search.funnelFilterBuddy();
- }
- } catch(e) {
- Console.error('Roster.display', e);
- }
-
- };
-
-
- /**
- * Applies the buddy editing input events
- * @public
- * @param {string} xid
- * @return {undefined}
- */
- self.applyBuddyInput = function(xid) {
-
- try {
- // Initialize
- var path = '#roster .buddy[data-xid="' + escape(xid) + '"]';
- var rename = path + ' .bm-rename input';
- var group = path + ' .bm-group input';
- var manage_infos = path + ' .manage-infos';
- var bm_choose = manage_infos + ' div.bm-choose';
-
- // Keyup events
- $(rename).keyup(function(e) {
- if(e.keyCode == 13) {
- // Send the item
- self.send(xid, '', $.trim($(rename).val()), self.thisBuddyGroups(xid));
-
- // Remove the buddy editor
- Bubble.close();
-
- return false;
- }
- });
-
- $(group).keyup(function(e) {
- if(e.keyCode == 13) {
- // Empty input?
- if(!$.trim($(this).val())) {
- // Send the item
- self.send(xid, '', $.trim($(rename).val()), self.thisBuddyGroups(xid));
-
- // Remove the buddy editor
- Bubble.close();
-
- return false;
- }
-
- // Get the values
- var this_value = $.trim($(this).val());
- var escaped_value = escape(this_value);
-
- // Check if the group yet exists
- var group_exists = false;
-
- $(bm_choose + ' label span').each(function() {
- if($(this).text() == this_value)
- group_exists = true;
- });
-
- // Create a new checked checkbox
- if(!group_exists) {
- $(bm_choose).prepend('<label><input type="checkbox" data-group="' + escaped_value + '" /><span>' + this_value.htmlEnc() + '</span></label>');
- }
-
- // Check the checkbox
- $(bm_choose + ' input[data-group="' + escaped_value + '"]').attr('checked', true);
-
- // Reset the value of this input
- $(this).val('');
-
- return false;
- }
- });
-
- // Click events
- $(manage_infos + ' p.bm-authorize a.to').click(function() {
- Bubble.close();
- Presence.sendSubscribe(xid, 'subscribed');
-
- return false;
- });
-
- $(manage_infos + ' p.bm-authorize a.from').click(function() {
- Bubble.close();
- Presence.sendSubscribe(xid, 'subscribe');
-
- return false;
- });
-
- $(manage_infos + ' p.bm-authorize a.unblock').click(function() {
- Bubble.close();
-
- // Update privacy settings
- Privacy.push('block', ['jid'], [xid], ['allow'], [false], [true], [true], [true], '', 'roster');
- $(path).removeClass('blocked');
-
- // Enable the "block" list
- Privacy.change('block', 'active');
- Privacy.change('block', 'default');
-
- // Send an available presence
- Presence.send(xid, 'available', Presence.getUserShow(), getUserStatus());
-
- return false;
- });
-
- $(manage_infos + ' p.bm-remove a.remove').click(function() {
- Bubble.close();
-
- // First unregister if gateway
- if(Common.isGateway(xid)) {
- self.unregisterGateway(xid);
- }
-
- // Then send roster removal query
- self.send(xid, 'remove');
-
- return false;
- });
-
- $(manage_infos + ' p.bm-remove a.prohibit').click(function() {
- Bubble.close();
- Presence.sendSubscribe(xid, 'unsubscribed');
-
- return false;
- });
-
- $(manage_infos + ' p.bm-remove a.block').click(function() {
- Bubble.close();
-
- // Update privacy settings
- Privacy.push('block', ['jid'], [xid], ['deny'], [false], [true], [true], [true], '', 'roster');
- $(path).addClass('blocked');
-
- // Enable the "block" list
- Privacy.change('block', 'active');
- Privacy.change('block', 'default');
-
- // Send an unavailable presence
- Presence.send(xid, 'unavailable');
-
- // Remove the user presence
- var db_regex = new RegExp(('^' + Connection.desktop_hash + '_') + 'presence' + ('_(.+)'));
-
- for(var i = 0; i < DataStore.storageDB.length; i++) {
- // Get the pointer values
- var current = DataStore.storageDB.key(i);
-
- // If the pointer is on a stored presence
- if(current.match(db_regex)) {
- if(Common.bareXID(RegExp.$1) == xid) {
- DataStore.storageDB.removeItem(current);
- }
- }
- }
-
- // Manage his new presence
- Presence.funnel(xid, hex_md5(xid));
-
- return false;
- });
-
- $(manage_infos + ' a.save').click(function() {
- // Send the item
- self.send(xid, '', $.trim($(rename).val()), self.thisBuddyGroups(xid));
-
- // Remove the buddy editor
- Bubble.close();
-
- return false;
- });
- } catch(e) {
- Console.error('Roster.applyBuddyInput', e);
- }
-
- };
-
-
- /**
- * Applies the buddy editing hover events
- * @public
- * @param {string} xid
- * @param {string} hash
- * @param {string} nick
- * @param {string} subscription
- * @param {object} groups
- * @param {string} group_hash
- * @return {undefined}
- */
- self.applyBuddyHover = function(xid, hash, nick, subscription, groups, group_hash) {
-
- try {
- // Generate the values
- var bPath = '#roster .' + group_hash + ' .buddy[data-xid="' + escape(xid) + '"]';
- var iPath = bPath + ' .buddy-infos';
-
- // Apply the hover event
- $(bPath).hover(function() {
- // Another bubble exist
- if(Common.exists('#roster .buddy-infos')) {
- return false;
- }
-
- $(bPath).oneTime(200, function() {
- // Another bubble exist
- if(Common.exists('#roster .buddy-infos')) {
- return false;
- }
-
- // Add this bubble!
- Bubble.show(iPath);
-
- // Create the buddy infos DOM element
- $(bPath).append(
- '<div class="buddy-infos bubble removable">' +
- '<div class="buddy-infos-subarrow talk-images"></div>' +
-
- '<div class="buddy-infos-subitem">' +
- '<div class="pep-infos">' +
- '<p class="bi-status talk-images unavailable">' + Common._e("unknown") + '</p>' +
- '<p class="bi-mood talk-images mood-four">' + Common._e("unknown") + '</p>' +
- '<p class="bi-activity talk-images activity-exercising">' + Common._e("unknown") + '</p>' +
- '<p class="bi-tune talk-images tune-note">' + Common._e("unknown") + '</p>' +
- '<p class="bi-geoloc talk-images location-world">' + Common._e("unknown") + '</p>' +
- '<p class="bi-jingle talk-images call-jingle"><a href="#" class="audio">' + Common._e("Audio Call") + '</a><span class="separator"> / </span><a href="#" class="video">' + Common._e("Video Call") + '</a>' +
- '<p class="bi-view talk-images view-individual"><a href="#" class="profile">' + Common._e("Profile") + '</a> / <a href="#" class="channel">' + Common._e("Channel") + '</a> / <a href="#" class="commands">' + Common._e("Commands") + '</a></p>' +
- '<p class="bi-edit talk-images edit-buddy"><a href="#">' + Common._e("Edit") + '</a></p>' +
- '</div>' +
- '</div>' +
- '</div>'
- );
-
- // Sets the good position
- self.buddyInfosPosition(xid, group_hash);
-
- // Get the presence
- Presence.funnel(xid, hash);
-
- // Get the PEP infos
- PEP.displayAll(xid);
-
- // Click events
- $(bPath + ' .bi-view a').click(function() {
- var this_sel = $(this);
-
- // Renitialize the buddy infos
- Bubble.close();
-
- // Profile
- if(this_sel.is('.profile')) {
- UserInfos.open(xid);
- }
-
- // Channel
- else if(this_sel.is('.channel')) {
- Microblog.fromInfos(xid, hash);
- }
-
- // Command
- else if(this_sel.is('.commands')) {
- AdHoc.retrieve(xid);
- }
-
- return false;
- });
-
- // Jingle events
- $(bPath + ' .bi-jingle a').click(function() {
- var this_sel = $(this);
-
- // Renitialize the buddy infos
- Bubble.close();
-
- // Audio call?
- if(this_sel.is('.audio')) {
- Jingle.start(xid, 'audio');
- }
-
- // Video call?
- else if(this_sel.is('.video')) {
- Jingle.start(xid, 'video');
- }
-
- return false;
- });
-
- $(bPath + ' .bi-edit a').click(function() {
- self.buddyEdit(xid, nick, subscription, groups);
-
- return false;
- });
- });
- }, function() {
- if(!Common.exists(iPath + ' .manage-infos')) {
- Bubble.close();
- }
-
- $(bPath).stopTime();
- });
- } catch(e) {
- Console.error('Roster.applyBuddyHover', e);
- }
-
- };
-
-
- /**
- * Sets the good buddy-infos position
- * @public
- * @param {string} xid
- * @param {string} group_hash
- * @return {undefined}
- */
- self.buddyInfosPosition = function(xid, group_hash) {
-
- try {
- // Paths
- var group = '#roster .' + group_hash;
- var buddy = group + ' .buddy[data-xid="' + escape(xid) + '"]';
- var buddy_infos = buddy + ' .buddy-infos';
-
- // Get the offset to define
- var offset = 3;
-
- if(Common.isGateway(xid)) {
- offset = -8;
- }
-
- // Process the position
- var v_position = $(buddy).position().top + offset;
- var h_position = $(buddy).width() - 10;
-
- // Apply the top position
- $(buddy_infos).css('top', v_position);
-
- // Apply the left/right position
- if($('html').attr('dir') == 'rtl') {
- $(buddy_infos).css('right', h_position);
- } else {
- $(buddy_infos).css('left', h_position);
- }
- } catch(e) {
- Console.error('Roster.buddyInfosPosition', e);
- }
-
- };
-
-
- /**
- * Generates an array of the current groups of a buddy
- * @public
- * @param {string} xid
- * @return {undefined}
- */
- self.thisBuddyGroups = function(xid) {
-
- try {
- var path = '#roster .buddy[data-xid="' + escape(xid) + '"] ';
- var array = [];
-
- // Each checked checkboxes
- $(path + 'div.bm-choose input[type="checkbox"]').filter(':checked').each(function() {
- array.push(
- unescape($(this).attr('data-group'))
- );
- });
-
- // Entered input value (and not yet in the array)
- var value = $.trim($(path + 'p.bm-group input').val());
-
- if(value && !Utils.existArrayValue(array, value)) {
- array.push(value);
- }
-
- return array;
- } catch(e) {
- Console.error('Roster.thisBuddyGroups', e);
- }
-
- };
-
-
- /**
- * Adds a given contact to our roster
- * @public
- * @param {string} xid
- * @param {string} name
- * @return {undefined}
- */
- self.addThisContact = function(xid, name) {
-
- try {
- Console.info('Add this contact: ' + xid + ', as ' + name);
-
- // Cut the resource of this XID
- xid = Common.bareXID(xid);
-
- // If the form is complete
- if(xid) {
- // We send the subscription
- Presence.sendSubscribe(xid, 'subscribe');
- self.send(xid, '', name);
-
- // We hide the bubble
- Bubble.close();
- }
- } catch(e) {
- Console.error('Roster.addThisContact', e);
- }
-
- };
-
-
- /**
- * Gets an array of all the groups in the roster
- * @public
- * @param {type} name
- * @return {undefined}
- */
- self.getAllGroups = function() {
-
- try {
- var groups = [];
-
- $('#roster .one-group').each(function() {
- var current = unescape(
- $(this).attr('data-group')
- );
-
- if((current != Common._e("Unclassified")) && (current != Common._e("Gateways"))) {
- groups.push(current);
- }
- });
-
- return groups.sort();
- } catch(e) {
- Console.error('Roster.getAllGroups', e);
- }
-
- };
-
-
- /**
- * Edits buddy informations
- * @public
- * @param {string} xid
- * @param {string} nick
- * @param {string} subscription
- * @param {object} groups
- * @return {undefined}
- */
- self.buddyEdit = function(xid, nick, subscription, groups) {
-
- try {
- Console.info('Buddy edit: ' + xid);
-
- // Initialize
- var path = '#roster .buddy[data-xid="' + escape(xid) + '"] .';
- var html = '<div class="manage-infos">';
-
- // Get the privacy state
- var privacy_state = Privacy.status('block', xid);
- var privacy_active = DataStore.getDB(Connection.desktop_hash, 'privacy-marker', 'available');
-
- // Get the group privacy state
- for(var g in groups) {
- if((Privacy.status('block', groups[g]) == 'deny') && (privacy_state != 'allow')) {
- privacy_state = 'deny';
- }
- }
-
- // The subscription with this buddy is not full
- if((subscription != 'both') || ((privacy_state == 'deny') && privacy_active)) {
- var authorize_links = '';
- html += '<p class="bm-authorize talk-images">';
-
- // Link to allow to see our status
- if((subscription == 'to') || (subscription == 'none')) {
- authorize_links += '<a href="#" class="to">' + Common._e("Authorize") + '</a>';
- }
-
- // Link to ask to see his/her status
- if((subscription == 'from') || (subscription == 'none')) {
- if(authorize_links) {
- authorize_links += ' / ';
- }
-
- authorize_links += '<a href="#" class="from">' + Common._e("Ask for authorization") + '</a>';
- }
-
- // Link to unblock this buddy
- if((privacy_state == 'deny') && privacy_active) {
- if(authorize_links) {
- authorize_links += ' / ';
- }
-
- html += '<a href="#" class="unblock">' + Common._e("Unblock") + '</a>';
- }
-
- html += authorize_links + '</p>';
- }
-
- // Complete the HTML code
- var remove_links = '';
- html += '<p class="bm-remove talk-images">';
- remove_links = '<a href="#" class="remove">' + Common._e("Remove") + '</a>';
-
- // This buddy is allowed to see our presence, we can show a "prohibit" link
- if((subscription == 'both') || (subscription == 'from')) {
- remove_links += ' / <a href="#" class="prohibit">' + Common._e("Prohibit") + '</a>';
- }
-
- // Complete the HTML code
- if((privacy_state != 'deny') && privacy_active) {
- if(remove_links) {
- remove_links += ' / ';
- }
-
- remove_links += '<a href="#" class="block">' + Common._e("Block") + '</a>';
- }
-
- // Complete the HTML code
- html += remove_links +
- '</p>' +
- '<p class="bm-rename talk-images"><label>' + Common._e("Rename") + '</label> <input type="text" value="' + Common.encodeQuotes(nick) + '" /></p>';
-
- // Only show group tool if not a gateway
- if(!Common.isGateway(xid)) {
- html += '<p class="bm-group talk-images"><label>' + Common._e("Groups") + '</label> <input type="text" /></p>' +
- '<div class="bm-choose">' +
- '<div></div>' +
- '</div>';
- }
-
- // Close the DOM element
- html += '<a href="#" class="save">' + Common._e("Save") + '</a>' +
- '</div>';
-
- // We update the DOM elements
- $(path + 'pep-infos').replaceWith(html);
-
- // Gets all the existing groups
- var all_groups = self.getAllGroups();
- var all_groups_dom = '';
-
- for(var a in all_groups) {
- // Current group
- var all_groups_current = all_groups[a];
-
- // Is the current group checked?
- var checked = '';
-
- if(Utils.existArrayValue(groups, all_groups_current)) {
- checked = ' checked="true"';
- }
-
- // Add the current group HTML
- all_groups_dom += '<label><input type="checkbox" data-group="' + escape(all_groups_current) + '"' + checked + ' /><span>' + all_groups_current.htmlEnc() + '</span></label>';
- }
-
- // Prepend this in the DOM
- var bm_choose = path + 'manage-infos div.bm-choose';
-
- $(bm_choose).prepend(all_groups_dom);
-
- // Apply the editing input events
- self.applyBuddyInput(xid);
- } catch(e) {
- Console.error('Roster.buddyEdit', e);
- }
-
- };
-
-
- /**
- * Unregisters from a given gateway
- * @public
- * @param {string} xid
- * @return {undefined}
- */
- self.unregisterGateway = function(xid) {
-
- try {
- var iq = new JSJaCIQ();
- iq.setType('set');
- iq.setTo(xid);
-
- var query = iq.setQuery(NS_REGISTER);
- query.appendChild(iq.buildNode('remove', {'xmlns': NS_REGISTER}));
-
- con.send(iq);
- } catch(e) {
- Console.error('Roster.unregisterGateway', e);
- }
-
- };
-
-
- /**
- * Updates the roster items
- * @public
- * @param {string} xid
- * @param {string} subscription
- * @param {string} name
- * @param {string} group
- * @return {undefined}
- */
- self.send = function(xid, subscription, name, group) {
-
- try {
- // We send the new buddy name
- var iq = new JSJaCIQ();
- iq.setType('set');
-
- var iqQuery = iq.setQuery(NS_ROSTER);
- var item = iqQuery.appendChild(iq.buildNode('item', {'xmlns': NS_ROSTER, 'jid': xid}));
-
- // Any subscription?
- if(subscription) {
- item.setAttribute('subscription', subscription);
- }
-
- // Any name?
- if(name) {
- item.setAttribute('name', name);
- }
-
- // Any group?
- if(group && group.length) {
- for(var i in group) {
- item.appendChild(iq.buildNode('group', {'xmlns': NS_ROSTER}, group[i]));
- }
- }
-
- con.send(iq);
-
- Console.info('Roster item sent: ' + xid);
- } catch(e) {
- Console.error('Roster.send', e);
- }
-
- };
-
-
- /**
- * Adapts the roster height, depending of the window size
- * @public
- * @return {undefined}
- */
- self.adapt = function() {
-
- try {
- // Process the new height
- var new_height = $('#left-content').height() - $('#my-infos').height() - 97;
-
- // New height too small
- if(new_height < 211) {
- new_height = 211;
- }
-
- // Apply the new height
- $('#roster .content').css('height', new_height);
- } catch(e) {
- Console.error('Roster.adapt', e);
- }
-
- };
-
-
- /**
- * Gets all the buddies in our roster
- * @public
- * @return {object}
- */
- self.getAllBuddies = function() {
-
- try {
- var buddies = [];
-
- $('#roster .buddy').each(function() {
- var xid = unescape($(this).attr('data-xid'));
-
- if(xid) {
- buddies.push(xid);
- }
- });
-
- return buddies;
- } catch(e) {
- Console.error('Roster.getAllBuddies', e);
- }
-
- };
-
-
- /**
- * Returns whether given XID is in buddy list or not
- * @public
- * @param {string} xid
- * @return {boolean}
- */
- self.isFriend = function(xid) {
-
- try {
- return Common.exists('#roster .buddy[data-xid="' + escape(xid) + '"]');
- } catch(e) {
- Console.error('Roster.isFriend', e);
- }
-
- };
-
-
- /**
- * Gets the user gateways
- * @public
- * @return {object}
- */
- self.getGateways = function() {
-
- try {
- // New array
- var gateways = [];
- var buddies = self.getAllBuddies();
-
- // Get the gateways
- for(var c in buddies) {
- if(Common.isGateway(buddies[c])) {
- gateways.push(buddies[c]);
- }
- }
-
- return gateways;
- } catch(e) {
- Console.error('Roster.getGateways', e);
- }
-
- };
-
-
- /**
- * Instanciate the roster
- * @public
- * @return {undefined}
- */
- self.instance = function() {
-
- try {
- // Filtering tool
- var iFilter = $('#roster .filter input');
- var aFilter = $('#roster .filter a');
-
- iFilter.placeholder()
-
- .blur(function() {
- // Nothing is entered, put the placeholder instead
- if(!$.trim($(this).val())) {
- aFilter.hide();
- } else {
- aFilter.show();
- }
- })
-
- .keyup(function(e) {
- Search.funnelFilterBuddy(e.keyCode);
- });
-
- aFilter.click(function() {
- // Reset the input
- $(this).hide();
- iFilter.val('');
- iFilter.placeholder();
-
- // Security: show all the groups, empty or not
- $('#roster .one-group').show();
-
- // Reset the filtering tool
- Search.resetFilterBuddy();
-
- return false;
- });
-
- // When the user click on the add button, show the contact adding tool
- $('#roster .foot .add').click(function() {
- // Yet displayed?
- if(Common.exists('#buddy-conf-add')) {
- return Bubble.close();
- }
-
- // Add the bubble
- Bubble.show('#buddy-conf-add');
-
- // Append the content
- $('#roster .roster-add').append(
- '<div id="buddy-conf-add" class="buddy-conf-item bubble removable">' +
- '<div class="buddy-conf-subarrow talk-images"></div>' +
-
- '<div class="buddy-conf-subitem">' +
- '<p class="buddy-conf-p">' + Common._e("Add a friend") + '</p>' +
-
- '<label><span>' + Common._e("Address") + '</span><input type="text" class="buddy-conf-input add-contact-jid" required="" /></label>' +
- '<label><span>' + Common._e("Name") + '</span><input type="text" class="buddy-conf-input add-contact-name" /></label>' +
- '<label>' +
- '<span>' + Common._e("Gateway") + '</span>' +
- '<select class="buddy-conf-select add-contact-gateway">' +
- '<option value="none" selected="">' + Common._e("None") + '</option>' +
- '</select>' +
- '</label>' +
- '<span class="add-contact-name-get">' + Common._e("Getting the name...") + '</span>' +
-
- '<p class="buddy-conf-text">' +
- '<a href="#" class="buddy-conf-add-search">' + Common._e("Search a friend") + '</a>' +
- '</p>' +
- '</div>' +
- '</div>'
- );
-
- // Add the gateways
- var gateways = self.getGateways();
-
- // Any gateway?
- if(gateways.length) {
- // Append the gateways
- for(var i in gateways) {
- $('.add-contact-gateway').append('<option value="' + escape(gateways[i]) + '">' + gateways[i].htmlEnc() + '</option>');
- }
-
- // Show the gateway selector
- $('.add-contact-gateway').parent().show();
- } else {
- $('.add-contact-gateway').parent().hide();
- }
-
- // Blur event on the add contact input
- $('.add-contact-jid').blur(function() {
- // Read the value
- var value = $.trim($(this).val());
-
- // Try to catch the buddy name
- if(value && !$.trim($('.add-contact-name').val()) && ($('.add-contact-gateway').val() == 'none')) {
- // User XID
- var xid = Common.generateXID(value, 'chat');
-
- // Notice for the user
- $('.add-contact-name-get').attr('data-for', escape(xid)).show();
-
- // Request the user vCard
- Name.getAddUser(xid);
- }
- });
-
- // When a key is pressed...
- $('#buddy-conf-add input, #buddy-conf-add select').keyup(function(e) {
- // Enter : continue
- if(e.keyCode == 13) {
- // Get the values
- var xid = $.trim($('.add-contact-jid').val());
- var name = $.trim($('.add-contact-name').val());
- var gateway = unescape($('.add-contact-gateway').val());
-
- // Generate the XID to add
- if((gateway != 'none') && xid) {
- xid = xid.replace(/@/g, '%') + '@' + gateway;
- } else {
- xid = Common.generateXID(xid, 'chat');
- }
-
- // Submit the form
- if(xid && Common.getXIDNick(xid) && (xid != Common.getXID())) {
- self.addThisContact(xid, name);
- } else {
- $(document).oneTime(10, function() {
- $('.add-contact-jid').addClass('please-complete').focus();
- });
- }
-
- return false;
- }
-
- // Escape : quit
- if(e.keyCode == 27) {
- Bubble.close();
- }
- });
-
- // Click event on search link
- $('.buddy-conf-add-search').click(function() {
- Bubble.close();
- return Directory.open();
- });
-
- // Focus on the input
- $(document).oneTime(10, function() {
- $('.add-contact-jid').focus();
- });
-
- return false;
- });
-
- // When the user click on the join button, show the chat joining tool
- $('#roster .foot .join').click(function() {
- // Yet displayed?
- if(Common.exists('#buddy-conf-join')) {
- return Bubble.close();
- }
-
- // Add the bubble
- Bubble.show('#buddy-conf-join');
-
- // Append the content
- $('#roster .roster-join').append(
- '<div id="buddy-conf-join" class="buddy-conf-item bubble removable">' +
- '<div class="buddy-conf-subarrow talk-images"></div>' +
-
- '<div class="buddy-conf-subitem search">' +
- '<p class="buddy-conf-p" style="margin-bottom: 0;">' + Common._e("Join a chat") + '</p>' +
-
- '<input type="text" class="buddy-conf-input join-jid" required="" />' +
- '<select class="buddy-conf-select buddy-conf-join-select join-type">' +
- '<option value="chat" selected="">' + Common._e("Chat") + '</option>' +
- '<option value="groupchat">' + Common._e("Groupchat") + '</option>' +
- '</select>' +
- '</div>' +
- '</div>'
- );
-
- // Input vars
- var destination = '#buddy-conf-join .search';
- var dHovered = destination + ' ul li.hovered:first';
-
- // When a key is pressed...
- $('#buddy-conf-join input, #buddy-conf-join select').keyup(function(e) {
- // Enter: continue
- if(e.keyCode == 13) {
- // Select something from the search
- if(Common.exists(dHovered)) {
- Search.addBuddy(destination, $(dHovered).attr('data-xid'));
- } else {
- var xid = $.trim($('.join-jid').val());
- var type = $('.buddy-conf-join-select').val();
-
- if(xid && type) {
- // Generate a correct XID
- xid = Common.generateXID(xid, type);
-
- // Not me
- if(xid != Common.getXID()) {
- // Update some things
- $('.join-jid').removeClass('please-complete');
- Bubble.close();
-
- // Create a new chat
- Chat.checkCreate(xid, type);
- } else {
- $('.join-jid').addClass('please-complete');
- }
- } else {
- $('.join-jid').addClass('please-complete');
- }
- }
-
- return false;
- }
-
- // Escape: quit
- else if(e.keyCode == 27)
- Bubble.close();
-
- // Buddy search?
- else if($('.buddy-conf-join-select').val() == 'chat') {
- // New buddy search
- if((e.keyCode != 40) && (e.keyCode != 38)) {
- Search.createBuddy(destination);
- }
-
- // Navigating with keyboard in the results
- Search.arrowsBuddy(e, destination);
- }
- });
-
- // Buddy search lost focus
- $('#buddy-conf-join input').blur(function() {
- if(!$(destination + ' ul').attr('mouse-hover'))
- Search.resetBuddy(destination);
- });
-
- // Re-focus on the text input
- $('#buddy-conf-join select').change(function() {
- $(document).oneTime(10, function() {
- $('#buddy-conf-join input').focus();
- });
- });
-
- // We focus on the input
- $(document).oneTime(10, function() {
- $('#buddy-conf-join .join-jid').focus();
- });
-
- return false;
- });
-
- // When the user click on the groupchat button, show the groupchat menu
- $('#roster .foot .groupchat').click(function() {
- // Yet displayed?
- if(Common.exists('#buddy-conf-groupchat')) {
- return Bubble.close();
- }
-
- // Add the bubble
- Bubble.show('#buddy-conf-groupchat');
-
- // Append the content
- $('#roster .roster-groupchat').append(
- '<div id="buddy-conf-groupchat" class="buddy-conf-item bubble removable">' +
- '<div class="buddy-conf-subarrow talk-images"></div>' +
-
- '<div class="buddy-conf-subitem">' +
- '<p class="buddy-conf-p">' + Common._e("Your groupchats") + '</p>' +
-
- '<select name="groupchat-join" class="buddy-conf-select buddy-conf-groupchat-select"></select>' +
-
- '<p class="buddy-conf-text">' +
- '- <a href="#" class="buddy-conf-groupchat-edit">' + Common._e("Manage your favorite groupchats") + '</a>' +
- '</p>' +
- '</div>' +
- '</div>'
- );
-
- // When the user wants to edit his groupchat favorites
- $('.buddy-conf-groupchat-edit').click(function() {
- Favorites.open();
- Bubble.close();
-
- return false;
- });
-
- // Change event
- $('.buddy-conf-groupchat-select').change(function() {
- var groupchat = $.trim($(this).val());
-
- if(groupchat != 'none') {
- // We hide the bubble
- Bubble.close();
-
- // Create the chat
- Chat.checkCreate(groupchat, 'groupchat');
-
- // We reset the select value
- $(this).val('none');
- }
- });
-
- // Load the favorites
- Favorites.load();
-
- return false;
- });
-
- // When the user click on the muji button, show the muji menu
- $('#roster .foot .muji').click(function() {
- // Yet displayed?
- if(Common.exists('#buddy-conf-muji') || Call.is_ongoing()) {
- return Bubble.close();
- }
-
- // Add the bubble
- Bubble.show('#buddy-conf-muji');
-
- // Append the content
- $('#roster .roster-muji').append(
- '<div id="buddy-conf-muji" class="buddy-conf-item bubble removable">' +
- '<div class="buddy-conf-subarrow talk-images"></div>' +
-
- '<div class="buddy-conf-subitem">' +
- '<p class="buddy-conf-p">' + Common._e("Launch a group call") + '</p>' +
-
- '<p class="buddy-conf-text">' +
- '- <a href="#" class="buddy-conf-muji-conference" data-media="audio">' + Common._e("Audio conference") + '</a>' +
- '</p>' +
-
- '<p class="buddy-conf-text">' +
- '- <a href="#" class="buddy-conf-muji-conference" data-media="video">' + Common._e("Video conference") + '</a>' +
- '</p>' +
- '</div>' +
- '</div>'
- );
-
- // When the user wants to launch
- $('.buddy-conf-muji-conference').click(function() {
- var media = $(this).attr('data-media');
-
- var room_name = hex_md5(media + DateUtils.getTimeStamp() + Math.random());
- var room = Common.generateXID(room_name, 'groupchat');
-
- if(media && room && room_name) {
- Muji.start(room, media);
- }
-
- Bubble.close();
-
- return false;
- });
-
- return false;
- });
-
- // When the user click on the more button, show the more menu
- $('#roster .foot .more').click(function() {
- // Yet displayed?
- if(Common.exists('#buddy-conf-more')) {
- return Bubble.close();
- }
-
- // Add the bubble
- Bubble.show('#buddy-conf-more');
-
- // Append the content
- $('#roster .roster-more').append(
- '<div id="buddy-conf-more" class="buddy-conf-item bubble removable">' +
- '<div class="buddy-conf-subarrow talk-images"></div>' +
-
- '<div class="buddy-conf-subitem">' +
- '<p class="buddy-conf-p">' + Common._e("More stuff") + '</p>' +
-
- '<p class="buddy-conf-text">' +
- '- <a href="#" class="buddy-conf-more-display-unavailable">' + Common._e("Show all friends") + '</a>' +
- '<a href="#" class="buddy-conf-more-display-available">' + Common._e("Only show connected friends") + '</a>' +
- '</p>' +
-
- '<p class="buddy-conf-text privacy-hidable">' +
- '- <a href="#" class="buddy-conf-more-privacy">' + Common._e("Privacy") + '</a>' +
- '</p>' +
-
- '<p class="buddy-conf-text">' +
- '- <a href="#" class="buddy-conf-more-service-disco">' + Common._e("Service discovery") + '</a>' +
- '</p>' +
-
- '<p class="buddy-conf-text commands-hidable"">' +
- '- <a href="#" class="buddy-conf-more-commands">' + Common._e("Commands") + '</a>' +
- '</p>' +
- '</div>' +
- '</div>'
- );
-
- // Close bubble when link clicked
- $('#buddy-conf-more a').click(function() {
- Bubble.close();
- });
-
- // When the user wants to display all his buddies
- $('.buddy-conf-more-display-unavailable').click(function() {
- Interface.showAllBuddies('roster');
-
- return false;
- });
-
- // When the user wants to display only online buddies
- $('.buddy-conf-more-display-available').click(function() {
- Interface.showOnlineBuddies('roster');
-
- return false;
- });
-
- // When the user click on the privacy link
- $('.buddy-conf-more-privacy').click(Privacy.open);
-
- // When the user click on the service discovery link
- $('.buddy-conf-more-service-disco').click(Discovery.open);
-
- // When the user click on the command link
- $('.buddy-conf-more-commands').click(function() {
- AdHoc.server(con.domain);
-
- return false;
- });
-
- // Manage the displayed links
- if(self.blist_all) {
- $('.buddy-conf-more-display-unavailable').hide();
- $('.buddy-conf-more-display-available').show();
- }
-
- if(Features.enabledCommands()) {
- $('.buddy-conf-more-commands').parent().show();
- }
-
- if(DataStore.getDB(Connection.desktop_hash, 'privacy-marker', 'available')) {
- $('.buddy-conf-more-privacy').parent().show();
- }
-
- return false;
- });
-
- // When the user scrolls the buddy list
- $('#roster .content').scroll(function() {
- // Close the opened buddy infos bubble
- Bubble.close();
- });
- } catch(e) {
- Console.error('Roster.instance', e);
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.launch = function() {
-
- try {
- // Window resize event handler
- $(window).resize(self.adapt);
- } catch(e) {
- Console.error('Roster.launch', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
-
-Roster.launch(); \ No newline at end of file
diff --git a/app/javascripts/rosterx.js b/app/javascripts/rosterx.js
deleted file mode 100644
index b7463062..00000000
--- a/app/javascripts/rosterx.js
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the Roster Item Exchange JS script for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var RosterX = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Opens the rosterx tools
- * @public
- * @param {string} data
- * @return {undefined}
- */
- self.open = function(data) {
-
- try {
- // Popup HTML content
- var html =
- '<div class="top">' + Common._e("Suggested friends") + '</div>' +
-
- '<div class="content">' +
- '<div class="rosterx-head">' +
- '<a href="#" class="uncheck">' + Common._e("Uncheck all") + '</a>' +
- '<a href="#" class="check">' + Common._e("Check all") + '</a>' +
- '</div>' +
-
- '<div class="results"></div>' +
- '</div>' +
-
- '<div class="bottom">' +
- '<a href="#" class="finish save">' + Common._e("Save") + '</a>' +
- '<a href="#" class="finish cancel">' + Common._e("Cancel") + '</a>' +
- '</div>';
-
- // Create the popup
- Popup.create('rosterx', html);
-
- // Associate the events
- self.instance();
-
- // Parse the data
- self.parse(data);
-
- Console.log('Roster Item Exchange popup opened.');
- } catch(e) {
- Console.error('RosterX.open', e);
- }
-
- };
-
-
- /**
- * Closes the rosterx tools
- * @public
- * @return {boolean}
- */
- self.close = function() {
-
- try {
- // Destroy the popup
- Popup.destroy('rosterx');
- } catch(e) {
- Console.error('RosterX.close', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Parses a rosterx query
- * @public
- * @param {string} data
- * @return {undefined}
- */
- self.parse = function(data) {
-
- try {
- // Main selector
- var x = $(data).find('x[xmlns="' + NS_ROSTERX + '"]:first');
-
- // Parse data
- x.find('item').each(function() {
- var this_sel = $(this);
-
- // Generate group XML
- var group = '';
-
- this_sel.find('group').each(function() {
- group += '<group>' + this_sel.text().htmlEnc() + '</group>';
- });
-
- if(group) {
- group = '<groups>' + group + '</groups>';
- }
-
- // Display it!
- self.display(
- this_sel.attr('jid'),
- this_sel.attr('name'),
- group,
- this_sel.attr('action')
- );
- });
-
- // Click to check/uncheck
- $('#rosterx .oneresult').click(function(evt) {
- // No need to apply when click on input
- if($(evt.target).is('input[type="checkbox"]')) {
- return;
- }
-
- // Input selector
- var checkbox = $(this).find('input[type="checkbox"]');
-
- // Check or uncheck?
- if(checkbox.filter(':checked').size()) {
- checkbox.removeAttr('checked');
- } else {
- checkbox.attr('checked', true);
- }
- });
- } catch(e) {
- Console.error('RosterX.parse', e);
- }
-
- };
-
-
- /**
- * Displays a rosterx item
- * @public
- * @param {string} xid
- * @param {string} nick
- * @param {string} group
- * @param {string} action
- * @return {boolean}
- */
- self.display = function(xid, nick, group, action) {
-
- try {
- // End if no XID
- if(!xid) {
- return false;
- }
-
- // Set up a default action if no one
- if(!action || (action != 'modify') || (action != 'delete')) {
- action = 'add';
- }
-
- // Override "undefined" for nickname
- if(!nick) {
- nick = '';
- }
-
- // Display it
- $('#rosterx .results').append(
- '<div class="oneresult">' +
- '<input type="checkbox" checked="" data-name="' + Common.encodeQuotes(nick) + '" data-xid="' + Common.encodeQuotes(xid) + '" data-action="' + Common.encodeQuotes(action) + '" data-group="' + Common.encodeQuotes(group) + '" />' +
- '<span class="name">' + nick.htmlEnc() + '</span>' +
- '<span class="xid">' + xid.htmlEnc() + '</span>' +
- '<span class="action ' + action + ' talk-images"></span>' +
- '</div>'
- );
-
- return true;
- } catch(e) {
- Console.error('RosterX.display', e);
- }
-
- };
-
-
- /**
- * Saves the rosterx settings
- * @public
- * @return {boolean}
- */
- self.save = function() {
-
- try {
- // Send the requests
- $('#rosterx .results input[type="checkbox"]').filter(':checked').each(function() {
- var this_sel = $(this);
-
- // Read the attributes
- var nick = this_sel.attr('data-name');
- var xid = this_sel.attr('data-xid');
- var action = this_sel.attr('data-action');
- var group = this_sel.attr('data-group');
-
- // Parse groups XML
- var group_arr = [];
-
- if(group) {
- $(group).find('group').each(function() {
- group_arr.push(this_sel.text().revertHtmlEnc());
- });
- }
-
- // Process the asked action
- var roster_item = $('#roster .' + hex_md5(xid));
-
- switch(action) {
- // Buddy add
- case 'add':
- if(!Common.exists(roster_item)) {
- Presence.sendSubscribe(xid, 'subscribe');
- Roster.send(xid, '', nick, group_arr);
- }
-
- break;
-
- // Buddy edit
- case 'modify':
- if(Common.exists(roster_item))
- Roster.send(xid, '', nick, group_arr);
-
- break;
-
- // Buddy delete
- case 'delete':
- if(Common.exists(roster_item))
- Roster.send(xid, 'remove');
-
- break;
- }
- });
-
- // Close the popup
- self.close();
- } catch(e) {
- Console.error('RosterX.save', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.instance = function() {
-
- try {
- // Click events
- $('#rosterx .bottom .finish').click(function() {
- var this_sel = $(this);
-
- if(this_sel.is('.save')) {
- return self.save();
- }
-
- if(this_sel.is('.cancel')) {
- return self.close();
- }
- });
-
- $('#rosterx .rosterx-head a').click(function() {
- var this_sel = $(this);
-
- if(this_sel.is('.check')) {
- $('#rosterx .results input[type="checkbox"]').attr('checked', true);
- } else if(this_sel.is('.uncheck')) {
- $('#rosterx .results input[type="checkbox"]').removeAttr('checked');
- }
-
- return false;
- });
- } catch(e) {
- Console.error('RosterX.instance', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/search.js b/app/javascripts/search.js
deleted file mode 100644
index 6e8a36c9..00000000
--- a/app/javascripts/search.js
+++ /dev/null
@@ -1,423 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the seach tools JS script for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Search = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Variables */
- self.search_filtered = false;
-
-
- /**
- * Searches in the user's buddy list
- * @public
- * @param {string} query
- * @return {object}
- */
- self.processBuddy = function(query) {
-
- try {
- // No query submitted?
- if(!query) {
- return;
- }
-
- // Wildcard (*) submitted
- if(query == '*') {
- query = '';
- }
-
- // Replace forbidden characters in regex
- query = Common.escapeRegex(query);
-
- // Create an empty array
- var results = [];
-
- // Search regex
- var regex = new RegExp('((^)|( ))' + query, 'gi');
-
- // Search in the roster
- var buddies = Roster.getAllBuddies();
-
- for(var i in buddies) {
- var xid = buddies[i];
- var nick = Name.getBuddy(xid);
-
- // Buddy match our search, and not yet in the array
- if(nick.match(regex) && !Utils.existArrayValue(results, xid)) {
- results.push(xid);
- }
- }
-
- // Return the results array
- return results;
- } catch(e) {
- Console.error('Search.processBuddy', e);
- }
-
- };
-
-
- /**
- * Resets the buddy search tool
- * @public
- * @param {string} destination
- * @return {undefined}
- */
- self.resetBuddy = function(destination) {
-
- try {
- $(destination + ' ul').remove();
- $(destination + ' input').removeClass('suggested');
- } catch(e) {
- Console.error('Search.resetBuddy', e);
- }
-
- };
-
-
- /**
- * Add the clicked XID to the input
- * @public
- * @param {string} destination
- * @param {string} xid
- * @return {boolean}
- */
- self.addBuddy = function(destination, xid) {
-
- try {
- // Remove the search tool
- self.resetBuddy(destination);
-
- // Define a selector
- var input = $(destination + ' input');
- var value = input.val();
-
- // Get the old value (if there's another value)
- var old = '';
-
- if(value.match(/(^(.+)(,)(\s)?)(\w+)$/)) {
- old = RegExp.$1;
- }
-
- // Add the XID to the "to" input and focus on it
- $(document).oneTime(10, function() {
- input.val(old + xid).focus();
- });
- } catch(e) {
- Console.error('Search.addBuddy', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Creates the appropriate markup for the search results
- * @public
- * @param {string} destination
- * @return {undefined}
- */
- self.createBuddy = function(destination) {
-
- try {
- // Reset the search engine
- self.resetBuddy(destination);
-
- // Get the entered value
- var value = $(destination + ' input').val();
-
- // Separation with a comma?
- if(value.match(/^(.+)((,)(\s)?)(\w+)$/)) {
- value = RegExp.$5;
- }
-
- // Get the result array
- var entered = self.processBuddy(value);
-
- // Display each result (if any)
- if(entered && entered.length) {
- // Set a special class to the search input
- $(destination + ' input').addClass('suggested');
-
- // Append each found buddy in the container
- var regex = new RegExp('((^)|( ))' + value, 'gi');
-
- // Initialize the code generation
- var code = '<ul>';
-
- for(var b in entered) {
- // Get some values from the XID
- var current = Name.getBuddy(entered[b]).htmlEnc();
- current = current.replace(regex, '<b>$&</b>');
-
- // Add the current element to the global code
- code += '<li onclick="return Search.addBuddy(\'' + Utils.encodeOnclick(destination) + '\', \'' + Utils.encodeOnclick(entered[b]) + '\');" data-xid="' + Common.encodeQuotes(entered[b]) + '">' + current + '</li>';
- }
-
- // Finish the code generation
- code += '</ul>';
-
- // Creates the code in the DOM
- $(destination).append(code);
-
- // Put the hover on the first element
- $(destination + ' ul li:first').addClass('hovered');
-
- // Hover event, to not to remove this onblur and loose the click event
- $(destination + ' ul li').hover(function() {
- $(destination + ' ul li').removeClass('hovered');
- $(this).addClass('hovered');
-
- // Add a marker for the blur event
- $(destination + ' ul').attr('mouse-hover', 'true');
- }, function() {
- $(this).removeClass('hovered');
-
- // Remove the mouse over marker
- $(destination + ' ul').removeAttr('mouse-hover');
- });
- }
- } catch(e) {
- Console.error('Search.createBuddy', e);
- }
-
- };
-
-
- /**
- * Handles the keyboard arrows press when searching
- * @public
- * @param {object} evt
- * @param {string} destination
- * @return {boolean}
- */
- self.arrowsBuddy = function(evt, destination) {
-
- try {
- // Down arrow: 40
- // Up arrown: 38
-
- // Initialize
- var code = evt.keyCode;
-
- // Not the key we want here
- if((code != 40) && (code != 38)) {
- return;
- }
-
- // Remove the eventual mouse hover marker
- $(destination + ' ul').removeAttr('mouse-hover');
-
- // Create the path & get its size
- var path = destination + ' ul li';
- var pSize = $(path).size();
-
- // Define the i value
- var i = 0;
-
- // Switching yet launched
- if(Common.exists(path + '.hovered')) {
- var index = $(path).attr('data-hovered');
-
- if(index) {
- i = parseInt(index);
- }
-
- if(code == 40) {
- i++;
- } else {
- i--;
- }
- } else if(code == 38) {
- i = pSize - 1;
- }
-
- // We must not override the maximum i limit
- if(i >= pSize) {
- i = 0;
- } else if(i < 0) {
- i = pSize - 1;
- }
-
- // Modify the list
- $(path + '.hovered').removeClass('hovered');
- $(path).eq(i).addClass('hovered');
-
- // Store the i index
- $(path).attr('data-hovered', i);
- } catch(e) {
- Console.error('Search.arrowsBuddy', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Filters the buddies in the roster
- * @public
- * @param {object} vFilter
- * @return {undefined}
- */
- self.goFilterBuddy = function(vFilter) {
-
- try {
- // Put a marker
- self.search_filtered = true;
-
- // Show the buddies that match the search string
- var rFilter = self.processBuddy(vFilter);
-
- // Hide all the buddies
- $('#roster .buddy').hide();
-
- // Only show the buddies which match the search
- if(!Roster.blist_all) {
- for(var i in rFilter) {
- $('#roster .buddy[data-xid="' + escape(rFilter[i]) + '"]:not(.hidden-buddy)').show();
- }
- } else {
- for(var j in rFilter) {
- $('#roster .buddy[data-xid="' + escape(rFilter[j]) + '"]').show();
- }
- }
- } catch(e) {
- Console.error('Search.goFilterBuddy', e);
- }
-
- };
-
-
- /**
- * Resets the buddy filtering in the roster
- * @public
- * @return {undefined}
- */
- self.resetFilterBuddy = function() {
-
- try {
- // Remove the marker
- self.search_filtered = false;
-
- // Show all the buddies
- $('#roster .buddy').show();
-
- // Only show available buddies
- if(!Roster.blist_all) {
- $('#roster .buddy.hidden-buddy').hide();
- }
-
- // Update the groups
- Roster.updateGroups();
- } catch(e) {
- Console.error('Search.resetFilterBuddy', e);
- }
-
- };
-
-
- /**
- * Funnels the buddy filtering
- * @public
- * @param {number} keycode
- * @return {undefined}
- */
- self.funnelFilterBuddy = function(keycode) {
-
- try {
- // Get the input value
- var input = $('#roster .filter input');
- var cancel = $('#roster .filter a');
- var value = input.val();
-
- // Security: reset all the groups, empty or not, deployed or not
- $('#roster .one-group, #roster .group-buddies').show();
- $('#roster .group span').text('-');
-
- // Nothing is entered, or escape pressed
- if(!value || (keycode == 27)) {
- if(keycode == 27) {
- input.val('');
- }
-
- self.resetFilterBuddy();
- cancel.hide();
- } else {
- cancel.show();
- self.goFilterBuddy(value);
- }
-
- // Update the groups
- Roster.updateGroups();
- } catch(e) {
- Console.error('Search.funnelFilterBuddy', e);
- }
-
- };
-
-
- /**
- * Searches for the nearest element (with a lower stamp than the current one)
- * @public
- * @param {number} stamp
- * @param {string} element
- * @return {number}
- */
- self.sortElementByStamp = function(stamp, element) {
-
- try {
- var array = [];
- var i = 0;
- var nearest = 0;
-
- // Add the stamp values to the array
- $(element).each(function() {
- var current_stamp = parseInt($(this).attr('data-stamp'));
-
- // Push it!
- array.push(current_stamp);
- });
-
- // Sort the array
- array.sort();
-
- // Get the nearest stamp value
- while(stamp > array[i]) {
- nearest = array[i];
-
- i++;
- }
-
- return nearest;
- } catch(e) {
- Console.error('Search.sortElementByStamp', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/smileys.js b/app/javascripts/smileys.js
deleted file mode 100644
index 6353af82..00000000
--- a/app/javascripts/smileys.js
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the smileys JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Smileys = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Constants */
- self.emote_list = {
- 'biggrin': ':-D',
- 'devil': ']:->',
- 'coolglasses': '8-)',
- 'tongue': ':-P',
- 'smile': ':-)',
- 'wink': ';-)',
- 'blush': ':-$',
- 'stare': ':-|',
- 'frowning': ':-/',
- 'oh': '=-O',
- 'unhappy': ':-(',
- 'cry': ':\'-(',
- 'angry': ':-@',
- 'puke': ':-!',
- 'hugright': '({)',
- 'hugleft': '(})',
- 'lion': ':3',
- 'pussy': '(@)',
- 'bat': ':-[',
- 'kiss': ':-{}',
- 'heart': '<3',
- 'brheart': '</3',
- 'flower': '@}->--',
- 'brflower': '(W)',
- 'thumbup': '(Y)',
- 'thumbdown': '(N)',
- 'lamp': '(I)',
- 'coffee': '(C)',
- 'drink': '(D)',
- 'beer': '(B)',
- 'boy': '(Z)',
- 'girl': '(X)',
- 'photo': '(P)',
- 'phone': '(T)',
- 'music': '(8)',
- 'cuffs': '(%)',
- 'mail': '(E)',
- 'rainbow': '(R)',
- 'star': '(*)',
- 'moon': '(S)'
- };
-
-
- /**
- * Generates the correct HTML code for an emoticon insertion tool
- * @public
- * @param {string} smiley
- * @param {string} image
- * @param {string} hash
- * @return {undefined}
- */
- self.emoteLink = function(smiley, image, hash) {
-
- try {
- return '<a href="#" class="emoticon emoticon-' + image + ' smileys-images" data-smiley="' + smiley + '"></a>';
- } catch(e) {
- Console.error('Smileys.emoteLink', e);
- }
-
- };
-
-
- /**
- * Emoticon links arrays
- * @public
- * @param {string} hash
- * @return {string}
- */
- self.links = function(hash) {
-
- try {
- var links = '';
-
- for(var cur_emote in self.emote_list) {
- links += self.emoteLink(
- self.emote_list[cur_emote],
- cur_emote,
- hash
- );
- }
-
- return links;
- } catch(e) {
- Console.error('Smileys.links', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/storage.js b/app/javascripts/storage.js
deleted file mode 100644
index 3b640beb..00000000
--- a/app/javascripts/storage.js
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the storage JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Storage = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Gets the storage items of the user
- * @public
- * @param {string} type
- * @return {undefined}
- */
- self.get = function(type) {
-
- /* REF: http://xmpp.org/extensions/xep-0049.html */
-
- try {
- var iq = new JSJaCIQ();
- iq.setType('get');
-
- var iqQuery = iq.setQuery(NS_PRIVATE);
- iqQuery.appendChild(iq.buildNode('storage', {'xmlns': type}));
-
- con.send(iq, self.handle);
- } catch(e) {
- Console.error('Storage.get', e);
- }
-
- };
-
-
- /**
- * Handles the storage items
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handle = function(iq) {
-
- try {
- var handleXML = iq.getQuery();
- var handleFrom = Common.fullXID(Common.getStanzaFrom(iq));
-
- // Define some vars
- var options = $(handleXML).find('storage[xmlns="' + NS_OPTIONS + '"]');
- var inbox = $(handleXML).find('storage[xmlns="' + NS_INBOX + '"]');
- var bookmarks = $(handleXML).find('storage[xmlns="' + NS_BOOKMARKS + '"]');
- var rosternotes = $(handleXML).find('storage[xmlns="' + NS_ROSTERNOTES + '"]');
-
- // No options and node not yet configured
- if(options.size() && !options.find('option').size() && (iq.getType() != 'error')) {
- Welcome.open();
- }
-
- // Parse the options xml
- options.find('option').each(function() {
- var this_sel = $(this);
-
- // We retrieve the informations
- var type = this_sel.attr('type');
- var value = this_sel.text();
-
- // We display the storage
- DataStore.setDB(Connection.desktop_hash, 'options', type, value);
-
- // If this is the buddy list show status
- if((type == 'roster-showall') && (value == '1')) {
- Interface.showAllBuddies('storage');
- }
- });
-
- // Parse the inbox xml
- inbox.find('message').each(function() {
- var this_sel = $(this);
-
- Inbox.storeMessage(
- this_sel.attr('from'),
- this_sel.attr('subject'),
- this_sel.text(),
- this_sel.attr('status'),
- this_sel.attr('id'),
- this_sel.attr('date'),
- [
- this_sel.attr('file_title'),
- this_sel.attr('file_href'),
- this_sel.attr('file_type'),
- this_sel.attr('file_length')
- ]
- );
- });
-
- // Parse the bookmarks xml
- bookmarks.find('conference').each(function() {
- var this_sel = $(this);
-
- // We retrieve the informations
- var xid = this_sel.attr('jid');
- var name = this_sel.attr('name');
- var autojoin = this_sel.attr('autojoin');
- var password = this_sel.find('password').text();
- var nick = this_sel.find('nick').text();
-
- // Filter autojoin (compatibility)
- autojoin = ((autojoin == 'true') || (autojoin == '1')) ? 'true' : 'false';
-
- // We display the storage
- Favorites.display(xid, name, nick, autojoin, password);
-
- // Join the chat if autojoin is enabled
- if(autojoin == 'true') {
- Chat.checkCreate(xid, 'groupchat', nick, password, name);
- }
- });
-
- // Parse the roster notes xml
- rosternotes.find('note').each(function() {
- var this_sel = $(this);
-
- DataStore.setDB(
- Connection.desktop_hash,
- 'rosternotes',
- this_sel.attr('jid'),
- this_sel.text()
- );
- });
-
- // Options received
- if(options.size()) {
- Console.log('Options received.');
-
- // Now, get the inbox
- self.get(NS_INBOX);
-
- // Geolocate the user
- PEP.geolocate();
-
- $('.options-hidable').show();
- }
-
- // Inbox received
- else if(inbox.size()) {
- Console.log('Inbox received.');
-
- // Send the first presence!
- Presence.sendFirst(DataStore.getDB(Connection.desktop_hash, 'checksum', 1));
-
- // Check we have new messages (play a sound if any unread messages)
- if(Inbox.checkMessages()) {
- Audio.play('notification');
- }
-
- $('.inbox-hidable').show();
- }
-
- // Bookmarks received
- else if(bookmarks.size()) {
- // Join the groupchats the admin defined (if any)
- Groupchat.joinConf();
-
- Console.log('Bookmarks received.');
- }
-
- // Roster notes received (for logger)
- else if(rosternotes.size()) {
- Console.log('Roster notes received.');
- }
- } catch(e) {
- Console.error('Storage.handle', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/system.js b/app/javascripts/system.js
deleted file mode 100644
index 04b779d7..00000000
--- a/app/javascripts/system.js
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the system JS script for Jappix
-
--------------------------------------------------
-
-License: dual-licensed under AGPL and MPLv2
-Authors: Valérian Saliou, olivierm, regilero, Maranda
-
-*/
-
-// Bundle
-var System = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Gets the current app location
- * @public
- * @return {string}
- */
- self.location = function() {
-
- try {
- var url = window.location.href;
-
- // If the URL has variables, remove them
- if(url.indexOf('?') != -1) {
- url = url.split('?')[0];
- }
-
- if(url.indexOf('#') != -1) {
- url = url.split('#')[0];
- }
-
- // No "/" at the end
- if(!url.match(/(.+)\/$/)) {
- url += '/';
- }
-
- return url;
- } catch(e) {
- Console.error('System.location', e);
- }
-
- };
-
-
- /**
- * Checks if we are in developer mode
- * @public
- * @return {boolean}
- */
- self.isDeveloper = function() {
-
- try {
- return (DEVELOPER === 'on');
- } catch(e) {
- Console.error('System.isDeveloper', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
-
-var JappixSystem = System; \ No newline at end of file
diff --git a/app/javascripts/talk.js b/app/javascripts/talk.js
deleted file mode 100644
index c157f952..00000000
--- a/app/javascripts/talk.js
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the talkpage JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Talk = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Creates the talkpage events
- * @public
- * @return {undefined}
- */
- self.events = function() {
-
- try {
- // Launch all associated bundles
- Microblog.instance();
- Roster.instance();
- Presence.instance();
- PEP.instance();
- Notification.instance();
- Music.instance();
- } catch(e) {
- Console.error('Talk.events', e);
- }
-
- };
-
-
- /**
- * Creates the talkpage code
- * @public
- * @return {boolean}
- */
- self.create = function() {
-
- try {
- // Talkpage exists?
- if(Common.exists('#talk')) {
- return false;
- }
-
- // Anonymous detector
- var anonymous = Utils.isAnonymous();
-
- // Generate the HTML code
- var html =
- '<div id="talk" class="removable">' +
- '<div id="top-content">' +
- '<div class="tools tools-logo talk-images"></div>' +
-
- '<div class="tools tools-all">';
-
- if(!anonymous) html +=
- '<a href="#" onclick="return Inbox.open();" class="inbox-hidable">' + Common._e("Messages") + '</a>' +
- '<a href="#" onclick="return vCard.open();" class="vcard">' + Common._e("Profile") + '</a>' +
- '<a href="#" onclick="return Options.open();" class="options-hidable">' + Common._e("Options") + '</a>' +
- '<a href="#" onclick="return Connection.normalQuit();" class="quit">' + Common._e("Disconnect") + '</a>';
-
- else html +=
- '<a href="./">' + Common._e("Disconnect") + '</a>';
-
- html +=
- '</div>';
-
- if(!anonymous && document.createElement('audio').canPlayType) html +=
- '<div class="tools-all ibubble">' +
- '<div class="tools music talk-images" onclick="return Music.open();"></div>' +
-
- '<div class="music-content tools-content bubble hidable">' +
- '<div class="tools-content-subarrow talk-images"></div>' +
-
- '<div class="tools-content-subitem">' +
- '<div class="player">' +
- '<a href="#" class="stop talk-images" onclick="return Music.action(\'stop\');"></a>' +
- '</div>' +
-
- '<div class="list">' +
- '<p class="no-results">' + Common._e("No result!") + '</p>' +
- '</div>' +
-
- '<div class="search">' +
- '<input type="text" />' +
- '</div>' +
- '</div>' +
- '</div>' +
- '</div>';
-
- if(!anonymous) html +=
- '<div class="tools-all ibubble">' +
- '<div class="tools notifications talk-images" onclick="return Bubble.show(\'.notifications-content\');"></div>' +
-
- '<div class="notifications-content tools-content bubble hidable">' +
- '<div class="tools-content-subarrow talk-images"></div>' +
-
- '<div class="tools-content-subitem">' +
- '<a class="empty" href="#" onclick="return Notification.clear();">' + Common._e("Empty") + '</a>' +
- '<p class="nothing">' + Common._e("No notifications.") + '</p>' +
- '</div>' +
- '</div>' +
- '</div>';
-
- if(!anonymous) html +=
- '<div class="tools-all">' +
- '<div class="tools call talk-images" onclick="return Call.open();">' +
- '<span class="streaming-items">' +
- '<span class="counter" data-default="00:00:00">00:00:00</span>' +
- '<a class="stop" href="#" onclick="return Call.stop();">' + Common._e("Stop") + '</a>' +
- '</span>' +
- '</div>' +
-
- '<div class="call-content tools-content">' +
- '<div class="tools-content-subarrow talk-images"></div>' +
-
- '<div class="tools-content-subitem"></div>' +
- '</div>' +
- '</div>';
-
- html +=
- '</div>' +
-
- '<div id="main-content">' +
- '<div id="left-content">';
- if(!anonymous) html +=
- '<div id="roster">' +
- '<div class="content"></div>' +
-
- '<div class="filter">' +
- '<input type="text" placeholder="' + Common._e("Filter") + '" />' +
- '<a href="#">x</a>' +
- '</div>' +
-
- '<div class="foot ibubble">' +
- '<div class="roster-add roster-icon">' +
- '<a href="#" class="add talk-images" title="' + Common._e("Add a friend") + '"></a>' +
- '</div>' +
-
- '<div class="roster-join roster-icon">' +
- '<a href="#" class="join talk-images" title="' + Common._e("Join a chat") + '"></a>' +
- '</div>' +
-
- '<div class="roster-groupchat roster-icon">' +
- '<a href="#" class="groupchat talk-images" title="' + Common._e("Your groupchats") + '"></a>' +
- '</div>' +
-
- '<div class="roster-muji roster-icon muji-hidable">' +
- '<a href="#" class="muji talk-images" title="' + Common._e("Audio/video conference") + '"></a>' +
- '</div>' +
-
- '<div class="roster-more roster-icon">' +
- '<a href="#" class="more talk-images" title="' + Common._e("More stuff") + '"></a>' +
- '</div>' +
-
- '<div style="clear: both;"></div>' +
- '</div>' +
- '</div>';
-
- html +=
- '<div id="my-infos">' +
- '<div class="content">' +
- '<div class="element f-presence ibubble">' +
- '<a href="#" class="icon picker disabled" data-value="available">' +
- '<span class="talk-images"></span>' +
- '</a>' +
-
- '<input id="presence-status" type="text" placeholder="' + Common._e("Status") + '" disabled="" />' +
- '</div>';
-
- if(!anonymous) html +=
- '<div class="element f-mood pep-hidable ibubble">' +
- '<a href="#" class="icon picker" data-value="happy">' +
- '<span class="talk-images"></span>' +
- '</a>' +
-
- '<input id="mood-text" type="text" placeholder="' + Common._e("Mood") + '" />' +
- '</div>' +
-
- '<div class="element f-activity pep-hidable ibubble">' +
- '<a href="#" class="icon picker" data-value="exercising">' +
- '<span class="talk-images activity-exercising"></span>' +
- '</a>' +
-
- '<input id="activity-text" type="text" placeholder="' + Common._e("Activity") + '" />' +
- '</div>';
-
- html +=
- '</div>' +
- '</div>' +
- '</div>' +
-
- '<div id="right-content">' +
- '<div id="page-switch">' +
- '<div class="chans">';
- if(!anonymous) html +=
- '<div class="channel switcher activechan" onclick="return Interface.switchChan(\'channel\');">' +
- '<div class="icon talk-images"></div>' +
-
- '<div class="name">' + Common._e("Channel") + '</div>' +
- '</div>';
-
- html +=
- '</div>';
-
- if(anonymous) html +=
- '<div class="join ibubble">' +
- '<div class="join-button talk-images" onclick="return Interface.loadJoinGroupchat();" title="' + Common._e("Join groupchat") + '"></div>' +
- '</div>';
-
- html +=
- '<div class="more ibubble">' +
- '<div class="more-button talk-images" onclick="return Interface.loadChatSwitch();" title="' + Common._e("All tabs") + '"></div>' +
- '</div>' +
- '</div>' +
-
- '<div id="page-engine">';
- if(!anonymous) html +=
- '<div id="channel" class="page-engine-chan" style="display: block;">' +
- '<div class="top mixed ' + hex_md5(Common.getXID()) + '">' +
- '<div class="avatar-container">' +
- '<img class="avatar" src="' + './images/others/default-avatar.png' + '" alt="" />' +
- '</div>' +
-
- '<div class="update">' +
- '<p>' + Common._e("What\'s up with you?") + '</p>' +
-
- '<div class="microblog-body">' +
- '<input class="focusable" type="text" name="microblog_body" placeholder="' + Common._e("Type something you want to share with your friends...") + '" disabled="" />' +
- '</div>' +
-
- '<div class="one-microblog-icon ibubble">' +
- '<a href="#" onclick="return Bubble.show(\'#attach\');" title="' + Common._e("Attach a file") + '" class="postit attach talk-images"></a>' +
-
- '<form id="attach" class="bubble hidable" action="./server/file-share.php" method="post" enctype="multipart/form-data">' +
- '<div class="attach-subarrow talk-images"></div>' +
-
- '<div class="attach-subitem">' +
- '<p class="attach-p">' + Common._e("Attach a file") + '</p>' +
- Interface.generateFileShare() +
- '</div>' +
- '</form>' +
- '</div>' +
- '</div>' +
- '</div>' +
-
- '<div class="content mixed"></div>' +
-
- '<div class="footer">' +
- '<div class="sync talk-images">' + Common._e("You are synchronized with your network.") + '</div>' +
-
- '<div class="unsync talk-images">' + Common._e("Cannot send anything: you can only receive notices!") + '</div>' +
-
- '<div class="fetch wait-small">' + Common._e("Fetching the social channel...") + '</div>' +
- '</div>' +
- '</div>';
-
- html +=
- '</div>' +
- '</div>' +
- '</div>' +
- '</div>';
-
- // Create the HTML code
- $('body').prepend(html);
-
- // Adapt the roster size
- Roster.adapt();
-
- // Create JS events
- self.events();
-
- // Start the auto idle functions
- Presence.liveIdle();
-
- return true;
- } catch(e) {
- Console.error('Talk.create', e);
- }
-
- };
-
-
- /**
- * Destroys the talkpage code
- * @public
- * @return {undefined}
- */
- self.destroy = function() {
-
- try {
- // Reset our database
- DataStore.resetDB();
-
- // Reset some vars
- STANZA_ID = 1;
- Roster.blist_all = false;
- Presence.first_sent = false;
- Search.search_filtered = false;
- Avatar.pending = [];
- Groupchat.join_suggest = [];
-
- // Kill all timers, exept the board ones
- $('*:not(#board .one-board)').stopTime();
-
- // Kill the auto idle functions
- Presence.dieIdle();
-
- // We renitalise the html markup as its initiale look
- $('.removable').remove();
- Interface.title('home');
-
- // Finally we show the homepage
- $('#home').show();
- } catch(e) {
- Console.error('Talk.destroy', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/tooltip.js b/app/javascripts/tooltip.js
deleted file mode 100644
index 97bab6f9..00000000
--- a/app/javascripts/tooltip.js
+++ /dev/null
@@ -1,629 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the tooltip JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Tooltip = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Creates a tooltip code
- * @public
- * @param {string} xid
- * @param {string} hash
- * @param {string} type
- * @return {boolean}
- */
- self.create = function(xid, hash, type) {
-
- try {
- // Path to the element
- var path = '#' + hash;
- var path_tooltip = path + ' .chat-tools-' + type;
- var path_bubble = path_tooltip + ' .bubble-' + type;
-
- // Yet exists?
- if(Common.exists(path_bubble)) {
- return false;
- }
-
- // Generates special tooltip HTML code
- var title = '';
- var content = '';
-
- switch(type) {
- // Smileys
- case 'smileys':
- title = Common._e("Smiley insertion");
- content = Smileys.links(hash);
-
- break;
-
- // Style
- case 'style':
- title = Common._e("Change style");
-
- // Generate fonts list
- var fonts = {
- 'arial': 'Arial, Helvetica, sans-serif',
- 'arial-black': '\'Arial Black\', Gadget, sans-serif',
- 'bookman-old-style': '\'Bookman Old Style\', serif',
- 'comic-sans-ms': '\'Comic Sans MS\', cursive',
- 'courier': 'Courier, monospace',
- 'courier-new': '\'Courier New\', Courier, monospace',
- 'garamond': 'Garamond, serif',
- 'georgia': 'Georgia, serif',
- 'impact': 'Impact, Charcoal, sans-serif',
- 'lucida-console': '\'Lucida Console\', Monaco, monospace',
- 'lucida-sans-unicode': '\'Lucida Sans Unicode\', \'Lucida Grande\', sans-serif',
- 'ms-sans-serif': '\'MS Sans Serif\', Geneva, sans-serif',
- 'ms-serif': '\'MS Serif\', \'New York\', sans-serif',
- 'palatino-linotype': '\'Palatino Linotype\', \'Book Antiqua\', Palatino, serif',
- 'symbol': 'Symbol, sans-serif',
- 'tahoma': 'Tahoma, Geneva, sans-serif',
- 'times-new-roman': '\'Times New Roman\', Times, serif',
- 'trebuchet-ms': '\'Trebuchet MS\', Helvetica, sans-serif',
- 'verdana': 'Verdana, Geneva, sans-serif',
- 'webdings': 'Webdings, sans-serif',
- 'wingdings': 'Wingdings, \'Zapf Dingbats\', sans-serif'
- };
-
- var fonts_html = '<div class="font-list">';
-
- // No fonts
- fonts_html += '<a href="#">' + Common._e("None") + '</a>';
-
- // Available fonts
- $.each(fonts, function(id_name, full_name) {
- // Generate short name
- var short_name = full_name;
-
- if(short_name.match(/,/)) {
- var name_split = short_name.split(',');
- short_name = $.trim(name_split[0]);
- }
-
- short_name = short_name.replace(/([^a-z0-9\s]+)/gi, '');
-
- // Add this to the HTML
- fonts_html += '<a href="#" data-value="' + Common.encodeQuotes(id_name) + '" data-font="' + Common.encodeQuotes(full_name) + '" style="font-family: ' + Common.encodeQuotes(full_name) + ';">' + short_name.htmlEnc() + '</a>';
- });
- fonts_html += '</div>';
-
- content =
- '<label class="font">' +
- '<div class="font-icon talk-images"></div>' +
-
- '<div class="fontsize-change">' +
- '<a class="fontsize-current" href="#">12</a>' +
- '<div class="fontsize-list">' +
- '<a href="#" class="reset talk-images"></a>' +
- '<a href="#" data-value="10" style="font-size: 10px;">10</a>' +
- '<a href="#" data-value="12" style="font-size: 12px;">12</a>' +
- '<a href="#" data-value="14" style="font-size: 14px;">14</a>' +
- '<a href="#" data-value="16" style="font-size: 16px;">16</a>' +
- '<a href="#" data-value="18" style="font-size: 18px;">18</a>' +
- '</div>' +
- '</div>' +
-
- '<div class="font-change">' +
- '<a class="font-current" href="#">' + Common._e("None") + '</a>' +
- fonts_html +
- '</div>' +
- '</label>' +
- '<label class="bold"><input type="checkbox" class="bold" />' + Common._e("Text in bold") + '</label>' +
- '<label class="italic"><input type="checkbox" class="italic" />' + Common._e("Text in italic") + '</label>' +
- '<label class="underline"><input type="checkbox" class="underline" />' + Common._e("Underlined text") + '</label>' +
- '<a href="#" class="color" style="background-color: #b10808; clear: both;" data-color="b10808"></a>' +
- '<a href="#" class="color" style="background-color: #e5860c;" data-color="e5860c"></a>' +
- '<a href="#" class="color" style="background-color: #f0f30e;" data-color="f0f30e"></a>' +
- '<a href="#" class="color" style="background-color: #009a04;" data-color="009a04"></a>' +
- '<a href="#" class="color" style="background-color: #0ba9a0;" data-color="0ba9a0"></a>' +
- '<a href="#" class="color" style="background-color: #04228f;" data-color="04228f"></a>' +
- '<a href="#" class="color" style="background-color: #9d0ab7;" data-color="9d0ab7"></a>' +
- '<div class="color-picker">' +
- '<a href="#" class="color-more talk-images"></a>' +
- '<div class="color-hex">' +
- '<span class="hex-begin">#</span>' +
- '<input class="hex-value" type="text" maxlength="6" placeholder="e1e1e1" />' +
- '</div>' +
- '</div>';
-
- break;
-
- // File send
- case 'file':
- title = Common._e("Send a file");
- content = '<p style="margin-bottom: 8px;">' + Common._e("Once uploaded, your friend will be prompted to download the file you sent.") + '</p>';
- content += '<form id="oob-upload" action="./server/send.php" method="post" enctype="multipart/form-data">' + Interface.generateFileShare() + '</form>';
-
- break;
-
- // Chat log
- case 'save':
- title = Common._e("Save chat");
- content = '<p style="margin-bottom: 8px;">' + Common._e("Click on the following link to get the chat log, and wait. Then click again to get the file.") + '</p>';
-
- // Possible to generate any log?
- if($(path + ' .one-line').size())
- content += '<a href="#" class="tooltip-actionlog">' + Common._e("Generate file!") + '</a>';
- else
- content += '<span class="tooltip-nolog">' + Common._e("This chat is empty!") + '</span>';
-
- break;
- }
-
- // Generates general tooltip HTML code
- var html =
- '<div class="tooltip bubble-' + type + '">' +
- '<div class="tooltip-subitem">' +
- '<p class="tooltip-top">' + title + '</p>' +
- content +
- '</div>' +
-
- '<div class="tooltip-subarrow talk-images"></div>' +
- '</div>';
-
- // Append the HTML code
- $(path_tooltip).append(html);
-
- // Special events
- switch(type) {
- // Smileys
- case 'smileys':
- // Apply click event on smiley links
- $(path_tooltip + ' a.emoticon').click(function() {
- return Interface.insertSmiley($(this).attr('data-smiley'), hash);
- });
-
- break;
-
- // Style
- case 'style':
- // Paths to items
- var message_area = path + ' .message-area';
- var bubble_style = path_tooltip + ' .bubble-style';
- var style = bubble_style + ' input:checkbox';
- var colors = bubble_style + ' a.color';
- var font_current = bubble_style + ' a.font-current';
- var font_list = bubble_style + ' div.font-list';
- var font_select = font_list + ' a';
- var fontsize_current = bubble_style + ' a.fontsize-current';
- var fontsize_list = bubble_style + ' div.fontsize-list';
- var fontsize_select = fontsize_list + ' a';
- var color = bubble_style + ' div.color-picker';
- var color_more = color + ' a.color-more';
- var color_hex = color + ' div.color-hex';
-
- // Click event on style bubble
- $(bubble_style).click(function() {
- // Hide font selector if opened
- if($(font_list).is(':visible')) {
- $(font_current).click();
- }
-
- // Hide font-size selector if opened
- if($(fontsize_list).is(':visible')) {
- $(fontsize_current).click();
- }
-
- // Hide color selector if opened
- if($(color_hex).is(':visible')) {
- $(color_more).click();
- }
- });
-
- // Click event on font picker
- $(font_current).click(function() {
- var this_sel = $(this);
-
- // The clicked color is yet selected
- if($(font_list).is(':visible')) {
- this_sel.parent().removeClass('listed');
- } else {
- this_sel.parent().addClass('listed');
- }
-
- return false;
- });
-
- // Click event on a new font in the picker
- $(font_select).click(function() {
- var this_sel = $(this);
-
- // No font selected
- if(!this_sel.attr('data-value')) {
- $(font_current).removeAttr('data-font')
- .removeAttr('data-value')
- .text(Common._e("None"));
-
- $(message_area).removeAttr('data-font');
- } else {
- $(font_current).attr('data-font', this_sel.attr('data-font'))
- .attr('data-value', this_sel.attr('data-value'))
- .text($(font_list).find('a[data-value="' + this_sel.attr('data-value') + '"]').text());
-
- $(message_area).attr('data-font', this_sel.attr('data-value'));
- }
-
- return false;
- });
-
- // Click event on font-size picker
- $(fontsize_current).click(function() {
- var this_sel = $(this);
-
- // The clicked color is yet selected
- if($(fontsize_list).is(':visible')) {
- this_sel.parent().removeClass('listed');
- } else {
- this_sel.parent().addClass('listed');
- }
-
- return false;
- });
-
- // Click event on a new font-size in the picker
- $(fontsize_select).click(function() {
- var this_sel = $(this);
-
- // No font-size selected
- if(!this_sel.attr('data-value')) {
- $(fontsize_current).removeAttr('data-value').text(Common._e("16"));
- $(message_area).removeAttr('data-fontsize');
- }
-
- // A font-size is defined
- else {
- $(fontsize_current).attr('data-value', this_sel.attr('data-value'))
- .text(this_sel.attr('data-value'));
- $(message_area).attr('data-fontsize', this_sel.attr('data-value'));
- }
-
- return false;
- });
-
- // Click event on color picker
- $(colors).click(function() {
- var this_sel = $(this);
-
- // Reset the manual picker
- $(color_hex).find('input').val('');
-
- // The clicked color is yet selected
- if(this_sel.hasClass('selected')) {
- $(message_area).removeAttr('data-color');
- this_sel.removeClass('selected');
- }
-
- else {
- $(message_area).attr('data-color', this_sel.attr('data-color'));
- $(colors).removeClass('selected');
- this_sel.addClass('selected');
- }
-
- return false;
- });
-
- // Click event on color picker
- $(color_more).click(function() {
- var this_sel = $(this);
-
- // The clicked color is yet selected
- if($(color_hex).is(':visible')) {
- this_sel.parent().removeClass('opened');
- } else {
- this_sel.parent().addClass('opened');
-
- // Focus
- $(document).oneTime(10, function() {
- $(color_hex).find('input').focus();
- });
- }
-
- return false;
- });
-
- // Click event on color hex
- $(color_hex).click(function() {
- return false;
- });
-
- // Keyup event on color picker
- $(color_hex).find('input').keyup(function(e) {
- var this_sel = $(this);
-
- // Submit
- if(e.keyCode == 13) {
- if($(color_hex).is(':visible')) {
- $(color_more).click();
-
- // Focus again on the message textarea
- $(document).oneTime(10, function() {
- $(message_area).focus();
- });
- }
-
- return false;
- }
-
- // Reset current color
- $(message_area).removeAttr('data-color');
- $(colors).removeClass('selected');
-
- // Change value
- var new_value = this_sel.val().replace(/([^a-z0-9]+)/gi, '');
- this_sel.val(new_value);
-
- if(new_value) {
- $(message_area).attr('data-color', new_value);
- }
-
- // Regenerate style
- var style = Message.generateStyle(hash);
-
- // Any style to apply?
- if(style) {
- $(message_area).attr('style', style);
- } else {
- $(message_area).removeAttr('style');
- }
- }).placeholder();
-
- // Change event on text style checkboxes
- $(style).change(function() {
- var this_sel = $(this);
-
- // Get current type
- var style_data = 'data-' + this_sel.attr('class');
-
- // Checked checkbox?
- if(this_sel.filter(':checked').size()) {
- $(message_area).attr(style_data, true);
- } else {
- $(message_area).removeAttr(style_data);
- }
- });
-
- // Update the textarea style when it is changed
- $(style + ', ' + colors + ', ' + font_select + ', ' + fontsize_select).click(function() {
- var style = Message.generateStyle(hash);
-
- // Any style to apply?
- if(style) {
- $(message_area).attr('style', style);
- } else {
- $(message_area).removeAttr('style');
- }
-
- // Focus again on the message textarea
- $(document).oneTime(10, function() {
- $(message_area).focus();
- });
- });
-
- // Load current style
- self.loadStyleSelector(hash);
-
- break;
-
- // File send
- case 'file':
- // File upload vars
- var oob_upload_options = {
- dataType: 'xml',
- beforeSubmit: OOB.waitUpload,
- success: OOB.handleUpload
- };
-
- // Upload form submit event
- $(path_tooltip + ' #oob-upload').submit(function() {
- var this_sel = $(this);
-
- if($(path_tooltip + ' #oob-upload input[type="file"]').val()) {
- this_sel.ajaxSubmit(oob_upload_options);
- }
-
- return false;
- });
-
- // Upload input change event
- $(path_tooltip + ' #oob-upload input[type="file"]').change(function() {
- var this_sel = $(this);
-
- if(this_sel.val()) {
- $(path_tooltip + ' #oob-upload').ajaxSubmit(oob_upload_options);
- }
-
- return false;
- });
-
- // Input click event
- $(path_tooltip + ' #oob-upload input[type="file"], ' + path_tooltip + ' #oob-upload input[type="submit"]').click(function() {
- if(Common.exists(path_tooltip + ' #oob-upload input[type="reset"]')) {
- return;
- }
-
- // Lock the bubble
- $(path_bubble).addClass('locked');
-
- // Add a cancel button
- $(this).after('<input type="reset" value="' + Common._e("Cancel") + '" />');
-
- // Cancel button click event
- $(path_tooltip + ' #oob-upload input[type="reset"]').click(function() {
- // Remove the bubble
- $(path_bubble).removeClass('locked');
- self.destroy(hash, 'file');
- });
- });
-
- break;
-
- // Chat log
- case 'save':
- // Chat log generation click event
- $(path_tooltip + ' .tooltip-actionlog').click(function() {
- // Replace it with a waiting notice
- $(this).replaceWith('<span class="tooltip-waitlog">' + Common._e("Please wait...") + '</span>');
-
- Interface.generateChatLog(xid, hash);
-
- return false;
- });
-
- break;
- }
-
- return true;
- } catch(e) {
- Console.error('Tooltip.create', e);
- }
-
- };
-
-
- /**
- * Destroys a tooltip code
- * @public
- * @param {string} hash
- * @param {string} type
- * @return {undefined}
- */
- self.destroy = function(hash, type) {
-
- try {
- $('#' + hash + ' .chat-tools-content:not(.mini) .bubble-' + type + ':not(.locked)').remove();
- } catch(e) {
- Console.error('Tooltip.destroy', e);
- }
-
- };
-
-
- /**
- * Applies the page-engine tooltips hover event
- * @public
- * @param {string} xid
- * @param {string} hash
- * @param {string} type
- * @return {undefined}
- */
- self.hover = function(xid, hash, type) {
-
- try {
- $('#' + hash + ' .chat-tools-' + type).hover(function() {
- self.create(xid, hash, type);
- }, function() {
- self.destroy(hash, type);
- });
- } catch(e) {
- Console.error('Tooltip.hover', e);
- }
-
- };
-
-
- /**
- * Applies the hover function to the needed things
- * @public
- * @param {string} xid
- * @param {string} hash
- * @return {undefined}
- */
- self.icons = function(xid, hash) {
-
- try {
- // Hover events
- self.hover(xid, hash, 'smileys');
- self.hover(xid, hash, 'style');
- self.hover(xid, hash, 'file');
- self.hover(xid, hash, 'save');
-
- // Click events
- $('#' + hash + ' a.chat-tools-content, #' + hash + ' .chat-tools-content a').click(function() {
- return false;
- });
- } catch(e) {
- Console.error('Tooltip.icons', e);
- }
-
- };
-
-
- /**
- * Loads the style selector options
- * @public
- * @param {string} hash
- * @return {undefined}
- */
- self.loadStyleSelector = function(hash) {
-
- try {
- // Define the vars
- var path = '#' + hash;
- var message_area = $(path + ' .message-area');
- var bubble_style = path + ' .bubble-style';
- var font = message_area.attr('data-font');
- var font_select = $(bubble_style + ' div.font-list').find('a[data-value="' + font + '"]');
- var fontsize = message_area.attr('data-fontsize');
- var color = message_area.attr('data-color');
-
- // Apply message font
- if(font) {
- $(bubble_style + ' a.font-current').attr('data-value', font)
- .attr('data-font', font_select.attr('data-font'))
- .text(font_select.text());
- }
-
- // Apply message font-size
- if(fontsize) {
- $(bubble_style + ' a.fontsize-current').attr('data-value', fontsize)
- .text(fontsize);
- }
-
- // Apply the options to the style selector
- $(bubble_style + ' input[type="checkbox"]').each(function() {
- var this_sel = $(this);
-
- // Current input enabled?
- if(message_area.attr('data-' + this_sel.attr('class'))) {
- this_sel.attr('checked', true);
- }
- });
-
- // Apply message color
- if(color) {
- if($(bubble_style + ' a.color[data-color="' + color + '"]').size()) {
- $(bubble_style + ' a.color[data-color="' + color + '"]').addClass('selected');
- } else {
- $(bubble_style + ' div.color-hex input.hex-value').val(color);
- }
- }
- } catch(e) {
- Console.error('Tooltip.loadStyleSelector', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/userinfos.js b/app/javascripts/userinfos.js
deleted file mode 100644
index 87262a5f..00000000
--- a/app/javascripts/userinfos.js
+++ /dev/null
@@ -1,632 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the user-infos JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var UserInfos = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Opens the user-infos popup
- * @public
- * @param {string} xid
- * @return {boolean}
- */
- self.open = function(xid) {
-
- try {
- // Can show shortcuts?
- var shortcuts = '';
-
- if(xid != Common.getXID()) {
- shortcuts = '<div class="shortcuts">' +
- '<a href="#" class="message talk-images" title="' + Common._e("Send him/her a message") + '" onclick="UserInfos.close(); return Inbox.composeMessage(\'' + Utils.encodeOnclick(xid) + '\');"></a>' +
- '<a href="#" class="chat talk-images" title="' + Common._e("Start a chat with him/her") + '" onclick="UserInfos.close(); return Chat.checkCreate(\'' + Utils.encodeOnclick(xid) + '\', \'chat\');"></a>' +
- '<a href="#" class="command talk-images" title="' + Common._e("Command") + '" onclick="UserInfos.close(); return AdHoc.retrieve(\'' + Utils.encodeOnclick(xid) + '\');"></a>' +
- '</div>';
- }
-
- // Popup HTML content
- var html =
- '<div class="top">' + Common._e("User profile") + '</div>' +
-
- '<div class="tab">' +
- '<a href="#" class="tab-active" data-key="1">' + Common._e("General") + '</a>' +
- '<a href="#" data-key="2">' + Common._e("Advanced") + '</a>' +
- '<a href="#" data-key="3">' + Common._e("Comments") + '</a>' +
- '</div>' +
-
- '<div class="content">' +
- '<div class="lap-active one-lap info1">' +
- '<div class="main-infos">' +
- '<div class="avatar-container">' +
- '<img class="avatar" src="' + './images/others/default-avatar.png' + '" alt="" />' +
- '</div>' +
-
- '<h1 id="BUDDY-FN" class="reset-info">' + Common._e("unknown") + '</h1>' +
- '<h2 class="buddy-xid" class="reset-info">' + Common._e("unknown") + '</h2>' +
- '<h3 class="buddy-last" class="reset-info">' + Common._e("unknown") + '</h3>' +
-
- shortcuts +
- '</div>' +
-
- '<div class="block-infos">' +
- '<div class="one-line"><b class="line-label">' + Common._e("Date of birth") + '</b><span id="BUDDY-BDAY" class="reset-info">' + Common._e("unknown") + '</span></div>' +
-
- '<div class="one-line"><b class="line-label">' + Common._e("E-mail") + '</b><span id="BUDDY-EMAIL-USERID" class="reset-info">' + Common._e("unknown") + '</span></div>' +
-
- '<div class="one-line"><b class="line-label">' + Common._e("Phone") + '</b><span id="BUDDY-TEL-NUMBER" class="reset-info">' + Common._e("unknown") + '</span></div>' +
-
- '<div class="one-line"><b class="line-label">' + Common._e("Website") + '</b><span id="BUDDY-URL" class="reset-info">' + Common._e("unknown") + '</span></div>' +
- '</div>' +
-
- '<div class="block-infos">' +
- '<div class="one-line"><b class="line-label">' + Common._e("Client") + '</b><span id="BUDDY-CLIENT" class="reset-info">' + Common._e("unknown") + '</span></div>' +
-
- '<div class="one-line"><b class="line-label">' + Common._e("System") + '</b><span id="BUDDY-SYSTEM" class="reset-info">' + Common._e("unknown") + '</span></div>' +
-
- '<div class="one-line"><b class="line-label">' + Common._e("Local time") + '</b><span id="BUDDY-TIME" class="reset-info">' + Common._e("unknown") + '</span></div>' +
- '</div>' +
- '</div>' +
-
- '<div class="one-lap info2">' +
- '<div class="block-infos">' +
- '<div class="one-line"><b class="line-label">' + Common._e("Street") + '</b><span id="BUDDY-ADR-STREET" class="reset-info">' + Common._e("unknown") + '</span></div>' +
-
- '<div class="one-line"><b class="line-label">' + Common._e("City") + '</b><span id="BUDDY-ADR-LOCALITY" class="reset-info">' + Common._e("unknown") + '</span></div>' +
-
- '<div class="one-line"><b class="line-label">' + Common._e("Postal code") + '</b><span id="BUDDY-ADR-PCODE" class="reset-info">' + Common._e("unknown") + '</span></div>' +
-
- '<div class="one-line"><b class="line-label">' + Common._e("Country") + '</b><span id="BUDDY-ADR-CTRY" class="reset-info">' + Common._e("unknown") + '</span></div>' +
- '</div>' +
-
- '<div class="block-infos">' +
- '<div class="one-line"><b class="line-label">' + Common._e("Biography") + '</b><span id="BUDDY-DESC" class="reset-info">' + Common._e("unknown") + '</span></div>' +
- '</div>' +
- '</div>' +
-
- '<div class="one-lap info3">' +
- '<textarea class="rosternotes" rows="8" cols="60"></textarea>' +
- '</div>' +
- '</div>' +
-
- '<div class="bottom">' +
- '<div class="wait wait-medium"></div>' +
-
- '<a href="#" class="finish">' + Common._e("Close") + '</a>' +
- '</div>';
-
- // Create the popup
- Popup.create('userinfos', html);
-
- // Associate the events
- UserInfos.instance();
-
- // We retrieve the user's vcard
- self.retrieve(xid);
- } catch(e) {
- Console.error('UserInfos.open', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Closes the user-infos popup
- * @public
- * @return {boolean}
- */
- self.close = function() {
-
- try {
- // Send the buddy comments
- self.sendBuddyComments();
-
- // Destroy the popup
- Popup.destroy('userinfos');
- } catch(e) {
- Console.error('UserInfos.close', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Gets the user-infos
- * @public
- * @param {string} xid
- * @return {undefined}
- */
- self.retrieve = function(xid) {
-
- try {
- // We setup the waiting indicator
- markers = 'vcard last';
-
- // We put the user's XID
- $('#userinfos .buddy-xid').text(xid);
-
- // We get the vCard
- vCard.get(xid, 'buddy');
-
- // Get the highest resource for this XID
- var cXID = Presence.highestPriority(xid);
- var pXID = xid;
-
- // If the user is logged in
- if(cXID) {
- // Change the XID
- pXID = cXID;
-
- // We request the user's system infos
- self.query(cXID, 'version');
-
- // We request the user's local time
- self.query(cXID, 'time');
-
- // Add these to the markers
- markers += ' version time';
- }
-
- // We request the user's last activity
- self.query(pXID, 'last');
-
- // Add the markers
- $('#userinfos .content').addClass(markers);
-
- // We request all the user's comments
- self.displayBuddyComments(xid);
- } catch(e) {
- Console.error('UserInfos.retrieve', e);
- }
-
- };
-
-
- /**
- * Builds the asked user-infos query
- * @public
- * @param {string} xid
- * @param {string} mode
- * @return {undefined}
- */
- self.query = function(xid, mode) {
-
- try {
- // Generate a session ID
- var id = genID();
- $('#userinfos').attr('data-' + mode, id);
-
- // New IQ
- var iq = new JSJaCIQ();
-
- iq.setID(id);
- iq.setType('get');
- iq.setTo(xid);
-
- // Last activity query
- if(mode == 'last') {
- iq.setQuery(NS_LAST);
- con.send(iq, self.lastActivityUserInfos);
- }
-
- // Time query
- else if(mode == 'time') {
- iq.appendNode('time', {'xmlns': NS_URN_TIME});
- con.send(iq, self.localTime);
- }
-
- // Version query
- else if(mode == 'version') {
- iq.setQuery(NS_VERSION);
- con.send(iq, self.version);
- }
- } catch(e) {
- Console.error('UserInfos.query', e);
- }
-
- };
-
-
- /**
- * Checks if the waiting item can be hidden
- * @public
- * @return {undefined}
- */
- self.vCard = function() {
-
- try {
- $('#userinfos .content').removeClass('vcard');
- self.wait();
- } catch(e) {
- Console.error('UserInfos.vCard', e);
- }
-
- };
-
-
- /**
- * Displays the buddy comments
- * @public
- * @param {string} xid
- * @return {undefined}
- */
- self.displayBuddyComments = function(xid) {
-
- try {
- var value = DataStore.getDB(Connection.desktop_hash, 'rosternotes', xid);
-
- if(value) {
- $('#userinfos .rosternotes').val(value);
- }
- } catch(e) {
- Console.error('UserInfos.displayBuddyComments', e);
- }
-
- };
-
-
- /**
- * Displays the user's last activity result
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.lastActivity = function(iq) {
-
- try {
- // Extract the request ID
- var id = iq.getID();
- var path = '#userinfos[data-last="' + id + '"]';
-
- // End if session does not exist
- if(!Common.exists(path)) {
- return;
- }
-
- if(iq && (iq.getType() == 'result')) {
- // Get the values
- var from = Common.fullXID(Common.getStanzaFrom(iq));
- var seconds = $(iq.getNode()).find('query').attr('seconds');
-
- // Any seconds?
- if(seconds !== undefined) {
- // Initialize the parsing
- var last;
- seconds = parseInt(seconds);
-
- // Active user
- if(seconds <= 60) {
- last = Common._e("User currently active");
- }
-
- // Inactive user
- else {
- // Parse the date
- var date_now = new Date();
- var time_now = date_now.getTime();
- var date_last = new Date(date_now - (seconds * 1000));
- var date = date_last.toLocaleString();
-
- // Offline user
- if(from.indexOf('/') == -1) {
- last = Common.printf(Common._e("Last seen: %s"), date);
- }
-
- // Online user
- else {
- last = Common.printf(Common._e("Inactive since: %s"), date);
- }
- }
-
- // Append this text
- $('#userinfos .buddy-last').text(last);
- }
-
- Console.log('Last activity received: ' + from);
- }
-
- $('#userinfos .content').removeClass('last');
- self.wait();
- } catch(e) {
- Console.error('UserInfos.lastActivity', e);
- }
-
- };
-
-
- /**
- * Displays the user's software version result
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.version = function(iq) {
-
- try {
- // Extract the request ID
- var id = iq.getID();
- var path = '#userinfos[data-version="' + id + '"]';
-
- // End if session does not exist
- if(!Common.exists(path)) {
- return;
- }
-
- // Extract the reply data
- if(iq && (iq.getType() == 'result')) {
- // Get the values
- var xml = iq.getQuery();
- var name = $(xml).find('name').text();
- var version = $(xml).find('version').text();
- var os = $(xml).find('os').text();
-
- // Put the values together
- if(name && version) {
- name = name + ' ' + version;
- }
-
- // Display the values
- if(name) {
- $(path + ' #BUDDY-CLIENT').text(name);
- }
-
- if(os) {
- $(path + ' #BUDDY-SYSTEM').text(os);
- }
-
- Console.log('Software version received: ' + Common.fullXID(Common.getStanzaFrom(iq)));
- }
-
- $('#userinfos .content').removeClass('version');
- self.wait();
- } catch(e) {
- Console.error('UserInfos.version', e);
- }
-
- };
-
-
- /**
- * Displays the user's local time result
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.localTime = function(iq) {
-
- try {
- // Extract the request ID
- var id = iq.getID();
- var path = '#userinfos[data-time="' + id + '"]';
-
- // End if session does not exist
- if(!Common.exists(path)) {
- return;
- }
-
- if(iq && (iq.getType() == 'result')) {
- // Get the values
- var xml = iq.getNode();
- var tzo = $(xml).find('tzo').text();
- var utc = $(xml).find('utc').text();
-
- // Any UTC?
- if(utc) {
- // Add the TZO if there's no one
- if(tzo && utc.match(/^(.+)Z$/)) {
- utc = RegExp.$1 + tzo;
- }
-
- // Get the local date string
- var local_string = Date.hrTime(utc);
-
- // Then display it
- $(path + ' #BUDDY-TIME').text(local_string);
- }
-
- Console.log('Local time received: ' + Common.fullXID(Common.getStanzaFrom(iq)));
- }
-
- $('#userinfos .content').removeClass('time');
- self.wait();
- } catch(e) {
- Console.error('UserInfos.localTime', e);
- }
-
- };
-
-
- /**
- * Hides the waiting image if needed
- * @public
- * @return {undefined}
- */
- self.wait = function() {
-
- try {
- var selector = $('#userinfos .content');
-
- if(!selector.hasClass('vcard') && !selector.hasClass('last') && !selector.hasClass('version') && !selector.hasClass('time')) {
- $('#userinfos .wait').hide();
- }
- } catch(e) {
- Console.error('UserInfos.wait', e);
- }
-
- };
-
-
- /**
- * Sends the buddy comments
- * @public
- * @return {boolean}
- */
- self.sendBuddyComments = function() {
-
- try {
- // Update the current value
- var value = $('#userinfos .rosternotes').val();
- var xid = $('#userinfos .buddy-xid').text();
-
- // Necessary to update?
- var old_value = DataStore.getDB(Connection.desktop_hash, 'rosternotes', xid);
-
- if((old_value == value) || (!old_value && !value)) {
- return false;
- }
-
- // Update the database
- DataStore.setDB(Connection.desktop_hash, 'rosternotes', xid, value);
-
- // Send the new buddy storage values
- var iq = new JSJaCIQ();
- iq.setType('set');
- var query = iq.setQuery(NS_PRIVATE);
- var storage = query.appendChild(iq.buildNode('storage', {'xmlns': NS_ROSTERNOTES}));
-
- // We regenerate the XML
- var db_regex = new RegExp(('^' + Connection.desktop_hash + '_') + 'rosternotes' + ('_(.+)'));
-
- for(var i = 0; i < DataStore.storageDB.length; i++) {
- // Get the pointer values
- var current = DataStore.storageDB.key(i);
-
- // If the pointer is on a stored rosternote
- if(current.match(db_regex)) {
- var cur_xid = RegExp.$1;
- var cur_value = DataStore.storageDB.getItem(current);
-
- if(cur_xid && cur_value) {
- storage.appendChild(iq.buildNode('note', {'jid': cur_xid, 'xmlns': NS_ROSTERNOTES}, cur_value));
- }
- }
- }
-
- con.send(iq);
-
- return false;
- } catch(e) {
- Console.error('UserInfos.sendBuddyComments', e);
- }
-
- };
-
-
- /**
- * Switches the user-infos tabs
- * @public
- * @param {string} id
- * @return {boolean}
- */
- self.switchTab = function(id) {
-
- try {
- var userinfos_sel = $('#userinfos');
- var content_sel = userinfos_sel.find('.content');
- var tab_link_sel = userinfos_sel.find('.tab a');
-
- content_sel.find('.one-lap').hide();
- content_sel.find('.info' + id).show();
-
- tab_link_sel.removeClass('tab-active');
- tab_link_sel.filter('[data-key="' + id + '"]').addClass('tab-active');
- } catch(e) {
- Console.error('UserInfos.switchTab', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Gets the user's informations when creating a new chat
- * @public
- * @param {string} hash
- * @param {string} xid
- * @param {string} nick
- * @param {string} type
- * @return {undefined}
- */
- self.get = function(hash, xid, nick, type) {
-
- try {
- // This is a normal chat
- if(type != 'private') {
- // Display the buddy name
- if(nick) {
- $('#' + hash + ' .top .name .bc-name').text(nick);
- $('#page-switch .' + hash + ' .name').text(nick);
- }
-
- // Get the buddy PEP informations
- PEP.displayAll(xid);
- }
-
- // Display the buddy presence
- Presence.funnel(xid, hash);
- } catch(e) {
- Console.error('UserInfos.get', e);
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.instance = function() {
-
- try {
- // Click events
- $('#userinfos .tab a').click(function() {
- var this_sel = $(this);
-
- // Yet active?
- if(this_sel.hasClass('tab-active')) {
- return false;
- }
-
- // Switch to the good tab
- var key = parseInt(this_sel.attr('data-key'));
-
- return self.switchTab(key);
- });
-
- $('#userinfos .bottom .finish').click(function() {
- return self.close();
- });
- } catch(e) {
- Console.error('UserInfos.instance', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/utilities.js b/app/javascripts/utilities.js
deleted file mode 100644
index bf375c17..00000000
--- a/app/javascripts/utilities.js
+++ /dev/null
@@ -1,719 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the utilities JS script for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Authors: Valérian Saliou, olivierm
-
-*/
-
-// Bundle
-var Utils = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Returns whether using HTTPS or not
- * @public
- * @return {boolean}
- */
- self.isHTTPS = function() {
-
- is_https = false;
-
- try {
- if(window.location.href && (window.location.href).match(/^https/i)) {
- is_https = true;
- }
- } catch(e) {
- Console.error('Utils.isHTTPS', e);
- } finally {
- return is_https;
- }
-
- };
-
-
- /**
- * Generates the good storage URL
- * @public
- * @param {string} url
- * @return {string}
- */
- self.generateURL = function(url) {
-
- try {
- // HTTPS not allowed
- if((HTTPS_STORAGE != 'on') && url.match(/^https(.+)/)) {
- url = 'http' + RegExp.$1;
- }
-
- return url;
- } catch(e) {
- Console.error('Utils.generateURL', e);
- }
-
- };
-
-
- /**
- * Disables an input if needed
- * @public
- * @param {string} value
- * @param {string} condition
- * @return {string}
- */
- self.disableInput = function(value, condition) {
-
- try {
- if(value == condition) {
- return ' disabled=""';
- }
-
- return '';
- } catch(e) {
- Console.error('Utils.disableInput', e);
- }
-
- };
-
-
- /**
- * Truncates a string
- * @public
- * @param {string} string
- * @param {number} limit
- * @return {string}
- */
- self.truncate = function(string, limit) {
-
- try {
- // Must truncate the string
- if(string.length > limit) {
- string = string.substr(0, limit) + '...';
- }
-
- return string;
- } catch(e) {
- Console.error('Utils.truncate', e);
- }
-
- };
-
-
- /**
- * Removes the new lines
- * @public
- * @param {string} string
- * @return {string}
- */
- self.noLines = function(string) {
-
- try {
- return string.replace(/\n/g, ' ');
- } catch(e) {
- Console.error('Utils.noLines', e);
- }
-
- };
-
-
- /**
- * Encodes a string for onclick attribute
- * @public
- * @param {string} str
- * @return {undefined}
- */
- self.encodeOnclick = function(str) {
-
- try {
- return (Common.encodeQuotes(str)).replace(/'/g, '\\$&');
- } catch(e) {
- Console.error('Utils.encodeOnclick', e);
- }
-
- };
-
-
- /**
- * Checks whether the passed parameter is a number or not
- * @public
- * @param {number} n
- * @return {boolean}
- */
- self.isNumber = function(n) {
-
- try {
- return !isNaN(parseFloat(n)) && isFinite(n);
- } catch(e) {
- Console.error('Utils.isNumber', e);
- }
-
- };
-
-
- /**
- * Checks if we are in the anonymous mode
- * @public
- * @return {boolean}
- */
- self.isAnonymous = function() {
-
- var is_anonymous = false;
-
- try {
- if(Common.allowedAnonymous() && XMPPLinks.links_var.r) {
- is_anonymous = true;
- }
- } catch(e) {
- Console.error('Utils.isAnonymous', e);
- } finally {
- return is_anonymous;
- }
-
- };
-
-
- /**
- * Checks if this is a private chat user
- * @public
- * @param {string} xid
- * @return {boolean}
- */
- self.isPrivate = function(xid) {
-
- var is_private = false;
-
- try {
- if(Common.exists('[data-xid="' + escape(xid) + '"][data-type="groupchat"]')) {
- is_private = true;
- }
- } catch(e) {
- Console.error('Utils.isPrivate', e);
- } finally {
- return is_private;
- }
-
- };
-
-
- /**
- * Checks if the user browser is obsolete
- * @public
- * @return {boolean}
- */
- self.isObsolete = function() {
-
- try {
- // Get browser name & version
- var browser_name = BrowserDetect.browser;
- var browser_version = BrowserDetect.version;
-
- // No DOM storage
- if(!DataStore.hasDB() || !DataStore.hasPersistent()) {
- return true;
- }
-
- // Obsolete IE
- if((browser_name == 'Explorer') && (browser_version < 8)) {
- return true;
- }
-
- // Obsolete Chrome
- if((browser_name == 'Chrome') && (browser_version < 7)) {
- return true;
- }
-
- // Obsolete Safari
- if((browser_name == 'Safari') && (browser_version < 4)) {
- return true;
- }
-
- // Obsolete Firefox
- if((browser_name == 'Firefox') && (browser_version < 3.5)) {
- return true;
- }
-
- // Obsolete Opera
- if((browser_name == 'Opera') && (browser_version < 9)) {
- return true;
- }
-
- return false;
- } catch(e) {
- Console.error('Utils.isObsolete', e);
-
- return false;
- }
-
- };
-
-
- /**
- * Gets a MUC user XID
- * @public
- * @param {string} room
- * @param {string} nick
- * @return {string}
- */
- self.getMUCUserXID = function(room, nick) {
-
- try {
- return $('div.chat[data-xid="' + escape(room) + '"] div[data-nick="' + escape(nick) + '"]').attr('data-xid');
- } catch(e) {
- Console.error('Utils.getMUCUserXID', e);
- }
-
- };
-
-
- /**
- * Gets a MUC user read XID
- * @public
- * @param {string} room
- * @param {string} nick
- * @return {string}
- */
- self.getMUCUserRealXID = function(room, nick) {
-
- try {
- return $('div.chat[data-xid="' + escape(room) + '"] div[data-nick="' + escape(nick) + '"]').attr('data-realxid');
- } catch(e) {
- Console.error('Utils.getMUCUserRealXID', e);
- }
-
- };
-
-
- /**
- * Gets the server of the user
- * @public
- * @return {string}
- */
- self.getServer = function() {
-
- try {
- // Return the domain of the user
- return con.domain;
- } catch(e) {
- Console.error('Utils.getServer', e);
- }
-
- };
-
-
- /**
- * Gets the password of the user
- * @public
- * @return {string}
- */
- self.getPassword = function() {
-
- try {
- // Return the password of the user
- return con.pass;
- } catch(e) {
- Console.error('Utils.getPassword', e);
- }
-
- };
-
-
- /**
- * Quotes the nick of an user. If a message is given, the nick is inserted at its end.
- * @public
- * @param {string} hash
- * @param {string} nick
- * @param {string} message
- * @return {undefined}
- */
- self.quoteMyNick = function(hash, nick, message) {
-
- try {
- $(document).oneTime(10, function() {
- if (message === undefined || message.length === 0) {
- $('#page-engine #' + hash + ' .message-area').val(nick + ', ').focus();
- } else {
- $('#page-engine #' + hash + ' .message-area').val(message + nick).focus();
- }
- });
- } catch(e) {
- Console.error('Utils.quoteMyNick', e);
- }
-
- };
-
-
- /**
- * Return the file category
- * @public
- * @param {string} ext
- * @return {string}
- */
- self.fileCategory = function(ext) {
-
- try {
- var cat;
-
- switch(ext) {
- // Images
- case 'jpg':
- case 'jpeg':
- case 'png':
- case 'bmp':
- case 'gif':
- case 'tif':
- case 'svg':
- case 'ico':
- case 'psp':
- case 'psd':
- case 'psb':
- case 'xcf':
- cat = 'image';
-
- break;
-
- // Videos
- case 'ogv':
- case 'ogg':
- case 'mkv':
- case 'avi':
- case 'mov':
- case 'mp4':
- case 'm4v':
- case 'wmv':
- case 'asf':
- case 'mpg':
- case 'mpeg':
- case 'ogm':
- case 'rmvb':
- case 'rmv':
- case 'qt':
- case 'flv':
- case 'ram':
- case '3gp':
- case 'avc':
- cat = 'video';
-
- break;
-
- // Sounds
- case 'oga':
- case 'mka':
- case 'flac':
- case 'mp3':
- case 'wav':
- case 'm4a':
- case 'wma':
- case 'rmab':
- case 'rma':
- case 'bwf':
- case 'aiff':
- case 'caf':
- case 'cda':
- case 'atrac':
- case 'vqf':
- case 'au':
- case 'aac':
- case 'm3u':
- case 'mid':
- case 'mp2':
- case 'snd':
- case 'voc':
- cat = 'audio';
-
- break;
-
- // Documents
- case 'pdf':
- case 'odt':
- case 'ott':
- case 'sxw':
- case 'stw':
- case 'ots':
- case 'sxc':
- case 'stc':
- case 'sxi':
- case 'sti':
- case 'pot':
- case 'odp':
- case 'ods':
- case 'doc':
- case 'docx':
- case 'docm':
- case 'xls':
- case 'xlsx':
- case 'xlsm':
- case 'xlt':
- case 'ppt':
- case 'pptx':
- case 'pptm':
- case 'pps':
- case 'odg':
- case 'otp':
- case 'sxd':
- case 'std':
- case 'std':
- case 'rtf':
- case 'txt':
- case 'htm':
- case 'html':
- case 'shtml':
- case 'dhtml':
- case 'mshtml':
- cat = 'document';
-
- break;
-
- // Packages
- case 'tgz':
- case 'gz':
- case 'tar':
- case 'ar':
- case 'cbz':
- case 'jar':
- case 'tar.7z':
- case 'tar.bz2':
- case 'tar.gz':
- case 'tar.lzma':
- case 'tar.xz':
- case 'zip':
- case 'xz':
- case 'rar':
- case 'bz':
- case 'deb':
- case 'rpm':
- case '7z':
- case 'ace':
- case 'cab':
- case 'arj':
- case 'msi':
- cat = 'package';
-
- break;
-
- // Others
- default:
- cat = 'other';
-
- break;
- }
-
- return cat;
- } catch(e) {
- Console.error('Utils.fileCategory', e);
- }
-
- };
-
-
- /**
- * Registers Jappix as the default XMPP links handler
- * @public
- * @return {boolean}
- */
- self.xmppLinksHandler = function() {
-
- try {
- navigator.registerProtocolHandler('xmpp', JAPPIX_LOCATION + '?x=%s', SERVICE_NAME);
-
- return true;
- } catch(e) {
- Console.error('Utils.xmppLinksHandler', e);
-
- return false;
- }
-
- };
-
-
- /**
- * Checks if a value exists in array
- * @public
- * @param {object} array
- * @param {string} value
- * @return {boolean}
- */
- self.existArrayValue = function(array, value) {
-
- val_exists = false;
-
- try {
- // Loop in the array
- for(var i in array) {
- if(array[i] == value) {
- val_exists = true;
- break;
- }
- }
- } catch(e) {
- Console.error('Utils.existArrayValue', e);
- } finally {
- return val_exists;
- }
-
- };
-
-
- /**
- * Removes a value from an array
- * @public
- * @param {object} array
- * @param {string} value
- * @return {boolean}
- */
- self.removeArrayValue = function(array, value) {
-
- was_removed = false;
-
- try {
- for(var i in array) {
- // It matches, remove it!
- if(array[i] == value) {
- array.splice(i, 1);
-
- was_removed = true;
- }
- }
- } catch(e) {
- Console.error('Utils.removeArrayValue', e);
- } finally {
- return was_removed;
- }
-
- };
-
-
- /**
- * Removes duplicate values from array
- * @public
- * @param {object} arr
- * @return {object}
- */
- self.uniqueArrayValues = function(arr) {
-
- try {
- var a = arr.concat();
-
- for(var i = 0; i < a.length; ++i) {
- for(var j = i + 1; j < a.length; ++j) {
- if(a[i] === a[j]) {
- a.splice(j--, 1);
- }
- }
- }
-
- return a;
- } catch(e) {
- Console.error('Utils.uniqueArrayValues', e);
- }
-
- };
-
-
- /**
- * Converts a string to an array
- * @public
- * @param {string} string
- * @return {object}
- */
- self.stringToArray = function(string) {
-
- try {
- var array = [];
-
- // Any string to convert?
- if(string) {
- // More than one item
- if(string.match(/,/gi)) {
- var string_split = string.split(',');
-
- for(var i in string_split) {
- if(string_split[i]) {
- array.push(string_split[i]);
- } else {
- array.push('');
- }
- }
- }
-
- // Only one item
- else
- array.push(string);
- }
-
- return array;
- } catch(e) {
- Console.error('Utils.stringToArray', e);
- }
-
- };
-
-
- /**
- * Get the index of an array value
- * @public
- * @param {object} array
- * @param {string} value
- * @return {number}
- */
- self.indexArrayValue = function(array, value) {
-
- try {
- // Nothing?
- if(!array || !array.length) {
- return 0;
- }
-
- // Read the index of the value
- var index = 0;
-
- for(var i = 0; i < array.length; i++) {
- if(array[i] == value) {
- index = i;
-
- break;
- }
- }
-
- return index;
- } catch(e) {
- Console.error('Utils.indexArrayValue', e);
- }
-
- };
-
-
- /**
- * Capitalizes the first letter of a string
- * @public
- * @param {string} string
- * @return {string}
- */
- self.capitaliseFirstLetter = function(string) {
-
- try {
- return string.charAt(0).toUpperCase() + string.slice(1);
- } catch(e) {
- Console.error('Utils.capitaliseFirstLetter', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();
-
-var JappixUtils = Utils; \ No newline at end of file
diff --git a/app/javascripts/vcard.js b/app/javascripts/vcard.js
deleted file mode 100644
index bae77a64..00000000
--- a/app/javascripts/vcard.js
+++ /dev/null
@@ -1,962 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the vCard JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou, Maranda
-
-*/
-
-// Bundle
-var vCard = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Opens the vCard popup
- * @public
- * @return {boolean}
- */
- self.open = function() {
-
- try {
- // Popup HTML content
- var html =
- '<div class="top">' + Common._e("Your profile") + '</div>' +
-
- '<div class="tab">' +
- '<a href="#" class="tab-active" data-key="1">' + Common._e("Identity") + '</a>' +
- '<a href="#" data-key="2">' + Common._e("Profile image") + '</a>' +
- '<a href="#" data-key="3">' + Common._e("Others") + '</a>' +
- '</div>' +
-
- '<div class="content">' +
- '<div id="lap1" class="lap-active one-lap forms">' +
- '<fieldset>' +
- '<legend>' + Common._e("Personal") + '</legend>' +
-
- '<label for="USER-FN">' + Common._e("Complete name") + '</label>' +
- '<input type="text" id="USER-FN" data-vcard4="fn-text" class="vcard-item" placeholder="John Locke" />' +
-
- '<label for="USER-NICKNAME">' + Common._e("Nickname") + '</label>' +
- '<input type="text" id="USER-NICKNAME" data-vcard4="nickname-text" class="vcard-item" placeholder="Jo" />' +
-
- '<label for="USER-N-GIVEN">' + Common._e("First name") + '</label>' +
- '<input type="text" id="USER-N-GIVEN" data-vcard4="n-given" class="vcard-item" placeholder="John" />' +
-
- '<label for="USER-N-FAMILY">' + Common._e("Last name") + '</label>' +
- '<input type="text" id="USER-N-FAMILY" data-vcard4="n-surname" class="vcard-item" placeholder="Locke" />' +
-
- '<label for="USER-BDAY">' + Common._e("Date of birth") + '</label>' +
- '<input type="text" id="USER-BDAY" data-vcard4="bday-date" class="vcard-item" pattern="^[0-9]{2}-[0-9]{2}-[0-9]{4}$" placeholder="16-02-1974" />' +
- '</fieldset>' +
-
- '<fieldset>' +
- '<legend>' + Common._e("Contact") + '</legend>' +
-
- '<label for="USER-EMAIL-USERID">' + Common._e("E-mail") + '</label>' +
- '<input type="text" id="USER-EMAIL-USERID" data-vcard4="email-text" class="vcard-item" placeholder="john@locke.fam" />' +
-
- '<label for="USER-TEL-NUMBER">' + Common._e("Phone") + '</label>' +
- '<input type="text" id="USER-TEL-NUMBER" data-vcard4="tel-uri" class="vcard-item" placeholder="John" placeholder="+1-292-321-0812" />' +
-
- '<label for="USER-URL">' + Common._e("Website") + '</label>' +
- '<input type="text" id="USER-URL" data-vcard4="url-uri" class="vcard-item" placeholder="john.locke.fam" />' +
- '</fieldset>' +
- '</div>' +
-
- '<div id="lap2" class="one-lap forms">' +
- '<fieldset>' +
- '<legend>' + Common._e("New") + '</legend>' +
-
- '<input type="hidden" id="USER-PHOTO-TYPE" class="vcard-item" />' +
- '<input type="hidden" id="USER-PHOTO-BINVAL" class="vcard-item" />' +
-
- '<form id="vcard-avatar" action="./server/avatar-upload.php" method="post" enctype="multipart/form-data">' +
- Interface.generateFileShare() +
- '</form>' +
- '</fieldset>' +
-
- '<fieldset>' +
- '<legend>' + Common._e("Current") + '</legend>' +
-
- '<div class="avatar-container"></div>' +
-
- '<a href="#" class="one-button avatar-delete talk-images">' + Common._e("Delete") + '</a>' +
- '<div class="no-avatar">' + Common._e("What a pity! You have no profile image defined in your identity card!") + '</div>' +
- '</fieldset>' +
-
- '<div class="avatar-wait avatar-info">' + Common._e("Please wait while your avatar is uploaded...") + '</div>' +
- '<div class="avatar-ok avatar-info">' + Common._e("Here it is! A new beautiful profile image!") + '</div>' +
- '<div class="avatar-error avatar-info">' + Common._e("The image file is not supported or has a bad size.") + '</div>' +
- '</div>' +
-
- '<div id="lap3" class="one-lap forms">' +
- '<fieldset>' +
- '<legend>' + Common._e("Address") + '</legend>' +
-
- '<label for="USER-ADR-STREET">' + Common._e("Street") + '</label>' +
- '<input type="text" id="USER-ADR-STREET" data-vcard4="adr-street" class="vcard-item" placeholder="Manhattan" />' +
-
- '<label for="USER-ADR-LOCALITY">' + Common._e("City") + '</label>' +
- '<input type="text" id="USER-ADR-LOCALITY" data-vcard4="adr-locality" class="vcard-item" placeholder="New-York" />' +
-
- '<label for="USER-ADR-PCODE">' + Common._e("Postal code") + '</label>' +
- '<input type="text" id="USER-ADR-PCODE" data-vcard4="adr-code" class="vcard-item" placeholder="10002" />' +
-
- '<label for="USER-ADR-CTRY">' + Common._e("Country") + '</label>' +
- '<input type="text" id="USER-ADR-CTRY" data-vcard4="adr-country" class="vcard-item" placeholder="USA" />' +
- '</fieldset>' +
-
- '<fieldset>' +
- '<legend>' + Common._e("Biography") + '</legend>' +
-
- '<textarea id="USER-DESC" data-vcard4="note-text" rows="8" cols="60" class="vcard-item"></textarea>' +
- '</fieldset>' +
- '</div>' +
-
- '<div class="infos">' +
- '<p class="infos-title">' + Common._e("Important notice") + '</p>' +
-
- '<p>' + Common._e("Be careful with the information you store into your profile, because it might be accessible by everyone (even someone you don't want to).") + '</p>' +
- '<p>' + Common._e("Not everything is private on XMPP; this is one of those things, your public profile (vCard).") + '</p>' +
- '<p>' + Common.printf(Common._e("It is strongly recommended to upload a profile image (%s maximum), like a picture of yourself, because that makes you easily recognizable by your friends."), JAPPIX_MAX_UPLOAD) + '</p>' +
- '<p><b><a href="https://me.jappix.com/new" target="_blank">' + Common._e("Enable my public profile") + ' »</a></b></p>' +
- '</div>' +
- '</div>' +
-
- '<div class="bottom">' +
- '<div class="wait wait-medium"></div>' +
-
- '<a href="#" class="finish save disabled">' + Common._e("Save") + '</a>' +
- '<a href="#" class="finish cancel">' + Common._e("Cancel") + '</a>' +
- '</div>';
-
- // Create the popup
- Popup.create('vcard', html);
-
- // Associate the events
- self.instance();
-
- // We get the VCard informations
- self.get(Common.getXID(), 'user');
- } catch(e) {
- Console.error('vCard.open', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Closes the vCard popup
- * @public
- * @return {boolean}
- */
- self.close = function() {
-
- try {
- // Destroy the popup
- Popup.destroy('vcard');
-
- // Create the welcome end popup?
- if(Welcome.is_done) {
- // Open popup
- Me.open();
-
- // Unavoidable popup
- $('#me').addClass('unavoidable');
- }
- } catch(e) {
- Console.error('vCard.close', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Switches the vCard popup tabs
- * @public
- * @param {string} id
- * @return {boolean}
- */
- self.switchTab = function(id) {
-
- try {
- $('#vcard .one-lap').removeClass('lap-active');
- $('#vcard #lap' + id).addClass('lap-active');
- $('#vcard .tab a').removeClass('tab-active');
- $('#vcard .tab a[data-key="' + id + '"]').addClass('tab-active');
- } catch(e) {
- Console.error('vCard.switchTab', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Waits for the avatar upload reply
- * @public
- * @return {undefined}
- */
- self.waitAvatarUpload = function() {
-
- try {
- // Reset the avatar info
- $('#vcard .avatar-info').hide().stopTime();
-
- // Show the wait info
- $('#vcard .avatar-wait').show();
- } catch(e) {
- Console.error('vCard.waitAvatarUpload', e);
- }
-
- };
-
-
- /**
- * Handles the avatar upload reply
- * @public
- * @param {object} responseXML
- * @return {undefined}
- */
- self.handleAvatarUpload = function(responseXML) {
-
- try {
- // Data selector
- var dData = $(responseXML).find('jappix');
-
- // Not current upload session?
- if(parseInt(dData.attr('id')) != parseInt($('#vcard-avatar input[name="id"]').val())) {
- return;
- }
-
- // Reset the avatar info
- $('#vcard .avatar-info').hide().stopTime();
-
- // Process the returned data
- if(!dData.find('error').size()) {
- // Read the values
- var aType = dData.find('type').text();
- var aBinval = dData.find('binval').text();
-
- // We remove everything that isn't useful right here
- $('#vcard .no-avatar').hide();
- $('#vcard .avatar').remove();
-
- // We display the delete button
- $('#vcard .avatar-delete').show();
-
- // We tell the user it's okay
- $('#vcard .avatar-ok').show();
-
- // Timer
- $('#vcard .avatar-info').oneTime('10s', function() {
- $(this).hide();
- });
-
- // We put the base64 values in a hidden input to be sent
- $('#USER-PHOTO-TYPE').val(aType);
- $('#USER-PHOTO-BINVAL').val(aBinval);
-
- // We display the avatar!
- $('#vcard .avatar-container').replaceWith('<div class="avatar-container"><img class="avatar" src="data:' + aType + ';base64,' + aBinval + '" alt="" /></div>');
- }
-
- // Any error?
- else {
- $('#vcard .avatar-error').show();
-
- // Timer
- $('#vcard .avatar-info').oneTime('10s', function() {
- $(this).hide();
- });
-
- Console.error('Error while uploading the avatar', dData.find('error').text());
- }
- } catch(e) {
- Console.error('vCard.handleAvatarUpload', e);
- }
-
- };
-
-
- /**
- * Deletes the encoded avatar of an user
- * @public
- * @return {boolean}
- */
- self.deleteAvatar = function() {
-
- try {
- // We remove the avatar displayed elements
- $('#vcard .avatar-info').stopTime();
- $('#vcard .avatar-info, #vcard .avatar-wait, #vcard .avatar-error, #vcard .avatar-ok, #vcard .avatar-delete').hide();
- $('#vcard .avatar').remove();
-
- // We reset the input value
- $('#USER-PHOTO-TYPE, #USER-PHOTO-BINVAL').val('');
-
- // We show the avatar-uploading request
- $('#vcard .no-avatar').show();
- } catch(e) {
- Console.error('vCard.deleteAvatar', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Creates a special vCard input
- * @public
- * @param {string} id
- * @param {string} type
- * @return {undefined}
- */
- self.createInput = function(id, type) {
-
- try {
- // Generate the new ID
- id = 'USER-' + id;
-
- // Can append the content
- if((type == 'user') && !Common.exists('#vcard #' + id)) {
- $('#vcard .content').append('<input id="' + id + '" class="vcard-item" type="hidden" />');
- }
- } catch(e) {
- Console.error('vCard.createInput', e);
- }
-
- };
-
-
- /**
- * Gets the vCard of a XID
- * @public
- * @param {string} to
- * @param {string} type
- * @return {undefined}
- */
- self.get = function(to, type) {
-
- try {
- // Generate a special ID
- var id = genID();
-
- // New IQ
- var iq = new JSJaCIQ();
- iq.setID(id);
- iq.setType('get');
- iq.appendNode('vCard', {'xmlns': NS_VCARD});
-
- // Send the IQ to the good user
- if(type == 'user') {
- // Show the wait icon
- $('#vcard .wait').show();
-
- // Apply the session ID
- $('#vcard').attr('data-vcard', id);
-
- // Send the IQ
- con.send(iq, self.handleUser);
- } else {
- // Show the wait icon
- $('#userinfos .wait').show();
-
- // Apply the session ID
- $('#userinfos').attr('data-vcard', id);
-
- // Send the IQ
- iq.setTo(to);
- con.send(iq, self.handleBuddy);
- }
- } catch(e) {
- Console.error('vCard.get', e);
- }
-
- };
-
-
- /**
- * Handles the current connected user's vCard
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleUser = function(iq) {
-
- try {
- self.handle(iq, 'user');
- } catch(e) {
- Console.error('vCard.handleUser', e);
- }
-
- };
-
-
- /**
- * Handles an external buddy vCard
- * @public
- * @param {object} iq
- * @return {undefined}
- */
- self.handleBuddy = function(iq) {
-
- try {
- self.handle(iq, 'buddy');
- } catch(e) {
- Console.error('vCard.handleBuddy', e);
- }
-
- };
-
-
- /**
- * Handles a vCard stanza
- * @public
- * @param {object} iq
- * @param {string} type
- * @return {undefined}
- */
- self.handle = function(iq, type) {
-
- try {
- // Extract the data
- var iqID = iq.getID();
- var iqFrom = Common.fullXID(Common.getStanzaFrom(iq));
- var iqNode = iq.getNode();
-
- // Define some paths
- var path_vcard = '#vcard[data-vcard="' + iqID + '"]';
- var path_userInfos = '#userinfos[data-vcard="' + iqID + '"]';
-
- // End if the session does not exist
- if(((type == 'user') && !Common.exists(path_vcard)) || ((type == 'buddy') && !Common.exists(path_userInfos))) {
- return;
- }
-
- // We retrieve main values
- var values_yet = [];
-
- $(iqNode).find('vCard').children().each(function() {
- var this_sel = $(this);
-
- // Read the current parent node name
- var tokenname = (this).nodeName.toUpperCase();
-
- // Node with a parent
- if(this_sel.children().size()) {
- this_sel.children().each(function() {
- // Get the node values
- var currentID = tokenname + '-' + (this).nodeName.toUpperCase();
- var currentText = $(this).text();
-
- // Not yet added?
- if(!Utils.existArrayValue(values_yet, currentID)) {
- // Create an input if it does not exist
- self.createInput(values_yet, type);
-
- // Userinfos viewer popup
- if((type == 'buddy') && currentText) {
- if(currentID == 'EMAIL-USERID') {
- $(path_userInfos + ' #BUDDY-' + currentID).html('<a href="mailto:' + currentText.htmlEnc() + '" target="_blank">' + currentText.htmlEnc() + '</a>');
- } else {
- $(path_userInfos + ' #BUDDY-' + currentID).text(currentText.htmlEnc());
- }
- }
-
- // Profile editor popup
- else if(type == 'user') {
- $(path_vcard + ' #USER-' + currentID).val(currentText);
- }
-
- // Avoid duplicating the value
- values_yet.push(currentID);
- }
- });
- }
-
- // Node without any parent
- else {
- // Get the node values
- var currentText = $(this).text();
-
- // Not yet added?
- if(!Utils.existArrayValue(values_yet, tokenname)) {
- // Create an input if it does not exist
- self.createInput(tokenname, type);
-
- // Userinfos viewer popup
- if((type == 'buddy') && currentText) {
- // URL modification
- if(tokenname == 'URL') {
- // No http:// or https:// prefix, we should add it
- if(!currentText.match(/^https?:\/\/(.+)/)) {
- currentText = 'http://' + currentText;
- }
-
- currentText = '<a href="' + currentText + '" target="_blank">' + currentText.htmlEnc() + '</a>';
- }
-
- // Description modification
- else if(tokenname == 'DESC') {
- currentText = Filter.message(currentText, Name.getBuddy(iqFrom).htmlEnc(), true);
- }
-
- // Other stuffs
- else {
- currentText = currentText.htmlEnc();
- }
-
- $(path_userInfos + ' #BUDDY-' + tokenname).html(currentText);
- }
-
- // Profile editor popup
- else if(type == 'user') {
- $(path_vcard + ' #USER-' + tokenname).val(currentText);
- }
-
- // Avoid duplicating the value
- values_yet.push(tokenname);
- }
- }
- });
-
- // Update the stored avatar
- if(type == 'buddy') {
- // Get the avatar XML
- var xml = DataStore.getPersistent('global', 'avatar', iqFrom);
-
- // If there were no stored avatar previously
- if($(Common.XMLFromString(xml)).find('type').text() == 'none') {
- xml = xml.replace(/<forced>false<\/forced>/gi, '<forced>true</forced>');
- DataStore.setPersistent(Common.getXID(), 'avatar', iqFrom, xml);
- }
-
- // Handle the user avatar
- Avatar.handle(iq);
- }
-
- // The avatar values targets
- var aBinval, aType, aContainer;
-
- if(type == 'user') {
- aBinval = $('#USER-PHOTO-BINVAL').val();
- aType = $('#USER-PHOTO-TYPE').val();
- aContainer = path_vcard + ' .avatar-container';
- } else {
- aBinval = $(iqNode).find('BINVAL:first').text();
- aType = $(iqNode).find('TYPE:first').text();
- aContainer = path_userInfos + ' .avatar-container';
- }
-
- // We display the avatar if retrieved
- if(aBinval) {
- // No type?
- if(!aType) {
- aType = 'image/png';
- }
-
- if(type == 'user') {
- // We move all the things that we don't need in that case
- $(path_vcard + ' .no-avatar').hide();
- $(path_vcard + ' .avatar-delete').show();
- $(path_vcard + ' .avatar').remove();
- }
-
- var avatar_src = ('data:' + aType + ';base64,' + aBinval);
-
- // We display the avatar we have just received
- $(aContainer).replaceWith('<div class="avatar-container"><img class="avatar" src="' + avatar_src + '" alt="" /></div>');
- }
-
- else if(type == 'buddy') {
- $(aContainer).replaceWith('<div class="avatar-container"><img class="avatar" src="' + './images/others/default-avatar.png' + '" alt="" /></div>');
- }
-
- // Do someting depending of the type
- if(type == 'user') {
- $(path_vcard + ' .wait').hide();
- $(path_vcard + ' .finish:first').removeClass('disabled');
- } else {
- UserInfos.vCard();
- }
-
- Console.log('vCard received: ' + iqFrom);
- } catch(e) {
- Console.error('vCard.handle', e);
- }
-
- };
-
-
- /**
- * Sends the vCard of the user
- * @public
- * @return {boolean}
- */
- self.send = function() {
-
- try {
- // Send both vcard-temp + vCard4
- self._sendLegacy();
- self._sendForward();
-
- // Send the user nickname & avatar over PEP
- if(Features.enabledPEP()) {
- self._sendPubsub();
- }
-
- // Close the vCard stuffs
- self.close();
-
- // Get our new avatar
- Avatar.get(Common.getXID(), 'force', 'true', 'forget');
-
- Console.log('vCard sent.');
- } catch(e) {
- Console.error('vCard.send', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Generate XML tree
- * @private
- * @return {boolean}
- */
- self._generateTree = function(namespace, stanza, node) {
-
- try {
- var selector = $('#vcard .vcard-item');
- var get_id_fn = function(this_sel) {
- var id = this_sel.attr('id');
- return id ? id.replace(/^USER-(.+)/, '$1') : null;
- };
-
- if(namespace === NS_IETF_VCARD4) {
- selector = selector.filter('[data-vcard4]');
- get_id_fn = function(this_sel) {
- return this_sel.attr('data-vcard4') || null;
- };
- }
-
- // We send the identity part of the form
- selector.each(function() {
- var this_sel = $(this);
-
- var item_id = get_id_fn(this_sel);
- var item_value = this_sel.val();
-
- if(item_value && item_id) {
- if(item_id.indexOf('-') !== -1) {
- var tagname = Common.explodeThis('-', item_id, 0);
- var cur_node;
-
- if(node.getElementsByTagName(tagname).length > 0) {
- cur_node = node.getElementsByTagName(tagname).item(0);
- } else {
- cur_node = node.appendChild(stanza.buildNode(tagname, {'xmlns': namespace}));
- }
-
- cur_node.appendChild(
- stanza.buildNode(
- Common.explodeThis('-', item_id, 1),
- {'xmlns': namespace},
- item_value
- )
- );
- } else {
- node.appendChild(stanza.buildNode(item_id, {'xmlns': namespace}, item_value));
- }
- }
- });
-
- return true;
- } catch(e) {
- Console.error('vCard._generateTree', e);
-
- return false;
- }
-
- };
-
-
- /**
- * Configure given Pubsub node
- * @private
- * @param {string} namespace
- * @return {undefined}
- */
- self._configureNode = function(namespace) {
-
- try {
- Pubsub.setup(null, namespace, '1', '1', 'open', 'whitelist');
- } catch(e) {
- Console.error('vCard._configureNode', e);
- }
-
- };
-
-
- /**
- * Send legacy vCard
- * @private
- * @return {undefined}
- */
- self._sendLegacy = function() {
-
- try {
- var iq = new JSJaCIQ();
- iq.setType('set');
-
- var vCard = iq.appendNode('vCard', {
- 'xmlns': NS_VCARD
- });
-
- self._generateTree(NS_VCARD, iq, vCard);
-
- con.send(iq);
- } catch(e) {
- Console.error('vCard._sendLegacy', e);
- }
-
- };
-
-
- /**
- * Send forward version vCard (vCard 4)
- * @private
- * @return {undefined}
- */
- self._sendForward = function() {
-
- try {
- var iq = new JSJaCIQ();
- iq.setType('set');
-
- // Build Pubsub headers
- var pubsub = iq.appendNode('pubsub', {'xmlns': NS_PUBSUB});
-
- var publish = pubsub.appendChild(iq.buildNode('publish', {
- 'node': NS_XMPP_VCARD4,
- 'xmlns': NS_PUBSUB
- }));
-
- var item = publish.appendChild(iq.buildNode('item', {
- 'xmlns': NS_PUBSUB,
- 'id': 'current'
- }));
-
- // Generate vCard4 tree
- var vcard = item.appendChild(iq.buildNode('vcard', {
- 'xmlns': NS_IETF_VCARD4
- }));
-
- self._generateTree(NS_IETF_VCARD4, iq, vcard);
-
- con.send(iq);
-
- // Make it publicly-viewable
- self._configureNode(NS_XMPP_VCARD4);
- } catch(e) {
- Console.error('vCard._sendForward', e);
- }
-
- };
-
-
- /**
- * Send other Pubsub items
- * @private
- * @return {undefined}
- */
- self._sendPubsub = function() {
-
- try {
- // Generate some values
- var photo_bin = $('#USER-PHOTO-BINVAL').val();
- var photo_data = Base64.decode(photo_bin) || '';
-
- // Data to be sent
- var send_data = {};
- send_data[NS_NICK] = $('#USER-NICKNAME').val();
- send_data[NS_URN_ADATA] = photo_bin;
- send_data[NS_URN_AMETA] = {
- 'type': $('#USER-PHOTO-TYPE').val(),
- 'id': (hex_sha1(photo_data) || ''),
- 'bytes': (photo_data.length || '')
- };
-
- // Generate the XML
- $.each(send_data, function(namespace, data) {
- var iq = new JSJaCIQ();
- iq.setType('set');
-
- var pubsub = iq.appendNode('pubsub', {'xmlns': NS_PUBSUB});
- var publish = pubsub.appendChild(iq.buildNode('publish', {'node': namespace, 'xmlns': NS_PUBSUB}));
-
- if(data) {
- var item;
-
- if(namespace === NS_NICK) {
- item = publish.appendChild(iq.buildNode('item', {'xmlns': NS_PUBSUB}));
-
- // Nickname element
- item.appendChild(iq.buildNode('nick', {'xmlns': NS_NICK}, data));
- } else if(namespace === NS_URN_ADATA || namespace === NS_URN_AMETA) {
- item = publish.appendChild(iq.buildNode('item', {'xmlns': NS_PUBSUB}));
-
- // Apply the SHA-1 hash
- if(send_data[NS_URN_AMETA].id) {
- item.setAttribute('id', send_data[NS_URN_AMETA].id);
- }
-
- // Append XML nodes depending on namespace
- if(namespace === NS_URN_ADATA) {
- item.appendChild(iq.buildNode('data', {'xmlns': NS_URN_ADATA}, data));
- } else if(namespace === NS_URN_AMETA) {
- var metadata = item.appendChild(iq.buildNode('metadata', {'xmlns': NS_URN_AMETA}));
-
- if(data) {
- var meta_info = metadata.appendChild(iq.buildNode('info', {'xmlns': NS_URN_AMETA}));
-
- if(data.type)
- meta_info.setAttribute('type', data.type);
- if(data.id)
- meta_info.setAttribute('id', data.id);
- if(data.bytes)
- meta_info.setAttribute('bytes', data.bytes);
- }
- }
- }
- }
-
- con.send(iq);
-
- // Make node publicly-viewable
- self._configureNode(namespace);
- });
- } catch(e) {
- Console.error('vCard._sendPubsub', e);
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.instance = function() {
-
- try {
- // Focus on the first input
- $(document).oneTime(10, function() {
- $('#vcard input:first').focus();
- });
-
- // Keyboard events
- $('#vcard input[type="text"]').keyup(function(e) {
- // Enter pressed: send the vCard
- if((e.keyCode == 13) && !$('#vcard .finish.save').hasClass('disabled')) {
- return self.send();
- }
- });
-
- // Click events
- $('#vcard .tab a').click(function() {
- var this_sel = $(this);
-
- // Yet active?
- if(this_sel.hasClass('tab-active')) {
- return false;
- }
-
- // Switch to the good tab
- var key = parseInt(this_sel.attr('data-key'));
-
- return self.switchTab(key);
- });
-
- $('#vcard .avatar-delete').click(function() {
- return self.deleteAvatar();
- });
-
- $('#vcard .bottom .finish').click(function() {
- var this_sel = $(this);
-
- if(this_sel.is('.cancel')) {
- return self.close();
- }
-
- if(this_sel.is('.save') && !this_sel.hasClass('disabled')) {
- return self.send();
- }
-
- return false;
- });
-
- // Avatar upload vars
- var avatar_options = {
- dataType: 'xml',
- beforeSubmit: self.waitAvatarUpload,
- success: self.handleAvatarUpload
- };
-
- // Avatar upload form submit event
- $('#vcard-avatar').submit(function() {
- if($('#vcard .wait').is(':hidden') &&
- $('#vcard .avatar-info.avatar-wait').is(':hidden') &&
- $('#vcard-avatar input[type="file"]').val()) {
- $(this).ajaxSubmit(avatar_options);
- }
-
- return false;
- });
-
- // Avatar upload input change event
- $('#vcard-avatar input[type="file"]').change(function() {
- if($('#vcard .wait').is(':hidden') &&
- $('#vcard .avatar-info.avatar-wait').is(':hidden') &&
- $(this).val()) {
- $('#vcard-avatar').ajaxSubmit(avatar_options);
- }
-
- return false;
- });
-
- // Placeholders
- $('#vcard-avatar input[type="text"]').placeholder();
- } catch(e) {
- Console.error('vCard.instance', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/welcome.js b/app/javascripts/welcome.js
deleted file mode 100644
index cfdc7a00..00000000
--- a/app/javascripts/welcome.js
+++ /dev/null
@@ -1,413 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the welcome tool functions for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Welcome = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /* Variables */
- self.is_done = false;
-
-
- /**
- * Opens the welcome tools
- * @public
- * @return {undefined}
- */
- self.open = function() {
-
- try {
- // Share message
- var share_msg = Common.printf(Common._e("Using Jappix, an open social platform. I am %s!"), Common.getXID());
-
- // Popup HTML content
- var html =
- '<div class="top">' + Common._e("Welcome!") + '</div>' +
-
- '<div class="tab">' +
- '<a href="#" class="tab-active" data-step="1">' + Common._e("Options") + '</a>' +
- '<a href="#" class="tab-missing" data-step="2">' + Common._e("Friends") + '</a>' +
- '<a href="#" class="tab-missing" data-step="3">' + Common._e("Share") + '</a>' +
- '</div>' +
-
- '<div class="content">' +
- '<div class="lap-active one-lap welcome1">' +
- '<div class="infos">' +
- '<p class="infos-title">' + Common._e("Welcome on Jappix, your own social cloud!") + '</p>' +
- '<p>' + Common._e("Before you start using it, you will have to change some settings, search for friends and complete your profile.") + '</p>' +
- '</div>' +
-
- '<a href="#" class="box enabled" title="' + Common._e("Click to disable") + '">' +
- '<span class="option">' + Common._e("Sounds") + '</span>' +
- '<span class="description">' + Common._e("Enable notification sounds") + '</span>' +
- '<span class="image sound talk-images"></span>' +
- '<span class="tick talk-images"></span>' +
- '</a>' +
-
- '<a href="#" class="box enabled pep-hidable" title="' + Common._e("Click to disable") + '">' +
- '<span class="option">' + Common._e("Geolocation") + '</span>' +
- '<span class="description">' + Common._e("Share your position on the globe") + '</span>' +
- '<span class="image geolocation talk-images"></span>' +
- '<span class="tick talk-images"></span>' +
- '</a>' +
-
- '<a href="#" class="box xmpplinks-hidable" title="' + Common._e("Click to enable") + '">' +
- '<span class="option">' + Common._e("XMPP links") + '</span>' +
- '<span class="description">' + Common._e("Open XMPP links with Jappix") + '</span>' +
- '<span class="image xmpp talk-images"></span>' +
- '<span class="tick talk-images"></span>' +
- '</a>' +
-
- '<a href="#" class="box mam-hidable pref" title="' + Common._e("Click to enable") + '">' +
- '<span class="option">' + Common._e("Message archiving") + '</span>' +
- '<span class="description">' + Common._e("Store a history of your chats") + '</span>' +
- '<span class="image mam talk-images"></span>' +
- '<span class="tick talk-images"></span>' +
- '</a>' +
-
- '<a href="#" class="box" title="' + Common._e("Click to enable") + '">' +
- '<span class="option">' + Common._e("Offline friends") + '</span>' +
- '<span class="description">' + Common._e("Don\'t hide offline friends") + '</span>' +
- '<span class="image offline talk-images"></span>' +
- '<span class="tick talk-images"></span>' +
- '</a>' +
- '</div>' +
-
- '<div class="one-lap welcome2">' +
- '<div class="infos">' +
- '<p class="infos-title">' + Common._e("Friends") + '</p>' +
- '<p>' + Common._e("Use this tool to find your friends on the server you are using right now, or add them later.") + '</p>' +
- '</div>' +
-
- '<div class="results welcome-results"></div>' +
- '</div>' +
-
- '<div class="one-lap welcome3">' +
- '<div class="infos">' +
- '<p class="infos-title">' + Common._e("Share") + '</p>' +
- '<p>' + Common._e("Good job! Now, you can share Jappix with your friends!") + '</p>' +
- '<p>' + Common._e("When you will press the save button, the profile editor will be opened. Happy socializing!") + '</p>' +
- '</div>' +
-
- '<a class="box share first" href="http://www.facebook.com/sharer/sharer.php?u=' + Common.encodeQuotes(Utils.generateURL(JAPPIX_LOCATION)) + '" target="_blank">' +
- '<span class="logo facebook welcome-images"></span>' +
- '<span class="name">Facebook</span>' +
- '<span class="description">' + Common.printf(Common._e("Share Jappix on %s"), 'Facebook') + '</span>' +
- '<span class="go talk-images"></span>' +
- '</a>' +
-
- '<a class="box share" href="http://twitter.com/intent/tweet?text=' + Common.encodeQuotes(share_msg) + '&amp;url=' + Common.encodeQuotes(Utils.generateURL(JAPPIX_LOCATION)) + '" target="_blank">' +
- '<span class="logo twitter welcome-images"></span>' +
- '<span class="name">Twitter</span>' +
- '<span class="description">' + Common.printf(Common._e("Share Jappix on %s"), 'Twitter') + '</span>' +
- '<span class="go talk-images"></span>' +
- '</a>' +
-
- '<a class="box share" href="https://plus.google.com/share?url=' + Common.encodeQuotes(Utils.generateURL(JAPPIX_LOCATION)) + '" target="_blank">' +
- '<span class="logo plus welcome-images"></span>' +
- '<span class="name">Google+</span>' +
- '<span class="description">' + Common.printf(Common._e("Share Jappix on %s"), 'Google+') + '</span>' +
- '<span class="go talk-images"></span>' +
- '</a>' +
-
- '<a class="box share" href="https://waaave.com/spot/jappix/" target="_blank">' +
- '<span class="logo waaave welcome-images"></span>' +
- '<span class="name">Waaave</span>' +
- '<span class="description">' + Common.printf(Common._e("Follow Jappix topic on %s"), 'Waaave') + '</span>' +
- '<span class="go talk-images"></span>' +
- '</a>' +
- '</div>' +
- '</div>' +
-
- '<div class="bottom">' +
- '<div class="wait wait-medium"></div>' +
-
- '<a href="#" class="finish next">' + Common._e("Next") + ' »</a>' +
- '<a href="#" class="finish save">' + Common._e("Save") + '</a>' +
- '</div>';
-
- // Create the popup
- Popup.create('welcome', html);
-
- // Unavoidable popup
- $('#welcome').addClass('unavoidable');
-
- // Apply the features
- Features.apply('welcome');
-
- // Associate the events
- self.instance();
-
- Console.log('Welcome assistant opened.');
- } catch(e) {
- Console.error('Welcome.open', e);
- }
-
- };
-
-
- /**
- * Closes the welcome tools
- * @public
- * @return {boolean}
- */
- self.close = function() {
-
- try {
- // Destroy the popup
- Popup.destroy('welcome');
- } catch(e) {
- Console.error('Welcome.close', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Switches the welcome tabs
- * @public
- * @param {string} id
- * @return {boolean}
- */
- self.switchTab = function(id) {
-
- try {
- // Path to
- var welcome = '#welcome ';
- var content = welcome + '.content .';
- var tab = welcome + '.tab ';
- var wait = $(welcome + '.wait');
-
- $(content + 'one-lap').hide();
- $(content + 'welcome' + id).show();
- $(tab + 'a').removeClass('tab-active');
- $(tab + 'a[data-step="' + id + '"]').addClass('tab-active').removeClass('tab-missing');
-
- // Update the "save" button if all is okay
- if(!Common.exists(tab + '.tab-missing')) {
- var finish = welcome + '.finish.';
-
- $(finish + 'save').show();
- $(finish + 'next').hide();
- }
-
- // If this is ID 2: vJUD search
- if(id == 2) {
- wait.show();
- DataForm.go(HOST_VJUD, 'search', '', '', 'welcome');
- } else {
- wait.hide();
- }
- } catch(e) {
- Console.error('Welcome.switchTab', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Sends the welcome options
- * @public
- * @param {object} array
- * @return {undefined}
- */
- self.send = function(array) {
-
- try {
- // Sends the options
- var iq = new JSJaCIQ();
- iq.setType('set');
-
- var query = iq.setQuery(NS_PRIVATE);
- var storage = query.appendChild(iq.buildNode('storage', {'xmlns': NS_OPTIONS}));
-
- // Value array
- var tags = ['sounds', 'geolocation', '', '', 'roster-showall'];
-
- // Build the XML with the array
- for(var i in array) {
- var value = array[i];
- var tag = tags[i];
-
- if((i != 2) && (i != 3) && tag && value) {
- storage.appendChild(iq.buildNode('option', {'type': tag, 'xmlns': NS_OPTIONS}, value));
- DataStore.setDB(Connection.desktop_hash, 'options', tag, value);
- }
- }
-
- con.send(iq);
-
- // If geolocation is enabled
- if(array[1] == '1') {
- PEP.geolocate();
- }
- } catch(e) {
- Console.error('Welcome.send', e);
- }
-
- };
-
-
- /**
- * Saves the welcome options
- * @public
- * @return {boolean}
- */
- self.save = function() {
-
- try {
- // Get the new options
- var array = [];
-
- $('#welcome a.box').each(function() {
- var current = '0';
-
- if($(this).hasClass('enabled')) {
- current = '1';
- }
-
- array.push(current);
- });
-
- // If XMPP links is enabled
- if(array[2] == '1') {
- Utils.xmppLinksHandler();
- }
-
- // If offline buddies showing is enabled
- if(array[4] == '1') {
- Interface.showAllBuddies('welcome');
- }
-
- // If archiving is supported by the server
- if(Features.enabledMAM()) {
- // If archiving is enabled
- if(array[3] == '1') {
- MAM.setConfig('roster');
- }
- }
-
- // Send the new options
- self.send(array);
-
- // Close the welcome tool
- self.close();
-
- // Open the profile editor
- vCard.open();
-
- // Unavoidable popup
- $('#vcard').addClass('unavoidable');
-
- self.is_done = true;
- } catch(e) {
- Console.error('Welcome.save', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Goes to the next welcome step
- * @public
- * @return {boolean}
- */
- self.next = function() {
-
- try {
- // Check the next step to go to
- var next = 1;
- var missing = '#welcome .tab a.tab-missing';
-
- if(Common.exists(missing)) {
- next = parseInt($(missing + ':first').attr('data-step'));
- }
-
- // Switch to the next step
- self.switchTab(next);
- } catch(e) {
- Console.error('Welcome.next', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Plugin launcher
- * @public
- * @return {undefined}
- */
- self.instance = function() {
-
- try {
- // Click events
- $('#welcome .tab a').click(function() {
- var this_sel = $(this);
-
- // Switch to the good tab
- var key = parseInt(this_sel.attr('data-step'));
-
- return self.switchTab(key);
- });
-
- $('#welcome a.box:not(.share)').click(function() {
- var this_sel = $(this);
-
- if(this_sel.hasClass('enabled')) {
- this_sel.removeClass('enabled').attr('title', Common._e("Click to enable"));
- } else {
- this_sel.addClass('enabled').attr('title', Common._e("Click to disable"));
- }
-
- return false;
- });
-
- $('#welcome .bottom .finish').click(function() {
- var this_sel = $(this);
-
- if(this_sel.is('.next')) {
- return self.next();
- }
-
- if(this_sel.is('.save')) {
- return self.save();
- }
-
- return false;
- });
- } catch(e) {
- Console.error('Welcome.instance', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/javascripts/xmpplinks.js b/app/javascripts/xmpplinks.js
deleted file mode 100644
index 50f4d410..00000000
--- a/app/javascripts/xmpplinks.js
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the XMPP links handling JS scripts for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var XMPPLinks = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Does an action with the provided XMPP link
- * @public
- * @param {string} link
- * @return {boolean}
- */
- self.go = function(link) {
-
- /* REF: http://xmpp.org/registrar/querytypes.html */
-
- try {
- // Remove the "xmpp:" string
- link = Common.explodeThis(':', link, 1);
-
- // The XMPP URI has no "?"
- if(link.indexOf('?') == -1) {
- Chat.checkCreate(link, 'chat');
- } else {
- var xid = Common.explodeThis('?', link, 0);
- var action = Common.explodeThis('?', link, 1);
-
- switch(action) {
- // Groupchat
- case 'join':
- Chat.checkCreate(xid, 'groupchat');
-
- break;
-
- // Profile
- case 'vcard':
- UserInfos.open(xid);
-
- break;
-
- // Subscription
- case 'subscribe':
- Roster.addThisContact(xid);
-
- break;
-
- // Unsubscription
- case 'unsubscribe':
- Roster.send(xid, 'remove');
-
- break;
-
- // Private chat
- default:
- Chat.checkCreate(xid, 'chat');
-
- break;
- }
- }
- } catch(e) {
- Console.error('XMPPLinks.do', e);
- } finally {
- return false;
- }
-
- };
-
-
- /**
- * Gets the links vars (get parameters in URL)
- */
- self.links_var = (function() {
- var hash;
- var vars = [];
- var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
-
- for(var i = 0; i < hashes.length; i++) {
- hash = hashes[i].split('=');
-
- vars.push(hash[0]);
- vars[hash[0]] = $.trim(decodeURIComponent(hash[1]));
- }
-
- return vars;
- })();
-
-
- /**
- * Return class scope
- */
- return self;
-
-})(); \ No newline at end of file
diff --git a/app/sounds/catch-attention.mp3 b/app/sounds/catch-attention.mp3
deleted file mode 100644
index 2f48361e..00000000
--- a/app/sounds/catch-attention.mp3
+++ /dev/null
Binary files differ
diff --git a/app/sounds/catch-attention.oga b/app/sounds/catch-attention.oga
deleted file mode 100644
index a77f205e..00000000
--- a/app/sounds/catch-attention.oga
+++ /dev/null
Binary files differ
diff --git a/app/sounds/incoming-call.mp3 b/app/sounds/incoming-call.mp3
deleted file mode 100644
index 48cbe6ac..00000000
--- a/app/sounds/incoming-call.mp3
+++ /dev/null
Binary files differ
diff --git a/app/sounds/incoming-call.oga b/app/sounds/incoming-call.oga
deleted file mode 100644
index 2d13feec..00000000
--- a/app/sounds/incoming-call.oga
+++ /dev/null
Binary files differ
diff --git a/app/sounds/new-chat.mp3 b/app/sounds/new-chat.mp3
deleted file mode 100644
index 6831df55..00000000
--- a/app/sounds/new-chat.mp3
+++ /dev/null
Binary files differ
diff --git a/app/sounds/new-chat.oga b/app/sounds/new-chat.oga
deleted file mode 100644
index 645be0fe..00000000
--- a/app/sounds/new-chat.oga
+++ /dev/null
Binary files differ
diff --git a/app/sounds/notification.mp3 b/app/sounds/notification.mp3
deleted file mode 100644
index 1310e51a..00000000
--- a/app/sounds/notification.mp3
+++ /dev/null
Binary files differ
diff --git a/app/sounds/notification.oga b/app/sounds/notification.oga
deleted file mode 100644
index b6d55809..00000000
--- a/app/sounds/notification.oga
+++ /dev/null
Binary files differ
diff --git a/app/sounds/outgoing-call.mp3 b/app/sounds/outgoing-call.mp3
deleted file mode 100644
index 5af21cec..00000000
--- a/app/sounds/outgoing-call.mp3
+++ /dev/null
Binary files differ
diff --git a/app/sounds/outgoing-call.oga b/app/sounds/outgoing-call.oga
deleted file mode 100644
index 569d1822..00000000
--- a/app/sounds/outgoing-call.oga
+++ /dev/null
Binary files differ
diff --git a/app/sounds/receive-message.mp3 b/app/sounds/receive-message.mp3
deleted file mode 100644
index 673cb24b..00000000
--- a/app/sounds/receive-message.mp3
+++ /dev/null
Binary files differ
diff --git a/app/sounds/receive-message.oga b/app/sounds/receive-message.oga
deleted file mode 100644
index 599600d5..00000000
--- a/app/sounds/receive-message.oga
+++ /dev/null
Binary files differ
diff --git a/app/stylesheets/adhoc.css b/app/stylesheets/adhoc.css
deleted file mode 100644
index a86e77e1..00000000
--- a/app/stylesheets/adhoc.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the Ad-Hoc CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#adhoc .content {
- padding: 10px 0 10px 0;
-}
-
-#adhoc .adhoc-head {
- background-color: #f1f6fd;
- border: 1px #9dc4fc solid;
- width: 598px;
- height: 18px;
- font-size: 0.9em;
- margin: 0 10px 12px 10px;
- padding: 6px 10px;
-}
-
-#adhoc .one-actions .one-button {
- float: right;
-} \ No newline at end of file
diff --git a/app/stylesheets/anonymous.css b/app/stylesheets/anonymous.css
deleted file mode 100644
index e85ab2f7..00000000
--- a/app/stylesheets/anonymous.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the anonymous mode CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#top-content {
- min-width: 500px !important;
-}
-
-#main-content {
- min-width: 490px !important;
- min-height: 450px !important;
-}
-
-#left-content {
- display: none;
-}
-
-#right-content {
- left: 0 !important;
- right: 0 !important;
-}
diff --git a/app/stylesheets/board.css b/app/stylesheets/board.css
deleted file mode 100644
index f569ebd0..00000000
--- a/app/stylesheets/board.css
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the board CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#board .one-board {
- display: none;
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- height: 20px;
- z-index: 10000;
- font-size: 0.92em;
- padding: 6px 8px 5px 8px;
- -moz-box-shadow: 0 0 8px #5c5c5c;
- -webkit-box-shadow: 0 0 8px #5c5c5c;
- box-shadow: 0 0 8px #5c5c5c;
-}
-
-#board .one-board:hover {
- cursor: pointer;
-}
-
-#board .one-board.visible {
- display: block;
-}
-
-#board .one-board.error {
- background-color: rgb(241,160,160);
- background-color: rgba(241,160,160,0.9);
- color: #420c0c;
-}
-
-#board .one-board.info {
- background-color: rgb(248,246,186);
- background-color: rgba(248,246,186,0.9);
- color: #2f2a02;
-}
diff --git a/app/stylesheets/call.css b/app/stylesheets/call.css
deleted file mode 100644
index 865bfcda..00000000
--- a/app/stylesheets/call.css
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the call CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-.videochat_box {
- display: none;
-}
-
-.videochat_box .videochat_items {
- background: #ededed;
- border: 1px solid rgb(0,0,0);
- border: 1px solid rgba(0,0,0,0.8);
- text-shadow: none;
- min-width: 550px;
- min-height: 420px;
- overflow: hidden;
- position: absolute;
- left: 100px;
- right: 100px;
- top: 40px;
- bottom: 40px;
- -moz-box-shadow: 0 0 12px rgba(0,0,0,0.4);
- -webkit-box-shadow: 0 0 12px rgba(0,0,0,0.4);
- box-shadow: 0 0 12px rgba(0,0,0,0.4);
-}
-
-.videochat_box .videochat_items .topbar {
- background: rgb(0,0,0);
- background: rgba(0,0,0,0.5);
- border-bottom: 1px solid rgb(0,0,0);
- border-bottom: 1px solid rgba(0,0,0,0.15);
- color: #ffffff;
- text-shadow: 0 1px 1px rgb(0,0,0);
- text-shadow: 0 1px 1px rgba(0,0,0,0.5);
- height: 40px;
- position: absolute;
- left: 0;
- right: 0;
- top: 0;
- z-index: 4;
- -moz-box-shadow: 0 0 5px rgba(0,0,0,0.25);
- -webkit-box-shadow: 0 0 5px rgba(0,0,0,0.25);
- box-shadow: 0 0 5px rgba(0,0,0,0.25);
-}
-
-.videochat_box .videochat_items .topbar .controls,
-.videochat_box .videochat_items .topbar .elapsed {
- float: left;
-}
-
-html[dir="rtl"] .videochat_box .videochat_items .topbar .controls,
-html[dir="rtl"] .videochat_box .videochat_items .topbar .elapsed {
- float: right;
-}
-
-html[dir="rtl"] .videochat_box .videochat_items .topbar .controls {
- margin-left: 0;
- margin-right: 50px;
-}
-
-.videochat_box .videochat_items .topbar .controls a {
- margin-top: 7px;
- float: left;
-}
-
-html[dir="rtl"] .videochat_box .videochat_items .topbar .controls a {
- float: right;
-}
-
-.videochat_box .videochat_items .topbar .controls a,
-.call-content .call-notify .notification-content .reply-buttons a.reply-button {
- border-width: 1px;
- border-style: solid;
- font-size: 10px;
- color: #ffffff;
- text-transform: uppercase;
- text-decoration: none;
- padding: 5px 6px 6px 6px;
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
-}
-
-.videochat_box .videochat_items .topbar .controls a:active,
-.call-content .call-notify .notification-content .reply-buttons a.reply-button:active {
- padding-top: 6px;
- padding-bottom: 5px;
- -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.25) inset;
- -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.25) inset;
- box-shadow: 0 1px 3px rgba(0,0,0,0.25) inset;
-}
-
-.videochat_box .videochat_items .topbar .controls a .icon {
- width: 14px;
- height: 14px;
- margin: -1px 7px 0 2px;
- float: left;
-}
-
-.videochat_box .videochat_items .topbar .controls a.stop,
-.videochat_box .videochat_items .topbar .controls a.leave,
-.call-content .call-notify .notification-content .reply-buttons a.reply-button.red {
- background: #cc283f;
- border-color: #5e121d;
-}
-
-.videochat_box .videochat_items .topbar .controls a.stop:active,
-.videochat_box .videochat_items .topbar .controls a.leave:active,
-.call-content .call-notify .notification-content .reply-buttons a.reply-button.red:active {
- background: #a92134;
- border-color: #480e16;
-}
-
-.videochat_box .videochat_items .topbar .controls a.stop .icon,
-.videochat_box .videochat_items .topbar .controls a.leave .icon {
- background-position: 0 -62px;
-}
-
-.call-content .call-notify .notification-content .reply-buttons a.reply-button.green {
- background: #5ea45e;
- border-color: #1a2e1a;
-}
-
-.call-content .call-notify .notification-content .reply-buttons a.reply-button.green:active {
- background: #549253;
- border-color: #0f1a0f;
-}
-
-.videochat_box .videochat_items .topbar .controls a.mute,
-.videochat_box .videochat_items .topbar .controls a.unmute,
-.call-content .call-notify .notification-content .reply-buttons a.reply-button.blue {
- background: #6e8dc5;
- border-color: #303d55;
-}
-
-.videochat_box .videochat_items .topbar .controls a.mute,
-.videochat_box .videochat_items .topbar .controls a.unmute {
- margin-left: 6px;
-}
-
-html[dir="rtl"] .videochat_box .videochat_items .topbar .controls a.mute,
-html[dir="rtl"] .videochat_box .videochat_items .topbar .controls a.unmute {
- margin-left: 0;
- margin-right: 6px;
-}
-
-.videochat_box .videochat_items .topbar .controls a.mute:active,
-.videochat_box .videochat_items .topbar .controls a.unmute:active,
-.call-content .call-notify .notification-content .reply-buttons a.reply-button.blue:active {
- background: #6480b1;
- border-color: #222b3b;
-}
-
-.videochat_box .videochat_items .topbar .controls a.mute .icon {
- background-position: 0 -81px;
-}
-
-.videochat_box .videochat_items .topbar .controls a.unmute {
- display: none;
-}
-
-.videochat_box .videochat_items .topbar .controls a.unmute .icon {
- background-position: 0 -100px;
-}
-
-.videochat_box .videochat_items .topbar .elapsed {
- background: rgb(0,0,0);
- background: rgba(0,0,0,0.1);
- border: 1px solid rgb(255,255,255);
- border: 1px solid rgba(255,255,255,0.25);
- outline: 1px solid rgb(0,0,0);
- outline: 1px solid rgba(0,0,0,0.2);
- font-size: 11px;
- font-weight: bold;
- letter-spacing: 2px;
- margin: 10px 0 0 46px;
- padding: 2px 6px;
-}
-
-html[dir="rtl"] .videochat_box .videochat_items .topbar .elapsed {
- margin-left: 0;
- margin-right: 46px;
-}
-
-.videochat_box .videochat_items .topbar .actions {
- margin: 7px 15px 0 0;
- float: right;
-}
-
-html[dir="rtl"] .videochat_box .videochat_items .topbar .actions {
- margin-right: 0;
- margin-left: 15px;
- float: left;
-}
-
-.videochat_box .videochat_items .topbar .actions a {
- float: left;
-}
-
-.videochat_box .videochat_items .topbar .actions a.close {
- background-position: 0 -44px;
- width: 18px;
- height: 12px;
- margin-top: 6px;
-}
-
-.videochat_box .videochat_items .local_video {
- background-position: 0 -56px;
- border: 1px solid rgb(0,0,0);
- border: 1px solid rgba(0,0,0,0.5);
- width: 180px;
- height: 101px;
- opacity: 0.6;
- overflow: hidden;
- position: absolute;
- left: 18px;
- bottom: 18px;
- z-index: 3;
- -moz-box-shadow: 0 0 8px rgba(0,0,0,0.25);
- -webkit-box-shadow: 0 0 8px rgba(0,0,0,0.25);
- box-shadow: 0 0 8px rgba(0,0,0,0.25);
- -webkit-transition: all 0.4s ease-in-out 0.2s;
- -moz-transition: all 0.4s ease-in-out 0.2s;
- -o-transition: all 0.4s ease-in-out 0.2s;
- transition: all 0.4s ease-in-out 0.2s;
-}
-
-html[dir="rtl"] .videochat_box .videochat_items .local_video {
- left: auto;
- right: 18px;
-}
-
-.videochat_box .videochat_items .local_video:disabled {
- opacity: 0.2 !important;
-}
-
-.videochat_box .videochat_items .local_video:hover {
- width: 320px;
- height: 180px;
- opacity: 1;
- cursor: pointer;
-}
-
-.videochat_box .videochat_items .local_video video {
- width: 100%;
-} \ No newline at end of file
diff --git a/app/stylesheets/channel.css b/app/stylesheets/channel.css
deleted file mode 100644
index c207dd11..00000000
--- a/app/stylesheets/channel.css
+++ /dev/null
@@ -1,646 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the channel CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#channel .top div.update {
- position: absolute;
- top: 12px;
- left: 115px;
- right: 15px;
- bottom: 15px;
- -moz-border-radius: 20px;
- -webkit-border-radius: 20px;
- border-radius: 20px;
-}
-
-html[dir="rtl"] #channel .top div.update {
- right: 115px;
- left: 15px;
-}
-
-#channel .top p {
- font-size: 0.9em;
- margin-bottom: 10px;
-}
-
-#channel .top h2 {
- font-size: 1.5em;
- margin-bottom: 10px;
- color: #232323;
-}
-
-#channel .top a {
- font-size: 0.9em;
- color: #232323;
-}
-
-#channel .top.individual div.update {
- right: 36px;
-}
-
-#channel .top.individual div.shortcuts,
-#userinfos .main-infos div.shortcuts {
- width: 16px;
- float: right;
-}
-
-#channel .top.individual div.shortcuts {
- margin: 2px 5px 0 0;
-}
-
-#channel .top.individual div.shortcuts a,
-#userinfos .main-infos div.shortcuts a {
- height: 16px;
- width: 16px;
- margin-bottom: 4px;
- display: block;
-}
-
-#channel .top.individual div.shortcuts a.message,
-#userinfos .main-infos a.message {
- background-position: 0 -1717px;
-}
-
-#channel .top.individual div.shortcuts a.chat,
-#userinfos .main-infos a.chat {
- background-position: 0 -1737px;
-}
-
-#channel .top.individual div.shortcuts a.command,
-#userinfos .main-infos a.command {
- background-position: 0 -1758px;
-}
-
-#channel .microblog-body {
- height: 20px;
- margin-right: 50px;
-}
-
-html[dir="rtl"] #channel .microblog-body {
- margin-right: auto;
- margin-left: 50px;
-}
-
-#channel .microblog-body input {
- width: 100%;
- height: 100%;
- padding: 8px;
-}
-
-#channel .one-microblog-icon {
- position: absolute;
- top: 38px;
- right: 0;
-}
-
-html[dir="rtl"] #channel .one-microblog-icon {
- left: 0;
- right: auto;
-}
-
-#channel div.update .one-microblog-icon,
-#channel div.update .postit {
- width: 16px;
- height: 16px;
- display: block;
-}
-
-#channel div.update .attach {
- background-position: 0 -79px;
- display: none;
-}
-
-#attach {
- position: absolute;
- width: 263px;
- margin-left: -227px;
- color: white;
- font-size: 0.85em;
- z-index: 9998;
- text-align: left;
- display: none;
-}
-
-#attach p {
- margin-bottom: 6px !important;
-}
-
-#attach input[type="submit"] {
- margin: 8px 0 6px 0;
-}
-
-#attach .wait {
- float: right;
- margin: 7px 5px;
-}
-
-#attach div.one-file {
- height: 16px;
- margin-top: 2px;
-}
-
-#attach div.one-file a.link {
- color: white;
- width: 215px;
- height: 14px;
- margin-left: 2px;
- overflow: hidden;
- float: left;
-}
-
-html[dir="rtl"] #attach div.one-file a.link {
- text-align: right;
- margin-left: auto;
- margin-right: 2px;
- float: right;
-}
-
-#attach div.one-file a.remove {
- width: 16px;
- height: 16px;
- float: left;
-}
-
-html[dir="rtl"] #attach div.one-file a.remove {
- float: right;
-}
-
-.attach-subarrow {
- background-position: 0 -241px;
- opacity: 0.8;
- height: 10px;
- width: 18px;
- margin-left: 226px;
-}
-
-.attach-subitem {
- background-color: rgb(0,0,0);
- background-color: rgba(0,0,0,0.8);
- padding: 10px;
- text-shadow: 0 1px 1px black;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
- border-radius: 5px;
-}
-
-html[dir="rtl"] .attach-subitem {
- position: absolute;
- left: 238px;
-}
-
-.attach-p {
- font-weight: bold;
- float: left;
-}
-
-#channel .one-update {
- margin-bottom: 12px;
- padding: 6px 6px 8px 6px;
- border-bottom: 1px dotted #d0d0d0;
- min-height: 50px;
- color: black;
- position: relative;
- display: none;
-}
-
-#channel .one-update .avatar-container {
- text-align: center;
- margin-right: 16px;
- float: left;
- height: 50px;
- width: 50px;
-}
-
-html[dir="rtl"] #channel .one-update .avatar-container {
- margin-right: auto;
- margin-left: 16px;
- float: right;
-}
-
-#channel .one-update .avatar-container:hover {
- cursor: pointer;
-}
-
-#channel .one-update img.avatar {
- max-height: 50px;
- max-width: 50px;
-}
-
-#channel .one-update div.body {
- line-height: 1.4;
- margin-left: 65px;
- opacity: 0.8;
-}
-
-#channel .one-update:hover div.body {
- opacity: 1;
-}
-
-#channel .one-update a.repeat {
- background-position: 0 -1681px;
- height: 16px;
- width: 16px;
- margin-right: 4px;
- float: left;
-}
-
-#channel .one-update span a {
- text-decoration: underline;
-}
-
-#channel .one-update p {
- display: block;
- margin: 0 12px 5px 0;
-}
-
-html[dir="rtl"] #channel .one-update p {
- margin-right: auto;
- margin-left: 12px;
-}
-
-#channel .one-update p b.name:hover {
- cursor: pointer;
- text-decoration: underline;
-}
-
-html[dir="rtl"] #channel .one-update p b.name {
- margin-left: 4px;
- float: right;
-}
-
-#channel .one-update p.infos {
- font-size: 0.9em;
-}
-
-#channel .one-update p.infos a.geoloc {
- background-position: 0 -1778px;
- color: #363636;
- margin-left: 18px;
- padding-left: 14px;
-}
-
-html[dir="rtl"] #channel .one-update p.infos a.geoloc {
- float: right;
-}
-
-#channel .one-update p.infos a.geoloc:hover,
-#channel .one-update p.infos a.geoloc:focus,
-#channel .one-update p.infos a.geoloc:active {
- color: #141414;
-}
-
-#channel .one-update p.file {
- font-size: 0.9em;
- margin: 6px 0 5px 10px;
-}
-
-#channel .one-update p.file a.link,
-#inbox .inbox-new-file a.file {
- min-height: 16px;
- padding-left: 22px;
- text-decoration: underline;
- display: block;
-}
-
-#channel .one-update p.file a.link {
- margin-top: 4px;
-}
-
-#channel p.file a,
-#inbox .inbox-new-file a.file {
- background-position: 0 -988px;
-}
-
-#channel p.file a.audio,
-#inbox .inbox-new-file a.file.audio {
- background-position: 0 -899px;
-}
-
-#channel p.file a.image,
-#inbox .inbox-new-file a.file.image {
- background-position: 0 -917px;
-}
-
-#channel p.file a.video,
-#inbox .inbox-new-file a.file.video {
- background-position: 0 -935px;
-}
-
-#channel p.file a.document,
-#inbox .inbox-new-file a.file.document {
- background-position: 0 -953px;
-}
-
-#channel p.file a.package,
-#inbox .inbox-new-file a.file.package {
- background-position: 0 -971px;
-}
-
-#channel .one-update p.file a.thumb img {
- border: 1px solid #a2a2a2;
- max-width: 140px;
- max-height: 105px;
- margin: 4px 10px 2px 0;
- padding: 1px;
-}
-
-#channel .one-update p.file a.thumb img:hover {
- border-color: #464646;
-}
-
-#channel .one-update div.comments,
-.popup.large div.comments {
- width: 410px;
- margin: 2px 0 2px 76px;
-}
-
-html[dir="rtl"] #channel .one-update div.comments {
- margin-left: auto;
- margin-right: 76px;
-}
-
-#channel .one-update div.comments div.arrow,
-.popup.large div.comments div.arrow {
- background-position: 0 -1702px;
- width: 20px;
- height: 8px;
- margin-left: 20px;
- display: block;
-}
-
-html[dir="rtl"] #channel .one-update div.comments div.arrow,
-html[dir="rtl"] .popup.large div.comments div.arrow {
- margin-left: auto;
- margin-right: 20px;
-}
-
-#channel .one-update div.comments div.comments-content,
-.popup.large div.comments div.comments-content {
- background-color: #e5ebec;
- color: black;
- font-size: 0.9em;
- text-shadow: 0 1px 0 white;
-}
-
-#channel .one-update div.comments input,
-.popup.large div.comments input {
- width: 356px;
- margin: 6px 0;
- padding: 4px 5px;
-}
-
-#channel .one-update div.comments span.icon,
-.popup.large div.comments span.icon {
- background-position: 0 -1082px;
- height: 16px;
- width: 16px;
- margin: 10px;
- float: left;
-}
-
-html[dir="rtl"] #channel .one-update div.comments span.icon,
-html[dir="rtl"] .popup.large div.comments span.icon {
- float: right;
-}
-
-#channel .one-update div.comments .one-comment.loading span.icon,
-.popup.large div.comments .one-comment.loading span.icon {
- margin: 0 10px 0 0;
-}
-
-html[dir="rtl"] #channel .one-update div.comments .one-comment.loading span.icon,
-html[dir="rtl"] .popup.large div.comments .one-comment.loading span.icon {
- margin: 0 0 0 10px;
-}
-
-#channel .one-update div.comments .one-comment,
-.popup.large div.comments .one-comment {
- border-bottom: 1px solid #f4f4f4;
- padding: 4px 8px 0 8px;
- position: relative;
- display: block;
-}
-
-#channel .one-update div.comments .one-comment.compose,
-.popup.large div.comments .one-comment.compose {
- border-bottom: 2px solid #f4f4f4;
- height: 36px;
- padding: 0;
-}
-
-#channel .one-update div.comments .one-comment.new,
-.popup.large div.comments .one-comment.new {
- display: none;
-}
-
-#channel .one-update div.comments a.one-comment,
-.popup.large div.comments a.one-comment {
- text-decoration: none;
-}
-
-#channel .one-update div.comments a.one-comment:hover,
-#channel .one-update div.comments a.one-comment:focus,
-.popup.large div.comments a.one-comment:hover,
-.popup.large div.comments a.one-comment:focus {
- text-decoration: underline;
-}
-
-#channel .one-update div.comments .one-comment.loading,
-.popup.large div.comments .one-comment.loading {
- padding-bottom: 5px;
-}
-
-#channel .one-update div.comments .one-comment div.marker,
-.popup.large div.comments .one-comment div.marker {
- background-color: #6d8387;
- width: 2px;
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
-}
-
-#channel .one-update div.comments .one-comment .avatar-container,
-.popup.large div.comments .one-comment .avatar-container {
- text-align: center;
- width: 30px;
- height: 30px;
- margin: 2px 8px 0 0;
- float: left;
-}
-
-html[dir="rtl"] #channel .one-update div.comments .one-comment .avatar-container,
-html[dir="rtl"] .popup.large div.comments .one-comment .avatar-container {
- margin-right: auto;
- margin-left: 8px;
- float: right;
-}
-
-#channel .one-update div.comments .one-comment .avatar-container:hover,
-.popup.large div.comments .one-comment .avatar-container:hover {
- cursor: pointer;
-}
-
-#channel .one-update div.comments .one-comment img.avatar,
-.popup.large div.comments .one-comment img.avatar {
- max-height: 30px;
- max-width: 30px;
-}
-
-#channel .one-update div.comments .one-comment .comment-container,
-.popup.large div.comments .one-comment .comment-container {
- float: left;
-}
-
-#channel .one-update div.comments .one-comment a.name,
-.popup.large div.comments .one-comment a.name {
- font-weight: bold;
- text-decoration: none;
- font-size: 0.95em;
- padding-bottom: 2px;
- float: left;
-}
-
-html[dir="rtl"] #channel .one-update div.comments .one-comment a.name,
-html[dir="rtl"] .popup.large div.comments .one-comment a.name {
- float: right;
-}
-
-#channel .one-update div.comments .one-comment a.name:hover,
-#channel .one-update div.comments .one-comment a.name:focus,
-.popup.large div.comments .one-comment a.name:hover,
-.popup.large div.comments .one-comment a.name:focus {
- text-decoration: underline;
-}
-
-#channel .one-update div.comments .one-comment span.date,
-#channel .one-update div.comments .one-comment a.remove,
-.popup.large div.comments .one-comment span.date,
-.popup.large div.comments .one-comment a.remove {
- font-size: 0.85em;
- float: right;
-}
-
-html[dir="rtl"] #channel .one-update div.comments .one-comment span.date,
-html[dir="rtl"] #channel .one-update div.comments .one-comment a.remove,
-html[dir="rtl"] .popup.large div.comments .one-comment span.date,
-html[dir="rtl"] .popup.large div.comments .one-comment a.remove {
- margin-left: 2px;
- float: left;
-}
-
-#channel .one-update div.comments .one-comment.me:hover span.date,
-.popup.large div.comments .one-comment.me:hover span.date {
- display: none;
-}
-
-#channel .one-update div.comments .one-comment.me a.remove,
-.popup.large div.comments .one-comment.me a.remove {
- display: none;
-}
-
-#channel .one-update div.comments .one-comment.me:hover a.remove,
-.popup.large div.comments .one-comment.me:hover a.remove {
- display: block;
-}
-
-#channel .one-update div.comments .one-comment p.body,
-.popup.large div.comments .one-comment p.body {
- clear: both;
-}
-
-#channel a.more {
- background-position: 0 -334px;
- color: black;
- height: 16px;
- text-decoration: none;
- margin: -2px 0 14px 4px;
- padding-left: 20px;
- display: block;
- visibility: hidden;
-}
-
-#channel a.more:hover,
-#channel a.more:focus {
- text-decoration: underline;
-}
-
-#channel a.mbtool {
- width: 11px;
- height: 11px;
- display: none;
- position: absolute;
- right: 0;
-}
-
-html[dir="rtl"] #channel a.mbtool {
- right: auto;
- left: 0;
-}
-
-#channel .one-update:hover a.mbtool {
- display: block;
-}
-
-#channel a.mbtool:hover,
-#channel a.mbtool:focus {
- text-decoration: none;
-}
-
-#channel a.mbtool.profile {
- background-position: -1px -1333px;
- top: 24px;
-}
-
-#channel a.mbtool.repost {
- background-position: -1px -1354px;
-}
-
-#channel a.mbtool.remove {
- background-position: -1px -1312px;
-}
-
-#channel a.mbtool.repost,
-#channel a.mbtool.remove {
- top: 6px;
-}
-
-#channel .footer {
- bottom: 0;
- -moz-border-radius-bottomleft: 4px;
- -moz-border-radius-bottomright: 4px;
- -webkit-border-bottom-left-radius: 4px;
- -webkit-border-bottom-right-radius: 4px;
- border-bottom-left-radius: 4px;
- border-bottom-right-radius: 4px;
-}
-
-#channel .footer div {
- margin-left: 5px;
- padding-left: 24px;
- min-height: 16px;
- font-size: 0.85em;
- width: auto !important;
-}
-
-html[dir="rtl"] #channel .footer div {
- float: right;
-}
-
-#channel .footer .sync {
- background-position: 0 -804px;
- display: none;
-}
-
-#channel .footer .unsync {
- background-position: 0 -830px;
- display: none;
-}
diff --git a/app/stylesheets/directory.css b/app/stylesheets/directory.css
deleted file mode 100644
index 0f6d9358..00000000
--- a/app/stylesheets/directory.css
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the directory tool CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#directory .content {
- padding: 10px 0 10px 0;
-}
diff --git a/app/stylesheets/discovery.css b/app/stylesheets/discovery.css
deleted file mode 100644
index ea691e09..00000000
--- a/app/stylesheets/discovery.css
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the discovery CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#discovery .content {
- padding: 10px 0 10px 0;
-}
-
-#discovery .content p {
- margin: 5px 10px 5px 10px;
- text-align: justify;
- font-size: 0.85em;
-}
-
-#discovery .discovery-head,
-#directory .directory-head,
-#rosterx .rosterx-head,
-#privacy .privacy-head {
- width: 606px;
- height: 24px;
- margin: 0 10px 10px 10px;
- padding: 6px;
- background: #f1f6fd;
- border: 1px #9dc4fc solid;
-}
-
-#discovery .disco-server-text,
-#directory .directory-server-text {
- float: left;
- font-size: 0.9em;
- margin: 3px;
-}
-
-html[dir="rtl"] #discovery .disco-server-text,
-html[dir="rtl"] #directory .directory-server-text {
- float: right;
-}
-
-#discovery .disco-server-input,
-#directory .directory-server-input {
- width: 200px;
- height: 18px;
- float: right;
- margin-right: 10px;
- padding: 2px;
-}
-
-html[dir="rtl"] #discovery .disco-server-input,
-html[dir="rtl"] #directory .directory-server-input {
- margin-right: 0;
- margin-left: 10px;
- float: left;
-}
-
-#discovery .disco-category {
- display: none;
- margin-bottom: 22px;
-}
-
-#discovery .disco-category-title {
- font-weight: bold;
-}
-
-#discovery .one-actions .one-button {
- float: right;
-}
-
-html[dir="rtl"] #discovery .one-actions .one-button {
- float: left;
-} \ No newline at end of file
diff --git a/app/stylesheets/favorites.css b/app/stylesheets/favorites.css
deleted file mode 100644
index 8980260c..00000000
--- a/app/stylesheets/favorites.css
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the favorites CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#favorites .content {
- padding: 10px 0 10px 0;
-}
-
-#favorites .fedit-head-select {
- min-width: 190px;
- max-width: 210px;
-}
-
-#favorites .switch-fav {
- margin: 0 10px 0 10px;
- width: 200px;
- height: 355px;
- border-right: 1px #c0c0c0 dotted;
- float: left;
-}
-
-#favorites .room-switcher {
- width: 188px;
- height: 18px;
- border-bottom: 1px #9dc4fc solid;
- float: left;
- padding: 10px 6px;
- font-size: 0.9em;
-}
-
-#favorites .room-switcher:hover {
- background-color: #e9f1fd;
- cursor: pointer;
-}
-
-#favorites .room-switcher:active {
- background-color: #f1f6fd;
-}
-
-#favorites .switch-fav .icon {
- float: left;
- height: 16px;
- width: 16px;
- margin: 0 8px 0 0;
-}
-
-#favorites .switch-fav .room-list .list-icon {
- background-position: 0 -855px;
-}
-
-#favorites .switch-fav .room-search .search-icon {
- background-position: 0 -876px;
-}
-
-#favorites .static-fav {
- width: 385px;
- height: 335px;
- margin: 0 10px 0 0;
- padding: 10px;
- float: right;
-}
-
-#favorites .favorites-search {
- display: none;
-}
-
-#favorites .static-fav-head {
- width: 393px;
- margin: -10px;
-}
-
-#favorites .static-fav-results {
- width: 406px;
- height: 314px;
- margin: 10px -10px -10px -10px;
- padding: 6px 0 0 0;
-}
-
-#favorites .fedit-line {
- height: 30px;
- font-size: 0.9em;
- padding: 10px 0 4px 4px;
- border-bottom: 1px #9dc4fc solid;
-}
-
-#favorites .fedit-line:hover {
- background: #e9f1fd;
-}
-
-#favorites label {
- width: 140px;
- margin-top: 3px;
-}
-
-#favorites input {
- height: 18px;
- width: 186px;
- margin-top: 0;
- padding: 2px;
-}
-
-#favorites .fedit-select {
- min-width: 160px;
-}
-
-#favorites .fedit-actions {
- margin: 10px 0 0;
- font-size: 0.9em;
- float: right;
-}
-
-#favorites input[type="checkbox"] {
- margin-top: 5px;
- width: auto;
-}
-
-#favorites .fedit-terminate {
- float: right;
-}
-
-#favorites .fedit-add {
- display: block;
-}
-
-#favorites .fedit-edit {
- background-position: 2px -1240px;
-}
-
-#favorites .fedit-remove {
- margin: 0 8px 0 0;
-}
-
-#favorites .add,
-.popup .results .one-button.one-add {
- background-position: 3px -1177px;
-}
-
-#favorites .remove,
-#inbox .remove {
- background-position: 3px -1196px;
-}
-
-#favorites .join,
-#inbox .reply,
-#inbox .send,
-.popup .results .one-button.one-chat,
-.popup .results a.one-profile {
- background-position: 3px -124px;
-}
-
-#favorites .one-button,
-#inbox .one-button,
-.popup .results .one-button {
- padding-left: 20px !important;
- font-size: 0.98em;
-}
-
-#favorites .fsearch-results {
- overflow: auto;
-}
-
-#favorites .room-name {
- margin: 4px 2px 5px;
- max-width: 210px;
- float: left;
-}
-
-html[dir="rtl"] #favorites .room-name {
- float: right;
-}
-
-#favorites .fsearch-noresults {
- display: none;
- font-size: 0.9em;
- font-weight: bold;
-}
diff --git a/app/stylesheets/fonts.css b/app/stylesheets/fonts.css
deleted file mode 100644
index 00a2e699..00000000
--- a/app/stylesheets/fonts.css
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the fonts CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-@font-face {
- font-family: 'PT Sans';
- src: url('../fonts/eot/ptsans.eot');
- src: url('../fonts/eot/ptsans.eot?#iefix') format('embedded-opentype'),
- url('../fonts/woff/ptsans.woff') format('woff'),
- url('../fonts/ttf/ptsans.ttf') format('truetype'),
- url('../fonts/svg/ptsans.svg#pt_sansregular') format('svg');
-}
-
-@font-face {
- font-family: 'PT Sans';
- font-style: italic;
- src: url('../fonts/eot/ptsansitalic.eot');
- src: url('../fonts/eot/ptsansitalic.eot?#iefix') format('embedded-opentype'),
- url('../fonts/woff/ptsansitalic.woff') format('woff'),
- url('../fonts/ttf/ptsansitalic.ttf') format('truetype'),
- url('../fonts/svg/ptsansitalic.svg#pt_sansitalic') format('svg');
-}
-
-@font-face {
- font-family: 'PT Sans';
- font-weight: bold;
- src: url('../fonts/eot/ptsansbold.eot');
- src: url('../fonts/eot/ptsansbold.eot?#iefix') format('embedded-opentype'),
- url('../fonts/woff/ptsansbold.woff') format('woff'),
- url('../fonts/ttf/ptsansbold.ttf') format('truetype'),
- url('../fonts/svg/ptsansbold.svg#pt_sansbold') format('svg');
-}
-
-@font-face {
- font-family: 'PT Sans';
- font-weight: bold;
- font-style: italic;
- src: url('../fonts/eot/ptsansbolditalic.eot');
- src: url('../fonts/eot/ptsansbolditalic.eot?#iefix') format('embedded-opentype'),
- url('../fonts/woff/ptsansbolditalic.woff') format('woff'),
- url('../fonts/ttf/ptsansbolditalic.ttf') format('truetype'),
- url('../fonts/svg/ptsansbolditalic.svg#pt_sansbold_italic') format('svg');
-} \ No newline at end of file
diff --git a/app/stylesheets/home.css b/app/stylesheets/home.css
deleted file mode 100644
index 2b40e909..00000000
--- a/app/stylesheets/home.css
+++ /dev/null
@@ -1,998 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the home CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#home {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- min-height: 550px;
- min-width: 875px;
-}
-
-#home .corporation,
-#home .corporation .corp_network,
-#home .aboutus,
-#home .aboutus .aboutus_org,
-#home .locale,
-#home .obsolete {
- background-color: rgb(20,20,20);
- background-color: rgba(20,20,20,0.70);
- color: white;
- position: absolute;
- top: 0;
- text-shadow: 0 0 1px black;
- z-index: 100;
- -moz-border-radius-bottomleft: 3px;
- -moz-border-radius-bottomright: 3px;
- -webkit-border-bottom-left-radius: 3px;
- -webkit-border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
- border-bottom-right-radius: 3px;
-}
-
-#home .corporation,
-#home .aboutus {
- height: 26px;
- width: 34px;
-}
-
-#home .corporation {
- background-position: 9px -120px;
- left: 12px;
-}
-
-html[dir="rtl"] #home .corporation {
- left: auto;
- right: 12px;
-}
-
-#home .aboutus {
- background-position: 9px -351px;
- left: 52px;
-}
-
-html[dir="rtl"] #home .aboutus {
- left: auto;
- right: 52px;
-}
-
-#home .corporation.hovered,
-#home .aboutus.hovered {
- height: 28px;
- -moz-border-radius: 0;
- -webkit-border-radius: 0;
- border-radius: 0;
-}
-
-#home .corporation .corp_network,
-#home .aboutus .aboutus_org {
- width: 180px;
- padding: 10px 12px;
- top: 28px;
- left: 0;
- display: none;
- -moz-border-radius-topright: 3px;
- -webkit-border-top-right-radius: 3px;
- border-top-right-radius: 3px;
-}
-
-html[dir="rtl"] #home .corporation .corp_network,
-html[dir="rtl"] #home .aboutus .aboutus_org {
- left: auto;
- right: 0;
- -moz-border-radius-topright: 0;
- -moz-border-radius-topleft: 3px;
- -webkit-border-top-right-radius: 0;
- -webkit-border-top-left-radius: 3px;
- border-top-right-radius: 0;
- border-top-left-radius: 3px;
-}
-
-#home .corporation.hovered .corp_network,
-#home .aboutus.hovered .aboutus_org {
- display: block;
-}
-
-#home .corporation .corp_network h2,
-#home .aboutus .aboutus_org h2 {
- font-size: 1.1em;
- margin: 12px 0 4px 0;
-}
-
-#home .corporation .corp_network h2.nomargin {
- margin-top: 0;
-}
-
-#home .aboutus.hovered .aboutus_org span.version {
- font-size: 0.8em;
- display: block;
-}
-
-#home .corporation .corp_network a,
-#home .aboutus .aboutus_org span.one {
- margin: 2px 0;
- padding: 2px 6px;
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
-}
-
-#home .aboutus .aboutus_org span.one {
- display: block;
-}
-
-#home .corporation .corp_network a span,
-#home .aboutus .aboutus_org span.one a.name,
-#home .aboutus .aboutus_org span.one a.desc {
- margin: 2px 0;
- display: block;
-}
-
-#home .corporation .corp_network a span.name,
-#home .aboutus .aboutus_org span.one a.name {
- font-weight: bold;
- font-size: 0.9em;
-}
-
-#home .corporation .corp_network a span.desc,
-#home .aboutus .aboutus_org span.one a.desc {
- font-size: 0.7em;
- margin-left: 2px;
-}
-
-#home .locale {
- left: 92px;
- font-size: 0.85em;
-}
-
-html[dir="rtl"] #home .locale {
- left: auto;
- right: 92px;
-}
-
-#home .locale .current {
- height: 19px;
- padding: 3px 12px 4px 12px;
- font-weight: bold;
-}
-
-#home .locale .current:hover {
- cursor: default;
-}
-
-#home .locale .current .current_align {
- height: 19px;
- vertical-align: middle;
- display: table-cell;
-}
-
-#home .locale .list {
- margin: 2px 0 2px;
-}
-
-#home .locale .list a,
-#home .corporation .corp_network a,
-#home .aboutus .aboutus_org a {
- color: white;
- text-decoration: none;
- display: block;
-}
-
-#home .locale .list a {
- padding: 3px 10px;
-}
-
-#home .locale .list a:hover,
-#home .locale .list a:focus,
-#home .corporation .corp_network a:hover,
-#home .corporation .corp_network a:focus,
-#home .aboutus .aboutus_org span.one:hover {
- background-color: rgb(255,255,255);
- background-color: rgba(255,255,255,0.1);
-}
-
-#home .locale .list a:hover,
-#home .locale .list a:focus,
-#home .corporation .corp_network a:hover,
-#home .corporation .corp_network a:focus {
- cursor: pointer;
-}
-
-#home .locale .list a:active,
-#home .corporation .corp_network a:active,
-#home .aboutus .aboutus_org span.one:active {
- background-color: rgb(255,255,255);
- background-color: rgba(255,255,255,0.14);
-}
-
-#home .obsolete {
- height: 60px;
- padding: 4px 10px;
- right: 12px;
- font-size: 0.9em;
- font-weight: bold;
- display: none;
-}
-
-html[dir="rtl"] #home .obsolete {
- right: auto;
- left: 12px;
-}
-
-#home .obsolete a {
- height: 33px;
- width: 33px;
- margin: 5px 2px 0 0;
- float: left;
-}
-
-html[dir="rtl"] #home .obsolete a {
- margin-right: 0;
- margin-left: 2px;
- float: right;
-}
-
-#home .obsolete a:hover,
-#home .obsolete a:focus {
- opacity: 0.8;
-}
-
-#home .obsolete a:active {
- opacity: 0.6;
-}
-
-#home .obsolete a.firefox {
- background-position: 1px 0;
-}
-
-#home .obsolete a.chrome {
- background-position: -34px 0;
-}
-
-#home .obsolete a.safari {
- background-position: -68px 0;
-}
-
-#home .obsolete a.opera {
- background-position: -101px 0;
-}
-
-#home .obsolete a.ie {
- background-position: -135px 0;
-}
-
-#home .plane {
- background-position: 0 -432px;
- width: 507px;
- height: 328px;
- position: absolute;
- left: 0;
- top: 60px;
-}
-
-#home .main {
- position: absolute;
- top: 50%;
- margin-top: -200px;
- width: 800px;
- height: 400px;
- left: 50%;
- margin-left: -400px;
- z-index: 50;
-}
-
-#home .mainview {
- background-color: rgb(20,20,20);
- background-color: rgba(20,20,20,0.85);
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
- z-index: 2;
- -moz-border-radius: 10px;
- -webkit-border-radius: 10px;
- border-radius: 10px;
- -moz-box-shadow: 0 0 35px #5c5c5c;
- -webkit-box-shadow: 0 0 35px #5c5c5c;
- box-shadow: 0 0 35px #5c5c5c;
-}
-
-#home .left {
- float: left;
- width: 350px;
- height: 370px;
- margin: 15px 0 15px 15px;
- color: white;
- text-align: center;
- text-shadow: 0 1px 1px black;
-}
-
-html[dir="rtl"] #home .left {
- margin-left: 0;
- margin-right: 15px;
- float: right;
-}
-
-#home .left .logo {
- background-position: 0 0;
- float: left;
- margin: 30px 0 35px 30px;
- width: 291px;
- height: 86px;
-}
-
-#home .left p.upper {
- font-weight: bold;
- margin: 12px 0 35px 0;
-}
-
-#home .left p.secondary {
- margin: 8px 0 0 16px;
- font-size: 0.9em;
- width: 320px;
-}
-
-html[dir="rtl"] #home .left p.secondary {
- margin-left: auto;
- margin-right: 16px;
-}
-
-#home .right {
- background: #e4eef9;
- background: -moz-linear-gradient(top, #e4eef9, #c5e1ff);
- background: -webkit-gradient(linear, left top, left bottom, from(#e4eef9), to(#c5e1ff));
- background: -webkit-linear-gradient(top, #e4eef9 0%, #c5e1ff 100%);
- background: -o-linear-gradient(top, #e4eef9 0%, #c5e1ff 100%);
- float: right;
- width: 385px;
- height: 350px;
- margin: 15px 15px 15px 0;
- padding: 10px;
- font-size: 13.4px;
- text-align: justify;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
- border-radius: 5px;
- -moz-box-shadow: 0 0 20px black;
- -webkit-box-shadow: 0 0 20px black;
- box-shadow: 0 0 20px black;
-}
-
-html[dir="rtl"] #home .right {
- float: left;
- margin-right: 0;
- margin-left: 15px;
-}
-
-#home .right h1 {
- font-size: 16px;
- padding-bottom: 4px;
- border-bottom: 1px black dotted;
-}
-
-#home .right p {
- margin-bottom: 4px;
-}
-
-#home .right p a {
- border-width: 0 0 1px 0;
- border-style: dotted;
- border-color: black;
-}
-
-#home .right p a:hover,
-#home .right p a:focus {
- border-style: solid;
- text-decoration: none;
-}
-
-#home .right button {
- display: block;
- margin-left: 22px;
- width: 342px;
- height: 64px;
- text-decoration: none;
- font-weight: bold;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
-}
-
-#home .right button:focus {
- outline: 0 none;
-}
-
-html[dir="rtl"] #home .right button {
- margin-right: 21px;
- margin-left: auto;
-}
-
-#home .right button:hover {
- cursor: pointer;
-}
-
-#home .right button span {
- float: left;
-}
-
-html[dir="rtl"] #home .right button span {
- float: right;
-}
-
-#home .right button span.home-images {
- height: 16px;
- width: 16px;
- margin: 4px 7px 7px 24px;
-}
-
-html[dir="rtl"] #home .right button span.home-images {
- margin-right: 24px;
- margin-left: 7px;
-}
-
-#home .right button span.text {
- padding-left: 20px;
- font-size: 1.5em;
-}
-
-html[dir="rtl"] #home .right button span.text {
- padding-left: 0;
- padding-right: 20px;
-}
-
-#home .right .login {
- background-color: #72d071;
- background-position: 0 0;
- border: 1px solid #5cb55c;
- margin-top: 22px;
- -moz-box-shadow: 0 0 6px #89e389;
- -webkit-box-shadow: 0 0 6px #89e389;
- box-shadow: 0 0 6px #89e389;
-}
-
-#home .right .login:hover,
-#home .right .login:focus {
- border: 1px solid #419141;
- -moz-box-shadow: 0 0 10px #72d071;
- -webkit-box-shadow: 0 0 10px #72d071;
- box-shadow: 0 0 10px #72d071;
-}
-
-#home .right .login:active {
- background-color: #97e896;
- background-position: 0 -80px;
-}
-
-#home .right .login span.text {
- color: #2d612d;
- text-shadow: 1px 1px 1px #5cb55c;
-}
-
-#home .right .login span.home-images {
- background-position: 0 -230px;
-}
-
-#home .right .register {
- background-color: #f6ef82;
- background-position: 0 -160px;
- border: 1px solid #e3db56;
- margin-top: 15px;
- -moz-box-shadow: 0 0 6px #f1e968;
- -webkit-box-shadow: 0 0 6px #f1e968;
- box-shadow: 0 0 6px #f1e968;
-}
-
-#home .right .register:hover,
-#home .right .register:focus {
- border: 1px solid #d2c93f;
- -moz-box-shadow: 0 0 10px #e0d743;
- -webkit-box-shadow: 0 0 10px #e0d743;
- box-shadow: 0 0 10px #e0d743;
-}
-
-#home .right .register:active {
- background-color: #fdf7af;
- background-position: 0 -240px;
-}
-
-#home .right .register span.text {
- color: #6d6813;
- text-shadow: 1px 1px 1px #dbd56e;
-}
-
-#home .right .register span.home-images {
- background-position: 0 -204px;
-}
-
-#home .right p.notice {
- margin-top: 24px;
- font-size: 0.9em;
- font-weight: bold;
-}
-
-#home .right .navigation {
- clear: both;
- width: 385px;
- border-top: 1px black dotted;
- position: absolute;
- text-align: right;
- bottom: 25px;
- right: 25px;
- padding-top: 6px;
-}
-
-html[dir="rtl"] #home .right .navigation {
- right: auto;
- left: 25px;
-}
-
-#home .right .navigation a {
- margin-left: 10px;
- color: black;
- text-decoration: none;
- font-size: 0.9em;
- height: 16px;
- padding-left: 21px;
- float: right;
-}
-
-html[dir="rtl"] #home .right .navigation a {
- margin-left: 0;
- margin-right: 10px;
- float: left;
-}
-
-#home .right .navigation a:hover,
-#home .right .navigation a:focus {
- text-decoration: underline;
-}
-
-#home .right .navigation a.unencrypted {
- background-position: 0 -256px;
-}
-
-#home .right .navigation a.encrypted {
- background-position: 0 -282px;
-}
-
-#home .right .navigation a.manager {
- background-position: 0 -152px;
-}
-
-#home .right .navigation a.mobile {
- background-position: 0 -178px;
-}
-
-#home .right .navigation a span.vert_center {
- height: 16px;
- vertical-align: middle;
- display: table-cell;
-}
-
-#home .friendsview {
- height: 65px;
- position: absolute;
- bottom: -65px;
- left: 15px;
- right: 15px;
- z-index: 1;
- opacity: 0.8;
-}
-
-#home .friendsview .friends {
- background: #e4eef9;
- background: -moz-linear-gradient(top, #e4eef9, #c5e1ff);
- background: -webkit-gradient(linear, left top, left bottom, from(#e4eef9), to(#c5e1ff));
- background: -webkit-linear-gradient(top, #e4eef9 0%, #c5e1ff 100%);
- background: -o-linear-gradient(top, #e4eef9 0%, #c5e1ff 100%);
- font-size: 11px !important;
- overflow: hidden;
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- -moz-border-radius-bottomleft: 8px;
- -moz-border-radius-bottomright: 8px;
- -webkit-border-bottom-left-radius: 8px;
- -webkit-border-bottom-right-radius: 8px;
- border-bottom-left-radius: 8px;
- border-bottom-right-radius: 8px;
- -moz-box-shadow: 0 0 10px black;
- -webkit-box-shadow: 0 0 10px black;
- box-shadow: 0 0 10px black;
-}
-
-#home .friendsview .friends,
-#home .friendsview .friends a {
- color: black;
-}
-
-#home .friendsview .friends .group {
- display: block;
- position: absolute;
- top: 10px;
- bottom: 10px;
-}
-
-#home .friendsview .friends .group.content {
- width: 340px;
- left: 10px;
-}
-
-#home .friendsview .friends .group.standard {
- width: 289px;
- padding-left: 10px;
- left: 360px;
-}
-
-#home .friendsview .friends .group.content table,
-#home .friendsview .friends .group.standard table {
- margin-top: -4px;
-}
-
-#home .friendsview .friends .group.content table a,
-#home .friendsview .friends .group.standard table a {
- text-decoration: underline;
-}
-
-#home .friendsview .friends .group.content table td {
- padding-top: 3px;
-}
-
-#home .friendsview .friends .group.content a.available_space,
-#home .friendsview .friends .group.standard a.available_space,
-#home .friendsview .friends a.group.refer {
- opacity: 0.75;
- -webkit-transition: 0.3s linear;
- -moz-transition: 0.3s linear;
- -o-transition: 0.3s linear;
- transition: 0.3s linear;
-}
-
-#home .friendsview .friends .group.content a.available_space:hover,
-#home .friendsview .friends .group.content a.available_space:focus,
-#home .friendsview .friends .group.standard a.available_space:hover,
-#home .friendsview .friends .group.standard a.available_space:focus,
-#home .friendsview .friends a.group.refer:hover,
-#home .friendsview .friends a.group.refer:focus {
- opacity: 1;
-}
-
-#home .friendsview .friends .group.content a.available_space,
-#home .friendsview .friends .group.standard a.available_space {
- border: 1px dashed #909090;
- font-size: 11px;
- font-weight: bold;
- letter-spacing: 1px;
- text-transform: uppercase;
- text-align: center;
- padding-top: 14px;
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
-}
-
-#home .friendsview .friends .group.standard a.available_space {
- left: 10px;
-}
-
-#home .friendsview .friends .group.standard br {
- display: none;
-}
-
-#home .friendsview .friends .group.standard a {
- text-align: center;
- text-decoration: underline;
- margin-bottom: 1px;
- float: left;
- width: 50%;
-}
-
-#home .friendsview .friends .group.standard a:nth-child(even) {
- float: right;
-}
-
-#home .friendsview .friends a.group.refer {
- width: 81px;
- padding-left: 10px;
- right: 10px;
-}
-
-#home .friendsview .friends a.group.refer span {
- display: block;
-}
-
-#home .friendsview .friends a.group.refer span.icon {
- background-position: 0 -385px;
- width: 25px;
- height: 25px;
- margin: 0 auto;
- -webkit-transition: 0.3s linear;
- -moz-transition: 0.3s linear;
- -o-transition: 0.3s linear;
- transition: 0.3s linear;
-}
-
-#home .friendsview .friends a.group.refer:hover span.icon,
-#home .friendsview .friends a.group.refer:focus span.icon {
- -webkit-transform: rotate(360deg);
- -moz-transform: rotate(360deg);
- -ms-transform: rotate(360deg);
- -o-transform: rotate(360deg);
- transform: rotate(360deg);
-}
-
-#home .friendsview .friends a.group.refer span.label {
- font-size: 10px;
- font-weight: bold;
- text-transform: uppercase;
- text-align: center;
- margin-top: 6px;
-}
-
-#home .friendsview .friends .group .separator,
-#home .friendsview .friends .group .separator .sep_top,
-#home .friendsview .friends .group .separator .sep_bottom {
- position: absolute;
-}
-
-#home .friendsview .friends .group .separator {
- width: 1px;
- top: 0;
- bottom: 0;
- left: -1px;
-}
-
-#home .friendsview .friends .group .separator .sep_top,
-#home .friendsview .friends .group .separator .sep_bottom {
- height: 50%;
- left: 0;
- right: 0;
-}
-
-#home .friendsview .friends .group .separator .sep_top {
- background: #eeeeee;
- background: rgba(0,0,0,0.3);
- background: -moz-linear-gradient(top, rgba(0,0,0,0) 0%, rgba(0,0,0,0.3) 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0,0,0,0)), color-stop(100%, rgba(0,0,0,0.3)));
- background: -webkit-linear-gradient(top, rgba(0,0,0,0) 0%, rgba(0,0,0,0.3) 100%);
- background: -o-linear-gradient(top, rgba(0,0,0,0) 0%, rgba(0,0,0,0.3) 100%);
- background: -ms-linear-gradient(top, rgba(0,0,0,0) 0%, rgba(0,0,0,0.3) 100%);
- background: linear-gradient(to bottom, rgba(0,0,0,0) 0%, rgba(0,0,0,0.3) 100%);
- top: 0;
-}
-
-#home .friendsview .friends .group .separator .sep_bottom {
- background: #eeeeee;
- background: rgba(0,0,0,0.3);
- background: -moz-linear-gradient(top, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0) 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0,0,0,0.3)), color-stop(100%, rgba(0,0,0,0)));
- background: -webkit-linear-gradient(top, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0) 100%);
- background: -o-linear-gradient(top, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0) 100%);
- background: -ms-linear-gradient(top, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0) 100%);
- background: linear-gradient(to bottom, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0) 100%);
- bottom: 0;
-}
-
-#home a.advanced {
- background-position: 0 -334px;
- font-size: 0.9em;
- height: 16px;
- margin-bottom: 10px;
- padding-left: 16px;
- float: left;
-}
-
-html[dir="rtl"] #home a.advanced {
- float: right;
-}
-
-#home fieldset.advanced {
- display: none;
-}
-
-#home .anonymouser input[type="text"] {
- width: 160px;
-}
-
-#home .homediv.registerer .success a {
- font-weight: bold;
- text-decoration: underline;
-}
-
-#home fieldset {
- border: 1px solid black;
- margin: 18px 0 12px 0;
- padding: 5px 0 4px 0;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
-}
-
-html[dir="rtl"] #home fieldset {
- padding-left: 6px;
-}
-
-#home legend {
- font-size: 0.9em;
- margin: 0 0 0 15px;
- padding: 0 2px;
- text-transform: uppercase;
-}
-
-#home label {
- width: 110px;
- display: block;
- float: left;
- clear: both;
- margin: 0 0 5px 12px;
-}
-
-html[dir="rtl"] #home label {
- margin-left: auto;
- margin-right: 12px;
- float: right;
-}
-
-#home input,
-#home select {
- float: left;
- margin-bottom: 5px;
-}
-
-html[dir="rtl"] #home input,
-html[dir="rtl"] #home select {
- float: right;
-}
-
-#home input[type="text"],
-#home input[type="password"],
-#home select {
- width: 140px;
- margin-top: -2px;
-}
-
-#home .submit {
- clear: both;
-}
-
-#home input[type="submit"] {
- min-width: 120px;
- float: right;
-}
-
-#home span.jid {
- display: block;
- float: left;
- margin: 0 4px;
-}
-
-html[dir="rtl"] #home span.jid {
- float: right;
-}
-
-#home input.nick,
-#home input.server,
-#home input.password,
-#home input.spassword {
- width: 110px;
-}
-
-#home input.password {
- margin-right: 22px;
-}
-
-html[dir="rtl"] #home input.password {
- margin-right: auto;
-}
-
-html[dir="rtl"] #home input.spassword {
- margin-right: 22px;
-}
-
-html[dir="rtl"] #home .loginer input.remember,
-html[dir="rtl"] #home .loginer input.password,
-html[dir="rtl"] #home .loginer input.resource,
-html[dir="rtl"] #home .loginer select.priority,
-html[dir="rtl"] #home .anonymouser input.room,
-html[dir="rtl"] #home .anonymouser input.nick {
- float: right;
-}
-
-#home img.captcha_img {
- margin: -2px 0 0 20px;
- float: left;
-}
-
-#home .info {
- padding: 6px;
- position: absolute;
- bottom: 62px;
- right: 35px;
- border-width: 1px;
- border-style: dotted;
- clear: both;
- width: 350px;
-}
-
-html[dir="rtl"] #home .info {
- right: auto;
- left: 35px;
-}
-
-#home .info.success {
- background-color: #aee578;
- border-color: #85b05c;
- display: none;
-}
-
-#home .info.fail {
- background-color: #f19d9d;
- border-color: #b34f4f;
-}
-
-#home .info.report {
- background-color: #f3f48b;
- border-color: #c9c66b;
- display: none;
-}
-
-#home .info.report span {
- text-decoration: underline;
-}
-
-#home .notice.simple {
- background-color: rgb(20,20,20);
- background-color: rgba(20,20,20,0.7);
- color: white;
- font-size: 0.9em;
- text-decoration: none;
- text-shadow: 0 1px 0 black;
- position: fixed;
- bottom: 0;
- left: 0;
- right: 0;
- padding: 8px 20px;
- z-index: 100;
- -moz-box-shadow: 0 0 25px #ababab;
- -webkit-box-shadow: 0 0 25px #ababab;
- box-shadow: 0 0 25px #ababab;
-}
-
-#home .notice.simple .title {
- background-color: rgb(20,20,20);
- background-color: rgba(20,20,20,0.4);
- background-position: 8px -299px;
- border-width: 0 1px 1px 1px;
- border-style: solid;
- border-color: #141414;
- font-weight: bold;
- padding: 8px 8px 8px 30px;
-}
-
-#home .notice.simple .text {
- margin-left: 20px;
-}
-
-html[dir="rtl"] #home .notice.simple .text {
- margin-left: 0;
- margin-right: 20px;
-} \ No newline at end of file
diff --git a/app/stylesheets/ie.css b/app/stylesheets/ie.css
deleted file mode 100644
index 7e95c8d6..00000000
--- a/app/stylesheets/ie.css
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are all the IE compliant CSS classes
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-/* Fix custom fonts */
-
-@font-face {
- font-family: 'PT Sans';
- src: url(../fonts/eot/ptsans.eot);
-}
-
-@font-face {
- font-family: 'PT Sans';
- font-style: italic;
- src: url(../fonts/eot/ptsansitalic.eot);
-}
-
-@font-face {
- font-family: 'PT Sans';
- font-weight: bold;
- src: url(../fonts/eot/ptsansbold.eot);
-}
-
-@font-face {
- font-family: 'PT Sans';
- font-weight: bold;
- font-style: italic;
- src: url(../fonts/eot/ptsansbolditalic.eot);
-}
-
-/* rgba(255,255,255,0.9) */
-.search ul {
- background: transparent;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#edffffff,endColorstr=#edffffff);
-}
-
-/* rgba(255,255,255,0.3) */
-a.finish:active,
-#manager-buttons input:active,
-#install-buttons input:active {
- background: transparent;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#49ffffff,endColorstr=#49ffffff);
-}
-
-/* rgba(255,255,255,0.2) */
-a.finish:hover,
-a.finish:focus,
-#manager-buttons input:hover,
-#manager-buttons input:focus,
-#install-buttons input:hover,
-#install-buttons input:focus,
-.notifications-content .one-notification:active {
- background: transparent;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#33ffffff,endColorstr=#33ffffff);
-}
-
-/* rgba(255,255,255,0.14) */
-#home .corporation .corp_network a:active,
-#home .locale .list a:active {
- background: transparent;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#2fffffff,endColorstr=#2fffffff);
-}
-
-/* rgba(255,255,255,0.1) */
-#home .corporation .corp_network a:hover,
-#home .corporation .corp_network a:focus,
-#home .locale .list a:hover,
-#home .locale .list a:focus,
-a.finish,
-a.finish.disabled:hover,
-a.finish.disabled:focus,
-a.finish.disabled:active,
-#manager-buttons input,
-#install-buttons input,
-.notifications-content .one-notification:hover,
-.notifications-content .one-notification:focus {
- background: transparent;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#20ffffff,endColorstr=#20ffffff);
-}
-
-/* rgba(255,239,104,0.8) */
-.popup .infos {
- background: transparent;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#deffef68,endColorstr=#deffef68);
-}
-
-/* rgba(225,160,20,0.3) */
-.search ul li.hovered {
- background: transparent;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#46e1a014,endColorstr=#46e1a014);
-}
-
-/* rgba(248,246,186,0.9) */
-#board .one-board.info {
- background: transparent;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#edf8f6ba,endColorstr=#edf8f6ba);
-}
-
-/* rgba(241,160,160,0.9) */
-#board .one-board.error {
- background: transparent;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#edf1a0a0,endColorstr=#edf1a0a0);
-}
-
-/* rgba(234,234,234,0.8) */
-#page-engine .chatstate {
- background: transparent;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#deeaeaea,endColorstr=#deeaeaea);
-}
-
-/* rgba(20,20,20,0.6) */
-#home .notice.simple {
- background: transparent;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#a0141414,endColorstr=#a0141414);
-}
-
-/* rgba(20,20,20,0.8) */
-#reconnect .pane,
-#my-infos,
-#right-content,
-#roster,
-#manager,
-#install {
- background: transparent;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#de141414,endColorstr=#de141414);
-}
-
-#home .main {
- background: #141414;
-}
-
-/* rgba(20,20,20,0.9) */
-.popup {
- background: transparent;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ed141414,endColorstr=#ed141414);
-}
-
-/* rgba(0,0,0,0.2) */
-#install-top .step {
- background: transparent;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#33000000,endColorstr=#33000000);
-}
-
-/* rgba(0,0,0,0.6) */
-.lock {
- background: url(../images/others/lock.png) repeat !important;
-}
-
-/* rgba(0,0,0,0.8) */
-#page-engine .tooltip-subitem,
-.attach-subitem,
-.buddy-infos-subitem,
-.buddy-conf-subitem,
-.tools-content-subitem {
- background: transparent;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#de000000,endColorstr=#de000000);
-}
-
-/* Fix a fieldset padding bug */
-legend {
- margin-bottom: 5px !important;
-}
-
-/* Fix opacity bugs */
-#options .forms.in_background fieldset {
- filter: alpha(opacity = 50) !important;
-}
-
-a.finish.disabled {
- filter: alpha(opacity = 20) !important;
-}
diff --git a/app/stylesheets/images.css b/app/stylesheets/images.css
deleted file mode 100644
index d5a41048..00000000
--- a/app/stylesheets/images.css
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the images CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-.body-images {
- background-image: url(../images/sprites/background.png);
- background-repeat: repeat;
- background-color: #93c5fa;
-}
-
-.install-images {
- background-image: url(../images/sprites/install.png);
- background-repeat: no-repeat;
-}
-
-.home-images {
- background-image: url(../images/sprites/home.png);
- background-repeat: no-repeat;
-}
-
-.browsers-images {
- background-image: url(../images/sprites/browsers.png);
- background-repeat: no-repeat;
-}
-
-.buttons-images {
- background-image: url(../images/sprites/buttons.png);
- background-repeat: repeat-x;
-}
-
-.talk-images {
- background-image: url(../images/sprites/talk.png);
- background-repeat: no-repeat;
-}
-
-.smileys-images {
- background-image: url(../images/sprites/smileys.png);
- background-repeat: no-repeat;
-}
-
-.welcome-images {
- background-image: url(../images/sprites/welcome.png);
- background-repeat: no-repeat;
-}
-
-.me-images {
- background-image: url(../images/sprites/me.png);
- background-repeat: no-repeat;
-}
-
-.call-images {
- background-image: url(../images/sprites/call.png);
- background-repeat: no-repeat;
-}
-
-.manager-images {
- background-image: url(../images/sprites/manager.png);
- background-repeat: no-repeat;
-}
-
-.mobile-images {
- background-image: url(../images/sprites/mobile.png);
- background-repeat: no-repeat;
-}
-
-.wait-small {
- background-image: url(../images/wait/wait-small.gif);
- background-repeat: no-repeat;
- height: 16px;
- width: 16px;
-}
-
-.wait-medium {
- background-image: url(../images/wait/wait-medium.png);
- background-repeat: no-repeat;
- height: 24px;
- width: 24px;
-}
-
-.wait-big {
- background-image: url(../images/wait/wait-big.gif);
- background-repeat: no-repeat;
- height: 30px;
- width: 30px;
-}
-
-.wait-typing {
- background-image: url(../images/wait/wait-typing.gif);
- background-repeat: no-repeat;
- height: 4px;
- width: 16px;
-} \ No newline at end of file
diff --git a/app/stylesheets/inbox.css b/app/stylesheets/inbox.css
deleted file mode 100644
index 2635add5..00000000
--- a/app/stylesheets/inbox.css
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the inbox CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#inbox .content {
- padding: 10px 0 10px 0;
-}
-
-#inbox .content p {
- margin: 3px 10px;
- text-align: justify;
- font-size: 0.9em;
-}
-
-#inbox .inbox-results {
- height: 310px;
- width: 620px;
- margin: -5px 0 0 10px;
- padding: 6px 0 0 0;
- overflow: auto;
-}
-
-html[dir="rtl"] #inbox .inbox-results {
- margin-left: auto;
- margin-right: 10px;
-}
-
-#inbox .message-unread {
- background-color: #E9F1FD;
-}
-
-#inbox .one-message {
- font-size: 0.9em;
- border-bottom: 1px #b2c7cb solid;
-}
-
-#inbox .message-head {
- padding: 6px 0 7px 4px;
- overflow: hidden;
-}
-
-#inbox .message-head:hover {
- background-color: #e9f1fd;
- cursor: pointer;
-}
-
-#inbox .message-head:active {
- background-color: #f1f6fd;
-}
-
-#inbox .one-message.message-reading,
-#inbox .one-message.message-reading .message-head {
- background-color: #f1f6fd;
-}
-
-html[dir="rtl"] #inbox .one-message a.one-button {
- float: right;
-}
-
-#inbox .avatar-container {
- float: left;
- width: 40px;
- height: 40px;
- margin-right: 7px;
- text-align: center;
- background-repeat: no-repeat;
-}
-
-html[dir="rtl"] #inbox .avatar-container {
- margin-left: 7px;
- margin-right: auto;
- float: right;
-}
-
-#inbox .avatar {
- max-width: 40px;
- max-height: 40px;
-}
-
-#inbox .message-jid,
-#inbox .message-subject {
- float: left;
- margin: 0 2px;
- overflow: hidden;
-}
-
-html[dir="rtl"] #inbox .message-jid,
-html[dir="rtl"] #inbox .message-subject {
- float: right;
-}
-
-#inbox .message-jid {
- width: 165px;
- font-weight: bold;
-}
-
-#inbox .message-subject {
- width: 355px;
-}
-
-#inbox .message-truncated {
- color: #42646b;
- font-size: 0.8em;
- margin: 23px 0 0 49px;
-}
-
-#inbox .message-body {
- padding: 8px 5px 5px 5px;
-}
-
-#inbox .message-body a {
- text-decoration: underline;
-}
-
-#inbox .message-meta {
- margin-top: 6px;
- padding: 3px 4px;
- border-top: 1px #b2c7cb dotted;
-}
-
-#inbox .message-meta span.date {
- color: #28474e;
- font-size: 0.8em;
- margin: 10px 0 0 4px;
- float: left;
-}
-
-#inbox .message-meta a {
- font-size: 0.98em;
- margin: 5px;
- float: right;
- display: block;
-}
-
-#inbox .inbox-noresults {
- font-weight: bold;
- display: none;
-}
-
-#inbox .a-show-messages {
- display: none;
-}
-
-#inbox .inbox-new {
- display: none;
- height: 300px;
- width: 620px;
- margin: -5px 0 0 10px;
- padding: 16px 0 0 0;
-}
-
-#inbox .inbox-new-block {
- border-top: 1px #686868 dotted;
- padding-top: 9px;
- min-height: 32px;
- clear: both;
-}
-
-#inbox .inbox-new-text {
- float: left;
- width: 100px;
-}
-
-#inbox .inbox-new-textarea {
- width: 460px;
- height: 109px;
- margin-bottom: 10px;
- float: left;
-}
-
-#inbox .inbox-new input {
- float: left;
-}
-
-html[dir="rtl"] #inbox .inbox-new-text,
-html[dir="rtl"] #inbox .inbox-new-textarea,
-html[dir="rtl"] #inbox .inbox-new input {
- float: right;
-}
-
-html[dir="rtl"] #inbox .inbox-new-text {
- margin-right: 20px;
-}
-
-html[dir="rtl"] #inbox .inbox-new input {
- margin-right: auto;
-}
-
-#inbox .inbox-new-to ul {
- width: 264px;
- max-height: 168px;
- font-size: 0.9em;
- left: 120px;
- top: 31px;
-}
-
-html[dir="rtl"] #inbox .inbox-new-to ul {
- left: auto;
- right: 130px;
-}
-
-#inbox .inbox-new-to-input {
- width: 260px;
-}
-
-#inbox .inbox-new-subject-input {
- width: 380px;
-}
-
-#inbox .inbox-new-file a {
- display: block;
- float: left;
-}
-
-#inbox .inbox-new-file a.file {
- font-size: 0.85em;
- height: 16px;
- max-width: 320px;
- margin: 3px 0 15px 013px;
- overflow: hidden;
-}
-
-#inbox .inbox-new-file a.one-button {
- font-size: 0.85em;
- margin: -2px 0 0 25px;
-}
-
-#inbox .inbox-new-send a {
- font-size: 0.85em;
- float: right;
- display: block;
-}
-
-html[dir="rtl"] #inbox .inbox-new-send a {
- margin-right: 18px;
-} \ No newline at end of file
diff --git a/app/stylesheets/install.css b/app/stylesheets/install.css
deleted file mode 100644
index 23abc9c4..00000000
--- a/app/stylesheets/install.css
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the install CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-body {
- color: white;
-}
-
-#install {
- background-color: rgb(20,20,20);
- background-color: rgba(20,20,20,0.85);
- width: 800px;
- margin: 35px auto;
- padding-bottom: 17px;
- -moz-border-radius: 6px;
- -webkit-border-radius: 6px;
- border-radius: 6px;
- -moz-box-shadow: 0 0 35px #5c5c5c;
- -webkit-box-shadow: 0 0 35px #5c5c5c;
- box-shadow: 0 0 35px #5c5c5c;
-}
-
-#install a {
- color: black;
- text-decoration: underline;
-}
-
-#install .clear {
- clear: both;
-}
-
-#install fieldset {
- border: 1px solid black;
- margin: 22px 0 15px 0;
- padding: 7px 2px 5px 2px;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
-}
-
-#install legend {
- font-size: 0.9em;
- margin: 0 0 0 15px;
- padding: 0 2px;
- text-transform: uppercase;
-}
-
-#install label {
- width: 200px;
- display: block;
- float: left;
- clear: both;
- margin: 0 0 9px 12px;
-}
-
-html[dir="rtl"] #install label {
- margin-right: 12px;
- margin-left: 0;
- float: right;
-}
-
-#install input,
-#install select {
- float: left;
- margin-bottom: 5px;
-}
-
-html[dir="rtl"] #install input,
-html[dir="rtl"] #install select {
- float: right;
-}
-
-#install input[type="text"],
-#install input[type="url"],
-#install input[type="password"] {
- margin-top: -2px;
- padding: 3px;
- font-size: 0.95em;
- min-width: 220px;
-}
-
-#install input.icon {
- padding-left: 24px;
- min-width: 199px;
- max-height: 18px;
-}
-
-#install input.icon#user_name {
- background-position: 4px -204px;
-}
-
-#install input.icon#user_password {
- background-position: 4px -226px;
-}
-
-#install input.icon#user_repassword {
- background-position: 4px -248px;
-}
-
-#install-top {
- padding: 30px 45px;
-}
-
-#install-top .logo {
- background-position: 0 0;
- min-width: 88px;
- height: 36px;
- padding: 32px 0 0 66px;
- font-size: 32px;
- color: white;
- text-transform: lowercase;
- float: left;
- text-shadow: 0 1px 1px black;
-}
-
-#install-top .step {
- background-color: rgb(0,0,0);
- background-color: rgba(0,0,0,0.2);
- border: 2px solid white;
- padding: 6px 21px;
- font-size: 2.7em;
- text-shadow: 0 1px 1px black;
- float: right;
- -moz-border-radius: 40px;
- -webkit-border-radius: 40px;
- border-radius: 40px;
- -moz-box-shadow: 0 0 10px #202020;
- -webkit-box-shadow: 0 0 10px #202020;
- box-shadow: 0 0 10px #202020;
-}
-
-#install-top .step span {
- font-size: 0.6em;
-}
-
-#install-content {
- background: #e4eef9;
- background: -moz-linear-gradient(top, #e4eef9, #d0e5fa);
- background: -webkit-gradient(linear, left top, left bottom, from(#e4eef9), to(#d0e5fa));
- background: -webkit-linear-gradient(top, #e4eef9 0%, #d0e5fa 100%);
- background: -o-linear-gradient(top, #e4eef9 0%, #d0e5fa 100%);
- color: black;
- font-size: 0.9em;
- margin: 0 10px;
- padding: 20px 24px;
- min-height: 260px;
- clear: both;
- right: 10px;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
- -moz-box-shadow: 0 0 20px #202020;
- -webkit-box-shadow: 0 0 20px #202020;
- box-shadow: 0 0 20px #202020;
-}
-
-#install-content h3 {
- padding-left: 24px;
- margin-bottom: 15px;
- float: left;
-}
-
-html[dir="rtl"] #install-content h3 {
- float: right;
-}
-
-#install-content h3.start {
- background-position: 0 -73px;
-}
-
-#install-content h3.storage {
- background-position: 0 -95px;
-}
-
-#install-content h3.account {
- background-position: 0 -117px;
-}
-
-#install-content h3.main {
- background-position: 0 -139px;
-}
-
-#install-content h3.hosts {
- background-position: 0 -161px;
-}
-
-#install-content h3.services {
- background-position: 0 -183px;
-}
-
-#install-content p {
- margin-bottom: 10px;
- clear: both;
-}
-
-#install-content .info {
- color: black;
- border-width: 1px;
- border-style: dashed;
- padding: 6px 8px;
- display: block;
- text-decoration: none;
-}
-
-#install-content .info.smallspace {
- margin: 14px 0 10px 0;
-}
-
-#install-content .info.bigspace {
- margin: 35px 0 20px 0;
-}
-
-#install-content .info.first {
- margin-top: 28px;
-}
-
-#install-content .info.last {
- margin-bottom: 28px;
-}
-
-#install-content .info.neutral {
- background-color: #f0f19d;
- border-color: #b3ad4f;
-}
-
-#install-content a.info.neutral:hover,
-#install-content a.info.neutral:focus {
- background-color: #eced96;
-}
-
-#install-content a.info.neutral:active {
- background-color: #e9ea93;
-}
-
-#install-content .info.success {
- background-color: #a8dca9;
- border-color: #5e9f5f;
-}
-
-#install-content a.info.success:hover,
-#install-content a.info.success:focus {
- background-color: #a0d5a1;
-}
-
-#install-content a.info.success:active {
- background-color: #9ad09b;
-}
-
-#install-content .info.fail {
- background-color: #f19d9d;
- border-color: #b34f4f;
-}
-
-#install-content ol {
- margin: 20px 30px;
-}
-
-#install-content ol li {
- margin-bottom: 1px;
-}
-
-#install-buttons {
- margin-top: 22px;
-}
-
-#install-buttons input {
- border: 1px solid white;
- background-color: rgb(255,255,255);
- background-color: rgba(255,255,255,0.1);
- color: white;
- padding: 4px 8px;
- margin-right: 20px;
- text-shadow: 0 1px 1px black;
- float: right;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
- -moz-box-shadow: 0 0 5px #202020;
- -webkit-box-shadow: 0 0 5px #202020;
- box-shadow: 0 0 5px #202020;
-}
-
-#install-buttons input:hover,
-#install-buttons input:focus {
- cursor: pointer;
- background-color: rgb(255,255,255);
- background-color: rgba(255,255,255,0.2);
- -moz-box-shadow: 0 0 15px #202020;
- -webkit-box-shadow: 0 0 15px #202020;
- box-shadow: 0 0 15px #202020;
-}
-
-#install-buttons input:active {
- background-color: rgb(255,255,255);
- background-color: rgba(255,255,255,0.3);
-}
diff --git a/app/stylesheets/integratebox.css b/app/stylesheets/integratebox.css
deleted file mode 100644
index 7a73d1aa..00000000
--- a/app/stylesheets/integratebox.css
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the integratebox CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#integratebox .top {
- height: 40px;
-}
-
-#integratebox .content {
- text-align: center;
- height: 385px;
-}
-
-#integratebox .one-media img {
- max-height: 385px;
- max-width: 640px;
-}
-
-#integratebox .one-media a img {
- border: none;
-}
-
-#integratebox .one-media audio {
- margin-top: 170px;
-}
-
-#integratebox .bottom {
- left: 10px;
-} \ No newline at end of file
diff --git a/app/stylesheets/ios.css b/app/stylesheets/ios.css
deleted file mode 100644
index d8c2f0b5..00000000
--- a/app/stylesheets/ios.css
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the iOS add to home CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Camaran
-
-*/
-
-/**
- *
- * Main container
- *
- */
-#addToHomeScreen {
- z-index:9999;
- -webkit-user-select:none;
- user-select:none;
- -webkit-box-sizing:border-box;
- box-sizing:border-box;
- -webkit-touch-callout:none;
- touch-callout:none;
- width:240px;
- font-size:15px;
- padding:12px 14px;
- text-align:left;
- font-family:helvetica;
- background-image:-webkit-gradient(linear,0 0,0 100%,color-stop(0,#fff),color-stop(0.02,#eee),color-stop(0.98,#ccc),color-stop(1,#a3a3a3));
- border:1px solid #505050;
- -webkit-border-radius:8px;
- -webkit-background-clip:padding-box;
- color:#333;
- text-shadow:0 1px 0 rgba(255,255,255,0.75);
- line-height:130%;
- -webkit-box-shadow:0 0 4px rgba(0,0,0,0.5);
-}
-
-#addToHomeScreen.addToHomeIpad {
- width:268px;
- font-size:18px;
- padding:14px;
-}
-
-/**
- *
- * The 'wide' class is added when the popup contains the touch icon
- *
- */
-#addToHomeScreen.addToHomeWide {
- width:296px;
-}
-
-#addToHomeScreen.addToHomeIpad.addToHomeWide {
- width:320px;
- font-size:18px;
- padding:14px;
-}
-
-/**
- *
- * The balloon arrow
- *
- */
-#addToHomeScreen .addToHomeArrow {
- position:absolute;
- background-image:-webkit-gradient(linear,0 0,100% 100%,color-stop(0,rgba(204,204,204,0)),color-stop(0.4,rgba(204,204,204,0)),color-stop(0.4,#ccc));
- border-width:0 1px 1px 0;
- border-style:solid;
- border-color:#505050;
- width:16px; height:16px;
- -webkit-transform:rotateZ(45deg);
- bottom:-9px; left:50%;
- margin-left:-8px;
- -webkit-box-shadow:inset -1px -1px 0 #a9a9a9;
- -webkit-border-bottom-right-radius:2px;
-}
-
-
-/**
- *
- * The balloon arrow for iPad
- *
- */
-#addToHomeScreen.addToHomeIpad .addToHomeArrow {
- -webkit-transform:rotateZ(-135deg);
- background-image:-webkit-gradient(linear,0 0,100% 100%,color-stop(0,rgba(238,238,238,0)),color-stop(0.4,rgba(238,238,238,0)),color-stop(0.4,#eee));
- -webkit-box-shadow:inset -1px -1px 0 #fff;
- top:-9px; bottom:auto; left:50%;
-}
-
-
-/**
- *
- * Close button
- *
- */
-#addToHomeScreen .addToHomeClose {
- -webkit-box-sizing:border-box;
- position:absolute;
- right:4px;
- top:4px;
- width:18px;
- height:18px; line-height:14px;
- text-align:center;
- text-indent:1px;
- -webkit-border-radius:9px;
- background:rgba(0,0,0,0.12);
- color:#707070;
- -webkit-box-shadow:0 1px 0 #fff;
- font-size:16px;
-}
-
-
-/**
- *
- * The '+' icon, displayed only on iOS < 4.2
- *
- */
-#addToHomeScreen .addToHomePlus {
- font-weight:bold;
- font-size:1.3em;
-}
-
-
-/**
- *
- * The 'share' icon, displayed only on iOS >= 4.2
- *
- */
-#addToHomeScreen .addToHomeShare {
- display:inline-block;
- width:18px;
- height:15px;
- background-repeat:no-repeat;
- background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAeCAQAAADu6HTYAAADPElEQVR4Xq3TX2gcRRzA8e/M7mVv2+TSNpc/TZtrY6jUGqgaSAmEChKLrYK0YH0RFC2CSCkEfCghiKU04J8qNigq6os+iQV98MHWFwVBrQQRWs21lBw5cw3NNb1/udu72RGG5Y77IzXW77D7sAwf5scyYoL6BGXSDKFZwaGpLvIUaeoCkvX1MmsM0Ny6oRSQYOLuIS+YZOpfQdqslpUxcZrzTVAz4qPwW2O3CeIwC/RSzeY6Ow1QhUrkr+YOWfEKDkEP8Rij7CHKJmrFSDHBdwGEE5wiGChPN+PnT8VdRtEIl1d4gRj/1EVe5ZSBKGh8iqQpo/Fo5+3C/gz0MYg4zgwbqday1/Q4B8BGQ45d/Hi54lakCrU5obOcidJpu1+Lg9whjabyaOYLnrIBFFaRD+xe2ybMDWY66GmP/WA9cGfGp0CWhy0wkMN8inepFiH2rV1j0NQSNQbFLRQnS8/8YSDBBpadfv4CYDub2fmeHDNAsL1MBWUel0iA+Xik6eHcyvD3vAMSU1TGuA/YRS+dD7ovCQN43GKRFCU20Kd3V/avDVVyAZ5niTEuLA5/zBGWg9EEEhfJKN200Tat8CmRAQb9+wv7soPlHt2tQorsz1uPbr0HTY4sJwrH47zJZwABBAKLMBoQXepwgTwdHCo+fXMkQ4lrxEmQ5AaXipPqDY9V2vn09tgvTPI71EEGYxM+/uMJLJ4svpgaWGKOi/xKgmqLSUGSUd5f2vIVJ/CgBaTIUsZ7ZBsn0+NzfMOXLFCXQyTcybN6ep5ZZgUOHn7jpfUpsZshdugPGf+E5zjbyHTSRyQ8xfRPPM/s63RHeuknSoT22mjmmnAOIMkUZ6D1xSfPPAfd1WFKM3sO2CMaHx8M1NjnXKHaAGGkOW0C02WeYHUz4qMtx+w5gUDS8NckYe5lHsMYwCZEPyEEmjLDZFmAS7CDviMdxyTkMNVBKEmYLvbiQQBIBBbCQG04bGQvFWz6CfsCQLWCigILFwcfkGYBiOpbYuOizTAyYyDdCtrGaRG1LCkIgMYEFhI0WqQZoSlbGRyHKe4qOx7iv2bVQW9dp4dlM/x6kmwnWQcd/Q3FCqwTEiT5s+6D5v/pb0SSHyg7uhMWAAAAAElFTkSuQmCC);
- background-size:18px 15px;
- text-indent:-9999em;
- overflow:hidden;
-}
-
-#addToHomeScreen .addToHomeShare.addToHomeShareOS7 {
- width:11px;
- background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAA8CAYAAAAQTCjdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAASCQAAEgkB80sG3AAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKjSURBVGiB7dpPiFVVHMDxz7m9NCtMyI2bEJEC25WrEkzHUXCRraIwdNE8ZxfYIlcis1ZEbGEzT1QCF4XgH1CyWhUoJKIWNRGEiCNKmkSiYTzfcfGuOokx77x3ZlS8382959zfn+/invvn3RdijHIRBrwkOINCYXEcdjpb7VyiYdBsLScwt5y6IloYdzqXo36Ro0gY9IKWo+5JwmzBt2HQnBw9ehYNazyn5TBee8Dh+Vq+CWu92GufnkTDR6ab7gDeBNHouMM/l9tXTXM0fGBmL726Fg1Dam74EsvKqR8VNowL2Yzj5f7rnnE4DHq2235diYYhhTGfC94up35T0y+6di/ITU0rKVd+sEi0P7xr2pSJOu8zvF+OzqEv7vDH/WFxt7/cshy/ticsN8sXYUht0kXDOlsF9XJ4UaEvNoz9X3zc5bKaZThbyr5jzJ4wlNY7KTgM+ES0vhz+KeiPw36fKC/ucAF9uFBOrTZm26SJCtaV27+xIo7cXdkTEhvOoh+XyxprU1qnim7CQdGK2HAyKRexYVShT3RItDElN+mkjiP2Ym+S3f01hv2EVal5WW6hU0ElmptaqJuBpXg6MbeFH2LDpU6CQ93zWIKnEvs0cayGU3glMfkOo1jQYewZzOuyz7FC95Jwo5OgUFfgeg993hh/eTqCTxOSm/iuk8DY0Ap1b2GhtHXxsfZN4j/X0fOx4auEIknEhqv4OiUn1L13Z/+xWfWVaG4q0dxUormpRHNTieamEs1NJZqbJ1Q0jHvdiJo5S2cVjSNOCHZhn3/SnuYnIvl3yomIIz7MXZMn9hydRCrR3FSiualEc1OJ5qYSzU0lmptKNDePjWgwcPePT7/g+4cp8wCW4GXaryK3tL+mLdD5x62ppllgu7bso8q/2HIbzGWdNmWnSJwAAAAASUVORK5CYII=);
- background-size:11px 15px;
-}
-
-/**
- *
- * The touch icon (if available)
- *
- */
-#addToHomeScreen .addToHomeTouchIcon {
- display:block;
- float:left;
- -webkit-border-radius:6px;
- border-radius:6px;
- -webkit-box-shadow:0 1px 3px rgba(0,0,0,0.5),
- inset 0 0 2px rgba(255,255,255,0.9);
- box-shadow:0 1px 3px rgba(0,0,0,0.5),
- inset 0 0 2px rgba(255,255,255,0.9);
- background-repeat:no-repeat;
- width:57px; height:57px;
- -webkit-background-size:57px 57px;
- background-size:57px 57px;
- margin:0 12px 0 0;
- border:1px solid #333;
- -webkit-background-clip:padding-box;
- background-clip:padding-box;
-}
diff --git a/app/stylesheets/jingle.css b/app/stylesheets/jingle.css
deleted file mode 100644
index 1614317e..00000000
--- a/app/stylesheets/jingle.css
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the Jingle CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#jingle .videobox .topbar .card {
- margin: 4px 0 0 12px;
-}
-
-html[dir="rtl"] #jingle .videobox .topbar .card {
- margin-left: 0;
- margin-right: 12px;
-}
-
-#jingle .videobox .topbar .card,
-#jingle .videobox .topbar .card .avatar-container,
-#jingle .videobox .topbar .card .identity {
- float: left;
-}
-
-html[dir="rtl"] #jingle .videobox .topbar .card,
-html[dir="rtl"] #jingle .videobox .topbar .card .avatar-container,
-html[dir="rtl"] #jingle .videobox .topbar .card .identity {
- float: right;
-}
-
-#jingle .videobox .topbar .card .avatar-container {
- height: 32px;
- width: 32px;
-}
-
-#jingle .videobox .topbar .card .avatar-container .avatar {
- max-height: 32px;
- max-width: 32px;
-}
-
-#jingle .videobox .topbar .card .identity {
- margin: 1px 0 0 10px;
-}
-
-html[dir="rtl"] #jingle .videobox .topbar .card .identity {
- margin-left: 0;
- margin-right: 10px;
-}
-
-#jingle .videobox .topbar .card .identity .name,
-#jingle .videobox .topbar .card .identity .xid {
- letter-spacing: 1px;
- display: block;
-}
-
-#jingle .videobox .topbar .card .identity .name {
- font-size: 12px;
- font-weight: bold;
- text-transform: uppercase;
-}
-
-#jingle .videobox .topbar .card .identity .xid {
- font-size: 10px;
-}
-
-#jingle .videobox .topbar .controls {
- margin-left: 50px;
-}
-
-#jingle .videobox .remote_video {
- background-color: #000000;
- width: 100%;
- height: 100%;
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- z-index: 1;
-}
-
-#jingle .videobox .remote_video video {
- width: 100%;
- height: 100%;
-}
-
-#jingle .videobox .branding {
- background-position: 0 0;
- width: 39px;
- height: 44px;
- opacity: 0.5;
- position: absolute;
- bottom: 16px;
- right: 24px;
- z-index: 2;
-}
-
-html[dir="rtl"] #jingle .videobox .branding {
- right: auto;
- left: 24px;
-} \ No newline at end of file
diff --git a/app/stylesheets/main.css b/app/stylesheets/main.css
deleted file mode 100644
index eec236a7..00000000
--- a/app/stylesheets/main.css
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the main CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-* {
- margin: 0;
- padding: 0;
-}
-
-body {
- font: normal 14.6px 'PT Sans', sans-serif;
- text-shadow: 0 0 5px white;
-}
-
-h1 {
- margin-bottom: 15px;
-}
-
-a {
- text-decoration: none;
- color: black;
- outline-style: none;
-}
-
-a:hover,
-a:focus {
- cursor: pointer;
- text-decoration: underline;
-}
-
-legend {
- color: black;
-}
-
-input,
-textarea {
- background-color: white;
- border: 1px solid #636363;
- font-size: 0.95em;
- padding: 2px;
- outline-style: none;
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
- -moz-box-shadow: inset 0 3px 10px #dcdcdc;
- -webkit-box-shadow: inset 0 3px 10px #dcdcdc;
- box-shadow: inset 0 3px 10px #dcdcdc;
-}
-
-textarea {
- font-size: 1.1em;
- resize: none;
-}
-
-input:focus,
-input[type="submit"]:hover,
-input[type="reset"]:hover,
-textarea:focus {
- border: 1px solid #e1a014;
- -moz-box-shadow: inset 0 3px 10px #edd9bc;
- -webkit-box-shadow: inset 0 3px 10px #edd9bc;
- box-shadow: inset 0 3px 10px #edd9bc;
-}
-
-input[type="submit"],
-input[type="reset"] {
- cursor: pointer;
-}
-
-input[type="submit"]:active,
-input[type="reset"]:active {
- -moz-box-shadow: inset 0 3px 15px #e1a753;
- -webkit-box-shadow: inset 0 3px 15px #e1a753;
- box-shadow: inset 0 3px 15px #e1a753;
-}
-
-input[disabled],
-textarea[disabled] {
- background-color: #f3f3f3;
- border: 1px solid #989898;
-}
-
-input:placeholder {
- color: #78868a !important;
-}
-
-input:-moz-placeholder {
- color: #78868a !important;
-}
-
-input::-webkit-input-placeholder {
- color: #78868a !important;
-}
-
-input.placeholder {
- color: #78868a !important;
-}
-
-input[type="checkbox"] {
- margin-top: 2px;
-}
-
-input[type="checkbox"],
-input[type="radio"] {
- background: transparent none !important;
- border: 0 none !important;
-}
-
-input.input-reset {
- background: transparent;
- border: 0 none;
- margin: 0;
- padding: 0;
- -moz-border-radius: 0;
- -webkit-border-radius: 0;
- border-radius: 0;
- -moz-box-shadow: none;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-
-.please-complete,
-.please-complete:hover,
-.please-complete:focus {
- border: 1px #ac2525 solid !important;
- -moz-box-shadow: inset 0 3px 10px #f39c9c !important;
- -webkit-box-shadow: inset 0 3px 10px #f39c9c !important;
- box-shadow: inset 0 3px 10px #f39c9c !important;
-}
-
-.hidden {
- display: none !important;
-}
-
-.clear {
- clear: both !important;
- display: block !important;
-}
diff --git a/app/stylesheets/manager.css b/app/stylesheets/manager.css
deleted file mode 100644
index 9fc8b696..00000000
--- a/app/stylesheets/manager.css
+++ /dev/null
@@ -1,612 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the manager CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#manager {
- background-color: rgb(20,20,20);
- background-color: rgba(20,20,20,0.85);
- width: 945px;
- margin: 0 auto 25px;
- padding-bottom: 17px;
- -moz-border-radius-bottomleft: 4px;
- -moz-border-radius-bottomright: 4px;
- -webkit-border-bottom-left-radius: 4px;
- -webkit-border-bottom-right-radius: 4px;
- border-bottom-left-radius: 4px;
- border-bottom-right-radius: 4px;
- -moz-box-shadow: 0 0 35px #5c5c5c;
- -webkit-box-shadow: 0 0 35px #5c5c5c;
- box-shadow: 0 0 35px #5c5c5c;
-}
-
-#manager a {
- color: black;
- text-decoration: underline;
-}
-
-#manager .clear {
- clear: both;
-}
-
-#manager fieldset {
- border: 1px solid black;
- margin: 22px 0 15px 0;
- padding: 7px 2px 5px 2px;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
-}
-
-#manager legend {
- font-size: 0.9em;
- margin: 0 0 0 15px;
- padding: 0 2px;
- text-transform: uppercase;
-}
-
-#manager label {
- width: 200px;
- display: block;
- float: left;
- clear: both;
- margin: 0 0 9px 12px;
-}
-
-html[dir="rtl"] #manager label {
- margin-left: 0;
- margin-right: 12px;
- float: right;
-}
-
-#manager label.master {
- text-decoration: underline;
-}
-
-#manager input,
-#manager select {
- float: left;
- margin-bottom: 5px;
-}
-
-html[dir="rtl"] #manager input,
-html[dir="rtl"] #manager select {
- float: right;
-}
-
-#manager input[type="radio"] {
- margin: 2px 8px 5px 0;
-}
-
-html[dir="rtl"] #manager input[type="radio"] {
- margin-right: 0;
- margin-left: 8px;
-}
-
-#manager input[type="text"],
-#manager input[type="url"],
-#manager input[type="password"],
-#manager select {
- margin-top: -2px;
- font-size: 0.95em;
-}
-
-#manager input[type="text"],
-#manager input[type="url"],
-#manager input[type="password"] {
- padding: 3px;
- min-width: 220px;
-}
-
-#manager input.icon {
- padding-left: 24px;
- min-width: 199px;
- max-height: 18px;
-}
-
-#manager input.icon#admin_name {
- background-position: 4px -510px;
-}
-
-#manager input.icon#admin_password,
-#manager input.icon#user_repassword {
- background-position: 4px -532px;
-}
-
-#manager input.icon#user_name,
-#manager input.icon#music_artist {
- background-position: 4px -554px;
-}
-
-#manager input.icon#user_password {
- background-position: 4px -576px;
-}
-
-#manager input.icon#music_title {
- background-position: 4px -598px;
-}
-
-#manager input.icon#music_album {
- background-position: 4px -620px;
-}
-
-#manager input.icon#background_image_color,
-#manager input.icon#background_color_color {
- background-position: 4px -641px;
-}
-
-#manager select {
- min-width: 160px;
- max-width: 230px;
-}
-
-#manager-top {
- padding: 25px 45px 30px;
-}
-
-#manager-top .logo {
- background-position: 0 0;
- min-width: 89px;
- height: 40px;
- padding: 28px 0 0 65px;
- font-size: 32px;
- color: white;
- text-transform: lowercase;
- float: left;
- text-shadow: 0 1px 1px black;
-}
-
-#manager-top .meta {
- background-color: #e0eaec;
- font-size: 0.9em;
- padding: 12px 7px 12px 14px;
- float: right;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
- -moz-box-shadow: 0 0 10px #202020;
- -webkit-box-shadow: 0 0 10px #202020;
- box-shadow: 0 0 10px #202020;
-}
-
-html[dir="rtl"] #manager-top .meta {
- padding-left: 7px;
- padding-right: 14px;
-}
-
-#manager-top .meta span {
- margin-right: 10px;
- color: black;
-}
-
-html[dir="rtl"] #manager-top .meta span {
- margin-right: 0;
- margin-left: 10px;
-}
-
-#manager-top .meta a {
- background-color: #f1f6fd;
- border: 1px solid #b9cbcf;
- color: #224249;
- padding: 4px 8px 4px 21px;
- margin-left: 2px;
- text-decoration: none;
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
-}
-
-#manager-top .meta a:hover,
-#manager-top .meta a:focus {
- border: 1px solid #95b1b7;
-}
-
-#manager-top .meta a:active {
- border: 1px solid #77989f;
-}
-
-#manager-top .meta a.logout {
- background-position: 3px -69px;
-}
-
-#manager-top .meta a.close {
- background-position: 3px -90px;
-}
-
-#manager-tabs {
- margin-left: 12px;
-}
-
-html[dir="rtl"] #manager-tabs {
- margin-left: 0;
- margin-right: 12px;
-}
-
-#manager-tabs a {
- background-color: #d9e7ea;
- color: #204249;
- width: 107px;
- height: 17px;
- padding: 4px 4px 4px 16px;
- margin-left: 4px;
- font-size: 0.94em;
- text-decoration: none;
- overflow: hidden;
- float: left;
- -moz-border-radius-topright: 3px;
- -moz-border-radius-topleft: 3px;
- -webkit-border-top-right-radius: 3px;
- -webkit-border-top-left-radius: 3px;
- border-top-right-radius: 3px;
- border-top-left-radius: 3px;
-}
-
-html[dir="rtl"] #manager-tabs a {
- margin-left: 0;
- margin-right: 4px;
- padding-left: 4px;
- padding-right: 16px;
- float: right;
-}
-
-#manager-tabs a:hover,
-#manager-tabs a:focus {
- background-color: #cedee1;
- text-decoration: none;
-}
-
-#manager-tabs a:active {
- background-color: #c3d3d7;
- text-decoration: none;
-}
-
-#manager-tabs a.tab-active {
- background-color: #e4eef9 !important;
-}
-
-#manager-content {
- background: #e4eef9;
- background: -moz-linear-gradient(top, #e4eef9, #d0e5fa);
- background: -webkit-gradient(linear, left top, left bottom, from(#e4eef9), to(#d0e5fa));
- background: -webkit-linear-gradient(top, #e4eef9 0%, #d0e5fa 100%);
- background: -o-linear-gradient(top, #e4eef9 0%, #d0e5fa 100%);
- color: black;
- font-size: 0.9em;
- margin: 0 10px;
- padding: 20px 24px;
- min-height: 260px;
- clear: both;
- right: 10px;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
- -moz-box-shadow: 0 0 20px #202020;
- -webkit-box-shadow: 0 0 20px #202020;
- box-shadow: 0 0 20px #202020;
-}
-
-#manager-content h3 {
- padding-left: 24px;
- margin-bottom: 15px;
- float: left;
-}
-
-html[dir="rtl"] #manager-content h3 {
- float: right;
-}
-
-#manager-content h3.login {
- background-position: 0 -466px;
-}
-
-#manager-content h3.statistics {
- background-position: 0 -203px;
-}
-
-#manager-content h3.configuration {
- background-position: 0 -224px;
-}
-
-#manager-content h3.hosts {
- background-position: 0 -246px;
-}
-
-#manager-content h3.storage {
- background-position: 0 -268px;
-}
-
-#manager-content h3.design {
- background-position: 0 -290px;
-}
-
-#manager-content h3.users {
- background-position: 0 -312px;
-}
-
-#manager-content h3.updates {
- background-position: 0 -334px;
-}
-
-#manager-content h4 {
- border-top: 1px dotted black;
- padding-top: 5px;
- margin: 20px 0 14px;
- clear: both;
-}
-
-#manager-content ul,
-#manager-content ol {
- width: 380px;
- margin: 8px 0 20px 18px;
-}
-
-html[dir="rtl"] #manager-content ul,
-html[dir="rtl"] #manager-content ol {
- margin-left: 0;
- margin-right: 18px;
-}
-
-#manager-content li {
- margin-bottom: 3px;
-}
-
-html[dir="rtl"] #manager-content li {
- margin-right: 15px;
-}
-
-#manager-content li.total {
- margin-bottom: 14px;
-}
-
-#manager-content li b {
- width: 190px;
- display: inline-block;
-}
-
-#manager-content li span {
- margin-left: 10px;
- display: inline-block;
-}
-
-#manager-content ul.stats,
-#manager-content ol.stats {
- float: left;
-}
-
-#manager-content object.stats {
- border: 1px dotted #bed4d9;
- width: 450px;
- height: 270px;
- margin-bottom: 20px;
- float: right;
-}
-
-#manager-content p,
-#manager-content div {
- margin-bottom: 10px;
- clear: both;
-}
-
-#manager-content .info {
- color: black;
- border-width: 1px;
- border-style: dashed;
- padding: 6px 8px;
- display: block;
- text-decoration: none;
-}
-
-#manager-content .info.bottomspace {
- margin-bottom: 16px;
-}
-
-#manager-content .info.smallspace {
- margin: 14px 0 10px 0;
-}
-
-#manager-content .info.bigspace {
- margin: 35px 0 20px 0;
-}
-
-#manager-content .info.neutral {
- background-color: #f0f19d;
- border-color: #b3ad4f;
-}
-
-#manager-content a.info.neutral:hover,
-#manager-content a.info.neutral:focus {
- background-color: #eced96;
-}
-
-#manager-content a.info.neutral:active {
- background-color: #e9ea93;
-}
-
-#manager-content .info.success {
- background-color: #a8dca9;
- border-color: #5e9f5f;
-}
-
-#manager-content a.info.success:hover,
-#manager-content a.info.success:focus {
- background-color: #a0d5a1;
-}
-
-#manager-content a.info.success:active {
- background-color: #9ad09b;
-}
-
-#manager-content .info.fail {
- background-color: #f19d9d;
- border-color: #b34f4f;
-}
-
-#manager-content a.info.fail:hover,
-#manager-content a.info.fail:focus {
- background-color: #ea9595;
-}
-
-#manager-content a.info.fail:active {
- background-color: #e59090;
-}
-
-#manager-content .browse {
- margin: 2px 0 6px;
- max-height: 243px;
- overflow: auto;
-}
-
-#manager-content .browse .one-browse {
- padding: 5px 10px 5px 34px;
- height: 17px;
-}
-
-html[dir="rtl"] #manager-content .browse .one-browse a,
-html[dir="rtl"] #manager-content .browse .one-browse span {
- float: left;
-}
-
-#manager-content .browse .user {
- background-position: 9px -111px;
-}
-
-#manager-content .browse .other {
- background-position: 9px -133px;
-}
-
-#manager-content .browse .folder {
- background-position: 9px -178px;
-}
-
-#manager-content .browse .audio {
- background-position: 9px -154px;
-}
-
-#manager-content .browse .alert {
- background-position: 9px -353px;
-}
-
-#manager-content .browse .image {
- background-position: 9px -374px;
-}
-
-#manager-content .browse .video {
- background-position: 9px -397px;
-}
-
-#manager-content .browse .document {
- background-position: 9px -418px;
-}
-
-#manager-content .browse .package {
- background-position: 9px -441px;
-}
-
-#manager-content .browse .previous {
- background-position: 9px -485px;
- margin-bottom: 4px;
-}
-
-#manager-content .browse div {
- margin: 0;
-}
-
-#manager-content .browse input {
- float: right;
- margin: 1px 0;
-}
-
-#manager-content .browse .odd {
- background-color: #e9f1fd;
-}
-
-#manager-content .browse .even {
- background-color: #f1f6fd;
-}
-
-#manager-content .sub {
- border-width: 0 0 0 1px;
- border-style: solid;
- border-color: black;
- margin: 5px 0 20px 22px;
- padding-left: 12px;
- clear: both;
-}
-
-html[dir="rtl"] #manager-content .sub {
- border-width: 0 1px 0 0;
- padding-right: 12px;
- padding-left: 0;
-}
-
-#manager span.logo_links a {
- width: 16px;
- height: 16px;
- margin-right: 6px;
- float: left;
-}
-
-#manager span.logo_links a.remove {
- background-position: 0 -688px;
-}
-
-#manager span.logo_links a.view {
- background-position: 0 -666px;
-}
-
-#manager-content .clear {
- margin: 0;
-}
-
-#manager-content textarea.notice-text {
- height: 70px;
- width: 600px;
- margin-left: 4px;
- padding: 5px;
- font-size: 1.2em;
-}
-
-#manager-buttons {
- margin-top: 22px;
-}
-
-#manager-buttons input {
- border: 1px solid white;
- background-color: rgb(255,255,255);
- background-color: rgba(255,255,255,0.1);
- color: white;
- padding: 4px 8px;
- margin-left: -12px;
- margin-right: 20px;
- font-size: 1em;
- text-shadow: 0 1px 1px black;
- float: right;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
- -moz-box-shadow: 0 0 5px #202020;
- -webkit-box-shadow: 0 0 5px #202020;
- box-shadow: 0 0 5px #202020;
-}
-
-#manager-buttons input:hover,
-#manager-buttons input:focus {
- cursor: pointer;
- background-color: rgb(255,255,255);
- background-color: rgba(255,255,255,0.2);
- -moz-box-shadow: 0 0 15px #202020;
- -webkit-box-shadow: 0 0 15px #202020;
- box-shadow: 0 0 15px #202020;
-}
-
-#manager-buttons input:active {
- background-color: rgb(255,255,255);
- background-color: rgba(255,255,255,0.3);
-}
diff --git a/app/stylesheets/me.css b/app/stylesheets/me.css
deleted file mode 100644
index 60ca8e9d..00000000
--- a/app/stylesheets/me.css
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the Jappix Me tool CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#me .content {
- padding: 10px 0;
-}
-
-#me .logo {
- background-position: 0 0;
- width: 300px;
- height: 61px;
- margin: 20px auto 0 auto;
- display: block;
-}
-
-#me .infos {
- margin-top: 30px;
-}
-
-#me .infos p {
- margin-top: 8px;
-}
-
-#me .infos p.infos-title {
- margin-top: 0;
-}
-
-#me .infos a {
- text-decoration: underline;
-}
-
-#me a.go {
- text-align: center;
- font-weight: bold;
- width: 300px;
- margin: 30px auto 0 auto;
- padding: 8px 12px;
- display: block;
-} \ No newline at end of file
diff --git a/app/stylesheets/mini.css b/app/stylesheets/mini.css
deleted file mode 100644
index 02e871fc..00000000
--- a/app/stylesheets/mini.css
+++ /dev/null
@@ -1,854 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the Jappix Mini CSS stylesheet
-
--------------------------------------------------
-
-License: dual-licensed under AGPL and MPLv2
-Authors: Valérian Saliou, Julien, hunterjm, Kloadut
-
-*/
-
-#jappix_mini,
-#jappix_popup {
- font: normal 11px helvetica, "Lucida Grande", "Lucida Sans", "Lucida Sans Unicode", Arial, sans-serif;
- min-width: 280px;
-}
-
-#jappix_mini {
- margin-left: 130px;
- position: fixed;
- bottom: 0;
- right: 20px;
- display: block !important;
- z-index: 999;
-}
-
-#jappix_mini *,
-#jappix_popup * {
- border: none;
- color: black;
- width: auto;
- height: auto;
- margin: 0;
- padding: 0;
- overflow: visible;
- font-size: 11px;
- text-align: left;
- text-transform: none;
- text-shadow: none;
- opacity: 1.0;
- -moz-border-radius: 0;
- -webkit-border-radius: 0;
- border-radius: 0;
- -moz-box-shadow: none;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-
-#jappix_mini[dir="rtl"] *,
-#jappix_popup[dir="rtl"] * {
- text-align: right;
-}
-
-#jappix_mini .jm_images {
- background-image: url(../images/sprites/mini.png);
- background-repeat: no-repeat;
-}
-
-#jappix_mini .jm_images_animate {
- background-image: url(../images/sprites/animate.png);
- background-repeat: no-repeat;
-}
-
-#jappix_mini input.placeholder {
- color: #999999 !important;
-}
-
-#jappix_mini input:-moz-placeholder {
- color: #999999 !important;
-}
-
-#jappix_mini input::-webkit-input-placeholder {
- color: #999999 !important;
-}
-
-#jappix_mini a {
- text-decoration: none;
- cursor: pointer;
-}
-
-#jappix_mini a:hover {
- cursor: pointer;
-}
-
-#jappix_mini div.jm_position {
- float: right;
-}
-
-#jappix_mini a.jm_pane {
- background-color: #f4f4f4;
- background-position: 0 -100px;
- background-repeat: repeat-x;
- border-color: #999999;
- border-style: solid;
- border-width: 1px 1px 0 1px;
- font-weight: bold;
- outline-style: none;
- display: block;
- padding: 6px;
- height: 13px;
-}
-
-#jappix_mini a.jm_pane:hover {
- background: white;
-}
-
-#jappix_mini a.jm_pane:hover,
-#jappix_mini a.jm_pane:focus {
- border-color: #666666;
-}
-
-#jappix_mini div.jm_starter {
- float: right;
- position: relative;
-}
-
-#jappix_mini div.jm_conversations,
-#jappix_mini div.jm_conversation,
-#jappix_mini a.jm_switch {
- float: left;
- position: relative;
-}
-
-#jappix_mini a.jm_switch {
- border-right: none;
-}
-
-#jappix_mini a.jm_switch.jm_notifnav {
- background-position: 0 -432px !important;
-}
-
-#jappix_mini a.jm_switch span.jm_navigation {
- width: 16px;
- height: 16px;
- margin-top: -1px;
- display: block;
-}
-
-#jappix_mini a.jm_switch.jm_right span.jm_navigation {
- background-position: 0 -400px;
-}
-
-#jappix_mini a.jm_switch.jm_left span.jm_navigation {
- background-position: 0 -416px;
-}
-
-#jappix_mini div.jm_conversation {
- width: 153px;
-}
-
-#jappix_mini a.jm_chat-tab {
- border-width: 1px 0 0 1px;
- width: 140px;
- float: right;
- overflow: hidden;
-}
-
-#jappix_mini a.jm_chat-tab.jm_clicked {
- background: white;
- position: relative;
- border-top: none;
- border-left: 1px solid #999999;
- padding-top: 7px;
-}
-
-#jappix_mini a.jm_chat-tab span.jm_notify {
- position: absolute;
- top: 6px;
- right: 9px;
-}
-
-#jappix_mini a.jm_chat-tab span.jm_notify span {
- float: left;
-}
-
-#jappix_mini a.jm_chat-tab span.jm_notify span.jm_notify_left {
- background-position: 0 -360px;
-}
-
-#jappix_mini a.jm_chat-tab span.jm_notify span.jm_notify_right {
- background-position: -7px -360px;
-}
-
-#jappix_mini a.jm_chat-tab span.jm_notify span.jm_notify_left,
-#jappix_mini a.jm_chat-tab span.jm_notify span.jm_notify_right {
- height: 16px;
- width: 7px;
-}
-
-#jappix_mini a.jm_chat-tab span.jm_notify span.jm_notify_middle {
- background-color: #c60505;
- color: white;
- font-size: 0.85em;
- height: 13px;
- padding-top: 3px;
-}
-
-#jappix_mini div.jm_conversation.jm_type_groupchat span.jm_name {
- margin-left: 4px;
-}
-
-#jappix_mini[dir="rtl"] div.jm_conversation.jm_type_groupchat span.jm_name {
- margin-left: 0;
- margin-right: 4px;
-}
-
-#jappix_mini div.jm_chat-content {
- background-color: white;
- border: 1px solid #999999;
- height: 375px;
- width: 320px;
- position: absolute;
- right: -1px;
- bottom: 25px;
- display: none;
-}
-
-#jappix_mini div.jm_actions {
- background-color: #565d5e;
- border-bottom: 1px solid #3a3a3a;
- height: 14px;
- padding: 4px 6px;
- font-weight: bold;
- overflow: hidden;
-}
-
-#jappix_mini div.jm_conversation div.jm_actions {
- cursor: pointer;
-}
-
-#jappix_mini div.jm_actions span.jm_nick {
- color: white;
- height: 16px;
- width: 225px;
- overflow: hidden;
- float: left;
-}
-
-#jappix_mini[dir="rtl"] div.jm_actions span.jm_nick {
- float: right;
-}
-
-#jappix_mini div.jm_actions a.jm_one-action {
- background-color: #727879;
- margin: 0 -2px 0 5px;
- height: 15px;
- width: 15px;
- outline-style: none;
- display: block;
- position: absolute;
- top: 4px;
-}
-
-#jappix_mini div.jm_actions a.jm_one-action:hover,
-#jappix_mini div.jm_actions a.jm_one-action:focus {
- background-color: #7f8788;
-}
-
-#jappix_mini div.jm_actions a.jm_one-action:active {
- background-color: #8c9293;
-}
-
-#jappix_mini div.jm_actions a.jm_logo {
- background-position: 7px 2px;
- width: 81px;
- height: 22px;
- margin: -4px 0 0 -2px;
- outline-style: none;
- float: left;
-}
-
-#jappix_mini[dir="rtl"] div.jm_actions a.jm_logo {
- float: right;
-}
-
-#jappix_mini div.jm_actions a.jm_logo:hover,
-#jappix_mini div.jm_actions a.jm_logo:focus {
- background-color: #636a6b;
-}
-
-#jappix_mini div.jm_actions a.jm_logo:active {
- background-color: #707677;
-}
-
-#jappix_mini div.jm_actions a.jm_close {
- background-position: 1px -341px;
- right: 6px;
-}
-
-#jappix_mini[dir="rtl"] div.jm_actions a.jm_close {
- right: auto;
- left: 0;
-}
-
-#jappix_mini div.jm_actions a.jm_join {
- background-position: 0 -327px;
- right: 6px;
-}
-
-#jappix_mini[dir="rtl"] div.jm_actions a.jm_join {
- right: auto;
- left: 18px;
-}
-
-#jappix_mini div.jm_actions a.jm_status {
- background-color: #727879;
- overflow: hidden;
- right: 24px;
-}
-
-#jappix_mini[dir="rtl"] div.jm_actions a.jm_status {
- right: auto;
- left: 0;
-}
-
-#jappix_mini div.jm_actions a.active,
-#jappix_mini div.jm_actions a.active:hover,
-#jappix_mini div.jm_actions a.active:focus,
-#jappix_mini div.jm_actions a.active:active {
- background-color: #727879;
- border: 1px solid #3a3a3a;
- border-width: 1px 1px 0 1px;
- margin-right: -3px;
- top: 3px;
- z-index: 10;
-}
-
-#jappix_mini div.jm_status_picker,
-#jappix_mini div.jm_chan_suggest {
- background-color: #727879;
- border: 1px solid #3a3a3a;
- color: white;
- list-style: none outside none;
- width: 130px;
- position: absolute;
- top: 18px;
- padding: 3px 0;
- z-index: 9;
-}
-
-#jappix_mini div.jm_status_picker {
- right: 21px;
-}
-
-#jappix_mini div.jm_chan_suggest {
- right: 4px;
-}
-
-#jappix_mini[dir="rtl"] div.jm_status_picker,
-#jappix_mini[dir="rtl"] div.jm_chan_suggest {
- margin-right: 2px;
-}
-
-#jappix_mini div.jm_chan_suggest {
- max-height: 108px;
- overflow: auto;
-}
-
-#jappix_mini div.jm_status_picker a,
-#jappix_mini div.jm_chan_suggest a {
- color: white;
- height: 13px;
- padding: 4px;
- display: block;
-}
-
-#jappix_mini div.jm_status_picker a:hover,
-#jappix_mini div.jm_status_picker a:focus,
-#jappix_mini div.jm_chan_suggest a:hover,
-#jappix_mini div.jm_chan_suggest a:focus {
- background-color: white;
- color: #3a3a3a;
- border-width: 1px 0;
- border-style: solid;
- border-color: #3a3a3a;
- margin: -1px 0;
- display: block;
-}
-
-#jappix_mini div.jm_chan_suggest div.jm_space {
- height: 6px;
-}
-
-#jappix_mini div.jm_status_picker a span.jm_presence {
- margin-top: -1px;
-}
-
-#jappix_mini div.jm_chan_suggest a span.jm_chan_icon {
- height: 16px;
- width: 16px;
- margin: 0 8px 0 4px;
- float: left;
-}
-
-#jappix_mini[dir="rtl"] div.jm_chan_suggest a span.jm_chan_icon {
- margin-right: 4px;
- margin-left: 8px;
- float: right;
-}
-
-#jappix_mini div.jm_chan_suggest a.jm_suggest_groupchat span.jm_chan_icon {
- background-position: 0 -480px;
-}
-
-#jappix_mini div.jm_chan_suggest a.jm_suggest_groupchat:hover span.jm_chan_icon,
-#jappix_mini div.jm_chan_suggest a.jm_suggest_groupchat:focus span.jm_chan_icon {
- background-position: 0 -496px;
-}
-
-#jappix_mini div.jm_chan_suggest a.jm_suggest_chat span.jm_chan_icon {
- background-position: 0 -512px;
-}
-
-#jappix_mini div.jm_chan_suggest a.jm_suggest_chat:hover span.jm_chan_icon,
-#jappix_mini div.jm_chan_suggest a.jm_suggest_chat:focus span.jm_chan_icon {
- background-position: 0 -528px;
-}
-
-#jappix_mini div.jm_chan_suggest a span.jm_chan_name,
-#jappix_mini div.jm_status_picker a span.jm_show_text {
- color: white;
- float: left;
-}
-
-#jappix_mini[dir="rtl"] div.jm_chan_suggest a span.jm_chan_name,
-#jappix_mini[dir="rtl"] div.jm_status_picker a span.jm_show_text {
- float: right;
-}
-
-#jappix_mini div.jm_chan_suggest a span.jm_chan_name {
- height: 15px;
- width: 90px;
- overflow: hidden;
-}
-
-#jappix_mini div.jm_chan_suggest a:hover span.jm_chan_name,
-#jappix_mini div.jm_chan_suggest a:focus span.jm_chan_name,
-#jappix_mini div.jm_status_picker a:hover span.jm_show_text,
-#jappix_mini div.jm_status_picker a:focus span.jm_show_text {
- color: #3a3a3a;
-}
-
-#jappix_mini div.jm_pix_stream {
- line-height: 0;
- max-height: 50px;
- overflow: hidden;
- position: absolute;
- top: 23px;
- left: 0;
- right: 0;
-}
-
-#jappix_mini div.jm_pix_stream iframe {
- width: 320px;
- height: 50px;
- overflow: hidden;
-}
-
-#jappix_mini div.jm_received-messages {
- background-color: white;
- padding: 5px 0 4px;
- height: 317px;
- overflow: auto;
-}
-
-#jappix_mini div.jm_received-messages p {
- margin: 3px 0;
- word-wrap: break-word;
-}
-
-#jappix_mini div.jm_received-messages p,
-#jappix_mini div.jm_received-messages a {
- color: black !important;
-}
-
-#jappix_mini div.jm_received-messages div.jm_group {
- margin: 2px 6px 9px 6px;
- padding-bottom: 8px;
- border-bottom: 1px solid #eaeaea;
-}
-
-#jappix_mini div.jm_received-messages div.jm_system-message p,
-#jappix_mini div.jm_received-messages div.jm_system-message b,
-#jappix_mini div.jm_received-messages div.jm_system-message a {
- color: #053805 !important;
- font-style: italic !important;
-}
-
-#jappix_mini div.jm_received-messages p a {
- text-decoration: underline;
-}
-
-#jappix_mini div.jm_received-messages b.jm_name {
- margin-bottom: 3px;
- display: block;
-}
-
-#jappix_mini div.jm_received-messages b.jm_name.jm_me {
- color: #123a5c;
-}
-
-#jappix_mini div.jm_received-messages b.jm_name.jm_him {
- color: #801e1e;
-}
-
-#jappix_mini div.jm_received-messages span.jm_date {
- font-size: 0.8em;
- float: right;
- display: none;
-}
-
-#jappix_mini[dir="rtl"] div.jm_received-messages span.jm_date {
- float: left;
-}
-
-#jappix_mini div.jm_received-messages div.jm_group:hover span.jm_date {
- display: block;
-}
-
-#jappix_mini div.jm_received-messages div.jm_chatstate_typing {
- background-image: url(../images/wait/wait-typing.gif);
- background-repeat: no-repeat;
- background-position: 0 5px;
- color: #a6a6a6;
- font-size: 10px;
- letter-spacing: 1px;
- margin: 0 0 5px 8px;
- padding-left: 24px;
- visibility: hidden;
-}
-
-#jappix_mini input.jm_send-messages {
- background-color: white;
- border-color: #999999;
- border-style: solid;
- border-width: 1px 0 0 0;
- padding: 5px;
- width: 310px;
- min-height: 14px;
-}
-
-#jappix_mini div.jm_disabled div.jm_chat-content,
-#jappix_mini div.jm_disabled input.jm_send-messages,
-#jappix_mini div.jm_disabled a.jm_pane,
-#jappix_mini a.jm_switch.jm_nonav {
- background: #f3f3f3 !important;
-}
-
-#jappix_mini div.jm_disabled input.jm_send-messages {
- color: #9d9d9d;
-}
-
-#jappix_mini div.jm_roster {
- background-color: white;
- border: 1px solid #999999;
- width: 160px;
- position: absolute;
- right: 0;
- bottom: 25px;
- display: none;
-}
-
-#jappix_mini div.jm_search {
- border-top: 1px solid #999999;
- padding: 2px 0;
-}
-
-#jappix_mini div.jm_search input.jm_searchbox {
- background-color: white;
- background-position: 9px -381px;
- color: black;
- font-size: 0.9em;
- width: 128px;
- padding: 2px 4px 2px 28px;
-}
-
-#jappix_mini input.jm_searchbox:focus {
- border-color: #999999;
-}
-
-#jappix_mini div.jm_roster div.jm_buddies {
- width: 100%;
- max-height: 300px;
- min-height: 100px;
- padding: 5px 0;
- overflow: auto;
-}
-
-#jappix_mini div.jm_roster div.jm_grouped {
- margin: 2px 0;
-}
-
-#jappix_mini div.jm_roster div.jm_grouped div.jm_name {
- margin-bottom: 2px;
- padding: 4px 8px 0;
- font-weight: bold;
-}
-
-#jappix_mini a.jm_friend {
- border-color: white;
- border-style: solid;
- border-width: 1px 0;
- outline-style: none;
- padding: 6px;
- display: block;
-}
-
-#jappix_mini a.jm_friend.jm_offline {
- display: none;
-}
-
-#jappix_mini a.jm_friend.jm_hover {
- background-color: #888888;
- border-color: #494949;
- color: white;
-}
-
-#jappix_mini a.jm_friend.jm_hover span.jm_presence {
- background-position: 0 -84px;
-}
-
-#jappix_mini a.jm_button {
- padding: 6px 10px;
- position: relative;
- z-index: 1;
-}
-
-#jappix_mini a.jm_button.jm_clicked {
- background: white;
- border-top: none;
- border-left: 1px solid #999999;
- border-right: 1px solid #999999;
- padding: 7px 10px 6px 10px;
-}
-
-#jappix_mini span.jm_animate {
- background-position: 0 0;
- width: 80px;
- height: 74px;
- position: absolute;
- top: -76px;
- left: -52px;
- z-index: 1;
- display: block;
- -moz-animation-duration: 1.5s;
- -webkit-animation-duration: 1.5s;
- -o-animation-duration: 1.5s;
- animation-duration: 1.5s;
- -moz-animation-name: jm_animate;
- -webkit-animation-name: jm_animate;
- -o-animation-name: jm_animate;
- animation-name: jm_animate;
- -moz-transition-timing-function: ease-in-out;
- -webkit-transition-timing-function: ease-in-out;
- -o-transition-timing-function: ease-in-out;
- transition-timing-function: ease-in-out;
- -moz-animation-iteration-count: infinite;
- -webkit-animation-iteration-count: infinite;
- -o-animation-iteration-count: infinite;
- animation-iteration-count: infinite;
- -moz-animation-direction: alternate;
- -webkit-animation-direction: alternate;
- -o-animation-direction: alternate;
- animation-direction: alternate;
-}
-
-#jappix_mini span.jm_counter {
- background-position: 0 -288px;
- color: #333333;
- height: 16px;
- padding-left: 25px;
- display: block;
-}
-
-#jappix_mini span.jm_counter.jm_error {
- background-position: 0 -305px;
-}
-
-#jappix_mini span.jm_presence {
- display: block;
- height: 16px;
- width: 16px;
- margin-right: 4px;
- float: left;
-}
-
-#jappix_mini[dir="rtl"] span.jm_presence {
- margin-right: 0;
- margin-left: 4px;
- float: right;
-}
-
-#jappix_mini span.jm_name {
- color: #272727;
- height: 14px;
- width: 105px;
- overflow: hidden;
- float: left;
-}
-
-#jappix_mini[dir="rtl"] span.jm_name {
- float: right;
-}
-
-#jappix_mini .jm_available,
-#jappix_mini .jm_chat {
- background-position: 0 -20px;
-}
-
-#jappix_mini .jm_away {
- background-position: 0 -36px;
-}
-
-#jappix_mini .jm_xa,
-#jappix_mini .jm_dnd {
- background-position: 0 -52px;
-}
-
-#jappix_mini .jm_unavailable {
- background-position: 0 -68px;
-}
-
-#jappix_mini .jm_smiley {
- border: 0 none;
- height: 16px;
- width: 16px;
- vertical-align: bottom;
-}
-
-#jappix_mini .jm_smiley-wink {
- background-position: 0 -148px;
-}
-
-#jappix_mini .jm_smiley-waii {
- background-position: 0 -164px;
-}
-
-#jappix_mini .jm_smiley-unhappy {
- background-position: 0 -180px;
-}
-
-#jappix_mini .jm_smiley-tongue {
- background-position: 0 -196px;
-}
-
-#jappix_mini .jm_smiley-surprised {
- background-position: 0 -212px;
-}
-
-#jappix_mini .jm_smiley-smile {
- background-position: 0 -228px;
-}
-
-#jappix_mini .jm_smiley-happy {
- background-position: 0 -244px;
-}
-
-#jappix_mini .jm_smiley-grin {
- background-position: 0 -260px;
-}
-
-#jappix_popup {
- background: url(../images/others/blank.gif) repeat;
- position: fixed;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- z-index: 999;
-}
-
-#jappix_popup div.jm_prompt {
- background-color: #565d5e;
- border: 1px solid #3a3a3a;
- width: 346px;
- position: fixed;
- top: 50%;
- left: 50%;
- margin-left: -175px;
- padding: 16px 2px 2px 2px;
- -moz-border-radius-topright: 4px;
- -moz-border-radius-topleft: 4px;
- -webkit-border-top-right-radius: 4px;
- -webkit-border-top-left-radius: 4px;
- border-top-right-radius: 4px;
- border-top-left-radius: 4px;
- -moz-box-shadow: 0 0 35px #232323;
- -webkit-box-shadow: 0 0 35px #232323;
- box-shadow: 0 0 35px #232323;
-}
-
-#jappix_popup div.jm_prompt form {
- background-color: white;
- border: 1px solid #3a3a3a;
- width: 332px;
- padding: 6px;
-}
-
-#jappix_popup div.jm_prompt form input {
- background-color: #f9f9f9;
- border: 1px solid #666666;
- font-size: 1.1em;
- padding: 1px 2px;
-}
-
-#jappix_popup div.jm_prompt form input:hover,
-#jappix_popup div.jm_prompt form input:focus {
- border: 1px solid #202020;
-}
-
-#jappix_popup div.jm_prompt form input.jm_text {
- width: 326px;
- margin: 6px 0;
- display: block;
-}
-
-#jappix_popup div.jm_prompt form input.jm_submit {
- text-align: center;
- margin-left: 3px;
- float: right;
-}
-
-#jappix_popup div.jm_prompt form input.jm_submit:hover,
-#jappix_popup div.jm_prompt form input.jm_submit:focus {
- background-color: #f3f3f3;
- cursor: pointer;
-}
-
-#jappix_popup div.jm_prompt form input.jm_submit:active {
- background-color: #e8e8e8;
-}
-
-#jappix_popup div.jm_prompt div.jm_clear {
- clear: both;
-}
-
-@-moz-keyframes jm_animate {
- to {
- margin-top: 4px;
- }
-}
-
-@-webkit-keyframes jm_animate {
- to {
- margin-top: 4px;
- }
-}
-
-@keyframes jm_animate {
- to {
- margin-top: 4px;
- }
-} \ No newline at end of file
diff --git a/app/stylesheets/mobile.css b/app/stylesheets/mobile.css
deleted file mode 100644
index 0573af97..00000000
--- a/app/stylesheets/mobile.css
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the Jappix Mobile CSS stylesheet
-
--------------------------------------------------
-
-License: AGPL
-Authors: Valérian Saliou, Camaran
-
-*/
-
-/* BEGIN GENERAL STYLE */
-
-* {
- margin: 0;
- padding: 0;
-}
-
-body {
- font: normal 14.4px Helvetica, Verdana, sans-serif;
- background-color: #dcdcdc;
- margin: 0 auto;
- text-align: center;
- min-width: 200px;
- min-height: 260px;
-}
-
-a {
- color: black;
-}
-
-/* END GENERAL STYLE */
-
-/* BEGIN HEADER STYLE */
-
-.header {
- background-color: #2d2d2d;
- border-bottom: 1px solid #6d6d6d;
- color: #405964;
- padding: 6px 0;
- height: 30px;
-}
-
-.header div {
- background-position: 0 0;
- width: 83px;
- height: 30px;
-}
-
-/* END HEADER STYLE */
-
-/* BEGIN HOME STYLE */
-
-#home .header div {
- margin: 0 auto;
-}
-
-#home .notification {
- padding: 2px;
- margin-top: -1px;
-}
-
-#noscript {
- background: #86a2ff;
- border-bottom: 1px solid #5890d6;
- color: #1e4b82;
-}
-
-#error {
- background: #ff8686;
- border-bottom: 1px solid #d65858;
- color: #821e1e;
- display: none;
-}
-
-#info {
- background: #f3eba7;
- border-bottom: 1px solid #d9d085;
- color: #5e5616;
- display: none;
-}
-
-#home .login {
- padding: 8px 0;
- margin-top: 30px;
- margin-bottom: 30px;
-}
-
-#home .login input {
- margin-top: 5px;
- padding: 2px;
-}
-
-#home .login input.xid,
-#home .login input.password {
- display: block;
- margin: 4px auto;
- font-size: 0.85em;
- padding: 4px;
- background-color: white;
- border: 1px solid #636363;
- width: 150px;
- padding-left: 24px;
-}
-
-#home .login input.xid {
- background-position: 4px -30px;
-}
-
-#home .login input.password {
- background-position: 4px -53px;
-}
-
-#home .login label {
- margin-bottom: 12px;
- display: block;
-}
-
-#home .login label input {
- margin-right: 4px;
-}
-
-#home a {
- font-size: 0.8em;
-}
-
-/* END HOME STYLE */
-
-/* BEGIN TALK STYLE */
-
-#talk .header div,
-#chat .header div {
- float: left;
- margin-left: 7px;
-}
-
-#talk .header button,
-#chat .header button {
- float: right;
- margin-right: 7px;
- padding: 2px;
-}
-
-#talk a.one-buddy {
- display: block;
- background-color: #87a5ab;
- border-bottom: 1px solid #5b8088;
- text-shadow: 1px 1px 1px #5b8088;
- text-decoration: none;
- color: white;
- outline-style: none;
- padding: 10px 0;
-}
-
-#talk a.one-buddy:hover {
- background-color: #8fb0b7;
- cursor: pointer;
-}
-
-#talk a.available,
-#talk a.chat {
- background-color: #83b187;
- border-bottom: 1px solid #4d8252;
- text-shadow: 1px 1px 1px #4d8252;
-}
-
-#talk a.available:hover,
-#talk a.chat:hover,
-#talk a.available:focus,
-#talk a.chat:focus {
- background-color: #89c68e;
-}
-
-#talk a.available:active,
-#talk a.chat:active {
- background-color: #90d496;
-}
-
-#talk a.away {
- background-color: #e0be7b;
- border-bottom: 1px solid #ae8941;
- text-shadow: 1px 1px 1px #ae8941;
-}
-
-#talk a.away:hover,
-#talk a.away:focus {
- background-color: #eac784;
-}
-
-#talk a.away:active {
- background-color: #f3d294;
-}
-
-#talk a.xa,
-#talk a.dnd {
- background-color: #db8989;
- border-bottom: 1px solid #a24343;
- text-shadow: 1px 1px 1px #a24343;
-}
-
-#talk a.xa:hover,
-#talk a.dnd:hover,
-#talk a.xa:focus,
-#talk a.dnd:focus {
- background-color: #e89797;
-}
-
-#talk a.xa:active,
-#talk a.dnd:active {
- background-color: #ef9f9f;
-}
-
-/* END TALK STYLE */
-
-/* BEGIN CHAT STYLE */
-
-#chat {
- display: none;
-}
-
-#chat .one-chat,
-#chat .one-chat p,
-#chat .one-chat div,
-#chat .one-chat input {
- position: absolute;
- bottom: 0;
- right: 0;
-}
-
-#chat .one-chat {
- top: 43px;
- left: 0;
-}
-
-#chat .one-chat p {
- background-color: #87a5ab;
- border-bottom: 1px solid #5b8088;
- text-shadow: 1px 1px 1px #5b8088;
- color: white;
- top: 0;
- left: 0;
- height: 18px;
- padding: 2px 0;
- font-size: 0.9em;
-}
-
-#chat .one-chat div {
- border-bottom: 1px solid #cbcbcb;
- top: 23px;
- left: 0;
- bottom: 37px;
- overflow: auto;
- text-align: left;
-}
-
-html[dir="rtl"] #chat .one-chat div {
- text-align: right;
-}
-
-#chat .one-chat span {
- display: block;
- font-size: 0.85em;
- margin: 4px 6px;
- word-wrap: break-word;
-}
-
-#chat .one-chat b {
- margin-right: 3px;
-}
-
-html[dir="rtl"] #chat .one-chat b {
- margin-right: auto;
- margin-left: 3px;
-}
-
-#chat .one-chat b.me {
- color: #123a5c;
-}
-
-#chat .one-chat b.him {
- color: #801e1e;
-}
-
-#chat .one-chat input {
- background-color: white;
- bottom: 0;
- height: 37px;
- width: 100%;
- border: none;
-}
-
-#chat .one-chat input.submit {
- right: 0;
- width: 35px;
-}
-
-html[dir="rtl"] #chat .one-chat input.submit {
- left: 0;
- right: auto;
-}
-
-/* END CHAT STYLE */
diff --git a/app/stylesheets/mucadmin.css b/app/stylesheets/mucadmin.css
deleted file mode 100644
index 004b026e..00000000
--- a/app/stylesheets/mucadmin.css
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the mucadmin CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#mucadmin .content {
- padding: 10px 0 10px 0;
-}
-
-#mucadmin .content p {
- margin: 5px 10px 5px 10px;
- text-align: justify;
-}
-
-html[dir="rtl"] #mucadmin .mucadmin-head-text {
- float: right;
-}
-
-#mucadmin .mucadmin-head-jid {
- text-decoration: underline;
- font-size: 0.9em;
- float: right;
- margin: 2px 4px 1px 1px;
-}
-
-html[dir="rtl"] #mucadmin .mucadmin-head-jid {
- margin-left: 4px;
- margin-right: 1px;
- float: left;
-}
-
-#mucadmin .mucadmin-forms {
- height: 310px;
- width: 620px;
- margin: -5px 0 0 10px;
- padding: 6px 0 0 0;
- overflow: auto;
-}
-
-html[dir="rtl"] #mucadmin .mucadmin-forms {
- margin-left: 0;
- margin-right: 10px;
-}
-
-#mucadmin .mucadmin-forms label {
- width: 260px;
-}
-
-#mucadmin .mucadmin-topic label,
-#mucadmin .mucadmin-aut label,
-#mucadmin .mucadmin-others label {
- font-size: 0.9em;
-}
-
-#mucadmin .mucadmin-forms textarea {
- height: 60px;
- width: 300px;
- margin: 5px 12px 10px 0;
-}
-
-html[dir="rtl"] #mucadmin .mucadmin-forms textarea {
- margin-right: 0;
-}
-
-#mucadmin .results {
- height: auto;
- width: auto;
- overflow: visible;
- margin: 5px;
-}
-
-#mucadmin .aut-group {
- float: left;
- padding-bottom: 4px;
-}
-
-html[dir="rtl"] #mucadmin .aut-group {
- float: right;
-}
-
-#mucadmin .one-aut {
- clear: both;
- margin: 0 10px 5px 0;
-}
-
-html[dir="rtl"] #mucadmin .one-aut {
- margin-right: 0;
- margin-left: 10px;
-}
-
-#mucadmin .aut-add {
- clear: both;
- float: left;
- margin-bottom: 5px;
- font-size: 0.9em;
-}
-
-html[dir="rtl"] #mucadmin .aut-add {
- float: right;
-}
-
-#mucadmin .aut-remove {
- float: left;
-}
-
-html[dir="rtl"] #mucadmin .aut-remove {
- float: right;
-}
-
-#mucadmin .aut-remove:hover,
-#mucadmin .aut-remove:focus {
- font-weight: bold;
- text-decoration: none;
-}
-
-#mucadmin .mucadmin-others a {
- float: left;
- font-size: 0.9em;
-}
-
-html[dir="rtl"] #mucadmin .mucadmin-others a {
- float: right;
-} \ No newline at end of file
diff --git a/app/stylesheets/muji.css b/app/stylesheets/muji.css
deleted file mode 100644
index 7c0d10a1..00000000
--- a/app/stylesheets/muji.css
+++ /dev/null
@@ -1,690 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the Muji CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#muji .videochat_items {
- min-width: 600px;
- left: 60px;
- right: 60px;
-}
-
-#muji .remote_container {
- position: absolute;
- left: 0;
- right: 0;
- bottom: 0;
- top: 0;
-}
-
-/* Default video */
-#muji .remote_container .remote_video_shaper {
- overflow: hidden;
- display: none;
- float: left;
- position: relative;
-}
-
-/* 1 video view */
-#muji[data-count="1"] .remote_container .remote_video_shaper:nth-child(1) {
- width: 100%;
- height: 100%;
- display: block;
-}
-
-/* 2 video views */
-#muji[data-count="2"] .remote_container .remote_video_shaper:nth-child(1),
-#muji[data-count="2"] .remote_container .remote_video_shaper:nth-child(2) {
- width: 50%;
- height: 100%;
- display: block;
-}
-
-/* 3 video views */
-#muji[data-count="3"] .remote_container .remote_video_shaper:nth-child(1),
-#muji[data-count="3"] .remote_container .remote_video_shaper:nth-child(2),
-#muji[data-count="3"] .remote_container .remote_video_shaper:nth-child(3) {
- height: 50%;
- display: block;
-}
-
-#muji[data-count="3"] .remote_container .remote_video_shaper:nth-child(1) {
- width: 100%;
- float: none;
-}
-
-#muji[data-count="3"] .remote_container .remote_video_shaper:nth-child(2),
-#muji[data-count="3"] .remote_container .remote_video_shaper:nth-child(3) {
- width: 50%;
-}
-
-/* 4 video views */
-#muji[data-count="4"] .remote_container .remote_video_shaper:nth-child(1),
-#muji[data-count="4"] .remote_container .remote_video_shaper:nth-child(2),
-#muji[data-count="4"] .remote_container .remote_video_shaper:nth-child(3),
-#muji[data-count="4"] .remote_container .remote_video_shaper:nth-child(4) {
- height: 50%;
- width: 50%;
- display: block;
-}
-
-/* 5 video views */
-#muji[data-count="5"] .remote_container .remote_video_shaper:nth-child(1),
-#muji[data-count="5"] .remote_container .remote_video_shaper:nth-child(2),
-#muji[data-count="5"] .remote_container .remote_video_shaper:nth-child(3),
-#muji[data-count="5"] .remote_container .remote_video_shaper:nth-child(4),
-#muji[data-count="5"] .remote_container .remote_video_shaper:nth-child(5) {
- height: 50%;
- display: block;
-}
-
-#muji[data-count="5"] .remote_container .remote_video_shaper:nth-child(1),
-#muji[data-count="5"] .remote_container .remote_video_shaper:nth-child(2) {
- width: 50%;
-}
-
-#muji[data-count="5"] .remote_container .remote_video_shaper:nth-child(3),
-#muji[data-count="5"] .remote_container .remote_video_shaper:nth-child(4),
-#muji[data-count="5"] .remote_container .remote_video_shaper:nth-child(5) {
- width: 33.33333333%;
-}
-
-/* 6 video views */
-#muji[data-count="6"] .remote_container .remote_video_shaper:nth-child(1),
-#muji[data-count="6"] .remote_container .remote_video_shaper:nth-child(2),
-#muji[data-count="6"] .remote_container .remote_video_shaper:nth-child(3),
-#muji[data-count="6"] .remote_container .remote_video_shaper:nth-child(4),
-#muji[data-count="6"] .remote_container .remote_video_shaper:nth-child(5),
-#muji[data-count="6"] .remote_container .remote_video_shaper:nth-child(6) {
- height: 50%;
- width: 33.33333333%;
- display: block;
-}
-
-#muji .remote_container .remote_video_shaper .label_username {
- background: rgb(0,0,0);
- background: rgba(0,0,0,0.6);
- color: #ffffff;
- font-size: 0.75em;
- padding: 3px 6px 4px 10px;
- position: absolute;
- top: 7px;
- left: 0;
- display: none;
-}
-
-html[dir="rtl"] #muji .remote_container .remote_video_shaper .label_username {
- padding-right: 10px;
- padding-left: 6px;
- left: auto;
- right: 0;
-}
-
-#muji[data-count="1"] .remote_container .remote_video_shaper .label_username,
-#muji[data-count="2"] .remote_container .remote_video_shaper .label_username,
-#muji[data-count="3"] .remote_container .remote_video_shaper:nth-child(1) .label_username,
-#muji[data-count="4"] .remote_container .remote_video_shaper:nth-child(n+1):nth-child(-n+2) .label_username,
-#muji[data-count="5"] .remote_container .remote_video_shaper:nth-child(n+1):nth-child(-n+2) .label_username,
-#muji[data-count="6"] .remote_container .remote_video_shaper:nth-child(n+1):nth-child(-n+3) .label_username {
- top: 48px;
-}
-
-#muji .remote_container .remote_video_shaper:hover .label_username {
- display: block;
-}
-
-#muji .empty_message {
- text-align: center;
- margin-top: -11px;
- position: absolute;
- left: 0;
- right: 0;
- top: 50%;
-}
-
-#muji .empty_message .text {
- color: #ffffff;
- letter-spacing: 1px;
- font-size: 1.2em;
-}
-
-#muji .videoroom,
-#muji .chatroom {
- position: absolute;
- top: 0;
- bottom: 0;
-}
-
-#muji .videoroom {
- background-color: #000000;
- left: 0;
- right: 280px;
-}
-
-html[dir="rtl"] #muji .videoroom {
- right: 0;
- left: 280px;
-}
-
-#muji .videoroom .topbar .controls {
- margin-left: 18px;
-}
-
-html[dir="rtl"] #muji .videoroom .topbar .controls {
- margin-right: 18px;
-}
-
-#muji .videoroom .topbar .elapsed {
- margin-left: 80px;
-}
-
-html[dir="rtl"] #muji .videoroom .topbar .elapsed {
- margin-right: 80px;
-}
-
-#muji .chatroom {
- background: #ffffff;
- width: 280px;
- right: 0;
-}
-
-html[dir="rtl"] #muji .chatroom {
- right: auto;
- left: 0;
-}
-
-#muji .videoroom .local_video {
- width: 140px;
- height: 78px;
-}
-
-#muji .videoroom .local_video:hover {
- width: 220px;
- height: 123px;
-}
-
-#muji .chatroom .chatroom_participants {
- background: #fcfcfc;
- border-bottom: 1px solid #e1e1e1;
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- z-index: 1;
-}
-
-#muji .chatroom .chatroom_participants .participants_default_view {
- text-align: center;
- height: 40px;
-}
-
-#muji .chatroom .chatroom_participants .participants_default_view .participants_counter,
-#muji .chatroom .chatroom_participants .participants_default_view .participants_full {
- color: #444444;
- font-size: 0.9em;
- font-weight: bold;
- letter-spacing: 1px;
- margin-top: 11px;
- display: inline-block;
-}
-
-#muji .chatroom .chatroom_participants .participants_default_view .participants_full {
- color: #5a6d7f;
- font-size: 0.8em;
- margin-left: 6px;
- display: none;
-}
-
-html[dir="rtl"] #muji .chatroom .chatroom_participants .participants_default_view .participants_full {
- margin-left: auto;
- margin-right: 6px;
-}
-
-#muji .chatroom .chatroom_participants .participants_default_view .participants_invite {
- background-position: 0 -287px;
- width: 13px;
- height: 13px;
- opacity: 0.6;
- display: block;
- position: absolute;
- top: 14px;
- right: 16px;
-}
-
-html[dir="rtl"] #muji .chatroom .chatroom_participants .participants_default_view .participants_invite {
- right: auto;
- left: 16px;
-}
-
-#muji .chatroom .chatroom_participants .participants_default_view .participants_invite:hover,
-#muji .chatroom .chatroom_participants .participants_default_view .participants_invite:focus {
- opacity: 1;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box {
- border-top: 1px solid #e1e1e1;
- display: none;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_list {
- border-bottom: 1px solid #e1e1e1;
- padding: 4px 2px 2px 6px;
- display: none;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_list .invite_one {
- background: #d7e2f4;
- border: 1px solid #aab9f4;
- font-size: 0.75em;
- margin: 0 4px 3px 0;
- padding: 2px 4px;
- display: inline-block;
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_list .invite_one.invite_unsupported {
- background: #f49d90;
- border-color: #de8780;
- color: #95443e;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_list .invite_one .invite_one_remove {
- background-position: 0 -300px;
- width: 9px;
- height: 9px;
- margin-left: 3px;
- margin-top: 1px;
- display: inline-block;
-}
-
-html[dir="rtl"] #muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_list .invite_one .invite_one_remove {
- margin-left: auto;
- margin-right: 3px;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_list .invite_one.invite_unsupported .invite_one_remove {
- background-position: 0 -309px;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_list .invite_one .invite_one_remove:hover,
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_list .invite_one .invite_one_remove:focus,
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_list .invite_one .invite_one_remove:active {
- background-position: 1px -317px;
- margin-left: 2px;
- margin-right: -1px;
- margin-bottom: -1px;
- padding: 1px;
- -moz-border-radius: 1px;
- -webkit-border-radius: 1px;
- border-radius: 1px;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_list .invite_one .invite_one_remove:hover,
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_list .invite_one .invite_one_remove:focus {
- background-color: #8299ad;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_list .invite_one.invite_unsupported .invite_one_remove:hover,
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_list .invite_one.invite_unsupported .invite_one_remove:focus {
- background-color: #ad625f;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_list .invite_one .invite_one_remove:active {
- background-color: #5b6e80;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_list .invite_one.invite_unsupported .invite_one_remove:active {
- background-color: #804847;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form {
- height: 32px;
- margin-left: 8px;
- position: relative;
-}
-
-html[dir="rtl"] #muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form {
- margin-left: auto;
- margin-left: 0;
- margin-right: 8px;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate {
- background: #f9f9f9;
- border: 1px solid #e7e7e7;
- color: #94a6aa;
- text-decoration: none;
- padding: 4px 6px 5px 6px;
- display: none;
- position: absolute;
- top: 4px;
- right: 9px;
- -moz-border-radius: 1px;
- -webkit-border-radius: 1px;
- border-radius: 1px;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate:active {
- padding-top: 5px;
- padding-bottom: 4px;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate .invite_validate_icon {
- background-position: 0 -329px;
- width: 14px;
- height: 11px;
- margin-top: 2px;
- display: block;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_input_container {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
- right: 41px;
-}
-
-html[dir="rtl"] #muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_input_container {
- right: 0;
- left: 41px;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form input.invite_xid {
- font-size: 0.8em;
- width: 100%;
- height: 100%;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search {
- max-height: 220px;
- overflow: auto;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one {
- border-top: 1px solid #e1e1e1;
- height: 28px;
- display: block;
- position: relative;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one.hover,
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one.focus {
- background: #f5f7ff;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one.active {
- background: #eef1f8;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one.participant_search_unsupported {
- background: #f6f6f6;
- color: #969696;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one.participant_search_unsupported.hover,
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one.participant_search_unsupported.focus {
- background: #f1f1f1;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one.participant_search_unsupported.active {
- background: #efefef;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one .avatar-container {
- text-align: center;
- height: 20px;
- width: 20px;
- margin: 4px 0 0 6px;
- float: left;
-}
-
-html[dir="rtl"] #muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one .avatar-container {
- float: right;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one .avatar-container .avatar {
- max-height: 20px;
- max-width: 20px;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one .details {
- position: absolute;
- top: 0;
- left: 40px;
- right: 0;
- bottom: 0;
-}
-
-html[dir="rtl"] #muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one .details {
- right: 40px;
- left: 0;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one .details .name,
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one .details .feature {
- position: absolute;
- display: block;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one .details .name {
- font-size: 0.8em;
- top: 6px;
- left: 0;
- right: 50px;
- bottom: 0;
-}
-
-html[dir="rtl"] #muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one .details .name {
- right: 0;
- left: 50px;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one .details .feature {
- width: 16px;
- height: 16px;
- top: 6px;
- right: 16px;
- opacity: 0.75;
- display: none;
-}
-
-html[dir="rtl"] #muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one .details .feature {
- right: auto;
- left: 7px;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one.participant_search_has_audio .details .feature,
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one.participant_search_has_video .details .feature {
- display: block;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one.participant_search_has_audio .details .feature {
- background-position: 0 -340px;
-}
-
-#muji .chatroom .chatroom_participants .participants_invite_box .participants_invite_search .participant_search_one.participant_search_has_video .details .feature {
- background-position: 0 -356px;
-}
-
-#muji .chatroom .chatroom_view {
- padding: 4px 4px 12px 8px;
- overflow: auto;
- position: absolute;
- top: 41px;
- left: 0;
- right: 0;
- bottom: 41px;
-}
-
-html[dir="rtl"] #muji .chatroom .chatroom_view {
- padding-left: 8px;
-}
-
-#muji .chatroom .chatroom_view .room_message {
- margin-top: 10px;
- position: relative;
-}
-
-#muji .chatroom .chatroom_view .room_message.me .message_content {
- float: left;
-}
-
-html[dir="rtl"] #muji .chatroom .chatroom_view .room_message.me .message_content {
- float: right;
-}
-
-#muji .chatroom .chatroom_view .room_message.him .message_content {
- margin-right: 30px;
- float: right;
-}
-
-html[dir="rtl"] #muji .chatroom .chatroom_view .room_message.him .message_content {
- margin-right: auto;
- margin-left: 30px;
- float: left;
-}
-
-#muji .chatroom .chatroom_view .room_message .message_content .message_bubble {
- font-size: 0.85em;
- padding: 7px 12px 8px 12px;
- display: block;
- -moz-border-radius: 6px;
- -webkit-border-radius: 6px;
- border-radius: 6px;
-}
-
-#muji .chatroom .chatroom_view .room_message.me .message_content .message_bubble {
- background-color: #8dc2ef;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-html[dir="rtl"] #muji .chatroom .chatroom_view .room_message.me .message_content .message_bubble {
- -moz-border-radius-bottomleft: 6px;
- -webkit-border-bottom-left-radius: 6px;
- border-bottom-left-radius: 6px;
- -moz-border-radius-bottomright: 0;
- -webkit-border-bottom-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-
-#muji .chatroom .chatroom_view .room_message.him .message_content .message_bubble {
- background-color: #bcdf6a;
- -moz-border-radius-bottomright: 0;
- -webkit-border-bottom-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-
-html[dir="rtl"] #muji .chatroom .chatroom_view .room_message.him .message_content .message_bubble {
- -moz-border-radius-bottomright: 6px;
- -webkit-border-bottom-right-radius: 6px;
- border-bottom-right-radius: 6px;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-#muji .chatroom .chatroom_view .room_message .message_content .message_author {
- color: #6c6c6c;
- font-size: 0.75em;
- margin-top: 2px;
- display: block;
-}
-
-#muji .chatroom .chatroom_view .room_message.him .message_content .message_author {
- text-align: right;
-}
-
-html[dir="rtl"] #muji .chatroom .chatroom_view .room_message.him .message_content .message_author {
- text-align: left;
-}
-
-#muji .chatroom .chatroom_view .room_message .message_avatar {
- position: absolute;
- right: 0;
- bottom: 16px;
-}
-
-html[dir="rtl"] #muji .chatroom .chatroom_view .room_message .message_avatar {
- right: auto;
- left: 0;
-}
-
-#muji .chatroom .chatroom_view .room_message .message_avatar.avatar-container {
- text-align: center;
- height: 24px;
- width: 24px;
-}
-
-#muji .chatroom .chatroom_view .room_message .message_avatar.avatar-container .avatar {
- max-height: 24px;
- max-width: 24px;
-}
-
-#muji .chatroom form.chatroom_form {
- background: #fcfcfc;
- border-top: 1px solid #e1e1e1;
- height: 40px;
- position: absolute;
- bottom: 0;
- left: 0;
- right: 0;
-}
-
-#muji .chatroom form.chatroom_form .message_icon {
- background-position: 0 -272px;
- width: 17px;
- height: 15px;
- position: absolute;
- top: 13px;
- left: 12px;
-}
-
-html[dir="rtl"] #muji .chatroom form.chatroom_form .message_icon {
- left: auto;
- right: 12px;
-}
-
-#muji .chatroom form.chatroom_form .message_separator {
- background: #e9e9e9;
- width: 1px;
- position: absolute;
- top: 6px;
- bottom: 6px;
- left: 40px;
-}
-
-html[dir="rtl"] #muji .chatroom form.chatroom_form .message_separator {
- left: auto;
- right: 40px;
-}
-
-#muji .chatroom form.chatroom_form .message_input_container {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 52px;
-}
-
-html[dir="rtl"] #muji .chatroom form.chatroom_form .message_input_container {
- left: auto;
- right: 52px;
-}
-
-#muji .chatroom form.chatroom_form .message_input_container input.message_input {
- font-size: 0.8em;
- width: 100%;
- height: 100%;
-} \ No newline at end of file
diff --git a/app/stylesheets/myinfos.css b/app/stylesheets/myinfos.css
deleted file mode 100644
index f4d2043c..00000000
--- a/app/stylesheets/myinfos.css
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the my-infos CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#my-infos {
- background-color: rgb(20,20,20);
- background-color: rgba(20,20,20,0.85);
- color: #919191;
- margin-top: 8px;
- padding: 15px 6px 6px 6px;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
- -moz-box-shadow: 0 0 6px #5c5c5c;
- -webkit-box-shadow: 0 0 6px #5c5c5c;
- box-shadow: 0 0 6px #5c5c5c;
-}
-
-#my-infos .content {
- background: #e8f1f3;
- background: -moz-linear-gradient(top, #e4edef, #e8f1f3);
- background: -webkit-gradient(linear, left top, left bottom, from(#e4edef), to(#e8f1f3));
- background: -webkit-linear-gradient(top, #e4edef 0%, #e8f1f3 100%);
- background: -o-linear-gradient(top, #e4edef 0%, #e8f1f3 100%);
- color: #919191;
- max-height: 140px;
- padding: 1px 0;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
-}
-
-#my-infos .element {
- height: 24px;
- margin: 6px 0;
- position: relative;
-}
-
-#my-infos .element .icon {
- background-color: white;
- border-color: #636363;
- border-width: 1px;
- border-style: solid;
- margin-left: 6px;
- height: 22px;
- width: 25px;
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
-}
-
-html[dir="rtl"] #my-infos .element .icon {
- margin-left: auto;
- margin-right: 6px;
-}
-
-#my-infos .element div.bubble a {
- width: 100%;
- height: 20px;
-}
-
-#my-infos .element .icon:hover,
-#my-infos .element div.bubble a:hover {
- background-color: #f4f4f4;
-}
-
-#my-infos .element .icon:active,
-#my-infos .element div.bubble a:active {
- background-color: #ededed;
-}
-
-#my-infos .f-presence div.bubble a[data-value="available"] {
- background-position: 4px -167px;
-}
-
-#my-infos .f-presence div.bubble a[data-value="away"] {
- background-position: 4px -183px;
-}
-
-#my-infos .f-presence div.bubble a[data-value="xa"] {
- background-position: 4px -199px;
-}
-
-#my-infos .f-mood div.bubble a[data-value="crazy"] {
- background-position: 4px -296px;
-}
-
-#my-infos .f-mood div.bubble a[data-value="excited"] {
- background-position: 4px -314px;
-}
-
-#my-infos .f-mood div.bubble a[data-value="playful"] {
- background-position: 4px -332px;
-}
-
-#my-infos .f-mood div.bubble a[data-value="happy"] {
- background-position: 4px -350px;
-}
-
-#my-infos .f-mood div.bubble a[data-value="shocked"] {
- background-position: 4px -368px;
-}
-
-#my-infos .f-mood div.bubble a[data-value="hot"] {
- background-position: 4px -386px;
-}
-
-#my-infos .f-mood div.bubble a[data-value="sad"] {
- background-position: 4px -404px;
-}
-
-#my-infos .f-mood div.bubble a[data-value="amorous"] {
- background-position: 4px -422px;
-}
-
-#my-infos .f-mood div.bubble a[data-value="confident"] {
- background-position: 4px -440px;
-}
-
-#my-infos .f-mood a[data-value] span {
- background-position: 0 -352px;
-}
-
-#my-infos .f-mood a[data-value="crazy"] span,
-.mood-one {
- background-position: 0 -298px;
-}
-
-#my-infos .f-mood a[data-value="excited"] span,
-.mood-two {
- background-position: 0 -316px;
-}
-
-#my-infos .f-mood a[data-value="playful"] span,
-.mood-three {
- background-position: 0 -334px;
-}
-
-#my-infos .f-mood a[data-value="happy"] span,
-.mood-four {
- background-position: 0 -352px;
-}
-
-#my-infos .f-mood a[data-value="shocked"] span,
-.mood-five {
- background-position: 0 -370px;
-}
-
-#my-infos .f-mood a[data-value="hot"] span,
-.mood-six {
- background-position: 0 -388px;
-}
-
-#my-infos .f-mood a[data-value="sad"] span,
-.mood-seven {
- background-position: 0 -406px;
-}
-
-#my-infos .f-mood a[data-value="amorous"] span,
-.mood-eight {
- background-position: 0 -424px;
-}
-
-#my-infos .f-mood a[data-value="confident"] span,
-.mood-nine {
- background-position: 0 -442px;
-}
-
-#my-infos .f-activity div.bubble a[data-value="doing_chores"] {
- background-position: 4px -458px;
-}
-
-#my-infos .f-activity div.bubble a[data-value="drinking"] {
- background-position: 4px -476px;
-}
-
-#my-infos .f-activity div.bubble a[data-value="eating"] {
- background-position: 4px -494px;
-}
-
-#my-infos .f-activity div.bubble a[data-value="exercising"] {
- background-position: 4px -512px;
-}
-
-#my-infos .f-activity div.bubble a[data-value="grooming"] {
- background-position: 4px -548px;
-}
-
-#my-infos .f-activity div.bubble a[data-value="having_appointment"] {
- background-position: 4px -566px;
-}
-
-#my-infos .f-activity div.bubble a[data-value="inactive"] {
- background-position: 4px -530px;
-}
-
-#my-infos .f-activity div.bubble a[data-value="relaxing"] {
- background-position: 4px -620px;
-}
-
-#my-infos .f-activity div.bubble a[data-value="talking"] {
- background-position: 4px -602px;
-}
-
-#my-infos .f-activity div.bubble a[data-value="traveling"] {
- background-position: 4px -584px;
-}
-
-#my-infos .f-activity div.bubble a[data-value="working"] {
- background-position: 4px -638px;
-}
-
-#my-infos .f-activity a[data-value] span {
- background-position: 0 -514px;
-}
-
-#my-infos .f-activity a[data-value="doing_chores"] span,
-.activity-doing_chores {
- background-position: 0 -460px;
-}
-
-#my-infos .f-activity a[data-value="drinking"] span,
-.activity-drinking {
- background-position: 0 -478px;
-}
-
-#my-infos .f-activity a[data-value="eating"] span,
-.activity-eating {
- background-position: 0 -496px;
-}
-
-#my-infos .f-activity a[data-value="exercising"] span,
-.activity-exercising {
- background-position: 0 -514px;
-}
-
-#my-infos .f-activity a[data-value="grooming"] span,
-.activity-grooming {
- background-position: 0 -550px;
-}
-
-#my-infos .f-activity a[data-value="having_appointment"] span,
-.activity-having_appointment {
- background-position: 0 -568px;
-}
-
-#my-infos .f-activity a[data-value="inactive"] span,
-.activity-inactive {
- background-position: 0 -532px;
-}
-
-#my-infos .f-activity a[data-value="relaxing"] span,
-.activity-relaxing {
- background-position: 0 -622px;
-}
-
-#my-infos .f-activity a[data-value="talking"] span,
-.activity-talking {
- background-position: 0 -604px;
-}
-
-#my-infos .f-activity a[data-value="traveling"] span,
-.activity-traveling {
- background-position: 0 -586px;
-}
-
-#my-infos .f-activity a[data-value="working"] span,
-.activity-working {
- background-position: 0 -640px;
-}
-
-#my-infos .element .icon.picker {
- border-width: 1px 0 1px 1px;
- float: left;
- -moz-border-radius-topright: 0;
- -moz-border-radius-bottomright: 0;
- -webkit-border-top-right-radius: 0;
- -webkit-border-bottom-right-radius: 0;
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-
-html[dir="rtl"] #my-infos .element .icon.picker {
- border-width: 1px 1px 1px 0;
- float: right;
- -moz-border-radius-topright: 2px;
- -moz-border-radius-topleft: 0;
- -moz-border-radius-bottomright: 2px;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-top-right-radius: 2px;
- -webkit-border-top-left-radius: 0;
- -webkit-border-bottom-right-radius: 2px;
- -webkit-border-bottom-left-radius: 0;
- border-top-right-radius: 2px;
- border-top-left-radius: 0;
- border-bottom-right-radius: 2px;
- border-bottom-left-radius: 0;
-}
-
-#my-infos .element .icon.disabled {
- background-color: #f3f3f3;
- border-color: #989898;
- cursor: default;
-}
-
-#my-infos .element div.bubble {
- background-color: white;
- border-color: #636363;
- border-width: 1px 1px 0 1px;
- border-style: solid;
- width: 25px;
- padding: 1px 0;
- position: absolute;
- bottom: 21px;
- left: 6px;
- -moz-border-radius-topleft: 2px;
- -moz-border-radius-topright: 2px;
- -webkit-border-top-left-radius: 2px;
- -webkit-border-top-right-radius: 2px;
- border-top-left-radius: 2px;
- border-top-right-radius: 2px;
-}
-
-html[dir="rtl"] #my-infos .element div.bubble {
- left: auto;
- right: 6px;
-}
-
-#my-infos .element a {
- float: left;
-}
-
-html[dir="rtl"] #my-infos .element a {
- float: right;
-}
-
-#my-infos .element .icon span {
- height: 16px;
- width: 16px;
- margin: 3px 4px;
- display: block;
-}
-
-#my-infos .element input {
- height: 18px;
- width: 190px;
- font-size: 0.85em;
- padding-left: 4px;
- float: left;
- -moz-border-radius-topleft: 0;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-top-left-radius: 0;
- -webkit-border-top-bottom-radius: 0;
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-html[dir="rtl"] #my-infos .element input {
- padding-left: 2px;
- padding-right: 4px;
- float: right;
- -moz-border-radius-topright: 0;
- -moz-border-radius-topleft: 2px;
- -moz-border-radius-bottomright: 0;
- -moz-border-radius-bottomleft: 2px;
- -webkit-border-top-right-radius: 0;
- -webkit-border-top-left-radius: 2px;
- -webkit-border-bottom-right-radius: 0;
- -webkit-border-bottom-left-radius: 2px;
- border-top-right-radius: 0;
- border-top-left-radius: 2px;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 2px;
-} \ No newline at end of file
diff --git a/app/stylesheets/options.css b/app/stylesheets/options.css
deleted file mode 100644
index fe072806..00000000
--- a/app/stylesheets/options.css
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the options CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#options label {
- width: 190px;
- font-size: 0.94em;
-}
-
-#options .forms {
- width: 610px;
- height: 328px;
- margin: 15px 15px 15px 15px;
- float: left;
-}
-
-#options .forms select {
- margin-top: -3px;
- min-width: 120px;
- float: left;
-}
-
-html[dir="rtl"] #options .forms select {
- float: right;
-}
-
-#options .forms a.linked {
- font-size: 0.9em;
- float: left;
-}
-
-#options .forms a.empty-archives {
- margin-top: -2px;
- margin-left: 5px;
-}
-
-html[dir="rtl"] #options .forms a.linked {
- float: right;
-}
-
-#options .forms.in_background fieldset {
- opacity: 0.5;
-}
-
-#options fieldset.privacy {
- display: none;
-}
-
-#options .sub-ask-delete, #options .sub-ask-pass, #options .sub-ask-pass-success {
- display: none;
-}
-
-#options .sub-ask {
- background: #cbdde1;
- border: 1px #879da2 dotted;
- width: 592px;
- padding: 8px;
- display: none;
- position: absolute;
- bottom: 15px;
-}
-
-#options .sub-ask-top {
- font-size: 0.9em;
- margin-top: -3px;
-}
-
-#options .sub-ask-title {
- margin-bottom: 4px;
- float: left;
-}
-
-#options .sub-ask-close {
- float: right;
-}
-
-#options .sub-ask-close:hover {
- cursor: pointer;
-}
-
-#options .sub-ask-content {
- clear: both;
- height: 25px;
- font-size: 0.9em;
- border-top: 1px #416972 solid;
- padding: 12px 0 0 0;
-}
-
-#options .sub-ask-content label {
- width: 125px;
-}
-
-#options .sub-ask-content input {
- width: 125px;
-}
-
-#options .sub-ask-bottom {
- clear: both;
- font-size: 0.9em;
- float: right;
- text-decoration: underline;
-}
-
-#options .sub-ask-bottom:hover {
- cursor: pointer;
-}
diff --git a/app/stylesheets/others.css b/app/stylesheets/others.css
deleted file mode 100644
index 215b6323..00000000
--- a/app/stylesheets/others.css
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the others CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#audio {
- display: none;
-}
-
-#top-content {
- position: absolute;
- right: 5px;
- left: 5px;
- top: 0;
- min-width: 860px;
- z-index: 50;
-}
-
-#main-content {
- position: absolute;
- top: 34px;
- left: 5px;
- right: 5px;
- bottom: 5px;
- min-width: 850px;
- min-height: 450px;
-}
-
-#left-content {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
- width: 248px;
-}
-
-html[dir="rtl"] #left-content {
- left: auto;
- right: 0;
-}
-
-#right-content,
-#suggest {
- background-color: rgb(20,20,20);
- background-color: rgba(20,20,20,0.85);
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 260px;
- z-index: 10;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
- -moz-box-shadow: 0 0 6px #5c5c5c;
- -webkit-box-shadow: 0 0 6px #5c5c5c;
- box-shadow: 0 0 6px #5c5c5c;
-}
-
-html[dir="rtl"] #right-content {
- left: 0;
- right: 260px;
-}
-
-#general-wait {
- background: url(../images/others/blank.gif) repeat;
- z-index: 10000;
- position: fixed;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
-}
-
-.general-wait-content {
- background-color: rgb(255,255,255);
- background-color: rgba(255,255,255,0.9);
- background-position: 8px 8px;
- padding: 8px;
- position: absolute;
- right: 5px;
- bottom: 5px;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
- -moz-box-shadow: 0 0 2px #000;
- -webkit-box-shadow: 0 0 2px #000;
- box-shadow: 0 0 2px #000;
-}
-
-html[dir="rtl"] .general-wait-content {
- right: auto;
- left: 5px;
-}
-
-.inbox-hidable,
-.options-hidable,
-.pep-hidable,
-.pubsub-hidable,
-.pubsub-hidable-cn,
-.mam-hidable,
-.commands-hidable,
-.privacy-hidable,
-.xmpplinks-hidable,
-.muji-hidable {
- display: none;
-}
-
-#reconnect .pane {
- background-color: rgb(20,20,20);
- background-color: rgba(20,20,20,0.85);
- color: white;
- padding: 25px;
- z-index: 10000;
- text-shadow: 0 1px 1px black;
- position: absolute;
- left: 0;
- right: 0;
- top: 0;
- -moz-box-shadow: 0 0 35px #232323;
- -webkit-box-shadow: 0 0 35px #232323;
- box-shadow: 0 0 35px #232323;
-}
-
-#reconnect .pane a {
- margin-top: -4px;
- float: right;
-}
-
-#suggest {
- width: 350px;
- height: 350px;
- margin-top: -175px;
- margin-left: -175px;
- left: 50%;
- right: auto;
- top: 50%;
-}
-
-#suggest .title {
- color: white;
- font-weight: bold;
- text-transform: uppercase;
- text-shadow: 0 2px 2px black;
- position: absolute;
- top: 14px;
- left: 18px;
- right: 18px;
-}
-
-#suggest .content {
- background: #e4eef9;
- padding: 12px 12px 0 12px;
- position: absolute;
- left: 8px;
- right: 8px;
- top: 45px;
- bottom: 52px;
- overflow: auto;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
- -moz-box-shadow: 0 0 10px black;
- -webkit-box-shadow: 0 0 10px black;
- box-shadow: 0 0 10px black;
-}
-
-#suggest .content a.one {
- background-color: #e4eef9;
- border: 1px solid #ccdbde;
- margin-bottom: 8px;
- padding: 8px 12px;
- text-decoration: none;
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
- display: block;
-}
-
-#suggest .content a.one:hover,
-#suggest .content a.one:focus {
- border: 1px solid #93c5fa;
-}
-
-#suggest .content a.one:active {
- border: 1px solid #419afa;
-}
-
-#suggest .content a.one.active {
- background-color: #f1f6fd;
- border: 1px solid #9dc4fc;
-}
-
-#suggest .content a.one span.icon,
-#suggest .content a.one span.state {
- height: 16px;
- width: 16px;
-}
-
-#suggest .content a.one span.icon {
- background-position: 0 -1082px;
- margin: 0 15px 0 0;
- float: left;
-}
-
-#suggest .content a.one span.name {
- font-weight: bold;
- height: 16px;
- width: 250px;
- overflow: hidden;
- float: left;
-}
-
-#suggest .content a.one span.state {
- background-position: 0 -1661px;
- margin: -6px -16px 0 0;
- display: none;
- float: right;
-}
-
-#suggest .content a.one.active span.state {
- display: block;
-}
-
-#suggest .content a.one span.clear {
- display: block;
- clear: both;
-}
-
-#suggest .bottom {
- position: absolute;
- bottom: 13px;
- right: 8px;
- left: 8px;
-}
-
-#suggest .bottom a.next {
- float: right;
-} \ No newline at end of file
diff --git a/app/stylesheets/pageengine.css b/app/stylesheets/pageengine.css
deleted file mode 100644
index 37e6f7d9..00000000
--- a/app/stylesheets/pageengine.css
+++ /dev/null
@@ -1,1140 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the page-engine CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#page-engine {
- background-color: #f4f4f4;
- position: absolute;
- top: 40px;
- bottom: 6px;
- right: 6px;
- left: 6px;
- z-index: 8;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
-}
-
-#page-engine .top {
- background: #e8f1f3;
- background: -moz-linear-gradient(top, #e8f1f3, #dee8ea);
- background: -webkit-gradient(linear, left top, left bottom, from(#e8f1f3), to(#dee8ea));
- background: -webkit-linear-gradient(top, #e8f1f3 0%, #dee8ea 100%);
- background: -o-linear-gradient(top, #e8f1f3 0%, #dee8ea 100%);
- border-bottom: 1px solid #d0d0d0;
- color: black;
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- padding: 6px;
- height: 80px;
- -moz-border-radius-topright: 3px;
- -moz-border-radius-topleft: 3px;
- -webkit-border-top-right-radius: 3px;
- -webkit-border-top-left-radius: 3px;
- border-top-right-radius: 3px;
- border-top-left-radius: 3px;
-}
-
-#page-engine .top .avatar-container {
- text-align: center;
- margin: 2px 0 0 10px;
- height: 76px;
- width: 76px;
- float: left;
-}
-
-html[dir="rtl"] #page-engine .top .avatar-container {
- margin-left: 0;
- margin-right: 10px;
- float: right;
-}
-
-#page-engine .top .avatar {
- max-height: 76px;
- max-width: 76px;
-}
-
-#page-engine .top .name {
- text-align: right;
- padding: 7px;
-}
-
-html[dir="rtl"] #page-engine .top .name {
- text-align: left;
-}
-
-#page-engine p.bc-name {
- font-size: 2.3em;
- margin-bottom: 5px;
-}
-
-#page-engine p.bc-infos {
- font-size: 0.85em;
- height: 16px;
- overflow: hidden;
- position: absolute;
- left: 115px;
- right: 12px;
-}
-
-html[dir="rtl"] #page-engine p.bc-infos {
- left: 12px;
- right: 115px;
-}
-
-#page-engine .page-engine-chan[data-type="groupchat"] p.bc-infos {
- left: 12px;
-}
-
-#page-engine p.bc-infos span.show {
- padding-left: 18px;
-}
-
-#page-engine p.bc-infos a {
- text-decoration: underline;
-}
-
-#page-engine div.bc-pep {
- float: right;
-}
-
-html[dir="rtl"] #page-engine div.bc-pep {
- float: left;
-}
-
-#page-engine div.bc-pep a {
- height: 16px;
- width: 16px;
- margin-left: 4px;
- float: left;
-}
-
-html[dir="rtl"] #page-engine div.bc-pep a {
- margin-right: 4px;
- margin-left: 0;
-}
-
-#page-engine div.bc-pep a:hover {
- cursor: default;
-}
-
-#page-engine div.bc-pep a[href]:hover {
- cursor: pointer;
-}
-
-#page-engine .content,
-#page-engine .list {
- font-size: 0.9em;
- position: absolute;
- top: 93px;
- right: 0;
- bottom: 29px;
- overflow: auto;
- -moz-box-shadow: inset 0 3px 10px #e8e8e8;
- -webkit-box-shadow: inset 0 3px 10px #e8e8e8;
- box-shadow: inset 0 3px 10px #e8e8e8;
-}
-
-#page-engine .content {
- left: 0;
- padding: 12px 14px 0;
-}
-
-#page-engine .content a {
- text-decoration: underline;
-}
-
-#page-engine .content .wait-mam {
- margin: 2px auto 14px auto;
- display: none;
-}
-
-#page-engine .page-engine-chan {
- display: none;
-}
-
-#page-engine .chat .content,
-#page-engine .chat .list {
- bottom: 93px;
-}
-
-#page-engine .chat .content {
- padding-bottom: 24px;
-}
-
-#page-engine .groupchat-content {
- padding-bottom: 16px !important;
- right: 191px !important;
-}
-
-html[dir="rtl"] #page-engine .groupchat-content {
- right: 0 !important;
- left: 191px !important;
-}
-
-#page-engine .list {
- border-width: 0 0 0 1px;
- border-style: solid;
- border-color: #c8c8c8;
- padding: 8px 0 0;
- width: 190px;
- right: 0;
-}
-
-html[dir="rtl"] #page-engine .list {
- border-width: 0 1px 0 0;
- right: auto;
- left: 0;
-}
-
-#page-engine .list .role {
- display: none;
- margin-bottom: 10px;
-}
-
-#page-engine .list .title {
- font-weight: bold;
- color: #383838;
- margin-left: 8px;
-}
-
-#page-engine .list .user {
- background: #eff2f2;
- background: -moz-linear-gradient(top, #eff2f2, #ecefef);
- background: -webkit-gradient(linear, left top, left bottom, from(#eff2f2), to(#ecefef));
- background: -webkit-linear-gradient(top, #eff2f2 0%, #ecefef 100%);
- background: -o-linear-gradient(top, #eff2f2 0%, #ecefef 100%);
- border-color: #c8c8c8;
- border-width: 1px 0;
- border-style: solid;
- color: #383838;
- margin-bottom: 3px;
- overflow: hidden;
-}
-
-#page-engine .list .user:hover {
- background: #e9ecec;
- cursor: pointer;
-}
-
-#page-engine .list .user:active {
- background: #e3e7e7;
-}
-
-#page-engine .list .user.myself {
- background-color: #eff2f2;
- cursor: default;
-}
-
-#page-engine .list .user .user-details {
- height: 32px;
-}
-
-#page-engine .list .user .user-details .name {
- float: left;
- height: 18px;
- overflow: hidden;
- margin: 7px 0 7px 3px;
- padding-left: 18px;
-}
-
-html[dir="rtl"] #page-engine .list .user .user-details .name {
- margin-left: auto;
- margin-right: 8px;
- float: right;
-}
-
-#page-engine .list .user .user-details .avatar-container {
- text-align: center;
- float: right;
- height: 32px;
- width: 32px;
-}
-
-html[dir="rtl"] #page-engine .list .user .user-details .avatar-container {
- float: left;
-}
-
-#page-engine .list .user .user-details .avatar {
- max-height: 32px;
- max-width: 32px;
-}
-
-#page-engine .list .user .user-actions {
- margin-top: 2px;
- display: none;
-}
-
-#page-engine .list .user .user-actions .action {
- border-style: solid;
- border-width: 0 1px 0 0;
- border-color: #e1e1e1;
- text-align: center;
- margin: 0 0 0 6px;
- padding: 0 6px 0 0;
- float: left;
-}
-
-#page-engine .list .user .user-actions .action a {
- width: 16px;
- height: 16px;
- margin: 2px 6px 1px 6px;
- display: inline-block;
- opacity: 0.8;
-}
-
-#page-engine .list .user .user-actions .action a:hover,
-#page-engine .list .user .user-actions .action a:focus {
- opacity: 1;
-}
-
-#page-engine .list .user .user-actions .action.promote a {
- background-position: 0 -2156px;
-}
-
-#page-engine .list .user .user-actions .action.demote a {
- background-position: 0 -2172px;
-}
-
-#page-engine .list .user .user-actions .action.kick a {
- background-position: 0 -2188px;
-}
-
-#page-engine .list .user .user-actions .action.add {
- border-width: 0 0 0 1px;
- margin: 0 6px 0 0;
- padding: 0 0 0 6px;
- float: right;
-}
-
-#page-engine .list .user .user-actions .action.add a {
- background-position: 0 -1047px;
-}
-
-#page-engine .one-group {
- border-bottom: 1px dotted #d0d0d0;
- padding-bottom: 8px;
- margin-bottom: 10px;
-}
-
-#page-engine .one-line {
- position: relative;
-}
-
-#page-engine .one-line.is-sending {
- opacity: 0.6;
-}
-
-#page-engine .one-line .correction-edit,
-#page-engine .one-line .correction-label,
-#page-engine .one-line.user-message[data-edited] .corrected-info,
-#page-engine .one-line .message-marker {
- font-size: 0.8em;
- position: absolute;
- right: 0;
- top: 0;
-}
-
-html[dir="rtl"] #page-engine .one-line .correction-edit,
-html[dir="rtl"] #page-engine .one-line .correction-label,
-html[dir="rtl"] #page-engine .one-line.user-message[data-edited] .corrected-info,
-html[dir="rtl"] #page-engine .one-line .message-marker {
- left: 0;
- right: auto;
-}
-
-#page-engine .one-line .correction-edit,
-#page-engine .one-line .correction-label {
- border: 1px solid #7f7f7f;
- color: black;
- font-size: 0.8em;
- text-decoration: none;
- margin-top: -1px;
- padding: 2px 5px;
- position: absolute;
- right: 0;
- top: 0;
-}
-
-#page-engine .one-line .correction-edit {
- opacity: 0.4;
- display: none;
-}
-
-#page-engine .page-engine-chan[data-correction="true"] .one-line .correction-edit:hover,
-#page-engine .page-engine-chan[data-correction="true"] .one-line .correction-edit:focus {
- opacity: 1;
-}
-
-#page-engine .one-line.user-message[data-edited] .corrected-info,
-#page-engine .one-line .message-marker {
- color: #969696;
- margin-top: 2px;
-}
-
-#page-engine .one-line .message-marker {
- display: none;
-}
-
-#page-engine .one-line .message-marker.message-marker-read {
- background-position: 0 -2227px;
- padding-left: 11px;
-}
-
-#page-engine .page-engine-chan[data-correction="true"] .one-line.user-message[data-mode="me"]:last-child:hover .correction-edit {
- display: block;
-}
-
-#page-engine .one-line.correction-active .corrected-info,
-#page-engine .one-line.user-message[data-mode="me"]:last-child:hover .corrected-info {
- display: none;
-}
-
-#page-engine .one-line.correction-active .message-marker,
-#page-engine .one-line.user-message[data-mode="me"]:last-child:hover .message-marker {
- display: none !important;
-}
-
-#page-engine .one-line .message-content {
- margin-right: 80px;
-}
-
-html[dir="rtl"] #page-engine .one-line .message-content {
- margin-right: 0;
- margin-left: 80px;
-}
-
-#page-engine .one-line,
-#page-engine .one-group b.name {
- padding-left: 50px;
- word-wrap: break-word;
-}
-
-html[dir="rtl"] #page-engine .one-line,
-html[dir="rtl"] #page-engine .one-group b.name {
- padding-left: auto;
- padding-right: 50px;
-}
-
-#page-engine .one-line.correction-active {
- opacity: 0.5;
-}
-
-#page-engine .one-group b.name {
- display: block;
- margin-bottom: 4px;
- line-height: 1.4;
-}
-
-#page-engine .one-group b.name.me {
- color: #123a5c;
-}
-
-#page-engine .one-group b.name.him {
- color: #801e1e;
-}
-
-#page-engine .one-group span.date {
- float: right;
- font-size: 0.95em;
-}
-
-html[dir="rtl"] #page-engine .one-group span.date {
- float: left;
-}
-
-#page-engine .one-group .avatar-container {
- text-align: center;
- margin: 4px 0 0 6px;
- height: 30px;
- width: 30px;
- float: left;
-}
-
-html[dir="rtl"] #page-engine .one-group .avatar-container {
- margin-left: auto;
- margin-right: 6px;
- float: right;
-}
-
-#page-engine .one-group .avatar {
- max-height: 30px;
- max-width: 30px;
-}
-
-#page-engine b.name.talk-images {
- background-position: 50px -99px;
- padding-left: 68px;
-}
-
-#page-engine .user-message {
- margin-bottom: 3px;
- line-height: 1.3;
-}
-
-#page-engine .system-message {
- color: #053805 !important;
- margin-bottom: 3px !important;
- padding-left: 0 !important;
-}
-
-html[dir="rtl"] #page-engine .system-message {
- padding-right: 0 !important;
-}
-
-#page-engine .system-message a {
- color: #053805 !important;
-}
-
-#page-engine .system-message p.help b {
- margin-bottom: 5px;
- text-decoration: underline;
- display: block;
-}
-
-#page-engine .system-message p.help em {
- width: 240px;
- text-decoration: underline;
- margin-left: 5px;
- float: left;
-}
-
-#page-engine .my-nick {
- font-weight: bold;
-}
-
-#page-engine .old-message {
- font-size: 11px !important;
- margin-bottom: 1px !important;
-}
-
-#page-engine .chatstate {
- background-color: rgb(234,234,234);
- background-color: rgba(234,234,234,0.8);
- color: #2c2c2c;
- padding: 3px 10px 2px 8px;
- position: absolute;
- bottom: 93px;
- left: 0;
- font-size: 0.75em;
- -moz-border-radius-topright: 3px;
- -webkit-border-top-right-radius: 3px;
- border-top-right-radius: 3px;
-}
-
-html[dir="rtl"] #page-engine .chatstate {
- left: auto;
- right: 0;
- -moz-border-radius-topleft: 3px;
- -moz-border-radius-topright: 0;
- -webkit-border-top-left-radius: 3px;
- -webkit-border-top-right-radius: 0;
- border-top-left-radius: 3px;
- border-top-right-radius: 0;
-}
-
-#page-engine .text {
- height: 93px;
- position: absolute;
- bottom: 0;
- left: 0;
- right: 0;
-}
-
-#page-engine .footer {
- background: #e8f1f3;
- background: -moz-linear-gradient(top, #dee8ea, #e8f1f3);
- background: -webkit-gradient(linear, left top, left bottom, from(#dee8ea), to(#e8f1f3));
- background: -webkit-linear-gradient(top, #dee8ea 0%, #e8f1f3 100%);
- background: -o-linear-gradient(top, #dee8ea 0%, #e8f1f3 100%);
- border-color: #d0d0d0;
- border-width: 1px 0 0;
- border-style: solid;
- color: black;
- position: absolute;
- left: 0;
- right: 0;
- padding: 6px;
- height: 16px;
-}
-
-#page-engine .chat .footer {
- border-width: 1px 0;
- position: static;
-}
-
-#page-engine .chat-tools-content {
- height: 16px;
- width: 16px;
- margin-right: 8px;
- float: left;
-}
-
-html[dir="rtl"] #page-engine .chat-tools-content {
- float: right;
-}
-
-#page-engine .tools-tooltip {
- display: block;
- height: 16px;
- width: 16px;
- overflow: hidden;
- float: left;
-}
-
-#page-engine .text .chat-tools-smileys {
- margin-left: 4px;
-}
-
-html[dir="rtl"] #page-engine .text .chat-tools-smileys {
- margin-left: 0;
-}
-
-#page-engine .text .chat-tools-file.mini .bubble-file {
- z-index: 39;
-}
-
-#page-engine .text .chat-tools-file.mini .tooltip-subitem {
- width: 22px;
- height: 20px;
-}
-
-#page-engine .text .chat-tools-file.mini .wait {
- margin: -2px 0 0 -1px;
-}
-
-#page-engine .text .tools-smileys {
- background-position: 0 -388px;
-}
-
-#page-engine .text .tools-style {
- background-position: 0 -700px;
-}
-
-#page-engine .text .tools-file {
- background-position: 0 -1956px;
-}
-
-#page-engine .text .tools-save {
- background-position: 0 -719px;
-}
-
-#page-engine .text .tools-clear {
- background-position: 0 -739px;
-}
-
-#page-engine .text .tools-infos,
-#channel .top div.shortcuts a.profile {
- background-position: 0 -758px;
-}
-
-#page-engine .text .tools-jingle-video {
- background-position: 0 -2048px;
-}
-
-#page-engine .text .tools-jingle-audio {
- background-position: 0 -2080px;
-}
-
-body.in_jingle_call #page-engine .text .tools-jingle-video,
-body.in_jingle_call #page-engine .text .tools-jingle-audio,
-body.in_muji_call #page-engine .text .tools-jingle-video,
-body.in_muji_call #page-engine .text .tools-jingle-audio {
- opacity: 0.35;
- cursor: default;
-}
-
-#page-engine .text .chat-tools-file,
-#page-engine .text .tools-add,
-#page-engine .text .tools-mucadmin,
-#page-engine .text .tools-jingle-video,
-#page-engine .text .tools-jingle-audio {
- display: none;
-}
-
-#page-engine .text .tools-mucadmin {
- background-position: 0 -777px;
-}
-
-#page-engine .bubble-style label {
- margin: 0 0 3px 0 !important;
-}
-
-#page-engine .bubble-style label.font {
- height: 14px !important;
-}
-
-#page-engine .bubble-style label.font div.font-icon {
- background-position: 0 -1978px;
- width: 14px;
- height: 11px;
- float: left;
-}
-
-#page-engine .bubble-style label.font div.font-change,
-#page-engine .bubble-style label.font div.fontsize-change {
- position: absolute;
-}
-
-#page-engine .bubble-style label.font div.font-change {
- left: 59px;
-}
-
-#page-engine .bubble-style label.font div.fontsize-change {
- left: 28px;
-}
-
-#page-engine .bubble-style label.font div.font-change a.font-current,
-#page-engine .bubble-style label.font div.fontsize-change a.fontsize-current {
- text-decoration: none;
- float: left;
-}
-
-#page-engine .bubble-style label.font div.font-change a.font-current {
- width: 140px;
-}
-
-#page-engine .bubble-style label.font div.fontsize-change a.fontsize-current {
- width: 25px;
-}
-
-#page-engine .bubble-style label.font div.font-change a.font-current:hover,
-#page-engine .bubble-style label.font div.font-change a.font-current:focus,
-#page-engine .bubble-style label.font div.fontsize-change a.fontsize-current:hover,
-#page-engine .bubble-style label.font div.fontsize-change a.fontsize-current:focus {
- text-decoration: underline;
-}
-
-#page-engine .bubble-style label.font div.font-change.listed,
-#page-engine .bubble-style label.font div.fontsize-change.listed {
- margin-bottom: 15px;
-}
-
-#page-engine .bubble-style label.font div.font-change div.font-list,
-#page-engine .bubble-style label.font div.font-change.listed a.font-current,
-#page-engine .bubble-style label.font div.fontsize-change div.fontsize-list,
-#page-engine .bubble-style label.font div.fontsize-change.listed a.fontsize-current,
-#page-engine .bubble-style div.color-picker div.color-hex {
- border-style: solid;
- border-color: black;
- background: white;
- -moz-box-shadow: 0 0 5px #5f5f5f;
- -webkit-box-shadow: 0 0 5px #5f5f5f;
- box-shadow: 0 0 5px #5f5f5f;
-}
-
-#page-engine .bubble-style label.font div.font-change.listed a.font-current,
-#page-engine .bubble-style label.font div.fontsize-change.listed a.fontsize-current {
- background: rgb(255,255,255);
- background: rgba(255,255,255, 0.8);
- border-width: 0 1px 1px 1px;
- color: black;
- text-shadow: none;
- text-decoration: none;
- padding: 2px 6px;
- position: absolute;
- top: -2px;
- left: -7px;
- z-index: 2;
- -moz-border-radius-bottomright: 2px;
- -moz-border-radius-bottomleft: 2px;
- -webkit-border-bottom-right-radius: 2px;
- -webkit-border-bottom-left-radius: 2px;
- border-bottom-right-radius: 2px;
- border-bottom-left-radius: 2px;
-}
-
-#page-engine .bubble-style label.font div.font-change.listed a.font-current {
- width: 133px;
-}
-
-#page-engine .bubble-style label.font div.fontsize-change.listed a.fontsize-current {
- width: 18px;
-}
-
-#page-engine .bubble-style label.font div.font-change div.font-list,
-#page-engine .bubble-style label.font div.fontsize-change div.fontsize-list,
-#page-engine .bubble-style div.color-picker div.color-hex {
- background: rgb(255,255,255);
- background: rgba(255,255,255, 0.9);
- border-width: 1px 1px 0 1px;
- padding: 2px 0;
- overflow: auto;
- position: absolute;
- bottom: 2px;
- left: -7px;
- z-index: 1;
- display: none;
- -moz-border-radius-topright: 2px;
- -moz-border-radius-topleft: 2px;
- -webkit-border-top-right-radius: 2px;
- -webkit-border-top-left-radius: 2px;
- border-top-right-radius: 2px;
- border-top-left-radius: 2px;
-}
-
-#page-engine .bubble-style label.font div.font-change div.font-list {
- width: 145px;
- height: 250px;
-}
-
-#page-engine .bubble-style label.font div.fontsize-change div.fontsize-list {
- width: 30px;
-}
-
-#page-engine .bubble-style label.font div.font-change.listed div.font-list,
-#page-engine .bubble-style label.font div.fontsize-change.listed div.fontsize-list,
-#page-engine .bubble-style div.color-picker.opened div.color-hex {
- display: block;
-}
-
-#page-engine .bubble-style label.font div.font-change div.font-list a,
-#page-engine .bubble-style label.font div.fontsize-change div.fontsize-list a {
- font-size: 1em;
- text-shadow: none;
- font-weight: bold;
- text-decoration: none;
- color: black;
- padding: 3px 6px;
- display: block;
-}
-
-#page-engine .bubble-style label.font div.font-change div.font-list a:hover,
-#page-engine .bubble-style label.font div.font-change div.font-list a:focus,
-#page-engine .bubble-style label.font div.fontsize-change div.fontsize-list a:hover,
-#page-engine .bubble-style label.font div.fontsize-change div.fontsize-list a:focus {
- background-color: rgb(0,0,0);
- background-color: rgba(0,0,0, 0.8);
- color: white;
-}
-
-#page-engine .bubble-style label.font div.fontsize-change div.fontsize-list a.reset {
- background-position: 7px -2006px;
- height: 14px;
-}
-
-#page-engine .bubble-style label.font div.fontsize-change div.fontsize-list a.reset:hover,
-#page-engine .bubble-style label.font div.fontsize-change div.fontsize-list a.reset:focus {
- background-position: 7px -2025px;
-}
-
-#page-engine .bubble-style label.bold {
- font-weight: bold;
-}
-
-#page-engine .bubble-style label.italic {
- font-style: italic;
-}
-
-#page-engine .bubble-style label.underline {
- text-decoration: underline;
-}
-
-#page-engine .bubble-style a.color {
- height: 12px;
- width: 18px;
- border-color: white;
- border-width: 1px;
- border-style: solid;
- margin: 4px 5px 0 0;
- float: left;
- opacity: 0.6;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
- -moz-box-shadow: 0 0 5px black;
- -webkit-box-shadow: 0 0 5px black;
- box-shadow: 0 0 5px black;
-}
-
-#page-engine .bubble-style a.color:hover,
-#page-engine .bubble-style a.color:focus {
- opacity: 0.7;
-}
-
-#page-engine .bubble-style a.color.selected {
- opacity: 1;
- border-color: #ffb20d;
-}
-
-#page-engine .bubble-style div.color-picker {
- margin-left: 4px;
- float: left;
- position: relative;
-}
-
-#page-engine .bubble-style div.color-picker a.color-more {
- background-position: 1px -1991px;
- height: 14px;
- width: 14px;
- margin-top: 4px;
- float: left;
-}
-
-#page-engine .bubble-style div.color-picker div.color-hex {
- border-width: 1px;
- width: 80px;
- height: auto;
- padding: 3px 5px;
- text-shadow: none;
- bottom: -5px;
- left: -52px;
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
-}
-
-#page-engine .bubble-style div.color-picker div.color-hex span.hex-begin,
-#page-engine .bubble-style div.color-picker div.color-hex input.hex-value {
- color: black;
- float: left;
-}
-
-#page-engine .bubble-style div.color-picker div.color-hex span.hex-begin {
- font-weight: bold;
- font-size: 1.2em;
- margin-right: 5px;
-}
-
-#page-engine .bubble-style div.color-picker div.color-hex input.hex-value {
- background: rgb(0,0,0);
- background: rgba(0,0,0,0.1);
- border: none;
- width: 60px;
-}
-
-#page-engine .bubble-file .tooltip-subitem {
- width: 240px;
-}
-
-#page-engine .bubble-file input[type="file"] {
- width: 220px;
-}
-
-#page-engine .bubble-file input[type="submit"],
-#page-engine .bubble-file input[type="reset"] {
- margin: 4px 4px 0 0;
-}
-
-#page-engine .text .compose,
-#page-engine .muc-ask,
-#page-engine .correction-toolbox {
- position: absolute;
- left: 0;
-}
-
-#page-engine .text .compose,
-#page-engine .correction-toolbox {
- top: 29px;
- bottom: 12px;
-}
-
-#page-engine .text .compose {
- right: 12px;
-}
-
-html[dir="rtl"] #page-engine .text .compose {
- right: 0;
- left: 12px;
-}
-
-#page-engine .text.correction-active .compose {
- left: 120px;
-}
-
-html[dir="rtl"] #page-engine .text.correction-active .compose {
- right: 120px;
-}
-
-#page-engine .correction-toolbox {
- width: 120px;
-}
-
-html[dir="rtl"] #page-engine .correction-toolbox {
- right: 0;
- left: auto;
-}
-
-#page-engine .correction-toolbox .correction-editing,
-#page-engine .correction-toolbox .correction-cancel {
- display: block;
- color: black;
- font-size: 0.8em;
- text-decoration: none;
- text-align: center;
- margin: 7px 12px;
- padding: 2px 5px;
-}
-
-#page-engine .correction-toolbox .correction-editing {
- font-weight: bold;
- margin-top: 8px;
-}
-
-#page-engine .correction-toolbox .correction-cancel {
- background: #d15e6b;
- border: 1px solid #cc273f;
- color: white;
- text-shadow: 0 1px 1px rgba(0,0,0,0.5);
-}
-
-#page-engine .muc-ask {
- right: 0;
- bottom: 0;
-}
-
-#page-engine .text textarea {
- border: 1px solid #c8c8c8;
- padding: 5px;
- height: 100%;
- width: 100%;
- font-size: 1.1em;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
- -moz-border-radius-topright: 0;
- -moz-border-radius-topleft: 0;
- -webkit-border-top-right-radius: 0;
- -webkit-border-top-left-radius: 0;
- border-top-right-radius: 0;
- border-top-left-radius: 0;
-}
-
-#page-engine .text.correction-active textarea {
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-html[dir="rtl"] #page-engine .text.correction-active textarea {
- -moz-border-radius-bottomleft: 3px;
- -webkit-border-bottom-left-radius: 3px;
- border-bottom-left-radius: 3px;
- -moz-border-radius-bottomright: 0;
- -webkit-border-bottom-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-
-#page-engine .muc-ask {
- background-color: #e8f1f3;
- height: 64px;
- font-size: 0.9em;
- right: 0;
- z-index: 2;
- -moz-border-radius-bottomleft: 3px;
- -moz-border-radius-bottomright: 3px;
- -webkit-border-bottom-left-radius: 3px;
- -webkit-border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
- border-bottom-right-radius: 3px;
-}
-
-#page-engine .muc-ask label {
- color: #224249;
- margin: 23px 10px 0 16px;
- font-weight: bold;
-}
-
-#page-engine .muc-ask input {
- width: 200px;
- margin: 19px 10px 0 10px;
- padding: 3px;
-}
-
-#page-engine .tooltip {
- position: absolute;
- bottom: 84px;
- margin-left: -13px;
- z-index: 40;
- font-size: 0.8em;
- color: white;
-}
-
-#page-engine .tooltip a {
- color: white;
- text-decoration: underline;
-}
-
-#page-engine .tooltip-subitem {
- background-color: rgb(0,0,0);
- background-color: rgba(0,0,0,0.8);
- padding: 10px;
- width: 200px;
- height: 110px;
- text-shadow: 0 1px 1px black;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
- border-radius: 5px;
-}
-
-html[dir="rtl"] #page-engine .tooltip-subitem {
- margin-right: -10px;
-}
-
-#page-engine .tooltip-subarrow {
- background-position: 0 -251px;
- opacity: 0.8;
- height: 10px;
- width: 18px;
- margin-left: 12px;
-}
-
-html[dir="rtl"] #page-engine .tooltip-subarrow {
- margin-right: -1px;
- margin-left: auto;
-}
-
-#page-engine .tooltip .tooltip-top {
- margin-bottom: 8px;
- font-weight: bold;
-}
-
-#page-engine .tooltip label {
- margin-bottom: 4px;
- float: left;
- clear: both;
-}
-
-#page-engine .tooltip label input[type="checkbox"] {
- margin: 0 6px 0 0;
- float: left;
-}
-
-html[dir="rtl"] #page-engine .tooltip label input[type="checkbox"] {
- margin-left: 6px;
- margin-right: 0;
-}
-
-#page-engine .tooltip label.select {
- margin-top: 5px;
-}
-
-#page-engine .tooltip input,
-#page-engine .tooltip select {
- float: left;
-}
-
-html[dir="rtl"] #page-engine .tooltip input,
-html[dir="rtl"] #page-engine .tooltip select {
- float: right;
-}
-
-#page-engine .tooltip select {
- width: 100px;
-}
-
-#page-engine .tooltip .tooltip-actionlog:hover,
-#page-engine .tooltip .tooltip-actionlog:focus {
- cursor: pointer;
- text-decoration: underline;
-}
diff --git a/app/stylesheets/pageswitch.css b/app/stylesheets/pageswitch.css
deleted file mode 100644
index d4a2f46a..00000000
--- a/app/stylesheets/pageswitch.css
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the page-switch CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#page-switch {
- position: absolute;
- top: 15px;
- left: 10px;
- right: 10px;
- z-index: 9;
-}
-
-#page-switch .chans {
- position: absolute;
- left: 0;
- right: 50px;
- top: 0;
- height: 25px;
- overflow: hidden;
-}
-
-html[dir="rtl"] #page-switch .chans {
- right: 0;
- left: 40px;
-}
-
-#page-switch .join,
-#page-switch .more {
- position: absolute;
- top: 0;
-}
-
-#page-switch .join {
- right: 25px;
-}
-
-html[dir="rtl"] #page-switch .join {
- left: 25px;
-}
-
-#page-switch .more {
- right: 0;
-}
-
-html[dir="rtl"] #page-switch .more {
- right: auto;
- left: 0;
-}
-
-#page-switch .join-button,
-#page-switch .more-button {
- background-color: #d9e7ea;
- width: 7px;
- height: 16px;
- padding: 1px 6px;
- font-size: 0.9em;
- text-decoration: none;
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
-}
-
-#page-switch .join-button {
- background-position: 4px -2136px;
-}
-
-#page-switch .more-button {
- background-position: 6px -1372px;
-}
-
-#page-switch .join-content,
-#page-switch .more-content {
- background-color: #d9e7ea;
- width: 200px;
- max-height: 400px;
- overflow: auto;
- position: absolute;
- margin: -2px 0 0 -181px;
- padding: 4px 0;
- font-size: 0.95em;
- -moz-border-radius-topleft: 3px;
- -moz-border-radius-bottomleft: 3px;
- -moz-border-radius-bottomright: 3px;
- -webkit-border-top-left-radius: 3px;
- -webkit-border-bottom-left-radius: 3px;
- -webkit-border-bottom-right-radius: 3px;
- border-top-left-radius: 3px;
- border-bottom-left-radius: 3px;
- border-bottom-right-radius: 3px;
-}
-
-html[dir="rtl"] #page-switch .join-content,
-html[dir="rtl"] #page-switch .more-content {
- margin-left: 0;
- left: 0;
- -moz-border-radius-topright: 3px;
- -moz-border-radius-topleft: 0;
- -webkit-border-top-right-radius: 3px;
- -webkit-border-top-left-radius: 0;
- border-top-right-radius: 3px;
- border-top-left-radius: 0;
-}
-
-#page-switch .join-content input.join-groupchat-xid {
- margin: 0 0 0 6px;
- width: 170px;
-}
-
-#page-switch .switcher {
- background-color: #d9e7ea;
- color: #17353b;
- height: 15px;
- padding: 5px 10px 5px 5px;
- margin: 0 2px;
- font-size: 0.85em;
- float: left;
- -moz-border-radius-topright: 3px;
- -moz-border-radius-topleft: 3px;
- -webkit-border-top-right-radius: 3px;
- -webkit-border-top-left-radius: 3px;
- border-top-right-radius: 3px;
- border-top-left-radius: 3px;
-}
-
-html[dir="rtl"] #page-switch .switcher {
- padding-left: 10px;
- padding-right: 5px;
- float: right;
-}
-
-#page-switch .more-content .switcher {
- background-color: #d9e7ea;
- float: none !important;
- margin: 0;
- font-size: 0.9em;
- -moz-border-radius: 0;
- -webkit-border-radius: 0;
- border-radius: 0;
-}
-
-#page-switch .more-content .switcher .exit {
- display: block;
-}
-
-#page-switch .join-button:hover,
-#page-switch .join-button:focus,
-#page-switch .more-button:hover,
-#page-switch .more-button:focus,
-#page-switch .switcher:hover,
-#page-switch .switcher:focus,
-#page-switch .more-content .switcher:hover,
-#page-switch .more-content .switcher:focus {
- background-color: #cedee1;
- cursor: pointer;
-}
-
-#page-switch .join-button:active,
-#page-switch .more-button:active,
-#page-switch .switcher:active,
-#page-switch .more-content .switcher:active {
- background-color: #c3d3d7;
-}
-
-#page-switch .switcher.activechan {
- background-color: #e8f1f3;
-}
-
-#page-switch .more-content .switcher.activechan {
- background-color: #d1e0e3;
-}
-
-#page-switch .icon {
- height: 16px;
- width: 16px;
- float: left;
-}
-
-html[dir="rtl"] #page-switch .icon {
- float: right;
-}
-
-#page-switch .name {
- float: left;
- margin-left: 4px;
- max-height: 16px;
- max-width: 140px;
- overflow: hidden;
-}
-
-html[dir="rtl"] #page-switch .name {
- float: right;
- margin-left: 0;
- margin-right: 4px;
-}
-
-#page-switch .exit {
- display: none;
- background-color: #bdd9dc;
- border: 1px solid #80aab0;
- color: #355e64;
- height: 14px;
- width: 13px;
- margin-left: 10px;
- font-size: 0.85em;
- text-align: center;
- text-decoration: none;
- float: right;
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
-}
-
-html[dir="rtl"] #page-switch .exit {
- margin-left: 0;
- margin-right: 10px;
- float: left;
-}
-
-#page-switch .exit:hover,
-#page-switch .exit:focus {
- background-color: #aac7cb;
-}
-
-#page-switch .exit:active {
- background-color: #9bbdc1;
-}
-
-#page-switch .activechan .exit {
- display: block;
- float: right;
-}
-
-html[dir="rtl"] #page-switch .activechan .exit {
- float: left;
-}
-
-#page-switch .chan-newmessage {
- background-color: #f6edc3 !important;
-}
-
-#page-switch .chan-newmessage:hover,
-#page-switch .chan-newmessage:focus {
- background-color: #f1eac0 !important;
-}
-
-#page-switch .chan-newmessage:active {
- background-color: #ede4b8 !important;
-}
-
-#page-switch .composing,
-#page-engine .list .user.composing {
- color: #217021 !important;
-}
-
-#page-switch .paused,
-#page-switch .chan-unread .name,
-#page-engine .list .user.paused {
- color: #2431ac !important;
-}
-
-#page-switch .active,
-#page-engine .list .user.active {
- color: #353535 !important;
-}
-
-#page-switch .inactive,
-#page-engine .list .user.inactive {
- color: #585858 !important;
-}
-
-#page-switch .gone {
- color: #851313 !important;
-}
-
-#page-switch .channel .icon {
- background-position: 0 -55px;
-}
diff --git a/app/stylesheets/popup.css b/app/stylesheets/popup.css
deleted file mode 100644
index 0a9ecab5..00000000
--- a/app/stylesheets/popup.css
+++ /dev/null
@@ -1,719 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the popup CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-.lock {
- background-color: rgb(0,0,0);
- background-color: rgba(0,0,0,0.6);
- left: 0;
- right: 0;
- top: 0;
- bottom: 0;
- position: fixed;
- z-index: 9999;
-}
-
-.popup {
- background-color: rgb(20,20,20);
- background-color: rgba(20,20,20,0.95);
- margin-top: -250px;
- margin-left: -330px;
- width: 640px;
- height: 500px;
- padding: 0 10px;
- position: absolute;
- z-index: 10000;
- left: 50%;
- top: 50%;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
- border-radius: 5px;
- -moz-box-shadow: 0 0 35px #232323;
- -webkit-box-shadow: 0 0 35px #232323;
- box-shadow: 0 0 35px #232323;
-}
-
-.popup.large {
- margin-left: -460px;
- width: 920px;
-}
-
-.popup .top {
- width: 600px;
- height: 45px;
- font-size: 1.2em;
- padding-top: 9px;
- color: white;
- margin: 14px 0 0 40px;
- text-transform: uppercase;
- text-decoration: none;
- font-weight: bold;
- text-shadow: 0 2px 2px black;
-}
-
-html[dir="rtl"] .popup .top {
- margin-right: 40px;
- margin-left: auto;
-}
-
-.popup .tab {
- width: 620px;
- height: 25px;
- margin: -5px 10px 0 10px;
- position: relative;
- z-index: 1;
-}
-
-.popup .tab a {
- background-color: #d9e7ea;
- color: #204249;
- width: 180px;
- height: 17px;
- padding: 4px 4px 4px 16px;
- margin-left: 5px;
- font-size: 0.94em;
- overflow: hidden;
- float: left;
- -moz-border-radius-topright: 3px;
- -moz-border-radius-topleft: 3px;
- -webkit-border-top-right-radius: 3px;
- -webkit-border-top-left-radius: 3px;
- border-top-right-radius: 3px;
- border-top-left-radius: 3px;
-}
-
-html[dir="rtl"] .popup .tab a {
- margin-left: 0;
- margin-right: 5px;
- padding-left: 4px;
- padding-right: 16px;
- float: right;
-}
-
-.popup .tab a:hover,
-.popup .tab a:focus {
- background-color: #cedee1;
- text-decoration: none;
-}
-
-.popup .tab a:active {
- background-color: #c3d3d7;
- text-decoration: none;
-}
-
-.popup .tab a.tab-active {
- background-color: #e4eef9 !important;
-}
-
-.popup .one-lap {
- display: none;
-}
-
-.popup .one-lap.lap-active {
- display: block;
-}
-
-.popup .content {
- background: #e4eef9;
- background: -moz-linear-gradient(top, #e4eef9, #d0e5fa);
- background: -webkit-gradient(linear, left top, left bottom, from(#e4eef9), to(#d0e5fa));
- background: -webkit-linear-gradient(top, #e4eef9 0%, #d0e5fa 100%);
- background: -o-linear-gradient(top, #e4eef9 0%, #d0e5fa 100%);
- height: 358px;
- width: 640px;
- position: absolute;
- left: 10px;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
- -moz-box-shadow: 0 0 20px black;
- -webkit-box-shadow: 0 0 20px black;
- box-shadow: 0 0 20px black;
-}
-
-.popup .content,
-.popup .content a {
- color: #112a2f;
-}
-
-.popup.large div.comments {
- background-color: #f4f4f4;
- width: 272px;
- margin: 0;
- position: absolute;
- right: 10px;
- top: 63px;
- bottom: 10px;
- overflow-x: hidden;
- overflow-y: auto;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
-}
-
-.popup.large div.comments div.comments-content {
- font-size: 0.8em;
-}
-
-.popup.large div.comments input {
- width: 185px;
- min-width: 0;
-}
-
-.popup.large div.comments .one-comment {
- padding-bottom: 4px;
-}
-
-.popup.large div.comments .one-comment a {
- text-decoration: underline;
-}
-
-.popup.large div.comments div.comments-content {
- -moz-border-radius-topright: 3px;
- -moz-border-radius-topleft: 3px;
- -webkit-border-top-right-radius: 3px;
- -webkit-border-top-left-radius: 3px;
- border-top-right-radius: 3px;
- border-top-left-radius: 3px;
-}
-
-.popup .head {
- background: #f1f6fd;
- border: 1px #9dc4fc solid;
- width: 606px;
- height: 24px;
- margin: 0 10px 10px 10px;
- padding: 6px;
-}
-
-.popup .head-text {
- float: left;
- font-size: 0.9em;
- margin: 3px;
-}
-
-html[dir="rtl"] .popup .head-text {
- float: right;
-}
-
-.popup .head-actions {
- float: right;
- margin-top: 2px;
-}
-
-html[dir="rtl"] .popup .head-actions {
- float: left;
-}
-
-.popup .head-actions a {
- font-size: 0.9em;
- margin: 0 4px;
-}
-
-.popup .actions a {
- color: #30575f;
- font-size: 0.9em;
- margin-left: 5px;
-}
-
-.popup .head .head-input {
- float: right;
- width: 200px;
- padding: 2px;
-}
-
-html[dir="rtl"] .popup .head .head-input {
- float: left;
-}
-
-.popup .head .head-select {
- float: right;
- height: 24px;
-}
-
-html[dir="rtl"] .popup .head .head-select {
- float: left;
-}
-
-.popup .forms {
- font-size: 13.4px;
- width: 390px;
- height: 328px;
- margin: 15px;
- float: left;
-}
-
-.popup fieldset {
- border: 1px #547177 solid;
- margin: 0 0 15px 0;
- padding: 8px 2px 3px 2px;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
-}
-
-.popup legend {
- font-size: 0.9em;
- margin: 0 0 0 15px;
- padding: 0 2px;
- text-transform: uppercase;
-}
-
-.popup label {
- color: #1b1b1b;
- width: 150px;
- margin: 0 0 10px 12px;
- clear: both;
- float: left;
-}
-
-html[dir="rtl"] .popup label {
- margin-left: auto;
- margin-right: 12px;
- float: right;
-}
-
-.popup input,
-.popup select {
- margin: 0 10px 10px 0;
- float: left;
-}
-
-html[dir="rtl"] .popup input,
-html[dir="rtl"] .popup select {
- margin-right: 0;
- margin-left: 10px;
- float: right;
-}
-
-.popup input[type="text"] {
- min-width: 174px;
-}
-
-.popup select {
- min-height: 20px;
-}
-
-.popup .results {
- height: 310px;
- width: 620px;
- margin: -5px 0 0 10px;
- padding: 6px 0 0 0;
- overflow: auto;
-}
-
-html[dir="rtl"] .popup .results {
- margin-left: auto;
- margin-right: 10px;
-}
-
-.popup .results .no-results {
- margin: 6px 0;
- font-size: 0.85em;
- font-weight: bold;
-}
-
-.popup .results label {
- width: 180px;
- margin: 6px 4px 4px 4px;
-}
-
-.popup .results input,
-.popup .results textarea,
-.popup .results select {
- margin: 4px;
-}
-
-.popup .results input,
-.popup .results select {
- min-width: 180px;
-}
-
-.popup .results input[type="checkbox"],
-.popup .results input[type="radio"] {
- margin-top: 7px;
-}
-
-.popup .results textarea {
- width: 380px;
-}
-
-.popup .results .avatar-container {
- float: left;
- width: 60px;
- height: 60px;
- margin: 5px 12px 5px 9px;
- text-align: center;
- background-repeat: no-repeat;
-}
-
-html[dir="rtl"] .popup .results .avatar-container {
- margin-left: 12px;
- margin-right: 9px;
- float: right;
-}
-
-.popup .results img.avatar {
- max-width: 60px;
- max-height: 60px;
-}
-
-.popup .results .one-icon {
- height: 16px;
- width: 16px;
- margin: 10px 3px 0 8px;
- float: left;
-}
-
-html[dir="rtl"] .popup .results .one-icon {
- margin-left: 3px;
- margin-right: 8px;
- float: right;
-}
-
-.popup .results .one-icon.account,
-.popup .results .one-icon.auth {
- background-position: 0 -777px;
-}
-
-.popup .results .one-icon.automation,
-.popup .results .one-icon.client {
- background-position: 0 -1500px;
-}
-
-.popup .results .one-icon.collaboration {
- background-position: 0 -1520px;
-}
-
-.popup .results .one-icon.proxy,
-.popup .results .one-icon.server,
-.popup .results .one-icon.others {
- background-position: 0 -1540px;
-}
-
-.popup .results .one-icon.component,
-.popup .results .one-icon.gateway {
- background-position: 0 -1560px;
-}
-
-.popup .results .one-icon.conference {
- background-position: 0 -1082px;
-}
-
-.popup .results .one-icon.directory {
- background-position: 0 -876px;
-}
-
-.popup .results .one-icon.headline,
-.popup .results .one-icon.hierarchy {
- background-position: 0 -1580px;
-}
-
-.popup .results .one-icon.pubsub,
-.popup .results .one-icon.store {
- background-position: 0 -1600px;
-}
-
-.popup .results .one-icon.loading {
- background-position: 0 -1620px;
-}
-
-.popup .results .one-icon.down {
- background-position: 0 -1640px;
-}
-
-.popup .results .one-host {
- font-weight: bold;
- width: 170px;
-}
-
-html[dir="rtl"] .popup .results .one-host {
- float: right;
-}
-
-.popup .results .one-type {
- width: 210px;
-}
-
-.popup .results .one-type,
-.popup .results .one-host {
- float: left;
- overflow: hidden;
- margin: 9px 8px;
-}
-
-html[dir="rtl"] .popup .results .one-type,
-html[dir="rtl"] .popup .results .one-host {
- float: right;
-}
-
-.popup .results .one-jid,
-.popup .results .one-ctry,
-.popup .results .one-fn {
- margin: 4px;
- width: 400px;
-}
-
-html[dir="rtl"] .popup .results .one-jid,
-html[dir="rtl"] .popup .results .one-ctry,
-html[dir="rtl"] .popup .results .one-fn {
- float: right;
-}
-
-.popup .results .one-fn {
- font-weight: bold;
-}
-
-.popup .results .one-jid {
- margin-top: 8px;
- font-size: 0.9em;
-}
-
-.popup .results .one-name {
- float: left;
- margin: 4px;
-}
-
-html[dir="rtl"] .popup .results .one-name {
- float: right;
-}
-
-.popup a.one-button {
- display: none;
- background-color: #f1f6fd;
- border: 1px solid #b9cbcf;
- margin-top: 1px;
- padding: 4px 8px;
- text-decoration: none;
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
-}
-
-.popup a.one-button:hover,
-.popup a.one-button:focus {
- border: 1px solid #95b1b7;
-}
-
-.popup a.one-button:active {
- border: 1px solid #77989f;
-}
-
-.popup .results .oneresult:hover a.one-button {
- display: block;
-}
-
-.popup .results a.one-button,
-#inbox .one-message a.one-button {
- float: right;
- padding: 3px 6px;
- margin-right: 4px;
-}
-
-html[dir="rtl"] .popup .results a.one-button,
-html[dir="rtl"] #inbox .one-message a.one-button {
- float: left;
- margin-left: 4px;
- margin-right: auto;
-}
-
-.popup .results a.one-vjud {
- position: absolute;
- right: 4px;
-}
-
-html[dir="rtl"] .popup .results a.one-vjud {
- left: 4px;
- right: auto;
-}
-
-.popup .results a.one-add {
- top: 8px;
-}
-
-.popup .results a.one-chat,
-.popup .results a.one-profile {
- top: 42px;
-}
-
-.popup .results .one-next {
- float: right;
- margin: 4px 8px 4px 4px;
- font-weight: bold;
-}
-
-html[dir="rtl"] .popup .results .one-next {
- margin-right: 4px;
- margin-left: 8px;
- float: left;
-}
-
-.popup .results .one-actions {
- width: 148px;
- margin: 4px;
- float: left;
-}
-
-.popup .results .one-actions a {
- width: 16px;
- height: 16px;
- padding: 2px 2px 4px 5px !important;
- margin-top: 2px;
-}
-
-.popup .results .one-actions a.browse {
- background-position: 3px -1396px;
-}
-
-.popup .results .one-actions a.command {
- background-position: 3px -1415px;
-}
-
-.popup .results .one-actions a.subscribe {
- background-position: 4px -1435px;
-}
-
-.popup .results .one-actions a.join {
- background-position: 3px -1455px;
-}
-
-.popup .results .one-actions a.search {
- background-position: 4px -1475px;
-}
-
-.popup .results a.submit,
-.popup .results a.cancel,
-.popup .results a.back {
- margin-right: 8px;
- float: right;
-}
-
-.popup .onetitle {
- font-size: 0.9em;
- padding: 4px;
- font-weight: bold;
-}
-
-.popup .oneinstructions {
- font-size: 0.9em;
- padding: 4px;
- margin: 8px 0;
-}
-
-.popup .oneresult {
- font-size: 0.9em;
- padding: 3px 0 4px 4px;
- border-bottom: 1px #9dc4fc solid;
- overflow: hidden;
- position: relative;
-}
-
-.popup .oneresult:hover {
- background: #e9f1fd;
-}
-
-.popup .oneresult[onclick]:hover {
- cursor: pointer;
-}
-
-.popup .oneresult[onclick]:active {
- background: #f1f6fd;
-}
-
-.popup .infos {
- background-color: rgb(255,239,104);
- background-color: rgba(255,239,104,0.8);
- border: 1px #decb2f solid;
- color: #3f3f3f;
- padding: 8px;
- margin: 10px;
- font-size: 0.8em;
-}
-
-.popup .infos p {
- margin-top: 10px;
-}
-
-.popup .infos p.infos-title {
- font-weight: bold;
-}
-
-.popup .bottom {
- width: 640px;
- height: 40px;
- position: absolute;
- bottom: 8px;
-}
-
-.popup .wait {
- display: none;
- margin: 8px 0 0 3px;
- float: left;
-}
-
-a.finish,
-#suggest a.next {
- border: 1px solid white;
- background-color: rgb(255,255,255);
- background-color: rgba(255,255,255,0.1);
- color: white;
- padding: 4px 8px;
- margin-right: 7px;
- font-size: 0.95em;
- text-align: center;
- text-decoration: none;
- text-shadow: 0 1px 1px black;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
- -moz-box-shadow: 0 0 5px black;
- -webkit-box-shadow: 0 0 5px black;
- box-shadow: 0 0 5px black;
-}
-
-a.finish:hover,
-a.finish:focus,
-#suggest a.next:hover,
-#suggest a.next:focus {
- cursor: pointer;
- background-color: rgb(255,255,255);
- background-color: rgba(255,255,255,0.2);
- -moz-box-shadow: 0 0 15px black;
- -webkit-box-shadow: 0 0 15px black;
- box-shadow: 0 0 15px black;
-}
-
-a.finish:active,
-#suggest a.next:active {
- background-color: rgb(255,255,255);
- background-color: rgba(255,255,255,0.3);
-}
-
-a.finish.disabled,
-#suggest a.next.disabled {
- opacity: 0.2;
-}
-
-a.finish.disabled:hover,
-a.finish.disabled:focus,
-a.finish.disabled:active,
-#suggest a.next.disabled:hover,
-#suggest a.next.disabled:focus,
-#suggest a.next.disabled:active {
- cursor: default;
- background-color: rgb(255,255,255);
- background-color: rgba(255,255,255,0.1);
-}
-
-.popup a.finish {
- margin-top: 6px;
- float: right;
-}
diff --git a/app/stylesheets/privacy.css b/app/stylesheets/privacy.css
deleted file mode 100644
index 8de88c8e..00000000
--- a/app/stylesheets/privacy.css
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the privacy CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#privacy .content {
- padding: 10px 0 10px 0;
-}
-
-#privacy .privacy-head div.list-left,
-#privacy .privacy-head div.list-center,
-#privacy .privacy-head div.list-right,
-#privacy .privacy-first {
- float: left;
-}
-
-html[dir="rtl"] #privacy .privacy-head div.list-left,
-html[dir="rtl"] #privacy .privacy-head div.list-center,
-html[dir="rtl"] #privacy .privacy-head div.list-right {
- float: right;
-}
-
-#privacy .privacy-head div.list-left {
- margin-left: 5px;
-}
-
-#privacy .privacy-head div.list-center {
- border-right: 1px dotted #1b393f;
- height: 24px;
- width: 1px;
- margin-right: 15px;
- padding-left: 18px;
-}
-
-#privacy .privacy-head span,
-#privacy .privacy-head a,
-#privacy .privacy-item span,
-#privacy .privacy-item a {
- float: left;
-}
-
-#privacy .privacy-head span {
- font-size: 0.9em;
- font-weight: bold;
- margin: 3px 10px 0 0;
-}
-
-html[dir="rtl"] #privacy .privacy-head span {
- margin-right: auto;
- margin-left: 10px;
- float: right;
-}
-
-#privacy .privacy-head input,
-#privacy .privacy-head select {
- width: 180px;
-}
-
-#privacy .privacy-head input {
- margin-top: 1px;
-}
-
-#privacy .privacy-head select {
- margin-bottom: 0;
- margin-top: 2px;
-}
-
-html[dir="rtl"] #privacy .privacy-head select {
- margin-right: 0;
- margin-left: 10px;
-}
-
-#privacy .privacy-item select {
- margin-top: -2px;
-}
-
-#privacy .privacy-head span.left-space {
- margin-left: 16px;
-}
-
-#privacy .privacy-head a,
-#privacy .privacy-item a {
- width: 20px;
- height: 20px;
- padding: 0;
- display: block;
-}
-
-#privacy .privacy-item a.item-add {
- background-position: 2px -1178px;
-}
-
-#privacy .privacy-head a.list-remove,
-#privacy .privacy-item a.item-remove {
- background-position: 2px -1197px;
-}
-
-#privacy .privacy-item a.item-save {
- background-position: 3px -126px;
- width: auto;
- height: 19px;
- padding: 1px 7px 0 21px;
-}
-
-#privacy .privacy-item,
-#privacy form,
-#privacy .privacy-active {
- clear: both;
-}
-
-#privacy .privacy-item {
- margin: 17px 12px;
- font-size: 0.9em;
-}
-
-#privacy .privacy-item span {
- font-weight: bold;
-}
-
-html[dir="rtl"] #privacy .privacy-item span {
- margin-top: -5px;
- float: right;
-}
-
-#privacy .privacy-item select {
- width: 300px;
- margin: -4px 30px 0 10px;
-}
-
-html[dir="rtl"] #privacy .privacy-item select {
- margin-right: 10px;
- margin-left: 30px;
-}
-
-#privacy .privacy-item a {
- margin: -2px 6px 0 0;
-}
-
-html[dir="rtl"] #privacy .privacy-form input {
- margin-right: auto;
- margin-left: 10px;
-}
-
-#privacy .privacy-first,
-#privacy .privacy-second,
-#privacy .privacy-third {
- height: 195px;
- font-size: 0.9em;
- margin: 10px 0 0 10px;
- float: left;
-}
-
-html[dir="rtl"] #privacy .privacy-first,
-html[dir="rtl"] #privacy .privacy-second,
-html[dir="rtl"] #privacy .privacy-third {
- margin-right: 10px;
- margin-left: auto;
- float: right;
-}
-
-#privacy .privacy-first,
-#privacy .privacy-second {
- border-width: 0 1px 0 0;
- border-style: dotted;
- border-color: #1b393f;
- padding-right: 14px;
-}
-
-html[dir="rtl"] #privacy .privacy-first,
-html[dir="rtl"] #privacy .privacy-second {
- border-width: 0 0 0 1px;
-}
-
-#privacy .privacy-first {
- width: 125px;
-}
-
-#privacy .privacy-first label {
- margin: 50px 0 0 15px;
-}
-
-#privacy .privacy-first label input {
- margin-top: 2px;
-}
-
-#privacy .privacy-second {
- width: 205px;
-}
-
-#privacy .privacy-second label {
- margin: 2px 0 0 12px;
-}
-
-#privacy .privacy-second input[type="radio"],
-#privacy .privacy-third input[type="checkbox"] {
- margin-top: 2px;
- margin-bottom: 2px;
-}
-
-#privacy .privacy-second input[type="text"],
-#privacy .privacy-second select {
- width: 170px;
- margin: 2px 0 11px 12px;
- float: none;
-}
-
-#privacy .privacy-third label {
- width: auto;
- margin-top: 11px;
-}
-
-#privacy .privacy-third {
- width: 240px;
-}
-
-#privacy .privacy-active {
- margin: 34px 16px 0 16px;
- font-size: 0.9em;
-}
-
-#privacy .privacy-active-elements {
- float: right;
-}
-
-html[dir="rtl"] #privacy .privacy-active-elements {
- float: left;
-}
-
-#privacy .privacy-active input[type="text"] {
- width: 30px;
- margin: 0 0 0 8px;
- float: none;
-}
-
-html[dir="rtl"] #privacy .privacy-active input[type="text"] {
- margin-left: auto;
- margin-right: 8px;
-}
-
-#privacy .privacy-active input[type="checkbox"] {
- margin: 3px 5px 0 0;
- float: left;
-}
-
-html[dir="rtl"] #privacy .privacy-active input[type="checkbox"] {
- margin-left: 5px;
- margin-right: 14px;
- float: right;
-}
-
-#privacy .privacy-active label {
- width: auto;
- margin: 0 15px 0 0;
- clear: none;
-}
-
-html[dir="rtl"] #privacy .privacy-active label {
- margin-right: 0;
-} \ No newline at end of file
diff --git a/app/stylesheets/roster.css b/app/stylesheets/roster.css
deleted file mode 100644
index 7bd943fa..00000000
--- a/app/stylesheets/roster.css
+++ /dev/null
@@ -1,645 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the roster CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#roster {
- background-color: rgb(20,20,20);
- background-color: rgba(20,20,20,0.85);
- color: #919191;
- padding: 15px 6px 4px 6px;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
- -moz-box-shadow: 0 0 6px #5c5c5c;
- -webkit-box-shadow: 0 0 6px #5c5c5c;
- box-shadow: 0 0 6px #5c5c5c;
-}
-
-#roster .content {
- background: #e8f1f3;
- background: -moz-linear-gradient(top, #e8f1f3, #e4edef);
- background: -webkit-gradient(linear, left top, left bottom, from(#e8f1f3), to(#e4edef));
- background: -webkit-linear-gradient(top, #e8f1f3 0%, #e4edef 100%);
- background: -o-linear-gradient(top, #e8f1f3 0%, #e4edef 100%);
- color: #666666;
- height: 207px;
- padding: 4px 4px 0 4px;
- overflow-x: hidden;
- overflow-y: auto;
- -moz-border-radius-topleft: 3px;
- -moz-border-radius-topright: 3px;
- -webkit-border-top-left-radius: 3px;
- -webkit-border-top-right-radius: 3px;
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-}
-
-#roster .one-group {
- margin-bottom: 10px;
-}
-
-#roster .one-group a.group {
- color: #202c2f;
- font-size: 0.8em;
- margin: 3px 6px;
- padding-left: 12px;
- max-height: 15px;
- text-decoration: none;
- overflow: hidden;
- display: block;
-}
-
-html[dir="rtl"] #roster .one-group a.group {
- float: right;
-}
-
-#roster .one-group a.group.plus {
- background-position: -4px -1143px;
-}
-
-#roster .one-group a.group.minus {
- background-position: -4px -1162px;
-}
-
-#roster .one-group a.group:hover {
- cursor: pointer;
-}
-
-#roster .hidden-buddy,
-#roster .foot-edit-finish,
-.buddy-conf-more-display-available {
- display: none;
-}
-
-#roster .group-buddy {
- clear: both;
-}
-
-#roster .buddy {
- width: 100%;
- height: 50px;
- margin-bottom: 4px;
- clear: both;
-}
-
-#roster .buddy-click {
- background: #d9e7ea;
- width: 100%;
- height: 100%;
- overflow: hidden;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
-}
-
-#roster .buddy-click:hover,
-#roster .buddy-click:focus {
- background: #cedee1;
- cursor: pointer;
-}
-
-#roster .buddy-click:active {
- background: #c3d3d7;
-}
-
-#roster .gateway {
- height: 27px;
-}
-
-#roster .gateway .name {
- margin-left: 0;
-}
-
-#roster .gateway .buddy-presence {
- float: left;
- overflow: hidden;
- width: 0;
- margin: 0 4px;
-}
-
-#roster .avatar-container {
- float: left;
- text-align: center;
- margin: 3px;
- width: 46px;
- height: 46px;
-}
-
-html[dir="rtl"] #roster .avatar-container {
- float: right;
-}
-
-#roster .avatar {
- max-width: 44px;
- max-height: 44px;
-}
-
-#roster .name {
- margin: 4px 3px 5px 56px;
-}
-
-html[dir="rtl"] #roster .name {
- margin-left: auto;
- float: right;
-}
-
-#roster .buddy-name {
- height: 17px;
- font-weight: bold;
- font-size: 0.85em;
- color: #264249;
- margin: 5px 0 5px 2px;
- overflow: hidden;
-}
-
-#roster .buddy.blocked p.buddy-name {
- text-decoration: line-through;
-}
-
-#roster .buddy-presence {
- height: 14px;
- font-size: 0.7em;
- color: #3a585e;
- padding: 2px 0 0 16px;
- margin-top: -3px;
-}
-
-html[dir="rtl"] #roster .buddy-presence {
- float: right;
-}
-
-#roster .unavailable,
-#page-switch .unavailable,
-#page-engine p.bc-infos span.show.unavailable {
- background-position: 0 -153px;
-}
-
-#roster .available,
-#page-engine p.bc-infos span.show.available,
-#page-engine .list .available,
-#page-engine .list .chat,
-#page-switch .available,
-#my-infos .f-presence a[data-value="available"] span {
- background-position: 0 -169px;
-}
-
-#roster .away,
-#page-engine p.bc-infos span.show.away,
-#page-engine .list .away,
-#page-switch .away,
-#my-infos .f-presence a[data-value="away"] span {
- background-position: 0 -185px;
-}
-
-#roster .busy,
-#page-engine p.bc-infos span.show.busy,
-#page-engine .list .xa,
-#page-engine .list .dnd,
-#page-switch .busy,
-#my-infos .f-presence a[data-value="xa"] span {
- background-position: 0 -201px;
-}
-
-#roster .error,
-#page-switch .error,
-#page-engine p.bc-infos span.show.error {
- background-position: 0 -217px;
-}
-
-#roster .buddy-infos {
- position: absolute;
- z-index: 100;
- width: 337px;
- color: white;
- font-size: 0.8em;
-}
-
-.buddy-infos-subarrow {
- background-position: 0 -241px;
- opacity: 0.8;
- width: 9px;
- height: 20px;
- margin-top: 12px;
- float: left;
-}
-
-html[dir="rtl"] .buddy-infos-subarrow {
- background-position: -10px -241px;
- float: right;
-}
-
-.buddy-infos-subitem {
- background-color: rgb(0,0,0);
- background-color: rgba(0,0,0,0.8);
- padding: 8px 10px;
- width: 308px;
- text-shadow: 0 1px 1px black;
- float: left;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
- border-radius: 5px;
-}
-
-html[dir="rtl"] .buddy-infos-subitem {
- float: right;
-}
-
-.manage-infos p.bm-authorize,
-#rosterx .oneresult span.action.add {
- background-position: 0 -1181px;
-}
-
-.manage-infos p.bm-remove,
-#rosterx .oneresult span.action.delete,
-#attach div.one-file a.remove {
- background-position: 0 -1200px;
-}
-
-.manage-infos p.bm-remove {
- margin-bottom: 18px;
-}
-
-.manage-infos p.bm-rename {
- background-position: 0 -1216px;
-}
-
-.manage-infos p.bm-group {
- background-position: 0 -1241px;
-}
-
-.manage-infos div.bm-choose {
- max-height: 95px;
- margin: 0 0 8px 102px;
- overflow: auto;
-}
-
-.manage-infos div.bm-choose label {
- float: left;
- clear: both;
- margin-bottom: 1px;
-}
-
-.manage-infos div.bm-choose input {
- float: left;
-}
-
-.manage-infos div.bm-choose input[type="checkbox"] {
- margin: 0 6px 0 0;
-}
-
-.manage-infos div.bm-choose div {
- clear: both;
-}
-
-.manage-infos p.bm-rename,
-.manage-infos p.bm-group {
- height: 26px;
-}
-
-.manage-infos p.bm-rename label,
-.manage-infos p.bm-group label {
- width: 80px;
- padding-top: 3px;
- float: left;
-}
-
-html[dir="rtl"] .manage-infos p.bm-rename label,
-html[dir="rtl"] .manage-infos p.bm-group label {
- float: right;
-}
-
-.manage-infos p.bm-rename input,
-.manage-infos p.bm-group input {
- float: left;
- width: 155px;
-}
-
-html[dir="rtl"] .manage-infos p.bm-rename input,
-html[dir="rtl"] .manage-infos p.bm-group input {
- float: right;
-}
-
-.manage-infos a.save {
- float: right;
- margin: 4px;
-}
-
-.buddy-infos-subitem p {
- margin: 6px 0;
- padding-left: 22px;
- height: 16px;
- overflow: hidden;
-}
-
-.buddy-infos-subitem a {
- color: white;
- text-decoration: underline;
-}
-
-.tune-note {
- background-position: 0 -676px;
-}
-
-.location-world {
- background-position: 0 -658px;
-}
-
-.call-jingle {
- background-position: 1px -2047px;
-}
-
-body.in_jingle_call .call-jingle,
-body.in_muji_call .call-jingle,
-body.in_jingle_call .roster-muji,
-body.in_muji_call .roster-muji {
- opacity: 0.35;
-}
-
-.call-jingle,
-.call-jingle a.audio,
-.call-jingle a.video,
-.call-jingle span.separator {
- display: none;
-}
-
-body.in_jingle_call .call-jingle a,
-body.in_muji_call .call-jingle a,
-body.in_jingle_call .roster-muji a,
-body.in_muji_call .roster-muji a {
- cursor: default;
-}
-
-.view-individual {
- background-position: 0 -34px;
-}
-
-.edit-buddy {
- background-position: 0 -1008px;
-}
-
-#roster .filter {
- background-color: white;
- border-top: 1px solid #b8c2c4;
- height: 15px;
- padding: 2px 4px;
- font-size: 0.8em;
- -moz-border-radius-bottomleft: 3px;
- -moz-border-radius-bottomright: 3px;
- -webkit-border-bottom-left-radius: 3px;
- -webkit-border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
- border-bottom-right-radius: 3px;
-}
-
-#roster .filter input {
- border: none;
- color: #273a3f;
- width: 211px;
- padding: 0;
- -moz-box-shadow: none;
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-
-#roster .filter a {
- display: none;
- background-color: #9a2d2d;
- color: white;
- height: 13px;
- width: 13px;
- margin-top: 1px;
- font-size: 0.8em;
- text-align: center;
- text-decoration: none;
- float: right;
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
-}
-
-html[dir="rtl"] #roster .filter a {
- float: left;
-}
-
-#roster .filter a:hover,
-#roster .filter a:focus {
- background-color: #8c2121;
-}
-
-#roster .filter a:active {
- background-color: #7e1919;
-}
-
-#roster .foot {
- padding: 9px 1px 3px;
-}
-
-#roster .roster-icon {
- height: 16px;
- width: 16px;
- margin: -3px 5px 0 0;
- float: left;
- position: relative;
-}
-
-html[dir="rtl"] #roster .roster-icon {
- margin-right: 0;
- margin-left: 5px;
- float: right;
-}
-
-#roster .roster-icon a.talk-images {
- height: 16px;
- width: 16px;
- display: block;
-}
-
-#roster .add,
-#page-engine .text .tools-add {
- background-position: 0 -1047px;
-}
-
-#roster .join {
- background-position: 0 -1065px;
-}
-
-#roster .groupchat,
-#page-switch .groupchat-default {
- background-position: 0 -1082px;
-}
-
-#roster .muji {
- background-position: 0 -2047px;
-}
-
-#roster .more {
- background-position: 0 -1100px;
-}
-
-#roster .foot-edit-finish a {
- color: white;
- font-size: 0.8em;
- margin: -3px 4px 0 0;
- float: right;
- display: block;
-}
-
-#roster .foot-edit-finish a:hover,
-#roster .foot-edit-finish a:focus {
- text-decoration: underline;
- cursor: pointer;
-}
-
-.buddy-conf-item {
- position: absolute;
- left: -10px;
- width: 263px;
- color: white;
- z-index: 9998;
- font-size: 0.8em;
-}
-
-html[dir="rtl"] .buddy-conf-item {
- left: auto;
- right: -10px;
-}
-
-.buddy-conf-item:hover {
- cursor: default;
-}
-
-.buddy-conf-subarrow {
- background-position: 0 -241px;
- opacity: 0.8;
- height: 10px;
- width: 18px;
- margin-left: 9px;
- float: left;
-}
-
-html[dir="rtl"] .buddy-conf-subarrow {
- margin-left: auto;
- margin-right: 9px;
- float: right;
-}
-
-.buddy-conf-muji .buddy-conf-subarrow {
- margin-left: 8px;
-}
-
-html[dir="rtl"] .buddy-conf-muji .buddy-conf-subarrow {
- margin-right: 8px;
-}
-
-.buddy-conf-subitem {
- background-color: rgb(0,0,0);
- background-color: rgba(0,0,0,0.8);
- margin-top: 10px;
- padding: 10px;
- text-shadow: 0 1px 1px black;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
- border-radius: 5px;
-}
-
-.buddy-conf-p {
- margin-bottom: 4px;
- width: 220px;
- font-weight: bold;
- float: left;
-}
-
-html[dir="rtl"] .buddy-conf-p {
- float: right;
-}
-
-.buddy-conf-input {
- padding-top: 2px;
-}
-
-.buddy-conf-text {
- font-size: 11px;
- clear: both;
- margin-bottom: 3px;
-}
-
-.buddy-conf-text a {
- color: white;
-}
-
-.buddy-conf-text a:hover,
-.buddy-conf-text a:focus {
- cursor: pointer;
- text-decoration: underline;
-}
-
-.buddy-conf-text a.buddy-conf-add-search {
- text-decoration: underline;
- margin-top: 6px;
- display: block;
-}
-
-.buddy-conf-select {
- font-size: 1.1em;
- clear: both;
- margin-bottom: 8px;
- width: 180px;
- height: 23px;
-}
-
-.join-jid {
- width: 220px;
- margin-top: 5px;
-}
-
-.add-contact-jid,
-.add-contact-name,
-.add-contact-gateway {
- width: 156px;
- margin-bottom: 4px;
-}
-
-.add-contact-name-get {
- font-size: 0.8em;
- display: none;
-}
-
-.buddy-conf-subitem label {
- clear: both;
-}
-
-.buddy-conf-subitem label span {
- width: 76px;
- height: 14px;
- margin-top: 3px;
- overflow: hidden;
- float: left;
-}
-
-html[dir="rtl"] .buddy-conf-subitem label span {
- float: right;
-}
-
-#buddy-conf-join ul {
- width: 224px;
- max-height: 160px;
- left: 10px;
- top: 50px;
-}
-
-html[dir="rtl"] #buddy-conf-join ul {
- left: auto;
- right: 10px;
-}
-
-.buddy-conf-join-select {
- margin: 8px 0 0 0;
-}
diff --git a/app/stylesheets/rosterx.css b/app/stylesheets/rosterx.css
deleted file mode 100644
index 26cce540..00000000
--- a/app/stylesheets/rosterx.css
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the Roster Item Exchange tool CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#rosterx .content {
- padding: 10px 0 10px 0;
-}
-
-#rosterx .rosterx-head a {
- font-size: 0.9em;
- margin: 3px 4px;
- float: left;
-}
-
-html[dir="rtl"] #rosterx .rosterx-head a {
- float: right;
-}
-
-#rosterx .oneresult:hover {
- cursor: pointer;
-}
-
-#rosterx .oneresult span {
- margin: 4px 5px 0 5px;
- overflow: hidden;
- float: left;
-}
-
-html[dir="rtl"] #rosterx .oneresult span {
- float: right;
-}
-
-#rosterx .oneresult span.name {
- width: 230px;
- font-weight: bold;
-}
-
-#rosterx .oneresult span.xid {
- width: 270px;
- font-size: 0.9em;
-}
-
-#rosterx .oneresult span.action {
- width: 16px;
- height: 16px;
- margin-top: 4px;
- float: right;
-}
-
-html[dir="rtl"] #rosterx .oneresult span.action {
- float: left;
-}
-
-#rosterx .oneresult span.action.modify {
- background-position: 0 -1244px;
-}
-
-html[dir="rtl"] #rosterx .oneresult input {
- margin-right: 10px;
- margin-left: 10px;
-} \ No newline at end of file
diff --git a/app/stylesheets/search.css b/app/stylesheets/search.css
deleted file mode 100644
index 497f5222..00000000
--- a/app/stylesheets/search.css
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the search tool CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-.search {
- position: relative;
-}
-
-.search input.suggested {
- border-bottom: 1px solid white;
- -moz-border-radius-bottomright: 0;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-right-radius: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-.search ul {
- background-color: rgb(255,255,255);
- background-color: rgba(255,255,255,0.9);
- border-color: #e1a014;
- border-style: solid;
- border-width: 0 1px 1px 1px;
- position: absolute;
- z-index: 1;
- padding: 3px 0;
- list-style: none;
- overflow: auto;
- -moz-border-radius-bottomright: 3px;
- -moz-border-radius-bottomleft: 3px;
- -webkit-border-bottom-right-radius: 3px;
- -webkit-border-bottom-left-radius: 3px;
- border-bottom-right-radius: 3px;
- border-bottom-left-radius: 3px;
-}
-
-.search ul li {
- padding: 2px 6px;
- color: #3d3d3d;
- text-shadow: none;
-}
-
-.search ul li:hover {
- cursor: pointer;
-}
-
-.search ul li.hovered {
- background-color: rgb(225,160,20);
- background-color: rgba(225,160,20,0.3);
-}
diff --git a/app/stylesheets/smileys.css b/app/stylesheets/smileys.css
deleted file mode 100644
index 7dd32504..00000000
--- a/app/stylesheets/smileys.css
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the smileys CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-.emoticon {
- width: 16px;
- height: 16px;
-}
-
-a.emoticon {
- margin: 2px;
- float: left;
-}
-
-a.emoticon:hover,
-a.emoticon:focus {
- opacity: 0.8;
-}
-
-a.emoticon:active {
- opacity: 0.7;
-}
-
-img.emoticon {
- border: 0 none;
- vertical-align: bottom;
-}
-
-.emoticon-biggrin {
- background-position: 0 0;
-}
-
-.emoticon-devil {
- background-position: -16px 0;
-}
-
-.emoticon-coolglasses {
- background-position: -32px 0;
-}
-
-.emoticon-tongue {
- background-position: -48px 0;
-}
-
-.emoticon-smile {
- background-position: -64px 0;
-}
-
-.emoticon-wink {
- background-position: -80px 0;
-}
-
-.emoticon-blush {
- background-position: -96px 0;
-}
-
-.emoticon-stare {
- background-position: -112px 0;
-}
-
-.emoticon-frowning {
- background-position: -128px 0;
-}
-
-.emoticon-oh {
- background-position: -144px 0;
-}
-
-.emoticon-unhappy {
- background-position: -160px 0;
-}
-
-.emoticon-cry {
- background-position: -176px 0;
-}
-
-.emoticon-angry {
- background-position: -192px 0;
-}
-
-.emoticon-puke {
- background-position: -208px 0;
-}
-
-.emoticon-hugright {
- background-position: -224px 0;
-}
-
-.emoticon-hugleft {
- background-position: -240px 0;
-}
-
-.emoticon-lion {
- background-position: -256px 0;
-}
-
-.emoticon-pussy {
- background-position: -272px 0;
-}
-
-.emoticon-bat {
- background-position: -288px 0;
-}
-
-.emoticon-kiss {
- background-position: -304px 0;
-}
-
-.emoticon-heart {
- background-position: -320px 0;
-}
-
-.emoticon-brheart {
- background-position: -336px 0;
-}
-
-.emoticon-flower {
- background-position: -352px 0;
-}
-
-.emoticon-brflower {
- background-position: -368px 0;
-}
-
-.emoticon-thumbup {
- background-position: -384px 0;
-}
-
-.emoticon-thumbdown {
- background-position: -400px 0;
-}
-
-.emoticon-lamp {
- background-position: -416px 0;
-}
-
-.emoticon-coffee {
- background-position: -432px 0;
-}
-
-.emoticon-drink {
- background-position: -448px 0;
-}
-
-.emoticon-beer {
- background-position: -464px 0;
-}
-
-.emoticon-boy {
- background-position: -480px 0;
-}
-
-.emoticon-girl {
- background-position: -496px 0;
-}
-
-.emoticon-phone {
- background-position: -512px 0;
-}
-
-.emoticon-photo {
- background-position: -528px 0;
-}
-
-.emoticon-music {
- background-position: -544px 0;
-}
-
-.emoticon-cuffs {
- background-position: -560px 0;
-}
-
-.emoticon-mail {
- background-position: -576px 0;
-}
-
-.emoticon-rainbow {
- background-position: -592px 0;
-}
-
-.emoticon-star {
- background-position: -608px 0;
-}
-
-.emoticon-moon {
- background-position: -624px 0;
-}
diff --git a/app/stylesheets/stats-svg.css b/app/stylesheets/stats-svg.css
deleted file mode 100644
index ce4571ac..00000000
--- a/app/stylesheets/stats-svg.css
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the SVG stats CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Erwan Briand, Valérian Saliou
-
-*/
-
-svg {
- background-color: #e8f1f3;
-}
-
-.refline {
- stroke: #596171;
- stroke-width: 2px;
-}
-
-.refleft {
- fill: #000000;
- font-family: "Inconsolata", "DejaVu Serif sans", Verdana, sans-serif;
- font-size: 8px;
-}
-
-.reftext {
- fill: #586070;
- font-family: "Inconsolata", "DejaVu Serif sans", Verdana, sans-serif;
- font-size: 10px;
-}
-
-.bubbletextblue,
-.bubbletextred {
- fill: none;
- font-family: "Inconsolata", "DejaVu Serif sans", Verdana, sans-serif;
- font-size: 8px;
- text-anchor: end;
-}
-
-.bluebar {
- fill: "#6C84C0";
- fill-opacity: "0.6";
-}
-
-.gbar:hover .bluebar {
- fill: #2A3F73;
-}
-
-.gbar:hover .redbar {
- fill: #C70705;
-}
-
-.gbar:hover #bubble {
- fill: white;
- stroke: grey;
-}
-
-.gbar:hover .bubbletextblue {
- fill: #2A3F73;
-}
-
-.gbar:hover .bubbletextred {
- fill: #C70705;
-}
-
-.gbar:hover .reftext {
- fill: #000000;
-}
diff --git a/app/stylesheets/tools.css b/app/stylesheets/tools.css
deleted file mode 100644
index 3411faea..00000000
--- a/app/stylesheets/tools.css
+++ /dev/null
@@ -1,736 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the tools CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#top-content .tools {
- background-color: rgb(232,241,243);
- background-color: rgba(232,241,243,0.6);
- padding: 3px 8px 5px 8px;
- min-width: 10px;
- height: 17px;
- -moz-border-radius-bottomleft: 4px;
- -moz-border-radius-bottomright: 4px;
- -webkit-border-bottom-left-radius: 4px;
- -webkit-border-bottom-right-radius: 4px;
- border-bottom-left-radius: 4px;
- border-bottom-right-radius: 4px;
-}
-
-#top-content .tools a {
- color: black;
- padding: 0 3px;
- margin: 0 1.5px;
-}
-
-#top-content .tools a:hover,
-#top-content .tools a:focus {
- cursor: pointer;
- text-decoration: underline;
-}
-
-#top-content .tools-logo {
- background-position: 9px 2px;
- width: 74px;
- float: left;
-}
-
-html[dir="rtl"] #top-content .tools-logo {
- float: right;
-}
-
-#top-content .tools-all {
- float: right;
- text-align: right;
- margin-left: 8px;
- font-size: 0.9em;
- color: black;
- position: relative;
-}
-
-html[dir="rtl"] #top-content .tools-all {
- margin-left: 0;
- margin-right: 8px;
- float: left;
-}
-
-#top-content .call {
- background-position: 7px -2114px;
- display: none;
-}
-
-#top-content .call .notify {
- margin-left: 0;
- left: -2px;
-}
-
-#top-content .call.video {
- background-position: 7px -2205px;
-}
-
-#top-content .call.active,
-#top-content .call.streaming {
- display: block;
-}
-
-#top-content .call.active {
- -webkit-animation: tool_active 1.5s infinite ease-in-out;
- -moz-animation: tool_active 1.5s infinite ease-in-out;
- -o-animation: tool_active 1.5s infinite ease-in-out;
- animation: tool_active 1.5s infinite ease-in-out;
-}
-
-#top-content .call.streaming {
- padding-left: 30px;
-}
-
-#top-content .call .streaming-items {
- display: none;
-}
-
-#top-content .call.streaming .streaming-items {
- display: block;
-}
-
-#top-content .call.streaming .streaming-items .counter {
- font-size: 11px;
- font-style: italic;
- font-weight: bold;
-}
-
-#top-content .call.streaming .streaming-items a.stop {
- background: #cc283f;
- border-left: 1px solid #a12032;
- color: #ffffff;
- font-size: 10px;
- text-shadow: 0 1px 1px #521019;
- text-transform: uppercase;
- text-decoration: none;
- margin: -3px -8px 0 8px;
- padding: 5px 6px 7px 6px;
- float: right;
- -moz-border-radius-bottomright: 4px;
- -webkit-border-bottom-right-radius: 4px;
- border-bottom-right-radius: 4px;
-}
-
-#top-content .call.streaming .streaming-items a.stop:active {
- background: #a92134;
- padding-top: 6px;
- padding-bottom: 6px;
- -webkit-box-shadow: 0 1px 3px #000000 inset;
- -moz-box-shadow: 0 1px 3px #000000 inset;
- box-shadow: 0 1px 3px #000000 inset;
-}
-
-#top-content .notifications {
- background-position: 7px -1264px;
-}
-
-#top-content .music {
- background-position: 6px -1286px;
-}
-
-#top-content .notifications:hover,
-#top-content .music:hover,
-#top-content .call.streaming.video:hover,
-.in_muji_call #top-content .call.streaming.audio:hover {
- cursor: pointer;
-}
-
-#top-content .music:hover,
-#top-content .notifications:hover,
-#top-content .call.streaming.video:hover,
-.in_muji_call #top-content .call.streaming.audio:hover,
-#top-content .music:focus,
-#top-content .notifications:focus,
-#top-content .call.streaming.video:focus,
-.in_muji_call #top-content .call.streaming.audio:focus {
- background-color: rgb(232,241,243);
- background-color: rgba(232,241,243,0.7);
-}
-
-#top-content .music:active,
-#top-content .notifications:active,
-#top-content .call.streaming.video:active,
-.in_muji_call #top-content .call.streaming.audio:active {
- background-color: rgb(232,241,243);
- background-color: rgba(232,241,243,0.8);
-}
-
-#top-content .actived,
-#top-content .actived:hover,
-#top-content .actived:focus,
-#top-content .actived:active {
- background-color: rgb(232,241,243) !important;
- background-color: rgba(232,241,243,0.9) !important;
-}
-
-#top-content .notify {
- background-color: #c60505;
- color: white;
- font-size: 0.7em;
- font-weight: bold;
- margin-left: -10px;
- padding: 1px 4px;
- position: absolute;
- bottom: -2px;
- -moz-border-radius: 10px;
- -webkit-border-radius: 10px;
- border-radius: 10px;
-}
-
-html[dir="rtl"] #top-content .notify {
- margin-left: auto;
- margin-right: -10px;
-}
-
-#top-content .tools-content {
- display: none;
- position: absolute;
- top: 25px;
-}
-
-html[dir="rtl"] #top-content .tools-content {
- margin-left: 0;
- right: auto;
-}
-
-.tools-content-subarrow {
- background-position: 0 -241px;
- opacity: 0.8;
- height: 10px;
- width: 18px;
- margin: 0 auto;
- display: block;
-}
-
-.tools-content-subitem {
- background-color: rgb(0,0,0);
- background-color: rgba(0,0,0,0.8);
- padding: 14px 6px 6px 6px;
- clear: both;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
- border-radius: 5px;
-}
-
-.notifications-content {
- width: 240px;
- right: -107px;
-}
-
-html[dir="rtl"] .notifications-content {
- left: -107px;
-}
-
-.notifications-content .tools-content-subitem {
- max-height: 250px;
- color: white;
- text-shadow: 0 1px 1px black;
- text-align: left;
- overflow-x: none;
- overflow-y: auto;
-}
-
-html[dir="rtl"] .notifications-content .tools-content-subitem {
- text-align: right;
-}
-
-.notifications-content .empty {
- color: white;
- font-size: 0.9em;
- text-decoration: underline;
- margin: -8px 4px 2px 0;
- display: none;
- float: right;
-}
-
-.notifications-content .nothing {
- font-size: 0.9em;
- margin: 5px;
-}
-
-.notifications-content .one-notification {
- padding: 6px 4px;
- font-size: 0.85em;
- clear: both;
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
-}
-
-.notifications-content .one-notification:hover,
-.notifications-content .one-notification:focus {
- background-color: rgb(255,255,255);
- background-color: rgba(255,255,255,0.1);
-}
-
-.notifications-content .one-notification:active {
- background-color: rgb(255,255,255);
- background-color: rgba(255,255,255,0.2);
-}
-
-.notifications-content .avatar-container {
- float: left;
- width: 40px;
- height: 40px;
- margin: 0 8px 8px 0;
- text-align: center;
- background-repeat: no-repeat;
-}
-
-html[dir="rtl"] .notifications-content .avatar-container {
- float: right;
- margin-right: auto;
- margin-left: 8px;
-}
-
-.notifications-content .avatar {
- max-width: 40px;
- max-height: 40px;
-}
-
-.notifications-content .notification-text,
-.notifications-content .notification-actions {
- margin-left: 48px;
- overflow: hidden;
-}
-
-html[dir="rtl"] .notifications-content .notification-text,
-html[dir="rtl"] .notifications-content .notification-actions {
- margin-left: auto;
-}
-
-.notifications-content .notification-actions {
- margin-top: 3px;
-}
-
-.notifications-content .notification-actions a {
- color: white;
- font-weight: bold;
- font-size: 0.9em;
- text-decoration: underline;
- margin-right: 8px;
-}
-
-.notifications-content .one-notification .notification-actions span.talk-images {
- background-position: 0 -1828px;
- width: 16px;
- height: 16px;
- margin: -1px 6px 0 0;
- float: left;
-}
-
-html[dir="rtl"] .notifications-content .one-notification .notification-actions span.talk-images {
- margin-right: auto;
- margin-left: 6px;
- float: right;
-}
-
-.notifications-content .one-notification[data-type="subscribe"] .notification-actions span.talk-images {
- background-position: 0 -1796px;
-}
-
-.notifications-content .one-notification[data-type="invite_room"] .notification-actions span.talk-images {
- background-position: 0 -1812px;
-}
-
-.notifications-content .one-notification[data-type="send"] .notification-actions span.talk-images,
-.notifications-content .one-notification[data-type="send_accept"] .notification-actions span.talk-images,
-.notifications-content .one-notification[data-type="send_reject"] .notification-actions span.talk-images,
-.notifications-content .one-notification[data-type="send_fail"] .notification-actions span.talk-images {
- background-position: 0 -1956px;
-}
-
-.notifications-content .one-notification[data-type="rosterx"] .notification-actions span.talk-images {
- background-position: 0 -1844px;
-}
-
-.notifications-content .one-notification[data-type="comment"] .notification-actions span.talk-images {
- background-position: 0 -1860px;
-}
-
-.notifications-content .one-notification[data-type="like"] .notification-actions span.talk-images {
- background-position: 0 -1876px;
-}
-
-.notifications-content .one-notification[data-type="quote"] .notification-actions span.talk-images {
- background-position: 0 -1892px;
-}
-
-.notifications-content .one-notification[data-type="wall"] .notification-actions span.talk-images {
- background-position: 0 -1908px;
-}
-
-.notifications-content .one-notification[data-type="photo"] .notification-actions span.talk-images {
- background-position: 0 -1924px;
-}
-
-.notifications-content .one-notification[data-type="video"] .notification-actions span.talk-images {
- background-position: 0 -1940px;
-}
-
-.notifications-content .one-notification[data-type="me_profile_new_success"] .notification-actions span.talk-images,
-.notifications-content .one-notification[data-type="me_profile_remove_success"] .notification-actions span.talk-images,
-.notifications-content .one-notification[data-type="me_profile_update_success"] .notification-actions span.talk-images {
- background-position: 0 -1660px;
-}
-
-.notifications-content .one-notification[data-type="me_profile_check_error"] .notification-actions span.talk-images {
- background-position: 0 -1640px;
-}
-
-.music-content {
- width: 220px;
- right: -97px;
-}
-
-html[dir="rtl"] .music-content {
- left: -97px;
-}
-
-.music-content .tools-content-subitem {
- height: 247px;
-}
-
-.music-content .player {
- background: #b5d5db;
- background: -moz-linear-gradient(top, #b5d5db, #adced4);
- background: -webkit-gradient(linear, left top, left bottom, from(#b5d5db), to(#adced4));
- background: -webkit-linear-gradient(top, #b5d5db 0%, #adced4 100%);
- background: -o-linear-gradient(top, #b5d5db 0%, #adced4 100%);
- height: 20px;
- padding: 2px 5px;
- -moz-border-radius-topright: 4px;
- -moz-border-radius-topleft: 4px;
- -webkit-border-top-right-radius: 4px;
- -webkit-border-top-left-radius: 4px;
- border-top-right-radius: 4px;
- border-top-left-radius: 4px;
-}
-
-.music-content .player a {
- margin: 2px;
- height: 16px;
- width: 16px;
- float: left;
-}
-
-html[dir="rtl"] .music-content .player a {
- float: right;
-}
-
-.music-content .player a:hover,
-.music-content .player a:focus {
- opacity: 0.8;
-}
-
-.music-content .player a:active {
- opacity: 0.6;
-}
-
-.music-content .stop {
- display: none;
- background-position: 0 -270px;
-}
-
-.music-content .list {
- background-color: #e8f1f3;
- height: 188px;
- padding: 5px;
- text-align: left;
- overflow-y: auto;
- overflow-x: hidden;
-}
-
-html[dir="rtl"] .music-content .list {
- text-align: right;
-}
-
-.music-content p.no-results {
- display: none;
- color: black;
- font-size: 0.9em;
-}
-
-.music-content div.special {
- padding-bottom: 2px;
- margin-bottom: 6px;
- border-bottom: 1px solid #c3d4d7;
-}
-
-.music-content .song {
- display: block;
- margin: 3px 0;
- font-size: 0.8em;
-}
-
-.music-content .playing {
- font-weight: bold;
-}
-
-.music-content .search {
- background-color: #e8f1f3;
- height: 25px;
- -moz-border-radius-bottomleft: 4px;
- -moz-border-radius-bottomright: 4px;
- -webkit-border-bottom-left-radius: 4px;
- -webkit-border-bottom-right-radius: 4px;
- border-bottom-left-radius: 4px;
- border-bottom-right-radius: 4px;
-}
-
-.music-content .search input {
- margin: 2px;
- width: 198px;
- height: 15px;
-}
-
-.call-content {
- text-shadow: none;
- width: 230px;
- right: -102px;
-}
-
-html[dir="rtl"] .call-content {
- left: -102px;
-}
-
-.call-content .tools-content-subitem {
- position: relative;
-}
-
-.call-content .call-notify {
- height: 90px;
-}
-
-.call-content .call-notify .avatar-pane {
- width: 100px;
- position: absolute;
- left: 0;
- top: 0;
- bottom: 0;
- -moz-border-radius-bottomleft: 4px;
- -moz-border-radius-topleft: 4px;
- -webkit-border-bottom-left-radius: 4px;
- -webkit-border-top-left-radius: 4px;
- border-bottom-left-radius: 4px;
- border-top-left-radius: 4px;
-}
-
-html[dir="rtl"] .call-content .call-notify .avatar-pane {
- left: auto;
- right: 0;
-}
-
-.call-content .call-notify .avatar-pane .avatar-container {
- overflow: hidden;
- position: absolute;
- left: 0;
- right: 0;
- bottom: 0;
- top: 0;
-}
-
-.call-content .call-notify .avatar-pane .avatar-container .avatar {
- min-height: 100%;
- max-height: 100%;
- min-width: 100%;
- -moz-border-radius-topleft: 5px;
- -moz-border-radius-bottomleft: 5px;
- -webkit-border-top-left-radius: 5px;
- -webkit-border-bottom-left-radius: 5px;
- border-top-left-radius: 5px;
- border-bottom-left-radius: 5px;
-}
-
-html[dir="rtl"] .call-content .call-notify .avatar-pane .avatar-container .avatar {
- -moz-border-radius: 0;
- -webkit-border-radius: 0;
- border-radius: 0;
- -moz-border-radius-topright: 5px;
- -moz-border-radius-bottomright: 5px;
- -webkit-border-top-right-radius: 5px;
- -webkit-border-bottom-right-radius: 5px;
- border-top-right-radius: 5px;
- border-bottom-right-radius: 5px;
-}
-
-.call-content .call-notify .avatar-pane .icon {
- opacity: 0.75;
- position: absolute;
- left: 8px;
- bottom: 8px;
-}
-
-.call-content .call-notify.notify-call_audio .avatar-pane .icon,
-.call-content .call-notify.notify-broadcast_audio .avatar-pane .icon {
- background-position: 0 -120px;
- width: 33px;
- height: 33px;
-}
-
-.call-content .call-notify.notify-call_video .avatar-pane .icon,
-.call-content .call-notify.notify-broadcast_video .avatar-pane .icon {
- background-position: 0 -154px;
- width: 33px;
- height: 22px;
-}
-
-.call-content .call-notify.notify-connecting .avatar-pane .icon {
- background-position: 0 -175px;
- width: 33px;
- height: 32px;
-}
-
-.call-content .call-notify.notify-error .avatar-pane .icon {
- background-position: 0 -207px;
- width: 33px;
- height: 31px;
-}
-
-.call-content .call-notify.notify-local_ended .avatar-pane .icon,
-.call-content .call-notify.notify-remote_ended .avatar-pane .icon {
- background-position: 0 -238px;
- width: 33px;
- height: 34px;
-}
-
-.call-content .call-notify .notification-content {
- color: #ffffff;
- text-align: left;
- text-shadow: 0 1px 1px rgb(0,0,0);
- text-shadow: 0 1px 1px rgba(0,0,0,0.75);
- padding: 10px 10px 0 10px;
- position: absolute;
- top: 0;
- bottom: 0;
- right: 0;
- left: 100px;
-}
-
-html[dir="rtl"] .call-content .call-notify .notification-content {
- text-align: right;
- right: 100px;
- left: 0;
-}
-
-.call-content .call-notify .notification-content .fullname,
-.call-content .call-notify .notification-content .text {
- display: block;
-}
-
-.call-content .call-notify .notification-content .fullname {
- font-weight: bold;
-}
-
-.call-content .call-notify .notification-content .text {
- font-size: 12px;
- text-transform: lowercase;
- margin-top: 2px;
-}
-
-.call-content .call-notify .notification-content .reply-buttons {
- text-align: center;
- padding-left: 10px;
- position: absolute;
- left: 0;
- right: 0;
- bottom: 20px;
-}
-
-html[dir="rtl"] .call-content .call-notify .notification-content .reply-buttons {
- padding-left: 0;
- padding-right: 10px;
-}
-
-.call-content .call-notify .notification-content .reply-buttons a.reply-button {
- margin-left: 4px;
- float: left;
-}
-
-html[dir="rtl"] .call-content .call-notify .notification-content .reply-buttons a.reply-button {
- margin-left: 0;
- margin-right: 4px;
- float: right;
-}
-
-.call-content .call-notify .notification-content .reply-buttons a.reply-button:active {
- margin-top: 0;
-}
-
-.call-content .call-notify .notification-content .reply-buttons a.reply-button.first {
- margin-left: 0;
-}
-
-html[dir="rtl"] .call-content .call-notify .notification-content .reply-buttons a.reply-button.first {
- margin-right: 0;
-}
-
-@-o-keyframes tool_active {
- 0% {
- background-color: rgb(232,241,243);
- background-color: rgba(232,241,243,0.6);
- }
- 50% {
- background-color: rgb(243,16,0);
- background-color: rgba(243,16,0,0.6);
- }
- 100% {
- background-color: rgb(232,241,243);
- background-color: rgba(232,241,243,0.6);
- }
-}
-
-@-moz-keyframes tool_active {
- 0% {
- background-color: rgb(232,241,243);
- background-color: rgba(232,241,243,0.6);
- }
- 50% {
- background-color: rgb(243,16,0);
- background-color: rgba(243,16,0,0.6);
- }
- 100% {
- background-color: rgb(232,241,243);
- background-color: rgba(232,241,243,0.6);
- }
-}
-
-@-webkit-keyframes tool_active {
- 0% {
- background-color: rgb(232,241,243);
- background-color: rgba(232,241,243,0.6);
- }
- 50% {
- background-color: rgb(243,16,0);
- background-color: rgba(243,16,0,0.6);
- }
- 100% {
- background-color: rgb(232,241,243);
- background-color: rgba(232,241,243,0.6);
- }
-}
-
-@keyframes tool_active {
- 0% {
- background-color: rgb(232,241,243);
- background-color: rgba(232,241,243,0.6);
- }
- 50% {
- background-color: rgb(243,16,0);
- background-color: rgba(243,16,0,0.6);
- }
- 100% {
- background-color: rgb(232,241,243);
- background-color: rgba(232,241,243,0.6);
- }
-}
diff --git a/app/stylesheets/userinfos.css b/app/stylesheets/userinfos.css
deleted file mode 100644
index 400d81aa..00000000
--- a/app/stylesheets/userinfos.css
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the user-infos CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#userinfos .content {
- overflow: auto;
-}
-
-#userinfos .one-lap a {
- text-decoration: underline;
-}
-
-#userinfos .main-infos {
- margin: 20px 20px 8px 20px;
- height: 120px;
- background: white;
- position: relative;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
-}
-
-#userinfos .avatar-container {
- float: left;
- text-align: center;
- margin: 20px 35px;
- width: 80px;
- height: 80px;
-}
-
-html[dir="rtl"] #userinfos .avatar-container {
- float: right;
-}
-
-#userinfos .avatar {
- max-width: 80px;
- max-height: 80px;
-}
-
-#userinfos h1,
-#userinfos h2,
-#userinfos h3 {
- width: 410px;
- overflow: hidden;
-}
-
-#userinfos h1 {
- font-size: 2em;
- padding-top: 12px;
- margin-bottom: 4px;
-}
-
-#userinfos h2 {
- color: #447079;
- font-size: 1.1em;
- margin-bottom: 10px;
-}
-
-#userinfos h3 {
- color: #6e8388;
- font-size: 0.8em;
-}
-
-#userinfos .main-infos div.shortcuts {
- position: absolute;
- top: 10px;
- right: 12px;
-}
-
-html[dir="rtl"] #userinfos .main-infos div.shortcuts {
- right: auto;
- left: 12px;
-}
-
-#userinfos .block-infos {
- margin: 7px 20px;
- float: left;
-}
-
-#userinfos .one-line {
- margin: 4px 0;
- font-size: 12px;
- float: left;
-}
-
-#userinfos .one-line b.line-label {
- width: 120px;
- float: left;
-}
-
-html[dir="rtl"] #userinfos .one-line b.line-label {
- float: right;
-}
-
-#userinfos .one-line span.reset-info {
- float: left;
- width: 460px;
-}
-
-html[dir="rtl"] #userinfos .one-line span.reset-info {
- float: right;
-}
-
-#userinfos textarea {
- margin: 30px 0 0 30px;
- width: 572px;
- height: 292px;
-}
-
-html[dir="rtl"] #userinfos textarea {
- margin-right: 30px;
- margin-left: auto;
-} \ No newline at end of file
diff --git a/app/stylesheets/vcard.css b/app/stylesheets/vcard.css
deleted file mode 100644
index 52c7a086..00000000
--- a/app/stylesheets/vcard.css
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the vCard CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#vcard label {
- font-size: 0.94em;
- margin-top: 2px;
-}
-
-#vcard #vcard-avatar input[type="file"] {
- margin-left: 15px;
-}
-
-#vcard .avatar-container {
- float: left;
- text-align: center;
- margin: 20px 0 35px 35px;
- max-width: 96px;
- max-height: 96px;
-}
-
-html[dir="rtl"] #vcard .avatar-container {
- margin-right: 35px;
- margin-left: 0;
- float: right;
-}
-
-#vcard .avatar {
- max-width: 96px;
- max-height: 96px;
-}
-
-#vcard .avatar-delete {
- background-position: 3px -1195px;
- margin: 12px 25px 0 25px;
- padding-left: 20px;
- font-size: 0.9em;
- float: right;
-}
-
-html[dir="rtl"] #vcard .avatar-delete {
- float: left;
-}
-
-#vcard .no-avatar {
- width: 300px;
- color: #7c2222;
- padding: 10px;
- margin: 15px 0 20px 40px;
- background: #f8cece;
- border: 1px #ba6d6d solid;
- font-size: 0.8em;
-}
-
-html[dir="rtl"] #vcard .no-avatar {
- margin-left: auto;
- margin-right: 20px;
-}
-
-#vcard .forms textarea {
- height: 111px;
- width: 358px;
- margin: 5px 12px 10px 12px;
-}
-
-#vcard .forms .avatar-info {
- border-width: 1px;
- border-style: solid;
- display: none;
- width: 370px;
- height: 15px;
- font-size: 0.85em;
- padding: 10px;
-}
-
-#vcard .forms .avatar-wait {
- background-color: #9bcbed;
- color: #0a3858;
- border-color: #306780;
-}
-
-#vcard .forms .avatar-ok {
- background-color: #c4ed9b;
- color: #325213;
- border-color: #578030;
-}
-
-#vcard .forms .avatar-error {
- background-color: #e79595;
- color: #6a0b0b;
- border-color: #7c1010;
-}
-
-#vcard .infos {
- width: 179px;
- height: 328px;
- margin: 15px 15px 15px 0;
- padding: 0 8px;
- float: right;
-}
-
-#vcard .infos a {
- text-decoration: underline;
-}
-
-#vcard .send {
- float: right;
-}
-
-#vcard .send:hover {
- cursor: pointer;
-}
diff --git a/app/stylesheets/welcome.css b/app/stylesheets/welcome.css
deleted file mode 100644
index e331440a..00000000
--- a/app/stylesheets/welcome.css
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
-
-Jappix - An open social platform
-This is the welcome tool CSS stylesheet for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-#welcome .infos {
- margin: 15px;
-}
-
-#welcome .infos p {
- margin-top: 6px;
-}
-
-#welcome .infos p.infos-title {
- margin-top: 0;
-}
-
-#welcome a.box {
- background-color: #e4eef9;
- border: 1px solid #ccdbde;
- margin: 12px 11px 4px 15px;
- padding: 10px;
- width: 270px;
- text-decoration: none;
- float: left;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
-}
-
-#welcome a.box.share {
- width: 350px;
- margin: 4px 130px;
- padding: 4px 10px;
- clear: both;
-}
-
-#welcome a.box.share.first {
- margin-top: 0;
-}
-
-#welcome a.box.share:hover span.go {
- display: block;
-}
-
-#welcome a.box:hover,
-#welcome a.box:focus {
- border: 1px solid #93c5fa;
-}
-
-#welcome a.box:active {
- border: 1px solid #419afa;
-}
-
-#welcome a.box.enabled {
- background-color: #f1f6fd;
- border: 1px solid #9dc4fc;
-}
-
-#welcome a.box span {
- margin: 3px 0;
- display: block;
-}
-
-#welcome a.box span.logo {
- height: 35px;
- width: 35px;
- margin-right: 15px;
- float: left;
-}
-
-#welcome a.box span.logo.facebook {
- background-position: 0 0;
-}
-
-#welcome a.box span.logo.twitter {
- background-position: -35px 0;
-}
-
-#welcome a.box span.logo.plus {
- background-position: -70px 0;
-}
-
-#welcome a.box span.logo.waaave {
- background-position: -105px 0;
-}
-
-#welcome a.box span.option,
-#welcome a.box span.name {
- font-size: 0.9em;
- font-weight: bold;
-}
-
-#welcome a.box span.description {
- font-size: 0.7em;
- margin-top: 7px;
-}
-
-#welcome a.box.share span.description {
- margin-top: 4px;
-}
-
-#welcome a.box span.image {
- height: 16px;
- width: 16px;
- margin: -30px 12px 0 0;
- float: right;
-}
-
-html[dir="rtl"] #welcome a.box span.image {
- margin-right: auto;
- margin-left: 12px;
- float: left;
-}
-
-#welcome a.box span.image.sound {
- background-position: 0 -900px;
-}
-
-#welcome a.box span.image.geolocation {
- background-position: 0 -658px;
-}
-
-#welcome a.box span.image.xmpp {
- background-position: 0 -990px;
-}
-
-#welcome a.box span.image.mam {
- background-position: 0 -1025px;
-}
-
-#welcome a.box span.image.offline {
- background-position: 0 -80px;
-}
-
-#welcome a.box span.tick,
-#welcome a.box span.go {
- height: 16px;
- width: 16px;
- display: none;
- float: right;
-}
-
-#welcome a.box span.tick {
- background-position: 0 -1661px;
- margin: -52px -15px 0 0;
-}
-
-#welcome a.box span.go {
- background-position: 0 -1120px;
- margin: -28px 5px 0 0;
-}
-
-html[dir="rtl"] #welcome a.box span.go {
- margin-right: auto;
- margin-left: 5px;
- float: left;
-}
-
-#welcome a.box.enabled span.tick {
- display: block;
-}
-
-#welcome div.results {
- margin: -7px 15px;
- padding: 0;
- height: 272px;
- overflow: auto;
-}
-
-#welcome .bottom .finish.save {
- display: none;
-}
diff --git a/dev/.htaccess b/dev/.htaccess
deleted file mode 100644
index a6e0b168..00000000
--- a/dev/.htaccess
+++ /dev/null
@@ -1,2 +0,0 @@
-# Security rule
-deny from all \ No newline at end of file
diff --git a/dev/images/icons/accept.png b/dev/images/icons/accept.png
deleted file mode 100644
index b3141e1f..00000000
--- a/dev/images/icons/accept.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/add.png b/dev/images/icons/add.png
deleted file mode 100644
index 38945444..00000000
--- a/dev/images/icons/add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/anchor.png b/dev/images/icons/anchor.png
deleted file mode 100644
index 19fa29f9..00000000
--- a/dev/images/icons/anchor.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application.png b/dev/images/icons/application.png
deleted file mode 100644
index 94da091c..00000000
--- a/dev/images/icons/application.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_add.png b/dev/images/icons/application_add.png
deleted file mode 100644
index 2bb54ddf..00000000
--- a/dev/images/icons/application_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_cascade.png b/dev/images/icons/application_cascade.png
deleted file mode 100644
index 5abb6d90..00000000
--- a/dev/images/icons/application_cascade.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_delete.png b/dev/images/icons/application_delete.png
deleted file mode 100644
index c989bfd1..00000000
--- a/dev/images/icons/application_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_double.png b/dev/images/icons/application_double.png
deleted file mode 100644
index e6142491..00000000
--- a/dev/images/icons/application_double.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_edit.png b/dev/images/icons/application_edit.png
deleted file mode 100644
index 91bc793c..00000000
--- a/dev/images/icons/application_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_error.png b/dev/images/icons/application_error.png
deleted file mode 100644
index 6bce3613..00000000
--- a/dev/images/icons/application_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_form.png b/dev/images/icons/application_form.png
deleted file mode 100644
index dc4c4c63..00000000
--- a/dev/images/icons/application_form.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_form_add.png b/dev/images/icons/application_form_add.png
deleted file mode 100644
index c58d3a7a..00000000
--- a/dev/images/icons/application_form_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_form_delete.png b/dev/images/icons/application_form_delete.png
deleted file mode 100644
index 1fac5616..00000000
--- a/dev/images/icons/application_form_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_form_edit.png b/dev/images/icons/application_form_edit.png
deleted file mode 100644
index f9097a24..00000000
--- a/dev/images/icons/application_form_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_form_magnify.png b/dev/images/icons/application_form_magnify.png
deleted file mode 100644
index 76e9e12f..00000000
--- a/dev/images/icons/application_form_magnify.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_get.png b/dev/images/icons/application_get.png
deleted file mode 100644
index d7587ae9..00000000
--- a/dev/images/icons/application_get.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_go.png b/dev/images/icons/application_go.png
deleted file mode 100644
index 5cc2b0dd..00000000
--- a/dev/images/icons/application_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_home.png b/dev/images/icons/application_home.png
deleted file mode 100644
index 902d8e00..00000000
--- a/dev/images/icons/application_home.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_key.png b/dev/images/icons/application_key.png
deleted file mode 100644
index 0df1195a..00000000
--- a/dev/images/icons/application_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_lightning.png b/dev/images/icons/application_lightning.png
deleted file mode 100644
index 7812a111..00000000
--- a/dev/images/icons/application_lightning.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_link.png b/dev/images/icons/application_link.png
deleted file mode 100644
index 81b3fbb4..00000000
--- a/dev/images/icons/application_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_osx.png b/dev/images/icons/application_osx.png
deleted file mode 100644
index 9f022ece..00000000
--- a/dev/images/icons/application_osx.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_osx_terminal.png b/dev/images/icons/application_osx_terminal.png
deleted file mode 100644
index b3d8ce01..00000000
--- a/dev/images/icons/application_osx_terminal.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_put.png b/dev/images/icons/application_put.png
deleted file mode 100644
index 9f488601..00000000
--- a/dev/images/icons/application_put.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_side_boxes.png b/dev/images/icons/application_side_boxes.png
deleted file mode 100644
index 222fc025..00000000
--- a/dev/images/icons/application_side_boxes.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_side_contract.png b/dev/images/icons/application_side_contract.png
deleted file mode 100644
index 3585f94d..00000000
--- a/dev/images/icons/application_side_contract.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_side_expand.png b/dev/images/icons/application_side_expand.png
deleted file mode 100644
index 030cf7c3..00000000
--- a/dev/images/icons/application_side_expand.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_side_list.png b/dev/images/icons/application_side_list.png
deleted file mode 100644
index 12025033..00000000
--- a/dev/images/icons/application_side_list.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_side_tree.png b/dev/images/icons/application_side_tree.png
deleted file mode 100644
index 5c1c69a6..00000000
--- a/dev/images/icons/application_side_tree.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_split.png b/dev/images/icons/application_split.png
deleted file mode 100644
index 8399cb64..00000000
--- a/dev/images/icons/application_split.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_tile_horizontal.png b/dev/images/icons/application_tile_horizontal.png
deleted file mode 100644
index 8a1191c3..00000000
--- a/dev/images/icons/application_tile_horizontal.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_tile_vertical.png b/dev/images/icons/application_tile_vertical.png
deleted file mode 100644
index 1d40383d..00000000
--- a/dev/images/icons/application_tile_vertical.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_view_columns.png b/dev/images/icons/application_view_columns.png
deleted file mode 100644
index 6703ff29..00000000
--- a/dev/images/icons/application_view_columns.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_view_detail.png b/dev/images/icons/application_view_detail.png
deleted file mode 100644
index 00571e23..00000000
--- a/dev/images/icons/application_view_detail.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_view_gallery.png b/dev/images/icons/application_view_gallery.png
deleted file mode 100644
index 0a3c80a0..00000000
--- a/dev/images/icons/application_view_gallery.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_view_icons.png b/dev/images/icons/application_view_icons.png
deleted file mode 100644
index 0554902e..00000000
--- a/dev/images/icons/application_view_icons.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_view_list.png b/dev/images/icons/application_view_list.png
deleted file mode 100644
index 58bcfc60..00000000
--- a/dev/images/icons/application_view_list.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_view_tile.png b/dev/images/icons/application_view_tile.png
deleted file mode 100644
index 7b5d8b28..00000000
--- a/dev/images/icons/application_view_tile.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_xp.png b/dev/images/icons/application_xp.png
deleted file mode 100644
index d22860a3..00000000
--- a/dev/images/icons/application_xp.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/application_xp_terminal.png b/dev/images/icons/application_xp_terminal.png
deleted file mode 100644
index c28dd638..00000000
--- a/dev/images/icons/application_xp_terminal.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/arrow_branch.png b/dev/images/icons/arrow_branch.png
deleted file mode 100644
index 345f9ffc..00000000
--- a/dev/images/icons/arrow_branch.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/arrow_divide.png b/dev/images/icons/arrow_divide.png
deleted file mode 100644
index c4b70828..00000000
--- a/dev/images/icons/arrow_divide.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/arrow_down.png b/dev/images/icons/arrow_down.png
deleted file mode 100644
index 00ba1237..00000000
--- a/dev/images/icons/arrow_down.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/arrow_in.png b/dev/images/icons/arrow_in.png
deleted file mode 100644
index 7224de07..00000000
--- a/dev/images/icons/arrow_in.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/arrow_inout.png b/dev/images/icons/arrow_inout.png
deleted file mode 100644
index 1b763672..00000000
--- a/dev/images/icons/arrow_inout.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/arrow_join.png b/dev/images/icons/arrow_join.png
deleted file mode 100644
index ef4e09ca..00000000
--- a/dev/images/icons/arrow_join.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/arrow_left.png b/dev/images/icons/arrow_left.png
deleted file mode 100644
index 260993ee..00000000
--- a/dev/images/icons/arrow_left.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/arrow_merge.png b/dev/images/icons/arrow_merge.png
deleted file mode 100644
index d65e3c84..00000000
--- a/dev/images/icons/arrow_merge.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/arrow_out.png b/dev/images/icons/arrow_out.png
deleted file mode 100644
index 75c354c9..00000000
--- a/dev/images/icons/arrow_out.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/arrow_redo.png b/dev/images/icons/arrow_redo.png
deleted file mode 100644
index f621bb3d..00000000
--- a/dev/images/icons/arrow_redo.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/arrow_refresh.png b/dev/images/icons/arrow_refresh.png
deleted file mode 100644
index 5b8cfda8..00000000
--- a/dev/images/icons/arrow_refresh.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/arrow_refresh_small.png b/dev/images/icons/arrow_refresh_small.png
deleted file mode 100644
index a7997880..00000000
--- a/dev/images/icons/arrow_refresh_small.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/arrow_right.png b/dev/images/icons/arrow_right.png
deleted file mode 100644
index 755e3657..00000000
--- a/dev/images/icons/arrow_right.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/arrow_rotate_anticlockwise.png b/dev/images/icons/arrow_rotate_anticlockwise.png
deleted file mode 100644
index 7f8ffc16..00000000
--- a/dev/images/icons/arrow_rotate_anticlockwise.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/arrow_rotate_clockwise.png b/dev/images/icons/arrow_rotate_clockwise.png
deleted file mode 100644
index cf7a7792..00000000
--- a/dev/images/icons/arrow_rotate_clockwise.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/arrow_switch.png b/dev/images/icons/arrow_switch.png
deleted file mode 100644
index 5c4bfaf0..00000000
--- a/dev/images/icons/arrow_switch.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/arrow_turn_left.png b/dev/images/icons/arrow_turn_left.png
deleted file mode 100644
index 1db4ce39..00000000
--- a/dev/images/icons/arrow_turn_left.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/arrow_turn_right.png b/dev/images/icons/arrow_turn_right.png
deleted file mode 100644
index d4e1e3f8..00000000
--- a/dev/images/icons/arrow_turn_right.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/arrow_undo.png b/dev/images/icons/arrow_undo.png
deleted file mode 100644
index 1cc2efcf..00000000
--- a/dev/images/icons/arrow_undo.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/arrow_up.png b/dev/images/icons/arrow_up.png
deleted file mode 100644
index 7ed49c6f..00000000
--- a/dev/images/icons/arrow_up.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/asterisk_orange.png b/dev/images/icons/asterisk_orange.png
deleted file mode 100644
index f631d810..00000000
--- a/dev/images/icons/asterisk_orange.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/asterisk_yellow.png b/dev/images/icons/asterisk_yellow.png
deleted file mode 100644
index b91806b9..00000000
--- a/dev/images/icons/asterisk_yellow.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/attach.png b/dev/images/icons/attach.png
deleted file mode 100644
index eb8de4d6..00000000
--- a/dev/images/icons/attach.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/award_star_add.png b/dev/images/icons/award_star_add.png
deleted file mode 100644
index 26916bf1..00000000
--- a/dev/images/icons/award_star_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/award_star_bronze_1.png b/dev/images/icons/award_star_bronze_1.png
deleted file mode 100644
index f423d536..00000000
--- a/dev/images/icons/award_star_bronze_1.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/award_star_bronze_2.png b/dev/images/icons/award_star_bronze_2.png
deleted file mode 100644
index 4cbc79f5..00000000
--- a/dev/images/icons/award_star_bronze_2.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/award_star_bronze_3.png b/dev/images/icons/award_star_bronze_3.png
deleted file mode 100644
index 3548bda2..00000000
--- a/dev/images/icons/award_star_bronze_3.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/award_star_delete.png b/dev/images/icons/award_star_delete.png
deleted file mode 100644
index 9ace9a71..00000000
--- a/dev/images/icons/award_star_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/award_star_gold_1.png b/dev/images/icons/award_star_gold_1.png
deleted file mode 100644
index c7a1c7b9..00000000
--- a/dev/images/icons/award_star_gold_1.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/award_star_gold_2.png b/dev/images/icons/award_star_gold_2.png
deleted file mode 100644
index 568ea1fd..00000000
--- a/dev/images/icons/award_star_gold_2.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/award_star_gold_3.png b/dev/images/icons/award_star_gold_3.png
deleted file mode 100644
index 60b67c7a..00000000
--- a/dev/images/icons/award_star_gold_3.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/award_star_silver_1.png b/dev/images/icons/award_star_silver_1.png
deleted file mode 100644
index 6c298318..00000000
--- a/dev/images/icons/award_star_silver_1.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/award_star_silver_2.png b/dev/images/icons/award_star_silver_2.png
deleted file mode 100644
index 5c3b8f67..00000000
--- a/dev/images/icons/award_star_silver_2.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/award_star_silver_3.png b/dev/images/icons/award_star_silver_3.png
deleted file mode 100644
index 075396f0..00000000
--- a/dev/images/icons/award_star_silver_3.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/basket.png b/dev/images/icons/basket.png
deleted file mode 100644
index b0686d78..00000000
--- a/dev/images/icons/basket.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/basket_add.png b/dev/images/icons/basket_add.png
deleted file mode 100644
index db2f3046..00000000
--- a/dev/images/icons/basket_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/basket_delete.png b/dev/images/icons/basket_delete.png
deleted file mode 100644
index 89d5459b..00000000
--- a/dev/images/icons/basket_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/basket_edit.png b/dev/images/icons/basket_edit.png
deleted file mode 100644
index 1ed5ad77..00000000
--- a/dev/images/icons/basket_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/basket_error.png b/dev/images/icons/basket_error.png
deleted file mode 100644
index d737c6f1..00000000
--- a/dev/images/icons/basket_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/basket_go.png b/dev/images/icons/basket_go.png
deleted file mode 100644
index ed5d1143..00000000
--- a/dev/images/icons/basket_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/basket_put.png b/dev/images/icons/basket_put.png
deleted file mode 100644
index be62faaa..00000000
--- a/dev/images/icons/basket_put.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/basket_remove.png b/dev/images/icons/basket_remove.png
deleted file mode 100644
index 04dd7fd3..00000000
--- a/dev/images/icons/basket_remove.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bell.png b/dev/images/icons/bell.png
deleted file mode 100644
index f6c56ee5..00000000
--- a/dev/images/icons/bell.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bell_add.png b/dev/images/icons/bell_add.png
deleted file mode 100644
index b76f7b2b..00000000
--- a/dev/images/icons/bell_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bell_delete.png b/dev/images/icons/bell_delete.png
deleted file mode 100644
index 31528f03..00000000
--- a/dev/images/icons/bell_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bell_error.png b/dev/images/icons/bell_error.png
deleted file mode 100644
index d833d74e..00000000
--- a/dev/images/icons/bell_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bell_go.png b/dev/images/icons/bell_go.png
deleted file mode 100644
index 6827d6aa..00000000
--- a/dev/images/icons/bell_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bell_link.png b/dev/images/icons/bell_link.png
deleted file mode 100644
index 790dc011..00000000
--- a/dev/images/icons/bell_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bin.png b/dev/images/icons/bin.png
deleted file mode 100644
index c131494f..00000000
--- a/dev/images/icons/bin.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bin_closed.png b/dev/images/icons/bin_closed.png
deleted file mode 100644
index e3c0dc74..00000000
--- a/dev/images/icons/bin_closed.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bin_empty.png b/dev/images/icons/bin_empty.png
deleted file mode 100644
index d572cb8d..00000000
--- a/dev/images/icons/bin_empty.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bomb.png b/dev/images/icons/bomb.png
deleted file mode 100644
index 638a9d4f..00000000
--- a/dev/images/icons/bomb.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/book.png b/dev/images/icons/book.png
deleted file mode 100644
index b0f4dd79..00000000
--- a/dev/images/icons/book.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/book_add.png b/dev/images/icons/book_add.png
deleted file mode 100644
index e2f08472..00000000
--- a/dev/images/icons/book_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/book_addresses.png b/dev/images/icons/book_addresses.png
deleted file mode 100644
index b73419ba..00000000
--- a/dev/images/icons/book_addresses.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/book_delete.png b/dev/images/icons/book_delete.png
deleted file mode 100644
index d9a6340d..00000000
--- a/dev/images/icons/book_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/book_edit.png b/dev/images/icons/book_edit.png
deleted file mode 100644
index 6e756cc8..00000000
--- a/dev/images/icons/book_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/book_error.png b/dev/images/icons/book_error.png
deleted file mode 100644
index f3fbed0d..00000000
--- a/dev/images/icons/book_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/book_go.png b/dev/images/icons/book_go.png
deleted file mode 100644
index cd4e1964..00000000
--- a/dev/images/icons/book_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/book_key.png b/dev/images/icons/book_key.png
deleted file mode 100644
index d8e23ec9..00000000
--- a/dev/images/icons/book_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/book_link.png b/dev/images/icons/book_link.png
deleted file mode 100644
index dd0820e8..00000000
--- a/dev/images/icons/book_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/book_next.png b/dev/images/icons/book_next.png
deleted file mode 100644
index 365f54dc..00000000
--- a/dev/images/icons/book_next.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/book_open.png b/dev/images/icons/book_open.png
deleted file mode 100644
index 7d863f94..00000000
--- a/dev/images/icons/book_open.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/book_previous.png b/dev/images/icons/book_previous.png
deleted file mode 100644
index 814a646e..00000000
--- a/dev/images/icons/book_previous.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/box.png b/dev/images/icons/box.png
deleted file mode 100644
index 8443c23e..00000000
--- a/dev/images/icons/box.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/brick.png b/dev/images/icons/brick.png
deleted file mode 100644
index 6fed6ae2..00000000
--- a/dev/images/icons/brick.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/brick_add.png b/dev/images/icons/brick_add.png
deleted file mode 100644
index e8718490..00000000
--- a/dev/images/icons/brick_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/brick_delete.png b/dev/images/icons/brick_delete.png
deleted file mode 100644
index d0f199a6..00000000
--- a/dev/images/icons/brick_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/brick_edit.png b/dev/images/icons/brick_edit.png
deleted file mode 100644
index 4f3e7bde..00000000
--- a/dev/images/icons/brick_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/brick_error.png b/dev/images/icons/brick_error.png
deleted file mode 100644
index a500c5b0..00000000
--- a/dev/images/icons/brick_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/brick_go.png b/dev/images/icons/brick_go.png
deleted file mode 100644
index 28c06ac4..00000000
--- a/dev/images/icons/brick_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/brick_link.png b/dev/images/icons/brick_link.png
deleted file mode 100644
index 3c97b901..00000000
--- a/dev/images/icons/brick_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bricks.png b/dev/images/icons/bricks.png
deleted file mode 100644
index 1e27edb4..00000000
--- a/dev/images/icons/bricks.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/briefcase.png b/dev/images/icons/briefcase.png
deleted file mode 100644
index 05c56491..00000000
--- a/dev/images/icons/briefcase.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bug.png b/dev/images/icons/bug.png
deleted file mode 100644
index fd20978d..00000000
--- a/dev/images/icons/bug.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bug_add.png b/dev/images/icons/bug_add.png
deleted file mode 100644
index 9cc82ede..00000000
--- a/dev/images/icons/bug_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bug_delete.png b/dev/images/icons/bug_delete.png
deleted file mode 100644
index 477bb853..00000000
--- a/dev/images/icons/bug_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bug_edit.png b/dev/images/icons/bug_edit.png
deleted file mode 100644
index fb9cca6b..00000000
--- a/dev/images/icons/bug_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bug_error.png b/dev/images/icons/bug_error.png
deleted file mode 100644
index 52c5ec2a..00000000
--- a/dev/images/icons/bug_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bug_go.png b/dev/images/icons/bug_go.png
deleted file mode 100644
index 8dc1d357..00000000
--- a/dev/images/icons/bug_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bug_link.png b/dev/images/icons/bug_link.png
deleted file mode 100644
index 0fee96e3..00000000
--- a/dev/images/icons/bug_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/building.png b/dev/images/icons/building.png
deleted file mode 100644
index 11a017cf..00000000
--- a/dev/images/icons/building.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/building_add.png b/dev/images/icons/building_add.png
deleted file mode 100644
index a96d8219..00000000
--- a/dev/images/icons/building_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/building_delete.png b/dev/images/icons/building_delete.png
deleted file mode 100644
index f96a1703..00000000
--- a/dev/images/icons/building_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/building_edit.png b/dev/images/icons/building_edit.png
deleted file mode 100644
index 940f725b..00000000
--- a/dev/images/icons/building_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/building_error.png b/dev/images/icons/building_error.png
deleted file mode 100644
index a342eefc..00000000
--- a/dev/images/icons/building_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/building_go.png b/dev/images/icons/building_go.png
deleted file mode 100644
index 4f2c23cc..00000000
--- a/dev/images/icons/building_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/building_key.png b/dev/images/icons/building_key.png
deleted file mode 100644
index 2554f614..00000000
--- a/dev/images/icons/building_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/building_link.png b/dev/images/icons/building_link.png
deleted file mode 100644
index 581108c9..00000000
--- a/dev/images/icons/building_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_add.png b/dev/images/icons/bullet_add.png
deleted file mode 100644
index efb6f2a5..00000000
--- a/dev/images/icons/bullet_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_arrow_bottom.png b/dev/images/icons/bullet_arrow_bottom.png
deleted file mode 100644
index 1a28d825..00000000
--- a/dev/images/icons/bullet_arrow_bottom.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_arrow_down.png b/dev/images/icons/bullet_arrow_down.png
deleted file mode 100644
index 9b23c06d..00000000
--- a/dev/images/icons/bullet_arrow_down.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_arrow_top.png b/dev/images/icons/bullet_arrow_top.png
deleted file mode 100644
index 0ce86d2b..00000000
--- a/dev/images/icons/bullet_arrow_top.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_arrow_up.png b/dev/images/icons/bullet_arrow_up.png
deleted file mode 100644
index 24df0f42..00000000
--- a/dev/images/icons/bullet_arrow_up.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_black.png b/dev/images/icons/bullet_black.png
deleted file mode 100644
index 57619706..00000000
--- a/dev/images/icons/bullet_black.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_blue.png b/dev/images/icons/bullet_blue.png
deleted file mode 100644
index 3b4dbc85..00000000
--- a/dev/images/icons/bullet_blue.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_delete.png b/dev/images/icons/bullet_delete.png
deleted file mode 100644
index 7e2cbe9c..00000000
--- a/dev/images/icons/bullet_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_disk.png b/dev/images/icons/bullet_disk.png
deleted file mode 100644
index 86b38b71..00000000
--- a/dev/images/icons/bullet_disk.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_error.png b/dev/images/icons/bullet_error.png
deleted file mode 100644
index 60ce3058..00000000
--- a/dev/images/icons/bullet_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_feed.png b/dev/images/icons/bullet_feed.png
deleted file mode 100644
index 93b57d9b..00000000
--- a/dev/images/icons/bullet_feed.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_go.png b/dev/images/icons/bullet_go.png
deleted file mode 100644
index 432a19f6..00000000
--- a/dev/images/icons/bullet_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_green.png b/dev/images/icons/bullet_green.png
deleted file mode 100644
index 9d32832c..00000000
--- a/dev/images/icons/bullet_green.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_key.png b/dev/images/icons/bullet_key.png
deleted file mode 100644
index 5cd73e87..00000000
--- a/dev/images/icons/bullet_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_orange.png b/dev/images/icons/bullet_orange.png
deleted file mode 100644
index 65251d79..00000000
--- a/dev/images/icons/bullet_orange.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_picture.png b/dev/images/icons/bullet_picture.png
deleted file mode 100644
index 381f5159..00000000
--- a/dev/images/icons/bullet_picture.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_pink.png b/dev/images/icons/bullet_pink.png
deleted file mode 100644
index da7d0664..00000000
--- a/dev/images/icons/bullet_pink.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_purple.png b/dev/images/icons/bullet_purple.png
deleted file mode 100644
index 57c4ae06..00000000
--- a/dev/images/icons/bullet_purple.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_red.png b/dev/images/icons/bullet_red.png
deleted file mode 100644
index 7fd24c73..00000000
--- a/dev/images/icons/bullet_red.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_star.png b/dev/images/icons/bullet_star.png
deleted file mode 100644
index b148a0fe..00000000
--- a/dev/images/icons/bullet_star.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_toggle_minus.png b/dev/images/icons/bullet_toggle_minus.png
deleted file mode 100644
index b47ce55f..00000000
--- a/dev/images/icons/bullet_toggle_minus.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_toggle_plus.png b/dev/images/icons/bullet_toggle_plus.png
deleted file mode 100644
index 9ab4a896..00000000
--- a/dev/images/icons/bullet_toggle_plus.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_white.png b/dev/images/icons/bullet_white.png
deleted file mode 100644
index a9af8d44..00000000
--- a/dev/images/icons/bullet_white.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_wrench.png b/dev/images/icons/bullet_wrench.png
deleted file mode 100644
index 9bd20cc5..00000000
--- a/dev/images/icons/bullet_wrench.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/bullet_yellow.png b/dev/images/icons/bullet_yellow.png
deleted file mode 100644
index 31004391..00000000
--- a/dev/images/icons/bullet_yellow.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cake.png b/dev/images/icons/cake.png
deleted file mode 100644
index 49b093fe..00000000
--- a/dev/images/icons/cake.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/calculator.png b/dev/images/icons/calculator.png
deleted file mode 100644
index d052d6ba..00000000
--- a/dev/images/icons/calculator.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/calculator_add.png b/dev/images/icons/calculator_add.png
deleted file mode 100644
index 12f58fa1..00000000
--- a/dev/images/icons/calculator_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/calculator_delete.png b/dev/images/icons/calculator_delete.png
deleted file mode 100644
index bc10be3e..00000000
--- a/dev/images/icons/calculator_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/calculator_edit.png b/dev/images/icons/calculator_edit.png
deleted file mode 100644
index 6e606b7a..00000000
--- a/dev/images/icons/calculator_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/calculator_error.png b/dev/images/icons/calculator_error.png
deleted file mode 100644
index 4ecb00ae..00000000
--- a/dev/images/icons/calculator_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/calculator_link.png b/dev/images/icons/calculator_link.png
deleted file mode 100644
index 4d1aad65..00000000
--- a/dev/images/icons/calculator_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/calendar.png b/dev/images/icons/calendar.png
deleted file mode 100644
index 01adf882..00000000
--- a/dev/images/icons/calendar.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/calendar_add.png b/dev/images/icons/calendar_add.png
deleted file mode 100644
index 1fcafaa4..00000000
--- a/dev/images/icons/calendar_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/calendar_delete.png b/dev/images/icons/calendar_delete.png
deleted file mode 100644
index 495a6cf8..00000000
--- a/dev/images/icons/calendar_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/calendar_edit.png b/dev/images/icons/calendar_edit.png
deleted file mode 100644
index e9d000aa..00000000
--- a/dev/images/icons/calendar_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/calendar_link.png b/dev/images/icons/calendar_link.png
deleted file mode 100644
index 7e5d9954..00000000
--- a/dev/images/icons/calendar_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/calendar_view_day.png b/dev/images/icons/calendar_view_day.png
deleted file mode 100644
index 9740f76e..00000000
--- a/dev/images/icons/calendar_view_day.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/calendar_view_month.png b/dev/images/icons/calendar_view_month.png
deleted file mode 100644
index 5f83049e..00000000
--- a/dev/images/icons/calendar_view_month.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/calendar_view_week.png b/dev/images/icons/calendar_view_week.png
deleted file mode 100644
index 8fe695f5..00000000
--- a/dev/images/icons/calendar_view_week.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/camera.png b/dev/images/icons/camera.png
deleted file mode 100644
index 8536d1a7..00000000
--- a/dev/images/icons/camera.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/camera_add.png b/dev/images/icons/camera_add.png
deleted file mode 100644
index 545f0d19..00000000
--- a/dev/images/icons/camera_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/camera_delete.png b/dev/images/icons/camera_delete.png
deleted file mode 100644
index 48f43630..00000000
--- a/dev/images/icons/camera_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/camera_edit.png b/dev/images/icons/camera_edit.png
deleted file mode 100644
index d1381f72..00000000
--- a/dev/images/icons/camera_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/camera_error.png b/dev/images/icons/camera_error.png
deleted file mode 100644
index 3c1bc95c..00000000
--- a/dev/images/icons/camera_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/camera_go.png b/dev/images/icons/camera_go.png
deleted file mode 100644
index 94ce2b25..00000000
--- a/dev/images/icons/camera_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/camera_link.png b/dev/images/icons/camera_link.png
deleted file mode 100644
index a8b85fd3..00000000
--- a/dev/images/icons/camera_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/camera_small.png b/dev/images/icons/camera_small.png
deleted file mode 100644
index e5e63666..00000000
--- a/dev/images/icons/camera_small.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cancel.png b/dev/images/icons/cancel.png
deleted file mode 100644
index 76a1c72b..00000000
--- a/dev/images/icons/cancel.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/car.png b/dev/images/icons/car.png
deleted file mode 100644
index 58d1390e..00000000
--- a/dev/images/icons/car.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/car_add.png b/dev/images/icons/car_add.png
deleted file mode 100644
index 8451e6c9..00000000
--- a/dev/images/icons/car_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/car_delete.png b/dev/images/icons/car_delete.png
deleted file mode 100644
index ff765d83..00000000
--- a/dev/images/icons/car_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cart.png b/dev/images/icons/cart.png
deleted file mode 100644
index 20a08dd7..00000000
--- a/dev/images/icons/cart.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cart_add.png b/dev/images/icons/cart_add.png
deleted file mode 100644
index 5f629cf7..00000000
--- a/dev/images/icons/cart_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cart_delete.png b/dev/images/icons/cart_delete.png
deleted file mode 100644
index dfaf9eba..00000000
--- a/dev/images/icons/cart_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cart_edit.png b/dev/images/icons/cart_edit.png
deleted file mode 100644
index dc4ac0ef..00000000
--- a/dev/images/icons/cart_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cart_error.png b/dev/images/icons/cart_error.png
deleted file mode 100644
index d703f919..00000000
--- a/dev/images/icons/cart_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cart_go.png b/dev/images/icons/cart_go.png
deleted file mode 100644
index a1b648a2..00000000
--- a/dev/images/icons/cart_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cart_put.png b/dev/images/icons/cart_put.png
deleted file mode 100644
index 97960259..00000000
--- a/dev/images/icons/cart_put.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cart_remove.png b/dev/images/icons/cart_remove.png
deleted file mode 100644
index 479d6fc0..00000000
--- a/dev/images/icons/cart_remove.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cd.png b/dev/images/icons/cd.png
deleted file mode 100644
index 0002ed50..00000000
--- a/dev/images/icons/cd.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cd_add.png b/dev/images/icons/cd_add.png
deleted file mode 100644
index c7bc69a7..00000000
--- a/dev/images/icons/cd_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cd_burn.png b/dev/images/icons/cd_burn.png
deleted file mode 100644
index e61d8ac6..00000000
--- a/dev/images/icons/cd_burn.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cd_delete.png b/dev/images/icons/cd_delete.png
deleted file mode 100644
index 9a8df461..00000000
--- a/dev/images/icons/cd_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cd_edit.png b/dev/images/icons/cd_edit.png
deleted file mode 100644
index 67269271..00000000
--- a/dev/images/icons/cd_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cd_eject.png b/dev/images/icons/cd_eject.png
deleted file mode 100644
index 8d862cd3..00000000
--- a/dev/images/icons/cd_eject.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cd_go.png b/dev/images/icons/cd_go.png
deleted file mode 100644
index 4e9c531f..00000000
--- a/dev/images/icons/cd_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_bar.png b/dev/images/icons/chart_bar.png
deleted file mode 100644
index 9051fbc6..00000000
--- a/dev/images/icons/chart_bar.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_bar_add.png b/dev/images/icons/chart_bar_add.png
deleted file mode 100644
index d283e846..00000000
--- a/dev/images/icons/chart_bar_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_bar_delete.png b/dev/images/icons/chart_bar_delete.png
deleted file mode 100644
index 259f6868..00000000
--- a/dev/images/icons/chart_bar_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_bar_edit.png b/dev/images/icons/chart_bar_edit.png
deleted file mode 100644
index df64d97e..00000000
--- a/dev/images/icons/chart_bar_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_bar_error.png b/dev/images/icons/chart_bar_error.png
deleted file mode 100644
index bdacea5e..00000000
--- a/dev/images/icons/chart_bar_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_bar_link.png b/dev/images/icons/chart_bar_link.png
deleted file mode 100644
index a5ef28d5..00000000
--- a/dev/images/icons/chart_bar_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_curve.png b/dev/images/icons/chart_curve.png
deleted file mode 100644
index f23aea8f..00000000
--- a/dev/images/icons/chart_curve.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_curve_add.png b/dev/images/icons/chart_curve_add.png
deleted file mode 100644
index 1cea83db..00000000
--- a/dev/images/icons/chart_curve_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_curve_delete.png b/dev/images/icons/chart_curve_delete.png
deleted file mode 100644
index a99837d3..00000000
--- a/dev/images/icons/chart_curve_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_curve_edit.png b/dev/images/icons/chart_curve_edit.png
deleted file mode 100644
index 9d0df3d1..00000000
--- a/dev/images/icons/chart_curve_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_curve_error.png b/dev/images/icons/chart_curve_error.png
deleted file mode 100644
index 6612fbd8..00000000
--- a/dev/images/icons/chart_curve_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_curve_go.png b/dev/images/icons/chart_curve_go.png
deleted file mode 100644
index 7408c97a..00000000
--- a/dev/images/icons/chart_curve_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_curve_link.png b/dev/images/icons/chart_curve_link.png
deleted file mode 100644
index 399758cb..00000000
--- a/dev/images/icons/chart_curve_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_line.png b/dev/images/icons/chart_line.png
deleted file mode 100644
index 3ea64df7..00000000
--- a/dev/images/icons/chart_line.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_line_add.png b/dev/images/icons/chart_line_add.png
deleted file mode 100644
index 24de46b1..00000000
--- a/dev/images/icons/chart_line_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_line_delete.png b/dev/images/icons/chart_line_delete.png
deleted file mode 100644
index 3d358e3e..00000000
--- a/dev/images/icons/chart_line_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_line_edit.png b/dev/images/icons/chart_line_edit.png
deleted file mode 100644
index c1cd9b3c..00000000
--- a/dev/images/icons/chart_line_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_line_error.png b/dev/images/icons/chart_line_error.png
deleted file mode 100644
index b9086bad..00000000
--- a/dev/images/icons/chart_line_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_line_link.png b/dev/images/icons/chart_line_link.png
deleted file mode 100644
index 5d3fed8b..00000000
--- a/dev/images/icons/chart_line_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_organisation.png b/dev/images/icons/chart_organisation.png
deleted file mode 100644
index 626ac6e2..00000000
--- a/dev/images/icons/chart_organisation.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_organisation_add.png b/dev/images/icons/chart_organisation_add.png
deleted file mode 100644
index 3e0cdf0e..00000000
--- a/dev/images/icons/chart_organisation_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_organisation_delete.png b/dev/images/icons/chart_organisation_delete.png
deleted file mode 100644
index b7164d98..00000000
--- a/dev/images/icons/chart_organisation_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_pie.png b/dev/images/icons/chart_pie.png
deleted file mode 100644
index 5dd8d952..00000000
--- a/dev/images/icons/chart_pie.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_pie_add.png b/dev/images/icons/chart_pie_add.png
deleted file mode 100644
index 6febd0bf..00000000
--- a/dev/images/icons/chart_pie_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_pie_delete.png b/dev/images/icons/chart_pie_delete.png
deleted file mode 100644
index a30f5ef5..00000000
--- a/dev/images/icons/chart_pie_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_pie_edit.png b/dev/images/icons/chart_pie_edit.png
deleted file mode 100644
index ee6e6fa7..00000000
--- a/dev/images/icons/chart_pie_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_pie_error.png b/dev/images/icons/chart_pie_error.png
deleted file mode 100644
index 6539ebb1..00000000
--- a/dev/images/icons/chart_pie_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/chart_pie_link.png b/dev/images/icons/chart_pie_link.png
deleted file mode 100644
index 1375bb1a..00000000
--- a/dev/images/icons/chart_pie_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/clock.png b/dev/images/icons/clock.png
deleted file mode 100644
index 62e7ea7f..00000000
--- a/dev/images/icons/clock.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/clock_add.png b/dev/images/icons/clock_add.png
deleted file mode 100644
index e148b6a2..00000000
--- a/dev/images/icons/clock_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/clock_delete.png b/dev/images/icons/clock_delete.png
deleted file mode 100644
index 81688326..00000000
--- a/dev/images/icons/clock_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/clock_edit.png b/dev/images/icons/clock_edit.png
deleted file mode 100644
index ebc139a7..00000000
--- a/dev/images/icons/clock_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/clock_error.png b/dev/images/icons/clock_error.png
deleted file mode 100644
index 68141c6a..00000000
--- a/dev/images/icons/clock_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/clock_go.png b/dev/images/icons/clock_go.png
deleted file mode 100644
index 3b482873..00000000
--- a/dev/images/icons/clock_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/clock_link.png b/dev/images/icons/clock_link.png
deleted file mode 100644
index 5b2a780d..00000000
--- a/dev/images/icons/clock_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/clock_pause.png b/dev/images/icons/clock_pause.png
deleted file mode 100644
index abdd8b09..00000000
--- a/dev/images/icons/clock_pause.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/clock_play.png b/dev/images/icons/clock_play.png
deleted file mode 100644
index 28708fc8..00000000
--- a/dev/images/icons/clock_play.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/clock_red.png b/dev/images/icons/clock_red.png
deleted file mode 100644
index 51e7a063..00000000
--- a/dev/images/icons/clock_red.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/clock_stop.png b/dev/images/icons/clock_stop.png
deleted file mode 100644
index 5aa3bd3c..00000000
--- a/dev/images/icons/clock_stop.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cog.png b/dev/images/icons/cog.png
deleted file mode 100644
index 6e5a5e68..00000000
--- a/dev/images/icons/cog.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cog_add.png b/dev/images/icons/cog_add.png
deleted file mode 100644
index b39fda8e..00000000
--- a/dev/images/icons/cog_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cog_delete.png b/dev/images/icons/cog_delete.png
deleted file mode 100644
index 431249b3..00000000
--- a/dev/images/icons/cog_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cog_edit.png b/dev/images/icons/cog_edit.png
deleted file mode 100644
index 8c30380b..00000000
--- a/dev/images/icons/cog_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cog_error.png b/dev/images/icons/cog_error.png
deleted file mode 100644
index e33ac1e1..00000000
--- a/dev/images/icons/cog_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cog_go.png b/dev/images/icons/cog_go.png
deleted file mode 100644
index fa14cef4..00000000
--- a/dev/images/icons/cog_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/coins.png b/dev/images/icons/coins.png
deleted file mode 100644
index 0ca9074d..00000000
--- a/dev/images/icons/coins.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/coins_add.png b/dev/images/icons/coins_add.png
deleted file mode 100644
index f1dd3105..00000000
--- a/dev/images/icons/coins_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/coins_delete.png b/dev/images/icons/coins_delete.png
deleted file mode 100644
index da78c5af..00000000
--- a/dev/images/icons/coins_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/color_swatch.png b/dev/images/icons/color_swatch.png
deleted file mode 100644
index de486e87..00000000
--- a/dev/images/icons/color_swatch.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/color_wheel.png b/dev/images/icons/color_wheel.png
deleted file mode 100644
index c8549304..00000000
--- a/dev/images/icons/color_wheel.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/comment.png b/dev/images/icons/comment.png
deleted file mode 100644
index caa9d7ba..00000000
--- a/dev/images/icons/comment.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/comment_add.png b/dev/images/icons/comment_add.png
deleted file mode 100644
index 97735b4c..00000000
--- a/dev/images/icons/comment_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/comment_delete.png b/dev/images/icons/comment_delete.png
deleted file mode 100644
index 8ef09dda..00000000
--- a/dev/images/icons/comment_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/comment_edit.png b/dev/images/icons/comment_edit.png
deleted file mode 100644
index b6cb6192..00000000
--- a/dev/images/icons/comment_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/comments.png b/dev/images/icons/comments.png
deleted file mode 100644
index 3ec6f966..00000000
--- a/dev/images/icons/comments.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/comments_add.png b/dev/images/icons/comments_add.png
deleted file mode 100644
index 578afc2d..00000000
--- a/dev/images/icons/comments_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/comments_delete.png b/dev/images/icons/comments_delete.png
deleted file mode 100644
index ecea2ed8..00000000
--- a/dev/images/icons/comments_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/compress.png b/dev/images/icons/compress.png
deleted file mode 100644
index 8606ff0f..00000000
--- a/dev/images/icons/compress.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/computer.png b/dev/images/icons/computer.png
deleted file mode 100644
index 9bc37dce..00000000
--- a/dev/images/icons/computer.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/computer_add.png b/dev/images/icons/computer_add.png
deleted file mode 100644
index db604ee3..00000000
--- a/dev/images/icons/computer_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/computer_delete.png b/dev/images/icons/computer_delete.png
deleted file mode 100644
index 5e9b2683..00000000
--- a/dev/images/icons/computer_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/computer_edit.png b/dev/images/icons/computer_edit.png
deleted file mode 100644
index 34c72fe5..00000000
--- a/dev/images/icons/computer_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/computer_error.png b/dev/images/icons/computer_error.png
deleted file mode 100644
index b2c3ed57..00000000
--- a/dev/images/icons/computer_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/computer_go.png b/dev/images/icons/computer_go.png
deleted file mode 100644
index 0b26144d..00000000
--- a/dev/images/icons/computer_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/computer_key.png b/dev/images/icons/computer_key.png
deleted file mode 100644
index eca54301..00000000
--- a/dev/images/icons/computer_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/computer_link.png b/dev/images/icons/computer_link.png
deleted file mode 100644
index 3859db21..00000000
--- a/dev/images/icons/computer_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/connect.png b/dev/images/icons/connect.png
deleted file mode 100644
index 362b60a5..00000000
--- a/dev/images/icons/connect.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/contrast.png b/dev/images/icons/contrast.png
deleted file mode 100644
index 7c3ed9ce..00000000
--- a/dev/images/icons/contrast.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/contrast_decrease.png b/dev/images/icons/contrast_decrease.png
deleted file mode 100644
index db0c5566..00000000
--- a/dev/images/icons/contrast_decrease.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/contrast_high.png b/dev/images/icons/contrast_high.png
deleted file mode 100644
index 7a1f9bf3..00000000
--- a/dev/images/icons/contrast_high.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/contrast_increase.png b/dev/images/icons/contrast_increase.png
deleted file mode 100644
index 5789127c..00000000
--- a/dev/images/icons/contrast_increase.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/contrast_low.png b/dev/images/icons/contrast_low.png
deleted file mode 100644
index 472fe299..00000000
--- a/dev/images/icons/contrast_low.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/control_eject.png b/dev/images/icons/control_eject.png
deleted file mode 100644
index 891de892..00000000
--- a/dev/images/icons/control_eject.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/control_eject_blue.png b/dev/images/icons/control_eject_blue.png
deleted file mode 100644
index 9d46fbd2..00000000
--- a/dev/images/icons/control_eject_blue.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/control_end.png b/dev/images/icons/control_end.png
deleted file mode 100644
index b5d5da23..00000000
--- a/dev/images/icons/control_end.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/control_end_blue.png b/dev/images/icons/control_end_blue.png
deleted file mode 100644
index dc3dd6eb..00000000
--- a/dev/images/icons/control_end_blue.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/control_equalizer.png b/dev/images/icons/control_equalizer.png
deleted file mode 100644
index ba4814ab..00000000
--- a/dev/images/icons/control_equalizer.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/control_equalizer_blue.png b/dev/images/icons/control_equalizer_blue.png
deleted file mode 100644
index f7daf7d6..00000000
--- a/dev/images/icons/control_equalizer_blue.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/control_fastforward.png b/dev/images/icons/control_fastforward.png
deleted file mode 100644
index c6c9f71b..00000000
--- a/dev/images/icons/control_fastforward.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/control_fastforward_blue.png b/dev/images/icons/control_fastforward_blue.png
deleted file mode 100644
index 49edee46..00000000
--- a/dev/images/icons/control_fastforward_blue.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/control_pause.png b/dev/images/icons/control_pause.png
deleted file mode 100644
index 462e2f43..00000000
--- a/dev/images/icons/control_pause.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/control_pause_blue.png b/dev/images/icons/control_pause_blue.png
deleted file mode 100644
index f2c7e146..00000000
--- a/dev/images/icons/control_pause_blue.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/control_play.png b/dev/images/icons/control_play.png
deleted file mode 100644
index c7196090..00000000
--- a/dev/images/icons/control_play.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/control_play_blue.png b/dev/images/icons/control_play_blue.png
deleted file mode 100644
index 9a754ea6..00000000
--- a/dev/images/icons/control_play_blue.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/control_repeat.png b/dev/images/icons/control_repeat.png
deleted file mode 100644
index 601b41d4..00000000
--- a/dev/images/icons/control_repeat.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/control_repeat_blue.png b/dev/images/icons/control_repeat_blue.png
deleted file mode 100644
index f9874ae4..00000000
--- a/dev/images/icons/control_repeat_blue.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/control_rewind.png b/dev/images/icons/control_rewind.png
deleted file mode 100644
index c2fc4a33..00000000
--- a/dev/images/icons/control_rewind.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/control_rewind_blue.png b/dev/images/icons/control_rewind_blue.png
deleted file mode 100644
index 0ca473de..00000000
--- a/dev/images/icons/control_rewind_blue.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/control_start.png b/dev/images/icons/control_start.png
deleted file mode 100644
index 9d81ebde..00000000
--- a/dev/images/icons/control_start.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/control_start_blue.png b/dev/images/icons/control_start_blue.png
deleted file mode 100644
index 1cbf040f..00000000
--- a/dev/images/icons/control_start_blue.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/control_stop.png b/dev/images/icons/control_stop.png
deleted file mode 100644
index 3a2bceda..00000000
--- a/dev/images/icons/control_stop.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/control_stop_blue.png b/dev/images/icons/control_stop_blue.png
deleted file mode 100644
index 9589a2a1..00000000
--- a/dev/images/icons/control_stop_blue.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/controller.png b/dev/images/icons/controller.png
deleted file mode 100644
index 93fabdaf..00000000
--- a/dev/images/icons/controller.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/controller_add.png b/dev/images/icons/controller_add.png
deleted file mode 100644
index fa31e077..00000000
--- a/dev/images/icons/controller_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/controller_delete.png b/dev/images/icons/controller_delete.png
deleted file mode 100644
index 931b16d6..00000000
--- a/dev/images/icons/controller_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/controller_error.png b/dev/images/icons/controller_error.png
deleted file mode 100644
index ed93b8b4..00000000
--- a/dev/images/icons/controller_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/creditcards.png b/dev/images/icons/creditcards.png
deleted file mode 100644
index 807b5390..00000000
--- a/dev/images/icons/creditcards.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cross.png b/dev/images/icons/cross.png
deleted file mode 100644
index 9fc6a8c4..00000000
--- a/dev/images/icons/cross.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/css.png b/dev/images/icons/css.png
deleted file mode 100644
index 23f31018..00000000
--- a/dev/images/icons/css.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/css_add.png b/dev/images/icons/css_add.png
deleted file mode 100644
index 678e65be..00000000
--- a/dev/images/icons/css_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/css_delete.png b/dev/images/icons/css_delete.png
deleted file mode 100644
index 326aba44..00000000
--- a/dev/images/icons/css_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/css_go.png b/dev/images/icons/css_go.png
deleted file mode 100644
index 6cdf38c3..00000000
--- a/dev/images/icons/css_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/css_valid.png b/dev/images/icons/css_valid.png
deleted file mode 100644
index 4c72ca5a..00000000
--- a/dev/images/icons/css_valid.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cup.png b/dev/images/icons/cup.png
deleted file mode 100644
index 7f189fed..00000000
--- a/dev/images/icons/cup.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cup_add.png b/dev/images/icons/cup_add.png
deleted file mode 100644
index 5ec23e88..00000000
--- a/dev/images/icons/cup_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cup_delete.png b/dev/images/icons/cup_delete.png
deleted file mode 100644
index 896f5e18..00000000
--- a/dev/images/icons/cup_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cup_edit.png b/dev/images/icons/cup_edit.png
deleted file mode 100644
index 5eb44b6f..00000000
--- a/dev/images/icons/cup_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cup_error.png b/dev/images/icons/cup_error.png
deleted file mode 100644
index 833133ac..00000000
--- a/dev/images/icons/cup_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cup_go.png b/dev/images/icons/cup_go.png
deleted file mode 100644
index ddd61941..00000000
--- a/dev/images/icons/cup_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cup_key.png b/dev/images/icons/cup_key.png
deleted file mode 100644
index eec00a6a..00000000
--- a/dev/images/icons/cup_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cup_link.png b/dev/images/icons/cup_link.png
deleted file mode 100644
index 542033ae..00000000
--- a/dev/images/icons/cup_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cursor.png b/dev/images/icons/cursor.png
deleted file mode 100644
index 17344a83..00000000
--- a/dev/images/icons/cursor.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cut.png b/dev/images/icons/cut.png
deleted file mode 100644
index c27c45bd..00000000
--- a/dev/images/icons/cut.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/cut_red.png b/dev/images/icons/cut_red.png
deleted file mode 100644
index 36e474ab..00000000
--- a/dev/images/icons/cut_red.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/database.png b/dev/images/icons/database.png
deleted file mode 100644
index 1f170807..00000000
--- a/dev/images/icons/database.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/database_add.png b/dev/images/icons/database_add.png
deleted file mode 100644
index 567f7ae9..00000000
--- a/dev/images/icons/database_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/database_connect.png b/dev/images/icons/database_connect.png
deleted file mode 100644
index 3a111977..00000000
--- a/dev/images/icons/database_connect.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/database_delete.png b/dev/images/icons/database_delete.png
deleted file mode 100644
index cce652e8..00000000
--- a/dev/images/icons/database_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/database_edit.png b/dev/images/icons/database_edit.png
deleted file mode 100644
index 22839995..00000000
--- a/dev/images/icons/database_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/database_error.png b/dev/images/icons/database_error.png
deleted file mode 100644
index 578221aa..00000000
--- a/dev/images/icons/database_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/database_gear.png b/dev/images/icons/database_gear.png
deleted file mode 100644
index 682f845e..00000000
--- a/dev/images/icons/database_gear.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/database_go.png b/dev/images/icons/database_go.png
deleted file mode 100644
index 61a8556c..00000000
--- a/dev/images/icons/database_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/database_key.png b/dev/images/icons/database_key.png
deleted file mode 100644
index a9349248..00000000
--- a/dev/images/icons/database_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/database_lightning.png b/dev/images/icons/database_lightning.png
deleted file mode 100644
index d9eefc22..00000000
--- a/dev/images/icons/database_lightning.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/database_link.png b/dev/images/icons/database_link.png
deleted file mode 100644
index be4ca6c8..00000000
--- a/dev/images/icons/database_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/database_refresh.png b/dev/images/icons/database_refresh.png
deleted file mode 100644
index ff803be1..00000000
--- a/dev/images/icons/database_refresh.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/database_save.png b/dev/images/icons/database_save.png
deleted file mode 100644
index 44c06ddd..00000000
--- a/dev/images/icons/database_save.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/database_table.png b/dev/images/icons/database_table.png
deleted file mode 100644
index 25614381..00000000
--- a/dev/images/icons/database_table.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/date.png b/dev/images/icons/date.png
deleted file mode 100644
index 2a614246..00000000
--- a/dev/images/icons/date.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/date_add.png b/dev/images/icons/date_add.png
deleted file mode 100644
index 846c41aa..00000000
--- a/dev/images/icons/date_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/date_delete.png b/dev/images/icons/date_delete.png
deleted file mode 100644
index d3a17282..00000000
--- a/dev/images/icons/date_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/date_edit.png b/dev/images/icons/date_edit.png
deleted file mode 100644
index 11cc9c63..00000000
--- a/dev/images/icons/date_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/date_error.png b/dev/images/icons/date_error.png
deleted file mode 100644
index 30264a60..00000000
--- a/dev/images/icons/date_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/date_go.png b/dev/images/icons/date_go.png
deleted file mode 100644
index 7d8dfe77..00000000
--- a/dev/images/icons/date_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/date_link.png b/dev/images/icons/date_link.png
deleted file mode 100644
index 271961bd..00000000
--- a/dev/images/icons/date_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/date_magnify.png b/dev/images/icons/date_magnify.png
deleted file mode 100644
index 133151cc..00000000
--- a/dev/images/icons/date_magnify.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/date_next.png b/dev/images/icons/date_next.png
deleted file mode 100644
index d34a93ca..00000000
--- a/dev/images/icons/date_next.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/date_previous.png b/dev/images/icons/date_previous.png
deleted file mode 100644
index 6945b5f6..00000000
--- a/dev/images/icons/date_previous.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/delete.png b/dev/images/icons/delete.png
deleted file mode 100644
index a070cd8f..00000000
--- a/dev/images/icons/delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/disconnect.png b/dev/images/icons/disconnect.png
deleted file mode 100644
index 80f9e778..00000000
--- a/dev/images/icons/disconnect.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/disk.png b/dev/images/icons/disk.png
deleted file mode 100644
index 99d532e8..00000000
--- a/dev/images/icons/disk.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/disk_multiple.png b/dev/images/icons/disk_multiple.png
deleted file mode 100644
index d256081e..00000000
--- a/dev/images/icons/disk_multiple.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/door.png b/dev/images/icons/door.png
deleted file mode 100644
index 369fc46e..00000000
--- a/dev/images/icons/door.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/door_in.png b/dev/images/icons/door_in.png
deleted file mode 100644
index 41676a0a..00000000
--- a/dev/images/icons/door_in.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/door_open.png b/dev/images/icons/door_open.png
deleted file mode 100644
index 64bab57d..00000000
--- a/dev/images/icons/door_open.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/door_out.png b/dev/images/icons/door_out.png
deleted file mode 100644
index 2541d2bc..00000000
--- a/dev/images/icons/door_out.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/drink.png b/dev/images/icons/drink.png
deleted file mode 100644
index 984ab579..00000000
--- a/dev/images/icons/drink.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/drink_empty.png b/dev/images/icons/drink_empty.png
deleted file mode 100644
index bcbcf437..00000000
--- a/dev/images/icons/drink_empty.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/drive.png b/dev/images/icons/drive.png
deleted file mode 100644
index fc13bb12..00000000
--- a/dev/images/icons/drive.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/drive_add.png b/dev/images/icons/drive_add.png
deleted file mode 100644
index f3e6e174..00000000
--- a/dev/images/icons/drive_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/drive_burn.png b/dev/images/icons/drive_burn.png
deleted file mode 100644
index 80fd79f9..00000000
--- a/dev/images/icons/drive_burn.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/drive_cd.png b/dev/images/icons/drive_cd.png
deleted file mode 100644
index 36bd3b46..00000000
--- a/dev/images/icons/drive_cd.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/drive_cd_empty.png b/dev/images/icons/drive_cd_empty.png
deleted file mode 100644
index ac61c140..00000000
--- a/dev/images/icons/drive_cd_empty.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/drive_delete.png b/dev/images/icons/drive_delete.png
deleted file mode 100644
index e6eb1866..00000000
--- a/dev/images/icons/drive_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/drive_disk.png b/dev/images/icons/drive_disk.png
deleted file mode 100644
index 5a51e819..00000000
--- a/dev/images/icons/drive_disk.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/drive_edit.png b/dev/images/icons/drive_edit.png
deleted file mode 100644
index 0149c70c..00000000
--- a/dev/images/icons/drive_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/drive_error.png b/dev/images/icons/drive_error.png
deleted file mode 100644
index 309f6396..00000000
--- a/dev/images/icons/drive_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/drive_go.png b/dev/images/icons/drive_go.png
deleted file mode 100644
index fc53379e..00000000
--- a/dev/images/icons/drive_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/drive_key.png b/dev/images/icons/drive_key.png
deleted file mode 100644
index d0b3c673..00000000
--- a/dev/images/icons/drive_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/drive_link.png b/dev/images/icons/drive_link.png
deleted file mode 100644
index 3a34e1b6..00000000
--- a/dev/images/icons/drive_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/drive_magnify.png b/dev/images/icons/drive_magnify.png
deleted file mode 100644
index 0f0f4446..00000000
--- a/dev/images/icons/drive_magnify.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/drive_network.png b/dev/images/icons/drive_network.png
deleted file mode 100644
index 63d2d5d5..00000000
--- a/dev/images/icons/drive_network.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/drive_rename.png b/dev/images/icons/drive_rename.png
deleted file mode 100644
index e8b84438..00000000
--- a/dev/images/icons/drive_rename.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/drive_user.png b/dev/images/icons/drive_user.png
deleted file mode 100644
index 0b4751ce..00000000
--- a/dev/images/icons/drive_user.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/drive_web.png b/dev/images/icons/drive_web.png
deleted file mode 100644
index 8850a835..00000000
--- a/dev/images/icons/drive_web.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/dvd.png b/dev/images/icons/dvd.png
deleted file mode 100644
index 4461dd61..00000000
--- a/dev/images/icons/dvd.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/dvd_add.png b/dev/images/icons/dvd_add.png
deleted file mode 100644
index f76aff9b..00000000
--- a/dev/images/icons/dvd_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/dvd_delete.png b/dev/images/icons/dvd_delete.png
deleted file mode 100644
index 15a4bd53..00000000
--- a/dev/images/icons/dvd_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/dvd_edit.png b/dev/images/icons/dvd_edit.png
deleted file mode 100644
index 89d5a586..00000000
--- a/dev/images/icons/dvd_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/dvd_error.png b/dev/images/icons/dvd_error.png
deleted file mode 100644
index 924ff015..00000000
--- a/dev/images/icons/dvd_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/dvd_go.png b/dev/images/icons/dvd_go.png
deleted file mode 100644
index 7f9b20a1..00000000
--- a/dev/images/icons/dvd_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/dvd_key.png b/dev/images/icons/dvd_key.png
deleted file mode 100644
index af86bf16..00000000
--- a/dev/images/icons/dvd_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/dvd_link.png b/dev/images/icons/dvd_link.png
deleted file mode 100644
index a1c8ba57..00000000
--- a/dev/images/icons/dvd_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/email.png b/dev/images/icons/email.png
deleted file mode 100644
index 6c708435..00000000
--- a/dev/images/icons/email.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/email_add.png b/dev/images/icons/email_add.png
deleted file mode 100644
index 787ad0f4..00000000
--- a/dev/images/icons/email_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/email_attach.png b/dev/images/icons/email_attach.png
deleted file mode 100644
index 71d73185..00000000
--- a/dev/images/icons/email_attach.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/email_delete.png b/dev/images/icons/email_delete.png
deleted file mode 100644
index ef909191..00000000
--- a/dev/images/icons/email_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/email_edit.png b/dev/images/icons/email_edit.png
deleted file mode 100644
index 7f1429e6..00000000
--- a/dev/images/icons/email_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/email_error.png b/dev/images/icons/email_error.png
deleted file mode 100644
index 3a0e230c..00000000
--- a/dev/images/icons/email_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/email_go.png b/dev/images/icons/email_go.png
deleted file mode 100644
index 1d78f058..00000000
--- a/dev/images/icons/email_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/email_link.png b/dev/images/icons/email_link.png
deleted file mode 100644
index b18bb978..00000000
--- a/dev/images/icons/email_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/email_open.png b/dev/images/icons/email_open.png
deleted file mode 100644
index c5566bbe..00000000
--- a/dev/images/icons/email_open.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/email_open_image.png b/dev/images/icons/email_open_image.png
deleted file mode 100644
index 3a8ffd77..00000000
--- a/dev/images/icons/email_open_image.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/emoticon_evilgrin.png b/dev/images/icons/emoticon_evilgrin.png
deleted file mode 100644
index 80a193c6..00000000
--- a/dev/images/icons/emoticon_evilgrin.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/emoticon_grin.png b/dev/images/icons/emoticon_grin.png
deleted file mode 100644
index f6efa34f..00000000
--- a/dev/images/icons/emoticon_grin.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/emoticon_happy.png b/dev/images/icons/emoticon_happy.png
deleted file mode 100644
index 7c63925d..00000000
--- a/dev/images/icons/emoticon_happy.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/emoticon_smile.png b/dev/images/icons/emoticon_smile.png
deleted file mode 100644
index 3b94e4e9..00000000
--- a/dev/images/icons/emoticon_smile.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/emoticon_surprised.png b/dev/images/icons/emoticon_surprised.png
deleted file mode 100644
index 3bd1e58c..00000000
--- a/dev/images/icons/emoticon_surprised.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/emoticon_tongue.png b/dev/images/icons/emoticon_tongue.png
deleted file mode 100644
index 0f2e0693..00000000
--- a/dev/images/icons/emoticon_tongue.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/emoticon_unhappy.png b/dev/images/icons/emoticon_unhappy.png
deleted file mode 100644
index fd5bc070..00000000
--- a/dev/images/icons/emoticon_unhappy.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/emoticon_waii.png b/dev/images/icons/emoticon_waii.png
deleted file mode 100644
index 4f09e467..00000000
--- a/dev/images/icons/emoticon_waii.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/emoticon_wink.png b/dev/images/icons/emoticon_wink.png
deleted file mode 100644
index 66353436..00000000
--- a/dev/images/icons/emoticon_wink.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/error.png b/dev/images/icons/error.png
deleted file mode 100644
index f2e2e991..00000000
--- a/dev/images/icons/error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/error_add.png b/dev/images/icons/error_add.png
deleted file mode 100644
index 21c486c2..00000000
--- a/dev/images/icons/error_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/error_delete.png b/dev/images/icons/error_delete.png
deleted file mode 100644
index f77aa996..00000000
--- a/dev/images/icons/error_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/error_go.png b/dev/images/icons/error_go.png
deleted file mode 100644
index 80cd876b..00000000
--- a/dev/images/icons/error_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/exclamation.png b/dev/images/icons/exclamation.png
deleted file mode 100644
index 84898d94..00000000
--- a/dev/images/icons/exclamation.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/eye.png b/dev/images/icons/eye.png
deleted file mode 100644
index fe5d85a1..00000000
--- a/dev/images/icons/eye.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/feed.png b/dev/images/icons/feed.png
deleted file mode 100644
index f8d0f882..00000000
--- a/dev/images/icons/feed.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/feed_add.png b/dev/images/icons/feed_add.png
deleted file mode 100644
index a5a48296..00000000
--- a/dev/images/icons/feed_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/feed_delete.png b/dev/images/icons/feed_delete.png
deleted file mode 100644
index f81952cc..00000000
--- a/dev/images/icons/feed_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/feed_disk.png b/dev/images/icons/feed_disk.png
deleted file mode 100644
index a158c998..00000000
--- a/dev/images/icons/feed_disk.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/feed_edit.png b/dev/images/icons/feed_edit.png
deleted file mode 100644
index 3752de1e..00000000
--- a/dev/images/icons/feed_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/feed_error.png b/dev/images/icons/feed_error.png
deleted file mode 100644
index 8a3fb8ef..00000000
--- a/dev/images/icons/feed_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/feed_go.png b/dev/images/icons/feed_go.png
deleted file mode 100644
index 6d64ce2a..00000000
--- a/dev/images/icons/feed_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/feed_key.png b/dev/images/icons/feed_key.png
deleted file mode 100644
index f2fd7c56..00000000
--- a/dev/images/icons/feed_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/feed_link.png b/dev/images/icons/feed_link.png
deleted file mode 100644
index 54946027..00000000
--- a/dev/images/icons/feed_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/feed_magnify.png b/dev/images/icons/feed_magnify.png
deleted file mode 100644
index 475c0162..00000000
--- a/dev/images/icons/feed_magnify.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/female.png b/dev/images/icons/female.png
deleted file mode 100644
index 659f8500..00000000
--- a/dev/images/icons/female.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/film.png b/dev/images/icons/film.png
deleted file mode 100644
index ba10917f..00000000
--- a/dev/images/icons/film.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/film_add.png b/dev/images/icons/film_add.png
deleted file mode 100644
index e8bd813a..00000000
--- a/dev/images/icons/film_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/film_delete.png b/dev/images/icons/film_delete.png
deleted file mode 100644
index 9e6c8216..00000000
--- a/dev/images/icons/film_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/film_edit.png b/dev/images/icons/film_edit.png
deleted file mode 100644
index f3698651..00000000
--- a/dev/images/icons/film_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/film_error.png b/dev/images/icons/film_error.png
deleted file mode 100644
index 4d98eaad..00000000
--- a/dev/images/icons/film_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/film_go.png b/dev/images/icons/film_go.png
deleted file mode 100644
index 315a7033..00000000
--- a/dev/images/icons/film_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/film_key.png b/dev/images/icons/film_key.png
deleted file mode 100644
index 57860b5c..00000000
--- a/dev/images/icons/film_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/film_link.png b/dev/images/icons/film_link.png
deleted file mode 100644
index 4b17e0ea..00000000
--- a/dev/images/icons/film_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/film_save.png b/dev/images/icons/film_save.png
deleted file mode 100644
index bc8c0d35..00000000
--- a/dev/images/icons/film_save.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/find.png b/dev/images/icons/find.png
deleted file mode 100644
index b4eeed6a..00000000
--- a/dev/images/icons/find.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/flag_blue.png b/dev/images/icons/flag_blue.png
deleted file mode 100644
index bbbd8fa3..00000000
--- a/dev/images/icons/flag_blue.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/flag_green.png b/dev/images/icons/flag_green.png
deleted file mode 100644
index 9bf07837..00000000
--- a/dev/images/icons/flag_green.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/flag_orange.png b/dev/images/icons/flag_orange.png
deleted file mode 100644
index 0df74ebd..00000000
--- a/dev/images/icons/flag_orange.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/flag_pink.png b/dev/images/icons/flag_pink.png
deleted file mode 100644
index 09808813..00000000
--- a/dev/images/icons/flag_pink.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/flag_purple.png b/dev/images/icons/flag_purple.png
deleted file mode 100644
index c94a015d..00000000
--- a/dev/images/icons/flag_purple.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/flag_red.png b/dev/images/icons/flag_red.png
deleted file mode 100644
index 1f0da310..00000000
--- a/dev/images/icons/flag_red.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/flag_yellow.png b/dev/images/icons/flag_yellow.png
deleted file mode 100644
index 4a3cf326..00000000
--- a/dev/images/icons/flag_yellow.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder.png b/dev/images/icons/folder.png
deleted file mode 100644
index 784e8fa4..00000000
--- a/dev/images/icons/folder.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_add.png b/dev/images/icons/folder_add.png
deleted file mode 100644
index 816e0823..00000000
--- a/dev/images/icons/folder_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_bell.png b/dev/images/icons/folder_bell.png
deleted file mode 100644
index d3d13f1e..00000000
--- a/dev/images/icons/folder_bell.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_brick.png b/dev/images/icons/folder_brick.png
deleted file mode 100644
index b0415dcc..00000000
--- a/dev/images/icons/folder_brick.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_bug.png b/dev/images/icons/folder_bug.png
deleted file mode 100644
index 11a3f151..00000000
--- a/dev/images/icons/folder_bug.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_camera.png b/dev/images/icons/folder_camera.png
deleted file mode 100644
index c9519416..00000000
--- a/dev/images/icons/folder_camera.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_database.png b/dev/images/icons/folder_database.png
deleted file mode 100644
index 5193e2ef..00000000
--- a/dev/images/icons/folder_database.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_delete.png b/dev/images/icons/folder_delete.png
deleted file mode 100644
index da30cbbc..00000000
--- a/dev/images/icons/folder_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_edit.png b/dev/images/icons/folder_edit.png
deleted file mode 100644
index e53ac4f0..00000000
--- a/dev/images/icons/folder_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_error.png b/dev/images/icons/folder_error.png
deleted file mode 100644
index 5c2d07f3..00000000
--- a/dev/images/icons/folder_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_explore.png b/dev/images/icons/folder_explore.png
deleted file mode 100644
index b9c74924..00000000
--- a/dev/images/icons/folder_explore.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_feed.png b/dev/images/icons/folder_feed.png
deleted file mode 100644
index d06ee51e..00000000
--- a/dev/images/icons/folder_feed.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_find.png b/dev/images/icons/folder_find.png
deleted file mode 100644
index d0b24b2c..00000000
--- a/dev/images/icons/folder_find.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_go.png b/dev/images/icons/folder_go.png
deleted file mode 100644
index 34a736f7..00000000
--- a/dev/images/icons/folder_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_heart.png b/dev/images/icons/folder_heart.png
deleted file mode 100644
index b0d2bc32..00000000
--- a/dev/images/icons/folder_heart.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_image.png b/dev/images/icons/folder_image.png
deleted file mode 100644
index d5df75bb..00000000
--- a/dev/images/icons/folder_image.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_key.png b/dev/images/icons/folder_key.png
deleted file mode 100644
index fb9b4c2b..00000000
--- a/dev/images/icons/folder_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_lightbulb.png b/dev/images/icons/folder_lightbulb.png
deleted file mode 100644
index e0d9a345..00000000
--- a/dev/images/icons/folder_lightbulb.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_link.png b/dev/images/icons/folder_link.png
deleted file mode 100644
index 7e309de1..00000000
--- a/dev/images/icons/folder_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_magnify.png b/dev/images/icons/folder_magnify.png
deleted file mode 100644
index 0a3e7985..00000000
--- a/dev/images/icons/folder_magnify.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_page.png b/dev/images/icons/folder_page.png
deleted file mode 100644
index 1ef6e114..00000000
--- a/dev/images/icons/folder_page.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_page_white.png b/dev/images/icons/folder_page_white.png
deleted file mode 100644
index 6ad4b5d1..00000000
--- a/dev/images/icons/folder_page_white.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_palette.png b/dev/images/icons/folder_palette.png
deleted file mode 100644
index 9e50f844..00000000
--- a/dev/images/icons/folder_palette.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_picture.png b/dev/images/icons/folder_picture.png
deleted file mode 100644
index 052b3363..00000000
--- a/dev/images/icons/folder_picture.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_star.png b/dev/images/icons/folder_star.png
deleted file mode 100644
index 135a6c10..00000000
--- a/dev/images/icons/folder_star.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_table.png b/dev/images/icons/folder_table.png
deleted file mode 100644
index 473cee35..00000000
--- a/dev/images/icons/folder_table.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_user.png b/dev/images/icons/folder_user.png
deleted file mode 100644
index f021c3e1..00000000
--- a/dev/images/icons/folder_user.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/folder_wrench.png b/dev/images/icons/folder_wrench.png
deleted file mode 100644
index 0cfe80a2..00000000
--- a/dev/images/icons/folder_wrench.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/font.png b/dev/images/icons/font.png
deleted file mode 100644
index 8067f31e..00000000
--- a/dev/images/icons/font.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/font_add.png b/dev/images/icons/font_add.png
deleted file mode 100644
index 166a6d56..00000000
--- a/dev/images/icons/font_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/font_delete.png b/dev/images/icons/font_delete.png
deleted file mode 100644
index 8a5e58e9..00000000
--- a/dev/images/icons/font_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/font_go.png b/dev/images/icons/font_go.png
deleted file mode 100644
index 6e431b0f..00000000
--- a/dev/images/icons/font_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/group.png b/dev/images/icons/group.png
deleted file mode 100644
index 348d4e55..00000000
--- a/dev/images/icons/group.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/group_add.png b/dev/images/icons/group_add.png
deleted file mode 100644
index e2b590ec..00000000
--- a/dev/images/icons/group_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/group_delete.png b/dev/images/icons/group_delete.png
deleted file mode 100644
index e752af78..00000000
--- a/dev/images/icons/group_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/group_edit.png b/dev/images/icons/group_edit.png
deleted file mode 100644
index 8a47db54..00000000
--- a/dev/images/icons/group_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/group_error.png b/dev/images/icons/group_error.png
deleted file mode 100644
index b983cf55..00000000
--- a/dev/images/icons/group_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/group_gear.png b/dev/images/icons/group_gear.png
deleted file mode 100644
index fb7b43d0..00000000
--- a/dev/images/icons/group_gear.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/group_go.png b/dev/images/icons/group_go.png
deleted file mode 100644
index d6ac590d..00000000
--- a/dev/images/icons/group_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/group_key.png b/dev/images/icons/group_key.png
deleted file mode 100644
index 2cd50274..00000000
--- a/dev/images/icons/group_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/group_link.png b/dev/images/icons/group_link.png
deleted file mode 100644
index 0a257148..00000000
--- a/dev/images/icons/group_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/heart.png b/dev/images/icons/heart.png
deleted file mode 100644
index 99ac8bd1..00000000
--- a/dev/images/icons/heart.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/heart_add.png b/dev/images/icons/heart_add.png
deleted file mode 100644
index 95b59672..00000000
--- a/dev/images/icons/heart_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/heart_delete.png b/dev/images/icons/heart_delete.png
deleted file mode 100644
index f6a8a926..00000000
--- a/dev/images/icons/heart_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/help.png b/dev/images/icons/help.png
deleted file mode 100644
index 4e434bbe..00000000
--- a/dev/images/icons/help.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/hourglass.png b/dev/images/icons/hourglass.png
deleted file mode 100644
index f051b866..00000000
--- a/dev/images/icons/hourglass.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/hourglass_add.png b/dev/images/icons/hourglass_add.png
deleted file mode 100644
index 103888ec..00000000
--- a/dev/images/icons/hourglass_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/hourglass_delete.png b/dev/images/icons/hourglass_delete.png
deleted file mode 100644
index 0944f94f..00000000
--- a/dev/images/icons/hourglass_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/hourglass_go.png b/dev/images/icons/hourglass_go.png
deleted file mode 100644
index c7c7d03a..00000000
--- a/dev/images/icons/hourglass_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/hourglass_link.png b/dev/images/icons/hourglass_link.png
deleted file mode 100644
index 08c1e130..00000000
--- a/dev/images/icons/hourglass_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/house.png b/dev/images/icons/house.png
deleted file mode 100644
index 09cf5216..00000000
--- a/dev/images/icons/house.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/house_go.png b/dev/images/icons/house_go.png
deleted file mode 100644
index c5cc7b7a..00000000
--- a/dev/images/icons/house_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/house_link.png b/dev/images/icons/house_link.png
deleted file mode 100644
index 5b7ddfb7..00000000
--- a/dev/images/icons/house_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/html.png b/dev/images/icons/html.png
deleted file mode 100644
index 55d1072e..00000000
--- a/dev/images/icons/html.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/html_add.png b/dev/images/icons/html_add.png
deleted file mode 100644
index 33fd596c..00000000
--- a/dev/images/icons/html_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/html_delete.png b/dev/images/icons/html_delete.png
deleted file mode 100644
index 1bd28489..00000000
--- a/dev/images/icons/html_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/html_go.png b/dev/images/icons/html_go.png
deleted file mode 100644
index a95cede1..00000000
--- a/dev/images/icons/html_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/html_valid.png b/dev/images/icons/html_valid.png
deleted file mode 100644
index 71cec924..00000000
--- a/dev/images/icons/html_valid.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/image.png b/dev/images/icons/image.png
deleted file mode 100644
index ba97ec2e..00000000
--- a/dev/images/icons/image.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/image_add.png b/dev/images/icons/image_add.png
deleted file mode 100644
index 38d91de9..00000000
--- a/dev/images/icons/image_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/image_delete.png b/dev/images/icons/image_delete.png
deleted file mode 100644
index 6d4839fb..00000000
--- a/dev/images/icons/image_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/image_edit.png b/dev/images/icons/image_edit.png
deleted file mode 100644
index b5c724aa..00000000
--- a/dev/images/icons/image_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/image_link.png b/dev/images/icons/image_link.png
deleted file mode 100644
index adee1b7d..00000000
--- a/dev/images/icons/image_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/images.png b/dev/images/icons/images.png
deleted file mode 100644
index 12027a83..00000000
--- a/dev/images/icons/images.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/information.png b/dev/images/icons/information.png
deleted file mode 100644
index f61dc868..00000000
--- a/dev/images/icons/information.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/ipod.png b/dev/images/icons/ipod.png
deleted file mode 100644
index 3f768da5..00000000
--- a/dev/images/icons/ipod.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/ipod_cast.png b/dev/images/icons/ipod_cast.png
deleted file mode 100644
index 0027d18f..00000000
--- a/dev/images/icons/ipod_cast.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/ipod_cast_add.png b/dev/images/icons/ipod_cast_add.png
deleted file mode 100644
index 8223c453..00000000
--- a/dev/images/icons/ipod_cast_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/ipod_cast_delete.png b/dev/images/icons/ipod_cast_delete.png
deleted file mode 100644
index 4835b999..00000000
--- a/dev/images/icons/ipod_cast_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/ipod_sound.png b/dev/images/icons/ipod_sound.png
deleted file mode 100644
index fef6e8ba..00000000
--- a/dev/images/icons/ipod_sound.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/joystick.png b/dev/images/icons/joystick.png
deleted file mode 100644
index 62168f56..00000000
--- a/dev/images/icons/joystick.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/joystick_add.png b/dev/images/icons/joystick_add.png
deleted file mode 100644
index fb06a506..00000000
--- a/dev/images/icons/joystick_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/joystick_delete.png b/dev/images/icons/joystick_delete.png
deleted file mode 100644
index 5c0256fe..00000000
--- a/dev/images/icons/joystick_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/joystick_error.png b/dev/images/icons/joystick_error.png
deleted file mode 100644
index 16454062..00000000
--- a/dev/images/icons/joystick_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/key.png b/dev/images/icons/key.png
deleted file mode 100644
index 35e1fd69..00000000
--- a/dev/images/icons/key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/key_add.png b/dev/images/icons/key_add.png
deleted file mode 100644
index 5c79cee3..00000000
--- a/dev/images/icons/key_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/key_delete.png b/dev/images/icons/key_delete.png
deleted file mode 100644
index d28209c0..00000000
--- a/dev/images/icons/key_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/key_go.png b/dev/images/icons/key_go.png
deleted file mode 100644
index 64a5a963..00000000
--- a/dev/images/icons/key_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/keyboard.png b/dev/images/icons/keyboard.png
deleted file mode 100644
index 0be818ae..00000000
--- a/dev/images/icons/keyboard.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/keyboard_add.png b/dev/images/icons/keyboard_add.png
deleted file mode 100644
index 03c739c7..00000000
--- a/dev/images/icons/keyboard_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/keyboard_delete.png b/dev/images/icons/keyboard_delete.png
deleted file mode 100644
index de188daa..00000000
--- a/dev/images/icons/keyboard_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/keyboard_magnify.png b/dev/images/icons/keyboard_magnify.png
deleted file mode 100644
index ad7d197f..00000000
--- a/dev/images/icons/keyboard_magnify.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/layers.png b/dev/images/icons/layers.png
deleted file mode 100644
index 00818f63..00000000
--- a/dev/images/icons/layers.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/layout.png b/dev/images/icons/layout.png
deleted file mode 100644
index 70b1451d..00000000
--- a/dev/images/icons/layout.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/layout_add.png b/dev/images/icons/layout_add.png
deleted file mode 100644
index 2d155491..00000000
--- a/dev/images/icons/layout_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/layout_content.png b/dev/images/icons/layout_content.png
deleted file mode 100644
index b4aaad9a..00000000
--- a/dev/images/icons/layout_content.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/layout_delete.png b/dev/images/icons/layout_delete.png
deleted file mode 100644
index c80da292..00000000
--- a/dev/images/icons/layout_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/layout_edit.png b/dev/images/icons/layout_edit.png
deleted file mode 100644
index 7ffa64bd..00000000
--- a/dev/images/icons/layout_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/layout_error.png b/dev/images/icons/layout_error.png
deleted file mode 100644
index 5bcbe2b4..00000000
--- a/dev/images/icons/layout_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/layout_header.png b/dev/images/icons/layout_header.png
deleted file mode 100644
index 5e96f25d..00000000
--- a/dev/images/icons/layout_header.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/layout_link.png b/dev/images/icons/layout_link.png
deleted file mode 100644
index c102283a..00000000
--- a/dev/images/icons/layout_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/layout_sidebar.png b/dev/images/icons/layout_sidebar.png
deleted file mode 100644
index 6dc95e89..00000000
--- a/dev/images/icons/layout_sidebar.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/lightbulb.png b/dev/images/icons/lightbulb.png
deleted file mode 100644
index 7fb193fb..00000000
--- a/dev/images/icons/lightbulb.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/lightbulb_add.png b/dev/images/icons/lightbulb_add.png
deleted file mode 100644
index 9efdf33c..00000000
--- a/dev/images/icons/lightbulb_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/lightbulb_delete.png b/dev/images/icons/lightbulb_delete.png
deleted file mode 100644
index 57216f0b..00000000
--- a/dev/images/icons/lightbulb_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/lightbulb_off.png b/dev/images/icons/lightbulb_off.png
deleted file mode 100644
index c85f9101..00000000
--- a/dev/images/icons/lightbulb_off.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/lightning.png b/dev/images/icons/lightning.png
deleted file mode 100644
index 495c6897..00000000
--- a/dev/images/icons/lightning.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/lightning_add.png b/dev/images/icons/lightning_add.png
deleted file mode 100644
index 958ae968..00000000
--- a/dev/images/icons/lightning_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/lightning_delete.png b/dev/images/icons/lightning_delete.png
deleted file mode 100644
index 68dc85b0..00000000
--- a/dev/images/icons/lightning_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/lightning_go.png b/dev/images/icons/lightning_go.png
deleted file mode 100644
index 50c6e8a4..00000000
--- a/dev/images/icons/lightning_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/link.png b/dev/images/icons/link.png
deleted file mode 100644
index 25eacb7c..00000000
--- a/dev/images/icons/link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/link_add.png b/dev/images/icons/link_add.png
deleted file mode 100644
index 67a50f80..00000000
--- a/dev/images/icons/link_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/link_break.png b/dev/images/icons/link_break.png
deleted file mode 100644
index 0a7b4766..00000000
--- a/dev/images/icons/link_break.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/link_delete.png b/dev/images/icons/link_delete.png
deleted file mode 100644
index f987a73b..00000000
--- a/dev/images/icons/link_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/link_edit.png b/dev/images/icons/link_edit.png
deleted file mode 100644
index 3e55167e..00000000
--- a/dev/images/icons/link_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/link_error.png b/dev/images/icons/link_error.png
deleted file mode 100644
index c29f97e7..00000000
--- a/dev/images/icons/link_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/link_go.png b/dev/images/icons/link_go.png
deleted file mode 100644
index 86c2a825..00000000
--- a/dev/images/icons/link_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/lock.png b/dev/images/icons/lock.png
deleted file mode 100644
index 2ebc4f6f..00000000
--- a/dev/images/icons/lock.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/lock_add.png b/dev/images/icons/lock_add.png
deleted file mode 100644
index 8eb3ba4a..00000000
--- a/dev/images/icons/lock_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/lock_break.png b/dev/images/icons/lock_break.png
deleted file mode 100644
index 13578ab5..00000000
--- a/dev/images/icons/lock_break.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/lock_delete.png b/dev/images/icons/lock_delete.png
deleted file mode 100644
index ecb50a93..00000000
--- a/dev/images/icons/lock_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/lock_edit.png b/dev/images/icons/lock_edit.png
deleted file mode 100644
index 116aa5b7..00000000
--- a/dev/images/icons/lock_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/lock_go.png b/dev/images/icons/lock_go.png
deleted file mode 100644
index 8c7c89b2..00000000
--- a/dev/images/icons/lock_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/lock_open.png b/dev/images/icons/lock_open.png
deleted file mode 100644
index a471765f..00000000
--- a/dev/images/icons/lock_open.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/lorry.png b/dev/images/icons/lorry.png
deleted file mode 100644
index 8f95f5a5..00000000
--- a/dev/images/icons/lorry.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/lorry_add.png b/dev/images/icons/lorry_add.png
deleted file mode 100644
index 849626c6..00000000
--- a/dev/images/icons/lorry_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/lorry_delete.png b/dev/images/icons/lorry_delete.png
deleted file mode 100644
index 66217f52..00000000
--- a/dev/images/icons/lorry_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/lorry_error.png b/dev/images/icons/lorry_error.png
deleted file mode 100644
index 3619ead9..00000000
--- a/dev/images/icons/lorry_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/lorry_flatbed.png b/dev/images/icons/lorry_flatbed.png
deleted file mode 100644
index be5e1d94..00000000
--- a/dev/images/icons/lorry_flatbed.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/lorry_go.png b/dev/images/icons/lorry_go.png
deleted file mode 100644
index 1c296a6a..00000000
--- a/dev/images/icons/lorry_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/lorry_link.png b/dev/images/icons/lorry_link.png
deleted file mode 100644
index 5ffe27f4..00000000
--- a/dev/images/icons/lorry_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/magifier_zoom_out.png b/dev/images/icons/magifier_zoom_out.png
deleted file mode 100644
index c3cb92d1..00000000
--- a/dev/images/icons/magifier_zoom_out.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/magnifier.png b/dev/images/icons/magnifier.png
deleted file mode 100644
index 52f6ac62..00000000
--- a/dev/images/icons/magnifier.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/magnifier_zoom_in.png b/dev/images/icons/magnifier_zoom_in.png
deleted file mode 100644
index 5b8d2995..00000000
--- a/dev/images/icons/magnifier_zoom_in.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/male.png b/dev/images/icons/male.png
deleted file mode 100644
index d3392732..00000000
--- a/dev/images/icons/male.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/map.png b/dev/images/icons/map.png
deleted file mode 100644
index f90ef25e..00000000
--- a/dev/images/icons/map.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/map_add.png b/dev/images/icons/map_add.png
deleted file mode 100644
index 2b72da06..00000000
--- a/dev/images/icons/map_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/map_delete.png b/dev/images/icons/map_delete.png
deleted file mode 100644
index e74402f9..00000000
--- a/dev/images/icons/map_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/map_edit.png b/dev/images/icons/map_edit.png
deleted file mode 100644
index 2b9d6ee1..00000000
--- a/dev/images/icons/map_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/map_go.png b/dev/images/icons/map_go.png
deleted file mode 100644
index 11eab26d..00000000
--- a/dev/images/icons/map_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/map_magnify.png b/dev/images/icons/map_magnify.png
deleted file mode 100644
index 7184c9dd..00000000
--- a/dev/images/icons/map_magnify.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/medal_bronze_1.png b/dev/images/icons/medal_bronze_1.png
deleted file mode 100644
index 5f8a6d65..00000000
--- a/dev/images/icons/medal_bronze_1.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/medal_bronze_2.png b/dev/images/icons/medal_bronze_2.png
deleted file mode 100644
index 623d68c5..00000000
--- a/dev/images/icons/medal_bronze_2.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/medal_bronze_3.png b/dev/images/icons/medal_bronze_3.png
deleted file mode 100644
index ed3f43eb..00000000
--- a/dev/images/icons/medal_bronze_3.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/medal_bronze_add.png b/dev/images/icons/medal_bronze_add.png
deleted file mode 100644
index 8487b2c1..00000000
--- a/dev/images/icons/medal_bronze_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/medal_bronze_delete.png b/dev/images/icons/medal_bronze_delete.png
deleted file mode 100644
index d32aed72..00000000
--- a/dev/images/icons/medal_bronze_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/medal_gold_1.png b/dev/images/icons/medal_gold_1.png
deleted file mode 100644
index 87584dc9..00000000
--- a/dev/images/icons/medal_gold_1.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/medal_gold_2.png b/dev/images/icons/medal_gold_2.png
deleted file mode 100644
index fa3a15dd..00000000
--- a/dev/images/icons/medal_gold_2.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/medal_gold_3.png b/dev/images/icons/medal_gold_3.png
deleted file mode 100644
index ef1b08b9..00000000
--- a/dev/images/icons/medal_gold_3.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/medal_gold_add.png b/dev/images/icons/medal_gold_add.png
deleted file mode 100644
index dcade0d8..00000000
--- a/dev/images/icons/medal_gold_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/medal_gold_delete.png b/dev/images/icons/medal_gold_delete.png
deleted file mode 100644
index 84b06d5b..00000000
--- a/dev/images/icons/medal_gold_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/medal_silver_1.png b/dev/images/icons/medal_silver_1.png
deleted file mode 100644
index 75a64da3..00000000
--- a/dev/images/icons/medal_silver_1.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/medal_silver_2.png b/dev/images/icons/medal_silver_2.png
deleted file mode 100644
index 2e0fe75c..00000000
--- a/dev/images/icons/medal_silver_2.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/medal_silver_3.png b/dev/images/icons/medal_silver_3.png
deleted file mode 100644
index e385b546..00000000
--- a/dev/images/icons/medal_silver_3.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/medal_silver_add.png b/dev/images/icons/medal_silver_add.png
deleted file mode 100644
index 782d6d34..00000000
--- a/dev/images/icons/medal_silver_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/medal_silver_delete.png b/dev/images/icons/medal_silver_delete.png
deleted file mode 100644
index 06cab467..00000000
--- a/dev/images/icons/medal_silver_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/money.png b/dev/images/icons/money.png
deleted file mode 100644
index bbd33b63..00000000
--- a/dev/images/icons/money.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/money_add.png b/dev/images/icons/money_add.png
deleted file mode 100644
index 0fd9e397..00000000
--- a/dev/images/icons/money_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/money_delete.png b/dev/images/icons/money_delete.png
deleted file mode 100644
index d07d4c43..00000000
--- a/dev/images/icons/money_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/money_dollar.png b/dev/images/icons/money_dollar.png
deleted file mode 100644
index 712c6cd2..00000000
--- a/dev/images/icons/money_dollar.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/money_euro.png b/dev/images/icons/money_euro.png
deleted file mode 100644
index f4314544..00000000
--- a/dev/images/icons/money_euro.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/money_pound.png b/dev/images/icons/money_pound.png
deleted file mode 100644
index 46aa7bce..00000000
--- a/dev/images/icons/money_pound.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/money_yen.png b/dev/images/icons/money_yen.png
deleted file mode 100644
index 550628a8..00000000
--- a/dev/images/icons/money_yen.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/monitor.png b/dev/images/icons/monitor.png
deleted file mode 100644
index d040bd02..00000000
--- a/dev/images/icons/monitor.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/monitor_add.png b/dev/images/icons/monitor_add.png
deleted file mode 100644
index a8180664..00000000
--- a/dev/images/icons/monitor_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/monitor_delete.png b/dev/images/icons/monitor_delete.png
deleted file mode 100644
index 37332563..00000000
--- a/dev/images/icons/monitor_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/monitor_edit.png b/dev/images/icons/monitor_edit.png
deleted file mode 100644
index 3694e412..00000000
--- a/dev/images/icons/monitor_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/monitor_error.png b/dev/images/icons/monitor_error.png
deleted file mode 100644
index 270c5018..00000000
--- a/dev/images/icons/monitor_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/monitor_go.png b/dev/images/icons/monitor_go.png
deleted file mode 100644
index 8af3eda9..00000000
--- a/dev/images/icons/monitor_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/monitor_lightning.png b/dev/images/icons/monitor_lightning.png
deleted file mode 100644
index 06e53a9d..00000000
--- a/dev/images/icons/monitor_lightning.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/monitor_link.png b/dev/images/icons/monitor_link.png
deleted file mode 100644
index a014b025..00000000
--- a/dev/images/icons/monitor_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/mouse.png b/dev/images/icons/mouse.png
deleted file mode 100644
index 8d23e9fb..00000000
--- a/dev/images/icons/mouse.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/mouse_add.png b/dev/images/icons/mouse_add.png
deleted file mode 100644
index 0043f657..00000000
--- a/dev/images/icons/mouse_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/mouse_delete.png b/dev/images/icons/mouse_delete.png
deleted file mode 100644
index 4900b978..00000000
--- a/dev/images/icons/mouse_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/mouse_error.png b/dev/images/icons/mouse_error.png
deleted file mode 100644
index 15609c4a..00000000
--- a/dev/images/icons/mouse_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/music.png b/dev/images/icons/music.png
deleted file mode 100644
index 8aa9c7de..00000000
--- a/dev/images/icons/music.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/new.png b/dev/images/icons/new.png
deleted file mode 100644
index 213261c7..00000000
--- a/dev/images/icons/new.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/newspaper.png b/dev/images/icons/newspaper.png
deleted file mode 100644
index b0675a6f..00000000
--- a/dev/images/icons/newspaper.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/newspaper_add.png b/dev/images/icons/newspaper_add.png
deleted file mode 100644
index b3039cd1..00000000
--- a/dev/images/icons/newspaper_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/newspaper_delete.png b/dev/images/icons/newspaper_delete.png
deleted file mode 100644
index 25ffa762..00000000
--- a/dev/images/icons/newspaper_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/newspaper_go.png b/dev/images/icons/newspaper_go.png
deleted file mode 100644
index cce10887..00000000
--- a/dev/images/icons/newspaper_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/newspaper_link.png b/dev/images/icons/newspaper_link.png
deleted file mode 100644
index 872e481e..00000000
--- a/dev/images/icons/newspaper_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/note.png b/dev/images/icons/note.png
deleted file mode 100644
index 244e6ca0..00000000
--- a/dev/images/icons/note.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/note_add.png b/dev/images/icons/note_add.png
deleted file mode 100644
index ff79b5b9..00000000
--- a/dev/images/icons/note_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/note_delete.png b/dev/images/icons/note_delete.png
deleted file mode 100644
index 3bc7c041..00000000
--- a/dev/images/icons/note_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/note_edit.png b/dev/images/icons/note_edit.png
deleted file mode 100644
index 0522825b..00000000
--- a/dev/images/icons/note_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/note_error.png b/dev/images/icons/note_error.png
deleted file mode 100644
index 896dadfd..00000000
--- a/dev/images/icons/note_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/note_go.png b/dev/images/icons/note_go.png
deleted file mode 100644
index 49e54fd8..00000000
--- a/dev/images/icons/note_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/overlays.png b/dev/images/icons/overlays.png
deleted file mode 100644
index 7ffa64bd..00000000
--- a/dev/images/icons/overlays.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/package.png b/dev/images/icons/package.png
deleted file mode 100644
index 8bafc7a1..00000000
--- a/dev/images/icons/package.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/package_add.png b/dev/images/icons/package_add.png
deleted file mode 100644
index 49ece3d6..00000000
--- a/dev/images/icons/package_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/package_delete.png b/dev/images/icons/package_delete.png
deleted file mode 100644
index 5c941bb9..00000000
--- a/dev/images/icons/package_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/package_go.png b/dev/images/icons/package_go.png
deleted file mode 100644
index 4feaf0a7..00000000
--- a/dev/images/icons/package_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/package_green.png b/dev/images/icons/package_green.png
deleted file mode 100644
index 37560dce..00000000
--- a/dev/images/icons/package_green.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/package_link.png b/dev/images/icons/package_link.png
deleted file mode 100644
index 9e872dca..00000000
--- a/dev/images/icons/package_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page.png b/dev/images/icons/page.png
deleted file mode 100644
index 03ddd799..00000000
--- a/dev/images/icons/page.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_add.png b/dev/images/icons/page_add.png
deleted file mode 100644
index d5bfa071..00000000
--- a/dev/images/icons/page_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_attach.png b/dev/images/icons/page_attach.png
deleted file mode 100644
index 89ee2da0..00000000
--- a/dev/images/icons/page_attach.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_code.png b/dev/images/icons/page_code.png
deleted file mode 100644
index f7ea9041..00000000
--- a/dev/images/icons/page_code.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_copy.png b/dev/images/icons/page_copy.png
deleted file mode 100644
index 96f63989..00000000
--- a/dev/images/icons/page_copy.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_delete.png b/dev/images/icons/page_delete.png
deleted file mode 100644
index 3141467c..00000000
--- a/dev/images/icons/page_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_edit.png b/dev/images/icons/page_edit.png
deleted file mode 100644
index 046811ed..00000000
--- a/dev/images/icons/page_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_error.png b/dev/images/icons/page_error.png
deleted file mode 100644
index f07f449a..00000000
--- a/dev/images/icons/page_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_excel.png b/dev/images/icons/page_excel.png
deleted file mode 100644
index 7fdb6431..00000000
--- a/dev/images/icons/page_excel.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_find.png b/dev/images/icons/page_find.png
deleted file mode 100644
index 2f193889..00000000
--- a/dev/images/icons/page_find.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_gear.png b/dev/images/icons/page_gear.png
deleted file mode 100644
index 8e83281c..00000000
--- a/dev/images/icons/page_gear.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_go.png b/dev/images/icons/page_go.png
deleted file mode 100644
index 80fe1ed0..00000000
--- a/dev/images/icons/page_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_green.png b/dev/images/icons/page_green.png
deleted file mode 100644
index de8e003f..00000000
--- a/dev/images/icons/page_green.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_key.png b/dev/images/icons/page_key.png
deleted file mode 100644
index d6626cb0..00000000
--- a/dev/images/icons/page_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_lightning.png b/dev/images/icons/page_lightning.png
deleted file mode 100644
index 7e568703..00000000
--- a/dev/images/icons/page_lightning.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_link.png b/dev/images/icons/page_link.png
deleted file mode 100644
index 3fca5716..00000000
--- a/dev/images/icons/page_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_paintbrush.png b/dev/images/icons/page_paintbrush.png
deleted file mode 100644
index 246a2f0b..00000000
--- a/dev/images/icons/page_paintbrush.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_paste.png b/dev/images/icons/page_paste.png
deleted file mode 100644
index 968f073f..00000000
--- a/dev/images/icons/page_paste.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_red.png b/dev/images/icons/page_red.png
deleted file mode 100644
index 0b18247d..00000000
--- a/dev/images/icons/page_red.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_refresh.png b/dev/images/icons/page_refresh.png
deleted file mode 100644
index cf347c7d..00000000
--- a/dev/images/icons/page_refresh.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_save.png b/dev/images/icons/page_save.png
deleted file mode 100644
index caea546a..00000000
--- a/dev/images/icons/page_save.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white.png b/dev/images/icons/page_white.png
deleted file mode 100644
index 8b8b1ca0..00000000
--- a/dev/images/icons/page_white.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_acrobat.png b/dev/images/icons/page_white_acrobat.png
deleted file mode 100644
index 09121d90..00000000
--- a/dev/images/icons/page_white_acrobat.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_actionscript.png b/dev/images/icons/page_white_actionscript.png
deleted file mode 100644
index fbc23038..00000000
--- a/dev/images/icons/page_white_actionscript.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_add.png b/dev/images/icons/page_white_add.png
deleted file mode 100644
index c1b24222..00000000
--- a/dev/images/icons/page_white_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_c.png b/dev/images/icons/page_white_c.png
deleted file mode 100644
index 928a3289..00000000
--- a/dev/images/icons/page_white_c.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_camera.png b/dev/images/icons/page_white_camera.png
deleted file mode 100644
index 35286191..00000000
--- a/dev/images/icons/page_white_camera.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_cd.png b/dev/images/icons/page_white_cd.png
deleted file mode 100644
index cb14e9dc..00000000
--- a/dev/images/icons/page_white_cd.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_code.png b/dev/images/icons/page_white_code.png
deleted file mode 100644
index bd566cba..00000000
--- a/dev/images/icons/page_white_code.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_code_red.png b/dev/images/icons/page_white_code_red.png
deleted file mode 100644
index 4ebfda4b..00000000
--- a/dev/images/icons/page_white_code_red.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_coldfusion.png b/dev/images/icons/page_white_coldfusion.png
deleted file mode 100644
index 2f4ef336..00000000
--- a/dev/images/icons/page_white_coldfusion.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_compressed.png b/dev/images/icons/page_white_compressed.png
deleted file mode 100644
index 7d33267a..00000000
--- a/dev/images/icons/page_white_compressed.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_copy.png b/dev/images/icons/page_white_copy.png
deleted file mode 100644
index a9f31a27..00000000
--- a/dev/images/icons/page_white_copy.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_cplusplus.png b/dev/images/icons/page_white_cplusplus.png
deleted file mode 100644
index 50a118c1..00000000
--- a/dev/images/icons/page_white_cplusplus.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_csharp.png b/dev/images/icons/page_white_csharp.png
deleted file mode 100644
index 42f8c622..00000000
--- a/dev/images/icons/page_white_csharp.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_cup.png b/dev/images/icons/page_white_cup.png
deleted file mode 100644
index 6dac21ec..00000000
--- a/dev/images/icons/page_white_cup.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_database.png b/dev/images/icons/page_white_database.png
deleted file mode 100644
index 6fa67df5..00000000
--- a/dev/images/icons/page_white_database.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_delete.png b/dev/images/icons/page_white_delete.png
deleted file mode 100644
index b81c3e3f..00000000
--- a/dev/images/icons/page_white_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_dvd.png b/dev/images/icons/page_white_dvd.png
deleted file mode 100644
index 9527f056..00000000
--- a/dev/images/icons/page_white_dvd.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_edit.png b/dev/images/icons/page_white_edit.png
deleted file mode 100644
index 452cedbb..00000000
--- a/dev/images/icons/page_white_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_error.png b/dev/images/icons/page_white_error.png
deleted file mode 100644
index ce3ff87b..00000000
--- a/dev/images/icons/page_white_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_excel.png b/dev/images/icons/page_white_excel.png
deleted file mode 100644
index c413f66b..00000000
--- a/dev/images/icons/page_white_excel.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_find.png b/dev/images/icons/page_white_find.png
deleted file mode 100644
index b61b381e..00000000
--- a/dev/images/icons/page_white_find.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_flash.png b/dev/images/icons/page_white_flash.png
deleted file mode 100644
index 5d38981d..00000000
--- a/dev/images/icons/page_white_flash.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_freehand.png b/dev/images/icons/page_white_freehand.png
deleted file mode 100644
index 71c07004..00000000
--- a/dev/images/icons/page_white_freehand.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_gear.png b/dev/images/icons/page_white_gear.png
deleted file mode 100644
index 995731fb..00000000
--- a/dev/images/icons/page_white_gear.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_get.png b/dev/images/icons/page_white_get.png
deleted file mode 100644
index e592f2c1..00000000
--- a/dev/images/icons/page_white_get.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_go.png b/dev/images/icons/page_white_go.png
deleted file mode 100644
index 780801e8..00000000
--- a/dev/images/icons/page_white_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_h.png b/dev/images/icons/page_white_h.png
deleted file mode 100644
index 748628fa..00000000
--- a/dev/images/icons/page_white_h.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_horizontal.png b/dev/images/icons/page_white_horizontal.png
deleted file mode 100644
index 1d2d0a49..00000000
--- a/dev/images/icons/page_white_horizontal.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_key.png b/dev/images/icons/page_white_key.png
deleted file mode 100644
index 8b60fdeb..00000000
--- a/dev/images/icons/page_white_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_lightning.png b/dev/images/icons/page_white_lightning.png
deleted file mode 100644
index 222b9440..00000000
--- a/dev/images/icons/page_white_lightning.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_link.png b/dev/images/icons/page_white_link.png
deleted file mode 100644
index 53026a46..00000000
--- a/dev/images/icons/page_white_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_magnify.png b/dev/images/icons/page_white_magnify.png
deleted file mode 100644
index 141b99eb..00000000
--- a/dev/images/icons/page_white_magnify.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_medal.png b/dev/images/icons/page_white_medal.png
deleted file mode 100644
index dce054db..00000000
--- a/dev/images/icons/page_white_medal.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_office.png b/dev/images/icons/page_white_office.png
deleted file mode 100644
index 5f29221b..00000000
--- a/dev/images/icons/page_white_office.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_paint.png b/dev/images/icons/page_white_paint.png
deleted file mode 100644
index b68b6ac1..00000000
--- a/dev/images/icons/page_white_paint.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_paintbrush.png b/dev/images/icons/page_white_paintbrush.png
deleted file mode 100644
index f1d7520a..00000000
--- a/dev/images/icons/page_white_paintbrush.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_paste.png b/dev/images/icons/page_white_paste.png
deleted file mode 100644
index 07861f38..00000000
--- a/dev/images/icons/page_white_paste.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_php.png b/dev/images/icons/page_white_php.png
deleted file mode 100644
index ed3bfd34..00000000
--- a/dev/images/icons/page_white_php.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_picture.png b/dev/images/icons/page_white_picture.png
deleted file mode 100644
index 14d43713..00000000
--- a/dev/images/icons/page_white_picture.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_powerpoint.png b/dev/images/icons/page_white_powerpoint.png
deleted file mode 100644
index fbc471c0..00000000
--- a/dev/images/icons/page_white_powerpoint.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_put.png b/dev/images/icons/page_white_put.png
deleted file mode 100644
index 2a1ea72d..00000000
--- a/dev/images/icons/page_white_put.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_ruby.png b/dev/images/icons/page_white_ruby.png
deleted file mode 100644
index 1b42bcd1..00000000
--- a/dev/images/icons/page_white_ruby.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_stack.png b/dev/images/icons/page_white_stack.png
deleted file mode 100644
index 44084add..00000000
--- a/dev/images/icons/page_white_stack.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_star.png b/dev/images/icons/page_white_star.png
deleted file mode 100644
index c19f3711..00000000
--- a/dev/images/icons/page_white_star.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_swoosh.png b/dev/images/icons/page_white_swoosh.png
deleted file mode 100644
index e19dfac0..00000000
--- a/dev/images/icons/page_white_swoosh.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_text.png b/dev/images/icons/page_white_text.png
deleted file mode 100644
index 813f712f..00000000
--- a/dev/images/icons/page_white_text.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_text_width.png b/dev/images/icons/page_white_text_width.png
deleted file mode 100644
index d9cf1325..00000000
--- a/dev/images/icons/page_white_text_width.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_tux.png b/dev/images/icons/page_white_tux.png
deleted file mode 100644
index 3c2163df..00000000
--- a/dev/images/icons/page_white_tux.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_vector.png b/dev/images/icons/page_white_vector.png
deleted file mode 100644
index 69d24f7b..00000000
--- a/dev/images/icons/page_white_vector.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_visualstudio.png b/dev/images/icons/page_white_visualstudio.png
deleted file mode 100644
index f4f3cb8a..00000000
--- a/dev/images/icons/page_white_visualstudio.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_width.png b/dev/images/icons/page_white_width.png
deleted file mode 100644
index 1eb88094..00000000
--- a/dev/images/icons/page_white_width.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_word.png b/dev/images/icons/page_white_word.png
deleted file mode 100644
index 5e9584e0..00000000
--- a/dev/images/icons/page_white_word.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_world.png b/dev/images/icons/page_white_world.png
deleted file mode 100644
index a8c052bb..00000000
--- a/dev/images/icons/page_white_world.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_wrench.png b/dev/images/icons/page_white_wrench.png
deleted file mode 100644
index fa967062..00000000
--- a/dev/images/icons/page_white_wrench.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_white_zip.png b/dev/images/icons/page_white_zip.png
deleted file mode 100644
index e32f9505..00000000
--- a/dev/images/icons/page_white_zip.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_word.png b/dev/images/icons/page_word.png
deleted file mode 100644
index 834cdfaf..00000000
--- a/dev/images/icons/page_word.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/page_world.png b/dev/images/icons/page_world.png
deleted file mode 100644
index b8895dde..00000000
--- a/dev/images/icons/page_world.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/paintbrush.png b/dev/images/icons/paintbrush.png
deleted file mode 100644
index 67177ae8..00000000
--- a/dev/images/icons/paintbrush.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/paintcan.png b/dev/images/icons/paintcan.png
deleted file mode 100644
index 7bf47c4c..00000000
--- a/dev/images/icons/paintcan.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/palette.png b/dev/images/icons/palette.png
deleted file mode 100644
index 016527ab..00000000
--- a/dev/images/icons/palette.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/paste_plain.png b/dev/images/icons/paste_plain.png
deleted file mode 100644
index c0490eb7..00000000
--- a/dev/images/icons/paste_plain.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/paste_word.png b/dev/images/icons/paste_word.png
deleted file mode 100644
index f6b87f82..00000000
--- a/dev/images/icons/paste_word.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/pencil.png b/dev/images/icons/pencil.png
deleted file mode 100644
index 578ec731..00000000
--- a/dev/images/icons/pencil.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/pencil_add.png b/dev/images/icons/pencil_add.png
deleted file mode 100644
index e7414ad7..00000000
--- a/dev/images/icons/pencil_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/pencil_delete.png b/dev/images/icons/pencil_delete.png
deleted file mode 100644
index e98079a2..00000000
--- a/dev/images/icons/pencil_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/pencil_go.png b/dev/images/icons/pencil_go.png
deleted file mode 100644
index 49e3ab24..00000000
--- a/dev/images/icons/pencil_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/phone.png b/dev/images/icons/phone.png
deleted file mode 100644
index c39f162f..00000000
--- a/dev/images/icons/phone.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/phone_add.png b/dev/images/icons/phone_add.png
deleted file mode 100644
index c79eb3d2..00000000
--- a/dev/images/icons/phone_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/phone_delete.png b/dev/images/icons/phone_delete.png
deleted file mode 100644
index bbe4f8ab..00000000
--- a/dev/images/icons/phone_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/phone_sound.png b/dev/images/icons/phone_sound.png
deleted file mode 100644
index f40789b4..00000000
--- a/dev/images/icons/phone_sound.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/photo.png b/dev/images/icons/photo.png
deleted file mode 100644
index 6c2aaaaa..00000000
--- a/dev/images/icons/photo.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/photo_add.png b/dev/images/icons/photo_add.png
deleted file mode 100644
index 85c019c1..00000000
--- a/dev/images/icons/photo_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/photo_delete.png b/dev/images/icons/photo_delete.png
deleted file mode 100644
index 18b67df4..00000000
--- a/dev/images/icons/photo_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/photo_link.png b/dev/images/icons/photo_link.png
deleted file mode 100644
index 55eb2c31..00000000
--- a/dev/images/icons/photo_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/photos.png b/dev/images/icons/photos.png
deleted file mode 100644
index 8836fe6c..00000000
--- a/dev/images/icons/photos.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/picture.png b/dev/images/icons/picture.png
deleted file mode 100644
index 4a158fef..00000000
--- a/dev/images/icons/picture.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/picture_add.png b/dev/images/icons/picture_add.png
deleted file mode 100644
index ec510949..00000000
--- a/dev/images/icons/picture_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/picture_delete.png b/dev/images/icons/picture_delete.png
deleted file mode 100644
index 93c7977f..00000000
--- a/dev/images/icons/picture_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/picture_edit.png b/dev/images/icons/picture_edit.png
deleted file mode 100644
index d9a5c57c..00000000
--- a/dev/images/icons/picture_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/picture_empty.png b/dev/images/icons/picture_empty.png
deleted file mode 100644
index abd2b9bb..00000000
--- a/dev/images/icons/picture_empty.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/picture_error.png b/dev/images/icons/picture_error.png
deleted file mode 100644
index d41d90d6..00000000
--- a/dev/images/icons/picture_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/picture_go.png b/dev/images/icons/picture_go.png
deleted file mode 100644
index 27c63c5a..00000000
--- a/dev/images/icons/picture_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/picture_key.png b/dev/images/icons/picture_key.png
deleted file mode 100644
index f0e600a3..00000000
--- a/dev/images/icons/picture_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/picture_link.png b/dev/images/icons/picture_link.png
deleted file mode 100644
index e8c9e25e..00000000
--- a/dev/images/icons/picture_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/picture_save.png b/dev/images/icons/picture_save.png
deleted file mode 100644
index 777fb5d2..00000000
--- a/dev/images/icons/picture_save.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/pictures.png b/dev/images/icons/pictures.png
deleted file mode 100644
index 8f27a173..00000000
--- a/dev/images/icons/pictures.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/pilcrow.png b/dev/images/icons/pilcrow.png
deleted file mode 100644
index 58bb9962..00000000
--- a/dev/images/icons/pilcrow.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/pill.png b/dev/images/icons/pill.png
deleted file mode 100644
index c091223f..00000000
--- a/dev/images/icons/pill.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/pill_add.png b/dev/images/icons/pill_add.png
deleted file mode 100644
index 6dcf3f39..00000000
--- a/dev/images/icons/pill_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/pill_delete.png b/dev/images/icons/pill_delete.png
deleted file mode 100644
index 0dfbbcf8..00000000
--- a/dev/images/icons/pill_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/pill_go.png b/dev/images/icons/pill_go.png
deleted file mode 100644
index cf91bc95..00000000
--- a/dev/images/icons/pill_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/plugin.png b/dev/images/icons/plugin.png
deleted file mode 100644
index 6187b15a..00000000
--- a/dev/images/icons/plugin.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/plugin_add.png b/dev/images/icons/plugin_add.png
deleted file mode 100644
index 86fd5254..00000000
--- a/dev/images/icons/plugin_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/plugin_delete.png b/dev/images/icons/plugin_delete.png
deleted file mode 100644
index 26d11dd0..00000000
--- a/dev/images/icons/plugin_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/plugin_disabled.png b/dev/images/icons/plugin_disabled.png
deleted file mode 100644
index f4f6be59..00000000
--- a/dev/images/icons/plugin_disabled.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/plugin_edit.png b/dev/images/icons/plugin_edit.png
deleted file mode 100644
index f13ede00..00000000
--- a/dev/images/icons/plugin_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/plugin_error.png b/dev/images/icons/plugin_error.png
deleted file mode 100644
index cff65d7f..00000000
--- a/dev/images/icons/plugin_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/plugin_go.png b/dev/images/icons/plugin_go.png
deleted file mode 100644
index 41da9913..00000000
--- a/dev/images/icons/plugin_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/plugin_link.png b/dev/images/icons/plugin_link.png
deleted file mode 100644
index 36702804..00000000
--- a/dev/images/icons/plugin_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/printer.png b/dev/images/icons/printer.png
deleted file mode 100644
index 919c25e4..00000000
--- a/dev/images/icons/printer.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/printer_add.png b/dev/images/icons/printer_add.png
deleted file mode 100644
index 7921bf03..00000000
--- a/dev/images/icons/printer_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/printer_delete.png b/dev/images/icons/printer_delete.png
deleted file mode 100644
index 683126dd..00000000
--- a/dev/images/icons/printer_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/printer_empty.png b/dev/images/icons/printer_empty.png
deleted file mode 100644
index 94e8c161..00000000
--- a/dev/images/icons/printer_empty.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/printer_error.png b/dev/images/icons/printer_error.png
deleted file mode 100644
index 97d2bbf1..00000000
--- a/dev/images/icons/printer_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/rainbow.png b/dev/images/icons/rainbow.png
deleted file mode 100644
index bd38ec36..00000000
--- a/dev/images/icons/rainbow.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/report.png b/dev/images/icons/report.png
deleted file mode 100644
index 230cabac..00000000
--- a/dev/images/icons/report.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/report_add.png b/dev/images/icons/report_add.png
deleted file mode 100644
index 44969aa2..00000000
--- a/dev/images/icons/report_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/report_delete.png b/dev/images/icons/report_delete.png
deleted file mode 100644
index bb279c36..00000000
--- a/dev/images/icons/report_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/report_disk.png b/dev/images/icons/report_disk.png
deleted file mode 100644
index f9c00ffc..00000000
--- a/dev/images/icons/report_disk.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/report_edit.png b/dev/images/icons/report_edit.png
deleted file mode 100644
index f1bef1e8..00000000
--- a/dev/images/icons/report_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/report_go.png b/dev/images/icons/report_go.png
deleted file mode 100644
index 3e3f3835..00000000
--- a/dev/images/icons/report_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/report_key.png b/dev/images/icons/report_key.png
deleted file mode 100644
index 5832b495..00000000
--- a/dev/images/icons/report_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/report_link.png b/dev/images/icons/report_link.png
deleted file mode 100644
index 7a411b46..00000000
--- a/dev/images/icons/report_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/report_magnify.png b/dev/images/icons/report_magnify.png
deleted file mode 100644
index 3d909c34..00000000
--- a/dev/images/icons/report_magnify.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/report_picture.png b/dev/images/icons/report_picture.png
deleted file mode 100644
index 1c4d4d76..00000000
--- a/dev/images/icons/report_picture.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/report_user.png b/dev/images/icons/report_user.png
deleted file mode 100644
index f03d2127..00000000
--- a/dev/images/icons/report_user.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/report_word.png b/dev/images/icons/report_word.png
deleted file mode 100644
index 5f306698..00000000
--- a/dev/images/icons/report_word.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/resultset_first.png b/dev/images/icons/resultset_first.png
deleted file mode 100644
index eeeb4c30..00000000
--- a/dev/images/icons/resultset_first.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/resultset_last.png b/dev/images/icons/resultset_last.png
deleted file mode 100644
index e148a71e..00000000
--- a/dev/images/icons/resultset_last.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/resultset_next.png b/dev/images/icons/resultset_next.png
deleted file mode 100644
index e4b6a5fb..00000000
--- a/dev/images/icons/resultset_next.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/resultset_previous.png b/dev/images/icons/resultset_previous.png
deleted file mode 100644
index 51d77c73..00000000
--- a/dev/images/icons/resultset_previous.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/rosette.png b/dev/images/icons/rosette.png
deleted file mode 100644
index a932a515..00000000
--- a/dev/images/icons/rosette.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/rss.png b/dev/images/icons/rss.png
deleted file mode 100644
index 1dc6ff30..00000000
--- a/dev/images/icons/rss.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/rss_add.png b/dev/images/icons/rss_add.png
deleted file mode 100644
index e413580e..00000000
--- a/dev/images/icons/rss_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/rss_delete.png b/dev/images/icons/rss_delete.png
deleted file mode 100644
index 9deb738d..00000000
--- a/dev/images/icons/rss_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/rss_go.png b/dev/images/icons/rss_go.png
deleted file mode 100644
index 43a86bff..00000000
--- a/dev/images/icons/rss_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/rss_valid.png b/dev/images/icons/rss_valid.png
deleted file mode 100644
index a6d0b0e8..00000000
--- a/dev/images/icons/rss_valid.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/ruby.png b/dev/images/icons/ruby.png
deleted file mode 100644
index 0c650108..00000000
--- a/dev/images/icons/ruby.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/ruby_add.png b/dev/images/icons/ruby_add.png
deleted file mode 100644
index dc6d1c76..00000000
--- a/dev/images/icons/ruby_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/ruby_delete.png b/dev/images/icons/ruby_delete.png
deleted file mode 100644
index e69203b9..00000000
--- a/dev/images/icons/ruby_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/ruby_gear.png b/dev/images/icons/ruby_gear.png
deleted file mode 100644
index ed39aa05..00000000
--- a/dev/images/icons/ruby_gear.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/ruby_get.png b/dev/images/icons/ruby_get.png
deleted file mode 100644
index b6660a35..00000000
--- a/dev/images/icons/ruby_get.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/ruby_go.png b/dev/images/icons/ruby_go.png
deleted file mode 100644
index 6c79f5c8..00000000
--- a/dev/images/icons/ruby_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/ruby_key.png b/dev/images/icons/ruby_key.png
deleted file mode 100644
index cbbd9a26..00000000
--- a/dev/images/icons/ruby_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/ruby_link.png b/dev/images/icons/ruby_link.png
deleted file mode 100644
index a50b2e80..00000000
--- a/dev/images/icons/ruby_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/ruby_put.png b/dev/images/icons/ruby_put.png
deleted file mode 100644
index 496f3cd5..00000000
--- a/dev/images/icons/ruby_put.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/script.png b/dev/images/icons/script.png
deleted file mode 100644
index 0f9ed4d4..00000000
--- a/dev/images/icons/script.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/script_add.png b/dev/images/icons/script_add.png
deleted file mode 100644
index d0feafb8..00000000
--- a/dev/images/icons/script_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/script_code.png b/dev/images/icons/script_code.png
deleted file mode 100644
index c1baea15..00000000
--- a/dev/images/icons/script_code.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/script_code_red.png b/dev/images/icons/script_code_red.png
deleted file mode 100644
index 5aac38e6..00000000
--- a/dev/images/icons/script_code_red.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/script_delete.png b/dev/images/icons/script_delete.png
deleted file mode 100644
index bcad297a..00000000
--- a/dev/images/icons/script_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/script_edit.png b/dev/images/icons/script_edit.png
deleted file mode 100644
index c8c38e94..00000000
--- a/dev/images/icons/script_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/script_error.png b/dev/images/icons/script_error.png
deleted file mode 100644
index e0e2000a..00000000
--- a/dev/images/icons/script_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/script_gear.png b/dev/images/icons/script_gear.png
deleted file mode 100644
index e0c6c5d9..00000000
--- a/dev/images/icons/script_gear.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/script_go.png b/dev/images/icons/script_go.png
deleted file mode 100644
index 8e154e23..00000000
--- a/dev/images/icons/script_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/script_key.png b/dev/images/icons/script_key.png
deleted file mode 100644
index 27e2af9b..00000000
--- a/dev/images/icons/script_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/script_lightning.png b/dev/images/icons/script_lightning.png
deleted file mode 100644
index 6c7157ba..00000000
--- a/dev/images/icons/script_lightning.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/script_link.png b/dev/images/icons/script_link.png
deleted file mode 100644
index c721205f..00000000
--- a/dev/images/icons/script_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/script_palette.png b/dev/images/icons/script_palette.png
deleted file mode 100644
index da0e4a5f..00000000
--- a/dev/images/icons/script_palette.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/script_save.png b/dev/images/icons/script_save.png
deleted file mode 100644
index 36216d82..00000000
--- a/dev/images/icons/script_save.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/server.png b/dev/images/icons/server.png
deleted file mode 100644
index 720a237c..00000000
--- a/dev/images/icons/server.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/server_add.png b/dev/images/icons/server_add.png
deleted file mode 100644
index 62f576c8..00000000
--- a/dev/images/icons/server_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/server_chart.png b/dev/images/icons/server_chart.png
deleted file mode 100644
index 1128d3f3..00000000
--- a/dev/images/icons/server_chart.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/server_compressed.png b/dev/images/icons/server_compressed.png
deleted file mode 100644
index bf49fad9..00000000
--- a/dev/images/icons/server_compressed.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/server_connect.png b/dev/images/icons/server_connect.png
deleted file mode 100644
index 49b26914..00000000
--- a/dev/images/icons/server_connect.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/server_database.png b/dev/images/icons/server_database.png
deleted file mode 100644
index b24e826c..00000000
--- a/dev/images/icons/server_database.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/server_delete.png b/dev/images/icons/server_delete.png
deleted file mode 100644
index 61e740fe..00000000
--- a/dev/images/icons/server_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/server_edit.png b/dev/images/icons/server_edit.png
deleted file mode 100644
index 3eb4c5f8..00000000
--- a/dev/images/icons/server_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/server_error.png b/dev/images/icons/server_error.png
deleted file mode 100644
index f6402563..00000000
--- a/dev/images/icons/server_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/server_go.png b/dev/images/icons/server_go.png
deleted file mode 100644
index 540c8e26..00000000
--- a/dev/images/icons/server_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/server_key.png b/dev/images/icons/server_key.png
deleted file mode 100644
index 36242546..00000000
--- a/dev/images/icons/server_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/server_lightning.png b/dev/images/icons/server_lightning.png
deleted file mode 100644
index b0f4e46c..00000000
--- a/dev/images/icons/server_lightning.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/server_link.png b/dev/images/icons/server_link.png
deleted file mode 100644
index e8821dfd..00000000
--- a/dev/images/icons/server_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/server_uncompressed.png b/dev/images/icons/server_uncompressed.png
deleted file mode 100644
index 86e8325b..00000000
--- a/dev/images/icons/server_uncompressed.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shading.png b/dev/images/icons/shading.png
deleted file mode 100644
index 55c12cb6..00000000
--- a/dev/images/icons/shading.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_align_bottom.png b/dev/images/icons/shape_align_bottom.png
deleted file mode 100644
index 55d26940..00000000
--- a/dev/images/icons/shape_align_bottom.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_align_center.png b/dev/images/icons/shape_align_center.png
deleted file mode 100644
index efe9a98e..00000000
--- a/dev/images/icons/shape_align_center.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_align_left.png b/dev/images/icons/shape_align_left.png
deleted file mode 100644
index aaedc41b..00000000
--- a/dev/images/icons/shape_align_left.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_align_middle.png b/dev/images/icons/shape_align_middle.png
deleted file mode 100644
index d350dd88..00000000
--- a/dev/images/icons/shape_align_middle.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_align_right.png b/dev/images/icons/shape_align_right.png
deleted file mode 100644
index ff556b6a..00000000
--- a/dev/images/icons/shape_align_right.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_align_top.png b/dev/images/icons/shape_align_top.png
deleted file mode 100644
index 1181b43f..00000000
--- a/dev/images/icons/shape_align_top.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_flip_horizontal.png b/dev/images/icons/shape_flip_horizontal.png
deleted file mode 100644
index ad98b760..00000000
--- a/dev/images/icons/shape_flip_horizontal.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_flip_vertical.png b/dev/images/icons/shape_flip_vertical.png
deleted file mode 100644
index f3555296..00000000
--- a/dev/images/icons/shape_flip_vertical.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_group.png b/dev/images/icons/shape_group.png
deleted file mode 100644
index bb2ff516..00000000
--- a/dev/images/icons/shape_group.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_handles.png b/dev/images/icons/shape_handles.png
deleted file mode 100644
index ce27fe3a..00000000
--- a/dev/images/icons/shape_handles.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_move_back.png b/dev/images/icons/shape_move_back.png
deleted file mode 100644
index a216ffd3..00000000
--- a/dev/images/icons/shape_move_back.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_move_backwards.png b/dev/images/icons/shape_move_backwards.png
deleted file mode 100644
index ee3f9b27..00000000
--- a/dev/images/icons/shape_move_backwards.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_move_forwards.png b/dev/images/icons/shape_move_forwards.png
deleted file mode 100644
index cfe44932..00000000
--- a/dev/images/icons/shape_move_forwards.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_move_front.png b/dev/images/icons/shape_move_front.png
deleted file mode 100644
index b4a4e3b7..00000000
--- a/dev/images/icons/shape_move_front.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_rotate_anticlockwise.png b/dev/images/icons/shape_rotate_anticlockwise.png
deleted file mode 100644
index 19f4a1f1..00000000
--- a/dev/images/icons/shape_rotate_anticlockwise.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_rotate_clockwise.png b/dev/images/icons/shape_rotate_clockwise.png
deleted file mode 100644
index 3e7992f5..00000000
--- a/dev/images/icons/shape_rotate_clockwise.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_square.png b/dev/images/icons/shape_square.png
deleted file mode 100644
index 33af0460..00000000
--- a/dev/images/icons/shape_square.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_square_add.png b/dev/images/icons/shape_square_add.png
deleted file mode 100644
index 31edfce5..00000000
--- a/dev/images/icons/shape_square_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_square_delete.png b/dev/images/icons/shape_square_delete.png
deleted file mode 100644
index ede912de..00000000
--- a/dev/images/icons/shape_square_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_square_edit.png b/dev/images/icons/shape_square_edit.png
deleted file mode 100644
index c1fa7e34..00000000
--- a/dev/images/icons/shape_square_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_square_error.png b/dev/images/icons/shape_square_error.png
deleted file mode 100644
index 0d0dcfa9..00000000
--- a/dev/images/icons/shape_square_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_square_go.png b/dev/images/icons/shape_square_go.png
deleted file mode 100644
index 5a2ad901..00000000
--- a/dev/images/icons/shape_square_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_square_key.png b/dev/images/icons/shape_square_key.png
deleted file mode 100644
index c34b982a..00000000
--- a/dev/images/icons/shape_square_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_square_link.png b/dev/images/icons/shape_square_link.png
deleted file mode 100644
index 96672875..00000000
--- a/dev/images/icons/shape_square_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shape_ungroup.png b/dev/images/icons/shape_ungroup.png
deleted file mode 100644
index 8fa20ffd..00000000
--- a/dev/images/icons/shape_ungroup.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shield.png b/dev/images/icons/shield.png
deleted file mode 100644
index 575d35d1..00000000
--- a/dev/images/icons/shield.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shield_add.png b/dev/images/icons/shield_add.png
deleted file mode 100644
index cd2e5f9a..00000000
--- a/dev/images/icons/shield_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shield_delete.png b/dev/images/icons/shield_delete.png
deleted file mode 100644
index 9c47f38d..00000000
--- a/dev/images/icons/shield_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/shield_go.png b/dev/images/icons/shield_go.png
deleted file mode 100644
index 43b843d0..00000000
--- a/dev/images/icons/shield_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/sitemap.png b/dev/images/icons/sitemap.png
deleted file mode 100644
index ca779f32..00000000
--- a/dev/images/icons/sitemap.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/sitemap_color.png b/dev/images/icons/sitemap_color.png
deleted file mode 100644
index 41e3c8c1..00000000
--- a/dev/images/icons/sitemap_color.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/sound.png b/dev/images/icons/sound.png
deleted file mode 100644
index 2f187fdd..00000000
--- a/dev/images/icons/sound.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/sound_add.png b/dev/images/icons/sound_add.png
deleted file mode 100644
index c1e6e088..00000000
--- a/dev/images/icons/sound_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/sound_delete.png b/dev/images/icons/sound_delete.png
deleted file mode 100644
index eeb57652..00000000
--- a/dev/images/icons/sound_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/sound_low.png b/dev/images/icons/sound_low.png
deleted file mode 100644
index 4cb2c3c0..00000000
--- a/dev/images/icons/sound_low.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/sound_mute.png b/dev/images/icons/sound_mute.png
deleted file mode 100644
index 8dd8d625..00000000
--- a/dev/images/icons/sound_mute.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/sound_none.png b/dev/images/icons/sound_none.png
deleted file mode 100644
index 033c9368..00000000
--- a/dev/images/icons/sound_none.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/spellcheck.png b/dev/images/icons/spellcheck.png
deleted file mode 100644
index c2ea070e..00000000
--- a/dev/images/icons/spellcheck.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/sport_8ball.png b/dev/images/icons/sport_8ball.png
deleted file mode 100644
index 4f627b76..00000000
--- a/dev/images/icons/sport_8ball.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/sport_basketball.png b/dev/images/icons/sport_basketball.png
deleted file mode 100644
index d2f128cd..00000000
--- a/dev/images/icons/sport_basketball.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/sport_football.png b/dev/images/icons/sport_football.png
deleted file mode 100644
index 63d824d0..00000000
--- a/dev/images/icons/sport_football.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/sport_golf.png b/dev/images/icons/sport_golf.png
deleted file mode 100644
index f482551d..00000000
--- a/dev/images/icons/sport_golf.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/sport_raquet.png b/dev/images/icons/sport_raquet.png
deleted file mode 100644
index 395c4e90..00000000
--- a/dev/images/icons/sport_raquet.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/sport_shuttlecock.png b/dev/images/icons/sport_shuttlecock.png
deleted file mode 100644
index bbf60f7f..00000000
--- a/dev/images/icons/sport_shuttlecock.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/sport_soccer.png b/dev/images/icons/sport_soccer.png
deleted file mode 100644
index c77de91d..00000000
--- a/dev/images/icons/sport_soccer.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/sport_tennis.png b/dev/images/icons/sport_tennis.png
deleted file mode 100644
index 01bc804c..00000000
--- a/dev/images/icons/sport_tennis.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/star.png b/dev/images/icons/star.png
deleted file mode 100644
index af375988..00000000
--- a/dev/images/icons/star.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/status_away.png b/dev/images/icons/status_away.png
deleted file mode 100644
index 554ba2c3..00000000
--- a/dev/images/icons/status_away.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/status_busy.png b/dev/images/icons/status_busy.png
deleted file mode 100644
index 1e372036..00000000
--- a/dev/images/icons/status_busy.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/status_offline.png b/dev/images/icons/status_offline.png
deleted file mode 100644
index 2beb4c9a..00000000
--- a/dev/images/icons/status_offline.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/status_online.png b/dev/images/icons/status_online.png
deleted file mode 100644
index 26a68827..00000000
--- a/dev/images/icons/status_online.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/stop.png b/dev/images/icons/stop.png
deleted file mode 100644
index 7bb22e5e..00000000
--- a/dev/images/icons/stop.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/style.png b/dev/images/icons/style.png
deleted file mode 100644
index 1a7adb2c..00000000
--- a/dev/images/icons/style.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/style_add.png b/dev/images/icons/style_add.png
deleted file mode 100644
index fa8f0088..00000000
--- a/dev/images/icons/style_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/style_delete.png b/dev/images/icons/style_delete.png
deleted file mode 100644
index ac7d62a1..00000000
--- a/dev/images/icons/style_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/style_edit.png b/dev/images/icons/style_edit.png
deleted file mode 100644
index a12ec678..00000000
--- a/dev/images/icons/style_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/style_go.png b/dev/images/icons/style_go.png
deleted file mode 100644
index aec7400b..00000000
--- a/dev/images/icons/style_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/sum.png b/dev/images/icons/sum.png
deleted file mode 100644
index fd7b32e4..00000000
--- a/dev/images/icons/sum.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/tab.png b/dev/images/icons/tab.png
deleted file mode 100644
index 4e640cc9..00000000
--- a/dev/images/icons/tab.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/tab_add.png b/dev/images/icons/tab_add.png
deleted file mode 100644
index 63770758..00000000
--- a/dev/images/icons/tab_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/tab_delete.png b/dev/images/icons/tab_delete.png
deleted file mode 100644
index cb1cece2..00000000
--- a/dev/images/icons/tab_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/tab_edit.png b/dev/images/icons/tab_edit.png
deleted file mode 100644
index e0b05f0a..00000000
--- a/dev/images/icons/tab_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/tab_go.png b/dev/images/icons/tab_go.png
deleted file mode 100644
index ada17ebb..00000000
--- a/dev/images/icons/tab_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/table.png b/dev/images/icons/table.png
deleted file mode 100644
index 9907a4d6..00000000
--- a/dev/images/icons/table.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/table_add.png b/dev/images/icons/table_add.png
deleted file mode 100644
index aa418f7d..00000000
--- a/dev/images/icons/table_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/table_delete.png b/dev/images/icons/table_delete.png
deleted file mode 100644
index e770509b..00000000
--- a/dev/images/icons/table_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/table_edit.png b/dev/images/icons/table_edit.png
deleted file mode 100644
index aa9d37a9..00000000
--- a/dev/images/icons/table_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/table_error.png b/dev/images/icons/table_error.png
deleted file mode 100644
index 589e92b5..00000000
--- a/dev/images/icons/table_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/table_gear.png b/dev/images/icons/table_gear.png
deleted file mode 100644
index b6ef8e9b..00000000
--- a/dev/images/icons/table_gear.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/table_go.png b/dev/images/icons/table_go.png
deleted file mode 100644
index 0528dfa2..00000000
--- a/dev/images/icons/table_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/table_key.png b/dev/images/icons/table_key.png
deleted file mode 100644
index f78e3cc2..00000000
--- a/dev/images/icons/table_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/table_lightning.png b/dev/images/icons/table_lightning.png
deleted file mode 100644
index 2df06618..00000000
--- a/dev/images/icons/table_lightning.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/table_link.png b/dev/images/icons/table_link.png
deleted file mode 100644
index 45d5170a..00000000
--- a/dev/images/icons/table_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/table_multiple.png b/dev/images/icons/table_multiple.png
deleted file mode 100644
index e9aae3f0..00000000
--- a/dev/images/icons/table_multiple.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/table_refresh.png b/dev/images/icons/table_refresh.png
deleted file mode 100644
index d8ab2f1d..00000000
--- a/dev/images/icons/table_refresh.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/table_relationship.png b/dev/images/icons/table_relationship.png
deleted file mode 100644
index dabe2f41..00000000
--- a/dev/images/icons/table_relationship.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/table_row_delete.png b/dev/images/icons/table_row_delete.png
deleted file mode 100644
index 8818d9d1..00000000
--- a/dev/images/icons/table_row_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/table_row_insert.png b/dev/images/icons/table_row_insert.png
deleted file mode 100644
index 0fcd34cc..00000000
--- a/dev/images/icons/table_row_insert.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/table_save.png b/dev/images/icons/table_save.png
deleted file mode 100644
index 25b74d18..00000000
--- a/dev/images/icons/table_save.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/table_sort.png b/dev/images/icons/table_sort.png
deleted file mode 100644
index ed6785a6..00000000
--- a/dev/images/icons/table_sort.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/tag.png b/dev/images/icons/tag.png
deleted file mode 100644
index 1dd909c6..00000000
--- a/dev/images/icons/tag.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/tag_blue.png b/dev/images/icons/tag_blue.png
deleted file mode 100644
index 84924c28..00000000
--- a/dev/images/icons/tag_blue.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/tag_blue_add.png b/dev/images/icons/tag_blue_add.png
deleted file mode 100644
index f0dfd30a..00000000
--- a/dev/images/icons/tag_blue_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/tag_blue_delete.png b/dev/images/icons/tag_blue_delete.png
deleted file mode 100644
index a9b05a59..00000000
--- a/dev/images/icons/tag_blue_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/tag_blue_edit.png b/dev/images/icons/tag_blue_edit.png
deleted file mode 100644
index 7082163c..00000000
--- a/dev/images/icons/tag_blue_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/tag_green.png b/dev/images/icons/tag_green.png
deleted file mode 100644
index 885ff168..00000000
--- a/dev/images/icons/tag_green.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/tag_orange.png b/dev/images/icons/tag_orange.png
deleted file mode 100644
index 4d54916d..00000000
--- a/dev/images/icons/tag_orange.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/tag_pink.png b/dev/images/icons/tag_pink.png
deleted file mode 100644
index b1d721fc..00000000
--- a/dev/images/icons/tag_pink.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/tag_purple.png b/dev/images/icons/tag_purple.png
deleted file mode 100644
index af0e9e2a..00000000
--- a/dev/images/icons/tag_purple.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/tag_red.png b/dev/images/icons/tag_red.png
deleted file mode 100644
index 100bf542..00000000
--- a/dev/images/icons/tag_red.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/tag_yellow.png b/dev/images/icons/tag_yellow.png
deleted file mode 100644
index 4f9ea958..00000000
--- a/dev/images/icons/tag_yellow.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/telephone.png b/dev/images/icons/telephone.png
deleted file mode 100644
index cecc436f..00000000
--- a/dev/images/icons/telephone.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/telephone_add.png b/dev/images/icons/telephone_add.png
deleted file mode 100644
index 0a0ddf90..00000000
--- a/dev/images/icons/telephone_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/telephone_delete.png b/dev/images/icons/telephone_delete.png
deleted file mode 100644
index 0013268e..00000000
--- a/dev/images/icons/telephone_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/telephone_edit.png b/dev/images/icons/telephone_edit.png
deleted file mode 100644
index 90c036a5..00000000
--- a/dev/images/icons/telephone_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/telephone_error.png b/dev/images/icons/telephone_error.png
deleted file mode 100644
index d3ec3a11..00000000
--- a/dev/images/icons/telephone_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/telephone_go.png b/dev/images/icons/telephone_go.png
deleted file mode 100644
index 395c8fbf..00000000
--- a/dev/images/icons/telephone_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/telephone_key.png b/dev/images/icons/telephone_key.png
deleted file mode 100644
index cef5dec4..00000000
--- a/dev/images/icons/telephone_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/telephone_link.png b/dev/images/icons/telephone_link.png
deleted file mode 100644
index 9d4898d5..00000000
--- a/dev/images/icons/telephone_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/television.png b/dev/images/icons/television.png
deleted file mode 100644
index 1738a4f1..00000000
--- a/dev/images/icons/television.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/television_add.png b/dev/images/icons/television_add.png
deleted file mode 100644
index 7cc6dfb2..00000000
--- a/dev/images/icons/television_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/television_delete.png b/dev/images/icons/television_delete.png
deleted file mode 100644
index eeb41144..00000000
--- a/dev/images/icons/television_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_align_center.png b/dev/images/icons/text_align_center.png
deleted file mode 100644
index 57beb381..00000000
--- a/dev/images/icons/text_align_center.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_align_justify.png b/dev/images/icons/text_align_justify.png
deleted file mode 100644
index 2fbdd692..00000000
--- a/dev/images/icons/text_align_justify.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_align_left.png b/dev/images/icons/text_align_left.png
deleted file mode 100644
index 6c8fcc11..00000000
--- a/dev/images/icons/text_align_left.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_align_right.png b/dev/images/icons/text_align_right.png
deleted file mode 100644
index a1502571..00000000
--- a/dev/images/icons/text_align_right.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_allcaps.png b/dev/images/icons/text_allcaps.png
deleted file mode 100644
index 280fd442..00000000
--- a/dev/images/icons/text_allcaps.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_bold.png b/dev/images/icons/text_bold.png
deleted file mode 100644
index f04ae461..00000000
--- a/dev/images/icons/text_bold.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_columns.png b/dev/images/icons/text_columns.png
deleted file mode 100644
index 97b2e035..00000000
--- a/dev/images/icons/text_columns.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_dropcaps.png b/dev/images/icons/text_dropcaps.png
deleted file mode 100644
index dd65786a..00000000
--- a/dev/images/icons/text_dropcaps.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_heading_1.png b/dev/images/icons/text_heading_1.png
deleted file mode 100644
index 9c122e91..00000000
--- a/dev/images/icons/text_heading_1.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_heading_2.png b/dev/images/icons/text_heading_2.png
deleted file mode 100644
index 363f7bca..00000000
--- a/dev/images/icons/text_heading_2.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_heading_3.png b/dev/images/icons/text_heading_3.png
deleted file mode 100644
index 6f753876..00000000
--- a/dev/images/icons/text_heading_3.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_heading_4.png b/dev/images/icons/text_heading_4.png
deleted file mode 100644
index 4e929eaf..00000000
--- a/dev/images/icons/text_heading_4.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_heading_5.png b/dev/images/icons/text_heading_5.png
deleted file mode 100644
index 30cabebf..00000000
--- a/dev/images/icons/text_heading_5.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_heading_6.png b/dev/images/icons/text_heading_6.png
deleted file mode 100644
index f7db93cf..00000000
--- a/dev/images/icons/text_heading_6.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_horizontalrule.png b/dev/images/icons/text_horizontalrule.png
deleted file mode 100644
index 40e03fa6..00000000
--- a/dev/images/icons/text_horizontalrule.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_indent.png b/dev/images/icons/text_indent.png
deleted file mode 100644
index 93645323..00000000
--- a/dev/images/icons/text_indent.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_indent_remove.png b/dev/images/icons/text_indent_remove.png
deleted file mode 100644
index 1651b074..00000000
--- a/dev/images/icons/text_indent_remove.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_italic.png b/dev/images/icons/text_italic.png
deleted file mode 100644
index 8482ac8c..00000000
--- a/dev/images/icons/text_italic.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_kerning.png b/dev/images/icons/text_kerning.png
deleted file mode 100644
index c22bd94e..00000000
--- a/dev/images/icons/text_kerning.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_letter_omega.png b/dev/images/icons/text_letter_omega.png
deleted file mode 100644
index c58f9fe7..00000000
--- a/dev/images/icons/text_letter_omega.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_letterspacing.png b/dev/images/icons/text_letterspacing.png
deleted file mode 100644
index 4ce23f38..00000000
--- a/dev/images/icons/text_letterspacing.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_linespacing.png b/dev/images/icons/text_linespacing.png
deleted file mode 100644
index dd522c95..00000000
--- a/dev/images/icons/text_linespacing.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_list_bullets.png b/dev/images/icons/text_list_bullets.png
deleted file mode 100644
index b2afeb27..00000000
--- a/dev/images/icons/text_list_bullets.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_list_numbers.png b/dev/images/icons/text_list_numbers.png
deleted file mode 100644
index 8dae9443..00000000
--- a/dev/images/icons/text_list_numbers.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_lowercase.png b/dev/images/icons/text_lowercase.png
deleted file mode 100644
index 49ddf832..00000000
--- a/dev/images/icons/text_lowercase.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_padding_bottom.png b/dev/images/icons/text_padding_bottom.png
deleted file mode 100644
index 4880c43a..00000000
--- a/dev/images/icons/text_padding_bottom.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_padding_left.png b/dev/images/icons/text_padding_left.png
deleted file mode 100644
index b55482ee..00000000
--- a/dev/images/icons/text_padding_left.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_padding_right.png b/dev/images/icons/text_padding_right.png
deleted file mode 100644
index 106edae5..00000000
--- a/dev/images/icons/text_padding_right.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_padding_top.png b/dev/images/icons/text_padding_top.png
deleted file mode 100644
index c5c45b2d..00000000
--- a/dev/images/icons/text_padding_top.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_replace.png b/dev/images/icons/text_replace.png
deleted file mode 100644
index 41deaeab..00000000
--- a/dev/images/icons/text_replace.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_signature.png b/dev/images/icons/text_signature.png
deleted file mode 100644
index ad5d3be1..00000000
--- a/dev/images/icons/text_signature.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_smallcaps.png b/dev/images/icons/text_smallcaps.png
deleted file mode 100644
index 5b98a6e1..00000000
--- a/dev/images/icons/text_smallcaps.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_strikethrough.png b/dev/images/icons/text_strikethrough.png
deleted file mode 100644
index 612058a7..00000000
--- a/dev/images/icons/text_strikethrough.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_subscript.png b/dev/images/icons/text_subscript.png
deleted file mode 100644
index ae77ed95..00000000
--- a/dev/images/icons/text_subscript.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_superscript.png b/dev/images/icons/text_superscript.png
deleted file mode 100644
index f5bf6f6a..00000000
--- a/dev/images/icons/text_superscript.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_underline.png b/dev/images/icons/text_underline.png
deleted file mode 100644
index 90d0df28..00000000
--- a/dev/images/icons/text_underline.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/text_uppercase.png b/dev/images/icons/text_uppercase.png
deleted file mode 100644
index 4c72f69d..00000000
--- a/dev/images/icons/text_uppercase.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/textfield.png b/dev/images/icons/textfield.png
deleted file mode 100644
index 12000f2e..00000000
--- a/dev/images/icons/textfield.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/textfield_add.png b/dev/images/icons/textfield_add.png
deleted file mode 100644
index 45de1172..00000000
--- a/dev/images/icons/textfield_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/textfield_delete.png b/dev/images/icons/textfield_delete.png
deleted file mode 100644
index d09fed93..00000000
--- a/dev/images/icons/textfield_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/textfield_key.png b/dev/images/icons/textfield_key.png
deleted file mode 100644
index 82ce089e..00000000
--- a/dev/images/icons/textfield_key.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/textfield_rename.png b/dev/images/icons/textfield_rename.png
deleted file mode 100644
index 749256b1..00000000
--- a/dev/images/icons/textfield_rename.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/thumb_down.png b/dev/images/icons/thumb_down.png
deleted file mode 100644
index 21f289ea..00000000
--- a/dev/images/icons/thumb_down.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/thumb_up.png b/dev/images/icons/thumb_up.png
deleted file mode 100644
index c4e3db4d..00000000
--- a/dev/images/icons/thumb_up.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/tick.png b/dev/images/icons/tick.png
deleted file mode 100644
index 1988997f..00000000
--- a/dev/images/icons/tick.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/time.png b/dev/images/icons/time.png
deleted file mode 100644
index 471cec88..00000000
--- a/dev/images/icons/time.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/time_add.png b/dev/images/icons/time_add.png
deleted file mode 100644
index 29ce70dd..00000000
--- a/dev/images/icons/time_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/time_delete.png b/dev/images/icons/time_delete.png
deleted file mode 100644
index 215591d0..00000000
--- a/dev/images/icons/time_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/time_go.png b/dev/images/icons/time_go.png
deleted file mode 100644
index 869b0069..00000000
--- a/dev/images/icons/time_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/timeline_marker.png b/dev/images/icons/timeline_marker.png
deleted file mode 100644
index a3fbddf8..00000000
--- a/dev/images/icons/timeline_marker.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/transmit.png b/dev/images/icons/transmit.png
deleted file mode 100644
index 3d28f901..00000000
--- a/dev/images/icons/transmit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/transmit_add.png b/dev/images/icons/transmit_add.png
deleted file mode 100644
index 19df2b0a..00000000
--- a/dev/images/icons/transmit_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/transmit_blue.png b/dev/images/icons/transmit_blue.png
deleted file mode 100644
index 5e35fc95..00000000
--- a/dev/images/icons/transmit_blue.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/transmit_delete.png b/dev/images/icons/transmit_delete.png
deleted file mode 100644
index e546b651..00000000
--- a/dev/images/icons/transmit_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/transmit_edit.png b/dev/images/icons/transmit_edit.png
deleted file mode 100644
index a9a4c510..00000000
--- a/dev/images/icons/transmit_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/transmit_error.png b/dev/images/icons/transmit_error.png
deleted file mode 100644
index 8e75b05b..00000000
--- a/dev/images/icons/transmit_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/transmit_go.png b/dev/images/icons/transmit_go.png
deleted file mode 100644
index 17c988fe..00000000
--- a/dev/images/icons/transmit_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/tux.png b/dev/images/icons/tux.png
deleted file mode 100644
index 4607204d..00000000
--- a/dev/images/icons/tux.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/user.png b/dev/images/icons/user.png
deleted file mode 100644
index 43e0a2b9..00000000
--- a/dev/images/icons/user.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/user_add.png b/dev/images/icons/user_add.png
deleted file mode 100644
index ffeacb9c..00000000
--- a/dev/images/icons/user_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/user_comment.png b/dev/images/icons/user_comment.png
deleted file mode 100644
index f80275a8..00000000
--- a/dev/images/icons/user_comment.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/user_delete.png b/dev/images/icons/user_delete.png
deleted file mode 100644
index b81bc84d..00000000
--- a/dev/images/icons/user_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/user_edit.png b/dev/images/icons/user_edit.png
deleted file mode 100644
index 41c681f0..00000000
--- a/dev/images/icons/user_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/user_female.png b/dev/images/icons/user_female.png
deleted file mode 100644
index 4a0cf1cb..00000000
--- a/dev/images/icons/user_female.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/user_go.png b/dev/images/icons/user_go.png
deleted file mode 100644
index adc90025..00000000
--- a/dev/images/icons/user_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/user_gray.png b/dev/images/icons/user_gray.png
deleted file mode 100644
index 8d5d1c2e..00000000
--- a/dev/images/icons/user_gray.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/user_green.png b/dev/images/icons/user_green.png
deleted file mode 100644
index 3ac06a0e..00000000
--- a/dev/images/icons/user_green.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/user_orange.png b/dev/images/icons/user_orange.png
deleted file mode 100644
index e7c59d8c..00000000
--- a/dev/images/icons/user_orange.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/user_red.png b/dev/images/icons/user_red.png
deleted file mode 100644
index 473f61a3..00000000
--- a/dev/images/icons/user_red.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/user_suit.png b/dev/images/icons/user_suit.png
deleted file mode 100644
index d9b1b99a..00000000
--- a/dev/images/icons/user_suit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/vcard.png b/dev/images/icons/vcard.png
deleted file mode 100644
index c02f315d..00000000
--- a/dev/images/icons/vcard.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/vcard_add.png b/dev/images/icons/vcard_add.png
deleted file mode 100644
index 2e7f574b..00000000
--- a/dev/images/icons/vcard_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/vcard_delete.png b/dev/images/icons/vcard_delete.png
deleted file mode 100644
index 2577e032..00000000
--- a/dev/images/icons/vcard_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/vcard_edit.png b/dev/images/icons/vcard_edit.png
deleted file mode 100644
index 91ad9665..00000000
--- a/dev/images/icons/vcard_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/vector.png b/dev/images/icons/vector.png
deleted file mode 100644
index cc66b826..00000000
--- a/dev/images/icons/vector.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/vector_add.png b/dev/images/icons/vector_add.png
deleted file mode 100644
index a6efa940..00000000
--- a/dev/images/icons/vector_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/vector_delete.png b/dev/images/icons/vector_delete.png
deleted file mode 100644
index 5b270513..00000000
--- a/dev/images/icons/vector_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/wand.png b/dev/images/icons/wand.png
deleted file mode 100644
index 7117745f..00000000
--- a/dev/images/icons/wand.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/weather_clouds.png b/dev/images/icons/weather_clouds.png
deleted file mode 100644
index f062336f..00000000
--- a/dev/images/icons/weather_clouds.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/weather_cloudy.png b/dev/images/icons/weather_cloudy.png
deleted file mode 100644
index 3d19c34f..00000000
--- a/dev/images/icons/weather_cloudy.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/weather_lightning.png b/dev/images/icons/weather_lightning.png
deleted file mode 100644
index ff6a4e9b..00000000
--- a/dev/images/icons/weather_lightning.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/weather_rain.png b/dev/images/icons/weather_rain.png
deleted file mode 100644
index 87b17317..00000000
--- a/dev/images/icons/weather_rain.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/weather_snow.png b/dev/images/icons/weather_snow.png
deleted file mode 100644
index 45bbdf19..00000000
--- a/dev/images/icons/weather_snow.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/weather_sun.png b/dev/images/icons/weather_sun.png
deleted file mode 100644
index c1a88361..00000000
--- a/dev/images/icons/weather_sun.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/webcam.png b/dev/images/icons/webcam.png
deleted file mode 100644
index e08234b1..00000000
--- a/dev/images/icons/webcam.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/webcam_add.png b/dev/images/icons/webcam_add.png
deleted file mode 100644
index 516a1a25..00000000
--- a/dev/images/icons/webcam_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/webcam_delete.png b/dev/images/icons/webcam_delete.png
deleted file mode 100644
index 0379be23..00000000
--- a/dev/images/icons/webcam_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/webcam_error.png b/dev/images/icons/webcam_error.png
deleted file mode 100644
index 9689109f..00000000
--- a/dev/images/icons/webcam_error.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/world.png b/dev/images/icons/world.png
deleted file mode 100644
index 0cba3582..00000000
--- a/dev/images/icons/world.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/world_add.png b/dev/images/icons/world_add.png
deleted file mode 100644
index ef47ef39..00000000
--- a/dev/images/icons/world_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/world_delete.png b/dev/images/icons/world_delete.png
deleted file mode 100644
index 289bcf34..00000000
--- a/dev/images/icons/world_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/world_edit.png b/dev/images/icons/world_edit.png
deleted file mode 100644
index 65fe2fad..00000000
--- a/dev/images/icons/world_edit.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/world_go.png b/dev/images/icons/world_go.png
deleted file mode 100644
index df5f1add..00000000
--- a/dev/images/icons/world_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/world_link.png b/dev/images/icons/world_link.png
deleted file mode 100644
index f3d52eaa..00000000
--- a/dev/images/icons/world_link.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/wrench.png b/dev/images/icons/wrench.png
deleted file mode 100644
index 8c84186b..00000000
--- a/dev/images/icons/wrench.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/wrench_orange.png b/dev/images/icons/wrench_orange.png
deleted file mode 100644
index 0c0e510a..00000000
--- a/dev/images/icons/wrench_orange.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/xhtml.png b/dev/images/icons/xhtml.png
deleted file mode 100644
index da5dbf20..00000000
--- a/dev/images/icons/xhtml.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/xhtml_add.png b/dev/images/icons/xhtml_add.png
deleted file mode 100644
index 015ec58a..00000000
--- a/dev/images/icons/xhtml_add.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/xhtml_delete.png b/dev/images/icons/xhtml_delete.png
deleted file mode 100644
index 157b5201..00000000
--- a/dev/images/icons/xhtml_delete.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/xhtml_go.png b/dev/images/icons/xhtml_go.png
deleted file mode 100644
index 43cf8144..00000000
--- a/dev/images/icons/xhtml_go.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/xhtml_valid.png b/dev/images/icons/xhtml_valid.png
deleted file mode 100644
index d2e1cfbe..00000000
--- a/dev/images/icons/xhtml_valid.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/zoom.png b/dev/images/icons/zoom.png
deleted file mode 100644
index a158b993..00000000
--- a/dev/images/icons/zoom.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/zoom_in.png b/dev/images/icons/zoom_in.png
deleted file mode 100644
index 0a457f74..00000000
--- a/dev/images/icons/zoom_in.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/icons/zoom_out.png b/dev/images/icons/zoom_out.png
deleted file mode 100644
index c124cf89..00000000
--- a/dev/images/icons/zoom_out.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/logo/logo_baseline.psd b/dev/images/logo/logo_baseline.psd
deleted file mode 100644
index 654b32ad..00000000
--- a/dev/images/logo/logo_baseline.psd
+++ /dev/null
Binary files differ
diff --git a/dev/images/logo/logo_rendered.png b/dev/images/logo/logo_rendered.png
deleted file mode 100644
index bb443996..00000000
--- a/dev/images/logo/logo_rendered.png
+++ /dev/null
Binary files differ
diff --git a/dev/images/logo/logo_vector.ai b/dev/images/logo/logo_vector.ai
deleted file mode 100644
index 2a1ad917..00000000
--- a/dev/images/logo/logo_vector.ai
+++ /dev/null
@@ -1,222 +0,0 @@
-%PDF-1.5 %
-1 0 obj <</Metadata 2 0 R/OCProperties<</D<</ON[5 0 R]/Order 6 0 R/RBGroups[]>>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 15515/Subtype/XML/Type/Metadata>>stream
-<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
-<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27 ">
- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
- <rdf:Description rdf:about=""
- xmlns:xmp="http://ns.adobe.com/xap/1.0/"
- xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/">
- <xmp:CreatorTool>Adobe Illustrator CS6 (Macintosh)</xmp:CreatorTool>
- <xmp:CreateDate>2013-12-31T16:14:41+01:00</xmp:CreateDate>
- <xmp:ModifyDate>2013-12-31T16:14:41+01:00</xmp:ModifyDate>
- <xmp:MetadataDate>2013-12-31T16:14:41+01:00</xmp:MetadataDate>
- <xmp:Thumbnails>
- <rdf:Alt>
- <rdf:li rdf:parseType="Resource">
- <xmpGImg:width>256</xmpGImg:width>
- <xmpGImg:height>76</xmpGImg:height>
- <xmpGImg:format>JPEG</xmpGImg:format>
- <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgATAEAAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FWK/mT+ZHl&#xA;z8vvLcmua3IxXl6VpaRUM1xMRURxgkDpuxOwGKvib8x/+civzH863cqi/k0bRiSItKsJGiXh29aR&#xA;eLynx5fDXooxV5iZZDJ6pdjKW5GSp5cq1rXrWuKvVvyp/wCcjPPPkjUYIr68n1ry5yC3Om3MhldI&#xA;+7W0jkmNl6ha8T3HcKvu/RdY07WtJs9X02YXFhfwpcWsy9GjkUMpp2O+47YqjMVYT5h/Ov8AKzy7&#xA;r48v6z5it7TVqhZICsrrGWFQJpURootjX42GKs1R0kRZI2Do4DI6moIO4IIxVvFXYq7FXYq7FXYq&#xA;7FXYq7FXYq7FXYq7FXYqlHmrzf5a8p6Q+r+YtQi07T0YIZpaks53CIihndjQ/CoJxVCeS/zE8l+d&#xA;rOa88r6pHqUNuwScKskckZO684pVjkUNQ0JWh7YqyLFXYq7FXYqwzz/+b/5f+QlRfMWprDdyryhs&#xA;IVM1yynbl6aV4rt9pqDFWJeXP+crPyf1vUY7A31xpckzBIpdQh9KEsegMqNIqfNyB74q9fVlZQyk&#xA;MrCqsNwQe4xVvFXwh/zlX55uPMf5p3emJITpnl0fULWMdPWoGuXI/mMnwfJRirxrFXYq7FX3l/zi&#xA;ZdXU/wCS2mpOSUt7m7itya/3frF6Cv8AlO2KvYsVfCv5nf8AOP35syfmVrDWOi3Gq2urX9xdWeow&#xA;lWiZLiUyD1ZGYCJl5Ub1CN+lRvir7M8haDeeX/JOg6Heyie70ywt7WeVSSpeGJUbiTvxBFB7Yqn2&#xA;KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV4f/wA5Wflr5s86eVdKl8twte3Gk3Ekk+nIQHkSZAvN&#xA;AxAZoyvTrQmmKsZ/5xK/Kjzx5W1LWNe8x2MmlW93bJaWtnPRZZG9QSNI0YNUCcaDkK74q+lsVdir&#xA;sVdir8wPNPmTU/M3mLUNe1SQy32ozPPKSaheR+FF8FRaKo7AYqlWKvtz/nEHz9f+YvIV3oeozGe6&#xA;8tyxwQSsSW+qTqTArE/yGN1H+SAO2KveCQBU7AdTir8vfMmqNq3mLVNVY8m1C7nuix6kzStJXcD+&#xA;bwxVLcVdiqP0LQ9V17WLTR9Jt2utRvpFhtoE6szfqAG5J2A3xV+kP5b+TLfyX5H0jyzCwk/R8AWe&#xA;VdhJO5Mkziu9GkdiPbFWSYq8r/Mj/nJD8vfIGv8A6B1RL6+1JEV7mLT44ZPQ5qHRZTLNDRmRgwpX&#xA;bFXqFvOk9vFOgISVFdQetGFRWmKsW/ML81PJPkCwS68x34hkmr9VsYh6lzNTr6cY7DuzUX3xV4tP&#xA;/wA5v+WFu+MHli9ks/8AfzzxJJT/AIxgOv8Aw+KvVPy1/Pb8vvzBb6to929tqyrybSr1RFcEDqY6&#xA;MySAd+DEjuBir0LFXnf5p/nr5K/LW4sbXXEurq8v0aWO1sFhklSJTxEkiyyw8VdqhTvUg+GKo+6/&#xA;OPyDY+RtO86alqAsNI1SFZrKKYVuXLCpiWGMyFpFOzcageNN8VeR3n/ObnlBLopZ+Xb+e1BI9aWS&#xA;GJyOx9MGQb/62KvRfy4/5yH/AC38+XKWFhdSafrD/Y03UFWKSQ+ETKzxyHwUNyp2xV6ZirCvzR/N&#xA;zyn+W2mWt9r/AK8zXspitbKzEb3D8RV3CSSRDglVDGu3IeOKqeifnP5C1P8AL+Pz3NenS9CdpI2+&#xA;vhUnWSJ2Ux+nG0vJ248lVCxIxV5Zq3/ObHkm3uzFpmhX99bq1DcStFb1HdkSspPtyp9GKsw/L/8A&#xA;5yf/ACy84XcWnNPLomqTEJDbaiFRJXJoFjmRnjJ8AxUnsDir1zFWL/mP+Yei+QPLL+YtZhubiyjl&#xA;jgMdmsby8pTRTSR4lptv8WKpZ+VX5yeWPzMt9Rn0G1vbZNMeJJxfRxRljMGK8PSlmr9g1rTFWPeZ&#xA;P+cn/wAsvL3nWXynffXHubadLW61GBIHsoZGoH9R/WEn7omklI9iDir1tHSRFkjYOjgMjqagg7gg&#xA;jFUh89eeNA8keWrrzFrsrJZW1AI4wGmlkc0SKJSVDO3zA7kgAnFWC/l5/wA5J+T/AD95ki0DQdH1&#xA;n606PLLPPDbLBDEg3eVluXYLUhRRTuRir5e/5yA/JXWPIfme71C0tXl8p38zTWF6ilkgMjV+rSkf&#xA;YZCaJX7S+9QFXkuKvaf+cWfzL0LyT51vk8wXYstJ1a09FrlgxRLiJw8RfiGopUutfE4q9m/PD/nJ&#xA;zyhY+V73RfJuorquu6jE8Au7arQWsbji8nqmis/EngErQ7ntVV8YYqj9G0HW9bvBZaNp9xqV424t&#xA;7WJ5np0rxQMae+KvYvJ//OIX5o606SayLfy7ZtQs1y4nuOJ7rDCWFfZ3XFX1F+Vf5H+Sfy5t+elw&#xA;m71mVOFzrFzQzsD1VAPhiSv7K9e5OKvQcVdir4A/5yj/APJ7eZv+jH/un2+KvvLTjKNFtjCqtKLZ&#xA;PTVyVUt6YoGYBiBXvQ4q+G/MH5X/AJzeevzjn0rzLaPb61fs88l5IGayhsozQPC68lMKAhUANakA&#xA;/ETir3Ox/wCcMPyyi0oW15f6nc6gVHqX6SxRUem5SL03VV9mLfPFXzj+a35WeZ/yj822hju3e2kb&#xA;6zoetQ1iZjCQSCATwliJFRXuD3xV9pfkn+YZ8/fl3p2vTcRqQ5WuqIgoouoaByB2EilZAOwamKvA&#xA;f+c4YIl1zypOF/eyWt2jN4qkkZUfQXOKvHPy68g+c/zR1600GxmZrXToeMl3cFmgsrXmzUA/yndu&#xA;KL9pifchV9OWH/OF35ZRWCxXuo6rc3nGkt1HLDCvIjqkZik4jwBLYq8H/Ov8gPMH5Y3EOq2Vy+o+&#xA;XZZAINSVfTlt5a1RJgpPE7fC42PsdsVfSH/OMf5v3XnvypNputTer5j0PhHcTMfjuLdxSKdvF6qV&#xA;f3oT9rFWIf8AOb6IfLHlhyo5i9nAam4BiBIr70GKvmjyZ5a83+etW0/yho7SXADySwwSO31a2V6e&#xA;tO4HIIuy8mpU7Dc0GKvqjQv+cLPy+t9PjTWtU1G/1AgetNA8VvDXwSMpKwHzc4q8j/PD/nGTUfId&#xA;g/mHQbqTVfLcZAuhMFF1a8iFVpOAVZELGnJQKdxTfFXq3/OJf5xXvmLTp/JevXBn1TS4vW0u6lYt&#xA;JNaAhWjdmNWaEsKeKn/JxVkP/OXv/km7n/mOtP8AiRxVhX/ODn/HK83f8Z7L/iE2KoT/AJy7/Jz/&#xA;AMqJodv/ACx+YoIx/sY7ug/4CT/Yn+Y4qnX/ADiX+cq6tpH+BNcnA1HSoi+j3Ejf31mgq0JJ/agH&#xA;T/I/1Tirx7/nIn83Ln8xvOSaTorvN5d0yU2+lxRVP1q4Y8GuAo+1zPwx/wCT7scVfUH/ADj7+UUP&#xA;5d+TkF3Gp8yaqEn1eXYlDQmO3U+EQbfxap6UxV6bcW9vcwSW9xEk0EqlJYZFDoynYqymoIOKvDfz&#xA;u/5xw8kav5S1HVfLWlQ6P5h0+F7q3FkghhnEQLvC8K0jq6g8WABDU7bYq+IcVdirMPyl8gTeffPm&#xA;m+W1kaC3uGaW9uFALR28Sl5CK/tGnFfcjFX6E+UfJfljyhpEek+XtPisLRAA3pqPUkYCnOWQ/FI/&#xA;+UxxVO8VdirsVdir4A/5yj/8nt5m/wCjH/un2+KvvXSf+OVZf8YIv+IDFXn/AOY3/OQn5beQ7h7H&#xA;Ubx7/V02fTNPVZpk/wCMrMyRx/Jm5e2KvH9U/wCc4jzZdK8pfBvxlurzcntWOOLb/g8VeY/m7/zk&#xA;Nqf5l+X7XSNQ0S1sTaXS3UN1DJIzghHRk+Lbiwff5DFXsH/OD95K/l3zRZk/uoby3mQf5UsTK34R&#xA;DFUj/wCc4/8Ajq+Uf+MF7/xOHFXo/wDziH5astM/KO31aNR9b165uLi4l/a428z20aE+C+kzD/WO&#xA;KvbcVSLz15YtfNPk7WPL9zGJI9RtZYUBp8MpWsTiu1UkCsPcYq+Lf+cSdYuLH86NOtIyRHqtrd2k&#xA;4HQqkLXQr/srcYq9b/5ze/5Rby1/zHTf8mcVX/8AOE/lm1g8pa35laMfXb29+oxyHdhBbxpJQeAa&#xA;SY18eI9sVfSOKofUdPs9S0+506+iWeyvInguYW+y8cilXU/NTir4D/KSWXyj/wA5BaPZRS8vq2sv&#xA;pDPX7azSNZmtB3516dcVfTX/ADl7/wCSbuf+Y60/4kcVYV/zg5/xyvN3/Gey/wCITYq+mb2ytL6z&#xA;nsryFbi0uY2huIJByR43BVlYHqCDTFX54fnN5Ak/Lj8w73RbK752jp9Z0+SOT96lrc8lEUtDUOBy&#xA;Q1+0u/RsVeq/84fflXY6vqdx571MxzRaPN9X0u0qGIu+Adp5F7emrj06/tGv7IxV9gYq7FWHfmz5&#xA;70byX5H1TVNRuEjma3li062YjnPcshWONF6t8RHKnQbnFX5uYq7FXvP/ADhjPaxfmzdpMVEk+j3M&#xA;dsG6mQT27kL7+mj/AEYq+28VdirsVdirsVfAH/OUf/k9vM3/AEY/90+3xV9dfm35yvPJ35M6jrlg&#xA;3DUY7OCCykAqUmuSkKyDYisfPmK+GKvj/wDI/wDJ6+/NXzNeJc3z2umWAW41a+/vJ2aZm4InL9uQ&#xA;qx5N0oTv0Kr618v/APONP5M6NCiLoCahMoAe51CR7h3I7sjERD/YoBirzf8A5yt8vflh5Y/Lu3s9&#xA;L0XStM16+uohZG0tIIrloYamZvURA/AfCGJO5IxVQ/5wc/45Xm7/AIz2X/EJsVSr/nOP/jq+Uf8A&#xA;jBe/8ThxVnn/ADh55ws9U/LM+XfUUX/l+4lVoP2jb3UjTpJ8jI8i/R8sVe8Yqxb80POVl5O8h6xr&#xA;91Jwa2t3W0WtGe5kHCBF71LkdOgqe2KvkH/nEPQJ9R/OC31FV/c6LZ3NzK/YGaM2qr8z65P0HFXq&#xA;f/Ob3/KLeWv+Y6b/AJM4qhv+cJ/ONm+ja35PmkC3sNx+k7RGO7xSokMoQf8AFbRqT/r4q+ncVS/z&#xA;Dr2m+X9Dvtb1OUQ2GnQvcXEh/lQVoB3Y9FHc4q+DvySs73zh+fekXzRVd9Sk1m7oAVjELNcknb/f&#xA;gCj3IxV9L/8AOXv/AJJu5/5jrT/iRxVhX/ODn/HK83f8Z7L/AIhNir3X8zfzB0ryD5OvfMWoEOYV&#xA;9Oyta0ae5cH0ol+ZFWPZQT2xV8KeWPK/nf8AOb8wL4pKsuq3olvtQvpqiGJVFFBpXivLjGijpt2G&#xA;Kpr+TH5j6v8AlN+YktvrEUsGmyymw8xaewPKPgxUShR+3A1T7ryA61xV9+Wtzb3dtFdW0qzW06LL&#xA;BMhDI6OOSspGxBBqMVfN/wDzk3/zkD5n8p63H5Q8qOtldi3S41DVCqySr6teEUIcFV+EcmYgncUp&#xA;TdV8n635g13Xb5r/AFrULjUr19jcXUrzPTwBcmgHYDbFU+/LD8svMP5i+Zf0HopiieOJri6u5yRF&#xA;DCpClm4hmJLMAqgbn2qQqyP81f8AnHnzz+XdoNTvfR1LRCyo2o2fIiJn2UTIwDJyOwO61oK1NMVe&#xA;f+XvMGr+Xtas9b0e4a01KxkEttOtCVYbEEHYhgSGB2I2xV9dflz/AM5jeU9UjhsvOls2iaiaK1/C&#xA;rTWTt4kDlLFU9qMB3YYq990jWtI1mwj1DSL2DULGX+7ubaRZYz3pyUkV36YqjMVdirsVfAH/ADlH&#xA;/wCT28zf9GP/AHT7fFX2D+Znkmbzr+UN/wCXbYgXtzZQyWRbYG4g4TRqT2DsnEntXFXxh+Un5r+Y&#xA;vyk803z/AFH6xBP/AKLrOkTEwuWgZgtG4sUkiYsN1PUincKvZ9d/5zfgOnsug+WXXUGBCS304MKH&#xA;xKRANJ8uS/PFXz35k1Dz/wCeW1PzrrJuNSgtGjivdRYUgg9VuMUKAURBVtkQe/euKvoj/nByeI2P&#xA;m+DkPWEti5TvxKziv3jFUt/5zj/46vlH/jBe/wDE4cVeGeV9Y89/l7e6P5y0pZLKO+SRrG5Ycra6&#xA;ijlaGaGQA0ZecRDIdxswp8JxV9CWH/OcNl+jwb/ypIdRVQGEF0ogdu5BeMugPhRvnirxn8yfza8+&#xA;fm9rtnYtbEW4l46ToFiGkHqvtyP7UstNuRGwrQCpxV9bf848/lD/AMq68nst+FPmPVik+qutCI+I&#xA;PpW4YEgiLk1SOrE9qYq8+/5ze/5Rby1/zHTf8mcVfMWgt508rrp3nnR1ns4Yrl4bPVoxWMTxqC8L&#xA;ndfiR90f7S16iuKvojQP+c3lXTlTX/LLS6ii0aeynCRSNTr6cis0f/BNiryz83fz+83/AJoSw6TF&#xA;bfo3RPUX0NHtmaZ55SaIZnAUysD9lQoFexO+Kvor/nGH8k7ryNo0+v6/D6fmXV41QW5+1a2lQ4ib&#xA;wkdgGcdqKOoOKoj/AJy9/wDJN3P/ADHWn/EjirCP+cIZYotG84yyuscUctm0kjEKqqqTEkk7AAYq&#xA;8n/Pz81L38z/AD3FY6OJJtEsZPqeh2sYJa4lkYK0/HqWmagQfy071xV9ZfkT+U9t+XPkyKymVH16&#xA;/wCNxrNyu9ZafDCrd0hB4jxNW74q8o/5y6/Jxru2P5h6JBW4tlWPzBCg3eFaLHdUHeMfC/8Ak0PR&#xA;ScVWf84ifnGbiEfl3rc49aFWk8vTud3QVaS1qe6Crp/k8h2GKpp/zlH+Q+tebLiHzj5XiN3qltAL&#xA;fUdMX+8mijJZJYa/adQ3Ep+0KU3FCq+Q77StU0+7Nnf2c9pdq3FreeN45A3ShRwGrir6+/5xD/Kv&#xA;XPLmn6l5q121ksbnVkS30+0mUpMLZG5vK6N8SiRuPEHei16EYq9h/NeyW+/LDzbamNZDJo996atu&#xA;PUW3doz9DgEYq/NXFXYqyfyF+Y/m7yLrCan5evnt2qDcWjEtbzqP2ZoqgMPA9R2IxV+hf5eecrTz&#xA;p5L0rzPaxGGLUoS7Qk1KSRu0UqVHXjIjAHFWRYqxzzd+Y3kfyhEX8x61a6fJ6ZmjtZJF+sSIKjlH&#xA;AKyuKqRsvXFXwb5r1O//ADa/OK5udMt2SfzFfRW9jCQCyQoqQRNIFNBxhjDPvQb74q/RK3hSCCOB&#xA;K8IlVFr1oooK4qwbz7+R/wCW3nq4+u67pQ/SXEL+kbZ2gnIAoObIeMlBsOamnbFWI6b/AM4h/k5Z&#xA;3SzzW99qCLv9XuboiM/P0Vhb/hsVej6n+Xfk3UfJ0vk6bTIofLkqojWFsPQQem6yqVMfEhuaBq9S&#xA;euKqfkL8t/KHkPTbjT/LNmbS3upjcTl3eV2cqqbvIWbiAmy1oN/HFXzl/wA5x/8AHV8o/wDGC9/4&#xA;nDir07/nHvy5oPmL/nHby7peuWEOo6fN9e529wgdajULijCu6sOzDcYqpXn/ADiD+TlxeG4ihv7S&#xA;Imv1SG6JiG9aVlWSSnb7eKs98jflN+X3kdSfLmjxWty68ZL5+U1yynqPWkLOAf5VIHtirLsVfNf/&#xA;ADm9/wAot5a/5jpv+TOKpt/ziRpmnap+St5YalaxXtjcapcpPa3CLJE6+lDsyMCDiqb6t/ziP+Tl&#xA;/dNcQ2t5pwYktBaXJ9Op32EyzEfIGmKsu8jfkn+WnkmYXWhaNGmoDpqFwzXFwK7Hg8pb06jrwAxV&#xA;nOKpD518keXfOmhtofmCBrnTnkSZokkeI84zVTyQq2KpXpf5Q+RNK8m3nlDTbFrTRtQVkvRDLIlx&#xA;KrMWKvcA+qw3K7t9k06YqlPlP/nHj8qPKuu22u6RpLJqVnyNtLNcTTKjMpXkEkZl5AHY0269cVek&#xA;Yqp3FvBc28ttcRrNbzI0c0LgMjo4oysp2IINCMVeW2H/ADjD+T+n6jBqNhptza3trKs9tNFe3QaO&#xA;RG5Ky/vOxGKvVsVdirsVWXEENxBJbzoJIZlaOWNtwysKMD8wcVfm9+an5c6v5A843uh30Ti2DtJp&#xA;l2w+G4tSx9ORT0rTZh2aoxVh+Kr4opZZUiiRpJZGCxxqCzMzGgAA3JJxV+jv5M+VLvyn+V/l7Qbx&#xA;PTvbW253UXXhNcO1xIh91eUjFWaYq8J/P7/nH3zF+ZfmjTNV03U7OxtrOzFrKtyJTIW9V5OShFII&#xA;o/cjFWQ/k3/zj35X/LYvqAlOreYpU4PqcqBBEh+0lvHVuAb9olix+W2KvVcVdirsVdirsVfJf/Oc&#xA;f/HV8o/8YL3/AInDir1//nFz/wAkT5Z/6Pv+6hcYq9VxV2KuxV81/wDOb3/KLeWv+Y6b/kziqf8A&#xA;/OG3/ko5v+2rc/8AJqHFXuuKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KsN/NL/AJVb/h//AJCL9Q/R&#xA;VT6P16nPnTf6vx/fc6f76+LFXyvrf/Qnf19/qf8AiD0f2fqVfR/2P1z979+KvUfyJ/6Ff/TEP+FK&#xA;/wCKP+PX9N8vrdaf8e/P9xz6/wB18X0Yq+icVdirsVdirsVdirsVdirsVYP+Y/8Ayp317H/lYP6I&#xA;9bjJ+j/0r6XLjVfU9P1O1eNaYqn3kz/CP+GrP/CH1T/Dv7z6j9Q4/Vv71/V9Ph8P97yr71xVOsVd&#xA;irsVYj+Y3/Kr/qVn/wArA/Rn1P1G+o/pX0+Hq8fi9P1O/HFUV5A/wB+gm/wL9Q/Qvrvy/RnD0PXo&#xA;vP8Au9uVONcVZJirsVdirsVdirsVdirsVdir/9k=</xmpGImg:image>
- </rdf:li>
- </rdf:Alt>
- </xmp:Thumbnails>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
- xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
- xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/">
- <xmpTPg:NPages>1</xmpTPg:NPages>
- <xmpTPg:HasVisibleTransparency>False</xmpTPg:HasVisibleTransparency>
- <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
- <xmpTPg:MaxPageSize rdf:parseType="Resource">
- <stDim:w>242.041016</stDim:w>
- <stDim:h>87.355469</stDim:h>
- <stDim:unit>Points</stDim:unit>
- </xmpTPg:MaxPageSize>
- <xmpTPg:PlateNames>
- <rdf:Seq>
- <rdf:li>Cyan</rdf:li>
- <rdf:li>Magenta</rdf:li>
- <rdf:li>Yellow</rdf:li>
- <rdf:li>Black</rdf:li>
- </rdf:Seq>
- </xmpTPg:PlateNames>
- <xmpTPg:SwatchGroups>
- <rdf:Seq>
- <rdf:li rdf:parseType="Resource">
- <xmpG:groupName>Default Swatch Group</xmpG:groupName>
- <xmpG:groupType>0</xmpG:groupType>
- </rdf:li>
- </rdf:Seq>
- </xmpTPg:SwatchGroups>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/">
- <illustrator:Type>Document</illustrator:Type>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:dc="http://purl.org/dc/elements/1.1/">
- <dc:format>application/pdf</dc:format>
- <dc:title>
- <rdf:Alt>
- <rdf:li xml:lang="x-default">logos</rdf:li>
- </rdf:Alt>
- </dc:title>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">
- <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>
- <xmpMM:DocumentID>uuid:470f514c-2b1e-2442-b3ab-6f93dc356ece</xmpMM:DocumentID>
- <xmpMM:InstanceID>uuid:2a782b07-ebfa-d24b-aa9a-5faf78cc1be6</xmpMM:InstanceID>
- </rdf:Description>
- <rdf:Description rdf:about=""
- xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
- <pdf:Producer>Adobe PDF library 10.01</pdf:Producer>
- </rdf:Description>
- </rdf:RDF>
-</x:xmpmeta>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<?xpacket end="w"?> endstream endobj 3 0 obj <</Count 1/Kids[7 0 R]/Type/Pages>> endobj 7 0 obj <</ArtBox[13.7798 8.81445 242.041 75.4404]/BleedBox[0.0 0.0 242.041 87.3555]/Contents 8 0 R/LastModified(D:20131231161441+01'00')/MediaBox[0.0 0.0 242.041 87.3555]/Parent 3 0 R/PieceInfo<</Illustrator 9 0 R>>/Resources<</ExtGState<</GS0 10 0 R>>/Properties<</MC0 5 0 R>>>>/Thumb 11 0 R/TrimBox[0.0 0.0 242.041 87.3555]/Type/Page>> endobj 8 0 obj <</Filter/FlateDecode/Length 2240>>stream
-H͎$|eW ` ɇZ"ɪ
-z*XdEd֧||?}_o1~ZC*}?~|1ۯ2cs7_vףޏ,тcon3X?
-ܭq XH_S2khly3[S9zNa7YJâpϙ%X>rdqNcZp?0-6X!գṿVs,<CƄҀȹ\Q޽unG-̓Ŏ\8j}y>Z-bs!( peӥP#38$)#Ҥ2'-v&V|)2& ȖX1IYGnJ=R Վ?wSR0b9F&%dɇl42ߛ::a
-G"{wȜ Tf%ӓc|`LB
-ql}+tu aܗh,~ 6u@ />-nVxyMB>x1ۅ_O\Ξ0q`FEd! (O.vܥ&,7Jq]u7%+,f/6]b7˃x;
-QLăXw~V~#UI2 >gwE]GYTx26ӥ0N'I9QP7iJLٕz}!;"]D\A5_1/BƑ>0D%FG bmlYLrLQ(&Dc>( 7Z"T@7mI[RG' t=Iٛd;j(,$TIl^ؼ *]~ IԞy($/ Be:(c&^\CHVtjAGy⻊aɄnFF^Y:мbi  FD
-`R4J亄Ht5Q{Nqн( IJSMC*<N]շW3Uf1Bt\@T7/YB Z؋Vt4iL;KCP$LV[[դfQGň\kKCI}΋IH&gŴ]
-aaTV{+')s^h]u&ix^A
-[:ˎk$&P8t4 S V'yxhsF<^]ME/rb.UW]% XW7v-y=bU>j1hHozX? 3#K$2oH :Ʒ˻|>ny'8_438_E8]7Ҵ6_[s}Lg(Ox|rvoWJl5' Ӷ';<Yh:D M
-MosBGh
-71}>U)} Y~~9M?׼5.ֵ pеzNhtc,"<-x5Z> lbc/ ڙ=Jumڸ,VH_n}۞
-(xVBz%(2#u(uQWJ3Zj_FB+zpc%Ԡ,uԝE| ;R'o|;3{R7HͬnϬGVNh]>кxGh?ҺQN|& ߪTC?nOYS>55\g +1` VN`<omHu2Hah.(rQ6Ԋע.l2?;~o\F ^ W}b%|ffIFHtcQ/Ћ9]0svWna >Ri&BUuc2o{_>[
-8;Xp,SM4He.gZ>D!_j(Q"-L8,<WI_*Z0Mr=W%=I\J1c'e/peU1*\)CTY:QuqBI4t9
-)*sql#g)7K=b$JS!*+,q@/~> endstream endobj 12 0 obj [/Indexed/DeviceRGB 255 13 0 R] endobj 13 0 obj <</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream
-8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
-b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
-E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
-6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
-VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
-PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
-l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <</Intent 14 0 R/Name(svg2)/Type/OCG/Usage 15 0 R>> endobj 14 0 obj [/View/Design] endobj 15 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 10 0 obj <</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>> endobj 9 0 obj <</LastModified(D:20131231161441+01'00')/Private 16 0 R>> endobj 16 0 obj <</AIMetaData 17 0 R/AIPrivateData1 18 0 R/AIPrivateData2 19 0 R/ContainerVersion 11/CreatorVersion 16/NumBlock 2/RoundtripStreamType 1/RoundtripVersion 16>> endobj 17 0 obj <</Length 976>>stream
-%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Val\616rian Saliou) () %%Title: (logos.svg) %%CreationDate: 12/31/13 4:14 PM %%Canvassize: 16383 %%BoundingBox: 404 477 633 545 %%HiResBoundingBox: 404.2593 477.6367 632.5234 544.2627 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 390.4795 468.8223 632.5205 556.1777 %AI3_TemplateBox: 511.5 512.5 511.5 512.5 %AI3_TileBox: 108.5 233 891.5 792 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 2 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: 208.5 631 2 1243 562 26 0 0 78 133 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 7 %%PageOrigin:0 0 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MO %%EndComments endstream endobj 18 0 obj <</Length 6024>>stream
-%%BoundingBox: 404 477 633 545 %%HiResBoundingBox: 404.2593 477.6367 632.5234 544.2627 %AI7_Thumbnail: 128 40 8 %%BeginData: 5874 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FD16FF7D2727F8F8F8527DFD76FFA827FD08F827FD74FF7DFD0BF8 %27FD72FF7DFD0DF852FD08FF52F852FD3EFFA827F87DFD23FFA827FD0DF8 %27FD07FF7DF8F8F87DFD3DFF52F8F8F8A8FD22FF52FD0FF8A8FD06FF27F8 %F8F827FD3DFFFD04F852FD16FFA8FD0BFFFD10F87DFD06FF7DF8F8F87DFD %3DFF52F8F8F8A8FD13FF5227F82727A8FD08FF7DFD10F8A8FD06FFA87D27 %7DA8FD3DFFA852277DFD13FF27FD06F8A8FD07FF7DFD0FF827A8FD5EFF52 %FD08F8FD07FF27FD0FF827FD5FFFFD09F852FD06FF27FD0FF87DFD13FFA8 %7D7D7DFD11FF7DA87DFD11FFA8A87DA8FD1FFFFD09F827FD06FFFD0FF827 %FD09FF7DF827A8FD05FF7D52FD05F852A8FD07FFF8F852FFA87DFD05F852 %A8FD07FF52F8F8FFFFA827FD04F8277DFD07FF7D27F827A8FFA827F852FD %07FF52F8F8F8FFFD0AF8FD05FFA8FD0EF827A8FD09FFF8F8F8A8FD04FF7D %FD08F827A8FD05FF7DF8F852A827FD07F8277DFD06FF27F8F87D7DFD08F8 %27FD06FFA8F8F8F8FFFFA8F8F8F8A8FD05FF7DF8F8F87DFF27FD09F87DFD %04FF7DFD0DF852A8FD09FFA8F8F8F8A8FFFFFF7DFD0AF827A8FD04FFA8F8 %F8F827FD0AF87DFD05FF27F8F827FD05F827FD04F827FD05FF7DF8F827FF %FFFF27F8F8F8FD04FFA8F8F8F852FFFFA8FD09F87DFD04FFFD0CF8277DFD %0CFFF8F8F8FFFFFFA827F8F8F87DA8FFA852F8F8F852FD04FFA8FD06F87D %A8FFA87DFD04F8A8FD04FF52FD05F852A8FFA8A827F8F8F852FD04FFA8F8 %F827FFFFFFA8F8F8F852FFFFFF27F8F827A8FFFFFF7DFD08F827A8FFA827 %FD0AF8527DFD0DFFA8F8F8F8A8FFFFFF27F8F8A8FD05FF52F8F8F8FD04FF %A8FD05F8A8FD05FFA8F8F8F827FD04FF27FD04F852FD06FF27F8F8F8A8FF %FFFF7DF8F827FD04FF52F8F8F87DFF52F8F8F852FD05FF7DFD09F852FD09 %F8527DFD11FFF8F8F8FD05FF7D7DFD07FF27F8F87DFFFFFFA8FD04F8A8FD %07FFA8F8F8F8A8FFFFFF52F8F8F852FD08FF27F8F852FFFFFFA8F8F827FD %05FF27F8F852A827F8F827FD07FFA87D52FD0EF827A8FD12FFA8F8F8F8A8 %FD0DFF52F8F852FFFFFFA8F8F8F852FD09FF27F8F852FFFFFF27F8F8F8A8 %FD08FF7DF8F8F8FFFFFF7DF8F827FD05FFA8FD07F8A8FD0AFFA8FD0CF827 %FD15FFF8F8F8A8FD08FFA8A87D7D7D52F8F827FFFFFFA8F8F8F87DFD09FF %7DF8F827FFFFFF52F8F827FD0AFF27F8F8A8FFFFA8F8F827FD06FF52FD05 %F87DFD0CFF52FD0BF8A8FD14FFA8F8F8F8A8FD05FF7D5227FD08F827A8FF %FFA8F8F8F8FD0AFFA8F8F8F8FFFFFF27F8F87DFD0AFF27F8F87DFFFF7DF8 %F827A8FD06FF27F8F8F827FD0DFFA8FD0AF852FD16FFF8F8F8FD05FF27FD %0BF827FFFFFFA827F827FD0BFF27F827FFFFFF52F8F87DFD0AFF52F8F852 %FFFFA8F8F827FD07FF52F8F8F852FD0EFFFD0AF852FD15FFA8F8F8F8A8FF %FFFF27FD05F82752525227F8F827FFFFFFA8F8F8F8FD0BFFF8F8F8FFFFFF %27F8F87DFD0AFF52F8F87DFFFF7DF8F827FD06FFA8FD05F8A8FD0CFFA8FD %0AF87DFD16FFF8F8F8FFFFFF52FD04F87DA8FD04FFA8F8F827FFFFFFA8F8 %F8F8A8FD09FFA8F8F827FFFFFF52F8F852FD0AFF52F8F87DFFFFA8F8F827 %FD06FF27FD05F852FD0CFF7DFD0AF852FD15FFA8F8F8F8A8FFFF27F8F827 %FD07FF7DF8F827FFFFFFA8F8F8F87DFD09FF7DF8F827FFFFFF27F8F827FD %0AFFF8F8F8A8FFFF7DF8F827FD05FF52F8F8F852F8F8F87DFD0AFFA8FD0B %F852FD16FFF8F8F8FFFFFFF8F8F8FD08FF52F8F827FFFFFFA8F8F8F827FD %09FFF8F8F87DFFFFFF52F8F8F8A8FD08FF52F8F827FFFFFFA8F8F827FD04 %FFA8F8F8F852FF52F8F8F8FD08FFA852FD0DF8A8FD14FFA8F8F8F8A8FFA8 %F8F8F8A8FD06FF52F8F8F827FFFFFFA8FD04F852FD07FF52F8F8F8A8FFFF %FF27FD04F8FD07FF7DF8F8F852FFFFFF7DF8F827FD04FF27F8F827A8FFA8 %F8F8F827FD05FFA827FD0FF827FD15FFF8F8F8A8FFFFF8F8F87DFD04FFA8 %52FD04F827FFFFFFA8FD05F852FD05FF52F8F8F852FD04FF52FD04F827FD %05FF7D27F8F8F8FD04FFA8F8F827FFFFFF52F8F8F87DFFFFFF7DF8F8F87D %FFFFFFA8FD09F82752FD08F87DA8FD11FFA8F8F8F8A8FFFF52F8F8F8527D %7D5227FD05F827A8FFFFA8FD06F8277D7D7D27FD04F8FD05FF27FD06F852 %7D7D27FD04F87DFD04FF7DF8F827A8FFA8F8F8F827FD05FF27F8F8F8A8FF %FF27FD08F852FFFFA852FD07F82752FD11FFF8F8F8FFFFFFA827FD09F852 %F8F8F8FFFFFFA827F82727FD0AF8FD06FF52F8F82727FD09F87DFD05FFA8 %F8F8F8FFFF52F8F8F8FD07FFF8F8F852FFFF27FD08F87DFD04FF27FD09F8 %52A8FD0EFFF8F8F8A8FFFFFF7DFD08F87DA8F8F827A8FFFFA8F8F8F8FF52 %FD07F827FD07FF27F8F87DA827FD07F87DFD06FF7DF8F827FF7DF8F8F87D %FD07FF7DF8F8F87DFF52FD08F8A8FD04FF52FD0AF8277DFD0DFFF8F8F8FD %05FFA87DFD042752FFFFFF52527DFFFFFFA8F8F827FFFFA87D272727527D %FD08FF52F8F87DFFFF7D272727527DFD08FFA85252A8FF5252527DFD09FF %7D525252FFFFFD07F827FD05FF7DFD0CF87DFD0BFF52F8F8F8A8FD07FFA8 %FD0CFFA8F8F8F8FD05FFA8FD0BFF27F8F87DFD04FFA8FD24FF27FD05F87D %FD05FF7DFD0CF827FD0AFF7D27F8F852FD15FFA8F8F827FD11FF52F8F87D %FD2AFF7D5227527DFD06FF7DFD0DF8FD08FFA8FD05F8A8FD15FFA8F8F8F8 %FD11FF27F8F87DFD35FFA8FD0CF827FD08FF7DFD04F8A8FD16FFA8F8F827 %FD11FF52F8F87DFD36FF27FD0BF827FD08FF7DF8F827A8FD17FFA8F8F8F8 %FD11FF27F8F87DFD36FFA8FD0BF87DFD08FFA8A8A8FD19FFA827F827FD11 %FF52F8F87DFD37FF7DFD09F827FD25FFA8F8F8F8FD11FF27F8F87DFD38FF %A82727FD05F852FD26FFA87D527DFD11FF7D527DA8FD3AFFA8A87D7D7DFD %66FFFF %%EndData endstream endobj 19 0 obj <</Length 24376>>stream
-%AI12_CompressedDataxgc";(6#t;sq m13Jn:s޳<XTR%UIEnѩi91%U})IJ֠ױ(s>y*m+FkM5;%|`uPzN^T[`>ϗ~K
-[|7Gn>|ㅂx1)-R+T?^?(*"muF{))qRR*EQLʒ Z]'/ȪE,4OEʝSkN];[JnHo𥚼Z_ɭV
-?0Sщ6&}?>wڍ'" 4ۋ~~/|Х'?68!_
-M4+<Mp ŒZTD%CT?~E8y%P|sN*4w}Ciu?O<yYoF53keXǡ uVmjg 7I gٖ5 s8rݱ+0%0
-EDw,vБЧscb
-E5~.a_:b"cJR v^.~ 'YP헅6|ċ> 3j<oId;V/ϩ)\P^*QpU[g*$3Dsrc9:UaA6猻Ve6ieIX=su9uzM|hqb";9mgaП=e_ LV7G'
-z_IZ
-, .E* weX5,XOZRH{pІY 9SG H! ۻ ??=ӥ=!:tQb*g=X4i[m"g2jśzNUjY2wK;(wZ5I4W<4h)o;jPd #KH8V5?-rQ5OdW۽n l${ o_If6ZML ~QEٿ&L *3кHhU<xZOjK>[֚fc|&HzUIYb!ITQLG޻E0h s8@mX8ٓzܡ7 ,b5~9v2;?
-؉BXԶZӞ$+%d@ݷ$s@s$.3<F1{wf+_ԫ-$'qԊ$ kׯZFa'}^V|Rֵ[+2A?uCd,`ԶߤMADD2
- .ZZ&7Z$ [QK7|r)\CUFnޡCf}I$!œCɃ
-hvk
-,+'/8
-\]tC*iRMgӔZU @FDg@
-Șomr׃s*[ӈP.zmV0ˣukZaF=
-X^D]/J[{v>z n}:91@fmP^[ VhܬYi"5(uɚS]ӧ!"/ ӣ
- XqR148/4V3^RuЮP c&Ҧn޶*f?u)s'k50l$2O?9F!WcЫ
-0{QLU̡ (zZS? $ވNSzlӬOEOϚk3M̊}Zի O5,?耟6:B ^8Ht c$ꘉ;m>V/Ak+N#B |gnJN{a 76ڑ>+NHǝvw>j0æyvRF~!{nsHz_1a[̎14|[8:(0"} Ϊ`(o^%jr@*ȾSԫݮtD
-xpdJ*_Z;٫Pm7%X+V[>y#]¿~u.KI l M{6e&a0i M;E]K6clUax hnޠoֆU7{AEsskj&+A6c<A:TTJ=N9*{4h^w$=^ٜfKշ*^oYu(B$ d,#4qf!C;tlW4irG/ӎWZ}JKK&ؼDKVN.}VLn [|>VvQź ~ƧӻdnGH6R<pѣܕspA ӪS9ָKP
-m#w(l:?{xܼ; 6O`-0{wWrI~V7# 7]d$D;R#^Eh̡mqkr4`ƘIz[<-!lܬZOWC2ۡm2/?cPMUk(^aӡOy<l۷9/aC6%7/!5~]+p{__mI>|~e~MV˯UX\=/ŽT0wH>VR'wj*ބO/`"=)rܱVo3dx9=M c\CZ?}YQ)?Vr/N5޳Hjm3=98T{k|s']w\r{YY\ 184NץTi?SrJj@,IerjJ< =_[0Mƚ7(& Rseanm쪔/]a}z mq۲ QOח{CK9
-E'h7e20Jc'8M^ȋG`qm75k/T_}/\(/Bxw7tVt%uߛ=Q<a:}5r]Z8=}}w"QȰW*z:U̴3Ak}wYA!VސVZӹ%cг92(XUQ.A$k;Ug80)IR?wH-p~'dga88Ma{ݭߠ{BT]\n]x:UʉkXvUm ZNˊ33W\^ڃ,̰3G砻ߔk_Hgs;ǦO{s0SK]G'Ơ ҒكmqGJރO ۺ9iK4>uްJ{CRYOyzܷuq{q\|]sOG²נaV{^gߠϠ;7} Ha^>chgЇ"X}Yhl>z"wЎy{9*A{TOrƠ5q޵iՅZڃvZ6f=]|=l[,unƠk+4n}'8vNwq0+<əfFΏ<t=\sE+3KۇNV-*'8haxbzjvo=HM [dP\oy?:;t#(xm_gJXj\_-, fSbZM&k~_u W]쬜Cbn;u߭sGMqX$_iqz;}}.?s.S>q]_WRAd|T{Uj~un4z]qgMcOŝmgtnC{irOWˢ |}¡kmߚ}}MbO>O<pԾ\^aL蝥NK&ӽT~oc~us>JH?JaVo~W?ϙ۹s4.:ʽVi4yж n2u>QmW.Kĸ,䡌lo[Ehv5[8nj<-m;Wֽ7 J{lț1wX6tZ8ҙYSY4vNr5+SF5(H1kXrgPPOUA_ͩߘ{K=kP1'ݼ-ʰJ3=>xjIn@;(|Eˡa
-8UN/ziH`6KYcxˠzaˑz՛?[9ne
-QΡ4"ϻ8-EPd$DẀZKhЕGqOX[SB8ǃ _ '
- '/Ga)hwWM*ly,bБqtlỠ*h,,BDچOg5kɚr\,&^l`k:*MVaBU}{qJqC h/AxO
-cxzbŒݗ.d敹l#&WP^`<_@gaqX>sF"dEitJ2<WS:Is1xf?=ɟCAe!dg9VS"]yF݄& 1-xr>=ė[b<AF2CfhE Z 
-A\!xVMyH"'V3#/(1 }B&q9fn]Dˎ3c4dESaD<A<>Ƿ:S4$*znyC !sy0ÈDDw`u^F?3 d-q:?c!70&әKt:짐H;1dohr§\0cn>;y{qzH;83pt<FqZJ$,Qg vod$ ͵ܮν?xXܐx\ PӼ
-
-ϔuwVcr&ʩGP2XnyF I :Q;H;yz!4c?{' sy$+#@xfcJ֍ FDL<2֝]&#㲒վ#)Ixdl<##,ef8D4{d|σ=2
-5ArKLz.^7a7Uٟu*n23HN5gL_ͩT{7l+ܺ:q qx{6w{TGJXu}O^w6<jO }e7Kr) \zIk"zɆ=Gq}O xDw]j#Fyg$*C^b_#!Xt7l:/"&B6++.~t^>Dzt^t_&ME9gz'MH熐hta1ɦ:>{'ι4ddl:IgL2.=Wcf1V.Xt^(pN"kJir<^3k;!'MՕq;l:\:1FXlM(+.&"dyXMysϦb8w&MuZBʉf9; ^G̦Zgߓ2Vˈtv/:F̦ca\fyA䧔4
-G'~FځC )tҙ݂^`w'2C?г_?HOzwB$f._T^ *tp56(ȑ2S&^0r%2;wq 8K
-cB'%;uwiPO]kߌԘe1 c=@g!#=A z/]?<_=x7~XW8Rmw[}k_}<g\y&FCӏ cx/Uɼ=/ӱ gmKǻa]Ч9%[<|Qrw<zoܬhjs^9ֻ~jY?ֻ~6pGy/~{|z\_,܀+wFM7r~ϱ ^#L]?3U?/8Љhx/l706'W-s7]]??H_Pv~G~/UD:jh)Gx/U},zBl~GqwFaFxw%Nڐw[_p@[<ha !">,ǮpWKk|p3mds0u`qζm8]]l( iV
-TumrF=kۺv(W6y06U&U0jo򬪧)tSk_e(p;?rK\&pJy~Ss3wƝwXT5w{容~~Zps.{5=֦NW\s/rNA=t߾N͕fQ%8cn\;;Q_7R 雳e>=}HOMtޗڏʂd YzH6+inFk@YǓBK{=L'=Jn% H-
-K{vZ@r^t@pv//>Dh{ ȟ^Ư0@+rBuev=wUYّ~0,2ݛojZ=RMOG(Te1])înx~/r6=dA^UʒW4(RKm`}kG.{jړ U_ ta,91G7yS0~s'j ?֬]OO)<( X>>[,kOVKVWZe"bDo7qMnKw 毆`}H
-zfDZE9ol?L-ֲ[yI& .2U`yb9ӽw}YS>^;?کV;www@cd ҝmaw@u$p
-.p3~39}/ΔʻW/D:JB}c$rBnI.O5-^a>6MckDAF\4滽o.<_uf?yeNRwbKύsiⷩet_^!;ϩ%ғ{)7s5I?(+~~ݿF p-}1b;+2A>ؑC(֫.?a5ؔ>X?[*7+ 1I*ԠlxY*t>l7SQ o$nYNJںGY9^z"6E#hQ~9{AMhPAlA~yy)D~USk9K=D4Gk٪/gK>@կ/{'߹d'c/#V-<YD7/<Yv<I OzGt{ _o^xVLZxYxŗ̎'ve,dcNwfE"=eۆp_i4~ba*uG5+mI*l_${wt886xIξ;hN8` eO:rDV hBT]v 3Qw4(<'n0<>qH,AbҏEWC<xY_6/T YG0$|Ϭ߷=lغ˟;A̞^n]D\rfuIu
-;4@ߺgv{6sW]JAʎOIYs_i{6,Մl + RF& "EAwaE@ `$AōoK=+И@$ AϠC {W^tH۔@̇3ta A,~t0G+~IJ]0hv~1ni݅~ @%Ž0^m,i%ɑِ~ڰă@gΨq*U,A]dX ~{;Ch]T9ɰtvu526UKy]`9ח>ڤ.2.$]TH+_Ԭ'z6q- \sxX/@5146ԅEyF8/C]0466 ,Mcx_jB=9;X|cQ1`KXs`$BT;*`eb[T"/*ɥP:cPOC%z~/=4toh P3_lň89Q3@ r@fꏞ5)5tofl:rd~}zb#{i~h8ٞ=hd{",=GD+)qO
- ʳś--'5f-3H3Ɩ%굖Q_E~o尦\sX'eyBS)++ǑKfOgktט<Nnst` u3rudl>zL$GwK(dNN TG'd+34%'% 烖ͷf;M,'
-<nt*]j˝SkK"z%ɳK9GaU~Uw?WWv0/Lp
-MCʾ71 hTNc$z]g8{w+J](BTVkơ[SV+;zGwjp;ST?pfŕߜUgsO
-vPb?$S ]5`ՕpElnHp0*
-Kmsy8XyDR&l.fSk_ӽKzq#
-#( ߨ5!6ӳD4:y6{qea)#\buzCD{}ukaPfȶاhu† Ýʑ.;UzQy[-NnYʹ{%f %r.(_7;=7+ GZ}+ ͻ+x[L-2q3tՂ\-zCnf'qah&GSy!ᦸH|%Ca63#䠆vtBQ
-t%M,_͘S&dӦ1-A}?dލ;3QMTr;+;)L]; Ts!ZyD@ "[e %{BF*.w6ލc7U> :|Z'`~_ w - 2\`Pp5\@]㉠
-`6,
-6'
- JfP]9 ޷x9 ȇq,#0B٤(\ { rQjp m7Ž{0Jr<0=[
-ƻ?Q:`F]R)]$<⏺n;؃q0;9{v(*jt9ܹ:piXaX8:x{6Fc0:pL3};;1v`-3[598i5x\VsEcQ=@؇'
-] E%u)2^IZ7&OF+ؤMqG 8N߈q&x'o$ x'o}<7Wz{'oL=7& d8N߈ cD}n$Pqi>csVV
--?*p*< VA%}]Hgy#
-lUizOr_&yAI
- XzTKdz?߄ \f촫&#dV>ެ ZoGq:Tl5tM~oiu:nw O.`jk`u.oѩO)K6&g璺Z07z-L2
-m0~wPVҐ{>"{Kz V7jg#(h#C]u_K$8 9j
-k//oqa4?+H &c
-蠿kͷiA
-Htb+(PyaeO'aj-8* uW? t'.N_1Zi_Jc\6Z5|2Y^8Ϧ4Ή#&\*0sq2̕ylEQTgѩiZ\2SLjת9q0όAvO6-vt%澨,+.y 8?$%\ R(撧 Ah/Ԣ" Cd\50BR*)yE'y pyEZJ1/b J<((RRR|ILT(+ :2A\!_DyAUle]qyj^8!cT 2)SDAw\>`B ēHLFFy G*tԼӅE#.#ʊ
-eJ^ERUEl?JHbQDL΋EQYjUj
-^eZd S$XWYB@8(-K
-Jy~J̈d r''") 2&A@"eϫJEA\"(@:
-n:@qa Kɸ',dl'#$E 9( '+Ё%n[TK᝺{LddP^ZzR]OM^OΧV1h5vakkA:fﶣdqYv77^--jڪ?P kFJn_ O
-%.:$U "P֊ :
-#~EsEKKC@@A *")"7AkA
->k`; 4GХp
-% TNP2"QCAM \)q<J1Kh*SL42
-'J6̎,TڣY6gd9uۆ\1+_IO&.
-X<ڗXZJv pB
-t@IB8t;8%"_2F%49E*R2OJ`IKd#q 2QEQDJDMysWe*jXxxRD A*' ,UJ}"%:D!_BɒR5xD-(+(
-)
- "U @"KDH3ē"n@ DfbI "W4pb`;mo2tND
--=P9Èы*GU5/)Cb#^eģcP(Z&j*C_Ez d`}Y0$9BnKR"$D `F;J5qڣtC!ax2H<rH-RP,.
-%ѪhΩ RJݯ"D*^6JH7."@ _ "4
-J[L2-E
-Sb G D0Z݄k=*)D"(tjIr0QTM?fV\͕Us(D~<x2YULQ=*)
-)S3[E<bv$/!9#)
-vPgUlDA9GD%rX4<TW3K@Q۵$ް0'h.IT RA*(H%a:xĿ
-f+%F S"hhȢSsA7SV Ɗ"-L"0bDXJDi.DUĈ΢H"*+4 DFb "b e$1j4/B.Uak./o MPxT~",
-jBS)R-4iNB*`X]f
-M#KhZ1BӜ%4yBӄ&lxµšMVhxj۵p]|ʒvR䐙E`1E&%2-"aDYƊGYE?W#0S^B@ t I" `Kˢh6K
-$mJ
-{e:9+-`])Ŀi
-,(1‘._rJU{IM7-.lYRA}ԴGK5,$X=Y2cť9+[ʙ3 +.M,صLL= -߿_y]^by>J9kE% ~<="mG3JLi;U1e4TyRD$\`dU4/:zAJp C{>*u2sfJ`SL劤8(A76$uzv =8mb⹷$Y،z†ߪdbB=kkFrXv-RQ'zD,cu!WXGv+ەs\
-0000000016 00000 n
-0000000144 00000 n
-0000015736 00000 n
-0000000000 00000 f
-0000019233 00000 n
-0000051305 00000 n
-0000015787 00000 n
-0000016133 00000 n
-0000019529 00000 n
-0000019416 00000 n
-0000018442 00000 n
-0000018672 00000 n
-0000018720 00000 n
-0000019300 00000 n
-0000019331 00000 n
-0000019602 00000 n
-0000019776 00000 n
-0000020802 00000 n
-0000026877 00000 n
-0000051328 00000 n
-trailer <</Size 21/Root 1 0 R/Info 20 0 R/ID[<7B68FD05488848C8A3754EC80A6CE94A><07F4025A775F4C9191C2F2F6975EA0AB>]>> startxref 51512 %%EOF \ No newline at end of file
diff --git a/dev/images/placeholders/jingle_audio_local.psd b/dev/images/placeholders/jingle_audio_local.psd
deleted file mode 100644
index dd0389b3..00000000
--- a/dev/images/placeholders/jingle_audio_local.psd
+++ /dev/null
Binary files differ
diff --git a/dev/images/placeholders/jingle_audio_remote.psd b/dev/images/placeholders/jingle_audio_remote.psd
deleted file mode 100644
index f9fec53b..00000000
--- a/dev/images/placeholders/jingle_audio_remote.psd
+++ /dev/null
Binary files differ
diff --git a/dev/images/placeholders/jingle_video_local.psd b/dev/images/placeholders/jingle_video_local.psd
deleted file mode 100644
index ab6683af..00000000
--- a/dev/images/placeholders/jingle_video_local.psd
+++ /dev/null
Binary files differ
diff --git a/dev/images/placeholders/jingle_video_remote.psd b/dev/images/placeholders/jingle_video_remote.psd
deleted file mode 100644
index b3d6dfae..00000000
--- a/dev/images/placeholders/jingle_video_remote.psd
+++ /dev/null
Binary files differ
diff --git a/dev/images/sprites/animate.psd b/dev/images/sprites/animate.psd
deleted file mode 100644
index cd3d6960..00000000
--- a/dev/images/sprites/animate.psd
+++ /dev/null
Binary files differ
diff --git a/dev/images/sprites/archives.psd b/dev/images/sprites/archives.psd
deleted file mode 100644
index 6ae14f20..00000000
--- a/dev/images/sprites/archives.psd
+++ /dev/null
Binary files differ
diff --git a/dev/images/sprites/background.svg b/dev/images/sprites/background.svg
deleted file mode 100644
index 59332ec0..00000000
--- a/dev/images/sprites/background.svg
+++ /dev/null
@@ -1,137 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="651.42865"
- height="345.71426"
- id="svg3930"
- version="1.1"
- inkscape:version="0.48.1 r9760"
- sodipodi:docname="background.svg"
- inkscape:export-filename="/var/www/jappix/trunk/img/sprites/background.png"
- inkscape:export-xdpi="100"
- inkscape:export-ydpi="100">
- <defs
- id="defs3932">
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient10063"
- id="linearGradient3482"
- gradientUnits="userSpaceOnUse"
- x1="497.10239"
- y1="668.77277"
- x2="565.27148"
- y2="830.20129"
- gradientTransform="translate(6.8684,-377.25078)" />
- <linearGradient
- id="linearGradient10063"
- inkscape:collect="always">
- <stop
- id="stop10065"
- offset="0"
- style="stop-color: rgb(255, 255, 255); stop-opacity: 1;" />
- <stop
- id="stop10067"
- offset="1"
- style="stop-color: rgb(255, 255, 255); stop-opacity: 0;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient7130"
- id="linearGradient3479"
- gradientUnits="userSpaceOnUse"
- x1="584.05695"
- y1="712.74493"
- x2="627.13647"
- y2="885.77643"
- gradientTransform="translate(47.8684,-362.25078)" />
- <linearGradient
- id="linearGradient7130"
- inkscape:collect="always">
- <stop
- id="stop7132"
- offset="0"
- style="stop-color: rgb(255, 255, 255); stop-opacity: 1;" />
- <stop
- id="stop7134"
- offset="1"
- style="stop-color: rgb(255, 255, 255); stop-opacity: 0;" />
- </linearGradient>
- <linearGradient
- y2="885.77643"
- x2="627.13647"
- y1="712.74493"
- x1="584.05695"
- gradientTransform="translate(47.8684,-362.25078)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3928"
- xlink:href="#linearGradient7130"
- inkscape:collect="always" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.35"
- inkscape:cx="240.71429"
- inkscape:cy="162.85712"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:showpageshadow="false"
- inkscape:window-width="638"
- inkscape:window-height="429"
- inkscape:window-x="0"
- inkscape:window-y="56"
- inkscape:window-maximized="0" />
- <metadata
- id="metadata3935">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Calque 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-134.28571,-309.50504)">
- <g
- transform="translate(-115.10183,43.981468)"
- id="g8047"
- style="opacity:0.41999996">
- <path
- sodipodi:nodetypes="caasccccc"
- id="path8123"
- d="m 719.72554,282.50011 c 8.80952,4.27323 40.98591,19.63054 40.84292,38.29195 -0.61787,80.63724 -105.61789,129.30437 -178.99988,162.73833 -96.57838,44.0026 -311.68016,74.01229 -316.20713,37.22319 -6.30787,-51.26189 42.06898,-85.79223 70.07838,-85.39633 12.03762,-29.84498 36.0663,-45.16799 60,-30 39.00979,-67.86552 93.56208,-90.56432 151.42857,-87.14286 19.00417,-20.38929 51.2834,-17.3287 55.71429,1.42857 35.23809,-34.12182 81.90476,-54.23577 117.14285,-37.14285 z"
- style="fill:url(#linearGradient3482);fill-opacity:1;fill-rule:evenodd;stroke:none"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="caaaaccccc"
- id="path5190"
- d="m 764.62961,356.07683 c 7.52623,0.25538 15.36594,7.64026 18.81707,14.84589 13.05465,27.25682 15.2907,65.1174 -0.86059,90.66136 -29.18593,46.15882 -93.14305,64.90817 -147.33702,71.6512 -63.6092,7.91451 -168.87188,21.93717 -188.27022,-39.15681 -6.62304,-20.8589 25.38616,-55.44637 44.79362,-48.00164 18.57143,-30 71.42857,-21.42857 71.42857,-21.42857 34.20965,-77.31154 82.32833,-65.39072 111.42857,-47.14286 14.50709,-4.72848 30.73977,-12.90813 34.28571,4.28572 27.24541,-40.37603 38.93849,-23.72683 55.71429,-25.71429 z"
- style="fill:url(#linearGradient3928);fill-opacity:1;fill-rule:evenodd;stroke:none"
- inkscape:connector-curvature="0" />
- </g>
- </g>
-</svg>
diff --git a/dev/images/sprites/browsers.psd b/dev/images/sprites/browsers.psd
deleted file mode 100644
index 40949103..00000000
--- a/dev/images/sprites/browsers.psd
+++ /dev/null
Binary files differ
diff --git a/dev/images/sprites/buttons.psd b/dev/images/sprites/buttons.psd
deleted file mode 100644
index d3e7f1cf..00000000
--- a/dev/images/sprites/buttons.psd
+++ /dev/null
Binary files differ
diff --git a/dev/images/sprites/call.psd b/dev/images/sprites/call.psd
deleted file mode 100644
index 01b0b7ba..00000000
--- a/dev/images/sprites/call.psd
+++ /dev/null
Binary files differ
diff --git a/dev/images/sprites/home.psd b/dev/images/sprites/home.psd
deleted file mode 100644
index df5ef8e6..00000000
--- a/dev/images/sprites/home.psd
+++ /dev/null
Binary files differ
diff --git a/dev/images/sprites/install.psd b/dev/images/sprites/install.psd
deleted file mode 100644
index e537b3a6..00000000
--- a/dev/images/sprites/install.psd
+++ /dev/null
Binary files differ
diff --git a/dev/images/sprites/manager.psd b/dev/images/sprites/manager.psd
deleted file mode 100644
index e3eb592d..00000000
--- a/dev/images/sprites/manager.psd
+++ /dev/null
Binary files differ
diff --git a/dev/images/sprites/me.psd b/dev/images/sprites/me.psd
deleted file mode 100644
index b16843a7..00000000
--- a/dev/images/sprites/me.psd
+++ /dev/null
Binary files differ
diff --git a/dev/images/sprites/mini.psd b/dev/images/sprites/mini.psd
deleted file mode 100644
index 7a83b033..00000000
--- a/dev/images/sprites/mini.psd
+++ /dev/null
Binary files differ
diff --git a/dev/images/sprites/mobile.psd b/dev/images/sprites/mobile.psd
deleted file mode 100644
index ce8fc4d2..00000000
--- a/dev/images/sprites/mobile.psd
+++ /dev/null
Binary files differ
diff --git a/dev/images/sprites/smileys.psd b/dev/images/sprites/smileys.psd
deleted file mode 100644
index 5dffb4b4..00000000
--- a/dev/images/sprites/smileys.psd
+++ /dev/null
Binary files differ
diff --git a/dev/images/sprites/talk.psd b/dev/images/sprites/talk.psd
deleted file mode 100644
index 06433697..00000000
--- a/dev/images/sprites/talk.psd
+++ /dev/null
Binary files differ
diff --git a/dev/images/sprites/welcome.psd b/dev/images/sprites/welcome.psd
deleted file mode 100644
index 67c408e9..00000000
--- a/dev/images/sprites/welcome.psd
+++ /dev/null
Binary files differ
diff --git a/favicon.ico b/favicon.ico
deleted file mode 100644
index dc203776..00000000
--- a/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/i18n/.htaccess b/i18n/.htaccess
deleted file mode 100644
index a6e0b168..00000000
--- a/i18n/.htaccess
+++ /dev/null
@@ -1,2 +0,0 @@
-# Security rule
-deny from all \ No newline at end of file
diff --git a/i18n/ar/LC_MESSAGES/main.mo b/i18n/ar/LC_MESSAGES/main.mo
deleted file mode 100644
index b1da7850..00000000
--- a/i18n/ar/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/ar/LC_MESSAGES/main.po b/i18n/ar/LC_MESSAGES/main.po
deleted file mode 100644
index b1380d34..00000000
--- a/i18n/ar/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2266 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-# Valérian Saliou <valerian@valeriansaliou.name>, 2013
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:20+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Arabic (http://www.transifex.com/projects/p/jappix/language/"
-"ar/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: ar\n"
-"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
-"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "default:RTL"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr "الجافا سكريبت في متصفحك مفقود، لن تتمكن من بدأ Jappix! يرجى إصلاحه."
-
-msgid "Social channel, chat and more."
-msgstr ""
-
-msgid "Create your public profile."
-msgstr ""
-
-msgid "A mini-chat for your website."
-msgstr ""
-
-msgid "Get Jappix, get support."
-msgstr ""
-
-msgid "Statistics around Jappix."
-msgstr ""
-
-msgid "Legal disclaimer for Jappix."
-msgstr ""
-
-msgid "Download Jappix for free."
-msgstr ""
-
-msgid "Contribute to the Jappix code."
-msgstr ""
-
-msgid "Jappix for your company."
-msgstr ""
-
-msgid "Find a public Jappix node."
-msgstr ""
-
-msgid "Credits"
-msgstr ""
-
-msgid "Association"
-msgstr ""
-
-msgid "Web agency"
-msgstr ""
-
-msgid "Legal"
-msgstr ""
-
-msgid "Legal disclaimer"
-msgstr ""
-
-msgid "Terms of use and legal"
-msgstr ""
-
-msgid "Owner"
-msgstr ""
-
-msgid "Node owner"
-msgstr ""
-
-msgid "By using our service, you accept %s."
-msgstr ""
-
-msgid "our terms of use"
-msgstr ""
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Jappix قد إتقطع بسبب مشكلة في الشبكة، مشكلة أو دخول سيء (تأكد أنك أدخلت "
-"المعلومات بشكل صحيح)، نأسف على الإزعاج."
-
-msgid "The element list on this server could not be obtained!"
-msgstr "هذا العنصر من القائمة على هذا الخادم لا يمكن الوصول إليه."
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"لقد تم تغيير رقمك السري، بإمكانك الآن إستخدام حسابك مع المعلومات الجديدة."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "لقد تم حذف حسابك XMPP, وداعًا!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "لقد تم تسجيل خروجك من حسابك XMPP, يومًا طيبًا لك!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr ""
-
-msgid "The groupchat has been removed."
-msgstr ""
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "المستخدم الذي تحاول الوصول إليه غير متواجد في الغرفة."
-
-msgid "Please enter the group chat address to join."
-msgstr "يرجى إدخال عنوان مجموعة الدردشة للدخول."
-
-msgid "Please enter your nickname to join %s."
-msgstr "يرجى إدخال إسمك المستعار للدخول %s."
-
-msgid "This room (%s) is protected with a password."
-msgstr "هذه الغرفة (%s) .محميّة بكلمة مرور"
-
-msgid "Your browser is out of date!"
-msgstr "متصفحك قديم و عديم الصلاحية"
-
-msgid "Last %s version is better!"
-msgstr ""
-
-msgid "Login"
-msgstr "دخول"
-
-msgid "Register"
-msgstr "تسجيل"
-
-msgid "Here we go!"
-msgstr "هنا ننطلق!"
-
-msgid "Server"
-msgstr "خادم"
-
-msgid "Password"
-msgstr "كلمة سر"
-
-msgid "Remember me"
-msgstr "تذكرني"
-
-msgid "This tool has been disabled!"
-msgstr ""
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr "بسبب مشكلة في الشبكة، أصبحت غير متصل. ماذا تريد أن تفعل الآن؟"
-
-msgid "Reconnect"
-msgstr "إعادة إتصال"
-
-msgid "Messages"
-msgstr "رسائل"
-
-msgid "Profile"
-msgstr "ملف شخصي"
-
-msgid "Options"
-msgstr "خيّارات"
-
-msgid "Disconnect"
-msgstr "غير متصل"
-
-msgid "Filter"
-msgstr "مرشح"
-
-msgid "Add a friend"
-msgstr "أضف صديق."
-
-msgid "Your groupchats"
-msgstr "غرفة الدردشة الخاصة بك"
-
-msgid "Manage your favorite groupchats"
-msgstr "تحكم بغرف الدردشة المفضلة لديك"
-
-msgid "More stuff"
-msgstr "خيارات أكثر"
-
-msgid "Show all friends"
-msgstr "أعرض جميع الأصدقاء"
-
-msgid "Only show connected friends"
-msgstr "أعرض فقط الأصدقاء المتصلين"
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "أرشفة الرسائل"
-
-msgid "Date"
-msgstr "التاريخ"
-
-msgid "A short message?"
-msgstr "رسالة قصيرة؟"
-
-msgid "How are you?"
-msgstr "كيف حالك؟"
-
-msgid "What are you doing?"
-msgstr "ماذا تفعل؟"
-
-msgid "Join a chat"
-msgstr "دخول الدردشة"
-
-msgid "Status"
-msgstr "حالة"
-
-msgid "Available"
-msgstr "متاح"
-
-msgid "Talkative"
-msgstr "ثرثرة"
-
-msgid "Away"
-msgstr "بالخارج"
-
-msgid "Not available"
-msgstr "غير متصل"
-
-msgid "Busy"
-msgstr "مشغول"
-
-msgid "Offline"
-msgstr ""
-
-msgid "Mood"
-msgstr "مزاجي"
-
-msgid "None"
-msgstr "لا شيء"
-
-msgid "Crazy"
-msgstr "مجنون"
-
-msgid "Excited"
-msgstr "متحمس"
-
-msgid "Playful"
-msgstr "لعوب"
-
-msgid "Happy"
-msgstr "سعيد"
-
-msgid "Shocked"
-msgstr "مصدوم"
-
-msgid "Hot"
-msgstr "حر!"
-
-msgid "Sad"
-msgstr "حزين"
-
-msgid "Amorous"
-msgstr "مغرم"
-
-msgid "Confident"
-msgstr "واثق"
-
-msgid "Activity"
-msgstr "نشيط"
-
-msgid "Chores"
-msgstr "أعمال منزلية"
-
-msgid "Drinking"
-msgstr "يشرب"
-
-msgid "Eating"
-msgstr "يأكل"
-
-msgid "Exercising"
-msgstr "يمارس التمارين"
-
-msgid "Grooming"
-msgstr "تبرج"
-
-msgid "Appointment"
-msgstr "تجهيز"
-
-msgid "Inactive"
-msgstr "غير نشط"
-
-msgid "Relaxing"
-msgstr "مسترخي"
-
-msgid "Talking"
-msgstr "يتحدث"
-
-msgid "Traveling"
-msgstr "مسافر"
-
-msgid "Working"
-msgstr "يعمل"
-
-msgid "View profile"
-msgstr "مشاهدة الملف الشخصي"
-
-msgid "This is a repeat from %s"
-msgstr ""
-
-msgid "Repeat this notice"
-msgstr "كرّر هذه الملاحظة"
-
-msgid "Remove this notice"
-msgstr "أحذف هذه الملاحظة"
-
-msgid "Your profile"
-msgstr "ملفك الشخصي"
-
-msgid "Identity"
-msgstr "الهوية"
-
-msgid "Profile image"
-msgstr "صورة الملف الشخصي"
-
-msgid "Others"
-msgstr "آخرين"
-
-msgid "Other"
-msgstr ""
-
-msgid "Personal"
-msgstr "شخصي"
-
-msgid "Complete name"
-msgstr "الإسم كامل"
-
-msgid "Nickname"
-msgstr "الإسم المستعار"
-
-msgid "First name"
-msgstr "الإسم الأول"
-
-msgid "Last name"
-msgstr "الإسم الأخير"
-
-msgid "Date of birth"
-msgstr "تاريخ عيد الميلاد"
-
-msgid "Contact"
-msgstr "إتصل"
-
-msgid "E-mail"
-msgstr "البريد الإلكتروني"
-
-msgid "Phone"
-msgstr "الهاتف"
-
-msgid "Website"
-msgstr "الموقع الشخصي"
-
-msgid "Current"
-msgstr "الحالي"
-
-msgid "Delete"
-msgstr "حذف"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr "كم مثير للشفقة! لا توجد صورة للملف الشخصي في هويتك!"
-
-msgid "Address"
-msgstr "العنوان"
-
-msgid "Street"
-msgstr "الشارع"
-
-msgid "City"
-msgstr "المدينة"
-
-msgid "Postal code"
-msgstr "الرمز البريدي"
-
-msgid "Country"
-msgstr "الدولة"
-
-msgid "Biography"
-msgstr "نبذة شخصية"
-
-msgid "Important notice"
-msgstr "ملاحظة هامة"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr "لا يوجد شي خاص على XMPP; هذه واحدة من الأمور، ملفك الشخصي عام (vCard)."
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-
-msgid "Save"
-msgstr "إحفظ"
-
-msgid "Cancel"
-msgstr "إلغاء"
-
-msgid "Edit options"
-msgstr "تحرير الخيارات"
-
-msgid "Channel"
-msgstr "القناة"
-
-msgid "Commands"
-msgstr ""
-
-msgid "Sounds"
-msgstr "الأصوات"
-
-msgid "Privacy"
-msgstr "الخصوصية"
-
-msgid "Message archiving"
-msgstr "أرشفة الرسالة"
-
-msgid "Store an history of your chats"
-msgstr ""
-
-msgid "Geolocation"
-msgstr "تحديد الموقع الجغرافي"
-
-msgid "Disabled"
-msgstr ""
-
-msgid "Store all chats"
-msgstr ""
-
-msgid "Store friend chats"
-msgstr ""
-
-msgid "Remove all archives"
-msgstr ""
-
-msgid "Empty"
-msgstr "خالي"
-
-msgid "Empty channel"
-msgstr "قناة خالية"
-
-msgid "Persistent"
-msgstr "مستمر"
-
-msgid "Maximum notices"
-msgstr "الحد الأقصى للملاحظات"
-
-msgid "Account"
-msgstr "الحساب"
-
-msgid "Change password"
-msgstr "تغيير كلمة السر"
-
-msgid "Delete account"
-msgstr "حذف الحساب"
-
-msgid "Old"
-msgstr "العمر"
-
-msgid "New (2 times)"
-msgstr "جديد (عنصرين)"
-
-msgid "Suggested chatrooms"
-msgstr ""
-
-msgid "Skip"
-msgstr ""
-
-msgid "Continue"
-msgstr "إستمرار"
-
-msgid "To"
-msgstr "إلى"
-
-msgid "Close"
-msgstr "أغلق"
-
-msgid "unknown"
-msgstr "غير معروف"
-
-msgid "Unavailable"
-msgstr "غير متاح"
-
-msgid "is now"
-msgstr "الآن"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "المرجو الانتضار ، يتم رفع صورتك"
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "إنها هنا! صورة ملف شخصي جديدة."
-
-msgid "The image file is not supported or has a bad size."
-msgstr "ملف الصورة لا يدعم أو الحجم لا يتناسب."
-
-msgid "Reply"
-msgstr "الرد"
-
-msgid "Error"
-msgstr "خطأ"
-
-msgid "Click here to solve the error"
-msgstr "انقر هنا لحل المشكل"
-
-msgid "You"
-msgstr "أنت"
-
-msgid "Remove"
-msgstr "حذف"
-
-msgid "Rename"
-msgstr "إعادة الإسم"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "مرحبا، أنا %s، أرغب بإضافتك كصديق لدي."
-
-msgid "Smiley insertion"
-msgstr "إضافة رمز"
-
-msgid "Change style"
-msgstr "التنسيق"
-
-msgid "Text in bold"
-msgstr "نص عريض"
-
-msgid "Text in italic"
-msgstr "نص مائل"
-
-msgid "Underlined text"
-msgstr "نص أسفله خط"
-
-msgid "Send a file"
-msgstr ""
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr ""
-
-msgid "Save chat"
-msgstr "حفظ الدردشة"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"إضغط على الوصلة التالية للحصول على سجل الدردشة وإنتظر. ومن ثم إضغط مجددًا "
-"للحصول على الملف."
-
-msgid "This chat is empty!"
-msgstr "هذه دردشة خالية!"
-
-msgid "Generate file!"
-msgstr "إنشاء ملف!"
-
-msgid "Download file!"
-msgstr "تحميل الملف"
-
-msgid "Clean current chat"
-msgstr "مسح الدردشة الحالية"
-
-msgid "Show user profile"
-msgstr "إظهار ملف العضو الشخصي"
-
-msgid "Add this contact to your friends"
-msgstr "قم بإضافة هذا الحساب إلى أصدقائك"
-
-msgid "Add this groupchat to your favorites"
-msgstr "قم بإضافة مجموعة الدردشة هذه إلى المفضلة"
-
-msgid "All tabs"
-msgstr "جميع التبويب"
-
-msgid "Join groupchat"
-msgstr ""
-
-msgid "Close this tab"
-msgstr "أغلق هذا التبويب"
-
-msgid "no subject defined for this room."
-msgstr "لا يوجد عنوان إلى هذه الغرفة"
-
-msgid "Administration panel for this room"
-msgstr "لوحة التحكم إلى هذه الغرفة"
-
-msgid "Moderators"
-msgstr "المدراء"
-
-msgid "Participants"
-msgstr "المشاركون"
-
-msgid "Visitors"
-msgstr "الزوار"
-
-msgid "Manage favorite rooms"
-msgstr "التحكم بالغرف المفضلة"
-
-msgid "Change favorites"
-msgstr "تغيير المفضلة"
-
-msgid "Search a room"
-msgstr "إختر غرفة"
-
-msgid "Select a favorite"
-msgstr "إختر مفضلة"
-
-msgid "Getting the name..."
-msgstr "الحصول على إسم"
-
-msgid "Gateway"
-msgstr "بوابة"
-
-msgid "Name"
-msgstr "الإسم"
-
-msgid "Room"
-msgstr "غرفة"
-
-msgid "Add"
-msgstr "إضافة"
-
-msgid "Edit"
-msgstr "تحرير"
-
-msgid "Search a room on"
-msgstr "يبحث عن غرفة"
-
-msgid "No room found on this server."
-msgstr "لا توجد غرفة على هذا الخادم."
-
-msgid "Service discovery"
-msgstr "استكشاف الخدمة"
-
-msgid "Server to query"
-msgstr "خادم للإستعلام"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr ""
-
-msgid "Accounts"
-msgstr "حسابات"
-
-msgid "Authentications"
-msgstr "مصادقة"
-
-msgid "Automation"
-msgstr "تشغيل آلي"
-
-msgid "Clients"
-msgstr "عملاء"
-
-msgid "Collaboration"
-msgstr "إشتراك"
-
-msgid "Components"
-msgstr "محتويات"
-
-msgid "Rooms"
-msgstr "غرف"
-
-msgid "Directories"
-msgstr ""
-
-msgid "Gateways"
-msgstr "بوابة"
-
-msgid "News"
-msgstr ""
-
-msgid "Hierarchy"
-msgstr ""
-
-msgid "Proxies"
-msgstr ""
-
-msgid "Publication/Subscription"
-msgstr ""
-
-msgid "Storage"
-msgstr ""
-
-msgid "Service offline or broken"
-msgstr ""
-
-msgid "Your inbox"
-msgstr "بريدك الوارد"
-
-msgid "Available actions"
-msgstr ""
-
-msgid "Clean"
-msgstr ""
-
-msgid "New"
-msgstr "جديد"
-
-msgid "Received"
-msgstr ""
-
-msgid "Subject"
-msgstr "موضوع"
-
-msgid "Content"
-msgstr "محتوى"
-
-msgid "Send message"
-msgstr "أرسل رسالة"
-
-msgid "Your inbox is empty."
-msgstr "بريدك الوارد فارغ"
-
-msgid "MUC administration"
-msgstr ""
-
-msgid "You administrate this room"
-msgstr "أنت تدير هذه الغرفة"
-
-msgid "Enter new subject"
-msgstr "قم بادخال موضوع جديد"
-
-msgid "Configuration"
-msgstr ""
-
-msgid "Authorizations"
-msgstr ""
-
-msgid "Member list"
-msgstr ""
-
-msgid "Owner list"
-msgstr ""
-
-msgid "Administrator list"
-msgstr ""
-
-msgid "Outcast list"
-msgstr ""
-
-msgid "Add an input"
-msgstr ""
-
-msgid "Destroy this MUC"
-msgstr ""
-
-msgid "Yes, let's do it!"
-msgstr ""
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "صديقك يعير اهتماما للمحادثة"
-
-msgid "Your friend is writing a message..."
-msgstr ""
-
-msgid "Your friend stopped writing a message."
-msgstr ""
-
-msgid "Your friend is doing something else."
-msgstr ""
-
-msgid "Your friend closed the chat."
-msgstr ""
-
-msgid "Requesting this service..."
-msgstr ""
-
-msgid "Loading"
-msgstr ""
-
-msgid "changed his/her nickname to %s"
-msgstr ""
-
-msgid "joined the chat room"
-msgstr ""
-
-msgid "left the chat room"
-msgstr ""
-
-msgid "%s left"
-msgstr ""
-
-msgid "%s joined"
-msgstr ""
-
-msgid "no status"
-msgstr ""
-
-msgid "has been kicked"
-msgstr ""
-
-msgid "has been banned"
-msgstr ""
-
-msgid "no reason"
-msgstr ""
-
-msgid "Communicate with the entire world!"
-msgstr ""
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-
-msgid "Hi there!"
-msgstr ""
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr ""
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-
-msgid "Previous"
-msgstr ""
-
-msgid "General"
-msgstr ""
-
-msgid "Advanced"
-msgstr ""
-
-msgid "Resource"
-msgstr ""
-
-msgid "Priority"
-msgstr ""
-
-msgid "Low"
-msgstr ""
-
-msgid "Medium"
-msgstr ""
-
-msgid "High"
-msgstr ""
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-
-msgid "login page"
-msgstr ""
-
-msgid "Share this link with your friends:"
-msgstr ""
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-
-msgid "Required"
-msgstr ""
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr ""
-
-msgid "Manager"
-msgstr ""
-
-msgid "Encrypted"
-msgstr ""
-
-msgid "Unencrypted"
-msgstr ""
-
-msgid "Where are you?"
-msgstr ""
-
-msgid "What's up with you?"
-msgstr ""
-
-msgid "Type something you want to share with your friends..."
-msgstr ""
-
-msgid "Fetching the social channel..."
-msgstr ""
-
-msgid "You are synchronized with your network."
-msgstr ""
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr ""
-
-msgid "Media viewer"
-msgstr ""
-
-msgid "Browse"
-msgstr ""
-
-msgid "Command"
-msgstr ""
-
-msgid "Subscribe"
-msgstr ""
-
-msgid "Join"
-msgstr ""
-
-msgid "Automatic"
-msgstr ""
-
-msgid "Search"
-msgstr ""
-
-msgid "No result!"
-msgstr ""
-
-msgid "No notifications."
-msgstr ""
-
-msgid "would like to add you as a friend."
-msgstr ""
-
-msgid "would like you to join this chatroom:"
-msgstr ""
-
-msgid "Do you accept?"
-msgstr ""
-
-msgid "Yes"
-msgstr ""
-
-msgid "No"
-msgstr ""
-
-msgid "would like to get authorization."
-msgstr ""
-
-msgid "would like to send you a file: “%s”."
-msgstr ""
-
-msgid "has received a file exchange request: “%s”."
-msgstr ""
-
-msgid "has accepted to receive your file: “%s”."
-msgstr ""
-
-msgid "has rejected to receive your file: “%s”."
-msgstr ""
-
-msgid "could not receive your file: “%s”."
-msgstr ""
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr ""
-
-msgid "commented an item you follow: “%s”."
-msgstr ""
-
-msgid "liked your post: “%s”."
-msgstr ""
-
-msgid "quoted you somewhere: “%s”."
-msgstr ""
-
-msgid "published on your wall: “%s”."
-msgstr ""
-
-msgid "tagged you in a photo (%s)."
-msgstr ""
-
-msgid "tagged you in a video (%s)."
-msgstr ""
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-
-msgid "Open"
-msgstr ""
-
-msgid "Show"
-msgstr ""
-
-msgid "Hide"
-msgstr ""
-
-msgid "Submit"
-msgstr ""
-
-msgid "Client"
-msgstr ""
-
-msgid "System"
-msgstr ""
-
-msgid "Local time"
-msgstr ""
-
-msgid "Comments"
-msgstr ""
-
-msgid "User profile"
-msgstr ""
-
-msgid "See his/her position on the globe"
-msgstr ""
-
-msgid "Confirm"
-msgstr ""
-
-msgid "anonymous mode"
-msgstr ""
-
-msgid "Groups"
-msgstr ""
-
-msgid "Unclassified"
-msgstr ""
-
-msgid "Authorize"
-msgstr ""
-
-msgid "Ask for authorization"
-msgstr ""
-
-msgid "Unblock"
-msgstr ""
-
-msgid "Prohibit"
-msgstr ""
-
-msgid "Block"
-msgstr ""
-
-msgid "Chat"
-msgstr ""
-
-msgid "Groupchat"
-msgstr ""
-
-msgid "Jappix Mobile"
-msgstr ""
-
-msgid "Desktop"
-msgstr ""
-
-msgid "Mobile"
-msgstr ""
-
-msgid "Please wait..."
-msgstr ""
-
-msgid "Please enable JavaScript"
-msgstr ""
-
-msgid "Show comments"
-msgstr ""
-
-msgid "Loading comments..."
-msgstr ""
-
-msgid "Could not get the comments!"
-msgstr ""
-
-msgid "Comments locked!"
-msgstr ""
-
-msgid "Type your comment here..."
-msgstr ""
-
-msgid "Your channel"
-msgstr ""
-
-msgid "Channel of"
-msgstr ""
-
-msgid "More notices..."
-msgstr ""
-
-msgid "Attach a file"
-msgstr ""
-
-msgid "Send"
-msgstr ""
-
-msgid "Unattach the file"
-msgstr ""
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-
-msgid "Authorization failed"
-msgstr ""
-
-msgid "Registration failed, please choose a different username"
-msgstr ""
-
-msgid "Service unavailable"
-msgstr ""
-
-msgid "Internal server error, try later"
-msgstr ""
-
-msgid "Your form has been sent."
-msgstr ""
-
-msgid "Application"
-msgstr ""
-
-msgid "Media integration"
-msgstr ""
-
-msgid "Keep local chat archives"
-msgstr ""
-
-msgid "XMPP links"
-msgstr ""
-
-msgid "Open XMPP links with Jappix"
-msgstr ""
-
-msgid "changed the subject to:"
-msgstr ""
-
-msgid "Welcome!"
-msgstr ""
-
-msgid "Friends"
-msgstr ""
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr ""
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-
-msgid "Enable notification sounds"
-msgstr ""
-
-msgid "Share your position on the globe"
-msgstr ""
-
-msgid "Offline friends"
-msgstr ""
-
-msgid "Don't hide offline friends"
-msgstr ""
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr ""
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-
-msgid "Share Jappix on %s"
-msgstr ""
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr ""
-
-msgid "Unknown name"
-msgstr ""
-
-msgid "Unknown country"
-msgstr ""
-
-msgid "Click to enable"
-msgstr ""
-
-msgid "Click to disable"
-msgstr ""
-
-msgid "Installation"
-msgstr ""
-
-msgid "Jappix installation"
-msgstr ""
-
-msgid "Welcome to the Jappix installation!"
-msgstr ""
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-
-msgid "Installation Steps:"
-msgstr ""
-
-msgid "Welcome"
-msgstr "مرحباً"
-
-msgid "Storage configuration"
-msgstr ""
-
-msgid "Administrator account"
-msgstr "حساب المدير"
-
-msgid "Main configuration"
-msgstr ""
-
-msgid "Hosts configuration"
-msgstr ""
-
-msgid "Services installation"
-msgstr ""
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr ""
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr ""
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-
-msgid "User"
-msgstr ""
-
-msgid "Service"
-msgstr ""
-
-msgid "Service name"
-msgstr ""
-
-msgid "Service description"
-msgstr ""
-
-msgid "Owner name"
-msgstr ""
-
-msgid "Owner website"
-msgstr ""
-
-msgid "Connection"
-msgstr ""
-
-msgid "Lock the host"
-msgstr ""
-
-msgid "Anonymous mode"
-msgstr ""
-
-msgid "HTTP authentication"
-msgstr ""
-
-msgid "Registration allowed"
-msgstr ""
-
-msgid "Use the built-in BOSH proxy"
-msgstr ""
-
-msgid "Manager link"
-msgstr ""
-
-msgid "Groupchats to join"
-msgstr ""
-
-msgid "Suggest groupchats"
-msgstr ""
-
-msgid "Encryption"
-msgstr ""
-
-msgid "HTTPS storage"
-msgstr ""
-
-msgid "Force HTTPS"
-msgstr ""
-
-msgid "Compression"
-msgstr ""
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-
-msgid "Main host"
-msgstr ""
-
-msgid "Groupchat host"
-msgstr ""
-
-msgid "Pubsub host"
-msgstr ""
-
-msgid "Anonymous host"
-msgstr ""
-
-msgid "Directory host"
-msgstr ""
-
-msgid "BOSH host"
-msgstr ""
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-
-msgid "Thanks for using Jappix!"
-msgstr ""
-
-msgid "Next"
-msgstr ""
-
-msgid "Finish"
-msgstr ""
-
-msgid "Check again"
-msgstr ""
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-
-msgid "%s is installed on your system."
-msgstr ""
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr ""
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr ""
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-
-msgid "Jappix manager"
-msgstr ""
-
-msgid "Manager access"
-msgstr ""
-
-msgid "Statistics"
-msgstr ""
-
-msgid "Hosts"
-msgstr ""
-
-msgid "Design"
-msgstr ""
-
-msgid "Repeat"
-msgstr ""
-
-msgid "All"
-msgstr ""
-
-msgid "Horizontal"
-msgstr ""
-
-msgid "Vertical"
-msgstr ""
-
-msgid "Center"
-msgstr ""
-
-msgid "Left"
-msgstr ""
-
-msgid "Right"
-msgstr ""
-
-msgid "Top"
-msgstr ""
-
-msgid "Bottom"
-msgstr ""
-
-msgid "Adapt"
-msgstr ""
-
-msgid "Color"
-msgstr ""
-
-msgid "Users"
-msgstr ""
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-
-msgid "Please use the form below to login to the administration panel."
-msgstr ""
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-
-msgid "Credentials"
-msgstr ""
-
-msgid "You have been logged out. Goodbye!"
-msgstr ""
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr ""
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr ""
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr ""
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr ""
-
-msgid "The image could not be received, would you mind retry?"
-msgstr ""
-
-msgid "Your service logo has been successfully changed!"
-msgstr ""
-
-msgid "Your image was added to the list!"
-msgstr ""
-
-msgid "Changes saved!"
-msgstr ""
-
-msgid "Logo"
-msgstr ""
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr ""
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-
-msgid "Remove this logo"
-msgstr ""
-
-msgid "View this logo"
-msgstr ""
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-
-msgid "Access statistics"
-msgstr ""
-
-msgid "Share statistics"
-msgstr ""
-
-msgid "Other statistics"
-msgstr ""
-
-msgid "January"
-msgstr ""
-
-msgid "February"
-msgstr ""
-
-msgid "March"
-msgstr ""
-
-msgid "April"
-msgstr ""
-
-msgid "May"
-msgstr ""
-
-msgid "June"
-msgstr ""
-
-msgid "July"
-msgstr ""
-
-msgid "August"
-msgstr ""
-
-msgid "September"
-msgstr ""
-
-msgid "October"
-msgstr ""
-
-msgid "November"
-msgstr ""
-
-msgid "December"
-msgstr ""
-
-msgid "Monday"
-msgstr ""
-
-msgid "Tuesday"
-msgstr ""
-
-msgid "Wednesday"
-msgstr ""
-
-msgid "Thursday"
-msgstr ""
-
-msgid "Friday"
-msgstr ""
-
-msgid "Saturday"
-msgstr ""
-
-msgid "Sunday"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Archives"
-msgstr ""
-
-msgid "Music"
-msgstr ""
-
-msgid "Backgrounds"
-msgstr ""
-
-msgid "Share"
-msgstr ""
-
-msgid "Background"
-msgstr ""
-
-msgid "Notice"
-msgstr ""
-
-msgid "Your design preferences have been saved!"
-msgstr ""
-
-msgid "Please check your inputs: something is missing!"
-msgstr ""
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-
-msgid "Use default background"
-msgstr ""
-
-msgid "Use your own image"
-msgstr ""
-
-msgid "Select a background to use and change the display options."
-msgstr ""
-
-msgid "Use your own color"
-msgstr ""
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr ""
-
-msgid "Manage backgrounds"
-msgstr ""
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr ""
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-
-msgid "Simple notice"
-msgstr ""
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-
-msgid "Advanced notice"
-msgstr ""
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-
-msgid "Available updates"
-msgstr ""
-
-msgid "What's new?"
-msgstr ""
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr ""
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr ""
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-
-msgid "Check for updates"
-msgstr ""
-
-msgid "Update in progress"
-msgstr ""
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr ""
-
-msgid "The update has failed! Please try again later."
-msgstr ""
-
-msgid "Downloading package..."
-msgstr ""
-
-msgid "Removing current Jappix system files..."
-msgstr ""
-
-msgid "Extracting package..."
-msgstr ""
-
-msgid "Regenerating storage folder tree..."
-msgstr ""
-
-msgid "Jappix is now up to date!"
-msgstr ""
-
-msgid "Aborted: socket error!"
-msgstr ""
-
-msgid "Aborted: buffer error!"
-msgstr ""
-
-msgid "Aborted: everything is not writable!"
-msgstr ""
-
-msgid "Aborted: could not extract the package!"
-msgstr ""
-
-msgid "Visits"
-msgstr ""
-
-msgid "Daily"
-msgstr ""
-
-msgid "Weekly"
-msgstr ""
-
-msgid "Monthly"
-msgstr ""
-
-msgid "Yearly"
-msgstr ""
-
-msgid "Size"
-msgstr ""
-
-msgid "Clean everything"
-msgstr ""
-
-msgid "Purge cache"
-msgstr ""
-
-msgid "Purge logs"
-msgstr ""
-
-msgid "Purge sent files"
-msgstr ""
-
-msgid "Purge updates"
-msgstr ""
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr ""
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr ""
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-
-msgid "Title"
-msgstr ""
-
-msgid "Artist"
-msgstr ""
-
-msgid "Album"
-msgstr ""
-
-msgid "File"
-msgstr ""
-
-msgid "Upload"
-msgstr ""
-
-msgid "The folder is empty."
-msgstr ""
-
-msgid "The music could not be received, please retry!"
-msgstr ""
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-
-msgid "Your music has been added!"
-msgstr ""
-
-msgid "The selected elements have been removed."
-msgstr ""
-
-msgid "You must select elements to remove!"
-msgstr ""
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-
-msgid "Manage"
-msgstr ""
-
-msgid "List"
-msgstr ""
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-
-msgid "The user has been added!"
-msgstr ""
-
-msgid "The chosen users have been removed."
-msgstr ""
-
-msgid "You must select one or more users to be removed!"
-msgstr ""
-
-msgid "Yesterday"
-msgstr ""
-
-msgid "%s days ago"
-msgstr ""
-
-msgid "User currently active"
-msgstr ""
-
-msgid "Last seen: %s"
-msgstr ""
-
-msgid "Inactive since: %s"
-msgstr ""
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr ""
-
-msgid "Static content server"
-msgstr ""
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr ""
-
-msgid "User uploads server"
-msgstr ""
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr ""
-
-msgid "Suggested friends"
-msgstr ""
-
-msgid "Check all"
-msgstr ""
-
-msgid "Uncheck all"
-msgstr ""
-
-msgid "Choose"
-msgstr ""
-
-msgid "List name"
-msgstr ""
-
-msgid "Allow"
-msgstr ""
-
-msgid "Deny"
-msgstr ""
-
-msgid "Group"
-msgstr ""
-
-msgid "Subscription"
-msgstr ""
-
-msgid "Both"
-msgstr ""
-
-msgid "From"
-msgstr ""
-
-msgid "Everybody"
-msgstr ""
-
-msgid "Send messages"
-msgstr ""
-
-msgid "Send queries"
-msgstr ""
-
-msgid "See my status"
-msgstr ""
-
-msgid "Send his/her status"
-msgstr ""
-
-msgid "Everything"
-msgstr ""
-
-msgid "Item"
-msgstr ""
-
-msgid "Order"
-msgstr ""
-
-msgid "Active for this session"
-msgstr ""
-
-msgid "Always active"
-msgstr ""
-
-msgid "User directory"
-msgstr ""
-
-msgid "Search a friend"
-msgstr ""
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-
-msgid "Send him/her a message"
-msgstr ""
-
-msgid "Start a chat with him/her"
-msgstr ""
-
-msgid "Available shortcuts:"
-msgstr ""
-
-msgid "%s removes the chat logs"
-msgstr ""
-
-msgid "%s joins a groupchat"
-msgstr ""
-
-msgid "%s closes the chat"
-msgstr ""
-
-msgid "%s shows the user profile"
-msgstr ""
-
-msgid "%s sends a message to the room"
-msgstr ""
-
-msgid "%s changes your nickname"
-msgstr ""
-
-msgid "%s sends a message to someone in the room"
-msgstr ""
-
-msgid "%s changes the room topic"
-msgstr ""
-
-msgid "%s kicks a user of the room"
-msgstr ""
-
-msgid "%s bans a user of the room"
-msgstr ""
-
-msgid "%s invites someone to join the room"
-msgstr ""
-
-msgid "Public profile"
-msgstr ""
-
-msgid "Your profile anywhere on the Web."
-msgstr ""
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-
-msgid "Yay, let's create your public profile!"
-msgstr ""
-
-msgid "Enable my public profile"
-msgstr ""
-
-msgid "Jappix for your phone"
-msgstr ""
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr ""
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-
-msgid "You haven't provided any file to download"
-msgstr ""
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr ""
-
-msgid "Woah this file isn't found, please double check"
-msgstr ""
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr ""
-
-msgid "Statistics are currently disabled in the settings."
-msgstr ""
-
-msgid "New event!"
-msgstr ""
-
-msgid "%s is typing..."
-msgstr ""
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-
-msgid "Username"
-msgstr ""
-
-msgid "Enter password"
-msgstr ""
-
-msgid "Once again..."
-msgstr ""
-
-msgid "Code"
-msgstr ""
-
-msgid "Security code"
-msgstr ""
-
-msgid "Advertising space available!"
-msgstr ""
-
-msgid "Advertise here"
-msgstr ""
-
-msgid "Analytics (%s)"
-msgstr ""
-
-msgid "Track visits"
-msgstr ""
-
-msgid "Piwik URL"
-msgstr ""
-
-msgid "Piwik tracking ID"
-msgstr ""
-
-msgid "Advertising (%s)"
-msgstr ""
-
-msgid "Enable ads"
-msgstr ""
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "Content ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "Mute"
-msgstr ""
-
-msgid "Unmute"
-msgstr ""
-
-msgid "Is calling you"
-msgstr ""
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr ""
-
-msgid "Waiting..."
-msgstr ""
-
-msgid "Ringing..."
-msgstr ""
-
-msgid "Declined the call"
-msgstr ""
-
-msgid "Call error"
-msgstr ""
-
-msgid "Ended the call"
-msgstr ""
-
-msgid "Call ended"
-msgstr ""
-
-msgid "Call canceled"
-msgstr ""
-
-msgid "Canceled the call"
-msgstr ""
-
-msgid "Is already in a call"
-msgstr ""
-
-msgid "Ending call..."
-msgstr ""
-
-msgid "Accept"
-msgstr ""
-
-msgid "Decline"
-msgstr ""
-
-msgid "Okay"
-msgstr ""
-
-msgid "Retry"
-msgstr ""
-
-msgid "Audio Call"
-msgstr ""
-
-msgid "Video Call"
-msgstr ""
diff --git a/i18n/bg/LC_MESSAGES/main.mo b/i18n/bg/LC_MESSAGES/main.mo
deleted file mode 100644
index 51701197..00000000
--- a/i18n/bg/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/bg/LC_MESSAGES/main.po b/i18n/bg/LC_MESSAGES/main.po
deleted file mode 100644
index 95ff444e..00000000
--- a/i18n/bg/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2521 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-# sahwar <ve4ernik@gmail.com>, 2014
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-10-13 10:45+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Bulgarian (http://www.transifex.com/projects/p/jappix/"
-"language/bg/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: bg\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.9\n"
-
-msgid "default:LTR"
-msgstr "default:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"JavaScript на вашия браузър липсва или не е включен, поради което няма да "
-"можете да заредите и стартирате Jappix! Моля, поправете/променете това."
-
-msgid "Social channel, chat and more."
-msgstr ""
-
-msgid "Create your public profile."
-msgstr ""
-
-msgid "A mini-chat for your website."
-msgstr ""
-
-msgid "Get Jappix, get support."
-msgstr ""
-
-msgid "Statistics around Jappix."
-msgstr ""
-
-msgid "Legal disclaimer for Jappix."
-msgstr ""
-
-msgid "Download Jappix for free."
-msgstr ""
-
-msgid "Contribute to the Jappix code."
-msgstr ""
-
-msgid "Jappix for your company."
-msgstr ""
-
-msgid "Find a public Jappix node."
-msgstr ""
-
-msgid "Credits"
-msgstr "Благодарности"
-
-msgid "Association"
-msgstr ""
-
-msgid "Company"
-msgstr ""
-
-msgid "Legal"
-msgstr ""
-
-msgid "Legal disclaimer"
-msgstr ""
-
-msgid "Terms of use and legal"
-msgstr ""
-
-msgid "Owner"
-msgstr ""
-
-msgid "Node owner"
-msgstr ""
-
-msgid "By using our service, you accept %s."
-msgstr "Като използвате нашата услуга, вие приемате %s."
-
-msgid "our terms of use"
-msgstr "нашите условия за ползване"
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Jappix беше прекъснат от мрежови проблем, бъг/буболечка (грешка в кода на "
-"програмата) или лошо въведени данни за вход (login) (проверете дали сте "
-"въвели правилно потребителските си данни за вход), извинете за неудобството."
-
-msgid "The element list on this server could not be obtained!"
-msgstr "Списъкът с елементи на/от този сървър не можа да бъде получен!"
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"Паролата ви е променена, сега можете да се свържете със своята потребителска "
-"сметка (акаунт) с новите си потребителски данни за вход."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr ""
-"Вашата потребителска сметка (акаунт) в XMPP е премахната/изтрита, довиждане!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "Излязохте от потребителската си сметка (акаунт) в XMPP, приятен ден!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr ""
-"Стаята, в която влязохте, изглежда не съществува. Би трябвало да я създадете "
-"сами!"
-
-msgid "The groupchat has been removed."
-msgstr ""
-"Груповият чат беше премахнат, сега някой друг ще може да го възстанови "
-"(пресъздаде)."
-
-msgid "The user that you want to reach is not present in the room."
-msgstr ""
-"Потребителят, с когото се опитвате да се свържете, не е наличен в чат стаята."
-
-msgid "Please enter the group chat address to join."
-msgstr "Моля, въведете адреса на груповия чат, за да се присъедините към него."
-
-msgid "Please enter your nickname to join %s."
-msgstr ""
-"Моля, въведете вашия псевдоним (nickname, потребителско име), за да се "
-"присъедините към %s."
-
-msgid "This room (%s) is protected with a password."
-msgstr "Тази стаия (%s) е защитена с парола."
-
-msgid "Your browser is out of date!"
-msgstr ""
-"Използвате стар браузър. Моля, обновете го до по-нова стабилна версия чрез "
-"Интернет, или го сменете с друг."
-
-msgid "Last %s version is better!"
-msgstr "Последната %s версия е по-добра!"
-
-msgid "Login"
-msgstr "Вход"
-
-msgid "Register"
-msgstr "Регистрация"
-
-msgid "Here we go!"
-msgstr "Хайде!"
-
-msgid "Server"
-msgstr "Сървър"
-
-msgid "Password"
-msgstr "Парола"
-
-msgid "Remember me"
-msgstr "Запомняне"
-
-msgid "This tool has been disabled!"
-msgstr ""
-"Този инструмент (тази възможност) е изключена, не можете да я ползвате!"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr ""
-"Поради мрежова грешка връзката беше прекъсната. Какво искате да направите "
-"сега?"
-
-msgid "Reconnect"
-msgstr "Възвръщане на връзката"
-
-msgid "Messages"
-msgstr "Съобщения"
-
-msgid "Profile"
-msgstr "Профил"
-
-msgid "Options"
-msgstr "Настройки"
-
-msgid "Disconnect"
-msgstr "Изключване/прекъсване на връзката"
-
-msgid "Filter"
-msgstr "Филтър"
-
-msgid "Add a friend"
-msgstr "Добяване на приятел"
-
-msgid "Your groupchats"
-msgstr "Вашите групови чатове"
-
-msgid "Audio/video conference"
-msgstr ""
-
-msgid "Launch a group call"
-msgstr ""
-
-msgid "Audio conference"
-msgstr "Аудио конференция"
-
-msgid "Video conference"
-msgstr "Видео конференция"
-
-msgid "Conference call"
-msgstr "Конферетно обаждане"
-
-msgid "Manage your favorite groupchats"
-msgstr "Управление на любимите ви групови чатове"
-
-msgid "More stuff"
-msgstr "Още неща"
-
-msgid "Show all friends"
-msgstr "Показване на всички приятели"
-
-msgid "Only show connected friends"
-msgstr "Показване само на свързаните приятели"
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "Архив на съобщенията"
-
-msgid "Date"
-msgstr "Дата"
-
-msgid "A short message?"
-msgstr "Кратко съобщение?"
-
-msgid "How are you?"
-msgstr "Как сте?"
-
-msgid "What are you doing?"
-msgstr "Какво правите? Как сте?"
-
-msgid "Join a chat"
-msgstr "Присъединяване към чат"
-
-msgid "Status"
-msgstr "Статус"
-
-msgid "Available"
-msgstr "На разположение (онлайн)"
-
-msgid "Talkative"
-msgstr "Готов за разговори"
-
-msgid "Away"
-msgstr "отсъстващ"
-
-msgid "Not available"
-msgstr "не е на разположение"
-
-msgid "Busy"
-msgstr "зает"
-
-msgid "Offline"
-msgstr "извън линия"
-
-msgid "Mood"
-msgstr "Настроение"
-
-msgid "None"
-msgstr "(без)"
-
-msgid "Crazy"
-msgstr "луд"
-
-msgid "Excited"
-msgstr "развълнуван"
-
-msgid "Playful"
-msgstr "игрив"
-
-msgid "Happy"
-msgstr "щастлив/доволен"
-
-msgid "Shocked"
-msgstr "шокиран"
-
-msgid "Hot"
-msgstr "разгорещен"
-
-msgid "Sad"
-msgstr "тъжен"
-
-msgid "Amorous"
-msgstr "чувствен/страстен/влюбчив"
-
-msgid "Confident"
-msgstr "уверен"
-
-msgid "Activity"
-msgstr "дейност"
-
-msgid "Chores"
-msgstr "задължения"
-
-msgid "Drinking"
-msgstr "пиене"
-
-msgid "Eating"
-msgstr "ядене"
-
-msgid "Exercising"
-msgstr "упражнения"
-
-msgid "Grooming"
-msgstr "в момента се подкрепям/поддържам"
-
-msgid "Appointment"
-msgstr "на среща/служба"
-
-msgid "Inactive"
-msgstr "неактивен"
-
-msgid "Relaxing"
-msgstr "релаксира"
-
-msgid "Talking"
-msgstr "говори (в дискусия)"
-
-msgid "Traveling"
-msgstr "пътува (на път)"
-
-msgid "Working"
-msgstr "работи (на работа)"
-
-msgid "View profile"
-msgstr "Преглед на профила"
-
-msgid "This is a repeat from %s"
-msgstr "Това е повторение от %s"
-
-msgid "Repeat this notice"
-msgstr "Повторение на съобщението"
-
-msgid "Remove this notice"
-msgstr "Премахване на съобщението"
-
-msgid "Your profile"
-msgstr "Вашият профил"
-
-msgid "Identity"
-msgstr "Идентичност"
-
-msgid "Profile image"
-msgstr "Изображение за профила"
-
-msgid "Others"
-msgstr "Други"
-
-msgid "Other"
-msgstr ""
-
-msgid "Personal"
-msgstr "Лични"
-
-msgid "Complete name"
-msgstr "Пълно име"
-
-msgid "Nickname"
-msgstr "Псевдоним (nickname)"
-
-msgid "First name"
-msgstr "Първо име (лично име)"
-
-msgid "Last name"
-msgstr "Последно име (фамилия)"
-
-msgid "Date of birth"
-msgstr "Дата на раждане"
-
-msgid "Contact"
-msgstr "Контакт"
-
-msgid "E-mail"
-msgstr "Имейл (е-поща)"
-
-msgid "Phone"
-msgstr "Телефон"
-
-msgid "Website"
-msgstr "Уебсайт"
-
-msgid "Current"
-msgstr "Настоящ"
-
-msgid "Delete"
-msgstr "Изтриване"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr ""
-"Колко жалко! Вие нямате зададено изображение за профила си в картата си за "
-"самоличност!"
-
-msgid "Address"
-msgstr "Адрес"
-
-msgid "Street"
-msgstr "Улица"
-
-msgid "City"
-msgstr "Град"
-
-msgid "Postal code"
-msgstr "Пощенски код"
-
-msgid "Country"
-msgstr "Страна/държава"
-
-msgid "Biography"
-msgstr "Биография"
-
-msgid "Important notice"
-msgstr "Важно съобщение"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr ""
-"Не всичко е конфиденциално/поверително в XMPP; вашият публичен профил "
-"(vCard) е едно от тези неща."
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-
-msgid "Save"
-msgstr "Запазване"
-
-msgid "Cancel"
-msgstr "Отказ"
-
-msgid "Edit options"
-msgstr "Редакция на настройките"
-
-msgid "Channel"
-msgstr "Канал"
-
-msgid "Commands"
-msgstr "Команди"
-
-msgid "Sounds"
-msgstr "Звуци"
-
-msgid "Privacy"
-msgstr "Поверителност"
-
-msgid "Message archiving"
-msgstr "Архивиране на съобщенията"
-
-msgid "Store an history of your chats"
-msgstr "Запис на историята на вашите чатове"
-
-msgid "Geolocation"
-msgstr "Геолокация"
-
-msgid "Disabled"
-msgstr "Изключено"
-
-msgid "Store all chats"
-msgstr "Запис на всички чатове"
-
-msgid "Store friend chats"
-msgstr ""
-
-msgid "Remove all archives"
-msgstr "Премахване на всички архиви"
-
-msgid "Empty"
-msgstr "Празно"
-
-msgid "Empty channel"
-msgstr "Празен канал"
-
-msgid "Persistent"
-msgstr "Натрапчивост/постоянство"
-
-msgid "Maximum notices"
-msgstr "Максимален брой съобщения"
-
-msgid "Account"
-msgstr "Потребителска сметка (акаунт)"
-
-msgid "Change password"
-msgstr "Промяна на паролата"
-
-msgid "Delete account"
-msgstr "Изтриване на потребителската сметка (акаунт)"
-
-msgid "Old"
-msgstr "Стар(и)"
-
-msgid "New (2 times)"
-msgstr "Нов(и) (2 пъти)"
-
-msgid "Suggested chatrooms"
-msgstr ""
-
-msgid "Skip"
-msgstr ""
-
-msgid "Continue"
-msgstr "Продължаване"
-
-msgid "To"
-msgstr "Към/за"
-
-msgid "Close"
-msgstr "Затваряне"
-
-msgid "unknown"
-msgstr "непознат"
-
-msgid "Unavailable"
-msgstr "Не е на разположение (офлайн)"
-
-msgid "is now"
-msgstr "е сега"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Моля, изчакайте докато аватарът ви се качва (ъплоудва)..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "Ето го! Хубаво ново изображение (аватар) за профила ви!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "Файлът от тип изображение не се поддържа или има грешна големина."
-
-msgid "Reply"
-msgstr "Отговор"
-
-msgid "Error"
-msgstr "Грешка"
-
-msgid "Click here to solve the error"
-msgstr "Натиснете тук, за да поправите грешката"
-
-msgid "You"
-msgstr "Ти/Вие"
-
-msgid "Remove"
-msgstr "Премахване"
-
-msgid "Rename"
-msgstr "Преименуване"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Здравей, аз съм %s, бих искал да ви добавя към моя списък с приятели."
-
-msgid "Smiley insertion"
-msgstr "Въвеждане на емотикон(и)"
-
-msgid "Change style"
-msgstr "Промяна на стила"
-
-msgid "Text in bold"
-msgstr "Удебелен текст (bold)"
-
-msgid "Text in italic"
-msgstr "Курсивен текст (italic)"
-
-msgid "Underlined text"
-msgstr "Подчертан текст"
-
-msgid "Send a file"
-msgstr "Изпращане на файл"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr ""
-
-msgid "Save chat"
-msgstr "Запазване на чата"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"Натиснете следната връзка (хиперлинк), за да получите историята на чата, "
-"след това изчакайте. След това натиснете отново, за да изтеглите файла с "
-"историята на чата."
-
-msgid "This chat is empty!"
-msgstr "Чатът е празен!"
-
-msgid "Generate file!"
-msgstr "Генериране на файл!"
-
-msgid "Download file!"
-msgstr "Изтегляне (даунлоуд) на файл!"
-
-msgid "Clean current chat"
-msgstr "Изчистване на настоящия чат"
-
-msgid "Show user profile"
-msgstr "Показване на потребителския профил"
-
-msgid "Add this contact to your friends"
-msgstr "Добавяне на контакта към списъка с приятели"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Добавяне на груповия чат към твоите любими"
-
-msgid "All tabs"
-msgstr "Всички подпрозорци (табове)"
-
-msgid "Join groupchat"
-msgstr "Присъединяване към групов чат"
-
-msgid "Close this tab"
-msgstr "Затваряне на подпрозореца (таба)"
-
-msgid "no subject defined for this room."
-msgstr "Не е дефинирана тема за тази чат стая."
-
-msgid "Administration panel for this room"
-msgstr "Администрационен панел за стаята"
-
-msgid "Moderators"
-msgstr "Модератори"
-
-msgid "Participants"
-msgstr "Участници"
-
-msgid "Visitors"
-msgstr "Посетители"
-
-msgid "Manage favorite rooms"
-msgstr "Управление на любимите стаи"
-
-msgid "Change favorites"
-msgstr "Промяна на любимите"
-
-msgid "Search a room"
-msgstr "Търсене из/в стаята"
-
-msgid "Select a favorite"
-msgstr "Избор на любим(и)"
-
-msgid "Getting the name..."
-msgstr "Прихващане на имена..."
-
-msgid "Gateway"
-msgstr "Врата/вход/път"
-
-msgid "Name"
-msgstr "Име"
-
-msgid "Room"
-msgstr "Стая"
-
-msgid "Add"
-msgstr "Добавяне"
-
-msgid "Edit"
-msgstr "Редактиране"
-
-msgid "Search a room on"
-msgstr "Потърси статия от/в(ъв)"
-
-msgid "No room found on this server."
-msgstr "Не са намерени стаи на този сървър."
-
-msgid "Service discovery"
-msgstr "Откриване на услуги"
-
-msgid "Server to query"
-msgstr "Заявка за сървър"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "Съжалявам, но търсенето за обекта не върна никакъв резултат!"
-
-msgid "Accounts"
-msgstr "Потребителски сметки (акаунти)"
-
-msgid "Authentications"
-msgstr "Удостоверения за идентификация"
-
-msgid "Automation"
-msgstr "Автоматизация"
-
-msgid "Clients"
-msgstr "Клиенти"
-
-msgid "Collaboration"
-msgstr "Сътрудничество (колаборация)"
-
-msgid "Components"
-msgstr "Компоненти"
-
-msgid "Rooms"
-msgstr "Стаи"
-
-msgid "Directories"
-msgstr "Директории"
-
-msgid "Gateways"
-msgstr "Пътища/входове"
-
-msgid "News"
-msgstr "Новини"
-
-msgid "Hierarchy"
-msgstr "Йерархия"
-
-msgid "Proxies"
-msgstr "Проксита (сървъри-посредници)"
-
-msgid "Publication/Subscription"
-msgstr "Публикация/Абонамент"
-
-msgid "Storage"
-msgstr "Хранилище"
-
-msgid "Service offline or broken"
-msgstr "Услугата е офлайн (извън линия) или е счупена/повредена"
-
-msgid "Your inbox"
-msgstr "Вашата входяща кутия"
-
-msgid "Available actions"
-msgstr "Действия на разположение"
-
-msgid "Clean"
-msgstr "Изчистване"
-
-msgid "New"
-msgstr "Нов(и)"
-
-msgid "Received"
-msgstr "Получен(и)"
-
-msgid "Subject"
-msgstr "Тема"
-
-msgid "Content"
-msgstr "Съдържание"
-
-msgid "Send message"
-msgstr "Изпращане на съобщението"
-
-msgid "Your inbox is empty."
-msgstr "Входящата ви кутия е празна."
-
-msgid "MUC administration"
-msgstr "Администрация на MUC"
-
-msgid "You administrate this room"
-msgstr "Вие сте администраторът на тази стая"
-
-msgid "Enter new subject"
-msgstr "Въвеждане на това тема"
-
-msgid "Configuration"
-msgstr "Конфигурация"
-
-msgid "Authorizations"
-msgstr "Права и пълномощни"
-
-msgid "Member list"
-msgstr "Списък с участници"
-
-msgid "Owner list"
-msgstr "Списък със собственици"
-
-msgid "Administrator list"
-msgstr "Списък с администратори"
-
-msgid "Outcast list"
-msgstr "Списък с outcast-и"
-
-msgid "Add an input"
-msgstr "Добавяне на входни данни"
-
-msgid "Destroy this MUC"
-msgstr "Унищожаване на този MUC (многопотребителски чат)"
-
-msgid "Yes, let's do it!"
-msgstr "Да, да го направим!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "Приятелят ви обръща внимание на дискусията."
-
-msgid "Your friend is writing a message..."
-msgstr "Приятелят ви пише съобщение..."
-
-msgid "Your friend stopped writing a message."
-msgstr "Приятелят ви спря да пише съобщение."
-
-msgid "Your friend is doing something else."
-msgstr "Приятелят ви прави нещо друго."
-
-msgid "Your friend closed the chat."
-msgstr "Приятелят ви затваря чата."
-
-msgid "Requesting this service..."
-msgstr "Заявка на тази услуга..."
-
-msgid "Loading"
-msgstr "Зареждане"
-
-msgid "changed his/her nickname to %s"
-msgstr "промени своя псевдоним на %s"
-
-msgid "joined the chat room"
-msgstr "се присъедини към чат стаята"
-
-msgid "left the chat room"
-msgstr "напусна чат стаята"
-
-msgid "%s left"
-msgstr "%s напусна чата"
-
-msgid "%s joined"
-msgstr "%s се присъедини към чата"
-
-msgid "no status"
-msgstr "без статус"
-
-msgid "has been kicked"
-msgstr "беше изхвърлен (kick-нат) [от стаята]"
-
-msgid "has been banned"
-msgstr "е баннат"
-
-msgid "no reason"
-msgstr "без причина"
-
-msgid "Communicate with the entire world!"
-msgstr "Комуникирай с целия свят!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-"Jappix е отворена социална платформа, която ви позволява лесно да поддържате "
-"връзка с всекиго."
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-"Позволява ви да се свързвате с милиони потребители, които използват мрежата "
-"XMPP както и ти с Jappix. Присъедини се към общността и остани свободен. "
-"Пояснение: XMPP = екс-ем-пи-пи, eXtensible Messaging and Presence Protocol, "
-"http://xmpp.org/."
-
-msgid "Hi there!"
-msgstr "Ей, ти там, здравей!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr "Добре дошли в %1s, „%2s“."
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr ""
-"Влезте във вашата вече съществуваща XMPP потребителска сметка (акаунт) или "
-"създайте нова свободно и безплатно!"
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-"Влезте във вече наличната си (съществуваща) XMPP потребителска сметка "
-"(акаунт). Също така можете да използвате %s, за да се присъедините към "
-"групов чат."
-
-msgid "Previous"
-msgstr "Предишни"
-
-msgid "General"
-msgstr "Общи"
-
-msgid "Advanced"
-msgstr "Разширени"
-
-msgid "Resource"
-msgstr "Ресурс"
-
-msgid "Priority"
-msgstr "Приоритет"
-
-msgid "Low"
-msgstr "Нисък"
-
-msgid "Medium"
-msgstr "Среден"
-
-msgid "High"
-msgstr "Висок"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-"Въведете адреса на груповия чат, към който искате да се присъедините, както "
-"и псевдонимът, който искате да използвате. Също така можете да се върнете "
-"към %s."
-
-msgid "login page"
-msgstr "страница за вход"
-
-msgid "Share this link with your friends:"
-msgstr "Споделяне на връзката с вашите приятели:"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-"Регистрирайте нова потребителска сметка (акаунт) за XMPP, за да се "
-"присъедините към вашите приятели от вашия собствен социален облак. Просто е!"
-
-msgid "Required"
-msgstr "задължително"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "Вие се регистрирахте успешно, ето ви вашия личен XMPP адрес:"
-
-msgid "Manager"
-msgstr "Мениджър (адм. управление)"
-
-msgid "Encrypted"
-msgstr "Криптиран (шифрован) вход"
-
-msgid "Unencrypted"
-msgstr "Некриптиран (нешифрован) вход"
-
-msgid "Where are you?"
-msgstr "Къде сте?"
-
-msgid "What's up with you?"
-msgstr "Как сте?"
-
-msgid "Type something you want to share with your friends..."
-msgstr "Въведете нещо, което бихте искали да споделите с вашите приятели..."
-
-msgid "Fetching the social channel..."
-msgstr "Прихващане на социалния канал..."
-
-msgid "You are synchronized with your network."
-msgstr "Синхронизиран сте с мрежата си."
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "Не можете да изпращате нищо: можете само да получавате известия!"
-
-msgid "Media viewer"
-msgstr "Медиен преглед/разглеждане"
-
-msgid "Browse"
-msgstr "Разглеждане/преглед"
-
-msgid "Command"
-msgstr "Команда"
-
-msgid "Subscribe"
-msgstr "Абонамент"
-
-msgid "Join"
-msgstr "Присъединяване"
-
-msgid "Automatic"
-msgstr "Автоматично"
-
-msgid "Search"
-msgstr "Търсене"
-
-msgid "No result!"
-msgstr "Няма резултат!"
-
-msgid "No notifications."
-msgstr "Няма известия."
-
-msgid "would like to add you as a friend."
-msgstr "желае да ви добави към списъка си с приятели."
-
-msgid "would like you to join this chatroom:"
-msgstr "желае вие да се присъедините към следната чат стая:"
-
-msgid "Do you accept?"
-msgstr "Приемате ли?"
-
-msgid "Yes"
-msgstr "Да/ОК"
-
-msgid "No"
-msgstr "Не"
-
-msgid "would like to get authorization."
-msgstr "желае да получи пълномощно."
-
-msgid "would like to send you a file: “%s”."
-msgstr "желае да ви изпрати файл: „%s“."
-
-msgid "has received a file exchange request: “%s”."
-msgstr ""
-
-msgid "has accepted to receive your file: “%s”."
-msgstr ""
-
-msgid "has rejected to receive your file: “%s”."
-msgstr ""
-
-msgid "could not receive your file: “%s”."
-msgstr ""
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr "Желаете ли да видите списъка с приятели, които %s ви предлага?"
-
-msgid "commented an item you follow: “%s”."
-msgstr ""
-
-msgid "liked your post: “%s”."
-msgstr ""
-
-msgid "quoted you somewhere: “%s”."
-msgstr ""
-
-msgid "published on your wall: “%s”."
-msgstr ""
-
-msgid "tagged you in a photo (%s)."
-msgstr ""
-
-msgid "tagged you in a video (%s)."
-msgstr ""
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-
-msgid "Open"
-msgstr "Отваряне"
-
-msgid "Show"
-msgstr "Показване"
-
-msgid "Hide"
-msgstr "Скриване"
-
-msgid "Submit"
-msgstr "Изпращане"
-
-msgid "Client"
-msgstr "Клиент"
-
-msgid "System"
-msgstr "Система"
-
-msgid "Local time"
-msgstr "Местно време"
-
-msgid "Comments"
-msgstr "Коментари"
-
-msgid "User profile"
-msgstr "Потребителски профил"
-
-msgid "See his/her position on the globe"
-msgstr ""
-"Вижте неговата/нейната позиция (местоположение) на глобуса [чрез геолокация]"
-
-msgid "Confirm"
-msgstr "Потвърждаване"
-
-msgid "anonymous mode"
-msgstr "режим инкогнито (в анонимност)"
-
-msgid "Groups"
-msgstr "Групи"
-
-msgid "Unclassified"
-msgstr "Некласифицирани"
-
-msgid "Authorize"
-msgstr "Разрешаване/упълномощаване"
-
-msgid "Ask for authorization"
-msgstr "Питай/-не за разрешение/упълномощение"
-
-msgid "Unblock"
-msgstr "Отблокиране"
-
-msgid "Prohibit"
-msgstr "Забрана"
-
-msgid "Block"
-msgstr "Блокиране"
-
-msgid "Chat"
-msgstr "Чат"
-
-msgid "Groupchat"
-msgstr "Групов чат"
-
-msgid "Jappix Mobile"
-msgstr "мобилна версия на Jappix"
-
-msgid "Desktop"
-msgstr "Desktop (десктоп, настолна версия)"
-
-msgid "Mobile"
-msgstr "Mobile (мобилна версия)"
-
-msgid "Please wait..."
-msgstr "Моля, изчакайте..."
-
-msgid "Please enable JavaScript"
-msgstr "Моля, включете JavaScript"
-
-msgid "Show comments"
-msgstr "Показване на коментарите"
-
-msgid "Loading comments..."
-msgstr "Зареждане на коментарите..."
-
-msgid "Could not get the comments!"
-msgstr "Коментарите не могат да бъдат заредени!"
-
-msgid "Comments locked!"
-msgstr "Коментарите са заключени!"
-
-msgid "Type your comment here..."
-msgstr "Въведете вашия коментар тук..."
-
-msgid "Your channel"
-msgstr "Вашия канал"
-
-msgid "Channel of"
-msgstr "Канал на"
-
-msgid "More notices..."
-msgstr "Още известия..."
-
-msgid "Attach a file"
-msgstr "Прикачване на файл"
-
-msgid "Send"
-msgstr "Изпращане"
-
-msgid "Unattach the file"
-msgstr "Премахване на прикачения файл"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-"Грешка при качването (ъплоудването) на вашия файл: може би е прекалено голям "
-"(максимумът е %s) или е от забранен тип файлово разширение!"
-
-msgid "Authorization failed"
-msgstr "Неуспешно потвърждение на потребителските данни"
-
-msgid "Registration failed, please choose a different username"
-msgstr ""
-"Регистрацията е неуспешна, моля, изберете друго потребителско име/псевдоним"
-
-msgid "Service unavailable"
-msgstr "Услугата не е на разположение (офлайн, извън линия)"
-
-msgid "Internal server error, try later"
-msgstr "Вътрешна сървърна грешка, пробвайте отново по-късно"
-
-msgid "Your form has been sent."
-msgstr "Формулярът ви беше изпратен."
-
-msgid "Application"
-msgstr "Приложение"
-
-msgid "Media integration"
-msgstr "Медийна интеграция"
-
-msgid "Keep local chat archives"
-msgstr "Пазене на локални архиви на чата"
-
-msgid "XMPP links"
-msgstr "XMPP връзки"
-
-msgid "Open XMPP links with Jappix"
-msgstr "Отваряне на XMPP връзки с Jappix"
-
-msgid "changed the subject to:"
-msgstr "промени темата на:"
-
-msgid "Welcome!"
-msgstr "Добре дошли!"
-
-msgid "Friends"
-msgstr "Приятели"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr ""
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-"Преди да започнете да го използвате, трябва да промените някои настройки, да "
-"потърсите приятели и да попълните профила си."
-
-msgid "Enable notification sounds"
-msgstr "Включване на звуци за известия"
-
-msgid "Share your position on the globe"
-msgstr "Споделяне на позицията (местоположението) ви на глобуса"
-
-msgid "Offline friends"
-msgstr "Приятели извън линия"
-
-msgid "Don't hide offline friends"
-msgstr "Без скриване на прителите извън линия"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-"Използвайте този помощник/инструмент, за да намерите приятелите си на "
-"сървъра, който използвате в момента, или ги добавете по-късно."
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr "Добра работа! Сега можете да споделите Jappix със своите приятели!"
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-"Когато натиснете бутона за запазване, ще бъде отворен редакторът на профила. "
-"Приятно социализиране!"
-
-msgid "Share Jappix on %s"
-msgstr "Споделяне на Jappix по %s"
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "Използвам Jappix, отворена социална платформа. Аз съм %s!"
-
-msgid "Unknown name"
-msgstr "Неизвестно име"
-
-msgid "Unknown country"
-msgstr "Неизвестна страна/държава"
-
-msgid "Click to enable"
-msgstr "Натиснете за включване"
-
-msgid "Click to disable"
-msgstr "Натиснете за изключване"
-
-msgid "Installation"
-msgstr "Инсталация"
-
-msgid "Jappix installation"
-msgstr "Инсталация на Jappix"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "Добре дошли в инсталацията за/на Jappix!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-"Този помощник/инструмент ще ви помогне бързо да инсталирате Jappix, първата "
-"пълноценна онлайн социална платформа, базирана на XMPP, на вашия сървър. "
-"Дори не са ви нужни технически познания."
-
-msgid "Installation Steps:"
-msgstr "Нека да разгледаме стъпките при/на инсталацията:"
-
-msgid "Welcome"
-msgstr "Здравейте"
-
-msgid "Storage configuration"
-msgstr "Конфигурация на хранилището"
-
-msgid "Administrator account"
-msgstr "Администраторска потребителска сметка (акаунт)"
-
-msgid "Main configuration"
-msgstr "Основна конфигурация"
-
-msgid "Hosts configuration"
-msgstr "Конфигурация на хостовете"
-
-msgid "Services installation"
-msgstr "Инсталация на услуги"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-"Ако настоящият език не съвпада с вашия (%1s), можете да направите Jappix да "
-"говори на %2s, като това ще се запази."
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"Ако желаете да получите помощ относно инсталацията и конфигурацията на "
-"Jappix, можете да използвате цялата наша документация на програмата, която е "
-"на разположение от:"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-"Време е да построите вашия собствен социален облак: просто отидете на "
-"следващата стъпка!"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr "В тази папка/директория може да се записва, можете да продължите!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-"Jappix ви позволява да управлявате и менажирате вашата конфигурация, да "
-"инсталирате нови разширения (плъгини) или да потърсите за обновления на "
-"програмата (ъпдейти). Затова трябва да създадете администраторска "
-"потребителска сметка (акаунт), за да можете да имате достъп до мениджъра с "
-"настройките на Jappix."
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-"Когато Jappix се инсталира, просто натиснете върху хипервръзката към "
-"мениджъра с настройките за програмата, намиращ се на домашната страница, за "
-"да влезете в него."
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr "Опа, пропуснали сте нещо или двете пароли не съвпадат!"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-"Jappix изисква да му въведете някои стойности, за да функционира правилно. "
-"Моля, коригирайте следните входни данни (или останете със стойностите по "
-"подразбиране, които вършат работа на повечето хора)."
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-"Обърнете внимание на това, че ако не изберете ръчно стойност, която е "
-"задължителна, тя автоматично ще бъде попълнена с фабрична стойност по "
-"подразбиране."
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-
-msgid "User"
-msgstr "Потребител"
-
-msgid "Service"
-msgstr "Услуга"
-
-msgid "Service name"
-msgstr "Наименование на услугата"
-
-msgid "Service description"
-msgstr "Описание на услугата"
-
-msgid "Owner name"
-msgstr ""
-
-msgid "Owner website"
-msgstr ""
-
-msgid "Connection"
-msgstr "Връзка"
-
-msgid "Lock the host"
-msgstr "Заключване на хоста"
-
-msgid "Anonymous mode"
-msgstr "Режим инкогнито (в анонимност)"
-
-msgid "HTTP authentication"
-msgstr ""
-
-msgid "Registration allowed"
-msgstr "Регистрациите са разрешени"
-
-msgid "Use the built-in BOSH proxy"
-msgstr ""
-
-msgid "Manager link"
-msgstr ""
-
-msgid "Groupchats to join"
-msgstr ""
-
-msgid "Suggest groupchats"
-msgstr ""
-
-msgid "Encryption"
-msgstr "Криптиране (шифроване)"
-
-msgid "HTTPS storage"
-msgstr "съхранение/складиране с HTTPS"
-
-msgid "Force HTTPS"
-msgstr "Принудително използване на HTTPS"
-
-msgid "Compression"
-msgstr "Компресия"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"Тази страница ви помага да настроите хостовете по подразбиране, с които "
-"Jappix ще се свързва. Можете да оставите настройките такива, каквито са по "
-"подразбиране, и да продължите напред, ако искате да използвате официалните "
-"хостове на услуги."
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"Може би не знаете какво е BOSH сървър? Всъщност, това е вид междинна станция "
-"между Jappix клиента и определен XMPP сървър, като тя е нужна поради "
-"технически ограничения."
-
-msgid "Main host"
-msgstr "Основен хост"
-
-msgid "Groupchat host"
-msgstr "Хост на групови чатове"
-
-msgid "Pubsub host"
-msgstr ""
-
-msgid "Anonymous host"
-msgstr "Анонимен хост"
-
-msgid "Directory host"
-msgstr "Хост на директорията"
-
-msgid "BOSH host"
-msgstr "BOSH хост"
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-"Можете да инсталирате допълнителни софтурни продукти на вашия сървър, с "
-"които да разширите възможностите на вашата инсталация на Jappix. Някои други "
-"могат да бъдат модифицирани поради ограничения заради сигурността, които са "
-"сложени по подразбиране."
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-"За да изпълните това действие е необходимо да имате достъп до shell-а "
-"(черупката) на вашия сървър и да бъдете влезли в системата му като root "
-"(корен) потребител, т.е. с административни права. Запомнете, че това е "
-"незадължително, Jappix ще работи и без тези модули, но някои от неговите "
-"възможности може да не са налични за използване поради това."
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-"След като приключите с инсталацията, Jappix ще генерира/създаде кеш (cache) "
-"файловете. Това може да бъде бавен процес, затова просто покачайте, докато "
-"приложението не се визуализира, и междувременно не натискайте каквито и да е "
-"бутони."
-
-msgid "Thanks for using Jappix!"
-msgstr "Благодарим ви, че използвате Jappix!"
-
-msgid "Next"
-msgstr "Следващ/напред"
-
-msgid "Finish"
-msgstr "Край"
-
-msgid "Check again"
-msgstr "Проверете отново"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-"Не можете да записвате в тази папка/директория, поставете правилните "
-"пълномощни права/свойства на директорията %s."
-
-msgid "%s is installed on your system."
-msgstr "%s е инсталиран на вашата система."
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s не е инсталиран/а/о на вашата система, нужно е да инсталирате %2s."
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "Максималната големина за качване на PHP е достатъчна (%s)."
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-"Максималната големина за качване на/чрез/с PHP е недостатъчна (%1s), нужно е "
-"да я промените към %2s в %3s."
-
-msgid "Jappix manager"
-msgstr "Jappix мениджър"
-
-msgid "Manager access"
-msgstr "Мениджърски достъп"
-
-msgid "Statistics"
-msgstr "Статистики"
-
-msgid "Hosts"
-msgstr "Хостове"
-
-msgid "Design"
-msgstr "Дизайн"
-
-msgid "Repeat"
-msgstr "повтаряне"
-
-msgid "All"
-msgstr "Всички"
-
-msgid "Horizontal"
-msgstr "Хоризонтално"
-
-msgid "Vertical"
-msgstr "Вертикално"
-
-msgid "Center"
-msgstr "Централно"
-
-msgid "Left"
-msgstr "Отляво"
-
-msgid "Right"
-msgstr "Отдясно"
-
-msgid "Top"
-msgstr "горе"
-
-msgid "Bottom"
-msgstr "Долу"
-
-msgid "Adapt"
-msgstr "Адаптивно"
-
-msgid "Color"
-msgstr "Цвят"
-
-msgid "Users"
-msgstr "Потребители"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-"Това е ограничена зона: само оправомощени потребители могат да управляват "
-"този Jappix възел."
-
-msgid "Please use the form below to login to the administration panel."
-msgstr ""
-"Моля, използвайте формуляра надолу, за да влезете в администрационния панел."
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-"За подобряване на сигурността, сесиите са времево ограничени и когато "
-"уеббраузърът ви бъде затворен, вие автоматично ще бъдете изхвърлени от "
-"системата."
-
-msgid "Credentials"
-msgstr "Акредитивни пълномощни/права"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "Вие излязохте. Довиждане!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-"Опа, системата не ви разпознава като валиден администратор. Моля, проверете "
-"верността на данните си за вход!"
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr ""
-"Променете конфигурацията на вашия Jappix възел с този инструмент/помощник."
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-"Всички съхранени файлове за/на този Jappix възел могат да бъдат управлявани "
-"с този инструмент/помощник: за целта, моля, изберете подпапка и започнете да "
-"редактирате съдържанието ѝ!"
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr ""
-"Jappix може напълно да се промени по вкуса ви: можете да промените неговия "
-"дизайн от тук."
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr ""
-"Изображението е невалидно, моля, използвайте изображения с файлови формати "
-"PNG, GIF или JPG!"
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr ""
-
-msgid "The image could not be received, would you mind retry?"
-msgstr ""
-"Изображението не може да бъде получено, бихте ли пробвали да го изпратите "
-"отново?"
-
-msgid "Your service logo has been successfully changed!"
-msgstr ""
-
-msgid "Your image was added to the list!"
-msgstr "Вашето изображение е добавено към списъка!"
-
-msgid "Changes saved!"
-msgstr "Промените са запазени!"
-
-msgid "Logo"
-msgstr ""
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr ""
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-
-msgid "Remove this logo"
-msgstr ""
-
-msgid "View this logo"
-msgstr ""
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-"Можете да изберете повече от един администратор за този Jappix възел. Също "
-"така можете да промените парола чрез този инструмент/помощник."
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-"С този инструмент/помощник можете да обновите версията на вашия Jappix "
-"възел, или да проверите дали е налична нова версия. Информация относно най-"
-"новата версия също се показва (на английски)."
-
-msgid "Access statistics"
-msgstr "Достъп до статистиките"
-
-msgid "Share statistics"
-msgstr "Споделяне на статистиките"
-
-msgid "Other statistics"
-msgstr "Други статистики"
-
-msgid "January"
-msgstr "януари"
-
-msgid "February"
-msgstr "февруари"
-
-msgid "March"
-msgstr "март"
-
-msgid "April"
-msgstr "април"
-
-msgid "May"
-msgstr "май"
-
-msgid "June"
-msgstr "юни"
-
-msgid "July"
-msgstr "юли"
-
-msgid "August"
-msgstr "август"
-
-msgid "September"
-msgstr "септември"
-
-msgid "October"
-msgstr "октомври"
-
-msgid "November"
-msgstr "ноември"
-
-msgid "December"
-msgstr "декември"
-
-msgid "Monday"
-msgstr "понеделник"
-
-msgid "Tuesday"
-msgstr "вторник"
-
-msgid "Wednesday"
-msgstr "сряда"
-
-msgid "Thursday"
-msgstr "четвъртък"
-
-msgid "Friday"
-msgstr "петък"
-
-msgid "Saturday"
-msgstr "събота"
-
-msgid "Sunday"
-msgstr "неделя"
-
-msgid "Total"
-msgstr "Общо"
-
-msgid "Archives"
-msgstr ""
-
-msgid "Music"
-msgstr "Музика"
-
-msgid "Backgrounds"
-msgstr "Фонове"
-
-msgid "Share"
-msgstr "Споделяне"
-
-msgid "Background"
-msgstr "Фон"
-
-msgid "Notice"
-msgstr "Бележка"
-
-msgid "Your design preferences have been saved!"
-msgstr "Предпочитанията ви за дизайна са запазени!"
-
-msgid "Please check your inputs: something is missing!"
-msgstr "Моля, проверете своите входни данни: нещо липсва!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-"Променете фона на вашия Jappix възел с този инструмент. Можете или да "
-"сложите цвят по избор за фон, или да използвате качено изображение за фон. "
-"Нека вашата креативност се лее!"
-
-msgid "Use default background"
-msgstr "Използване на фона по подразбиране (фабричния фон)"
-
-msgid "Use your own image"
-msgstr "Използване на ваше изображение"
-
-msgid "Select a background to use and change the display options."
-msgstr ""
-"Изберете фона, който ще използвате, и променете настройките за визуализация."
-
-msgid "Use your own color"
-msgstr "Използване на цвят по ваш избор"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr ""
-"Въведете шестнадесетичната (HTML hex) стойност на цвета, който искате да "
-"използвате за фон."
-
-msgid "Manage backgrounds"
-msgstr "Управление на фоновете"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-"Можете да добавите нов фон към списъка с помощта на този инструмент/"
-"помощник. Моля, качете валидно изображение."
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr ""
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-"С този инструмент/помощник можете да дефинирате съдържанието на бележка (за "
-"показване на основната страница на Jappix възела ви), например "
-"предупреждение, важно съобщение или реклама."
-
-msgid "Simple notice"
-msgstr "Проста бележка"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-"Това известие изисква визуализацията само на прост текст, но не е позволена "
-"употребата на код в него!"
-
-msgid "Advanced notice"
-msgstr "Разширена бележка"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-"Можете да промените по вкуса ви бележката чрез вградени (embedded) HTML, CSS "
-"и JavaScript, но трябва сами да кодирате (напишете кода) на стила."
-
-msgid "Available updates"
-msgstr "Обновления (ъпдейти) на разположение"
-
-msgid "What's new?"
-msgstr "Какво ново?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr ""
-"Вашите папките/директории хранилища не позволяват запис в тях, моля, "
-"приложете правилните правомощия/свойства за папките!"
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-"%1s може да предизвика проблеми на проксито (сървъра-посредник), моля, "
-"увеличете стойността %2s до %3s!"
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-"Използвате версия на Jappix за разработчици (т.е. не стабилна версия за "
-"крайни потребители, а нестабилна версия за разработчици). Можете да обновите "
-"Jappix чрез нашето хранилище, като изпълните командата: %s."
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-"Налична е нова версия на Jappix! Проверете какво ново има и пуснете да се "
-"инсталира обновлението (ъпдейта)!"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr ""
-"Използвате остаряла версия. Можете да обновите Jappix до по-новата налична "
-"версия (%s), като натиснете тук!"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"Вашата версия на програмата изглежда е най-новата налична, но по желание "
-"можете да проверявате ръчно за обновления (ъпдейти), като натиснете тук."
-
-msgid "Check for updates"
-msgstr "Проверка за обновления (ъпдейти)"
-
-msgid "Update in progress"
-msgstr "В процес на обновление (ъпдейтване)..."
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr "Jappix е обновен: сега използвате най-новата версия. Приятно ползване!"
-
-msgid "The update has failed! Please try again later."
-msgstr "Обновяването е неуспешно! Моля, опитайте отново по-късно!"
-
-msgid "Downloading package..."
-msgstr "Изтегляне на пакета..."
-
-msgid "Removing current Jappix system files..."
-msgstr "Премахване/изтриване на настоящите системни файлове на Jappix..."
-
-msgid "Extracting package..."
-msgstr "Извличане на пакета..."
-
-msgid "Regenerating storage folder tree..."
-msgstr "Презареждане на дървовидната структура на хранилищните папки..."
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix е вече обновен до най-новата версия!"
-
-msgid "Aborted: socket error!"
-msgstr "Прекъсната операция: цокълна (socket) грешка!"
-
-msgid "Aborted: buffer error!"
-msgstr "Неуспешна операция: буферна грешка!"
-
-msgid "Aborted: everything is not writable!"
-msgstr "Неуспех: не всичко е записваемо (writable)!"
-
-msgid "Aborted: could not extract the package!"
-msgstr "Операцията е неуспешна: пакетът не може да се извлече!"
-
-msgid "Visits"
-msgstr "Посещения"
-
-msgid "Daily"
-msgstr "дневно"
-
-msgid "Weekly"
-msgstr "седмично"
-
-msgid "Monthly"
-msgstr "месечно"
-
-msgid "Yearly"
-msgstr "годишно"
-
-msgid "Size"
-msgstr "Големина"
-
-msgid "Clean everything"
-msgstr "Изчистване на всичко/-и"
-
-msgid "Purge cache"
-msgstr "Изтриване на кеша (cache)"
-
-msgid "Purge logs"
-msgstr "Изтриване на дневниците (logs)"
-
-msgid "Purge sent files"
-msgstr ""
-
-msgid "Purge updates"
-msgstr "Изтриване/очистване на обновления"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "Папката за съхранение, която искахте да прочистите, е опразнена!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-"Поддържайте вашия Jappix възел свеж и бърз като прочиствате хранилищните "
-"папки често!"
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-"Качете (ъплоуднете) ваша музика (позволени файлови формати: Ogg Vorbis, MP3 "
-"или WAV), за да можете да я слушате в Jappix."
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr ""
-"Файлът, който искате да качите (ъплоуднете) трябва да е по-малък от %s."
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-"Следете какво потребителите ви съхраняват на вашия сървър и премахвайте/"
-"изтривайте нежелателно съдържание чрез този инструмент/помощник."
-
-msgid "Title"
-msgstr "Заглавие"
-
-msgid "Artist"
-msgstr "Изпълнител/автор"
-
-msgid "Album"
-msgstr "Албум"
-
-msgid "File"
-msgstr "Файл"
-
-msgid "Upload"
-msgstr "Качване"
-
-msgid "The folder is empty."
-msgstr "Тази папка/директория е празна."
-
-msgid "The music could not be received, please retry!"
-msgstr "Музикалният файл не може да бъде получен, моля, пробвайте отново!"
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-"Това е невалиден музикален (аудио) файл, моля, прекодирайте (транскодирайте) "
-"файла към формати като Ogg Vorbis, MP3 или WAV!"
-
-msgid "Your music has been added!"
-msgstr "Музиката ви е добавена!"
-
-msgid "The selected elements have been removed."
-msgstr "Избраните елементи са премахнати/изтрити."
-
-msgid "You must select elements to remove!"
-msgstr "Трябва да изберете елементи за премахване!"
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-"С този инструмент можете да добавите нов потребител или да промените парола "
-"(за това е нужно да въведете потребителското име/псевдоним на съществуващ "
-"потребител). Моля, използвайте силна (сигурна) парола!"
-
-msgid "Manage"
-msgstr "Управление"
-
-msgid "List"
-msgstr "Списък"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-
-msgid "The user has been added!"
-msgstr "Потребителят е добавен!"
-
-msgid "The chosen users have been removed."
-msgstr "Избраните потребители са премахнати."
-
-msgid "You must select one or more users to be removed!"
-msgstr ""
-"Трябва да изберете един или повече потребители, които искате да премахнете "
-"от списъка!"
-
-msgid "Yesterday"
-msgstr "вчера"
-
-msgid "%s days ago"
-msgstr "преди %s дни"
-
-msgid "User currently active"
-msgstr "Потребителят е активен в момента"
-
-msgid "Last seen: %s"
-msgstr "Последно видян(и): %s"
-
-msgid "Inactive since: %s"
-msgstr "Неактивен от: %s"
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr "Приятелят ви изглежда не е получил вашето съобщение/-я!"
-
-msgid "Static content server"
-msgstr "Статичен сървър за съдържанието"
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr "Това е статичният сървър за съдържанието за %1s, “%2s”."
-
-msgid "User uploads server"
-msgstr ""
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr ""
-
-msgid "Suggested friends"
-msgstr "Предложени приятели"
-
-msgid "Check all"
-msgstr "Маркиране/избиране на всички"
-
-msgid "Uncheck all"
-msgstr "Размаркиране/премахване на всички"
-
-msgid "Choose"
-msgstr "Избиране"
-
-msgid "List name"
-msgstr "Име на списъка"
-
-msgid "Allow"
-msgstr "Позволяване"
-
-msgid "Deny"
-msgstr "Отказване/отхвърляне"
-
-msgid "Group"
-msgstr "Група"
-
-msgid "Subscription"
-msgstr "Абонамент"
-
-msgid "Both"
-msgstr "И двамата/двете"
-
-msgid "From"
-msgstr "От"
-
-msgid "Everybody"
-msgstr "Всички"
-
-msgid "Send messages"
-msgstr "Изпращане на съобщения"
-
-msgid "Send queries"
-msgstr "Изпращане на заявки"
-
-msgid "See my status"
-msgstr "Разглеждане на моя статус"
-
-msgid "Send his/her status"
-msgstr "Изпращане на неговия/нейния статус"
-
-msgid "Everything"
-msgstr "Всичко/-и"
-
-msgid "Item"
-msgstr "Номер"
-
-msgid "Order"
-msgstr "Ред"
-
-msgid "Active for this session"
-msgstr "Активен за тази сесия"
-
-msgid "Always active"
-msgstr "Винаги активен"
-
-msgid "User directory"
-msgstr "Потребителска директория"
-
-msgid "Search a friend"
-msgstr "Търсене за приятел"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-"Изисканата възможност не е имплементирана от получателя или сървъра и поради "
-"това не може да бъде обработена."
-
-msgid "Send him/her a message"
-msgstr "Изпращане на съобщение за него/нея"
-
-msgid "Start a chat with him/her"
-msgstr "Започване на чат с него/нея"
-
-msgid "Available shortcuts:"
-msgstr ""
-
-msgid "%s removes the chat logs"
-msgstr ""
-
-msgid "%s joins a groupchat"
-msgstr ""
-
-msgid "%s closes the chat"
-msgstr ""
-
-msgid "%s shows the user profile"
-msgstr ""
-
-msgid "%s sends a message to the room"
-msgstr ""
-
-msgid "%s changes your nickname"
-msgstr ""
-
-msgid "%s sends a message to someone in the room"
-msgstr ""
-
-msgid "%s changes the room topic"
-msgstr ""
-
-msgid "%s kicks a user of the room"
-msgstr ""
-
-msgid "%s bans a user of the room"
-msgstr ""
-
-msgid "%s invites someone to join the room"
-msgstr ""
-
-msgid "Public profile"
-msgstr ""
-
-msgid "Your profile anywhere on the Web."
-msgstr ""
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-
-msgid "Yay, let's create your public profile!"
-msgstr ""
-
-msgid "Enable my public profile"
-msgstr ""
-
-msgid "Jappix for your phone"
-msgstr ""
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr ""
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-
-msgid "You haven't provided any file to download"
-msgstr ""
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr ""
-
-msgid "Woah this file isn't found, please double check"
-msgstr ""
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr ""
-
-msgid "Statistics are currently disabled in the settings."
-msgstr ""
-
-msgid "New event!"
-msgstr ""
-
-msgid "%s is typing..."
-msgstr ""
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-
-msgid "Username"
-msgstr ""
-
-msgid "Enter password"
-msgstr ""
-
-msgid "Once again..."
-msgstr ""
-
-msgid "Code"
-msgstr ""
-
-msgid "Security code"
-msgstr ""
-
-msgid "Advertising space available!"
-msgstr ""
-
-msgid "Advertise here"
-msgstr ""
-
-msgid "Analytics (%s)"
-msgstr ""
-
-msgid "Track visits"
-msgstr ""
-
-msgid "Piwik URL"
-msgstr ""
-
-msgid "Piwik tracking ID"
-msgstr ""
-
-msgid "Advertising (%s)"
-msgstr ""
-
-msgid "Enable ads"
-msgstr ""
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "Content ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "Leave"
-msgstr ""
-
-msgid "Mute"
-msgstr ""
-
-msgid "Unmute"
-msgstr ""
-
-msgid "Nobody there. Invite some people!"
-msgstr ""
-
-msgid "Invite people..."
-msgstr ""
-
-msgid "Enter people names..."
-msgstr ""
-
-msgid "Is calling you"
-msgstr ""
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr ""
-
-msgid "Waiting..."
-msgstr ""
-
-msgid "Ringing..."
-msgstr ""
-
-msgid "Declined the call"
-msgstr ""
-
-msgid "Call error"
-msgstr ""
-
-msgid "Ended the call"
-msgstr ""
-
-msgid "Call ended"
-msgstr ""
-
-msgid "Call canceled"
-msgstr ""
-
-msgid "Canceled the call"
-msgstr ""
-
-msgid "Is already in a call"
-msgstr ""
-
-msgid "Ending call..."
-msgstr ""
-
-msgid "Incoming group call"
-msgstr ""
-
-msgid "Preparing group call..."
-msgstr ""
-
-msgid "Connecting to group call..."
-msgstr ""
-
-msgid "Group call error"
-msgstr ""
-
-msgid "Ending group call..."
-msgstr ""
-
-msgid "Group call ended"
-msgstr ""
-
-msgid "Accept"
-msgstr ""
-
-msgid "Decline"
-msgstr ""
-
-msgid "Okay"
-msgstr ""
-
-msgid "Retry"
-msgstr ""
-
-msgid "Audio Call"
-msgstr ""
-
-msgid "Video Call"
-msgstr ""
-
-msgid "%s participant"
-msgstr ""
-
-msgid "%s participants"
-msgstr ""
-
-msgid "(full)"
-msgstr ""
-
-msgid "%s is able to receive group calls."
-msgstr ""
-
-msgid "%s may not support group calls."
-msgstr ""
-
-msgid "Send a message..."
-msgstr ""
-
-msgid "Edited"
-msgstr ""
-
-msgid "Edited (%s)"
-msgstr ""
-
-msgid "Editing"
-msgstr ""
-
-msgid "Being edited"
-msgstr ""
-
-msgid "Delivered"
-msgstr ""
-
-msgid "Read"
-msgstr ""
-
-msgid "Sending..."
-msgstr ""
-
-msgid "%s requested your attention to the conversation"
-msgstr ""
-
-msgid "You requested %s's attention to the conversation"
-msgstr ""
-
-msgid "Attention to conversation requested."
-msgstr ""
diff --git a/i18n/cs/LC_MESSAGES/main.mo b/i18n/cs/LC_MESSAGES/main.mo
deleted file mode 100644
index 45f63ba1..00000000
--- a/i18n/cs/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/cs/LC_MESSAGES/main.po b/i18n/cs/LC_MESSAGES/main.po
deleted file mode 100644
index 13e0d1dc..00000000
--- a/i18n/cs/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2402 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-# jui <appukonrad@gmail.com>, 2012
-# moneytoo <mdop@seznam.cz>, 2013-2014
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:20+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Czech (http://www.transifex.com/projects/p/jappix/language/"
-"cs/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: cs\n"
-"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "default:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"Ve vašem prohlížeči chybí JavaScript, takže nebude možné spustit Jappix! "
-"Prosím napravte to."
-
-msgid "Social channel, chat and more."
-msgstr "Sociální kanál, chat a další"
-
-msgid "Create your public profile."
-msgstr "Vytvořte si svůj veřejný profil."
-
-msgid "A mini-chat for your website."
-msgstr "Mini-chat pro vaše webové stránky."
-
-msgid "Get Jappix, get support."
-msgstr "Získejte Jappix, získáte podporu."
-
-msgid "Statistics around Jappix."
-msgstr "Statistika kolem Jappixu."
-
-msgid "Legal disclaimer for Jappix."
-msgstr "Právní upozornění pro Jappix."
-
-msgid "Download Jappix for free."
-msgstr "Stáhnout Jappix zdarma."
-
-msgid "Contribute to the Jappix code."
-msgstr "Přispívat do kódu Jappixu."
-
-msgid "Jappix for your company."
-msgstr "Jappix pro vaši společnost."
-
-msgid "Find a public Jappix node."
-msgstr "Najít veřejný Jappix uzel."
-
-msgid "Credits"
-msgstr "Zásluhy"
-
-msgid "Association"
-msgstr "Asociace"
-
-msgid "Web agency"
-msgstr "Webová agentůra"
-
-msgid "Legal"
-msgstr "Právo"
-
-msgid "Legal disclaimer"
-msgstr "Právní upozornění"
-
-msgid "Terms of use and legal"
-msgstr "Podmínky používání a právo"
-
-msgid "Owner"
-msgstr "Vlastník"
-
-msgid "Node owner"
-msgstr "Vlastník uzlu"
-
-msgid "By using our service, you accept %s."
-msgstr "Užíváním naší služby, souhlasíte s %s."
-
-msgid "our terms of use"
-msgstr "naše podmínky používání"
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Činnost Jappixe byla přerušena buď chybou ve spojenim , programu nebo "
-"nesprávnými přihlašovacími údaji (zkontrolujte vaše přihlašovací údaje), "
-"omlouváme se za komplikace"
-
-msgid "The element list on this server could not be obtained!"
-msgstr "Seznam položek na tomto cloud serveru není možné získat!"
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"Vaše heslo bylo změněno, nyní se můžete přihlásit k vašemu účtu s novými "
-"údaji."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "Váš XMPP účet byl zrušen, nashledanou!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "Byli jste odhlášeni z vašeho XMPP účtu, přejeme pěkný den!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr ""
-"Zdá se, že místnost do které vstoupujete neexistuje. Nejprve jí založte!"
-
-msgid "The groupchat has been removed."
-msgstr "Skupinový rozhovor byl odstraněn, nyí ho může vytvořit někdo jiný."
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "Uživatel, kterého chcete zastihnout se v této místnosti nenachází."
-
-msgid "Please enter the group chat address to join."
-msgstr ""
-"Prosím, vložte adresu skupinového rozhovoru ke kterému se chcete připojit."
-
-msgid "Please enter your nickname to join %s."
-msgstr "Prosím, vložte přezdívku pro připojení do %s."
-
-msgid "This room (%s) is protected with a password."
-msgstr "Místnost (%s) je chráněna heslem."
-
-msgid "Your browser is out of date!"
-msgstr "Váš prohlížeš je zastaralý."
-
-msgid "Last %s version is better!"
-msgstr "Poslední %s verze je lepší!"
-
-msgid "Login"
-msgstr "Přihlášení"
-
-msgid "Register"
-msgstr "Registrace"
-
-msgid "Here we go!"
-msgstr "Pojďme na to!"
-
-msgid "Server"
-msgstr "Server"
-
-msgid "Password"
-msgstr "Heslo"
-
-msgid "Remember me"
-msgstr "Zapamatuj si mě"
-
-msgid "This tool has been disabled!"
-msgstr "Tato možnost je zakázána, nelze jí použít!"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr ""
-"Byli jste odhlášeni, potože se vyskytly potíže se sítí. Co si přejete udělat?"
-
-msgid "Reconnect"
-msgstr "Znovu připojit"
-
-msgid "Messages"
-msgstr "Zprávy"
-
-msgid "Profile"
-msgstr "Profil"
-
-msgid "Options"
-msgstr "Nastavení"
-
-msgid "Disconnect"
-msgstr "Odpojit se"
-
-msgid "Filter"
-msgstr "Filtr"
-
-msgid "Add a friend"
-msgstr "Přidat kamaráda"
-
-msgid "Your groupchats"
-msgstr "Vaše skupinové rozhovory"
-
-msgid "Manage your favorite groupchats"
-msgstr "Spravovat vaše blíbené skupinové rozhovory"
-
-msgid "More stuff"
-msgstr "Další možnosti"
-
-msgid "Show all friends"
-msgstr "Zobrazit všechny kamarády"
-
-msgid "Only show connected friends"
-msgstr "Zobrazit pouze připojené kamarády"
-
-msgid "Groupchat presence messages"
-msgstr "Popisy stavů pro skupinový rozhovor"
-
-msgid "No chat images auto-load"
-msgstr "Nenačítat obrázky u rozhovorů"
-
-msgid "Message archives"
-msgstr "Archiv zpráv"
-
-msgid "Date"
-msgstr "Datum"
-
-msgid "A short message?"
-msgstr "Krátká zpráva?"
-
-msgid "How are you?"
-msgstr "Jak se vede ?"
-
-msgid "What are you doing?"
-msgstr "Co děláš?"
-
-msgid "Join a chat"
-msgstr "Zahájit rozhovor"
-
-msgid "Status"
-msgstr "Stav"
-
-msgid "Available"
-msgstr "Přítomen"
-
-msgid "Talkative"
-msgstr "Hovorný"
-
-msgid "Away"
-msgstr "Pryč"
-
-msgid "Not available"
-msgstr "Nedostupný"
-
-msgid "Busy"
-msgstr "Nerušit"
-
-msgid "Offline"
-msgstr "Offline"
-
-msgid "Mood"
-msgstr "Nálada"
-
-msgid "None"
-msgstr "Neuvedena"
-
-msgid "Crazy"
-msgstr "Bláznivý"
-
-msgid "Excited"
-msgstr "Vzrušený"
-
-msgid "Playful"
-msgstr "Hravý"
-
-msgid "Happy"
-msgstr "Šťastný"
-
-msgid "Shocked"
-msgstr "Šokovaný"
-
-msgid "Hot"
-msgstr "Nažhavený"
-
-msgid "Sad"
-msgstr "Smutný"
-
-msgid "Amorous"
-msgstr "Zamilovaný"
-
-msgid "Confident"
-msgstr "Důvěřivý"
-
-msgid "Activity"
-msgstr "Činnost"
-
-msgid "Chores"
-msgstr "Nakupuje"
-
-msgid "Drinking"
-msgstr "Pije"
-
-msgid "Eating"
-msgstr "Jí"
-
-msgid "Exercising"
-msgstr "Cvíčí"
-
-msgid "Grooming"
-msgstr "Pečuje"
-
-msgid "Appointment"
-msgstr "Schůzka"
-
-msgid "Inactive"
-msgstr "Nečinný"
-
-msgid "Relaxing"
-msgstr "Relaxuje"
-
-msgid "Talking"
-msgstr "Hovoří"
-
-msgid "Traveling"
-msgstr "Cestuje"
-
-msgid "Working"
-msgstr "Pracuje"
-
-msgid "View profile"
-msgstr "Zobrazit profil"
-
-msgid "This is a repeat from %s"
-msgstr "Jedná se o opakování od %s"
-
-msgid "Repeat this notice"
-msgstr "Opakovat toto upozornění"
-
-msgid "Remove this notice"
-msgstr "Odstranit upozornění"
-
-msgid "Your profile"
-msgstr "Váš profil"
-
-msgid "Identity"
-msgstr "Osobní údaje"
-
-msgid "Profile image"
-msgstr "Fotografie k profilu"
-
-msgid "Others"
-msgstr "Ostatní"
-
-msgid "Other"
-msgstr "Ostatní"
-
-msgid "Personal"
-msgstr "Osobní"
-
-msgid "Complete name"
-msgstr "Celé jméno"
-
-msgid "Nickname"
-msgstr "Přezdívka"
-
-msgid "First name"
-msgstr "Jméno"
-
-msgid "Last name"
-msgstr "Příjmení"
-
-msgid "Date of birth"
-msgstr "Datum narození"
-
-msgid "Contact"
-msgstr "Kontakt"
-
-msgid "E-mail"
-msgstr "E-mail"
-
-msgid "Phone"
-msgstr "Telefon"
-
-msgid "Website"
-msgstr "Webová stránka"
-
-msgid "Current"
-msgstr "Současná"
-
-msgid "Delete"
-msgstr "Smazat"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr "Jaká škoda! Nemáte nastavenou fotografii u profilu ve vaší vizitce!"
-
-msgid "Address"
-msgstr "Adresa"
-
-msgid "Street"
-msgstr "Ulice"
-
-msgid "City"
-msgstr "Město"
-
-msgid "Postal code"
-msgstr "PSČ"
-
-msgid "Country"
-msgstr "Země"
-
-msgid "Biography"
-msgstr "O mě"
-
-msgid "Important notice"
-msgstr "Důležité upozornění"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-"Buďte opatrní, informace, které vyplníte v profilu jsou přístupné každému (i "
-"tomu, komu nechcete)."
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr ""
-"Není všechno v XMPP jen soukromé; toto je jednou z těch věcí, které nejsou, "
-"váš veřejný profil (vCard)."
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"Vřele doporučujeme nahrát obrázek k profilu (%s maximálně), například vaší "
-"fotografii, aby vás kamarádi lépe poznali. "
-
-msgid "Save"
-msgstr "Uložit"
-
-msgid "Cancel"
-msgstr "Zrušit"
-
-msgid "Edit options"
-msgstr "Upravit nastavení"
-
-msgid "Channel"
-msgstr "Kanál"
-
-msgid "Commands"
-msgstr "Příkazy"
-
-msgid "Sounds"
-msgstr "Zvuky"
-
-msgid "Privacy"
-msgstr "Soukromí"
-
-msgid "Message archiving"
-msgstr "Archivace zpráv"
-
-msgid "Store an history of your chats"
-msgstr "Ukládat historii vašich rozhovorů"
-
-msgid "Geolocation"
-msgstr "Geologická poloha"
-
-msgid "Disabled"
-msgstr "Zakázaný"
-
-msgid "Store all chats"
-msgstr "Ukládat všechny rozhovory"
-
-msgid "Store friend chats"
-msgstr "Ukládat rozhovory s kamarády"
-
-msgid "Remove all archives"
-msgstr "Smazat všechny archívy"
-
-msgid "Empty"
-msgstr "Odstranit"
-
-msgid "Empty channel"
-msgstr "Vymazat kanál"
-
-msgid "Persistent"
-msgstr "Natrvalo"
-
-msgid "Maximum notices"
-msgstr "Maximum upozornění"
-
-msgid "Account"
-msgstr "Účet"
-
-msgid "Change password"
-msgstr "Změnit heslo"
-
-msgid "Delete account"
-msgstr "Zrušit účet"
-
-msgid "Old"
-msgstr "Staré"
-
-msgid "New (2 times)"
-msgstr "Nové (2 krát)"
-
-msgid "Suggested chatrooms"
-msgstr "Doporučené diskusní místnosti"
-
-msgid "Skip"
-msgstr "Přeskočit"
-
-msgid "Continue"
-msgstr "Pokračovat"
-
-msgid "To"
-msgstr "Komu"
-
-msgid "Close"
-msgstr "Zavřít"
-
-msgid "unknown"
-msgstr "neznámá"
-
-msgid "Unavailable"
-msgstr "Odpojen"
-
-msgid "is now"
-msgstr "nyní je"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Prosím čekejte, než se váš avatar nahraje ..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "Zde je! Nový krásný obrázek profilu!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "Soubor s obrázkem není podporován nebo je příliš velký."
-
-msgid "Reply"
-msgstr "Odpovědět"
-
-msgid "Error"
-msgstr "Chyba"
-
-msgid "Click here to solve the error"
-msgstr "KLikněte zde pro řešení problému"
-
-msgid "You"
-msgstr "Ty"
-
-msgid "Remove"
-msgstr "Odstranit"
-
-msgid "Rename"
-msgstr "Přejmenovat"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Ahoj, Já jsem %s, chci si Tě přidat jako kamaráda."
-
-msgid "Smiley insertion"
-msgstr "Vložit smajlíka"
-
-msgid "Change style"
-msgstr "Písmo"
-
-msgid "Text in bold"
-msgstr "Tučné"
-
-msgid "Text in italic"
-msgstr "Kurzíva"
-
-msgid "Underlined text"
-msgstr "Podtržené"
-
-msgid "Send a file"
-msgstr "Odeslat soubor"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr ""
-"Jakmile dojde k nahrání, bude váš kamarád vyzván ke stažení souboru, který "
-"jste odeslal."
-
-msgid "Save chat"
-msgstr "Uložit rozhovor"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"Klikni na nasledující odkaz pro vytvoření logu rozhovoru, a počkej. Potom "
-"klikni znovu ke stažení souboru."
-
-msgid "This chat is empty!"
-msgstr "Tento rozhovor je prázdný!"
-
-msgid "Generate file!"
-msgstr "Vygeneruj soubor!"
-
-msgid "Download file!"
-msgstr "Stažení souboru!"
-
-msgid "Clean current chat"
-msgstr "Vyčistit probíhající rozhovor"
-
-msgid "Show user profile"
-msgstr "Zobrazit profil uživatele"
-
-msgid "Add this contact to your friends"
-msgstr "Přidej tento kontakt mezi své kamarády"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Přidej tento skupinový rozhovor do oblíbených"
-
-msgid "All tabs"
-msgstr "Všechny listy"
-
-msgid "Join groupchat"
-msgstr "Připojit se ke skupinovému rozhovoru"
-
-msgid "Close this tab"
-msgstr "Zavřít tento list"
-
-msgid "no subject defined for this room."
-msgstr "Není nastaven předmět pro tuto místnost"
-
-msgid "Administration panel for this room"
-msgstr "Panel administrace pro tuto místnost"
-
-msgid "Moderators"
-msgstr "Moderátoři"
-
-msgid "Participants"
-msgstr "Členové"
-
-msgid "Visitors"
-msgstr "Návštěvníci"
-
-msgid "Manage favorite rooms"
-msgstr "Spravovat oblíbené skupinové rozhovory"
-
-msgid "Change favorites"
-msgstr "Změnit oblíbené"
-
-msgid "Search a room"
-msgstr "Najít místnost"
-
-msgid "Select a favorite"
-msgstr "Vyberte oblíbenou"
-
-msgid "Getting the name..."
-msgstr "Získávám jméno ..."
-
-msgid "Gateway"
-msgstr "Brána"
-
-msgid "Name"
-msgstr "Jméno"
-
-msgid "Room"
-msgstr "Místnost"
-
-msgid "Add"
-msgstr "Přidat"
-
-msgid "Edit"
-msgstr "Upravit"
-
-msgid "Search a room on"
-msgstr "Najít místnost na"
-
-msgid "No room found on this server."
-msgstr "Na tomto serveru nebyla nalezena žádná místnost."
-
-msgid "Service discovery"
-msgstr "Zjištění služeb"
-
-msgid "Server to query"
-msgstr "Prohledávaný server"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "Promiňte, ale hledaný výraz nebyl nalezen!"
-
-msgid "Accounts"
-msgstr "Účty"
-
-msgid "Authentications"
-msgstr "Ověřování"
-
-msgid "Automation"
-msgstr "Automaticky"
-
-msgid "Clients"
-msgstr "Klienti"
-
-msgid "Collaboration"
-msgstr "Spolupráce"
-
-msgid "Components"
-msgstr "Komponenty"
-
-msgid "Rooms"
-msgstr "Místnosti"
-
-msgid "Directories"
-msgstr "Adresáře"
-
-msgid "Gateways"
-msgstr "Brány"
-
-msgid "News"
-msgstr "Novinky"
-
-msgid "Hierarchy"
-msgstr "Hierarchie"
-
-msgid "Proxies"
-msgstr "Proxy server"
-
-msgid "Publication/Subscription"
-msgstr "Publikování/Odebírání"
-
-msgid "Storage"
-msgstr "Úložiště"
-
-msgid "Service offline or broken"
-msgstr "Služba je vypnutá nebo nedostupná"
-
-msgid "Your inbox"
-msgstr "Vaše schránka"
-
-msgid "Available actions"
-msgstr "Dostupné akce"
-
-msgid "Clean"
-msgstr "Vyčistit"
-
-msgid "New"
-msgstr "Nová"
-
-msgid "Received"
-msgstr "Přijaté"
-
-msgid "Subject"
-msgstr "Předmět"
-
-msgid "Content"
-msgstr "Obsah"
-
-msgid "Send message"
-msgstr "Odeslat zprávu"
-
-msgid "Your inbox is empty."
-msgstr "Vaše schránka je prázdná."
-
-msgid "MUC administration"
-msgstr "Administrace MUC"
-
-msgid "You administrate this room"
-msgstr "Spravujte tuto místnost"
-
-msgid "Enter new subject"
-msgstr "Vložte nový přednět"
-
-msgid "Configuration"
-msgstr "Nastavení"
-
-msgid "Authorizations"
-msgstr "Povolení"
-
-msgid "Member list"
-msgstr "Seznam členů"
-
-msgid "Owner list"
-msgstr "Seznam vlastníků"
-
-msgid "Administrator list"
-msgstr "Seznam správců"
-
-msgid "Outcast list"
-msgstr "Seznam nežádoucích"
-
-msgid "Add an input"
-msgstr "Přidej člena"
-
-msgid "Destroy this MUC"
-msgstr "Zrušit tento MUC"
-
-msgid "Yes, let's do it!"
-msgstr "Ano, pojďme na to!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "Váš kamarád sleduje rozhovor."
-
-msgid "Your friend is writing a message..."
-msgstr "Váš kamarád píše ..."
-
-msgid "Your friend stopped writing a message."
-msgstr "Váš kamarád přestal psát."
-
-msgid "Your friend is doing something else."
-msgstr "Váš kamarád se věnuje něčemu jinému."
-
-msgid "Your friend closed the chat."
-msgstr "Váš kamarád ukončil rozhovor."
-
-msgid "Requesting this service..."
-msgstr "Žádám o tuto službu ..."
-
-msgid "Loading"
-msgstr "Načítání"
-
-msgid "changed his/her nickname to %s"
-msgstr "byla změněna jeho/její přezdívka na %s"
-
-msgid "joined the chat room"
-msgstr "Vstoupit do místnosti"
-
-msgid "left the chat room"
-msgstr "opustit místnost"
-
-msgid "%s left"
-msgstr "%s zbývá"
-
-msgid "%s joined"
-msgstr "%s přidaných"
-
-msgid "no status"
-msgstr "bez statusu"
-
-msgid "has been kicked"
-msgstr "byl vyloučen"
-
-msgid "has been banned"
-msgstr "byl zakázán"
-
-msgid "no reason"
-msgstr "bez důvodu"
-
-msgid "Communicate with the entire world!"
-msgstr "Komunikujte s celým světem!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-"Jappix je velká sociální platforma, ke které máte přístup ať jste kdekoliv, "
-"kdykoliv chcete s někým komunikovat."
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-"Umožní vám být v kontaktu s milióny uživateli, kteří právě využívají XMPP "
-"síť stejně jako vy s Jabbixem. Přidpojte se ke komunitě a zůstaňte svobodní."
-
-msgid "Hi there!"
-msgstr "Ahoj!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr "Vítejte na %1s, \"%2s\"."
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr ""
-"Přihlaste se ke svému již existujícímu XMPP účtu nebo si zaregistrujte "
-"zdarma nový!"
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-"Pro bezpečí vašeho účtu, během přihlašování nebo registraci, se ujistěte, že "
-"je vaše heslo v bezpečí."
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-"Přihlaš se ke svému již existujícímu XMPP účtu. Také můžeš použít %s pro "
-"připojení ke skupinovému rozhovoru."
-
-msgid "Previous"
-msgstr "Předchozí"
-
-msgid "General"
-msgstr "Obecné"
-
-msgid "Advanced"
-msgstr "Rozšířené"
-
-msgid "Resource"
-msgstr "Zdroj"
-
-msgid "Priority"
-msgstr "Priorita"
-
-msgid "Low"
-msgstr "Nízká"
-
-msgid "Medium"
-msgstr "Střední"
-
-msgid "High"
-msgstr "Vysoká"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-"Zadejte název skupinového rozhovoru ke kterému se chcete připojit a zvolte "
-"si přezdívku. Nebo se můžete vrátit na %s."
-
-msgid "login page"
-msgstr "přihlašovací stránku"
-
-msgid "Share this link with your friends:"
-msgstr "Sdílejte tento odkaz s kamarády:"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-"Zaregistruj si nový XMPP účet a spoj se s kamarády ve vlastní sociální síti. "
-"Je to jednoduché!"
-
-msgid "Required"
-msgstr "Povinné"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "Jste zaregistrivání, toto je vaše XMPP adresa:"
-
-msgid "Manager"
-msgstr "Správce"
-
-msgid "Encrypted"
-msgstr "Šifrovaně"
-
-msgid "Unencrypted"
-msgstr "Bez šifrování"
-
-msgid "Where are you?"
-msgstr "Kde jsi?"
-
-msgid "What's up with you?"
-msgstr "Co je s tebou?"
-
-msgid "Type something you want to share with your friends..."
-msgstr "Zde napište, co si přejete sdílet s vašimi přáteli ..."
-
-msgid "Fetching the social channel..."
-msgstr "Stahuji kanál ..."
-
-msgid "You are synchronized with your network."
-msgstr "Nyní jste synchronizovaný s vaší sítí."
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "Nelze nic odesílat: můžete pouze přijímat zprávy!"
-
-msgid "Media viewer"
-msgstr "Prohlížeč médií"
-
-msgid "Browse"
-msgstr "Prohlížet"
-
-msgid "Command"
-msgstr "Příkaz"
-
-msgid "Subscribe"
-msgstr "Registrace"
-
-msgid "Join"
-msgstr "Připojit"
-
-msgid "Automatic"
-msgstr "Automaticky"
-
-msgid "Search"
-msgstr "Hledat"
-
-msgid "No result!"
-msgstr "Nic nenalezeno!"
-
-msgid "No notifications."
-msgstr "Žádné upozornění."
-
-msgid "would like to add you as a friend."
-msgstr "si vás chce přidat jako kamaráda."
-
-msgid "would like you to join this chatroom:"
-msgstr "žádá vás aby jste vstoupili do místnosti."
-
-msgid "Do you accept?"
-msgstr "Souhlasíte?"
-
-msgid "Yes"
-msgstr "Ano"
-
-msgid "No"
-msgstr "Ne"
-
-msgid "would like to get authorization."
-msgstr "žádá o povolení."
-
-msgid "would like to send you a file: “%s”."
-msgstr "přejete si odeslat soubor: “%s”."
-
-msgid "has received a file exchange request: “%s”."
-msgstr "obdržel žádost pro výměnu souboru: “%s”."
-
-msgid "has accepted to receive your file: “%s”."
-msgstr "souhlasí s přijetím souboru: “%s”."
-
-msgid "has rejected to receive your file: “%s”."
-msgstr "odmítl přijmout soubor: “%s”."
-
-msgid "could not receive your file: “%s”."
-msgstr "nelze přijmout soubor: “%s”."
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr "Přejete si vidět kamarády, které vám %s navrhuje?"
-
-msgid "commented an item you follow: “%s”."
-msgstr "pro komentování položky postupujte následovně: “%s”."
-
-msgid "liked your post: “%s”."
-msgstr "váš oblíbený příspěvek: “%s”."
-
-msgid "quoted you somewhere: “%s”."
-msgstr "citoval jste někde: “%s”."
-
-msgid "published on your wall: “%s”."
-msgstr "zvěřejněno na vaší nástěnce: “%s”."
-
-msgid "tagged you in a photo (%s)."
-msgstr "jste označen na fotografii (%s)."
-
-msgid "tagged you in a video (%s)."
-msgstr "jste označen na videu (%s)."
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-"potvrdil váš účet. Váš veřejný profil bude dostupný během několika okamžiků."
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr "na vaši žádost odstranil váš veřejný profil. Bude se nám stýskat!"
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-"uložil nastavení vašeho nového veřejného profilu. To bude použito během "
-"několika okamžiků."
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-"nemohl potvrdil váš účet k vytvoření nebo úpravě vašeho veřejného profilu. "
-"Zkontrolujte si svá přístupová data."
-
-msgid "Open"
-msgstr "Otevřít"
-
-msgid "Show"
-msgstr "Zobrazit"
-
-msgid "Hide"
-msgstr "Skrýt"
-
-msgid "Submit"
-msgstr "Odeslat"
-
-msgid "Client"
-msgstr "Klient"
-
-msgid "System"
-msgstr "Systém"
-
-msgid "Local time"
-msgstr "Místní čas"
-
-msgid "Comments"
-msgstr "Komentáře"
-
-msgid "User profile"
-msgstr "Profil uživatele"
-
-msgid "See his/her position on the globe"
-msgstr "Zobraz jeho/její polohu na zeměkouli"
-
-msgid "Confirm"
-msgstr "Ověřit"
-
-msgid "anonymous mode"
-msgstr "anonymní mód"
-
-msgid "Groups"
-msgstr "Skupiny"
-
-msgid "Unclassified"
-msgstr "Nezařazené"
-
-msgid "Authorize"
-msgstr "Oprávnit"
-
-msgid "Ask for authorization"
-msgstr "Požádat o oprávnění"
-
-msgid "Unblock"
-msgstr "Odblokovat"
-
-msgid "Prohibit"
-msgstr "Zakázat"
-
-msgid "Block"
-msgstr "Blokovat"
-
-msgid "Chat"
-msgstr "Rozhovor"
-
-msgid "Groupchat"
-msgstr "Skupinový rozhovor"
-
-msgid "Jappix Mobile"
-msgstr "Jabbix pro Mobil"
-
-msgid "Desktop"
-msgstr "Počítač"
-
-msgid "Mobile"
-msgstr "Mobil"
-
-msgid "Please wait..."
-msgstr "Čekejte prosím ..."
-
-msgid "Please enable JavaScript"
-msgstr "Prosím povolte JavaScript"
-
-msgid "Show comments"
-msgstr "Zobrazit komentáře"
-
-msgid "Loading comments..."
-msgstr "Načítám komentáře..."
-
-msgid "Could not get the comments!"
-msgstr "Nelze získat komentáře!"
-
-msgid "Comments locked!"
-msgstr "Komentáře jsou uzamčené!"
-
-msgid "Type your comment here..."
-msgstr "Napište svůj komentář zde ..."
-
-msgid "Your channel"
-msgstr "Váš kanál"
-
-msgid "Channel of"
-msgstr "Kanál uživatele"
-
-msgid "More notices..."
-msgstr "Další upozornění ..."
-
-msgid "Attach a file"
-msgstr "Připojit soubor"
-
-msgid "Send"
-msgstr "Odeslat"
-
-msgid "Unattach the file"
-msgstr "Odebrat soubor"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-"Nastala chyba během nahrávání souboru: buď je příliš velký (%s maximálně) "
-"nebo není povolen!"
-
-msgid "Authorization failed"
-msgstr "Autorizace se nezdařila"
-
-msgid "Registration failed, please choose a different username"
-msgstr "Registrace se nezdařila, zvolte prosím jiné uživatelské jméno"
-
-msgid "Service unavailable"
-msgstr "Služba je nedostupná"
-
-msgid "Internal server error, try later"
-msgstr "Vnitřní chyba serveru, zkuste později"
-
-msgid "Your form has been sent."
-msgstr "Váš formulář byl odeslán."
-
-msgid "Application"
-msgstr "Aplikace"
-
-msgid "Media integration"
-msgstr "Integrovat media"
-
-msgid "Keep local chat archives"
-msgstr "Nechávat lokální archívy rozhovorů"
-
-msgid "XMPP links"
-msgstr "XMPP odkaz"
-
-msgid "Open XMPP links with Jappix"
-msgstr "Otevřít XMPP odkaz pomocí Jappix"
-
-msgid "changed the subject to:"
-msgstr "změnit předmět na:"
-
-msgid "Welcome!"
-msgstr "Vítejte!"
-
-msgid "Friends"
-msgstr "Kamarádi"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr "Vítá Vás Jappix, Váš vlastní sociální cloud!"
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-"Dříve než jí začnete používat, měli by jste upravit některá nastavení, "
-"vyhledat kamarády a vyplnit svůj profil."
-
-msgid "Enable notification sounds"
-msgstr "Povolit upozorňování pomocí zvuků"
-
-msgid "Share your position on the globe"
-msgstr "Sdílet svojí polohu na zeměkouli"
-
-msgid "Offline friends"
-msgstr "Odpojení kamarádi"
-
-msgid "Don't hide offline friends"
-msgstr "Neskrývat odpojené kamarády"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-"Použijte tento nástroj na vyhledání kamarádů na tomto serveru. Nebo je "
-"můžete přidat později."
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr "Skvěle! Nyní můžete sdílet Jappix se svými kamarády!"
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-"Nyní, když stisknete tlačitko Uložit, následuje otevření editoru vašeho "
-"profilu."
-
-msgid "Share Jappix on %s"
-msgstr "Sdílejte Jappix na %s"
-
-msgid "Follow Jappix topic on %s"
-msgstr "Sledovat Jappix téma na %s"
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "Používám Jappix, otevřenou sociální platformu. Jsem %s!"
-
-msgid "Unknown name"
-msgstr "Neznámé jméno"
-
-msgid "Unknown country"
-msgstr "Neznámá země"
-
-msgid "Click to enable"
-msgstr "Klikni pro povolení"
-
-msgid "Click to disable"
-msgstr "Klikni pro zakázání"
-
-msgid "Installation"
-msgstr "Instalace"
-
-msgid "Jappix installation"
-msgstr "Jappix instalace"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "Vítejte v Jappix instalaci!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-"Tento nástroj vám pomůže rychle nainstalovat Jappix, první plnohodnotnou "
-"sociální platformu založenou na XMPP, na váš server. Nebudete dokonce "
-"potřebovat žádné technické znalosti."
-
-msgid "Installation Steps:"
-msgstr "Přejděme k instalačním krokům:"
-
-msgid "Welcome"
-msgstr "Vítejte"
-
-msgid "Storage configuration"
-msgstr "Nastavení úložiště"
-
-msgid "Administrator account"
-msgstr "Účet administrátora"
-
-msgid "Main configuration"
-msgstr "Hlavní nastavení"
-
-msgid "Hosts configuration"
-msgstr "Nastavení hostitele"
-
-msgid "Services installation"
-msgstr "Instalace služeb"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-"Pokud se tento jazyk (%1s) neshoduje s vaším, můžete nechat Jappix mluvit "
-"jiným jazykem %2s. Volba bude uložena."
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"Pokud potřebujete pomoci s instalací a nastavením Jappix, můžete využít "
-"dokumentaci, kterou naleznete zde:"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-"Nastal čas vybudovat vlastní sociální síť: stačí přejít k nasledujícímu "
-"kroku!"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-"Jappix ukládá trvalá data (jako jsou sdílené soubory, historie rozhovorů, "
-"vaši hudbu a konfiguraci) do několika adresářů."
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-"Jappix musí mít právo zapisovat do tohoto adresáře pro vytváření pod-"
-"adresářů. Pokud nemá, musíte nastavit práva %1 na %2 nebo změnit vlastníka "
-"adresáře na %3s (v závislosti na vaší konfiguraci)."
-
-msgid "The folder is writable, you can continue!"
-msgstr "Do adresáře je povolen zápis, můžete pokračovat!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-"Jappix vám úmožňuje spravovat vaší konfiguraci, instalovat pluginy nebo "
-"vyhledávat aktualizace. Proto je nutné si vytvořit účet administrátora ke "
-"vstupu do Správy Jappix."
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-"Když je Jappix nainstalován, stačí kliknout na odkaz Správce na výchozí "
-"stránce pro vstup do Správy. "
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr "Jejda, něco vám uniklo, nebo se hesla neshodují!"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-"Jappix vyžaduje nastavení některých údajů. Prosím upravtel následující údaje "
-"(nebo nechte přednastavené, které většině uživatelů vyhovují)."
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr "Pokud nenastavíte povinné údaje, budou nastaveny na výchozí."
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-"Potřebujete pomoct? Raději si nejprve přečtete v dokumentaci stránku jak "
-"vyplnit tento formulář!"
-
-msgid "User"
-msgstr "Uživatel"
-
-msgid "Service"
-msgstr "Služba"
-
-msgid "Service name"
-msgstr "Název služby"
-
-msgid "Service description"
-msgstr "Popis služby"
-
-msgid "Owner name"
-msgstr "Jméno vlastníka"
-
-msgid "Owner website"
-msgstr "Webová stránka vlastníka"
-
-msgid "Connection"
-msgstr "Připojení"
-
-msgid "Lock the host"
-msgstr "Uzamknout hostitele"
-
-msgid "Anonymous mode"
-msgstr "Anonymní mód"
-
-msgid "HTTP authentication"
-msgstr "HTTP autentizace"
-
-msgid "Registration allowed"
-msgstr "Registrace povolena"
-
-msgid "Use the built-in BOSH proxy"
-msgstr "Použít vestavěnou BOSH proxy"
-
-msgid "Manager link"
-msgstr "Odkaz správce"
-
-msgid "Groupchats to join"
-msgstr "Připojit skupinové rozhovory"
-
-msgid "Suggest groupchats"
-msgstr "Doporučené skupinové diskuze"
-
-msgid "Encryption"
-msgstr "Šifrování"
-
-msgid "HTTPS storage"
-msgstr "HTTPS úložiště"
-
-msgid "Force HTTPS"
-msgstr "Vynutit HTTPS"
-
-msgid "Compression"
-msgstr "Komprese"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"Tato stránka vám pomůže nastavit výchozího hostitele. Použijte přednastavené "
-"hodnoty, pokud chcete využívat oficiální službu hostitele."
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"BOSH server v podstatě předává informace mezi Jappix klientem a XMPP "
-"serverem a je nutný vzhledem k technickému omezení."
-
-msgid "Main host"
-msgstr "Hlavní hostitel"
-
-msgid "Groupchat host"
-msgstr "Hostitel skupinových rozhovorů (Groupchat host)"
-
-msgid "Pubsub host"
-msgstr "Pubsub hostitel"
-
-msgid "Anonymous host"
-msgstr "Anonymní host"
-
-msgid "Directory host"
-msgstr "Directory host"
-
-msgid "BOSH host"
-msgstr "BOSH host"
-
-msgid "WebSocket host"
-msgstr "WebSocket host"
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-"Můžete nainstalovat další software pro rozšíření funkcí vašeho Jappix. "
-"Některé jiné funkce můžete upravit, zejména z důvodů bezpečnosti, protože "
-"byly nastaveny na vychozí hodnoty."
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-"K tomu je nutný přístup na konzoli serveru a mít oprávnění root uživatele, "
-"Jappix bude pracovat i bez těchto dalších modulů, ale některé funkce budou "
-"nedostupné."
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-"Po ukončení nastavení Jappix vygeneruje cache soubory. Toto může nějaký čas "
-"trvat, počkejte až se zobrazí aplikace a do té doby nemačkejte jakoukoli "
-"klávesu."
-
-msgid "Thanks for using Jappix!"
-msgstr "Děkujeme za používání Jappix!"
-
-msgid "Next"
-msgstr "Další"
-
-msgid "Finish"
-msgstr "Dokončit"
-
-msgid "Check again"
-msgstr "Opakovat"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr "Do adresáře nelze zapisovat, nastavte oprávnění na %s."
-
-msgid "%s is installed on your system."
-msgstr "%s je nainstalován na vašem systému."
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s není na vašem systému nainstalován, nainstalujte %2s."
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "PHP maximální velikost nahrávaného souboru je dostatečná (%s)."
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-"PHP maximální velikost nahrávaného souboru není dostatečná (%1s), měli byste "
-"jí nastavit na %2s v %3s."
-
-msgid "Jappix manager"
-msgstr "Jappix správce"
-
-msgid "Manager access"
-msgstr "Přístup ke Správě"
-
-msgid "Statistics"
-msgstr "Statistika"
-
-msgid "Hosts"
-msgstr "Hostitelé"
-
-msgid "Design"
-msgstr "Vzhled"
-
-msgid "Repeat"
-msgstr "Opakovat"
-
-msgid "All"
-msgstr "Vše"
-
-msgid "Horizontal"
-msgstr "Horizontálně"
-
-msgid "Vertical"
-msgstr "Vertikálně"
-
-msgid "Center"
-msgstr "Střed"
-
-msgid "Left"
-msgstr "Vlevo"
-
-msgid "Right"
-msgstr "Vpravo"
-
-msgid "Top"
-msgstr "Nahoře"
-
-msgid "Bottom"
-msgstr "Dole"
-
-msgid "Adapt"
-msgstr "Přizpůsobit"
-
-msgid "Color"
-msgstr "Barva"
-
-msgid "Users"
-msgstr "Uživatelé"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-"Omezený přístup: pouze oprávnění uživatelé mohou spravovat tento Jappix uzel."
-
-msgid "Please use the form below to login to the administration panel."
-msgstr ""
-"Prosím požijte následující formulář pro přihlášení do administrátorského "
-"rozhraní."
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-"Pro zvýšení bezpečnosti je přihlášení časově omezeno a pokud zavřetel "
-"prohlížeč budete odhlášeni."
-
-msgid "Credentials"
-msgstr "Ověření"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "Jste odhlášeni, Nashledanou!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr "Jejda, nejste platný správce. Zkontrolujte, vaše přihlašovací údaje!"
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-"Základní statisticky o některých důležitých údajích zpracováváných Jappixem "
-"najdete níže."
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr "Změna konfiguraci vašeho Jabbix uzlu pomocí správce."
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-"Změnit nastavení XMPP hostitelů, který Jappix uzel využívá v tomto nástroji."
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-"Všechny soubory uložené na tomot Jappix uzlu můžete spravovat v tomto "
-"panelu: zvolte podadresář a můžete upravovat obsah."
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr "Jappix je zcela přizpůsobitelný: jeho vzhled si můžete zde upravit."
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr "Toto není povolený obrázek, prosím použijte PNG, GIF nebo JPG!"
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr "Toto není platný obrázek, použijte prosím PNG formát!"
-
-msgid "The image could not be received, would you mind retry?"
-msgstr "Obrázek nebyl přijat, přejete si akci zopakovat?"
-
-msgid "Your service logo has been successfully changed!"
-msgstr "Vaše logo služby bylo úspěšně změněno!"
-
-msgid "Your image was added to the list!"
-msgstr "Váš obrázek byl přidán do seznamu!"
-
-msgid "Changes saved!"
-msgstr "Změny byly uloženy!"
-
-msgid "Logo"
-msgstr "Logo"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-"Můžete si nastavit vlastní logo služby, které nahradí to výchozí. Dávejte "
-"při tom pozor na velikost a hlavní barvu každého loga!"
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr "Nahrát každé logo s doporučeným maximálním rozměrem v pixelech."
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-"Vaše logo musí být ve formátu PNG. Pokud je pole prázdné logo se nezmění."
-
-msgid "Remove this logo"
-msgstr "Odstranit toto logo"
-
-msgid "View this logo"
-msgstr "Zobrazit toto logo"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-"Na tomto Jappix uzlu lze zadat více správců. Také lze změnit heslo v tomto "
-"panelu."
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-"Aktualizuj Jappix uzel v tohoto panelu nebo zjisti, zda není dostupná nové "
-"verze. Informace o poslední verzi se také zobrazí (anglicky)."
-
-msgid "Access statistics"
-msgstr "Statistiky přístupů"
-
-msgid "Share statistics"
-msgstr "Statistiky sdílení"
-
-msgid "Other statistics"
-msgstr "Oatatní statistiky"
-
-msgid "January"
-msgstr "Leden"
-
-msgid "February"
-msgstr "Únor"
-
-msgid "March"
-msgstr "Březen"
-
-msgid "April"
-msgstr "Duben"
-
-msgid "May"
-msgstr "Květen"
-
-msgid "June"
-msgstr "Červen"
-
-msgid "July"
-msgstr "Červenec"
-
-msgid "August"
-msgstr "Srpen"
-
-msgid "September"
-msgstr "Září"
-
-msgid "October"
-msgstr "Říjen"
-
-msgid "November"
-msgstr "Listopad"
-
-msgid "December"
-msgstr "Prosinec"
-
-msgid "Monday"
-msgstr "Pondělí"
-
-msgid "Tuesday"
-msgstr "Úterý"
-
-msgid "Wednesday"
-msgstr "Středa"
-
-msgid "Thursday"
-msgstr "Čtvrtek"
-
-msgid "Friday"
-msgstr "Pátek"
-
-msgid "Saturday"
-msgstr "Sobota"
-
-msgid "Sunday"
-msgstr "Neděle"
-
-msgid "Total"
-msgstr "Celkem"
-
-msgid "Archives"
-msgstr "Archívy"
-
-msgid "Music"
-msgstr "Hudba"
-
-msgid "Backgrounds"
-msgstr "Pozadí"
-
-msgid "Share"
-msgstr "Sdílení"
-
-msgid "Background"
-msgstr "Pozadí"
-
-msgid "Notice"
-msgstr "Upozornění"
-
-msgid "Your design preferences have been saved!"
-msgstr "Nastavení vašeho vzhledu bylo uloženo."
-
-msgid "Please check your inputs: something is missing!"
-msgstr "Zkontrolujte údaje: nejsou kompletní!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-"V tomto panelu lze nastavit vzhled vašeho Jappix uzlu. Lze nastavit vlastní "
-"barvu či uložený obrázek. Nechte volnost své tvořivosti!"
-
-msgid "Use default background"
-msgstr "Použít výchozí pozadí"
-
-msgid "Use your own image"
-msgstr "Použít vlastní obrázek"
-
-msgid "Select a background to use and change the display options."
-msgstr "Zvolte pozadí a upravte nastavení zobrazení."
-
-msgid "Use your own color"
-msgstr "Použijte vlastní barvu"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr "Zadejte hexadecimálně barvu vašeho pozadí."
-
-msgid "Manage backgrounds"
-msgstr "Správa pozadí"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-"V tomto panelu lze přidat nové pozadí do seznamu. Prosím odešlete platný "
-"obrázek."
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr "Pokud chcete některé pozadí odstranit, použijte následující prohlížeč."
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-"Nastavení upozornění na výchozí stránce pro všechny uživatele, např. "
-"varování, důležité oznámení či raklama."
-
-msgid "Simple notice"
-msgstr "Jednoduché upozornění"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-"Toto upozornění umožňuje pouze jednoduchý text. Žádný kód není povolen."
-
-msgid "Advanced notice"
-msgstr "Rozšířené upozornění"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-"Vaše upozornění lze upravit vložením HTML, CSS a JavaScript, ale je třeba i "
-"kód stylu."
-
-msgid "Available updates"
-msgstr "Dostupné aktualizace"
-
-msgid "What's new?"
-msgstr "Co je nového?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr "Do adresáře k ukládání nelze zapisovat, prosím upravte oprávnění!"
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr "%1s může způsobit problémy s proxy, prosím zvyšte hodnotu %2s na %3s!"
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-"Právě používáte vývojovou verzi Jappix. Aktualizujte jí z repozitáře "
-"spůštěním %s."
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-"Je dostupná nová verze Jappix! Zjistěte co je v ní nového a proveďte update!"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr "Vaše verze je zastaralá. Aktualizujte ji nyní na %s kliknutím zde!"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"Vaše verze se zdá být aktuální, ale je možné zkontrolovat aktualizace ručně "
-"kliknutím zde."
-
-msgid "Check for updates"
-msgstr "Dostupné aktualizace"
-
-msgid "Update in progress"
-msgstr "Prohíhá aktualizace"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr ""
-"Jabbix byl aktualizován: právě používáte nejnovější verzi. Příjemnou zábavu!"
-
-msgid "The update has failed! Please try again later."
-msgstr "Aktualizace selhala! Prosím opakujte později."
-
-msgid "Downloading package..."
-msgstr "Stahuji balíček ..."
-
-msgid "Removing current Jappix system files..."
-msgstr "Odstraňování aktuálních systémových souborů Jappixe ..."
-
-msgid "Extracting package..."
-msgstr "Rozbaluji balíček ..."
-
-msgid "Regenerating storage folder tree..."
-msgstr "Obnovování stromu adresáře úložiště ..."
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix je aktualizován!"
-
-msgid "Aborted: socket error!"
-msgstr "Nezdařilo se: chyba soketu!"
-
-msgid "Aborted: buffer error!"
-msgstr "Nezdařilo se: chyba bufferu!"
-
-msgid "Aborted: everything is not writable!"
-msgstr "Nezdařilo se: nelze zapsat!"
-
-msgid "Aborted: could not extract the package!"
-msgstr "Nezdařilo se: nelze rozbalti balíček!"
-
-msgid "Visits"
-msgstr "Návštěvnost"
-
-msgid "Daily"
-msgstr "Denně"
-
-msgid "Weekly"
-msgstr "Týdně"
-
-msgid "Monthly"
-msgstr "Měsíčně"
-
-msgid "Yearly"
-msgstr "Ročně"
-
-msgid "Size"
-msgstr "Velikost"
-
-msgid "Clean everything"
-msgstr "Vše odstranit"
-
-msgid "Purge cache"
-msgstr "Vymazat keš"
-
-msgid "Purge logs"
-msgstr "Vymazat logy"
-
-msgid "Purge sent files"
-msgstr "Vyčistit odeslané soubory"
-
-msgid "Purge updates"
-msgstr "Vymazat aktualizace"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "Odkládací adresář, který chcete vymazat je nyní prázdny!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-"Udržujte váš uzel Jappix čistý a rychlý, pravidelně čistěte adkládací "
-"prostor!"
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-"Nahrajte vlastní hudbu (Ogg Vorbis, MP3 or WAV) a můžete jí poslouchat v "
-"Jappixu!"
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr "Soubor který chcete nahrát nesmí být větší než %s."
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-"Buďte v obraze o tom co vaši uživatelé ukládají na server a odstraňte "
-"nevhodný obsah v tomto panelu."
-
-msgid "Title"
-msgstr "Název"
-
-msgid "Artist"
-msgstr "Zpěvák/Zpěvačka"
-
-msgid "Album"
-msgstr "Album"
-
-msgid "File"
-msgstr "Soubor"
-
-msgid "Upload"
-msgstr "Nahrát"
-
-msgid "The folder is empty."
-msgstr "Adresář je prázdný."
-
-msgid "The music could not be received, please retry!"
-msgstr "Hudba nebyla přijata, prosím opakujte akci!"
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-"Toto není platný hudební soubor, prosím použijte Ogg Vorbis, MP3 nebo WAV!"
-
-msgid "Your music has been added!"
-msgstr "Vaše písnička byla přidána!"
-
-msgid "The selected elements have been removed."
-msgstr "Vybrané položky budou nyní odstraněny."
-
-msgid "You must select elements to remove!"
-msgstr "Musíte vybrat položky k odstranění!"
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-"Zde lze přidat uživatele, změnit heslo (použijte existující uživatelské "
-"jméno). Zvolte silné heslo!"
-
-msgid "Manage"
-msgstr "Spravovat"
-
-msgid "List"
-msgstr "Seznam"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-"S tímto nástrojem můžete odstranit uživatele. Mějte na paměti, že nelze "
-"odstranit uživatele, pokud zbývá jako poslední."
-
-msgid "The user has been added!"
-msgstr "Uživatel byl přidán!"
-
-msgid "The chosen users have been removed."
-msgstr "Zvolený uživatel byl odstraněn."
-
-msgid "You must select one or more users to be removed!"
-msgstr "Musíte zvolit jednoho nebo více uživatelu k odstranění!"
-
-msgid "Yesterday"
-msgstr "Včera"
-
-msgid "%s days ago"
-msgstr "Před %s dny"
-
-msgid "User currently active"
-msgstr "Uživatel je nyní aktivní"
-
-msgid "Last seen: %s"
-msgstr "Naposledy viděn: %s"
-
-msgid "Inactive since: %s"
-msgstr "Nečinný od: %s"
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr "Zdá se, že váš kamarád nedostal vaší zprávu(y)!"
-
-msgid "Static content server"
-msgstr "Statický obsah serveru"
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr "Toto je statický obsah serveru před %1s, “%2s”."
-
-msgid "User uploads server"
-msgstr "Uživate nahrávající na server"
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr "Toto je uživatel nahrávající na server pro %1s, “%2s”."
-
-msgid "Suggested friends"
-msgstr "Navrhovaní kamarádi"
-
-msgid "Check all"
-msgstr "Označit vše"
-
-msgid "Uncheck all"
-msgstr "Zrušit označení všeho"
-
-msgid "Choose"
-msgstr "Vybrat"
-
-msgid "List name"
-msgstr "Jméno seznamu"
-
-msgid "Allow"
-msgstr "Povolit"
-
-msgid "Deny"
-msgstr "Zakázat"
-
-msgid "Group"
-msgstr "Skupina"
-
-msgid "Subscription"
-msgstr "Oprávnění"
-
-msgid "Both"
-msgstr "Obojí"
-
-msgid "From"
-msgstr "Od"
-
-msgid "Everybody"
-msgstr "Všichni"
-
-msgid "Send messages"
-msgstr "Odeslat zprávu"
-
-msgid "Send queries"
-msgstr "Odeslat žádost"
-
-msgid "See my status"
-msgstr "Vidět můj status"
-
-msgid "Send his/her status"
-msgstr "Odeslat jemu/ji status"
-
-msgid "Everything"
-msgstr "Vše"
-
-msgid "Item"
-msgstr "Položka"
-
-msgid "Order"
-msgstr "Pořadí"
-
-msgid "Active for this session"
-msgstr "Aktivní v tomto sezení"
-
-msgid "Always active"
-msgstr "Stále aktivní"
-
-msgid "User directory"
-msgstr "Adresář uživatelů"
-
-msgid "Search a friend"
-msgstr "Najít kamaráda"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-"Požadovanou vlastnost nepodporuje buď příjemce nebo server, a proto nemůže "
-"být vykonána."
-
-msgid "Send him/her a message"
-msgstr "Odeslat jemu/jí zprávu"
-
-msgid "Start a chat with him/her"
-msgstr "Začít rozhovor s ním/ní"
-
-msgid "Available shortcuts:"
-msgstr "Dostupné klávesové zkratky:"
-
-msgid "%s removes the chat logs"
-msgstr "%s odstraní chat logy"
-
-msgid "%s joins a groupchat"
-msgstr "%s připojí skupinivý rozhovor"
-
-msgid "%s closes the chat"
-msgstr "%s uzavře rozhovor"
-
-msgid "%s shows the user profile"
-msgstr "%s zobrazí profil uživatele"
-
-msgid "%s sends a message to the room"
-msgstr "%s odešle zprávu do místnosti"
-
-msgid "%s changes your nickname"
-msgstr "%s změní vaší přezdívku"
-
-msgid "%s sends a message to someone in the room"
-msgstr "%s odešle zprávu někomu v místnosti"
-
-msgid "%s changes the room topic"
-msgstr "%s změní téma místnosti"
-
-msgid "%s kicks a user of the room"
-msgstr "%s vykáže uživatele z místnosti"
-
-msgid "%s bans a user of the room"
-msgstr "%s zakáže uživateli přístup do místnosti"
-
-msgid "%s invites someone to join the room"
-msgstr "%s zve někoho do místnosti"
-
-msgid "Public profile"
-msgstr "Veřejný profil"
-
-msgid "Your profile anywhere on the Web."
-msgstr "Váš profil kdekoliv na webu."
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-"%s je služba Jappix.com, která dělá váš veřejný XMPP profil. Je lehčí ho tak "
-"sdílet. Nepotřebujete ani účet XMPP k prohlížení vašeho sociálního kanálu, "
-"vaší aktuální polohy a vašich kontaktů."
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-"Dále je každý obrázek, který pošlete do vašeho sociálního kanálu, přidán do "
-"krásné obrázkové časové osy. Můžete se teď podívat na obrázky, které jste "
-"slíleli rok po roku."
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-"Svůj XMPP avatar můžete také využít na všech webových stránkách, blozích a "
-"fórech, která používáte. Když ho změníte na XMPP, nový avatar se objeví "
-"všude. To je ale geniální vylepšení!"
-
-msgid "Yay, let's create your public profile!"
-msgstr "Hurá, pojďme vytvořit váš veřejný profil!"
-
-msgid "Enable my public profile"
-msgstr "Povolit můj veřejný profil"
-
-msgid "Jappix for your phone"
-msgstr "Jappix pro váš telefon"
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr "Jedna telefonní aplikace pro zprávy, kanály, profily a mnoho dalšího!"
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-"Toto upozornění je jen pro informaci, že data, na které se odkazuje mohla "
-"být již odstraněna."
-
-msgid "You haven't provided any file to download"
-msgstr "Nezadali jste žádný soubor ke stažení"
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr "Nemůžete stahovat soubor, pokud nechcete poskytnout klíč"
-
-msgid "Woah this file isn't found, please double check"
-msgstr "Hej, tento soubor nebyl nalezen, zkontroluj to prosím ještě jednou"
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr "Vámi dodaný klíč nemá právo ke stažení tohoto souboru"
-
-msgid "Statistics are currently disabled in the settings."
-msgstr "Statistiky jsou v současnosti zakázány v nastavení."
-
-msgid "New event!"
-msgstr "Nová událost!"
-
-msgid "%s is typing..."
-msgstr "%s píše se..."
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr "Tento bezpečnostní kód je neplatný. Zkuste prosím jiný."
-
-msgid "The username you picked is not available. Please try another one."
-msgstr "Zvolené uživatelské jméno není dostupné. Zkuste si prosím vybrat jiné."
-
-msgid "There was an error registering your account. Please retry."
-msgstr "Během registrace došlo k chybě. Zkuste to prosím znovu."
-
-msgid "Username"
-msgstr "Uživatelské jméno"
-
-msgid "Enter password"
-msgstr "Zadat heslo"
-
-msgid "Once again..."
-msgstr "Ještě jednou..."
-
-msgid "Code"
-msgstr "Kód"
-
-msgid "Security code"
-msgstr "Bezpečnostní kód"
-
-msgid "Advertising space available!"
-msgstr "Reklamní plocha je volná!"
-
-msgid "Advertise here"
-msgstr "Inzerujte zde"
-
-msgid "Analytics (%s)"
-msgstr "Analýza (%s)"
-
-msgid "Track visits"
-msgstr "Sledovat návštěvy"
-
-msgid "Piwik URL"
-msgstr "Piwik URL adresa"
-
-msgid "Piwik tracking ID"
-msgstr "Piwik ID pro sledování"
-
-msgid "Advertising (%s)"
-msgstr "Reklama (%s)"
-
-msgid "Enable ads"
-msgstr "Povolit reklamy"
-
-msgid "Standard ads key"
-msgstr "Klíč pro standardní reklamy"
-
-msgid "Content ads key"
-msgstr "Klíč pro obsahové reklamy"
-
-msgid "AdSense client ID"
-msgstr "AdSense ID klienta"
-
-msgid "AdSense slot"
-msgstr "AdSense slot"
-
-msgid "Stop"
-msgstr "Zastavit"
-
-msgid "Mute"
-msgstr "Ztlumit"
-
-msgid "Unmute"
-msgstr "Povolit"
-
-msgid "Is calling you"
-msgstr "Vám volá"
-
-msgid "Initiating call"
-msgstr "Spojování hovoru"
-
-msgid "Connecting to call..."
-msgstr "Spojování hovoru..."
-
-msgid "Waiting..."
-msgstr "Čekám..."
-
-msgid "Ringing..."
-msgstr "Vyzvání..."
-
-msgid "Declined the call"
-msgstr "Odmítl hovor"
-
-msgid "Call error"
-msgstr "Chyba hovoru"
-
-msgid "Ended the call"
-msgstr "Ukončil hovor"
-
-msgid "Call ended"
-msgstr "Hovor ukončen"
-
-msgid "Call canceled"
-msgstr "Hovor zrušen"
-
-msgid "Canceled the call"
-msgstr "Zrušil hovor"
-
-msgid "Is already in a call"
-msgstr "Právě hovoří"
-
-msgid "Ending call..."
-msgstr "Ukončování hovoru..."
-
-msgid "Accept"
-msgstr "Přijmout"
-
-msgid "Decline"
-msgstr "Odmítnout"
-
-msgid "Okay"
-msgstr "Jasně"
-
-msgid "Retry"
-msgstr "Znovu"
-
-msgid "Audio Call"
-msgstr "Hlasový hovor"
-
-msgid "Video Call"
-msgstr "Video hovor"
diff --git a/i18n/de/LC_MESSAGES/main.mo b/i18n/de/LC_MESSAGES/main.mo
deleted file mode 100644
index 582aa025..00000000
--- a/i18n/de/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/de/LC_MESSAGES/main.po b/i18n/de/LC_MESSAGES/main.po
deleted file mode 100644
index a6c99d5f..00000000
--- a/i18n/de/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2431 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-# Christian Sturm <reezer@reezer.org>, 2012
-# Natureshadow <nik@naturalnet.de>, 2014
-# gruenerfuchs <gruener-fuchs@web.de>, 2013
-# palim <ueblesurmeli-transifex@yahoo.de>, 2012
-# gruenerfuchs <gruener-fuchs@web.de>, 2013
-# palim <ueblesurmeli-transifex@yahoo.de>, 2012
-# Valérian Saliou <valerian@valeriansaliou.name>, 2014
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:20+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: German (http://www.transifex.com/projects/p/jappix/language/"
-"de/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: de\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "default:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"Jappix benötigt JavaScript um zu funktionieren. Bitte erlaube die Ausführung "
-"von JavaScript."
-
-msgid "Social channel, chat and more."
-msgstr "Soziales Netzwerk, Chat und mehr."
-
-msgid "Create your public profile."
-msgstr "Erstelle dein öffentliches Profil."
-
-msgid "A mini-chat for your website."
-msgstr "Eine Mini-Chat für deine Website."
-
-msgid "Get Jappix, get support."
-msgstr "Hol' dir Jappix, hol' dir Unterstützung."
-
-msgid "Statistics around Jappix."
-msgstr "Statistiken rund um Jappix."
-
-msgid "Legal disclaimer for Jappix."
-msgstr "Haftungsausschluss zu Jappix."
-
-msgid "Download Jappix for free."
-msgstr "Jappix kostenlos herunterladen"
-
-msgid "Contribute to the Jappix code."
-msgstr "Leiste deinen Beitrag zum Jappix-Code."
-
-msgid "Jappix for your company."
-msgstr "Jappix für Ihr Unternehmen."
-
-msgid "Find a public Jappix node."
-msgstr "Finde einen Jappix-Knotenpunkt."
-
-msgid "Credits"
-msgstr "Dank"
-
-msgid "Association"
-msgstr "Vereinigung"
-
-msgid "Web agency"
-msgstr "Webagentur"
-
-msgid "Legal"
-msgstr "Rechtliches"
-
-msgid "Legal disclaimer"
-msgstr "Haftungsausschluss"
-
-msgid "Terms of use and legal"
-msgstr "Nutzungsbedingungen und Haftungsausschluss"
-
-msgid "Owner"
-msgstr "Besitzer"
-
-msgid "Node owner"
-msgstr "Knotenbesitzer"
-
-msgid "By using our service, you accept %s."
-msgstr "Durch die Nutzung unseres Dienstes stimmst du %s zu."
-
-msgid "our terms of use"
-msgstr "unsere Nutzungsbedingungen"
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Jappix wurde von einem Netzwerkproblem, einem Programmfehler oder einer "
-"ungültigen Anmeldung unterbrochen. Bitte überprüfe, ob du deine Daten "
-"richtig eingegeben hast. Entschuldige die Störung."
-
-msgid "The element list on this server could not be obtained!"
-msgstr "Die Elementliste konnte nicht vom Server geladen werden."
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"Dein Passwort wurde geändert. Du kannst dich jetzt mit deinen neuen "
-"Anmeldedaten anmelden."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "Dein XMPP-Konto wurde entfernt."
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "Du wurdest von Jappix abgemeldet."
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr ""
-"Der Chatraum, den du betreten hast, scheint nicht zu existieren. Du solltest "
-"ihn erstellen!"
-
-msgid "The groupchat has been removed."
-msgstr ""
-"Der Chatraum wurde gelöscht. Jetzt kann ihn jemand anders registrieren."
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "Der Benutzer, den du erreichen möchtest, ist nicht in diesem Raum."
-
-msgid "Please enter the group chat address to join."
-msgstr "Gib die Adresse des Gruppenchats ein, um beizutreten."
-
-msgid "Please enter your nickname to join %s."
-msgstr "Gib deinen Spitznamen ein, um %s beizutreten."
-
-msgid "This room (%s) is protected with a password."
-msgstr "Dieser Raum (%s) ist passwortgeschützt."
-
-msgid "Your browser is out of date!"
-msgstr "Dein Browser ist veraltet!"
-
-msgid "Last %s version is better!"
-msgstr "Die letzte Version von %s ist besser!"
-
-msgid "Login"
-msgstr "Anmelden"
-
-msgid "Register"
-msgstr "Registrieren"
-
-msgid "Here we go!"
-msgstr "Los geht’s!"
-
-msgid "Server"
-msgstr "Anbieter"
-
-msgid "Password"
-msgstr "Passwort"
-
-msgid "Remember me"
-msgstr "Anmeldung merken"
-
-msgid "This tool has been disabled!"
-msgstr "Dieses Werkzeug wurde deaktiviert, du kannst es nicht verwenden."
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr ""
-"Aufgrund eines Netzwerkproblems wurde die Verbindung getrennt. Was möchtest "
-"du jetzt tun?"
-
-msgid "Reconnect"
-msgstr "Wiederverbinden"
-
-msgid "Messages"
-msgstr "Nachrichten"
-
-msgid "Profile"
-msgstr "Profil"
-
-msgid "Options"
-msgstr "Optionen"
-
-msgid "Disconnect"
-msgstr "Abmelden"
-
-msgid "Filter"
-msgstr "Filter"
-
-msgid "Add a friend"
-msgstr "Freund hinzufügen"
-
-msgid "Your groupchats"
-msgstr "Deine Gruppengespräche"
-
-msgid "Manage your favorite groupchats"
-msgstr "Verwalte deine Lieblings-Gruppenchats"
-
-msgid "More stuff"
-msgstr "Weitere Funktionen"
-
-msgid "Show all friends"
-msgstr "Alle Freunde anzeigen"
-
-msgid "Only show connected friends"
-msgstr "Nur verfügbare Freunde anzeigen"
-
-msgid "Groupchat presence messages"
-msgstr "Statusnachrichten in Gruppenchats"
-
-msgid "No chat images auto-load"
-msgstr "Bilder in Chats nicht automatisch laden"
-
-msgid "Message archives"
-msgstr "Nachrichtenarchiv"
-
-msgid "Date"
-msgstr "Datum"
-
-msgid "A short message?"
-msgstr "Eine kurze Nachricht?"
-
-msgid "How are you?"
-msgstr "Wie geht es dir?"
-
-msgid "What are you doing?"
-msgstr "Was machst du gerade?"
-
-msgid "Join a chat"
-msgstr "Ein Gespräch betreten"
-
-msgid "Status"
-msgstr "Status"
-
-msgid "Available"
-msgstr "Verfügbar"
-
-msgid "Talkative"
-msgstr "Gesprächig"
-
-msgid "Away"
-msgstr "Abwesend"
-
-msgid "Not available"
-msgstr "Nicht verfügbar"
-
-msgid "Busy"
-msgstr "Beschäftigt"
-
-msgid "Offline"
-msgstr "Offline"
-
-msgid "Mood"
-msgstr "Laune"
-
-msgid "None"
-msgstr "Nichts"
-
-msgid "Crazy"
-msgstr "Verrückt"
-
-msgid "Excited"
-msgstr "Aufgeregt"
-
-msgid "Playful"
-msgstr "Verspielt"
-
-msgid "Happy"
-msgstr "Glücklich"
-
-msgid "Shocked"
-msgstr "Schockiert"
-
-msgid "Hot"
-msgstr "Heiß"
-
-msgid "Sad"
-msgstr "Traurig"
-
-msgid "Amorous"
-msgstr "Verliebt"
-
-msgid "Confident"
-msgstr "Zuversichtlich"
-
-msgid "Activity"
-msgstr "Aktivität"
-
-msgid "Chores"
-msgstr "Haushalt"
-
-msgid "Drinking"
-msgstr "Trinken"
-
-msgid "Eating"
-msgstr "Essen"
-
-msgid "Exercising"
-msgstr "Bewegung"
-
-msgid "Grooming"
-msgstr "Hygiene"
-
-msgid "Appointment"
-msgstr "Termin"
-
-msgid "Inactive"
-msgstr "Inaktiv"
-
-msgid "Relaxing"
-msgstr "Entspannt sich"
-
-msgid "Talking"
-msgstr "Unterhält sich"
-
-msgid "Traveling"
-msgstr "Auf Reise"
-
-msgid "Working"
-msgstr "Arbeiten"
-
-msgid "View profile"
-msgstr "Profil ansehen"
-
-msgid "This is a repeat from %s"
-msgstr "Dies ist eine Wiederholung von %s"
-
-msgid "Repeat this notice"
-msgstr "Wiederhole diese Nachricht"
-
-msgid "Remove this notice"
-msgstr "Entferne diese Nachricht"
-
-msgid "Your profile"
-msgstr "Dein Profil"
-
-msgid "Identity"
-msgstr "Identität"
-
-msgid "Profile image"
-msgstr "Profilbild"
-
-msgid "Others"
-msgstr "Anderes"
-
-msgid "Other"
-msgstr "Andere"
-
-msgid "Personal"
-msgstr "Persönlich"
-
-msgid "Complete name"
-msgstr "Vollständiger Name"
-
-msgid "Nickname"
-msgstr "Spitzname"
-
-msgid "First name"
-msgstr "Vorname"
-
-msgid "Last name"
-msgstr "Nachname"
-
-msgid "Date of birth"
-msgstr "Geburtstag"
-
-msgid "Contact"
-msgstr "Kontakt"
-
-msgid "E-mail"
-msgstr "E-Mail"
-
-msgid "Phone"
-msgstr "Telefon"
-
-msgid "Website"
-msgstr "Internetseite"
-
-msgid "Current"
-msgstr "Momentan"
-
-msgid "Delete"
-msgstr "Löschen"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr "Schade, du hast kein Profilbild angegeben."
-
-msgid "Address"
-msgstr "Adresse"
-
-msgid "Street"
-msgstr "Straße"
-
-msgid "City"
-msgstr "Stadt"
-
-msgid "Postal code"
-msgstr "Postleitzahl"
-
-msgid "Country"
-msgstr "Land"
-
-msgid "Biography"
-msgstr "Biografie"
-
-msgid "Important notice"
-msgstr "Wichtige Nachricht"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-"Sei vorsichtig, welche Informationen du in deinem Profil speicherst da sie "
-"allen (auch einigen, von denen du das nicht wünschst) zugänglich sind."
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr ""
-"Nicht alles ist privat bei XMPP. Das hier ist eines davon: dein öffentliches "
-"Profil (vCard)."
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"Es wird empfohlen ein Profilbild hochzuladen (maximal %s), z.b. ein Bild von "
-"dir damit deine Freunde dich leichter wieder erkennen können."
-
-msgid "Save"
-msgstr "Speichern"
-
-msgid "Cancel"
-msgstr "Abbrechen"
-
-msgid "Edit options"
-msgstr "Eigenschaften bearbeiten"
-
-msgid "Channel"
-msgstr "Kanal"
-
-msgid "Commands"
-msgstr "Befehle"
-
-msgid "Sounds"
-msgstr "Geräusche"
-
-msgid "Privacy"
-msgstr "Privatsphäre"
-
-msgid "Message archiving"
-msgstr "Nachrichtenarchivierung"
-
-msgid "Store an history of your chats"
-msgstr "Nachrichtenverlauf speichern"
-
-msgid "Geolocation"
-msgstr "Geodaten"
-
-msgid "Disabled"
-msgstr "Deaktiviert"
-
-msgid "Store all chats"
-msgstr "Alle Chats speichern"
-
-msgid "Store friend chats"
-msgstr "Chat von Freunden speichern"
-
-msgid "Remove all archives"
-msgstr "Alle Archive löschen"
-
-msgid "Empty"
-msgstr "Leer"
-
-msgid "Empty channel"
-msgstr "Leerer Kanal"
-
-msgid "Persistent"
-msgstr "Dauerhaft"
-
-msgid "Maximum notices"
-msgstr "Maximale Benachrichtigungen"
-
-msgid "Account"
-msgstr "Account"
-
-msgid "Change password"
-msgstr "Passwort ändern"
-
-msgid "Delete account"
-msgstr "Konto löschen"
-
-msgid "Old"
-msgstr "Alt"
-
-msgid "New (2 times)"
-msgstr "Neu (zwei Mal)"
-
-msgid "Suggested chatrooms"
-msgstr "Vorgeschlagene Räume"
-
-msgid "Skip"
-msgstr "Überspringen"
-
-msgid "Continue"
-msgstr "Fortsetzen"
-
-msgid "To"
-msgstr "An"
-
-msgid "Close"
-msgstr "Schließen"
-
-msgid "unknown"
-msgstr "Unbekannt"
-
-msgid "Unavailable"
-msgstr "Nicht erreichbar"
-
-msgid "is now"
-msgstr "ist jetzt"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Bitte warte während dein Avatar hochgeladen wird..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "Hier ist es! Ein wunderschönes, neues Profilbild."
-
-msgid "The image file is not supported or has a bad size."
-msgstr "Die Bilddatei hat ein falsches Format oder ist zu groß."
-
-msgid "Reply"
-msgstr "Antworten"
-
-msgid "Error"
-msgstr "Fehler"
-
-msgid "Click here to solve the error"
-msgstr "Klicke hier, um den Fehler zu beheben"
-
-msgid "You"
-msgstr "Du"
-
-msgid "Remove"
-msgstr "Entfernen"
-
-msgid "Rename"
-msgstr "Umbenennen"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Hey, ich bin %s. Ich möchte dich gerne als Freund hinzufügen."
-
-msgid "Smiley insertion"
-msgstr "Smilie einfügen"
-
-msgid "Change style"
-msgstr "Stil ändern"
-
-msgid "Text in bold"
-msgstr "Text fett"
-
-msgid "Text in italic"
-msgstr "Text kursiv"
-
-msgid "Underlined text"
-msgstr "Text unterstrichen"
-
-msgid "Send a file"
-msgstr "Eine Datei senden"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr ""
-"Wenn hochgeladen, werden deine Freunde dazu aufgefordert, die Datei "
-"herunterzuladen."
-
-msgid "Save chat"
-msgstr "Protokoll speichern"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"Klicke auf den folgenden Link, um das Chatprotokoll zu erhalten. Warte ein "
-"bisschen und klicke noch Mal, um die Datei zu bekommen."
-
-msgid "This chat is empty!"
-msgstr "Dieses Gespräch ist leer."
-
-msgid "Generate file!"
-msgstr "Datei generieren!"
-
-msgid "Download file!"
-msgstr "Datei herunterladen!"
-
-msgid "Clean current chat"
-msgstr "Aktuelles Gespräch leeren"
-
-msgid "Show user profile"
-msgstr "Nutzerprofil zeigen"
-
-msgid "Add this contact to your friends"
-msgstr "Kontakt zu Freunden hinzufügen"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Gruppengespräch zu Favoriten hinzufügen"
-
-msgid "All tabs"
-msgstr "Alle Tabs"
-
-msgid "Join groupchat"
-msgstr "Gruppenchat beitreten"
-
-msgid "Close this tab"
-msgstr "Diesen Tab schließen"
-
-msgid "no subject defined for this room."
-msgstr "Für diesen Raum ist kein Thema festgelegt."
-
-msgid "Administration panel for this room"
-msgstr "Verwaltung für diesen Raum"
-
-msgid "Moderators"
-msgstr "Moderatoren"
-
-msgid "Participants"
-msgstr "Teilnehmer"
-
-msgid "Visitors"
-msgstr "Besucher"
-
-msgid "Manage favorite rooms"
-msgstr "Favorisierte Räume verwalten"
-
-msgid "Change favorites"
-msgstr "Favoriten ändern"
-
-msgid "Search a room"
-msgstr "Raum suchen"
-
-msgid "Select a favorite"
-msgstr "Einen Favoriten wählen"
-
-msgid "Getting the name..."
-msgstr "Name wird geladen …"
-
-msgid "Gateway"
-msgstr "Gateway"
-
-msgid "Name"
-msgstr "Name"
-
-msgid "Room"
-msgstr "Raum"
-
-msgid "Add"
-msgstr "Hinzufügen"
-
-msgid "Edit"
-msgstr "Bearbeiten"
-
-msgid "Search a room on"
-msgstr "Einen Raum suchen in "
-
-msgid "No room found on this server."
-msgstr "Auf diesem Server wurden keine Räume gefunden."
-
-msgid "Service discovery"
-msgstr "Übersicht der Dienste"
-
-msgid "Server to query"
-msgstr "Server zur Abfrage"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "Es wurde kein Ergebnis gefunden."
-
-msgid "Accounts"
-msgstr "Konten"
-
-msgid "Authentications"
-msgstr "Genehmigung"
-
-msgid "Automation"
-msgstr "Automatisierung"
-
-msgid "Clients"
-msgstr "Klienten"
-
-msgid "Collaboration"
-msgstr "Zusammenarbeit"
-
-msgid "Components"
-msgstr "Komponenten"
-
-msgid "Rooms"
-msgstr "Räume"
-
-msgid "Directories"
-msgstr "Verzeichnisse"
-
-msgid "Gateways"
-msgstr "Gateways"
-
-msgid "News"
-msgstr "Neuigkeiten"
-
-msgid "Hierarchy"
-msgstr "Hierarchie"
-
-msgid "Proxies"
-msgstr "Proxys"
-
-msgid "Publication/Subscription"
-msgstr "Veröffentlichung / Abonnement"
-
-msgid "Storage"
-msgstr "Speicher"
-
-msgid "Service offline or broken"
-msgstr "Service offline oder abgestürzt"
-
-msgid "Your inbox"
-msgstr "Posteingang"
-
-msgid "Available actions"
-msgstr "Verfügbare Aktionen"
-
-msgid "Clean"
-msgstr "Säubern"
-
-msgid "New"
-msgstr "Neu"
-
-msgid "Received"
-msgstr "Erhalten"
-
-msgid "Subject"
-msgstr "Betreff"
-
-msgid "Content"
-msgstr "Inhalt"
-
-msgid "Send message"
-msgstr "Nachricht schicken"
-
-msgid "Your inbox is empty."
-msgstr "Dein Posteingang ist leer."
-
-msgid "MUC administration"
-msgstr "MUC-Administration"
-
-msgid "You administrate this room"
-msgstr "Du verwaltest diesen Raum."
-
-msgid "Enter new subject"
-msgstr "Neuer Betreff"
-
-msgid "Configuration"
-msgstr "Einstellungen"
-
-msgid "Authorizations"
-msgstr "Genehmigung"
-
-msgid "Member list"
-msgstr "Mitgliederliste"
-
-msgid "Owner list"
-msgstr "Besitzerliste"
-
-msgid "Administrator list"
-msgstr "Verwalterliste"
-
-msgid "Outcast list"
-msgstr "Gebannten-Liste"
-
-msgid "Add an input"
-msgstr "Eingabe hinzufügen"
-
-msgid "Destroy this MUC"
-msgstr "Diesen MUC schließen"
-
-msgid "Yes, let's do it!"
-msgstr "Ja, los geht's!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "Dein Freund tippt."
-
-msgid "Your friend is writing a message..."
-msgstr "Dein Freund schreibt eine Nachricht."
-
-msgid "Your friend stopped writing a message."
-msgstr "Dein Freund hat aufgehört, eine Nachricht zu schreiben."
-
-msgid "Your friend is doing something else."
-msgstr "Dein Freund tut etwas anderes."
-
-msgid "Your friend closed the chat."
-msgstr "Dein Freund hat die Unterhaltung beendet."
-
-msgid "Requesting this service..."
-msgstr "Dienst wird angefordert …"
-
-msgid "Loading"
-msgstr "Lädt …"
-
-msgid "changed his/her nickname to %s"
-msgstr "hat Seinen Spitznamen zu %s geändert"
-
-msgid "joined the chat room"
-msgstr "hat den Raum betreten"
-
-msgid "left the chat room"
-msgstr "hat den Raum verlassen"
-
-msgid "%s left"
-msgstr "%s hat den Raum verlassen"
-
-msgid "%s joined"
-msgstr "%s hat den Raum betreten"
-
-msgid "no status"
-msgstr "kein Status"
-
-msgid "has been kicked"
-msgstr "wurde rausgeschmissen."
-
-msgid "has been banned"
-msgstr "wurde verbannt."
-
-msgid "no reason"
-msgstr "kein Grund"
-
-msgid "Communicate with the entire world!"
-msgstr "Kommuniziere mit der ganzen Welt!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-"Jappix ist eine großartige soziale Platform, auf die du immer und überall "
-"Zugriff hast und auf der du kommunizieren kannst, mit wem du willst."
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-"Du kannst Kontakt aufnehmen mit den Millionen von Nutzern des XMPP-"
-"Netzwerkes. Tritt der Gemeinschaft bei und bleib frei!"
-
-msgid "Hi there!"
-msgstr "Hallo du!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr ""
-"Melde dich mit deinem bestehenden XMPP-Konto an oder erstelle gratis ein "
-"Neues!"
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-"Um dein Konto sicher zu halten, achte darauf, dass dein Passwort beim "
-"Registrieren und Anmelden geheim bleibt."
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-"Melde dich mit deinem XMPP-Konto an. Du kannst auch %s benutzen, um einem "
-"Gruppenchat beizutreten."
-
-msgid "Previous"
-msgstr "Vorhergehend"
-
-msgid "General"
-msgstr "Allgemeines"
-
-msgid "Advanced"
-msgstr "Erweitert"
-
-msgid "Resource"
-msgstr "Ressource"
-
-msgid "Priority"
-msgstr "Priorität"
-
-msgid "Low"
-msgstr "Niedrig"
-
-msgid "Medium"
-msgstr "Mittel"
-
-msgid "High"
-msgstr "Hoch"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-"Nenne den Chat, dem du beitreten willst und das Pseudonym, das du haben "
-"willst. Du kannst auch zurück zu %s."
-
-msgid "login page"
-msgstr "Anmeldeseite"
-
-msgid "Share this link with your friends:"
-msgstr "Teile diesen Verweis mit deinen Freunden:"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-"Registriere ein neues XMPP-Konto, um mit deinen Freunden dein eigenes "
-"soziales Netz zu bilden. Es ist so einfach!"
-
-msgid "Required"
-msgstr "Notwendig"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "Du wurdest registriert, deine XMPP-Adresse lautet:"
-
-msgid "Manager"
-msgstr "Verwalter"
-
-msgid "Encrypted"
-msgstr "Verschlüsselt"
-
-msgid "Unencrypted"
-msgstr "Unverschlüsselt"
-
-msgid "Where are you?"
-msgstr "Wo bist du?"
-
-msgid "What's up with you?"
-msgstr "Was gibt’s?"
-
-msgid "Type something you want to share with your friends..."
-msgstr "Schreibe etwas, um es mit deinen Freunden zu teilen..."
-
-msgid "Fetching the social channel..."
-msgstr "Sozialer Kanal wird abgerufen …"
-
-msgid "You are synchronized with your network."
-msgstr "Du bist mit deinen Netzwerken abgeglichen."
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "Nichts kann gesendet werden: Du kannst nur Nachrichten empfangen!"
-
-msgid "Media viewer"
-msgstr "Medienbibliothek"
-
-msgid "Browse"
-msgstr "Durchblättern"
-
-msgid "Command"
-msgstr "Befehl"
-
-msgid "Subscribe"
-msgstr "Abonnieren"
-
-msgid "Join"
-msgstr "Beitreten"
-
-msgid "Automatic"
-msgstr "Automatisch"
-
-msgid "Search"
-msgstr "Suchen"
-
-msgid "No result!"
-msgstr "Kein Ergebnis!"
-
-msgid "No notifications."
-msgstr "Keine Benachrichtigungen."
-
-msgid "would like to add you as a friend."
-msgstr "würde dich gerne als Freund hinzufügen."
-
-msgid "would like you to join this chatroom:"
-msgstr "würde gerne diesen Chatraum betreten."
-
-msgid "Do you accept?"
-msgstr "Akzeptieren?"
-
-msgid "Yes"
-msgstr "Ja"
-
-msgid "No"
-msgstr "Nein"
-
-msgid "would like to get authorization."
-msgstr "möchte bestätigt werden."
-
-msgid "would like to send you a file: “%s”."
-msgstr "würde dir gerne eine Datei senden: “%s”."
-
-msgid "has received a file exchange request: “%s”."
-msgstr "hat eine Anfrage zum Dateiaustausch empfangen: “%s”"
-
-msgid "has accepted to receive your file: “%s”."
-msgstr "ist damit einverstanden, deine Datei zu empfangen: “%s”."
-
-msgid "has rejected to receive your file: “%s”."
-msgstr "will deine Datei nicht empfangen: “%s”."
-
-msgid "could not receive your file: “%s”."
-msgstr "konnte deine Datei nicht empfangen: “%s”"
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr "Möchtest du die Freunde sehen, die %s dir empfiehlt?"
-
-msgid "commented an item you follow: “%s”."
-msgstr "hat ein Item, dem du folgst, kommentiert: »%s«."
-
-msgid "liked your post: “%s”."
-msgstr "mag deinen Post: “%s”."
-
-msgid "quoted you somewhere: “%s”."
-msgstr "hat dich zitiert: »%s«."
-
-msgid "published on your wall: “%s”."
-msgstr "hat auf deine Pinnwand gepostet: “%s”."
-
-msgid "tagged you in a photo (%s)."
-msgstr "hat dich in einem Foto markiert (%s)."
-
-msgid "tagged you in a video (%s)."
-msgstr "hat dich in einem Video markiert (%s)."
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-"hat dein Konto überprüft. Dein öffentliches Profil wird gleich verfügbar "
-"sein."
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr "hat dein öffentliches Profil entfernt. Wir werden dich vermissen!"
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-"hat die neuen Einstellungen für dein öffentliches Profil gespeichert. Sie "
-"werden in ein paar Minuten angewandt."
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-"konnte dein Konto nicht überprüfen, um dein öffentliches Profil zu erstellen "
-"oder zu aktualisieren. Prüfe deine Daten!"
-
-msgid "Open"
-msgstr "Öffnen"
-
-msgid "Show"
-msgstr "Zeigen"
-
-msgid "Hide"
-msgstr "Verstecken"
-
-msgid "Submit"
-msgstr "Senden"
-
-msgid "Client"
-msgstr "Client"
-
-msgid "System"
-msgstr "System"
-
-msgid "Local time"
-msgstr "Lokale Zeit"
-
-msgid "Comments"
-msgstr "Kommentare"
-
-msgid "User profile"
-msgstr "Benutzerprofil"
-
-msgid "See his/her position on the globe"
-msgstr "Position auf der Welt"
-
-msgid "Confirm"
-msgstr "Bestätigen"
-
-msgid "anonymous mode"
-msgstr "Anonymer Modus"
-
-msgid "Groups"
-msgstr "Gruppen"
-
-msgid "Unclassified"
-msgstr "Nicht eingeordnet"
-
-msgid "Authorize"
-msgstr "Genehmigen"
-
-msgid "Ask for authorization"
-msgstr "Frage nach Genehmigung"
-
-msgid "Unblock"
-msgstr "Freischalten"
-
-msgid "Prohibit"
-msgstr "Verbieten"
-
-msgid "Block"
-msgstr "Blockieren"
-
-msgid "Chat"
-msgstr "Chat"
-
-msgid "Groupchat"
-msgstr "Gruppenchat"
-
-msgid "Jappix Mobile"
-msgstr "Jappix unterwegs"
-
-msgid "Desktop"
-msgstr "Desktop"
-
-msgid "Mobile"
-msgstr "Unterwegs"
-
-msgid "Please wait..."
-msgstr "Bitte warten …"
-
-msgid "Please enable JavaScript"
-msgstr "Bitte JavaScript aktivieren"
-
-msgid "Show comments"
-msgstr "Zeige Kommentare"
-
-msgid "Loading comments..."
-msgstr "Lade Kommentare..."
-
-msgid "Could not get the comments!"
-msgstr "Konnte Kommentare nicht laden!"
-
-msgid "Comments locked!"
-msgstr "Kommentare sind gesperrt!"
-
-msgid "Type your comment here..."
-msgstr "Gebe dein Kommentar hier ein..."
-
-msgid "Your channel"
-msgstr "Dein Kanal"
-
-msgid "Channel of"
-msgstr "Kanal von"
-
-msgid "More notices..."
-msgstr "Mehr Nachrichten …"
-
-msgid "Attach a file"
-msgstr "Datei anhängen"
-
-msgid "Send"
-msgstr "Senden"
-
-msgid "Unattach the file"
-msgstr "Angehängte Datei löschen"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-"Beim Hochladen deiner Datei ist ein Fehler aufgetreten: Wahrscheinlich ist "
-"es zu groß (maximal %s) oder verboten!"
-
-msgid "Authorization failed"
-msgstr "Genehmigung fehlgeschlagen"
-
-msgid "Registration failed, please choose a different username"
-msgstr "Registrierung fehlgeschlagen. Bitte wähle einen anderen Benutzernamen."
-
-msgid "Service unavailable"
-msgstr "Dienst nicht erreichbar"
-
-msgid "Internal server error, try later"
-msgstr "Interner Serverfehler. Versuche es später noch Mal."
-
-msgid "Your form has been sent."
-msgstr "Das Formular wurde versendet."
-
-msgid "Application"
-msgstr "Anwendung"
-
-msgid "Media integration"
-msgstr "Medien Einbindung"
-
-msgid "Keep local chat archives"
-msgstr "Chatverläufe lokal speichern"
-
-msgid "XMPP links"
-msgstr "XMPP-Verweise"
-
-msgid "Open XMPP links with Jappix"
-msgstr "XMPP-Verweise mit Jappix öffnen"
-
-msgid "changed the subject to:"
-msgstr "hat das Thema geändert zu:"
-
-msgid "Welcome!"
-msgstr "Willkommen!"
-
-msgid "Friends"
-msgstr "Freunde"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr ""
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-"Bevor du beginnst, musst du noch einiges einstellen, nach Freunden suchen "
-"und dein Profil ausfüllen."
-
-msgid "Enable notification sounds"
-msgstr "Benachrichtigungsgeräusche einschalten"
-
-msgid "Share your position on the globe"
-msgstr "Deine Position freigeben"
-
-msgid "Offline friends"
-msgstr "Freunde (nicht verfügbar)"
-
-msgid "Don't hide offline friends"
-msgstr "Nicht verfügbare Freunde anzeigen"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-"Benutze dieses Werkzeug, um Freunde auf dem aktuellen Server zu finden, oder "
-"versuche es später."
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr "Gut gemacht! Jetzt kannst du Jappix mit deinen Freunden teilen!"
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-"Wenn du Speichern klickst, wird die Profilbearbeitung geöffnet. Fröhliches "
-"Netzwerken!"
-
-msgid "Share Jappix on %s"
-msgstr "Jappix über %s teilen"
-
-msgid "Follow Jappix topic on %s"
-msgstr "Jappix auf %s folgen"
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "Ich nutze Jappix, ein freies soziales Netzwerk. Ich bin %s!"
-
-msgid "Unknown name"
-msgstr "Unbekannter Name"
-
-msgid "Unknown country"
-msgstr "Unbekanntes Land"
-
-msgid "Click to enable"
-msgstr "Zum Einschalten klicken"
-
-msgid "Click to disable"
-msgstr "Zum Ausschalten klicken"
-
-msgid "Installation"
-msgstr "Installation"
-
-msgid "Jappix installation"
-msgstr "Jappix-Installation"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "Willkommen zur Jappix-Installation"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-"Dieses Tool wird dir helfen Jappix, die erste voll funktionstüchtige XMPP-"
-"basierte soziale Platform, schnell auf deinem Server zu installieren. Du "
-"brauchst dazu nichteinmal technisches Wissen."
-
-msgid "Installation Steps:"
-msgstr "Lass uns die Installationsschritte durchgehen."
-
-msgid "Welcome"
-msgstr "Willkommen"
-
-msgid "Storage configuration"
-msgstr "Speicher-Konfiguration"
-
-msgid "Administrator account"
-msgstr "Verwalter-Konto"
-
-msgid "Main configuration"
-msgstr "Haupteinstellungen"
-
-msgid "Hosts configuration"
-msgstr "Host-Einstellungen"
-
-msgid "Services installation"
-msgstr "Installation von Diensten"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-"Wenn die derzeitige Sprache nicht deine ist (%1s), kann Jappix deine "
-"sprechen %2s dies wird gespeichert werden."
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"Wenn du Hilfe bei der Jappix-Installation und -Konfiguration benötigst, "
-"kannst du unsere ganze Dokumentation verwenden:"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-"Es ist Zeit dein eigenes soziales Netzt zu bauen: Gehe zum nächsten Schritt!"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-"Jappix speichert persistente Daten (wie z.B. geteilte Dateien, "
-"Nachrichtenverläufe, deine eigene Musik und seine Konfiguration) in mehreren "
-"Speicherordnern."
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-"Jappix muss in diesem Verzeichnis schreiben können, um die "
-"Unterverzeichnisse anzulegen. Andernfalls musst du die die Rechte von %1s "
-"auf %2s setzen oder den Verzeichnisbesitzer zu %3s ändern (abhängig von "
-"deiner Konfiguration)."
-
-msgid "The folder is writable, you can continue!"
-msgstr "Der Ordner ist schreibbar, du kannst weitermachen!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-"Jappix bietet dir die Möglichkeit, deine Konfiguration einzustellen, neue "
-"Plugins zu installieren oder nach Updates zu suchen. Deshalb musst Du ein "
-"Admin-Account anlegen um auf die Verwaltung zugreifen zu können."
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-"Wenn Jappix installiert ist, klicke einfach auf den Manager-Link auf der "
-"Homepage um darauf zuzugreifen."
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr ""
-"Du hast etwas vergessen, oder die beiden Passwörter stimmen nicht überein."
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-"Jappix benötigt einige Werte um richtig zum Funktionieren. Bitte ändere die "
-"folgenden Eingaben (oder behalte die Vorgaben, welche für die meisten Leute "
-"passen)."
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-"Beachte, wenn ein obligatorischer Wert nicht gesetzt wird, so wird dieser "
-"automatisch mit dem vorgegebenen ersetzt. "
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-"Brauchst du Hilfe? Lies unsere Dokumentation, wie man dieses Formular "
-"ausfüllt!"
-
-msgid "User"
-msgstr "Benutzer"
-
-msgid "Service"
-msgstr "Dienst"
-
-msgid "Service name"
-msgstr "Name des Dienstes"
-
-msgid "Service description"
-msgstr "Dienst-Beschreibung"
-
-msgid "Owner name"
-msgstr "Name des Besitzers"
-
-msgid "Owner website"
-msgstr "Website des Besitzers"
-
-msgid "Connection"
-msgstr "Verbindung"
-
-msgid "Lock the host"
-msgstr "Sperre den Host"
-
-msgid "Anonymous mode"
-msgstr "Anonymer Modus"
-
-msgid "HTTP authentication"
-msgstr "HTTP-Anmeldun"
-
-msgid "Registration allowed"
-msgstr "Registrieren erlaubt"
-
-msgid "Use the built-in BOSH proxy"
-msgstr "Den eingebauten BOSH-Proxy benutzen"
-
-msgid "Manager link"
-msgstr "Manager Link"
-
-msgid "Groupchats to join"
-msgstr "Gruppenchats zum Beitreten"
-
-msgid "Suggest groupchats"
-msgstr "Räume vorschlagen"
-
-msgid "Encryption"
-msgstr "Verschlüsselung"
-
-msgid "HTTPS storage"
-msgstr "HTTPS-Speicher"
-
-msgid "Force HTTPS"
-msgstr "Sichere Verbindung erzwingen"
-
-msgid "Compression"
-msgstr "Komprimierung"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"Diese Seite hilft dir Jappix' Default-Hosts zu spezifizieren. Du kannst "
-"alles lassen wie es ist, wenn du den offiziellen Service-Host nutzen willst."
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"Vielleicht weißt du nicht, was ein BOSH-Server ist? Es ist ein Verbindung "
-"zwischen dem Jappix-Client und einem XMPP-Server, welcher aufgrund "
-"technischer Beschränkungen nötig ist."
-
-msgid "Main host"
-msgstr "Haupt-Host"
-
-msgid "Groupchat host"
-msgstr "Gruppenchat-Host"
-
-msgid "Pubsub host"
-msgstr "Pubsub Anbieter"
-
-msgid "Anonymous host"
-msgstr "Anonymer Host"
-
-msgid "Directory host"
-msgstr "Verzeichnis-Host"
-
-msgid "BOSH host"
-msgstr "BOSH-Host"
-
-msgid "WebSocket host"
-msgstr "WebSocket-Host"
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-"Du kannst einige extra Software auf deinem Server installieren um Jappix "
-"Funktionen zu erweitern. Manche müssen vielleicht aufgrund von "
-"Sicherheitsbeschränkungen modifiziert werden."
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-"Um dies durchzuführen, musst du Zugriff auf Konsole des Servers mit Root-"
-"Rechten haben. Dies ist fakultativ. Jappix wird ohne die Module "
-"funktionieren, aber einige Features werden nicht verfügbar sein."
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-"Nach dem Ende der Installation wird Jappix die Cache-Files erzeugen. Dies "
-"kann etwas dauern. Bitte warte, bis die Anwendung angezeigt wird und drücke "
-"keine währenddessen keine Taste."
-
-msgid "Thanks for using Jappix!"
-msgstr "Vielen Dank für die Benutzung von Jappix!"
-
-msgid "Next"
-msgstr "Weiter"
-
-msgid "Finish"
-msgstr "Beenden"
-
-msgid "Check again"
-msgstr "Nochmals überprüfen"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-"Der Ordner ist nicht beschreibbar. Setze die korrekten Berechtigungen für "
-"den Ordner %s"
-
-msgid "%s is installed on your system."
-msgstr "%s ist auf deinem System installiert."
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr ""
-"%1s ist nicht auf denem System installiert, du solltest %2s installieren."
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "Die maximale Größe für PHP-Uploads reicht aus (%s)."
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-"Die maximale Größe für PHP-Uploads reicht nicht aus (%1s), du solltest es "
-"für %2s in %3s bestimmen."
-
-msgid "Jappix manager"
-msgstr "Jappix-Verwaltung"
-
-msgid "Manager access"
-msgstr "Verwalter-Zugang"
-
-msgid "Statistics"
-msgstr "Statistiken"
-
-msgid "Hosts"
-msgstr "Hosts"
-
-msgid "Design"
-msgstr "Gestaltung"
-
-msgid "Repeat"
-msgstr "Wiederholen"
-
-msgid "All"
-msgstr "Alle"
-
-msgid "Horizontal"
-msgstr "Horizontal"
-
-msgid "Vertical"
-msgstr "Vertikal"
-
-msgid "Center"
-msgstr "Zentriert"
-
-msgid "Left"
-msgstr "Links"
-
-msgid "Right"
-msgstr "Rechts"
-
-msgid "Top"
-msgstr "Oben"
-
-msgid "Bottom"
-msgstr "Unten"
-
-msgid "Adapt"
-msgstr "Anpassen"
-
-msgid "Color"
-msgstr "Farbe"
-
-msgid "Users"
-msgstr "Benutzer"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-"Dies ist ein eingeschränkter Bereich: Nur genehmigte Benutzer können diese "
-"Jappix-Node verwalten."
-
-msgid "Please use the form below to login to the administration panel."
-msgstr "Benutze das Formular für die Anmeldung in den Verwaltungsbereich."
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-"Zur Sicherheit sind Sitzungen zeitbegrenzt. Wenn du den Browser schließt, "
-"wirst du ebenfalls abgemeldet."
-
-msgid "Credentials"
-msgstr "Anmeldedaten"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "Du wurdest abgemeldet. Auf Wiedersehen!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-"Du konntest nicht als Verwalter erkannt werden. Bitte prüfe deine Eingabe."
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-"Grundsätzliche Statistiken einiger wichtiger Dinge werden von Jappix "
-"erfasst. Du findest sie untenstehend."
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr "Ändere die Jappix Node-Konfiguration mit diesem Tool."
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-"Ändere die XMPP-Hosts, die dieser Jappix-Knoten benutzt, mit diesem Tool."
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-"Alle Datein dieses Jappix-Nodes können mit diesem Tool verwaltet werden: "
-"Bitte wähle ein Unterverzeichnis und editiere dessen Inhalt."
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr "Jappix ist voll anpassbar: Du kannst sein Design hier ändern."
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr "Ungültiges Bildformat! Benutze bitte PNG, GIF oder JPEG!"
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr "Dies ist kein gültiges Bild, bitte verwende das PNG format!"
-
-msgid "The image could not be received, would you mind retry?"
-msgstr "Das Bild konnte nicht übertragen werden. Bitte versuche es noch Mal."
-
-msgid "Your service logo has been successfully changed!"
-msgstr "Dein Service-Logo wurde erfolgreich geändert!"
-
-msgid "Your image was added to the list!"
-msgstr "Dein Bild wurde hinzugefügt!"
-
-msgid "Changes saved!"
-msgstr "Änderungen gespeichert!"
-
-msgid "Logo"
-msgstr "Logo"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-"Du kannst dein eigenes Service-Logo setzen, um das Standard-Logo zu "
-"ersetzen. Pass auf die Größe und Hauptfarbe jedes Logos auf!"
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr "Lade jedes Logo mit der empfohlenen maximalen Auflösung hoch."
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-"Das Format deines Logos muss PNG sein. Lasse ein Feld aus und das Logo wird "
-"nicht geändert."
-
-msgid "Remove this logo"
-msgstr "Entferne dieses Logo."
-
-msgid "View this logo"
-msgstr "Zeige dieses Logo"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-"Du kannst mehr als einen Administrator für diesen Jappix-Node festlegen. Du "
-"kannst mit diesem Tool auch ein Password ändern."
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-"Aktualisiere deinen Jappix-Node mit diesem Tool, oder schau nach, ob ein "
-"neues verfügbar ist. Informationen über die neuste Version werden auch (in "
-"englisch) angezeigt."
-
-msgid "Access statistics"
-msgstr "Zugriffs-Statistiken"
-
-msgid "Share statistics"
-msgstr "Freigabe-Statistiken"
-
-msgid "Other statistics"
-msgstr "Andere Statistiken"
-
-msgid "January"
-msgstr "Januar"
-
-msgid "February"
-msgstr "Februar"
-
-msgid "March"
-msgstr "März"
-
-msgid "April"
-msgstr "April"
-
-msgid "May"
-msgstr "Mai"
-
-msgid "June"
-msgstr "Juni"
-
-msgid "July"
-msgstr "Juli"
-
-msgid "August"
-msgstr "August"
-
-msgid "September"
-msgstr "September"
-
-msgid "October"
-msgstr "Oktober"
-
-msgid "November"
-msgstr "November"
-
-msgid "December"
-msgstr "Dezember"
-
-msgid "Monday"
-msgstr "Montag"
-
-msgid "Tuesday"
-msgstr "Dienstag"
-
-msgid "Wednesday"
-msgstr "Mittwoch"
-
-msgid "Thursday"
-msgstr "Donnerstag"
-
-msgid "Friday"
-msgstr "Freitag"
-
-msgid "Saturday"
-msgstr "Samstag"
-
-msgid "Sunday"
-msgstr "Sonntag"
-
-msgid "Total"
-msgstr "Gesamt"
-
-msgid "Archives"
-msgstr "Archiv"
-
-msgid "Music"
-msgstr "Musik"
-
-msgid "Backgrounds"
-msgstr "Hintergründe"
-
-msgid "Share"
-msgstr "Freigabe"
-
-msgid "Background"
-msgstr "Hintergrund"
-
-msgid "Notice"
-msgstr "Hinweis"
-
-msgid "Your design preferences have been saved!"
-msgstr "Deine Gestaltung wurde gespeichert."
-
-msgid "Please check your inputs: something is missing!"
-msgstr "Bitte kontrolliere deine Eingaben: Es fehlt etwas!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-"Ändere Dein Jappix-Node Hintergrund mit diesem Tool. Du kannst entweder eine "
-"eigene Farbe oder ein hochgeladenes Bild wählen. Sei kreativ!"
-
-msgid "Use default background"
-msgstr "Vorgegebenen Hintergrund verwenden"
-
-msgid "Use your own image"
-msgstr "Bild selber wählen"
-
-msgid "Select a background to use and change the display options."
-msgstr "Einen Hintergrund wählen und die Gestaltung ändern."
-
-msgid "Use your own color"
-msgstr "Farbe selber wählen"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr "Der hexadezimale Farbwert für den Hintergrund."
-
-msgid "Manage backgrounds"
-msgstr "Hintergründe verwalten"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-"Du kannst einen neuen Hintergrund hinzufügen. Bitte sende ein gültiges Bild."
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr ""
-"Wenn du einen Hintergrund entfernen möchtest, benutze den untenstehenden "
-"Browser."
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr "Einen Hinweis auf der Startseite für all deine Besucher erstellen."
-
-msgid "Simple notice"
-msgstr "Einfacher Hinweis"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-"Diesen Hinweis kannst du mit normalem Text nutzen, Code ist nicht erlaubt!"
-
-msgid "Advanced notice"
-msgstr "Erweiterter Hinweis"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-"Du kannst deine Ankündigung mit HTML, CSS und JavaScript bearbeiten. Aber du "
-"musst den Code selbst erstellen."
-
-msgid "Available updates"
-msgstr "Verfügbare Aktualisierungen"
-
-msgid "What's new?"
-msgstr "Was gibt’s Neues?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr "Deine Speicherordner haben keine Schreibrechte, bitte ändere das!"
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-"%1s kann Probleme mit dem Proxy verursachen. Bitte erhöhe den Wert von %2s "
-"auf %3s."
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-"Du benutzt eine Entwicklerversion von Jappix. Du kannst über unser "
-"Repository Updates beziehen wenn du %s ausführst."
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-"Eine neue Version von Jappix ist verfügbar! Schau’ dir die Neuerungen an und "
-"starte die Aktualisierung!"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr "Deine Version ist veraltet. Klicke hier, um auf %2 zu aktualisieren."
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"Deine Version schein aktuell zu sein, aber du kannst es manuell prüfen, "
-"indem du hier klickst."
-
-msgid "Check for updates"
-msgstr "Nach Updates suchen"
-
-msgid "Update in progress"
-msgstr "Wird aktualisiert"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr ""
-"Jappix wurde aktualisiert: Du benutzt nun die neueste Version. Viel Spaß!"
-
-msgid "The update has failed! Please try again later."
-msgstr "Die Aktualisierung schlug fehl! Bitte versuche es später noch ein Mal."
-
-msgid "Downloading package..."
-msgstr "Wird heruntergeladen …"
-
-msgid "Removing current Jappix system files..."
-msgstr "Aktuelle Jappix-Systemdateien werden entfernt …"
-
-msgid "Extracting package..."
-msgstr "Wird entpackt …"
-
-msgid "Regenerating storage folder tree..."
-msgstr "Verzeichnisbaum wird neu erstellt …"
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix ist jetzt aktuell!"
-
-msgid "Aborted: socket error!"
-msgstr "Abbruch: Socket-Fehler!"
-
-msgid "Aborted: buffer error!"
-msgstr "Abbruch: Puffer-Fehler!"
-
-msgid "Aborted: everything is not writable!"
-msgstr "Abbruch: Keine Schreibrechte!"
-
-msgid "Aborted: could not extract the package!"
-msgstr "Abbruch: Paket konnte nicht entpackt werden!"
-
-msgid "Visits"
-msgstr "Besuche"
-
-msgid "Daily"
-msgstr "Täglich"
-
-msgid "Weekly"
-msgstr "Wöchentlich"
-
-msgid "Monthly"
-msgstr "Monatlich"
-
-msgid "Yearly"
-msgstr "Jährlich"
-
-msgid "Size"
-msgstr "Größe"
-
-msgid "Clean everything"
-msgstr "Alles säubern"
-
-msgid "Purge cache"
-msgstr "Cache leeren"
-
-msgid "Purge logs"
-msgstr "Protokolle löschen"
-
-msgid "Purge sent files"
-msgstr "Die gesendeten Dateien leeren"
-
-msgid "Purge updates"
-msgstr "Aktualisierungen löschen"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "Das Speicher-Verzeichnis, das du säubern wolltest ist jetzt leer!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-"Halte deinen Jappix-Node frisch und schnell, säubere die Speicher-Ordner "
-"regelmäßig!"
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-"Lade deine Musik (Ogg Vorbis, MP3 oder WAV) hoch um sie in Jappix zu hören."
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr "Die hochzuladende Datei muss kleiner als %s sein."
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-"Bleib auf dem Laufenden, was Deine Nutzer auf deinem Server speichern und "
-"entferne ungewünschte Inhalte mit diesem Tool."
-
-msgid "Title"
-msgstr "Titel"
-
-msgid "Artist"
-msgstr "Künstler"
-
-msgid "Album"
-msgstr "Album"
-
-msgid "File"
-msgstr "Datei"
-
-msgid "Upload"
-msgstr "Hochladen"
-
-msgid "The folder is empty."
-msgstr "Dieser Ordner ist leer."
-
-msgid "The music could not be received, please retry!"
-msgstr ""
-"Deine Musik konnte nicht empfangen werden, bitte versuche es noch ein Mal."
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-"Das ist keine gültige Musikdatei, bitte nimm eine Ogg Vorbis, MP3 oder WAV!"
-
-msgid "Your music has been added!"
-msgstr "Deine Musik wurde hinzugefügt."
-
-msgid "The selected elements have been removed."
-msgstr "Die ausgewählten Elemente wurden entfernt."
-
-msgid "You must select elements to remove!"
-msgstr "Du musst Elemente auswählen um welche zu entfernen!"
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-"Füge neue Beutzer mit diesem Tool hinzu. Ändere ein Passwort (gebe einen "
-"existierenden Benutzernamen ein). Bitte benutze ein starkes Passwort!"
-
-msgid "Manage"
-msgstr "Verwalten"
-
-msgid "List"
-msgstr "Liste"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-"Entferne Benutzer mit diesem Tool. Beachte, dass du keinen Benutzer "
-"entfernen kannst, wenn er der einzig exisierende ist."
-
-msgid "The user has been added!"
-msgstr "Der Benutzer wurde hinzugefügt."
-
-msgid "The chosen users have been removed."
-msgstr "Die ausgewählten Benutzer wurden entfernt."
-
-msgid "You must select one or more users to be removed!"
-msgstr ""
-"Du musst einen oder mehrere Benutzer auswählen, die gelöscht werden sollen!"
-
-msgid "Yesterday"
-msgstr "Gestern"
-
-msgid "%s days ago"
-msgstr "Vor %s Tagen"
-
-msgid "User currently active"
-msgstr "Benutzer momentan aktiv"
-
-msgid "Last seen: %s"
-msgstr "Zuletzt gesehen: %s"
-
-msgid "Inactive since: %s"
-msgstr "Inaktiv seit: %s"
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr "Dein Freund hat deine Nachricht anscheinend nicht erhalten!"
-
-msgid "Static content server"
-msgstr "Statischer Inhaltsserver"
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr "Dies ist der statische Inhaltsserver für %1s, »%2s«."
-
-msgid "User uploads server"
-msgstr "Nutzer-Uploadserver"
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr "Dies ist der Nutzer-Uploadserver für %1s, »%2s«."
-
-msgid "Suggested friends"
-msgstr "Empfohlene Freunde"
-
-msgid "Check all"
-msgstr "Alle auswählen"
-
-msgid "Uncheck all"
-msgstr "Alle abwählen"
-
-msgid "Choose"
-msgstr "Wählen"
-
-msgid "List name"
-msgstr "Listenname"
-
-msgid "Allow"
-msgstr "Erlauben"
-
-msgid "Deny"
-msgstr "Ablehnen"
-
-msgid "Group"
-msgstr "Gruppe"
-
-msgid "Subscription"
-msgstr "Abonnement"
-
-msgid "Both"
-msgstr "Beides"
-
-msgid "From"
-msgstr "Von"
-
-msgid "Everybody"
-msgstr "Jeder"
-
-msgid "Send messages"
-msgstr "Nachrichten senden"
-
-msgid "Send queries"
-msgstr "Anfragen senden"
-
-msgid "See my status"
-msgstr "Status einsehen"
-
-msgid "Send his/her status"
-msgstr "Status senden"
-
-msgid "Everything"
-msgstr "Alles"
-
-msgid "Item"
-msgstr "Element"
-
-msgid "Order"
-msgstr "Reihenfolge"
-
-msgid "Active for this session"
-msgstr "Aktiv in dieser Sitzung"
-
-msgid "Always active"
-msgstr "Immer aktiv"
-
-msgid "User directory"
-msgstr "Nutzerverzeichnis"
-
-msgid "Search a friend"
-msgstr "Einen Freund suchen"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-"Die anfegorderte Funktion ist beim Server oder Empfänger nicht implementiert "
-"und kann daher nicht ausgeführt werden."
-
-msgid "Send him/her a message"
-msgstr "Sende ihm/ihr eine Nachricht"
-
-msgid "Start a chat with him/her"
-msgstr "Starte Chat mit ihm/ihr"
-
-msgid "Available shortcuts:"
-msgstr "Verfügbare Tastenkombinationen:"
-
-msgid "%s removes the chat logs"
-msgstr "%s entfernt die Chat-Protokolle"
-
-msgid "%s joins a groupchat"
-msgstr "%s tritt einem Gruppenchat bei"
-
-msgid "%s closes the chat"
-msgstr "%s schließt den Chat"
-
-msgid "%s shows the user profile"
-msgstr "%s zeigt das Benutzerprofil"
-
-msgid "%s sends a message to the room"
-msgstr "%s sendet eine Nachricht in den Raum"
-
-msgid "%s changes your nickname"
-msgstr "%s ändert deinen Nicknamen"
-
-msgid "%s sends a message to someone in the room"
-msgstr "%s sendet eine Nachricht zu jemandem im Raum"
-
-msgid "%s changes the room topic"
-msgstr "%s ändert das Thema des Raumes"
-
-msgid "%s kicks a user of the room"
-msgstr "%s schmeißt jemanden aus dem Raum"
-
-msgid "%s bans a user of the room"
-msgstr "%s bannt jemanden aus dem Raum"
-
-msgid "%s invites someone to join the room"
-msgstr "%s lädt jemanden ein, den Raum beizutreten"
-
-msgid "Public profile"
-msgstr "Öffentliches Profil."
-
-msgid "Your profile anywhere on the Web."
-msgstr "Dein Profil überall im Netz."
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-"%s ist ein Jappix.com-Service, der dein XMPP-Profil veröffentlicht. Damit "
-"ist es einfacher, Inhalte zu teilen. Es ist kein XMPP-Konto nötig, um deinen "
-"eigenen Kanal, deinen derzeitige Aufenthaltsort und deine Kontaktdetails "
-"einzusehen."
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-"Außerdem wird jedes Bild, dass du in deinem Kanal postest, deiner tollen "
-"Chronik hinzugefügt. Damit kannst du die Bilder chronologisch geordnet "
-"betrachten."
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-"Du kannst deinen XMPP-Avatar als Avatar für jede Website, jeden Blog und "
-"jedes Forum verwenden. Wenn du deine XMPP-Avatar änderst, änderst du deinen "
-"Avatar überall. Das erleichtert dir die Arbeit!"
-
-msgid "Yay, let's create your public profile!"
-msgstr "Jawoll, lass mich ein persönliches Profil erstellen!"
-
-msgid "Enable my public profile"
-msgstr "Öffentliches Profil freigeben"
-
-msgid "Jappix for your phone"
-msgstr "Jappix für dein Handy"
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr "Eine einzige Handy-App für Nachrichten, Kanäle, Profile und mehr!"
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-"Diese Benachrichtigung dient lediglich zu deiner Information. Möglicherweise "
-"sind die verlinkten Daten bereits nicht mehr verfügbar."
-
-msgid "You haven't provided any file to download"
-msgstr "Du hast keine Datei zum Download bereitgestellt"
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr "Du kannst eine Datei nicht ohne Zugangsschlüssel herunterladen"
-
-msgid "Woah this file isn't found, please double check"
-msgstr ""
-"Die Datei konnte leider nicht gefunden werden. Bitte überprüfe deine Angabe."
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr ""
-"Dein Zugangsschlüssel ermöglicht dir den Download dieser Datei leider nicht"
-
-msgid "Statistics are currently disabled in the settings."
-msgstr "Statistiken sind in den Einstellungen deaktiviert."
-
-msgid "New event!"
-msgstr "Neues Ereignis!"
-
-msgid "%s is typing..."
-msgstr "%s tippt..."
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-"Der eingegebene Sicherheitscode ist falsch. Bitte versuche einen anderen."
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-"Der gewählte Benutyername ist nicht verfügbar. Bitte versuche einen anderen."
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-"Bei der Registrierung ist ein Fehler aufgetreten. Bitte versuche es noch "
-"einmal."
-
-msgid "Username"
-msgstr "Benutzername"
-
-msgid "Enter password"
-msgstr "Passwort eingeben"
-
-msgid "Once again..."
-msgstr "Nochmal..."
-
-msgid "Code"
-msgstr "Code"
-
-msgid "Security code"
-msgstr "Sicherheitscode"
-
-msgid "Advertising space available!"
-msgstr "Werbefläche frei!"
-
-msgid "Advertise here"
-msgstr "Wirb hier"
-
-msgid "Analytics (%s)"
-msgstr "Analyse (%s)"
-
-msgid "Track visits"
-msgstr "Besuche verfolgen"
-
-msgid "Piwik URL"
-msgstr "Piwik-URL"
-
-msgid "Piwik tracking ID"
-msgstr "Piwik-Tracking-ID"
-
-msgid "Advertising (%s)"
-msgstr "Werbung (%s)"
-
-msgid "Enable ads"
-msgstr "Werbung aktivieren"
-
-msgid "Standard ads key"
-msgstr "Schlüssel für Standard-Werbung"
-
-msgid "Content ads key"
-msgstr "Schlüssel für Inhaltswerbung"
-
-msgid "AdSense client ID"
-msgstr "AdSense-Client-ID"
-
-msgid "AdSense slot"
-msgstr "AdSense-Slot"
-
-msgid "Stop"
-msgstr "Abbrechen"
-
-msgid "Mute"
-msgstr "Stumm"
-
-msgid "Unmute"
-msgstr "Nicht stumm"
-
-msgid "Is calling you"
-msgstr "Ruft dich an"
-
-msgid "Initiating call"
-msgstr "Anruf beginnen"
-
-msgid "Connecting to call..."
-msgstr "Mit Anruf verbinden..."
-
-msgid "Waiting..."
-msgstr "Warten..."
-
-msgid "Ringing..."
-msgstr "Klingeln..."
-
-msgid "Declined the call"
-msgstr "Hat den Anruf abgewiesen"
-
-msgid "Call error"
-msgstr "Fehler beim Anruf"
-
-msgid "Ended the call"
-msgstr "Hat den Anruf beendet"
-
-msgid "Call ended"
-msgstr "Anruf beendet"
-
-msgid "Call canceled"
-msgstr "Anruf abgebrochen"
-
-msgid "Canceled the call"
-msgstr "Hat den Anruf abgebrochen"
-
-msgid "Is already in a call"
-msgstr "Telefoniert bereits"
-
-msgid "Ending call..."
-msgstr "Anruf beenden..."
-
-msgid "Accept"
-msgstr "Annehmen"
-
-msgid "Decline"
-msgstr "Abweisen"
-
-msgid "Okay"
-msgstr "Okay"
-
-msgid "Retry"
-msgstr "Wiederholen"
-
-msgid "Audio Call"
-msgstr "Audio-Anruf"
-
-msgid "Video Call"
-msgstr "Video-Anruf"
diff --git a/i18n/en/LC_MESSAGES/main.pot b/i18n/en/LC_MESSAGES/main.pot
deleted file mode 100644
index a786e980..00000000
--- a/i18n/en/LC_MESSAGES/main.pot
+++ /dev/null
@@ -1,2197 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-
-# -------------------------------------------------
-
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-
-msgid ""
-msgstr ""
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-msgid "default:LTR"
-msgstr ""
-
-msgid "JavaScript is missing in your web browser, so that you will not be able to launch Jappix! Please fix this."
-msgstr ""
-
-msgid "Social channel, chat and more."
-msgstr ""
-
-msgid "Create your public profile."
-msgstr ""
-
-msgid "A mini-chat for your website."
-msgstr ""
-
-msgid "Get Jappix, get support."
-msgstr ""
-
-msgid "Statistics around Jappix."
-msgstr ""
-
-msgid "Legal disclaimer for Jappix."
-msgstr ""
-
-msgid "Download Jappix for free."
-msgstr ""
-
-msgid "Contribute to the Jappix code."
-msgstr ""
-
-msgid "Credits"
-msgstr ""
-
-msgid "Company"
-msgstr ""
-
-msgid "Legal"
-msgstr ""
-
-msgid "Legal disclaimer"
-msgstr ""
-
-msgid "Terms of use and legal"
-msgstr ""
-
-msgid "Owner"
-msgstr ""
-
-msgid "Node owner"
-msgstr ""
-
-msgid "By using our service, you accept %s."
-msgstr ""
-
-msgid "our terms of use"
-msgstr ""
-
-msgid "Jappix has been interrupted by a network issue, a bug or bad login (check that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-
-msgid "The element list on this server could not be obtained!"
-msgstr ""
-
-msgid "Your password has been changed, now you can connect to your account with your new login data."
-msgstr ""
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr ""
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr ""
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr ""
-
-msgid "The groupchat has been removed."
-msgstr ""
-
-msgid "The user that you want to reach is not present in the room."
-msgstr ""
-
-msgid "Please enter the group chat address to join."
-msgstr ""
-
-msgid "Please enter your nickname to join %s."
-msgstr ""
-
-msgid "This room (%s) is protected with a password."
-msgstr ""
-
-msgid "Your browser is out of date!"
-msgstr ""
-
-msgid "Last %s version is better!"
-msgstr ""
-
-msgid "Login"
-msgstr ""
-
-msgid "Register"
-msgstr ""
-
-msgid "Here we go!"
-msgstr ""
-
-msgid "Server"
-msgstr ""
-
-msgid "Password"
-msgstr ""
-
-msgid "Remember me"
-msgstr ""
-
-msgid "This tool has been disabled!"
-msgstr ""
-
-msgid "Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr ""
-
-msgid "Reconnect"
-msgstr ""
-
-msgid "Messages"
-msgstr ""
-
-msgid "Profile"
-msgstr ""
-
-msgid "Options"
-msgstr ""
-
-msgid "Disconnect"
-msgstr ""
-
-msgid "Filter"
-msgstr ""
-
-msgid "Add a friend"
-msgstr ""
-
-msgid "Your groupchats"
-msgstr ""
-
-msgid "Audio/video conference"
-msgstr ""
-
-msgid "Launch a group call"
-msgstr ""
-
-msgid "Audio conference"
-msgstr ""
-
-msgid "Video conference"
-msgstr ""
-
-msgid "Conference call"
-msgstr ""
-
-msgid "Manage your favorite groupchats"
-msgstr ""
-
-msgid "More stuff"
-msgstr ""
-
-msgid "Show all friends"
-msgstr ""
-
-msgid "Only show connected friends"
-msgstr ""
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr ""
-
-msgid "Date"
-msgstr ""
-
-msgid "A short message?"
-msgstr ""
-
-msgid "How are you?"
-msgstr ""
-
-msgid "What are you doing?"
-msgstr ""
-
-msgid "Join a chat"
-msgstr ""
-
-msgid "Status"
-msgstr ""
-
-msgid "Available"
-msgstr ""
-
-msgid "Talkative"
-msgstr ""
-
-msgid "Away"
-msgstr ""
-
-msgid "Not available"
-msgstr ""
-
-msgid "Busy"
-msgstr ""
-
-msgid "Offline"
-msgstr ""
-
-msgid "Mood"
-msgstr ""
-
-msgid "None"
-msgstr ""
-
-msgid "Crazy"
-msgstr ""
-
-msgid "Excited"
-msgstr ""
-
-msgid "Playful"
-msgstr ""
-
-msgid "Happy"
-msgstr ""
-
-msgid "Shocked"
-msgstr ""
-
-msgid "Hot"
-msgstr ""
-
-msgid "Sad"
-msgstr ""
-
-msgid "Amorous"
-msgstr ""
-
-msgid "Confident"
-msgstr ""
-
-msgid "Activity"
-msgstr ""
-
-msgid "Chores"
-msgstr ""
-
-msgid "Drinking"
-msgstr ""
-
-msgid "Eating"
-msgstr ""
-
-msgid "Exercising"
-msgstr ""
-
-msgid "Grooming"
-msgstr ""
-
-msgid "Appointment"
-msgstr ""
-
-msgid "Inactive"
-msgstr ""
-
-msgid "Relaxing"
-msgstr ""
-
-msgid "Talking"
-msgstr ""
-
-msgid "Traveling"
-msgstr ""
-
-msgid "Working"
-msgstr ""
-
-msgid "View profile"
-msgstr ""
-
-msgid "This is a repeat from %s"
-msgstr ""
-
-msgid "Repeat this notice"
-msgstr ""
-
-msgid "Remove this notice"
-msgstr ""
-
-msgid "Your profile"
-msgstr ""
-
-msgid "Identity"
-msgstr ""
-
-msgid "Profile image"
-msgstr ""
-
-msgid "Others"
-msgstr ""
-
-msgid "Other"
-msgstr ""
-
-msgid "Personal"
-msgstr ""
-
-msgid "Complete name"
-msgstr ""
-
-msgid "Nickname"
-msgstr ""
-
-msgid "First name"
-msgstr ""
-
-msgid "Last name"
-msgstr ""
-
-msgid "Date of birth"
-msgstr ""
-
-msgid "Contact"
-msgstr ""
-
-msgid "E-mail"
-msgstr ""
-
-msgid "Phone"
-msgstr ""
-
-msgid "Website"
-msgstr ""
-
-msgid "Current"
-msgstr ""
-
-msgid "Delete"
-msgstr ""
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr ""
-
-msgid "Address"
-msgstr ""
-
-msgid "Street"
-msgstr ""
-
-msgid "City"
-msgstr ""
-
-msgid "Postal code"
-msgstr ""
-
-msgid "Country"
-msgstr ""
-
-msgid "Biography"
-msgstr ""
-
-msgid "Important notice"
-msgstr ""
-
-msgid "Be careful with the information you store into your profile, because it might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-
-msgid "Not everything is private on XMPP; this is one of those things, your public profile (vCard)."
-msgstr ""
-
-msgid "It is strongly recommended to upload a profile image (%s maximum), like a picture of yourself, because that makes you easily recognizable by your friends."
-msgstr ""
-
-msgid "Save"
-msgstr ""
-
-msgid "Cancel"
-msgstr ""
-
-msgid "Edit options"
-msgstr ""
-
-msgid "Channel"
-msgstr ""
-
-msgid "Commands"
-msgstr ""
-
-msgid "Sounds"
-msgstr ""
-
-msgid "Privacy"
-msgstr ""
-
-msgid "Message archiving"
-msgstr ""
-
-msgid "Store an history of your chats"
-msgstr ""
-
-msgid "Geolocation"
-msgstr ""
-
-msgid "Disabled"
-msgstr ""
-
-msgid "Store all chats"
-msgstr ""
-
-msgid "Store friend chats"
-msgstr ""
-
-msgid "Remove all archives"
-msgstr ""
-
-msgid "Empty"
-msgstr ""
-
-msgid "Empty channel"
-msgstr ""
-
-msgid "Persistent"
-msgstr ""
-
-msgid "Maximum notices"
-msgstr ""
-
-msgid "Account"
-msgstr ""
-
-msgid "Change password"
-msgstr ""
-
-msgid "Delete account"
-msgstr ""
-
-msgid "Old"
-msgstr ""
-
-msgid "New (2 times)"
-msgstr ""
-
-msgid "Suggested chatrooms"
-msgstr ""
-
-msgid "Skip"
-msgstr ""
-
-msgid "Continue"
-msgstr ""
-
-msgid "To"
-msgstr ""
-
-msgid "Close"
-msgstr ""
-
-msgid "unknown"
-msgstr ""
-
-msgid "Unavailable"
-msgstr ""
-
-msgid "is now"
-msgstr ""
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr ""
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr ""
-
-msgid "The image file is not supported or has a bad size."
-msgstr ""
-
-msgid "Reply"
-msgstr ""
-
-msgid "Error"
-msgstr ""
-
-msgid "Click here to solve the error"
-msgstr ""
-
-msgid "You"
-msgstr ""
-
-msgid "Remove"
-msgstr ""
-
-msgid "Rename"
-msgstr ""
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr ""
-
-msgid "Smiley insertion"
-msgstr ""
-
-msgid "Change style"
-msgstr ""
-
-msgid "Text in bold"
-msgstr ""
-
-msgid "Text in italic"
-msgstr ""
-
-msgid "Underlined text"
-msgstr ""
-
-msgid "Send a file"
-msgstr ""
-
-msgid "Once uploaded, your friend will be prompted to download the file you sent."
-msgstr ""
-
-msgid "Save chat"
-msgstr ""
-
-msgid "Click on the following link to get the chat log, and wait. Then click again to get the file."
-msgstr ""
-
-msgid "This chat is empty!"
-msgstr ""
-
-msgid "Generate file!"
-msgstr ""
-
-msgid "Download file!"
-msgstr ""
-
-msgid "Clean current chat"
-msgstr ""
-
-msgid "Show user profile"
-msgstr ""
-
-msgid "Add this contact to your friends"
-msgstr ""
-
-msgid "Add this groupchat to your favorites"
-msgstr ""
-
-msgid "All tabs"
-msgstr ""
-
-msgid "Join groupchat"
-msgstr ""
-
-msgid "Close this tab"
-msgstr ""
-
-msgid "no subject defined for this room."
-msgstr ""
-
-msgid "Administration panel for this room"
-msgstr ""
-
-msgid "Moderators"
-msgstr ""
-
-msgid "Participants"
-msgstr ""
-
-msgid "Visitors"
-msgstr ""
-
-msgid "Manage favorite rooms"
-msgstr ""
-
-msgid "Change favorites"
-msgstr ""
-
-msgid "Search a room"
-msgstr ""
-
-msgid "Select a favorite"
-msgstr ""
-
-msgid "Getting the name..."
-msgstr ""
-
-msgid "Gateway"
-msgstr ""
-
-msgid "Name"
-msgstr ""
-
-msgid "Room"
-msgstr ""
-
-msgid "Add"
-msgstr ""
-
-msgid "Edit"
-msgstr ""
-
-msgid "Search a room on"
-msgstr ""
-
-msgid "No room found on this server."
-msgstr ""
-
-msgid "Service discovery"
-msgstr ""
-
-msgid "Server to query"
-msgstr ""
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr ""
-
-msgid "Accounts"
-msgstr ""
-
-msgid "Authentications"
-msgstr ""
-
-msgid "Automation"
-msgstr ""
-
-msgid "Clients"
-msgstr ""
-
-msgid "Collaboration"
-msgstr ""
-
-msgid "Components"
-msgstr ""
-
-msgid "Rooms"
-msgstr ""
-
-msgid "Directories"
-msgstr ""
-
-msgid "Gateways"
-msgstr ""
-
-msgid "News"
-msgstr ""
-
-msgid "Hierarchy"
-msgstr ""
-
-msgid "Proxies"
-msgstr ""
-
-msgid "Publication/Subscription"
-msgstr ""
-
-msgid "Storage"
-msgstr ""
-
-msgid "Service offline or broken"
-msgstr ""
-
-msgid "Your inbox"
-msgstr ""
-
-msgid "Available actions"
-msgstr ""
-
-msgid "Clean"
-msgstr ""
-
-msgid "New"
-msgstr ""
-
-msgid "Received"
-msgstr ""
-
-msgid "Subject"
-msgstr ""
-
-msgid "Content"
-msgstr ""
-
-msgid "Send message"
-msgstr ""
-
-msgid "Your inbox is empty."
-msgstr ""
-
-msgid "MUC administration"
-msgstr ""
-
-msgid "You administrate this room"
-msgstr ""
-
-msgid "Enter new subject"
-msgstr ""
-
-msgid "Configuration"
-msgstr ""
-
-msgid "Authorizations"
-msgstr ""
-
-msgid "Member list"
-msgstr ""
-
-msgid "Owner list"
-msgstr ""
-
-msgid "Administrator list"
-msgstr ""
-
-msgid "Outcast list"
-msgstr ""
-
-msgid "Add an input"
-msgstr ""
-
-msgid "Destroy this MUC"
-msgstr ""
-
-msgid "Yes, let's do it!"
-msgstr ""
-
-msgid "Your friend is paying attention to the conversation."
-msgstr ""
-
-msgid "Your friend is writing a message..."
-msgstr ""
-
-msgid "Your friend stopped writing a message."
-msgstr ""
-
-msgid "Your friend is doing something else."
-msgstr ""
-
-msgid "Your friend closed the chat."
-msgstr ""
-
-msgid "Requesting this service..."
-msgstr ""
-
-msgid "Loading"
-msgstr ""
-
-msgid "changed his/her nickname to %s"
-msgstr ""
-
-msgid "joined the chat room"
-msgstr ""
-
-msgid "left the chat room"
-msgstr ""
-
-msgid "%s left"
-msgstr ""
-
-msgid "%s joined"
-msgstr ""
-
-msgid "no status"
-msgstr ""
-
-msgid "has been kicked"
-msgstr ""
-
-msgid "has been banned"
-msgstr ""
-
-msgid "no reason"
-msgstr ""
-
-msgid "Communicate with the entire world!"
-msgstr ""
-
-msgid "Jappix is an open social platform, that let's you easily get or keep in touch with everyone."
-msgstr ""
-
-msgid "Join the millions of users who are currently using the XMPP Network (Google Talk, etc), don't stay out!"
-msgstr ""
-
-msgid "Hi there!"
-msgstr ""
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr ""
-
-msgid "For your account safety, when you login or register, make sure your password remains secret."
-msgstr ""
-
-msgid "Login to your existing XMPP account. You can also use the %s to join a groupchat."
-msgstr ""
-
-msgid "Previous"
-msgstr ""
-
-msgid "General"
-msgstr ""
-
-msgid "Advanced"
-msgstr ""
-
-msgid "Resource"
-msgstr ""
-
-msgid "Priority"
-msgstr ""
-
-msgid "Low"
-msgstr ""
-
-msgid "Medium"
-msgstr ""
-
-msgid "High"
-msgstr ""
-
-msgid "Enter the groupchat you want to join and the nick you want to have. You can also go back to the %s."
-msgstr ""
-
-msgid "login page"
-msgstr ""
-
-msgid "Share this link with your friends:"
-msgstr ""
-
-msgid "Register a new XMPP account to join your friends on your own social cloud. That's simple!"
-msgstr ""
-
-msgid "Required"
-msgstr ""
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr ""
-
-msgid "Manager"
-msgstr ""
-
-msgid "Encrypted"
-msgstr ""
-
-msgid "Unencrypted"
-msgstr ""
-
-msgid "Where are you?"
-msgstr ""
-
-msgid "What's up with you?"
-msgstr ""
-
-msgid "Type something you want to share with your friends..."
-msgstr ""
-
-msgid "Fetching the social channel..."
-msgstr ""
-
-msgid "You are synchronized with your network."
-msgstr ""
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr ""
-
-msgid "Media viewer"
-msgstr ""
-
-msgid "Browse"
-msgstr ""
-
-msgid "Command"
-msgstr ""
-
-msgid "Subscribe"
-msgstr ""
-
-msgid "Join"
-msgstr ""
-
-msgid "Automatic"
-msgstr ""
-
-msgid "Search"
-msgstr ""
-
-msgid "No result!"
-msgstr ""
-
-msgid "No notifications."
-msgstr ""
-
-msgid "would like to add you as a friend."
-msgstr ""
-
-msgid "would like you to join this chatroom:"
-msgstr ""
-
-msgid "Do you accept?"
-msgstr ""
-
-msgid "Yes"
-msgstr ""
-
-msgid "No"
-msgstr ""
-
-msgid "would like to get authorization."
-msgstr ""
-
-msgid "would like to send you a file: “%s”."
-msgstr ""
-
-msgid "has received a file exchange request: “%s”."
-msgstr ""
-
-msgid "has accepted to receive your file: “%s”."
-msgstr ""
-
-msgid "has rejected to receive your file: “%s”."
-msgstr ""
-
-msgid "could not receive your file: “%s”."
-msgstr ""
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr ""
-
-msgid "commented an item you follow: “%s”."
-msgstr ""
-
-msgid "liked your post: “%s”."
-msgstr ""
-
-msgid "quoted you somewhere: “%s”."
-msgstr ""
-
-msgid "published on your wall: “%s”."
-msgstr ""
-
-msgid "tagged you in a photo (%s)."
-msgstr ""
-
-msgid "tagged you in a video (%s)."
-msgstr ""
-
-msgid "validated your account. Your public profile will be available in a few moments."
-msgstr ""
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-
-msgid "has saved your new public profile settings. They will be applied in a few moments."
-msgstr ""
-
-msgid "could not validate your account to create or update your public profile. Check your credentials."
-msgstr ""
-
-msgid "Open"
-msgstr ""
-
-msgid "Show"
-msgstr ""
-
-msgid "Hide"
-msgstr ""
-
-msgid "Submit"
-msgstr ""
-
-msgid "Client"
-msgstr ""
-
-msgid "System"
-msgstr ""
-
-msgid "Local time"
-msgstr ""
-
-msgid "Comments"
-msgstr ""
-
-msgid "User profile"
-msgstr ""
-
-msgid "See his/her position on the globe"
-msgstr ""
-
-msgid "Confirm"
-msgstr ""
-
-msgid "anonymous mode"
-msgstr ""
-
-msgid "Groups"
-msgstr ""
-
-msgid "Unclassified"
-msgstr ""
-
-msgid "Authorize"
-msgstr ""
-
-msgid "Ask for authorization"
-msgstr ""
-
-msgid "Unblock"
-msgstr ""
-
-msgid "Prohibit"
-msgstr ""
-
-msgid "Block"
-msgstr ""
-
-msgid "Chat"
-msgstr ""
-
-msgid "Groupchat"
-msgstr ""
-
-msgid "Jappix Mobile"
-msgstr ""
-
-msgid "Desktop"
-msgstr ""
-
-msgid "Mobile"
-msgstr ""
-
-msgid "Please wait..."
-msgstr ""
-
-msgid "Please enable JavaScript"
-msgstr ""
-
-msgid "Show comments"
-msgstr ""
-
-msgid "Loading comments..."
-msgstr ""
-
-msgid "Could not get the comments!"
-msgstr ""
-
-msgid "Comments locked!"
-msgstr ""
-
-msgid "Type your comment here..."
-msgstr ""
-
-msgid "Your channel"
-msgstr ""
-
-msgid "Channel of"
-msgstr ""
-
-msgid "More notices..."
-msgstr ""
-
-msgid "Attach a file"
-msgstr ""
-
-msgid "Send"
-msgstr ""
-
-msgid "Unattach the file"
-msgstr ""
-
-msgid "An error occured while uploading your file: maybe it is too big (%s maximum) or forbidden!"
-msgstr ""
-
-msgid "Authorization failed"
-msgstr ""
-
-msgid "Registration failed, please choose a different username"
-msgstr ""
-
-msgid "Service unavailable"
-msgstr ""
-
-msgid "Internal server error, try later"
-msgstr ""
-
-msgid "Your form has been sent."
-msgstr ""
-
-msgid "Application"
-msgstr ""
-
-msgid "Media integration"
-msgstr ""
-
-msgid "Keep local chat archives"
-msgstr ""
-
-msgid "XMPP links"
-msgstr ""
-
-msgid "Open XMPP links with Jappix"
-msgstr ""
-
-msgid "changed the subject to:"
-msgstr ""
-
-msgid "Welcome!"
-msgstr ""
-
-msgid "Friends"
-msgstr ""
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr ""
-
-msgid "Before you start using it, you will have to change some settings, search for friends and complete your profile."
-msgstr ""
-
-msgid "Enable notification sounds"
-msgstr ""
-
-msgid "Share your position on the globe"
-msgstr ""
-
-msgid "Offline friends"
-msgstr ""
-
-msgid "Don't hide offline friends"
-msgstr ""
-
-msgid "Use this tool to find your friends on the server you are using right now, or add them later."
-msgstr ""
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr ""
-
-msgid "When you will press the save button, the profile editor will be opened. Happy socializing!"
-msgstr ""
-
-msgid "Share Jappix on %s"
-msgstr ""
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr ""
-
-msgid "Unknown name"
-msgstr ""
-
-msgid "Unknown country"
-msgstr ""
-
-msgid "Click to enable"
-msgstr ""
-
-msgid "Click to disable"
-msgstr ""
-
-msgid "Installation"
-msgstr ""
-
-msgid "Jappix installation"
-msgstr ""
-
-msgid "Welcome to the Jappix installation!"
-msgstr ""
-
-msgid "This tool will help you installing Jappix, the first full-featured XMPP-based social platform, on your server with ease."
-msgstr ""
-
-msgid "Installation Steps:"
-msgstr ""
-
-msgid "Welcome"
-msgstr ""
-
-msgid "Storage configuration"
-msgstr ""
-
-msgid "Administrator account"
-msgstr ""
-
-msgid "Main configuration"
-msgstr ""
-
-msgid "Hosts configuration"
-msgstr ""
-
-msgid "Services installation"
-msgstr ""
-
-msgid "If the current language does not match yours (%1s), you can make Jappix speak %2s it will be saved."
-msgstr ""
-
-msgid "If you want to get some help about the Jappix installation and configuration, you can use our whole documentation, available at:"
-msgstr ""
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-
-msgid "Jappix stores persistent data (such as shared files, chat logs, your own music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid "Jappix must be able to write in this folder to create its sub-directories. If not, you must set the rights of %1s to %2s or change the folder owner to %3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr ""
-
-msgid "Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager."
-msgstr ""
-
-msgid "When Jappix will be installed, just click on the manager link on the home page to access it."
-msgstr ""
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr ""
-
-msgid "Jappix needs that you specify some values to work. Please correct the following inputs (or keep the default values, which are sufficient for most people)."
-msgstr ""
-
-msgid "Note that if you don't specify a value which is compulsory, it will be automatically completed with the default one."
-msgstr ""
-
-msgid "Need help? You'd better read our documentation page about how to fill this form!"
-msgstr ""
-
-msgid "User"
-msgstr ""
-
-msgid "Service"
-msgstr ""
-
-msgid "Service name"
-msgstr ""
-
-msgid "Service description"
-msgstr ""
-
-msgid "Owner name"
-msgstr ""
-
-msgid "Owner website"
-msgstr ""
-
-msgid "Connection"
-msgstr ""
-
-msgid "Lock the host"
-msgstr ""
-
-msgid "Anonymous mode"
-msgstr ""
-
-msgid "HTTP authentication"
-msgstr ""
-
-msgid "Registration allowed"
-msgstr ""
-
-msgid "Use the built-in BOSH proxy"
-msgstr ""
-
-msgid "Manager link"
-msgstr ""
-
-msgid "Groupchats to join"
-msgstr ""
-
-msgid "Suggest groupchats"
-msgstr ""
-
-msgid "Encryption"
-msgstr ""
-
-msgid "HTTPS storage"
-msgstr ""
-
-msgid "Force HTTPS"
-msgstr ""
-
-msgid "Compression"
-msgstr ""
-
-msgid "Cache assets"
-msgstr ""
-
-msgid "This page helps you specify the default hosts Jappix will connect to. You can leave it as it is and continue if you want to use the official service hosts."
-msgstr ""
-
-msgid "Maybe you don't know what a BOSH server is? In fact, this is a relay between a Jappix client and a XMPP server, which is necessary because of technical limitations."
-msgstr ""
-
-msgid "Main host"
-msgstr ""
-
-msgid "Groupchat host"
-msgstr ""
-
-msgid "Pubsub host"
-msgstr ""
-
-msgid "Anonymous host"
-msgstr ""
-
-msgid "Directory host"
-msgstr ""
-
-msgid "BOSH host"
-msgstr ""
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid "You can install some extra softwares on your server, to extend your Jappix features. Some others might be modified, because of security restrictions which are set by default."
-msgstr ""
-
-msgid "To perform this, you must be able to access your server's shell and be logged in as root. Remember this is facultative, Jappix will work without these modules, but some of its features will be unavailable."
-msgstr ""
-
-msgid "After you finished the setup, Jappix will generate the cache files. It might be slow, just wait until the application is displayed and do not press any button."
-msgstr ""
-
-msgid "Thanks for using Jappix!"
-msgstr ""
-
-msgid "Next"
-msgstr ""
-
-msgid "Finish"
-msgstr ""
-
-msgid "Check again"
-msgstr ""
-
-msgid "The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-
-msgid "%s is installed on your system."
-msgstr ""
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr ""
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr ""
-
-msgid "PHP maximum upload size is not sufficient (%1s), you should define it to %2s in %3s."
-msgstr ""
-
-msgid "Jappix manager"
-msgstr ""
-
-msgid "Manager access"
-msgstr ""
-
-msgid "Statistics"
-msgstr ""
-
-msgid "Hosts"
-msgstr ""
-
-msgid "Design"
-msgstr ""
-
-msgid "Repeat"
-msgstr ""
-
-msgid "All"
-msgstr ""
-
-msgid "Horizontal"
-msgstr ""
-
-msgid "Vertical"
-msgstr ""
-
-msgid "Center"
-msgstr ""
-
-msgid "Left"
-msgstr ""
-
-msgid "Right"
-msgstr ""
-
-msgid "Top"
-msgstr ""
-
-msgid "Bottom"
-msgstr ""
-
-msgid "Adapt"
-msgstr ""
-
-msgid "Color"
-msgstr ""
-
-msgid "Users"
-msgstr ""
-
-msgid "This is a restricted area: only the authorized users can manage this Jappix node."
-msgstr ""
-
-msgid "Please use the form below to login to the administration panel."
-msgstr ""
-
-msgid "To improve security, sessions are limited in time and when your browser will be closed, you will be logged out."
-msgstr ""
-
-msgid "Credentials"
-msgstr ""
-
-msgid "You have been logged out. Goodbye!"
-msgstr ""
-
-msgid "Oops, you could not be recognized as a valid administrator. Check your credentials!"
-msgstr ""
-
-msgid "Basic statistics are processed by Jappix about some important things, you can find them below."
-msgstr ""
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr ""
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-
-msgid "All this Jappix node stored files can be managed with this tool: please select a sub-folder and start editing its content!"
-msgstr ""
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr ""
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr ""
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr ""
-
-msgid "The image could not be received, would you mind retry?"
-msgstr ""
-
-msgid "Your service logo has been successfully changed!"
-msgstr ""
-
-msgid "Your image was added to the list!"
-msgstr ""
-
-msgid "Changes saved!"
-msgstr ""
-
-msgid "Logo"
-msgstr ""
-
-msgid "You can set your own service logo to replace the default one. Take care of the size and the main color of each logo!"
-msgstr ""
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr ""
-
-msgid "Your logo format must be PNG. Leave a field empty and the logo will not be changed."
-msgstr ""
-
-msgid "Remove this logo"
-msgstr ""
-
-msgid "View this logo"
-msgstr ""
-
-msgid "You can define more than one administrator for this Jappix node. You can also change a password with this tool."
-msgstr ""
-
-msgid "Update your Jappix node with this tool, or check if a new one is available. Informations about the latest version are also displayed (in english)."
-msgstr ""
-
-msgid "Access statistics"
-msgstr ""
-
-msgid "Share statistics"
-msgstr ""
-
-msgid "Other statistics"
-msgstr ""
-
-msgid "January"
-msgstr ""
-
-msgid "February"
-msgstr ""
-
-msgid "March"
-msgstr ""
-
-msgid "April"
-msgstr ""
-
-msgid "May"
-msgstr ""
-
-msgid "June"
-msgstr ""
-
-msgid "July"
-msgstr ""
-
-msgid "August"
-msgstr ""
-
-msgid "September"
-msgstr ""
-
-msgid "October"
-msgstr ""
-
-msgid "November"
-msgstr ""
-
-msgid "December"
-msgstr ""
-
-msgid "Monday"
-msgstr ""
-
-msgid "Tuesday"
-msgstr ""
-
-msgid "Wednesday"
-msgstr ""
-
-msgid "Thursday"
-msgstr ""
-
-msgid "Friday"
-msgstr ""
-
-msgid "Saturday"
-msgstr ""
-
-msgid "Sunday"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Archives"
-msgstr ""
-
-msgid "Music"
-msgstr ""
-
-msgid "Backgrounds"
-msgstr ""
-
-msgid "Share"
-msgstr ""
-
-msgid "Background"
-msgstr ""
-
-msgid "Notice"
-msgstr ""
-
-msgid "Your design preferences have been saved!"
-msgstr ""
-
-msgid "Please check your inputs: something is missing!"
-msgstr ""
-
-msgid "Change your Jappix node background with this tool. You can either set a custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-
-msgid "Use default background"
-msgstr ""
-
-msgid "Use your own image"
-msgstr ""
-
-msgid "Select a background to use and change the display options."
-msgstr ""
-
-msgid "Use your own color"
-msgstr ""
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr ""
-
-msgid "Manage backgrounds"
-msgstr ""
-
-msgid "You can add a new background to the list with this tool. Please send a valid image."
-msgstr ""
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr ""
-
-msgid "Define a homepage notice for all your users, such as a warn, an important message or an advert with this tool."
-msgstr ""
-
-msgid "Simple notice"
-msgstr ""
-
-msgid "This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-
-msgid "Advanced notice"
-msgstr ""
-
-msgid "You can customize your notice with embedded HTML, CSS and JavaScript, but you need to code the style."
-msgstr ""
-
-msgid "Available updates"
-msgstr ""
-
-msgid "What's new?"
-msgstr ""
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr ""
-
-msgid "%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-
-msgid "You are using a development version of Jappix. Update it through our repository by executing: %s."
-msgstr ""
-
-msgid "A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr ""
-
-msgid "Your version seems to be up to date, but you can check updates manually by clicking here."
-msgstr ""
-
-msgid "Check for updates"
-msgstr ""
-
-msgid "Update in progress"
-msgstr ""
-
-msgid "Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr ""
-
-msgid "The update has failed! Please try again later."
-msgstr ""
-
-msgid "Downloading package..."
-msgstr ""
-
-msgid "Removing current Jappix system files..."
-msgstr ""
-
-msgid "Extracting package..."
-msgstr ""
-
-msgid "Regenerating storage folder tree..."
-msgstr ""
-
-msgid "Jappix is now up to date!"
-msgstr ""
-
-msgid "Aborted: socket error!"
-msgstr ""
-
-msgid "Aborted: buffer error!"
-msgstr ""
-
-msgid "Aborted: everything is not writable!"
-msgstr ""
-
-msgid "Aborted: could not extract the package!"
-msgstr ""
-
-msgid "Visits"
-msgstr ""
-
-msgid "Daily"
-msgstr ""
-
-msgid "Weekly"
-msgstr ""
-
-msgid "Monthly"
-msgstr ""
-
-msgid "Yearly"
-msgstr ""
-
-msgid "Size"
-msgstr ""
-
-msgid "Clean everything"
-msgstr ""
-
-msgid "Purge cache"
-msgstr ""
-
-msgid "Purge logs"
-msgstr ""
-
-msgid "Purge sent files"
-msgstr ""
-
-msgid "Purge updates"
-msgstr ""
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr ""
-
-msgid "Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-
-msgid "Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in Jappix!"
-msgstr ""
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr ""
-
-msgid "You can check what your users store on your server and remove undesired content with this tool."
-msgstr ""
-
-msgid "Title"
-msgstr ""
-
-msgid "Artist"
-msgstr ""
-
-msgid "Album"
-msgstr ""
-
-msgid "File"
-msgstr ""
-
-msgid "Upload"
-msgstr ""
-
-msgid "The folder is empty."
-msgstr ""
-
-msgid "The music could not be received, please retry!"
-msgstr ""
-
-msgid "This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-
-msgid "Your music has been added!"
-msgstr ""
-
-msgid "The selected elements have been removed."
-msgstr ""
-
-msgid "You must select elements to remove!"
-msgstr ""
-
-msgid "Add a new user with this tool, or change a password (type an existing username). Please submit a strong password!"
-msgstr ""
-
-msgid "Manage"
-msgstr ""
-
-msgid "List"
-msgstr ""
-
-msgid "Remove users with this tool. Note that you cannot remove a user if he is the only one remaining."
-msgstr ""
-
-msgid "The user has been added!"
-msgstr ""
-
-msgid "The chosen users have been removed."
-msgstr ""
-
-msgid "You must select one or more users to be removed!"
-msgstr ""
-
-msgid "Yesterday"
-msgstr ""
-
-msgid "%s days ago"
-msgstr ""
-
-msgid "User currently active"
-msgstr ""
-
-msgid "Last seen: %s"
-msgstr ""
-
-msgid "Inactive since: %s"
-msgstr ""
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr ""
-
-msgid "Static content server"
-msgstr ""
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr ""
-
-msgid "User uploads server"
-msgstr ""
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr ""
-
-msgid "Suggested friends"
-msgstr ""
-
-msgid "Check all"
-msgstr ""
-
-msgid "Uncheck all"
-msgstr ""
-
-msgid "Choose"
-msgstr ""
-
-msgid "List name"
-msgstr ""
-
-msgid "Allow"
-msgstr ""
-
-msgid "Deny"
-msgstr ""
-
-msgid "Group"
-msgstr ""
-
-msgid "Subscription"
-msgstr ""
-
-msgid "Both"
-msgstr ""
-
-msgid "From"
-msgstr ""
-
-msgid "Everybody"
-msgstr ""
-
-msgid "Send messages"
-msgstr ""
-
-msgid "Send queries"
-msgstr ""
-
-msgid "See my status"
-msgstr ""
-
-msgid "Send his/her status"
-msgstr ""
-
-msgid "Everything"
-msgstr ""
-
-msgid "Item"
-msgstr ""
-
-msgid "Order"
-msgstr ""
-
-msgid "Active for this session"
-msgstr ""
-
-msgid "Always active"
-msgstr ""
-
-msgid "User directory"
-msgstr ""
-
-msgid "Search a friend"
-msgstr ""
-
-msgid "The feature requested is not implemented by the recipient or server and therefore cannot be processed."
-msgstr ""
-
-msgid "Send him/her a message"
-msgstr ""
-
-msgid "Start a chat with him/her"
-msgstr ""
-
-msgid "Available shortcuts:"
-msgstr ""
-
-msgid "%s removes the chat logs"
-msgstr ""
-
-msgid "%s joins a groupchat"
-msgstr ""
-
-msgid "%s closes the chat"
-msgstr ""
-
-msgid "%s shows the user profile"
-msgstr ""
-
-msgid "%s sends a message to the room"
-msgstr ""
-
-msgid "%s changes your nickname"
-msgstr ""
-
-msgid "%s sends a message to someone in the room"
-msgstr ""
-
-msgid "%s changes the room topic"
-msgstr ""
-
-msgid "%s kicks a user of the room"
-msgstr ""
-
-msgid "%s bans a user of the room"
-msgstr ""
-
-msgid "%s invites someone to join the room"
-msgstr ""
-
-msgid "Public profile"
-msgstr ""
-
-msgid "Your profile anywhere on the Web."
-msgstr ""
-
-msgid "%s is a Jappix.com service which makes your XMPP profile public. It is easier to share it. No XMPP account is required to view your social channel, your current position and your contact details."
-msgstr ""
-
-msgid "Furthermore, every picture you post in your social channel is added to a beautiful picture timeline. You can now view the pictures you shared year by year."
-msgstr ""
-
-msgid "You can also use your XMPP avatar as a single avatar for every website, blog and forum you use. When you change it on XMPP, the new avatar appears everywhere. What a genius improvement!"
-msgstr ""
-
-msgid "Yay, let's create your public profile!"
-msgstr ""
-
-msgid "Enable my public profile"
-msgstr ""
-
-msgid "Jappix for your phone"
-msgstr ""
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr ""
-
-msgid "This notification is only informative, maybe the data it links to have been removed."
-msgstr ""
-
-msgid "You haven't provided any file to download"
-msgstr ""
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr ""
-
-msgid "Woah this file isn't found, please double check"
-msgstr ""
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr ""
-
-msgid "Statistics are currently disabled in the settings."
-msgstr ""
-
-msgid "New event!"
-msgstr ""
-
-msgid "%s is typing..."
-msgstr ""
-
-msgid "The security code you entered is invalid. Please retry with another one."
-msgstr ""
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-
-msgid "Username"
-msgstr ""
-
-msgid "Enter password"
-msgstr ""
-
-msgid "Once again..."
-msgstr ""
-
-msgid "Code"
-msgstr ""
-
-msgid "Security code"
-msgstr ""
-
-msgid "Advertising space available!"
-msgstr ""
-
-msgid "Advertise here"
-msgstr ""
-
-msgid "Analytics (%s)"
-msgstr ""
-
-msgid "Track visits"
-msgstr ""
-
-msgid "Piwik URL"
-msgstr ""
-
-msgid "Piwik tracking ID"
-msgstr ""
-
-msgid "Advertising (%s)"
-msgstr ""
-
-msgid "Enable ads"
-msgstr ""
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "Leave"
-msgstr ""
-
-msgid "Mute"
-msgstr ""
-
-msgid "Unmute"
-msgstr ""
-
-msgid "Nobody there. Invite some people!"
-msgstr ""
-
-msgid "Invite people..."
-msgstr ""
-
-msgid "Enter people names..."
-msgstr ""
-
-msgid "Is calling you"
-msgstr ""
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr ""
-
-msgid "Waiting..."
-msgstr ""
-
-msgid "Proposing call..."
-msgstr ""
-
-msgid "No answer"
-msgstr ""
-
-msgid "Ringing..."
-msgstr ""
-
-msgid "Declined the call"
-msgstr ""
-
-msgid "Call error"
-msgstr ""
-
-msgid "Ended the call"
-msgstr ""
-
-msgid "Call ended"
-msgstr ""
-
-msgid "Call canceled"
-msgstr ""
-
-msgid "Canceled the call"
-msgstr ""
-
-msgid "Is already in a call"
-msgstr ""
-
-msgid "Ending call..."
-msgstr ""
-
-msgid "Incoming group call"
-msgstr ""
-
-msgid "Preparing group call..."
-msgstr ""
-
-msgid "Connecting to group call..."
-msgstr ""
-
-msgid "Group call error"
-msgstr ""
-
-msgid "Ending group call..."
-msgstr ""
-
-msgid "Group call ended"
-msgstr ""
-
-msgid "Accept"
-msgstr ""
-
-msgid "Decline"
-msgstr ""
-
-msgid "Okay"
-msgstr ""
-
-msgid "Retry"
-msgstr ""
-
-msgid "Audio Call"
-msgstr ""
-
-msgid "Video Call"
-msgstr ""
-
-msgid "%s participant"
-msgstr ""
-
-msgid "%s participants"
-msgstr ""
-
-msgid "(full)"
-msgstr ""
-
-msgid "%s is able to receive group calls."
-msgstr ""
-
-msgid "%s may not support group calls."
-msgstr ""
-
-msgid "Send a message..."
-msgstr ""
-
-msgid "Edited"
-msgstr ""
-
-msgid "Edited (%s)"
-msgstr ""
-
-msgid "Editing"
-msgstr ""
-
-msgid "Being edited"
-msgstr ""
-
-msgid "Delivered"
-msgstr ""
-
-msgid "Read"
-msgstr ""
-
-msgid "Sending..."
-msgstr ""
-
-msgid "%s requested your attention to the conversation"
-msgstr ""
-
-msgid "You requested %s's attention to the conversation"
-msgstr ""
-
-msgid "Attention to conversation requested."
-msgstr ""
diff --git a/i18n/eo/LC_MESSAGES/main.mo b/i18n/eo/LC_MESSAGES/main.mo
deleted file mode 100644
index 29fcbc7a..00000000
--- a/i18n/eo/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/eo/LC_MESSAGES/main.po b/i18n/eo/LC_MESSAGES/main.po
deleted file mode 100644
index 8872a771..00000000
--- a/i18n/eo/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2382 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:20+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Esperanto (http://www.transifex.com/projects/p/jappix/"
-"language/eo/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: eo\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "default:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"Ĝavaskripto mankas en via retumilo, do vi ne povas lanĉi Jappix-on! Bonvolu "
-"ripari tion ĉi."
-
-msgid "Social channel, chat and more."
-msgstr ""
-
-msgid "Create your public profile."
-msgstr ""
-
-msgid "A mini-chat for your website."
-msgstr ""
-
-msgid "Get Jappix, get support."
-msgstr ""
-
-msgid "Statistics around Jappix."
-msgstr ""
-
-msgid "Legal disclaimer for Jappix."
-msgstr ""
-
-msgid "Download Jappix for free."
-msgstr ""
-
-msgid "Contribute to the Jappix code."
-msgstr ""
-
-msgid "Jappix for your company."
-msgstr ""
-
-msgid "Find a public Jappix node."
-msgstr ""
-
-msgid "Credits"
-msgstr ""
-
-msgid "Association"
-msgstr ""
-
-msgid "Web agency"
-msgstr ""
-
-msgid "Legal"
-msgstr ""
-
-msgid "Legal disclaimer"
-msgstr ""
-
-msgid "Terms of use and legal"
-msgstr ""
-
-msgid "Owner"
-msgstr ""
-
-msgid "Node owner"
-msgstr ""
-
-msgid "By using our service, you accept %s."
-msgstr ""
-
-msgid "our terms of use"
-msgstr ""
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Jappix estis interrompita pro reta problemo, cimo aŭ malbona ensaluto (bv. "
-"kontroli ke vi tajpis la ĝustan pasvorton). Pardonon por la ĝeno."
-
-msgid "The element list on this server could not be obtained!"
-msgstr "La elementa listo sur ĉi tiu servilo ne povus esti akirita!"
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"Via pasvorto estis ŝanĝita, nun vi povas konekti al via konto kun via nova "
-"ensaluta datumo."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "Via XMPPa konto estis forigita. Ĝis!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "Vi estis adiaŭita de via XMPPa konto. Belan tagon!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr "La ĉambro vi aliĝis ŝajnas ke ne ekzistas. Vi devus krei ĝin!"
-
-msgid "The groupchat has been removed."
-msgstr ""
-"La retbabilejo estis forigita.Iu alia estos nun kapabla krei ĝi denove."
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "La uzanto ke vi deziras atingi ne estas en la ĉambro."
-
-msgid "Please enter the group chat address to join."
-msgstr "Bonvolu tajpi la retbabilejan adreson por aliĝi."
-
-msgid "Please enter your nickname to join %s."
-msgstr "Bonvolu tajpi vian kromnomon por aliĝi %s."
-
-msgid "This room (%s) is protected with a password."
-msgstr "Ĉi tiu ĉambro (%s) estas protektita kun pasvorto."
-
-msgid "Your browser is out of date!"
-msgstr "Via retumilo tro malnovas!"
-
-msgid "Last %s version is better!"
-msgstr "Lasta %s versio estas pli bona!"
-
-msgid "Login"
-msgstr "Ensaluti"
-
-msgid "Register"
-msgstr "Registri"
-
-msgid "Here we go!"
-msgstr "Ek!"
-
-msgid "Server"
-msgstr "Servilo"
-
-msgid "Password"
-msgstr "Pasvorto"
-
-msgid "Remember me"
-msgstr "Memoru min"
-
-msgid "This tool has been disabled!"
-msgstr "Ĉi tiu ilo estis malaktivigita, vi ne povas uzi ĝin!"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr "Pro reta problemo, vi estis malkonektita. Kio vi deziras fari nun?"
-
-msgid "Reconnect"
-msgstr "Rekonekti"
-
-msgid "Messages"
-msgstr "Mesaĝoj"
-
-msgid "Profile"
-msgstr "Profilo"
-
-msgid "Options"
-msgstr "Opcioj"
-
-msgid "Disconnect"
-msgstr "Elsaluti"
-
-msgid "Filter"
-msgstr "Filtri"
-
-msgid "Add a friend"
-msgstr "Aldoni amikon"
-
-msgid "Your groupchats"
-msgstr "Viaj babilejoj"
-
-msgid "Manage your favorite groupchats"
-msgstr "Administri viajn preferatajn retbabilejojn"
-
-msgid "More stuff"
-msgstr "Pli aĵoj"
-
-msgid "Show all friends"
-msgstr "Montri ĉiojn amikojn"
-
-msgid "Only show connected friends"
-msgstr "Nur montri konektitajn amikojn"
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "Mesaĝaj arkivoj"
-
-msgid "Date"
-msgstr "Dato"
-
-msgid "A short message?"
-msgstr "Mallonga mesaĝo?"
-
-msgid "How are you?"
-msgstr "Kiel vi fartas?"
-
-msgid "What are you doing?"
-msgstr "Kion vi faras?"
-
-msgid "Join a chat"
-msgstr "Aliĝi babilejo"
-
-msgid "Status"
-msgstr "Stato"
-
-msgid "Available"
-msgstr "Enrete"
-
-msgid "Talkative"
-msgstr "Babilema"
-
-msgid "Away"
-msgstr "Fora"
-
-msgid "Not available"
-msgstr "Nedisponebla"
-
-msgid "Busy"
-msgstr "Okupata"
-
-msgid "Offline"
-msgstr ""
-
-msgid "Mood"
-msgstr "Humoro"
-
-msgid "None"
-msgstr "Neniu"
-
-msgid "Crazy"
-msgstr "Freneza"
-
-msgid "Excited"
-msgstr "Ekscitema"
-
-msgid "Playful"
-msgstr "Ludema"
-
-msgid "Happy"
-msgstr "Feliĉa"
-
-msgid "Shocked"
-msgstr "Ŝokita"
-
-msgid "Hot"
-msgstr "Varma"
-
-msgid "Sad"
-msgstr "Malfeliĉa"
-
-msgid "Amorous"
-msgstr "Amorema"
-
-msgid "Confident"
-msgstr "Fidema"
-
-msgid "Activity"
-msgstr "Aktiveco"
-
-msgid "Chores"
-msgstr "Taskoj"
-
-msgid "Drinking"
-msgstr "Drinkante"
-
-msgid "Eating"
-msgstr "Manĝante"
-
-msgid "Exercising"
-msgstr "Ekzercante"
-
-msgid "Grooming"
-msgstr "Tualetante"
-
-msgid "Appointment"
-msgstr "Rendevuo"
-
-msgid "Inactive"
-msgstr "Senfara"
-
-msgid "Relaxing"
-msgstr "Ripozante"
-
-msgid "Talking"
-msgstr "Parolante"
-
-msgid "Traveling"
-msgstr "Vojaĝante"
-
-msgid "Working"
-msgstr "Laborante"
-
-msgid "View profile"
-msgstr "Vidi profilon"
-
-msgid "This is a repeat from %s"
-msgstr "Tio estas ripeto de %s"
-
-msgid "Repeat this notice"
-msgstr "Ripeti tion avizon"
-
-msgid "Remove this notice"
-msgstr "Forigi tion avizon"
-
-msgid "Your profile"
-msgstr "Via profilo"
-
-msgid "Identity"
-msgstr "Identeco"
-
-msgid "Profile image"
-msgstr "Profila bildo"
-
-msgid "Others"
-msgstr "Aliaj"
-
-msgid "Other"
-msgstr ""
-
-msgid "Personal"
-msgstr "Persona"
-
-msgid "Complete name"
-msgstr "Tuta nomo"
-
-msgid "Nickname"
-msgstr "Pseŭdonimo"
-
-msgid "First name"
-msgstr "Antaŭa nomo"
-
-msgid "Last name"
-msgstr "Familia nomo"
-
-msgid "Date of birth"
-msgstr "Dato de nasko"
-
-msgid "Contact"
-msgstr "Kontakto"
-
-msgid "E-mail"
-msgstr "Retpoŝto"
-
-msgid "Phone"
-msgstr "Telefono"
-
-msgid "Website"
-msgstr "Retpaĝo"
-
-msgid "Current"
-msgstr "Aktuala"
-
-msgid "Delete"
-msgstr "Forviŝi"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr "Kio domaĝo! Vi ne havas profilan bildon en via identeca karto!"
-
-msgid "Address"
-msgstr "Adreso"
-
-msgid "Street"
-msgstr "Strato"
-
-msgid "City"
-msgstr "Urbo"
-
-msgid "Postal code"
-msgstr "Poŝtkodo"
-
-msgid "Country"
-msgstr "Lando"
-
-msgid "Biography"
-msgstr "Vivhistorio"
-
-msgid "Important notice"
-msgstr "Grava avizo"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr ""
-"Ne ĉio estas privata sur XMPP. Via publika profilo (vCard) estas unu el tiuj "
-"aferoj."
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"Alŝuti profila bildo estas forte rekomendita (%s maksimumo), kiel bildo de "
-"vi mem, ĉar ĝi faras vin facile rekonebla de viaj amikoj."
-
-msgid "Save"
-msgstr "Akcepti"
-
-msgid "Cancel"
-msgstr "Nuligi"
-
-msgid "Edit options"
-msgstr "Modifi opciojn"
-
-msgid "Channel"
-msgstr "Kanalo"
-
-msgid "Commands"
-msgstr "Komandoj"
-
-msgid "Sounds"
-msgstr "Sonoj"
-
-msgid "Privacy"
-msgstr "Privateco"
-
-msgid "Message archiving"
-msgstr "Mesaĝa enarkivago"
-
-msgid "Store an history of your chats"
-msgstr ""
-
-msgid "Geolocation"
-msgstr "Surtera loko"
-
-msgid "Disabled"
-msgstr ""
-
-msgid "Store all chats"
-msgstr ""
-
-msgid "Store friend chats"
-msgstr ""
-
-msgid "Remove all archives"
-msgstr ""
-
-msgid "Empty"
-msgstr "Malplena"
-
-msgid "Empty channel"
-msgstr "Malplena kanalo"
-
-msgid "Persistent"
-msgstr "Daŭra"
-
-msgid "Maximum notices"
-msgstr "Maksimumaj avizoj"
-
-msgid "Account"
-msgstr "Konto"
-
-msgid "Change password"
-msgstr "Ŝanĝi pasvorton"
-
-msgid "Delete account"
-msgstr "Forigi konton"
-
-msgid "Old"
-msgstr "Malnova"
-
-msgid "New (2 times)"
-msgstr "Nova (2 fojoj)"
-
-msgid "Suggested chatrooms"
-msgstr ""
-
-msgid "Skip"
-msgstr ""
-
-msgid "Continue"
-msgstr "Daŭri"
-
-msgid "To"
-msgstr "Al"
-
-msgid "Close"
-msgstr "Fermi"
-
-msgid "unknown"
-msgstr "nekonata"
-
-msgid "Unavailable"
-msgstr "Nedisponebla"
-
-msgid "is now"
-msgstr "nun estas"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Bonvolu atendi dum via avatar estos alŝutita…"
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "Jen! Nova bela profila bildo!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "La bilda dosiero havas nesubtenita tipon aŭ malbonan grandecon."
-
-msgid "Reply"
-msgstr "Respondo"
-
-msgid "Error"
-msgstr "Eraro"
-
-msgid "Click here to solve the error"
-msgstr "Klaku ĉi-tie por solvi la eraron"
-
-msgid "You"
-msgstr "Vi"
-
-msgid "Remove"
-msgstr "Forigi"
-
-msgid "Rename"
-msgstr "Renomi"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Saluton, mi estas %s, mi ŝatus aldoni vin kiel mia amiko."
-
-msgid "Smiley insertion"
-msgstr "Ridetula inserto"
-
-msgid "Change style"
-msgstr "Ŝanĝi stilon"
-
-msgid "Text in bold"
-msgstr "Grasa"
-
-msgid "Text in italic"
-msgstr "Kursiva"
-
-msgid "Underlined text"
-msgstr "Substreka"
-
-msgid "Send a file"
-msgstr "Sendi dosieron"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr ""
-"Kiam alŝutita, via amiko estos invitata por elŝuti la senditan dosieron."
-
-msgid "Save chat"
-msgstr "Registrigi babilon"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"Klaku sur la sekvanta ligo por akiri la konversacian protokolan dosieron kaj "
-"atendu. Tiam klaku denove por akiri la dosieron."
-
-msgid "This chat is empty!"
-msgstr "Tio babilejo estas malplena!"
-
-msgid "Generate file!"
-msgstr "Generi dosieron!"
-
-msgid "Download file!"
-msgstr "Elŝuti dosieron!"
-
-msgid "Clean current chat"
-msgstr "Forviŝi nun babilon"
-
-msgid "Show user profile"
-msgstr "Montri uzatan profilon"
-
-msgid "Add this contact to your friends"
-msgstr "Aldoni ĉi-tiun kontakton al viaj amikoj"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Aldoni ĉi tiu retbabilejo al via ŝatolisto"
-
-msgid "All tabs"
-msgstr "Tutaj folioj"
-
-msgid "Join groupchat"
-msgstr ""
-
-msgid "Close this tab"
-msgstr "Fermi tion folion"
-
-msgid "no subject defined for this room."
-msgstr "neniu temo difinita por ĉi tiu ĉambro."
-
-msgid "Administration panel for this room"
-msgstr "Administra panelo por ĉi tiu ĉambro."
-
-msgid "Moderators"
-msgstr "Kontrolantoj"
-
-msgid "Participants"
-msgstr "Partoprenantoj"
-
-msgid "Visitors"
-msgstr "Vizituloj"
-
-msgid "Manage favorite rooms"
-msgstr "Administri preferatajn ĉambrojn"
-
-msgid "Change favorites"
-msgstr "Ŝanĝi ŝatolisto"
-
-msgid "Search a room"
-msgstr "Serĉi babilejon"
-
-msgid "Select a favorite"
-msgstr "Elekti ŝatolistero"
-
-msgid "Getting the name..."
-msgstr "Akirante la nomon…"
-
-msgid "Gateway"
-msgstr "Kluzo"
-
-msgid "Name"
-msgstr "Nomo"
-
-msgid "Room"
-msgstr "Babilejo"
-
-msgid "Add"
-msgstr "Aldoni"
-
-msgid "Edit"
-msgstr "Modifi"
-
-msgid "Search a room on"
-msgstr "Serĉi babilejon sur"
-
-msgid "No room found on this server."
-msgstr "Neniu ĉambro trovita sur ĉi tiu servilo."
-
-msgid "Service discovery"
-msgstr "Serva eltrovo"
-
-msgid "Server to query"
-msgstr "Servilo por pridemandi"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "Pardonu, sed la ento ne revenis ajnan rezulton!"
-
-msgid "Accounts"
-msgstr "Kontoj"
-
-msgid "Authentications"
-msgstr "Aŭtentokontroloj"
-
-msgid "Automation"
-msgstr "Aŭtomatigo"
-
-msgid "Clients"
-msgstr "Klientoj"
-
-msgid "Collaboration"
-msgstr "Kunlaborado"
-
-msgid "Components"
-msgstr "Komponento"
-
-msgid "Rooms"
-msgstr "Babilejoj"
-
-msgid "Directories"
-msgstr "Dosierujoj"
-
-msgid "Gateways"
-msgstr "Kluzoj"
-
-msgid "News"
-msgstr "Novaĵoj"
-
-msgid "Hierarchy"
-msgstr "Hierarkio"
-
-msgid "Proxies"
-msgstr "Prokuraj serviloj"
-
-msgid "Publication/Subscription"
-msgstr "Eldona/Abono"
-
-msgid "Storage"
-msgstr "Konservado"
-
-msgid "Service offline or broken"
-msgstr "Servo elretan aŭ rompita"
-
-msgid "Your inbox"
-msgstr "Via enirkesto"
-
-msgid "Available actions"
-msgstr "Haveblaj agoj"
-
-msgid "Clean"
-msgstr "Purigi"
-
-msgid "New"
-msgstr "Nova"
-
-msgid "Received"
-msgstr "Ricevitaj"
-
-msgid "Subject"
-msgstr "Temo"
-
-msgid "Content"
-msgstr "Enhavo"
-
-msgid "Send message"
-msgstr "Sendi mesaĝon"
-
-msgid "Your inbox is empty."
-msgstr "Via enirkesto estas malplene."
-
-msgid "MUC administration"
-msgstr "Retbabileja administrado."
-
-msgid "You administrate this room"
-msgstr "Vi administras ĉi-tiun ĉambron"
-
-msgid "Enter new subject"
-msgstr "Tajpu novan subjekton"
-
-msgid "Configuration"
-msgstr "Agordoj"
-
-msgid "Authorizations"
-msgstr "Aŭtentigoj"
-
-msgid "Member list"
-msgstr "Membra listo"
-
-msgid "Owner list"
-msgstr "Posedanta listo"
-
-msgid "Administrator list"
-msgstr "Administranta listo"
-
-msgid "Outcast list"
-msgstr "Forĵetuloj listo"
-
-msgid "Add an input"
-msgstr "Aldonas enigon"
-
-msgid "Destroy this MUC"
-msgstr "Detrui la retbabilejon"
-
-msgid "Yes, let's do it!"
-msgstr "Jes, faru ni!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "Via amiko estas atentita al la konversacio."
-
-msgid "Your friend is writing a message..."
-msgstr "Via amiko estas skribanti mesaĝon... "
-
-msgid "Your friend stopped writing a message."
-msgstr "Via amiko haltis skribi mesaĝon."
-
-msgid "Your friend is doing something else."
-msgstr "Via amiko estas farante ion alia."
-
-msgid "Your friend closed the chat."
-msgstr "Via amiko fermis la konversacion."
-
-msgid "Requesting this service..."
-msgstr "Petanta ĉi-tiun servon…"
-
-msgid "Loading"
-msgstr "Ŝargi"
-
-msgid "changed his/her nickname to %s"
-msgstr "ŝanĝis lia/ŝia kromnomo al %s"
-
-msgid "joined the chat room"
-msgstr "aliĝis al la babilejo"
-
-msgid "left the chat room"
-msgstr "foriris la babilejo"
-
-msgid "%s left"
-msgstr ""
-
-msgid "%s joined"
-msgstr ""
-
-msgid "no status"
-msgstr "neniu stato"
-
-msgid "has been kicked"
-msgstr "estas elpelita"
-
-msgid "has been banned"
-msgstr "estis ekskludita"
-
-msgid "no reason"
-msgstr "neniu motivo"
-
-msgid "Communicate with the entire world!"
-msgstr "Komuniku kun la tuta mondo!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-"Jappix estas genia socia platformo, kiu vi povas aliri ie-ajn vi estas, iam-"
-"ajn vi deziras kaj komuniki kun kiu-ajn vi deziras."
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-"Kontaktu la milionojn de uzantoj kiu nuntempe uzas la XMPPan reton, kiel vi "
-"faras uzante Jappix-on. Aliĝu la komunumon kaj restu libere!"
-
-msgid "Hi there!"
-msgstr "Saluton!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr "Ensalutu al via ekzistanta XMPP konto, aŭ krei novan senkoste!"
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-"Ensalutu kun via ekzistanta XMPP-a konto. Vi ankaŭ povas uzi la %s por aliĝi "
-"retbabilejon."
-
-msgid "Previous"
-msgstr "Antaŭa"
-
-msgid "General"
-msgstr "Ĝenerala"
-
-msgid "Advanced"
-msgstr "Krome"
-
-msgid "Resource"
-msgstr "Risurco"
-
-msgid "Priority"
-msgstr "Prioritato"
-
-msgid "Low"
-msgstr "Malgrava"
-
-msgid "Medium"
-msgstr "Norma"
-
-msgid "High"
-msgstr "Grava"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-"Eniru la retbablejon vi deziras aliĝi, kaj la kromnomon kiu vi deziras. Vi "
-"ankaŭ povas reveni al la %s."
-
-msgid "login page"
-msgstr "ensaluta paĝo"
-
-msgid "Share this link with your friends:"
-msgstr "Kundividu ĉi-tiun ligon kun viaj amikoj:"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-"Registru novan XMPPan konton por aligi viajn amikojn sur via propra socia "
-"nubo. Tio estas simpla!"
-
-msgid "Required"
-msgstr "Postulita"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "Vi estis registrita, jen via XMPPa adreso:"
-
-msgid "Manager"
-msgstr "Administrilo"
-
-msgid "Encrypted"
-msgstr "Ĉifrita"
-
-msgid "Unencrypted"
-msgstr "Neĉifrita"
-
-msgid "Where are you?"
-msgstr "Kie vi estas?"
-
-msgid "What's up with you?"
-msgstr "Kio nova?"
-
-msgid "Type something you want to share with your friends..."
-msgstr "Tajpu ion vi deziras disvastigi al viaj amikoj..."
-
-msgid "Fetching the social channel..."
-msgstr "Akirante la socian kanalon..."
-
-msgid "You are synchronized with your network."
-msgstr "Vi estas samtempigita kun via reto."
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "Ne povas sendi ion-ajn: vi nur povas ricevi avizojn!"
-
-msgid "Media viewer"
-msgstr "Aŭdvidaĵa legilo"
-
-msgid "Browse"
-msgstr "Foliumi"
-
-msgid "Command"
-msgstr "Komando"
-
-msgid "Subscribe"
-msgstr "Aboni"
-
-msgid "Join"
-msgstr "Aliĝi"
-
-msgid "Automatic"
-msgstr "Aŭtomata"
-
-msgid "Search"
-msgstr "Serĉi"
-
-msgid "No result!"
-msgstr "Neniu trafo!"
-
-msgid "No notifications."
-msgstr "Neniuj sciigoj."
-
-msgid "would like to add you as a friend."
-msgstr "ŝatus aldoni vin kiel amiko."
-
-msgid "would like you to join this chatroom:"
-msgstr "ŝatus vin aliĝi ĉi tiun babilejon:"
-
-msgid "Do you accept?"
-msgstr "Ĉu vi akceptas?"
-
-msgid "Yes"
-msgstr "Jes"
-
-msgid "No"
-msgstr "Ne"
-
-msgid "would like to get authorization."
-msgstr "ŝatus akiri rajtigon."
-
-msgid "would like to send you a file: “%s”."
-msgstr "deziras sendi al vi dosieron: “%s”."
-
-msgid "has received a file exchange request: “%s”."
-msgstr "ricevis dosieran interŝanĝan peton:“%s”."
-
-msgid "has accepted to receive your file: “%s”."
-msgstr "akceptis ricevi vian dosieron:“%s”."
-
-msgid "has rejected to receive your file: “%s”."
-msgstr "malakceptis ricevi vian dosieron:“%s”."
-
-msgid "could not receive your file: “%s”."
-msgstr "ne povas ricevi vian dosieron: “%s”."
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr "Ĉu vi deziras vidi la amikojn %s sugestas vin?"
-
-msgid "commented an item you follow: “%s”."
-msgstr "komentis elementon kiun vi sekvas: “%s”."
-
-msgid "liked your post: “%s”."
-msgstr "ŝatas vian afiĝon: “%s”."
-
-msgid "quoted you somewhere: “%s”."
-msgstr "citigis vin ie: “%s”."
-
-msgid "published on your wall: “%s”."
-msgstr "publikigis sur via muro: “%s”."
-
-msgid "tagged you in a photo (%s)."
-msgstr "markis vin sur bildon (%s)."
-
-msgid "tagged you in a video (%s)."
-msgstr "markis vin sur videon (%s)."
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-
-msgid "Open"
-msgstr ""
-
-msgid "Show"
-msgstr "Montri"
-
-msgid "Hide"
-msgstr "Kaŝi"
-
-msgid "Submit"
-msgstr "Sendi"
-
-msgid "Client"
-msgstr "Kliento"
-
-msgid "System"
-msgstr "Sistemo"
-
-msgid "Local time"
-msgstr "Loka tempo"
-
-msgid "Comments"
-msgstr "Komentoj"
-
-msgid "User profile"
-msgstr "Uzanta profilo"
-
-msgid "See his/her position on the globe"
-msgstr "Vidi lia/ŝia pozicio sur Tero"
-
-msgid "Confirm"
-msgstr "Konfirmi"
-
-msgid "anonymous mode"
-msgstr "anonima modo"
-
-msgid "Groups"
-msgstr "Grupoj"
-
-msgid "Unclassified"
-msgstr "Neklasigita"
-
-msgid "Authorize"
-msgstr "Rajtigi"
-
-msgid "Ask for authorization"
-msgstr "Peto por rajtigo"
-
-msgid "Unblock"
-msgstr "Malbloki"
-
-msgid "Prohibit"
-msgstr "Malpermesi"
-
-msgid "Block"
-msgstr "Bloki"
-
-msgid "Chat"
-msgstr "Babilado"
-
-msgid "Groupchat"
-msgstr "Retbabilejo"
-
-msgid "Jappix Mobile"
-msgstr "Poŝtelefona Jappix"
-
-msgid "Desktop"
-msgstr "Surtabla versio"
-
-msgid "Mobile"
-msgstr "Poŝtelefona versio"
-
-msgid "Please wait..."
-msgstr "Momenton…"
-
-msgid "Please enable JavaScript"
-msgstr "Bonvolu enŝalti Ĝavoskripton"
-
-msgid "Show comments"
-msgstr "Montri komentojn"
-
-msgid "Loading comments..."
-msgstr "Ĉarĝante komentojn…"
-
-msgid "Could not get the comments!"
-msgstr "Ne povis akiri komentojn!"
-
-msgid "Comments locked!"
-msgstr "Komentoj ŝlositaj!"
-
-msgid "Type your comment here..."
-msgstr "Tajpu vian komenton ĉi-tie…"
-
-msgid "Your channel"
-msgstr "Via kanalo"
-
-msgid "Channel of"
-msgstr "Kanalo da"
-
-msgid "More notices..."
-msgstr "Pli da avizoj…"
-
-msgid "Attach a file"
-msgstr "Alligas dosieron "
-
-msgid "Send"
-msgstr "Sendi"
-
-msgid "Unattach the file"
-msgstr "Malalligas dosieron "
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-"Eraro okazis dum via dosiero elŝutado: eble ĝi estas tro granda (%s "
-"maksimuma) aŭ malpermesita!"
-
-msgid "Authorization failed"
-msgstr "Rajtigo malsuksesis"
-
-msgid "Registration failed, please choose a different username"
-msgstr "Registrigo malsuksesis. Bonvolu elekti alian salutnomon."
-
-msgid "Service unavailable"
-msgstr "Maldisponebla servo"
-
-msgid "Internal server error, try later"
-msgstr "Interna servila eraro, provas poste"
-
-msgid "Your form has been sent."
-msgstr "Via formo estis sendita."
-
-msgid "Application"
-msgstr "Aplikaĵo"
-
-msgid "Media integration"
-msgstr "Aŭdvidaĵo integrado"
-
-msgid "Keep local chat archives"
-msgstr ""
-
-msgid "XMPP links"
-msgstr "XMPPa ligoj"
-
-msgid "Open XMPP links with Jappix"
-msgstr "Malfermi XMPPan ligojn kun Jappix"
-
-msgid "changed the subject to:"
-msgstr "ŝanĝis la temon al:"
-
-msgid "Welcome!"
-msgstr "Bonvenon!"
-
-msgid "Friends"
-msgstr "Amikoj"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr ""
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-"Antaŭ ol vi komencas uzi ĝin, vi devos ŝanĝi kelkajn agordojn, serĉi amikojn "
-"kaj kompletigi vian profilon."
-
-msgid "Enable notification sounds"
-msgstr "Enŝalti sciigajn sonojn"
-
-msgid "Share your position on the globe"
-msgstr "Komuniku vian lokon sur Tero"
-
-msgid "Offline friends"
-msgstr "Eksterretaj amikoj"
-
-msgid "Don't hide offline friends"
-msgstr "Ne kaŝi eksterretajn amikojn"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-"Uzi ĉi tiun ilon por trovi viajn amikojn sur la servilo kiu vi ĝus uzas nun, "
-"aŭ aldoni ilin poste."
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr "Bonege! Nun, vi povas kunuzi Jappix kun viaj amikoj!"
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-"Kiam vi premos la “savi” butonon, la profila redaktorilo estos malfermita. "
-"Feliĉan societumon!"
-
-msgid "Share Jappix on %s"
-msgstr "Kunuzigi Jappix-on ĉe %s"
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "Uzante Jappix-on, malferma socia platformo. Mi estas %s!"
-
-msgid "Unknown name"
-msgstr "Nekonata nomo"
-
-msgid "Unknown country"
-msgstr "Nekonata lando"
-
-msgid "Click to enable"
-msgstr "Premi por enŝalti"
-
-msgid "Click to disable"
-msgstr "Premi por elŝalti"
-
-msgid "Installation"
-msgstr "Instalado"
-
-msgid "Jappix installation"
-msgstr "Jappix-a instalado"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "Bonvenon en la instalado de Jappix!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-"Ĉi tiu ilo helpos vin instali Jappix-on rapide, la unua XMPP-bazita socian "
-"platformon, sur via servilo. Vi ne eĉ devas ajnan teknikan scion."
-
-msgid "Installation Steps:"
-msgstr "Jen la instaladaj paŝoj:"
-
-msgid "Welcome"
-msgstr "Bonvenon"
-
-msgid "Storage configuration"
-msgstr "Konservada agordo"
-
-msgid "Administrator account"
-msgstr "Administranta konto"
-
-msgid "Main configuration"
-msgstr "Ĉefa agordo"
-
-msgid "Hosts configuration"
-msgstr "Agordo de gastigoj"
-
-msgid "Services installation"
-msgstr "Instalado de servoj"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-"Se la nuna lingvo ne kongruas la vian (%1s), vi povas paroligi Jappix %2s ĝi "
-"estos savita."
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"Se vi deziras akiri helpon pri la Jappix-a instalaĵo kaj agordaĵo, vi povas "
-"uzi nian tutan dokumentaron, havebla ĉe:"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-"Estas tempo por konstrui vian propran socian nubon: nur iru al la sekvanta "
-"paŝo!"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr "La dosierujo estas skribebla, vi povas daŭri!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-"Jappix ebligas vin administri vian konfiguron, instali novajn kromaĵojn aŭ "
-"serĉi ĝisdatigojn. Tio estas kial vi devas krei administrantan konton por "
-"aliri la manaĝeron."
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-"Kiam Jappix estos instalita, ĵus klaku sur la manaĝera ligo ĉe la hejmpaĝo "
-"por aliri ĝin."
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr "Ohoh, vi perdiĝis ion aŭ la du pasvortoj ne kongruas!"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-"Jappix necesas ke vi specifu kelkajn valorojn por funkcii. Bonvolu ĝustigi "
-"la sekvantajn enigojn (aŭ teni la apriorajn valorojn, kiu estas sufiĉa por "
-"plejpartoj de homoj)."
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-"Notu ke se vi ne specifas valoron kiu estas deviga, ĝi estos aŭtomate "
-"kompletigita kun la apriora unu."
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-"Bezoni helpon? Vi povus legi nian dokumentaran paĝon pri kiel plenigi ĉi-"
-"tiun formularon!"
-
-msgid "User"
-msgstr "Uzanto"
-
-msgid "Service"
-msgstr "Servo"
-
-msgid "Service name"
-msgstr "Serva nomo"
-
-msgid "Service description"
-msgstr "Serva priskribo"
-
-msgid "Owner name"
-msgstr ""
-
-msgid "Owner website"
-msgstr ""
-
-msgid "Connection"
-msgstr "Konekto"
-
-msgid "Lock the host"
-msgstr "Ŝlozi la gastigon"
-
-msgid "Anonymous mode"
-msgstr "Sennoma modo"
-
-msgid "HTTP authentication"
-msgstr ""
-
-msgid "Registration allowed"
-msgstr "Registriĝo permesita"
-
-msgid "Use the built-in BOSH proxy"
-msgstr ""
-
-msgid "Manager link"
-msgstr "Administra ligilo"
-
-msgid "Groupchats to join"
-msgstr "Alireblaj retbabilejoj"
-
-msgid "Suggest groupchats"
-msgstr ""
-
-msgid "Encryption"
-msgstr "Ĉifrado"
-
-msgid "HTTPS storage"
-msgstr "HTTPS-a konservado"
-
-msgid "Force HTTPS"
-msgstr "Perforti HTTPS-n"
-
-msgid "Compression"
-msgstr "Densigo"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"Ĉi-tiu paĝo helpas vin por specifi la apriorajn gastigojn kiu konektos al "
-"Jappix. Vi povas lasi ĝin kiel ĝi estas, kaj daŭri se vi deziras uzi la "
-"oficialajn servajn gastigojn."
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"Eble vi ne scias kiu BOSH-a servilo estas? Fakte, tio ĉi estas transsendado "
-"inter Jappix kliento kaj XMPP-a servilo, kiu estas necesa pro teknikaj limoj."
-
-msgid "Main host"
-msgstr "Ĉefa gastigo"
-
-msgid "Groupchat host"
-msgstr "Retbabileja gastigo"
-
-msgid "Pubsub host"
-msgstr "Pubsub-a gastigo"
-
-msgid "Anonymous host"
-msgstr "Sennoma gastigo"
-
-msgid "Directory host"
-msgstr "Dosieruja gastigo"
-
-msgid "BOSH host"
-msgstr "BOSH-a gastigo"
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-"Vi povas instali kelkajn kromaĵojn sur via servilo, etendi vian Jappix-an "
-"funkciojn. Kelkaj aliaj povus esti modifita, pro sekurecaj restriktoj kiuj "
-"estas fiksita apriore."
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-"Por fari tion-ĉi, vi devas esti kapabla aliri la via servila ŝelo, kaj esti "
-"ensalutita kiel administranto. Memori ĉi-tion ne estas deviga, Jappix "
-"laboros sen ĉi-tiuj kapsuloj, sed kelkaj el funkcioj estos malhaveblaj."
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-"Kiam tiam vi finigis la agordon, Jappix produktos la kaŝdosierojn. Povus "
-"esti malrapida, bv. atendi ĝis la aplikaĵo estos montrita kaj ne premu iu-"
-"ajnan butonon."
-
-msgid "Thanks for using Jappix!"
-msgstr "Dankon por uzi Jappix-n!"
-
-msgid "Next"
-msgstr "Laŭ"
-
-msgid "Finish"
-msgstr "Fini"
-
-msgid "Check again"
-msgstr "Denove kontroli"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-"La dosierujo ne estas skribebla. Bonvolu agordi la ĝustajn permesojn al la "
-"%s dosierujon."
-
-msgid "%s is installed on your system."
-msgstr "%s estas instalita sur via sistemo."
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s ne estas instalita sur via sistemo. Vi devus instali %2s."
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "PHP maksimuma alŝuta grando estas sufiĉa (%s)."
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-"PHP maksimuma alŝuta grando ne estas sufiĉa (%1s). Vi devus defini ĝin inter "
-"%2s kaj %3s."
-
-msgid "Jappix manager"
-msgstr "Jappix-a administrilo"
-
-msgid "Manager access"
-msgstr "Administrila aliro"
-
-msgid "Statistics"
-msgstr "Statistiko"
-
-msgid "Hosts"
-msgstr "Gastigoj"
-
-msgid "Design"
-msgstr "Fasonado"
-
-msgid "Repeat"
-msgstr "Ripeti"
-
-msgid "All"
-msgstr "Ĉio"
-
-msgid "Horizontal"
-msgstr "Horizontala"
-
-msgid "Vertical"
-msgstr "Vertikala"
-
-msgid "Center"
-msgstr "Centre"
-
-msgid "Left"
-msgstr "Maldekstre"
-
-msgid "Right"
-msgstr "Dekstre"
-
-msgid "Top"
-msgstr "Supre"
-
-msgid "Bottom"
-msgstr "Fundo"
-
-msgid "Adapt"
-msgstr "Adapti"
-
-msgid "Color"
-msgstr "koloro"
-
-msgid "Users"
-msgstr "Uzantoj"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-"Tio ĉi estas restriktita zonon: nur la rajtigitaj uzantoj povus administri "
-"ĉi-tiun Jappix-an nodon."
-
-msgid "Please use the form below to login to the administration panel."
-msgstr ""
-"Bonvolu uzi la suban formularon por ensaluti en la administrita panelo."
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-"Por plibonigi sekurecon, sesioj estas limigitaj per tempo kaj kiam via "
-"retumilo estos fermita, vi estos adiaŭita."
-
-msgid "Credentials"
-msgstr "Legitimaĵo"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "Vi estis elsalutita. Ĝis!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-"Hoho, vi ne povus esti rekonita kiel valida administranto. Bonvolu kontroli "
-"vian leĝitimaĵon!"
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-"Bazan statistikon estas faritaj per Jappix pri kelkaj gravaj aferoj. Vi "
-"povas trovi ilin malsupre."
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr "Ŝanĝu vian Jappix-an nodna konfiguracion kun ĉi-tiu ilo."
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-"Ĉiuj Jappix-a noda konservitaj dosierojn povas esti administrita kun ĉi tiu "
-"ilo: bonvolu elekti subdosierujon kaj komenci redakti ĝian enhavon!"
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr "Jappix estas tute tajlorebla: vi povas ŝanĝi ĝian fasonadon ĉi-tie."
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr "Tio-ĉi ne estas valida bildo. Bonvolu uzi PNG, GIF aŭ JPG!"
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr "Ne estas valida bildo. Bonvolu uzi la formato PNG."
-
-msgid "The image could not be received, would you mind retry?"
-msgstr "La bildo ne povus esti ricevita. Bonvolu provi denove."
-
-msgid "Your service logo has been successfully changed!"
-msgstr "Via serva emblemo estas sukcese ŝanĝita!"
-
-msgid "Your image was added to the list!"
-msgstr "Vian bildon estas aldonita al la listo!"
-
-msgid "Changes saved!"
-msgstr "Ŝanĝoj konservitaj"
-
-msgid "Logo"
-msgstr "Emblemo"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-"Vi povas agordi vian propran servan emblemon por anstataŭigi la aprioran "
-"unun. Zorgu la grandon kaj la ĉefan koloron de ĉiu emblemo!"
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr "Alŝutu ĉiun emblemon kun la rekomenda maksimuma bildera grandeco."
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-"Via emblema formato devus esti PNG. La emblemon ne estos ŝanĝita se vi lasu "
-"malplenan kampon."
-
-msgid "Remove this logo"
-msgstr "Forviŝi ĉi-tiun emblemon"
-
-msgid "View this logo"
-msgstr "Vidi ĉi-tiun emblemon"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-"Vi povas difini pli ol unu administranto por ĉi-tiu Jappix nodo. Vi ankaŭ "
-"povas ŝanĝi pasvorton kun ĉi tiu ilo."
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-"Ĝisdatigu vian Jappix-an nodon kun ĉi-tiu ilo, aŭ kontroli se nova estas "
-"havebla. Informoj pri la plej lasta versio estas ankaŭ montritaj (en la "
-"angla)."
-
-msgid "Access statistics"
-msgstr "Iri al statistiko"
-
-msgid "Share statistics"
-msgstr "Disvastigi statistikon"
-
-msgid "Other statistics"
-msgstr "Alia statistiko"
-
-msgid "January"
-msgstr "Januaro"
-
-msgid "February"
-msgstr "Februaro"
-
-msgid "March"
-msgstr "Marto"
-
-msgid "April"
-msgstr "Aprilo"
-
-msgid "May"
-msgstr "Majo"
-
-msgid "June"
-msgstr "Junio"
-
-msgid "July"
-msgstr "Julio"
-
-msgid "August"
-msgstr "Aŭgusto"
-
-msgid "September"
-msgstr "Septembro"
-
-msgid "October"
-msgstr "Oktobro"
-
-msgid "November"
-msgstr "Novembro"
-
-msgid "December"
-msgstr "Decembro"
-
-msgid "Monday"
-msgstr "lundo"
-
-msgid "Tuesday"
-msgstr "mardo"
-
-msgid "Wednesday"
-msgstr "merkredo"
-
-msgid "Thursday"
-msgstr "jaŭdo"
-
-msgid "Friday"
-msgstr "vendredo"
-
-msgid "Saturday"
-msgstr "sabato"
-
-msgid "Sunday"
-msgstr "dimanĉo"
-
-msgid "Total"
-msgstr "Totala"
-
-msgid "Archives"
-msgstr ""
-
-msgid "Music"
-msgstr "Muziko"
-
-msgid "Backgrounds"
-msgstr "Fonoj"
-
-msgid "Share"
-msgstr "Disvastigi"
-
-msgid "Background"
-msgstr "Fono"
-
-msgid "Notice"
-msgstr "Avizo"
-
-msgid "Your design preferences have been saved!"
-msgstr "Viaj fasonaj preferoj estis savita!"
-
-msgid "Please check your inputs: something is missing!"
-msgstr "Bonvolu kontroli viajn enigojn: io mankas!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-"Ŝanĝu vian Jappix-an nodan fonon kun ĉi tiu ilo. Vi povas agordi propran "
-"koloron aŭ alŝutitan bildon. Lasu vian kreecon flui!"
-
-msgid "Use default background"
-msgstr "Uzi aprioran fonon"
-
-msgid "Use your own image"
-msgstr "Uzi vian propran bildon"
-
-msgid "Select a background to use and change the display options."
-msgstr "Elektu fonon por uzi kaj ŝanĝi la vidigajn elektojn."
-
-msgid "Use your own color"
-msgstr "Uzi vian propran koloron"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr "Tajpu la deksesuman koloran valoron kiun vi deziras uzi kiel fono."
-
-msgid "Manage backgrounds"
-msgstr "Administri fonojn"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-"Vi povas aldoni novan fonon al la listo kun ĉi-tiu ilo. Bonvolu sendi "
-"validan bildon."
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr "Se vi deziras forigi kelkajn fonojn, uzu la suban retumilon."
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-"Difinu ĉefpaĝan avizon por ĉiuj viaj uzantoj, ekzemple averto, grava mesaĝo "
-"aŭ reklamo kun ĉi-tiu ilo."
-
-msgid "Simple notice"
-msgstr "Simple avizo"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-"Ĉi-tiu avizo nur bezonas simplan tekston por esti montrita, sed kodo ne "
-"estas permesita!"
-
-msgid "Advanced notice"
-msgstr "Kroma avizo"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-"Vi povas agordi vian avizon kun enigita HTML, CSS kaj Ĝavoskripto, sed vi "
-"bezonas kodi la stilon."
-
-msgid "Available updates"
-msgstr "Haveblaj ĝisdatigoj"
-
-msgid "What's new?"
-msgstr "Kio nova?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr ""
-"Viaj konservaj dosierujon ne estas skribeblaj. Bonvolu apliki la ĝustajn "
-"rajtojn!"
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-"%1s povas kaŭzi problemojn al la prokurilo. Bonvolu pliigi %2s valoro ĝis "
-"%3s!"
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-"Vi estas uzanta konstruatan version de Jappix. Ĝisdatigu ĝin tra nia "
-"deponejo plenumigante: %s."
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-"Nova versio de Jappix estas havebla! Kontrolu kion estas nova kaj lanĉu la "
-"ĝisdatigon!"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr ""
-"Via versio ne estas ĝisdatiga. Bonvolu nun ĝisdatigi al %s, klakante ĉi-tie!"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"Via versio ŝajnas esti ĝisdatiga, sed vi povas kontroli ĝisdatigojn mane, "
-"klakante ĉi-tie."
-
-msgid "Check for updates"
-msgstr "Kontroli ĝisdatigoj"
-
-msgid "Update in progress"
-msgstr "Ĝisdatigante…"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr "Jappix estis ĝisdatigita: vi nun uzas la plej lastan version. Amuziĝu!"
-
-msgid "The update has failed! Please try again later."
-msgstr "La ĝisdatigo fiaskis! Bonvolu provi denove poste."
-
-msgid "Downloading package..."
-msgstr "Elŝutante pakaĵon…"
-
-msgid "Removing current Jappix system files..."
-msgstr "Forigas nunajn Jappix-an sistemajn dosierojn…"
-
-msgid "Extracting package..."
-msgstr "Eltirante pakaĵon…"
-
-msgid "Regenerating storage folder tree..."
-msgstr "Regenerante konservadan dosierujan arbon..."
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix estas nun ĝisdatigita!"
-
-msgid "Aborted: socket error!"
-msgstr "Ĉesita: inga eraro!"
-
-msgid "Aborted: buffer error!"
-msgstr "Ĉesita: bufra eraro!"
-
-msgid "Aborted: everything is not writable!"
-msgstr "Ĉesita: ĉio ne skribeblas!"
-
-msgid "Aborted: could not extract the package!"
-msgstr "Ĉesita: ne povas eltiri la pakaĵon!"
-
-msgid "Visits"
-msgstr "Vizitoj"
-
-msgid "Daily"
-msgstr "Ĉiutaga"
-
-msgid "Weekly"
-msgstr "Ĉiusemajna"
-
-msgid "Monthly"
-msgstr "Ĉiumonata"
-
-msgid "Yearly"
-msgstr "Ĉiujara"
-
-msgid "Size"
-msgstr "Grando"
-
-msgid "Clean everything"
-msgstr "Viŝi ĉion"
-
-msgid "Purge cache"
-msgstr "Viŝi kaŝmemoron"
-
-msgid "Purge logs"
-msgstr "Viŝi protokolojn"
-
-msgid "Purge sent files"
-msgstr "Viŝi senditajn dosierojn"
-
-msgid "Purge updates"
-msgstr "Viŝi ĝisdatigojn"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "La konservada dosiero tiun, kiun vi volus viŝi estas nun malplena!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-"Tenu vian Jappix-an nodon freŝe kaj rapide, viŝu la konservadan dosieron "
-"regule!"
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-"Alŝutu vian muzikon (Ogg Vorbis, Mp3 aŭ WAV) por esti kapabla aŭskulti ĝin "
-"ĉe Jappix!"
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr "La dosiero vi deziras alŝuti devus esti malpli grande ol %s."
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-"Estu vigla pri kion viaj uzantoj konservas en via servilo, kaj forigu "
-"nedezireman enhavon kun ĉi tiu ilo."
-
-msgid "Title"
-msgstr "Titolo"
-
-msgid "Artist"
-msgstr "Artisto"
-
-msgid "Album"
-msgstr "Albumo"
-
-msgid "File"
-msgstr "Dosiero"
-
-msgid "Upload"
-msgstr "Alŝuti"
-
-msgid "The folder is empty."
-msgstr "La dosieraro estas malplena."
-
-msgid "The music could not be received, please retry!"
-msgstr "La muziko ne povus esti ricevita, bonvolu provi denove!"
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-"Tio ĉi ne estas valida muzika dosiero. Bonvolu kodigi en Ogg Vorbis, Mp3 aŭ "
-"WAV."
-
-msgid "Your music has been added!"
-msgstr "Via muziko ĵus estas aldonita!"
-
-msgid "The selected elements have been removed."
-msgstr "La elektitajn elementojn estas forigita."
-
-msgid "You must select elements to remove!"
-msgstr "Vin devas elekti forigendajn elementojn!"
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-"Aldonu novan uzanton kun ĉi-tiu ilo, aŭ ŝanĝu pasvorton (tajpu ekzistantan "
-"salutnomon). Bonvolu sendi fortan pasvorton!"
-
-msgid "Manage"
-msgstr "Administri"
-
-msgid "List"
-msgstr "Listo"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-
-msgid "The user has been added!"
-msgstr "La uzanto estis aldonita!"
-
-msgid "The chosen users have been removed."
-msgstr "La elektitaj uzantoj estis forigita."
-
-msgid "You must select one or more users to be removed!"
-msgstr "Vi devas elekti unu aŭ pli da uzantoj por esti forigi!"
-
-msgid "Yesterday"
-msgstr "Hieraŭ"
-
-msgid "%s days ago"
-msgstr "%s tagoj antaŭe"
-
-msgid "User currently active"
-msgstr "Uzanto nune aktiva"
-
-msgid "Last seen: %s"
-msgstr "Laste vidita: %s"
-
-msgid "Inactive since: %s"
-msgstr "Malaktiva ekde: %s"
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr "Via amiko ŝajnas ke li ne ricevas viajn mesaĝojn! "
-
-msgid "Static content server"
-msgstr "Senmova enhava servilo"
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr "Tiu estas la senmova enhava servilo por %1s, “%2s”."
-
-msgid "User uploads server"
-msgstr "Uzanta alŝutitaj servilo"
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr "Ĉi-tio estas la uzanta alŝutaj servilo por %1s, “%2s”."
-
-msgid "Suggested friends"
-msgstr "Proponi amikojn"
-
-msgid "Check all"
-msgstr "Enŝalti ĉion"
-
-msgid "Uncheck all"
-msgstr "Elŝalti ĉion"
-
-msgid "Choose"
-msgstr "Elekti"
-
-msgid "List name"
-msgstr "Lista nomo"
-
-msgid "Allow"
-msgstr "Permesi"
-
-msgid "Deny"
-msgstr "Malpermesi"
-
-msgid "Group"
-msgstr "Groupo"
-
-msgid "Subscription"
-msgstr "Abono"
-
-msgid "Both"
-msgstr "Ambaŭ"
-
-msgid "From"
-msgstr "De"
-
-msgid "Everybody"
-msgstr "Ĉiuj"
-
-msgid "Send messages"
-msgstr "Sendi mesaĝojn"
-
-msgid "Send queries"
-msgstr "Sendi petojn"
-
-msgid "See my status"
-msgstr "Vidi mia stato"
-
-msgid "Send his/her status"
-msgstr "Sendi lia/ŝia staton"
-
-msgid "Everything"
-msgstr "Ĉio"
-
-msgid "Item"
-msgstr "Elemento"
-
-msgid "Order"
-msgstr "Ordo"
-
-msgid "Active for this session"
-msgstr "Aktiva por tiu seanco"
-
-msgid "Always active"
-msgstr "Ĉiam aktiva"
-
-msgid "User directory"
-msgstr "Jarlibro de uzantoj"
-
-msgid "Search a friend"
-msgstr "Serĉi amikon"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-"La petita funkcio ne estas efektivigita de la ricevinto aŭ servilo kaj sekve "
-"ne povas esti pretigita."
-
-msgid "Send him/her a message"
-msgstr "Sendi mesaĝon al li/ŝi"
-
-msgid "Start a chat with him/her"
-msgstr "Komenci babilon kun li/ŝi"
-
-msgid "Available shortcuts:"
-msgstr "Haveblaj fulmoklavoj:"
-
-msgid "%s removes the chat logs"
-msgstr "%s forigas la babilemajn protokoldosierojn"
-
-msgid "%s joins a groupchat"
-msgstr "%s aliris retbabilejon"
-
-msgid "%s closes the chat"
-msgstr "%s fermas la babilejon"
-
-msgid "%s shows the user profile"
-msgstr "%s montras la uzantan profilon"
-
-msgid "%s sends a message to the room"
-msgstr "%s sendas mesaĝon al la babilejo"
-
-msgid "%s changes your nickname"
-msgstr "%s ŝanĝas vian kromnomon"
-
-msgid "%s sends a message to someone in the room"
-msgstr "%s sendas mesaĝon al iu en la babilejo"
-
-msgid "%s changes the room topic"
-msgstr "%s ŝanĝas la babilejan subjekton"
-
-msgid "%s kicks a user of the room"
-msgstr ""
-
-msgid "%s bans a user of the room"
-msgstr ""
-
-msgid "%s invites someone to join the room"
-msgstr "%s invitas iun por aliri la babilejon"
-
-msgid "Public profile"
-msgstr ""
-
-msgid "Your profile anywhere on the Web."
-msgstr ""
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-
-msgid "Yay, let's create your public profile!"
-msgstr ""
-
-msgid "Enable my public profile"
-msgstr ""
-
-msgid "Jappix for your phone"
-msgstr ""
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr ""
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-
-msgid "You haven't provided any file to download"
-msgstr ""
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr ""
-
-msgid "Woah this file isn't found, please double check"
-msgstr ""
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr ""
-
-msgid "Statistics are currently disabled in the settings."
-msgstr ""
-
-msgid "New event!"
-msgstr ""
-
-msgid "%s is typing..."
-msgstr ""
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-
-msgid "Username"
-msgstr ""
-
-msgid "Enter password"
-msgstr ""
-
-msgid "Once again..."
-msgstr ""
-
-msgid "Code"
-msgstr ""
-
-msgid "Security code"
-msgstr ""
-
-msgid "Advertising space available!"
-msgstr ""
-
-msgid "Advertise here"
-msgstr ""
-
-msgid "Analytics (%s)"
-msgstr ""
-
-msgid "Track visits"
-msgstr ""
-
-msgid "Piwik URL"
-msgstr ""
-
-msgid "Piwik tracking ID"
-msgstr ""
-
-msgid "Advertising (%s)"
-msgstr ""
-
-msgid "Enable ads"
-msgstr ""
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "Content ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "Mute"
-msgstr ""
-
-msgid "Unmute"
-msgstr ""
-
-msgid "Is calling you"
-msgstr ""
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr ""
-
-msgid "Waiting..."
-msgstr ""
-
-msgid "Ringing..."
-msgstr ""
-
-msgid "Declined the call"
-msgstr ""
-
-msgid "Call error"
-msgstr ""
-
-msgid "Ended the call"
-msgstr ""
-
-msgid "Call ended"
-msgstr ""
-
-msgid "Call canceled"
-msgstr ""
-
-msgid "Canceled the call"
-msgstr ""
-
-msgid "Is already in a call"
-msgstr ""
-
-msgid "Ending call..."
-msgstr ""
-
-msgid "Accept"
-msgstr ""
-
-msgid "Decline"
-msgstr ""
-
-msgid "Okay"
-msgstr ""
-
-msgid "Retry"
-msgstr ""
-
-msgid "Audio Call"
-msgstr ""
-
-msgid "Video Call"
-msgstr ""
diff --git a/i18n/es/LC_MESSAGES/main.mo b/i18n/es/LC_MESSAGES/main.mo
deleted file mode 100644
index 2a021ff8..00000000
--- a/i18n/es/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/es/LC_MESSAGES/main.po b/i18n/es/LC_MESSAGES/main.po
deleted file mode 100644
index b45a3eb4..00000000
--- a/i18n/es/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2414 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-# dpatricio <dani@dominiosvm.es>, 2013
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:20+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Spanish (http://www.transifex.com/projects/p/jappix/language/"
-"es/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: es\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "default:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"Javascript no se encuentra activado en tu navegador, de modo que no podrás "
-"poner en marcha Jappix! Por favor, corrige esto."
-
-msgid "Social channel, chat and more."
-msgstr "Red social, chat y mucho más."
-
-msgid "Create your public profile."
-msgstr "Crear tu perfil público."
-
-msgid "A mini-chat for your website."
-msgstr "Un mini-chat para tu web."
-
-msgid "Get Jappix, get support."
-msgstr ""
-
-msgid "Statistics around Jappix."
-msgstr "Estadísticas sobre Jappix."
-
-msgid "Legal disclaimer for Jappix."
-msgstr "Aviso Legal de Jappix."
-
-msgid "Download Jappix for free."
-msgstr "Descarga Jappix gratis."
-
-msgid "Contribute to the Jappix code."
-msgstr "Contribuir con el código Jappix."
-
-msgid "Jappix for your company."
-msgstr "Jappix para su empresa."
-
-msgid "Find a public Jappix node."
-msgstr "Buscar un nodo público Jappix."
-
-msgid "Credits"
-msgstr "Créditos"
-
-msgid "Association"
-msgstr "Asociación"
-
-msgid "Web agency"
-msgstr "Agencia web"
-
-msgid "Legal"
-msgstr "Legal"
-
-msgid "Legal disclaimer"
-msgstr "Aviso legal"
-
-msgid "Terms of use and legal"
-msgstr "Condiciones de uso y legales"
-
-msgid "Owner"
-msgstr "Propietario"
-
-msgid "Node owner"
-msgstr "Propietario del nodo"
-
-msgid "By using our service, you accept %s."
-msgstr "Al utilizar nuestro servicio, aceptas %s."
-
-msgid "our terms of use"
-msgstr "nuestras condiciones de uso"
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Jappix ha sido interrumpido por un problema de red, un fallo o un acceso "
-"incorrecto (comprueba que has introducido las credenciales correctas). "
-"Lamentamos el inconveniente."
-
-msgid "The element list on this server could not be obtained!"
-msgstr "¡No se pudo conseguir la lista de elementos de este servidor!"
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"Tu contraseña ha sido cambiada, ahora puedes conectarte a tu cuenta con los "
-"nuevos datos de acceso."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "Tu cuenta XMPP ha sido suprimida... ¡Adiós!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "Ya saliste de tu cuenta de XMPP, ¡que disfrutes el resto del día!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr "La sala a la que te has unido no existe. ¡La deberías crear primero!"
-
-msgid "The groupchat has been removed."
-msgstr ""
-"El grupo de charla ha sido eliminado, ahora culquiera puede volver a crearla."
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "El usuario no se encuentra en esta sala."
-
-msgid "Please enter the group chat address to join."
-msgstr "Escribe el nombre de la sala donde quieres entrar."
-
-msgid "Please enter your nickname to join %s."
-msgstr "¿Qué apodo quieres tener en la sala %s?"
-
-msgid "This room (%s) is protected with a password."
-msgstr "La sala %s está protegida por una clave."
-
-msgid "Your browser is out of date!"
-msgstr "¡Necesita actualizar tu navegador!"
-
-msgid "Last %s version is better!"
-msgstr "¡La última versión de %s es mejor!"
-
-msgid "Login"
-msgstr "Acceder"
-
-msgid "Register"
-msgstr "Registrarse"
-
-msgid "Here we go!"
-msgstr "¡Allá vamos!"
-
-msgid "Server"
-msgstr "Servidor"
-
-msgid "Password"
-msgstr "Contraseña"
-
-msgid "Remember me"
-msgstr "Recordarme"
-
-msgid "This tool has been disabled!"
-msgstr "No se puede usar esta herramienta porque no está activada."
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr ""
-"Debido a un problema de red, se le ha desconectado. ¿Qué quieres hacer ahora?"
-
-msgid "Reconnect"
-msgstr "Volver a conectar"
-
-msgid "Messages"
-msgstr "Mensajes"
-
-msgid "Profile"
-msgstr "Perfil"
-
-msgid "Options"
-msgstr "Opciones"
-
-msgid "Disconnect"
-msgstr "Desconectar"
-
-msgid "Filter"
-msgstr "Filtro"
-
-msgid "Add a friend"
-msgstr "Agregar a un amigo"
-
-msgid "Your groupchats"
-msgstr "Tus salas de conversación"
-
-msgid "Manage your favorite groupchats"
-msgstr "Gestiona tus grupos de chat favoritos"
-
-msgid "More stuff"
-msgstr "Más cosas"
-
-msgid "Show all friends"
-msgstr "Mostrar a todos los amigos"
-
-msgid "Only show connected friends"
-msgstr "Mostrar sólo a los amigos conectados"
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "Archivos de mensajes"
-
-msgid "Date"
-msgstr "Fecha"
-
-msgid "A short message?"
-msgstr "¿Un mensaje corto?"
-
-msgid "How are you?"
-msgstr "¿Cómo estás?"
-
-msgid "What are you doing?"
-msgstr "¿Qué estás haciendo?"
-
-msgid "Join a chat"
-msgstr "Unirse al chat"
-
-msgid "Status"
-msgstr "Estado"
-
-msgid "Available"
-msgstr "Disponible"
-
-msgid "Talkative"
-msgstr "Hablador"
-
-msgid "Away"
-msgstr "Ausente"
-
-msgid "Not available"
-msgstr "No disponible"
-
-msgid "Busy"
-msgstr "Ocupado"
-
-msgid "Offline"
-msgstr "Desconectado"
-
-msgid "Mood"
-msgstr "Humor"
-
-msgid "None"
-msgstr "Ninguno"
-
-msgid "Crazy"
-msgstr "Loco"
-
-msgid "Excited"
-msgstr "Excitado"
-
-msgid "Playful"
-msgstr "Juguetón"
-
-msgid "Happy"
-msgstr "Feliz"
-
-msgid "Shocked"
-msgstr "Conmocionado"
-
-msgid "Hot"
-msgstr "Caliente"
-
-msgid "Sad"
-msgstr "Triste"
-
-msgid "Amorous"
-msgstr "Amoroso"
-
-msgid "Confident"
-msgstr "Seguro"
-
-msgid "Activity"
-msgstr "Actividad"
-
-msgid "Chores"
-msgstr "Tareas"
-
-msgid "Drinking"
-msgstr "Bebiendo"
-
-msgid "Eating"
-msgstr "Comiendo"
-
-msgid "Exercising"
-msgstr "Haciendo ejercicio"
-
-msgid "Grooming"
-msgstr "Aseando"
-
-msgid "Appointment"
-msgstr "Cita"
-
-msgid "Inactive"
-msgstr "Inactivos"
-
-msgid "Relaxing"
-msgstr "Relajando"
-
-msgid "Talking"
-msgstr "Hablando"
-
-msgid "Traveling"
-msgstr "Viajando"
-
-msgid "Working"
-msgstr "Trabajando"
-
-msgid "View profile"
-msgstr "Ver el perfil"
-
-msgid "This is a repeat from %s"
-msgstr ""
-
-msgid "Repeat this notice"
-msgstr "Repetir este aviso"
-
-msgid "Remove this notice"
-msgstr "Eliminar este aviso"
-
-msgid "Your profile"
-msgstr "Tu perfil"
-
-msgid "Identity"
-msgstr "Identidad"
-
-msgid "Profile image"
-msgstr "Imagen del perfil"
-
-msgid "Others"
-msgstr "Otros"
-
-msgid "Other"
-msgstr "Otro"
-
-msgid "Personal"
-msgstr "Personal"
-
-msgid "Complete name"
-msgstr "Nombre completo"
-
-msgid "Nickname"
-msgstr "Apodo"
-
-msgid "First name"
-msgstr "Nombre"
-
-msgid "Last name"
-msgstr "Apellido"
-
-msgid "Date of birth"
-msgstr "Fecha de nacimiento"
-
-msgid "Contact"
-msgstr "Contacto"
-
-msgid "E-mail"
-msgstr "E-mail"
-
-msgid "Phone"
-msgstr "Teléfono"
-
-msgid "Website"
-msgstr "Sitio web"
-
-msgid "Current"
-msgstr "Actual"
-
-msgid "Delete"
-msgstr "Borrar"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr "Qué pena, no tienes imagen en tu tarjeta de visita..."
-
-msgid "Address"
-msgstr "Dirección"
-
-msgid "Street"
-msgstr "Calle"
-
-msgid "City"
-msgstr "Ciudad"
-
-msgid "Postal code"
-msgstr "Código postal"
-
-msgid "Country"
-msgstr "País"
-
-msgid "Biography"
-msgstr "Biografía"
-
-msgid "Important notice"
-msgstr "Aviso importante"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-"Ten cuidado con la información que guardas en tu perfil, porque puede ser "
-"visible por cualquiera (incluso alguien que no quieras que la vea)."
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr "No todo es privado en XMPP. Por ejemplo tu tarjeta de visita no lo es."
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"Es muy recomendable subir una imagen de perfil (máximo %s), como una imagen "
-"de ti mismo, para que tus amigos te reconozcan fácilmente."
-
-msgid "Save"
-msgstr "Guardar"
-
-msgid "Cancel"
-msgstr "Cancelar"
-
-msgid "Edit options"
-msgstr "Editar opciones"
-
-msgid "Channel"
-msgstr "Canal"
-
-msgid "Commands"
-msgstr "Comandos"
-
-msgid "Sounds"
-msgstr "Sonidos"
-
-msgid "Privacy"
-msgstr "Privacidad"
-
-msgid "Message archiving"
-msgstr "Archivado de mensajes"
-
-msgid "Store an history of your chats"
-msgstr "Guardar historial de tus chats"
-
-msgid "Geolocation"
-msgstr "Geolocalización"
-
-msgid "Disabled"
-msgstr "Desactivado"
-
-msgid "Store all chats"
-msgstr "Guardar todos los chats"
-
-msgid "Store friend chats"
-msgstr "Guardar chats de amigos"
-
-msgid "Remove all archives"
-msgstr "Eliminar todos los archivos"
-
-msgid "Empty"
-msgstr "Vaciar"
-
-msgid "Empty channel"
-msgstr "Canal vacío"
-
-msgid "Persistent"
-msgstr "Persistente"
-
-msgid "Maximum notices"
-msgstr "Máximo de avisos"
-
-msgid "Account"
-msgstr "Cuenta"
-
-msgid "Change password"
-msgstr "Cambiar la contraseña"
-
-msgid "Delete account"
-msgstr "Eliminar cuenta"
-
-msgid "Old"
-msgstr "Antigua"
-
-msgid "New (2 times)"
-msgstr "Nueva (2 veces)"
-
-msgid "Suggested chatrooms"
-msgstr "Salas sugeridas"
-
-msgid "Skip"
-msgstr ""
-
-msgid "Continue"
-msgstr "Continuar"
-
-msgid "To"
-msgstr "A"
-
-msgid "Close"
-msgstr "Cerrar"
-
-msgid "unknown"
-msgstr "desconocido"
-
-msgid "Unavailable"
-msgstr "No disponible"
-
-msgid "is now"
-msgstr "es ahora"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Por favor espera mientras se carga tu avatar..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "Ya está! Una nueva y bonita imagen en tu tarjeta de visita!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "No se maneja este tipo de imagen, o tal vez sea un problema de tamaño."
-
-msgid "Reply"
-msgstr "Responder"
-
-msgid "Error"
-msgstr "Error"
-
-msgid "Click here to solve the error"
-msgstr "Dale clic aquí para solucionar el problema"
-
-msgid "You"
-msgstr "Tú"
-
-msgid "Remove"
-msgstr "Eliminar"
-
-msgid "Rename"
-msgstr "Renombrar"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Hola, soy %s. Me gustaría tenerte como amigo en mi lista."
-
-msgid "Smiley insertion"
-msgstr "Inserción de emoticono"
-
-msgid "Change style"
-msgstr "Cambio de estilo"
-
-msgid "Text in bold"
-msgstr "Texto en negrita"
-
-msgid "Text in italic"
-msgstr "Texto en cursiva"
-
-msgid "Underlined text"
-msgstr "Texto subrayado"
-
-msgid "Send a file"
-msgstr "Enviar un archivo"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr "Una vez enviado, tu amigo recibirá un aviso para descargarlo."
-
-msgid "Save chat"
-msgstr "Chat guardado"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"Haz click en el siguiente enlace para guardar la conversación, y espera un "
-"momento. Luego haz click de nuevo para descargar el archivo."
-
-msgid "This chat is empty!"
-msgstr "¡La sala está vacía!"
-
-msgid "Generate file!"
-msgstr "¡Generar archivo!"
-
-msgid "Download file!"
-msgstr "¡Bajar el archivo!"
-
-msgid "Clean current chat"
-msgstr "Limpieza del chat"
-
-msgid "Show user profile"
-msgstr "Visualizar el perfil del usuario"
-
-msgid "Add this contact to your friends"
-msgstr "Añadir a este contacto como amigo"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Añadir este grupo de chat a tus favoritos"
-
-msgid "All tabs"
-msgstr "Todas las pestañas"
-
-msgid "Join groupchat"
-msgstr ""
-
-msgid "Close this tab"
-msgstr "Cerrar esta pestaña"
-
-msgid "no subject defined for this room."
-msgstr "no se especificó un tema para esta sala."
-
-msgid "Administration panel for this room"
-msgstr "Panel de administración de la sala"
-
-msgid "Moderators"
-msgstr "Moderadores"
-
-msgid "Participants"
-msgstr "Participantes"
-
-msgid "Visitors"
-msgstr "Visitantes"
-
-msgid "Manage favorite rooms"
-msgstr "Organiza tus salas favoritas"
-
-msgid "Change favorites"
-msgstr "Cambiar tus favoritos"
-
-msgid "Search a room"
-msgstr "Buscar una sala"
-
-msgid "Select a favorite"
-msgstr "Seleccionar un favorito"
-
-msgid "Getting the name..."
-msgstr "Consiguiendo el nombre..."
-
-msgid "Gateway"
-msgstr "Pasarela"
-
-msgid "Name"
-msgstr "Nombre"
-
-msgid "Room"
-msgstr "Sala"
-
-msgid "Add"
-msgstr "Añadir"
-
-msgid "Edit"
-msgstr "Editar"
-
-msgid "Search a room on"
-msgstr "Buscar una sala en"
-
-msgid "No room found on this server."
-msgstr "No se encontraron salas en este servidor."
-
-msgid "Service discovery"
-msgstr "Descubrir servicios"
-
-msgid "Server to query"
-msgstr "Servidor que consultar"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "Esta entidad no mandó ningún resultado..."
-
-msgid "Accounts"
-msgstr "Cuentas"
-
-msgid "Authentications"
-msgstr "Autentificaciones"
-
-msgid "Automation"
-msgstr "Automatización"
-
-msgid "Clients"
-msgstr "Clientes"
-
-msgid "Collaboration"
-msgstr "Colaboración"
-
-msgid "Components"
-msgstr "Componentes"
-
-msgid "Rooms"
-msgstr "Salas"
-
-msgid "Directories"
-msgstr "Directorios"
-
-msgid "Gateways"
-msgstr "Pasarelas"
-
-msgid "News"
-msgstr "Noticias"
-
-msgid "Hierarchy"
-msgstr "Jerarquía"
-
-msgid "Proxies"
-msgstr "Servidores proxy"
-
-msgid "Publication/Subscription"
-msgstr "Publicación/Suscripción"
-
-msgid "Storage"
-msgstr "Almacenamiento"
-
-msgid "Service offline or broken"
-msgstr "Servidor fuera de línea o roto"
-
-msgid "Your inbox"
-msgstr "Tu bandeja de entrada"
-
-msgid "Available actions"
-msgstr "Acciones disponibles"
-
-msgid "Clean"
-msgstr "Limpiar"
-
-msgid "New"
-msgstr "Nuevo"
-
-msgid "Received"
-msgstr "Recibido"
-
-msgid "Subject"
-msgstr "Asunto"
-
-msgid "Content"
-msgstr "Contenido"
-
-msgid "Send message"
-msgstr "Enviar mensaje"
-
-msgid "Your inbox is empty."
-msgstr "Tu bandeja de entrada está vacía"
-
-msgid "MUC administration"
-msgstr "Administración de MUC"
-
-msgid "You administrate this room"
-msgstr "Tú administras esta sala"
-
-msgid "Enter new subject"
-msgstr "Introduce el nuevo asunto"
-
-msgid "Configuration"
-msgstr "Configuración"
-
-msgid "Authorizations"
-msgstr "Autorizaciones"
-
-msgid "Member list"
-msgstr "Lista de miembros"
-
-msgid "Owner list"
-msgstr "Lista de propietarios"
-
-msgid "Administrator list"
-msgstr "Lista de administradores"
-
-msgid "Outcast list"
-msgstr "Lista de rechazados"
-
-msgid "Add an input"
-msgstr "Añadir una entrada"
-
-msgid "Destroy this MUC"
-msgstr "Destruir este MUC"
-
-msgid "Yes, let's do it!"
-msgstr "Sí, ¡hagámoslo!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "Tu amigo está prestando atención a la conversación."
-
-msgid "Your friend is writing a message..."
-msgstr "Tu amigo está escribiendo un mensaje..."
-
-msgid "Your friend stopped writing a message."
-msgstr "Tu amigo dejó de escribir un mensaje."
-
-msgid "Your friend is doing something else."
-msgstr "Tu amigo está haciendo otra cosa."
-
-msgid "Your friend closed the chat."
-msgstr "Tu amigo cerró el chat."
-
-msgid "Requesting this service..."
-msgstr "Solicitando este servicio..."
-
-msgid "Loading"
-msgstr "Cargando"
-
-msgid "changed his/her nickname to %s"
-msgstr "cambió su nick por %s"
-
-msgid "joined the chat room"
-msgstr "se unió al chat"
-
-msgid "left the chat room"
-msgstr "ha dejado el chat"
-
-msgid "%s left"
-msgstr "quedan %s"
-
-msgid "%s joined"
-msgstr "%s se unió"
-
-msgid "no status"
-msgstr "no tiene estado"
-
-msgid "has been kicked"
-msgstr "ha sido expulsado"
-
-msgid "has been banned"
-msgstr "ha sido prohibido"
-
-msgid "no reason"
-msgstr "ninguna razón"
-
-msgid "Communicate with the entire world!"
-msgstr "¡Comunícate con el mundo entero!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-"Jappix es una red social abierta, que te permite fácilmente permanecer en "
-"contacto con todo el mundo."
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-"Te permite mantenerte en contacto con los millones de usuarios que en la "
-"actualidad usan la red XMPP como tú con Jappix. ¡Únete a la comunidad y "
-"sigue libre!"
-
-msgid "Hi there!"
-msgstr "¡Hola!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr "Entra a tu cuenta de XMPP existente, o crea una nueva!"
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-"Por tu seguridad, al entrar o registrarte, asegúrate de que tu contraseña "
-"permanece segura."
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-"Entra a tu cuenta de XMPP existente. También se puede usar el %s para entrar "
-"a una sala de charla."
-
-msgid "Previous"
-msgstr "Atrás"
-
-msgid "General"
-msgstr "General"
-
-msgid "Advanced"
-msgstr "Avanzado"
-
-msgid "Resource"
-msgstr "Recurso"
-
-msgid "Priority"
-msgstr "Prioridad"
-
-msgid "Low"
-msgstr "Bajo"
-
-msgid "Medium"
-msgstr "Medio"
-
-msgid "High"
-msgstr "Alto"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-"Introduce el grupo de chat al que deseas unirte y el nick que quieres tener. "
-"También puedes volver a la %s."
-
-msgid "login page"
-msgstr "Página de acceso"
-
-msgid "Share this link with your friends:"
-msgstr "Comparte este enlace con tus amigos"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-"Crea una nueva cuenta XMPP para unirte a tus amigos en vuestra propia nube "
-"social. ¡Es fácil!"
-
-msgid "Required"
-msgstr "Requerido"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "Ya creaste tu cuenta, aquí viene tu dirección de XMPP:"
-
-msgid "Manager"
-msgstr "Gerente"
-
-msgid "Encrypted"
-msgstr "Encriptado"
-
-msgid "Unencrypted"
-msgstr "No cifrado."
-
-msgid "Where are you?"
-msgstr "¿Dónde estás?"
-
-msgid "What's up with you?"
-msgstr "¿Que pasa contigo?"
-
-msgid "Type something you want to share with your friends..."
-msgstr "Escribe algo que quieras compartir con tus amigos..."
-
-msgid "Fetching the social channel..."
-msgstr "Consiguiendo el canal social..."
-
-msgid "You are synchronized with your network."
-msgstr "Estás sincronizadx con tu red."
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "No puedes enviar nada: ¡solo puedes recibir avisos!"
-
-msgid "Media viewer"
-msgstr "Visor de medios"
-
-msgid "Browse"
-msgstr "Examinar"
-
-msgid "Command"
-msgstr "Comando"
-
-msgid "Subscribe"
-msgstr "Suscribirse"
-
-msgid "Join"
-msgstr "Unirse"
-
-msgid "Automatic"
-msgstr "Automático"
-
-msgid "Search"
-msgstr "Buscar"
-
-msgid "No result!"
-msgstr "¡Sin resultados!"
-
-msgid "No notifications."
-msgstr "Ninguna notificación."
-
-msgid "would like to add you as a friend."
-msgstr "le gustaría añadirte como amigo/a."
-
-msgid "would like you to join this chatroom:"
-msgstr "le gustaría que te unieras a esta sala:"
-
-msgid "Do you accept?"
-msgstr "¿Aceptas?"
-
-msgid "Yes"
-msgstr "Si"
-
-msgid "No"
-msgstr "No"
-
-msgid "would like to get authorization."
-msgstr "quisiera tener autorización de ver tu estado."
-
-msgid "would like to send you a file: “%s”."
-msgstr "quiere enviarte un archivo: “%s“."
-
-msgid "has received a file exchange request: “%s”."
-msgstr "ha recibido una solicitud para compartir un archivo: “%s”."
-
-msgid "has accepted to receive your file: “%s”."
-msgstr "ha aceptado tu archivo: “%s”."
-
-msgid "has rejected to receive your file: “%s”."
-msgstr "ha rechazado recibir tu archivo: “%s”."
-
-msgid "could not receive your file: “%s”."
-msgstr "no pudo recibir tu archivo: “%s”."
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr "¿Quiere ver las amistades que %s te sugiere?"
-
-msgid "commented an item you follow: “%s”."
-msgstr "comentó un asunto que sigues: “%s”."
-
-msgid "liked your post: “%s”."
-msgstr "le gusta tu comentario: “%s”."
-
-msgid "quoted you somewhere: “%s”."
-msgstr "te ha mencionado en algún sitio: “%s”."
-
-msgid "published on your wall: “%s”."
-msgstr "publicó en tu muro: “%s”."
-
-msgid "tagged you in a photo (%s)."
-msgstr "te etiquetó en una foto (%s)."
-
-msgid "tagged you in a video (%s)."
-msgstr "te etiquetó en un vídeo (%s)."
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-"ha validado tu cuenta. En breves momentos estará disponible tu perfil "
-"público."
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-"ha eliminado tu perfil público a petición tuya. ¡Te echaremos de menos!"
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-"ha guardado la configuración de tu perfil público. En breves momentos se "
-"aplicará."
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-"no ha podido validar tu cuentar para crear o actualizar tu perfil público. "
-"Comprueba tus credenciales."
-
-msgid "Open"
-msgstr "Abrir"
-
-msgid "Show"
-msgstr "Mostrar"
-
-msgid "Hide"
-msgstr "Ocultar"
-
-msgid "Submit"
-msgstr "Enviar"
-
-msgid "Client"
-msgstr "Cliente"
-
-msgid "System"
-msgstr "Sistema"
-
-msgid "Local time"
-msgstr "Hora local"
-
-msgid "Comments"
-msgstr "Comentarios"
-
-msgid "User profile"
-msgstr "Perfil de usuaria/o"
-
-msgid "See his/her position on the globe"
-msgstr "Ver su ubicación el el mapa mundial"
-
-msgid "Confirm"
-msgstr "Confirmar"
-
-msgid "anonymous mode"
-msgstr "modo anónimo"
-
-msgid "Groups"
-msgstr "Grupos"
-
-msgid "Unclassified"
-msgstr "Sin clasificar"
-
-msgid "Authorize"
-msgstr "Autorizar"
-
-msgid "Ask for authorization"
-msgstr "Pedir autorización"
-
-msgid "Unblock"
-msgstr "Desbloquear"
-
-msgid "Prohibit"
-msgstr "Prohibir"
-
-msgid "Block"
-msgstr "Bloque"
-
-msgid "Chat"
-msgstr "Chat"
-
-msgid "Groupchat"
-msgstr "Chat en grupo"
-
-msgid "Jappix Mobile"
-msgstr "Jappix Móvil"
-
-msgid "Desktop"
-msgstr "Escritorio"
-
-msgid "Mobile"
-msgstr "Móvil"
-
-msgid "Please wait..."
-msgstr "Por favor, espera..."
-
-msgid "Please enable JavaScript"
-msgstr "Por favor, habilita JavaScript"
-
-msgid "Show comments"
-msgstr "Ver comentarios"
-
-msgid "Loading comments..."
-msgstr "Cargando comentarios..."
-
-msgid "Could not get the comments!"
-msgstr "¡No se pudieron cargar los comentarios!"
-
-msgid "Comments locked!"
-msgstr "¡Comentarios bloqueados!"
-
-msgid "Type your comment here..."
-msgstr "Escribe aquí tu comentario..."
-
-msgid "Your channel"
-msgstr "Tu canal"
-
-msgid "Channel of"
-msgstr "Canal de"
-
-msgid "More notices..."
-msgstr "Más avisos..."
-
-msgid "Attach a file"
-msgstr "Adjuntar un archivo"
-
-msgid "Send"
-msgstr "Enviar"
-
-msgid "Unattach the file"
-msgstr "Ya no adjuntar el archivo"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-"Hubo un error al tratar de enviar tu archivo: a lo mejor pesa demasiado (el "
-"máximo es %s), o está prohibido!"
-
-msgid "Authorization failed"
-msgstr "Falló la autorización"
-
-msgid "Registration failed, please choose a different username"
-msgstr "Falló el registro, por favor, elije otro nombre de usuario"
-
-msgid "Service unavailable"
-msgstr "Servicio no disponible"
-
-msgid "Internal server error, try later"
-msgstr "Error interno del servidor, intentar más tarde"
-
-msgid "Your form has been sent."
-msgstr "Ya se envió tu formulario."
-
-msgid "Application"
-msgstr "Aplicación"
-
-msgid "Media integration"
-msgstr "Integración multimedia"
-
-msgid "Keep local chat archives"
-msgstr ""
-
-msgid "XMPP links"
-msgstr "Enlaces XMPP"
-
-msgid "Open XMPP links with Jappix"
-msgstr "Abrir enlaces XMPP con Jappix"
-
-msgid "changed the subject to:"
-msgstr "asunto cambiado a:"
-
-msgid "Welcome!"
-msgstr "¡Bienvenido!"
-
-msgid "Friends"
-msgstr "Amigos"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr ""
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-"Antes de que lo empiezes a usar, tendrás que cambiar unos parametros, buscar "
-"a amigxs, y completar tu perfil."
-
-msgid "Enable notification sounds"
-msgstr "Habilitar notificación por sonidos"
-
-msgid "Share your position on the globe"
-msgstr "Comparte tu ubicación geográfica"
-
-msgid "Offline friends"
-msgstr "Amigos fuera de línea"
-
-msgid "Don't hide offline friends"
-msgstr "Que aparezcan mis amigos no conectados"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-"Usa esta herramienta para encontrar a tus amigos en el servidor que estás "
-"usando ahora mismo, o añádelos más tarde."
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr "Muy bien! Ahora puedes compartir Jappix con tus amigxs!"
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-"Cuando uses el botón “Guardar”, el editor de perfil se abrirá. ¡Te deseamos "
-"buena socialización!"
-
-msgid "Share Jappix on %s"
-msgstr "Comparte Jappix en %s"
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "Soy %s, y estoy usando Jappix, una plataforma social abierta."
-
-msgid "Unknown name"
-msgstr "Nombre desconocido"
-
-msgid "Unknown country"
-msgstr "País desconocido"
-
-msgid "Click to enable"
-msgstr "Haz click para habilitar"
-
-msgid "Click to disable"
-msgstr "Haz click para deshabilitar"
-
-msgid "Installation"
-msgstr "Instalación"
-
-msgid "Jappix installation"
-msgstr "Instalación de Jappix"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "¡Bienvenido a la instalación de Jappix!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-"Esta herramienta te ayudará a instalar Jappix más rápidamente, la primera "
-"plataforma social con todas las funciones y basada en XMPP, en tu servidor. "
-"Ni siquiera necesitas conocimientos técnicos."
-
-msgid "Installation Steps:"
-msgstr "Vamos a ver los pasos de instalación:"
-
-msgid "Welcome"
-msgstr "Bienvenido"
-
-msgid "Storage configuration"
-msgstr "Configuración de almacenamiento"
-
-msgid "Administrator account"
-msgstr "Cuenta de administrador"
-
-msgid "Main configuration"
-msgstr "Configuración principal"
-
-msgid "Hosts configuration"
-msgstr "Configuración de los huéspedes"
-
-msgid "Services installation"
-msgstr "Instalación de servicios"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-"Si el idioma actual no coincide con el tuyo (%1s), puedes hacer que Jappix "
-"hable en %2s. Esta opción se guardará."
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"Si deseas obtener ayuda sobre la instalación y configuración de Jappix, "
-"puedes utilizar toda nuestra documentación, disponible en:"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-"Es hora de construir nuestra propia nube social: ¡solo tienes que ir al "
-"siguiente paso! "
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr "La carpeta es escribible, ¡puedes continuar!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-"Jappix te ofrece la posibilidad de gestionar tu configuración, instalar "
-"nuevos plugins y buscar actualizaciones. Por eso tienes que crear una cuenta "
-"de administración para acceder al gerente."
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-"Cuando Jappix esté instalado, basta con hacer clic en el enlace de gerente "
-"en la página principal para acceder."
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr "Uy, ¡se olvidó algo o las dos contraseñas no coinciden!"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-"Jappix necesita que especifiques algunos valores para trabajar. Por favor, "
-"corrije las siguientes entradas (o mantén los valores por defecto, que "
-"bastan para la mayoría de la gente)."
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-"Ten en cuenta que si no especificas un valor que es obligatorio, se "
-"completará automáticamente con la opción por defecto."
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-"¿Necesitas ayuda? ¡Deberías consultar nuestra documentación para rellenar "
-"este formulario!"
-
-msgid "User"
-msgstr "Usuario"
-
-msgid "Service"
-msgstr "Servicio"
-
-msgid "Service name"
-msgstr "Nombre del servicio"
-
-msgid "Service description"
-msgstr "Descripción del servicio"
-
-msgid "Owner name"
-msgstr "Nombre del propietario"
-
-msgid "Owner website"
-msgstr "Web del propietario"
-
-msgid "Connection"
-msgstr "Conexión"
-
-msgid "Lock the host"
-msgstr "Bloquear el anfitrión "
-
-msgid "Anonymous mode"
-msgstr "Modo anónimo"
-
-msgid "HTTP authentication"
-msgstr "Autenticación HTTP"
-
-msgid "Registration allowed"
-msgstr "Permitir la creación de cuentas"
-
-msgid "Use the built-in BOSH proxy"
-msgstr "Usar el proxy BOSH incluido"
-
-msgid "Manager link"
-msgstr "Gestor de enlaces"
-
-msgid "Groupchats to join"
-msgstr "Chats de grupo para unirse"
-
-msgid "Suggest groupchats"
-msgstr "Grupos sugeridos"
-
-msgid "Encryption"
-msgstr "Cifrado"
-
-msgid "HTTPS storage"
-msgstr "Almacenamiento con HTTPS"
-
-msgid "Force HTTPS"
-msgstr "Forzar el uso de HTTPS"
-
-msgid "Compression"
-msgstr "Compresión"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"Esta página te ayuda a especificar los hosts por defecto a los que Jappix se "
-"conectará. Puedes dejarlo como está y continuar si quieres usar los hosts "
-"oficiales del servicio."
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"Quizá no sepas lo que es un servidor BOSH. De hecho, hay un enlace entre un "
-"cliente Jappix y un servidor XMPP, que es necesario debido a limitaciones "
-"técnicas."
-
-msgid "Main host"
-msgstr "Host principal"
-
-msgid "Groupchat host"
-msgstr "Host de chat en grupo"
-
-msgid "Pubsub host"
-msgstr "Host pubsub"
-
-msgid "Anonymous host"
-msgstr "Host anónimo"
-
-msgid "Directory host"
-msgstr "Host directorio"
-
-msgid "BOSH host"
-msgstr "Host BOSH"
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-"Puedes instalar algunos programas adicionales en tu servidor, para ampliar "
-"las funciones de Jappix. Otros podrían ser modificados, debido a las "
-"restricciones de seguridad que se establecen de forma predeterminada."
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-"Para realizar esto, debes poder acceder al shell de tu servidor e iniciar "
-"una sesión como root. Recuerda que esto es facultativo, Jappix funcionará "
-"sin estos módulos, pero algunas de sus características no estarán "
-"disponibles."
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-"Después de terminar la instalación, Jappix generará los archivos de cache. "
-"Puede ser lento, sólo tienes que esperar hasta que se muestre la aplicación, "
-"sin presionar ningún botón."
-
-msgid "Thanks for using Jappix!"
-msgstr "¡Gracias por usar Jappix!"
-
-msgid "Next"
-msgstr "Siguiente"
-
-msgid "Finish"
-msgstr "Terminar"
-
-msgid "Check again"
-msgstr "Comprobar otra vez"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-"La carpeta no tiene permisos de escritura, configura correctamente los "
-"permisos al directorio %s."
-
-msgid "%s is installed on your system."
-msgstr "%s está instalado en tu sistema."
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s no está instalado en tu sistema, debes instalar %2s."
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "El peso máximo de envío que acepta PHP es suficiente (%s)."
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-"El peso máximo de envío que acepta PHP no es suficiente (%1s). Le deberías "
-"indicar un valor de %2s en el archivo %3s."
-
-msgid "Jappix manager"
-msgstr "Gerente de Jappix"
-
-msgid "Manager access"
-msgstr "Administrador de acceso"
-
-msgid "Statistics"
-msgstr "Estadísticas"
-
-msgid "Hosts"
-msgstr "Anfitriones"
-
-msgid "Design"
-msgstr "Diseño"
-
-msgid "Repeat"
-msgstr "Repita"
-
-msgid "All"
-msgstr "Todo"
-
-msgid "Horizontal"
-msgstr "Horizontal"
-
-msgid "Vertical"
-msgstr "Vertical"
-
-msgid "Center"
-msgstr "Centro"
-
-msgid "Left"
-msgstr "Izquierda"
-
-msgid "Right"
-msgstr "Derecha"
-
-msgid "Top"
-msgstr "Arriba"
-
-msgid "Bottom"
-msgstr "Abajo"
-
-msgid "Adapt"
-msgstr "Adaptar"
-
-msgid "Color"
-msgstr "Color"
-
-msgid "Users"
-msgstr "Usuarios"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-"Ésta es un área restringida: sólo los usuarios autorizados pueden gestionar "
-"este nodo Jappix."
-
-msgid "Please use the form below to login to the administration panel."
-msgstr ""
-"Por favor, utiliza el formulario de abajo para acceder al panel de "
-"administración."
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-"Para mejorar la seguridad, las sesiones son limitadas en tiempo y cuando se "
-"cierre el navegador, la sesión se cerrará."
-
-msgid "Credentials"
-msgstr "Credenciales"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "Se ha cerrado la sesión. ¡Adiós!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-"Uy, no ha sido posible reconocerte como administrador válido. Comprueba tus "
-"credenciales!"
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-"Las estadísticas básicas son procesadas por Jappix sobre algunas cosas "
-"importantes, Las puedes encontrar más abajo."
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr "Modifica la configuración de tu nodo Jappix con esta herramienta"
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr "Cambia aquí el host XMPP que utiliza este nodo Jappix."
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-"Todos los archivos de almacenamiento dentro de Jappix se pueden organizar "
-"con esta herramienta: selecciona una carpeta para ir editando su contenido!"
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr "Jappix es totalmente configurable: aquí se puede cambiar su diseño."
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr "Ésta no es una imagen válida, por favor usa PNG, GIF o JPG!"
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr "Imagen no válida, ¡utiliza el formato PNG!"
-
-msgid "The image could not be received, would you mind retry?"
-msgstr "La imagen no se pudo recibir. ¿Sería posible intentarlo nuevamente?"
-
-msgid "Your service logo has been successfully changed!"
-msgstr "¡Tu logo se ha cambiado correctamente!"
-
-msgid "Your image was added to the list!"
-msgstr "¡Tu imagen se agregó a la lista!"
-
-msgid "Changes saved!"
-msgstr "Los cambios han sido guardados!"
-
-msgid "Logo"
-msgstr "Logo"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-"Puedes poner tu propio logo y modificar el que está por defecto. ¡Presta "
-"atención al tamaño y al color princiapl de cada logo!"
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr "Carga cada logo con el tamaño de píxel máximo recomendado."
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-"El formato del logo debe ser PNG. Deja el campo vació para no modificar el "
-"logo."
-
-msgid "Remove this logo"
-msgstr "Quitar este logo"
-
-msgid "View this logo"
-msgstr "Ver este logo"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-"Se puede definir más de un administrador de Jappix. También se puede cambiar "
-"contraseñas."
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-"Actualiza tu nodo de Jappix aquí, o revisa si existe alguna nueva versión. "
-"También aparece información sobre la versión más reciente (en inglés)."
-
-msgid "Access statistics"
-msgstr "Acceder a las estadísticas"
-
-msgid "Share statistics"
-msgstr "Compartir estadísticas"
-
-msgid "Other statistics"
-msgstr "Otras estadísticas"
-
-msgid "January"
-msgstr "Enero"
-
-msgid "February"
-msgstr "Febrero"
-
-msgid "March"
-msgstr "Marzo"
-
-msgid "April"
-msgstr "Abril"
-
-msgid "May"
-msgstr "Mayo"
-
-msgid "June"
-msgstr "Junio"
-
-msgid "July"
-msgstr "Julio"
-
-msgid "August"
-msgstr "Agosto"
-
-msgid "September"
-msgstr "Septiembre"
-
-msgid "October"
-msgstr "Octubre"
-
-msgid "November"
-msgstr "Noviembre"
-
-msgid "December"
-msgstr "Diciembre"
-
-msgid "Monday"
-msgstr "Lunes"
-
-msgid "Tuesday"
-msgstr "Martes"
-
-msgid "Wednesday"
-msgstr "Miércoles"
-
-msgid "Thursday"
-msgstr "Jueves"
-
-msgid "Friday"
-msgstr "Viernes"
-
-msgid "Saturday"
-msgstr "Sábado"
-
-msgid "Sunday"
-msgstr "Domingo"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Archives"
-msgstr ""
-
-msgid "Music"
-msgstr "Música"
-
-msgid "Backgrounds"
-msgstr "Fondos de pantalla"
-
-msgid "Share"
-msgstr "Compartir"
-
-msgid "Background"
-msgstr "Fondo de pantalla"
-
-msgid "Notice"
-msgstr "Aviso"
-
-msgid "Your design preferences have been saved!"
-msgstr "¡Ya se guardaron tus preferencias de diseño!"
-
-msgid "Please check your inputs: something is missing!"
-msgstr "Por favor comprueba los datos introducidos: ¡falta algo!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-"Aquí puedes cambiar el fondo de pantalla de Jappix. Puede ser el color que "
-"quieras, o una imagen. ¡Deja que tu creatividad fluya!"
-
-msgid "Use default background"
-msgstr "Usar el fondo de pantalla por defecto"
-
-msgid "Use your own image"
-msgstr "Usa tu propia imagen"
-
-msgid "Select a background to use and change the display options."
-msgstr ""
-"Seleccione un fondo para usar y modificar las opciones de visualización."
-
-msgid "Use your own color"
-msgstr "Usa tu propio color"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr "Escribe el valor en hexadecimal del color que deseas tener como fondo."
-
-msgid "Manage backgrounds"
-msgstr "Organizar los fondos de pantalla"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-"Aquí puedes agregarle imágenes de fondo a la lista. Gracias por enviar una "
-"imagen válida."
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr "Si deseas quitar algunos fondos, utiliza el navegador a continuación."
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-"Define un aviso de inicio que vean todxs lxs usuarixs. Puede ser una alerta, "
-"un mensaje importante, o una publicidad."
-
-msgid "Simple notice"
-msgstr "Aviso simple "
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-"Este aviso sólo necesita un texto simple para ser visualizado, pero no se "
-"permite código!"
-
-msgid "Advanced notice"
-msgstr "Aviso avanzado"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-"Puedes personalizar tu aviso con código HTML, CSS y Javascript, pero "
-"necesitarás programar el estilo."
-
-msgid "Available updates"
-msgstr "Actualizaciones disponibles"
-
-msgid "What's new?"
-msgstr "¿Qué hay de nuevo?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr ""
-"No se puede escribir en tu carpeta de almacenamiento. Gracias por otorgarle "
-"al servidor los permisos adecuados."
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-"%1s le puede causar problemas al proxy. Por favor, sube el valor de %2s a "
-"%3s."
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-"Estas utilizando una versión de desarrollo de Jappix. Actualizala con "
-"nuestro repositorio ejecutando: %s"
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-"Una nueva versión de Jappix está disponible! Comprueba las novedades y "
-"ejecuta la actualización!"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr ""
-"Esta versión ya no es la más reciente. Actualízala ahora a %s haciendo clic "
-"aquí!"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"Esta versión parece ser la más reciente, pero todavía puedes buscar "
-"actualizaciones manualmente con este enlace."
-
-msgid "Check for updates"
-msgstr "Buscar actualizaciones"
-
-msgid "Update in progress"
-msgstr "Actualización en curso"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr ""
-"Jappix ha sido actualizado: ahora estás ejecutando la última versión. Que te "
-"diviertas!"
-
-msgid "The update has failed! Please try again later."
-msgstr ""
-"La actualización ha fallado! Por favor, inténtalo nuevamente más tarde."
-
-msgid "Downloading package..."
-msgstr "Descargando el paquete..."
-
-msgid "Removing current Jappix system files..."
-msgstr "Eliminación de archivos del sistema actual de Jappix ..."
-
-msgid "Extracting package..."
-msgstr "Extrayendo el paquete..."
-
-msgid "Regenerating storage folder tree..."
-msgstr "Generando otra vez la jerarquía de almacenamiento..."
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix está actualizado!"
-
-msgid "Aborted: socket error!"
-msgstr "Abortada: error de socket!"
-
-msgid "Aborted: buffer error!"
-msgstr "Abortada: Error de buffer!"
-
-msgid "Aborted: everything is not writable!"
-msgstr "Abortada: faltan algunos permisos de escritura!"
-
-msgid "Aborted: could not extract the package!"
-msgstr "Abortado: no se pudo extraer el paquete!"
-
-msgid "Visits"
-msgstr "Visitas"
-
-msgid "Daily"
-msgstr "Diario"
-
-msgid "Weekly"
-msgstr "Semanal"
-
-msgid "Monthly"
-msgstr "Mensual"
-
-msgid "Yearly"
-msgstr "Anual"
-
-msgid "Size"
-msgstr "Tamaño"
-
-msgid "Clean everything"
-msgstr "Limpiar todo"
-
-msgid "Purge cache"
-msgstr "Purgar caché"
-
-msgid "Purge logs"
-msgstr "Purgar registros"
-
-msgid "Purge sent files"
-msgstr "Purgar archivos enviados"
-
-msgid "Purge updates"
-msgstr "Purgar actualizaciones"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "La carpeta de almacenamiento que querías limpiar está vacía ahora!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-"Mantén tu nodo de Jappix fresco y dinámico, limpiando las carpetas de "
-"almacenamiento regularmente!"
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-"Carga tu música (Ogg Vorbis, MP3 o WAV) para poder escucharla en Jappix!"
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr "El archivo que quieres subir tiene que pesar menos de %s."
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-"Aquí puedes quedarte al tanto de lo que tus usuarios guarden en el servidor, "
-"y quitarle cualquier contenido no deseable."
-
-msgid "Title"
-msgstr "Título"
-
-msgid "Artist"
-msgstr "Artista"
-
-msgid "Album"
-msgstr "Album"
-
-msgid "File"
-msgstr "Archivo"
-
-msgid "Upload"
-msgstr "Cargar"
-
-msgid "The folder is empty."
-msgstr "La carpeta está vacía."
-
-msgid "The music could not be received, please retry!"
-msgstr "La música no se pudo recibir, por favor intenta otra vez!"
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-"Éste no es un archivo de música válida. Por favor, ¡codifícalo en formato "
-"Ogg Vorbis, MP3 o WAV!"
-
-msgid "Your music has been added!"
-msgstr "¡Ya se agregó tu música!"
-
-msgid "The selected elements have been removed."
-msgstr "Los elementos seleccionados han sido suprimidos."
-
-msgid "You must select elements to remove!"
-msgstr "Debes seleccionar elementos que quitar!"
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-"Aquí puedes agregar un nuevo usuario, o cambiar contraseñas (introduce un "
-"nombre de usuario existente). Por favor, ¡usa una contraseña fuerte!"
-
-msgid "Manage"
-msgstr "Administrar"
-
-msgid "List"
-msgstr "Lista"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-"Elimina usuarios. Ten en cuenta que no puedes eliminar un usuario si se "
-"trata del único que hay."
-
-msgid "The user has been added!"
-msgstr "El usuario ha sido agregado!"
-
-msgid "The chosen users have been removed."
-msgstr "Los usuarios seleccionados han sido suprimidos"
-
-msgid "You must select one or more users to be removed!"
-msgstr "Debes seleccionar por lo menos un usuario que quitar!"
-
-msgid "Yesterday"
-msgstr "Ayer"
-
-msgid "%s days ago"
-msgstr "hace %s días"
-
-msgid "User currently active"
-msgstr "Usuario activo actualmente"
-
-msgid "Last seen: %s"
-msgstr "Se vió por última vez: %s"
-
-msgid "Inactive since: %s"
-msgstr "Inactivo desde: %s"
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr "Parece que tu amigo no recibió el mensaje!"
-
-msgid "Static content server"
-msgstr "Servidor de contenido estático"
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr "Éste es el servidor de contenido estático para %1s: “%2s”."
-
-msgid "User uploads server"
-msgstr "Servidor de cargas de usuario"
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr "Este es el servidor de subidas de usuario para %1s, “%2s”."
-
-msgid "Suggested friends"
-msgstr "Amistades recomendadas"
-
-msgid "Check all"
-msgstr "Activar todo"
-
-msgid "Uncheck all"
-msgstr "Deactivar todo"
-
-msgid "Choose"
-msgstr "Escoga"
-
-msgid "List name"
-msgstr "Nombre mostrado"
-
-msgid "Allow"
-msgstr "Permitir"
-
-msgid "Deny"
-msgstr "prohibir"
-
-msgid "Group"
-msgstr "Grupo"
-
-msgid "Subscription"
-msgstr "suscripción"
-
-msgid "Both"
-msgstr "Ambos"
-
-msgid "From"
-msgstr "De"
-
-msgid "Everybody"
-msgstr "Todo el mundo"
-
-msgid "Send messages"
-msgstr "Enviar mensajes"
-
-msgid "Send queries"
-msgstr "Enviar peticiones"
-
-msgid "See my status"
-msgstr "Ver mi estado"
-
-msgid "Send his/her status"
-msgstr "Enviar su estado"
-
-msgid "Everything"
-msgstr "Todo"
-
-msgid "Item"
-msgstr "Artículo"
-
-msgid "Order"
-msgstr "Orden"
-
-msgid "Active for this session"
-msgstr "Activo en esta sesión"
-
-msgid "Always active"
-msgstr "Siempre activo"
-
-msgid "User directory"
-msgstr "Directorio del usuario"
-
-msgid "Search a friend"
-msgstr "Buscar a un amigo"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-"La petición no se puede procesar ya que esta función no está disponible en "
-"el servidor o en el destinatario."
-
-msgid "Send him/her a message"
-msgstr "Enviar un mensaje"
-
-msgid "Start a chat with him/her"
-msgstr "Empezar un chat"
-
-msgid "Available shortcuts:"
-msgstr "Atajos de teclado:"
-
-msgid "%s removes the chat logs"
-msgstr "%s desactiva el registro de chat"
-
-msgid "%s joins a groupchat"
-msgstr "%s unirse a un chat de grupo"
-
-msgid "%s closes the chat"
-msgstr "%s cierra el chat"
-
-msgid "%s shows the user profile"
-msgstr "%s muestra el perfil de usuario"
-
-msgid "%s sends a message to the room"
-msgstr "%s envía un mensaje a la sala"
-
-msgid "%s changes your nickname"
-msgstr "%s cambia tu apodo -nick-"
-
-msgid "%s sends a message to someone in the room"
-msgstr "%s envía un mensaje a alguien de la sala"
-
-msgid "%s changes the room topic"
-msgstr "%s cambia el título de la sala"
-
-msgid "%s kicks a user of the room"
-msgstr "%s expulsa a un usuario de la sala"
-
-msgid "%s bans a user of the room"
-msgstr "%s banea a un usuario de la sala"
-
-msgid "%s invites someone to join the room"
-msgstr "%s expulsa a un usuario de la sala"
-
-msgid "Public profile"
-msgstr "Perfil público"
-
-msgid "Your profile anywhere on the Web."
-msgstr "Tu perfil en cualquier parte de la Web."
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-"%s es un servicio de Jappix.com que hace público tu perfil XMPP. Así es más "
-"fácil compartirlo. No se necesita ninguna cuenta XMPP para ver tu red "
-"social, tu trabajo y tus detalles de contacto."
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-"Es más, cada foto que publiques en tu red social aparecerá en una preciosa "
-"galería de tiempo. Ahora puedes ver las fotos que has compartido año tras "
-"año."
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-"También puedes usar tu avatar XMPP como avatar único para cada web, blog y "
-"foro que uses. Cuando lo cambies en XMPP, el nuevo avatar aparecerá en todos "
-"los sitios. ¡Qué ingenioso!"
-
-msgid "Yay, let's create your public profile!"
-msgstr "Sí, vamos a crear tu perfil público"
-
-msgid "Enable my public profile"
-msgstr "Activar mi perfil público"
-
-msgid "Jappix for your phone"
-msgstr "Jappix para tu móvil"
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr "¡Una sola appp para mensajes, canales, perfiles y mucho más!"
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-"Este aviso es meramente informativo. Puede que se haya eliminado la "
-"información a la que hacía referencia."
-
-msgid "You haven't provided any file to download"
-msgstr "No has proporcionado ningún archivo para descargar"
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr "No puedes descargar un archivo sin indicar la llave"
-
-msgid "Woah this file isn't found, please double check"
-msgstr "No se encuentra este archivo. Por favor, compruébalo de nuevo"
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr "La llave introducidad no permite descarga este archivo"
-
-msgid "Statistics are currently disabled in the settings."
-msgstr "Las estadísticas están desactivadas en la configuración."
-
-msgid "New event!"
-msgstr "¡Evento nuevo!"
-
-msgid "%s is typing..."
-msgstr "%s está escribiendo..."
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr "El código de seguridad no es válido. Por favor, inténtalo con otro."
-
-msgid "The username you picked is not available. Please try another one."
-msgstr "El usuario elegido no está disponible. Por favor, elije otro."
-
-msgid "There was an error registering your account. Please retry."
-msgstr "Ocurrió un error al crear su cuenta. Por favor, vuelve a intentarlo."
-
-msgid "Username"
-msgstr "Usuario"
-
-msgid "Enter password"
-msgstr "Introduce la contraseña"
-
-msgid "Once again..."
-msgstr "Otra vez..."
-
-msgid "Code"
-msgstr "Código"
-
-msgid "Security code"
-msgstr "Código de Seguridad"
-
-msgid "Advertising space available!"
-msgstr "¡Espacio disponible para publicidad!"
-
-msgid "Advertise here"
-msgstr "Anúnciese aquí"
-
-msgid "Analytics (%s)"
-msgstr "Estadísticas (%s)"
-
-msgid "Track visits"
-msgstr "Rastrear visitas"
-
-msgid "Piwik URL"
-msgstr "URL Piwik"
-
-msgid "Piwik tracking ID"
-msgstr "ID seguimiento Piwik"
-
-msgid "Advertising (%s)"
-msgstr "Publicidad (%s)"
-
-msgid "Enable ads"
-msgstr "Activar anuncios"
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "Content ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "Mute"
-msgstr ""
-
-msgid "Unmute"
-msgstr ""
-
-msgid "Is calling you"
-msgstr ""
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr ""
-
-msgid "Waiting..."
-msgstr ""
-
-msgid "Ringing..."
-msgstr ""
-
-msgid "Declined the call"
-msgstr ""
-
-msgid "Call error"
-msgstr ""
-
-msgid "Ended the call"
-msgstr ""
-
-msgid "Call ended"
-msgstr ""
-
-msgid "Call canceled"
-msgstr ""
-
-msgid "Canceled the call"
-msgstr ""
-
-msgid "Is already in a call"
-msgstr ""
-
-msgid "Ending call..."
-msgstr ""
-
-msgid "Accept"
-msgstr ""
-
-msgid "Decline"
-msgstr ""
-
-msgid "Okay"
-msgstr ""
-
-msgid "Retry"
-msgstr ""
-
-msgid "Audio Call"
-msgstr ""
-
-msgid "Video Call"
-msgstr ""
diff --git a/i18n/et/LC_MESSAGES/main.mo b/i18n/et/LC_MESSAGES/main.mo
deleted file mode 100644
index 075e3a47..00000000
--- a/i18n/et/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/et/LC_MESSAGES/main.po b/i18n/et/LC_MESSAGES/main.po
deleted file mode 100644
index 22d90fdc..00000000
--- a/i18n/et/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2393 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-# Rivo Zängov <eraser@eraser.ee>, 2012-2014
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:20+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Estonian (http://www.transifex.com/projects/p/jappix/language/"
-"et/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: et\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "default:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"Teie brauseris puudub JavaScript, mis tähendab seda et teil ei ole võimalik "
-"Jappixit käivitada! Palun parandage see."
-
-msgid "Social channel, chat and more."
-msgstr "Sotsiaalne kanal, vestlus ja veel muudki"
-
-msgid "Create your public profile."
-msgstr "Loo oma avalik profiil."
-
-msgid "A mini-chat for your website."
-msgstr "Mini vestlusaken sinu veebisaidile."
-
-msgid "Get Jappix, get support."
-msgstr "Hangi Jappix, hangi tuge."
-
-msgid "Statistics around Jappix."
-msgstr "Jappixiga seotud statistika"
-
-msgid "Legal disclaimer for Jappix."
-msgstr "Jappixi juriidiline info"
-
-msgid "Download Jappix for free."
-msgstr "Lae Jappix alla tasuta."
-
-msgid "Contribute to the Jappix code."
-msgstr "Panusta Jappixi koodi."
-
-msgid "Jappix for your company."
-msgstr "Jappix sinu firma jaoks."
-
-msgid "Find a public Jappix node."
-msgstr "Leia avalik Jappixi sõlm."
-
-msgid "Credits"
-msgstr "Tiitelinfo"
-
-msgid "Association"
-msgstr "Assotsatsioon"
-
-msgid "Web agency"
-msgstr "Veebiagentuur"
-
-msgid "Legal"
-msgstr "Juriidiline"
-
-msgid "Legal disclaimer"
-msgstr "Juriidiline teave"
-
-msgid "Terms of use and legal"
-msgstr "Kasutustingimused ja juriidiline info"
-
-msgid "Owner"
-msgstr "Omanik"
-
-msgid "Node owner"
-msgstr "Sõlme omanik"
-
-msgid "By using our service, you accept %s."
-msgstr "Meie teenuse kasutamiseks pead sa nõustuma %s."
-
-msgid "our terms of use"
-msgstr "meie kasutustingimustega"
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Jappixi töö on katkestatud võrgu tõrke, halva sisselogimise või mõne muu vea "
-"tõttu (kontrollige, et sisestasite õiged andmed), vabandame ebameeldivuste "
-"pärast."
-
-msgid "The element list on this server could not be obtained!"
-msgstr "Selle serveri elemendi nimekirja polnud võimalik omandada."
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"Teie parool on muudetud, Te saate taas sisse logida kasutades uusi andmeid."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "Teie XMPP konto on eemaldatud, hüvasti!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "Te olete oma XMPP kontost välja logitud, head päeva!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr ""
-"Ruum millega Te liituda proovisite ei eksisteeri. Proovige see ise teha!"
-
-msgid "The groupchat has been removed."
-msgstr "Grupivestlus on eemaldatud, nüüd saab keegi teine selle uuesti luua."
-
-msgid "The user that you want to reach is not present in the room."
-msgstr ""
-"Kasutaja, kellega te püüate ühendust saada, ei eksisteeri enam selles ruumis."
-
-msgid "Please enter the group chat address to join."
-msgstr "Palun sisestage grupivestluse aadress millega liituda."
-
-msgid "Please enter your nickname to join %s."
-msgstr "Palun sisestage oma hüüdnimi, et liituda %s."
-
-msgid "This room (%s) is protected with a password."
-msgstr "Ruum (%s) on parooliga kaitstud."
-
-msgid "Your browser is out of date!"
-msgstr "Teil on liiga vana brauser!"
-
-msgid "Last %s version is better!"
-msgstr "Viimane versioon %s on parem!"
-
-msgid "Login"
-msgstr "Sisse logimine"
-
-msgid "Register"
-msgstr "Registreerimine"
-
-msgid "Here we go!"
-msgstr "Läks!"
-
-msgid "Server"
-msgstr "Server"
-
-msgid "Password"
-msgstr "Parool"
-
-msgid "Remember me"
-msgstr "Jäta mind meelde"
-
-msgid "This tool has been disabled!"
-msgstr "See tööriist on keelatud, Te ei saa seda kasutada!"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr ""
-"Võrgu tõrke tõttu katkes ühendus serveriga. Mida te järgmiseks teha soovite?"
-
-msgid "Reconnect"
-msgstr "Taasühendus"
-
-msgid "Messages"
-msgstr "Sõnumid"
-
-msgid "Profile"
-msgstr "Profiil"
-
-msgid "Options"
-msgstr "Valikud"
-
-msgid "Disconnect"
-msgstr "Katkesta ühendus"
-
-msgid "Filter"
-msgstr "Filter"
-
-msgid "Add a friend"
-msgstr "Lisa kontakt"
-
-msgid "Your groupchats"
-msgstr "Minu grupivestlused"
-
-msgid "Manage your favorite groupchats"
-msgstr "Halda oma lemmikuid grupivestluseid"
-
-msgid "More stuff"
-msgstr "Rohkem asju"
-
-msgid "Show all friends"
-msgstr "Näita kõiki sõpru"
-
-msgid "Only show connected friends"
-msgstr "Näita ainult sisselogitud sõpru"
-
-msgid "Groupchat presence messages"
-msgstr "Grupivestluses juuresoleku sõnumid"
-
-msgid "No chat images auto-load"
-msgstr "Pole ühtegi vestluse pilti, mida automaatselt laadida"
-
-msgid "Message archives"
-msgstr "Sõnumite arhiiv"
-
-msgid "Date"
-msgstr "Kuupäev"
-
-msgid "A short message?"
-msgstr "Lühisõnum?"
-
-msgid "How are you?"
-msgstr "Kuidas läheb?"
-
-msgid "What are you doing?"
-msgstr "Mida sa teed?"
-
-msgid "Join a chat"
-msgstr "Liitu vestlusega"
-
-msgid "Status"
-msgstr "Staatus"
-
-msgid "Available"
-msgstr "Saadaval"
-
-msgid "Talkative"
-msgstr "Jutukas"
-
-msgid "Away"
-msgstr "Eemal"
-
-msgid "Not available"
-msgstr "Mitte saadaval"
-
-msgid "Busy"
-msgstr "Hõivatud"
-
-msgid "Offline"
-msgstr "Pole võrgus"
-
-msgid "Mood"
-msgstr "Meeleolu"
-
-msgid "None"
-msgstr "Midagi"
-
-msgid "Crazy"
-msgstr "Pöörane"
-
-msgid "Excited"
-msgstr "Elevil"
-
-msgid "Playful"
-msgstr "Vallatu"
-
-msgid "Happy"
-msgstr "Õnnelik"
-
-msgid "Shocked"
-msgstr "Šokeeritud"
-
-msgid "Hot"
-msgstr "Kuum"
-
-msgid "Sad"
-msgstr "Kurb"
-
-msgid "Amorous"
-msgstr "Armunud"
-
-msgid "Confident"
-msgstr "Enesekindel"
-
-msgid "Activity"
-msgstr "Tegevus"
-
-msgid "Chores"
-msgstr "Tööd"
-
-msgid "Drinking"
-msgstr "Joomine"
-
-msgid "Eating"
-msgstr "Söömine"
-
-msgid "Exercising"
-msgstr "Sportimine"
-
-msgid "Grooming"
-msgstr "Hooldamine"
-
-msgid "Appointment"
-msgstr "Kohtumine"
-
-msgid "Inactive"
-msgstr "Tegevusetu"
-
-msgid "Relaxing"
-msgstr "Lõõgastumine"
-
-msgid "Talking"
-msgstr "Rääkimine"
-
-msgid "Traveling"
-msgstr "Reisimine"
-
-msgid "Working"
-msgstr "Töötamine"
-
-msgid "View profile"
-msgstr "Vaata profiili"
-
-msgid "This is a repeat from %s"
-msgstr "%s kordab seda"
-
-msgid "Repeat this notice"
-msgstr "Korda seda teadet"
-
-msgid "Remove this notice"
-msgstr "Eemalda see teade"
-
-msgid "Your profile"
-msgstr "Sinu profiil"
-
-msgid "Identity"
-msgstr "Identiteet"
-
-msgid "Profile image"
-msgstr "Profiili pilt"
-
-msgid "Others"
-msgstr "Muu"
-
-msgid "Other"
-msgstr "Muud"
-
-msgid "Personal"
-msgstr "Personaalne"
-
-msgid "Complete name"
-msgstr "Täisnimi"
-
-msgid "Nickname"
-msgstr "Hüüdnimi"
-
-msgid "First name"
-msgstr "Eesnimi"
-
-msgid "Last name"
-msgstr "Perekonnanimi"
-
-msgid "Date of birth"
-msgstr "Sünniaeg"
-
-msgid "Contact"
-msgstr "Kontakt"
-
-msgid "E-mail"
-msgstr "E-mail"
-
-msgid "Phone"
-msgstr "Telefon"
-
-msgid "Website"
-msgstr "Koduleht"
-
-msgid "Current"
-msgstr "Praegune"
-
-msgid "Delete"
-msgstr "Kustuta"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr "Kui kahju! Teil ei ole oma identiteedi kaardil profiili pilti!"
-
-msgid "Address"
-msgstr "Aadress"
-
-msgid "Street"
-msgstr "Tänav"
-
-msgid "City"
-msgstr "Linn"
-
-msgid "Postal code"
-msgstr "Postiindeks"
-
-msgid "Country"
-msgstr "Riik"
-
-msgid "Biography"
-msgstr "Elulugu"
-
-msgid "Important notice"
-msgstr "Oluline teave"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-"Ole ettevaatlik infoga, mida sa salvestad oma profiilis, kuna see on nähtav "
-"kõigile (ka neile, kellele sa ehk ei sooviks seda näidata)."
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr ""
-"Mitte kõik pole XMPP's privaatne, see siin on üks nendest asjadest, teie "
-"avalik profiil (vCard)."
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"On soovitatav üles laadida enda profiili pilt (%s maximum), sest see muudab "
-"Teid paremini äratuntavaks."
-
-msgid "Save"
-msgstr "Salvesta"
-
-msgid "Cancel"
-msgstr "Tühista"
-
-msgid "Edit options"
-msgstr "Muuda valikuid"
-
-msgid "Channel"
-msgstr "Kanal"
-
-msgid "Commands"
-msgstr "Käsud"
-
-msgid "Sounds"
-msgstr "Helid"
-
-msgid "Privacy"
-msgstr "Privaatsus"
-
-msgid "Message archiving"
-msgstr "Sõnumite arhiveerimine"
-
-msgid "Store an history of your chats"
-msgstr "Salvesta oma vestluste ajalugu"
-
-msgid "Geolocation"
-msgstr "Geolokatsioon"
-
-msgid "Disabled"
-msgstr "Välja lülitatud"
-
-msgid "Store all chats"
-msgstr "Salvesta kõik vestlused"
-
-msgid "Store friend chats"
-msgstr "Salvesta vestlused sõpradega"
-
-msgid "Remove all archives"
-msgstr "Eemalda kõik arhiivid"
-
-msgid "Empty"
-msgstr "Tühi"
-
-msgid "Empty channel"
-msgstr "Tühi kanal"
-
-msgid "Persistent"
-msgstr "Püsiv"
-
-msgid "Maximum notices"
-msgstr "Maksimaalsed teavitused"
-
-msgid "Account"
-msgstr "Konto"
-
-msgid "Change password"
-msgstr "Muuda parool"
-
-msgid "Delete account"
-msgstr "Kustuta konto"
-
-msgid "Old"
-msgstr "Vana"
-
-msgid "New (2 times)"
-msgstr "Uus"
-
-msgid "Suggested chatrooms"
-msgstr "Soovitatud jututoad"
-
-msgid "Skip"
-msgstr "Jäta vahele"
-
-msgid "Continue"
-msgstr "Jätka"
-
-msgid "To"
-msgstr "Kellele"
-
-msgid "Close"
-msgstr "Sulge"
-
-msgid "unknown"
-msgstr "tundmatu"
-
-msgid "Unavailable"
-msgstr "Mitte saadaval"
-
-msgid "is now"
-msgstr "on nüüd"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Palun oodake kuni Teie pilt on üles laetud..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "Siin see on! Uus ilus profiili pilt"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "Pildi formaat ei ole toetatud või on suurus mitte sobiv."
-
-msgid "Reply"
-msgstr "Vasta"
-
-msgid "Error"
-msgstr "Viga"
-
-msgid "Click here to solve the error"
-msgstr "Kliki siia, et viga lahendada"
-
-msgid "You"
-msgstr "Teie"
-
-msgid "Remove"
-msgstr "Eemalda"
-
-msgid "Rename"
-msgstr "Nimeta ümber"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Tere, ma olen %s, Ma sooviksin Teid endale sõbraks lisada."
-
-msgid "Smiley insertion"
-msgstr "Smaili sisestamine"
-
-msgid "Change style"
-msgstr "Muuda stiili"
-
-msgid "Text in bold"
-msgstr "Tekst paksult"
-
-msgid "Text in italic"
-msgstr "Tekst kaldkirjas"
-
-msgid "Underlined text"
-msgstr "Tekst allajoonitult"
-
-msgid "Send a file"
-msgstr "Saada fail"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr ""
-"Kui te olete faili üles laadinud siis Teie sõber saab märguande Teie "
-"saadetud faili kohta."
-
-msgid "Save chat"
-msgstr "Salvesta vestlus"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"Vajutage järgnevale lingile ja oodake, et saada vestluslogi. Seejärel "
-"klikkige uuesti, et saada fail."
-
-msgid "This chat is empty!"
-msgstr "See vestlus on tühi!"
-
-msgid "Generate file!"
-msgstr "Genereeri fail!"
-
-msgid "Download file!"
-msgstr "Lae fail alla!"
-
-msgid "Clean current chat"
-msgstr "Puhasta hetkeline vestlus"
-
-msgid "Show user profile"
-msgstr "Näita kasutaja profiili"
-
-msgid "Add this contact to your friends"
-msgstr "Lisa see kontakt oma kontakti nimekirja"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Lisa see grupivestlus oma lemmikutesse"
-
-msgid "All tabs"
-msgstr "Kõik kaardid"
-
-msgid "Join groupchat"
-msgstr "Liitu grupivestlustega"
-
-msgid "Close this tab"
-msgstr "Sulge see kaart"
-
-msgid "no subject defined for this room."
-msgstr "sellele ruumile ei ole teemat pandud"
-
-msgid "Administration panel for this room"
-msgstr "Selle ruumi administratsiooni paneel"
-
-msgid "Moderators"
-msgstr "Moderaatorid"
-
-msgid "Participants"
-msgstr "Osalejad"
-
-msgid "Visitors"
-msgstr "Külastajad"
-
-msgid "Manage favorite rooms"
-msgstr "Halda lemmik ruume"
-
-msgid "Change favorites"
-msgstr "Muuda lemmikuid"
-
-msgid "Search a room"
-msgstr "Otsi ruumi"
-
-msgid "Select a favorite"
-msgstr "Vali lemmik"
-
-msgid "Getting the name..."
-msgstr "Hangin nime..."
-
-msgid "Gateway"
-msgstr "Värav"
-
-msgid "Name"
-msgstr "Nimi"
-
-msgid "Room"
-msgstr "Ruum"
-
-msgid "Add"
-msgstr "Lisa"
-
-msgid "Edit"
-msgstr "Muuda"
-
-msgid "Search a room on"
-msgstr "Otsi ruumi"
-
-msgid "No room found on this server."
-msgstr "Ruumi ei leitud sellest serverist."
-
-msgid "Service discovery"
-msgstr "Teenuse avastamine"
-
-msgid "Server to query"
-msgstr "Serveri päring"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "Vabandame, aga tulemusi ei leitud!"
-
-msgid "Accounts"
-msgstr "Kontod"
-
-msgid "Authentications"
-msgstr "Autentimised"
-
-msgid "Automation"
-msgstr "Automaatika"
-
-msgid "Clients"
-msgstr "Kliendid"
-
-msgid "Collaboration"
-msgstr "Koostöö"
-
-msgid "Components"
-msgstr "Komponendid"
-
-msgid "Rooms"
-msgstr "Ruumid"
-
-msgid "Directories"
-msgstr "Kataloogid"
-
-msgid "Gateways"
-msgstr "Väravad"
-
-msgid "News"
-msgstr "Uudised"
-
-msgid "Hierarchy"
-msgstr "Hierarhia"
-
-msgid "Proxies"
-msgstr "Proksid"
-
-msgid "Publication/Subscription"
-msgstr "Avalikustamine/Tellimus"
-
-msgid "Storage"
-msgstr "Hoiuruum"
-
-msgid "Service offline or broken"
-msgstr "Teenus lahti ühendatud või katki"
-
-msgid "Your inbox"
-msgstr "Teie postkast"
-
-msgid "Available actions"
-msgstr "Saadaval valikud"
-
-msgid "Clean"
-msgstr "Puhasta"
-
-msgid "New"
-msgstr "Uus"
-
-msgid "Received"
-msgstr "Vastu võetud"
-
-msgid "Subject"
-msgstr "Teema"
-
-msgid "Content"
-msgstr "Sisu"
-
-msgid "Send message"
-msgstr "Saada sõnum"
-
-msgid "Your inbox is empty."
-msgstr "Teie postkast on tühi."
-
-msgid "MUC administration"
-msgstr "MUC administratsioon"
-
-msgid "You administrate this room"
-msgstr "Teie olete ruumi administraator"
-
-msgid "Enter new subject"
-msgstr "Sisestage uus teema"
-
-msgid "Configuration"
-msgstr "Seadistus"
-
-msgid "Authorizations"
-msgstr "Load"
-
-msgid "Member list"
-msgstr "Liikmete nimekiri"
-
-msgid "Owner list"
-msgstr "Omanike nimekiri"
-
-msgid "Administrator list"
-msgstr "Administraatorite nimekiri"
-
-msgid "Outcast list"
-msgstr "Hüljatute nimekiri"
-
-msgid "Add an input"
-msgstr "Lisa sisend"
-
-msgid "Destroy this MUC"
-msgstr "Hävita see MUC"
-
-msgid "Yes, let's do it!"
-msgstr "Jah, teeme seda!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "Teie sõber jälgib vestlust."
-
-msgid "Your friend is writing a message..."
-msgstr "Teie sõber kirjutab..."
-
-msgid "Your friend stopped writing a message."
-msgstr "Teie sõber lõpetas kirjutamise."
-
-msgid "Your friend is doing something else."
-msgstr "Teie sõber teeb midagi muud."
-
-msgid "Your friend closed the chat."
-msgstr "Teie sõber sulges vestluse."
-
-msgid "Requesting this service..."
-msgstr "Pärin seda teenust..."
-
-msgid "Loading"
-msgstr "Laen"
-
-msgid "changed his/her nickname to %s"
-msgstr "muutis oma hüüdnime %s"
-
-msgid "joined the chat room"
-msgstr "liitus jututoaga"
-
-msgid "left the chat room"
-msgstr "lahkus jututoast"
-
-msgid "%s left"
-msgstr "%s järgi"
-
-msgid "%s joined"
-msgstr "%s liitunud"
-
-msgid "no status"
-msgstr "staatus puudub"
-
-msgid "has been kicked"
-msgstr "on välja visatud"
-
-msgid "has been banned"
-msgstr "on keelu alla pandud"
-
-msgid "no reason"
-msgstr "põhjust pole"
-
-msgid "Communicate with the entire world!"
-msgstr "Suhtle terve maailmaga!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-"Jappix on suurepärane sotsiaalvõrgustik millele Te saate ligi pääseda "
-"kusiganes Te olete, millal iganes Te soovite ja suhelda kellega iganes Te "
-"soovite."
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-"See lubab Teil miljonite inimestega kontakteeruda kes kasutavad XMPP "
-"võrgustikku nagu Teie kasutate Jappix'it. Liitu sõpruskonnaga ja ole vaba!"
-
-msgid "Hi there!"
-msgstr "Tere!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr "Logi sisse enda XMPP kontole või tee tasuta uus!"
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-"Et hoida oma kontot turvalisena, hoia sisselogimisel või registreerumisel "
-"parool salajas."
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-"Logige sisse oma XMPP kontole. Te saate kasutada ka %s et liituda "
-"grupivestlusega."
-
-msgid "Previous"
-msgstr "Eelmine"
-
-msgid "General"
-msgstr "Üldine"
-
-msgid "Advanced"
-msgstr "Muud"
-
-msgid "Resource"
-msgstr "Vahend"
-
-msgid "Priority"
-msgstr "Eelis"
-
-msgid "Low"
-msgstr "Madal"
-
-msgid "Medium"
-msgstr "Keskmine"
-
-msgid "High"
-msgstr "Kõrge"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-"Sisestage grupivestlus millega soovite liituda ja oma hüüdnimi. Te saate ka "
-"alati minna tagasi %s."
-
-msgid "login page"
-msgstr "sisselogimise leht"
-
-msgid "Share this link with your friends:"
-msgstr "Jaga seda linki oma sõpradega:"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr "Registreeri uus XMPP konto ja liitu oma sõpradega. See on lihtne!"
-
-msgid "Required"
-msgstr "Kohustuslik"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "Te olete registreeritud, siin on Teie XMPP aadress:"
-
-msgid "Manager"
-msgstr "Haldur"
-
-msgid "Encrypted"
-msgstr "Krüpteeritud"
-
-msgid "Unencrypted"
-msgstr "Krüpteerimata"
-
-msgid "Where are you?"
-msgstr "Kus Te olete?"
-
-msgid "What's up with you?"
-msgstr "Mis toimub?"
-
-msgid "Type something you want to share with your friends..."
-msgstr "Kirjuta midagi mida sa tahad oma sõpradega jagada..."
-
-msgid "Fetching the social channel..."
-msgstr "Püüan kanalit..."
-
-msgid "You are synchronized with your network."
-msgstr "Te olete oma võrguga sünkroniseeritud."
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "Ei saa midagi saata: te saate ainult teateid vastu võtta!"
-
-msgid "Media viewer"
-msgstr "Meedia vaatur"
-
-msgid "Browse"
-msgstr "Brausi"
-
-msgid "Command"
-msgstr "Käsk"
-
-msgid "Subscribe"
-msgstr "Telli"
-
-msgid "Join"
-msgstr "Liitu"
-
-msgid "Automatic"
-msgstr "Automaatne"
-
-msgid "Search"
-msgstr "Otsi"
-
-msgid "No result!"
-msgstr "Ühtegi tulemust!"
-
-msgid "No notifications."
-msgstr "Pole teateid."
-
-msgid "would like to add you as a friend."
-msgstr "soovib lisada Teid sõbraks."
-
-msgid "would like you to join this chatroom:"
-msgstr "soovib kutsuda Teid sellesse jututuppa:"
-
-msgid "Do you accept?"
-msgstr "Kas Te olete nõus?"
-
-msgid "Yes"
-msgstr "Jah"
-
-msgid "No"
-msgstr "Ei"
-
-msgid "would like to get authorization."
-msgstr "soovib saada luba."
-
-msgid "would like to send you a file: “%s”."
-msgstr "soovib Teile saata faili: “%s”."
-
-msgid "has received a file exchange request: “%s”."
-msgstr "On failivahetuse pakkumise vastu võtnud: “%s”."
-
-msgid "has accepted to receive your file: “%s”."
-msgstr "on nõustunud Teie saadetud faili vastu võtma: “%s”."
-
-msgid "has rejected to receive your file: “%s”."
-msgstr "on keeldunud Teie saadetud faili vastu võtmast: “%s”."
-
-msgid "could not receive your file: “%s”."
-msgstr "ei saanud Teie faili kätte: “%s”."
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr "Kas Te soovite näha mida sõbra %s Teile soovitab?"
-
-msgid "commented an item you follow: “%s”."
-msgstr "kommenteeris asja üle mida sa jälgid: “%s”."
-
-msgid "liked your post: “%s”."
-msgstr "linkis sinu postituse: “%s”."
-
-msgid "quoted you somewhere: “%s”."
-msgstr "tsiteeris sind kuskil: “%s”."
-
-msgid "published on your wall: “%s”."
-msgstr "kirjutas sinu seinale: “%s”."
-
-msgid "tagged you in a photo (%s)."
-msgstr "sildistas sind fotol (%s)."
-
-msgid "tagged you in a video (%s)."
-msgstr "sildistas sind videol (%s)."
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-"valideeris sinu konto. Sinu avalik profiil on saadav mõne hetke pärast."
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr "eemaldas sinu soovil su avaliku profiili. Jääme sind igatsema!"
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-"salvestas sinu uued avaliku profiili seaded. Need rakendatakse mõne hetke "
-"pärast."
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-"ei suutnud sinu kontot valideerida, et sinu avalikku profiili lisada või "
-"uuendada. Kontrolli oma andmeid."
-
-msgid "Open"
-msgstr "Ava"
-
-msgid "Show"
-msgstr "Näita"
-
-msgid "Hide"
-msgstr "Peida"
-
-msgid "Submit"
-msgstr "Kinnita"
-
-msgid "Client"
-msgstr "Klient"
-
-msgid "System"
-msgstr "Süsteem"
-
-msgid "Local time"
-msgstr "Kohalik aeg"
-
-msgid "Comments"
-msgstr "Kommentaarid"
-
-msgid "User profile"
-msgstr "Kasutaja profiil"
-
-msgid "See his/her position on the globe"
-msgstr "Vaata tema asukohta kaardil"
-
-msgid "Confirm"
-msgstr "Kinnita"
-
-msgid "anonymous mode"
-msgstr "anonüümne režiim"
-
-msgid "Groups"
-msgstr "Grupid"
-
-msgid "Unclassified"
-msgstr "Liigitamata"
-
-msgid "Authorize"
-msgstr "Autoriseeri"
-
-msgid "Ask for authorization"
-msgstr "Küsi autoriseerimist"
-
-msgid "Unblock"
-msgstr "Deblokeeri"
-
-msgid "Prohibit"
-msgstr "Keela"
-
-msgid "Block"
-msgstr "Blokeeri"
-
-msgid "Chat"
-msgstr "Vestlus"
-
-msgid "Groupchat"
-msgstr "Grupivestlus"
-
-msgid "Jappix Mobile"
-msgstr "Jappix Mobiilis"
-
-msgid "Desktop"
-msgstr "Pealeht"
-
-msgid "Mobile"
-msgstr "Mobiil"
-
-msgid "Please wait..."
-msgstr "Palun oodake..."
-
-msgid "Please enable JavaScript"
-msgstr "Palun lubage JavaScript"
-
-msgid "Show comments"
-msgstr "Näita kommentaare"
-
-msgid "Loading comments..."
-msgstr "Laen kommentaare..."
-
-msgid "Could not get the comments!"
-msgstr "Ei saanud kommentaare kätte!"
-
-msgid "Comments locked!"
-msgstr "Kommentaarid lukus!"
-
-msgid "Type your comment here..."
-msgstr "Kirjuta oma kommentaar siia..."
-
-msgid "Your channel"
-msgstr "Teie kanal"
-
-msgid "Channel of"
-msgstr "Kanal kuulub"
-
-msgid "More notices..."
-msgstr "Rohkem teateid..."
-
-msgid "Attach a file"
-msgstr "Lisa fail"
-
-msgid "Send"
-msgstr "Saada"
-
-msgid "Unattach the file"
-msgstr "Eemalda fail"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-"Faili üleslaadimisel tekkis viga: äkki on see liiga suur (%s maximum) või "
-"keelatud!"
-
-msgid "Authorization failed"
-msgstr "Autoriseerimine ebaõnnestus"
-
-msgid "Registration failed, please choose a different username"
-msgstr "Registreerimine ebaõnnestus, palun valige teine kasutajanimi"
-
-msgid "Service unavailable"
-msgstr "Teenus mitte saadaval"
-
-msgid "Internal server error, try later"
-msgstr "Serverisisene viga, proovige hiljem uuesti"
-
-msgid "Your form has been sent."
-msgstr "Teie ankeet on saadetud."
-
-msgid "Application"
-msgstr "Aplikatsioon"
-
-msgid "Media integration"
-msgstr "Meedia integratsioon"
-
-msgid "Keep local chat archives"
-msgstr "Säilita kohapealsed vestluse arhiivid"
-
-msgid "XMPP links"
-msgstr "XMPP lingid"
-
-msgid "Open XMPP links with Jappix"
-msgstr "Ava XMPP lingid Jappix'iga"
-
-msgid "changed the subject to:"
-msgstr "muutis teema:"
-
-msgid "Welcome!"
-msgstr "Tere tulemast!"
-
-msgid "Friends"
-msgstr "Sõbrad"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr ""
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-"Enne kui Te seda kasutama hakkate, peate te mõned seaded salvestama, otsima "
-"sõpru ja täitma oma profiili."
-
-msgid "Enable notification sounds"
-msgstr "Võimalda teadete helid"
-
-msgid "Share your position on the globe"
-msgstr "Jaga oma asukohta kaardil"
-
-msgid "Offline friends"
-msgstr "Ühenduseta sõbrad"
-
-msgid "Don't hide offline friends"
-msgstr "Ära peida ühenduseta sõpru"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-"Kasuta seda tööriista, et leida oma sõpru serverist või lisa nad hiljem."
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr "Hea töö! Nüüd saate te Jappix'it sõpradega jagada!"
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr "Kui te vajutate salvestamise nuppu siis avaneb profiili muutmise aken."
-
-msgid "Share Jappix on %s"
-msgstr "Jaga Jappix'it %s"
-
-msgid "Follow Jappix topic on %s"
-msgstr "Jälgi Jappixi teemat %s"
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "Kasutan Jappix'it, avatud sotsiaalvõrgustik. Ma olen %s!"
-
-msgid "Unknown name"
-msgstr "Tundmatu nimi"
-
-msgid "Unknown country"
-msgstr "Tundmatu riik"
-
-msgid "Click to enable"
-msgstr "Kliki, et võimaldada"
-
-msgid "Click to disable"
-msgstr "Kliki, et keelata"
-
-msgid "Installation"
-msgstr "Paigaldus"
-
-msgid "Jappix installation"
-msgstr "jappixi paigaldus"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "Tere tulemast Jappixi paigaldajasse!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-"See tööriist aitab Teil kiiresti paigaldada Jappixi, avatud "
-"sotsiaalvõrgustiku, Teie serverisse. Teil ei ole isegi vaja tehnilist taipu."
-
-msgid "Installation Steps:"
-msgstr "Vaatame paigalduse samme:"
-
-msgid "Welcome"
-msgstr "Tere tulemast"
-
-msgid "Storage configuration"
-msgstr "Hoiuruumi konfiguratsioon"
-
-msgid "Administrator account"
-msgstr "Administraatori konto"
-
-msgid "Main configuration"
-msgstr "Põhiline konfiguratsioon"
-
-msgid "Hosts configuration"
-msgstr "Hosti konfiguratsioon"
-
-msgid "Services installation"
-msgstr "Teenuste paigaldus"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-"Kui hetkeline keel (%1s) ei kattu teie omaga siis saate muuta keele %2s."
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"Kui te soovite abi Jappixi paigalduse kohta siis Te võite vaadata tervet "
-"dokumentatsiooni, mis on saadaval:"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-"On aeg paigaldada Teie enda isiklik avatud sotsiaalvõrgustik: Minge järgmise "
-"sammu juurde!"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr "Kataloogil on kirjutusõigused, Te võite jätkata!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-"Jappix pakub võimalust hallata oma konfiguratsiooni, installida uusi "
-"pluginaid või otsida uuendusi. Sellepärast peate te tegema administraatori "
-"konto, et haldus lehele ligi pääseda."
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-"Kui Jappix on paigaldatud siis lihtsalt vajutage Haldaja lingile avalehel, "
-"et sellele ligi pääseda."
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr ""
-"Tundub, et Teil jäi midagi märkamata või need kaks parooli ei klapi omavahel!"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-"Jappixi töötamiseks on vajalik mõned väärtused muuta. Palun muutke järgmised "
-"väljad (või jätke need samaks, mis peaksid samuti töötama)."
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-"NB: Kui Te ei kinnita vajalikke väljasid siis kasutatakse olemasolevaid "
-"seadeid."
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-"Vajad abi? Parem oleks kui sa loed meie dokumentatsiooni lehte enne kui sa "
-"selle vormi täidad!"
-
-msgid "User"
-msgstr "Kasutaja"
-
-msgid "Service"
-msgstr "Teenus"
-
-msgid "Service name"
-msgstr "Teenuse nimi"
-
-msgid "Service description"
-msgstr "Teenuse kirjeldus"
-
-msgid "Owner name"
-msgstr "Omaniku nimi"
-
-msgid "Owner website"
-msgstr "Omaniku veebisait"
-
-msgid "Connection"
-msgstr "Ühendus"
-
-msgid "Lock the host"
-msgstr "Lukusta host"
-
-msgid "Anonymous mode"
-msgstr "Anonüümne režiim"
-
-msgid "HTTP authentication"
-msgstr "HTTP autentimine"
-
-msgid "Registration allowed"
-msgstr "Registreerimine lubatud"
-
-msgid "Use the built-in BOSH proxy"
-msgstr "Kasuta sisseehitatud BOSH proksit"
-
-msgid "Manager link"
-msgstr "Halduri link"
-
-msgid "Groupchats to join"
-msgstr "Grupivestlused millega liituda"
-
-msgid "Suggest groupchats"
-msgstr "Soovitatud grupivestlused"
-
-msgid "Encryption"
-msgstr "Krüpteering"
-
-msgid "HTTPS storage"
-msgstr "HTTPS hoiustus"
-
-msgid "Force HTTPS"
-msgstr "Sunni HTTPS kasutus"
-
-msgid "Compression"
-msgstr "Pakkimine"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"See lehekülg aitab Teil täpsustada hosti kuhu Jappix ennast ühendab. Te "
-"võite selle jätta nii nagu on kui soovite kasutada ametliku teenuse hosti."
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"Võib-olla Te ei tea mis on BOSH server? See on vahelüli Jappixi ja XMPP "
-"serveri vahel, see on vajalik tehniliste piirangute tõttu."
-
-msgid "Main host"
-msgstr "Põhiline host"
-
-msgid "Groupchat host"
-msgstr "Grupivestluse host"
-
-msgid "Pubsub host"
-msgstr "Pubsub host"
-
-msgid "Anonymous host"
-msgstr "Anonüümne host"
-
-msgid "Directory host"
-msgstr "Kataloogi host"
-
-msgid "BOSH host"
-msgstr "BOSH host"
-
-msgid "WebSocket host"
-msgstr "WebSocketi host"
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-"Te saate paigaldada lisatarkvara oma serverile, et laiendada Jappixi "
-"võimalusi."
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-"Et seda tegevust sooritada, peate Te olema serverisse sisse logitud "
-"administraatorina."
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-"Kui te olete seadistamise lõpetanud, tekitab Jappix vahemälu failid. See "
-"võib aega võtta nii, et oodake millal rakendus on nähtaval ning ärge "
-"vajutage ühtegi nuppu."
-
-msgid "Thanks for using Jappix!"
-msgstr "Aitäh, et kasutate Jappixit!"
-
-msgid "Next"
-msgstr "Järgmine"
-
-msgid "Finish"
-msgstr "Valmis"
-
-msgid "Check again"
-msgstr "Kontrolli uuesti"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-"Kataloogil ei ole kirjutusõigusi, lisage need õigused sellele asukohale %s."
-
-msgid "%s is installed on your system."
-msgstr "%s on Teie süsteemi paigaldatud."
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s ei ole Teie süsteemi paigaldatud, Te peaksite paigaldama %2s."
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "PHP maksimaalse faili üleslaadimise mahu piirang on piisav (%s)."
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-"PHP maksimaalse faili üleslaadimise mahu piirang ei ole piisav (%1s), Te "
-"peaksite selle %2s määrama %3s."
-
-msgid "Jappix manager"
-msgstr "Jappixi haldur"
-
-msgid "Manager access"
-msgstr "Halduri juurdepääs"
-
-msgid "Statistics"
-msgstr "Statistika"
-
-msgid "Hosts"
-msgstr "Hostid"
-
-msgid "Design"
-msgstr "Disain"
-
-msgid "Repeat"
-msgstr "Korda"
-
-msgid "All"
-msgstr "Kõik"
-
-msgid "Horizontal"
-msgstr "Horisontaalne"
-
-msgid "Vertical"
-msgstr "Vertikaalne"
-
-msgid "Center"
-msgstr "Keskel"
-
-msgid "Left"
-msgstr "Vasakule"
-
-msgid "Right"
-msgstr "Paremale"
-
-msgid "Top"
-msgstr "Üles"
-
-msgid "Bottom"
-msgstr "Alla"
-
-msgid "Adapt"
-msgstr "Kohanda"
-
-msgid "Color"
-msgstr "Värv"
-
-msgid "Users"
-msgstr "Kasutajad"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-"See on keelatud ala: ainult autoriseeritud kasutajad saavad siia juurdepääsu."
-
-msgid "Please use the form below to login to the administration panel."
-msgstr ""
-"Palun täitke alljärgnev vorm, et administraatori paneelile juurdepääs saada."
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-"Et turvalisust suurendada, siis sessioonid on ajalise piiranguga ja kui "
-"brauser sulgeda siis Teid logitakse välja."
-
-msgid "Credentials"
-msgstr "Isikutunnistus"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "Teid on välja logitud. Nägemiseni!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-"Teid ei olnud võimalik kinnitada kui administraatorit. Kontrollige "
-"sisestatud andmeid!"
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-"Põhiline statistika on protsessitud Jappixi poolt, Te leiate selle siit alt."
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr "Muutke oma Jappixi konfiguratsiooni selle tööriista abil."
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr "Muuda selle tööriista abil XMPP hosti, mida Jappix pakub."
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-"Kõiki Jappixi poolt salvestatud faile saab hallata selle tööriista abil: "
-"palun valige alamkataloog ja hakake selle sisu muutma!"
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr "Jappix on täielikult kohandatav: Te saate selle kujundust muuta siin."
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr ""
-"See ei ole õige pildi formaat, palun kasutage PNG, GIF või JPG formaati!"
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr "See ei ole õige pildi formaat, palun valige PNG formaat!"
-
-msgid "The image could not be received, would you mind retry?"
-msgstr "Pilti ei olnud võimalik vastu võtta, kas soovite uuesti proovida?"
-
-msgid "Your service logo has been successfully changed!"
-msgstr "Teie teenuse logo on edukalt muudetud!"
-
-msgid "Your image was added to the list!"
-msgstr "Teie pilt lisati nimekirja!"
-
-msgid "Changes saved!"
-msgstr "Muudatused salvestatud!"
-
-msgid "Logo"
-msgstr "Logo"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-"Te saate lisada enda teenuse logo ja asendada olemasoleva. Hoolitsege selle "
-"eest, et suurus ja värvid oleksid õiged!"
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr "Lae üles iga logo soovitatud pikseli suurusega."
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-"Teie logo formaat peab olema PNG. Kui te jätate välja tühjaks siis logo ei "
-"muutu."
-
-msgid "Remove this logo"
-msgstr "Eemalda see logo"
-
-msgid "View this logo"
-msgstr "Vaata seda logo"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-"Te saate lisada rohkem kui ühe administraatori. Selle tööriistaga saate ka "
-"parooli muuta."
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-"Selle tööriistaga saate Jappixit uuendada või vaadata kas uus versioon on "
-"saadaval. Informatsioon uue versiooni kohta on inglise keeles."
-
-msgid "Access statistics"
-msgstr "Juurdepääs statistikale"
-
-msgid "Share statistics"
-msgstr "Jaga statistikat"
-
-msgid "Other statistics"
-msgstr "Muu statistika"
-
-msgid "January"
-msgstr "Jaanuar"
-
-msgid "February"
-msgstr "Veebruar"
-
-msgid "March"
-msgstr "Märts"
-
-msgid "April"
-msgstr "Aprill"
-
-msgid "May"
-msgstr "Mai"
-
-msgid "June"
-msgstr "Juuni"
-
-msgid "July"
-msgstr "Juuli"
-
-msgid "August"
-msgstr "August"
-
-msgid "September"
-msgstr "September"
-
-msgid "October"
-msgstr "Oktoober"
-
-msgid "November"
-msgstr "November"
-
-msgid "December"
-msgstr "Detsember"
-
-msgid "Monday"
-msgstr "Esmaspäev"
-
-msgid "Tuesday"
-msgstr "Teisipäev"
-
-msgid "Wednesday"
-msgstr "Kolmapäev"
-
-msgid "Thursday"
-msgstr "Neljapäev"
-
-msgid "Friday"
-msgstr "Reede"
-
-msgid "Saturday"
-msgstr "Laupäev"
-
-msgid "Sunday"
-msgstr "Pühapäev"
-
-msgid "Total"
-msgstr "Kokku"
-
-msgid "Archives"
-msgstr "Arhiivid"
-
-msgid "Music"
-msgstr "Muusika"
-
-msgid "Backgrounds"
-msgstr "Tagataustad"
-
-msgid "Share"
-msgstr "Jaga"
-
-msgid "Background"
-msgstr "Tagataust"
-
-msgid "Notice"
-msgstr "Teade"
-
-msgid "Your design preferences have been saved!"
-msgstr "Teie kujunduse seadistused on salvestatud!"
-
-msgid "Please check your inputs: something is missing!"
-msgstr "Palun kontrollige väljasid: midagi on puudu!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-"Selle tööriistaga saate muuta Jappixi tagatausta. Te saate panna kas ühte "
-"värvi tagatausta või üles laadida pildi. Laske kujutlusvõimel lennata!"
-
-msgid "Use default background"
-msgstr "Kasutage olemasolevat tagatausta"
-
-msgid "Use your own image"
-msgstr "Kasutage enda üles laetud pilti"
-
-msgid "Select a background to use and change the display options."
-msgstr "Valige tagaataust ja seejärel valige kuidas seda kuvama peaks."
-
-msgid "Use your own color"
-msgstr "Kasutage enda valitud värvi"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr ""
-"Kirjutage HEX väärtusega värvi valik mida Te soovite tagataustaks kasutada."
-
-msgid "Manage backgrounds"
-msgstr "Tagataustade haldamine"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr "Selle tööriistaga saate Te lisada uusi tagatausta pilte."
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr ""
-"Kui Te soovite mingisuguseid taustapilte eemaldada siis kasutage all olevat "
-"brauserit."
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-"Defineerige avalehe märguanne oma teenuse kasutajatele. Nagu näiteks hoiatus "
-"sõnumid, märguanded või reklaam."
-
-msgid "Simple notice"
-msgstr "Lihtne märguanne"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-"Sellele märguandele saab kirjutada tavalist teksti, kood ei ole lubatud!"
-
-msgid "Advanced notice"
-msgstr "Ülendatud märguanne"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-"Te saate lisada märguande kus võite kasutada HTML'i, CSS'i ja JavaScripti, "
-"aga Te peate kodeerima stiili."
-
-msgid "Available updates"
-msgstr "Saadaval olevad uuendused"
-
-msgid "What's new?"
-msgstr "Mis on uut?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr "Teie failihoidla kataloogil ei ole kirjutusõigusi, palun lisage need!"
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-"%1s võib põhjustada proksi probleeme, palun suurendage väärtust %2s kuni %3s!"
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-"Te kasutate Jappixi arendusversiooni. Uuendage seda läbi repository (hoidla) "
-"käivitades %s."
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-"Uus Jappixi versioon on saadaval! Vaadake mis on uut ja käivitage uuendus!"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr ""
-"Teil on vana Jappixi versioon. Uuendage see versioonini %s siia klikkides!"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"Teil näib olevat Jappixi uusim versioon, aga te saate ka manuaalselt "
-"uuendusi kontrollida siia klikkides."
-
-msgid "Check for updates"
-msgstr "Kontrolli uuendusi"
-
-msgid "Update in progress"
-msgstr "Uuendamine käigus"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr "Jappix on uuendatud: Teil on nüüd kõige uuem versioon."
-
-msgid "The update has failed! Please try again later."
-msgstr "Uuendamine ebaõnnestus! Palun proovige hiljem uuesti."
-
-msgid "Downloading package..."
-msgstr "Pakkide alla laadimine..."
-
-msgid "Removing current Jappix system files..."
-msgstr "Eemaldan hetkelisi Jappixi süsteemi faile..."
-
-msgid "Extracting package..."
-msgstr "Pakin pakke lahti..."
-
-msgid "Regenerating storage folder tree..."
-msgstr "Taastan hoiukataloogi..."
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix on nüüd uuendatud!"
-
-msgid "Aborted: socket error!"
-msgstr "Katkestatud: pesa viga!"
-
-msgid "Aborted: buffer error!"
-msgstr "Katkestatud: puhvri viga!"
-
-msgid "Aborted: everything is not writable!"
-msgstr "Katkestatud: kõikidel vajalikel asjadel ei ole kirjutusõigusi!"
-
-msgid "Aborted: could not extract the package!"
-msgstr "Katkestatud: ei saanud pakke lahti pakkida!"
-
-msgid "Visits"
-msgstr "Külastused"
-
-msgid "Daily"
-msgstr "Päevane"
-
-msgid "Weekly"
-msgstr "Nädalane"
-
-msgid "Monthly"
-msgstr "Kuine"
-
-msgid "Yearly"
-msgstr "Aastane"
-
-msgid "Size"
-msgstr "Suurus"
-
-msgid "Clean everything"
-msgstr "Puhasta kõik"
-
-msgid "Purge cache"
-msgstr "Puhasta vahemälu"
-
-msgid "Purge logs"
-msgstr "Puhasta logid"
-
-msgid "Purge sent files"
-msgstr "Puhasta saadetud failid"
-
-msgid "Purge updates"
-msgstr "Puhasta uuendused"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "Failihoidla mida Te puhastasite on nüüd tühi!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-"Hoidke oma Jappix värske ja kiire, puhastage failihoidlaid regulaarselt!"
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-"Lae üles oma muusikat (OGG Vorbis, MP3 või WAV) et seda saaks Jappix'is "
-"kuulata!"
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr "Fail mida Te tahtsite üles laadida peab olema väiksem kui %s."
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-"Selle tööriistaga saate ennast kursis hoida mida Teie kasutajad serveris "
-"hoiavad ja vajaduse korral eemaldada ebasobivaid materjale."
-
-msgid "Title"
-msgstr "Pealkiri"
-
-msgid "Artist"
-msgstr "Esitaja"
-
-msgid "Album"
-msgstr "Album"
-
-msgid "File"
-msgstr "Fail"
-
-msgid "Upload"
-msgstr "Üleslaadimine"
-
-msgid "The folder is empty."
-msgstr "Kaust on tühi."
-
-msgid "The music could not be received, please retry!"
-msgstr "Muusikat ei saadud vastu võtta, proovige uuesti!"
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-"Vale muusikafaili formaat, palun laadige üles OGG Vorbis, MP3 või WAV "
-"formaadis!"
-
-msgid "Your music has been added!"
-msgstr "Teie muusika on lisatud!"
-
-msgid "The selected elements have been removed."
-msgstr "Valitud elemendid on eemaldatud."
-
-msgid "You must select elements to remove!"
-msgstr "Te peate valima elemente mida eemaldada!"
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-"Selle tööriistaga saate lisada uue kasutaja või muuta parooli. Palun lisage "
-"tugev parool!"
-
-msgid "Manage"
-msgstr "Halda"
-
-msgid "List"
-msgstr "Nimekiri"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-"Selle tööriistaga saate eemaldada kasutajaid. Viimast kasutajat eemaldada ei "
-"saa, vähemalt üks peab alati alles jääma."
-
-msgid "The user has been added!"
-msgstr "Kasutaja on lisatud!"
-
-msgid "The chosen users have been removed."
-msgstr "Valitud kasutajad on eemaldatud."
-
-msgid "You must select one or more users to be removed!"
-msgstr "Te peate valima ühe või mitu kasutajat keda eemaldada!"
-
-msgid "Yesterday"
-msgstr "Eile"
-
-msgid "%s days ago"
-msgstr "%s päeva tagasi"
-
-msgid "User currently active"
-msgstr "Hetkel aktiivsed kasutajad"
-
-msgid "Last seen: %s"
-msgstr "Viimati nähtud: %s"
-
-msgid "Inactive since: %s"
-msgstr "Inaktiivsed alates: %s"
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr "Näib, et Teie sõber ei ole Teie sõnumeid kätte saanud!"
-
-msgid "Static content server"
-msgstr "Staatilise sisuga server"
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr "Siin on staatilise sisuga serverid %1s, “%2s”."
-
-msgid "User uploads server"
-msgstr "Kasutajate üleslaadimised serverisse"
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr "Siin on kasutajate üleslaadimised %1s, “%2s”."
-
-msgid "Suggested friends"
-msgstr "Soovitatud sõbrad"
-
-msgid "Check all"
-msgstr "Vali kõik"
-
-msgid "Uncheck all"
-msgstr "Eemalda valik kõigelt"
-
-msgid "Choose"
-msgstr "Vali"
-
-msgid "List name"
-msgstr "Näita nime"
-
-msgid "Allow"
-msgstr "Luba"
-
-msgid "Deny"
-msgstr "Keela"
-
-msgid "Group"
-msgstr "Grupp"
-
-msgid "Subscription"
-msgstr "Tellimus"
-
-msgid "Both"
-msgstr "Mõlemad"
-
-msgid "From"
-msgstr "Kellelt"
-
-msgid "Everybody"
-msgstr "Igaüks"
-
-msgid "Send messages"
-msgstr "Saada sõnum"
-
-msgid "Send queries"
-msgstr "Saada päringud"
-
-msgid "See my status"
-msgstr "Vaata minu staatust"
-
-msgid "Send his/her status"
-msgstr "Saada tema staatus"
-
-msgid "Everything"
-msgstr "Kõik"
-
-msgid "Item"
-msgstr "Ühik"
-
-msgid "Order"
-msgstr "Järjekord"
-
-msgid "Active for this session"
-msgstr "Selleks sessiooniks aktiivne"
-
-msgid "Always active"
-msgstr "Alati aktiivne"
-
-msgid "User directory"
-msgstr "Kasutaja kataloog"
-
-msgid "Search a friend"
-msgstr "Otsi sõpra"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-"Server ei toeta nõutud detaili või ei ole see saadaval, seega detaili "
-"protsessimine on katkestatud."
-
-msgid "Send him/her a message"
-msgstr "Saada temale sõnum"
-
-msgid "Start a chat with him/her"
-msgstr "Alusta temaga vestlust"
-
-msgid "Available shortcuts:"
-msgstr "Saadaolevad otseteed:"
-
-msgid "%s removes the chat logs"
-msgstr "%s eemaldab vestluse logid"
-
-msgid "%s joins a groupchat"
-msgstr "%s liitub grupivestlusega"
-
-msgid "%s closes the chat"
-msgstr "%s sulgeb vestluse"
-
-msgid "%s shows the user profile"
-msgstr "%s näitab kasutaja profiili"
-
-msgid "%s sends a message to the room"
-msgstr "%s saadab ruumi sõnumi"
-
-msgid "%s changes your nickname"
-msgstr "%s muudab Teie hüüdnime"
-
-msgid "%s sends a message to someone in the room"
-msgstr "%s saadab kellegile ruumis olevale sõnumi"
-
-msgid "%s changes the room topic"
-msgstr "%s muudab ruumi teema"
-
-msgid "%s kicks a user of the room"
-msgstr "%s lõi ruumi kasutaja välja"
-
-msgid "%s bans a user of the room"
-msgstr "%s bännis ruumi kasutaja"
-
-msgid "%s invites someone to join the room"
-msgstr "%s kutsub kellegi ruumiga liituma"
-
-msgid "Public profile"
-msgstr "Avalik profiil"
-
-msgid "Your profile anywhere on the Web."
-msgstr "Sinu profiil ükskõik kus veebis."
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-"%s on Jappix.com teenus, mis teeb su XMPP profiili avalikuks. See teeb selle "
-"jagamise lihtsamaks. Sinu sotsiaalse kanali, sinu praeguse asukoha ja sinu "
-"kontaktinfo vaatamiseks pole XMPP konto vajalik."
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-"Veelgi enam, iga pilt sinu sotsiaalses kanalis lisatakse ilusale piltide "
-"ajateljele. Sa saad nüüd enda poolt jagatud pilte vaadata aasta kaupa."
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-"Sa võid kasutada oma XMPP avatari ühtse avatarina igal veebisaidil, blogis "
-"ja foorumis, mida sa kasutad. Kui sa muudad seda XMPP-is, siis on uus avatar "
-"nähtav igal pool. Milline geniaalne edasiminek!"
-
-msgid "Yay, let's create your public profile!"
-msgstr "Jah, teeme mulle avaliku profiili!"
-
-msgid "Enable my public profile"
-msgstr "Luba minu avalik profiil"
-
-msgid "Jappix for your phone"
-msgstr "Jappix sinu telefoni jaoks"
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr ""
-"Lihtne telefonirakendus sõnumite, kanalite, profiilide ja palju muu jaoks!"
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-"See teavitus on ainult informatiivne, võimalik, et andmed, millele see "
-"viitab on juba eemaldatud."
-
-msgid "You haven't provided any file to download"
-msgstr "Sa pole sisestanud ühtegi faili, mida alla laadida"
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr "Sa ei saa faili alla laadida, kui sa ei sisesta võtit"
-
-msgid "Woah this file isn't found, please double check"
-msgstr "Seda faili ei leitud, palun kontrolli uuesti"
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr "Sinu poolt antud võtmel pole luba selle faili allalaadimiseks"
-
-msgid "Statistics are currently disabled in the settings."
-msgstr "Statistika on praegu seadetest välja lülitatud."
-
-msgid "New event!"
-msgstr "Uus sündmus!"
-
-msgid "%s is typing..."
-msgstr "%s kirjutab..."
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr "Sisestatud turvakood on vale. Palun proovi mõnda teist."
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-"Sinu poolt valitud kasutajanimi pole saadaval. Palun proovi mõnda teist."
-
-msgid "There was an error registering your account. Please retry."
-msgstr "Sinu konto registreerimisel tekkis viga. Proovi uuesti."
-
-msgid "Username"
-msgstr "Kasutajanimi"
-
-msgid "Enter password"
-msgstr "Sisesta parool"
-
-msgid "Once again..."
-msgstr "Veel kord..."
-
-msgid "Code"
-msgstr "Kood"
-
-msgid "Security code"
-msgstr "Turvakood"
-
-msgid "Advertising space available!"
-msgstr "Saadaval on reklaamiruumi!"
-
-msgid "Advertise here"
-msgstr "Reklaami siin"
-
-msgid "Analytics (%s)"
-msgstr "Analytics (%s)"
-
-msgid "Track visits"
-msgstr "Jälgi külastusi"
-
-msgid "Piwik URL"
-msgstr "Piwiki aadress"
-
-msgid "Piwik tracking ID"
-msgstr "Piwick jälgimise ID"
-
-msgid "Advertising (%s)"
-msgstr "Reklaam (%s)"
-
-msgid "Enable ads"
-msgstr "Luba reklaamid"
-
-msgid "Standard ads key"
-msgstr "Stndardne reklaami võti"
-
-msgid "Content ads key"
-msgstr "Sisu reklaami võti"
-
-msgid "AdSense client ID"
-msgstr "AdSense kliendi ID"
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr "Peata"
-
-msgid "Mute"
-msgstr "Hääl väljas"
-
-msgid "Unmute"
-msgstr "Hääl sees"
-
-msgid "Is calling you"
-msgstr "Helistab sulle"
-
-msgid "Initiating call"
-msgstr "Kõne käivitamine"
-
-msgid "Connecting to call..."
-msgstr "Kõne ühendamine ..."
-
-msgid "Waiting..."
-msgstr "Ootamine..."
-
-msgid "Ringing..."
-msgstr "Helisemine..."
-
-msgid "Declined the call"
-msgstr "Kõnet ei võetud vastu"
-
-msgid "Call error"
-msgstr "Kõne tõrge"
-
-msgid "Ended the call"
-msgstr "Lõpetas kõne"
-
-msgid "Call ended"
-msgstr "Kõne lõpetati"
-
-msgid "Call canceled"
-msgstr "Kõne tühistati"
-
-msgid "Canceled the call"
-msgstr "Tühistas kõne"
-
-msgid "Is already in a call"
-msgstr "On juba kõnes"
-
-msgid "Ending call..."
-msgstr "Kõne lõpetamine..."
-
-msgid "Accept"
-msgstr "Võta vastu"
-
-msgid "Decline"
-msgstr "Keeldu"
-
-msgid "Okay"
-msgstr "OK"
-
-msgid "Retry"
-msgstr "Proovi uuesti"
-
-msgid "Audio Call"
-msgstr "Telefonikõne"
-
-msgid "Video Call"
-msgstr "Videokõne"
diff --git a/i18n/fa/LC_MESSAGES/main.mo b/i18n/fa/LC_MESSAGES/main.mo
deleted file mode 100644
index 8999837c..00000000
--- a/i18n/fa/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/fa/LC_MESSAGES/main.po b/i18n/fa/LC_MESSAGES/main.po
deleted file mode 100644
index a550dfb1..00000000
--- a/i18n/fa/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2286 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-# Afshar Esmailzadeh <afsharblog@gmail.com>, 2014
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:21+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Persian (http://www.transifex.com/projects/p/jappix/language/"
-"fa/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: fa\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "default:RTL"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"نمی‌توان جاوااسکریپت را در مرورگر شما یافت. بنابراین شما نمی‌توانید Jappix را "
-"ببینید! لطفاً این را اصلاح کنید."
-
-msgid "Social channel, chat and more."
-msgstr ""
-
-msgid "Create your public profile."
-msgstr "پروفایل عمومی خود را بسازید."
-
-msgid "A mini-chat for your website."
-msgstr "مینی-چت برای وب سایت شما."
-
-msgid "Get Jappix, get support."
-msgstr ""
-
-msgid "Statistics around Jappix."
-msgstr ""
-
-msgid "Legal disclaimer for Jappix."
-msgstr ""
-
-msgid "Download Jappix for free."
-msgstr "Jappix را بصورت رایگان دریافت کنید."
-
-msgid "Contribute to the Jappix code."
-msgstr ""
-
-msgid "Jappix for your company."
-msgstr "Jappix برای شرکت شما."
-
-msgid "Find a public Jappix node."
-msgstr ""
-
-msgid "Credits"
-msgstr "اعتبار"
-
-msgid "Association"
-msgstr "انجمن"
-
-msgid "Web agency"
-msgstr "خبرگذاری وب"
-
-msgid "Legal"
-msgstr "حقوقی"
-
-msgid "Legal disclaimer"
-msgstr "سلب مسئولیت حقوقی"
-
-msgid "Terms of use and legal"
-msgstr "شرایط استفاده و قوانین حقوقی"
-
-msgid "Owner"
-msgstr "مالک"
-
-msgid "Node owner"
-msgstr ""
-
-msgid "By using our service, you accept %s."
-msgstr ""
-
-msgid "our terms of use"
-msgstr "شرایط استفاده ما"
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Jappix توسط یک اشکال شبکه متوقف شده‌است. یک اشکال یا ورود بد (بررسی کنید که "
-"اعتبارات درست را وارد کرده‌اید). شرمنده بابات دردسر ایجاد شده."
-
-msgid "The element list on this server could not be obtained!"
-msgstr "فهرست عناصر این سرور نمی‌تواند گرفته شود!"
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"گذرواژهٔ شما تغییر کرده‌است. شما می‌توانید با داده‌ها جدید ورودی متصل شوید."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "حساب XMPP شما حذف شده‌است. بدرود!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "شما از حساب XMPP خود خارج شده‌اید. روز خوش!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr ""
-"اتاقی که شما به آن وصل شده‌اید به نظر وجود ندارد. شما می‌توانید ایجادش کنید!"
-
-msgid "The groupchat has been removed."
-msgstr "چپ گروهی خذف شد. الآن هر کس دیگری می‌تواند آن را ایجاد کند."
-
-msgid "The user that you want to reach is not present in the room."
-msgstr ""
-
-msgid "Please enter the group chat address to join."
-msgstr "لطفا آدرس چت گروهی را برای ورود وارد کنید."
-
-msgid "Please enter your nickname to join %s."
-msgstr "نام نمایشی خود را برای ورود وارد کنید."
-
-msgid "This room (%s) is protected with a password."
-msgstr "این اتاق (%ها) به وسیله رمز عبور امن شده است."
-
-msgid "Your browser is out of date!"
-msgstr "مرورگر شما منسوخ است!"
-
-msgid "Last %s version is better!"
-msgstr ""
-
-msgid "Login"
-msgstr "وارد شدن"
-
-msgid "Register"
-msgstr "ثبت نام"
-
-msgid "Here we go!"
-msgstr "اینجا می‌رویم!"
-
-msgid "Server"
-msgstr "سرور"
-
-msgid "Password"
-msgstr "پسورد"
-
-msgid "Remember me"
-msgstr "مرا به خاطر بسپار"
-
-msgid "This tool has been disabled!"
-msgstr "این سرویس غیر فعال شده و دسترسی شما به ان ممکن نیست"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr "به دلیل مشکل شبکه‌ای، شما قطع شده‌اید. الآن چه می‌خواهید بکنید؟"
-
-msgid "Reconnect"
-msgstr "اتصال مجدد"
-
-msgid "Messages"
-msgstr "پیغام‌ها"
-
-msgid "Profile"
-msgstr "پروفایل"
-
-msgid "Options"
-msgstr "گزینه‌ها"
-
-msgid "Disconnect"
-msgstr "قطع"
-
-msgid "Filter"
-msgstr "پالایه"
-
-msgid "Add a friend"
-msgstr "افزودن یک دوست"
-
-msgid "Your groupchats"
-msgstr "گروه‌های چت شما"
-
-msgid "Manage your favorite groupchats"
-msgstr "گفتگوی گروهی محبوبتان را مدیریت کنید"
-
-msgid "More stuff"
-msgstr "چیزهای بیشتر"
-
-msgid "Show all friends"
-msgstr "مشاهده همه دوستان"
-
-msgid "Only show connected friends"
-msgstr "مشاهده دوستان انلاین"
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "بایگانی‌های پیغام"
-
-msgid "Date"
-msgstr "تاریخ"
-
-msgid "A short message?"
-msgstr "یک پیغام کوتاه؟"
-
-msgid "How are you?"
-msgstr "چطورید؟"
-
-msgid "What are you doing?"
-msgstr "چکاری می‌کنید؟"
-
-msgid "Join a chat"
-msgstr "ورود به گفتگو"
-
-msgid "Status"
-msgstr "وضعیت"
-
-msgid "Available"
-msgstr "حاضر"
-
-msgid "Talkative"
-msgstr "پرحرف"
-
-msgid "Away"
-msgstr "دور"
-
-msgid "Not available"
-msgstr "ناحاضر"
-
-msgid "Busy"
-msgstr "مشغول"
-
-msgid "Offline"
-msgstr "آفلاین"
-
-msgid "Mood"
-msgstr "حالت"
-
-msgid "None"
-msgstr "هیچ"
-
-msgid "Crazy"
-msgstr "دیوانه"
-
-msgid "Excited"
-msgstr "هیحان زده"
-
-msgid "Playful"
-msgstr "اهل بازی"
-
-msgid "Happy"
-msgstr "خوشحال"
-
-msgid "Shocked"
-msgstr "پاسخ همراه با اعلان"
-
-msgid "Hot"
-msgstr "داغ"
-
-msgid "Sad"
-msgstr "غمگین"
-
-msgid "Amorous"
-msgstr "عاشق"
-
-msgid "Confident"
-msgstr "اعتماد به نقس"
-
-msgid "Activity"
-msgstr "فعالیت"
-
-msgid "Chores"
-msgstr ""
-
-msgid "Drinking"
-msgstr "نوشیدن"
-
-msgid "Eating"
-msgstr "خوردن"
-
-msgid "Exercising"
-msgstr "تمرین‌کردن"
-
-msgid "Grooming"
-msgstr "آراسته‌کردن"
-
-msgid "Appointment"
-msgstr "انتصاب"
-
-msgid "Inactive"
-msgstr "غیرفعال"
-
-msgid "Relaxing"
-msgstr "آرامش"
-
-msgid "Talking"
-msgstr "گفتگو"
-
-msgid "Traveling"
-msgstr "سفر کردن"
-
-msgid "Working"
-msgstr "کار کردن"
-
-msgid "View profile"
-msgstr "نمایش مشخصات"
-
-msgid "This is a repeat from %s"
-msgstr "این یک تکراری از %s است."
-
-msgid "Repeat this notice"
-msgstr "تکرار این موضوع"
-
-msgid "Remove this notice"
-msgstr "حذف این موضوع"
-
-msgid "Your profile"
-msgstr "مشخصات شما"
-
-msgid "Identity"
-msgstr "هویت"
-
-msgid "Profile image"
-msgstr "مشخصات شما"
-
-msgid "Others"
-msgstr "دیگران"
-
-msgid "Other"
-msgstr "دیگر"
-
-msgid "Personal"
-msgstr "شخصی"
-
-msgid "Complete name"
-msgstr "نام کامل"
-
-msgid "Nickname"
-msgstr "نام کاربری"
-
-msgid "First name"
-msgstr "نام"
-
-msgid "Last name"
-msgstr "نام خانوادگی"
-
-msgid "Date of birth"
-msgstr "تاریخ تولد"
-
-msgid "Contact"
-msgstr "مشخصات تماس"
-
-msgid "E-mail"
-msgstr "ایمیل"
-
-msgid "Phone"
-msgstr "تلفن"
-
-msgid "Website"
-msgstr "آدرس وب سایت"
-
-msgid "Current"
-msgstr "واحد پول"
-
-msgid "Delete"
-msgstr "حذف‌کردن"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr "چه متأسر کننده! شما تصویر پروفایلی در کارت شناساییتان تعیین نکرده‌اید!"
-
-msgid "Address"
-msgstr "نشانی"
-
-msgid "Street"
-msgstr "خیابان"
-
-msgid "City"
-msgstr "شهر"
-
-msgid "Postal code"
-msgstr "کد پستی"
-
-msgid "Country"
-msgstr "کشور"
-
-msgid "Biography"
-msgstr "زندگی‌نامه"
-
-msgid "Important notice"
-msgstr "اخطار مهم"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr ""
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-
-msgid "Save"
-msgstr "ذخیره"
-
-msgid "Cancel"
-msgstr "انصراف"
-
-msgid "Edit options"
-msgstr "ویرایش اختیارات"
-
-msgid "Channel"
-msgstr "کانال"
-
-msgid "Commands"
-msgstr "دستورات"
-
-msgid "Sounds"
-msgstr "صداها"
-
-msgid "Privacy"
-msgstr "حریم خصوصی"
-
-msgid "Message archiving"
-msgstr "بایگانی پیام"
-
-msgid "Store an history of your chats"
-msgstr "ذخیره سازی تاریخچه ی گفتگوهای شما"
-
-msgid "Geolocation"
-msgstr "منطقهٔ جغرافیایی"
-
-msgid "Disabled"
-msgstr "غیرفعال شد"
-
-msgid "Store all chats"
-msgstr "ذخیره سازی همه ی گفتگوها"
-
-msgid "Store friend chats"
-msgstr "ذخیره سازی گفتگو های دوستانه"
-
-msgid "Remove all archives"
-msgstr "پاک سازی تمام آرشیو"
-
-msgid "Empty"
-msgstr "خالی"
-
-msgid "Empty channel"
-msgstr "کانال خالی"
-
-msgid "Persistent"
-msgstr "ماندگار"
-
-msgid "Maximum notices"
-msgstr "بیشترین آگاهی‌دادن‌ها"
-
-msgid "Account"
-msgstr "حساب"
-
-msgid "Change password"
-msgstr "تغییر گذرواژه"
-
-msgid "Delete account"
-msgstr "حذف حساب"
-
-msgid "Old"
-msgstr "قدیمی"
-
-msgid "New (2 times)"
-msgstr "جدید (۲ مرتبه)"
-
-msgid "Suggested chatrooms"
-msgstr ""
-
-msgid "Skip"
-msgstr "صرف نظر کردن"
-
-msgid "Continue"
-msgstr "ادامه"
-
-msgid "To"
-msgstr "به"
-
-msgid "Close"
-msgstr "بستن"
-
-msgid "unknown"
-msgstr "ناشناخته"
-
-msgid "Unavailable"
-msgstr "ناموجود"
-
-msgid "is now"
-msgstr "الآن هست"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "لظفاً صبر کنید تا آواتار شما بارگذاری شود..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "اینجاست! یک تصویر زیبا و جدید پروفایل!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "فایل تصویر وارد شده پشتیبانی نمیشود یا اندازه آن درست نیست."
-
-msgid "Reply"
-msgstr "پاسخ"
-
-msgid "Error"
-msgstr "خطا"
-
-msgid "Click here to solve the error"
-msgstr "اینجا را برای حل ایراد کلیک کنید"
-
-msgid "You"
-msgstr "شما"
-
-msgid "Remove"
-msgstr "حذف"
-
-msgid "Rename"
-msgstr "تغییر نام"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "سلام,من %s هستم , من خوشحال میشوم که شما را به دوستان خودم اضافه کنم."
-
-msgid "Smiley insertion"
-msgstr "افزودن شکلک"
-
-msgid "Change style"
-msgstr "تغییر سبک"
-
-msgid "Text in bold"
-msgstr "متن ضخیم"
-
-msgid "Text in italic"
-msgstr "متن مورب"
-
-msgid "Underlined text"
-msgstr "متن زیرخط کشیده شده"
-
-msgid "Send a file"
-msgstr "ارسال فایل"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr ""
-
-msgid "Save chat"
-msgstr "ذخیرهٔ گفتگو"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"برای گرفتن گزارش کار چت روی لینک مقابل کلیک کنید, وصبر کنید. سپس دوباره کلیک "
-"کنید تا فایل را دریافت کنید."
-
-msgid "This chat is empty!"
-msgstr "این گفتگو خالی‌است!"
-
-msgid "Generate file!"
-msgstr "ساختن پرونده!"
-
-msgid "Download file!"
-msgstr "بارگیری پرونده!"
-
-msgid "Clean current chat"
-msgstr "پاکسازی گفتگوی فعلی"
-
-msgid "Show user profile"
-msgstr "نمایش پروفایل کاربری"
-
-msgid "Add this contact to your friends"
-msgstr "افزودن این تماس به دوستان شما"
-
-msgid "Add this groupchat to your favorites"
-msgstr "افزودن این گفتگوی گروهی به محبوب‌ها شما"
-
-msgid "All tabs"
-msgstr "همهٔ برگه‌ها"
-
-msgid "Join groupchat"
-msgstr "ورود به گفتگوی گروهی"
-
-msgid "Close this tab"
-msgstr "بستن این برگه"
-
-msgid "no subject defined for this room."
-msgstr "موضوعی برای این اتاق تعیین نشده‌است."
-
-msgid "Administration panel for this room"
-msgstr "پنل مدیریتی این اتاق"
-
-msgid "Moderators"
-msgstr "مدیران"
-
-msgid "Participants"
-msgstr "شریک‌ها"
-
-msgid "Visitors"
-msgstr "بازدیدکنندگان"
-
-msgid "Manage favorite rooms"
-msgstr "مدیریت اتاق‌ها محبوب شده"
-
-msgid "Change favorites"
-msgstr "عوض‌کردن محبوب شده‌ها"
-
-msgid "Search a room"
-msgstr "جستجوی یک اتاق"
-
-msgid "Select a favorite"
-msgstr "انتخاب یکی از محبوب شده‌ها"
-
-msgid "Getting the name..."
-msgstr "گرفتن نام..."
-
-msgid "Gateway"
-msgstr "دروازه"
-
-msgid "Name"
-msgstr "نام"
-
-msgid "Room"
-msgstr "اتاق"
-
-msgid "Add"
-msgstr "افزودن"
-
-msgid "Edit"
-msgstr "ویرایش"
-
-msgid "Search a room on"
-msgstr ""
-
-msgid "No room found on this server."
-msgstr "اتاقی در این سرور یافت نشد."
-
-msgid "Service discovery"
-msgstr "جستجوی "
-
-msgid "Server to query"
-msgstr "کارساز برای پرس‌وجو"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "شرمنده. ولی موجودیت هیچ نتیجه‌ای را برنگرداند!"
-
-msgid "Accounts"
-msgstr "حساب‌ها"
-
-msgid "Authentications"
-msgstr "تصدیقات"
-
-msgid "Automation"
-msgstr "خودکاری"
-
-msgid "Clients"
-msgstr "مشتری‌ها"
-
-msgid "Collaboration"
-msgstr "همکاری"
-
-msgid "Components"
-msgstr "اجزاء"
-
-msgid "Rooms"
-msgstr "اتاق‌ها"
-
-msgid "Directories"
-msgstr "پوشه ها"
-
-msgid "Gateways"
-msgstr "دروازه‌ها"
-
-msgid "News"
-msgstr "اخبار"
-
-msgid "Hierarchy"
-msgstr "سلسه مراتبی"
-
-msgid "Proxies"
-msgstr "پروکسی‌ها"
-
-msgid "Publication/Subscription"
-msgstr "عمومی کردن/اشتراک گذاری"
-
-msgid "Storage"
-msgstr "انباره"
-
-msgid "Service offline or broken"
-msgstr ""
-
-msgid "Your inbox"
-msgstr "صندوق ورودی شما"
-
-msgid "Available actions"
-msgstr "اقدام‌ها موجود"
-
-msgid "Clean"
-msgstr "تمیز"
-
-msgid "New"
-msgstr "جدید"
-
-msgid "Received"
-msgstr "دریافت شده"
-
-msgid "Subject"
-msgstr "موضوع"
-
-msgid "Content"
-msgstr "محتوا"
-
-msgid "Send message"
-msgstr "فرستادن پیام"
-
-msgid "Your inbox is empty."
-msgstr "صندوق ورودی شما خالی‌است."
-
-msgid "MUC administration"
-msgstr "مدیریت MUC"
-
-msgid "You administrate this room"
-msgstr "شما این اتاق را مدیریت میکنید"
-
-msgid "Enter new subject"
-msgstr "افزودن عنوان جدید"
-
-msgid "Configuration"
-msgstr "پیکربندی"
-
-msgid "Authorizations"
-msgstr "اجازه‌ها"
-
-msgid "Member list"
-msgstr "فهرست عضو"
-
-msgid "Owner list"
-msgstr "فهرست دارنده"
-
-msgid "Administrator list"
-msgstr "فهرست مدیران"
-
-msgid "Outcast list"
-msgstr "لیست اخراجی"
-
-msgid "Add an input"
-msgstr "افزودن یک وررو"
-
-msgid "Destroy this MUC"
-msgstr "نابودسازی این MUC"
-
-msgid "Yes, let's do it!"
-msgstr "بله. بگذار انجامش دهیم!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "دوست شما به مکالمه توجه می‌کنند."
-
-msgid "Your friend is writing a message..."
-msgstr "دوست شما در حال نوشتن یک پیام است..."
-
-msgid "Your friend stopped writing a message."
-msgstr "دوست شما از نوشتن پیامی باز ایستاد."
-
-msgid "Your friend is doing something else."
-msgstr "دوست شما کا دیگری می‌کند."
-
-msgid "Your friend closed the chat."
-msgstr "دوست شما گفتگو را بست."
-
-msgid "Requesting this service..."
-msgstr "درخواست کردن این سرویس..."
-
-msgid "Loading"
-msgstr "بارگیری"
-
-msgid "changed his/her nickname to %s"
-msgstr "نام مستعارش را به %s تغییر داد"
-
-msgid "joined the chat room"
-msgstr "به اتاق گفتگو پیوست"
-
-msgid "left the chat room"
-msgstr "ترک‌کردن اتاق گفتگو"
-
-msgid "%s left"
-msgstr "$s خارج شد"
-
-msgid "%s joined"
-msgstr "%s وارد شد"
-
-msgid "no status"
-msgstr "بی‌وضعیت"
-
-msgid "has been kicked"
-msgstr "بیرون شده‌است"
-
-msgid "has been banned"
-msgstr "بسته شده‌است"
-
-msgid "no reason"
-msgstr "بی‌دلیل"
-
-msgid "Communicate with the entire world!"
-msgstr "با تمام دنیا ارتباط برقرار کنید!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-
-msgid "Hi there!"
-msgstr "سلام!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr ""
-"به حساب کاربری XMPP خود وارد شوید یا به صورت رایگان یک حساب کاربری بسازید!"
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-"به حساب کاربری XMPP خود وارد شوید. شما همچنان میتوانید با استفاده از حساب "
-"کاربری خود به گفتگو های گروهی وارد شوید."
-
-msgid "Previous"
-msgstr "قبلی"
-
-msgid "General"
-msgstr "عمومی"
-
-msgid "Advanced"
-msgstr "پیشرفته"
-
-msgid "Resource"
-msgstr "منبع"
-
-msgid "Priority"
-msgstr "اولویت"
-
-msgid "Low"
-msgstr "کم"
-
-msgid "Medium"
-msgstr "متوسط"
-
-msgid "High"
-msgstr "زیاد"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-"با نام نمایشی دلخواه خود و به گفتگوهای گروهی دلخواه خود وارد شوید.همینطور "
-"میتوانید به % برگردید"
-
-msgid "login page"
-msgstr "صفحهٔ واردشدن"
-
-msgid "Share this link with your friends:"
-msgstr "اشتراک این پیوند با دوستانتان:"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-
-msgid "Required"
-msgstr "مورد نیاز"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "شما قبلا ثبت نام کرده اید.این آدرس XMPP شماست:"
-
-msgid "Manager"
-msgstr "مدیر"
-
-msgid "Encrypted"
-msgstr "رمزنگاری‌شده"
-
-msgid "Unencrypted"
-msgstr "رمزنگاری‌نشده"
-
-msgid "Where are you?"
-msgstr "شما کجا هستید؟"
-
-msgid "What's up with you?"
-msgstr "چه اتفاقی برای شما افتاد؟"
-
-msgid "Type something you want to share with your friends..."
-msgstr ""
-
-msgid "Fetching the social channel..."
-msgstr ""
-
-msgid "You are synchronized with your network."
-msgstr "شما با شبکه خود همسان سازی شدید."
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "نمیتوان چیزی فرستاد:شما فقط قادر به دریافت اطلاعیه ها هستید!"
-
-msgid "Media viewer"
-msgstr "نمایشگر رسانه"
-
-msgid "Browse"
-msgstr "جستجو"
-
-msgid "Command"
-msgstr "دستور"
-
-msgid "Subscribe"
-msgstr "تصویب‌کردن"
-
-msgid "Join"
-msgstr "وصل‌شدن"
-
-msgid "Automatic"
-msgstr "خودکار"
-
-msgid "Search"
-msgstr "جستجو"
-
-msgid "No result!"
-msgstr "بی‌نتیجه!"
-
-msgid "No notifications."
-msgstr "خبر جدیدی نیست"
-
-msgid "would like to add you as a friend."
-msgstr "دوست دارد شما را به عنوان یک بیافزاید."
-
-msgid "would like you to join this chatroom:"
-msgstr "از شما برای ورود به این اتاق گفتگو دعوت میکنم:"
-
-msgid "Do you accept?"
-msgstr "قبول می‌کنید؟"
-
-msgid "Yes"
-msgstr "بله"
-
-msgid "No"
-msgstr "خیر"
-
-msgid "would like to get authorization."
-msgstr "دوست دارد که دسترسی بگیرد."
-
-msgid "would like to send you a file: “%s”."
-msgstr ""
-
-msgid "has received a file exchange request: “%s”."
-msgstr ""
-
-msgid "has accepted to receive your file: “%s”."
-msgstr ""
-
-msgid "has rejected to receive your file: “%s”."
-msgstr ""
-
-msgid "could not receive your file: “%s”."
-msgstr ""
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr ""
-
-msgid "commented an item you follow: “%s”."
-msgstr ""
-
-msgid "liked your post: “%s”."
-msgstr ""
-
-msgid "quoted you somewhere: “%s”."
-msgstr ""
-
-msgid "published on your wall: “%s”."
-msgstr ""
-
-msgid "tagged you in a photo (%s)."
-msgstr ""
-
-msgid "tagged you in a video (%s)."
-msgstr ""
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-
-msgid "Open"
-msgstr "باز کردن"
-
-msgid "Show"
-msgstr "نمایش"
-
-msgid "Hide"
-msgstr "مخفی"
-
-msgid "Submit"
-msgstr "ارائه‌کردن"
-
-msgid "Client"
-msgstr "مشتری"
-
-msgid "System"
-msgstr "سامانه"
-
-msgid "Local time"
-msgstr "زمان محلی"
-
-msgid "Comments"
-msgstr "توضیحات"
-
-msgid "User profile"
-msgstr "پروفایل کاربری"
-
-msgid "See his/her position on the globe"
-msgstr "مکان او را روی زمین ببینید"
-
-msgid "Confirm"
-msgstr "تأیید"
-
-msgid "anonymous mode"
-msgstr "حالت ناشناس"
-
-msgid "Groups"
-msgstr "گروه‌ها"
-
-msgid "Unclassified"
-msgstr "طبقه‌بندی‌نشده"
-
-msgid "Authorize"
-msgstr "اجازه‌دادن"
-
-msgid "Ask for authorization"
-msgstr "درخواست برای اجازه‌دادن"
-
-msgid "Unblock"
-msgstr "بازکردن"
-
-msgid "Prohibit"
-msgstr "منع‌کردن"
-
-msgid "Block"
-msgstr "بستن"
-
-msgid "Chat"
-msgstr "گفتگو"
-
-msgid "Groupchat"
-msgstr "گروه گفتگو"
-
-msgid "Jappix Mobile"
-msgstr "Jappix همراه"
-
-msgid "Desktop"
-msgstr "میزکار"
-
-msgid "Mobile"
-msgstr "گوشی همراه"
-
-msgid "Please wait..."
-msgstr "لطفاً صبرکنید..."
-
-msgid "Please enable JavaScript"
-msgstr "لطفاً جاوااسکریپت را فعال کنید"
-
-msgid "Show comments"
-msgstr "نمایش توضیحات"
-
-msgid "Loading comments..."
-msgstr "بارگذاری توضیحات..."
-
-msgid "Could not get the comments!"
-msgstr "نمیتوان نظرات را مشاهده کرد!"
-
-msgid "Comments locked!"
-msgstr "نظرات قفل شد!"
-
-msgid "Type your comment here..."
-msgstr "توضیح خود را اینجا بنویسید..."
-
-msgid "Your channel"
-msgstr "کانال شما"
-
-msgid "Channel of"
-msgstr "کانال"
-
-msgid "More notices..."
-msgstr "پیغام‌های بیشتر..."
-
-msgid "Attach a file"
-msgstr "متصل‌کردن یک پرونده"
-
-msgid "Send"
-msgstr "ارسال"
-
-msgid "Unattach the file"
-msgstr "جداکردن پرونده"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-
-msgid "Authorization failed"
-msgstr "شکست در اجازه‌گیری"
-
-msgid "Registration failed, please choose a different username"
-msgstr "ثبت نام شکست خورد, لطفا نام کاربری دیگری را انتخاب کنید"
-
-msgid "Service unavailable"
-msgstr "خدمت ناموجود است"
-
-msgid "Internal server error, try later"
-msgstr "ایراد داخلی کارساز. بعداً تلاش کنید"
-
-msgid "Your form has been sent."
-msgstr "فرم شما فرستاده شده‌است."
-
-msgid "Application"
-msgstr "برنامه"
-
-msgid "Media integration"
-msgstr ""
-
-msgid "Keep local chat archives"
-msgstr ""
-
-msgid "XMPP links"
-msgstr "پیوند XMPP"
-
-msgid "Open XMPP links with Jappix"
-msgstr "لینک های XMPP زا با Jappix باز کنید"
-
-msgid "changed the subject to:"
-msgstr "موضوع تغییر کرد به:"
-
-msgid "Welcome!"
-msgstr "خوش آمدید!"
-
-msgid "Friends"
-msgstr "دوستان"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr "به Jappix خوش آمدید, فضای مجازی خود شما!"
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-"قبل از استفاده,شما باید بعضی تنظیمات را انجام دهید, دنبال دوستانتان بگردید و "
-"اطلاعات پروفایل خود را کامل کنید."
-
-msgid "Enable notification sounds"
-msgstr "باز کردن صدای اطلاعیه ها"
-
-msgid "Share your position on the globe"
-msgstr "به اشتراک گذاری محل شما"
-
-msgid "Offline friends"
-msgstr "دوستان آفلاین"
-
-msgid "Don't hide offline friends"
-msgstr "دوستان آفلاین را مخفی نکن"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr ""
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-
-msgid "Share Jappix on %s"
-msgstr ""
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr ""
-
-msgid "Unknown name"
-msgstr "نام ناشناخته"
-
-msgid "Unknown country"
-msgstr "کشور ناشناخته"
-
-msgid "Click to enable"
-msgstr "کلیک برای فعال‌سازی"
-
-msgid "Click to disable"
-msgstr "کلیک برای غیرفعال‌سازی"
-
-msgid "Installation"
-msgstr "نصب"
-
-msgid "Jappix installation"
-msgstr "نصب Jappix"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "به نصب Jappix خوش‌آمدید!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-
-msgid "Installation Steps:"
-msgstr ""
-
-msgid "Welcome"
-msgstr "خوش‌آمدید"
-
-msgid "Storage configuration"
-msgstr "تنظیمات حافظه"
-
-msgid "Administrator account"
-msgstr "حساب مدیر"
-
-msgid "Main configuration"
-msgstr "تنظیمات اصلی"
-
-msgid "Hosts configuration"
-msgstr "تنظیمات میزبان"
-
-msgid "Services installation"
-msgstr "نصب خدمات"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"اگر شما برای نصب و راه اندازی Jappix به کمک نیاز دارید, میتوانید از تمام "
-"مطالب زاهنمای ما استفاده کنید, که از این طریق قابل دسترسی است:"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-"وقت آن رسید که فضای مجازی خود را بسازید: فقط کافیست به مرحله بعد بروید!"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr "پوشه قابل ویرایش است. می‌توانید ادامه دهید!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-"Jappix به شما این امکان را میدهد که تنظیمات خود را مدیریت کنید, افزونه های "
-"جدید را نصب کنید یا از بروزرسانی ها استفاده کنید. برای همین است که شما باید "
-"یک حساب مدیریتی برای دسترسی به مدیریت ایجاد کنید."
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-"وقتی Jappix نصب شد, فقط با کلیک بر روی دکمه مدیریت در صفحه اصلی میتوانید به "
-"آن دسترسی داشته باشید."
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr "شما یک اشتباه دارید یا اینکه رمز های عبور وارد شده مطابقت ندارد!"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-
-msgid "User"
-msgstr "کاربر"
-
-msgid "Service"
-msgstr "خدمت"
-
-msgid "Service name"
-msgstr "نام خدمت"
-
-msgid "Service description"
-msgstr "توضیح خدمت"
-
-msgid "Owner name"
-msgstr "نام مالک"
-
-msgid "Owner website"
-msgstr "وب سایت مالک"
-
-msgid "Connection"
-msgstr "اتصال"
-
-msgid "Lock the host"
-msgstr "قفل‌کردن میزبان"
-
-msgid "Anonymous mode"
-msgstr "حالت ناشناس"
-
-msgid "HTTP authentication"
-msgstr ""
-
-msgid "Registration allowed"
-msgstr "ثبت‌نام اجازه‌داده شده‌است"
-
-msgid "Use the built-in BOSH proxy"
-msgstr ""
-
-msgid "Manager link"
-msgstr "مدیر پیوند"
-
-msgid "Groupchats to join"
-msgstr "گفتگو های گروهی برای ورود"
-
-msgid "Suggest groupchats"
-msgstr ""
-
-msgid "Encryption"
-msgstr "رمزنگاری"
-
-msgid "HTTPS storage"
-msgstr "انبارهٔ HTTPS"
-
-msgid "Force HTTPS"
-msgstr "HTTPS اجباری"
-
-msgid "Compression"
-msgstr "فشرده‌سازی"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-
-msgid "Main host"
-msgstr "میزبان اصلی"
-
-msgid "Groupchat host"
-msgstr "میزبان گفتگوی گروهی"
-
-msgid "Pubsub host"
-msgstr ""
-
-msgid "Anonymous host"
-msgstr "میزبان ناشناس"
-
-msgid "Directory host"
-msgstr "میزبان پوشه"
-
-msgid "BOSH host"
-msgstr ""
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-
-msgid "Thanks for using Jappix!"
-msgstr "ممنون برای استفاده از Jappix!"
-
-msgid "Next"
-msgstr "بعدی"
-
-msgid "Finish"
-msgstr "تمام"
-
-msgid "Check again"
-msgstr "بررسی مجدد"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-
-msgid "%s is installed on your system."
-msgstr "%s روی سیستم شما نصب شده است."
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s روی سیستم شما نصب نشده است, شما باید %2s را نصب کنید."
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "حداکثر اندازهٔ بارگذاری PHP کافی است (%s)."
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-
-msgid "Jappix manager"
-msgstr "مدیریت‌کنندهٔ Jappix"
-
-msgid "Manager access"
-msgstr "دسترسی مدیریت"
-
-msgid "Statistics"
-msgstr "آمارها"
-
-msgid "Hosts"
-msgstr "میزبان‌ها"
-
-msgid "Design"
-msgstr "طراحی"
-
-msgid "Repeat"
-msgstr "تکرار"
-
-msgid "All"
-msgstr "همه"
-
-msgid "Horizontal"
-msgstr "افقی"
-
-msgid "Vertical"
-msgstr "عمودی"
-
-msgid "Center"
-msgstr "وسط"
-
-msgid "Left"
-msgstr "چپ"
-
-msgid "Right"
-msgstr "راست"
-
-msgid "Top"
-msgstr "بالا"
-
-msgid "Bottom"
-msgstr "زیر"
-
-msgid "Adapt"
-msgstr "تطابق"
-
-msgid "Color"
-msgstr "رنگ"
-
-msgid "Users"
-msgstr "کاربران"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-
-msgid "Please use the form below to login to the administration panel."
-msgstr ""
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-
-msgid "Credentials"
-msgstr "اختیارات"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "شما خارج شده‌اید. بدرود!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr ""
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr ""
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr ""
-"تصویر وارد شده معتبر نیست, لطفا از فرمت های PNG, GIF یا JPG استفاده کنید!"
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr ""
-
-msgid "The image could not be received, would you mind retry?"
-msgstr "تصویر دریافت نشد, مایل به تلاش دوباره هستید؟"
-
-msgid "Your service logo has been successfully changed!"
-msgstr "لوگوی شما به خوبی ویرایش شد!"
-
-msgid "Your image was added to the list!"
-msgstr "تصویر شما به لیست اضافه شد!"
-
-msgid "Changes saved!"
-msgstr "تغییرات ذخیره شد!"
-
-msgid "Logo"
-msgstr "لوگو"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr ""
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-
-msgid "Remove this logo"
-msgstr "حذف این لوگو"
-
-msgid "View this logo"
-msgstr "نمایش این لوگو"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-
-msgid "Access statistics"
-msgstr "دسترسی به آمار"
-
-msgid "Share statistics"
-msgstr "به اشتراک گذاری آمار"
-
-msgid "Other statistics"
-msgstr "سایر آمارها"
-
-msgid "January"
-msgstr "ژوئن"
-
-msgid "February"
-msgstr "فوریه"
-
-msgid "March"
-msgstr "مارس"
-
-msgid "April"
-msgstr "آوریل"
-
-msgid "May"
-msgstr "می"
-
-msgid "June"
-msgstr "ژوئن"
-
-msgid "July"
-msgstr "جولای"
-
-msgid "August"
-msgstr "آگوست"
-
-msgid "September"
-msgstr "سپتامبر"
-
-msgid "October"
-msgstr "اوکتوبر"
-
-msgid "November"
-msgstr "نوامبر"
-
-msgid "December"
-msgstr "دسامبر"
-
-msgid "Monday"
-msgstr "دوشنبه"
-
-msgid "Tuesday"
-msgstr "سه‌شنبه"
-
-msgid "Wednesday"
-msgstr "چهارشتبع"
-
-msgid "Thursday"
-msgstr "پنج‌شنبه"
-
-msgid "Friday"
-msgstr "جمعه"
-
-msgid "Saturday"
-msgstr "شنبه"
-
-msgid "Sunday"
-msgstr "یک‌شنبه"
-
-msgid "Total"
-msgstr "همه"
-
-msgid "Archives"
-msgstr "آرشیو"
-
-msgid "Music"
-msgstr "آهنگ"
-
-msgid "Backgrounds"
-msgstr "پشت‌زمینه‌ها"
-
-msgid "Share"
-msgstr "اشتراک"
-
-msgid "Background"
-msgstr "پشت‌زمینه"
-
-msgid "Notice"
-msgstr "آگهی"
-
-msgid "Your design preferences have been saved!"
-msgstr "تنظیمات مربوط به طراحی شما ذخیره شد!"
-
-msgid "Please check your inputs: something is missing!"
-msgstr "لطفاً ورودی‌های خود را بررسی کنید: چیزی گم شده!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-
-msgid "Use default background"
-msgstr "استفاده از پشت‌زمینهٔ پیش‌فرض"
-
-msgid "Use your own image"
-msgstr "از تصویر دلخواه خودتان استفاده کنید"
-
-msgid "Select a background to use and change the display options."
-msgstr ""
-
-msgid "Use your own color"
-msgstr "از رنگ دلخواه خودتان استفاده کنید"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr ""
-
-msgid "Manage backgrounds"
-msgstr "مدیریت پس زمینه ها"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr ""
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-
-msgid "Simple notice"
-msgstr "اطلاعیه ی ساده"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-
-msgid "Advanced notice"
-msgstr "اطلاعیه پیشرفته"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-
-msgid "Available updates"
-msgstr "بروزرسانی های در دسترس"
-
-msgid "What's new?"
-msgstr "چه چیزهایی جدید است؟"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr ""
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr ""
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-
-msgid "Check for updates"
-msgstr "بررسی برای به‌روزرسانی‌ها"
-
-msgid "Update in progress"
-msgstr "به‌روزرسانی در جریان است"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr ""
-
-msgid "The update has failed! Please try again later."
-msgstr ""
-
-msgid "Downloading package..."
-msgstr "بارگیری بسته..."
-
-msgid "Removing current Jappix system files..."
-msgstr ""
-
-msgid "Extracting package..."
-msgstr "بازکردن بسته..."
-
-msgid "Regenerating storage folder tree..."
-msgstr ""
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix الآن به روز است!"
-
-msgid "Aborted: socket error!"
-msgstr "لغو شد: مشکل سوکت!"
-
-msgid "Aborted: buffer error!"
-msgstr "لغو شد: مشکل بافر!"
-
-msgid "Aborted: everything is not writable!"
-msgstr "لغو شد: دسترسی نوشتن موجود نیست!"
-
-msgid "Aborted: could not extract the package!"
-msgstr "لغو شد: قادر به بازگشایی بسته نیست!"
-
-msgid "Visits"
-msgstr "بازدیدها"
-
-msgid "Daily"
-msgstr "روزانه"
-
-msgid "Weekly"
-msgstr "هفته‌ای"
-
-msgid "Monthly"
-msgstr "ماهانه"
-
-msgid "Yearly"
-msgstr "سالانه"
-
-msgid "Size"
-msgstr "اندازه"
-
-msgid "Clean everything"
-msgstr "پاکسازی همه‌چیز"
-
-msgid "Purge cache"
-msgstr "خالی‌کردن میانگیر"
-
-msgid "Purge logs"
-msgstr "خالی‌کردن سیاهه‌ها"
-
-msgid "Purge sent files"
-msgstr "پالایش فایل های ارسالی"
-
-msgid "Purge updates"
-msgstr "خالی‌کردن به‌روزرسانی‌ها"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "پوشه ای که شما برای پاک سازی انتخاب کردید, هم اکنون خالی است!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-"موزیک دلخواه خود را آپلود کنید(Ogg Vorbis, MP3 یا WAV) تا بتوانید در Jappix "
-"به آن گوش دهید!"
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr ""
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-
-msgid "Title"
-msgstr "عنوان"
-
-msgid "Artist"
-msgstr "عنوان"
-
-msgid "Album"
-msgstr "آلبوم"
-
-msgid "File"
-msgstr "پرونده"
-
-msgid "Upload"
-msgstr "بارگذاری"
-
-msgid "The folder is empty."
-msgstr "پوشه خالی است."
-
-msgid "The music could not be received, please retry!"
-msgstr "آهنگ نمی‌تواند گرفته شود. لطفاً مجدداً تلاش کنید!"
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-
-msgid "Your music has been added!"
-msgstr "آهنگ شما اضافه شده‌است!"
-
-msgid "The selected elements have been removed."
-msgstr "عنصر انتخاب شده حذف شد."
-
-msgid "You must select elements to remove!"
-msgstr ""
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-
-msgid "Manage"
-msgstr "مدیریت"
-
-msgid "List"
-msgstr "فهرست"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-
-msgid "The user has been added!"
-msgstr "کاربر اضافه شده‌است!"
-
-msgid "The chosen users have been removed."
-msgstr "کاربرهای انتخاب شده حذف شده‌اند."
-
-msgid "You must select one or more users to be removed!"
-msgstr "شما باید یک یا چند کاربر را برای حذف شدن انتخاب کنید!"
-
-msgid "Yesterday"
-msgstr "دیروز"
-
-msgid "%s days ago"
-msgstr "%s روز پیش"
-
-msgid "User currently active"
-msgstr "کاربر فعال در حال حاضر"
-
-msgid "Last seen: %s"
-msgstr "آخرین دیده شدن: %s"
-
-msgid "Inactive since: %s"
-msgstr "غیرفعال از: %s"
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr ""
-
-msgid "Static content server"
-msgstr "کارساز محتویات ثابت"
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr ""
-
-msgid "User uploads server"
-msgstr "کارساز بارگذاری کاربر"
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr ""
-
-msgid "Suggested friends"
-msgstr "دوستان پیشنهادشده"
-
-msgid "Check all"
-msgstr "انتخاب‌کردن همه"
-
-msgid "Uncheck all"
-msgstr "از انتخاب درآوردن همه"
-
-msgid "Choose"
-msgstr "انتخاب"
-
-msgid "List name"
-msgstr "فهرست نام"
-
-msgid "Allow"
-msgstr "اجازه‌دادن"
-
-msgid "Deny"
-msgstr "ردکردن"
-
-msgid "Group"
-msgstr "گروه"
-
-msgid "Subscription"
-msgstr "اشتراک"
-
-msgid "Both"
-msgstr "هردو"
-
-msgid "From"
-msgstr "از"
-
-msgid "Everybody"
-msgstr "همه"
-
-msgid "Send messages"
-msgstr "پیام‌ها را بفرست"
-
-msgid "Send queries"
-msgstr "پرس‌وجو را بفرست"
-
-msgid "See my status"
-msgstr "وضعیت من را ببین"
-
-msgid "Send his/her status"
-msgstr "وضعیتش را بفرست"
-
-msgid "Everything"
-msgstr "همه‌چیز"
-
-msgid "Item"
-msgstr "قلم"
-
-msgid "Order"
-msgstr "ترتیب"
-
-msgid "Active for this session"
-msgstr "فعال برای این نشست"
-
-msgid "Always active"
-msgstr "همیشه فعال"
-
-msgid "User directory"
-msgstr "پوشهٔ کاربری"
-
-msgid "Search a friend"
-msgstr "جستجوی یک دوست"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-
-msgid "Send him/her a message"
-msgstr "برای او یک پیام بفرستید"
-
-msgid "Start a chat with him/her"
-msgstr "با او گفتگو کنید"
-
-msgid "Available shortcuts:"
-msgstr "میانبر های در دسترس:"
-
-msgid "%s removes the chat logs"
-msgstr ""
-
-msgid "%s joins a groupchat"
-msgstr ""
-
-msgid "%s closes the chat"
-msgstr ""
-
-msgid "%s shows the user profile"
-msgstr ""
-
-msgid "%s sends a message to the room"
-msgstr ""
-
-msgid "%s changes your nickname"
-msgstr ""
-
-msgid "%s sends a message to someone in the room"
-msgstr ""
-
-msgid "%s changes the room topic"
-msgstr ""
-
-msgid "%s kicks a user of the room"
-msgstr ""
-
-msgid "%s bans a user of the room"
-msgstr ""
-
-msgid "%s invites someone to join the room"
-msgstr ""
-
-msgid "Public profile"
-msgstr "پروفایل عمومی"
-
-msgid "Your profile anywhere on the Web."
-msgstr ""
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-
-msgid "Yay, let's create your public profile!"
-msgstr ""
-
-msgid "Enable my public profile"
-msgstr "فعال کردن پروفایل عمومی من"
-
-msgid "Jappix for your phone"
-msgstr "Jappix برای موبایل شما"
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr ""
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-
-msgid "You haven't provided any file to download"
-msgstr ""
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr ""
-
-msgid "Woah this file isn't found, please double check"
-msgstr ""
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr ""
-
-msgid "Statistics are currently disabled in the settings."
-msgstr ""
-
-msgid "New event!"
-msgstr "رخداد جدید!"
-
-msgid "%s is typing..."
-msgstr ""
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-
-msgid "Username"
-msgstr "نام کاربری"
-
-msgid "Enter password"
-msgstr "کلمه ی عبور را وارد کنید"
-
-msgid "Once again..."
-msgstr "دوباره ..."
-
-msgid "Code"
-msgstr "کد"
-
-msgid "Security code"
-msgstr "کد امنیتی"
-
-msgid "Advertising space available!"
-msgstr "فضای تبلیغاتی در دسترس است!"
-
-msgid "Advertise here"
-msgstr "اینجا تبلیغ کنید"
-
-msgid "Analytics (%s)"
-msgstr ""
-
-msgid "Track visits"
-msgstr "دنبال کردن بازدید ها"
-
-msgid "Piwik URL"
-msgstr ""
-
-msgid "Piwik tracking ID"
-msgstr ""
-
-msgid "Advertising (%s)"
-msgstr ""
-
-msgid "Enable ads"
-msgstr "فعال سازی تبلیغات"
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "Content ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr "توقف"
-
-msgid "Mute"
-msgstr "بی صدا کردن"
-
-msgid "Unmute"
-msgstr "لغو حالت بی صدا"
-
-msgid "Is calling you"
-msgstr "با شما تماس گرفته"
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr "برقراری ارتباط برای تماس ..."
-
-msgid "Waiting..."
-msgstr "انتظار ..."
-
-msgid "Ringing..."
-msgstr "زنگ خوردن ..."
-
-msgid "Declined the call"
-msgstr ""
-
-msgid "Call error"
-msgstr "مشکل در تماس"
-
-msgid "Ended the call"
-msgstr "پایان تماس"
-
-msgid "Call ended"
-msgstr "تماس پایان یافت"
-
-msgid "Call canceled"
-msgstr "تماس قطع شد"
-
-msgid "Canceled the call"
-msgstr "تماس قطع شده"
-
-msgid "Is already in a call"
-msgstr "مشغول تماس"
-
-msgid "Ending call..."
-msgstr "اتمام تماس ..."
-
-msgid "Accept"
-msgstr "پذیرش"
-
-msgid "Decline"
-msgstr "رد کردن"
-
-msgid "Okay"
-msgstr "اوکی"
-
-msgid "Retry"
-msgstr "تلاش مجدد"
-
-msgid "Audio Call"
-msgstr "تماس صوتی"
-
-msgid "Video Call"
-msgstr "تماس تصویری"
diff --git a/i18n/fr/LC_MESSAGES/main.mo b/i18n/fr/LC_MESSAGES/main.mo
deleted file mode 100644
index ff64be96..00000000
--- a/i18n/fr/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/fr/LC_MESSAGES/main.po b/i18n/fr/LC_MESSAGES/main.po
deleted file mode 100644
index 1452acda..00000000
--- a/i18n/fr/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2544 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-# Cyril Glapa <kyriog@gmail.com>, 2012
-# Julien Barrier <julien@julienbarrier.fr>, 2013
-# Valérian Saliou <valerian@valeriansaliou.name>, 2014
-# Valérian Saliou <valerian@valeriansaliou.name>, 2013-2014
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-10-13 10:45+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: French (http://www.transifex.com/projects/p/jappix/language/"
-"fr/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: fr\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.9\n"
-
-msgid "default:LTR"
-msgstr "default:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"JavaScript est absent dans votre navigateur, vous ne pourrez donc pas lancer "
-"Jappix. Corrigez cela."
-
-msgid "Social channel, chat and more."
-msgstr "Canal social, tchat et plus."
-
-msgid "Create your public profile."
-msgstr "Créez votre profil public."
-
-msgid "A mini-chat for your website."
-msgstr "Un mini-tchat pour votre site."
-
-msgid "Get Jappix, get support."
-msgstr "Obtenez Jappix, recevez de l'aide."
-
-msgid "Statistics around Jappix."
-msgstr "Statistiques sur Jappix."
-
-msgid "Legal disclaimer for Jappix."
-msgstr "Conditions d'utilisation de Jappix."
-
-msgid "Download Jappix for free."
-msgstr "Téléchargez gratuitement Jappix."
-
-msgid "Contribute to the Jappix code."
-msgstr "Contribuez au code de Jappix."
-
-msgid "Jappix for your company."
-msgstr "Jappix pour votre entreprise."
-
-msgid "Find a public Jappix node."
-msgstr "Trouvez un nœud Jappix public."
-
-msgid "Credits"
-msgstr "Crédits"
-
-msgid "Association"
-msgstr "Association"
-
-msgid "Company"
-msgstr "Entreprise"
-
-msgid "Legal"
-msgstr "Légal"
-
-msgid "Legal disclaimer"
-msgstr "Conditions d'utilisation"
-
-msgid "Terms of use and legal"
-msgstr "Conditions d'utilisation et légal"
-
-msgid "Owner"
-msgstr "Propriétaire"
-
-msgid "Node owner"
-msgstr "Possesseur du nœud"
-
-msgid "By using our service, you accept %s."
-msgstr "En utilisant notre service, vous acceptez %s."
-
-msgid "our terms of use"
-msgstr "nos conditions"
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Jappix a été interrompu par un problème réseau, un bug ou de mauvais "
-"identifiants (vérifiez-les !). Nous sommes désolés pour ce souci."
-
-msgid "The element list on this server could not be obtained!"
-msgstr "La liste des éléments présents sur ce serveur n'a pas pu être obtenue."
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"Votre mot de passe a été changé, vous pouvez maintenant vous connecter à "
-"votre compte avec vos nouveaux identifiants."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "Votre compte XMPP a été effacé, au revoir !"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr ""
-"Vous avez été déconnecté avec succès de votre compte XMPP, bonne journée !"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr ""
-"Le salon que vous avez rejoint semble ne pas exister. Pourquoi vous ne le "
-"créeriez pas ?"
-
-msgid "The groupchat has been removed."
-msgstr ""
-"Le salon a été supprimé avec succès, maintenant quelqu'un d'autre pourra le "
-"recréer."
-
-msgid "The user that you want to reach is not present in the room."
-msgstr ""
-"L'utilisateur que vous souhaitez joindre n'est actuellement pas présent dans "
-"le salon."
-
-msgid "Please enter the group chat address to join."
-msgstr "Veuillez entrer l'adresse du salon à rejoindre."
-
-msgid "Please enter your nickname to join %s."
-msgstr "Veuillez entrer votre pseudonyme pour rejoindre %s."
-
-msgid "This room (%s) is protected with a password."
-msgstr "Ce salon (%s) est protégé par un mot de passe."
-
-msgid "Your browser is out of date!"
-msgstr "Votre navigateur n'est pas à jour !"
-
-msgid "Last %s version is better!"
-msgstr "La dernière version de %s est mieux !"
-
-msgid "Login"
-msgstr "Connexion"
-
-msgid "Register"
-msgstr "Inscription"
-
-msgid "Here we go!"
-msgstr "Allons-y !"
-
-msgid "Server"
-msgstr "Serveur"
-
-msgid "Password"
-msgstr "Mot de passe"
-
-msgid "Remember me"
-msgstr "Se souvenir"
-
-msgid "This tool has been disabled!"
-msgstr "Cet outil a été désactivé, vous ne pouvez pas l'utiliser !"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr ""
-"À cause d'un problème réseau, vous avez été déconnecté. Que voulez-vous "
-"faire à présent ? "
-
-msgid "Reconnect"
-msgstr "Reconnexion"
-
-msgid "Messages"
-msgstr "Messages"
-
-msgid "Profile"
-msgstr "Profil"
-
-msgid "Options"
-msgstr "Préférences"
-
-msgid "Disconnect"
-msgstr "Déconnexion"
-
-msgid "Filter"
-msgstr "Filtrer"
-
-msgid "Add a friend"
-msgstr "Ajouter un ami"
-
-msgid "Your groupchats"
-msgstr "Vos salons de discussion"
-
-msgid "Audio/video conference"
-msgstr "Conférence audio/vidéo"
-
-msgid "Launch a group call"
-msgstr "Lancer un appel de groupe"
-
-msgid "Audio conference"
-msgstr "Conférence audio"
-
-msgid "Video conference"
-msgstr "Conférence vidéo"
-
-msgid "Conference call"
-msgstr "Appel de groupe"
-
-msgid "Manage your favorite groupchats"
-msgstr "Gérer mes salons favoris"
-
-msgid "More stuff"
-msgstr "Plus de choses"
-
-msgid "Show all friends"
-msgstr "Afficher tous les amis"
-
-msgid "Only show connected friends"
-msgstr "N'afficher que les amis en ligne"
-
-msgid "Groupchat presence messages"
-msgstr "Messages de présence des salons de discussion"
-
-msgid "No chat images auto-load"
-msgstr "Masquer les images dans les discussions"
-
-msgid "Message archives"
-msgstr "Archives des messages"
-
-msgid "Date"
-msgstr "Date"
-
-msgid "A short message?"
-msgstr "Un petit message ?"
-
-msgid "How are you?"
-msgstr "Comment allez-vous ?"
-
-msgid "What are you doing?"
-msgstr "Que faites-vous en ce moment ?"
-
-msgid "Join a chat"
-msgstr "Rejoindre une discussion"
-
-msgid "Status"
-msgstr "Statut"
-
-msgid "Available"
-msgstr "Disponible"
-
-msgid "Talkative"
-msgstr "Bavard(e)"
-
-msgid "Away"
-msgstr "Absent(e)"
-
-msgid "Not available"
-msgstr "Indisponible"
-
-msgid "Busy"
-msgstr "Occupé(e)"
-
-msgid "Offline"
-msgstr "Déconnecté(e)"
-
-msgid "Mood"
-msgstr "Humeur"
-
-msgid "None"
-msgstr "Aucun(e)"
-
-msgid "Crazy"
-msgstr "Cinglé(e)"
-
-msgid "Excited"
-msgstr "Excité(e)"
-
-msgid "Playful"
-msgstr "Enjoué(e)"
-
-msgid "Happy"
-msgstr "Heureux(se)"
-
-msgid "Shocked"
-msgstr "Choqué(e)"
-
-msgid "Hot"
-msgstr "Bouillant(e)"
-
-msgid "Sad"
-msgstr "Triste"
-
-msgid "Amorous"
-msgstr "Amoureux(se)"
-
-msgid "Confident"
-msgstr "Confiant(e)"
-
-msgid "Activity"
-msgstr "Activité"
-
-msgid "Chores"
-msgstr "Corvées"
-
-msgid "Drinking"
-msgstr "Boit"
-
-msgid "Eating"
-msgstr "Mange"
-
-msgid "Exercising"
-msgstr "S'exerçant "
-
-msgid "Grooming"
-msgstr "Toilette"
-
-msgid "Appointment"
-msgstr "Rendez-vous"
-
-msgid "Inactive"
-msgstr "Inactif(ve)"
-
-msgid "Relaxing"
-msgstr "Se relaxe"
-
-msgid "Talking"
-msgstr "Discute"
-
-msgid "Traveling"
-msgstr "En voyage"
-
-msgid "Working"
-msgstr "Travaille"
-
-msgid "View profile"
-msgstr "Voir le profil"
-
-msgid "This is a repeat from %s"
-msgstr "C'est une répétition depuis %s"
-
-msgid "Repeat this notice"
-msgstr "Répéter cet avis"
-
-msgid "Remove this notice"
-msgstr "Effacer cet avis"
-
-msgid "Your profile"
-msgstr "Votre profil"
-
-msgid "Identity"
-msgstr "Identité"
-
-msgid "Profile image"
-msgstr "Photo de profil"
-
-msgid "Others"
-msgstr "Autres"
-
-msgid "Other"
-msgstr "Autre"
-
-msgid "Personal"
-msgstr "Personnel"
-
-msgid "Complete name"
-msgstr "Nom complet"
-
-msgid "Nickname"
-msgstr "Pseudonyme"
-
-msgid "First name"
-msgstr "Prénom"
-
-msgid "Last name"
-msgstr "Nom"
-
-msgid "Date of birth"
-msgstr "Anniversaire"
-
-msgid "Contact"
-msgstr "Coordonnées"
-
-msgid "E-mail"
-msgstr "Courriel"
-
-msgid "Phone"
-msgstr "Téléphone"
-
-msgid "Website"
-msgstr "Site web"
-
-msgid "Current"
-msgstr "Actuel"
-
-msgid "Delete"
-msgstr "Supprimer"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr ""
-"Comment ça ? Vous n'avez pas de photo de profil définie dans votre carte "
-"d'identité !"
-
-msgid "Address"
-msgstr "Adresse"
-
-msgid "Street"
-msgstr "Rue"
-
-msgid "City"
-msgstr "Ville"
-
-msgid "Postal code"
-msgstr "Code postal"
-
-msgid "Country"
-msgstr "Pays"
-
-msgid "Biography"
-msgstr "Biographie"
-
-msgid "Important notice"
-msgstr "Important"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-"Soyez prudent par rapport aux informations que vous inscrivez dans votre "
-"profil, étant donné que ceci peut être accessible de tous (même de ceux que "
-"vous ne voulez pas)."
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr "Tout n'est pas privé sur XMPP, entre autres votre profil public."
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"Il est fortement recommandé de définir une photo de profil (%s maximum), par "
-"exemple une photo de vous ou une image vous représentant. Cela vous permet "
-"d'être facilement identifié par vos amis."
-
-msgid "Save"
-msgstr "Enregistrer"
-
-msgid "Cancel"
-msgstr "Annuler"
-
-msgid "Edit options"
-msgstr "Éditer les options"
-
-msgid "Channel"
-msgstr "Canal"
-
-msgid "Commands"
-msgstr "Commandes"
-
-msgid "Sounds"
-msgstr "Sons"
-
-msgid "Privacy"
-msgstr "Vie privée"
-
-msgid "Message archiving"
-msgstr "Archivage des messages"
-
-msgid "Store an history of your chats"
-msgstr "Garde l'historique de vos chats"
-
-msgid "Geolocation"
-msgstr "Géolocalisation"
-
-msgid "Disabled"
-msgstr "Désactivé"
-
-msgid "Store all chats"
-msgstr "Tous les chats"
-
-msgid "Store friend chats"
-msgstr "Chats des amis"
-
-msgid "Remove all archives"
-msgstr "Supprimer l'historique"
-
-msgid "Empty"
-msgstr "Vider"
-
-msgid "Empty channel"
-msgstr "Vider le canal"
-
-msgid "Persistent"
-msgstr "Persistant"
-
-msgid "Maximum notices"
-msgstr "Avis maximum"
-
-msgid "Account"
-msgstr "Compte"
-
-msgid "Change password"
-msgstr "Changer de mot de passe"
-
-msgid "Delete account"
-msgstr "Supprimer le compte"
-
-msgid "Old"
-msgstr "Ancien"
-
-msgid "New (2 times)"
-msgstr "Nouveau (2 fois)"
-
-msgid "Suggested chatrooms"
-msgstr "Salons suggérés"
-
-msgid "Skip"
-msgstr "Passer"
-
-msgid "Continue"
-msgstr "Continuer"
-
-msgid "To"
-msgstr "À"
-
-msgid "Close"
-msgstr "Fermer"
-
-msgid "unknown"
-msgstr "inconnu(e)"
-
-msgid "Unavailable"
-msgstr "Déconnecté(e)"
-
-msgid "is now"
-msgstr "est maintenant"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Patientez pendant que votre avatar est envoyé..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "Et voilà ! Une nouvelle photo de profil !"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "Le fichier image n'est pas pris en charge ou est trop gros."
-
-msgid "Reply"
-msgstr "Répondre"
-
-msgid "Error"
-msgstr "Erreur"
-
-msgid "Click here to solve the error"
-msgstr "Cliquez ici pour résoudre l'erreur"
-
-msgid "You"
-msgstr "Vous"
-
-msgid "Remove"
-msgstr "Enlever"
-
-msgid "Rename"
-msgstr "Renommer"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Bonjour, je suis %s, je souhaiterais vous ajouter comme ami."
-
-msgid "Smiley insertion"
-msgstr "Insertion d'émoticône"
-
-msgid "Change style"
-msgstr "Changer l'apparence"
-
-msgid "Text in bold"
-msgstr "Texte en gras"
-
-msgid "Text in italic"
-msgstr "Texte en italique"
-
-msgid "Underlined text"
-msgstr "Texte souligné"
-
-msgid "Send a file"
-msgstr "Envoi d'un fichier"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr "Une fois envoyé, votre ami sera invité à télécharger le fichier."
-
-msgid "Save chat"
-msgstr "Enregistrer la discussion"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"Cliquez sur le lien suivant pour obtenir l'historique de la discussion. "
-"Cliquez à nouveau pour le récupérer."
-
-msgid "This chat is empty!"
-msgstr "Cette discussion est vide !"
-
-msgid "Generate file!"
-msgstr "Générer le fichier !"
-
-msgid "Download file!"
-msgstr "Télécharger le fichier !"
-
-msgid "Clean current chat"
-msgstr "Nettoyer la discussion courante"
-
-msgid "Show user profile"
-msgstr "Afficher le profil de l'utilisateur"
-
-msgid "Add this contact to your friends"
-msgstr "Ajouter ce contact à vos amis"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Ajouter ce salon à vos favoris"
-
-msgid "All tabs"
-msgstr "Tous les onglets"
-
-msgid "Join groupchat"
-msgstr "Rejoindre le salon"
-
-msgid "Close this tab"
-msgstr "Fermer cet onglet"
-
-msgid "no subject defined for this room."
-msgstr "aucun sujet défini pour ce salon."
-
-msgid "Administration panel for this room"
-msgstr "Panneau d'administration du salon"
-
-msgid "Moderators"
-msgstr "Modérateurs"
-
-msgid "Participants"
-msgstr "Participants"
-
-msgid "Visitors"
-msgstr "Visiteurs"
-
-msgid "Manage favorite rooms"
-msgstr "Gérer les salons favoris"
-
-msgid "Change favorites"
-msgstr "Modifier les favoris"
-
-msgid "Search a room"
-msgstr "Chercher un salon"
-
-msgid "Select a favorite"
-msgstr "Sélectionnez un favori"
-
-msgid "Getting the name..."
-msgstr "Obtention du nom..."
-
-msgid "Gateway"
-msgstr "Passerelle"
-
-msgid "Name"
-msgstr "Nom"
-
-msgid "Room"
-msgstr "Salon"
-
-msgid "Add"
-msgstr "Ajouter"
-
-msgid "Edit"
-msgstr "Modifier"
-
-msgid "Search a room on"
-msgstr "Rechercher un salon sur"
-
-msgid "No room found on this server."
-msgstr "Aucun salon trouvé sur ce serveur."
-
-msgid "Service discovery"
-msgstr "Découverte des services"
-
-msgid "Server to query"
-msgstr "Serveur à interroger"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "Désolé, mais l'entité n'a pas retourné de résultat !"
-
-msgid "Accounts"
-msgstr "Comptes"
-
-msgid "Authentications"
-msgstr "Authentifications"
-
-msgid "Automation"
-msgstr "Automatismes"
-
-msgid "Clients"
-msgstr "Clients"
-
-msgid "Collaboration"
-msgstr "Collaboration"
-
-msgid "Components"
-msgstr "Composants"
-
-msgid "Rooms"
-msgstr "Salons"
-
-msgid "Directories"
-msgstr "Annuaires"
-
-msgid "Gateways"
-msgstr "Passerelles"
-
-msgid "News"
-msgstr "Actualités"
-
-msgid "Hierarchy"
-msgstr "Hiérarchie"
-
-msgid "Proxies"
-msgstr "Proxies"
-
-msgid "Publication/Subscription"
-msgstr "Publication/Abonnement"
-
-msgid "Storage"
-msgstr "Stockage"
-
-msgid "Service offline or broken"
-msgstr "Service hors ligne ou cassé"
-
-msgid "Your inbox"
-msgstr "Votre boîte de réception"
-
-msgid "Available actions"
-msgstr "Actions disponibles"
-
-msgid "Clean"
-msgstr "Vider"
-
-msgid "New"
-msgstr "Nouveau"
-
-msgid "Received"
-msgstr "Reçus"
-
-msgid "Subject"
-msgstr "Sujet"
-
-msgid "Content"
-msgstr "Contenu"
-
-msgid "Send message"
-msgstr "Envoyer le message"
-
-msgid "Your inbox is empty."
-msgstr "Votre boîte de réception est vide."
-
-msgid "MUC administration"
-msgstr "Administration d'un MUC"
-
-msgid "You administrate this room"
-msgstr "Vous administrez ce salon"
-
-msgid "Enter new subject"
-msgstr "Entrez le nouveau sujet"
-
-msgid "Configuration"
-msgstr "Configuration"
-
-msgid "Authorizations"
-msgstr "Autorisations"
-
-msgid "Member list"
-msgstr "Liste des membres"
-
-msgid "Owner list"
-msgstr "Liste des propriétaires"
-
-msgid "Administrator list"
-msgstr "Liste des administrateurs"
-
-msgid "Outcast list"
-msgstr "Liste des bannis"
-
-msgid "Add an input"
-msgstr "Ajouter un champ"
-
-msgid "Destroy this MUC"
-msgstr "Détruire le MUC"
-
-msgid "Yes, let's do it!"
-msgstr "Oui, détruisons-le !"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "Votre ami prête attention à la conversation."
-
-msgid "Your friend is writing a message..."
-msgstr "Votre ami est en train de composer un message..."
-
-msgid "Your friend stopped writing a message."
-msgstr "Votre ami a arrêté d'écrire un message."
-
-msgid "Your friend is doing something else."
-msgstr "Votre ami fait quelque-chose d'autre."
-
-msgid "Your friend closed the chat."
-msgstr "Votre ami a quitté la conversation."
-
-msgid "Requesting this service..."
-msgstr "Requête en cours..."
-
-msgid "Loading"
-msgstr "En attente"
-
-msgid "changed his/her nickname to %s"
-msgstr "porte %s comme nouveau pseudo"
-
-msgid "joined the chat room"
-msgstr "a rejoint le salon"
-
-msgid "left the chat room"
-msgstr "a quitté le salon"
-
-msgid "%s left"
-msgstr "%s est parti"
-
-msgid "%s joined"
-msgstr "%s a rejoint"
-
-msgid "no status"
-msgstr "aucun statut"
-
-msgid "has been kicked"
-msgstr "a été éjecté"
-
-msgid "has been banned"
-msgstr "a été banni"
-
-msgid "no reason"
-msgstr "pas de raison"
-
-msgid "Communicate with the entire world!"
-msgstr "Communiquez avec le monde entier !"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-"Jappix est une plateforme sociale accessible de n'importe où, n'importe "
-"quand, qui vous permet de communiquer avec qui vous voulez."
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-"Entrez en contact avec les millions de personnes qui utilisent le réseau "
-"XMPP comme vous le faites avec Jappix. Rejoignez-nous et restez libre !"
-
-msgid "Hi there!"
-msgstr "Salut toi !"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr "Bienvenue sur %1s, “%2s”."
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr ""
-"Connectez-vous à votre compte XMPP existant ou créez-en un nouveau "
-"gratuitement !"
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-"Quand vous vous connectez ou vous enregistrez, votre mot de passe doit "
-"rester secret. Ne le donnez à personne."
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-"Connectez-vous à votre compte XMPP existant. Vous pouvez aussi utiliser le "
-"%s pour rejoindre un salon."
-
-msgid "Previous"
-msgstr "Précédent"
-
-msgid "General"
-msgstr "Général"
-
-msgid "Advanced"
-msgstr "Avancé"
-
-msgid "Resource"
-msgstr "Ressource"
-
-msgid "Priority"
-msgstr "Priorité"
-
-msgid "Low"
-msgstr "Bas"
-
-msgid "Medium"
-msgstr "Moyen"
-
-msgid "High"
-msgstr "Haut"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-"Entrez le salon que vous voulez rejoindre ainsi que votre pseudo. Vous "
-"pouvez aussi revenir à la %s. "
-
-msgid "login page"
-msgstr "page de connexion"
-
-msgid "Share this link with your friends:"
-msgstr "Partagez ce lien avec vos amis :"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-"Créez un nouveau compte XMPP pour rejoindre vos amis sur votre propre nuage "
-"social. C'est super simple !"
-
-msgid "Required"
-msgstr "Requis"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "Vous avez été inscrit, voici votre adresse XMPP :"
-
-msgid "Manager"
-msgstr "Gestionnaire"
-
-msgid "Encrypted"
-msgstr "Chiffré"
-
-msgid "Unencrypted"
-msgstr "Non chiffré"
-
-msgid "Where are you?"
-msgstr "Où êtes-vous ?"
-
-msgid "What's up with you?"
-msgstr "Quoi de neuf de votre côté ?"
-
-msgid "Type something you want to share with your friends..."
-msgstr "Entrez quelque-chose que vous souhaitez partager avec vos amis..."
-
-msgid "Fetching the social channel..."
-msgstr "Récupération du canal social..."
-
-msgid "You are synchronized with your network."
-msgstr "Vous êtes synchronisé(e) avec votre réseau."
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "Impossible d'envoyer des avis, vous ne pouvez qu'en recevoir !"
-
-msgid "Media viewer"
-msgstr "Visualisateur de médias"
-
-msgid "Browse"
-msgstr "Parcourir"
-
-msgid "Command"
-msgstr "Commande"
-
-msgid "Subscribe"
-msgstr "Souscrire"
-
-msgid "Join"
-msgstr "Rejoindre"
-
-msgid "Automatic"
-msgstr "Automatique"
-
-msgid "Search"
-msgstr "Rechercher"
-
-msgid "No result!"
-msgstr "Aucun résultat !"
-
-msgid "No notifications."
-msgstr "Pas de notifications."
-
-msgid "would like to add you as a friend."
-msgstr "voudrait vous ajouter comme ami."
-
-msgid "would like you to join this chatroom:"
-msgstr "voudrait que vous rejoigniez ce salon :"
-
-msgid "Do you accept?"
-msgstr "Acceptez-vous ?"
-
-msgid "Yes"
-msgstr "Oui"
-
-msgid "No"
-msgstr "Non"
-
-msgid "would like to get authorization."
-msgstr "voudrait obtenir une autorisation."
-
-msgid "would like to send you a file: “%s”."
-msgstr "voudrait vous envoyer un fichier : « %s »."
-
-msgid "has received a file exchange request: “%s”."
-msgstr "a reçu une demande d'échange de fichier : « %s »."
-
-msgid "has accepted to receive your file: “%s”."
-msgstr "a accepté de recevoir votre fichier : « %s »."
-
-msgid "has rejected to receive your file: “%s”."
-msgstr "a refusé de recevoir votre fichier : « %s »."
-
-msgid "could not receive your file: “%s”."
-msgstr "n'a pas pu recevoir votre fichier : « %s »."
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr "Voulez-vous voir les amis que %s vous suggère ?"
-
-msgid "commented an item you follow: “%s”."
-msgstr "a commenté un élément que vous suivez : « %s »."
-
-msgid "liked your post: “%s”."
-msgstr "a aimé votre publication : « %s »."
-
-msgid "quoted you somewhere: “%s”."
-msgstr "vous a cité quelque-part : « %s »."
-
-msgid "published on your wall: “%s”."
-msgstr "a publié sur votre mur : « %s »."
-
-msgid "tagged you in a photo (%s)."
-msgstr "vous a marqué dans une photo (%s)."
-
-msgid "tagged you in a video (%s)."
-msgstr "vous a marqué dans une vidéo (%s)."
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr "a validé votre compte. Votre profil public sera bientôt disponible."
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-"a supprimé votre profil public après votre demande. Vous allez nous manquer !"
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-"a sauvegardé vos paramètres de profil public. Ils seront effectifs dans "
-"quelques instants."
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-"n'a pas pu valider le compte de votre profil public. Vérifiez vos "
-"identifiants."
-
-msgid "Open"
-msgstr "Ouvrir"
-
-msgid "Show"
-msgstr "Afficher"
-
-msgid "Hide"
-msgstr "Masquer"
-
-msgid "Submit"
-msgstr "Soumettre"
-
-msgid "Client"
-msgstr "Client"
-
-msgid "System"
-msgstr "Système"
-
-msgid "Local time"
-msgstr "Heure locale"
-
-msgid "Comments"
-msgstr "Commentaires"
-
-msgid "User profile"
-msgstr "Profil de l'utilisateur"
-
-msgid "See his/her position on the globe"
-msgstr "Afficher sa position sur le globe"
-
-msgid "Confirm"
-msgstr "Confirmez"
-
-msgid "anonymous mode"
-msgstr "mode anonyme"
-
-msgid "Groups"
-msgstr "Groupes"
-
-msgid "Unclassified"
-msgstr "Non classés"
-
-msgid "Authorize"
-msgstr "Autoriser"
-
-msgid "Ask for authorization"
-msgstr "Demander l'autorisation"
-
-msgid "Unblock"
-msgstr "Débloquer"
-
-msgid "Prohibit"
-msgstr "Interdire"
-
-msgid "Block"
-msgstr "Bloquer"
-
-msgid "Chat"
-msgstr "Discussion"
-
-msgid "Groupchat"
-msgstr "Salon de discussion"
-
-msgid "Jappix Mobile"
-msgstr "Jappix Mobile"
-
-msgid "Desktop"
-msgstr "Bureau"
-
-msgid "Mobile"
-msgstr "Mobile"
-
-msgid "Please wait..."
-msgstr "Patientez..."
-
-msgid "Please enable JavaScript"
-msgstr "Veuillez activer JavaScript"
-
-msgid "Show comments"
-msgstr "Afficher les commentaires"
-
-msgid "Loading comments..."
-msgstr "Chargement des commentaires..."
-
-msgid "Could not get the comments!"
-msgstr "Commentaires non récupérés !"
-
-msgid "Comments locked!"
-msgstr "Commentaires verrouillés !"
-
-msgid "Type your comment here..."
-msgstr "Entrez votre commentaire..."
-
-msgid "Your channel"
-msgstr "Votre canal"
-
-msgid "Channel of"
-msgstr "Canal de"
-
-msgid "More notices..."
-msgstr "Plus d'avis..."
-
-msgid "Attach a file"
-msgstr "Attacher un fichier"
-
-msgid "Send"
-msgstr "Envoyer"
-
-msgid "Unattach the file"
-msgstr "Détacher le fichier"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-"Une erreur est survenue lors de l'envoi de votre fichier : il peut être trop "
-"gros (%s maximum) ou interdit ! "
-
-msgid "Authorization failed"
-msgstr "Échec de l'autorisation"
-
-msgid "Registration failed, please choose a different username"
-msgstr "Échec de l'inscription, choisissez un pseudo différent"
-
-msgid "Service unavailable"
-msgstr "Service indisponible"
-
-msgid "Internal server error, try later"
-msgstr "Erreur interne du serveur, essayez plus tard"
-
-msgid "Your form has been sent."
-msgstr "Votre formulaire a été soumis."
-
-msgid "Application"
-msgstr "Application"
-
-msgid "Media integration"
-msgstr "Intégration des médias"
-
-msgid "Keep local chat archives"
-msgstr "Stocker localement l'historique des discussions"
-
-msgid "XMPP links"
-msgstr "Liens XMPP"
-
-msgid "Open XMPP links with Jappix"
-msgstr "Ouvrir les liens XMPP avec Jappix"
-
-msgid "changed the subject to:"
-msgstr "a changé le sujet en :"
-
-msgid "Welcome!"
-msgstr "Bienvenue !"
-
-msgid "Friends"
-msgstr "Amis"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr "Bienvenue sur Jappix, plateforme sociale libre."
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-"Avant de l'utiliser, vous aurez à changer quelques paramètres, rechercher "
-"vos amis et compléter votre profil."
-
-msgid "Enable notification sounds"
-msgstr "Activer les sons de notification"
-
-msgid "Share your position on the globe"
-msgstr "Partager votre position sur le globe"
-
-msgid "Offline friends"
-msgstr "Amis hors ligne"
-
-msgid "Don't hide offline friends"
-msgstr "Ne pas masquer les amis hors ligne"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-"Utilisez cet outil pour retrouver vos amis sur le serveur que vous utilisez, "
-"ou ajoutez-les plus tard."
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr "Super boulot ! Maintenant, vous pouvez partager Jappix avec vos amis !"
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-"Quand vous cliquerez sur le bouton d'enregistrement, l'éditeur de profil "
-"sera ouvert. Bonne socialisation !"
-
-msgid "Share Jappix on %s"
-msgstr "Partagez Jappix sur %s"
-
-msgid "Follow Jappix topic on %s"
-msgstr "Suivez Jappix sur %s"
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "Utilise Jappix, une plateforme sociale ouverte. Je suis %s !"
-
-msgid "Unknown name"
-msgstr "Nom inconnu"
-
-msgid "Unknown country"
-msgstr "Pays inconnu"
-
-msgid "Click to enable"
-msgstr "Cliquez pour activer"
-
-msgid "Click to disable"
-msgstr "Cliquez pour désactiver"
-
-msgid "Installation"
-msgstr "Installation"
-
-msgid "Jappix installation"
-msgstr "Installation de Jappix"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "Bienvenue dans l'installation de Jappix !"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-"Cet outil vous aidera à installer facilement Jappix, le premier réseau "
-"social complet utilisant XMPP, sur votre serveur."
-
-msgid "Installation Steps:"
-msgstr "Jetons un coup d'œil aux étapes de l'installation :"
-
-msgid "Welcome"
-msgstr "Bienvenue"
-
-msgid "Storage configuration"
-msgstr "Configuration du stockage"
-
-msgid "Administrator account"
-msgstr "Compte administrateur"
-
-msgid "Main configuration"
-msgstr "Configuration principale"
-
-msgid "Hosts configuration"
-msgstr "Configuration des hôtes"
-
-msgid "Services installation"
-msgstr "Installation des services"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-"Si la langue courante n'est pas la vôtre (%1s), vous pouvez faire parler "
-"Jappix %2s ce sera sauvegardé."
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"Si vous voulez obtenir de l'aide à propos de l'installation et la "
-"configuration de Jappix, vous pouvez utiliser notre documentation, "
-"disponible à :"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-"Il est temps de créer votre propre nuage social : rendez-vous à l'étape "
-"suivante !"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-"Jappix stocke les données persistantes (comme les fichiers partagés, les "
-"historiques des discussions et sa configuration) dans de multiples dossiers "
-"de stockage."
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-"Jappix doit pouvoir écrire dans ce dossier pour y créer ses sous-"
-"répertoires. S'il ne le peut pas, vous devrez appliquer les droits aux "
-"dossiers %1s à %2s ou changer le propriétaire à %3s (dépend de votre "
-"configuration)."
-
-msgid "The folder is writable, you can continue!"
-msgstr "Le dossier peut être écrit, vous pouvez continuer !"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-"Jappix vous offre la possibilité de gérer votre configuration, installer des "
-"nouveaux modules et rechercher des mises à jour. C'est pourquoi vous devez "
-"créer un compte administrateur pour accéder au gestionnaire."
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-"Quand Jappix sera installé, vous n'aurez qu'à cliquer sur le lien vers le "
-"gestionnaire sur la page d'accueil pour y accéder."
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr ""
-"Oups, vous avez oublié quelque-chose ou les deux mots de passe ne "
-"correspondent pas !"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-"Jappix a besoin que vous spécifiez quelques valeurs pour qu'il fonctionne. "
-"Corrigez les champs suivants (ou conservez les valeurs par défaut, qui sont "
-"suffisantes pour la plupart des gens)."
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-"Notez que si vous ne spécifiez pas une valeur obligatoire, elle sera "
-"automatiquement complétée par celle par défaut."
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-"Besoin d'aide ? Vous feriez mieux de lire notre page de documentation à "
-"propos de comment compléter ce formulaire !"
-
-msgid "User"
-msgstr "Utilisateur"
-
-msgid "Service"
-msgstr "Service"
-
-msgid "Service name"
-msgstr "Nom du service"
-
-msgid "Service description"
-msgstr "Description du service"
-
-msgid "Owner name"
-msgstr "Nom du propriétaire"
-
-msgid "Owner website"
-msgstr "Site du propriétaire"
-
-msgid "Connection"
-msgstr "Connexion"
-
-msgid "Lock the host"
-msgstr "Vérrouiller l'hôte"
-
-msgid "Anonymous mode"
-msgstr "Mode anonyme"
-
-msgid "HTTP authentication"
-msgstr "Authentification HTTP"
-
-msgid "Registration allowed"
-msgstr "Inscription autorisée"
-
-msgid "Use the built-in BOSH proxy"
-msgstr "Proxy BOSH intégré"
-
-msgid "Manager link"
-msgstr "Lien du gestionnaire"
-
-msgid "Groupchats to join"
-msgstr "Salons à rejoindre"
-
-msgid "Suggest groupchats"
-msgstr "Suggestion de salons"
-
-msgid "Encryption"
-msgstr "Chiffrement"
-
-msgid "HTTPS storage"
-msgstr "Stockage en HTTPS"
-
-msgid "Force HTTPS"
-msgstr "Forcer le HTTPS"
-
-msgid "Compression"
-msgstr "Compression"
-
-msgid "Cache assets"
-msgstr "Cacher les resources"
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"Cette page vous permet de spécifier les hôtes par défaut auxquels Jappix se "
-"connectera. Vous pouvez garder les mêmes valeurs et continuer si vous "
-"souhaitez utiliser les hôtes du service officiel."
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"Peut-être que vous ne savez pas ce qu'est un serveur BOSH ? En fait, c'est "
-"un relai entre un client Jappix et un serveur XMPP, qui est nécessaire en "
-"raison de limitations techniques."
-
-msgid "Main host"
-msgstr "Hôte principal"
-
-msgid "Groupchat host"
-msgstr "Hôte de salons"
-
-msgid "Pubsub host"
-msgstr "Hôte Pubsub"
-
-msgid "Anonymous host"
-msgstr "Hôte anonyme"
-
-msgid "Directory host"
-msgstr "Hôte d'annuaire"
-
-msgid "BOSH host"
-msgstr "Hôte BOSH"
-
-msgid "WebSocket host"
-msgstr "Hôte WebSocket"
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-"Vous pouvez installer quelques logiciels supplémentaires sur votre serveur, "
-"pour étendre les fonctionnalités de Jappix. Quelques autres pourraient être "
-"modifiés, en raison des restrictions de sécurité qui sont en place par "
-"défaut."
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-"Pour réaliser cela, vous devez pouvoir accéder à la ligne de commande de "
-"votre serveur et y être connecté en tant qu'administrateur. Sachez que cela "
-"est facultatif, Jappix fonctionnera sans ces modules, mais quelques-unes de "
-"ses fonctionnalités seront indisponibles."
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-"Après avoir terminé l'installation, Jappix va générer les fichiers de cache. "
-"Cela pourra être lent, attendez que l'application soit affichée et ne "
-"pressez aucun bouton."
-
-msgid "Thanks for using Jappix!"
-msgstr "Merci d'utiliser Jappix !"
-
-msgid "Next"
-msgstr "Suivant"
-
-msgid "Finish"
-msgstr "Finir"
-
-msgid "Check again"
-msgstr "Vérifier à nouveau"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-"Le dossier ne peut pas être écrit, appliquez les bonnes permissions au "
-"dossier %s."
-
-msgid "%s is installed on your system."
-msgstr "%s est installé sur votre système."
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s n'est pas installé sur votre système, vous devriez installer %2s."
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "La limite PHP de la taille à l'envoi de fichiers est suffisante (%s)."
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-"La limite PHP de la taille à l'envoi de fichiers (%1s) n'est pas suffisante, "
-"vous devriez la définir à %2s dans le %3s."
-
-msgid "Jappix manager"
-msgstr "Gestionnaire de Jappix"
-
-msgid "Manager access"
-msgstr "Accès au gestionnaire"
-
-msgid "Statistics"
-msgstr "Statistiques"
-
-msgid "Hosts"
-msgstr "Hôtes"
-
-msgid "Design"
-msgstr "Apparence"
-
-msgid "Repeat"
-msgstr "Répéter"
-
-msgid "All"
-msgstr "Tout"
-
-msgid "Horizontal"
-msgstr "Horizontal"
-
-msgid "Vertical"
-msgstr "Vertical"
-
-msgid "Center"
-msgstr "Centrer"
-
-msgid "Left"
-msgstr "Gauche"
-
-msgid "Right"
-msgstr "Droite"
-
-msgid "Top"
-msgstr "Haut"
-
-msgid "Bottom"
-msgstr "Bas"
-
-msgid "Adapt"
-msgstr "Adapter"
-
-msgid "Color"
-msgstr "Couleur"
-
-msgid "Users"
-msgstr "Utilisateurs"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-"Ceci est une zone à accès limité : seules les personnes autorisées peuvent "
-"gérer ce nœud Jappix."
-
-msgid "Please use the form below to login to the administration panel."
-msgstr ""
-"Utilisez le formulaire ci-dessous pour vous connecter au panneau "
-"d'administration."
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-"Pour améliorer la sécurité, les sessions sont limitées dans le temps, et "
-"quand votre navigateur sera fermé, vous serez déconnecté."
-
-msgid "Credentials"
-msgstr "Identifiants"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "Vous avez été déconnecté. Au revoir !"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-"Oups, vous n'avez pas pû être reconnu comme administrateur valide. Vérifiez "
-"vos identifiants !"
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-"Des statistiques basiques sont calculées par Jappix à propos de choses "
-"relativement importantes, vous pouvez les trouver ci-dessous."
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr "Modifiez la configuration de votre nœud Jappix avec cet outil."
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr "Modifiez les hôtes XMPP que ce nœud Jappix peut servir avec cet outil."
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-"Tous les fichiers stockés de ce nœud peuvent être gérés avec cet outil : "
-"sélectionnez un sous-dossier et commencez à éditer son contenu !"
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr ""
-"Jappix est entièrement personnalisable : vous pouvez modifier son apparence "
-"ici-même."
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr "Ce n'est pas une image valide, utilisez du PNG, GIF ou JPG !"
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr "Ce n'est pas une image valide, veuillez utiliser le format PNG !"
-
-msgid "The image could not be received, would you mind retry?"
-msgstr "L'image n'a pas pû être reçue, pourriez-vous réessayer ?"
-
-msgid "Your service logo has been successfully changed!"
-msgstr "Le logo de votre service a été changé avec succès !"
-
-msgid "Your image was added to the list!"
-msgstr "Votre image a été ajoutée à la liste !"
-
-msgid "Changes saved!"
-msgstr "Les changements ont été sauvegardés !"
-
-msgid "Logo"
-msgstr "Logo"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-"Vous pouvez appliquez votre propre logo pour votre service et ainsi "
-"remplacer celui par défaut. Faites attention à la taille et la couleur "
-"dominante de chaque logo !"
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr ""
-"Envoyez chaque logo avec la taille maximum en pixel que nous vous "
-"recommandons."
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-"Le format de votre logo doit être PNG. Laissez un champ vide et le logo "
-"correspondant ne sera pas changé."
-
-msgid "Remove this logo"
-msgstr "Supprimer ce logo"
-
-msgid "View this logo"
-msgstr "Visualiser ce logo"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-"Vous pouvez définir plus d'un administrateur pour ce nœud Jappix. Vous "
-"pouvez aussi changer un mot de passe avec cet outil."
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-"Mettez à jour votre nœud Jappix avec cet outil, ou vérifiez si une nouvelle "
-"est disponible. Des informations à propos de la dernière version sont aussi "
-"affichées (en anglais)."
-
-msgid "Access statistics"
-msgstr "Statistiques des accès"
-
-msgid "Share statistics"
-msgstr "Statistiques des partages"
-
-msgid "Other statistics"
-msgstr "Autres statistiques"
-
-msgid "January"
-msgstr "Janvier"
-
-msgid "February"
-msgstr "Février"
-
-msgid "March"
-msgstr "Mars"
-
-msgid "April"
-msgstr "Avril"
-
-msgid "May"
-msgstr "Mai"
-
-msgid "June"
-msgstr "Juin"
-
-msgid "July"
-msgstr "Juillet"
-
-msgid "August"
-msgstr "Août"
-
-msgid "September"
-msgstr "Septembre"
-
-msgid "October"
-msgstr "Octobre"
-
-msgid "November"
-msgstr "Novembre"
-
-msgid "December"
-msgstr "Décembre"
-
-msgid "Monday"
-msgstr "Lundi"
-
-msgid "Tuesday"
-msgstr "Mardi"
-
-msgid "Wednesday"
-msgstr "Mercredi"
-
-msgid "Thursday"
-msgstr "Jeudi"
-
-msgid "Friday"
-msgstr "Vendredi"
-
-msgid "Saturday"
-msgstr "Samedi"
-
-msgid "Sunday"
-msgstr "Dimanche"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Archives"
-msgstr "Historique"
-
-msgid "Music"
-msgstr "Musique"
-
-msgid "Backgrounds"
-msgstr "Fonds"
-
-msgid "Share"
-msgstr "Partage"
-
-msgid "Background"
-msgstr "Fond"
-
-msgid "Notice"
-msgstr "Annonce"
-
-msgid "Your design preferences have been saved!"
-msgstr "Vos préférences d'apparence ont été enregistrées !"
-
-msgid "Please check your inputs: something is missing!"
-msgstr "Veuillez vérifier vos champs : quelque-chose manque !"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-"Changez l'apparence de votre nœud Jappix avec cet outil. Vous pouvez soit "
-"définir une couleur personnalisée, soit envoyer une image. Laissez votre "
-"créativité s'exprimer !"
-
-msgid "Use default background"
-msgstr "Utiliser le fond par défaut"
-
-msgid "Use your own image"
-msgstr "Utiliser votre propre image"
-
-msgid "Select a background to use and change the display options."
-msgstr "Sélectionnez un fond à utiliser et modifiez les options d'affichage."
-
-msgid "Use your own color"
-msgstr "Utiliser votre propre couleur"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr ""
-"Entrez la valeur hexadécimale de la couleur que vous voulez utiliser comme "
-"fond."
-
-msgid "Manage backgrounds"
-msgstr "Gérer les fonds"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-"Vous pouvez ajouter un nouveau fond à la liste avec cet outil. Veillez à "
-"envoyer une image valide."
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr "Si vous voulez enlever des fonds, utilisez le navigateur ci-dessous."
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-"Définissez, avec cet outil, une annonce de page d'accueil pour tous vos "
-"utilisateurs, comme un avertissement, un message important ou une publicité."
-
-msgid "Simple notice"
-msgstr "Annonce simple"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-"Cette annonce ne nécessite qu'un texte simple pour être affiché, mais aucun "
-"code n'est autorisé !"
-
-msgid "Advanced notice"
-msgstr "Annonce avancée"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-"Vous pouvez personnaliser votre annonce avec du code intégré (HTML, CSS et "
-"JS), mais vous devez coder l'apparence."
-
-msgid "Available updates"
-msgstr "Mises à jour disponibles"
-
-msgid "What's new?"
-msgstr "Quoi de nouveau ?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr ""
-"Vos dossiers de stockage ne peuvent être écrits, pourriez-vous appliquer les "
-"bons droits ?"
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-"%1s pourrait causer des problèmes au proxy, veuillez augmenter la valeur de "
-"%2s à %3s !"
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-"Vous utilisez une version de développement de Jappix. Mettez-la à jour à "
-"travers notre dépôt en exécutant : %s. "
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-"Une nouvelle version de Jappix est disponible ! Jetez un coup d'œil à ce qui "
-"est nouveau et lancez la mise à jour !"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr ""
-"Votre version n'est pas à jour. Mettez-la à niveau maintenant vers %s en "
-"cliquant ici !"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"Votre version semble être à jour, mais vous pouvez vérifier les mises à jour "
-"manuellement en cliquant ici."
-
-msgid "Check for updates"
-msgstr "Rechercher des mises à jour"
-
-msgid "Update in progress"
-msgstr "Mise à jour en cours"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr ""
-"Jappix a été mis à jour : vous utilisez à présent la dernière version. "
-"Amusez-vous bien !"
-
-msgid "The update has failed! Please try again later."
-msgstr "La mise à jour a échoué ! Veuillez réessayer plus tard."
-
-msgid "Downloading package..."
-msgstr "Téléchargement du paquet..."
-
-msgid "Removing current Jappix system files..."
-msgstr "Suppression des fichiers systèmes de Jappix..."
-
-msgid "Extracting package..."
-msgstr "Extraction du paquet..."
-
-msgid "Regenerating storage folder tree..."
-msgstr "Regénération de l'arbre de stockage..."
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix est maintenant à jour !"
-
-msgid "Aborted: socket error!"
-msgstr "Avorté : erreur de connexion !"
-
-msgid "Aborted: buffer error!"
-msgstr "Avorté : erreur de tampon !"
-
-msgid "Aborted: everything is not writable!"
-msgstr "Avorté : tout ne peut être écrit !"
-
-msgid "Aborted: could not extract the package!"
-msgstr "Avorté : paquet impossible à extraire !"
-
-msgid "Visits"
-msgstr "Visites"
-
-msgid "Daily"
-msgstr "Quotidien"
-
-msgid "Weekly"
-msgstr "Hebdomadaire"
-
-msgid "Monthly"
-msgstr "Mensuel"
-
-msgid "Yearly"
-msgstr "Annuelle"
-
-msgid "Size"
-msgstr "Taille"
-
-msgid "Clean everything"
-msgstr "Tout nettoyer"
-
-msgid "Purge cache"
-msgstr "Purger le cache"
-
-msgid "Purge logs"
-msgstr "Purger les historiques"
-
-msgid "Purge sent files"
-msgstr "Purger les fichiers envoyés"
-
-msgid "Purge updates"
-msgstr "Purger les mises à jour"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "Le dossier de stockage que vous vouliez nettoyer est maintenant vide !"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-"Gardez votre nœud Jappix frais et rapide, nettoyez les dossiers de stockage "
-"régulièrement !"
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-"Envoyez votre musique (Ogg Vorbis, MP3 ou WAV) pour pouvoir l'écouter depuis "
-"Jappix !"
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr "Le fichier que vous souhaitez envoyer doit être plus petit que %s."
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-"Restez informé de ce que vos utilisateurs stockent sur votre serveur, "
-"etsupprimez le contenu indésirable avec cet outil."
-
-msgid "Title"
-msgstr "Titre"
-
-msgid "Artist"
-msgstr "Artiste"
-
-msgid "Album"
-msgstr "Album"
-
-msgid "File"
-msgstr "Fichier"
-
-msgid "Upload"
-msgstr "Envoyer"
-
-msgid "The folder is empty."
-msgstr "Le dossier est vide."
-
-msgid "The music could not be received, please retry!"
-msgstr "La musique n'a pas pû être reçue, veuillez réessayer !"
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-"Ce n'est pas un fichier musical valide, encodez-le en Ogg Vorbis, MP3 ou "
-"WAV !"
-
-msgid "Your music has been added!"
-msgstr "Votre musique a été ajoutée !"
-
-msgid "The selected elements have been removed."
-msgstr "Les éléments sélectionnés ont été enlevés."
-
-msgid "You must select elements to remove!"
-msgstr "Vous devez sélectionner des éléments à effacer !"
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-"Ajoutez un nouvel utilisateur avec cet outil, ou changez un mot de passe "
-"(entrez un nom d'utilisateur existant). Veillez à utiliser un mot de passe "
-"fort !"
-
-msgid "Manage"
-msgstr "Gérer"
-
-msgid "List"
-msgstr "Liste"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-"Supprimez des utilisateurs avec cet outil. Notez que vous ne pouvez pas "
-"supprimer un utilisateur s'il est le seul restant."
-
-msgid "The user has been added!"
-msgstr "L'utilisateur a été ajouté !"
-
-msgid "The chosen users have been removed."
-msgstr "Les utilisateurs sélectionnés ont été enlevés."
-
-msgid "You must select one or more users to be removed!"
-msgstr "Vous devez sélectionner un ou plusieurs utilisateurs à enlever !"
-
-msgid "Yesterday"
-msgstr "Hier"
-
-msgid "%s days ago"
-msgstr "Il y a %s jours"
-
-msgid "User currently active"
-msgstr "Utilisateur actuellement actif"
-
-msgid "Last seen: %s"
-msgstr "Dernièrement vu(e) : %s"
-
-msgid "Inactive since: %s"
-msgstr "Inactif depuis : %s"
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr "Votre ami(e) n'a pas l'air d'avoir reçu(e) votre/vos messages(s) !"
-
-msgid "Static content server"
-msgstr "Serveur de contenu statique"
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr "Ceci est le serveur de contenu statique pour %1s, « %2s »."
-
-msgid "User uploads server"
-msgstr "Serveur d'envois des utilisateurs"
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr "Ceci est le serveur d'envois des utilisateurs pour %1s, « %2s »."
-
-msgid "Suggested friends"
-msgstr "Amis suggérés"
-
-msgid "Check all"
-msgstr "Tout cocher"
-
-msgid "Uncheck all"
-msgstr "Tout décocher"
-
-msgid "Choose"
-msgstr "Choisir"
-
-msgid "List name"
-msgstr "Nom de liste"
-
-msgid "Allow"
-msgstr "Autoriser"
-
-msgid "Deny"
-msgstr "Interdire"
-
-msgid "Group"
-msgstr "Groupe"
-
-msgid "Subscription"
-msgstr "Abonnement"
-
-msgid "Both"
-msgstr "Les deux"
-
-msgid "From"
-msgstr "De"
-
-msgid "Everybody"
-msgstr "Tout le monde"
-
-msgid "Send messages"
-msgstr "Envoyer des messages"
-
-msgid "Send queries"
-msgstr "Envoyer des requêtes"
-
-msgid "See my status"
-msgstr "Voir mon statut"
-
-msgid "Send his/her status"
-msgstr "Envoyer son statut"
-
-msgid "Everything"
-msgstr "Tout"
-
-msgid "Item"
-msgstr "Élément"
-
-msgid "Order"
-msgstr "Ordre"
-
-msgid "Active for this session"
-msgstr "Actif pour cette session"
-
-msgid "Always active"
-msgstr "Toujours actif"
-
-msgid "User directory"
-msgstr "Annuaire des utilisateurs"
-
-msgid "Search a friend"
-msgstr "Chercher un ami"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-"La fonction demandée n'est pas implémentée par l'entité de destination, et "
-"n'a donc pas pu être traitée."
-
-msgid "Send him/her a message"
-msgstr "Lui envoyer un message"
-
-msgid "Start a chat with him/her"
-msgstr "Commencer une discussion avec lui/elle"
-
-msgid "Available shortcuts:"
-msgstr "Raccourcis disponibles :"
-
-msgid "%s removes the chat logs"
-msgstr "%s efface l'historique de la discussion"
-
-msgid "%s joins a groupchat"
-msgstr "%s rejoint un salon"
-
-msgid "%s closes the chat"
-msgstr "%s ferme la discussion"
-
-msgid "%s shows the user profile"
-msgstr "%s affiche le profil de l'utilisateur"
-
-msgid "%s sends a message to the room"
-msgstr "%s envoie un message au salon"
-
-msgid "%s changes your nickname"
-msgstr "%s modifie votre pseudonyme"
-
-msgid "%s sends a message to someone in the room"
-msgstr "%s envoie un message à quelqu'un du salon"
-
-msgid "%s changes the room topic"
-msgstr "%s modifie le sujet du salon"
-
-msgid "%s kicks a user of the room"
-msgstr "%s éjecte un utilisateur du salon"
-
-msgid "%s bans a user of the room"
-msgstr "%s banni un utilisateur du salon"
-
-msgid "%s invites someone to join the room"
-msgstr "%s invite quelqu'un à rejoindre le salon"
-
-msgid "Public profile"
-msgstr "Profil public"
-
-msgid "Your profile anywhere on the Web."
-msgstr "Votre profil partout sur le Web."
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-"%s est un service de Jappix.com qui rend votre profil XMPP public. Il est "
-"plus facile de le partager. Aucun compte XMPP n'est requis pour voir votre "
-"canal social, votre position actuelle et vos informations de contact."
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-"De plus, chaque photo que vous publiez dans votre canal social est ajoutée à "
-"un magnifique journal de vos photos. Vous pouvez à présent voir les photos "
-"que vous avez partagées année par année."
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-"Vous pouvez aussi utiliser votre avatar XMPP comme un avatar unique pour "
-"tout site, blog et forum que vous utilisez. Quand vous le changez sur XMPP, "
-"le nouvel avatar apparaît partout. Quelle innovation géniale !"
-
-msgid "Yay, let's create your public profile!"
-msgstr "Oui, créons mon profil public !"
-
-msgid "Enable my public profile"
-msgstr "Activer mon profil public"
-
-msgid "Jappix for your phone"
-msgstr "Jappix pour votre mobile"
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr "Une seule application pour les messages, canaux, profils et plus !"
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-"Cette notification n'est qu'informative, les données liées pourraient avoir "
-"été supprimées."
-
-msgid "You haven't provided any file to download"
-msgstr "Vous n'avez pas fourni de fichier à télécharger"
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr "Vous ne pouvez pas télécharger un fichier si aucune clé n'est fournie"
-
-msgid "Woah this file isn't found, please double check"
-msgstr "Le fichier n'est pas trouvable, vérifiez"
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr ""
-"La clé que vous avez fourni n'a pas la permission de télécharger ce fichier"
-
-msgid "Statistics are currently disabled in the settings."
-msgstr "Les statistiques sont actuellement suspendues dans la configuration."
-
-msgid "New event!"
-msgstr "Nouvel évènement !"
-
-msgid "%s is typing..."
-msgstr "%s écrit…"
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-"Le code de sécurité que vous avez entré est invalide. Réessayez avec un "
-"autre."
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-"Le nom d'utilisateur que vous avez choisi n'est pas disponible. Réessayez "
-"avec un autre."
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-"Nous avons rencontré une erreur à la création de votre compte. Réessayez."
-
-msgid "Username"
-msgstr "Utilisateur"
-
-msgid "Enter password"
-msgstr "Mot de passe"
-
-msgid "Once again..."
-msgstr "Une autre fois..."
-
-msgid "Code"
-msgstr "Code"
-
-msgid "Security code"
-msgstr "Code de sécurité"
-
-msgid "Advertising space available!"
-msgstr "Emplacement publicitaire disponible !"
-
-msgid "Advertise here"
-msgstr "Annoncez ici"
-
-msgid "Analytics (%s)"
-msgstr "Statistiques (%s)"
-
-msgid "Track visits"
-msgstr "Relever les visites"
-
-msgid "Piwik URL"
-msgstr "URL Piwik"
-
-msgid "Piwik tracking ID"
-msgstr "ID de suivi Piwik"
-
-msgid "Advertising (%s)"
-msgstr "Publicités (%s)"
-
-msgid "Enable ads"
-msgstr "Activer les pubs"
-
-msgid "Standard ads key"
-msgstr "Clé des pubs standard"
-
-msgid "Content ads key"
-msgstr "Clé des pubs content"
-
-msgid "AdSense client ID"
-msgstr "ID client AdSense"
-
-msgid "AdSense slot"
-msgstr "Slot AdSense"
-
-msgid "Stop"
-msgstr "Stop"
-
-msgid "Leave"
-msgstr "Partir"
-
-msgid "Mute"
-msgstr "Muet"
-
-msgid "Unmute"
-msgstr "Audible"
-
-msgid "Nobody there. Invite some people!"
-msgstr "Il n'y a personne. Invitez du monde !"
-
-msgid "Invite people..."
-msgstr "Inviter des personnes..."
-
-msgid "Enter people names..."
-msgstr "Entrez les noms..."
-
-msgid "Is calling you"
-msgstr "Vous appelle"
-
-msgid "Initiating call"
-msgstr "Initialisation de l'appel"
-
-msgid "Connecting to call..."
-msgstr "Connexion à l'appel..."
-
-msgid "Waiting..."
-msgstr "Patience..."
-
-msgid "Ringing..."
-msgstr "Ça sonne..."
-
-msgid "Declined the call"
-msgstr "A refusé l'appel"
-
-msgid "Call error"
-msgstr "Erreur d'appel"
-
-msgid "Ended the call"
-msgstr "A terminé l'appel"
-
-msgid "Call ended"
-msgstr "Appel terminé"
-
-msgid "Call canceled"
-msgstr "Appel annulé"
-
-msgid "Canceled the call"
-msgstr "A annulé l'appel"
-
-msgid "Is already in a call"
-msgstr "Est déjà en appel"
-
-msgid "Ending call..."
-msgstr "Fin de l'appel..."
-
-msgid "Incoming group call"
-msgstr "Appel de groupe"
-
-msgid "Preparing group call..."
-msgstr "Préparation de l'appel..."
-
-msgid "Connecting to group call..."
-msgstr "Connexion à l'appel..."
-
-msgid "Group call error"
-msgstr "Erreur d'appel"
-
-msgid "Ending group call..."
-msgstr "Fin de l'appel..."
-
-msgid "Group call ended"
-msgstr "Appel terminé"
-
-msgid "Accept"
-msgstr "Accepter"
-
-msgid "Decline"
-msgstr "Refuser"
-
-msgid "Okay"
-msgstr "D'accord"
-
-msgid "Retry"
-msgstr "Réessayer"
-
-msgid "Audio Call"
-msgstr "Appel Audio"
-
-msgid "Video Call"
-msgstr "Appel Vidéo"
-
-msgid "%s participant"
-msgstr "%s participant"
-
-msgid "%s participants"
-msgstr "%s participants"
-
-msgid "(full)"
-msgstr "(maxi)"
-
-msgid "%s is able to receive group calls."
-msgstr "%s peut recevoir des appels de groupe."
-
-msgid "%s may not support group calls."
-msgstr "%s ne semble pas supporter les appels de groupe."
-
-msgid "Send a message..."
-msgstr "Envoyer un message..."
-
-msgid "Edited"
-msgstr "Édité"
-
-msgid "Edited (%s)"
-msgstr "Édité (%s)"
-
-msgid "Editing"
-msgstr "Édition"
-
-msgid "Being edited"
-msgstr "En édition"
-
-msgid "Delivered"
-msgstr "Envoyé"
-
-msgid "Read"
-msgstr "Lu"
-
-msgid "Sending..."
-msgstr "Envoi..."
-
-msgid "%s requested your attention to the conversation"
-msgstr "%s demande votre attention à la conversation"
-
-msgid "You requested %s's attention to the conversation"
-msgstr "Vous avez demandé l'attention de %s à la conversation"
-
-msgid "Attention to conversation requested."
-msgstr "Demande d'attention à la conversation."
diff --git a/i18n/he/LC_MESSAGES/main.mo b/i18n/he/LC_MESSAGES/main.mo
deleted file mode 100644
index 246077f1..00000000
--- a/i18n/he/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/he/LC_MESSAGES/main.po b/i18n/he/LC_MESSAGES/main.po
deleted file mode 100644
index 4024fbdc..00000000
--- a/i18n/he/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2453 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-# GenghisKhan <genghiskhan@gmx.ca>, 2013
-# GenghisKhan <genghiskhan@gmx.ca>, 2013-2014
-# GenghisKhan <genghiskhan@gmx.ca>, 2012-2013
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-08-09 15:36+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Hebrew (http://www.transifex.com/projects/p/jappix/language/"
-"he/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: he\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "default:RTL"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"JavaScript נעדר מתוך דפדפן הרשת שלך, כך שלא תהיה באפשרותך להריץ את Jappix! "
-"אנא תקן זאת."
-
-msgid "Social channel, chat and more."
-msgstr "ערוץ חברתי, צ'אט ועוד."
-
-msgid "Create your public profile."
-msgstr "צור דיקן פומבי משלך."
-
-msgid "A mini-chat for your website."
-msgstr "מיני צ'אט עבור אתר הרשת שלך."
-
-msgid "Get Jappix, get support."
-msgstr "השג את Jappix, קבל תמיכה."
-
-msgid "Statistics around Jappix."
-msgstr "סטטיסטיקות סביב Jappix."
-
-msgid "Legal disclaimer for Jappix."
-msgstr "תניית פטור משפטית עבור Jappix."
-
-msgid "Download Jappix for free."
-msgstr "הורד את Jappix בחינם."
-
-msgid "Contribute to the Jappix code."
-msgstr "תרמו לקוד של Jappix."
-
-msgid "Jappix for your company."
-msgstr "Jappix עבור הפירמה שלך."
-
-msgid "Find a public Jappix node."
-msgstr "מצא צומת Jappix פומבי."
-
-msgid "Credits"
-msgstr "תודות"
-
-msgid "Association"
-msgstr "איגוד"
-
-msgid "Web agency"
-msgstr "סוכנות רשת"
-
-msgid "Legal"
-msgstr "משפטי"
-
-msgid "Legal disclaimer"
-msgstr "תניית פטור משפטית"
-
-msgid "Terms of use and legal"
-msgstr "תנאי שימוש ותנאים משפטיים"
-
-msgid "Owner"
-msgstr "בעלים"
-
-msgid "Node owner"
-msgstr "בעל צומת"
-
-msgid "By using our service, you accept %s."
-msgstr "על ידי שימוש בשירותנו, הינך מסכים/ה %s."
-
-msgid "our terms of use"
-msgstr "לתנאי השימוש שלנו"
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Jappix הופרעה על ידי בעיית רשת תקשורת, או באג או התחברות שגויה (אנא בדוק "
-"שהזנת את נתוני ההתחברות המדויקים), אנחנו מתנצלים על אי הנוחיות."
-
-msgid "The element list on this server could not be obtained!"
-msgstr "לא היתה אפשרות להשיג את רשימת הפרטים בשרת זה!"
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr "סיסמתך שונתה, כעת ניתן להתחבר אל חשבונך עם נתוני ההתחברות החדשים."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "חשבון XMPP הוסר, להתראות!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "התנתקת מתוך חשבון XMPP, שיהיה לך יום נעים!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr "לא נראה שהחדר אליו ניסית להצטרף קיים."
-
-msgid "The groupchat has been removed."
-msgstr "שיחת הקבוצה הוסרה."
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "המשתמש אליו ברצונך לגשת אינו נוכח בחדר."
-
-msgid "Please enter the group chat address to join."
-msgstr "אנא הזן כתובת קבוצת שיחה שברצונך להצטרף אליה."
-
-msgid "Please enter your nickname to join %s."
-msgstr "אנא הזן כינוי כדי להצטרף אל %s."
-
-msgid "This room (%s) is protected with a password."
-msgstr "חדר זה (%s) מוגן בעזרת מילת־מעבר."
-
-msgid "Your browser is out of date!"
-msgstr "הדפדפן אשר מצוי ברשותך הינו מיושן!"
-
-msgid "Last %s version is better!"
-msgstr "גרסה %s הינה טובה יותר!"
-
-msgid "Login"
-msgstr "כניסה"
-
-msgid "Register"
-msgstr "הרשמה"
-
-msgid "Here we go!"
-msgstr "המשך!"
-
-msgid "Server"
-msgstr "שרת"
-
-msgid "Password"
-msgstr "סיסמה"
-
-msgid "Remember me"
-msgstr "זכור אותי"
-
-msgid "This tool has been disabled!"
-msgstr "כלי זה נוטרל!"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr "בגין בעיית רשת, נותקת. מה ברצונך לעשות כעת?"
-
-msgid "Reconnect"
-msgstr "התחבר מחדש"
-
-msgid "Messages"
-msgstr "הודעות"
-
-msgid "Profile"
-msgstr "דיוקן"
-
-msgid "Options"
-msgstr "אפשרויות"
-
-msgid "Disconnect"
-msgstr "התנתקות"
-
-msgid "Filter"
-msgstr "סינון"
-
-msgid "Add a friend"
-msgstr "הוספת חברים"
-
-msgid "Your groupchats"
-msgstr "שיחות הקבוצה שלך"
-
-msgid "Audio/video conference"
-msgstr "ועידת אודיו/וידאו"
-
-msgid "Launch a group call"
-msgstr "שגר שיחה קבוצתית"
-
-msgid "Audio conference"
-msgstr "ועידה קולית"
-
-msgid "Video conference"
-msgstr "ועידה חזותית"
-
-msgid "Conference call"
-msgstr "שיחת ועידה"
-
-msgid "Manage your favorite groupchats"
-msgstr "ניהול שיחות הקבוצה המועדפות עליך"
-
-msgid "More stuff"
-msgstr "דברים נוספים"
-
-msgid "Show all friends"
-msgstr "הצג את כל החברים"
-
-msgid "Only show connected friends"
-msgstr "הצג חברים מחוברים בלבד"
-
-msgid "Groupchat presence messages"
-msgstr "הודעות נוכחות שיחת קבוצה"
-
-msgid "No chat images auto-load"
-msgstr "אין טעינה-אוטומטית של תמונות שיחה"
-
-msgid "Message archives"
-msgstr "ארכיוני הודעות"
-
-msgid "Date"
-msgstr "תאריך"
-
-msgid "A short message?"
-msgstr "הודעה קצרה?"
-
-msgid "How are you?"
-msgstr "מה שלומך?"
-
-msgid "What are you doing?"
-msgstr "מה הינך עושה כעת?"
-
-msgid "Join a chat"
-msgstr "הצטרפות אל שיחה"
-
-msgid "Status"
-msgstr "מצב חיבור"
-
-msgid "Available"
-msgstr "זמין"
-
-msgid "Talkative"
-msgstr "פטפטן"
-
-msgid "Away"
-msgstr "נעדר"
-
-msgid "Not available"
-msgstr "לא זמין"
-
-msgid "Busy"
-msgstr "עסוק"
-
-msgid "Offline"
-msgstr "לא מקוון"
-
-msgid "Mood"
-msgstr "מצב רוח"
-
-msgid "None"
-msgstr "ללא"
-
-msgid "Crazy"
-msgstr "מטורף"
-
-msgid "Excited"
-msgstr "נרגש"
-
-msgid "Playful"
-msgstr "שובב"
-
-msgid "Happy"
-msgstr "שמח"
-
-msgid "Shocked"
-msgstr "הלום"
-
-msgid "Hot"
-msgstr "לוהט"
-
-msgid "Sad"
-msgstr "עצוב"
-
-msgid "Amorous"
-msgstr "חושק"
-
-msgid "Confident"
-msgstr "סמוך ובטוח"
-
-msgid "Activity"
-msgstr "פעילות"
-
-msgid "Chores"
-msgstr "מטלות"
-
-msgid "Drinking"
-msgstr "שותה"
-
-msgid "Eating"
-msgstr "אוכל"
-
-msgid "Exercising"
-msgstr "מתאמן"
-
-msgid "Grooming"
-msgstr "טיפוח"
-
-msgid "Appointment"
-msgstr "בפגישה"
-
-msgid "Inactive"
-msgstr "לא פעיל"
-
-msgid "Relaxing"
-msgstr "נרגע"
-
-msgid "Talking"
-msgstr "משוחח"
-
-msgid "Traveling"
-msgstr "במסע"
-
-msgid "Working"
-msgstr "עובד"
-
-msgid "View profile"
-msgstr "הצג דיוקן"
-
-msgid "This is a repeat from %s"
-msgstr "זוהי חזרה מאת %s"
-
-msgid "Repeat this notice"
-msgstr "חזור על התראה זו"
-
-msgid "Remove this notice"
-msgstr "הסר את התראה זו"
-
-msgid "Your profile"
-msgstr "הדיוקן שלך"
-
-msgid "Identity"
-msgstr "זהות"
-
-msgid "Profile image"
-msgstr "תמונת דיוקן"
-
-msgid "Others"
-msgstr "שונות"
-
-msgid "Other"
-msgstr "אחר"
-
-msgid "Personal"
-msgstr "מידע אישי"
-
-msgid "Complete name"
-msgstr "שם מלא"
-
-msgid "Nickname"
-msgstr "כינוי"
-
-msgid "First name"
-msgstr "שם פרטי"
-
-msgid "Last name"
-msgstr "שם משפחה"
-
-msgid "Date of birth"
-msgstr "תאריך לידה"
-
-msgid "Contact"
-msgstr "מידע התקשרות"
-
-msgid "E-mail"
-msgstr "דוא״ל"
-
-msgid "Phone"
-msgstr "טלפון"
-
-msgid "Website"
-msgstr "אתר רשת"
-
-msgid "Current"
-msgstr "נוכחית"
-
-msgid "Delete"
-msgstr "מחק"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr "כמה חבל! אין לך תמונת דיוקן מוגדרת בכרטיס הזהות שלך!"
-
-msgid "Address"
-msgstr "כתובת"
-
-msgid "Street"
-msgstr "רחוב"
-
-msgid "City"
-msgstr "עיר"
-
-msgid "Postal code"
-msgstr "מיקוד דואר"
-
-msgid "Country"
-msgstr "מדינה"
-
-msgid "Biography"
-msgstr "ביוגרפיה"
-
-msgid "Important notice"
-msgstr "התראה חשובה"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-"יש לעשות שימוש זהיר עם המידע אשר יוזן אל תוך הדיוקן שלך, משום שמידע זה עשוי "
-"להיות נגיש על ידי כולם (אפילו לכאלו שאין לך עניין שיראו זאת)."
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr ""
-"לא כל דבר הינו פרטי בתוך XMPP; זהו אחד מן הדברים הללו, הדיוקן הפומבי שלך "
-"(vCard)."
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"מומלץ מאוד להעלות תמונת דיוקן (%s לכל היותר), כגון תמונה של עצמך, מכיוון שזו "
-"תביא לידי כך שהחברים שלך יוכלו לזהותך בקלות."
-
-msgid "Save"
-msgstr "שמור"
-
-msgid "Cancel"
-msgstr "ביטול"
-
-msgid "Edit options"
-msgstr "עריכת אפשרויות"
-
-msgid "Channel"
-msgstr "ערוץ"
-
-msgid "Commands"
-msgstr "פקודות"
-
-msgid "Sounds"
-msgstr "צלילים"
-
-msgid "Privacy"
-msgstr "פרטיות"
-
-msgid "Message archiving"
-msgstr "אחסון הודעות"
-
-msgid "Store an history of your chats"
-msgstr "אחסן היסטוריה של שיחותיך"
-
-msgid "Geolocation"
-msgstr "מיקום ארצי"
-
-msgid "Disabled"
-msgstr "מנוטרלת"
-
-msgid "Store all chats"
-msgstr "אחסן כל שיחה"
-
-msgid "Store friend chats"
-msgstr "אחסן שיחות עם חברים"
-
-msgid "Remove all archives"
-msgstr "הסר את כל הארכיונים"
-
-msgid "Empty"
-msgstr "ריק"
-
-msgid "Empty channel"
-msgstr "ערוץ ריק"
-
-msgid "Persistent"
-msgstr "נמשך"
-
-msgid "Maximum notices"
-msgstr "התראות מרביות"
-
-msgid "Account"
-msgstr "חשבון"
-
-msgid "Change password"
-msgstr "שנה סיסמה"
-
-msgid "Delete account"
-msgstr "מחק חשבון"
-
-msgid "Old"
-msgstr "ישן"
-
-msgid "New (2 times)"
-msgstr "חדש (פעמיים)"
-
-msgid "Suggested chatrooms"
-msgstr "חדרי שיחה מוצעים"
-
-msgid "Skip"
-msgstr "דלג"
-
-msgid "Continue"
-msgstr "המשך"
-
-msgid "To"
-msgstr "אל"
-
-msgid "Close"
-msgstr "סגור"
-
-msgid "unknown"
-msgstr "לא ידוע"
-
-msgid "Unavailable"
-msgstr "לא זמין"
-
-msgid "is now"
-msgstr "עתה"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "אנא המתן בזמן שהאווטאר מועלה..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "והנה היא! תמונת דיוקן חדשה ומרהיבה!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "תמונה זו אינה נתמכת או שגודלה שגוי."
-
-msgid "Reply"
-msgstr "מענה"
-
-msgid "Error"
-msgstr "שגיאה"
-
-msgid "Click here to solve the error"
-msgstr "לחץ/י כאן כדי לפתור את השגיאה"
-
-msgid "You"
-msgstr "אני"
-
-msgid "Remove"
-msgstr "הסר"
-
-msgid "Rename"
-msgstr "שנה שם"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "שלום, שמי %s, ברצוני להוסיפך אל רשימת החברים שלי."
-
-msgid "Smiley insertion"
-msgstr "שיבוץ רגשונים"
-
-msgid "Change style"
-msgstr "עיצוב סגנון"
-
-msgid "Text in bold"
-msgstr "תמליל מודגש"
-
-msgid "Text in italic"
-msgstr "תמליל נטוי"
-
-msgid "Underlined text"
-msgstr "תמליל עם קו תחתון"
-
-msgid "Send a file"
-msgstr "שלח קובץ"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr "ברגע שההעלאה תסתיים, חברך יתבקש להוריד את הקובץ ששלחת."
-
-msgid "Save chat"
-msgstr "שמירת שיחה"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"בהקלקה על קישור זה ניתן להשיג את רשומת השיחה (אנא המתן עבור ההקלקה הראשונה). "
-"לאחר ההקלקה הראשונה, עליך להקליק שנית כדי להוריד את הקובץ."
-
-msgid "This chat is empty!"
-msgstr "שיחה זו הינה ריקה!"
-
-msgid "Generate file!"
-msgstr "צור קובץ!"
-
-msgid "Download file!"
-msgstr "הורד קובץ!"
-
-msgid "Clean current chat"
-msgstr "נקה שיחה נוכחית"
-
-msgid "Show user profile"
-msgstr "הצג דיוקן משתמש"
-
-msgid "Add this contact to your friends"
-msgstr "הוסף את איש קשר זה אל החברים שלך"
-
-msgid "Add this groupchat to your favorites"
-msgstr "הוסף שיחת קבוצה זו אל המועדפים שלך"
-
-msgid "All tabs"
-msgstr "כל הכרטיסיות"
-
-msgid "Join groupchat"
-msgstr "הצטרף אל שיחת קבוצה"
-
-msgid "Close this tab"
-msgstr "סגור את כרטיסיה זו"
-
-msgid "no subject defined for this room."
-msgstr "לא הוגדר נושא עבור חדר זה."
-
-msgid "Administration panel for this room"
-msgstr "לוח ניהול עבור חדר זה"
-
-msgid "Moderators"
-msgstr "אחראים"
-
-msgid "Participants"
-msgstr "משתתפים"
-
-msgid "Visitors"
-msgstr "מבקרים"
-
-msgid "Manage favorite rooms"
-msgstr "ניהול חדרים מועדפים"
-
-msgid "Change favorites"
-msgstr "שנה מועדפים"
-
-msgid "Search a room"
-msgstr "חיפוש חדר"
-
-msgid "Select a favorite"
-msgstr "בחירת מועדף"
-
-msgid "Getting the name..."
-msgstr "משיג כעת את השם..."
-
-msgid "Gateway"
-msgstr "שער"
-
-msgid "Name"
-msgstr "שם"
-
-msgid "Room"
-msgstr "חדר"
-
-msgid "Add"
-msgstr "הוסף"
-
-msgid "Edit"
-msgstr "ערוך"
-
-msgid "Search a room on"
-msgstr "חיפוש חדר אצל"
-
-msgid "No room found on this server."
-msgstr "לא נמצא חדר בשרת זה."
-
-msgid "Service discovery"
-msgstr "מציאת שירות"
-
-msgid "Server to query"
-msgstr "שרת ממנו ברצונך לאחזר מידע"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "הישות לא החזירה שום תוצאה!"
-
-msgid "Accounts"
-msgstr "חשבונות"
-
-msgid "Authentications"
-msgstr "אישורים"
-
-msgid "Automation"
-msgstr "אוטומציה"
-
-msgid "Clients"
-msgstr "לקוחות"
-
-msgid "Collaboration"
-msgstr "שיתוף פעולה"
-
-msgid "Components"
-msgstr "רכיבים"
-
-msgid "Rooms"
-msgstr "חדרים"
-
-msgid "Directories"
-msgstr "ספריות"
-
-msgid "Gateways"
-msgstr "שערים"
-
-msgid "News"
-msgstr "חדשות"
-
-msgid "Hierarchy"
-msgstr "היררכיה"
-
-msgid "Proxies"
-msgstr "צירים (Proxy)"
-
-msgid "Publication/Subscription"
-msgstr "פרסום/מינוי"
-
-msgid "Storage"
-msgstr "אחסון"
-
-msgid "Service offline or broken"
-msgstr "השירות לא מקוון או מקוטע"
-
-msgid "Your inbox"
-msgstr "תיבה נכנסת"
-
-msgid "Available actions"
-msgstr "פעולות זמינות"
-
-msgid "Clean"
-msgstr "טהר"
-
-msgid "New"
-msgstr "חדשה"
-
-msgid "Received"
-msgstr "התקבל"
-
-msgid "Subject"
-msgstr "נושא"
-
-msgid "Content"
-msgstr "תוכן"
-
-msgid "Send message"
-msgstr "שלח הודעה"
-
-msgid "Your inbox is empty."
-msgstr "התיבה הנכנסת ריקה."
-
-msgid "MUC administration"
-msgstr "ניהול שמ״מ"
-
-msgid "You administrate this room"
-msgstr "חדר זה מנוהל על ידך"
-
-msgid "Enter new subject"
-msgstr "הזן נושא חדש"
-
-msgid "Configuration"
-msgstr "תצורה"
-
-msgid "Authorizations"
-msgstr "הרשאות"
-
-msgid "Member list"
-msgstr "רשימת חברים"
-
-msgid "Owner list"
-msgstr "רשימת בעלים"
-
-msgid "Administrator list"
-msgstr "רשימת מנהלנים"
-
-msgid "Outcast list"
-msgstr "רשימת מנודים"
-
-msgid "Add an input"
-msgstr "הוסף קלט"
-
-msgid "Destroy this MUC"
-msgstr "החרב את שמ״מ זה"
-
-msgid "Yes, let's do it!"
-msgstr "כן, קדימה לדרך!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "חברך מאזין כעת לשיחה."
-
-msgid "Your friend is writing a message..."
-msgstr "חברך כותב כעת הודעה..."
-
-msgid "Your friend stopped writing a message."
-msgstr "חברך פסק מלכתוב הודעה."
-
-msgid "Your friend is doing something else."
-msgstr "חברך עושה דבר אחר."
-
-msgid "Your friend closed the chat."
-msgstr "חברך סגר את השיחה."
-
-msgid "Requesting this service..."
-msgstr "מבקש כעת את שירות זה..."
-
-msgid "Loading"
-msgstr "טוען כעת"
-
-msgid "changed his/her nickname to %s"
-msgstr "החליף/ה את הכינוי שלו/שלה אל %s"
-
-msgid "joined the chat room"
-msgstr "נכנס/ה אל החדר"
-
-msgid "left the chat room"
-msgstr "עזב/ה את החדר"
-
-msgid "%s left"
-msgstr "%s עזב/ה"
-
-msgid "%s joined"
-msgstr "%s נכנס/ה"
-
-msgid "no status"
-msgstr "בלי מצב"
-
-msgid "has been kicked"
-msgstr "נבעט/ה"
-
-msgid "has been banned"
-msgstr "נאסר/ה"
-
-msgid "no reason"
-msgstr "בלי סיבה"
-
-msgid "Communicate with the entire world!"
-msgstr "תקשורת עם כל העולם!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-"Jappix הינה פלטפורמה חברתית פתוחה, אשר מניחה לך בקלות ליצור או להישאר בקשר "
-"עם כל אחד."
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-"הצטרפו אל מיליוני המשתמשים אשר משתמשים כעת ברשת התקשורת XMPP (&#x200f;Google "
-"Talk, וכדומה), אל תישארו בחוץ!"
-
-msgid "Hi there!"
-msgstr "שלום לך!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr "ברוך בואך אל %1s, “%2s”."
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr "באפשרותך להיכנס בעזרת חשבון XMPP קיים או ליצור חשבון חדש בחינם!"
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-"לשם בטיחות חשבונך, בעת התחברות או בעת רישום, עליך לדאוג כי הסיסמה שלך נשארת "
-"בסוד."
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-"בחרת להתחבר באמצעות חשבון XMPP קיים. אפשר לעשות שימוש גם %s כדי להצטרף אל "
-"שיחת קבוצה."
-
-msgid "Previous"
-msgstr "חזרה"
-
-msgid "General"
-msgstr "כללי"
-
-msgid "Advanced"
-msgstr "מתקדם"
-
-msgid "Resource"
-msgstr "משאב"
-
-msgid "Priority"
-msgstr "עדיפות"
-
-msgid "Low"
-msgstr "נמוכה"
-
-msgid "Medium"
-msgstr "בינונית"
-
-msgid "High"
-msgstr "גבוהה"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-"אנא הזן את הכינוי ואת שיחת הקבוצה אליה ברצונך להצטרף, אפשר לפנות בחזרה אל %s."
-
-msgid "login page"
-msgstr "עמוד התחברות"
-
-msgid "Share this link with your friends:"
-msgstr "שתף את קישור זה עם החברים שלך:"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr "רשום חשבון XMPP חדש לצירוף חברייך בענן החברתי שלך. זה פשוט!"
-
-msgid "Required"
-msgstr "חובה"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "נרשמת בהצלחה, הנה כתובת XMPP לשימושך:"
-
-msgid "Manager"
-msgstr "מנהל"
-
-msgid "Encrypted"
-msgstr "חיבור מוצפן"
-
-msgid "Unencrypted"
-msgstr "חיבור לא מוצפן"
-
-msgid "Where are you?"
-msgstr "מה מיקומך?"
-
-msgid "What's up with you?"
-msgstr "מה המצב איתך?"
-
-msgid "Type something you want to share with your friends..."
-msgstr "בשדה זה אפשר להקליד הודעת מצב אותה ברצונך לשתף עם החברים שלך..."
-
-msgid "Fetching the social channel..."
-msgstr "מאחזר כעת את הערוץ החברתי..."
-
-msgid "You are synchronized with your network."
-msgstr "אנחנו מסונכרנים עם רשת התקשורת שלך."
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "אין אפשרות לשלוח דבר: ניתן לקבל התראות בלבד!"
-
-msgid "Media viewer"
-msgstr "מציג מדיה"
-
-msgid "Browse"
-msgstr "עיון"
-
-msgid "Command"
-msgstr "פקודה"
-
-msgid "Subscribe"
-msgstr "הרשמה"
-
-msgid "Join"
-msgstr "הצטרף"
-
-msgid "Automatic"
-msgstr "אוטומטית"
-
-msgid "Search"
-msgstr "חיפוש"
-
-msgid "No result!"
-msgstr "אין תוצאות!"
-
-msgid "No notifications."
-msgstr "אין התראות."
-
-msgid "would like to add you as a friend."
-msgstr "רוצה להוסיפך כחבר/ה."
-
-msgid "would like you to join this chatroom:"
-msgstr "מעוניין להצטרף אל חדר שיחה זה:"
-
-msgid "Do you accept?"
-msgstr "האם להסכים?"
-
-msgid "Yes"
-msgstr "כן"
-
-msgid "No"
-msgstr "לא"
-
-msgid "would like to get authorization."
-msgstr "רוצה להשיג הרשאה."
-
-msgid "would like to send you a file: “%s”."
-msgstr "רוצה לשלוח אליך קובץ: “%s”."
-
-msgid "has received a file exchange request: “%s”."
-msgstr "קיבל/ה בקשה להמרת קבצים: “%s”."
-
-msgid "has accepted to receive your file: “%s”."
-msgstr "הסכים/ה לקבל את הקובץ שלך: “%s”."
-
-msgid "has rejected to receive your file: “%s”."
-msgstr "סרב/ה לקבל את הקובץ שלך: “%s”."
-
-msgid "could not receive your file: “%s”."
-msgstr "לא קיבל/ה את הקובץ שלך: “%s”."
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr "האם ברצונך לראות את החברים אשר %s הציע לך?"
-
-msgid "commented an item you follow: “%s”."
-msgstr "הגיב/ה על פריט אחריו הינך עוקב/ת: “%s”."
-
-msgid "liked your post: “%s”."
-msgstr "אהב/ה את הפוסט שלך: “%s”."
-
-msgid "quoted you somewhere: “%s”."
-msgstr "צוטטת במקום כלשהו על ידי: “%s”."
-
-msgid "published on your wall: “%s”."
-msgstr "פרסם/ה על הקיר שלך: “%s”."
-
-msgid "tagged you in a photo (%s)."
-msgstr "תייגת בתמונה על ידי (%s)."
-
-msgid "tagged you in a video (%s)."
-msgstr "תויגת בוידאו על ידי (%s)."
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr "נתן תוקף לחשבונך. הדיוקן הפומבי יהיה זמין בעוד מספר רגעים."
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr "הסיר את הדיוקן הפומבי לאחר בקשתך. אנחנו נתגעגע אליך!"
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr "שמר את הגדרות הדיוקן הפומבי שלך. אלו יוחלו בעוד מספר רגעים."
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-"לא היה מסוגל להעניק תוקף לחשבונך כדי ליצור או לעדכן את הדיוקן הפומבי. בדוק "
-"את נתוני התחברותך."
-
-msgid "Open"
-msgstr "פתח"
-
-msgid "Show"
-msgstr "הצגה"
-
-msgid "Hide"
-msgstr "הסתרה"
-
-msgid "Submit"
-msgstr "שליחה"
-
-msgid "Client"
-msgstr "לקוח"
-
-msgid "System"
-msgstr "מערכת"
-
-msgid "Local time"
-msgstr "זמן מקומי"
-
-msgid "Comments"
-msgstr "הערות"
-
-msgid "User profile"
-msgstr "דיוקן משתמש"
-
-msgid "See his/her position on the globe"
-msgstr "הצג מיקום על הגלובוס"
-
-msgid "Confirm"
-msgstr "אימות"
-
-msgid "anonymous mode"
-msgstr "במצב אלמוני"
-
-msgid "Groups"
-msgstr "קבוצות"
-
-msgid "Unclassified"
-msgstr "לא מסווג"
-
-msgid "Authorize"
-msgstr "מתן הרשאה"
-
-msgid "Ask for authorization"
-msgstr "בקשה למתן הרשאה"
-
-msgid "Unblock"
-msgstr "ביטול חסימה"
-
-msgid "Prohibit"
-msgstr "אסירה"
-
-msgid "Block"
-msgstr "חסימה"
-
-msgid "Chat"
-msgstr "שיחה"
-
-msgid "Groupchat"
-msgstr "שיחת קבוצה"
-
-msgid "Jappix Mobile"
-msgstr "Jappix לנייד"
-
-msgid "Desktop"
-msgstr "ממשק שולחני"
-
-msgid "Mobile"
-msgstr "ממשק ניידי"
-
-msgid "Please wait..."
-msgstr "אנא המתן..."
-
-msgid "Please enable JavaScript"
-msgstr "אנא אפשר JavaScript"
-
-msgid "Show comments"
-msgstr "הצג תגובות"
-
-msgid "Loading comments..."
-msgstr "טוען כעת תגובות..."
-
-msgid "Could not get the comments!"
-msgstr "לא היתה אפשרות להשיג את התגובות!"
-
-msgid "Comments locked!"
-msgstr "תגובות נעולות!"
-
-msgid "Type your comment here..."
-msgstr "הקלד את התגובה שלך כאן..."
-
-msgid "Your channel"
-msgstr "הערוץ שלך"
-
-msgid "Channel of"
-msgstr "הערוץ של"
-
-msgid "More notices..."
-msgstr "התראות נוספות..."
-
-msgid "Attach a file"
-msgstr "צירוף קובץ"
-
-msgid "Send"
-msgstr "שלח"
-
-msgid "Unattach the file"
-msgstr "בטל צירוף קובץ"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-"אירעה שגיאה בעת העלאת הקובץ שלך: ייתכן וקובץ זה גדול יותר מן (%s לכל היותר) "
-"או אסור!"
-
-msgid "Authorization failed"
-msgstr "הרשאה נכשלה"
-
-msgid "Registration failed, please choose a different username"
-msgstr "הרשמה נכשלה, אנא בחר שם משתמש אחר"
-
-msgid "Service unavailable"
-msgstr "שירות לא זמין"
-
-msgid "Internal server error, try later"
-msgstr "שגיאת שרת פנימית, נסה מאוחר יותר"
-
-msgid "Your form has been sent."
-msgstr "התבנית שלך נשלחה."
-
-msgid "Application"
-msgstr "אפליקציה"
-
-msgid "Media integration"
-msgstr "מיזוג מדיה"
-
-msgid "Keep local chat archives"
-msgstr "שמור ארכיון שיחה מקומי"
-
-msgid "XMPP links"
-msgstr "קישורי XMPP"
-
-msgid "Open XMPP links with Jappix"
-msgstr "פתח קישורי XMPP בעזרת Jappix"
-
-msgid "changed the subject to:"
-msgstr "קבע/ה את הנושא אל:"
-
-msgid "Welcome!"
-msgstr "ברוך בואך!"
-
-msgid "Friends"
-msgstr "חברים"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr "ברוך בואך אל ‫Jappix, הענן החברתי האוטונומי שלך!"
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-"לפני יישומך בפלטפורמה זו, עליך לשנות מספר הגדרות, לחפש חברים ולהשלים את "
-"הדיוקן שלך."
-
-msgid "Enable notification sounds"
-msgstr "אפשר צלילי התראה"
-
-msgid "Share your position on the globe"
-msgstr "שיתוף מיקומך על הגלובוס"
-
-msgid "Offline friends"
-msgstr "חברים לא מקוונים"
-
-msgid "Don't hide offline friends"
-msgstr "אי הסתרת חברים בלתי מקוונים"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-"עם כלי זה ניתן למצוא את החברים שלך על השרת שמצוי בשימוש כעת, וניתן גם "
-"להוסיפם מאוחר יותר."
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr "עבודה טובה! כעת, באפשרותך לשתף את Jappix עם החברים שלך!"
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr "בלוחצך על לחצן השמירה, עורך הדיוקן יפתח. שיהיה לך גיבוש נעים!"
-
-msgid "Share Jappix on %s"
-msgstr "שתפו את Jappix בתוך %s"
-
-msgid "Follow Jappix topic on %s"
-msgstr "עקוב אחר נושא Jappix בתוך %s"
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "הנני עושה שימוש בפלטפורמה החברתית הפתוחה Jappix. אני %s!"
-
-msgid "Unknown name"
-msgstr "שם לא ידוע"
-
-msgid "Unknown country"
-msgstr "מדינה לא ידועה"
-
-msgid "Click to enable"
-msgstr "הקלק כדי לאפשר"
-
-msgid "Click to disable"
-msgstr "הקלק כדי לנטרל"
-
-msgid "Installation"
-msgstr "התקנה"
-
-msgid "Jappix installation"
-msgstr "התקנת Jappix"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "ברוך בואך אל התקנת Jappix!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-"כלי זה יסייע לך להתקין את Jappix, הפלטפורמה החברתית הרב תכליתית הראשונה "
-"המבוססת XMPP, על שרתך בקלות."
-
-msgid "Installation Steps:"
-msgstr "שלבי התקנה:"
-
-msgid "Welcome"
-msgstr "ברוך בואך"
-
-msgid "Storage configuration"
-msgstr "תצורת אחסון"
-
-msgid "Administrator account"
-msgstr "חשבון מנהלן"
-
-msgid "Main configuration"
-msgstr "תצורה ראשית"
-
-msgid "Hosts configuration"
-msgstr "תצורת מארחים"
-
-msgid "Services installation"
-msgstr "התקנת שירותים"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-"במידה והשפה הנוכחית לא מתאימה לשפתך (%1s), באפשרותך לגרום ל־Jappix לדבר %2s "
-"וזה יישמר."
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"במידה וברצונך לקבל עזרה בכל הנוגע אל התקנת ותצורת Jappix, ניתן להשתמש בתיעוד "
-"שלנו בשלמותו, זמין בכתובת:"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr "זהו הזמן לבנות את הענן החברתי שלך: צריך פשוט לעבור אל השלב הבא!"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-"‫Jappix מאחסנת מידע נמשך (כגון קבצים משותפים, רשומות שיחה, את המוזיקה שלך ואת "
-"תצורתה) לתוך תיקיות אחסון מרובות."
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-"על Jappix לקבל הרשאה לכתוב בתוך תיקייה זו כדי ליצור את מדורי המשנה שלה. היה "
-"ולא, עליך להגדיר את ההרשאות של %1s אל %2s או לשנות את הבעלים של התיקייה אל "
-"%3s (תלוי בתצורה שלך)."
-
-msgid "The folder is writable, you can continue!"
-msgstr "תיקייה זו הינה ברת כתיבה, ניתן להמשיך!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-"Jappix מציעה לך את האפשרות לנהל את התצורה שלך, להתקין תוספים חדשים או לחפש "
-"עבור עדכונים. זוהי הסיבה מדוע עליך ליצור חשבון מנהלן כדי לקבל גישה אל המנהל."
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-"כאשר Jappix תותקן, עליך להקליק על \"קישור מנהל\" שבעמוד הבית כדי לקבל גישה "
-"אליו."
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr "אופס, פספסת משהו או ששתי הסיסמאות לא תואמות!"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-"עליך לציין כמה ערכים כדי שתעמוד לרשות ‫Jappix האפשרות לעבוד. אנא תקן את הקלט/"
-"ים הבא/ים (לחלופין ניתן להשתמש בערכים המשתמטים, המספיקים למרבית האנשים)."
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-"לתשומת לבך: במידה ולא יצוין ערך שהינו חובה, הערך יושלם אוטומטית עם זה המשתמט."
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-"האם יש לך צורך בעזרה? מוטב לך לקרוא את עמוד התיעוד שלנו באשר לכיצד למלא את "
-"תבנית זו!"
-
-msgid "User"
-msgstr "משתמש"
-
-msgid "Service"
-msgstr "שירות"
-
-msgid "Service name"
-msgstr "שם שירות"
-
-msgid "Service description"
-msgstr "תיאור שירות"
-
-msgid "Owner name"
-msgstr "שם בעלים"
-
-msgid "Owner website"
-msgstr "אתר רשת בעלים"
-
-msgid "Connection"
-msgstr "חיבור"
-
-msgid "Lock the host"
-msgstr "נעילת המארח"
-
-msgid "Anonymous mode"
-msgstr "מצב אלמוני"
-
-msgid "HTTP authentication"
-msgstr "אימות HTTP"
-
-msgid "Registration allowed"
-msgstr "הרשמה פתוחה"
-
-msgid "Use the built-in BOSH proxy"
-msgstr "השתמש בציר BOSH מובנה"
-
-msgid "Manager link"
-msgstr "קישור מנהל"
-
-msgid "Groupchats to join"
-msgstr "קבוצת שיחה להצטרפות"
-
-msgid "Suggest groupchats"
-msgstr "שיחות קבוצה מוצעות"
-
-msgid "Encryption"
-msgstr "הצפנה"
-
-msgid "HTTPS storage"
-msgstr "אחסון HTTPS"
-
-msgid "Force HTTPS"
-msgstr "החלת חיבור מאובטח (HTTPS)"
-
-msgid "Compression"
-msgstr "דחיסה"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"עמוד זה מסייע לך לציין את המארחים המשתמטים אליהם Jappix תתחבר. ניתן להשאירו "
-"כפי שהוא (as is) ולהמשיך, אם ברצונך להשתמש במארחי השירות הרשמיים."
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"ייתכן ואין לך מושג מהו שרת BOSH? למעשה, זהו ממסר בין לקוח Jappix לבין שרת "
-"XMPP, והינו חיוני משום מגבלות טכניות."
-
-msgid "Main host"
-msgstr "מארח ראשי"
-
-msgid "Groupchat host"
-msgstr "מארח שיחת קבוצה"
-
-msgid "Pubsub host"
-msgstr "מארח Pubsub"
-
-msgid "Anonymous host"
-msgstr "מארח אנונימי"
-
-msgid "Directory host"
-msgstr "מארח מדור"
-
-msgid "BOSH host"
-msgstr "מארח BOSH"
-
-msgid "WebSocket host"
-msgstr "מארח WebSocket"
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-"ניתן להתקין מספר תוכנות נוספות על שרתך, כדי להרחיב את התכונות של Jappix. "
-"ייתכן ויהיו כאלו שיעברו שינוי בעת התהליך, משום הגבלות אבטחה שמוגדרות באופן "
-"משתמט."
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-"כדי לבצע זאת, עליך לקבל גישה אל מעטפת השרת שלך ולהיות מחובר כמשמש שורש. "
-"זכור, חלק זה הינו בגדר רשות (שאינו חובה), Jappix תעבוד ללא מודולים אלו, אך "
-"חלק מתכונותיה לא יהיו זמינות."
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-"לאחר שתסיים את ההתקנה, Jappix תלחין את קבצי המטמון. תהליך זה עשוי להיות "
-"איטי, יש להמתין עד אשר היישום הינו מוצג ואין ללחוץ על שום כפתור עד אז."
-
-msgid "Thanks for using Jappix!"
-msgstr "תודה שבחרת להשתמש בשירות Jappix!"
-
-msgid "Next"
-msgstr "הבא"
-
-msgid "Finish"
-msgstr "סיום"
-
-msgid "Check again"
-msgstr "בדוק שוב"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr "התיקייה אינה ברת כתיבה, קבע את ההרשאות המתאימות למדור %s."
-
-msgid "%s is installed on your system."
-msgstr "%s מותקן במערכתך."
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s לא מותקן במערכתך, עליך להתקין %2s."
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "גודל העלאה מרבי של PHP הינו מספיק (%s)."
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr "גודל העלאה מרבי של PHP אינו מספיק (%1s), עליך להגדירו אל %2s בתוך %3s."
-
-msgid "Jappix manager"
-msgstr "Jappix manager"
-
-msgid "Manager access"
-msgstr "כניסת מנהל"
-
-msgid "Statistics"
-msgstr "סטטיסטיקה"
-
-msgid "Hosts"
-msgstr "מארחים"
-
-msgid "Design"
-msgstr "עיצוב"
-
-msgid "Repeat"
-msgstr "חזרה"
-
-msgid "All"
-msgstr "הכל"
-
-msgid "Horizontal"
-msgstr "אופקי"
-
-msgid "Vertical"
-msgstr "אנכי"
-
-msgid "Center"
-msgstr "מרכז"
-
-msgid "Left"
-msgstr "שמאל"
-
-msgid "Right"
-msgstr "ימין"
-
-msgid "Top"
-msgstr "עליון"
-
-msgid "Bottom"
-msgstr "תחתון"
-
-msgid "Adapt"
-msgstr "התאם"
-
-msgid "Color"
-msgstr "צבע"
-
-msgid "Users"
-msgstr "משתמשים"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr "זהו אזור מוגבל: רק משתמשים מורשים יכולים לנהל את צומת Jappix זה."
-
-msgid "Please use the form below to login to the administration panel."
-msgstr "אנא השתמש בתבנית שלמטה כדי להתחבר את לוח הניהול."
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-"כדי לשפר את האבטחה, כל סשן מוגבל בזמן וכאשר הדפדפן שלך ייסגר, חשבונך ינותק "
-"לאלתר."
-
-msgid "Credentials"
-msgstr "נתוני התחברות"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "התנתקת. להתראות!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr "אופס, לא היתה אפשרות לזהותך כמשתמש מנהל. בדוק את נתוני ההתחברות שלך!"
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-"סטטיסטיקות בסיסיות מעובדות על ידי Jappix אודות מספר דברים חשובים, ניתן למצוא "
-"אותן למטה."
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr "שינוי תצורת צומת Jappix בעזרת כלי זה."
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr "שנה מארחי XMPP אשר צומת Jappix זה משרת, בעזרת כלי זה."
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-"כל הקבצים אשר מאוחסנים בצומת ‫Jappix זה יכולים להתנהל בעזרת כלי זה: אנא בחר "
-"תיקיית משנה ולאחר מכן תעמוד לרשותך האפשרות להתחיל לערוך את התוכן שלה!"
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr "Jappix הינה ברת התאמה בצורה מלאה: ניתן לשנות את עיצובה ממש כאן."
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr "זוהי אינה תמונה תקפה, אנא השתמש בפורמט PNG, GIF או JPG!"
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr "זוהי אינה תמונה תקפה, אנא השתמש בפורמט PNG!"
-
-msgid "The image could not be received, would you mind retry?"
-msgstr "התמונה לא יכלה להתקבל, האם אכפת לך לנסות שוב?"
-
-msgid "Your service logo has been successfully changed!"
-msgstr "סמל השירות שלך שונה בהצלחה!"
-
-msgid "Your image was added to the list!"
-msgstr "תמונתך הוספה אל הרשימה!"
-
-msgid "Changes saved!"
-msgstr "השינויים נשמרו!"
-
-msgid "Logo"
-msgstr "סמל"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-"ניתן להגדיר את סמל השירות שלך במקום הסמל המשתמט. יש לשים לב לגודל ולצבע "
-"המרכזי של כל סמל!"
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr "העלאת כל סמל עם גודל הפיקסלים המרבי המומלץ."
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr "פורמט הסמל שלך מוכרח להיות PNG. בהשאירך את שדה זה ריק הסמל לא ישתנה."
-
-msgid "Remove this logo"
-msgstr "הסר את סמל זה"
-
-msgid "View this logo"
-msgstr "הצג את סמל זה"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-"באפשרותך לתחום יותר מאשר מנהלן אחד עבור צומת Jappix זה. באפשרותך גם לשנות את "
-"הסיסמה בעזרת כלי זה."
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-"עדכון צומת Jappix בעזרת כלי זה, לחלופין ניתן לבדוק אם ממסר חדש זמין כעת. "
-"מידע אודות הגרסה האחרונה גם כן מוצג (באנגלית)."
-
-msgid "Access statistics"
-msgstr "סטטיסטיקות גישה"
-
-msgid "Share statistics"
-msgstr "סטטיסטיקות שיתוף"
-
-msgid "Other statistics"
-msgstr "סטטיסטיקות שונות"
-
-msgid "January"
-msgstr "ינואר"
-
-msgid "February"
-msgstr "פברואר"
-
-msgid "March"
-msgstr "מרץ"
-
-msgid "April"
-msgstr "אפריל"
-
-msgid "May"
-msgstr "מאי"
-
-msgid "June"
-msgstr "יוני"
-
-msgid "July"
-msgstr "יולי"
-
-msgid "August"
-msgstr "אוגוסט"
-
-msgid "September"
-msgstr "ספטמבר"
-
-msgid "October"
-msgstr "אוקטובר"
-
-msgid "November"
-msgstr "נובמבר"
-
-msgid "December"
-msgstr "דצמבר"
-
-msgid "Monday"
-msgstr "שני"
-
-msgid "Tuesday"
-msgstr "שלישי"
-
-msgid "Wednesday"
-msgstr "רביעי"
-
-msgid "Thursday"
-msgstr "חמישי"
-
-msgid "Friday"
-msgstr "שישי"
-
-msgid "Saturday"
-msgstr "שבת"
-
-msgid "Sunday"
-msgstr "ראשון"
-
-msgid "Total"
-msgstr "סך הכל"
-
-msgid "Archives"
-msgstr "ארכיונים"
-
-msgid "Music"
-msgstr "מוזיקה"
-
-msgid "Backgrounds"
-msgstr "רקעים"
-
-msgid "Share"
-msgstr "שיתוף"
-
-msgid "Background"
-msgstr "רקע"
-
-msgid "Notice"
-msgstr "התראה"
-
-msgid "Your design preferences have been saved!"
-msgstr "העדפות העיצוב שלך נשמרו!"
-
-msgid "Please check your inputs: something is missing!"
-msgstr "אנא בדוק את הקלט/ים שלך: משהו חסר!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-"שינוי רקע צומת Jappix בעזרת כלי זה. ניתן להגדיר צבע מותאם או להעלות תמונה. "
-"התירו ליצירתיות לזרום!"
-
-msgid "Use default background"
-msgstr "השתמש ברקע משתמט"
-
-msgid "Use your own image"
-msgstr "השתמש ברקע מותאם"
-
-msgid "Select a background to use and change the display options."
-msgstr "בחירת צבע רקע לשימוש ושינוי אפשרויות התצוגה."
-
-msgid "Use your own color"
-msgstr "השתמש בצבע מותאם"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr "הקלד ערך הצבע ההקסדצימלי שברצונך להשתמש בו בתור רקע."
-
-msgid "Manage backgrounds"
-msgstr "נהל רקעים"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr "ניתן להוסיף רקע אל הרשימה בעזרת כלי זה. אנא שלח תמונה תקפה."
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr "אם ברצונך להסיר רקעים, עליך להשתמש בדפדפן מטה."
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-"הגדר עמוד בית התראה עבור כל המשתמשים, כגון אזהרה, הודעה חשובה או מודעה בעזרת "
-"כלי זה."
-
-msgid "Simple notice"
-msgstr "התראה פשוטה"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr "התראה זו צריכה תמליל פשוט בלבד כדי להיות מוצגת, אולם קוד אינו מורשה!"
-
-msgid "Advanced notice"
-msgstr "התראה מתקדמת"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-"ניתן להתאים את ההתראה שלך בשילוב עם HTML, CSS וגם JavaScript, אך עליך לקודד "
-"את הסגנון."
-
-msgid "Available updates"
-msgstr "עדכונים זמינים"
-
-msgid "What's new?"
-msgstr "מה חדש?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr "תיקיות האחסון שלך אינן ברות כתיבה, אנא החל את ההרשאות הנאותות!"
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr "%1s עלול לגרום לבעיות לציר (Proxy), אנא הגבר את הערך %2s אל %3s!"
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-"הינך עושה שימוש בגרסת פיתוח של Jappix. ניתן לעדכנה דרך המאגר שלנו על ידי "
-"הרצת: %s."
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr "גרסה חדשה של Jappix זמינה! בדוק מה חדש והרץ את העדכון!"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr "גרסתך הינה מיושנת. ניתן לעדכנה אל %s בהקלקה כאן!"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"נראה שגרסתך מעודכנת, אולם ניתן לבדוק עבור עדכונים באופן ידנית בהקלקה כאן."
-
-msgid "Check for updates"
-msgstr "בדיקה עבור עדכונים"
-
-msgid "Update in progress"
-msgstr "העדכון מצוי בתהליך כעת"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr "Jappix עודכנה: הינך מריץ כעת את הגרסה האחרונה. בלה בנעימים!"
-
-msgid "The update has failed! Please try again later."
-msgstr "העדכון נכשל! אנא נסה שוב מאוחר יותר."
-
-msgid "Downloading package..."
-msgstr "מוריד כעת חבילה..."
-
-msgid "Removing current Jappix system files..."
-msgstr "מסיר כעת קבצי מערכת Jappix נוכחיים..."
-
-msgid "Extracting package..."
-msgstr "מחלץ כעת חבילה..."
-
-msgid "Regenerating storage folder tree..."
-msgstr "מחדש כעת עץ תיקיית אחסון..."
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix כעת מעודכנת!"
-
-msgid "Aborted: socket error!"
-msgstr "הופסק: שגיאת socket!"
-
-msgid "Aborted: buffer error!"
-msgstr "הופסק: שגיאת אגירה!"
-
-msgid "Aborted: everything is not writable!"
-msgstr "הופסק: הכל אינו בר כתיבה!"
-
-msgid "Aborted: could not extract the package!"
-msgstr "הופסק: לא היה ניתן לחלץ את החבילה!"
-
-msgid "Visits"
-msgstr "ביקורים"
-
-msgid "Daily"
-msgstr "יומית"
-
-msgid "Weekly"
-msgstr "שבועית"
-
-msgid "Monthly"
-msgstr "חודשית"
-
-msgid "Yearly"
-msgstr "שנתית"
-
-msgid "Size"
-msgstr "גודל"
-
-msgid "Clean everything"
-msgstr "טיהור מוחלט"
-
-msgid "Purge cache"
-msgstr "טיהור מטמון"
-
-msgid "Purge logs"
-msgstr "טיהור רשומות"
-
-msgid "Purge sent files"
-msgstr "טיהור קבצים שנשלחו"
-
-msgid "Purge updates"
-msgstr "טיהור עדכונים"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "תיקיית האחסון שרצית לטהר, הינה ריקה כעת!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr "שמור על צומת Jappix רענן ומהיר, על ידי טיהור תיקיות האחסון בקביעות!"
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-"העלאת מוזיקה (Ogg Vorbis, &#x200f;MP3 או WAV) כדי לפתוח בפניך את האפשרות "
-"להאזין לה בתוך Jappix!"
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr "על הקובץ שברצונך להעלות להיות קטן יותר מן %s."
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-"ניתן לבדוק מה משתמשים מאחסנים על שרתך ולהסיר תוכן שאיננו רצוי בעזרת כלי זה."
-
-msgid "Title"
-msgstr "כותרת"
-
-msgid "Artist"
-msgstr "אומן"
-
-msgid "Album"
-msgstr "אלבום"
-
-msgid "File"
-msgstr "קובץ"
-
-msgid "Upload"
-msgstr "העלאה"
-
-msgid "The folder is empty."
-msgstr "תיקייה זו ריקה"
-
-msgid "The music could not be received, please retry!"
-msgstr "הלחן לא יכול היה להתקבל, אנא נסה שוב!"
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-"זהו אינו קובץ מוזיקה תקף, אנא קודד אותו אל Ogg Vorbis, &#x200f;MP3 או WAV!"
-
-msgid "Your music has been added!"
-msgstr "הלחן שלך הוסף!"
-
-msgid "The selected elements have been removed."
-msgstr "הפרטים הנבחרים הוסרו."
-
-msgid "You must select elements to remove!"
-msgstr "עליך לבחור פרטים להסרה!"
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-"הוסף משתמש חדש בעזרת כלי זה, או שנה סיסמה (יש להקליד שם משתמש קיים). אנא הזן "
-"סיסמה חזקה וקשה לפיצוח!"
-
-msgid "Manage"
-msgstr "ניהול"
-
-msgid "List"
-msgstr "רשימה"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-"ניתן להסיר משתמשים בעזרת כלי זה. לתשומת לבך, אין באפשרותך להסיר משתמש במידה "
-"וזה היחיד אשר נותר."
-
-msgid "The user has been added!"
-msgstr "המשתמש הוסף!"
-
-msgid "The chosen users have been removed."
-msgstr "המשתמשים הנבחרים הוסרו."
-
-msgid "You must select one or more users to be removed!"
-msgstr "עליך לבחור משתמש אחד או יותר להסרה!"
-
-msgid "Yesterday"
-msgstr "אתמול"
-
-msgid "%s days ago"
-msgstr "לפני %s ימים"
-
-msgid "User currently active"
-msgstr "המשתמש פעיל כעת"
-
-msgid "Last seen: %s"
-msgstr "נראה לאחרונה: %s"
-
-msgid "Inactive since: %s"
-msgstr "בחוסר פעילות מאז: %s"
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr "נראה שחברך לא קיבל את הודעתך!"
-
-msgid "Static content server"
-msgstr "שרת תוכן נייח"
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr "זהו שרת התוכן הנייח עבור %1s, &#x200f;“%2s”."
-
-msgid "User uploads server"
-msgstr "שרת העלאות משתמשים"
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr "זהו שרת העלאות משתמשים עבור %1s, &#x200f;“%2s”."
-
-msgid "Suggested friends"
-msgstr "חברים מוצעים"
-
-msgid "Check all"
-msgstr "סמן הכל"
-
-msgid "Uncheck all"
-msgstr "בטל סמן הכל"
-
-msgid "Choose"
-msgstr "בחר"
-
-msgid "List name"
-msgstr "מנה שם"
-
-msgid "Allow"
-msgstr "התר"
-
-msgid "Deny"
-msgstr "אסור"
-
-msgid "Group"
-msgstr "קבוצה"
-
-msgid "Subscription"
-msgstr "הרשמה"
-
-msgid "Both"
-msgstr "הדדית"
-
-msgid "From"
-msgstr "מן"
-
-msgid "Everybody"
-msgstr "כולם"
-
-msgid "Send messages"
-msgstr "לשלוח הודעות"
-
-msgid "Send queries"
-msgstr "לשלוח שאילתות"
-
-msgid "See my status"
-msgstr "הצג את מצבי"
-
-msgid "Send his/her status"
-msgstr "שלח את מצבו/מצבה"
-
-msgid "Everything"
-msgstr "הכל"
-
-msgid "Item"
-msgstr "פריט"
-
-msgid "Order"
-msgstr "סדר"
-
-msgid "Active for this session"
-msgstr "פעיל לסשן זה"
-
-msgid "Always active"
-msgstr "פעיל תמיד"
-
-msgid "User directory"
-msgstr "מדור משתמש"
-
-msgid "Search a friend"
-msgstr "חיפוש חברים"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-"התכונה המבוקשת אינה מיושמת על ידי הקצה או השרת המקבל ולכן לא ניתן לעבד אותה."
-
-msgid "Send him/her a message"
-msgstr "שלח אליו/אליה הודעה"
-
-msgid "Start a chat with him/her"
-msgstr "התחל שיחה עמו/עמה"
-
-msgid "Available shortcuts:"
-msgstr "קיצורי דרך זמינים:"
-
-msgid "%s removes the chat logs"
-msgstr "%s מסירה רשומות שיחה"
-
-msgid "%s joins a groupchat"
-msgstr "%s מצטרפת אל שיחת קבוצה"
-
-msgid "%s closes the chat"
-msgstr "%s סוגרת את השיחה"
-
-msgid "%s shows the user profile"
-msgstr "%s מציגה את דיוקן המשתמש"
-
-msgid "%s sends a message to the room"
-msgstr "%s שולחת הודעה אל החדר"
-
-msgid "%s changes your nickname"
-msgstr "%s משנה את כינוייך"
-
-msgid "%s sends a message to someone in the room"
-msgstr "%s שולחת הודעה אל מישהו בחדר"
-
-msgid "%s changes the room topic"
-msgstr "%s משנה נושא החדר"
-
-msgid "%s kicks a user of the room"
-msgstr "%s בועטת משתמש בחדר זה"
-
-msgid "%s bans a user of the room"
-msgstr "%s חוסמת משתמש בחדר זה"
-
-msgid "%s invites someone to join the room"
-msgstr "%s מזמינה מישהו להצטרף אל חדר זה"
-
-msgid "Public profile"
-msgstr "דיוקן פומבי"
-
-msgid "Your profile anywhere on the Web."
-msgstr "הדיוקן שלך בכל מקום ברשת."
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-"%s הינו שירות Jappix.com שהופך דיוקן XMPP לפומבי. קל יותר לשתפו כך. לא נדרש "
-"חשבון XMPP כדי לצפות בערוץ החברתי שלך, במיקום הנוכחי שלך ובפרטי ההתקשרות שלך."
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-"מלבד זאת, כל תמונה שתודבק על ידך בערוץ החברתי שלך מוספת אל ציר זמן תמונה "
-"מרהיב. כעת ניתן לצפות בתמונות ששיתפת משנה לשנה."
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-"באפשרותך גם להשתמש באווטאר XMPP בתור אווטאר בודד עבור כל אתר רשת, בלוג "
-"ופורום אשר הינך עושה בו שימוש. כאשר יוחלט על ידך לשנותו בתוך XMPP, האווטאר "
-"החדש יופיע בכל מקום. איזו השבחה גאונית!"
-
-msgid "Yay, let's create your public profile!"
-msgstr "יאללה, בוא/י ניצור את הדיוקן הפומבי שלך!"
-
-msgid "Enable my public profile"
-msgstr "אפשר את הדיוקן הפומבי שלי"
-
-msgid "Jappix for your phone"
-msgstr "Jappix עבור הטלפון שלך"
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr "אפליקציית טלפון אחת עבור מסרים, ערוצים, דיוקנים ועוד הרבה יותר!"
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr "התראה זו הינה אינפורמטיבית בלבד, ייתכן שהמידע אליו היא מקשרת הוסר."
-
-msgid "You haven't provided any file to download"
-msgstr "לא סיפקת קובץ להורדה"
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr "לא תעמוד לרשותך האפשרות להוריד קובץ כל עוד לא יסופק מפתח על ידך"
-
-msgid "Woah this file isn't found, please double check"
-msgstr "קובץ זה לא נמצא, אנא בדוק את עצמך שוב"
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr "למפתח שסיפקת אין את ההרשאה להוריד קובץ זה"
-
-msgid "Statistics are currently disabled in the settings."
-msgstr "סטטיסטיקות מנוטרלות כעת בהגדרות."
-
-msgid "New event!"
-msgstr "אירוע חדש!"
-
-msgid "%s is typing..."
-msgstr "%s מקליד/ה כעת..."
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr "קוד האבטחה שהזנת אינו תקף. אנא נסה שוב עם אחד אחר."
-
-msgid "The username you picked is not available. Please try another one."
-msgstr "שם המשתמש שבחרת אינו זמין. אנא נסה אחד אחר."
-
-msgid "There was an error registering your account. Please retry."
-msgstr "אירעה שגיאה ברישום חשבונך. אנא נסה שוב."
-
-msgid "Username"
-msgstr "שם משתמש"
-
-msgid "Enter password"
-msgstr "הזן סיסמה"
-
-msgid "Once again..."
-msgstr "פעם נוספת..."
-
-msgid "Code"
-msgstr "קוד"
-
-msgid "Security code"
-msgstr "קוד אבטחה"
-
-msgid "Advertising space available!"
-msgstr "מקום פרסום זמין!"
-
-msgid "Advertise here"
-msgstr "פרסם כאן"
-
-msgid "Analytics (%s)"
-msgstr ""
-
-msgid "Track visits"
-msgstr "עקוב אחר ביקורים"
-
-msgid "Piwik URL"
-msgstr ""
-
-msgid "Piwik tracking ID"
-msgstr "מזהה מעקב Piwik"
-
-msgid "Advertising (%s)"
-msgstr "פרסום (%s)"
-
-msgid "Enable ads"
-msgstr "אפשר פרסומות"
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "Content ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr "מזהה לקוח AdSense"
-
-msgid "AdSense slot"
-msgstr "משבצת AdSense"
-
-msgid "Stop"
-msgstr "עצור"
-
-msgid "Leave"
-msgstr ""
-
-msgid "Mute"
-msgstr "השתק"
-
-msgid "Unmute"
-msgstr "בטל השתקה"
-
-msgid "Nobody there. Invite some people!"
-msgstr "אף אחד לא נמצא שם. הזמן כמה אנשים!"
-
-msgid "Invite people..."
-msgstr "הזמנת אנשים..."
-
-msgid "Enter people names..."
-msgstr "הזנת שמות אנשים..."
-
-msgid "Is calling you"
-msgstr "מחייג/ת אליך"
-
-msgid "Initiating call"
-msgstr "מתחיל כעת קריאה"
-
-msgid "Connecting to call..."
-msgstr "כעת מתחבר אל שיחה..."
-
-msgid "Waiting..."
-msgstr "כעת ממתין..."
-
-msgid "Ringing..."
-msgstr "כעת מצלצל..."
-
-msgid "Declined the call"
-msgstr "דחה את השיחה"
-
-msgid "Call error"
-msgstr "שגיאת חיוג"
-
-msgid "Ended the call"
-msgstr "סיים את השיחה"
-
-msgid "Call ended"
-msgstr "שיחה הסתיימה"
-
-msgid "Call canceled"
-msgstr "שיחה בוטלה"
-
-msgid "Canceled the call"
-msgstr "ביטל/ה את השיחה"
-
-msgid "Is already in a call"
-msgstr "כבר בעיצומה של שיחה"
-
-msgid "Ending call..."
-msgstr "כעת מסיים שיחה..."
-
-msgid "Incoming group call"
-msgstr "שיחת קבוצה נכנסת"
-
-msgid "Preparing group call..."
-msgstr "כעת מכין שיחת קבוצה..."
-
-msgid "Connecting to group call..."
-msgstr "כעת מתחבר אל שיחת קבוצה..."
-
-msgid "Group call error"
-msgstr "שגיאת שיחת קבוצה"
-
-msgid "Ending group call..."
-msgstr "כעת מסיים שיחת קבוצה..."
-
-msgid "Group call ended"
-msgstr "שיחת קבוצה הסתיימה"
-
-msgid "Accept"
-msgstr "קבל"
-
-msgid "Decline"
-msgstr "דחה"
-
-msgid "Okay"
-msgstr "אישור"
-
-msgid "Retry"
-msgstr "נסה שוב"
-
-msgid "Audio Call"
-msgstr "שיחה קולית"
-
-msgid "Video Call"
-msgstr "שיחה חזותית"
-
-msgid "%s participant"
-msgstr "משתתף %s"
-
-msgid "%s participants"
-msgstr "%s משתתפים"
-
-msgid "(full)"
-msgstr "(מלא)"
-
-msgid "%s is able to receive group calls."
-msgstr "%s מסוגל/ת לקבל שיחות קבוצתיות."
-
-msgid "%s may not support group calls."
-msgstr "%s עשוי שלא לתמוך בשיחות קבוצתיות."
-
-msgid "Send a message..."
-msgstr "שליחת הודעה..."
-
-msgid "Edited"
-msgstr ""
-
-msgid "Edited (%s)"
-msgstr ""
-
-msgid "Editing"
-msgstr ""
-
-msgid "Being edited"
-msgstr ""
-
-msgid "Delivered"
-msgstr ""
-
-msgid "Read"
-msgstr ""
-
-msgid "Sending..."
-msgstr "כעת שולח..."
-
-msgid "%s requested your attention to the conversation"
-msgstr "%s ביקש/ה את תשומת לבך אל הדיון"
-
-msgid "You requested %s's attention to the conversation"
-msgstr "ביקשת את הסבת צומת הלב של %s אל הדיון"
-
-msgid "Attention to conversation requested."
-msgstr "הסבת צומת לב אל הדיון התבקשה."
diff --git a/i18n/hu/LC_MESSAGES/main.mo b/i18n/hu/LC_MESSAGES/main.mo
deleted file mode 100644
index ea97bbdc..00000000
--- a/i18n/hu/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/hu/LC_MESSAGES/main.po b/i18n/hu/LC_MESSAGES/main.po
deleted file mode 100644
index eb853511..00000000
--- a/i18n/hu/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2382 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:21+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Hungarian (http://www.transifex.com/projects/p/jappix/"
-"language/hu/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: hu\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "default:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"A JavaScript hiányzik a böngésződből, anélkül nem tudod használni a "
-"Jappixot! Kérlek javítsd."
-
-msgid "Social channel, chat and more."
-msgstr ""
-
-msgid "Create your public profile."
-msgstr ""
-
-msgid "A mini-chat for your website."
-msgstr ""
-
-msgid "Get Jappix, get support."
-msgstr ""
-
-msgid "Statistics around Jappix."
-msgstr ""
-
-msgid "Legal disclaimer for Jappix."
-msgstr ""
-
-msgid "Download Jappix for free."
-msgstr ""
-
-msgid "Contribute to the Jappix code."
-msgstr ""
-
-msgid "Jappix for your company."
-msgstr ""
-
-msgid "Find a public Jappix node."
-msgstr ""
-
-msgid "Credits"
-msgstr ""
-
-msgid "Association"
-msgstr ""
-
-msgid "Web agency"
-msgstr ""
-
-msgid "Legal"
-msgstr ""
-
-msgid "Legal disclaimer"
-msgstr ""
-
-msgid "Terms of use and legal"
-msgstr ""
-
-msgid "Owner"
-msgstr ""
-
-msgid "Node owner"
-msgstr ""
-
-msgid "By using our service, you accept %s."
-msgstr ""
-
-msgid "our terms of use"
-msgstr ""
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"A Jappix hálózati probléma miatt megszakadt, hiba vagy rossz bejelentkezés "
-"(ellenőrízd helyesen töltötted-e ki az adatokat). Elnézést a "
-"kellemetlenségért!"
-
-msgid "The element list on this server could not be obtained!"
-msgstr "Az elemek listája ezen a szerveren nem elérhető!"
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"A jelszavad megváltozott. Mostmár be tudsz jelentkezni a fiókodba az új "
-"adatokkal."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "Az XMPP fiókod törölve, szia!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "Sikeresen kijelentkeztél az XMPP fiókodból, további kellemes napot!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr "A szoba ahova csatlakoztál még nem létezik. Előbb létre kell hoznod!"
-
-msgid "The groupchat has been removed."
-msgstr "A csoportos beszélgetést törölték, most valaki más létre tudja hozni."
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "A felhasználó akit keresel, nincs a szobában!"
-
-msgid "Please enter the group chat address to join."
-msgstr "Kérlek add meg a csoportos beszélgetés címét a csatlakozáshoz."
-
-msgid "Please enter your nickname to join %s."
-msgstr "Adj meg egy becenevet, hogy belépj a %s szobába."
-
-msgid "This room (%s) is protected with a password."
-msgstr "Ez a szoba (%s) jelszóval védett."
-
-msgid "Your browser is out of date!"
-msgstr "A böngésződ régi, elavult."
-
-msgid "Last %s version is better!"
-msgstr "Az utolsó %s verzió jobb!"
-
-msgid "Login"
-msgstr "Bejelentkezés"
-
-msgid "Register"
-msgstr "Regisztráció"
-
-msgid "Here we go!"
-msgstr "Indulhatunk is!"
-
-msgid "Server"
-msgstr "Szerver"
-
-msgid "Password"
-msgstr "Jelszó"
-
-msgid "Remember me"
-msgstr "Emlékezz rám"
-
-msgid "This tool has been disabled!"
-msgstr "Ez az eszköz le van tiltva, nem tudod használni!"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr "Hálózati hiba miatt a kapcsolat megszakadt. Most mit szeretnél tenni?"
-
-msgid "Reconnect"
-msgstr "Újrakapcsolódás"
-
-msgid "Messages"
-msgstr "Üzenetek"
-
-msgid "Profile"
-msgstr "Profil"
-
-msgid "Options"
-msgstr "Beállítások"
-
-msgid "Disconnect"
-msgstr "Kijelentkezés"
-
-msgid "Filter"
-msgstr "Szűrő"
-
-msgid "Add a friend"
-msgstr "Barát hozzáadása"
-
-msgid "Your groupchats"
-msgstr "Csoportos beszélgetéseid"
-
-msgid "Manage your favorite groupchats"
-msgstr "A kedvenc csoportos beszélgetéseid menedzselése"
-
-msgid "More stuff"
-msgstr "Több dolog"
-
-msgid "Show all friends"
-msgstr "Minden barát mutatása"
-
-msgid "Only show connected friends"
-msgstr "Csak a csatlakozott barátok mutatása"
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "Archivált üzenetek"
-
-msgid "Date"
-msgstr "Dátum"
-
-msgid "A short message?"
-msgstr "Egy rövid üzenet?"
-
-msgid "How are you?"
-msgstr "Hogy vagy?"
-
-msgid "What are you doing?"
-msgstr "Mit csinálsz?"
-
-msgid "Join a chat"
-msgstr "Csatlakozás egy beszélgetéshez"
-
-msgid "Status"
-msgstr "Státusz"
-
-msgid "Available"
-msgstr "Elérhető"
-
-msgid "Talkative"
-msgstr "Beszédes"
-
-msgid "Away"
-msgstr "Távol"
-
-msgid "Not available"
-msgstr "Nem elérhető"
-
-msgid "Busy"
-msgstr "Elfoglalt"
-
-msgid "Offline"
-msgstr ""
-
-msgid "Mood"
-msgstr "Hangulat"
-
-msgid "None"
-msgstr "Nincs"
-
-msgid "Crazy"
-msgstr "Bolond"
-
-msgid "Excited"
-msgstr "Izgatott"
-
-msgid "Playful"
-msgstr "Játékos"
-
-msgid "Happy"
-msgstr "Boldog"
-
-msgid "Shocked"
-msgstr "Döbbent"
-
-msgid "Hot"
-msgstr "Pimasz"
-
-msgid "Sad"
-msgstr "Szomorú"
-
-msgid "Amorous"
-msgstr "Szerelmes"
-
-msgid "Confident"
-msgstr "Magabiztos"
-
-msgid "Activity"
-msgstr "Tevékenység"
-
-msgid "Chores"
-msgstr "Házimunka"
-
-msgid "Drinking"
-msgstr "Iszik"
-
-msgid "Eating"
-msgstr "Eszik"
-
-msgid "Exercising"
-msgstr "Testedzés"
-
-msgid "Grooming"
-msgstr "Szépségápolás"
-
-msgid "Appointment"
-msgstr "Találkozó"
-
-msgid "Inactive"
-msgstr "Tétlen"
-
-msgid "Relaxing"
-msgstr "Pihen"
-
-msgid "Talking"
-msgstr "Beszélgetés"
-
-msgid "Traveling"
-msgstr "Utazás"
-
-msgid "Working"
-msgstr "Dolgozik"
-
-msgid "View profile"
-msgstr "Profil megtekintése"
-
-msgid "This is a repeat from %s"
-msgstr "Ez egy ismétlés %s -től"
-
-msgid "Repeat this notice"
-msgstr "Értesítés megismétlése"
-
-msgid "Remove this notice"
-msgstr "Értesítés eltávolítása"
-
-msgid "Your profile"
-msgstr "A te profilod"
-
-msgid "Identity"
-msgstr "Személyazonosság"
-
-msgid "Profile image"
-msgstr "Profilkép"
-
-msgid "Others"
-msgstr "Mások /Egyebek"
-
-msgid "Other"
-msgstr ""
-
-msgid "Personal"
-msgstr "Személyes"
-
-msgid "Complete name"
-msgstr "Teljes név"
-
-msgid "Nickname"
-msgstr "Felhasználónév"
-
-msgid "First name"
-msgstr "Keresztnév"
-
-msgid "Last name"
-msgstr "Vezetéknév"
-
-msgid "Date of birth"
-msgstr "Születési dátum"
-
-msgid "Contact"
-msgstr "Kapcsolat"
-
-msgid "E-mail"
-msgstr "E-mail"
-
-msgid "Phone"
-msgstr "Telefon"
-
-msgid "Website"
-msgstr "Honlap"
-
-msgid "Current"
-msgstr "Jelenlegi"
-
-msgid "Delete"
-msgstr "Töröl"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr "Milyen kár! Nincs profilkép társítva a személyi igazolványodhoz."
-
-msgid "Address"
-msgstr "Cím"
-
-msgid "Street"
-msgstr "Utca"
-
-msgid "City"
-msgstr "Város"
-
-msgid "Postal code"
-msgstr "Irányítószám"
-
-msgid "Country"
-msgstr "Ország"
-
-msgid "Biography"
-msgstr "Életrajz"
-
-msgid "Important notice"
-msgstr "Fontos értesítés"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr ""
-"Nem minden privát jellegű az XMPP-n, ez is egy ilyen dolog, a te publikus "
-"profilod (vCard)."
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"Erősen ajánlott, hogy feltölts egy profilképet (%s maximum), mondjuk egy "
-"képet rólad, mert így a barátaid könnyebben felismernek. "
-
-msgid "Save"
-msgstr "Mentés"
-
-msgid "Cancel"
-msgstr "Mégse"
-
-msgid "Edit options"
-msgstr "Opciók szerkeztése"
-
-msgid "Channel"
-msgstr "Csatorna"
-
-msgid "Commands"
-msgstr "Parancsok"
-
-msgid "Sounds"
-msgstr "Hangok"
-
-msgid "Privacy"
-msgstr "Adatvédelem"
-
-msgid "Message archiving"
-msgstr "Üzenet archiválása"
-
-msgid "Store an history of your chats"
-msgstr ""
-
-msgid "Geolocation"
-msgstr "Tartózkodási hely"
-
-msgid "Disabled"
-msgstr ""
-
-msgid "Store all chats"
-msgstr ""
-
-msgid "Store friend chats"
-msgstr ""
-
-msgid "Remove all archives"
-msgstr ""
-
-msgid "Empty"
-msgstr "Üres"
-
-msgid "Empty channel"
-msgstr "Üres csatorna"
-
-msgid "Persistent"
-msgstr "Tartós"
-
-msgid "Maximum notices"
-msgstr "Maximális értesítés"
-
-msgid "Account"
-msgstr "Fiók"
-
-msgid "Change password"
-msgstr "Jelszó módosítása"
-
-msgid "Delete account"
-msgstr "Fiók törlése"
-
-msgid "Old"
-msgstr "Régi"
-
-msgid "New (2 times)"
-msgstr "Új (2-szer)"
-
-msgid "Suggested chatrooms"
-msgstr ""
-
-msgid "Skip"
-msgstr ""
-
-msgid "Continue"
-msgstr "Folytatás"
-
-msgid "To"
-msgstr "Címzett"
-
-msgid "Close"
-msgstr "Bezárás"
-
-msgid "unknown"
-msgstr "nem ismert"
-
-msgid "Unavailable"
-msgstr "Nem elérhető"
-
-msgid "is now"
-msgstr "most"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Kérlek várj amíg az avatar képed feltöltődik... "
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "Kész is! Egy szép új profilkép!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "Nem támogatott képfájl vagy túl nagy."
-
-msgid "Reply"
-msgstr "Válaszolás"
-
-msgid "Error"
-msgstr "Hiba"
-
-msgid "Click here to solve the error"
-msgstr "Kattints ide a hiba megoldásához"
-
-msgid "You"
-msgstr "Te"
-
-msgid "Remove"
-msgstr "Eltávolítás"
-
-msgid "Rename"
-msgstr "Átnevezés"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Szia, %s vagyok, és szeretnélek hozzáadni a barátaimhoz."
-
-msgid "Smiley insertion"
-msgstr "Hangulatjel beszúrása"
-
-msgid "Change style"
-msgstr "Stílus megváltoztatása"
-
-msgid "Text in bold"
-msgstr "Félkövér "
-
-msgid "Text in italic"
-msgstr "Dőlt"
-
-msgid "Underlined text"
-msgstr "Aláhúzott"
-
-msgid "Send a file"
-msgstr "Fájl küldése"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr "Amint feltöltötted, a barátaid azonnal le fogják tudni tölteni."
-
-msgid "Save chat"
-msgstr "Beszélgetés mentése"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"Kattints a következő linkre, hogy megkapd a beszélgetési naplót, majd várj. "
-"Utána kattints újra a fájl mentéséhez."
-
-msgid "This chat is empty!"
-msgstr "Ez a beszélgetés üres!"
-
-msgid "Generate file!"
-msgstr "Fájl generálása!"
-
-msgid "Download file!"
-msgstr "Fájl letöltése!"
-
-msgid "Clean current chat"
-msgstr "Aktuális beszélgetés törlése"
-
-msgid "Show user profile"
-msgstr "Felhasználói profil megmutatása"
-
-msgid "Add this contact to your friends"
-msgstr "Ezen kapcsolat hozzáadása a barátokhoz"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Csoportos beszélgetés hozzáadása a kedvencekhez"
-
-msgid "All tabs"
-msgstr "Minden lap"
-
-msgid "Join groupchat"
-msgstr ""
-
-msgid "Close this tab"
-msgstr "Lap bezárása"
-
-msgid "no subject defined for this room."
-msgstr "nincs téma megadva ehhez a szobához."
-
-msgid "Administration panel for this room"
-msgstr "Adminisztrációs panel ehhez a szobához"
-
-msgid "Moderators"
-msgstr "Moderátorok"
-
-msgid "Participants"
-msgstr "Résztvevők"
-
-msgid "Visitors"
-msgstr "Látogatók"
-
-msgid "Manage favorite rooms"
-msgstr "Kedvenc szobák kezelése"
-
-msgid "Change favorites"
-msgstr "Kedvencek megváltoztatása"
-
-msgid "Search a room"
-msgstr "Szoba keresése"
-
-msgid "Select a favorite"
-msgstr "Kedvenc kiválasztása"
-
-msgid "Getting the name..."
-msgstr "Név megszerzése..."
-
-msgid "Gateway"
-msgstr "Átjáró"
-
-msgid "Name"
-msgstr "Név"
-
-msgid "Room"
-msgstr "Szoba"
-
-msgid "Add"
-msgstr "Hozzáad"
-
-msgid "Edit"
-msgstr "Szerkesztés"
-
-msgid "Search a room on"
-msgstr "Szoba keresése a"
-
-msgid "No room found on this server."
-msgstr "Ezen a szerveren nincs ilyen szoba"
-
-msgid "Service discovery"
-msgstr "Szolgáltatás megismerése"
-
-msgid "Server to query"
-msgstr "Szerver lekérdezése"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "Bocs, de lekérdezés nem hozott eredményt!"
-
-msgid "Accounts"
-msgstr "Fiókok"
-
-msgid "Authentications"
-msgstr "Hitelesítések"
-
-msgid "Automation"
-msgstr "Automatikusan"
-
-msgid "Clients"
-msgstr "Kliensek"
-
-msgid "Collaboration"
-msgstr "Együttműködés"
-
-msgid "Components"
-msgstr "Komponensek"
-
-msgid "Rooms"
-msgstr "Szobák"
-
-msgid "Directories"
-msgstr "Könyvtárak"
-
-msgid "Gateways"
-msgstr "Átjárók"
-
-msgid "News"
-msgstr "Hírek"
-
-msgid "Hierarchy"
-msgstr "Hierarchia"
-
-msgid "Proxies"
-msgstr "Proxik"
-
-msgid "Publication/Subscription"
-msgstr "Publikációk/Feliratkozások"
-
-msgid "Storage"
-msgstr "Tároló"
-
-msgid "Service offline or broken"
-msgstr "A szolgáltatás nem elérhető, vagy lezárt"
-
-msgid "Your inbox"
-msgstr "Postaládád"
-
-msgid "Available actions"
-msgstr "Elérhető műveletek"
-
-msgid "Clean"
-msgstr "Tisztít"
-
-msgid "New"
-msgstr "Új"
-
-msgid "Received"
-msgstr "Fogadott"
-
-msgid "Subject"
-msgstr "Tárgy"
-
-msgid "Content"
-msgstr "Tartalom"
-
-msgid "Send message"
-msgstr "Üzenet küldése"
-
-msgid "Your inbox is empty."
-msgstr "A bejövő fiókod üres"
-
-msgid "MUC administration"
-msgstr "MUC adminisztráció"
-
-msgid "You administrate this room"
-msgstr "Te adminisztrálod ezt a szobát"
-
-msgid "Enter new subject"
-msgstr "Írd be a témát"
-
-msgid "Configuration"
-msgstr "Testreszabás"
-
-msgid "Authorizations"
-msgstr "Engedélyek"
-
-msgid "Member list"
-msgstr "Tag lista"
-
-msgid "Owner list"
-msgstr "Tulajdonos lista"
-
-msgid "Administrator list"
-msgstr "Adminisztrátor lista"
-
-msgid "Outcast list"
-msgstr "Letiltottak listája"
-
-msgid "Add an input"
-msgstr "Bemenet hozzáadása"
-
-msgid "Destroy this MUC"
-msgstr "MUC elpusztítása"
-
-msgid "Yes, let's do it!"
-msgstr "Igen, csináljuk!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "A barátod figyelemmel kíséri a beszélgetést."
-
-msgid "Your friend is writing a message..."
-msgstr "A barátod épp ír neked…"
-
-msgid "Your friend stopped writing a message."
-msgstr "A barátod abbahagyta az üzenet írását."
-
-msgid "Your friend is doing something else."
-msgstr "A barátod valami mást csinál."
-
-msgid "Your friend closed the chat."
-msgstr "A barátod bezárta a beszélgetést."
-
-msgid "Requesting this service..."
-msgstr "Szolgáltatás kérése..."
-
-msgid "Loading"
-msgstr "Betöltés"
-
-msgid "changed his/her nickname to %s"
-msgstr "megváltoztatta a felhasználónevét %s -re"
-
-msgid "joined the chat room"
-msgstr "csatlakozás a szobához"
-
-msgid "left the chat room"
-msgstr "a szoba elhagyása"
-
-msgid "%s left"
-msgstr ""
-
-msgid "%s joined"
-msgstr ""
-
-msgid "no status"
-msgstr "nincs státusz"
-
-msgid "has been kicked"
-msgstr "kirúgva"
-
-msgid "has been banned"
-msgstr "kitiltva"
-
-msgid "no reason"
-msgstr "Nincs ok"
-
-msgid "Communicate with the entire world!"
-msgstr "Kommunikálj az egész világgal!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-"A Jappix egy nagyszerű közösségi felület, amit bárhonnan és bármikor "
-"elérhetsz, és bárkivel beszélhetsz."
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-"Segít, hogy kapcsolatban maradj emberek millióival akik az XMPP hálózatot "
-"használják, mint ahogy te is tudod a Jappix-el. Csatlakozz a közösséghez és "
-"maradj szabad!"
-
-msgid "Hi there!"
-msgstr "Szia!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr "Jelentkezz be az XMPP fiókodba, vagy csinálj egy újat ingyen!"
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-"Jelentkezz be az XMPP fiókodba. Használhatod a %s -t is, hogy csatlakozz egy "
-"csoportos beszélgetéshez."
-
-msgid "Previous"
-msgstr "Előző"
-
-msgid "General"
-msgstr "Általános"
-
-msgid "Advanced"
-msgstr "Haladó"
-
-msgid "Resource"
-msgstr "Forrás"
-
-msgid "Priority"
-msgstr "Prioritás"
-
-msgid "Low"
-msgstr "Alacsony"
-
-msgid "Medium"
-msgstr "Közepes"
-
-msgid "High"
-msgstr "Magas"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-"Add meg a csoportos beszélgetést amihez csatlakozni szeretnél és felhasználó "
-"nevet amit szeretnél. Vissza is tudsz menni a %s -hez."
-
-msgid "login page"
-msgstr "bejelentkezés oldal"
-
-msgid "Share this link with your friends:"
-msgstr "Link megosztása a barátaiddal"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-"Regisztrálj egy új XMPP fiókot, hogy csatlakozz a barátaidhoz a saját "
-"szociális felhődben. Ez egyszerű!"
-
-msgid "Required"
-msgstr "Szükséges"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "Sikeresen regisztráltál, ez az XMPP címed:"
-
-msgid "Manager"
-msgstr "Menedzser"
-
-msgid "Encrypted"
-msgstr "Titkosított"
-
-msgid "Unencrypted"
-msgstr "Titkosítatlan"
-
-msgid "Where are you?"
-msgstr "Hol vagy?"
-
-msgid "What's up with you?"
-msgstr "Mi a helyzet veled?"
-
-msgid "Type something you want to share with your friends..."
-msgstr "Írj valamit, amit megosztanál a barátaiddal..."
-
-msgid "Fetching the social channel..."
-msgstr "Szociális csatorna hozzáadása..."
-
-msgid "You are synchronized with your network."
-msgstr "Szinkronizálva vagy a hálózatoddal."
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "Nem lehet küldeni semmit: csak fogadni tudsz!"
-
-msgid "Media viewer"
-msgstr "Média néző"
-
-msgid "Browse"
-msgstr "Tallózás"
-
-msgid "Command"
-msgstr "Parancs"
-
-msgid "Subscribe"
-msgstr "Feliratkozás"
-
-msgid "Join"
-msgstr "Egyesít"
-
-msgid "Automatic"
-msgstr "Automatikus"
-
-msgid "Search"
-msgstr "Keresés"
-
-msgid "No result!"
-msgstr "Nincs találat!"
-
-msgid "No notifications."
-msgstr "Nincs értesítés."
-
-msgid "would like to add you as a friend."
-msgstr "hozzá szeretne téged adni barátként"
-
-msgid "would like you to join this chatroom:"
-msgstr "szeretné hogy csatlakozz ehhez a szobához:"
-
-msgid "Do you accept?"
-msgstr "Elfogadod?"
-
-msgid "Yes"
-msgstr "Igen"
-
-msgid "No"
-msgstr "Nem"
-
-msgid "would like to get authorization."
-msgstr "szeretne engedélyt szeretne kapni."
-
-msgid "would like to send you a file: “%s”."
-msgstr "szeretne neked küldeni egy fálj-t : “%s”"
-
-msgid "has received a file exchange request: “%s”."
-msgstr "kapott egy felkérést az alábbi fájl fogadására: “%s”"
-
-msgid "has accepted to receive your file: “%s”."
-msgstr "elfogadta, hogy küldj neki egy fálj-t : “%s”"
-
-msgid "has rejected to receive your file: “%s”."
-msgstr "elutasította a fájl-t: “%s”"
-
-msgid "could not receive your file: “%s”."
-msgstr "nem tudta fogadni a fájl-t: “%s”"
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr "Akarod-e látni azokat a barátokat, akiket %s ajáln?"
-
-msgid "commented an item you follow: “%s”."
-msgstr "Kommentálva egy elem amit követsz: “%s”."
-
-msgid "liked your post: “%s”."
-msgstr "kedveli a bejegyzésedet: “%s”"
-
-msgid "quoted you somewhere: “%s”."
-msgstr "szavaztak rád valahol: “%s”."
-
-msgid "published on your wall: “%s”."
-msgstr "írt a faladra: “%s”"
-
-msgid "tagged you in a photo (%s)."
-msgstr "megjelöltek egy képen (%s). "
-
-msgid "tagged you in a video (%s)."
-msgstr "megjelöltek egy videón (%s). "
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-
-msgid "Open"
-msgstr ""
-
-msgid "Show"
-msgstr "Mutat"
-
-msgid "Hide"
-msgstr "Elrejt"
-
-msgid "Submit"
-msgstr "Küldés"
-
-msgid "Client"
-msgstr "Kliens"
-
-msgid "System"
-msgstr "Rendszer"
-
-msgid "Local time"
-msgstr "Helyi idő"
-
-msgid "Comments"
-msgstr "Hozzászólások"
-
-msgid "User profile"
-msgstr "Felhasználói profil"
-
-msgid "See his/her position on the globe"
-msgstr "Megnézem a pozícióját a földgömbön."
-
-msgid "Confirm"
-msgstr "Megerősítés"
-
-msgid "anonymous mode"
-msgstr "Névtelen mód"
-
-msgid "Groups"
-msgstr "Csoportok"
-
-msgid "Unclassified"
-msgstr "Osztályozatlan"
-
-msgid "Authorize"
-msgstr "Engedélyez"
-
-msgid "Ask for authorization"
-msgstr "Kérés engedélyezésre"
-
-msgid "Unblock"
-msgstr "Felold"
-
-msgid "Prohibit"
-msgstr "Tiltás"
-
-msgid "Block"
-msgstr "Lezár"
-
-msgid "Chat"
-msgstr "Beszélgetés"
-
-msgid "Groupchat"
-msgstr "Csoportos beszélgetés"
-
-msgid "Jappix Mobile"
-msgstr "Jappix Mobil"
-
-msgid "Desktop"
-msgstr "Asztal"
-
-msgid "Mobile"
-msgstr "Mobil"
-
-msgid "Please wait..."
-msgstr "Kérlek várj..."
-
-msgid "Please enable JavaScript"
-msgstr "Kérlek engedélyezd a JavaScript-et"
-
-msgid "Show comments"
-msgstr "Mutasd a hozzászólásokat"
-
-msgid "Loading comments..."
-msgstr "Hozzászólások betöltése.."
-
-msgid "Could not get the comments!"
-msgstr "A kommentek nem tölthetők be"
-
-msgid "Comments locked!"
-msgstr "Hozzászólás lezárva!"
-
-msgid "Type your comment here..."
-msgstr "Hozzászólok..."
-
-msgid "Your channel"
-msgstr "A te csatornád"
-
-msgid "Channel of"
-msgstr "Csatornája "
-
-msgid "More notices..."
-msgstr "Mégtöbb értesítés... "
-
-msgid "Attach a file"
-msgstr "Fájl csatolása"
-
-msgid "Send"
-msgstr "Küldés"
-
-msgid "Unattach the file"
-msgstr "Fájlcsatolás törlése"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-"Hiba történt a fájl feltöltése közben: talán túl nagy (%s maximum) vagy le "
-"van tiltva."
-
-msgid "Authorization failed"
-msgstr "Engedélyezési hiba"
-
-msgid "Registration failed, please choose a different username"
-msgstr "A regisztráció nem sikerült, kérlek válassz másik felhasználónevet."
-
-msgid "Service unavailable"
-msgstr "A szolgáltatás nem elérhető"
-
-msgid "Internal server error, try later"
-msgstr "Belső szerver hiba, kérlek próbáld újra később"
-
-msgid "Your form has been sent."
-msgstr "Az űrlapod elküldve."
-
-msgid "Application"
-msgstr "Alkalmazás"
-
-msgid "Media integration"
-msgstr "Média integráció"
-
-msgid "Keep local chat archives"
-msgstr ""
-
-msgid "XMPP links"
-msgstr "XMPP linkek"
-
-msgid "Open XMPP links with Jappix"
-msgstr "XMPP linkek megnyitása Jappix-el"
-
-msgid "changed the subject to:"
-msgstr "tárgy megváltoztatása erre:"
-
-msgid "Welcome!"
-msgstr "Üdvözöljük!"
-
-msgid "Friends"
-msgstr "Barátok"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr ""
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-"Mielőtt elkezdenéd használni, meg kell változtatnod néhány beállítást, "
-"keresned kell barátokat és kitöltened a profilodat."
-
-msgid "Enable notification sounds"
-msgstr "Értesítési hangok engedélyezése."
-
-msgid "Share your position on the globe"
-msgstr "Pozícióm megosztása a földgömbön"
-
-msgid "Offline friends"
-msgstr "Kijelentkezett barátok"
-
-msgid "Don't hide offline friends"
-msgstr "Ne rejtse el a kijelentkezett barátokat"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-"Használd ezt az eszközt hogy megtaláld a barátaidat a szerveren amit most "
-"használsz, vagy add hozzá őket később."
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr "Nagyszerű! Most már meg tudod osztani a Jappix-et a barátaiddal!"
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-"Ha megnyomod a mentés gombot, meg fog nyílni a profil szerkesztő. Jó "
-"szocializálódást!"
-
-msgid "Share Jappix on %s"
-msgstr "A Jappix megosztása a %s -en."
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "Jappix-et, egy nyílt szociális platformot használok. %s vagyok!"
-
-msgid "Unknown name"
-msgstr "Ismeretlen név"
-
-msgid "Unknown country"
-msgstr "Ismeretlen ország"
-
-msgid "Click to enable"
-msgstr "Kattints az engedélyezéshez."
-
-msgid "Click to disable"
-msgstr "Kattints az elutasításhoz"
-
-msgid "Installation"
-msgstr "Telepítés"
-
-msgid "Jappix installation"
-msgstr "Jappix telepítése"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "Üdvözöljük a Jappix telepítésében!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-"Ez az eszköz segít gyorsan telepíteni a Jappix-et, az első teljes értékű "
-"XMPP alapú szociális platformot a szerveredre. Nincs szükséged semmilyen "
-"technikai tudásra."
-
-msgid "Installation Steps:"
-msgstr "Nézzük, mik a telepítés lépései:"
-
-msgid "Welcome"
-msgstr "Üdvözöljük"
-
-msgid "Storage configuration"
-msgstr "Tároló konfigurálása"
-
-msgid "Administrator account"
-msgstr "Adminisztrációs fiók"
-
-msgid "Main configuration"
-msgstr "Fő beállítások"
-
-msgid "Hosts configuration"
-msgstr "Kiszolgáló konfiguráció"
-
-msgid "Services installation"
-msgstr "Szolgáltatás telepítés"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-"Ha az aktuális nyelv nem egyezik a tiéddel (%1s), át tudod állítani a Jappix-"
-"et hogy %2s beszéljen."
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"Ha problémád van a Jappix telepítésével és konfigurálásával, megnézheted a "
-"dokumentációt ami elérhető itt:"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-"Itt az idő létrehozni a saját szociális felhődet, kezd az első lépéssel!"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr "A mappa írható, már folytathatod!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-"Jappix felajánlja a lehetőséget, hogy menedzseld a konfigurációd, telepíts "
-"új kiegészítőket, vagy keress frissítéseket. Ezért kell létrehoznod egy "
-"adminisztrátori fiókot, hogy hozzáférj ezekhez a beállításokhoz."
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-"Ha telepítetted a Jappix-et, csak kattints a menedzser linkre a főoldalon, "
-"hogy hozzáférj."
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr "Oppá, valamit elírtál, vagy a két jelszó nem egyezik!"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-"A Jappixnak szüksége van pár érték beállítására. Kérlek korrigáld az alábbi "
-"bemeneteket (vagy tartsd meg az alapértelmezetteket, amik a legtöbb ember "
-"számára ajánlottak)."
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-"Jegyezd meg, hogy ha nem adod meg a kötelező adatokat, akkor automatikusan "
-"ki lesznek töltve egy alapértelmezettel."
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-"Szükséged van segítségre? A legjobb, ha elolvasod a dokumentációnkat arról, "
-"hogyan töltsd ki az űrlapot!"
-
-msgid "User"
-msgstr "Felhasználó"
-
-msgid "Service"
-msgstr "Szolgáltatás"
-
-msgid "Service name"
-msgstr "Szolgáltatás neve"
-
-msgid "Service description"
-msgstr "Szolgáltatás leírása"
-
-msgid "Owner name"
-msgstr ""
-
-msgid "Owner website"
-msgstr ""
-
-msgid "Connection"
-msgstr "Kapcsolat"
-
-msgid "Lock the host"
-msgstr "Gazda lezárása"
-
-msgid "Anonymous mode"
-msgstr "Névtelen mód"
-
-msgid "HTTP authentication"
-msgstr ""
-
-msgid "Registration allowed"
-msgstr "Regisztráció engedélyezve"
-
-msgid "Use the built-in BOSH proxy"
-msgstr ""
-
-msgid "Manager link"
-msgstr "Menedzser link"
-
-msgid "Groupchats to join"
-msgstr "Csoportos beszélgetéshez csatlakozás"
-
-msgid "Suggest groupchats"
-msgstr ""
-
-msgid "Encryption"
-msgstr "Titkosítás"
-
-msgid "HTTPS storage"
-msgstr "HTTPS tároló"
-
-msgid "Force HTTPS"
-msgstr "HTTPS erőltetése"
-
-msgid "Compression"
-msgstr "Tömörítés"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"Ez az oldal segít beállítani, hogy melyik kiszolgálóhoz fog csatlakozni a "
-"Jappix. Így is hagyhatod a beállításokat ha a hivatalos kiszolgálót "
-"szeretnéd használni."
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"Nem tudod mi az a BOSH szerver? Ez egy továbbító a Jappix kliens és az XMPP "
-"szerver között, ami a technikai korlátok miatt szükséges."
-
-msgid "Main host"
-msgstr "Fő kiszolgáló"
-
-msgid "Groupchat host"
-msgstr "Csoportos beszélgetés kiszolgálója"
-
-msgid "Pubsub host"
-msgstr "Pubsub kiszolgáló"
-
-msgid "Anonymous host"
-msgstr "Névtelenségi kiszolgáló"
-
-msgid "Directory host"
-msgstr "Címtár kiszolgáló"
-
-msgid "BOSH host"
-msgstr "BOSH kiszolgáló"
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-"Telepíthetsz néhány extra szoftvert is a szerveredre, hogy kiterjeszd a "
-"felhasználói élményt. Néhányat esetleg módosíthatnak a biztonsági "
-"korlátozások miatt."
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-"Hogy végrehajtsd ezt hozzá kell férned a szerver héjához és root-ként kell "
-"bejelentkezned. Ne felejtsd hogy ez fakultatív, a Jappix működik ezek nélkül "
-"a modulok nélkül, de néhány eleme elérhetetlen lehet."
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-"Telepítés után a Jappix ideiglenes állományokat hoz létre. Ez eltarthat egy "
-"ideig, addig ne nyomj semmilyen gombra."
-
-msgid "Thanks for using Jappix!"
-msgstr "Köszönjük, hogy a Jappix-ot használtad!"
-
-msgid "Next"
-msgstr "Következő"
-
-msgid "Finish"
-msgstr "Vége"
-
-msgid "Check again"
-msgstr "Ellenőrzés újra"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr "A mappa nem írható, Állítsd be a jogosultságokat %s mappán."
-
-msgid "%s is installed on your system."
-msgstr "%s telepítve van a rendszereden."
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s nincs telepítve a rendszereden, telepítsd %2s-t."
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "PHP maximum feltöltési méret kielégítő (%s)."
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-"PHP maximum feltöltési méret nem kielégítő (%1s), definiáld %2s és %3s közé."
-
-msgid "Jappix manager"
-msgstr "Jappix menedzser"
-
-msgid "Manager access"
-msgstr "Menedzser hozzáférés"
-
-msgid "Statistics"
-msgstr "Statisztikák"
-
-msgid "Hosts"
-msgstr "Kiszolgálók"
-
-msgid "Design"
-msgstr "Formatervezés"
-
-msgid "Repeat"
-msgstr "Ismétlés"
-
-msgid "All"
-msgstr "Minden"
-
-msgid "Horizontal"
-msgstr "Vízszintes"
-
-msgid "Vertical"
-msgstr "Függőleges"
-
-msgid "Center"
-msgstr "Középre"
-
-msgid "Left"
-msgstr "Balra"
-
-msgid "Right"
-msgstr "Jobbra"
-
-msgid "Top"
-msgstr "Fent"
-
-msgid "Bottom"
-msgstr "Lent"
-
-msgid "Adapt"
-msgstr "Adaptálás"
-
-msgid "Color"
-msgstr "Szín"
-
-msgid "Users"
-msgstr "Felhasználók"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-"Ez egy korlátozott régió: csak a kijelölt felhasználók tudják menedzselni "
-"ezeket a Jappix opciókat."
-
-msgid "Please use the form below to login to the administration panel."
-msgstr ""
-"Kérlek használd az alábbi formát hogy bejelentkezz az adminisztrációs "
-"panelre."
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-"A biztonság érdekében a kapcsolat időben limitált, és ha bezárod a "
-"böngésződ, ki leszel jelentkeztetve. "
-
-msgid "Credentials"
-msgstr "Azonosítók"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "Sikeresen kijelentkeztél. Viszlát!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-"Oppá, nem ismertünk fel, mint érvényes adminisztrátort. Nézd meg az "
-"azonosítóid!"
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-"Jappix feldolgozza az alapvető statisztikákat néhány fontos dologról, "
-"lejjebb megtalálod őket."
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr "Változtasd meg a Jappix csomóponti konfigurációit ezzel az eszközzel."
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-"Az összes Jappix csomópont által tárolt fájl menedzselhető ezzel az "
-"eszközzel: kérlek válassz ki egy almappát és kezdheted szerkeszteni a "
-"tartalmát!"
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr ""
-"A Jappix teljesen testre szabható: itt meg tudod változtatni a kinézetét."
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr "Nem érvényes képformátum, kérlek használj PNG, GIF, vagy JPG képet!"
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr "Nem megfelelő képformátum, kérlek PNG-t használj!"
-
-msgid "The image could not be received, would you mind retry?"
-msgstr "A képet nem tudtuk fogadni, szeretnéd megpróbálni újra?"
-
-msgid "Your service logo has been successfully changed!"
-msgstr "A vízjeled sikeresen módosítva!"
-
-msgid "Your image was added to the list!"
-msgstr "A képed hozzá lett adva a listához!"
-
-msgid "Changes saved!"
-msgstr "Változtatások elmentve!"
-
-msgid "Logo"
-msgstr "Logo"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-"Be tudod állítani a saját vízjeled az alapértelmezett helyett. Légy óvatos a "
-"méretével és a színével kapcsolatban!"
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr "Minden logó föltöltése egy ajánlott maximum mérettel."
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-"A logo formátumodnak PNG-nek kell lennie. Hagyj egy mezőt üresen, és a logo "
-"nem lesz megváltoztatva."
-
-msgid "Remove this logo"
-msgstr "Logo eltávolítása"
-
-msgid "View this logo"
-msgstr "Logo megtekintése"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-"Ehhez a Jappix csomóponthoz több adminisztrátort is tudsz definiálni. Ezzel "
-"az eszközzel jelszót is tudsz változtatni."
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-"Frissítsd a Jappix csomópontod ezzel az eszközzel, vagy nézd meg hogy "
-"létezik-e egy újabb. Információk fognak megjelenni a legújabb verzióról "
-"(angolul)."
-
-msgid "Access statistics"
-msgstr "Elérési statisztikák"
-
-msgid "Share statistics"
-msgstr "Megosztási statisztikák"
-
-msgid "Other statistics"
-msgstr "Egyéb statisztikák"
-
-msgid "January"
-msgstr "Január"
-
-msgid "February"
-msgstr "Február"
-
-msgid "March"
-msgstr "Március"
-
-msgid "April"
-msgstr "Április"
-
-msgid "May"
-msgstr "Május"
-
-msgid "June"
-msgstr "Június"
-
-msgid "July"
-msgstr "Július"
-
-msgid "August"
-msgstr "Augusztus"
-
-msgid "September"
-msgstr "Szeptember"
-
-msgid "October"
-msgstr "Október"
-
-msgid "November"
-msgstr "November"
-
-msgid "December"
-msgstr "December"
-
-msgid "Monday"
-msgstr "Hétfő"
-
-msgid "Tuesday"
-msgstr "Kedd"
-
-msgid "Wednesday"
-msgstr "Szerda"
-
-msgid "Thursday"
-msgstr "Csütörtök"
-
-msgid "Friday"
-msgstr "Péntek"
-
-msgid "Saturday"
-msgstr "Szombat"
-
-msgid "Sunday"
-msgstr "Vasárnap"
-
-msgid "Total"
-msgstr "Összeg"
-
-msgid "Archives"
-msgstr ""
-
-msgid "Music"
-msgstr "Zene"
-
-msgid "Backgrounds"
-msgstr "Hátterek"
-
-msgid "Share"
-msgstr "Megosztás"
-
-msgid "Background"
-msgstr "Háttér"
-
-msgid "Notice"
-msgstr "Megjegyzés"
-
-msgid "Your design preferences have been saved!"
-msgstr "A kinézeti beállításaid elmentettük."
-
-msgid "Please check your inputs: something is missing!"
-msgstr "Kérlek ellenőrizd a bemeneteket: valami hiányzik!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-"Változtasd meg a Jappix háttered ezzel az eszközzel. Választhatsz ezen kívül "
-"egy egyedi színt, vagy feltölthetsz egy képet. Engedd szárnyalni a "
-"kreativitásod!"
-
-msgid "Use default background"
-msgstr "Alapértelmezett háttér használata"
-
-msgid "Use your own image"
-msgstr "Használd a saját képed"
-
-msgid "Select a background to use and change the display options."
-msgstr ""
-"Háttérkép választása, hogy használd és változtasd a kijelzési opciókat. "
-
-msgid "Use your own color"
-msgstr "Használd a saját színed"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr ""
-"Írd be a hexadecimális kódját annak a színnek, amit háttérként szeretnél "
-"használni."
-
-msgid "Manage backgrounds"
-msgstr "Háttérképek menedzselése"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-"Ezzel az eszközzel hozzá tudsz adni egy új háttérképet a listához. Kérlek "
-"küldj egy érvényes képet."
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr ""
-"Ha el szeretnél távolítani háttérképeket, használd az alábbi böngészőt."
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-"Definiálj az összes felhasználód számára egy kezdőoldal üzenet, mint a "
-"figyelmeztetés, fontos üzenet vagy hirdetés, ezzel az eszközzel. "
-
-msgid "Simple notice"
-msgstr "Egyszerű értesítés"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-"Ez az értesítés csak egyszerű szöveget tartalmazhat, tehát kódok nem "
-"elérhetőek!"
-
-msgid "Advanced notice"
-msgstr ""
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-"HTML, CSS és JavaScript segítségével személyreszabhatod értesítéseidet, de "
-"szükséges stíluskódok használata."
-
-msgid "Available updates"
-msgstr "Elérhető frissítések"
-
-msgid "What's new?"
-msgstr "Mi újság?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr "A tárolóid nem írhatóak, kérlek használj másikat!"
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-"%1s talán hibát okoz a proxy kapcsolatban, kérlek emeld meg %2s értékét %3s -"
-"re!"
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-"A Jappix egy fejlesztői kiadását használod. Frissítsd a tárolónkból ennek a "
-"végrehajtásával: %s."
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-"Új Jappix kiadás elérhető! Lesd meg az újdonságokat, és futtasd a frissitőt!"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr "A te Jappixod elavult. Kattints ide, és frissits a %s verzióra!"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"Úgy tűnik, hogy jelenlegi verzió a legfrissebb, de ellenőrizheted manuálisan "
-"is ide kattintva."
-
-msgid "Check for updates"
-msgstr "Frissítések keresése"
-
-msgid "Update in progress"
-msgstr "Frissítés folyamatban"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr "Jappix frissitve: nálad jeleneg az utolsó kiadás fut. "
-
-msgid "The update has failed! Please try again later."
-msgstr "Sikertelen frissítés! Próbáld meg később."
-
-msgid "Downloading package..."
-msgstr "Csomagok letöltése..."
-
-msgid "Removing current Jappix system files..."
-msgstr "Az aktuális Jappix rendszer fájlok törlése..."
-
-msgid "Extracting package..."
-msgstr "Csomagok kibontása..."
-
-msgid "Regenerating storage folder tree..."
-msgstr "Tároló mappák újra generálása..."
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix most naprakész!"
-
-msgid "Aborted: socket error!"
-msgstr "Megszakítva: foglaltsági hiba!"
-
-msgid "Aborted: buffer error!"
-msgstr "Megszakítva: puffer hiba!"
-
-msgid "Aborted: everything is not writable!"
-msgstr "Megszakítva: nem minden írható!"
-
-msgid "Aborted: could not extract the package!"
-msgstr "Megszakítva: nem lehet kicsomagolni a csomagot!"
-
-msgid "Visits"
-msgstr "Látogatottság"
-
-msgid "Daily"
-msgstr "Naponta"
-
-msgid "Weekly"
-msgstr "Hetente"
-
-msgid "Monthly"
-msgstr "Havonta"
-
-msgid "Yearly"
-msgstr "Évente"
-
-msgid "Size"
-msgstr "Méret"
-
-msgid "Clean everything"
-msgstr "Mindent töröl"
-
-msgid "Purge cache"
-msgstr "Cache tisztítása"
-
-msgid "Purge logs"
-msgstr "Logok tisztítása"
-
-msgid "Purge sent files"
-msgstr "Elküldött fájlok törlése"
-
-msgid "Purge updates"
-msgstr "Frissítések tisztítása"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "A tárolóhely, amit üríteni akarsz üres!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr "Tartsd frissen a Jappixodat, tisztítsd a tároló mappákat rendszeresen!"
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-"Töltsd fel a zenéid (Ogg Vorbis, MP3 vagy WAV formátumban), hogy tudd őket "
-"hallgatni a Jappix-ban is!"
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr "A fájl amit felszeretnél tölteni, kisebbnek kell lennie %s-nál/nél."
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-"Maradj összhangban azzal amit a felhasználóid tárolnak a szerveren, és "
-"töröld a nem kívánt tartalmakat ezzel az eszközzel."
-
-msgid "Title"
-msgstr "Cím"
-
-msgid "Artist"
-msgstr "Előadó"
-
-msgid "Album"
-msgstr "Album"
-
-msgid "File"
-msgstr "Fájl"
-
-msgid "Upload"
-msgstr "Feltöltés"
-
-msgid "The folder is empty."
-msgstr "A mappa üres."
-
-msgid "The music could not be received, please retry!"
-msgstr "A zenét nem tudtuk fogadni, kérlek próbáld újra!"
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-"Ez nem egy érvényes zenei fájl formátum, kérlek kódold át Ogg Vorbis, MP3 "
-"vagy WAV formátumba!"
-
-msgid "Your music has been added!"
-msgstr "Zene hozzáadva!"
-
-msgid "The selected elements have been removed."
-msgstr "A kiválasztott elemek törölve lettek."
-
-msgid "You must select elements to remove!"
-msgstr "Ahhoz, hogy törölni tudj, ki kell választanod egy elemet!"
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-"Adj meg új felhasználót, vagy változtasd meg a jelszót (ehhez adj meg egy "
-"létező felhasználó nevet) ezzel az eszközzel. Kérlek válassz egy erős "
-"jelszót!"
-
-msgid "Manage"
-msgstr "Intézés"
-
-msgid "List"
-msgstr "Lista"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-
-msgid "The user has been added!"
-msgstr "Felhasználó hozzáadva!"
-
-msgid "The chosen users have been removed."
-msgstr "A kiválaszott felhasználó eltávolítva."
-
-msgid "You must select one or more users to be removed!"
-msgstr ""
-"Legalább egy felhasználót ki kell választani ahhoz, hogy törölni lehessen!"
-
-msgid "Yesterday"
-msgstr "Tegnap"
-
-msgid "%s days ago"
-msgstr "%s nappal ezelőtt"
-
-msgid "User currently active"
-msgstr "A felhasználó jelenleg elérhető"
-
-msgid "Last seen: %s"
-msgstr "Utóljára láttad: %s"
-
-msgid "Inactive since: %s"
-msgstr "Inaktív ideje: %s "
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr "A barátod úgy tűnik nem kapta meg az üzenete(i)det!"
-
-msgid "Static content server"
-msgstr "Statikus tartalom szerver"
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr "Ez egy statikus tartalom szerver a következőknek: %1a, “%2s”."
-
-msgid "User uploads server"
-msgstr "Felhasználói feltöltések szervere"
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr "Ez a következők felhasználói feltöltések szervere: %1s, “%2s”."
-
-msgid "Suggested friends"
-msgstr "Javasolt barátok"
-
-msgid "Check all"
-msgstr "Összeset megjelöl"
-
-msgid "Uncheck all"
-msgstr "Megjelölések visszavonása"
-
-msgid "Choose"
-msgstr "Választás"
-
-msgid "List name"
-msgstr "Nevek listázása"
-
-msgid "Allow"
-msgstr "Elfogad"
-
-msgid "Deny"
-msgstr "Megtagad"
-
-msgid "Group"
-msgstr "Csoport"
-
-msgid "Subscription"
-msgstr "Feliratkozás"
-
-msgid "Both"
-msgstr "Mindkét"
-
-msgid "From"
-msgstr "Feladó"
-
-msgid "Everybody"
-msgstr "Mindenki"
-
-msgid "Send messages"
-msgstr "Üzenetküldés"
-
-msgid "Send queries"
-msgstr "Lekérdezések"
-
-msgid "See my status"
-msgstr "Állapotom"
-
-msgid "Send his/her status"
-msgstr "Az ő státuszának elküldése"
-
-msgid "Everything"
-msgstr "Minden"
-
-msgid "Item"
-msgstr "Elem"
-
-msgid "Order"
-msgstr "Rendez"
-
-msgid "Active for this session"
-msgstr "Aktív erre a szakaszra"
-
-msgid "Always active"
-msgstr "Mindig elérhető"
-
-msgid "User directory"
-msgstr "Felhasználói könyvtár"
-
-msgid "Search a friend"
-msgstr "Egy barát keresése"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-"A megkövetelt tulajdonságot a fogadó vagy a szerver nem tudja implementálni, "
-"ezért ezért művelet nem hajtható végre."
-
-msgid "Send him/her a message"
-msgstr "Küldj neki üzenetet"
-
-msgid "Start a chat with him/her"
-msgstr "Beszélj vele"
-
-msgid "Available shortcuts:"
-msgstr "Elérhető parancsikonok:"
-
-msgid "%s removes the chat logs"
-msgstr "%s eltávolította a beszélgetés előzményeit"
-
-msgid "%s joins a groupchat"
-msgstr "%s csatlakozott a csoportos beszélgetésbe"
-
-msgid "%s closes the chat"
-msgstr "%s bezárta a beszélgetést"
-
-msgid "%s shows the user profile"
-msgstr "%s megmutatta a felhasználói profilját"
-
-msgid "%s sends a message to the room"
-msgstr "%s üzenetet küldött a szobábs"
-
-msgid "%s changes your nickname"
-msgstr "%s megváltoztatta a felhasználói nevedet"
-
-msgid "%s sends a message to someone in the room"
-msgstr "%s üzenetet küldött valakinek a szobában"
-
-msgid "%s changes the room topic"
-msgstr "%s megváltoztatta a szoba témáját"
-
-msgid "%s kicks a user of the room"
-msgstr ""
-
-msgid "%s bans a user of the room"
-msgstr ""
-
-msgid "%s invites someone to join the room"
-msgstr "%s meghívott valakit a szobába"
-
-msgid "Public profile"
-msgstr ""
-
-msgid "Your profile anywhere on the Web."
-msgstr ""
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-
-msgid "Yay, let's create your public profile!"
-msgstr ""
-
-msgid "Enable my public profile"
-msgstr ""
-
-msgid "Jappix for your phone"
-msgstr ""
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr ""
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-
-msgid "You haven't provided any file to download"
-msgstr ""
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr ""
-
-msgid "Woah this file isn't found, please double check"
-msgstr ""
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr ""
-
-msgid "Statistics are currently disabled in the settings."
-msgstr ""
-
-msgid "New event!"
-msgstr ""
-
-msgid "%s is typing..."
-msgstr ""
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-
-msgid "Username"
-msgstr ""
-
-msgid "Enter password"
-msgstr ""
-
-msgid "Once again..."
-msgstr ""
-
-msgid "Code"
-msgstr ""
-
-msgid "Security code"
-msgstr ""
-
-msgid "Advertising space available!"
-msgstr ""
-
-msgid "Advertise here"
-msgstr ""
-
-msgid "Analytics (%s)"
-msgstr ""
-
-msgid "Track visits"
-msgstr ""
-
-msgid "Piwik URL"
-msgstr ""
-
-msgid "Piwik tracking ID"
-msgstr ""
-
-msgid "Advertising (%s)"
-msgstr ""
-
-msgid "Enable ads"
-msgstr ""
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "Content ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "Mute"
-msgstr ""
-
-msgid "Unmute"
-msgstr ""
-
-msgid "Is calling you"
-msgstr ""
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr ""
-
-msgid "Waiting..."
-msgstr ""
-
-msgid "Ringing..."
-msgstr ""
-
-msgid "Declined the call"
-msgstr ""
-
-msgid "Call error"
-msgstr ""
-
-msgid "Ended the call"
-msgstr ""
-
-msgid "Call ended"
-msgstr ""
-
-msgid "Call canceled"
-msgstr ""
-
-msgid "Canceled the call"
-msgstr ""
-
-msgid "Is already in a call"
-msgstr ""
-
-msgid "Ending call..."
-msgstr ""
-
-msgid "Accept"
-msgstr ""
-
-msgid "Decline"
-msgstr ""
-
-msgid "Okay"
-msgstr ""
-
-msgid "Retry"
-msgstr ""
-
-msgid "Audio Call"
-msgstr ""
-
-msgid "Video Call"
-msgstr ""
diff --git a/i18n/id/LC_MESSAGES/main.mo b/i18n/id/LC_MESSAGES/main.mo
deleted file mode 100644
index 2884f1c0..00000000
--- a/i18n/id/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/id/LC_MESSAGES/main.po b/i18n/id/LC_MESSAGES/main.po
deleted file mode 100644
index 1b76a623..00000000
--- a/i18n/id/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2402 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-# Muhammad Panji <sumodirjo@gmail.com>, 2012
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:21+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Indonesian (http://www.transifex.com/projects/p/jappix/"
-"language/id/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: id\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "default:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"JavaScript telah hilang di browser web anda, sehingga anda tidak akan dapat "
-"membuka Jappix! Harap perbaiki hal ini."
-
-msgid "Social channel, chat and more."
-msgstr "Kanal sosial, obrolan dan lain lain"
-
-msgid "Create your public profile."
-msgstr "Buat profil publik anda."
-
-msgid "A mini-chat for your website."
-msgstr "Sebuah obrolan mini untuk situs web anda"
-
-msgid "Get Jappix, get support."
-msgstr "Dapatkan Jappix, dapatkan dukungan."
-
-msgid "Statistics around Jappix."
-msgstr "Statistik seputar jappix."
-
-msgid "Legal disclaimer for Jappix."
-msgstr ""
-
-msgid "Download Jappix for free."
-msgstr "Unduh Jappix secara gratis."
-
-msgid "Contribute to the Jappix code."
-msgstr "Kontribusi ke kode Jappix."
-
-msgid "Jappix for your company."
-msgstr "Jappix untuk perusahaan anda."
-
-msgid "Find a public Jappix node."
-msgstr "Cari sebuah node Jappix publik"
-
-msgid "Credits"
-msgstr "Penghargaan"
-
-msgid "Association"
-msgstr "Asosiasi"
-
-msgid "Web agency"
-msgstr "Agensi web"
-
-msgid "Legal"
-msgstr ""
-
-msgid "Legal disclaimer"
-msgstr ""
-
-msgid "Terms of use and legal"
-msgstr ""
-
-msgid "Owner"
-msgstr "Pemilik"
-
-msgid "Node owner"
-msgstr "Pemilik node"
-
-msgid "By using our service, you accept %s."
-msgstr ""
-
-msgid "our terms of use"
-msgstr ""
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Saat ini Jappix sedang mengalami gangguan jaringan, bug atau login yang "
-"salah (periksa lagi data kredensial yang telah anda masukkan), maaf untuk "
-"ketidaknyamanan ini."
-
-msgid "The element list on this server could not be obtained!"
-msgstr "Daftar elemen pada server ini tidak dapat diperoleh!"
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"Kata sandi anda telah dirubah, sekarang anda dapat terhubung ke akun anda "
-"dengan data login yang baru."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "Akun XMPP anda telah dihapus, selamat tinggal!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "Anda telah keluar dari akun XMPP anda, semoga hari anda menyenangkan!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr "Room yang anda masuki tampaknya tidak tersedia, anda harus membuatnya!"
-
-msgid "The groupchat has been removed."
-msgstr ""
-"GroupChat telah dihapus, sekarang orang lain akan dapat membuatnya kembali."
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "Pengguna yang ingin anda hubungi sedang tidak hadir dalam room."
-
-msgid "Please enter the group chat address to join."
-msgstr "Silahkan masukkan alamat GroupChat untuk bergabung."
-
-msgid "Please enter your nickname to join %s."
-msgstr "Silakan masukkan nama panggilan anda untuk bergabung %s."
-
-msgid "This room (%s) is protected with a password."
-msgstr "Room ini (%s) dilindungi dengan sebuah kata sandi."
-
-msgid "Your browser is out of date!"
-msgstr "Browser anda telah ketinggalan jaman!"
-
-msgid "Last %s version is better!"
-msgstr "Versi %s terakhir lebih baik!"
-
-msgid "Login"
-msgstr "Masuk"
-
-msgid "Register"
-msgstr "Daftar"
-
-msgid "Here we go!"
-msgstr "Kita mulai!"
-
-msgid "Server"
-msgstr "Server"
-
-msgid "Password"
-msgstr "Kata Sandi"
-
-msgid "Remember me"
-msgstr "Ingat saya"
-
-msgid "This tool has been disabled!"
-msgstr "Alat ini telah dinonaktifkan, anda tidak dapat menggunakannya!"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr ""
-"Karena masalah jaringan, anda terputus. Apa yang anda ingin lakukan sekarang?"
-
-msgid "Reconnect"
-msgstr "Hubungkan kembali"
-
-msgid "Messages"
-msgstr "Pesan"
-
-msgid "Profile"
-msgstr "Profil"
-
-msgid "Options"
-msgstr "Pilihan"
-
-msgid "Disconnect"
-msgstr "Memutuskan"
-
-msgid "Filter"
-msgstr "Filter"
-
-msgid "Add a friend"
-msgstr "Tambahkan teman"
-
-msgid "Your groupchats"
-msgstr "Groupchats anda"
-
-msgid "Manage your favorite groupchats"
-msgstr "Kelola groupchats favorit anda"
-
-msgid "More stuff"
-msgstr "Kemampuan lain"
-
-msgid "Show all friends"
-msgstr "Tampilkan semua teman"
-
-msgid "Only show connected friends"
-msgstr "Hanya tampilkan teman-teman yang terhubung"
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "Arsip pesan"
-
-msgid "Date"
-msgstr "Tanggal"
-
-msgid "A short message?"
-msgstr "Sebuah pesan singkat?"
-
-msgid "How are you?"
-msgstr "Bagaimana kabar anda?"
-
-msgid "What are you doing?"
-msgstr "Apa yang anda lakukan?"
-
-msgid "Join a chat"
-msgstr "Ikut obrolan"
-
-msgid "Status"
-msgstr "Status"
-
-msgid "Available"
-msgstr "Tersedia"
-
-msgid "Talkative"
-msgstr "Latah"
-
-msgid "Away"
-msgstr "Pergi"
-
-msgid "Not available"
-msgstr "Tidak tersedia"
-
-msgid "Busy"
-msgstr "Sibuk"
-
-msgid "Offline"
-msgstr "luring"
-
-msgid "Mood"
-msgstr "Suasana hati"
-
-msgid "None"
-msgstr "Tidak ada"
-
-msgid "Crazy"
-msgstr "Gila"
-
-msgid "Excited"
-msgstr "Gembira"
-
-msgid "Playful"
-msgstr "Playful"
-
-msgid "Happy"
-msgstr "Senang"
-
-msgid "Shocked"
-msgstr "Kaget"
-
-msgid "Hot"
-msgstr "Panas"
-
-msgid "Sad"
-msgstr "Sedih"
-
-msgid "Amorous"
-msgstr "Tunjukkan Cinta Kasih"
-
-msgid "Confident"
-msgstr "Yakin"
-
-msgid "Activity"
-msgstr "Aktivitas"
-
-msgid "Chores"
-msgstr "Tugas"
-
-msgid "Drinking"
-msgstr "Minum"
-
-msgid "Eating"
-msgstr "Makan"
-
-msgid "Exercising"
-msgstr "Berolahraga"
-
-msgid "Grooming"
-msgstr "Dandan"
-
-msgid "Appointment"
-msgstr "Janji"
-
-msgid "Inactive"
-msgstr "Tidak aktif"
-
-msgid "Relaxing"
-msgstr "Bersantai"
-
-msgid "Talking"
-msgstr "Berbicara"
-
-msgid "Traveling"
-msgstr "Perjalanan"
-
-msgid "Working"
-msgstr "Bekerja"
-
-msgid "View profile"
-msgstr "Lihat profil"
-
-msgid "This is a repeat from %s"
-msgstr "Ini adalah pengulangan dari %s"
-
-msgid "Repeat this notice"
-msgstr "Ulangi pemberitahuan ini"
-
-msgid "Remove this notice"
-msgstr "Hapus pemberitahuan ini"
-
-msgid "Your profile"
-msgstr "Profil anda"
-
-msgid "Identity"
-msgstr "Identitas"
-
-msgid "Profile image"
-msgstr "Gambar profil"
-
-msgid "Others"
-msgstr "Lainnya"
-
-msgid "Other"
-msgstr ""
-
-msgid "Personal"
-msgstr "Pribadi"
-
-msgid "Complete name"
-msgstr "Nama lengkap"
-
-msgid "Nickname"
-msgstr "Julukan"
-
-msgid "First name"
-msgstr "Nama awalan"
-
-msgid "Last name"
-msgstr "Nama akhiran"
-
-msgid "Date of birth"
-msgstr "Tanggal lahir"
-
-msgid "Contact"
-msgstr "Kontak"
-
-msgid "E-mail"
-msgstr "E-mail"
-
-msgid "Phone"
-msgstr "Telepon"
-
-msgid "Website"
-msgstr "Situs"
-
-msgid "Current"
-msgstr "Saat ini"
-
-msgid "Delete"
-msgstr "Hapus"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr ""
-"Sayang sekali! anda tidak memiliki gambar profil untuk mendefinisikan anda "
-"di dalam kartu identitas!"
-
-msgid "Address"
-msgstr "Alamat"
-
-msgid "Street"
-msgstr "Jalan"
-
-msgid "City"
-msgstr "Kota"
-
-msgid "Postal code"
-msgstr "Kode pos"
-
-msgid "Country"
-msgstr "Negara"
-
-msgid "Biography"
-msgstr "Biografi"
-
-msgid "Important notice"
-msgstr "Pemberitahuan penting"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr ""
-"Tidak semuanya pribadi di XMPP; ini adalah salah satunya, profil publik anda "
-"(vCard)."
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"Sangat dianjurkan untuk meng-upload gambar profil (maksimum %s), seperti "
-"gambar diri, karena itu yang membuat anda mudah dikenali oleh teman-teman "
-"anda."
-
-msgid "Save"
-msgstr "Simpan"
-
-msgid "Cancel"
-msgstr "Batal"
-
-msgid "Edit options"
-msgstr "Edit pilihan"
-
-msgid "Channel"
-msgstr "Channel"
-
-msgid "Commands"
-msgstr "Perintah"
-
-msgid "Sounds"
-msgstr "Suara"
-
-msgid "Privacy"
-msgstr "Privasi"
-
-msgid "Message archiving"
-msgstr "Pengarsipan pesan"
-
-msgid "Store an history of your chats"
-msgstr ""
-
-msgid "Geolocation"
-msgstr "Geolokasi"
-
-msgid "Disabled"
-msgstr ""
-
-msgid "Store all chats"
-msgstr ""
-
-msgid "Store friend chats"
-msgstr ""
-
-msgid "Remove all archives"
-msgstr ""
-
-msgid "Empty"
-msgstr "Kosong"
-
-msgid "Empty channel"
-msgstr "Kosongkan channel"
-
-msgid "Persistent"
-msgstr "Gigih"
-
-msgid "Maximum notices"
-msgstr "Pemberitahuan maksimum"
-
-msgid "Account"
-msgstr "Akun"
-
-msgid "Change password"
-msgstr "Ubah password"
-
-msgid "Delete account"
-msgstr "Hapus akun"
-
-msgid "Old"
-msgstr "Tua"
-
-msgid "New (2 times)"
-msgstr "Baru (2 kali)"
-
-msgid "Suggested chatrooms"
-msgstr ""
-
-msgid "Skip"
-msgstr ""
-
-msgid "Continue"
-msgstr "Lanjutkan"
-
-msgid "To"
-msgstr "Ke"
-
-msgid "Close"
-msgstr "Tutup"
-
-msgid "unknown"
-msgstr "Tidak diketahui"
-
-msgid "Unavailable"
-msgstr "Tidak ditempat"
-
-msgid "is now"
-msgstr "sedang"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Harap tunggu sementara avatar anda sedang di proses ..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "Ini dia! Sebuah foto profil baru yang indah!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "File gambar tidak didukung atau memiliki ukuran yang buruk."
-
-msgid "Reply"
-msgstr "Balas"
-
-msgid "Error"
-msgstr "Kesalahan"
-
-msgid "Click here to solve the error"
-msgstr "Klik di sini untuk memperbaiki kesalahan"
-
-msgid "You"
-msgstr "Anda"
-
-msgid "Remove"
-msgstr "Hapus"
-
-msgid "Rename"
-msgstr "Ubah nama"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Hi, saya %s, saya ingin menambahkan anda sebagai teman saya."
-
-msgid "Smiley insertion"
-msgstr "Masukkan Smiley"
-
-msgid "Change style"
-msgstr "Mengubah gaya"
-
-msgid "Text in bold"
-msgstr "Teks dalam huruf tebal"
-
-msgid "Text in italic"
-msgstr "Teks dengan huruf miring"
-
-msgid "Underlined text"
-msgstr "Garisbawahi teks"
-
-msgid "Send a file"
-msgstr "Mengirim file"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr ""
-"Setelah upload, teman Anda akan diminta untuk men-download file yang Anda "
-"kirim."
-
-msgid "Save chat"
-msgstr "Simpan pembicaraan"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"Klik pada link berikut untuk mendapatkan log pembicaraan, tunggu. Lalu klik "
-"lagi untuk mendapatkan file."
-
-msgid "This chat is empty!"
-msgstr "Obrolan ini kosong!"
-
-msgid "Generate file!"
-msgstr "Menghasilkan file!"
-
-msgid "Download file!"
-msgstr "Download file!"
-
-msgid "Clean current chat"
-msgstr "Bersihkan obrolan saat ini"
-
-msgid "Show user profile"
-msgstr "Tampilkan profil pengguna"
-
-msgid "Add this contact to your friends"
-msgstr "Tambahkan kontak ini ke teman anda"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Tambahkan groupchat ini ke favorit anda"
-
-msgid "All tabs"
-msgstr "Semua tab"
-
-msgid "Join groupchat"
-msgstr ""
-
-msgid "Close this tab"
-msgstr "Tutup tab ini"
-
-msgid "no subject defined for this room."
-msgstr "tidak ada subjek yang ditetapkan untuk room ini."
-
-msgid "Administration panel for this room"
-msgstr "Administrasi panel untuk room ini"
-
-msgid "Moderators"
-msgstr "Moderator"
-
-msgid "Participants"
-msgstr "Peserta"
-
-msgid "Visitors"
-msgstr "Pengunjung"
-
-msgid "Manage favorite rooms"
-msgstr "Mengelola room favorit"
-
-msgid "Change favorites"
-msgstr "Ubah favorit"
-
-msgid "Search a room"
-msgstr "Mencari room chat"
-
-msgid "Select a favorite"
-msgstr "Pilih favorit"
-
-msgid "Getting the name..."
-msgstr "Mendapatkan nama..."
-
-msgid "Gateway"
-msgstr "Gateway"
-
-msgid "Name"
-msgstr "Nama"
-
-msgid "Room"
-msgstr "Room"
-
-msgid "Add"
-msgstr "Tambahkan"
-
-msgid "Edit"
-msgstr "Mengedit"
-
-msgid "Search a room on"
-msgstr "Cari kamar di"
-
-msgid "No room found on this server."
-msgstr "Tidak ditemukan room di server ini."
-
-msgid "Service discovery"
-msgstr "Penemuan layanan"
-
-msgid "Server to query"
-msgstr "Server untuk permintaan"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "Maaf, tapi entitas tidak mengembalikan hasil apapun!"
-
-msgid "Accounts"
-msgstr "Akun"
-
-msgid "Authentications"
-msgstr "Otentikasi"
-
-msgid "Automation"
-msgstr "Otomatisasi"
-
-msgid "Clients"
-msgstr "Klien"
-
-msgid "Collaboration"
-msgstr "Kolaborasi"
-
-msgid "Components"
-msgstr "Komponen"
-
-msgid "Rooms"
-msgstr "Kamar"
-
-msgid "Directories"
-msgstr "Direktori"
-
-msgid "Gateways"
-msgstr "Gateway"
-
-msgid "News"
-msgstr "Berita"
-
-msgid "Hierarchy"
-msgstr "Hirarki"
-
-msgid "Proxies"
-msgstr "Proxy"
-
-msgid "Publication/Subscription"
-msgstr "Publikasi / Berlangganan"
-
-msgid "Storage"
-msgstr "Penyimpanan"
-
-msgid "Service offline or broken"
-msgstr "Layanan sedang offline atau rusak"
-
-msgid "Your inbox"
-msgstr "Kotak masuk anda"
-
-msgid "Available actions"
-msgstr "Tersedia tindakan"
-
-msgid "Clean"
-msgstr "Bersih"
-
-msgid "New"
-msgstr "Baru"
-
-msgid "Received"
-msgstr "Diterima"
-
-msgid "Subject"
-msgstr "Subjek"
-
-msgid "Content"
-msgstr "Konten"
-
-msgid "Send message"
-msgstr "Kirim pesan"
-
-msgid "Your inbox is empty."
-msgstr "Kotak masuk kosong."
-
-msgid "MUC administration"
-msgstr "MUC administrasi"
-
-msgid "You administrate this room"
-msgstr "Anda administrate room ini"
-
-msgid "Enter new subject"
-msgstr "Masukkan subjek baru"
-
-msgid "Configuration"
-msgstr "Konfigurasi"
-
-msgid "Authorizations"
-msgstr "Otorisasi"
-
-msgid "Member list"
-msgstr "Daftar anggota"
-
-msgid "Owner list"
-msgstr "Daftar pemilik"
-
-msgid "Administrator list"
-msgstr "Daftar Administrator"
-
-msgid "Outcast list"
-msgstr "Daftar terbuang"
-
-msgid "Add an input"
-msgstr "Tambahkan masukan"
-
-msgid "Destroy this MUC"
-msgstr "Hancurkan MUC ini"
-
-msgid "Yes, let's do it!"
-msgstr "Ya, mari kita melakukannya!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "Teman anda sedang memperhatikan percakapan."
-
-msgid "Your friend is writing a message..."
-msgstr "Teman anda sedang menulis pesan ..."
-
-msgid "Your friend stopped writing a message."
-msgstr "Teman anda berhenti menulis pesan."
-
-msgid "Your friend is doing something else."
-msgstr "Teman anda sedang melakukan sesuatu yang lain."
-
-msgid "Your friend closed the chat."
-msgstr "Teman anda menutup obrolan."
-
-msgid "Requesting this service..."
-msgstr "Meminta layanan ini ..."
-
-msgid "Loading"
-msgstr "Pemuatan"
-
-msgid "changed his/her nickname to %s"
-msgstr "merubah nama panggilannya ke %s"
-
-msgid "joined the chat room"
-msgstr "bergabung dengan chat room"
-
-msgid "left the chat room"
-msgstr "meninggalkan chat room"
-
-msgid "%s left"
-msgstr ""
-
-msgid "%s joined"
-msgstr ""
-
-msgid "no status"
-msgstr "tidak ada status"
-
-msgid "has been kicked"
-msgstr "telah ditendang"
-
-msgid "has been banned"
-msgstr "telah dilarang"
-
-msgid "no reason"
-msgstr "tanpa alasan"
-
-msgid "Communicate with the entire world!"
-msgstr "Berkomunikasi dengan seluruh dunia!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-"Jappix adalah sebuah platform sosial yang hebat, yang dapat Anda akses di "
-"manapun Anda berada, kapan pun Anda inginkan dan berkomunikasi dengan "
-"siapapun yang Anda inginkan."
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-"Hal ini memungkinkan anda untuk berhubungan dengan jutaan pengguna yang saat "
-"ini menggunakan jaringan XMPP seperti yang anda lakukan dengan Jappix. "
-"Bergabung dengan komunitas dan tetap bebas!"
-
-msgid "Hi there!"
-msgstr "Halo semua!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr "Masuk ke akun XMPP anda atau buat yang baru dengan gratis!"
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-"Masuk ke akun XMPP anda. Anda juga dapat menggunakan %s untuk bergabung "
-"dengan suatu groupchat."
-
-msgid "Previous"
-msgstr "Sebelumnya"
-
-msgid "General"
-msgstr "Umum"
-
-msgid "Advanced"
-msgstr "Lebih lanjut"
-
-msgid "Resource"
-msgstr "Sumber daya"
-
-msgid "Priority"
-msgstr "Prioritas"
-
-msgid "Low"
-msgstr "Rendah"
-
-msgid "Medium"
-msgstr "Menengah"
-
-msgid "High"
-msgstr "Tinggi"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-"Masukkan groupchat yang anda ingin bergabung dan nick yang ingin anda "
-"miliki. Anda juga dapat kembali ke %s."
-
-msgid "login page"
-msgstr "halaman masuk"
-
-msgid "Share this link with your friends:"
-msgstr "Berbagi link ini dengan teman anda:"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-"Daftarkan akun XMPP baru untuk bergabung dengan teman-teman anda di atas "
-"awan sosial anda sendiri. Sederhana bukan!"
-
-msgid "Required"
-msgstr "Diperlukan"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "Anda telah terdaftar, alamat XMPP anda adalah:"
-
-msgid "Manager"
-msgstr "Manajer"
-
-msgid "Encrypted"
-msgstr "Terenkripsi"
-
-msgid "Unencrypted"
-msgstr "Tidak terenkripsi"
-
-msgid "Where are you?"
-msgstr "Di mana anda?"
-
-msgid "What's up with you?"
-msgstr "Ada apa dengan anda?"
-
-msgid "Type something you want to share with your friends..."
-msgstr "Ketik sesuatu untuk dibagikan ke teman..."
-
-msgid "Fetching the social channel..."
-msgstr "Mengambil saluran sosial ..."
-
-msgid "You are synchronized with your network."
-msgstr "Anda telah disinkronkan dengan jaringan anda."
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "Tidak dapat mengirim apapun: anda hanya dapat menerima pemberitahuan!"
-
-msgid "Media viewer"
-msgstr "Media penampil"
-
-msgid "Browse"
-msgstr "Daftar"
-
-msgid "Command"
-msgstr "Perintah"
-
-msgid "Subscribe"
-msgstr "Berlangganan"
-
-msgid "Join"
-msgstr "Bergabung"
-
-msgid "Automatic"
-msgstr "Otomatis"
-
-msgid "Search"
-msgstr "Pencarian"
-
-msgid "No result!"
-msgstr "Tidak ada hasil!"
-
-msgid "No notifications."
-msgstr "Tidak ada pemberitahuan."
-
-msgid "would like to add you as a friend."
-msgstr "ingin menambahkan anda sebagai teman."
-
-msgid "would like you to join this chatroom:"
-msgstr "ingin anda untuk bergabung dengan chatroom:"
-
-msgid "Do you accept?"
-msgstr "Apakah anda menerima?"
-
-msgid "Yes"
-msgstr "Ya"
-
-msgid "No"
-msgstr "Tidak"
-
-msgid "would like to get authorization."
-msgstr "ingin mendapatkan otorisasi."
-
-msgid "would like to send you a file: “%s”."
-msgstr "ingin mengirimkan file: “%s”."
-
-msgid "has received a file exchange request: “%s”."
-msgstr "telah menerima permintaan pertukaran file: “%s”."
-
-msgid "has accepted to receive your file: “%s”."
-msgstr "telah diterima untuk menerima file anda: “%s”."
-
-msgid "has rejected to receive your file: “%s”."
-msgstr "telah menolak untuk menerima file anda: “%s”."
-
-msgid "could not receive your file: “%s”."
-msgstr "tidak bisa menerima file anda: “%s”."
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr "Apakah anda ingin melihat teman-teman %s yang menyarankan anda?"
-
-msgid "commented an item you follow: “%s”."
-msgstr "mengkomentari item yang kamu ikuti: “%s”."
-
-msgid "liked your post: “%s”."
-msgstr "suka dengan isian anda: “%s”."
-
-msgid "quoted you somewhere: “%s”."
-msgstr "dikutip di suatu tempat: “%s”."
-
-msgid "published on your wall: “%s”."
-msgstr "diterbitkan di dinding: “%s”."
-
-msgid "tagged you in a photo (%s)."
-msgstr "tag anda di photo (%s)"
-
-msgid "tagged you in a video (%s)."
-msgstr "tag anda di video (%s)."
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-
-msgid "Open"
-msgstr ""
-
-msgid "Show"
-msgstr "Tampilkan"
-
-msgid "Hide"
-msgstr "Menyembunyikan"
-
-msgid "Submit"
-msgstr "Menyerahkan"
-
-msgid "Client"
-msgstr "Klien"
-
-msgid "System"
-msgstr "Sistem"
-
-msgid "Local time"
-msgstr "Waktu setempat"
-
-msgid "Comments"
-msgstr "Komentar"
-
-msgid "User profile"
-msgstr "Profil pengguna"
-
-msgid "See his/her position on the globe"
-msgstr "Lihat / nya posisinya di dunia"
-
-msgid "Confirm"
-msgstr "Menegaskan"
-
-msgid "anonymous mode"
-msgstr "modus anonim"
-
-msgid "Groups"
-msgstr "Grup"
-
-msgid "Unclassified"
-msgstr "Unclassified"
-
-msgid "Authorize"
-msgstr "Otorisasi"
-
-msgid "Ask for authorization"
-msgstr "Minta untuk otorisasi"
-
-msgid "Unblock"
-msgstr "Tidak dilarang"
-
-msgid "Prohibit"
-msgstr "Melarang"
-
-msgid "Block"
-msgstr "Dilarang"
-
-msgid "Chat"
-msgstr "Bicara"
-
-msgid "Groupchat"
-msgstr "Groupchat"
-
-msgid "Jappix Mobile"
-msgstr "Jappix Handphone"
-
-msgid "Desktop"
-msgstr "Desktop"
-
-msgid "Mobile"
-msgstr "Ponsel"
-
-msgid "Please wait..."
-msgstr "Silakan tunggu ..."
-
-msgid "Please enable JavaScript"
-msgstr "Silahkan mengaktifkan JavaScript"
-
-msgid "Show comments"
-msgstr "Tampilkan komentar"
-
-msgid "Loading comments..."
-msgstr "Memuat komentar..."
-
-msgid "Could not get the comments!"
-msgstr "Tidak dapat menampilkan komentar!"
-
-msgid "Comments locked!"
-msgstr "Komentar terkunci!"
-
-msgid "Type your comment here..."
-msgstr "Ketik komentar anda di sini..."
-
-msgid "Your channel"
-msgstr "Saluran anda"
-
-msgid "Channel of"
-msgstr "Saluran dari "
-
-msgid "More notices..."
-msgstr "Pemberitahuan yang lain..."
-
-msgid "Attach a file"
-msgstr "Lampirkan file"
-
-msgid "Send"
-msgstr "Kirim"
-
-msgid "Unattach the file"
-msgstr "Unattach file"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-"Sebuah kesalahan terjadi ketika mengupload file anda: mungkin itu terlalu "
-"besar (maksimum %s) atau dilarang!"
-
-msgid "Authorization failed"
-msgstr "Otorisasi gagal"
-
-msgid "Registration failed, please choose a different username"
-msgstr "Pendaftaran gagal, silakan pilih username yang berbeda"
-
-msgid "Service unavailable"
-msgstr "Layanan tidak tersedia"
-
-msgid "Internal server error, try later"
-msgstr "Server error, coba beberapa saat kemudian"
-
-msgid "Your form has been sent."
-msgstr "Formulir anda telah dikirim."
-
-msgid "Application"
-msgstr "Aplikasi"
-
-msgid "Media integration"
-msgstr "Integrasi Media"
-
-msgid "Keep local chat archives"
-msgstr ""
-
-msgid "XMPP links"
-msgstr "XMPP link"
-
-msgid "Open XMPP links with Jappix"
-msgstr "Buka XMPP link dengan Jappix"
-
-msgid "changed the subject to:"
-msgstr "mengubah topik menjadi:"
-
-msgid "Welcome!"
-msgstr "Selamat Datang!"
-
-msgid "Friends"
-msgstr "Teman"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr ""
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-"Sebelum anda mulai menggunakannya, anda harus mengubah beberapa pengaturan, "
-"mencari teman dan melengkapi profil anda."
-
-msgid "Enable notification sounds"
-msgstr "Aktifkan suara pemberitahuan"
-
-msgid "Share your position on the globe"
-msgstr "Berbagi posisi anda di dunia"
-
-msgid "Offline friends"
-msgstr "Teman offline"
-
-msgid "Don't hide offline friends"
-msgstr "Jangan sembunyikan teman offline"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-"Gunakan tool ini untuk menemukan teman-teman anda pada server yang anda "
-"gunakan sekarang, atau menambahkan mereka nanti."
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr ""
-"Usaha hebat! Sekarang, anda dapat memberitahukan Jappix ke teman-teman anda!"
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-"Ketika anda akan menekan tombol simpan, editor profil akan dibuka. Selamat "
-"bersosialisasi!"
-
-msgid "Share Jappix on %s"
-msgstr "Berbagi Jappix ke %s"
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "Menggunakan Jappix, sebuah platform sosial yang terbuka. Saya s!%"
-
-msgid "Unknown name"
-msgstr "Nama tidak diketahui"
-
-msgid "Unknown country"
-msgstr "Negara tidak diketahui"
-
-msgid "Click to enable"
-msgstr "Klik untuk mengaktifkan"
-
-msgid "Click to disable"
-msgstr "Klik untuk menonaktifkan"
-
-msgid "Installation"
-msgstr "Instalasi"
-
-msgid "Jappix installation"
-msgstr "Instalasi Jappix"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "Selamat datang di instalasi Jappix!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-"Alat ini akan membantu anda secara cepat menginstal Jappix, fitur berbasis "
-"XMPP penuh pertama untuk platform sosial, pada server anda. Anda bahkan "
-"tidak perlu pengetahuan teknis apapun."
-
-msgid "Installation Steps:"
-msgstr "Mari kita lihat langkah-langkah instalasi:"
-
-msgid "Welcome"
-msgstr "Selamat Datang di"
-
-msgid "Storage configuration"
-msgstr "Konfigurasi penyimpanan"
-
-msgid "Administrator account"
-msgstr "Akun administrator"
-
-msgid "Main configuration"
-msgstr "Konfigurasi utama"
-
-msgid "Hosts configuration"
-msgstr "Host konfigurasi"
-
-msgid "Services installation"
-msgstr "Instalasi layanan"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-"Jika bahasa saat ini tidak cocok dengan anda (%1s), anda dapat membuat "
-"Jappix berbicara %2s itu akan disimpan."
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"Jika anda ingin mendapatkan beberapa bantuan tentang instalasi dan "
-"konfigurasi Jappix, anda dapat menggunakan seluruh dokumentasi kami, "
-"tersedia di:"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-"Saatnya untuk membangun 'sosial cloud' anda sendiri: slahkan pergi ke "
-"langkah berikutnya!"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr "Folder dapat ditulis, anda dapat melanjutkan!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-"Jappix menawarkan kemungkinan untuk mengelola konfigurasi anda, menginstal "
-"plugin baru atau mencari update. Itulah mengapa anda harus membuat account "
-"administrator untuk mengakses manajer."
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-"Ketika Jappix akan diinstal, cukup klik pada link manajer di halaman rumah "
-"untuk mengaksesnya."
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr "Ups, anda melewatkan sesuatu atau dua kata sandi tidak cocok!"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-"Jappix membutuhkan beberapa nilai yang spesifik untuk bekerja. Harap "
-"perbaiki masukan sebagai berikut (atau menyimpan nilai-nilai default, yang "
-"cukup untuk kebanyakan orang)."
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-"Catatan, jika anda tidak menentukan nilai yang bersifat wajib, maka akan "
-"secara otomatis dilengkapi dengan default."
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-"Perlu bantuan? Anda sebaiknya membaca halaman dokumentasi kami tentang "
-"bagaimana mengisi formulir ini!"
-
-msgid "User"
-msgstr "Pengguna"
-
-msgid "Service"
-msgstr "Layanan"
-
-msgid "Service name"
-msgstr "Nama layanan"
-
-msgid "Service description"
-msgstr "Layanan deskripsi"
-
-msgid "Owner name"
-msgstr "Nama pemilik"
-
-msgid "Owner website"
-msgstr "Situs web pemilik"
-
-msgid "Connection"
-msgstr "Koneksi"
-
-msgid "Lock the host"
-msgstr "Kunci host"
-
-msgid "Anonymous mode"
-msgstr "Modus anonim"
-
-msgid "HTTP authentication"
-msgstr ""
-
-msgid "Registration allowed"
-msgstr "Pendaftaran diperbolehkan"
-
-msgid "Use the built-in BOSH proxy"
-msgstr ""
-
-msgid "Manager link"
-msgstr "Link manager"
-
-msgid "Groupchats to join"
-msgstr "Groupchats untuk bergabung"
-
-msgid "Suggest groupchats"
-msgstr ""
-
-msgid "Encryption"
-msgstr "Enkripsi"
-
-msgid "HTTPS storage"
-msgstr "Penyimpanan HTTPS"
-
-msgid "Force HTTPS"
-msgstr "memaksa HTTPS"
-
-msgid "Compression"
-msgstr "Kompresi"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"Halaman ini membantu anda menentukan default host Jappix yang akan "
-"terhubung. Anda dapat meninggalkan seperti yang sudah ada dan melanjutkan "
-"jika anda ingin menggunakan host layanan resmi."
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"Mungkin anda tidak tahu apa server Bosh adalah? Pada kenyataannya, ini "
-"adalah sebuah relay antara klien dan server Jappix XMPP, yang diperlukan "
-"karena keterbatasan teknis."
-
-msgid "Main host"
-msgstr "Host Utama"
-
-msgid "Groupchat host"
-msgstr "Host Groupchat"
-
-msgid "Pubsub host"
-msgstr "Host Pubsub"
-
-msgid "Anonymous host"
-msgstr "Host Anonim"
-
-msgid "Directory host"
-msgstr "Host Direktori"
-
-msgid "BOSH host"
-msgstr "Host Bosh"
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-"Anda dapat menginstal beberapa software tambahan pada server anda, untuk "
-"memperpanjang fitur Jappix anda. Beberapa yang lain mungkin diubah, karena "
-"pembatasan keamanan yang ditetapkan secara default."
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-"Untuk melakukan ini, anda harus dapat akses shell server anda dan login "
-"sebagai root. Ingat ini adalah fakultatif, Jappix akan bekerja tanpa modul "
-"ini, tetapi beberapa dari fitur-fiturnya akan tersedia."
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-"Setelah anda selesai setup, Jappix akan menghasilkan file cache. Mungkin "
-"lambat, hanya menunggu sampai aplikasi ditampilkan dan tidak menekan tombol "
-"apapun."
-
-msgid "Thanks for using Jappix!"
-msgstr "Terima kasih untuk menggunakan Jappix!"
-
-msgid "Next"
-msgstr "Berikutnya"
-
-msgid "Finish"
-msgstr "Selesai"
-
-msgid "Check again"
-msgstr "Periksa lagi"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-"Folder tidak dapat ditulis, mengatur hak akses yang benar ke direktori %s."
-
-msgid "%s is installed on your system."
-msgstr "%s diinstal pada sistem anda."
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s tidak diinstal pada sistem anda, anda harus menginstal %2s."
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "PHP ukuran maksimum upload cukup (%s)."
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-"PHP ukuran maksimum upload tidak cukup (%1s), anda harus mendefinisikan ke "
-"%2s di %3s."
-
-msgid "Jappix manager"
-msgstr "Jappix manajer"
-
-msgid "Manager access"
-msgstr "Manajer akses"
-
-msgid "Statistics"
-msgstr "Statistik"
-
-msgid "Hosts"
-msgstr "Host"
-
-msgid "Design"
-msgstr "Desain"
-
-msgid "Repeat"
-msgstr "Ulangi"
-
-msgid "All"
-msgstr "Semua"
-
-msgid "Horizontal"
-msgstr "Horisontal"
-
-msgid "Vertical"
-msgstr "Vertikal"
-
-msgid "Center"
-msgstr "Pusat"
-
-msgid "Left"
-msgstr "Kiri"
-
-msgid "Right"
-msgstr "Kanan"
-
-msgid "Top"
-msgstr "Atas"
-
-msgid "Bottom"
-msgstr "Bawah"
-
-msgid "Adapt"
-msgstr "Menyesuaikan"
-
-msgid "Color"
-msgstr "Warna"
-
-msgid "Users"
-msgstr "Pengguna"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-"Ini adalah area terbatas: hanya pengguna yang berwenang dapat mengatur node "
-"ini Jappix."
-
-msgid "Please use the form below to login to the administration panel."
-msgstr "Silakan gunakan formulir di bawah untuk login ke panel administrasi."
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-"Untuk meningkatkan keamanan, sesi yang terbatas dalam waktu dan saat browser "
-"anda akan ditutup, anda akan log out."
-
-msgid "Credentials"
-msgstr "Surat kepercayaan"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "Anda telah keluar. Selamat tinggal!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-"Ups, anda tidak dapat diakui sebagai administrator yang valid. Periksa "
-"kredensial anda!"
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-"Statistik dasar yang diproses oleh Jappix tentang beberapa hal penting, anda "
-"dapat menemukan mereka di bawah ini."
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr "Ubah Jappix konfigurasi node dengan alat ini."
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-"Semua file ini disimpan Jappix node dapat dikelola dengan alat ini: silahkan "
-"pilih sub-folder dan mulai mengedit isinya!"
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr ""
-"Jappix sepenuhnya dapat disesuaikan: anda bisa mengubah desain di sini."
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr "Ini bukan gambar yang sesuai, tolong gunakan PNG, GIF atau JPG!"
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr "Ini bukan gambar yang sesuai, tolong gunakan format PNG!"
-
-msgid "The image could not be received, would you mind retry?"
-msgstr "Gambar tidak dapat diterima, maukah kau coba lagi?"
-
-msgid "Your service logo has been successfully changed!"
-msgstr "Servis logo anda telah sukses diganti!"
-
-msgid "Your image was added to the list!"
-msgstr "Gambar anda telah ditambahkan ke dalam daftar!"
-
-msgid "Changes saved!"
-msgstr "Perubahan disimpan!"
-
-msgid "Logo"
-msgstr "Logo"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-"Anda dapat mengatur logo layanan Anda sendiri untuk menggantikan default. "
-"Jaga ukuran dan warna utama logo masing-masing!"
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr ""
-"Upload masing-masing logo dengan ukuran pixel maksimum yang disarankan."
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-"Format logo anda harus PNG. Tinggalkan field kosong dan Logo tidak akan "
-"terganti."
-
-msgid "Remove this logo"
-msgstr "Hapus logo ini"
-
-msgid "View this logo"
-msgstr "Lihat logo ini"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-"Anda dapat menentukan lebih dari satu administrator untuk node ini Jappix. "
-"Anda juga dapat mengubah password dengan alat ini."
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-"Perbarui simpul Jappix anda dengan alat ini, atau periksa jika yang baru "
-"tersedia. Informasi tentang versi terbaru juga ditampilkan (dalam bahasa "
-"Inggris)."
-
-msgid "Access statistics"
-msgstr "Akses statistik"
-
-msgid "Share statistics"
-msgstr "Berbagi statistik"
-
-msgid "Other statistics"
-msgstr "Lain statistik"
-
-msgid "January"
-msgstr "Januari"
-
-msgid "February"
-msgstr "Februari"
-
-msgid "March"
-msgstr "Maret"
-
-msgid "April"
-msgstr "April"
-
-msgid "May"
-msgstr "Mei"
-
-msgid "June"
-msgstr "Juni"
-
-msgid "July"
-msgstr "Juli"
-
-msgid "August"
-msgstr "Agustus"
-
-msgid "September"
-msgstr "September"
-
-msgid "October"
-msgstr "Oktober"
-
-msgid "November"
-msgstr "November"
-
-msgid "December"
-msgstr "Desember"
-
-msgid "Monday"
-msgstr "Senin"
-
-msgid "Tuesday"
-msgstr "Selasa"
-
-msgid "Wednesday"
-msgstr "Rabu"
-
-msgid "Thursday"
-msgstr "Kamis"
-
-msgid "Friday"
-msgstr "Jumat"
-
-msgid "Saturday"
-msgstr "Sabtu"
-
-msgid "Sunday"
-msgstr "Minggu"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Archives"
-msgstr ""
-
-msgid "Music"
-msgstr "Musik"
-
-msgid "Backgrounds"
-msgstr "Backgrounds"
-
-msgid "Share"
-msgstr "Berbagi"
-
-msgid "Background"
-msgstr "Latar belakang"
-
-msgid "Notice"
-msgstr "Pemberitahuan"
-
-msgid "Your design preferences have been saved!"
-msgstr "Setting gambar anda telah disimpan!"
-
-msgid "Please check your inputs: something is missing!"
-msgstr "Silakan periksa masukan anda: sesuatu yang hilang!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-"Ubah latar belakang simpul Jappix dengan alat ini. Anda juga dapat mengatur "
-"warna kustom atau foto yang diunggah. Biarkan kreativitas anda mengalir!"
-
-msgid "Use default background"
-msgstr "Gunakan latar belakang standar"
-
-msgid "Use your own image"
-msgstr "Gunakan gambar anda sendiri"
-
-msgid "Select a background to use and change the display options."
-msgstr "Pilih latar belakang untuk menggunakan dan mengubah pilihan tampilan."
-
-msgid "Use your own color"
-msgstr "Gunakan warna sendiri"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr ""
-"Ketik nilai warna heksadesimal yang ingin anda gunakan sebagai latar "
-"belakang."
-
-msgid "Manage backgrounds"
-msgstr "Mengelola latar belakang"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-"Anda dapat menambahkan latar belakang baru ke dalam daftar dengan alat ini. "
-"Silakan kirim gambar yang valid."
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr ""
-"Jika anda ingin menghapus beberapa latar belakang, gunakan browser di bawah "
-"ini."
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-"Tentukan pemberitahuan homepage untuk semua pengguna anda, seperti "
-"memperingatkan, pesan penting atau sebuah iklan dengan alat ini."
-
-msgid "Simple notice"
-msgstr "Pemberitahuan Sederhana"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-"Pemberitahuan ini hanya perlu teks sederhana yang akan ditampilkan, tetapi "
-"kode tidak diperbolehkan!"
-
-msgid "Advanced notice"
-msgstr "Pemberitahuan Lanjutan"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-"Anda dapat menyesuaikan pemberitahuan anda dengan embedded HTML, CSS dan "
-"JavaScript, tetapi anda perlu kode tampilannya."
-
-msgid "Available updates"
-msgstr "Update tersedia"
-
-msgid "What's new?"
-msgstr "Apa yang baru?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr ""
-"Folder penyimpanan anda tidak dapat ditulis, silahkan menerapkan hak-hak "
-"baik!"
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-"%1s dapat menyebabkan masalah ke proxy, silahkan peningkatan nilai %2s "
-"sampai dengan %3s!"
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-"Anda menggunakan versi pengembangan dari Jappix. Pembaruan melalui "
-"repositori kita dengan menjalankan: %s."
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-"Sebuah versi Jappix baru tersedia! Memeriksa apa yang baru dan peluncuran "
-"update!"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr ""
-"Versi anda keluar untuk tanggal. Update sekarang untuk %s dengan mengklik di "
-"sini!"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"Versi anda tampaknya up to date, tetapi anda dapat memeriksa update secara "
-"manual dengan mengklik di sini."
-
-msgid "Check for updates"
-msgstr "Periksa pembaruan"
-
-msgid "Update in progress"
-msgstr "Update sedang diproses"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr ""
-"Jappix telah diperbarui: anda sekarang menjalankan versi terbaru. Selamat "
-"Bersenang-senang!"
-
-msgid "The update has failed! Please try again later."
-msgstr "Update telah gagal! Silakan coba lagi nanti."
-
-msgid "Downloading package..."
-msgstr "Men-download paket ..."
-
-msgid "Removing current Jappix system files..."
-msgstr "Menghapus file saat ini Jappix sistem ..."
-
-msgid "Extracting package..."
-msgstr "Ekstrak paket ..."
-
-msgid "Regenerating storage folder tree..."
-msgstr "Regenerasi penyimpanan folder ..."
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix sekarang terbaru!"
-
-msgid "Aborted: socket error!"
-msgstr "Dibatalkan: kesalahan socket!"
-
-msgid "Aborted: buffer error!"
-msgstr "Dibatalkan: kesalahan penyangga!"
-
-msgid "Aborted: everything is not writable!"
-msgstr "Dibatalkan: semuanya tidak ditulis!"
-
-msgid "Aborted: could not extract the package!"
-msgstr "Dibatalkan: tidak bisa ekstrak paket itu!"
-
-msgid "Visits"
-msgstr "Kunjungan"
-
-msgid "Daily"
-msgstr "Harian"
-
-msgid "Weekly"
-msgstr "Mingguan"
-
-msgid "Monthly"
-msgstr "Bulanan"
-
-msgid "Yearly"
-msgstr "Tahunan"
-
-msgid "Size"
-msgstr "Ukuran"
-
-msgid "Clean everything"
-msgstr "Bersihkan semua"
-
-msgid "Purge cache"
-msgstr "Purge Cache"
-
-msgid "Purge logs"
-msgstr "Purge log"
-
-msgid "Purge sent files"
-msgstr "Purge file terkirim"
-
-msgid "Purge updates"
-msgstr "Purge update"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "Folder penyimpanan yang anda ingin bersihkan sekarang kosong!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-"Pertahankan Jappix anda agar selalu segar dan cepat, bersihkan folder "
-"penyimpanan secara teratur!"
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-"Upload musik anda (Ogg Vorbis, MP3 atau WAV) untuk dapat didengarkan di "
-"Jappix!"
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr "File yang ingin anda upload harus lebih kecil dari %s."
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-"Tetap setia dalam apa toko pengguna anda pada server anda dan menghapus "
-"konten yang tidak diinginkan dengan alat ini."
-
-msgid "Title"
-msgstr "Judul"
-
-msgid "Artist"
-msgstr "Artist"
-
-msgid "Album"
-msgstr "Album"
-
-msgid "File"
-msgstr "File yang"
-
-msgid "Upload"
-msgstr "Upload"
-
-msgid "The folder is empty."
-msgstr "Folder kosong."
-
-msgid "The music could not be received, please retry!"
-msgstr "Musik tidak dapat didengar, silahkan coba lagi"
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-"Ini bukan file musik yang valid, silakan mengkodekan dalam Ogg Vorbis, MP3 "
-"atau WAV!"
-
-msgid "Your music has been added!"
-msgstr "Lagu anda telah dimasukkan"
-
-msgid "The selected elements have been removed."
-msgstr "Unsur-unsur yang dipilih telah dihapus."
-
-msgid "You must select elements to remove!"
-msgstr "Anda harus memilih elemen untuk menghapus!"
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-"Menambahkan user baru dengan alat ini, atau mengubah password (ketikkan nama "
-"pengguna yang sudah ada). Harap kirimkan password yang kuat!"
-
-msgid "Manage"
-msgstr "Mengelola"
-
-msgid "List"
-msgstr "Daftar"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-
-msgid "The user has been added!"
-msgstr "Pengguna telah ditambahkan!"
-
-msgid "The chosen users have been removed."
-msgstr "Para pengguna yang dipilih telah dihapus."
-
-msgid "You must select one or more users to be removed!"
-msgstr "Anda harus memilih satu atau lebih pengguna untuk dihapus"
-
-msgid "Yesterday"
-msgstr "Kemarin"
-
-msgid "%s days ago"
-msgstr "%s hari yang lalu"
-
-msgid "User currently active"
-msgstr "Pengguna yang sedang aktif"
-
-msgid "Last seen: %s"
-msgstr "Terakhir dilihat: %s"
-
-msgid "Inactive since: %s"
-msgstr "Tidak aktif sejak: %s"
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr "Teman anda tampaknya tidak menerima pesan anda (s)!"
-
-msgid "Static content server"
-msgstr "Statis server isi"
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr "Ini adalah server konten statis untuk %1s, “%2s”."
-
-msgid "User uploads server"
-msgstr "Server upload pengguna"
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr "Ini server upload pengguna untuk %1s, “%2s”."
-
-msgid "Suggested friends"
-msgstr "Sarankan teman"
-
-msgid "Check all"
-msgstr "Periksa semua"
-
-msgid "Uncheck all"
-msgstr "Hapus centang semua"
-
-msgid "Choose"
-msgstr "Pilih"
-
-msgid "List name"
-msgstr "Daftar nama"
-
-msgid "Allow"
-msgstr "Perbolehkan"
-
-msgid "Deny"
-msgstr "Menolak"
-
-msgid "Group"
-msgstr "Kelompok"
-
-msgid "Subscription"
-msgstr "Berlangganan"
-
-msgid "Both"
-msgstr "Keduanya"
-
-msgid "From"
-msgstr "Dari"
-
-msgid "Everybody"
-msgstr "Semua orang"
-
-msgid "Send messages"
-msgstr "Kirim pesan"
-
-msgid "Send queries"
-msgstr "Kirim query"
-
-msgid "See my status"
-msgstr "Lihat status saya"
-
-msgid "Send his/her status"
-msgstr "Kirim statusnya"
-
-msgid "Everything"
-msgstr "Segalanya"
-
-msgid "Item"
-msgstr "Barang"
-
-msgid "Order"
-msgstr "Rangka"
-
-msgid "Active for this session"
-msgstr "Aktif untuk sesi ini"
-
-msgid "Always active"
-msgstr "Selalu aktif"
-
-msgid "User directory"
-msgstr "Direktori user"
-
-msgid "Search a friend"
-msgstr "Cari teman"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-"Fitur yang diminta tidak dilaksanakan oleh penerima atau server dan karena "
-"itu tidak dapat diproses."
-
-msgid "Send him/her a message"
-msgstr "Kirim kan dia pesan"
-
-msgid "Start a chat with him/her"
-msgstr "Mulai obrolan dengan dia"
-
-msgid "Available shortcuts:"
-msgstr "Tersedia jalan pintas:"
-
-msgid "%s removes the chat logs"
-msgstr "%s menghapus chat log"
-
-msgid "%s joins a groupchat"
-msgstr "%s bergabung groupchat"
-
-msgid "%s closes the chat"
-msgstr "%s menutup obrolan"
-
-msgid "%s shows the user profile"
-msgstr "%s menunjukkan profil pengguna"
-
-msgid "%s sends a message to the room"
-msgstr "%s mengirim pesan ke room"
-
-msgid "%s changes your nickname"
-msgstr "%s perubahan nama panggilan anda"
-
-msgid "%s sends a message to someone in the room"
-msgstr "%s mengirim pesan kepada seseorang di dalam room"
-
-msgid "%s changes the room topic"
-msgstr "%s merubah topik di room"
-
-msgid "%s kicks a user of the room"
-msgstr ""
-
-msgid "%s bans a user of the room"
-msgstr ""
-
-msgid "%s invites someone to join the room"
-msgstr "%s mengajak seseorang untuk bergabung dalam room"
-
-msgid "Public profile"
-msgstr "Profil publik"
-
-msgid "Your profile anywhere on the Web."
-msgstr "Profil anda dimanapun di web"
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-
-msgid "Yay, let's create your public profile!"
-msgstr ""
-
-msgid "Enable my public profile"
-msgstr "Aktifkan profil publik saya"
-
-msgid "Jappix for your phone"
-msgstr ""
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr ""
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-
-msgid "You haven't provided any file to download"
-msgstr ""
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr ""
-
-msgid "Woah this file isn't found, please double check"
-msgstr ""
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr ""
-
-msgid "Statistics are currently disabled in the settings."
-msgstr ""
-
-msgid "New event!"
-msgstr ""
-
-msgid "%s is typing..."
-msgstr ""
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-
-msgid "Username"
-msgstr ""
-
-msgid "Enter password"
-msgstr ""
-
-msgid "Once again..."
-msgstr ""
-
-msgid "Code"
-msgstr ""
-
-msgid "Security code"
-msgstr ""
-
-msgid "Advertising space available!"
-msgstr ""
-
-msgid "Advertise here"
-msgstr ""
-
-msgid "Analytics (%s)"
-msgstr ""
-
-msgid "Track visits"
-msgstr ""
-
-msgid "Piwik URL"
-msgstr ""
-
-msgid "Piwik tracking ID"
-msgstr ""
-
-msgid "Advertising (%s)"
-msgstr ""
-
-msgid "Enable ads"
-msgstr ""
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "Content ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "Mute"
-msgstr ""
-
-msgid "Unmute"
-msgstr ""
-
-msgid "Is calling you"
-msgstr ""
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr ""
-
-msgid "Waiting..."
-msgstr ""
-
-msgid "Ringing..."
-msgstr ""
-
-msgid "Declined the call"
-msgstr ""
-
-msgid "Call error"
-msgstr ""
-
-msgid "Ended the call"
-msgstr ""
-
-msgid "Call ended"
-msgstr ""
-
-msgid "Call canceled"
-msgstr ""
-
-msgid "Canceled the call"
-msgstr ""
-
-msgid "Is already in a call"
-msgstr ""
-
-msgid "Ending call..."
-msgstr ""
-
-msgid "Accept"
-msgstr ""
-
-msgid "Decline"
-msgstr ""
-
-msgid "Okay"
-msgstr ""
-
-msgid "Retry"
-msgstr ""
-
-msgid "Audio Call"
-msgstr ""
-
-msgid "Video Call"
-msgstr ""
diff --git a/i18n/it/LC_MESSAGES/main.mo b/i18n/it/LC_MESSAGES/main.mo
deleted file mode 100644
index 2ea99d33..00000000
--- a/i18n/it/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/it/LC_MESSAGES/main.po b/i18n/it/LC_MESSAGES/main.po
deleted file mode 100644
index 76ff1e2e..00000000
--- a/i18n/it/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2417 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-# camaran <camaran@gmail.com>, 2013
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:21+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Italian (http://www.transifex.com/projects/p/jappix/language/"
-"it/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: it\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "default:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"Javascript è disattivato nel tuo browser, ed è richiesto per lanciare Jappix "
-"correttamente!"
-
-msgid "Social channel, chat and more."
-msgstr "Il tuo canale sociale."
-
-msgid "Create your public profile."
-msgstr "Creati un profilo pubblico."
-
-msgid "A mini-chat for your website."
-msgstr "Una mini-chat per il tuo sito."
-
-msgid "Get Jappix, get support."
-msgstr "Scarica Jappix e ottieni supporto."
-
-msgid "Statistics around Jappix."
-msgstr "Le statistiche di Jappix."
-
-msgid "Legal disclaimer for Jappix."
-msgstr "Esclusione di responsabilità legali per Jappix."
-
-msgid "Download Jappix for free."
-msgstr "Scarica Jappix gratuitamente."
-
-msgid "Contribute to the Jappix code."
-msgstr "Contribuisci allo sviluppo di Jappix."
-
-msgid "Jappix for your company."
-msgstr "Jappix per la tua società."
-
-msgid "Find a public Jappix node."
-msgstr "Trova un nodo Jappix pubblico."
-
-msgid "Credits"
-msgstr "Credits"
-
-msgid "Association"
-msgstr "Associazione"
-
-msgid "Web agency"
-msgstr "Web agency"
-
-msgid "Legal"
-msgstr "Legale"
-
-msgid "Legal disclaimer"
-msgstr "Escusione di responsabilità legali"
-
-msgid "Terms of use and legal"
-msgstr "Termini di utilizzo"
-
-msgid "Owner"
-msgstr "Gestore"
-
-msgid "Node owner"
-msgstr "Proprietario del nodo"
-
-msgid "By using our service, you accept %s."
-msgstr "Iscrivendoti a questo servizio, accetti %s."
-
-msgid "our terms of use"
-msgstr "i nostri termini d'uso"
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Jappix è stato interrotto da un errore di rete, un bug o un login errato "
-"(controlla di aver inserito le credenziali corrette), ci spiace per il "
-"disagio."
-
-msgid "The element list on this server could not be obtained!"
-msgstr ""
-"Non sono stato in grado di ottenere la lista elementi di questo server!"
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"La tua password è stata cambiata, puoi accedere con i tuoi nuovi dati di "
-"accesso."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "Il tuo account XMPP è stato rimosso, arrivederci!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "Ti sei disconnesso dal tuo account XMPP, buona giornata!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr "La room a cui hai scelto di partecipare non esiste, dovresti crearla!"
-
-msgid "The groupchat has been removed."
-msgstr ""
-"La chat di gruppo è stata rimossa, qualcun altro sarà adesso in grado di "
-"ricrearla."
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "L'utente che vuoi raggiungere non è presente nella room."
-
-msgid "Please enter the group chat address to join."
-msgstr ""
-"Perpiacere inserisci l'indirizzo della chat di gruppo a cui vuoi partecipare."
-
-msgid "Please enter your nickname to join %s."
-msgstr "Perpiacere inserisci il tuo nickname per entrare in %s."
-
-msgid "This room (%s) is protected with a password."
-msgstr "Questa room (%s) è protetta da una password."
-
-msgid "Your browser is out of date!"
-msgstr "Il tuo browser è obsoleto!"
-
-msgid "Last %s version is better!"
-msgstr "L'ultima versione (%s) è stata migliorata!"
-
-msgid "Login"
-msgstr "Accedi"
-
-msgid "Register"
-msgstr "Registrati"
-
-msgid "Here we go!"
-msgstr "Ecco fatto!"
-
-msgid "Server"
-msgstr "Server"
-
-msgid "Password"
-msgstr "Password"
-
-msgid "Remember me"
-msgstr "Ricordami"
-
-msgid "This tool has been disabled!"
-msgstr "Questo strumento è stato disabilitato, non puoi utilizzarlo!"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr ""
-"Per via di un problema di rete, sei stato disconnesso. Cosa vuoi fare adesso?"
-
-msgid "Reconnect"
-msgstr "Riconnetti"
-
-msgid "Messages"
-msgstr "Messaggi"
-
-msgid "Profile"
-msgstr "Profilo"
-
-msgid "Options"
-msgstr "Preferenze"
-
-msgid "Disconnect"
-msgstr "Disconnettiti"
-
-msgid "Filter"
-msgstr "Filtro"
-
-msgid "Add a friend"
-msgstr "Aggiungi un amico o un'amica"
-
-msgid "Your groupchats"
-msgstr "Le tue chat di gruppo"
-
-msgid "Manage your favorite groupchats"
-msgstr "Amministra le tue chat di gruppo preferite"
-
-msgid "More stuff"
-msgstr "Altro"
-
-msgid "Show all friends"
-msgstr "Mostra tutti i tuoi amici"
-
-msgid "Only show connected friends"
-msgstr "Mostra solo gli amici connessi"
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "Archivii messaggi"
-
-msgid "Date"
-msgstr "Data"
-
-msgid "A short message?"
-msgstr "Un piccolo messaggio?"
-
-msgid "How are you?"
-msgstr "Come stai?"
-
-msgid "What are you doing?"
-msgstr "Cosa stai facendo?"
-
-msgid "Join a chat"
-msgstr "Unisciti a una chat"
-
-msgid "Status"
-msgstr "Stato"
-
-msgid "Available"
-msgstr "Disponibile"
-
-msgid "Talkative"
-msgstr "Vuole chiaccherare"
-
-msgid "Away"
-msgstr "Assente"
-
-msgid "Not available"
-msgstr "Indisponibile"
-
-msgid "Busy"
-msgstr "Occupato"
-
-msgid "Offline"
-msgstr "Offline"
-
-msgid "Mood"
-msgstr "Umore"
-
-msgid "None"
-msgstr "Nessuno"
-
-msgid "Crazy"
-msgstr "Svitato"
-
-msgid "Excited"
-msgstr "Eccitato"
-
-msgid "Playful"
-msgstr "Brioso"
-
-msgid "Happy"
-msgstr "Felice"
-
-msgid "Shocked"
-msgstr "Scioccato"
-
-msgid "Hot"
-msgstr "Ardente"
-
-msgid "Sad"
-msgstr "Triste"
-
-msgid "Amorous"
-msgstr "Amoroso"
-
-msgid "Confident"
-msgstr "Fiducioso"
-
-msgid "Activity"
-msgstr "Attività"
-
-msgid "Chores"
-msgstr "Sta facendo i mestieri..."
-
-msgid "Drinking"
-msgstr "Sta bevendo..."
-
-msgid "Eating"
-msgstr "Sta mangiando..."
-
-msgid "Exercising"
-msgstr "Esercizio"
-
-msgid "Grooming"
-msgstr "Si sta 'spulciando'..."
-
-msgid "Appointment"
-msgstr "Appuntamento"
-
-msgid "Inactive"
-msgstr "Inattivo"
-
-msgid "Relaxing"
-msgstr "Si rilassa"
-
-msgid "Talking"
-msgstr "Discute"
-
-msgid "Traveling"
-msgstr "In viaggio"
-
-msgid "Working"
-msgstr "Lavoro"
-
-msgid "View profile"
-msgstr "Guarda profilo"
-
-msgid "This is a repeat from %s"
-msgstr "Questa è una ripetizione da %s"
-
-msgid "Repeat this notice"
-msgstr "Ripeti questo avviso"
-
-msgid "Remove this notice"
-msgstr "Rimuovi questa nota"
-
-msgid "Your profile"
-msgstr "Il tuo profilo"
-
-msgid "Identity"
-msgstr "Identità"
-
-msgid "Profile image"
-msgstr "Immagine del profilo"
-
-msgid "Others"
-msgstr "Altri"
-
-msgid "Other"
-msgstr "Altro"
-
-msgid "Personal"
-msgstr "Personale"
-
-msgid "Complete name"
-msgstr "Nome completo"
-
-msgid "Nickname"
-msgstr "Soprannome"
-
-msgid "First name"
-msgstr "Nome"
-
-msgid "Last name"
-msgstr "Cognome"
-
-msgid "Date of birth"
-msgstr "Data di nascita"
-
-msgid "Contact"
-msgstr "Contattaci"
-
-msgid "E-mail"
-msgstr "E-mail"
-
-msgid "Phone"
-msgstr "Telefono"
-
-msgid "Website"
-msgstr "Sito web"
-
-msgid "Current"
-msgstr "Corrente"
-
-msgid "Delete"
-msgstr "Cancella"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr ""
-"Che peccato, non hai una immagine definita nel profilo della tua vCard!"
-
-msgid "Address"
-msgstr "Indirizzo"
-
-msgid "Street"
-msgstr "Via"
-
-msgid "City"
-msgstr "Città"
-
-msgid "Postal code"
-msgstr "Numero postale"
-
-msgid "Country"
-msgstr "Nazione"
-
-msgid "Biography"
-msgstr "Biografia"
-
-msgid "Important notice"
-msgstr "Avviso importante"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-"Fai attenzione alle informazione che inserisci nel tuo profilo, perchè "
-"potrebbero essere viste da chiunque (anche chi non vuoi)."
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr "Non tutto è riservato su XMPP; come il tuo profilo pubblico (vCard)."
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"Ti incoraggiamo a caricare un'immagine per il tuo profile (%s massimo), come "
-"un'immagine di te stesso/a, ti renderà più facilmente riconoscibile dai tuoi "
-"amici."
-
-msgid "Save"
-msgstr "Salva"
-
-msgid "Cancel"
-msgstr "Annullare"
-
-msgid "Edit options"
-msgstr "Modifica opzioni"
-
-msgid "Channel"
-msgstr "Canale"
-
-msgid "Commands"
-msgstr "Comandi"
-
-msgid "Sounds"
-msgstr "Suoni"
-
-msgid "Privacy"
-msgstr "Privacy"
-
-msgid "Message archiving"
-msgstr "Archiviazione messaggi"
-
-msgid "Store an history of your chats"
-msgstr ""
-
-msgid "Geolocation"
-msgstr "Geolocazione"
-
-msgid "Disabled"
-msgstr ""
-
-msgid "Store all chats"
-msgstr ""
-
-msgid "Store friend chats"
-msgstr ""
-
-msgid "Remove all archives"
-msgstr ""
-
-msgid "Empty"
-msgstr "Svuota"
-
-msgid "Empty channel"
-msgstr "Svuota canale"
-
-msgid "Persistent"
-msgstr "Persistente"
-
-msgid "Maximum notices"
-msgstr "Notifica di massimo"
-
-msgid "Account"
-msgstr "Account"
-
-msgid "Change password"
-msgstr "Cambia password"
-
-msgid "Delete account"
-msgstr "Cancella account"
-
-msgid "Old"
-msgstr "Vecchio"
-
-msgid "New (2 times)"
-msgstr "Nuovo (2 volte)"
-
-msgid "Suggested chatrooms"
-msgstr "Chatroom Suggerite"
-
-msgid "Skip"
-msgstr ""
-
-msgid "Continue"
-msgstr "Continua"
-
-msgid "To"
-msgstr "A"
-
-msgid "Close"
-msgstr "Chiuso"
-
-msgid "unknown"
-msgstr "sconosciuto"
-
-msgid "Unavailable"
-msgstr "Non disponibile"
-
-msgid "is now"
-msgstr "è adesso"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Perpiacere attendi mentre carico il tuo avatar..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "Ecco qui, la nuova immagine per il tuo profilo!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr ""
-"Questo file immagine è in un formato non supportato o eccede la dimensione "
-"massima."
-
-msgid "Reply"
-msgstr "Rispondere"
-
-msgid "Error"
-msgstr "Errore"
-
-msgid "Click here to solve the error"
-msgstr "Clicca qui per risolvere l'errore"
-
-msgid "You"
-msgstr "Tu"
-
-msgid "Remove"
-msgstr "Rimuovi"
-
-msgid "Rename"
-msgstr "Rinomina"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Ciao, sono %s, vorrei aggiungerti come amico."
-
-msgid "Smiley insertion"
-msgstr "Inserisci un emote"
-
-msgid "Change style"
-msgstr "Cambia stile"
-
-msgid "Text in bold"
-msgstr "Testo in grassetto"
-
-msgid "Text in italic"
-msgstr "Testo in corsivo"
-
-msgid "Underlined text"
-msgstr "Testo sottolineato"
-
-msgid "Send a file"
-msgstr "Invia un file"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr ""
-"Una volta caricato, al tuo amico sarà richiesto di scaricare il file da te "
-"inviato."
-
-msgid "Save chat"
-msgstr "Salva discussione"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"Clicca al link seguente per ottenere il log della chat, aspetta un attimo e "
-"clicca un'altra volta per ottenere il file."
-
-msgid "This chat is empty!"
-msgstr "Questa chat è vuota!"
-
-msgid "Generate file!"
-msgstr "Genera il file!"
-
-msgid "Download file!"
-msgstr "Scarica il file!"
-
-msgid "Clean current chat"
-msgstr "Pulisci la discussione corrente"
-
-msgid "Show user profile"
-msgstr "Mostra il profilo utente"
-
-msgid "Add this contact to your friends"
-msgstr "Aggiungi questo contatto ad i tuoi amici"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Aggiungi questa chat di gruppo ai tuoi favoriti"
-
-msgid "All tabs"
-msgstr "Tutti i cavalieri"
-
-msgid "Join groupchat"
-msgstr ""
-
-msgid "Close this tab"
-msgstr "Chiudi questo cavaliere"
-
-msgid "no subject defined for this room."
-msgstr "nessun oggetto definito per questa stanza"
-
-msgid "Administration panel for this room"
-msgstr "Pannello di controllo per questa stanza"
-
-msgid "Moderators"
-msgstr "Moderatori"
-
-msgid "Participants"
-msgstr "Partecipanti"
-
-msgid "Visitors"
-msgstr "Visitatori"
-
-msgid "Manage favorite rooms"
-msgstr "Controlla le tue room preferite"
-
-msgid "Change favorites"
-msgstr "Modifica i preferiti"
-
-msgid "Search a room"
-msgstr "Cerca stanza"
-
-msgid "Select a favorite"
-msgstr "Seleziona favorito"
-
-msgid "Getting the name..."
-msgstr "Sto ottenendo il nome..."
-
-msgid "Gateway"
-msgstr "Transporto"
-
-msgid "Name"
-msgstr "Nome"
-
-msgid "Room"
-msgstr "stanza"
-
-msgid "Add"
-msgstr "Aggiungi"
-
-msgid "Edit"
-msgstr "Modifica"
-
-msgid "Search a room on"
-msgstr "Cerca una stanza in"
-
-msgid "No room found on this server."
-msgstr "Nessuna stanza in questo server"
-
-msgid "Service discovery"
-msgstr "Scoperta servizi"
-
-msgid "Server to query"
-msgstr "Server in cui cercare"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "Ci dispiace, ma l'entità non ha dato nessun risultato!"
-
-msgid "Accounts"
-msgstr "Accounts"
-
-msgid "Authentications"
-msgstr "Autenticazioni"
-
-msgid "Automation"
-msgstr "Automazione"
-
-msgid "Clients"
-msgstr "Clienti"
-
-msgid "Collaboration"
-msgstr "Collaborazione"
-
-msgid "Components"
-msgstr "Componenti"
-
-msgid "Rooms"
-msgstr "Stanze"
-
-msgid "Directories"
-msgstr "Cartelle"
-
-msgid "Gateways"
-msgstr "Gateways"
-
-msgid "News"
-msgstr "News"
-
-msgid "Hierarchy"
-msgstr "Gerarchia"
-
-msgid "Proxies"
-msgstr "i Proxie"
-
-msgid "Publication/Subscription"
-msgstr "Pubblicazioni/Sottoscrizioni"
-
-msgid "Storage"
-msgstr "Spazio"
-
-msgid "Service offline or broken"
-msgstr "Servizio Off.line o Fuori Uso"
-
-msgid "Your inbox"
-msgstr "Messaggi in entrata"
-
-msgid "Available actions"
-msgstr "Azioni disponibili"
-
-msgid "Clean"
-msgstr "Svuota"
-
-msgid "New"
-msgstr "Nuovo"
-
-msgid "Received"
-msgstr "Ricevuti"
-
-msgid "Subject"
-msgstr "Oggetto"
-
-msgid "Content"
-msgstr "Contenuto"
-
-msgid "Send message"
-msgstr "Invia messaggio"
-
-msgid "Your inbox is empty."
-msgstr "Non hai messaggi in entrata."
-
-msgid "MUC administration"
-msgstr "Amministrazione MUC"
-
-msgid "You administrate this room"
-msgstr "Amministra questa stanza"
-
-msgid "Enter new subject"
-msgstr "Inserisci il nuovo topic"
-
-msgid "Configuration"
-msgstr "Configurazione"
-
-msgid "Authorizations"
-msgstr "Autorizzazioni"
-
-msgid "Member list"
-msgstr "Lista utenti"
-
-msgid "Owner list"
-msgstr "Lista gestori"
-
-msgid "Administrator list"
-msgstr "Lista amministratori"
-
-msgid "Outcast list"
-msgstr "Lista dei reietti"
-
-msgid "Add an input"
-msgstr "Aggiungi un input"
-
-msgid "Destroy this MUC"
-msgstr "Distruggi questa MUC"
-
-msgid "Yes, let's do it!"
-msgstr "Si, esegui!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "Il tuo amico sta guardando la conversazione."
-
-msgid "Your friend is writing a message..."
-msgstr "Il tuo amico sta scrivendo un messaggio"
-
-msgid "Your friend stopped writing a message."
-msgstr "Il tuo amico ha smesso di scrivere un messaggio"
-
-msgid "Your friend is doing something else."
-msgstr "Il tuo amico sta facendo altro."
-
-msgid "Your friend closed the chat."
-msgstr "Il tuo amico ha chiuso la chat"
-
-msgid "Requesting this service..."
-msgstr "Richiesta del servizio"
-
-msgid "Loading"
-msgstr "Carcamento"
-
-msgid "changed his/her nickname to %s"
-msgstr "ha cambiato il suo soprannome a %s"
-
-msgid "joined the chat room"
-msgstr "Si è aggiunto alla chat room"
-
-msgid "left the chat room"
-msgstr "ha lasciato la chat room"
-
-msgid "%s left"
-msgstr "%s se ne è andato"
-
-msgid "%s joined"
-msgstr "%s si è unito alla conversazione"
-
-msgid "no status"
-msgstr "nessuno status"
-
-msgid "has been kicked"
-msgstr "è stato cacciato"
-
-msgid "has been banned"
-msgstr "è stato escluso"
-
-msgid "no reason"
-msgstr "nessuna ragione"
-
-msgid "Communicate with the entire world!"
-msgstr "Comunica con l'intero mondo"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-"Jappix è una piattaforma sociale aperta, che ti permette facilmente di "
-"metterti, o rimanere in contatto con tutti."
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-"Ti permette di entrare in contatto con i milioni di utenti che utilizzano "
-"XMPP (Jabber) come fai tu con Jappix. Unisciti a noi."
-
-msgid "Hi there!"
-msgstr "Ciao!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr ""
-"Accedi al tuo account XMPP esistente oppure creane uno nuovo gratuitamente!"
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-"Per la sicurezza del tuo account, quando effettui l'accesso o ti registri, "
-"assicurati che la tua password rimanga segreta."
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-"Accedi utilizzando il tuo account XMPP. Puoi anche utilizzare %s per "
-"accedere una chat di gruppo."
-
-msgid "Previous"
-msgstr "Precedente"
-
-msgid "General"
-msgstr "Generale"
-
-msgid "Advanced"
-msgstr "Avanzato"
-
-msgid "Resource"
-msgstr "Risorsa"
-
-msgid "Priority"
-msgstr "Priorità"
-
-msgid "Low"
-msgstr "Inferiore"
-
-msgid "Medium"
-msgstr "Medio"
-
-msgid "High"
-msgstr "Superiore"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-"Inserisci la chat di gruppo a cui vuoi unirti ed il nick che vuoi usare. "
-"Puoi anche ritornare ad %s."
-
-msgid "login page"
-msgstr "pagina per login"
-
-msgid "Share this link with your friends:"
-msgstr "Condividi questo link con i tuoi amici"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-"Registra un nuovo account XMPP/Jabber per unirti ad i tuoi amici nel tuo "
-"cloud sociale. E' semplice!"
-
-msgid "Required"
-msgstr "Richiesto"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "Registrazione completata. Ecco il tuo indirizzo XMPP:"
-
-msgid "Manager"
-msgstr "Amministrazione"
-
-msgid "Encrypted"
-msgstr "Criptato"
-
-msgid "Unencrypted"
-msgstr "Non criptato"
-
-msgid "Where are you?"
-msgstr "Dove sei?"
-
-msgid "What's up with you?"
-msgstr "Che passa?"
-
-msgid "Type something you want to share with your friends..."
-msgstr "Scrivi qualcosa che vuoi condividere con i tuoi amici..."
-
-msgid "Fetching the social channel..."
-msgstr "Sto scaricando il canale sociale..."
-
-msgid "You are synchronized with your network."
-msgstr "Sei sincronizzato con la tua rete."
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "Impossibile inviare: puoi solo ricevere gli avvisi!"
-
-msgid "Media viewer"
-msgstr "Visualizzatore di Media"
-
-msgid "Browse"
-msgstr "Sfoglia"
-
-msgid "Command"
-msgstr "Comando"
-
-msgid "Subscribe"
-msgstr "Sottoscrivi"
-
-msgid "Join"
-msgstr "Unisciti"
-
-msgid "Automatic"
-msgstr "Automatico"
-
-msgid "Search"
-msgstr "Cerca"
-
-msgid "No result!"
-msgstr "nessun risultato"
-
-msgid "No notifications."
-msgstr "Niente avvisi."
-
-msgid "would like to add you as a friend."
-msgstr "vorrebbe aggiungerti come amico."
-
-msgid "would like you to join this chatroom:"
-msgstr "vorrebbe che lo raggiungessi in questa chatroom:"
-
-msgid "Do you accept?"
-msgstr "Accetti?"
-
-msgid "Yes"
-msgstr "Si"
-
-msgid "No"
-msgstr "No"
-
-msgid "would like to get authorization."
-msgstr "vorrebbe essere autorizzato ad aggiungerti."
-
-msgid "would like to send you a file: “%s”."
-msgstr "vorrebbe inviarti un file: “%s”."
-
-msgid "has received a file exchange request: “%s”."
-msgstr "ha ricevuto una richiesta per scambiare files: “%s”."
-
-msgid "has accepted to receive your file: “%s”."
-msgstr "ha accettato di ricevere il tuo file: “%s”."
-
-msgid "has rejected to receive your file: “%s”."
-msgstr "ha rifiutato di ricevere il tuo file: “%s”."
-
-msgid "could not receive your file: “%s”."
-msgstr "non ha potuto ricevere il tuo file: “%s”."
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr "Vuoi vedere gli amici suggeriti da %s?"
-
-msgid "commented an item you follow: “%s”."
-msgstr "ha commentato un post da te seguito: “%s”."
-
-msgid "liked your post: “%s”."
-msgstr "gli è piaciuto un tuo post: “%s”."
-
-msgid "quoted you somewhere: “%s”."
-msgstr "sei stato menzionato qui: “%s”."
-
-msgid "published on your wall: “%s”."
-msgstr "ha scritto sulla tua bacheca: “%s”."
-
-msgid "tagged you in a photo (%s)."
-msgstr "ti ha taggato per una foto (%s)."
-
-msgid "tagged you in a video (%s)."
-msgstr "ti ha taggato per un video (%s)."
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-"ha confermato la validità del tuo account. Il tuo profilo pubblico sarà "
-"disponibile a breve."
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr "ha rimosso il tuo profilo pubblico come da richiesto. Ci mancherai!"
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-"ha salvato le nuove impostazioni del tuo profilo. Saranno applicate a breve."
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-"non ha potuto confermare la validità del tuo account o aggiornare il tuo "
-"profilo. Controlla le tue credenziali di accesso."
-
-msgid "Open"
-msgstr "Aperto"
-
-msgid "Show"
-msgstr "Mostra"
-
-msgid "Hide"
-msgstr "Nascondi"
-
-msgid "Submit"
-msgstr "Invia"
-
-msgid "Client"
-msgstr "Cliente"
-
-msgid "System"
-msgstr "Sistema"
-
-msgid "Local time"
-msgstr "Ora Locale"
-
-msgid "Comments"
-msgstr "Commenti"
-
-msgid "User profile"
-msgstr "Profilo utente"
-
-msgid "See his/her position on the globe"
-msgstr "Visualizza la sua posizione nel modo"
-
-msgid "Confirm"
-msgstr "Conferma"
-
-msgid "anonymous mode"
-msgstr "modalità anonima"
-
-msgid "Groups"
-msgstr "Gruppi"
-
-msgid "Unclassified"
-msgstr "Non classificato"
-
-msgid "Authorize"
-msgstr "Autorizza"
-
-msgid "Ask for authorization"
-msgstr "Chiedi l'autorizzazione"
-
-msgid "Unblock"
-msgstr "Sblocca"
-
-msgid "Prohibit"
-msgstr "Proibisci"
-
-msgid "Block"
-msgstr "Blocca"
-
-msgid "Chat"
-msgstr "Chat"
-
-msgid "Groupchat"
-msgstr "Chat di gruppo"
-
-msgid "Jappix Mobile"
-msgstr "Jappix Mobile"
-
-msgid "Desktop"
-msgstr "Desktop"
-
-msgid "Mobile"
-msgstr "Mobile"
-
-msgid "Please wait..."
-msgstr "Attendere..."
-
-msgid "Please enable JavaScript"
-msgstr "Attiva i javascript"
-
-msgid "Show comments"
-msgstr "Mostra commenti"
-
-msgid "Loading comments..."
-msgstr "Sto caricando i commenti..."
-
-msgid "Could not get the comments!"
-msgstr "Non ho potuto ottenere nessun commento!"
-
-msgid "Comments locked!"
-msgstr "Commenti bloccati!"
-
-msgid "Type your comment here..."
-msgstr "Inserisci qui il tuo commento..."
-
-msgid "Your channel"
-msgstr "Il tuo canale"
-
-msgid "Channel of"
-msgstr "Canale di"
-
-msgid "More notices..."
-msgstr "Altre informazioni"
-
-msgid "Attach a file"
-msgstr "Allega un file"
-
-msgid "Send"
-msgstr "Invia"
-
-msgid "Unattach the file"
-msgstr "Rimuovi il file allegato"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-"C'è stato un errore durante il caricamento del tuo file: forse è troppo "
-"grande (%s al massimo) o non permesso!"
-
-msgid "Authorization failed"
-msgstr "Autorizzazione fallita"
-
-msgid "Registration failed, please choose a different username"
-msgstr "Registrazione fallita, scegli un nuovo nome utente"
-
-msgid "Service unavailable"
-msgstr "Servizio non disponibile"
-
-msgid "Internal server error, try later"
-msgstr "Internal server error, prova più tardi"
-
-msgid "Your form has been sent."
-msgstr "Il tuo modulo è stato inviato."
-
-msgid "Application"
-msgstr "Applicazione"
-
-msgid "Media integration"
-msgstr "Integrazione contenuti multimediali"
-
-msgid "Keep local chat archives"
-msgstr ""
-
-msgid "XMPP links"
-msgstr "Links XMPP"
-
-msgid "Open XMPP links with Jappix"
-msgstr "Apri i collegamenti XMPP con Jappix"
-
-msgid "changed the subject to:"
-msgstr "Cambia il soggetto a:"
-
-msgid "Welcome!"
-msgstr "Benvenuto!"
-
-msgid "Friends"
-msgstr "Amici"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr ""
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-"Prima di iniziare ad utilizzare Jappix, devi cambiare alcune impostazione, "
-"aggiungere nuovi contatti e completare il tuo profilo."
-
-msgid "Enable notification sounds"
-msgstr "Attiva avvisi sonori"
-
-msgid "Share your position on the globe"
-msgstr "Condividi la tua posizione attuale"
-
-msgid "Offline friends"
-msgstr "Amici non in linea"
-
-msgid "Don't hide offline friends"
-msgstr "Non nascondere amici non in linea"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-"Utilizza questa utilità per cercare i tuoi amici sul server che stai "
-"utilizzando adesso, o aggiungili dopo."
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr "Ben fatto! Adesso, puoi condividere Jappix con i tuoi amici!"
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-"Quando premerai il tasto salva, l'editor del tuo profilo verrà aperto. Buona "
-"socializzazione!"
-
-msgid "Share Jappix on %s"
-msgstr "Condividi Jappix on %s"
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "Using Jappix, an open social platform. I am %s!"
-
-msgid "Unknown name"
-msgstr "Nome sconosciuto"
-
-msgid "Unknown country"
-msgstr "Nazione sconosciuta"
-
-msgid "Click to enable"
-msgstr "Clicca per attivare"
-
-msgid "Click to disable"
-msgstr "Clicca per disattivare"
-
-msgid "Installation"
-msgstr "Installazione"
-
-msgid "Jappix installation"
-msgstr "Installazione Jappix"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "Benvenuti nella installazione di Jappix!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-"Questo strumento ti aiuterà ad installare velocemente Jappix, il primo "
-"platform sociale basato su XMPP, sul tuo server. Non è richiesta alcuna "
-"conoscenza tecnica."
-
-msgid "Installation Steps:"
-msgstr "Diamo un occhiata ai passi per l'installazione:"
-
-msgid "Welcome"
-msgstr "Benvenuto"
-
-msgid "Storage configuration"
-msgstr "Configurazione per lo storage dei dati"
-
-msgid "Administrator account"
-msgstr "Account amministrativo"
-
-msgid "Main configuration"
-msgstr "Configurazione principale"
-
-msgid "Hosts configuration"
-msgstr "Configurazione degli hosts"
-
-msgid "Services installation"
-msgstr "Installazione servizi"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-"Se la lingua corrente non riflette la tua (%1s), puoi fare in modo che "
-"Jappix sia tradotto in %2s e sarà salvato."
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"Se hai bisogno di aiuto per l'installazione e la configurazione di Jappix, "
-"puoi utilizzare la nostra documentazione online disponibile qui: "
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr "E' tempo di costruire il tuo social cloud: vai al prossimo punto!"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr "La directory è scrivibile, puoi continuare!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-"Jappix ti offre la possibilità controllare la configurazione di Jappix, "
-"installare nuove plugins e cercare aggiornamenti. Ecco perchè devi creare un "
-"account amministrativo per accedere all'Amministrazione."
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-"Quando Jappix sarà installato, semplicemente clicca sul link "
-"“Amministrazione” nella home page per accedervi."
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr "Opps, hai dimenticato qualche cosa o le due password non coincidono!"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-"Jappix necessita l'impostazione di alcuni dati per funzionare correttamente. "
-"Perpiacere cambia i dati seguenti (o mantieni le impostazioni di default)."
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-"Nota che se non specifichi una delle impostazioni obbligatorie, sarà "
-"automaticamente completata con il valore di default."
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-"Hai bisogno di aiuto? Puoi trovare le istruzioni su come completare questo "
-"modulo nella nostra documentazione."
-
-msgid "User"
-msgstr "Utente"
-
-msgid "Service"
-msgstr "Servizio"
-
-msgid "Service name"
-msgstr "Nome del servizio"
-
-msgid "Service description"
-msgstr "Descrizione del servizio"
-
-msgid "Owner name"
-msgstr "Nome del gestore"
-
-msgid "Owner website"
-msgstr "Sito Web del gestore"
-
-msgid "Connection"
-msgstr "Connessione"
-
-msgid "Lock the host"
-msgstr "Blocca il nome dell'host"
-
-msgid "Anonymous mode"
-msgstr "Modalità anonima"
-
-msgid "HTTP authentication"
-msgstr "Autenticazione HTTP"
-
-msgid "Registration allowed"
-msgstr "Registrazione permessa"
-
-msgid "Use the built-in BOSH proxy"
-msgstr "Utilizza il proxy BOSH interno"
-
-msgid "Manager link"
-msgstr "Manager link"
-
-msgid "Groupchats to join"
-msgstr "Chat di gruppo a cui ti puoi unire"
-
-msgid "Suggest groupchats"
-msgstr "Chat di Gruppo Suggerite"
-
-msgid "Encryption"
-msgstr "Crittografia"
-
-msgid "HTTPS storage"
-msgstr "Usa HTTPS per l'archiviazione"
-
-msgid "Force HTTPS"
-msgstr "Forza HTTPS"
-
-msgid "Compression"
-msgstr "Compressione"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"Questa pagina serve a specificare i server principali a cui Jappix si "
-"connette. Puoi lasciarli come sono e continuare se vuoi usare il servizio "
-"ufficiale."
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"Forse non sai cos'è un server BOSH? E' un relay tra Jappix è il server XMPP, "
-"che è per il momento necessario per limitazioni tecniche."
-
-msgid "Main host"
-msgstr "Host del server"
-
-msgid "Groupchat host"
-msgstr "Host del server MUC"
-
-msgid "Pubsub host"
-msgstr "Host pubsub"
-
-msgid "Anonymous host"
-msgstr "Host per le connessioni anonime"
-
-msgid "Directory host"
-msgstr "Server per la Directory degli utenti."
-
-msgid "BOSH host"
-msgstr "Server BOSH"
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-"Puoi installare del software opzionale sul tuo server, per estendere le "
-"funzioni di Jappix. Alcune altre potrebbero essere modificate, per via delle "
-"restrizioni di sicurezza impostate di default."
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-"Per completare questa operazione devi essere in grado di accedere al tuo "
-"server tramite terminale come root, Ricordati che questo è facoltativo, "
-"Jappix funziona anche senza questi moduli, ma alcune delle sue "
-"caratteristiche non saranno disponibili."
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-"Dopo che completi il setup, Jappix generà i files di cache. Potrebbe essere "
-"un processo abbastanza lento, semplicemente aspetta che l'applicazione sia "
-"mostrata senza premere nessun tasto."
-
-msgid "Thanks for using Jappix!"
-msgstr "Grazie per aver scelto Jappix!"
-
-msgid "Next"
-msgstr "Continua"
-
-msgid "Finish"
-msgstr "Completa"
-
-msgid "Check again"
-msgstr "Controlla ancora"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-"La cartella non è scrivibile, imposta le autorizzazioni corrette per %s."
-
-msgid "%s is installed on your system."
-msgstr "%s è installato sul tuo sistema."
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s non è installato sul tuo sistema, dovresti installare %2s."
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "La dimensione massima degli upload per PHP non è sufficente (%s)."
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-"La dimensione massima degli upload per PHP non è sufficente (%s), impostala "
-"a %2s in %3s."
-
-msgid "Jappix manager"
-msgstr "Manager di Jappix"
-
-msgid "Manager access"
-msgstr "Accedi al manager"
-
-msgid "Statistics"
-msgstr "Statistiche"
-
-msgid "Hosts"
-msgstr "Host"
-
-msgid "Design"
-msgstr "Progetto"
-
-msgid "Repeat"
-msgstr "Ripeti"
-
-msgid "All"
-msgstr "Tutti"
-
-msgid "Horizontal"
-msgstr "Orizzontale"
-
-msgid "Vertical"
-msgstr "Verticale"
-
-msgid "Center"
-msgstr "Centro"
-
-msgid "Left"
-msgstr "Sinistra"
-
-msgid "Right"
-msgstr "Destra"
-
-msgid "Top"
-msgstr "In Cima"
-
-msgid "Bottom"
-msgstr "In Fondo"
-
-msgid "Adapt"
-msgstr "Adatta"
-
-msgid "Color"
-msgstr "Colore"
-
-msgid "Users"
-msgstr "Utente"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-"Questa è una area ristretta: solo gli utenti autorizzati possono gestire "
-"questo nodo Jappix"
-
-msgid "Please use the form below to login to the administration panel."
-msgstr ""
-"Perpiacere utilizza il modulo qui sotto per accedere al Pannello "
-"amministrativo."
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-"Per aumentare la sicurezza, le sessioni sono a tempo limitato e quando "
-"chiudi il tuo browser, sarai disconnesso."
-
-msgid "Credentials"
-msgstr "Informazioni di accesso"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "Sei stato disconnesso. Arrivederci!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-"Opps, non sei stato riconusciuto come un amministratore valido. Controlla le "
-"tue credenziali!"
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr "Puoi trovare qui sotto, le statistiche base ottenute da Jappix."
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr "Cambia qui la configurazione del tuo nodo Jappix."
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr "Cambia qui gli hosts XMPP serviti da questo nodo Jappix."
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-"Tutti i file salvati di questo nodo Jappix possono essere controllati da "
-"questa pagina: perpiacere scegli una sotto-directory ed inizia a modificare "
-"il suo contenuto!"
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr ""
-"Jappix è completamente personalizzabile: puoi cambiare qui il suo look."
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr ""
-"Il formato di questa immagine non è valido, perpiacere utilizza PNG, GIF "
-"oppure JPG!"
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr "Questa non è una immagine valida perpiacere utilizza il formato PNG!"
-
-msgid "The image could not be received, would you mind retry?"
-msgstr "L'immagine non è stata caricata correttamente, Riprova?"
-
-msgid "Your service logo has been successfully changed!"
-msgstr "Il logo è stato cambiato con successo!"
-
-msgid "Your image was added to the list!"
-msgstr "La tua immagina è stata aggiunta alla lista!"
-
-msgid "Changes saved!"
-msgstr "Modifiche salvate!"
-
-msgid "Logo"
-msgstr "Logo"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-"Puoi cambiare il logo di default con uno di tua scelta. Curati della "
-"grandezza e del colore di ogni logo."
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr ""
-"Carica ogni logo curandoti che rispetti la massima dimensione raccomandata "
-"in pixels."
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-"Il formato del logo deve essere in PNG. Lascia questo campo libero ed il "
-"logo non sarà cambiato."
-
-msgid "Remove this logo"
-msgstr "Rimuovi questo logo"
-
-msgid "View this logo"
-msgstr "Guarda questo logo"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-"Puoi definire più di un amministratore per questo nodo Jappix e cambiare qui "
-"le passwords associate."
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-"Aggiorna qui il tuo nodo Jappix, puoi anche controllare se una nuova "
-"versione e disponibile. Le informazioni sulle ultime versioni sono "
-"disponibili solo in inglese."
-
-msgid "Access statistics"
-msgstr "Statistiche sugli accessi"
-
-msgid "Share statistics"
-msgstr "Condividi le statistiche"
-
-msgid "Other statistics"
-msgstr "Altre statistiche"
-
-msgid "January"
-msgstr "Gennaio"
-
-msgid "February"
-msgstr "Febbraio"
-
-msgid "March"
-msgstr "Marzo"
-
-msgid "April"
-msgstr "Aprile"
-
-msgid "May"
-msgstr "Maggio"
-
-msgid "June"
-msgstr "Giugno"
-
-msgid "July"
-msgstr "Luglio"
-
-msgid "August"
-msgstr "Agosto"
-
-msgid "September"
-msgstr "Settembre"
-
-msgid "October"
-msgstr "Ottobre"
-
-msgid "November"
-msgstr "Novembre"
-
-msgid "December"
-msgstr "Dicembre"
-
-msgid "Monday"
-msgstr "Lunedì"
-
-msgid "Tuesday"
-msgstr "Martedì"
-
-msgid "Wednesday"
-msgstr "Mercoledì"
-
-msgid "Thursday"
-msgstr "Giovedì"
-
-msgid "Friday"
-msgstr "Venerdì"
-
-msgid "Saturday"
-msgstr "Sabato"
-
-msgid "Sunday"
-msgstr "Domenica"
-
-msgid "Total"
-msgstr "Totali"
-
-msgid "Archives"
-msgstr ""
-
-msgid "Music"
-msgstr "Musica"
-
-msgid "Backgrounds"
-msgstr "Sfondi"
-
-msgid "Share"
-msgstr "Condividi"
-
-msgid "Background"
-msgstr "Sfondo"
-
-msgid "Notice"
-msgstr "Avviso"
-
-msgid "Your design preferences have been saved!"
-msgstr "Le tue preferenza per il design sono state salvate!"
-
-msgid "Please check your inputs: something is missing!"
-msgstr ""
-"Perpiacere controlla i tuoi dati inseriti: vi sono dei valori mancanti!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-"Cambia lo sfondo del tuo nodo Jappix in questa pagina. Puoi scegliere un "
-"colore una immagine caricata."
-
-msgid "Use default background"
-msgstr "Utilizza lo sfondo di default"
-
-msgid "Use your own image"
-msgstr "Utilizza una tua immagine"
-
-msgid "Select a background to use and change the display options."
-msgstr "Scegli uno sfondo da utilizzare è cambia le opzioni di display."
-
-msgid "Use your own color"
-msgstr "Utilizza un tuo colore personalizzato"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr ""
-"Inserisci qui il valore esadecimale del colore che vuoi usare come "
-"background."
-
-msgid "Manage backgrounds"
-msgstr "Controlla sfondi"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-"Puoi aggiungere un nuovo background alla lista con questa utilità. "
-"Perpiacere invia un'immagine valida."
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr "Se vuoi rimuovere alcuni sfondi, utilizza browser qui sotto."
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-"Imposta un avviso mostrato nella homepage, per tutti i tuoi utenti come un "
-"avviso/messaggio importante con questa utilità."
-
-msgid "Simple notice"
-msgstr "Avviso semplice"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr "Questo avviso mostra solo testo semplice, codice HTML non è permesso!"
-
-msgid "Advanced notice"
-msgstr "Avviso avanzato"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-"Puoi personalizzare i tuoi avvisi con HTML, CSS e Javascript incluso, ma è "
-"richiesta la conoscenza dei rispettivi linguaggi."
-
-msgid "Available updates"
-msgstr "Aggiornamenti disponibili"
-
-msgid "What's new?"
-msgstr "Cosa c'è di nuovo?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr ""
-"Le cartelle per l'archiviazioni non sono scrivibili, perpiacere imposta le "
-"autorizzazioni corrette!"
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-"%1s può causare problemi al proxy, perpiacere incrementa il valore %2s a %3s!"
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-"Stai utilizzando una versione ancora non definitiva di Jappix. La puoi "
-"aggiornare tramite il nostro repositorio, eseguendo: %s."
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-"Una nuova versione di Jappix è disponibile! Controlla il registro delle "
-"modifica ed avvia l'aggiornamento!"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr "La tua versione è obsoleta. Aggiornala a %s cliccando qui!"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"La tua versione sembra essere aggiornata, ma puoi controllare gli "
-"aggiornamenti manualmente cliccando qui."
-
-msgid "Check for updates"
-msgstr "Controlla aggiornamenti"
-
-msgid "Update in progress"
-msgstr "Aggiornamento in corso"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr ""
-"Jappix è stato aggiornato: Stai utilizzando l'ultima version. Divertiti!"
-
-msgid "The update has failed! Please try again later."
-msgstr "L'aggiornamento è fallito! Perpiacere, riprova più tardi."
-
-msgid "Downloading package..."
-msgstr "Sto scaricando il pacchetto..."
-
-msgid "Removing current Jappix system files..."
-msgstr "Rimozione dei file di sistema di Jappix..."
-
-msgid "Extracting package..."
-msgstr "Sto estraendo il pacchetto..."
-
-msgid "Regenerating storage folder tree..."
-msgstr "Sto rigenerando l'albero delle cartelle di salvataggio..."
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix è adesso aggiornato!"
-
-msgid "Aborted: socket error!"
-msgstr "Interrotto: errore del socket!"
-
-msgid "Aborted: buffer error!"
-msgstr "Interrotto: errore buffer!"
-
-msgid "Aborted: everything is not writable!"
-msgstr "Interrotto: il percorso non è scrivibile!"
-
-msgid "Aborted: could not extract the package!"
-msgstr "Interrotto: non è stato possibile estrarre il pacchetto!"
-
-msgid "Visits"
-msgstr "Visite"
-
-msgid "Daily"
-msgstr "Giornaliero"
-
-msgid "Weekly"
-msgstr "Settimanale"
-
-msgid "Monthly"
-msgstr "Mensile"
-
-msgid "Yearly"
-msgstr "Annuale"
-
-msgid "Size"
-msgstr "Dimensione"
-
-msgid "Clean everything"
-msgstr "Ripristina tutto"
-
-msgid "Purge cache"
-msgstr "Pulisci la cache"
-
-msgid "Purge logs"
-msgstr "Cancella i registri"
-
-msgid "Purge sent files"
-msgstr "Cancella i file inviati"
-
-msgid "Purge updates"
-msgstr "Pulisci la cartella degli aggiornamenti"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "Ho pulito la cartella degli archivi da te indicata!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-"La manutenzione di Jappix è importante, tieni pulite le cartelle di "
-"archiviazione!"
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr "Carica la tua musica (OGG Vorbis, MP3 o WAV) per sentirla da Jappix!"
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr "Il file che vuoi caricare deve essere più piccolo di %s."
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-"Puoi controllare qui il contenuto che i tuoi utemti salvano sul server e "
-"rimuore quello indesiderato."
-
-msgid "Title"
-msgstr "Titolo"
-
-msgid "Artist"
-msgstr "Artista"
-
-msgid "Album"
-msgstr "Album"
-
-msgid "File"
-msgstr "File"
-
-msgid "Upload"
-msgstr "Carica"
-
-msgid "The folder is empty."
-msgstr "La cartella è vuota."
-
-msgid "The music could not be received, please retry!"
-msgstr "La musica non è stata caricata correttamente, perpiacere riprova!"
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-"Questo non è un file musicale valido, perpiacere codificalo in OGG Vorbis, "
-"MP3 oppure WAV!"
-
-msgid "Your music has been added!"
-msgstr "Ho aggiunto la tua musica!"
-
-msgid "The selected elements have been removed."
-msgstr "Gli elementi selezionati sono stati rimossi."
-
-msgid "You must select elements to remove!"
-msgstr "Devi selezionare almeno un elemento da rimuovere."
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-"Aggiungi un nuovo utente con questa utilità oppure cambia la password di uno "
-"esistente. Perpiacere utilizza una password sicura."
-
-msgid "Manage"
-msgstr "Amministra"
-
-msgid "List"
-msgstr "Lista"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-"Rimuovi gli utenti amministrativi con questa utilità. Nota che deve essere "
-"presente almeno un utente amministrativo."
-
-msgid "The user has been added!"
-msgstr "L'utente è stato aggiunto!"
-
-msgid "The chosen users have been removed."
-msgstr "Gli utenti selezionati sono stati rimossi."
-
-msgid "You must select one or more users to be removed!"
-msgstr "Devi selezionare uno o più utenti da rimuovere!"
-
-msgid "Yesterday"
-msgstr "Ieri"
-
-msgid "%s days ago"
-msgstr "%s giorni fa'"
-
-msgid "User currently active"
-msgstr "Utente correntemente attivo"
-
-msgid "Last seen: %s"
-msgstr "Ultimo accesso: %s"
-
-msgid "Inactive since: %s"
-msgstr "Inattivo da: %s"
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr "Il tuo contatto sembra non aver ricevuto il tuo o i tuoi messagi!"
-
-msgid "Static content server"
-msgstr "Server per il contenuto statico"
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr "Questo è il server per il contenuto statico di %1s, “%2s”."
-
-msgid "User uploads server"
-msgstr "Server per gli uploads"
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr "Questo è il server per gli uploads per %1s, “%2s”."
-
-msgid "Suggested friends"
-msgstr "Amici suggeriti"
-
-msgid "Check all"
-msgstr "Seleziona tutte le opzioni"
-
-msgid "Uncheck all"
-msgstr "Deseleziona tutte le opzioni"
-
-msgid "Choose"
-msgstr "Scegli"
-
-msgid "List name"
-msgstr "Nome lista"
-
-msgid "Allow"
-msgstr "Permetti"
-
-msgid "Deny"
-msgstr "Rifiuta"
-
-msgid "Group"
-msgstr "Gruppo"
-
-msgid "Subscription"
-msgstr "Sottoscrizione"
-
-msgid "Both"
-msgstr "Entrambi"
-
-msgid "From"
-msgstr "Da"
-
-msgid "Everybody"
-msgstr "Tutti quanti"
-
-msgid "Send messages"
-msgstr "Invia messaggi"
-
-msgid "Send queries"
-msgstr "Invia richieste"
-
-msgid "See my status"
-msgstr "Vedi il mio stato"
-
-msgid "Send his/her status"
-msgstr "Invia il suo status"
-
-msgid "Everything"
-msgstr "Tutto"
-
-msgid "Item"
-msgstr "Oggetto"
-
-msgid "Order"
-msgstr "Ordina"
-
-msgid "Active for this session"
-msgstr "Attivo per questa sessione"
-
-msgid "Always active"
-msgstr "Sempre attivo"
-
-msgid "User directory"
-msgstr "Cartella utenti"
-
-msgid "Search a friend"
-msgstr "Cerca un amico"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-"Questa caratteristica non è implementata dal client del recipiente oppure il "
-"suo server e quindi non può essere processata."
-
-msgid "Send him/her a message"
-msgstr "Invia un messaggio a lui/lei"
-
-msgid "Start a chat with him/her"
-msgstr "Inizia una chat con lui/lei"
-
-msgid "Available shortcuts:"
-msgstr "Scorciatoie disponibili:"
-
-msgid "%s removes the chat logs"
-msgstr "%s ha rimosso i registri delle chats."
-
-msgid "%s joins a groupchat"
-msgstr "%s si è unito a una groupchat"
-
-msgid "%s closes the chat"
-msgstr "%s chiude la chat"
-
-msgid "%s shows the user profile"
-msgstr "%s mostra il profilo utente"
-
-msgid "%s sends a message to the room"
-msgstr "%s invia un messaggio alla room"
-
-msgid "%s changes your nickname"
-msgstr "%s ha cambiato il tuo soprannome"
-
-msgid "%s sends a message to someone in the room"
-msgstr "%s invia un messaggio a qualcuno nella room"
-
-msgid "%s changes the room topic"
-msgstr "%s ha cambiato l'argomento della room"
-
-msgid "%s kicks a user of the room"
-msgstr "%s caccia un utente della room"
-
-msgid "%s bans a user of the room"
-msgstr "%s bandisce un utente della room"
-
-msgid "%s invites someone to join the room"
-msgstr "%s invita qualcuno ad unirsi alla room"
-
-msgid "Public profile"
-msgstr "Profilo pubblico"
-
-msgid "Your profile anywhere on the Web."
-msgstr "Il tuo profilo ovunque sul Web."
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-"%s è un servizio di Jappix.com, che rende il tuo profilo XMPP pubblico. E' "
-"più semplice condividerlo, nessun account è richiesto per visualizzare il "
-"tuo canale sociale, la tua posizione oppure i dettagli del tuo profilo."
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-"Oltretutto, ogni immagine che invii al tuo canale sociale è aggiunta ad una "
-"gradevole cronologia. Adesso puoi vedere le foto da te condivise anno per "
-"anno."
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-"Puoi anche utilizzare il tuo avatar XMPP come avatar per ogni sito web, blog "
-"e forum. Quando lo cambi su XMPP, il nuovo avatar appare ovunque. Geniale eh?"
-
-msgid "Yay, let's create your public profile!"
-msgstr "Yay, crea il mio profilo pubblico!"
-
-msgid "Enable my public profile"
-msgstr "Attiva il mio profilo pubblico"
-
-msgid "Jappix for your phone"
-msgstr "Jappix per il tuo smartphone"
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr ""
-"Un applicazione smartphone per messaggi, chats, profili e molto ancora!"
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-"Questa è solo una nota informativa, forse i dati a cui si collegava sono "
-"stati rimossi."
-
-msgid "You haven't provided any file to download"
-msgstr "Non hai specificato un file da scaricare"
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr "Non puoi scaricare un file se non disponi di una chiave"
-
-msgid "Woah this file isn't found, please double check"
-msgstr "Woah! No ho trovato questo file, perpiacere controlla."
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr ""
-"La chiave da te specificata non ha il permesso per scaricare questo file"
-
-msgid "Statistics are currently disabled in the settings."
-msgstr "Le statistiche sono attualmente disabilitate nella configurazione."
-
-msgid "New event!"
-msgstr "Hai ricevuto un nuovo evento!"
-
-msgid "%s is typing..."
-msgstr "%s sta scrivendo..."
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-"Il codice di sicurezza che hai inserito è invalido. Perpiacere riprova."
-
-msgid "The username you picked is not available. Please try another one."
-msgstr "La username da te scelta non è disponibile. Prova con un'altra."
-
-msgid "There was an error registering your account. Please retry."
-msgstr "C'è stato un errore durante la registrazione. Per piacere riprova."
-
-msgid "Username"
-msgstr "Username"
-
-msgid "Enter password"
-msgstr "Inserisci Password"
-
-msgid "Once again..."
-msgstr "Ancora una volta..."
-
-msgid "Code"
-msgstr "Codice"
-
-msgid "Security code"
-msgstr "Codice di sicurezza"
-
-msgid "Advertising space available!"
-msgstr "Spazio Pubblicitario Disponibile"
-
-msgid "Advertise here"
-msgstr "Inserite qui i vostri annunci"
-
-msgid "Analytics (%s)"
-msgstr "Analytics (%s)"
-
-msgid "Track visits"
-msgstr "Traccia le visite"
-
-msgid "Piwik URL"
-msgstr "URL di Piwik"
-
-msgid "Piwik tracking ID"
-msgstr "Il tracking ID di Piwik"
-
-msgid "Advertising (%s)"
-msgstr "Publicizzando (%s)"
-
-msgid "Enable ads"
-msgstr "Attiva inserzioni pubblicitarie"
-
-msgid "Standard ads key"
-msgstr "Standard ads key"
-
-msgid "Content ads key"
-msgstr "Content ads key"
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "Mute"
-msgstr ""
-
-msgid "Unmute"
-msgstr ""
-
-msgid "Is calling you"
-msgstr ""
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr ""
-
-msgid "Waiting..."
-msgstr ""
-
-msgid "Ringing..."
-msgstr ""
-
-msgid "Declined the call"
-msgstr ""
-
-msgid "Call error"
-msgstr ""
-
-msgid "Ended the call"
-msgstr ""
-
-msgid "Call ended"
-msgstr ""
-
-msgid "Call canceled"
-msgstr ""
-
-msgid "Canceled the call"
-msgstr ""
-
-msgid "Is already in a call"
-msgstr ""
-
-msgid "Ending call..."
-msgstr ""
-
-msgid "Accept"
-msgstr ""
-
-msgid "Decline"
-msgstr ""
-
-msgid "Okay"
-msgstr ""
-
-msgid "Retry"
-msgstr ""
-
-msgid "Audio Call"
-msgstr ""
-
-msgid "Video Call"
-msgstr ""
diff --git a/i18n/ja/LC_MESSAGES/main.mo b/i18n/ja/LC_MESSAGES/main.mo
deleted file mode 100644
index 05a2111a..00000000
--- a/i18n/ja/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/ja/LC_MESSAGES/main.po b/i18n/ja/LC_MESSAGES/main.po
deleted file mode 100644
index ad334ba6..00000000
--- a/i18n/ja/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2362 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:21+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Japanese (http://www.transifex.com/projects/p/jappix/language/"
-"ja/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: ja\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "default:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"ブラウザの設定でJavaScriptが無効になっているため、Jappixを起動できません! "
-"JavaScriptを有効にしてください。"
-
-msgid "Social channel, chat and more."
-msgstr "ソーシャルチャンネル、チャットなどなど。"
-
-msgid "Create your public profile."
-msgstr "公開プロフィールを作成"
-
-msgid "A mini-chat for your website."
-msgstr "ウェブサイト用のミニチャット"
-
-msgid "Get Jappix, get support."
-msgstr ""
-
-msgid "Statistics around Jappix."
-msgstr "Jappixに関する統計"
-
-msgid "Legal disclaimer for Jappix."
-msgstr ""
-
-msgid "Download Jappix for free."
-msgstr "Jappixを無料でダウンロード"
-
-msgid "Contribute to the Jappix code."
-msgstr "Jappixのコードに貢献する"
-
-msgid "Jappix for your company."
-msgstr ""
-
-msgid "Find a public Jappix node."
-msgstr "公開Jappixノードを見つける"
-
-msgid "Credits"
-msgstr ""
-
-msgid "Association"
-msgstr ""
-
-msgid "Web agency"
-msgstr ""
-
-msgid "Legal"
-msgstr ""
-
-msgid "Legal disclaimer"
-msgstr ""
-
-msgid "Terms of use and legal"
-msgstr ""
-
-msgid "Owner"
-msgstr ""
-
-msgid "Node owner"
-msgstr ""
-
-msgid "By using our service, you accept %s."
-msgstr ""
-
-msgid "our terms of use"
-msgstr ""
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Jappixはネットワークの問題により停止しました。バグか不正なログインです(入力"
-"した認証情報を確認してください)。ご不便をおかけして申し訳ありません。"
-
-msgid "The element list on this server could not be obtained!"
-msgstr "このサーバのエレメントリストを取得することができませんでした!"
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"あなたのパスワードは変更されました。今から新しいパスワードでログインできま"
-"す。"
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "あなたのXMPPアカウントは正常に削除されました。さようなら!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "XMPPアカウントをログアウトしました。お元気で!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr "参加する談話室がありません。作成する必要があります!"
-
-msgid "The groupchat has been removed."
-msgstr ""
-"グループチャットは削除されました、今から誰でも再作成を行うことができます。"
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "届けたいユーザーは、この談話室にいません。"
-
-msgid "Please enter the group chat address to join."
-msgstr "参加するグループチャットアドレスを入力してください。"
-
-msgid "Please enter your nickname to join %s."
-msgstr "%s に参加するニックネームを入力してください。"
-
-msgid "This room (%s) is protected with a password."
-msgstr "この談話室 (%s) はパスワードで保護されています。"
-
-msgid "Your browser is out of date!"
-msgstr "ブラウザバージョンが古いです!"
-
-msgid "Last %s version is better!"
-msgstr "バージョン %s を推奨します。"
-
-msgid "Login"
-msgstr "ログイン"
-
-msgid "Register"
-msgstr "登録"
-
-msgid "Here we go!"
-msgstr "さあ、はじめよう!"
-
-msgid "Server"
-msgstr "サーバー"
-
-msgid "Password"
-msgstr "パスワード"
-
-msgid "Remember me"
-msgstr "記憶する"
-
-msgid "This tool has been disabled!"
-msgstr "このツールは無効になっているため、使用することができません!"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr "ネットワークの問題により切断されました。どうしますか?"
-
-msgid "Reconnect"
-msgstr "再接続"
-
-msgid "Messages"
-msgstr "メッセージ"
-
-msgid "Profile"
-msgstr "プロフィール"
-
-msgid "Options"
-msgstr "オプション"
-
-msgid "Disconnect"
-msgstr "切断"
-
-msgid "Filter"
-msgstr "フィルター"
-
-msgid "Add a friend"
-msgstr "友達を追加"
-
-msgid "Your groupchats"
-msgstr "グループチャット"
-
-msgid "Manage your favorite groupchats"
-msgstr "お気に入りのグループチャットを管理"
-
-msgid "More stuff"
-msgstr "もっと多く"
-
-msgid "Show all friends"
-msgstr "すべての友達を表示"
-
-msgid "Only show connected friends"
-msgstr "オンラインの友達のみ表示"
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "メッセージアーカイブ"
-
-msgid "Date"
-msgstr "日付"
-
-msgid "A short message?"
-msgstr "短いメッセージですか?"
-
-msgid "How are you?"
-msgstr "ご機嫌いかが?"
-
-msgid "What are you doing?"
-msgstr "なにしてる?"
-
-msgid "Join a chat"
-msgstr "チャットに参加"
-
-msgid "Status"
-msgstr "ステータス"
-
-msgid "Available"
-msgstr "オンライン"
-
-msgid "Talkative"
-msgstr "チャット可"
-
-msgid "Away"
-msgstr "離席中"
-
-msgid "Not available"
-msgstr "不在"
-
-msgid "Busy"
-msgstr "取り込み中"
-
-msgid "Offline"
-msgstr ""
-
-msgid "Mood"
-msgstr "気分"
-
-msgid "None"
-msgstr "なし"
-
-msgid "Crazy"
-msgstr "狂気"
-
-msgid "Excited"
-msgstr "興奮"
-
-msgid "Playful"
-msgstr "冗談半分"
-
-msgid "Happy"
-msgstr "幸福"
-
-msgid "Shocked"
-msgstr "ショック"
-
-msgid "Hot"
-msgstr "元気"
-
-msgid "Sad"
-msgstr "悲しい"
-
-msgid "Amorous"
-msgstr "恋心"
-
-msgid "Confident"
-msgstr "大胆"
-
-msgid "Activity"
-msgstr "アクティビィティ"
-
-msgid "Chores"
-msgstr "雑用"
-
-msgid "Drinking"
-msgstr "飲酒"
-
-msgid "Eating"
-msgstr "食事"
-
-msgid "Exercising"
-msgstr "運動"
-
-msgid "Grooming"
-msgstr "訓練"
-
-msgid "Appointment"
-msgstr "予約"
-
-msgid "Inactive"
-msgstr "無効"
-
-msgid "Relaxing"
-msgstr "リラックス"
-
-msgid "Talking"
-msgstr "会話"
-
-msgid "Traveling"
-msgstr "旅行"
-
-msgid "Working"
-msgstr "仕事"
-
-msgid "View profile"
-msgstr "プロフィールを見る"
-
-msgid "This is a repeat from %s"
-msgstr "%sからの反復"
-
-msgid "Repeat this notice"
-msgstr "お知らせを繰り返す"
-
-msgid "Remove this notice"
-msgstr "お知らせを削除"
-
-msgid "Your profile"
-msgstr "あなたのプロフィール"
-
-msgid "Identity"
-msgstr "身元"
-
-msgid "Profile image"
-msgstr "プロフィール画像"
-
-msgid "Others"
-msgstr "その他"
-
-msgid "Other"
-msgstr ""
-
-msgid "Personal"
-msgstr "個人"
-
-msgid "Complete name"
-msgstr "氏名"
-
-msgid "Nickname"
-msgstr "ニックネーム"
-
-msgid "First name"
-msgstr "名"
-
-msgid "Last name"
-msgstr "姓"
-
-msgid "Date of birth"
-msgstr "誕生日"
-
-msgid "Contact"
-msgstr "連絡先"
-
-msgid "E-mail"
-msgstr "Eメール"
-
-msgid "Phone"
-msgstr "電話"
-
-msgid "Website"
-msgstr "ウェブサイト"
-
-msgid "Current"
-msgstr "カレント"
-
-msgid "Delete"
-msgstr "削除"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr "残念!あなたの情報カードにプロフィール画像がありません!"
-
-msgid "Address"
-msgstr "住所"
-
-msgid "Street"
-msgstr "町丁名・番地"
-
-msgid "City"
-msgstr "市町村"
-
-msgid "Postal code"
-msgstr "郵便番号"
-
-msgid "Country"
-msgstr "国"
-
-msgid "Biography"
-msgstr "自己紹介"
-
-msgid "Important notice"
-msgstr "重要なお知らせ"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr ""
-"XMPPはプライベートではありません。パブリックプロファイル(vCard)を選択してくだ"
-"さい。"
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"他のユーザーが簡単に識別できるよう、プロフィール画像(最大 %s)をアップロードす"
-"ることをお勧めします。"
-
-msgid "Save"
-msgstr "保存"
-
-msgid "Cancel"
-msgstr "キャンセル"
-
-msgid "Edit options"
-msgstr "オプションを編集"
-
-msgid "Channel"
-msgstr "チャンネル"
-
-msgid "Commands"
-msgstr "コマンド"
-
-msgid "Sounds"
-msgstr "サウンド"
-
-msgid "Privacy"
-msgstr "プライバシー"
-
-msgid "Message archiving"
-msgstr "メッセージアーカイブ"
-
-msgid "Store an history of your chats"
-msgstr ""
-
-msgid "Geolocation"
-msgstr "位置情報"
-
-msgid "Disabled"
-msgstr ""
-
-msgid "Store all chats"
-msgstr ""
-
-msgid "Store friend chats"
-msgstr ""
-
-msgid "Remove all archives"
-msgstr ""
-
-msgid "Empty"
-msgstr "空"
-
-msgid "Empty channel"
-msgstr "空のチャンネル"
-
-msgid "Persistent"
-msgstr "持続"
-
-msgid "Maximum notices"
-msgstr "お知らせの最大数"
-
-msgid "Account"
-msgstr "アカウント"
-
-msgid "Change password"
-msgstr "パスワードを変更"
-
-msgid "Delete account"
-msgstr "アカウントを削除"
-
-msgid "Old"
-msgstr "旧"
-
-msgid "New (2 times)"
-msgstr "新 (2回)"
-
-msgid "Suggested chatrooms"
-msgstr ""
-
-msgid "Skip"
-msgstr ""
-
-msgid "Continue"
-msgstr "次"
-
-msgid "To"
-msgstr "宛先"
-
-msgid "Close"
-msgstr "閉じる"
-
-msgid "unknown"
-msgstr "不明"
-
-msgid "Unavailable"
-msgstr "使用できません"
-
-msgid "is now"
-msgstr "新規"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "アバターのアップロードが完了するのを待ってください…"
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "美しい新規プロフィール画像はここにあります!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "この画像ファイルはサポートされていないか、サイズが間違っています"
-
-msgid "Reply"
-msgstr "返信"
-
-msgid "Error"
-msgstr "エラー"
-
-msgid "Click here to solve the error"
-msgstr "クリックしてエラーを修正してください"
-
-msgid "You"
-msgstr "あなた"
-
-msgid "Remove"
-msgstr "削除"
-
-msgid "Rename"
-msgstr "名前変更"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "こんにちは、わたしは %s です。あなたを新しい友達として追加したいです。"
-
-msgid "Smiley insertion"
-msgstr "顔文字を挿入"
-
-msgid "Change style"
-msgstr "スタイル変更"
-
-msgid "Text in bold"
-msgstr "太字"
-
-msgid "Text in italic"
-msgstr "イタリック"
-
-msgid "Underlined text"
-msgstr "下線"
-
-msgid "Send a file"
-msgstr "ファイル送信"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr "アップロードすると、友達にはダウンロードするよう通知されます。"
-
-msgid "Save chat"
-msgstr "チャットを保存"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"チャット履歴を取得するには以下のリンクをクリックしてしばらく待ちます。次に再"
-"度クリックしてファイルを取得します。"
-
-msgid "This chat is empty!"
-msgstr "このチャットは空です"
-
-msgid "Generate file!"
-msgstr "ファイルを生成!"
-
-msgid "Download file!"
-msgstr "ファイルをダウンロード!"
-
-msgid "Clean current chat"
-msgstr "カレントチャットをクリア"
-
-msgid "Show user profile"
-msgstr "ユーザープロフィールを表示"
-
-msgid "Add this contact to your friends"
-msgstr "この相手先を友達として追加"
-
-msgid "Add this groupchat to your favorites"
-msgstr "このグループチャットをお気に入りに追加"
-
-msgid "All tabs"
-msgstr "全てのタブ"
-
-msgid "Join groupchat"
-msgstr ""
-
-msgid "Close this tab"
-msgstr "このタブを閉じる"
-
-msgid "no subject defined for this room."
-msgstr "この談話室には題がありません。"
-
-msgid "Administration panel for this room"
-msgstr "この談話室の管理パネル"
-
-msgid "Moderators"
-msgstr "司会者"
-
-msgid "Participants"
-msgstr "参加者"
-
-msgid "Visitors"
-msgstr "傍聴者"
-
-msgid "Manage favorite rooms"
-msgstr "お気に入りの談話室の管理"
-
-msgid "Change favorites"
-msgstr "お気に入りの変更"
-
-msgid "Search a room"
-msgstr "談話室を検索"
-
-msgid "Select a favorite"
-msgstr "お気に入りを選択"
-
-msgid "Getting the name..."
-msgstr "名前を取得中"
-
-msgid "Gateway"
-msgstr "ゲートウェイ"
-
-msgid "Name"
-msgstr "名前"
-
-msgid "Room"
-msgstr "談話室"
-
-msgid "Add"
-msgstr "追加"
-
-msgid "Edit"
-msgstr "編集"
-
-msgid "Search a room on"
-msgstr "談話室を検索: "
-
-msgid "No room found on this server."
-msgstr "サーバーに談話室はありません。"
-
-msgid "Service discovery"
-msgstr "サービスディスカバリ"
-
-msgid "Server to query"
-msgstr "サーバーに問い合わせ"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "ごめんね、エンティティが何も結果を返しませんでした!"
-
-msgid "Accounts"
-msgstr "アカウント"
-
-msgid "Authentications"
-msgstr "認証"
-
-msgid "Automation"
-msgstr "自動化"
-
-msgid "Clients"
-msgstr "クライアント"
-
-msgid "Collaboration"
-msgstr "コラボレーション"
-
-msgid "Components"
-msgstr "コンポーネント"
-
-msgid "Rooms"
-msgstr "談話室"
-
-msgid "Directories"
-msgstr "ディレクトリ"
-
-msgid "Gateways"
-msgstr "ゲートウェイ"
-
-msgid "News"
-msgstr "ニュース"
-
-msgid "Hierarchy"
-msgstr "階層"
-
-msgid "Proxies"
-msgstr "プロキシ"
-
-msgid "Publication/Subscription"
-msgstr "PubSub"
-
-msgid "Storage"
-msgstr "ストレージ"
-
-msgid "Service offline or broken"
-msgstr "サービスがオフラインか壊れています"
-
-msgid "Your inbox"
-msgstr "受信箱"
-
-msgid "Available actions"
-msgstr "有効な動作"
-
-msgid "Clean"
-msgstr "消去"
-
-msgid "New"
-msgstr "新着"
-
-msgid "Received"
-msgstr "受信"
-
-msgid "Subject"
-msgstr "件名"
-
-msgid "Content"
-msgstr "内容"
-
-msgid "Send message"
-msgstr "メッセージを送信"
-
-msgid "Your inbox is empty."
-msgstr "受信箱は空です。"
-
-msgid "MUC administration"
-msgstr "MUC管理"
-
-msgid "You administrate this room"
-msgstr "あなたはこのルームを管理します"
-
-msgid "Enter new subject"
-msgstr "新しい題を入力してください"
-
-msgid "Configuration"
-msgstr "設定"
-
-msgid "Authorizations"
-msgstr "承認"
-
-msgid "Member list"
-msgstr "メンバー一覧"
-
-msgid "Owner list"
-msgstr "主宰者一覧"
-
-msgid "Administrator list"
-msgstr "管理者一覧"
-
-msgid "Outcast list"
-msgstr ""
-
-msgid "Add an input"
-msgstr "入力を追加"
-
-msgid "Destroy this MUC"
-msgstr "このMUCを閉鎖する"
-
-msgid "Yes, let's do it!"
-msgstr "はい、そうします!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "友達は、会話に注意を払っています。"
-
-msgid "Your friend is writing a message..."
-msgstr "友達はメッセージを書いています..."
-
-msgid "Your friend stopped writing a message."
-msgstr "友達はメッセージ書く手をちょっと止めています。"
-
-msgid "Your friend is doing something else."
-msgstr "友達は何か別のことをしています。"
-
-msgid "Your friend closed the chat."
-msgstr "友達はこのチャットを閉じました。"
-
-msgid "Requesting this service..."
-msgstr "サービスを要求中..."
-
-msgid "Loading"
-msgstr "読み込み中"
-
-msgid "changed his/her nickname to %s"
-msgstr "相手のニックネームは %s に変更されました"
-
-msgid "joined the chat room"
-msgstr "談話室の参加しました"
-
-msgid "left the chat room"
-msgstr "談話室から退出しました"
-
-msgid "%s left"
-msgstr ""
-
-msgid "%s joined"
-msgstr ""
-
-msgid "no status"
-msgstr "ステータスがありません"
-
-msgid "has been kicked"
-msgstr "蹴り出されました"
-
-msgid "has been banned"
-msgstr "締め出されました"
-
-msgid "no reason"
-msgstr "理由なし"
-
-msgid "Communicate with the entire world!"
-msgstr "全世界とコミュニケーション!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-"Jappixはすばらしいソーシャルプラットフォームです。どこにいてもいつでもアクセ"
-"スでき、誰とでもコミュニケートできます。"
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-"ここでは XMPPネットワークを使用する何百万人のユーザーと連絡を取ることが出来ま"
-"す。コミュニティーへの参加は自由です!"
-
-msgid "Hi there!"
-msgstr "こんにちは!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr "既存のXMPPアカウントでログインするか、無料でアカウント作成できます!"
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-"既存のXMPPアカウントでログインしてください。また、%s を使ってグループチャット"
-"に参加できます。"
-
-msgid "Previous"
-msgstr "戻る"
-
-msgid "General"
-msgstr "一般"
-
-msgid "Advanced"
-msgstr "高度"
-
-msgid "Resource"
-msgstr "リソース"
-
-msgid "Priority"
-msgstr "優先度"
-
-msgid "Low"
-msgstr "低"
-
-msgid "Medium"
-msgstr "中"
-
-msgid "High"
-msgstr "高"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-"参加したいグループチャットと、そこで使いたいニックネームを入力してくださ"
-"い。%s に戻ることもできます。"
-
-msgid "login page"
-msgstr "ログインページ"
-
-msgid "Share this link with your friends:"
-msgstr "次のリンクを友達と共有する:"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-"友達とあなたのソーシャルクラウドに参加するには、新規にXMPPアカウントを登録し"
-"ます。簡単です!"
-
-msgid "Required"
-msgstr "必須"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "登録されました。あなたのXMPPアドレスは:"
-
-msgid "Manager"
-msgstr "マネージャー"
-
-msgid "Encrypted"
-msgstr "暗号化"
-
-msgid "Unencrypted"
-msgstr "非暗号化"
-
-msgid "Where are you?"
-msgstr "どこにいますか?"
-
-msgid "What's up with you?"
-msgstr "なにしてる?"
-
-msgid "Type something you want to share with your friends..."
-msgstr "友達と共有したいものを入力…"
-
-msgid "Fetching the social channel..."
-msgstr "ソーシャルチャンネルを取得..."
-
-msgid "You are synchronized with your network."
-msgstr "ネットワークと同期しました。"
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "何も送信できません: あなたはお知らせのみ受信できます!"
-
-msgid "Media viewer"
-msgstr "メディアビューア"
-
-msgid "Browse"
-msgstr "ブラウズ"
-
-msgid "Command"
-msgstr "コマンド"
-
-msgid "Subscribe"
-msgstr "購読"
-
-msgid "Join"
-msgstr "参加"
-
-msgid "Automatic"
-msgstr "自動"
-
-msgid "Search"
-msgstr "検索"
-
-msgid "No result!"
-msgstr "結果はありません!"
-
-msgid "No notifications."
-msgstr "お知らせはありません。"
-
-msgid "would like to add you as a friend."
-msgstr "はあなたを友達に追加したがっています。"
-
-msgid "would like you to join this chatroom:"
-msgstr "はあなたを談話室に招待しています:"
-
-msgid "Do you accept?"
-msgstr "了承しますか?"
-
-msgid "Yes"
-msgstr "はい"
-
-msgid "No"
-msgstr "いいえ"
-
-msgid "would like to get authorization."
-msgstr "は承認を求めています。"
-
-msgid "would like to send you a file: “%s”."
-msgstr "このファイルを送りたいと思います: “%s”"
-
-msgid "has received a file exchange request: “%s”."
-msgstr "ファイル交換の要求を受け取りました: “%s”"
-
-msgid "has accepted to receive your file: “%s”."
-msgstr "このファイルを受け取りを承諾しました: “%s”"
-
-msgid "has rejected to receive your file: “%s”."
-msgstr "このファイルを受け取りを拒否しました: “%s”"
-
-msgid "could not receive your file: “%s”."
-msgstr "このファイルを受け取ることができませんでした: “%s”"
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr "%s に友達申請をしますか?"
-
-msgid "commented an item you follow: “%s”."
-msgstr "“%s”のコメントをフォローする"
-
-msgid "liked your post: “%s”."
-msgstr "“%s”にいいねを送信する"
-
-msgid "quoted you somewhere: “%s”."
-msgstr "“%s”を引用する"
-
-msgid "published on your wall: “%s”."
-msgstr "“%s”を公開する。"
-
-msgid "tagged you in a photo (%s)."
-msgstr "写真(%s)にタグを付けました。"
-
-msgid "tagged you in a video (%s)."
-msgstr "映像(%s)にタグを付けました。"
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-
-msgid "Open"
-msgstr ""
-
-msgid "Show"
-msgstr "見る"
-
-msgid "Hide"
-msgstr "隠す"
-
-msgid "Submit"
-msgstr "送信"
-
-msgid "Client"
-msgstr "クライアント"
-
-msgid "System"
-msgstr "システム"
-
-msgid "Local time"
-msgstr "ローカル時間"
-
-msgid "Comments"
-msgstr "コメント"
-
-msgid "User profile"
-msgstr "ユーザー情報"
-
-msgid "See his/her position on the globe"
-msgstr "位置を見る"
-
-msgid "Confirm"
-msgstr "確認"
-
-msgid "anonymous mode"
-msgstr "匿名モード"
-
-msgid "Groups"
-msgstr "グループ"
-
-msgid "Unclassified"
-msgstr "未分類"
-
-msgid "Authorize"
-msgstr "承認"
-
-msgid "Ask for authorization"
-msgstr "承認を求める"
-
-msgid "Unblock"
-msgstr "ブロック解除"
-
-msgid "Prohibit"
-msgstr "禁止する"
-
-msgid "Block"
-msgstr "ブロック"
-
-msgid "Chat"
-msgstr "チャット"
-
-msgid "Groupchat"
-msgstr "グループチャット"
-
-msgid "Jappix Mobile"
-msgstr "Jappixモバイル"
-
-msgid "Desktop"
-msgstr "デスクトップ"
-
-msgid "Mobile"
-msgstr "モバイル"
-
-msgid "Please wait..."
-msgstr "しばらくお待ちください..."
-
-msgid "Please enable JavaScript"
-msgstr "JavaScriptを有効にしてください"
-
-msgid "Show comments"
-msgstr "コメントを見る"
-
-msgid "Loading comments..."
-msgstr "コメントをロード中…"
-
-msgid "Could not get the comments!"
-msgstr "コメントを取得できませんでした。"
-
-msgid "Comments locked!"
-msgstr "コメントがロックされています"
-
-msgid "Type your comment here..."
-msgstr "ここにコメントを入力してください…"
-
-msgid "Your channel"
-msgstr "チャンネル"
-
-msgid "Channel of"
-msgstr "チャンネル: "
-
-msgid "More notices..."
-msgstr "他のお知らせ..."
-
-msgid "Attach a file"
-msgstr "ファイルの添付"
-
-msgid "Send"
-msgstr "送信"
-
-msgid "Unattach the file"
-msgstr "添付ファイルの取り消し"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-"ファイルアップロード中にエラーが発生しました:ファイルサイズが大きいかアップ"
-"ロードが禁止されています"
-
-msgid "Authorization failed"
-msgstr "認証失敗"
-
-msgid "Registration failed, please choose a different username"
-msgstr "登録に失敗しました。別のユーザー名を選んでください。"
-
-msgid "Service unavailable"
-msgstr "サービス不能です。"
-
-msgid "Internal server error, try later"
-msgstr "内部サーバーエラーです。あとで試してください。"
-
-msgid "Your form has been sent."
-msgstr "フォームが送信されました。"
-
-msgid "Application"
-msgstr "アプリケーション"
-
-msgid "Media integration"
-msgstr "メディア統合"
-
-msgid "Keep local chat archives"
-msgstr ""
-
-msgid "XMPP links"
-msgstr "XMPPリンク"
-
-msgid "Open XMPP links with Jappix"
-msgstr "XMPPリンクをJappixで開く"
-
-msgid "changed the subject to:"
-msgstr "題を変更しました:"
-
-msgid "Welcome!"
-msgstr "ようこそ"
-
-msgid "Friends"
-msgstr "友達"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr ""
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-"使用を開始する前に、いくつかの設定を変更し、友達を検索し、プロフィールを設定"
-"する必要があります。"
-
-msgid "Enable notification sounds"
-msgstr "警告音を有効にする"
-
-msgid "Share your position on the globe"
-msgstr "現在位置を共有する"
-
-msgid "Offline friends"
-msgstr "オフラインの友達"
-
-msgid "Don't hide offline friends"
-msgstr "オフラインの友達を隠す"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-"このツールを使ってサーバ上の友達を検索し、すぐに利用したり、あとで追加したり"
-"できます。"
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr "よくできました! あなたは友達とJappixを共有できます。"
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-"セーブボタンを押すとプロファイルエディターが起動します。幸せなお付き合いを!"
-
-msgid "Share Jappix on %s"
-msgstr "Jappixを%sと共有します"
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "私は%sです。オープンソーシャルプラットフォームJappixを使用しています"
-
-msgid "Unknown name"
-msgstr "不明な名前"
-
-msgid "Unknown country"
-msgstr "不明な国名"
-
-msgid "Click to enable"
-msgstr "enableをクリック"
-
-msgid "Click to disable"
-msgstr "disableをクリック"
-
-msgid "Installation"
-msgstr "インストール"
-
-msgid "Jappix installation"
-msgstr "Jappixのインストール"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "Jappixのインストールへようこそ!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-"このツールは、フル機能のXMPPソーシャルプラットフォームJappixのサーバーへのイ"
-"ンストールをサポートします。技術的な知識は必要ありません。"
-
-msgid "Installation Steps:"
-msgstr "インストールのステップ:"
-
-msgid "Welcome"
-msgstr "ようこそ"
-
-msgid "Storage configuration"
-msgstr "ストレージの設定"
-
-msgid "Administrator account"
-msgstr "管理者アカウント"
-
-msgid "Main configuration"
-msgstr "メイン設定"
-
-msgid "Hosts configuration"
-msgstr "ホストの設定"
-
-msgid "Services installation"
-msgstr "サービスのインストール"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-"もし現在の言語があなたの環境(%1s)と異なる場合、Jappixスピーク %2s を作成し"
-"保存してください。"
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"Jappixのインストールや設定のヘルプが必要な場合には、完全なドキュメントを利用"
-"することができます:"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr "個人的なソーシャルクラウドを作成するには、次のステップに移動します!"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr "フォルダは書き込み可能です。続けてください。"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-"Jappixは設定ファイルの管理、新しいプラグインのインストール、アップデートの検"
-"索ができるようにします。そのため、マネージャーにアクセスする管理者アカウント"
-"を作成する必要があります。"
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-"Jappixのインストールが終了しましたら、マネジャーリンクをクリックしてホーム"
-"ページにアクセスしてください。"
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr "何か間違いがあるか、2つのパスワードが一致しません。"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-"Jappixが動作するように設定する必要があります。次の項目を入力してください(通常"
-"はデフォルト値で十分です)。"
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr "値を入力しない場合には、自動的にデフォルト値が設定されます。"
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-"ヘルプが必要ですか? どのようにこの欄に入力するか、ドキュメントページをよく読"
-"んでください。"
-
-msgid "User"
-msgstr "ユーザー"
-
-msgid "Service"
-msgstr "サービス"
-
-msgid "Service name"
-msgstr "サービス名"
-
-msgid "Service description"
-msgstr "サービスの説明"
-
-msgid "Owner name"
-msgstr ""
-
-msgid "Owner website"
-msgstr ""
-
-msgid "Connection"
-msgstr "コネクション"
-
-msgid "Lock the host"
-msgstr "ホストのロック"
-
-msgid "Anonymous mode"
-msgstr "匿名モード"
-
-msgid "HTTP authentication"
-msgstr ""
-
-msgid "Registration allowed"
-msgstr "登録を許可"
-
-msgid "Use the built-in BOSH proxy"
-msgstr ""
-
-msgid "Manager link"
-msgstr "マネージャーリンク"
-
-msgid "Groupchats to join"
-msgstr "参加するグループチャット"
-
-msgid "Suggest groupchats"
-msgstr ""
-
-msgid "Encryption"
-msgstr "暗号化"
-
-msgid "HTTPS storage"
-msgstr "HTTPSストレージ"
-
-msgid "Force HTTPS"
-msgstr "HTTPSを強制的に使用する"
-
-msgid "Compression"
-msgstr "圧縮"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"このページでJappixが接続するホストを設定します。公式サービスホストを使用する"
-"場合は、そのままにして続行してください。"
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"BOSHが何かご存じないかもしれません。これは技術的な制約により必要となるもの"
-"で、JappixクライアントとXMPPサーバーを中継するものです。"
-
-msgid "Main host"
-msgstr "メインホスト"
-
-msgid "Groupchat host"
-msgstr "グループチャットホスト"
-
-msgid "Pubsub host"
-msgstr "Pubsubホスト"
-
-msgid "Anonymous host"
-msgstr "匿名ホスト"
-
-msgid "Directory host"
-msgstr "ディレクトリホスト"
-
-msgid "BOSH host"
-msgstr "BOSHホスト"
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-"Jappixを拡張するためにサーバーに拡張ソフトウェアをインストールすることができ"
-"ます。セキュリティのため、デフォルトの値が変更されている場合があります。"
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-"これを実行するには、サーバーのシェルにアクセスでき、rootとしてログインできる"
-"必要があります。これは任意です。これらのモジュールがなくてもJappixは機能しま"
-"す。しかし、いくつかの機能が無効となります。"
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-"設定が完了したら、Jappixはキャッシュファイルを作成します。これには時間がかか"
-"ります。アプリケーションが表示されるまでボタンを押さずにお待ちください。"
-
-msgid "Thanks for using Jappix!"
-msgstr "Jappixをご利用いただきありがとうございます"
-
-msgid "Next"
-msgstr "次"
-
-msgid "Finish"
-msgstr "完了"
-
-msgid "Check again"
-msgstr "もう一度確認してください"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-"フォルダーに書き込みができません。%s ディレクトリに書き込み権限をセットしてく"
-"ださい。"
-
-msgid "%s is installed on your system."
-msgstr "%s がシステムにインストールされました。"
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr ""
-"%1s はシステムにインストールされていません。%2sをインストールしてください。"
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "PHPの最大アップロードサイズは十分です(%s)。"
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-"PHPの最大アップロードサイズが不足しています(%1s)。%3から%2sの間で設定してくだ"
-"さい。"
-
-msgid "Jappix manager"
-msgstr "Jappixマネージャー"
-
-msgid "Manager access"
-msgstr "マネージャーへアクセス"
-
-msgid "Statistics"
-msgstr "統計情報"
-
-msgid "Hosts"
-msgstr "ホスト"
-
-msgid "Design"
-msgstr "デザイン"
-
-msgid "Repeat"
-msgstr "繰り返し"
-
-msgid "All"
-msgstr "すべて"
-
-msgid "Horizontal"
-msgstr "水平"
-
-msgid "Vertical"
-msgstr "垂直"
-
-msgid "Center"
-msgstr "中"
-
-msgid "Left"
-msgstr "左"
-
-msgid "Right"
-msgstr "右"
-
-msgid "Top"
-msgstr "上"
-
-msgid "Bottom"
-msgstr "下"
-
-msgid "Adapt"
-msgstr "適用"
-
-msgid "Color"
-msgstr "色"
-
-msgid "Users"
-msgstr "ユーザー"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr "制限された領域:認証されたユーザだけがJappixノードを管理できます。"
-
-msgid "Please use the form below to login to the administration panel."
-msgstr "管理パネルにログインするには、下記のフォームを利用してください。"
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-"セキュリティを強化するため、セッションの時間は制限されています。また、ブラウ"
-"ザを閉じるとき、ログアウトされます。"
-
-msgid "Credentials"
-msgstr "資格情報"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "ログアウトしました。さようなら!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr "管理者として認識できませんでした。資格情報を確認してください。"
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr "重要な情報についてJappixが作成した基本統計です。下をご覧ください。"
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr "このツールを使用してJappixノードの設定を変更することが出来ます。"
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-"Jappixノードに保存されているすべてのファイルの管理ができます。サブフォルダー"
-"を選択して、編集を開始!"
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr "Jappixは完全にカスタマイズ可能です。右側でデザインをここ変更できます。"
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr "画像の形式が正しくありません。PNG,GIFまたはJPGを使用してください。"
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr "正しい画像の形式ではありません。PNGフォーマットを使用してください。"
-
-msgid "The image could not be received, would you mind retry?"
-msgstr "画像を受け取ることができませんでした。もういちど試しますか?"
-
-msgid "Your service logo has been successfully changed!"
-msgstr "サービスロゴを変更しました。"
-
-msgid "Your image was added to the list!"
-msgstr "画像をリストに追加しました!"
-
-msgid "Changes saved!"
-msgstr "変更を保存しました。"
-
-msgid "Logo"
-msgstr "ロゴ"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-"サービスロゴをデフォルトから独自のものに変更できます。サイズと色に気をつけ"
-"て!"
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr "それぞれのロゴを推奨の最大のピクセルサイズでアップロード"
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-"ロゴフォーマットはPNG形式を使用する必要があります。フィールドが空欄の場合はロ"
-"ゴは変更されません。"
-
-msgid "Remove this logo"
-msgstr "このロゴを削除"
-
-msgid "View this logo"
-msgstr "このロゴを見る"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-"一人または複数のJappixノードの管理者が定義することができます。パスワードを変"
-"更することもできます。"
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-"Jappixノードのアップデート、またはバージョンのチェックができます。最新バー"
-"ジョンの情報(英語)も表示されます。"
-
-msgid "Access statistics"
-msgstr "アクセス統計情報"
-
-msgid "Share statistics"
-msgstr "共有統計情報"
-
-msgid "Other statistics"
-msgstr "その他の統計情報"
-
-msgid "January"
-msgstr "1月"
-
-msgid "February"
-msgstr "2月"
-
-msgid "March"
-msgstr "3月"
-
-msgid "April"
-msgstr "4月"
-
-msgid "May"
-msgstr "5月"
-
-msgid "June"
-msgstr "6月"
-
-msgid "July"
-msgstr "7月"
-
-msgid "August"
-msgstr "8月"
-
-msgid "September"
-msgstr "9月"
-
-msgid "October"
-msgstr "10月"
-
-msgid "November"
-msgstr "11月"
-
-msgid "December"
-msgstr "12月"
-
-msgid "Monday"
-msgstr "月曜日"
-
-msgid "Tuesday"
-msgstr "火曜日"
-
-msgid "Wednesday"
-msgstr "水曜日"
-
-msgid "Thursday"
-msgstr "木曜日"
-
-msgid "Friday"
-msgstr "金曜日"
-
-msgid "Saturday"
-msgstr "土曜日"
-
-msgid "Sunday"
-msgstr "日曜日"
-
-msgid "Total"
-msgstr "合計"
-
-msgid "Archives"
-msgstr ""
-
-msgid "Music"
-msgstr "音楽"
-
-msgid "Backgrounds"
-msgstr "背景"
-
-msgid "Share"
-msgstr "共有"
-
-msgid "Background"
-msgstr "背景"
-
-msgid "Notice"
-msgstr "お知らせ"
-
-msgid "Your design preferences have been saved!"
-msgstr "デザイン環境設定を保存しました!"
-
-msgid "Please check your inputs: something is missing!"
-msgstr "入力項目を確認してください:何かが不足しています。"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-"Jappixの背景を好みの色やアップロードした画像に変更することができます。あなた"
-"の感性に合わせてください!"
-
-msgid "Use default background"
-msgstr "デフォルトの背景を使う"
-
-msgid "Use your own image"
-msgstr "独自の画像を使う"
-
-msgid "Select a background to use and change the display options."
-msgstr "使いたい背景を選択し、表示オプションを変更します。"
-
-msgid "Use your own color"
-msgstr "独自の色を使う"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr "背景で使用したい色を16進数で入力してください。"
-
-msgid "Manage backgrounds"
-msgstr "背景の管理"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-"新しい背景を追加することができます。正しい形式の画像をアップロードしてくださ"
-"い。"
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr "背景を削除したい場合は、下のブラウザーを使用してください。"
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-"すべてのユーザーに対するホームページのお知らせ(警告や重要なメッセージ、また広"
-"告など)を定義できます。"
-
-msgid "Simple notice"
-msgstr "簡単なお知らせ"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr "このお知らせは簡単なテキストだけです。コードを書くことはできません!"
-
-msgid "Advanced notice"
-msgstr "高度なお知らせ"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-"お知らせをHTML,CSS、JavaScriptでカスタマイズできます。コード形式にする必要が"
-"あります。"
-
-msgid "Available updates"
-msgstr "利用可能なアップデート"
-
-msgid "What's new?"
-msgstr "最新情報"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr ""
-"ストレージフォルダーに書き込みができません。書き込みを許可してください!"
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr "%1s の原因はプロキシーです。%2s の値を %3s にしてください。"
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-"開発バージョンのJappixを使用しています。%s を実行してリポジトリを更新してくだ"
-"さい。"
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-"新しいバージョンのJappixがあります。最新情報を確認して、アップデートしてくだ"
-"さい。"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr ""
-"期限切れのバージョンです。ここをクリックして%sにバージョンアップしてくださ"
-"い。"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"バージョンは最新のようです。バージョンを手動でチェックする場合にはクリックし"
-"てください。"
-
-msgid "Check for updates"
-msgstr "アップデートをクリックしてください"
-
-msgid "Update in progress"
-msgstr "アップデートしています"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr ""
-"Jappixをアップデートしました。最新バージョンで動作しています。お楽しみくださ"
-"い。"
-
-msgid "The update has failed! Please try again later."
-msgstr "アップデートに失敗しました!再度試してください。"
-
-msgid "Downloading package..."
-msgstr "パッケージをダウンロード中..."
-
-msgid "Removing current Jappix system files..."
-msgstr "現在のJappixシステムファイルを削除しています..."
-
-msgid "Extracting package..."
-msgstr "パッケージを抽出中..."
-
-msgid "Regenerating storage folder tree..."
-msgstr "ストレージフォルダーツリーを再構成中..."
-
-msgid "Jappix is now up to date!"
-msgstr "Jappixをアップデートしました!"
-
-msgid "Aborted: socket error!"
-msgstr "中止:ソケットエラー"
-
-msgid "Aborted: buffer error!"
-msgstr "中止:バッファーエラー"
-
-msgid "Aborted: everything is not writable!"
-msgstr "中止:すべて書き込みできません"
-
-msgid "Aborted: could not extract the package!"
-msgstr "中止:パッケージを抽出することができませんでした。"
-
-msgid "Visits"
-msgstr "訪問"
-
-msgid "Daily"
-msgstr "日"
-
-msgid "Weekly"
-msgstr "週"
-
-msgid "Monthly"
-msgstr "月"
-
-msgid "Yearly"
-msgstr "年"
-
-msgid "Size"
-msgstr "サイズ"
-
-msgid "Clean everything"
-msgstr "すべて消去"
-
-msgid "Purge cache"
-msgstr "キャッシュをパージ"
-
-msgid "Purge logs"
-msgstr "ログをパージ"
-
-msgid "Purge sent files"
-msgstr "送信ファイルのパージ"
-
-msgid "Purge updates"
-msgstr "アップデートをパージ"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "ストレージフォルダーを空にしました!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-"Jappixノードの快適さを維持するために、定期的にストレージフォルダーをきれいに"
-"してください!"
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-"Jappixに音楽(Ogg Vorbis, MP3 または WAV 形式)をアップロードして聞くことができ"
-"ます!"
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr "アップロードするファイルは%sより小さくする必要があります。"
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-"ユーザストアの保持期間を調整したり、望ましくないコンテンツを削除できます。"
-
-msgid "Title"
-msgstr "タイトル"
-
-msgid "Artist"
-msgstr "アーティスト"
-
-msgid "Album"
-msgstr "アルバム"
-
-msgid "File"
-msgstr "ファイル"
-
-msgid "Upload"
-msgstr "アップロード"
-
-msgid "The folder is empty."
-msgstr "フォルダーは空です。"
-
-msgid "The music could not be received, please retry!"
-msgstr "音楽を受信することができませんでした。再受信してください。"
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-"音楽ファイルが有効ではありません。エンコードはOgg Vorbis, MP3又はWAVを使用し"
-"てください!"
-
-msgid "Your music has been added!"
-msgstr "音楽を追加しました"
-
-msgid "The selected elements have been removed."
-msgstr "選択された要素は削除しました。"
-
-msgid "You must select elements to remove!"
-msgstr "削除する要素を選択する必要があります。"
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-"新しいユーザーを追加したりパスワードの変更ができます(既存のユーザー名を入力し"
-"てください)。複雑なパスワードを設定してください!"
-
-msgid "Manage"
-msgstr "管理"
-
-msgid "List"
-msgstr "リスト"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-
-msgid "The user has been added!"
-msgstr "ユーザを追加しました。"
-
-msgid "The chosen users have been removed."
-msgstr "選択したユーザを削除しました。"
-
-msgid "You must select one or more users to be removed!"
-msgstr "削除するには1つまたは複数のユーザを選択する必要があります。"
-
-msgid "Yesterday"
-msgstr "昨日"
-
-msgid "%s days ago"
-msgstr "%s 日前"
-
-msgid "User currently active"
-msgstr "ユーザは現在アクティブです。"
-
-msgid "Last seen: %s"
-msgstr "最終確認: %s"
-
-msgid "Inactive since: %s"
-msgstr "%s からアクティブでない"
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr "友達はあなたのメッセージを受け取っていないようです。"
-
-msgid "Static content server"
-msgstr "スタティックコンテンツサーバ"
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr "“%2s” %1s はスタティックコンテンツサーバです。"
-
-msgid "User uploads server"
-msgstr "ユーザーアップロードサーバー"
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr "“%2s”を%1sサーバにアップロードしました。"
-
-msgid "Suggested friends"
-msgstr "友達の候補"
-
-msgid "Check all"
-msgstr "すべてチェック"
-
-msgid "Uncheck all"
-msgstr "すべてチェックをはずす"
-
-msgid "Choose"
-msgstr "選択"
-
-msgid "List name"
-msgstr "名前の一覧"
-
-msgid "Allow"
-msgstr "許可"
-
-msgid "Deny"
-msgstr "不許可"
-
-msgid "Group"
-msgstr "グループ"
-
-msgid "Subscription"
-msgstr "申込"
-
-msgid "Both"
-msgstr "相互"
-
-msgid "From"
-msgstr "から"
-
-msgid "Everybody"
-msgstr "みんな"
-
-msgid "Send messages"
-msgstr "メッセージ送信"
-
-msgid "Send queries"
-msgstr "クエリー送信"
-
-msgid "See my status"
-msgstr "自分の在席状況を見る"
-
-msgid "Send his/her status"
-msgstr "相手に在席状況を送る"
-
-msgid "Everything"
-msgstr "全部"
-
-msgid "Item"
-msgstr "アイテム"
-
-msgid "Order"
-msgstr "順位"
-
-msgid "Active for this session"
-msgstr "セッションがアクティブになりました"
-
-msgid "Always active"
-msgstr "常にアクティブ"
-
-msgid "User directory"
-msgstr "ユーザーディレクトリ"
-
-msgid "Search a friend"
-msgstr "友達を検索"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-"要求されたリクエストは、受信者又またはサーバに実装されていないため、処理する"
-"ことができません。"
-
-msgid "Send him/her a message"
-msgstr "相手にメッセージを送る"
-
-msgid "Start a chat with him/her"
-msgstr "相手とチャットを始める"
-
-msgid "Available shortcuts:"
-msgstr "使用可能なショートカット:"
-
-msgid "%s removes the chat logs"
-msgstr "%s はチャットログを削除します"
-
-msgid "%s joins a groupchat"
-msgstr "%s はグループチャットに参加します"
-
-msgid "%s closes the chat"
-msgstr "%s はチャットを閉じます"
-
-msgid "%s shows the user profile"
-msgstr "%s のユーザプロフィールを見ます"
-
-msgid "%s sends a message to the room"
-msgstr "%s は談話室にメッセージを送信します"
-
-msgid "%s changes your nickname"
-msgstr "%s はニックネームを変更します"
-
-msgid "%s sends a message to someone in the room"
-msgstr "%s は談話室の誰かにメッセージを送ります"
-
-msgid "%s changes the room topic"
-msgstr "%s は部屋のトピックを変更します"
-
-msgid "%s kicks a user of the room"
-msgstr ""
-
-msgid "%s bans a user of the room"
-msgstr ""
-
-msgid "%s invites someone to join the room"
-msgstr "%s は誰かを談話室に招待します"
-
-msgid "Public profile"
-msgstr "公開プロフィール"
-
-msgid "Your profile anywhere on the Web."
-msgstr ""
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-
-msgid "Yay, let's create your public profile!"
-msgstr ""
-
-msgid "Enable my public profile"
-msgstr ""
-
-msgid "Jappix for your phone"
-msgstr "電話用Jappix"
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr ""
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-
-msgid "You haven't provided any file to download"
-msgstr ""
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr ""
-
-msgid "Woah this file isn't found, please double check"
-msgstr ""
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr ""
-
-msgid "Statistics are currently disabled in the settings."
-msgstr ""
-
-msgid "New event!"
-msgstr ""
-
-msgid "%s is typing..."
-msgstr ""
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-
-msgid "Username"
-msgstr ""
-
-msgid "Enter password"
-msgstr ""
-
-msgid "Once again..."
-msgstr ""
-
-msgid "Code"
-msgstr ""
-
-msgid "Security code"
-msgstr ""
-
-msgid "Advertising space available!"
-msgstr ""
-
-msgid "Advertise here"
-msgstr ""
-
-msgid "Analytics (%s)"
-msgstr ""
-
-msgid "Track visits"
-msgstr ""
-
-msgid "Piwik URL"
-msgstr ""
-
-msgid "Piwik tracking ID"
-msgstr ""
-
-msgid "Advertising (%s)"
-msgstr ""
-
-msgid "Enable ads"
-msgstr ""
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "Content ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "Mute"
-msgstr ""
-
-msgid "Unmute"
-msgstr ""
-
-msgid "Is calling you"
-msgstr ""
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr ""
-
-msgid "Waiting..."
-msgstr ""
-
-msgid "Ringing..."
-msgstr ""
-
-msgid "Declined the call"
-msgstr ""
-
-msgid "Call error"
-msgstr ""
-
-msgid "Ended the call"
-msgstr ""
-
-msgid "Call ended"
-msgstr ""
-
-msgid "Call canceled"
-msgstr ""
-
-msgid "Canceled the call"
-msgstr ""
-
-msgid "Is already in a call"
-msgstr ""
-
-msgid "Ending call..."
-msgstr ""
-
-msgid "Accept"
-msgstr ""
-
-msgid "Decline"
-msgstr ""
-
-msgid "Okay"
-msgstr ""
-
-msgid "Retry"
-msgstr ""
-
-msgid "Audio Call"
-msgstr ""
-
-msgid "Video Call"
-msgstr ""
diff --git a/i18n/lb/LC_MESSAGES/main.mo b/i18n/lb/LC_MESSAGES/main.mo
deleted file mode 100644
index 0d7b7ed8..00000000
--- a/i18n/lb/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/lb/LC_MESSAGES/main.po b/i18n/lb/LC_MESSAGES/main.po
deleted file mode 100644
index 7f96bc9c..00000000
--- a/i18n/lb/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2533 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-# Joé BRENDEL <joe.brendel.ronck@gmail.com>, 2013
-# Kahr Patrick <patrick@nerds.lu>, 2013-2014
-# Thull Michel, 2013
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-08-09 15:36+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/jappix/"
-"language/lb/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: lb\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "Standart:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"Däin Browser ënnerstëtzt keen JavaScript, an dofier kann Jappix net gestart "
-"gin! Änner daat w.e.g."
-
-msgid "Social channel, chat and more."
-msgstr "Social Channel, Chat a méi."
-
-msgid "Create your public profile."
-msgstr "Erstell däin öffentlechen Profil."
-
-msgid "A mini-chat for your website."
-msgstr "E Mini-Chat fier deng Internetsäit"
-
-msgid "Get Jappix, get support."
-msgstr "Jappix benotzen, Ënnerstetzung kréien."
-
-msgid "Statistics around Jappix."
-msgstr "Statistiken iwwert Jappix."
-
-msgid "Legal disclaimer for Jappix."
-msgstr "Disclaimer fier Jappix"
-
-msgid "Download Jappix for free."
-msgstr "Jappix gratis eroflueden."
-
-msgid "Contribute to the Jappix code."
-msgstr "Dro eppes zum Jappix Code bäi."
-
-msgid "Jappix for your company."
-msgstr "Jappix fier Äer Firma."
-
-msgid "Find a public Jappix node."
-msgstr "En öffentlechen Jappix node fannen."
-
-msgid "Credits"
-msgstr "Credits"
-
-msgid "Association"
-msgstr "Associatioun"
-
-msgid "Web agency"
-msgstr "Webagentur"
-
-msgid "Legal"
-msgstr "Rechtleches"
-
-msgid "Legal disclaimer"
-msgstr "Disclaimer"
-
-msgid "Terms of use and legal"
-msgstr "Benotzerbedingungen a Rechtleches"
-
-msgid "Owner"
-msgstr "Besëtzer"
-
-msgid "Node owner"
-msgstr "Noder Besëtzer"
-
-msgid "By using our service, you accept %s."
-msgstr "Wann dier éisen Service benotzt, stëmmt dier %s zou."
-
-msgid "our terms of use"
-msgstr "eis Benotzerbedingungen"
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Jappix gouf wéinst engem Netzwierkproblem, engem Fehler oder engem "
-"mësslongenen Login (kontrolléier deng Zougangsdonnéen) ënnerbrach, "
-"entschëlleg d'Stéirung."
-
-msgid "The element list on this server could not be obtained!"
-msgstr "Konnt d'Lëscht vun den Elementer op dësem Server net fannnen!"
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"Däin Passwuert gouf geännert, du kanns dech elo mat dengen neien "
-"Zougangsdonnéen aloggen."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "Däin XMPP Kont gouf geläscht, Äddi!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "Du hues dech aus dengem XMPP Kont ausgeloggt, e schéinen Daag nach!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr "Den Chat-Raum deem dier bäitrieden wollt, schéngt et net ze ginn."
-
-msgid "The groupchat has been removed."
-msgstr "Den Gruppenchat ass geläscht ginn."
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "De Benotzer deens de erreechen wëllt as fier de Moment net am Raum."
-
-msgid "Please enter the group chat address to join."
-msgstr "Gëff w.e.g. d'Adress vum Gruppenchat deems de bäitrieden wëllt an."
-
-msgid "Please enter your nickname to join %s."
-msgstr "Gëff w.e.g. däin Benotzernumm an fier %s bäizetrieden."
-
-msgid "This room (%s) is protected with a password."
-msgstr "Dëse Raum (%s) as mat engem Passwuert geschützt. "
-
-msgid "Your browser is out of date!"
-msgstr "Däin Browser as net méi aktuell!"
-
-msgid "Last %s version is better!"
-msgstr "Déi neisten %s Versioun as besser!"
-
-msgid "Login"
-msgstr "Aloggen"
-
-msgid "Register"
-msgstr "Registréieren"
-
-msgid "Here we go!"
-msgstr "A lass!"
-
-msgid "Server"
-msgstr "Server"
-
-msgid "Password"
-msgstr "Passwuert"
-
-msgid "Remember me"
-msgstr "Verhalen"
-
-msgid "This tool has been disabled!"
-msgstr "Dësen Tool as desaktivéiert gin!"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr ""
-"Du goufs wéinst engem Netzwierkproblem ausgeloggt. Waat wëlls de elo maachen?"
-
-msgid "Reconnect"
-msgstr "Frësch verbannen"
-
-msgid "Messages"
-msgstr "Messagen"
-
-msgid "Profile"
-msgstr "Profil"
-
-msgid "Options"
-msgstr "Optiounen"
-
-msgid "Disconnect"
-msgstr "Ausloggen"
-
-msgid "Filter"
-msgstr "Filter"
-
-msgid "Add a friend"
-msgstr "E Kolleg adden"
-
-msgid "Your groupchats"
-msgstr "Deng Gruppenchats"
-
-msgid "Audio/video conference"
-msgstr ""
-
-msgid "Launch a group call"
-msgstr ""
-
-msgid "Audio conference"
-msgstr ""
-
-msgid "Video conference"
-msgstr ""
-
-msgid "Conference call"
-msgstr ""
-
-msgid "Manage your favorite groupchats"
-msgstr "Organiséier deng Gruppenchats"
-
-msgid "More stuff"
-msgstr "Méi"
-
-msgid "Show all friends"
-msgstr "All Kollegen"
-
-msgid "Only show connected friends"
-msgstr "Nëmmen déi Kollegen déi online sin"
-
-msgid "Groupchat presence messages"
-msgstr "Gruppenchat-Präsenz Messagen"
-
-msgid "No chat images auto-load"
-msgstr "Chat Biller net automatesch lueden"
-
-msgid "Message archives"
-msgstr "Noriichtenarchiv"
-
-msgid "Date"
-msgstr "Datum"
-
-msgid "A short message?"
-msgstr "Eng kuerz Noriicht?"
-
-msgid "How are you?"
-msgstr "Wéi geet et dier?"
-
-msgid "What are you doing?"
-msgstr "Waat méchs du grad?"
-
-msgid "Join a chat"
-msgstr "Engem Chat bäitrieden"
-
-msgid "Status"
-msgstr "Status"
-
-msgid "Available"
-msgstr "Verfügbar"
-
-msgid "Talkative"
-msgstr "Gespréicheg"
-
-msgid "Away"
-msgstr "Fort"
-
-msgid "Not available"
-msgstr "Net verfügbar"
-
-msgid "Busy"
-msgstr "Beschäftegt"
-
-msgid "Offline"
-msgstr "Offline"
-
-msgid "Mood"
-msgstr "Laun"
-
-msgid "None"
-msgstr "Näicht"
-
-msgid "Crazy"
-msgstr "Verréckt"
-
-msgid "Excited"
-msgstr "Opgereegt"
-
-msgid "Playful"
-msgstr "Verspillt"
-
-msgid "Happy"
-msgstr "Frou"
-
-msgid "Shocked"
-msgstr "Schockéiert"
-
-msgid "Hot"
-msgstr "Hot"
-
-msgid "Sad"
-msgstr "Traureg"
-
-msgid "Amorous"
-msgstr "Verléiwt"
-
-msgid "Confident"
-msgstr "Zouversiichtlech"
-
-msgid "Activity"
-msgstr "Aktivitéit"
-
-msgid "Chores"
-msgstr "Aufgaben"
-
-msgid "Drinking"
-msgstr "Amgaang ze drénken"
-
-msgid "Eating"
-msgstr "Amgaang z'iessen"
-
-msgid "Exercising"
-msgstr "Amgaang Sport ze maachen"
-
-msgid "Grooming"
-msgstr "Grooming"
-
-msgid "Appointment"
-msgstr "Rendez-Vous"
-
-msgid "Inactive"
-msgstr "Inaktiv"
-
-msgid "Relaxing"
-msgstr "Op der Rascht"
-
-msgid "Talking"
-msgstr "Amgaang ze schwätzen"
-
-msgid "Traveling"
-msgstr "Op der Rees "
-
-msgid "Working"
-msgstr "Amgaang ze schaffen"
-
-msgid "View profile"
-msgstr "Profil ukucken"
-
-msgid "This is a repeat from %s"
-msgstr "Dëst ass eng Widderhuelung vum %s"
-
-msgid "Repeat this notice"
-msgstr "Dës Notiz widderhuelen"
-
-msgid "Remove this notice"
-msgstr "Dës Notiz läschen"
-
-msgid "Your profile"
-msgstr "Däin Profil"
-
-msgid "Identity"
-msgstr "Identitéit"
-
-msgid "Profile image"
-msgstr "Profilbild"
-
-msgid "Others"
-msgstr "Anerer"
-
-msgid "Other"
-msgstr "Aaneres"
-
-msgid "Personal"
-msgstr "Perséinlech"
-
-msgid "Complete name"
-msgstr "Kompletten Numm"
-
-msgid "Nickname"
-msgstr "Benotzernumm"
-
-msgid "First name"
-msgstr "Virnumm"
-
-msgid "Last name"
-msgstr "Familiennumm"
-
-msgid "Date of birth"
-msgstr "Gebuertsdatum"
-
-msgid "Contact"
-msgstr "Kontakt"
-
-msgid "E-mail"
-msgstr "E-mail"
-
-msgid "Phone"
-msgstr "Telefon"
-
-msgid "Website"
-msgstr "Internetsäit"
-
-msgid "Current"
-msgstr "Aktuell"
-
-msgid "Delete"
-msgstr "Läschen"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr "Waat eng Schan! Du hues nach keen Profilbild!"
-
-msgid "Address"
-msgstr "Adress"
-
-msgid "Street"
-msgstr "Strooss"
-
-msgid "City"
-msgstr "Uertschaft"
-
-msgid "Postal code"
-msgstr "Postleitzuel"
-
-msgid "Country"
-msgstr "Land"
-
-msgid "Biography"
-msgstr "Biografie"
-
-msgid "Important notice"
-msgstr "Wichteg Matdeelung"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-"Sidd virsiichteg mat den Informatiounen dei der an Äerem Profil ugitt, se "
-"kéinnten fier Jiddereen zougänglech sin (och fier Leit, bei deenen der et "
-"nët wëllt)."
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr ""
-"Net alles as privat bei XMPP; daat heiten, däin öffentlechen Profil (vCard), "
-"as eng vun deene Saachen, ."
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"Et gëtt staark rekommandéiert e Profilbild eropzelueden (%s Maximum), ewéi z."
-"B. eng Foto vun dier selwer, esou kennen deng Kollegen dech méi einfach "
-"erëmerkennen."
-
-msgid "Save"
-msgstr "Späicheren"
-
-msgid "Cancel"
-msgstr "Ofbriechen"
-
-msgid "Edit options"
-msgstr "Optiounen änneren"
-
-msgid "Channel"
-msgstr "Channel"
-
-msgid "Commands"
-msgstr "Kommandoen"
-
-msgid "Sounds"
-msgstr "Téin"
-
-msgid "Privacy"
-msgstr "Privatsphär"
-
-msgid "Message archiving"
-msgstr "Noriichtenarchivéirung"
-
-msgid "Store an history of your chats"
-msgstr "Späicher de Verlaaf vun dengen Chats"
-
-msgid "Geolocation"
-msgstr "Geolocalisatioun"
-
-msgid "Disabled"
-msgstr "Ausgeschalt"
-
-msgid "Store all chats"
-msgstr "All Chats ofspäicheren"
-
-msgid "Store friend chats"
-msgstr "Späicher d'chats vun Frënn"
-
-msgid "Remove all archives"
-msgstr "All Archiver läschen"
-
-msgid "Empty"
-msgstr "Eidel maachen"
-
-msgid "Empty channel"
-msgstr "Channel eidel maachen"
-
-msgid "Persistent"
-msgstr "Dauerhaft"
-
-msgid "Maximum notices"
-msgstr "Maximum un Notizen"
-
-msgid "Account"
-msgstr "Kont"
-
-msgid "Change password"
-msgstr "Passwuert änneren"
-
-msgid "Delete account"
-msgstr "Kont läschen"
-
-msgid "Old"
-msgstr "Al"
-
-msgid "New (2 times)"
-msgstr "Néi (2 mol)"
-
-msgid "Suggested chatrooms"
-msgstr "Fiergeschloen Chat-Raim"
-
-msgid "Skip"
-msgstr "Iwwersprangen"
-
-msgid "Continue"
-msgstr "Weiderfueren"
-
-msgid "To"
-msgstr "Un"
-
-msgid "Close"
-msgstr "Zoumaachen"
-
-msgid "unknown"
-msgstr "onbekannt"
-
-msgid "Unavailable"
-msgstr "net ze errechen"
-
-msgid "is now"
-msgstr "as elo"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Waart w.e.g. während däin Avatar eropgelueden gëtt..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "Hei as et! E schéint neit Profilbild!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr ""
-"D'Bildformat gëtt net ennerstëtzt oder d'Bild huet net déi richteg Gréisst."
-
-msgid "Reply"
-msgstr "Äntweren"
-
-msgid "Error"
-msgstr "Fehler"
-
-msgid "Click here to solve the error"
-msgstr "Klick hei fier de Problem ze behiewen"
-
-msgid "You"
-msgstr "Du"
-
-msgid "Remove"
-msgstr "Läschen"
-
-msgid "Rename"
-msgstr "Numm änneren"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Moien, mäin Numm as %s, ech géif dech gäer als Kolleg adden."
-
-msgid "Smiley insertion"
-msgstr "Smiley'en"
-
-msgid "Change style"
-msgstr "Style änneren"
-
-msgid "Text in bold"
-msgstr "Text fëttgedréckt"
-
-msgid "Text in italic"
-msgstr "Text a Kursivschrëft"
-
-msgid "Underlined text"
-msgstr "Text ënnerstrach"
-
-msgid "Send a file"
-msgstr "eng Datei schécken"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr ""
-"Soubal se eropgelueden as, kritt däin Kolleg daat ugewisen a kann d'Datei "
-"eroflueden."
-
-msgid "Save chat"
-msgstr "Chat späicheren"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"Klick op folgenden Link fier den Chatprotokoll ze erstellen, dann waart. "
-"Klick duerno nach eng Kéier fier en erofzelueden."
-
-msgid "This chat is empty!"
-msgstr "Dësen Chat as eidel."
-
-msgid "Generate file!"
-msgstr "Datei generéieren!"
-
-msgid "Download file!"
-msgstr "Datei eroflueden!"
-
-msgid "Clean current chat"
-msgstr "Momentanen Chat eidel maachen"
-
-msgid "Show user profile"
-msgstr "Benotzerprofil kucken"
-
-msgid "Add this contact to your friends"
-msgstr "Dësen Kontakt bei deng Kollegen derbäisetzten"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Dësen Gruppenchat bei deng Favoriten derbäisetzten"
-
-msgid "All tabs"
-msgstr "All d'Tabs"
-
-msgid "Join groupchat"
-msgstr "Gruppenchat bäitrieden"
-
-msgid "Close this tab"
-msgstr "Dësen Tab zoumaachen"
-
-msgid "no subject defined for this room."
-msgstr "Fier dësen Raum gouf keen Sujet festgeluet."
-
-msgid "Administration panel for this room"
-msgstr "Administratiounsberäich fier dësen Raum."
-
-msgid "Moderators"
-msgstr "Moderatoren"
-
-msgid "Participants"
-msgstr "Participant'en"
-
-msgid "Visitors"
-msgstr "Visiteuren"
-
-msgid "Manage favorite rooms"
-msgstr "Organiséier deng favoriséiert Räim"
-
-msgid "Change favorites"
-msgstr "Favoriten änneren"
-
-msgid "Search a room"
-msgstr "E Raum sichen"
-
-msgid "Select a favorite"
-msgstr "Wiel e Favorit aus"
-
-msgid "Getting the name..."
-msgstr "Numm sichen..."
-
-msgid "Gateway"
-msgstr "Gateway"
-
-msgid "Name"
-msgstr "Numm"
-
-msgid "Room"
-msgstr "Raum"
-
-msgid "Add"
-msgstr "Dobäisetzen"
-
-msgid "Edit"
-msgstr "Änneren"
-
-msgid "Search a room on"
-msgstr "E Raum sichen"
-
-msgid "No room found on this server."
-msgstr "Kee Raum op dësem Server fonnt."
-
-msgid "Service discovery"
-msgstr "Service Entdecken"
-
-msgid "Server to query"
-msgstr "Server "
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "Et deet eis Leed, keen Resultat!"
-
-msgid "Accounts"
-msgstr "Konten"
-
-msgid "Authentications"
-msgstr "Bestätegungen"
-
-msgid "Automation"
-msgstr "Automatiséierung"
-
-msgid "Clients"
-msgstr "Clients"
-
-msgid "Collaboration"
-msgstr "Kollaboratioun"
-
-msgid "Components"
-msgstr "Komponenten"
-
-msgid "Rooms"
-msgstr "Räim"
-
-msgid "Directories"
-msgstr "Uerdner"
-
-msgid "Gateways"
-msgstr "Gateways"
-
-msgid "News"
-msgstr "Noriichten"
-
-msgid "Hierarchy"
-msgstr "Hierarchie"
-
-msgid "Proxies"
-msgstr "Proxy'en"
-
-msgid "Publication/Subscription"
-msgstr "Publikatioun/Abonnement"
-
-msgid "Storage"
-msgstr "Späicher"
-
-msgid "Service offline or broken"
-msgstr "Service offline oder fehlerhaft"
-
-msgid "Your inbox"
-msgstr "Bréifkëscht"
-
-msgid "Available actions"
-msgstr "Verfügbar Aktiounen"
-
-msgid "Clean"
-msgstr "Eidel machen"
-
-msgid "New"
-msgstr "Nei"
-
-msgid "Received"
-msgstr "Kritt"
-
-msgid "Subject"
-msgstr "Sujet"
-
-msgid "Content"
-msgstr "Inhalt"
-
-msgid "Send message"
-msgstr "Message schécken"
-
-msgid "Your inbox is empty."
-msgstr "Bréifkëscht as eidel."
-
-msgid "MUC administration"
-msgstr "MUC Administratioun"
-
-msgid "You administrate this room"
-msgstr "Du administréiers dëse Raum"
-
-msgid "Enter new subject"
-msgstr "Neie Sujet androen"
-
-msgid "Configuration"
-msgstr "Konfiguratioun"
-
-msgid "Authorizations"
-msgstr "Authorisatiounen"
-
-msgid "Member list"
-msgstr "Memberslëscht"
-
-msgid "Owner list"
-msgstr "Besëtzerlëscht"
-
-msgid "Administrator list"
-msgstr "Administratorlëscht"
-
-msgid "Outcast list"
-msgstr "Outcast list"
-
-msgid "Add an input"
-msgstr "En Antrag bäisetzen"
-
-msgid "Destroy this MUC"
-msgstr "Dësen MUC läschen"
-
-msgid "Yes, let's do it!"
-msgstr "Jo, maach dat!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "Däin Kolleg beuecht d'Konversatioun grad."
-
-msgid "Your friend is writing a message..."
-msgstr "Däin Kolleg schréift grad e Message..."
-
-msgid "Your friend stopped writing a message."
-msgstr "Däin Kolleg huet grad opgehalen e Message ze schreiwen."
-
-msgid "Your friend is doing something else."
-msgstr "Däin Kolleg mecht grad eppes Aneres."
-
-msgid "Your friend closed the chat."
-msgstr "Däin Kolleg huet den Chat zougemaach."
-
-msgid "Requesting this service..."
-msgstr "Service ufroen..."
-
-msgid "Loading"
-msgstr "Amgaang ze lueden"
-
-msgid "changed his/her nickname to %s"
-msgstr "huet säin Benotzernumm op %s geännert"
-
-msgid "joined the chat room"
-msgstr "as dem Chat-Raum bäigetrueden"
-
-msgid "left the chat room"
-msgstr "huet den Chat-Raum verlooss"
-
-msgid "%s left"
-msgstr "%s ass fortgaangen "
-
-msgid "%s joined"
-msgstr "%s ass derbäikomm"
-
-msgid "no status"
-msgstr "kee Status"
-
-msgid "has been kicked"
-msgstr "krut e Fouss hannebäi"
-
-msgid "has been banned"
-msgstr "gouf verbannt"
-
-msgid "no reason"
-msgstr "kee Grond"
-
-msgid "Communicate with the entire world!"
-msgstr "Kommunizéier mat där ganzer Welt!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-"Jappix as eng oppen sozial Plattform déi Iech et erméiglecht mat Äeren Frënn "
-"a Kontakt ze bleiwen."
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-"Erreecht déi Milloiunen vun Benotzer déi fier de Moment XMPP benotzen "
-"(Google Talk, asw.), kommt eran!"
-
-msgid "Hi there!"
-msgstr "Moien!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr "Wëllkomm op %1s, \"%2s\"."
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr ""
-"Logg dech an däin bestehenden XMPP Kont an oder maach gratis en neien op!"
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-"Stellt sécher, vir d'Sécherheet vun Äerem Account, dass, wann dier iech "
-"umëllt oder registréiert, dass Äert Passwuert geheim bléiwt. "
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-"Logt dech an däin bestehenden XMPP Kont an. Du kanns och den %s benotzen "
-"fier engem Gruppenchat bäizetrieden."
-
-msgid "Previous"
-msgstr "Zerèck"
-
-msgid "General"
-msgstr "Allgemeng"
-
-msgid "Advanced"
-msgstr "Fortgeschratt"
-
-msgid "Resource"
-msgstr "Resource"
-
-msgid "Priority"
-msgstr "Prioritéit"
-
-msgid "Low"
-msgstr "Niddereg"
-
-msgid "Medium"
-msgstr "Mëttel"
-
-msgid "High"
-msgstr "Héich"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-"Gëff de Gruppenchat deems de wëllts bäitrieden an dee gewënschten Spëtznumm "
-"an. Du kanns och zerèck an den %s goen."
-
-msgid "login page"
-msgstr "Login Säit"
-
-msgid "Share this link with your friends:"
-msgstr "Deel dësen Link mat dengen Kollegen:"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-"Maach en neien XMPP Kont op fier Kontakt mat dengen Kollegen an denger "
-"eegener Social Cloud opzehuelen.\n"
-"Daat as ganz einfach!"
-
-msgid "Required"
-msgstr "Erfuerderlech"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "Du goufs registréiert, hei as deng XMPP Adress:"
-
-msgid "Manager"
-msgstr "Manager"
-
-msgid "Encrypted"
-msgstr "Verschlësselt"
-
-msgid "Unencrypted"
-msgstr "Onverschlësselt"
-
-msgid "Where are you?"
-msgstr "Wou bas du?"
-
-msgid "What's up with you?"
-msgstr "Waat leeft bei dier?"
-
-msgid "Type something you want to share with your friends..."
-msgstr "Schréiw eppes, daats de mat dengen Kollegen deelen wëlls..."
-
-msgid "Fetching the social channel..."
-msgstr "Social Channel ofruffen..."
-
-msgid "You are synchronized with your network."
-msgstr "Du bas mat dengem Netzwierk synchroniséiert."
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "Et konnt näicht verschéckt gin: Du kanns nëmmen Notizen kréien!"
-
-msgid "Media viewer"
-msgstr "Media viewer"
-
-msgid "Browse"
-msgstr "Duerchsichen"
-
-msgid "Command"
-msgstr "Kommando"
-
-msgid "Subscribe"
-msgstr "Abonnéieren"
-
-msgid "Join"
-msgstr "Bäitrieden"
-
-msgid "Automatic"
-msgstr "Automatesch"
-
-msgid "Search"
-msgstr "Sichen"
-
-msgid "No result!"
-msgstr "Kee Resultat!"
-
-msgid "No notifications."
-msgstr "Keng Meldungen."
-
-msgid "would like to add you as a friend."
-msgstr "géif dech gäer als Kolleg adden."
-
-msgid "would like you to join this chatroom:"
-msgstr "géif gäer dësem chat-Raum bäitrieden:"
-
-msgid "Do you accept?"
-msgstr "Akzeptéierts du daat?"
-
-msgid "Yes"
-msgstr "Jo"
-
-msgid "No"
-msgstr "Nee"
-
-msgid "would like to get authorization."
-msgstr "freet no Erlabnis."
-
-msgid "would like to send you a file: “%s”."
-msgstr "géif dier gäer eng Datei schécken: \"%s\"."
-
-msgid "has received a file exchange request: “%s”."
-msgstr "huet eng Ufro kritt fier d'Datei ze tauschen: \"%s\"."
-
-msgid "has accepted to receive your file: “%s”."
-msgstr "huet Äer Ufro fier eng Datei ze erhaalen ugeholl: \"%s\"."
-
-msgid "has rejected to receive your file: “%s”."
-msgstr "huet deng Ufro fier eng Datei ze tauschen ofgelehnt: \"%s\"."
-
-msgid "could not receive your file: “%s”."
-msgstr "huet deng Datei net kritt: \"%s\"."
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr "Wëlls du gesin wéieng Kollegen %s dier vierschléit?"
-
-msgid "commented an item you follow: “%s”."
-msgstr "huet en Antrag deens du Abonnéiert hues kommentéiert: \"%s\"."
-
-msgid "liked your post: “%s”."
-msgstr "huet däin post geliked: \"%s\"."
-
-msgid "quoted you somewhere: “%s”."
-msgstr "huet dech zitéiert: “%s”."
-
-msgid "published on your wall: “%s”."
-msgstr "huet eppes op denger Wall publizéiert: \"%s\"."
-
-msgid "tagged you in a photo (%s)."
-msgstr "huet dech op enger Foto getagged (%s)."
-
-msgid "tagged you in a video (%s)."
-msgstr "huet dech an engem Video getagged (%s)."
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-"huet Äeren Kont validéiert. Äeren öffentlechen Profil as an engem klengen "
-"Moment prett."
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-"huet Ären öffentlechen Profil no Äerem Wonsch geläscht. Mier wäerten Iech "
-"vermëssen!"
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-"huet Äer nei Profil-Astellungen gespäichert. Se wäerten an engem klengen "
-"Moment applizéiert gin."
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-"konnt Äeren Kont net validéieren fier en öffentlechen Profil ze updaten oder "
-"ze erstellen. Kontrolléiert Äer Zougangsdonnéen"
-
-msgid "Open"
-msgstr "Opmaachen"
-
-msgid "Show"
-msgstr "Weisen"
-
-msgid "Hide"
-msgstr "Verstoppen"
-
-msgid "Submit"
-msgstr "Schécken"
-
-msgid "Client"
-msgstr "Client"
-
-msgid "System"
-msgstr "System"
-
-msgid "Local time"
-msgstr "Lokalzäit"
-
-msgid "Comments"
-msgstr "Kommentarer"
-
-msgid "User profile"
-msgstr "Benotzerprofil"
-
-msgid "See his/her position on the globe"
-msgstr "Geografesch Positioun kucken"
-
-msgid "Confirm"
-msgstr "Confirméieren"
-
-msgid "anonymous mode"
-msgstr "anonymen Modus"
-
-msgid "Groups"
-msgstr "Gruppen"
-
-msgid "Unclassified"
-msgstr "Ongeuerdent"
-
-msgid "Authorize"
-msgstr "Authoriséieren"
-
-msgid "Ask for authorization"
-msgstr "Em Erlaabnis froen"
-
-msgid "Unblock"
-msgstr "Deblockéieren"
-
-msgid "Prohibit"
-msgstr "Verbidden"
-
-msgid "Block"
-msgstr "Blockéieren"
-
-msgid "Chat"
-msgstr "Chat"
-
-msgid "Groupchat"
-msgstr "Gruppenchat"
-
-msgid "Jappix Mobile"
-msgstr "Jappix Mobile"
-
-msgid "Desktop"
-msgstr "Desktop"
-
-msgid "Mobile"
-msgstr "Mobile"
-
-msgid "Please wait..."
-msgstr "Waart w.e.g. e Moment..."
-
-msgid "Please enable JavaScript"
-msgstr "Schalt w.e.g. JavaScript un"
-
-msgid "Show comments"
-msgstr "Kommentarer uweisen"
-
-msgid "Loading comments..."
-msgstr "Kommentarer gin gelueden..."
-
-msgid "Could not get the comments!"
-msgstr "D'Kommentarer konnten net gelueden gin!"
-
-msgid "Comments locked!"
-msgstr "Kommentarer gespaart!"
-
-msgid "Type your comment here..."
-msgstr "Gëff däin Kommentar hei an..."
-
-msgid "Your channel"
-msgstr "Däin Channel"
-
-msgid "Channel of"
-msgstr "Channel vum"
-
-msgid "More notices..."
-msgstr "Méi Noriichten..."
-
-msgid "Attach a file"
-msgstr "En Dokument unhängken"
-
-msgid "Send"
-msgstr "Geschéckt"
-
-msgid "Unattach the file"
-msgstr "Datei eraushuelen"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-"Beim eroplueden vun denger Datei as e Fehler opgetrueden: vläit as se ze "
-"grouss (%s Maximum) oder verbueden!"
-
-msgid "Authorization failed"
-msgstr "Autorisatioun fehlgeschloen"
-
-msgid "Registration failed, please choose a different username"
-msgstr "Registréierung fehlgeschloen, wiel w.e.g. en aneren Benotzernumm"
-
-msgid "Service unavailable"
-msgstr "Service net ze errechen"
-
-msgid "Internal server error, try later"
-msgstr "Internen Server Fehler, probéier méi spéit nach eng Kéier"
-
-msgid "Your form has been sent."
-msgstr "Däin Formular gouf fortgeschéckt."
-
-msgid "Application"
-msgstr "Applikatioun"
-
-msgid "Media integration"
-msgstr "Media integratioun"
-
-msgid "Keep local chat archives"
-msgstr "Lokal Chat Archiver halen"
-
-msgid "XMPP links"
-msgstr "XMPP-Linken"
-
-msgid "Open XMPP links with Jappix"
-msgstr "XMPP-Linken mat Jappix opmaachen"
-
-msgid "changed the subject to:"
-msgstr "huet de Sujet geännert op:"
-
-msgid "Welcome!"
-msgstr "Moien!"
-
-msgid "Friends"
-msgstr "Kollegen"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr "Wëllkomm op Jappix, denger eegener sozialer Cloud+"
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-"Iers de ufänks en ze benotzen, muss de nach e puer Astellungen änneren, no "
-"Kollegen sichen an däin Profil vervollstännegen."
-
-msgid "Enable notification sounds"
-msgstr "D'Téin fir d'Meldungen uschalten"
-
-msgid "Share your position on the globe"
-msgstr "Deel deng geografesch Positioun"
-
-msgid "Offline friends"
-msgstr "Offline Kollegen"
-
-msgid "Don't hide offline friends"
-msgstr "Vergiess deng offline Kollegen net"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-"Benotz dësen Tool fir deng Kollegen op dem Server ze fannen deens de grad "
-"benotzt, oder fir se spéider ze adden."
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr "Gutt gemaach! Elo kënnt Dier Jappix mat Äeren Kollegen deelen!"
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-"Wanns du op Späicheren drécks geet den Profileditor op. Happy socializing!"
-
-msgid "Share Jappix on %s"
-msgstr "Deel Jappix op %s"
-
-msgid "Follow Jappix topic on %s"
-msgstr "Jappix op %s followen"
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "Benotzen Jappix, eng oppen sozial Plattform. Ech sin %s!"
-
-msgid "Unknown name"
-msgstr "Onbekannten Numm"
-
-msgid "Unknown country"
-msgstr "Onbekannt Land"
-
-msgid "Click to enable"
-msgstr "Klick fir ze aktivéieren"
-
-msgid "Click to disable"
-msgstr "Klick fir ze desaktivéieren"
-
-msgid "Installation"
-msgstr "Installatioun"
-
-msgid "Jappix installation"
-msgstr "Jappix-Installatioun"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "Wëlkomm bei der Installatioun vun Jappix!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-"Dësne Tool hëlleft Iech Jappix, déi éischten vollwäerteg XMPP baséierten "
-"sozial Plattform, ganz einfach op Äerem Server ze installéieren."
-
-msgid "Installation Steps:"
-msgstr "Schrëtter vun der Installatioun:"
-
-msgid "Welcome"
-msgstr "Moien"
-
-msgid "Storage configuration"
-msgstr "Späicher-Konfiguratioun"
-
-msgid "Administrator account"
-msgstr "Administrator-Kont"
-
-msgid "Main configuration"
-msgstr "Haapt Konfiguratioun"
-
-msgid "Hosts configuration"
-msgstr "Hosts Konfiguréieren"
-
-msgid "Services installation"
-msgstr "Servicer Installéieren"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-"Wann di aktuell Sprooch net Ärer entsprecht (%1s), dann kënnt Der Jappix %s2 "
-"schwätzen loossen, et wäert gespeichert ginn."
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"Wann Der Hëllef braucht bei der Installatioun an der Konfiguratioun vun "
-"Jappix, dann kënnt der di komplett Dokumentatioun benotzen, ze fannen op:"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-"Et as Zäit fier deng eegen Social Cloud opzebauen: weider bei dee nächste "
-"Schrëtt!"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-"Jappix späichert donnéen (wéi z.B. Dateien, Chat-Archiver, deng Musek an "
-"Konfiguratiounen) a verschiddenen Uerdner."
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-"Jappix muss an dësen Uerdner Schréifrechter hun fier Ënner-Uerdner unzeleen. "
-"Wann daat net de Fall as muss de d'Rechter vun %1s op %2s setzen oder den "
-"Besëtzer vum Uerdner op %3s setzen (Hängt vun denger Konfiguratioun of)."
-
-msgid "The folder is writable, you can continue!"
-msgstr "Du hues d'Schreiwrechter fier dësen Uerdner, du kanns weidermaachen!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-"Jappix gëtt Dier d'Méiglechkeet fier deng Astellungen ze geréieren, nei "
-"Plugins ze installéieren oder no Updates ze sichen. Dofier musst de en "
-"Administrator-Kont opmaachen fier un de Manager ze kommen."
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-"Wann Jappix bis installéiert as, klick op de Manager-Link op der Haaptsäit "
-"fier eranzekommen."
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr ""
-"Oh, Dier hutt eppes vergiess oder di zwee Passwierder sinn net identesch!"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-"Jappix brauch e puer vun Iech festgelueten Wäerter fier ze fonktionnéieren. "
-"Passt w.e.g. déi folgend Saachen un (oder behaalt d'Standartwäerter bäi, "
-"fier déi meescht Leit geet daat duer)."
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-"Et sief bemierkt datt obligatoresch Wäerter déi Dier net festsetzt "
-"automatesch mat de Standartwäerter vervollstännegt gin."
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-"Dier braucht Hellëf? Dier hätt besser eis Dokumentatiounssäiten iwwert "
-"d'Ausfllen vun dësem Formulaire ze liesen!"
-
-msgid "User"
-msgstr "Benotzer"
-
-msgid "Service"
-msgstr "Service"
-
-msgid "Service name"
-msgstr "Numm vum Service"
-
-msgid "Service description"
-msgstr "Beschreiwung vum Service"
-
-msgid "Owner name"
-msgstr "Numm vum Besëtzer"
-
-msgid "Owner website"
-msgstr "Internetsäit vum Besëtzer"
-
-msgid "Connection"
-msgstr "Verbindung"
-
-msgid "Lock the host"
-msgstr "op dësen Host beschränken"
-
-msgid "Anonymous mode"
-msgstr "Anonymen Modus"
-
-msgid "HTTP authentication"
-msgstr "per HTTP aloggen"
-
-msgid "Registration allowed"
-msgstr "Registréierung erlaabt"
-
-msgid "Use the built-in BOSH proxy"
-msgstr "Deen agebautenen BOSH-Proxy benotzen"
-
-msgid "Manager link"
-msgstr "Manager Link"
-
-msgid "Groupchats to join"
-msgstr "Gruppenchats fier bäizetrieden"
-
-msgid "Suggest groupchats"
-msgstr "Schlot Gruppenchats fier"
-
-msgid "Encryption"
-msgstr "Verschlësselung"
-
-msgid "HTTPS storage"
-msgstr "HTTPS Späicher"
-
-msgid "Force HTTPS"
-msgstr "HTTPS Forcéieren"
-
-msgid "Compression"
-msgstr "Kompriméirung"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"Dës Säit hëlleft Iech fier den Host festzeleeen mat deem Jappix sech wäert "
-"standartméisseg verbannen. Dier kënnt och all Astellungen loosen wéi se sin "
-"fier deen offiziellen Host ze benotzen."
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"Vläi wësst der net waat e BOSH server as? Eigentlech as et eng Bréck "
-"tëschent Jappix an engem XMPP Server. Dëst as neideg wéinst e puer "
-"techneschen Limitatiounen."
-
-msgid "Main host"
-msgstr "Haapt Host"
-
-msgid "Groupchat host"
-msgstr "Gruppenchat Host"
-
-msgid "Pubsub host"
-msgstr "Pubsub Host"
-
-msgid "Anonymous host"
-msgstr "Anonymen Host"
-
-msgid "Directory host"
-msgstr "Haapt Host"
-
-msgid "BOSH host"
-msgstr "BOSH host"
-
-msgid "WebSocket host"
-msgstr "WebSocket host"
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-"Dier kënnt nach zousätzlech Software op Ären Server installéieren fier "
-"d'Funktiounen vun Jappix ze erweideren. Anerer keinnten wéinst "
-"standartméissegen Sëcherheetsrestriktiounen geännert gin "
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-"Fier daat doten duerchzeféieren musst Dier Iech kënnen als Root Benotzer op "
-"dem Server senger Shell aloggen. Daat heiten as fajultativ, Jappix leeft och "
-"ouni, e puer Funktiounen wäerten allerdings net verfügbar sin."
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-"Wann der mat der Installatioun fäerdeg sidd, leet Jappix cache Dateien un. "
-"Dësen Viergang kéint ënner Emstänn lues sin, waart einfach bis alles "
-"ugewisen gëtt an dréckt op keng Tast."
-
-msgid "Thanks for using Jappix!"
-msgstr "Merci, dass Dir Jappix benotzt!"
-
-msgid "Next"
-msgstr "Weider"
-
-msgid "Finish"
-msgstr "Fäerdeg"
-
-msgid "Check again"
-msgstr "Nach eng Kéier iwwerpréifen"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-"Dësen Uerdner as read-only, sétzt w.e.g. déi richteg Rechter fier den "
-"Uerdner %s."
-
-msgid "%s is installed on your system."
-msgstr "%s as op Ären System installéiert."
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s as net op Ärem System installéiert, Dier misst %2s installéieren."
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "D'PHP Maximum Upload Gréisst geet net duer (%s)"
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-"Déi maximal Upload-Gréisst fier PHP as ze kleng (%1s), dier sollt et an %3s "
-"op %2s setzen."
-
-msgid "Jappix manager"
-msgstr "Jappix Manager"
-
-msgid "Manager access"
-msgstr "Manageraccés"
-
-msgid "Statistics"
-msgstr "Statistiken"
-
-msgid "Hosts"
-msgstr "Hosts"
-
-msgid "Design"
-msgstr "Design"
-
-msgid "Repeat"
-msgstr "Widderhuelen"
-
-msgid "All"
-msgstr "Alleguer"
-
-msgid "Horizontal"
-msgstr "Horizontal"
-
-msgid "Vertical"
-msgstr "Vertikal"
-
-msgid "Center"
-msgstr "Zentréiert"
-
-msgid "Left"
-msgstr "Lénks"
-
-msgid "Right"
-msgstr "Riets"
-
-msgid "Top"
-msgstr "Uewen"
-
-msgid "Bottom"
-msgstr "Ënnen"
-
-msgid "Adapt"
-msgstr "Upassen"
-
-msgid "Color"
-msgstr "Faarf"
-
-msgid "Users"
-msgstr "Benotzer"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-"Dëst as en geschützten Beräich: Nëmmen autoriséiert Benotzer kënnen dësen "
-"Jappix noder administréieren."
-
-msgid "Please use the form below to login to the administration panel."
-msgstr ""
-"Benotzt w.e.g. d'Feld ënnen fier Iech an den Administratiounsberäich "
-"anzeloggen."
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-"Fier d'Sëcherheet ze verbesseren sin d'Sëtzungen zäitlech begrenzt. Wann "
-"Dier Äeren Browser zoumat gidd der ausgeloggt."
-
-msgid "Credentials"
-msgstr "Zougangsdonnéen"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "Dier gouft ausgeloggt. Äddi!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-"Ups, Dier konnt net als Administrator erkannt gin. Kontrolléiert Äer "
-"Zougangsdonnéen!"
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-"Jappix erhiewt iwwert e puer wichteg Saachen Basis-Statistiken, Dier fannt "
-"se hei drënner."
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr ""
-"Mat dësem Tool kënnt dier d'Konfigutatioun vun Ärem Jappix Noder änneren."
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-"Mat dësem Tool kënnt Dier den XMPP Host deen dësen Jappix Noder zervéiert "
-"änneren."
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-"Alleguer d'Dateien op dësem Jappix Node kënnen mat dësem Toll administréiert "
-"gin: wielt w.e.g. en Ënneruerdner aus a fänkt un säin Inhalt ze editéieren!"
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr "Jappix as komplett upassbar: Dier kënnt den Design direkt hei änneren"
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr "Dëst ass keen valabelt Bild, benotzt w.e.g. PNG, GIF oder JPG!"
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr "Dëst ass keen valabelt Bild, benotzt w.e.g. PNG!"
-
-msgid "The image could not be received, would you mind retry?"
-msgstr ""
-"D'Bild konnt net empfaangen ginn, wëllt Der et nach eng Kéier probéieren?"
-
-msgid "Your service logo has been successfully changed!"
-msgstr "De Logo vun Ärem Service as erfollegräich geännert gin!"
-
-msgid "Your image was added to the list!"
-msgstr "Äert Bild as an d'Lëscht bäigesaat gin!"
-
-msgid "Changes saved!"
-msgstr "Ännerungen gespäichert!"
-
-msgid "Logo"
-msgstr "Logo"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-"Dier kënnt Äeren eegenen Logo definéieren fier den Standart-Logo ze "
-"ersetzen. Passt op d'Gréisst an d'Haaptfaarw vun all Logo op!"
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr "Lued all Logo mat däer fiergeschloener Pixel-Gréisst erop."
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-"Äeren Logo muss am PNG-Format sin. Wann der dëst Feld eidel loosst gëtt en "
-"net geännert"
-
-msgid "Remove this logo"
-msgstr "Dëse Logo läschen"
-
-msgid "View this logo"
-msgstr "Dëse Logo ukucken"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-"Dier kënnt och méi wéi een Administrator fir desen Jappix-Knuet definéieren. "
-"Dier kënnt och d'Passwuert mat desem Tool änneren."
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-"Mat dësem Tool kënnt Dier Äeren Jappix Node updaten, oder kucken op en "
-"Update verfügbar as. Informatiounen iwwert déi neitsten Versioun gin och "
-"ugewisen (op Englesch)."
-
-msgid "Access statistics"
-msgstr "Accés-Statistiken"
-
-msgid "Share statistics"
-msgstr "Statistiken deelen"
-
-msgid "Other statistics"
-msgstr "Aaner Statistiken"
-
-msgid "January"
-msgstr "Januar"
-
-msgid "February"
-msgstr "Februar"
-
-msgid "March"
-msgstr "Mäerz"
-
-msgid "April"
-msgstr "Abrëll"
-
-msgid "May"
-msgstr "Mee"
-
-msgid "June"
-msgstr "Juni"
-
-msgid "July"
-msgstr "Juli"
-
-msgid "August"
-msgstr "August"
-
-msgid "September"
-msgstr "September"
-
-msgid "October"
-msgstr "Oktober"
-
-msgid "November"
-msgstr "November"
-
-msgid "December"
-msgstr "Dezember"
-
-msgid "Monday"
-msgstr "Méindeg"
-
-msgid "Tuesday"
-msgstr "Dënschdeg"
-
-msgid "Wednesday"
-msgstr "Mëttwoch"
-
-msgid "Thursday"
-msgstr "Donneschdeg"
-
-msgid "Friday"
-msgstr "Freideg"
-
-msgid "Saturday"
-msgstr "Samsdeg"
-
-msgid "Sunday"
-msgstr "Sonndeg"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Archives"
-msgstr "Archiver"
-
-msgid "Music"
-msgstr "Musek"
-
-msgid "Backgrounds"
-msgstr "Hannergrënn"
-
-msgid "Share"
-msgstr "Deelen"
-
-msgid "Background"
-msgstr "Hannergrond"
-
-msgid "Notice"
-msgstr "Notiz"
-
-msgid "Your design preferences have been saved!"
-msgstr "Äer Design-Astellunegn goufen gespäichert!"
-
-msgid "Please check your inputs: something is missing!"
-msgstr "Kontrolléiert w.e.g. Äer Agaben: et fehlt eppes!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-"Mat dem Tool kënnt der den Hannergrond vun Ärem Jappix Node änneren. Dier "
-"kënnt entweder eng eegen Faarw auswielen oder e ild eroplueden. Loosst Äerer "
-"Kreativitéit fräien Laaf!"
-
-msgid "Use default background"
-msgstr "Den Standart-Hannergrong benotzen"
-
-msgid "Use your own image"
-msgstr "Benotzt Äer egen Foto"
-
-msgid "Select a background to use and change the display options."
-msgstr "Wielt en Hannergrond aus an Ännert d'optiounen vum Affichage."
-
-msgid "Use your own color"
-msgstr "Benotzt Äer egen Faarw"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr ""
-"Gidd den Hexadezimal-Wäert vun der Faarw an déi der als Hannergrond wëllt "
-"benotzen."
-
-msgid "Manage backgrounds"
-msgstr "Hannergrondbiller administréieren"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-"Mat dësem Tool kënnt der en neien Hannergrond an d'Lëscht bäifügen. Wielt w."
-"e.g. eng gülteg Bilddatei aus."
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr "Wann der Hannergrënn wëllt läschen, benotzt de Browser hei drënner."
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-"Mat dësem Tool kënnt der eng Notiz fier all d'Benotzer op d'Haaptsäit "
-"setzen, wéi z.B. eng wichteg Noriicht oder eng Warnung."
-
-msgid "Simple notice"
-msgstr "Einfach Notiz"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-"Fier dës Notiz braucht der nëmmen normalen Text anzegin, Coder as net "
-"erlaabt!"
-
-msgid "Advanced notice"
-msgstr "Ugepassten Notiz"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-"Dier kënnt Äer Notiz mat HTML, CSS a JavaScript upassen, mee Dier musst de "
-"style selwer definéieren"
-
-msgid "Available updates"
-msgstr "Vervügbar Updates"
-
-msgid "What's new?"
-msgstr "Waat gëtt et Neits?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr "Äer Uerdner sin read-only, setzt w.e.g. déi richteg Rechter!"
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-"%1s kéinnt dem Proxy Problemer bereeden, erhéischt w.e.g. den %2s Wäert op "
-"%3s!"
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-"Dier benotz eng Entwécklerversioun vun Jappix. Dier kënnt se mat folgendem "
-"Kommando iwwert eis Répertoiren updaten: %s."
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-"Eng nei Versioun vun Jappix as verfügbar! Gitt gewuer waat nei as an start "
-"den Update!"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr ""
-"Äer Versioun as net méi aktuell. Dier kënnt se op %s updaten andeems der hei "
-"klickt!"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"Äer Versioun schéngt aktuell ze sin, mee dier kënnt awer och manuell no "
-"Updates sichen andeems der hei klickt."
-
-msgid "Check for updates"
-msgstr "No Updates sichen"
-
-msgid "Update in progress"
-msgstr "amgaang ze updaten"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr ""
-"Jappix gouf geupdate: dier benotz elo déi aktuellsten Versioun. Vill Spaaß!"
-
-msgid "The update has failed! Please try again later."
-msgstr ""
-"Den Update as fehlgeschloen! Probéiert w.e.g. méi spéit nach eng Kéier."
-
-msgid "Downloading package..."
-msgstr "Package eroflueden..."
-
-msgid "Removing current Jappix system files..."
-msgstr "Aktuell Jappix Dateisystemer läschen..."
-
-msgid "Extracting package..."
-msgstr "Datei entpacken..."
-
-msgid "Regenerating storage folder tree..."
-msgstr "Uerdner-Struktur erëm hierstellen..."
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix as elo um neitste Stand!"
-
-msgid "Aborted: socket error!"
-msgstr "Ofbroch: socket error!"
-
-msgid "Aborted: buffer error!"
-msgstr "Ofbroch: buffer error!"
-
-msgid "Aborted: everything is not writable!"
-msgstr "Ofbroch: net alles as schreifbar!"
-
-msgid "Aborted: could not extract the package!"
-msgstr "Ofgebrach: konnt den Package net extrahéieren!"
-
-msgid "Visits"
-msgstr "Visiten"
-
-msgid "Daily"
-msgstr "Deeglech"
-
-msgid "Weekly"
-msgstr "Wöchentlech"
-
-msgid "Monthly"
-msgstr "Monatlech"
-
-msgid "Yearly"
-msgstr "Jährlech"
-
-msgid "Size"
-msgstr "Gréisst"
-
-msgid "Clean everything"
-msgstr "Alles läschen"
-
-msgid "Purge cache"
-msgstr "Cache eidel maachen"
-
-msgid "Purge logs"
-msgstr "Protokoll läschen"
-
-msgid "Purge sent files"
-msgstr "Verschéckten Dateien läschen"
-
-msgid "Purge updates"
-msgstr "Updates läschen"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "Den Uerdner deen dier wollt eidel maachen as elo eidel!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-"Halt Äeren Jappix Node propper a séier, maacht d'Uerdner regelmässeg eidel!"
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-"Lued Äer Musek erop (Ogg Vorbis, MP3 oder WAV) fier se kënnen an Jappix ze "
-"lauschteren!"
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr "D'Datei déi Dier eroplueden wëllt, muss méi kleng wéi %s sin."
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-"Mat dësem tool kënnt dier iwwerpréifen waat Äer Benotzer op Äerem Server "
-"späicheren an onerwënschtenen Inhalt läschen."
-
-msgid "Title"
-msgstr "Titel"
-
-msgid "Artist"
-msgstr "Kënschtler"
-
-msgid "Album"
-msgstr "Album"
-
-msgid "File"
-msgstr "Datei"
-
-msgid "Upload"
-msgstr "Eroplueden"
-
-msgid "The folder is empty."
-msgstr "Den Uerdner as eidel."
-
-msgid "The music could not be received, please retry!"
-msgstr "D#Musek konnt net gelueden gin, probéiert nach eng Kéier w.e.g.!"
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-"Daat heiten as keng valabel Musek-Datei, encodéiert w.e.g. an Ogg, MP3 oder "
-"WAV!"
-
-msgid "Your music has been added!"
-msgstr "Äer Musek gouf derbäigesaat!"
-
-msgid "The selected elements have been removed."
-msgstr "Déi ausgewielten Elementer goufen geläscht."
-
-msgid "You must select elements to remove!"
-msgstr "Dier musst en Element fier ze läschen auswielen!"
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-"Mat dësem Tool kënnt der nei Benotzer derbäisetzen oder e Passwuert änneren "
-"(aktuellen Benotzernumm a Passwuert agin). Wielt w.e.g. e staarkt Passwuert!"
-
-msgid "Manage"
-msgstr "Administréieren"
-
-msgid "List"
-msgstr "Lëscht"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-"Mat dësem Tool kënnt Dier Benotzer läschen. Et sief bemierkt datt e Benotzer "
-"net kann geläacht gin wann nëmmen nach een iwwreg bleiwt."
-
-msgid "The user has been added!"
-msgstr "De Benotzer as derbäigesaat gin!"
-
-msgid "The chosen users have been removed."
-msgstr "Deen ausgewielten Benotzer as geläscht gin!"
-
-msgid "You must select one or more users to be removed!"
-msgstr "Dier musst een oder méi Benotzer fier ze läschen auswielen!"
-
-msgid "Yesterday"
-msgstr "Gëschter"
-
-msgid "%s days ago"
-msgstr "virun %s Deeg"
-
-msgid "User currently active"
-msgstr "Benotzer momentan aktiv"
-
-msgid "Last seen: %s"
-msgstr "Fier d'läscht gesin: %s"
-
-msgid "Inactive since: %s"
-msgstr "Inaktiv zënter: %s"
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr "Ären Kolleg schéngt de Message net kritt ze hun!"
-
-msgid "Static content server"
-msgstr "Server fier stateschen Inhalt"
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr "Dëst as de Server fier stateschen Inhalt fier %1s, \"%2s\"."
-
-msgid "User uploads server"
-msgstr "Benotzer Upload-Server"
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr "Dëst as de Benotzer Upload-Server fier %1s, \"%2s\"."
-
-msgid "Suggested friends"
-msgstr "Fiergeschloen Kollegen"
-
-msgid "Check all"
-msgstr "Alleguer auswielen"
-
-msgid "Uncheck all"
-msgstr "Alleguer déselectionnéieren"
-
-msgid "Choose"
-msgstr "Wielen"
-
-msgid "List name"
-msgstr "Lëschtennumm"
-
-msgid "Allow"
-msgstr "Erlaben"
-
-msgid "Deny"
-msgstr "Verbidden"
-
-msgid "Group"
-msgstr "Grupp"
-
-msgid "Subscription"
-msgstr "Abonnement"
-
-msgid "Both"
-msgstr "Déi zwee"
-
-msgid "From"
-msgstr "Vum"
-
-msgid "Everybody"
-msgstr "Jiddereen"
-
-msgid "Send messages"
-msgstr "Message schécken"
-
-msgid "Send queries"
-msgstr "Ufro schécken"
-
-msgid "See my status"
-msgstr "Mäin Status kucken"
-
-msgid "Send his/her status"
-msgstr "Säin Status schécken"
-
-msgid "Everything"
-msgstr "Alles"
-
-msgid "Item"
-msgstr "Element"
-
-msgid "Order"
-msgstr "Reihenfolg"
-
-msgid "Active for this session"
-msgstr "Aktiv fier dës Sëtzung"
-
-msgid "Always active"
-msgstr "Ëmmer aktiv"
-
-msgid "User directory"
-msgstr "Benotzer Répertoire"
-
-msgid "Search a friend"
-msgstr "E Kolleg sichen"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-"Déi ugefroten Funktioun gëtt net vum Empfänger oder vum Server ennerstëzt a "
-"kann dofier net benotzt gin."
-
-msgid "Send him/her a message"
-msgstr "Him e Message schécken"
-
-msgid "Start a chat with him/her"
-msgstr "En Chat mat him ufänken"
-
-msgid "Available shortcuts:"
-msgstr "Verfügbar Ofkierzungen:"
-
-msgid "%s removes the chat logs"
-msgstr "%s läscht den Chat Protokoll"
-
-msgid "%s joins a groupchat"
-msgstr "%s trëtt engem Gruppenchat bäi"
-
-msgid "%s closes the chat"
-msgstr "%s huet den Chat zougemat"
-
-msgid "%s shows the user profile"
-msgstr "%s weist de Benotzerprofil"
-
-msgid "%s sends a message to the room"
-msgstr "%s schéckt e Message un den Chat-Raum"
-
-msgid "%s changes your nickname"
-msgstr "%s ännert Ären Benotzernumm"
-
-msgid "%s sends a message to someone in the room"
-msgstr "%s schéckt e Message un eng Persoun aus dem Chat-Raum"
-
-msgid "%s changes the room topic"
-msgstr "%s ännert d'Thema vum Chat-Raum"
-
-msgid "%s kicks a user of the room"
-msgstr "%s geheit en Benotzer aus dem Chat-Raum"
-
-msgid "%s bans a user of the room"
-msgstr "%s verbannt en Benotzer aus dem Chat-Raum"
-
-msgid "%s invites someone to join the room"
-msgstr "%s invitéiert eng Persoun an den Chat-Raum"
-
-msgid "Public profile"
-msgstr "Öffentlechen Profil"
-
-msgid "Your profile anywhere on the Web."
-msgstr "Äeren Profil iwwerall um Internet"
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-"%s as en Service deen ären XMPP-Profil veröffentlecht. Esou as et méi "
-"einfach fier en mat aneren ze deelen. Et brauch een keen XMPP-Kont fier ären "
-"Channel, äer aktuell Positioun oder äer Kontaktdonnéen ze gesin."
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-"Doriwwer eraus gëtt all Foto déi Dier an Äeren Channel post an eng "
-"wonnerschéin Timeline bäigesaat. Dier kënnt elo d'Fotoen déi der gedeelt "
-"hudd Joër fier Joër duerchsichen."
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-"Dier kënnt Äeren XMPP-Avatar och als eenzegen Avatar fier all Internetsäit, "
-"Blog an Forum benotzen. Wann dier en op XMPP verännert, gëtt dës Verännerung "
-"iwwerall duerchgefouert. Waat vir eng Verbesserung!"
-
-msgid "Yay, let's create your public profile!"
-msgstr "Jo, erstellt Äeren öffentlechen Profil."
-
-msgid "Enable my public profile"
-msgstr "Mäin öffentlechen Profil aktivéieren"
-
-msgid "Jappix for your phone"
-msgstr "Jappix op Äerem Handy"
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr "Eng eenzeg App fier Messagen, Channelen, Profiler a vill méi!"
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-"Dës Norricht as nëmmen informativ, méglecherweis goufen d'Donnéen op déi se "
-"verweist geläscht"
-
-msgid "You haven't provided any file to download"
-msgstr "Dier hudd nach kee Profilbild eropgelueden"
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr "Dier kënnt keng Datei erofluesen wann Dier kee Schlëssel vierweist"
-
-msgid "Woah this file isn't found, please double check"
-msgstr ""
-"Ups, dës Datei konnt net fonnt gin, kontrolléiert nach eng Kéier w.e.g."
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr ""
-"De Schlëssel deen Dier ugin hudd, huet net d'Erlabnis fier dës Datei "
-"erofzelueden"
-
-msgid "Statistics are currently disabled in the settings."
-msgstr "D'Statistiken sin momentan net aktivéiert."
-
-msgid "New event!"
-msgstr "Néit Evenement!"
-
-msgid "%s is typing..."
-msgstr "%s ass amgaang mat tippen..."
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-"Den Sécherheetscode deen Dier uginn hutt ass net valabel. Probéiert mat "
-"engem Aaneren w.e.g. "
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-"Den Benotzernomm, deen Dier gewielt hutt ass net verfügbar. Probéiert mat "
-"engem Aaneren w.e.g."
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-"Beim Registréieren vun Äerem Kont as e Fehler opgetrueden. Probéiert w.e.g. "
-"nach eng Kéier."
-
-msgid "Username"
-msgstr "Benotzernumm"
-
-msgid "Enter password"
-msgstr "Passwuert aginn"
-
-msgid "Once again..."
-msgstr "Nees erem..."
-
-msgid "Code"
-msgstr "Code"
-
-msgid "Security code"
-msgstr "Sécherheetscode"
-
-msgid "Advertising space available!"
-msgstr "Plaatz vir Reklam ze maachen fräi!"
-
-msgid "Advertise here"
-msgstr "Maacht héi Reklam"
-
-msgid "Analytics (%s)"
-msgstr "Statistiken (%s)"
-
-msgid "Track visits"
-msgstr "Visiten protokolléiern"
-
-msgid "Piwik URL"
-msgstr "Piwik URL"
-
-msgid "Piwik tracking ID"
-msgstr "Piwik Tracking ID"
-
-msgid "Advertising (%s)"
-msgstr "Reklammen (%s)"
-
-msgid "Enable ads"
-msgstr "Reklammen aktivéieren"
-
-msgid "Standard ads key"
-msgstr "Standart Reklammen-Schlëssel"
-
-msgid "Content ads key"
-msgstr "Inhalts Reklammen-Schlëssel"
-
-msgid "AdSense client ID"
-msgstr "AdSense client ID"
-
-msgid "AdSense slot"
-msgstr "AdSense slot"
-
-msgid "Stop"
-msgstr "Stop"
-
-msgid "Leave"
-msgstr ""
-
-msgid "Mute"
-msgstr "Mute"
-
-msgid "Unmute"
-msgstr "Unmute"
-
-msgid "Nobody there. Invite some people!"
-msgstr ""
-
-msgid "Invite people..."
-msgstr ""
-
-msgid "Enter people names..."
-msgstr ""
-
-msgid "Is calling you"
-msgstr "Rifft dech un"
-
-msgid "Initiating call"
-msgstr "Uruff opbauen"
-
-msgid "Connecting to call..."
-msgstr "Verbannen..."
-
-msgid "Waiting..."
-msgstr "Warden..."
-
-msgid "Ringing..."
-msgstr "Schellen..."
-
-msgid "Declined the call"
-msgstr "Huet den Uruff oofgelehnt"
-
-msgid "Call error"
-msgstr "Fehler"
-
-msgid "Ended the call"
-msgstr "Huet agehangen"
-
-msgid "Call ended"
-msgstr "Uruff beendegt"
-
-msgid "Call canceled"
-msgstr "Uruff ofgebrach"
-
-msgid "Canceled the call"
-msgstr "Uruff ofbriechen"
-
-msgid "Is already in a call"
-msgstr "As besat"
-
-msgid "Ending call..."
-msgstr "Uruff beendegen..."
-
-msgid "Incoming group call"
-msgstr ""
-
-msgid "Preparing group call..."
-msgstr ""
-
-msgid "Connecting to group call..."
-msgstr ""
-
-msgid "Group call error"
-msgstr ""
-
-msgid "Ending group call..."
-msgstr ""
-
-msgid "Group call ended"
-msgstr ""
-
-msgid "Accept"
-msgstr "Unhuelen"
-
-msgid "Decline"
-msgstr "Oflehnen"
-
-msgid "Okay"
-msgstr "Ok"
-
-msgid "Retry"
-msgstr "Neien Versuch"
-
-msgid "Audio Call"
-msgstr "Uruff"
-
-msgid "Video Call"
-msgstr "Video Konferenz"
-
-msgid "%s participant"
-msgstr ""
-
-msgid "%s participants"
-msgstr ""
-
-msgid "(full)"
-msgstr ""
-
-msgid "%s is able to receive group calls."
-msgstr ""
-
-msgid "%s may not support group calls."
-msgstr ""
-
-msgid "Send a message..."
-msgstr ""
-
-msgid "Edited"
-msgstr "Editéiert"
-
-msgid "Edited (%s)"
-msgstr "editéiert (%s)"
-
-msgid "Editing"
-msgstr "editéiert"
-
-msgid "Being edited"
-msgstr "gëtt editéiert"
-
-msgid "Delivered"
-msgstr "verschéckt"
-
-msgid "Read"
-msgstr "liesen"
-
-msgid "Sending..."
-msgstr "fortschécken..."
-
-msgid "%s requested your attention to the conversation"
-msgstr ""
-
-msgid "You requested %s's attention to the conversation"
-msgstr ""
-
-msgid "Attention to conversation requested."
-msgstr ""
diff --git a/i18n/mn/LC_MESSAGES/main.mo b/i18n/mn/LC_MESSAGES/main.mo
deleted file mode 100644
index ec970b8a..00000000
--- a/i18n/mn/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/mn/LC_MESSAGES/main.po b/i18n/mn/LC_MESSAGES/main.po
deleted file mode 100644
index 60331116..00000000
--- a/i18n/mn/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2261 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-# Оч Оюука <o_4BOSS@yahoo.com>, 2013
-# Оч Оюука <o_4BOSS@yahoo.com>, 2013
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:21+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Mongolian (http://www.transifex.com/projects/p/jappix/"
-"language/mn/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: mn\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr ""
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-
-msgid "Social channel, chat and more."
-msgstr ""
-
-msgid "Create your public profile."
-msgstr ""
-
-msgid "A mini-chat for your website."
-msgstr ""
-
-msgid "Get Jappix, get support."
-msgstr ""
-
-msgid "Statistics around Jappix."
-msgstr ""
-
-msgid "Legal disclaimer for Jappix."
-msgstr ""
-
-msgid "Download Jappix for free."
-msgstr ""
-
-msgid "Contribute to the Jappix code."
-msgstr ""
-
-msgid "Jappix for your company."
-msgstr ""
-
-msgid "Find a public Jappix node."
-msgstr ""
-
-msgid "Credits"
-msgstr ""
-
-msgid "Association"
-msgstr ""
-
-msgid "Web agency"
-msgstr ""
-
-msgid "Legal"
-msgstr "Хууль ёсны"
-
-msgid "Legal disclaimer"
-msgstr ""
-
-msgid "Terms of use and legal"
-msgstr ""
-
-msgid "Owner"
-msgstr ""
-
-msgid "Node owner"
-msgstr ""
-
-msgid "By using our service, you accept %s."
-msgstr ""
-
-msgid "our terms of use"
-msgstr ""
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-
-msgid "The element list on this server could not be obtained!"
-msgstr ""
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr "Таны нууц үг солигдлоо, та одоо өөрийн шинэ нууц үгээр нэвтэрнэ үү."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "Таны чатнаас гарлаа. Түр баяртай!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr ""
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr ""
-
-msgid "The groupchat has been removed."
-msgstr ""
-
-msgid "The user that you want to reach is not present in the room."
-msgstr ""
-
-msgid "Please enter the group chat address to join."
-msgstr ""
-
-msgid "Please enter your nickname to join %s."
-msgstr ""
-
-msgid "This room (%s) is protected with a password."
-msgstr ""
-
-msgid "Your browser is out of date!"
-msgstr ""
-
-msgid "Last %s version is better!"
-msgstr ""
-
-msgid "Login"
-msgstr "Нэвтрэх"
-
-msgid "Register"
-msgstr "Бүртгүүлэх"
-
-msgid "Here we go!"
-msgstr "Нэвтрэх"
-
-msgid "Server"
-msgstr "Сервер"
-
-msgid "Password"
-msgstr "Нууц үг"
-
-msgid "Remember me"
-msgstr "Намайг сана"
-
-msgid "This tool has been disabled!"
-msgstr ""
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr "Серверт алдаа гарлаа!"
-
-msgid "Reconnect"
-msgstr "Дахин холбогдох"
-
-msgid "Messages"
-msgstr "Зурвас"
-
-msgid "Profile"
-msgstr "Профайл"
-
-msgid "Options"
-msgstr "Тохиргоо"
-
-msgid "Disconnect"
-msgstr "Гарах"
-
-msgid "Filter"
-msgstr "Шүүлтүүр"
-
-msgid "Add a friend"
-msgstr "Найз нэмэх"
-
-msgid "Your groupchats"
-msgstr "Таны Групп чат"
-
-msgid "Manage your favorite groupchats"
-msgstr "Таны групп чатын тохиргоо"
-
-msgid "More stuff"
-msgstr "Бусад тохиргоо"
-
-msgid "Show all friends"
-msgstr "Бүх найзаа харах"
-
-msgid "Only show connected friends"
-msgstr "Зөвхөн идвэхтэй байгаа найзаа харах"
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "Захианы архив"
-
-msgid "Date"
-msgstr "Огноо"
-
-msgid "A short message?"
-msgstr "Богино захиа?"
-
-msgid "How are you?"
-msgstr "Юу байна?"
-
-msgid "What are you doing?"
-msgstr "Та юу хийж байна?"
-
-msgid "Join a chat"
-msgstr "Чатруу орох"
-
-msgid "Status"
-msgstr "Статус"
-
-msgid "Available"
-msgstr "Нээлттэй"
-
-msgid "Talkative"
-msgstr "Идвэхтэй"
-
-msgid "Away"
-msgstr "Ипвэхгүй байгаа"
-
-msgid "Not available"
-msgstr "Хаалттай"
-
-msgid "Busy"
-msgstr "Завгүй"
-
-msgid "Offline"
-msgstr "Байхгүй байгаа"
-
-msgid "Mood"
-msgstr "Төлөв"
-
-msgid "None"
-msgstr "Хоосон"
-
-msgid "Crazy"
-msgstr "Галзуу"
-
-msgid "Excited"
-msgstr "Сэтгэл нь хөдөлсөн"
-
-msgid "Playful"
-msgstr "Хөгжилтэй"
-
-msgid "Happy"
-msgstr "Аз жаргалтай"
-
-msgid "Shocked"
-msgstr "Шоконд орсон"
-
-msgid "Hot"
-msgstr "Халуухан"
-
-msgid "Sad"
-msgstr "Уйтгартай"
-
-msgid "Amorous"
-msgstr "Дурласан"
-
-msgid "Confident"
-msgstr "Өөртөө итгэлтэй"
-
-msgid "Activity"
-msgstr "Эрч хүчтэй"
-
-msgid "Chores"
-msgstr "Дэлгүүр гарсан"
-
-msgid "Drinking"
-msgstr "Согтуу"
-
-msgid "Eating"
-msgstr "Идэж байна"
-
-msgid "Exercising"
-msgstr "Дасгал хийж байна"
-
-msgid "Grooming"
-msgstr "Гэрийн ажилтай"
-
-msgid "Appointment"
-msgstr "Уулзалттай"
-
-msgid "Inactive"
-msgstr "Идэвхгүй"
-
-msgid "Relaxing"
-msgstr "Тайвширч байна"
-
-msgid "Talking"
-msgstr "Ярьж байна"
-
-msgid "Traveling"
-msgstr "Зугаалж байна"
-
-msgid "Working"
-msgstr "Ажиллаж байна"
-
-msgid "View profile"
-msgstr "Профайл үзэх"
-
-msgid "This is a repeat from %s"
-msgstr "%s шинжилсэн"
-
-msgid "Repeat this notice"
-msgstr "мэдээллийг шинжлэх"
-
-msgid "Remove this notice"
-msgstr "мэдээлэл устгах"
-
-msgid "Your profile"
-msgstr "Таны Профайл"
-
-msgid "Identity"
-msgstr "Миний тухай"
-
-msgid "Profile image"
-msgstr "Таны зураг"
-
-msgid "Others"
-msgstr "Бусад"
-
-msgid "Other"
-msgstr "Бусад"
-
-msgid "Personal"
-msgstr "Хувийн хэрэг"
-
-msgid "Complete name"
-msgstr "Жинхэнэ нэр"
-
-msgid "Nickname"
-msgstr "Хоч"
-
-msgid "First name"
-msgstr "Нэр"
-
-msgid "Last name"
-msgstr "Овог"
-
-msgid "Date of birth"
-msgstr "Төрсөн өдөр"
-
-msgid "Contact"
-msgstr "Холбоо барих"
-
-msgid "E-mail"
-msgstr "И-майл хаяг"
-
-msgid "Phone"
-msgstr "Утас"
-
-msgid "Website"
-msgstr "Вэб сайт"
-
-msgid "Current"
-msgstr "Сонгосон зураг"
-
-msgid "Delete"
-msgstr "Устгах"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr "Та өөрийн профайл зургаа сонгоогүй байна. "
-
-msgid "Address"
-msgstr "Хаяг"
-
-msgid "Street"
-msgstr "Гудамж"
-
-msgid "City"
-msgstr "Хот"
-
-msgid "Postal code"
-msgstr "Постал код"
-
-msgid "Country"
-msgstr "Улс"
-
-msgid "Biography"
-msgstr "Намтар"
-
-msgid "Important notice"
-msgstr "Чухал мэдээлэл"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr ""
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-
-msgid "Save"
-msgstr "Хадгадах"
-
-msgid "Cancel"
-msgstr "Болих"
-
-msgid "Edit options"
-msgstr "Тохиргоог өөрчлөх"
-
-msgid "Channel"
-msgstr "Суваг"
-
-msgid "Commands"
-msgstr "Коммандууд"
-
-msgid "Sounds"
-msgstr "Дуу"
-
-msgid "Privacy"
-msgstr "Хувийн нууц"
-
-msgid "Message archiving"
-msgstr "Захианы архив"
-
-msgid "Store an history of your chats"
-msgstr ""
-
-msgid "Geolocation"
-msgstr ""
-
-msgid "Disabled"
-msgstr ""
-
-msgid "Store all chats"
-msgstr ""
-
-msgid "Store friend chats"
-msgstr ""
-
-msgid "Remove all archives"
-msgstr ""
-
-msgid "Empty"
-msgstr "Хоосон"
-
-msgid "Empty channel"
-msgstr "Суваг хоосон"
-
-msgid "Persistent"
-msgstr "Тогтвортой"
-
-msgid "Maximum notices"
-msgstr "Дээд хэмжээний мэдээлэл"
-
-msgid "Account"
-msgstr "Гишүүнчлэл"
-
-msgid "Change password"
-msgstr "Нууц үг солих"
-
-msgid "Delete account"
-msgstr "Гишүүнлэлийг устгах"
-
-msgid "Old"
-msgstr "Хуучин"
-
-msgid "New (2 times)"
-msgstr "Шинэ"
-
-msgid "Suggested chatrooms"
-msgstr ""
-
-msgid "Skip"
-msgstr ""
-
-msgid "Continue"
-msgstr "Үргэлжүүлэх"
-
-msgid "To"
-msgstr "Илгээх гишүүний хаяг"
-
-msgid "Close"
-msgstr "Хаах"
-
-msgid "unknown"
-msgstr "Мэдэгдэхгүй"
-
-msgid "Unavailable"
-msgstr "Идвэхгүй"
-
-msgid "is now"
-msgstr "Яг одоо"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Түр хүлээнэ үү. Таны зураг ачааллаж байна."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "Таны шинэ профайл зураг!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "Зургийн файлыг дэмжэхгүй байна. "
-
-msgid "Reply"
-msgstr "Хариу захиа илгээх"
-
-msgid "Error"
-msgstr "Алдаа"
-
-msgid "Click here to solve the error"
-msgstr "Энд дарж алдааг засна уу"
-
-msgid "You"
-msgstr "Та"
-
-msgid "Remove"
-msgstr "Устгах"
-
-msgid "Rename"
-msgstr "Солих"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Сайн уу? Намайг %s гэдэг та миний найз болох уу?"
-
-msgid "Smiley insertion"
-msgstr "Smile оруулах"
-
-msgid "Change style"
-msgstr "Загвар солих"
-
-msgid "Text in bold"
-msgstr "Текстийг тодоор бичих"
-
-msgid "Text in italic"
-msgstr "Текстийг налуугаар бичих"
-
-msgid "Underlined text"
-msgstr ""
-
-msgid "Send a file"
-msgstr "Файл илгээх"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr ""
-
-msgid "Save chat"
-msgstr "Чатаа хадгалх"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-
-msgid "This chat is empty!"
-msgstr "Чат хоосон байна"
-
-msgid "Generate file!"
-msgstr "Файл үүсгэх"
-
-msgid "Download file!"
-msgstr "Файл хуулах"
-
-msgid "Clean current chat"
-msgstr "Одоогийн чатаа устгах"
-
-msgid "Show user profile"
-msgstr "Хэрэглэгчийн профайл харах"
-
-msgid "Add this contact to your friends"
-msgstr "Найзаа болгох"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Дуртай групп чатаа болгох"
-
-msgid "All tabs"
-msgstr "Бүх табууд"
-
-msgid "Join groupchat"
-msgstr ""
-
-msgid "Close this tab"
-msgstr "Табыг хаах"
-
-msgid "no subject defined for this room."
-msgstr "Өрөөнд гарчиггүй байна"
-
-msgid "Administration panel for this room"
-msgstr "Өрөөний админ хэсэг"
-
-msgid "Moderators"
-msgstr "Тохируулагч"
-
-msgid "Participants"
-msgstr "Оролцогч"
-
-msgid "Visitors"
-msgstr "Зочид"
-
-msgid "Manage favorite rooms"
-msgstr "Өрөөний удирдлага"
-
-msgid "Change favorites"
-msgstr "Өөрчлөх"
-
-msgid "Search a room"
-msgstr "Өрөө хайх"
-
-msgid "Select a favorite"
-msgstr "Дуртайгаа сонгох"
-
-msgid "Getting the name..."
-msgstr "Нэр оноох"
-
-msgid "Gateway"
-msgstr "Гарц"
-
-msgid "Name"
-msgstr "Нэр"
-
-msgid "Room"
-msgstr "Өрөө"
-
-msgid "Add"
-msgstr "Нэмэх"
-
-msgid "Edit"
-msgstr "Засах"
-
-msgid "Search a room on"
-msgstr "Өрөөнөөс хайх"
-
-msgid "No room found on this server."
-msgstr "Өрөө олдсонгой"
-
-msgid "Service discovery"
-msgstr "Үйлчилгээ илрүүлэх"
-
-msgid "Server to query"
-msgstr ""
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr ""
-
-msgid "Accounts"
-msgstr "Гишүүнчлэл"
-
-msgid "Authentications"
-msgstr "Гэрчилгээ"
-
-msgid "Automation"
-msgstr "Автоматжуулах"
-
-msgid "Clients"
-msgstr "Хэрэглэгчид"
-
-msgid "Collaboration"
-msgstr "Хамтын ажиллагаа"
-
-msgid "Components"
-msgstr "Нэг хэсэг"
-
-msgid "Rooms"
-msgstr "Өрөөнүүд"
-
-msgid "Directories"
-msgstr "Удирдлага"
-
-msgid "Gateways"
-msgstr "Гарцнууд"
-
-msgid "News"
-msgstr "Мэдээ"
-
-msgid "Hierarchy"
-msgstr ""
-
-msgid "Proxies"
-msgstr "Итгэмжлэл"
-
-msgid "Publication/Subscription"
-msgstr "Зарлал"
-
-msgid "Storage"
-msgstr "Агуулах"
-
-msgid "Service offline or broken"
-msgstr "Сервис эвдэрлээ"
-
-msgid "Your inbox"
-msgstr "Таньд ирсэн захианууд"
-
-msgid "Available actions"
-msgstr "Идвэхтэй үйл ажиллагаа"
-
-msgid "Clean"
-msgstr "Арилгах"
-
-msgid "New"
-msgstr "Шинэ"
-
-msgid "Received"
-msgstr "Хүлээн авсан"
-
-msgid "Subject"
-msgstr "Гарчиг"
-
-msgid "Content"
-msgstr "Агуулга"
-
-msgid "Send message"
-msgstr "Илгээх"
-
-msgid "Your inbox is empty."
-msgstr "Таны захиа алга"
-
-msgid "MUC administration"
-msgstr "Өрөөний удирдлагын хэсэг"
-
-msgid "You administrate this room"
-msgstr "Та өрөөг удирдах боломжтой"
-
-msgid "Enter new subject"
-msgstr "Шинэ гарчиг оруулах"
-
-msgid "Configuration"
-msgstr "Гадаад хэлбэр"
-
-msgid "Authorizations"
-msgstr "Зөвшөөрөл олгох"
-
-msgid "Member list"
-msgstr "Гишүүн"
-
-msgid "Owner list"
-msgstr "Эзэмшигч"
-
-msgid "Administrator list"
-msgstr "Удирдлага"
-
-msgid "Outcast list"
-msgstr "Хөөгдөгч"
-
-msgid "Add an input"
-msgstr "Нэмэх"
-
-msgid "Destroy this MUC"
-msgstr "Өрөөг устгах"
-
-msgid "Yes, let's do it!"
-msgstr "Устгах"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr ""
-
-msgid "Your friend is writing a message..."
-msgstr ""
-
-msgid "Your friend stopped writing a message."
-msgstr ""
-
-msgid "Your friend is doing something else."
-msgstr ""
-
-msgid "Your friend closed the chat."
-msgstr ""
-
-msgid "Requesting this service..."
-msgstr ""
-
-msgid "Loading"
-msgstr "Уншиж байна"
-
-msgid "changed his/her nickname to %s"
-msgstr "%s нэрээ солилоо."
-
-msgid "joined the chat room"
-msgstr "Өрөөнд нэвтэрлээ"
-
-msgid "left the chat room"
-msgstr "Өрөөнөөс гарлаа"
-
-msgid "%s left"
-msgstr "%s гарлаа"
-
-msgid "%s joined"
-msgstr "%s нэвтэрлээ"
-
-msgid "no status"
-msgstr "статус алга"
-
-msgid "has been kicked"
-msgstr "Гаргалаа"
-
-msgid "has been banned"
-msgstr "Хорьсон"
-
-msgid "no reason"
-msgstr "Шалтгаангүй"
-
-msgid "Communicate with the entire world!"
-msgstr "E-office!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-
-msgid "Hi there!"
-msgstr "Тавтай морил!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr ""
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-
-msgid "Previous"
-msgstr "Буцах"
-
-msgid "General"
-msgstr "Ерөнхий"
-
-msgid "Advanced"
-msgstr "Дэлгэрэнгүй"
-
-msgid "Resource"
-msgstr "Боломж"
-
-msgid "Priority"
-msgstr "Давуу эрх"
-
-msgid "Low"
-msgstr "Бага хэмжээ"
-
-msgid "Medium"
-msgstr "Дунд хэмжээ"
-
-msgid "High"
-msgstr "Дээд хэмжээ"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-
-msgid "login page"
-msgstr "нэвтрэх хуудас"
-
-msgid "Share this link with your friends:"
-msgstr ""
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-
-msgid "Required"
-msgstr "Хэрэгцээтэй"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "Та бүртгүүллээ, таны хаяг:"
-
-msgid "Manager"
-msgstr "Удирдагч"
-
-msgid "Encrypted"
-msgstr ""
-
-msgid "Unencrypted"
-msgstr ""
-
-msgid "Where are you?"
-msgstr "Та хаана байна?"
-
-msgid "What's up with you?"
-msgstr "Таниар сонин сайхан?"
-
-msgid "Type something you want to share with your friends..."
-msgstr "Та өөрийнхөө бодлыг найзуудтайгаа хуваалцана уу?"
-
-msgid "Fetching the social channel..."
-msgstr ""
-
-msgid "You are synchronized with your network."
-msgstr ""
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr ""
-
-msgid "Media viewer"
-msgstr "Бичлэг үзэгч"
-
-msgid "Browse"
-msgstr "Нэмэх"
-
-msgid "Command"
-msgstr "Комманд"
-
-msgid "Subscribe"
-msgstr "нэгдэх"
-
-msgid "Join"
-msgstr "нэвтрэх"
-
-msgid "Automatic"
-msgstr "автомат"
-
-msgid "Search"
-msgstr "Хайх"
-
-msgid "No result!"
-msgstr "Үр дүн олдсонгүй"
-
-msgid "No notifications."
-msgstr "Мэдээлэл алга"
-
-msgid "would like to add you as a friend."
-msgstr ""
-
-msgid "would like you to join this chatroom:"
-msgstr ""
-
-msgid "Do you accept?"
-msgstr "Та зөвшөөрөх үү?"
-
-msgid "Yes"
-msgstr "Тийм"
-
-msgid "No"
-msgstr "Үгүй"
-
-msgid "would like to get authorization."
-msgstr ""
-
-msgid "would like to send you a file: “%s”."
-msgstr ""
-
-msgid "has received a file exchange request: “%s”."
-msgstr ""
-
-msgid "has accepted to receive your file: “%s”."
-msgstr ""
-
-msgid "has rejected to receive your file: “%s”."
-msgstr ""
-
-msgid "could not receive your file: “%s”."
-msgstr ""
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr ""
-
-msgid "commented an item you follow: “%s”."
-msgstr ""
-
-msgid "liked your post: “%s”."
-msgstr ""
-
-msgid "quoted you somewhere: “%s”."
-msgstr ""
-
-msgid "published on your wall: “%s”."
-msgstr ""
-
-msgid "tagged you in a photo (%s)."
-msgstr ""
-
-msgid "tagged you in a video (%s)."
-msgstr ""
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-
-msgid "Open"
-msgstr "Нээх"
-
-msgid "Show"
-msgstr "Харах"
-
-msgid "Hide"
-msgstr "Нуух"
-
-msgid "Submit"
-msgstr "Орох"
-
-msgid "Client"
-msgstr "Хэрэглэгч"
-
-msgid "System"
-msgstr "Систем"
-
-msgid "Local time"
-msgstr ""
-
-msgid "Comments"
-msgstr "Коммент"
-
-msgid "User profile"
-msgstr "Хэрэглчэгийн профайл"
-
-msgid "See his/her position on the globe"
-msgstr ""
-
-msgid "Confirm"
-msgstr "Зөвшөөрөх"
-
-msgid "anonymous mode"
-msgstr ""
-
-msgid "Groups"
-msgstr "Группууд"
-
-msgid "Unclassified"
-msgstr "Нууцлаагүй"
-
-msgid "Authorize"
-msgstr "Зөвшөөрөх"
-
-msgid "Ask for authorization"
-msgstr "Зөвшөөрсөн эсэхийг асуух"
-
-msgid "Unblock"
-msgstr "Хаагаагүй"
-
-msgid "Prohibit"
-msgstr "Хориглох"
-
-msgid "Block"
-msgstr "Хаасан"
-
-msgid "Chat"
-msgstr "Чат"
-
-msgid "Groupchat"
-msgstr "Групп чат"
-
-msgid "Jappix Mobile"
-msgstr "Утас"
-
-msgid "Desktop"
-msgstr "Компьютер"
-
-msgid "Mobile"
-msgstr "Утас"
-
-msgid "Please wait..."
-msgstr "Түр хүлээнэ үү..."
-
-msgid "Please enable JavaScript"
-msgstr "Javascript-г идвэхжүүлнэ үү"
-
-msgid "Show comments"
-msgstr "Сэтгэгдлүүдийг харах"
-
-msgid "Loading comments..."
-msgstr "Сэтгэгдлийг уншиж байна..."
-
-msgid "Could not get the comments!"
-msgstr ""
-
-msgid "Comments locked!"
-msgstr ""
-
-msgid "Type your comment here..."
-msgstr "Сэтгэгдлээ бичнэ үү..."
-
-msgid "Your channel"
-msgstr "Таны суваг"
-
-msgid "Channel of"
-msgstr "Сувагын"
-
-msgid "More notices..."
-msgstr "Бусад мэдээлэл"
-
-msgid "Attach a file"
-msgstr "Файл хавсаргах"
-
-msgid "Send"
-msgstr "Илгээх"
-
-msgid "Unattach the file"
-msgstr "Файл хавсаргахаа болих"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-
-msgid "Authorization failed"
-msgstr ""
-
-msgid "Registration failed, please choose a different username"
-msgstr ""
-
-msgid "Service unavailable"
-msgstr ""
-
-msgid "Internal server error, try later"
-msgstr ""
-
-msgid "Your form has been sent."
-msgstr ""
-
-msgid "Application"
-msgstr ""
-
-msgid "Media integration"
-msgstr ""
-
-msgid "Keep local chat archives"
-msgstr ""
-
-msgid "XMPP links"
-msgstr ""
-
-msgid "Open XMPP links with Jappix"
-msgstr ""
-
-msgid "changed the subject to:"
-msgstr ""
-
-msgid "Welcome!"
-msgstr "Тавтай морил!"
-
-msgid "Friends"
-msgstr "Найзууд"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr ""
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-
-msgid "Enable notification sounds"
-msgstr ""
-
-msgid "Share your position on the globe"
-msgstr ""
-
-msgid "Offline friends"
-msgstr "Идвэхгүй байгаа найзууд"
-
-msgid "Don't hide offline friends"
-msgstr ""
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr ""
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-
-msgid "Share Jappix on %s"
-msgstr ""
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr ""
-
-msgid "Unknown name"
-msgstr ""
-
-msgid "Unknown country"
-msgstr ""
-
-msgid "Click to enable"
-msgstr ""
-
-msgid "Click to disable"
-msgstr ""
-
-msgid "Installation"
-msgstr ""
-
-msgid "Jappix installation"
-msgstr ""
-
-msgid "Welcome to the Jappix installation!"
-msgstr ""
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-
-msgid "Installation Steps:"
-msgstr ""
-
-msgid "Welcome"
-msgstr "Тавтай морил"
-
-msgid "Storage configuration"
-msgstr ""
-
-msgid "Administrator account"
-msgstr ""
-
-msgid "Main configuration"
-msgstr ""
-
-msgid "Hosts configuration"
-msgstr ""
-
-msgid "Services installation"
-msgstr ""
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr ""
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr ""
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-
-msgid "User"
-msgstr "Хэрэглэгч"
-
-msgid "Service"
-msgstr "Сервис"
-
-msgid "Service name"
-msgstr "Сервисийн нэр"
-
-msgid "Service description"
-msgstr "Сервисийн мэдээлэл"
-
-msgid "Owner name"
-msgstr ""
-
-msgid "Owner website"
-msgstr ""
-
-msgid "Connection"
-msgstr "Холболт"
-
-msgid "Lock the host"
-msgstr ""
-
-msgid "Anonymous mode"
-msgstr ""
-
-msgid "HTTP authentication"
-msgstr ""
-
-msgid "Registration allowed"
-msgstr ""
-
-msgid "Use the built-in BOSH proxy"
-msgstr ""
-
-msgid "Manager link"
-msgstr ""
-
-msgid "Groupchats to join"
-msgstr ""
-
-msgid "Suggest groupchats"
-msgstr ""
-
-msgid "Encryption"
-msgstr ""
-
-msgid "HTTPS storage"
-msgstr ""
-
-msgid "Force HTTPS"
-msgstr ""
-
-msgid "Compression"
-msgstr ""
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-
-msgid "Main host"
-msgstr ""
-
-msgid "Groupchat host"
-msgstr ""
-
-msgid "Pubsub host"
-msgstr ""
-
-msgid "Anonymous host"
-msgstr ""
-
-msgid "Directory host"
-msgstr ""
-
-msgid "BOSH host"
-msgstr ""
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-
-msgid "Thanks for using Jappix!"
-msgstr ""
-
-msgid "Next"
-msgstr "Дараах"
-
-msgid "Finish"
-msgstr "Төгсгөл"
-
-msgid "Check again"
-msgstr "Дахин шалгах"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-
-msgid "%s is installed on your system."
-msgstr ""
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr ""
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr ""
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-
-msgid "Jappix manager"
-msgstr ""
-
-msgid "Manager access"
-msgstr ""
-
-msgid "Statistics"
-msgstr ""
-
-msgid "Hosts"
-msgstr ""
-
-msgid "Design"
-msgstr "Загвар"
-
-msgid "Repeat"
-msgstr "Засах"
-
-msgid "All"
-msgstr "Бүгд"
-
-msgid "Horizontal"
-msgstr "Хөндлөн"
-
-msgid "Vertical"
-msgstr "Босоо"
-
-msgid "Center"
-msgstr "Төв"
-
-msgid "Left"
-msgstr "Зүүн"
-
-msgid "Right"
-msgstr "Баруун"
-
-msgid "Top"
-msgstr "Дээр"
-
-msgid "Bottom"
-msgstr "Доор"
-
-msgid "Adapt"
-msgstr "Тааруулах"
-
-msgid "Color"
-msgstr "Өнгө"
-
-msgid "Users"
-msgstr "Хэрэглэгчид"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-
-msgid "Please use the form below to login to the administration panel."
-msgstr ""
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-
-msgid "Credentials"
-msgstr ""
-
-msgid "You have been logged out. Goodbye!"
-msgstr "Та чатаас гарлаа. Баяртай!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr ""
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr ""
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr ""
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr ""
-
-msgid "The image could not be received, would you mind retry?"
-msgstr ""
-
-msgid "Your service logo has been successfully changed!"
-msgstr ""
-
-msgid "Your image was added to the list!"
-msgstr ""
-
-msgid "Changes saved!"
-msgstr "Өөрчлөлт хадгалагдлаа"
-
-msgid "Logo"
-msgstr ""
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr ""
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-
-msgid "Remove this logo"
-msgstr ""
-
-msgid "View this logo"
-msgstr ""
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-
-msgid "Access statistics"
-msgstr ""
-
-msgid "Share statistics"
-msgstr ""
-
-msgid "Other statistics"
-msgstr ""
-
-msgid "January"
-msgstr ""
-
-msgid "February"
-msgstr ""
-
-msgid "March"
-msgstr ""
-
-msgid "April"
-msgstr ""
-
-msgid "May"
-msgstr ""
-
-msgid "June"
-msgstr ""
-
-msgid "July"
-msgstr ""
-
-msgid "August"
-msgstr ""
-
-msgid "September"
-msgstr ""
-
-msgid "October"
-msgstr ""
-
-msgid "November"
-msgstr ""
-
-msgid "December"
-msgstr ""
-
-msgid "Monday"
-msgstr ""
-
-msgid "Tuesday"
-msgstr ""
-
-msgid "Wednesday"
-msgstr ""
-
-msgid "Thursday"
-msgstr ""
-
-msgid "Friday"
-msgstr ""
-
-msgid "Saturday"
-msgstr ""
-
-msgid "Sunday"
-msgstr ""
-
-msgid "Total"
-msgstr "Бүгд"
-
-msgid "Archives"
-msgstr ""
-
-msgid "Music"
-msgstr "Дуу"
-
-msgid "Backgrounds"
-msgstr ""
-
-msgid "Share"
-msgstr "Хуваах"
-
-msgid "Background"
-msgstr "Арын зураг"
-
-msgid "Notice"
-msgstr "Мэдээлэл"
-
-msgid "Your design preferences have been saved!"
-msgstr ""
-
-msgid "Please check your inputs: something is missing!"
-msgstr ""
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-
-msgid "Use default background"
-msgstr ""
-
-msgid "Use your own image"
-msgstr ""
-
-msgid "Select a background to use and change the display options."
-msgstr ""
-
-msgid "Use your own color"
-msgstr ""
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr ""
-
-msgid "Manage backgrounds"
-msgstr ""
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr ""
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-
-msgid "Simple notice"
-msgstr "Энгийн мэдээлэл"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-
-msgid "Advanced notice"
-msgstr "Чухал мэдээлэл"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-
-msgid "Available updates"
-msgstr ""
-
-msgid "What's new?"
-msgstr "Шинэ юм?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr ""
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr ""
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-
-msgid "Check for updates"
-msgstr ""
-
-msgid "Update in progress"
-msgstr ""
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr ""
-
-msgid "The update has failed! Please try again later."
-msgstr ""
-
-msgid "Downloading package..."
-msgstr ""
-
-msgid "Removing current Jappix system files..."
-msgstr ""
-
-msgid "Extracting package..."
-msgstr ""
-
-msgid "Regenerating storage folder tree..."
-msgstr ""
-
-msgid "Jappix is now up to date!"
-msgstr ""
-
-msgid "Aborted: socket error!"
-msgstr ""
-
-msgid "Aborted: buffer error!"
-msgstr ""
-
-msgid "Aborted: everything is not writable!"
-msgstr ""
-
-msgid "Aborted: could not extract the package!"
-msgstr ""
-
-msgid "Visits"
-msgstr "зочид"
-
-msgid "Daily"
-msgstr "өдөр бүр"
-
-msgid "Weekly"
-msgstr "долоо хоног бүр"
-
-msgid "Monthly"
-msgstr "сар бүр"
-
-msgid "Yearly"
-msgstr "жил бүр"
-
-msgid "Size"
-msgstr "хэмжээ"
-
-msgid "Clean everything"
-msgstr ""
-
-msgid "Purge cache"
-msgstr ""
-
-msgid "Purge logs"
-msgstr ""
-
-msgid "Purge sent files"
-msgstr ""
-
-msgid "Purge updates"
-msgstr ""
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr ""
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr ""
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-
-msgid "Title"
-msgstr "Нэр"
-
-msgid "Artist"
-msgstr "Дуучин"
-
-msgid "Album"
-msgstr "Цомог"
-
-msgid "File"
-msgstr "Файл"
-
-msgid "Upload"
-msgstr "Байршуулах"
-
-msgid "The folder is empty."
-msgstr "Хавтас хоосон байна."
-
-msgid "The music could not be received, please retry!"
-msgstr ""
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-
-msgid "Your music has been added!"
-msgstr "Таны дуу нэмгдлээ"
-
-msgid "The selected elements have been removed."
-msgstr ""
-
-msgid "You must select elements to remove!"
-msgstr ""
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-
-msgid "Manage"
-msgstr "Удирдах"
-
-msgid "List"
-msgstr "Жагсаалт"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-
-msgid "The user has been added!"
-msgstr "Хэрэглэгч нэмэгдлээ"
-
-msgid "The chosen users have been removed."
-msgstr "Сонгосон хэрэглэгч устсан байна"
-
-msgid "You must select one or more users to be removed!"
-msgstr ""
-
-msgid "Yesterday"
-msgstr "Өчигдөр"
-
-msgid "%s days ago"
-msgstr "%s хоногийн өмнө"
-
-msgid "User currently active"
-msgstr ""
-
-msgid "Last seen: %s"
-msgstr ""
-
-msgid "Inactive since: %s"
-msgstr ""
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr ""
-
-msgid "Static content server"
-msgstr ""
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr ""
-
-msgid "User uploads server"
-msgstr ""
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr ""
-
-msgid "Suggested friends"
-msgstr "Санал болгосон найзууд"
-
-msgid "Check all"
-msgstr "Бүгдийг сонгох"
-
-msgid "Uncheck all"
-msgstr "Бүгдийг сонгохоо болих"
-
-msgid "Choose"
-msgstr "Сонгох"
-
-msgid "List name"
-msgstr "Жагсаалтны нэр"
-
-msgid "Allow"
-msgstr "Зөвшөөрөх"
-
-msgid "Deny"
-msgstr "Татгалзах"
-
-msgid "Group"
-msgstr "Групп"
-
-msgid "Subscription"
-msgstr "Батлах"
-
-msgid "Both"
-msgstr "аль аль нь"
-
-msgid "From"
-msgstr "- с"
-
-msgid "Everybody"
-msgstr "Бүгд"
-
-msgid "Send messages"
-msgstr "Захиа илгээх"
-
-msgid "Send queries"
-msgstr ""
-
-msgid "See my status"
-msgstr "Миний статусыг харах"
-
-msgid "Send his/her status"
-msgstr "Статусаа илгээх"
-
-msgid "Everything"
-msgstr "Бүгд"
-
-msgid "Item"
-msgstr "Хэсэг"
-
-msgid "Order"
-msgstr "Захиалга"
-
-msgid "Active for this session"
-msgstr "Идвэхтэй session"
-
-msgid "Always active"
-msgstr "Үргэлж идвэхтэй"
-
-msgid "User directory"
-msgstr "Хэрэглэгчийн удирглага"
-
-msgid "Search a friend"
-msgstr "Найзаа хайх"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-
-msgid "Send him/her a message"
-msgstr "Захиай илгээх"
-
-msgid "Start a chat with him/her"
-msgstr "Түүнтэй чатлах"
-
-msgid "Available shortcuts:"
-msgstr "Идвэхтэй shortcuts"
-
-msgid "%s removes the chat logs"
-msgstr ""
-
-msgid "%s joins a groupchat"
-msgstr "%s групп чатад нэвтэрлээ"
-
-msgid "%s closes the chat"
-msgstr "%s групп чатаас гарлаа"
-
-msgid "%s shows the user profile"
-msgstr "%s - н профайл харах"
-
-msgid "%s sends a message to the room"
-msgstr "%s - руу захиа илгээх"
-
-msgid "%s changes your nickname"
-msgstr "%s таны нэрийн сольсон"
-
-msgid "%s sends a message to someone in the room"
-msgstr ""
-
-msgid "%s changes the room topic"
-msgstr ""
-
-msgid "%s kicks a user of the room"
-msgstr ""
-
-msgid "%s bans a user of the room"
-msgstr ""
-
-msgid "%s invites someone to join the room"
-msgstr ""
-
-msgid "Public profile"
-msgstr "Нээлттэй профайл"
-
-msgid "Your profile anywhere on the Web."
-msgstr ""
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-
-msgid "Yay, let's create your public profile!"
-msgstr ""
-
-msgid "Enable my public profile"
-msgstr ""
-
-msgid "Jappix for your phone"
-msgstr ""
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr ""
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-
-msgid "You haven't provided any file to download"
-msgstr ""
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr ""
-
-msgid "Woah this file isn't found, please double check"
-msgstr ""
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr ""
-
-msgid "Statistics are currently disabled in the settings."
-msgstr ""
-
-msgid "New event!"
-msgstr "Шинэ мэдээ!"
-
-msgid "%s is typing..."
-msgstr "%s бичиж байна..."
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-
-msgid "Username"
-msgstr "Хэрэглэгчийн нэр"
-
-msgid "Enter password"
-msgstr "Нууц үг оруулах"
-
-msgid "Once again..."
-msgstr "Дахин оролдох"
-
-msgid "Code"
-msgstr "Зод"
-
-msgid "Security code"
-msgstr "Нууцлалын код"
-
-msgid "Advertising space available!"
-msgstr "Рекламны орон зай идвэхжлээ!"
-
-msgid "Advertise here"
-msgstr "Зарлал"
-
-msgid "Analytics (%s)"
-msgstr ""
-
-msgid "Track visits"
-msgstr ""
-
-msgid "Piwik URL"
-msgstr ""
-
-msgid "Piwik tracking ID"
-msgstr ""
-
-msgid "Advertising (%s)"
-msgstr ""
-
-msgid "Enable ads"
-msgstr ""
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "Content ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "Mute"
-msgstr ""
-
-msgid "Unmute"
-msgstr ""
-
-msgid "Is calling you"
-msgstr ""
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr ""
-
-msgid "Waiting..."
-msgstr ""
-
-msgid "Ringing..."
-msgstr ""
-
-msgid "Declined the call"
-msgstr ""
-
-msgid "Call error"
-msgstr ""
-
-msgid "Ended the call"
-msgstr ""
-
-msgid "Call ended"
-msgstr ""
-
-msgid "Call canceled"
-msgstr ""
-
-msgid "Canceled the call"
-msgstr ""
-
-msgid "Is already in a call"
-msgstr ""
-
-msgid "Ending call..."
-msgstr ""
-
-msgid "Accept"
-msgstr ""
-
-msgid "Decline"
-msgstr ""
-
-msgid "Okay"
-msgstr ""
-
-msgid "Retry"
-msgstr ""
-
-msgid "Audio Call"
-msgstr ""
-
-msgid "Video Call"
-msgstr ""
diff --git a/i18n/nl/LC_MESSAGES/main.mo b/i18n/nl/LC_MESSAGES/main.mo
deleted file mode 100644
index 60a3918c..00000000
--- a/i18n/nl/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/nl/LC_MESSAGES/main.po b/i18n/nl/LC_MESSAGES/main.po
deleted file mode 100644
index ca599431..00000000
--- a/i18n/nl/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2417 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-# devMaeb <devmaeb@gmail.com>, 2014
-# Midgard, 2013
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-10-13 10:45+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Dutch (http://www.transifex.com/projects/p/jappix/language/"
-"nl/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: nl\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.9\n"
-
-msgid "default:LTR"
-msgstr "default:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"JavaScript is niet aanwezig in je browser, je kan Jappix niet gebruiken! Los "
-"dit alsjeblieft op."
-
-msgid "Social channel, chat and more."
-msgstr "Sociaal kanaal, chat en meer."
-
-msgid "Create your public profile."
-msgstr "Je openbaar profiel maken."
-
-msgid "A mini-chat for your website."
-msgstr "Een minichat voor je website."
-
-msgid "Get Jappix, get support."
-msgstr ""
-
-msgid "Statistics around Jappix."
-msgstr "Statistieken in verband met Jappix."
-
-msgid "Legal disclaimer for Jappix."
-msgstr ""
-
-msgid "Download Jappix for free."
-msgstr "Download Jappix gratis."
-
-msgid "Contribute to the Jappix code."
-msgstr "Draag bij aan de Jappixcode."
-
-msgid "Jappix for your company."
-msgstr "Jappix voor uw bedrijf."
-
-msgid "Find a public Jappix node."
-msgstr "Zoek een openbare Jappix-node."
-
-msgid "Credits"
-msgstr ""
-
-msgid "Association"
-msgstr ""
-
-msgid "Company"
-msgstr ""
-
-msgid "Legal"
-msgstr "Legaal"
-
-msgid "Legal disclaimer"
-msgstr ""
-
-msgid "Terms of use and legal"
-msgstr ""
-
-msgid "Owner"
-msgstr "Eigenaar"
-
-msgid "Node owner"
-msgstr ""
-
-msgid "By using our service, you accept %s."
-msgstr "Door onze dienst te gebruiken gaat u akkoord met %s."
-
-msgid "our terms of use"
-msgstr "onze gebruiksvoorwaarden"
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Jappix is onderbroken door een netwerk probleem, een fout of een slechte "
-"login (controleer dat je de juiste gegevens hebt ingegeven), sorry voor het "
-"ongemak."
-
-msgid "The element list on this server could not be obtained!"
-msgstr "De lijst van elementen op deze server kon niet worden opgevraagd!"
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr "Uw paswoord is gewijzigd, U kan nu aanmelden met de nieuwe gegevens."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "Je XMPP-account is verwijderd, daag!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "Je bent uitgelogd van je XMPP-account, prettige dag verder!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr ""
-"De kamer die je binnenkwam bestaat nog niet. Je moet ze eerst aanmaken!"
-
-msgid "The groupchat has been removed."
-msgstr ""
-"Het groepsgesprek is verwijderd. Nu kan iemand anders ze opnieuw aanmaken."
-
-msgid "The user that you want to reach is not present in the room."
-msgstr ""
-"De gebruiker die je probeert te bereiken, is niet aanwezig in de kamer."
-
-msgid "Please enter the group chat address to join."
-msgstr "Geef alsjeblieft het groepschatadres in om erbij te komen."
-
-msgid "Please enter your nickname to join %s."
-msgstr "Gelieve je nickname in te geven om je bij %s te voegen."
-
-msgid "This room (%s) is protected with a password."
-msgstr "Deze kamer (%s) is beveiligd met een wachtwoord."
-
-msgid "Your browser is out of date!"
-msgstr "Je browser is verouderd!"
-
-msgid "Last %s version is better!"
-msgstr "De laatste versie van %s is beter!"
-
-msgid "Login"
-msgstr "Log in"
-
-msgid "Register"
-msgstr "Registreer"
-
-msgid "Here we go!"
-msgstr "Hier gaan we dan!"
-
-msgid "Server"
-msgstr "Server"
-
-msgid "Password"
-msgstr "Paswoord"
-
-msgid "Remember me"
-msgstr "Herinner mij"
-
-msgid "This tool has been disabled!"
-msgstr "Dit hulpmiddel is uitgeschakeld!"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr "Door een netwerkfout is de verbinding verbroken. Wat wil je doen?"
-
-msgid "Reconnect"
-msgstr "Opnieuw verbinden"
-
-msgid "Messages"
-msgstr "Berichten"
-
-msgid "Profile"
-msgstr "Profiel"
-
-msgid "Options"
-msgstr "Opties"
-
-msgid "Disconnect"
-msgstr "Verbreek de verbinding"
-
-msgid "Filter"
-msgstr "Filteren"
-
-msgid "Add a friend"
-msgstr "Een vriend toevoegen"
-
-msgid "Your groupchats"
-msgstr "Jouw groepschats"
-
-msgid "Audio/video conference"
-msgstr "Audio/video bespreking"
-
-msgid "Launch a group call"
-msgstr ""
-
-msgid "Audio conference"
-msgstr "Audio bespreking"
-
-msgid "Video conference"
-msgstr "Video bespreking"
-
-msgid "Conference call"
-msgstr ""
-
-msgid "Manage your favorite groupchats"
-msgstr "Beheer je favoriete groepsgesprekken"
-
-msgid "More stuff"
-msgstr "Meer"
-
-msgid "Show all friends"
-msgstr "Toon alle vrienden"
-
-msgid "Only show connected friends"
-msgstr "Toon alleen vrienden die verbonden zijn"
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "Berichten archief"
-
-msgid "Date"
-msgstr "Datum"
-
-msgid "A short message?"
-msgstr "Een kort bericht?"
-
-msgid "How are you?"
-msgstr "Hoe gaat het ermee?"
-
-msgid "What are you doing?"
-msgstr "Wat ben je aan het doen?"
-
-msgid "Join a chat"
-msgstr "Een chat binnengaan"
-
-msgid "Status"
-msgstr "Status"
-
-msgid "Available"
-msgstr "Beschikbaar"
-
-msgid "Talkative"
-msgstr "Spraakzaam"
-
-msgid "Away"
-msgstr "Weg"
-
-msgid "Not available"
-msgstr "Niet beschikbaar"
-
-msgid "Busy"
-msgstr "Bezig"
-
-msgid "Offline"
-msgstr ""
-
-msgid "Mood"
-msgstr "Gemoedstoestand"
-
-msgid "None"
-msgstr "Geen"
-
-msgid "Crazy"
-msgstr "Gek"
-
-msgid "Excited"
-msgstr "Opgewonden"
-
-msgid "Playful"
-msgstr "Speels"
-
-msgid "Happy"
-msgstr "Vrolijk"
-
-msgid "Shocked"
-msgstr "Geschokt"
-
-msgid "Hot"
-msgstr "Vurig"
-
-msgid "Sad"
-msgstr "Triest"
-
-msgid "Amorous"
-msgstr "Verliefd"
-
-msgid "Confident"
-msgstr "Zelfverzekerd"
-
-msgid "Activity"
-msgstr "Activiteit"
-
-msgid "Chores"
-msgstr "Klusjes"
-
-msgid "Drinking"
-msgstr "Drinken"
-
-msgid "Eating"
-msgstr "Eten"
-
-msgid "Exercising"
-msgstr "Oefenen"
-
-msgid "Grooming"
-msgstr "Persoonlijke hygiëne aan het verzorgen"
-
-msgid "Appointment"
-msgstr "Afspraak"
-
-msgid "Inactive"
-msgstr "Inactief"
-
-msgid "Relaxing"
-msgstr "Uitrusten"
-
-msgid "Talking"
-msgstr "Praten"
-
-msgid "Traveling"
-msgstr "Reizen"
-
-msgid "Working"
-msgstr "Werken"
-
-msgid "View profile"
-msgstr "Profiel bekijken"
-
-msgid "This is a repeat from %s"
-msgstr "Dit is een herhaling van %s"
-
-msgid "Repeat this notice"
-msgstr "Herhaal deze melding"
-
-msgid "Remove this notice"
-msgstr "Verwijder deze melding"
-
-msgid "Your profile"
-msgstr "Jouw profiel"
-
-msgid "Identity"
-msgstr "Identiteit"
-
-msgid "Profile image"
-msgstr "Profielfoto"
-
-msgid "Others"
-msgstr ""
-
-msgid "Other"
-msgstr ""
-
-msgid "Personal"
-msgstr "Persoonlijk"
-
-msgid "Complete name"
-msgstr "Volledige naam"
-
-msgid "Nickname"
-msgstr "Nickname"
-
-msgid "First name"
-msgstr "Voornaam"
-
-msgid "Last name"
-msgstr "Achternaam"
-
-msgid "Date of birth"
-msgstr "Geboortedatum"
-
-msgid "Contact"
-msgstr "Contact"
-
-msgid "E-mail"
-msgstr "E-mail"
-
-msgid "Phone"
-msgstr "Telefoon"
-
-msgid "Website"
-msgstr "Website"
-
-msgid "Current"
-msgstr ""
-
-msgid "Delete"
-msgstr "Verwijder"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr "Jammer, er is geen profielfoto ingesteld in je visitekaartje!"
-
-msgid "Address"
-msgstr "Adres"
-
-msgid "Street"
-msgstr "Straat"
-
-msgid "City"
-msgstr "Stad"
-
-msgid "Postal code"
-msgstr "Postcode"
-
-msgid "Country"
-msgstr "Land"
-
-msgid "Biography"
-msgstr "Biografie"
-
-msgid "Important notice"
-msgstr "Belangrijke mededeling"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr ""
-"Niet alles is privé in XMPP; dit is zoiets, je openbaar profiel (vCard)."
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"Het is ten zeerste aangeraden een profielfoto te uploaden (maximaal %s), "
-"zoals een foto van jezelf, want dat maakt je gemakkelijk herkenbaar voor je "
-"vrienden."
-
-msgid "Save"
-msgstr "Opslaan"
-
-msgid "Cancel"
-msgstr "Annuleren"
-
-msgid "Edit options"
-msgstr "Bewerk opties"
-
-msgid "Channel"
-msgstr "Kanaal"
-
-msgid "Commands"
-msgstr "Commando's"
-
-msgid "Sounds"
-msgstr "Geluiden"
-
-msgid "Privacy"
-msgstr "Privacy"
-
-msgid "Message archiving"
-msgstr "Bericht archivering"
-
-msgid "Store an history of your chats"
-msgstr "Bewaar de geschiedenis van je gesprekken"
-
-msgid "Geolocation"
-msgstr "Geolocatie"
-
-msgid "Disabled"
-msgstr "Uitgeschakeld"
-
-msgid "Store all chats"
-msgstr "Bewaar alle gesprekken"
-
-msgid "Store friend chats"
-msgstr ""
-
-msgid "Remove all archives"
-msgstr "Verwijder alle archieven"
-
-msgid "Empty"
-msgstr "Leeg"
-
-msgid "Empty channel"
-msgstr "Leeg kanaal"
-
-msgid "Persistent"
-msgstr "Blijvend"
-
-msgid "Maximum notices"
-msgstr "Maximale meldingen"
-
-msgid "Account"
-msgstr "Account"
-
-msgid "Change password"
-msgstr "Wachtwoord veranderen"
-
-msgid "Delete account"
-msgstr "Account verwijderen"
-
-msgid "Old"
-msgstr "Oud"
-
-msgid "New (2 times)"
-msgstr "Nieuw (2 keer)"
-
-msgid "Suggested chatrooms"
-msgstr ""
-
-msgid "Skip"
-msgstr "Overslaan"
-
-msgid "Continue"
-msgstr "Doorgaan"
-
-msgid "To"
-msgstr "Naar"
-
-msgid "Close"
-msgstr "Sluiten"
-
-msgid "unknown"
-msgstr "onbekend"
-
-msgid "Unavailable"
-msgstr "Niet beschikbaar"
-
-msgid "is now"
-msgstr "is nu"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Gelieve te wachten terwijl je avatar wordt geüpload..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "Hier is-ie! Een mooie, nieuwe profielfoto!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr ""
-"Dit afbeeldingsbestand wordt niet ondersteund of heeft een slecht formaat."
-
-msgid "Reply"
-msgstr "Antwoord"
-
-msgid "Error"
-msgstr "Fout"
-
-msgid "Click here to solve the error"
-msgstr "Klik hier om het probleem op te lossen"
-
-msgid "You"
-msgstr "Jij"
-
-msgid "Remove"
-msgstr "Verwijder"
-
-msgid "Rename"
-msgstr "Hernoem"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Hallo, ik ben %s, ik zou je willen toevoegen als vriend."
-
-msgid "Smiley insertion"
-msgstr "Emoticon invoegen"
-
-msgid "Change style"
-msgstr "Stijl veranderen"
-
-msgid "Text in bold"
-msgstr "Tekst vetgedrukt"
-
-msgid "Text in italic"
-msgstr "Tekst schuin"
-
-msgid "Underlined text"
-msgstr "Tekst onderstreept"
-
-msgid "Send a file"
-msgstr "Bestand verzenden"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr ""
-"Eens het is geüpload, zal je vriend worden gevraagd om het bestand dat je "
-"verzend te downloaden."
-
-msgid "Save chat"
-msgstr "Chat opslaan"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"Klik op de volgende link om de chatlog aan te vragen, en wacht. Klik dan "
-"opnieuw om het bestand te krijgen."
-
-msgid "This chat is empty!"
-msgstr "Deze chat is leeg!"
-
-msgid "Generate file!"
-msgstr "Genereer bestand!"
-
-msgid "Download file!"
-msgstr "Download bestand!"
-
-msgid "Clean current chat"
-msgstr "Huidige chat wissen"
-
-msgid "Show user profile"
-msgstr "Toon gebruikersprofiel"
-
-msgid "Add this contact to your friends"
-msgstr "Voeg dit contact toe als vriend"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Voeg deze groupschat toe aan je favorieten"
-
-msgid "All tabs"
-msgstr "Alle tabs"
-
-msgid "Join groupchat"
-msgstr ""
-
-msgid "Close this tab"
-msgstr "Sluit deze tab"
-
-msgid "no subject defined for this room."
-msgstr "Deze kamer heeft geen onderwerp"
-
-msgid "Administration panel for this room"
-msgstr "Beheer voor deze kamer"
-
-msgid "Moderators"
-msgstr ""
-
-msgid "Participants"
-msgstr "Deelnemers"
-
-msgid "Visitors"
-msgstr "Bezoekers"
-
-msgid "Manage favorite rooms"
-msgstr ""
-
-msgid "Change favorites"
-msgstr "Favorieten veranderen"
-
-msgid "Search a room"
-msgstr "Zoek een kamer"
-
-msgid "Select a favorite"
-msgstr "Selecteer een favoriet"
-
-msgid "Getting the name..."
-msgstr ""
-
-msgid "Gateway"
-msgstr ""
-
-msgid "Name"
-msgstr "Naam"
-
-msgid "Room"
-msgstr "Kamer"
-
-msgid "Add"
-msgstr "Voeg toe"
-
-msgid "Edit"
-msgstr "Wijzig"
-
-msgid "Search a room on"
-msgstr ""
-
-msgid "No room found on this server."
-msgstr "Geen kamer gevonden op deze server"
-
-msgid "Service discovery"
-msgstr ""
-
-msgid "Server to query"
-msgstr ""
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr ""
-
-msgid "Accounts"
-msgstr ""
-
-msgid "Authentications"
-msgstr "Authenticaties"
-
-msgid "Automation"
-msgstr "Automatie"
-
-msgid "Clients"
-msgstr "Cliënten"
-
-msgid "Collaboration"
-msgstr "Samenwerking"
-
-msgid "Components"
-msgstr "Onderdelen"
-
-msgid "Rooms"
-msgstr "Kamers"
-
-msgid "Directories"
-msgstr ""
-
-msgid "Gateways"
-msgstr ""
-
-msgid "News"
-msgstr "Nieuws"
-
-msgid "Hierarchy"
-msgstr "Hiërarchie"
-
-msgid "Proxies"
-msgstr ""
-
-msgid "Publication/Subscription"
-msgstr ""
-
-msgid "Storage"
-msgstr "Opslag"
-
-msgid "Service offline or broken"
-msgstr ""
-
-msgid "Your inbox"
-msgstr "Uw inbox"
-
-msgid "Available actions"
-msgstr "Beschikabre acties"
-
-msgid "Clean"
-msgstr ""
-
-msgid "New"
-msgstr "Nieuw"
-
-msgid "Received"
-msgstr "Ontvangen"
-
-msgid "Subject"
-msgstr "Onderwerp"
-
-msgid "Content"
-msgstr "Inhoud"
-
-msgid "Send message"
-msgstr "Bericht versturen"
-
-msgid "Your inbox is empty."
-msgstr "Uw inbox is leeg"
-
-msgid "MUC administration"
-msgstr "MUC beheer"
-
-msgid "You administrate this room"
-msgstr ""
-
-msgid "Enter new subject"
-msgstr "Nieuw onderwerp invoeren"
-
-msgid "Configuration"
-msgstr "Configuratie"
-
-msgid "Authorizations"
-msgstr ""
-
-msgid "Member list"
-msgstr ""
-
-msgid "Owner list"
-msgstr ""
-
-msgid "Administrator list"
-msgstr ""
-
-msgid "Outcast list"
-msgstr ""
-
-msgid "Add an input"
-msgstr ""
-
-msgid "Destroy this MUC"
-msgstr "Verwijder deze MUC"
-
-msgid "Yes, let's do it!"
-msgstr "Ja, laten we het doen!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr ""
-
-msgid "Your friend is writing a message..."
-msgstr "Je vriend schrijft een bericht..."
-
-msgid "Your friend stopped writing a message."
-msgstr "Je vriend is gestopt met het schrijven van een bericht."
-
-msgid "Your friend is doing something else."
-msgstr "Je vriend is wat anders aan het doen."
-
-msgid "Your friend closed the chat."
-msgstr ""
-
-msgid "Requesting this service..."
-msgstr ""
-
-msgid "Loading"
-msgstr "Laden"
-
-msgid "changed his/her nickname to %s"
-msgstr ""
-
-msgid "joined the chat room"
-msgstr ""
-
-msgid "left the chat room"
-msgstr ""
-
-msgid "%s left"
-msgstr ""
-
-msgid "%s joined"
-msgstr ""
-
-msgid "no status"
-msgstr ""
-
-msgid "has been kicked"
-msgstr ""
-
-msgid "has been banned"
-msgstr ""
-
-msgid "no reason"
-msgstr ""
-
-msgid "Communicate with the entire world!"
-msgstr ""
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-
-msgid "Hi there!"
-msgstr "Hallo!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr ""
-"Log in op je bestaande XMPP account of creëer gratis een nieuw account!"
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-
-msgid "Previous"
-msgstr "Vorige"
-
-msgid "General"
-msgstr "Algemeen"
-
-msgid "Advanced"
-msgstr "Geavanceerd"
-
-msgid "Resource"
-msgstr ""
-
-msgid "Priority"
-msgstr "Prioriteit"
-
-msgid "Low"
-msgstr "Laag"
-
-msgid "Medium"
-msgstr "Middelmatig"
-
-msgid "High"
-msgstr "Hoog"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-
-msgid "login page"
-msgstr "Login pagina"
-
-msgid "Share this link with your friends:"
-msgstr "Deel deze link met je vrienden:"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-
-msgid "Required"
-msgstr "Verplicht"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "Je bent geregistreerd, hier is je XMPP adres:"
-
-msgid "Manager"
-msgstr "Manager"
-
-msgid "Encrypted"
-msgstr "Versleuteld"
-
-msgid "Unencrypted"
-msgstr ""
-
-msgid "Where are you?"
-msgstr "Waar ben je?"
-
-msgid "What's up with you?"
-msgstr "Hoe gaat het met je?"
-
-msgid "Type something you want to share with your friends..."
-msgstr ""
-
-msgid "Fetching the social channel..."
-msgstr "Binnenhalen van het kanaal..."
-
-msgid "You are synchronized with your network."
-msgstr "Je bent gesynchroniseerd met het netwerk"
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "Kan niets verzenden: je kunt alleen berichten ontvangen!"
-
-msgid "Media viewer"
-msgstr ""
-
-msgid "Browse"
-msgstr "Blader"
-
-msgid "Command"
-msgstr "Commando"
-
-msgid "Subscribe"
-msgstr "Inschrijven"
-
-msgid "Join"
-msgstr "Aanmelden"
-
-msgid "Automatic"
-msgstr "Automatisch"
-
-msgid "Search"
-msgstr "Zoek"
-
-msgid "No result!"
-msgstr "Geen resultaat!"
-
-msgid "No notifications."
-msgstr "Geen meldingen"
-
-msgid "would like to add you as a friend."
-msgstr "zou je graag als vriend toevoegen."
-
-msgid "would like you to join this chatroom:"
-msgstr "wil naar je chatroom komen."
-
-msgid "Do you accept?"
-msgstr "Ben je het ermee eens?"
-
-msgid "Yes"
-msgstr "Ja"
-
-msgid "No"
-msgstr "Nee"
-
-msgid "would like to get authorization."
-msgstr "wil geauthoriseerd worden."
-
-msgid "would like to send you a file: “%s”."
-msgstr ""
-
-msgid "has received a file exchange request: “%s”."
-msgstr ""
-
-msgid "has accepted to receive your file: “%s”."
-msgstr ""
-
-msgid "has rejected to receive your file: “%s”."
-msgstr ""
-
-msgid "could not receive your file: “%s”."
-msgstr ""
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr ""
-
-msgid "commented an item you follow: “%s”."
-msgstr ""
-
-msgid "liked your post: “%s”."
-msgstr "vindt jouw bericht leuk: \"%s\"."
-
-msgid "quoted you somewhere: “%s”."
-msgstr ""
-
-msgid "published on your wall: “%s”."
-msgstr ""
-
-msgid "tagged you in a photo (%s)."
-msgstr ""
-
-msgid "tagged you in a video (%s)."
-msgstr ""
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-
-msgid "Open"
-msgstr ""
-
-msgid "Show"
-msgstr "Tonen"
-
-msgid "Hide"
-msgstr "Verbergen"
-
-msgid "Submit"
-msgstr "Verzend"
-
-msgid "Client"
-msgstr "Client"
-
-msgid "System"
-msgstr "Systeem"
-
-msgid "Local time"
-msgstr "Lokale tijd"
-
-msgid "Comments"
-msgstr "Commentaar"
-
-msgid "User profile"
-msgstr "Gebruikers profiel"
-
-msgid "See his/her position on the globe"
-msgstr "Bekijk zijn/haar positie op de wereld"
-
-msgid "Confirm"
-msgstr "Bevestig"
-
-msgid "anonymous mode"
-msgstr "anonieme modus"
-
-msgid "Groups"
-msgstr "Groepen"
-
-msgid "Unclassified"
-msgstr "Ongeklassificeerd"
-
-msgid "Authorize"
-msgstr "Autoriseer"
-
-msgid "Ask for authorization"
-msgstr "Vraag om een authorisatie"
-
-msgid "Unblock"
-msgstr "Deblokkeren"
-
-msgid "Prohibit"
-msgstr "Toegestaan"
-
-msgid "Block"
-msgstr "Blokkeren"
-
-msgid "Chat"
-msgstr "Gesprek"
-
-msgid "Groupchat"
-msgstr "Groepsgesprek"
-
-msgid "Jappix Mobile"
-msgstr "Jappix Mobiel"
-
-msgid "Desktop"
-msgstr "Desktop"
-
-msgid "Mobile"
-msgstr "Mobiel"
-
-msgid "Please wait..."
-msgstr "Even geduld aub ..."
-
-msgid "Please enable JavaScript"
-msgstr "Activeer Javascript"
-
-msgid "Show comments"
-msgstr "Laat reacties zien"
-
-msgid "Loading comments..."
-msgstr "Reacties aan het laden..."
-
-msgid "Could not get the comments!"
-msgstr "De reacties konden niet worden opgehaald!"
-
-msgid "Comments locked!"
-msgstr ""
-
-msgid "Type your comment here..."
-msgstr "Typ uw reactie hier..."
-
-msgid "Your channel"
-msgstr "Jouw kanaal"
-
-msgid "Channel of"
-msgstr "Kanaal van"
-
-msgid "More notices..."
-msgstr "Meer mededelingen..."
-
-msgid "Attach a file"
-msgstr "Toevoegen van bestand"
-
-msgid "Send"
-msgstr "Verzenden"
-
-msgid "Unattach the file"
-msgstr ""
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-
-msgid "Authorization failed"
-msgstr ""
-
-msgid "Registration failed, please choose a different username"
-msgstr "Registratie mislukt, kies een andere gebruikersnaam"
-
-msgid "Service unavailable"
-msgstr "Dienst niet beschikbaar"
-
-msgid "Internal server error, try later"
-msgstr "Interne server fout, probeer het later"
-
-msgid "Your form has been sent."
-msgstr "Uw formulier is verzonden."
-
-msgid "Application"
-msgstr "Applicatie"
-
-msgid "Media integration"
-msgstr "Media integratie"
-
-msgid "Keep local chat archives"
-msgstr "Behoud lokale gespreksarchieven"
-
-msgid "XMPP links"
-msgstr "XMPP links"
-
-msgid "Open XMPP links with Jappix"
-msgstr "Open XMPP links met Jappix"
-
-msgid "changed the subject to:"
-msgstr "onderwerp veranderd naar:"
-
-msgid "Welcome!"
-msgstr "Welkom!"
-
-msgid "Friends"
-msgstr "Vrienden"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr "Welkom bij Jappix, uw eigen sociale cloud!"
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-
-msgid "Enable notification sounds"
-msgstr "Schakel notificatiegeluiden in"
-
-msgid "Share your position on the globe"
-msgstr "Deel je locatie op de wereld"
-
-msgid "Offline friends"
-msgstr "Offline vrienden"
-
-msgid "Don't hide offline friends"
-msgstr "Verberg offline vrienden niet"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-"Gebruik dit hulpmiddel om jouw vrienden op de server die je nu gebruikt te "
-"vinden, of voeg ze later toe."
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr "Goed gedaan! Nu mag je Jappix met je vrienden delen!"
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-"Wanneer je op de knop om op te slaan klikt, zal de profielbewerker openen. "
-"Veel plezier met socialiseren!"
-
-msgid "Share Jappix on %s"
-msgstr "Deel Jappix via %s"
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr ""
-
-msgid "Unknown name"
-msgstr "Onbekende naam"
-
-msgid "Unknown country"
-msgstr "Onbekend land"
-
-msgid "Click to enable"
-msgstr "Klik om in te schakelen"
-
-msgid "Click to disable"
-msgstr "Klik om uit te zetten"
-
-msgid "Installation"
-msgstr "Installatie"
-
-msgid "Jappix installation"
-msgstr "Jappix installatie"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "Welkom bij de installatie van Jappix!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-"Dit zal je helpen met het gemakkelijk installeren van Jappix, het eerste "
-"volledige XMPP-gebaseerde sociale platform, op jouw server."
-
-msgid "Installation Steps:"
-msgstr "Stappen van de installatie:"
-
-msgid "Welcome"
-msgstr "Welkom"
-
-msgid "Storage configuration"
-msgstr "Opslagconfiguratie"
-
-msgid "Administrator account"
-msgstr "Beheerdersaccount"
-
-msgid "Main configuration"
-msgstr ""
-
-msgid "Hosts configuration"
-msgstr ""
-
-msgid "Services installation"
-msgstr "Installatie van diensten"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"Als je hulp nodig hebt bij de installatie en configuratie van Jappix, kun je "
-"onze hele documentatie gebruiken, verkrijgbaar op:"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-"Het is tijd om jouw eigen sociale cloud te bouwen: ga door naar de volgende "
-"stap!"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr "De map is bewerkbaar, je kunt doorgaan!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-"Jappix biedt je de mogelijkheid om je configuratie te beheren, nieuwe "
-"plugins te installeren of naar updates te zoeken. Dat is waarom je een "
-"beheerdersaccount moet creëren zodat je toegang hebt tot de beheerder."
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr ""
-"Oeps, je bent iets vergeten of de twee wachtwoorden komen niet overeen!"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-"Hulp nodig? Lees onze documentatiepagina om te weten te komen hoe je dit "
-"formulier invult!"
-
-msgid "User"
-msgstr "Gebruiker"
-
-msgid "Service"
-msgstr "Dienst"
-
-msgid "Service name"
-msgstr ""
-
-msgid "Service description"
-msgstr ""
-
-msgid "Owner name"
-msgstr "Naam van de eigenaar"
-
-msgid "Owner website"
-msgstr "Website van de eigenaar"
-
-msgid "Connection"
-msgstr "Verbinding"
-
-msgid "Lock the host"
-msgstr ""
-
-msgid "Anonymous mode"
-msgstr "Anonieme modus"
-
-msgid "HTTP authentication"
-msgstr "HTTP authenticatie"
-
-msgid "Registration allowed"
-msgstr "Registratie toegestaan"
-
-msgid "Use the built-in BOSH proxy"
-msgstr "Gebruik de ingebouwde BOSH proxy"
-
-msgid "Manager link"
-msgstr ""
-
-msgid "Groupchats to join"
-msgstr "Groepsgesprekken om aan deel te nemen"
-
-msgid "Suggest groupchats"
-msgstr "Suggereer groepsgesprekken"
-
-msgid "Encryption"
-msgstr "Encryptie"
-
-msgid "HTTPS storage"
-msgstr "HTTPS opslag"
-
-msgid "Force HTTPS"
-msgstr ""
-
-msgid "Compression"
-msgstr "Compressie"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"Deze pagina helpt je bij het selecteren van de standaard hosts waarmee "
-"Jappix verbinding zal maken. Je kunt dit laten zoals het is en doorgaan, als "
-"je de officiële service hosts wil gebruiken."
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"Misschien weet je niet wat een BOSH server is? In feite is dit een relais "
-"tussen een Jappix client en een XMPP server, dit is nodig vanwege technische "
-"beperkingen."
-
-msgid "Main host"
-msgstr ""
-
-msgid "Groupchat host"
-msgstr ""
-
-msgid "Pubsub host"
-msgstr ""
-
-msgid "Anonymous host"
-msgstr "Anonieme host"
-
-msgid "Directory host"
-msgstr ""
-
-msgid "BOSH host"
-msgstr "BOSH host"
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-
-msgid "Thanks for using Jappix!"
-msgstr "Bedankt voor het gebruiken van Jappix!"
-
-msgid "Next"
-msgstr "Volgende"
-
-msgid "Finish"
-msgstr "Voltooien"
-
-msgid "Check again"
-msgstr "Opnieuw controleren"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-
-msgid "%s is installed on your system."
-msgstr "$s is geïnstalleerd op uw systeem."
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s is niet geïnstalleerd op uw systeem, u moet %2s installeren."
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr ""
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-
-msgid "Jappix manager"
-msgstr "Jappix beheerder"
-
-msgid "Manager access"
-msgstr "Toegang tot de beheerder"
-
-msgid "Statistics"
-msgstr "Statistieken"
-
-msgid "Hosts"
-msgstr "Hosts"
-
-msgid "Design"
-msgstr "Ontwerp"
-
-msgid "Repeat"
-msgstr "Herhalen"
-
-msgid "All"
-msgstr "Alles"
-
-msgid "Horizontal"
-msgstr "Horizontaal"
-
-msgid "Vertical"
-msgstr "Verticaal"
-
-msgid "Center"
-msgstr "Midden"
-
-msgid "Left"
-msgstr "Links"
-
-msgid "Right"
-msgstr "Rechts"
-
-msgid "Top"
-msgstr "Boven"
-
-msgid "Bottom"
-msgstr "Onder"
-
-msgid "Adapt"
-msgstr ""
-
-msgid "Color"
-msgstr "Kleur"
-
-msgid "Users"
-msgstr "Gebruikers"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-"Dit is een beperkt gebied: alleen de geautoriseerde gebruikers kunnen deze "
-"Jappix node beheren."
-
-msgid "Please use the form below to login to the administration panel."
-msgstr ""
-"Gebruik het formulier hier onder om in te loggen in het administratiepanel"
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-"Om beveiliging te verbeteren, zijn sessie beperkt in tijd. Wanneer je "
-"browser sluit, zul je worden uitgelogd."
-
-msgid "Credentials"
-msgstr ""
-
-msgid "You have been logged out. Goodbye!"
-msgstr "Je bent uitgelogd. Een goede dag!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-"Oeps, je kon niet als geldige beheerder worden herkend. Controleer je "
-"gegevens!"
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr ""
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr ""
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr ""
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr ""
-
-msgid "The image could not be received, would you mind retry?"
-msgstr ""
-
-msgid "Your service logo has been successfully changed!"
-msgstr ""
-
-msgid "Your image was added to the list!"
-msgstr ""
-
-msgid "Changes saved!"
-msgstr "Wijzigingen opgeslagen!"
-
-msgid "Logo"
-msgstr "Logo"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr "Upload elk logo met de aangerade maximum pixel grootte."
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-
-msgid "Remove this logo"
-msgstr "Verwijder dit logo"
-
-msgid "View this logo"
-msgstr "Bekijk dit logo"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-
-msgid "Access statistics"
-msgstr "Toegangsstatistieken"
-
-msgid "Share statistics"
-msgstr ""
-
-msgid "Other statistics"
-msgstr "Andere statistieken"
-
-msgid "January"
-msgstr "Januari"
-
-msgid "February"
-msgstr "Februari"
-
-msgid "March"
-msgstr "Maart"
-
-msgid "April"
-msgstr "April"
-
-msgid "May"
-msgstr "Mei"
-
-msgid "June"
-msgstr "Juni"
-
-msgid "July"
-msgstr "Juli"
-
-msgid "August"
-msgstr "Augustus"
-
-msgid "September"
-msgstr "September"
-
-msgid "October"
-msgstr "Oktober"
-
-msgid "November"
-msgstr "November"
-
-msgid "December"
-msgstr "December"
-
-msgid "Monday"
-msgstr "Maandag"
-
-msgid "Tuesday"
-msgstr "Dinsdag"
-
-msgid "Wednesday"
-msgstr "Woensdag"
-
-msgid "Thursday"
-msgstr "Donderdag"
-
-msgid "Friday"
-msgstr "Vrijdag"
-
-msgid "Saturday"
-msgstr "Zaterdag"
-
-msgid "Sunday"
-msgstr "Zondag"
-
-msgid "Total"
-msgstr "Totaal"
-
-msgid "Archives"
-msgstr "Archieven"
-
-msgid "Music"
-msgstr "Muziek"
-
-msgid "Backgrounds"
-msgstr "Achtergronden"
-
-msgid "Share"
-msgstr "Delen"
-
-msgid "Background"
-msgstr "Achtergrond"
-
-msgid "Notice"
-msgstr ""
-
-msgid "Your design preferences have been saved!"
-msgstr "Je ontwerpvoorkeuren zijn opgeslagen!"
-
-msgid "Please check your inputs: something is missing!"
-msgstr "Controleer je invoeringen: er mist iets!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-
-msgid "Use default background"
-msgstr "Gebruik standaard achtergrond"
-
-msgid "Use your own image"
-msgstr "Gebruik je eigen afbeelding"
-
-msgid "Select a background to use and change the display options."
-msgstr ""
-"Selecteer een achtergrond om te gebruiken en verander de weergaveopties."
-
-msgid "Use your own color"
-msgstr "Gebruik je eigen kleur"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr ""
-"Typ de hexadecimale waarde van de kleur die je wil gebruiken als achtergrond."
-
-msgid "Manage backgrounds"
-msgstr "Beheer achtergronden"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-"Je kan een nieuwe achtergrond aan de lijst toevoegen met dit hulpmiddel. "
-"Verzend alstublieft een geldige afbeelding."
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr ""
-"Als je enkele achtergronden wil verwijderen, gebruik de browser hieronder."
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-
-msgid "Simple notice"
-msgstr ""
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-
-msgid "Advanced notice"
-msgstr ""
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-
-msgid "Available updates"
-msgstr "Beschikbare updates"
-
-msgid "What's new?"
-msgstr "Wat is er nieuw?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr ""
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-"U gebruikt een ontwikkelaarsversie van Jappix. Update het via onze "
-"repository door dit uit te voeren: %s."
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-"Een nieuwe versie van Jappix is beschikbaar. Check wat er nieuw is en start "
-"de update!"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr ""
-"Uw huidige versie is verouderd. Update hem nu naar %s door hier te klikken!"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"Uw huidige versie lijkt up-to-date, u kan zelf echter altijd naar updates "
-"zoeken door hier te klikken."
-
-msgid "Check for updates"
-msgstr "Zoek naar updates"
-
-msgid "Update in progress"
-msgstr "Update is in behandeling"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr ""
-"Jappix is bijgewerkt: u gebruikt nu de meest recente versie. Veel plezier!"
-
-msgid "The update has failed! Please try again later."
-msgstr "De update is afgebroken. Probeer het later opnieuw."
-
-msgid "Downloading package..."
-msgstr "Pakket aan het downloaden..."
-
-msgid "Removing current Jappix system files..."
-msgstr "Huidige Jappix systeembestanden aan het verwijderen..."
-
-msgid "Extracting package..."
-msgstr "Pakket uitpakken..."
-
-msgid "Regenerating storage folder tree..."
-msgstr ""
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix is nu up-to-date!"
-
-msgid "Aborted: socket error!"
-msgstr "Afgebroken: socket error!"
-
-msgid "Aborted: buffer error!"
-msgstr "Afgebroken: buffer error!"
-
-msgid "Aborted: everything is not writable!"
-msgstr "Afgebroken: niets is bewerkbaar!"
-
-msgid "Aborted: could not extract the package!"
-msgstr ""
-
-msgid "Visits"
-msgstr ""
-
-msgid "Daily"
-msgstr "Dagelijks"
-
-msgid "Weekly"
-msgstr "Wekelijks"
-
-msgid "Monthly"
-msgstr "Maandelijks"
-
-msgid "Yearly"
-msgstr "Jaarlijks"
-
-msgid "Size"
-msgstr "Grootte"
-
-msgid "Clean everything"
-msgstr ""
-
-msgid "Purge cache"
-msgstr ""
-
-msgid "Purge logs"
-msgstr ""
-
-msgid "Purge sent files"
-msgstr ""
-
-msgid "Purge updates"
-msgstr ""
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr ""
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr ""
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-
-msgid "Title"
-msgstr "Titel"
-
-msgid "Artist"
-msgstr "Artiest"
-
-msgid "Album"
-msgstr "Album"
-
-msgid "File"
-msgstr "Bestand"
-
-msgid "Upload"
-msgstr "Uploaden"
-
-msgid "The folder is empty."
-msgstr "De map is leeg."
-
-msgid "The music could not be received, please retry!"
-msgstr ""
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-
-msgid "Your music has been added!"
-msgstr "Je muziek is toegevoegd!"
-
-msgid "The selected elements have been removed."
-msgstr "De geselecteerde elementen zijn verwijderd."
-
-msgid "You must select elements to remove!"
-msgstr "Je moet elementen selecteren om ze te kunnen verwijderen!"
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-
-msgid "Manage"
-msgstr "Beheren"
-
-msgid "List"
-msgstr "Lijst"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-
-msgid "The user has been added!"
-msgstr "De gebruiker is toegevoegd!"
-
-msgid "The chosen users have been removed."
-msgstr ""
-
-msgid "You must select one or more users to be removed!"
-msgstr ""
-
-msgid "Yesterday"
-msgstr "Gisteren"
-
-msgid "%s days ago"
-msgstr "%s dagen geleden"
-
-msgid "User currently active"
-msgstr "Gebruiker momenteel actief"
-
-msgid "Last seen: %s"
-msgstr "Laatst gezien: %s"
-
-msgid "Inactive since: %s"
-msgstr "Inactief sinds: %s"
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr "Je vriend lijkt je bericht(en) niet te hebben ontvangen!"
-
-msgid "Static content server"
-msgstr ""
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr ""
-
-msgid "User uploads server"
-msgstr ""
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr ""
-
-msgid "Suggested friends"
-msgstr "Voorgestelde vrienden"
-
-msgid "Check all"
-msgstr "Alles aanvinken"
-
-msgid "Uncheck all"
-msgstr "Alles uitvinken"
-
-msgid "Choose"
-msgstr "Kies"
-
-msgid "List name"
-msgstr ""
-
-msgid "Allow"
-msgstr "Toestaan"
-
-msgid "Deny"
-msgstr "Weigeren"
-
-msgid "Group"
-msgstr "Groep"
-
-msgid "Subscription"
-msgstr "Abonnement"
-
-msgid "Both"
-msgstr ""
-
-msgid "From"
-msgstr "Van"
-
-msgid "Everybody"
-msgstr "Iedereen"
-
-msgid "Send messages"
-msgstr "Berichten versturen"
-
-msgid "Send queries"
-msgstr "Queries versturen"
-
-msgid "See my status"
-msgstr "Mijn status bekijken"
-
-msgid "Send his/her status"
-msgstr "Zijn/haar status versturen"
-
-msgid "Everything"
-msgstr "Alles"
-
-msgid "Item"
-msgstr ""
-
-msgid "Order"
-msgstr ""
-
-msgid "Active for this session"
-msgstr ""
-
-msgid "Always active"
-msgstr "Altijd actief"
-
-msgid "User directory"
-msgstr "Gebruikersmap"
-
-msgid "Search a friend"
-msgstr "Zoek een vriend"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-
-msgid "Send him/her a message"
-msgstr "Stuur hem/haar een bericht"
-
-msgid "Start a chat with him/her"
-msgstr "Start een chat met hem/haar"
-
-msgid "Available shortcuts:"
-msgstr "Beschikbare snelkoppelingen:"
-
-msgid "%s removes the chat logs"
-msgstr ""
-
-msgid "%s joins a groupchat"
-msgstr ""
-
-msgid "%s closes the chat"
-msgstr "% sluit de chat"
-
-msgid "%s shows the user profile"
-msgstr ""
-
-msgid "%s sends a message to the room"
-msgstr ""
-
-msgid "%s changes your nickname"
-msgstr "%s verandert jouw bijnaam"
-
-msgid "%s sends a message to someone in the room"
-msgstr ""
-
-msgid "%s changes the room topic"
-msgstr ""
-
-msgid "%s kicks a user of the room"
-msgstr ""
-
-msgid "%s bans a user of the room"
-msgstr ""
-
-msgid "%s invites someone to join the room"
-msgstr ""
-
-msgid "Public profile"
-msgstr "Openbaar profiel"
-
-msgid "Your profile anywhere on the Web."
-msgstr "Jouw profiel overal op het Web."
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-
-msgid "Yay, let's create your public profile!"
-msgstr "Jottem, laten we jouw openbare profiel creëren!"
-
-msgid "Enable my public profile"
-msgstr "Mijn openbare profiel aanzetten"
-
-msgid "Jappix for your phone"
-msgstr "Jappix voor je telefoon"
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr ""
-"Een enkele mobiele app voor berichten, kanalen, profielen en veel meer!"
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-
-msgid "You haven't provided any file to download"
-msgstr "Je hebt geen bestand om te downloaden verstrekt"
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr "Je kan geen bestand downloaden als je geen sleutel verstrekt"
-
-msgid "Woah this file isn't found, please double check"
-msgstr ""
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr ""
-
-msgid "Statistics are currently disabled in the settings."
-msgstr ""
-
-msgid "New event!"
-msgstr ""
-
-msgid "%s is typing..."
-msgstr "%s is aan het typen..."
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-"De gebruikersnaam die je hebt gekozen is niet verkrijgbaar. Probeer een "
-"andere gebruikersnaam."
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-
-msgid "Username"
-msgstr "Gebruikersnaam"
-
-msgid "Enter password"
-msgstr "Voer wachtwoord in"
-
-msgid "Once again..."
-msgstr "Opnieuw..."
-
-msgid "Code"
-msgstr "Code"
-
-msgid "Security code"
-msgstr "Beveiligingscode"
-
-msgid "Advertising space available!"
-msgstr "Advertentieruimte beschikbaar!"
-
-msgid "Advertise here"
-msgstr "Adverteer hier"
-
-msgid "Analytics (%s)"
-msgstr ""
-
-msgid "Track visits"
-msgstr ""
-
-msgid "Piwik URL"
-msgstr ""
-
-msgid "Piwik tracking ID"
-msgstr ""
-
-msgid "Advertising (%s)"
-msgstr ""
-
-msgid "Enable ads"
-msgstr "Schakel advertenties in"
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "Content ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "Leave"
-msgstr "Verlaten"
-
-msgid "Mute"
-msgstr "Dempen"
-
-msgid "Unmute"
-msgstr ""
-
-msgid "Nobody there. Invite some people!"
-msgstr ""
-
-msgid "Invite people..."
-msgstr "Mensen uitnodigen..."
-
-msgid "Enter people names..."
-msgstr ""
-
-msgid "Is calling you"
-msgstr "Belt je"
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr "Verbinden met gesprek..."
-
-msgid "Waiting..."
-msgstr "Wachten..."
-
-msgid "Ringing..."
-msgstr ""
-
-msgid "Declined the call"
-msgstr "Heeft het gesprek geweigerd"
-
-msgid "Call error"
-msgstr ""
-
-msgid "Ended the call"
-msgstr "Heeft het gesprek beëndigd"
-
-msgid "Call ended"
-msgstr "Gesprek beëindigd"
-
-msgid "Call canceled"
-msgstr "Gesprek geannuleerd"
-
-msgid "Canceled the call"
-msgstr "Heeft het gesprek geannuleerd"
-
-msgid "Is already in a call"
-msgstr ""
-
-msgid "Ending call..."
-msgstr ""
-
-msgid "Incoming group call"
-msgstr ""
-
-msgid "Preparing group call..."
-msgstr ""
-
-msgid "Connecting to group call..."
-msgstr ""
-
-msgid "Group call error"
-msgstr ""
-
-msgid "Ending group call..."
-msgstr ""
-
-msgid "Group call ended"
-msgstr ""
-
-msgid "Accept"
-msgstr "Accepteren"
-
-msgid "Decline"
-msgstr "Weigeren"
-
-msgid "Okay"
-msgstr "Okido"
-
-msgid "Retry"
-msgstr "Opnieuw proberen"
-
-msgid "Audio Call"
-msgstr ""
-
-msgid "Video Call"
-msgstr ""
-
-msgid "%s participant"
-msgstr ""
-
-msgid "%s participants"
-msgstr ""
-
-msgid "(full)"
-msgstr ""
-
-msgid "%s is able to receive group calls."
-msgstr ""
-
-msgid "%s may not support group calls."
-msgstr ""
-
-msgid "Send a message..."
-msgstr ""
-
-msgid "Edited"
-msgstr "Bewerkt"
-
-msgid "Edited (%s)"
-msgstr ""
-
-msgid "Editing"
-msgstr ""
-
-msgid "Being edited"
-msgstr "Wordt bewerkt"
-
-msgid "Delivered"
-msgstr ""
-
-msgid "Read"
-msgstr ""
-
-msgid "Sending..."
-msgstr ""
-
-msgid "%s requested your attention to the conversation"
-msgstr ""
-
-msgid "You requested %s's attention to the conversation"
-msgstr ""
-
-msgid "Attention to conversation requested."
-msgstr ""
diff --git a/i18n/oc/LC_MESSAGES/main.mo b/i18n/oc/LC_MESSAGES/main.mo
deleted file mode 100644
index 858ec9d1..00000000
--- a/i18n/oc/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/oc/LC_MESSAGES/main.po b/i18n/oc/LC_MESSAGES/main.po
deleted file mode 100644
index 7f7d3042..00000000
--- a/i18n/oc/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2276 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:21+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/"
-"jappix/language/oc/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: oc\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "default:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"JavaScript es pas dins vòstre navigator, podretz pas far foncionar Jappix ! "
-"Corregís aquò, si vos plai."
-
-msgid "Social channel, chat and more."
-msgstr ""
-
-msgid "Create your public profile."
-msgstr ""
-
-msgid "A mini-chat for your website."
-msgstr ""
-
-msgid "Get Jappix, get support."
-msgstr ""
-
-msgid "Statistics around Jappix."
-msgstr ""
-
-msgid "Legal disclaimer for Jappix."
-msgstr ""
-
-msgid "Download Jappix for free."
-msgstr ""
-
-msgid "Contribute to the Jappix code."
-msgstr ""
-
-msgid "Jappix for your company."
-msgstr ""
-
-msgid "Find a public Jappix node."
-msgstr ""
-
-msgid "Credits"
-msgstr ""
-
-msgid "Association"
-msgstr ""
-
-msgid "Web agency"
-msgstr ""
-
-msgid "Legal"
-msgstr ""
-
-msgid "Legal disclaimer"
-msgstr ""
-
-msgid "Terms of use and legal"
-msgstr ""
-
-msgid "Owner"
-msgstr ""
-
-msgid "Node owner"
-msgstr ""
-
-msgid "By using our service, you accept %s."
-msgstr ""
-
-msgid "our terms of use"
-msgstr ""
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Jappix es estat arrestat per un problema de malhum, un bug o de meschants "
-"identificants (de verificar). Fasetz-nos excusa. "
-
-msgid "The element list on this server could not be obtained!"
-msgstr ""
-"La lista daus elements presents sus queu servidor es pas estada obtenguda !"
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"Vòstre senhau es estat chamnhat, aura vos podetz connectar a vòstre compte "
-"emb vòstres noveus identificants. "
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "Vòstre compte XMPP es estat esfaçat, au reveire !"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "Setz estat desconnetat de vòstre compte XMPP, bona jornada !"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr "Lo charrador qu'avetz jongut existís pas. Zo podetz crear !"
-
-msgid "The groupchat has been removed."
-msgstr ""
-"Lo charrador es estat esfaçat, aura quauqu'un mai zo podrà tornar crear."
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "L'utilizaire que voletz júnher es pas present dins lo charrador. "
-
-msgid "Please enter the group chat address to join."
-msgstr "Picatz l'adreça dau charrador de júnher, si vos plai."
-
-msgid "Please enter your nickname to join %s."
-msgstr "Picatz vòstre chafre per júnher %s."
-
-msgid "This room (%s) is protected with a password."
-msgstr "Lo charrador (%s) es protegit per un senhau."
-
-msgid "Your browser is out of date!"
-msgstr "Vòstre navigator es pas a jorn !"
-
-msgid "Last %s version is better!"
-msgstr "La darriera version de %s es melhor !"
-
-msgid "Login"
-msgstr "Dubrir una session"
-
-msgid "Register"
-msgstr "Se marcar"
-
-msgid "Here we go!"
-msgstr "Anem, òc !"
-
-msgid "Server"
-msgstr "Servidor"
-
-msgid "Password"
-msgstr "Senhau"
-
-msgid "Remember me"
-msgstr "Se sovenir de me"
-
-msgid "This tool has been disabled!"
-msgstr "Queu gatge es estat desactivat, lo podetz pas utilizar !"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr ""
-"Per causa d'un problema de malhum, setz estat desconnectat. Que voletz far "
-"aura ?"
-
-msgid "Reconnect"
-msgstr "Tornar connectar"
-
-msgid "Messages"
-msgstr "Messatges"
-
-msgid "Profile"
-msgstr "Perfil"
-
-msgid "Options"
-msgstr "Preferéncias"
-
-msgid "Disconnect"
-msgstr "Barrar la session"
-
-msgid "Filter"
-msgstr "Filtrar"
-
-msgid "Add a friend"
-msgstr "Apondre un amic"
-
-msgid "Your groupchats"
-msgstr "Vòstres charradors"
-
-msgid "Manage your favorite groupchats"
-msgstr "Gerir vòstres charradors preferits"
-
-msgid "More stuff"
-msgstr "Mai de chausas"
-
-msgid "Show all friends"
-msgstr "Mostrar tots los amics"
-
-msgid "Only show connected friends"
-msgstr "Mostrar nonmàs los amics en linha"
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "Archius de messatges"
-
-msgid "Date"
-msgstr "Data"
-
-msgid "A short message?"
-msgstr "Un pitit messatge ?"
-
-msgid "How are you?"
-msgstr "Coma quò vai ?"
-
-msgid "What are you doing?"
-msgstr "Que fasetz ?"
-
-msgid "Join a chat"
-msgstr "Júnher una charrada"
-
-msgid "Status"
-msgstr "Estat"
-
-msgid "Available"
-msgstr "Disponible/a"
-
-msgid "Talkative"
-msgstr "Platussaire/a"
-
-msgid "Away"
-msgstr "Absent(a)"
-
-msgid "Not available"
-msgstr "Pas disponible"
-
-msgid "Busy"
-msgstr "Ocupat"
-
-msgid "Offline"
-msgstr ""
-
-msgid "Mood"
-msgstr "Umor"
-
-msgid "None"
-msgstr "Pas ren"
-
-msgid "Crazy"
-msgstr "Franc fadard(a)"
-
-msgid "Excited"
-msgstr "Excitat/ada"
-
-msgid "Playful"
-msgstr "Joiós/osa"
-
-msgid "Happy"
-msgstr "Aürós/osa"
-
-msgid "Shocked"
-msgstr "Impressionat/ada"
-
-msgid "Hot"
-msgstr "Chaud(a)"
-
-msgid "Sad"
-msgstr "Triste/a"
-
-msgid "Amorous"
-msgstr "Amorós/osa"
-
-msgid "Confident"
-msgstr "Fisançós/osa"
-
-msgid "Activity"
-msgstr "Activitat"
-
-msgid "Chores"
-msgstr "Corvadas"
-
-msgid "Drinking"
-msgstr "Beu"
-
-msgid "Eating"
-msgstr "Minja"
-
-msgid "Exercising"
-msgstr "Entraïnament"
-
-msgid "Grooming"
-msgstr "Se toaleta"
-
-msgid "Appointment"
-msgstr "Rendez-vos"
-
-msgid "Inactive"
-msgstr "Inactiu/iva"
-
-msgid "Relaxing"
-msgstr "Banturla"
-
-msgid "Talking"
-msgstr "Platussa"
-
-msgid "Traveling"
-msgstr "En viatge"
-
-msgid "Working"
-msgstr "Trabalha"
-
-msgid "View profile"
-msgstr "Veire lo perfil"
-
-msgid "This is a repeat from %s"
-msgstr ""
-
-msgid "Repeat this notice"
-msgstr "Repetir quel avís "
-
-msgid "Remove this notice"
-msgstr "Esfaçar quel avís "
-
-msgid "Your profile"
-msgstr "Vòstre perfil"
-
-msgid "Identity"
-msgstr "Identitat"
-
-msgid "Profile image"
-msgstr "Imatge de perfil"
-
-msgid "Others"
-msgstr "Autres"
-
-msgid "Other"
-msgstr ""
-
-msgid "Personal"
-msgstr "Personau"
-
-msgid "Complete name"
-msgstr "Nom complet"
-
-msgid "Nickname"
-msgstr "Chafre"
-
-msgid "First name"
-msgstr "Pitit nom"
-
-msgid "Last name"
-msgstr "Nom"
-
-msgid "Date of birth"
-msgstr "Data de naissença"
-
-msgid "Contact"
-msgstr "Contacte"
-
-msgid "E-mail"
-msgstr "Adreça electronica"
-
-msgid "Phone"
-msgstr "Telefòn"
-
-msgid "Website"
-msgstr "Sit web"
-
-msgid "Current"
-msgstr "Actuau"
-
-msgid "Delete"
-msgstr "Suprimir"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr ""
-"De que ? Avetz pas d'imatge de perfil definida sus vòstra carta d'identitat !"
-
-msgid "Address"
-msgstr "Adreça"
-
-msgid "Street"
-msgstr "Rua"
-
-msgid "City"
-msgstr "Vila"
-
-msgid "Postal code"
-msgstr "Còdi postau"
-
-msgid "Country"
-msgstr "País"
-
-msgid "Biography"
-msgstr "Biografia"
-
-msgid "Important notice"
-msgstr "Important"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr "Tot es pas privat sus XMPP, per exemple vòstre perfil (vCard)."
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"Qu'es recomandat de charjar un imatge de perfil (%s maximum), coma una fòto "
-"de vosautres, per que vòstres amics vos pueschan conéisser."
-
-msgid "Save"
-msgstr "Sauvar"
-
-msgid "Cancel"
-msgstr ""
-
-msgid "Edit options"
-msgstr "Editar las opcions"
-
-msgid "Channel"
-msgstr "Canau"
-
-msgid "Commands"
-msgstr "Òrdres"
-
-msgid "Sounds"
-msgstr "Sons"
-
-msgid "Privacy"
-msgstr "Vita privada"
-
-msgid "Message archiving"
-msgstr "Archivatge daus messatges"
-
-msgid "Store an history of your chats"
-msgstr ""
-
-msgid "Geolocation"
-msgstr "Geolocalizacion"
-
-msgid "Disabled"
-msgstr ""
-
-msgid "Store all chats"
-msgstr ""
-
-msgid "Store friend chats"
-msgstr ""
-
-msgid "Remove all archives"
-msgstr ""
-
-msgid "Empty"
-msgstr "Voidar"
-
-msgid "Empty channel"
-msgstr "Voidar lo canau"
-
-msgid "Persistent"
-msgstr "Persistent"
-
-msgid "Maximum notices"
-msgstr "Maximum d'avís"
-
-msgid "Account"
-msgstr "Compte"
-
-msgid "Change password"
-msgstr "Chamnhar de senhau"
-
-msgid "Delete account"
-msgstr "Suprimir lo compte"
-
-msgid "Old"
-msgstr "Ancian"
-
-msgid "New (2 times)"
-msgstr "Nuòu (2 còps)"
-
-msgid "Suggested chatrooms"
-msgstr ""
-
-msgid "Skip"
-msgstr ""
-
-msgid "Continue"
-msgstr "Contunhar"
-
-msgid "To"
-msgstr "A"
-
-msgid "Close"
-msgstr "Barrar"
-
-msgid "unknown"
-msgstr "inconegut/uda"
-
-msgid "Unavailable"
-msgstr "Desconnectat/ada"
-
-msgid "is now"
-msgstr "es aura"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Esperatz dau temps que vòstre avatar se charja..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "Veiquí ! Un brave imatge de perfil tot nuòu !"
-
-msgid "The image file is not supported or has a bad size."
-msgstr ""
-
-msgid "Reply"
-msgstr "Respondre"
-
-msgid "Error"
-msgstr "Error"
-
-msgid "Click here to solve the error"
-msgstr "Clicar aicí per corregir l'error"
-
-msgid "You"
-msgstr "Vosautres/as"
-
-msgid "Remove"
-msgstr ""
-
-msgid "Rename"
-msgstr "Renomenar "
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Adiu ! Sei %s, vos voldriá apondre coma amic."
-
-msgid "Smiley insertion"
-msgstr "Insercion d'emoticòna"
-
-msgid "Change style"
-msgstr "Chamnhar l'aparéncia"
-
-msgid "Text in bold"
-msgstr "Texte en gras"
-
-msgid "Text in italic"
-msgstr "Texte en italic"
-
-msgid "Underlined text"
-msgstr "Texte joslinhat"
-
-msgid "Send a file"
-msgstr ""
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr ""
-
-msgid "Save chat"
-msgstr "Enregistrar la charrada"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"Clicatz sus lo liam per aver l'istoric de la charrada. Puei tornatz clicar "
-"per lo recuperar."
-
-msgid "This chat is empty!"
-msgstr "Quela charrada es voida !"
-
-msgid "Generate file!"
-msgstr "Generar lo fichier !"
-
-msgid "Download file!"
-msgstr "Descharjar lo fichier !"
-
-msgid "Clean current chat"
-msgstr "Netiar la charrada "
-
-msgid "Show user profile"
-msgstr "Mostrar lo perfil de l'utilizaire"
-
-msgid "Add this contact to your friends"
-msgstr "Apondre queu contacte a vòstres amics"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Apondre queu charrador a vòstres preferits"
-
-msgid "All tabs"
-msgstr "Tots los onglets"
-
-msgid "Join groupchat"
-msgstr ""
-
-msgid "Close this tab"
-msgstr "Barrar quel onglet"
-
-msgid "no subject defined for this room."
-msgstr "p'un subjècte definit per queu charrador."
-
-msgid "Administration panel for this room"
-msgstr ""
-
-msgid "Moderators"
-msgstr "Moderador(a)s"
-
-msgid "Participants"
-msgstr "Participant(a)s"
-
-msgid "Visitors"
-msgstr "Visitaires/as"
-
-msgid "Manage favorite rooms"
-msgstr "Gerir los charradors preferits"
-
-msgid "Change favorites"
-msgstr "Modificar los preferits"
-
-msgid "Search a room"
-msgstr "Cerchar un charrador"
-
-msgid "Select a favorite"
-msgstr "Seleccionatz un preferit"
-
-msgid "Getting the name..."
-msgstr "Obtencion dau nom..."
-
-msgid "Gateway"
-msgstr "Passarèla"
-
-msgid "Name"
-msgstr "Nom"
-
-msgid "Room"
-msgstr "Charrador"
-
-msgid "Add"
-msgstr "Apondre"
-
-msgid "Edit"
-msgstr "Editar"
-
-msgid "Search a room on"
-msgstr ""
-
-msgid "No room found on this server."
-msgstr ""
-
-msgid "Service discovery"
-msgstr ""
-
-msgid "Server to query"
-msgstr ""
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr ""
-
-msgid "Accounts"
-msgstr "Comptes"
-
-msgid "Authentications"
-msgstr "Autentificacion  "
-
-msgid "Automation"
-msgstr "Automatizacion"
-
-msgid "Clients"
-msgstr "Clients"
-
-msgid "Collaboration"
-msgstr "Collaboracion"
-
-msgid "Components"
-msgstr "Compausants"
-
-msgid "Rooms"
-msgstr "Charradors"
-
-msgid "Directories"
-msgstr "Repertòris"
-
-msgid "Gateways"
-msgstr "Passarèlas"
-
-msgid "News"
-msgstr "Actualitats"
-
-msgid "Hierarchy"
-msgstr "Ierarchia"
-
-msgid "Proxies"
-msgstr "Proxies"
-
-msgid "Publication/Subscription"
-msgstr ""
-
-msgid "Storage"
-msgstr "Emmagazinatge"
-
-msgid "Service offline or broken"
-msgstr ""
-
-msgid "Your inbox"
-msgstr "Vòstra boitia d'arribada"
-
-msgid "Available actions"
-msgstr ""
-
-msgid "Clean"
-msgstr "Voidar"
-
-msgid "New"
-msgstr "Noveu"
-
-msgid "Received"
-msgstr "Reçaugut"
-
-msgid "Subject"
-msgstr "Subjècte"
-
-msgid "Content"
-msgstr "Contengut"
-
-msgid "Send message"
-msgstr "Enviar lo messatge"
-
-msgid "Your inbox is empty."
-msgstr "Vòstra boitia d'arribada es voida"
-
-msgid "MUC administration"
-msgstr ""
-
-msgid "You administrate this room"
-msgstr ""
-
-msgid "Enter new subject"
-msgstr ""
-
-msgid "Configuration"
-msgstr "Configuracion"
-
-msgid "Authorizations"
-msgstr "Autorizacions"
-
-msgid "Member list"
-msgstr ""
-
-msgid "Owner list"
-msgstr ""
-
-msgid "Administrator list"
-msgstr ""
-
-msgid "Outcast list"
-msgstr ""
-
-msgid "Add an input"
-msgstr ""
-
-msgid "Destroy this MUC"
-msgstr ""
-
-msgid "Yes, let's do it!"
-msgstr ""
-
-msgid "Your friend is paying attention to the conversation."
-msgstr ""
-
-msgid "Your friend is writing a message..."
-msgstr "Vòstre amic es a escriure un messatge..."
-
-msgid "Your friend stopped writing a message."
-msgstr ""
-
-msgid "Your friend is doing something else."
-msgstr ""
-
-msgid "Your friend closed the chat."
-msgstr ""
-
-msgid "Requesting this service..."
-msgstr ""
-
-msgid "Loading"
-msgstr "Charja"
-
-msgid "changed his/her nickname to %s"
-msgstr ""
-
-msgid "joined the chat room"
-msgstr ""
-
-msgid "left the chat room"
-msgstr ""
-
-msgid "%s left"
-msgstr ""
-
-msgid "%s joined"
-msgstr ""
-
-msgid "no status"
-msgstr ""
-
-msgid "has been kicked"
-msgstr ""
-
-msgid "has been banned"
-msgstr ""
-
-msgid "no reason"
-msgstr ""
-
-msgid "Communicate with the entire world!"
-msgstr ""
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-
-msgid "Hi there!"
-msgstr "Adiu !"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr ""
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-
-msgid "Previous"
-msgstr "Precedent"
-
-msgid "General"
-msgstr "Generau"
-
-msgid "Advanced"
-msgstr "Avançat"
-
-msgid "Resource"
-msgstr ""
-
-msgid "Priority"
-msgstr "Prioritat"
-
-msgid "Low"
-msgstr "Bassa"
-
-msgid "Medium"
-msgstr "Mejana"
-
-msgid "High"
-msgstr "Nauta"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-"Picatz lo nom dau charrador que voletz junher e vòstre chafre. Podetz tanben "
-"tornar a la %s. "
-
-msgid "login page"
-msgstr ""
-
-msgid "Share this link with your friends:"
-msgstr ""
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-
-msgid "Required"
-msgstr ""
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr ""
-
-msgid "Manager"
-msgstr ""
-
-msgid "Encrypted"
-msgstr ""
-
-msgid "Unencrypted"
-msgstr ""
-
-msgid "Where are you?"
-msgstr "Ente setz ?"
-
-msgid "What's up with you?"
-msgstr ""
-
-msgid "Type something you want to share with your friends..."
-msgstr ""
-
-msgid "Fetching the social channel..."
-msgstr ""
-
-msgid "You are synchronized with your network."
-msgstr ""
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr ""
-
-msgid "Media viewer"
-msgstr ""
-
-msgid "Browse"
-msgstr ""
-
-msgid "Command"
-msgstr ""
-
-msgid "Subscribe"
-msgstr ""
-
-msgid "Join"
-msgstr ""
-
-msgid "Automatic"
-msgstr ""
-
-msgid "Search"
-msgstr ""
-
-msgid "No result!"
-msgstr ""
-
-msgid "No notifications."
-msgstr ""
-
-msgid "would like to add you as a friend."
-msgstr ""
-
-msgid "would like you to join this chatroom:"
-msgstr ""
-
-msgid "Do you accept?"
-msgstr ""
-
-msgid "Yes"
-msgstr ""
-
-msgid "No"
-msgstr ""
-
-msgid "would like to get authorization."
-msgstr ""
-
-msgid "would like to send you a file: “%s”."
-msgstr ""
-
-msgid "has received a file exchange request: “%s”."
-msgstr ""
-
-msgid "has accepted to receive your file: “%s”."
-msgstr ""
-
-msgid "has rejected to receive your file: “%s”."
-msgstr ""
-
-msgid "could not receive your file: “%s”."
-msgstr ""
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr ""
-
-msgid "commented an item you follow: “%s”."
-msgstr ""
-
-msgid "liked your post: “%s”."
-msgstr ""
-
-msgid "quoted you somewhere: “%s”."
-msgstr ""
-
-msgid "published on your wall: “%s”."
-msgstr ""
-
-msgid "tagged you in a photo (%s)."
-msgstr ""
-
-msgid "tagged you in a video (%s)."
-msgstr ""
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-
-msgid "Open"
-msgstr ""
-
-msgid "Show"
-msgstr ""
-
-msgid "Hide"
-msgstr ""
-
-msgid "Submit"
-msgstr ""
-
-msgid "Client"
-msgstr ""
-
-msgid "System"
-msgstr ""
-
-msgid "Local time"
-msgstr ""
-
-msgid "Comments"
-msgstr ""
-
-msgid "User profile"
-msgstr ""
-
-msgid "See his/her position on the globe"
-msgstr ""
-
-msgid "Confirm"
-msgstr ""
-
-msgid "anonymous mode"
-msgstr ""
-
-msgid "Groups"
-msgstr ""
-
-msgid "Unclassified"
-msgstr ""
-
-msgid "Authorize"
-msgstr ""
-
-msgid "Ask for authorization"
-msgstr ""
-
-msgid "Unblock"
-msgstr ""
-
-msgid "Prohibit"
-msgstr ""
-
-msgid "Block"
-msgstr ""
-
-msgid "Chat"
-msgstr ""
-
-msgid "Groupchat"
-msgstr ""
-
-msgid "Jappix Mobile"
-msgstr ""
-
-msgid "Desktop"
-msgstr ""
-
-msgid "Mobile"
-msgstr ""
-
-msgid "Please wait..."
-msgstr ""
-
-msgid "Please enable JavaScript"
-msgstr ""
-
-msgid "Show comments"
-msgstr ""
-
-msgid "Loading comments..."
-msgstr ""
-
-msgid "Could not get the comments!"
-msgstr ""
-
-msgid "Comments locked!"
-msgstr ""
-
-msgid "Type your comment here..."
-msgstr ""
-
-msgid "Your channel"
-msgstr ""
-
-msgid "Channel of"
-msgstr ""
-
-msgid "More notices..."
-msgstr ""
-
-msgid "Attach a file"
-msgstr ""
-
-msgid "Send"
-msgstr ""
-
-msgid "Unattach the file"
-msgstr ""
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-
-msgid "Authorization failed"
-msgstr ""
-
-msgid "Registration failed, please choose a different username"
-msgstr ""
-
-msgid "Service unavailable"
-msgstr ""
-
-msgid "Internal server error, try later"
-msgstr ""
-
-msgid "Your form has been sent."
-msgstr ""
-
-msgid "Application"
-msgstr ""
-
-msgid "Media integration"
-msgstr ""
-
-msgid "Keep local chat archives"
-msgstr ""
-
-msgid "XMPP links"
-msgstr ""
-
-msgid "Open XMPP links with Jappix"
-msgstr ""
-
-msgid "changed the subject to:"
-msgstr ""
-
-msgid "Welcome!"
-msgstr ""
-
-msgid "Friends"
-msgstr "Amics"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr ""
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-
-msgid "Enable notification sounds"
-msgstr ""
-
-msgid "Share your position on the globe"
-msgstr ""
-
-msgid "Offline friends"
-msgstr "Amics fòra linha"
-
-msgid "Don't hide offline friends"
-msgstr ""
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr ""
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-
-msgid "Share Jappix on %s"
-msgstr ""
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr ""
-
-msgid "Unknown name"
-msgstr ""
-
-msgid "Unknown country"
-msgstr ""
-
-msgid "Click to enable"
-msgstr ""
-
-msgid "Click to disable"
-msgstr ""
-
-msgid "Installation"
-msgstr ""
-
-msgid "Jappix installation"
-msgstr ""
-
-msgid "Welcome to the Jappix installation!"
-msgstr ""
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-
-msgid "Installation Steps:"
-msgstr ""
-
-msgid "Welcome"
-msgstr ""
-
-msgid "Storage configuration"
-msgstr ""
-
-msgid "Administrator account"
-msgstr ""
-
-msgid "Main configuration"
-msgstr ""
-
-msgid "Hosts configuration"
-msgstr ""
-
-msgid "Services installation"
-msgstr ""
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr ""
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr ""
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-
-msgid "User"
-msgstr "Utilizaire"
-
-msgid "Service"
-msgstr ""
-
-msgid "Service name"
-msgstr ""
-
-msgid "Service description"
-msgstr ""
-
-msgid "Owner name"
-msgstr ""
-
-msgid "Owner website"
-msgstr ""
-
-msgid "Connection"
-msgstr ""
-
-msgid "Lock the host"
-msgstr ""
-
-msgid "Anonymous mode"
-msgstr ""
-
-msgid "HTTP authentication"
-msgstr ""
-
-msgid "Registration allowed"
-msgstr ""
-
-msgid "Use the built-in BOSH proxy"
-msgstr ""
-
-msgid "Manager link"
-msgstr ""
-
-msgid "Groupchats to join"
-msgstr ""
-
-msgid "Suggest groupchats"
-msgstr ""
-
-msgid "Encryption"
-msgstr ""
-
-msgid "HTTPS storage"
-msgstr ""
-
-msgid "Force HTTPS"
-msgstr ""
-
-msgid "Compression"
-msgstr ""
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-
-msgid "Main host"
-msgstr ""
-
-msgid "Groupchat host"
-msgstr ""
-
-msgid "Pubsub host"
-msgstr ""
-
-msgid "Anonymous host"
-msgstr ""
-
-msgid "Directory host"
-msgstr ""
-
-msgid "BOSH host"
-msgstr ""
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-
-msgid "Thanks for using Jappix!"
-msgstr ""
-
-msgid "Next"
-msgstr ""
-
-msgid "Finish"
-msgstr ""
-
-msgid "Check again"
-msgstr ""
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-
-msgid "%s is installed on your system."
-msgstr ""
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr ""
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr ""
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-
-msgid "Jappix manager"
-msgstr ""
-
-msgid "Manager access"
-msgstr ""
-
-msgid "Statistics"
-msgstr ""
-
-msgid "Hosts"
-msgstr ""
-
-msgid "Design"
-msgstr ""
-
-msgid "Repeat"
-msgstr ""
-
-msgid "All"
-msgstr ""
-
-msgid "Horizontal"
-msgstr ""
-
-msgid "Vertical"
-msgstr ""
-
-msgid "Center"
-msgstr ""
-
-msgid "Left"
-msgstr ""
-
-msgid "Right"
-msgstr ""
-
-msgid "Top"
-msgstr ""
-
-msgid "Bottom"
-msgstr ""
-
-msgid "Adapt"
-msgstr ""
-
-msgid "Color"
-msgstr ""
-
-msgid "Users"
-msgstr ""
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-
-msgid "Please use the form below to login to the administration panel."
-msgstr ""
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-
-msgid "Credentials"
-msgstr ""
-
-msgid "You have been logged out. Goodbye!"
-msgstr ""
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr ""
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr ""
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr ""
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr ""
-
-msgid "The image could not be received, would you mind retry?"
-msgstr ""
-
-msgid "Your service logo has been successfully changed!"
-msgstr ""
-
-msgid "Your image was added to the list!"
-msgstr ""
-
-msgid "Changes saved!"
-msgstr ""
-
-msgid "Logo"
-msgstr ""
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr ""
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-
-msgid "Remove this logo"
-msgstr ""
-
-msgid "View this logo"
-msgstr ""
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-
-msgid "Access statistics"
-msgstr ""
-
-msgid "Share statistics"
-msgstr ""
-
-msgid "Other statistics"
-msgstr ""
-
-msgid "January"
-msgstr "Genier"
-
-msgid "February"
-msgstr "Feurier"
-
-msgid "March"
-msgstr "Març"
-
-msgid "April"
-msgstr "Abriu"
-
-msgid "May"
-msgstr "Mai"
-
-msgid "June"
-msgstr "Junh"
-
-msgid "July"
-msgstr "Julhet"
-
-msgid "August"
-msgstr "Aust"
-
-msgid "September"
-msgstr "Septembre"
-
-msgid "October"
-msgstr "Octòbre"
-
-msgid "November"
-msgstr "Novembre"
-
-msgid "December"
-msgstr "Decembre"
-
-msgid "Monday"
-msgstr "Diluns"
-
-msgid "Tuesday"
-msgstr "Dimars"
-
-msgid "Wednesday"
-msgstr "Dimecres"
-
-msgid "Thursday"
-msgstr "Dijòus"
-
-msgid "Friday"
-msgstr "Divendres"
-
-msgid "Saturday"
-msgstr "Dissabde"
-
-msgid "Sunday"
-msgstr "Diumenc"
-
-msgid "Total"
-msgstr ""
-
-msgid "Archives"
-msgstr ""
-
-msgid "Music"
-msgstr "Musica"
-
-msgid "Backgrounds"
-msgstr ""
-
-msgid "Share"
-msgstr ""
-
-msgid "Background"
-msgstr ""
-
-msgid "Notice"
-msgstr ""
-
-msgid "Your design preferences have been saved!"
-msgstr ""
-
-msgid "Please check your inputs: something is missing!"
-msgstr ""
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-
-msgid "Use default background"
-msgstr ""
-
-msgid "Use your own image"
-msgstr ""
-
-msgid "Select a background to use and change the display options."
-msgstr ""
-
-msgid "Use your own color"
-msgstr ""
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr ""
-
-msgid "Manage backgrounds"
-msgstr ""
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr ""
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-
-msgid "Simple notice"
-msgstr ""
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-
-msgid "Advanced notice"
-msgstr ""
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-
-msgid "Available updates"
-msgstr ""
-
-msgid "What's new?"
-msgstr ""
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr ""
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr ""
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-
-msgid "Check for updates"
-msgstr ""
-
-msgid "Update in progress"
-msgstr ""
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr ""
-
-msgid "The update has failed! Please try again later."
-msgstr ""
-
-msgid "Downloading package..."
-msgstr ""
-
-msgid "Removing current Jappix system files..."
-msgstr ""
-
-msgid "Extracting package..."
-msgstr ""
-
-msgid "Regenerating storage folder tree..."
-msgstr ""
-
-msgid "Jappix is now up to date!"
-msgstr ""
-
-msgid "Aborted: socket error!"
-msgstr ""
-
-msgid "Aborted: buffer error!"
-msgstr ""
-
-msgid "Aborted: everything is not writable!"
-msgstr ""
-
-msgid "Aborted: could not extract the package!"
-msgstr ""
-
-msgid "Visits"
-msgstr ""
-
-msgid "Daily"
-msgstr ""
-
-msgid "Weekly"
-msgstr ""
-
-msgid "Monthly"
-msgstr ""
-
-msgid "Yearly"
-msgstr ""
-
-msgid "Size"
-msgstr ""
-
-msgid "Clean everything"
-msgstr ""
-
-msgid "Purge cache"
-msgstr ""
-
-msgid "Purge logs"
-msgstr ""
-
-msgid "Purge sent files"
-msgstr ""
-
-msgid "Purge updates"
-msgstr ""
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr ""
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr ""
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-
-msgid "Title"
-msgstr ""
-
-msgid "Artist"
-msgstr ""
-
-msgid "Album"
-msgstr ""
-
-msgid "File"
-msgstr ""
-
-msgid "Upload"
-msgstr ""
-
-msgid "The folder is empty."
-msgstr ""
-
-msgid "The music could not be received, please retry!"
-msgstr ""
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-
-msgid "Your music has been added!"
-msgstr ""
-
-msgid "The selected elements have been removed."
-msgstr ""
-
-msgid "You must select elements to remove!"
-msgstr ""
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-
-msgid "Manage"
-msgstr ""
-
-msgid "List"
-msgstr ""
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-
-msgid "The user has been added!"
-msgstr ""
-
-msgid "The chosen users have been removed."
-msgstr ""
-
-msgid "You must select one or more users to be removed!"
-msgstr ""
-
-msgid "Yesterday"
-msgstr ""
-
-msgid "%s days ago"
-msgstr ""
-
-msgid "User currently active"
-msgstr ""
-
-msgid "Last seen: %s"
-msgstr ""
-
-msgid "Inactive since: %s"
-msgstr ""
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr ""
-
-msgid "Static content server"
-msgstr ""
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr ""
-
-msgid "User uploads server"
-msgstr ""
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr ""
-
-msgid "Suggested friends"
-msgstr ""
-
-msgid "Check all"
-msgstr ""
-
-msgid "Uncheck all"
-msgstr ""
-
-msgid "Choose"
-msgstr ""
-
-msgid "List name"
-msgstr ""
-
-msgid "Allow"
-msgstr ""
-
-msgid "Deny"
-msgstr ""
-
-msgid "Group"
-msgstr ""
-
-msgid "Subscription"
-msgstr ""
-
-msgid "Both"
-msgstr ""
-
-msgid "From"
-msgstr ""
-
-msgid "Everybody"
-msgstr ""
-
-msgid "Send messages"
-msgstr ""
-
-msgid "Send queries"
-msgstr ""
-
-msgid "See my status"
-msgstr ""
-
-msgid "Send his/her status"
-msgstr ""
-
-msgid "Everything"
-msgstr ""
-
-msgid "Item"
-msgstr ""
-
-msgid "Order"
-msgstr ""
-
-msgid "Active for this session"
-msgstr ""
-
-msgid "Always active"
-msgstr ""
-
-msgid "User directory"
-msgstr ""
-
-msgid "Search a friend"
-msgstr ""
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-
-msgid "Send him/her a message"
-msgstr ""
-
-msgid "Start a chat with him/her"
-msgstr ""
-
-msgid "Available shortcuts:"
-msgstr ""
-
-msgid "%s removes the chat logs"
-msgstr ""
-
-msgid "%s joins a groupchat"
-msgstr ""
-
-msgid "%s closes the chat"
-msgstr ""
-
-msgid "%s shows the user profile"
-msgstr ""
-
-msgid "%s sends a message to the room"
-msgstr ""
-
-msgid "%s changes your nickname"
-msgstr ""
-
-msgid "%s sends a message to someone in the room"
-msgstr ""
-
-msgid "%s changes the room topic"
-msgstr ""
-
-msgid "%s kicks a user of the room"
-msgstr ""
-
-msgid "%s bans a user of the room"
-msgstr ""
-
-msgid "%s invites someone to join the room"
-msgstr ""
-
-msgid "Public profile"
-msgstr ""
-
-msgid "Your profile anywhere on the Web."
-msgstr ""
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-
-msgid "Yay, let's create your public profile!"
-msgstr ""
-
-msgid "Enable my public profile"
-msgstr ""
-
-msgid "Jappix for your phone"
-msgstr ""
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr ""
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-
-msgid "You haven't provided any file to download"
-msgstr ""
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr ""
-
-msgid "Woah this file isn't found, please double check"
-msgstr ""
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr ""
-
-msgid "Statistics are currently disabled in the settings."
-msgstr ""
-
-msgid "New event!"
-msgstr ""
-
-msgid "%s is typing..."
-msgstr ""
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-
-msgid "Username"
-msgstr ""
-
-msgid "Enter password"
-msgstr ""
-
-msgid "Once again..."
-msgstr ""
-
-msgid "Code"
-msgstr ""
-
-msgid "Security code"
-msgstr ""
-
-msgid "Advertising space available!"
-msgstr ""
-
-msgid "Advertise here"
-msgstr ""
-
-msgid "Analytics (%s)"
-msgstr ""
-
-msgid "Track visits"
-msgstr ""
-
-msgid "Piwik URL"
-msgstr ""
-
-msgid "Piwik tracking ID"
-msgstr ""
-
-msgid "Advertising (%s)"
-msgstr ""
-
-msgid "Enable ads"
-msgstr ""
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "Content ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "Mute"
-msgstr ""
-
-msgid "Unmute"
-msgstr ""
-
-msgid "Is calling you"
-msgstr ""
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr ""
-
-msgid "Waiting..."
-msgstr ""
-
-msgid "Ringing..."
-msgstr ""
-
-msgid "Declined the call"
-msgstr ""
-
-msgid "Call error"
-msgstr ""
-
-msgid "Ended the call"
-msgstr ""
-
-msgid "Call ended"
-msgstr ""
-
-msgid "Call canceled"
-msgstr ""
-
-msgid "Canceled the call"
-msgstr ""
-
-msgid "Is already in a call"
-msgstr ""
-
-msgid "Ending call..."
-msgstr ""
-
-msgid "Accept"
-msgstr ""
-
-msgid "Decline"
-msgstr ""
-
-msgid "Okay"
-msgstr ""
-
-msgid "Retry"
-msgstr ""
-
-msgid "Audio Call"
-msgstr ""
-
-msgid "Video Call"
-msgstr ""
diff --git a/i18n/pl/LC_MESSAGES/main.mo b/i18n/pl/LC_MESSAGES/main.mo
deleted file mode 100644
index e3ad968b..00000000
--- a/i18n/pl/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/pl/LC_MESSAGES/main.po b/i18n/pl/LC_MESSAGES/main.po
deleted file mode 100644
index 35d45947..00000000
--- a/i18n/pl/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2406 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-# piotr.moskal <piotrmoskal2011@gmail.com>, 2013
-# Valérian Saliou <valerian@valeriansaliou.name>, 2013
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:21+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Polish (http://www.transifex.com/projects/p/jappix/language/"
-"pl/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: pl\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
-"|| n%100>=20) ? 1 : 2);\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "default:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"Obsługa JavaScript jest wyłączona przez co uruchomienie Jappix-a jest "
-"niemożliwe! Prosimy o aktywowanie obsługi JavaScript i spróbowanie ponownie."
-
-msgid "Social channel, chat and more."
-msgstr "Kanał społecznościowy, czat i więcej."
-
-msgid "Create your public profile."
-msgstr "Utwórz swój profil publiczny"
-
-msgid "A mini-chat for your website."
-msgstr "Mini-czat na twoją witrynę www."
-
-msgid "Get Jappix, get support."
-msgstr "Zdobądź Jappix, zdobądź wsparcie."
-
-msgid "Statistics around Jappix."
-msgstr "Statystyki dookoła Jappix."
-
-msgid "Legal disclaimer for Jappix."
-msgstr "Zastrzeżenia prawne dla Jappix."
-
-msgid "Download Jappix for free."
-msgstr "Pobierz Jappix bezpłatnie."
-
-msgid "Contribute to the Jappix code."
-msgstr "Przyczyń się dla kodu Jappix."
-
-msgid "Jappix for your company."
-msgstr "Jappix dla twojej firmy."
-
-msgid "Find a public Jappix node."
-msgstr "Znajdź publiczny węzeł Jappix."
-
-msgid "Credits"
-msgstr "Kredyty"
-
-msgid "Association"
-msgstr "Skojarzenie"
-
-msgid "Web agency"
-msgstr "Agencja internetowa"
-
-msgid "Legal"
-msgstr "Prawne"
-
-msgid "Legal disclaimer"
-msgstr "Zastrzeżenia prawne"
-
-msgid "Terms of use and legal"
-msgstr "Warunki użytkowania i prawne"
-
-msgid "Owner"
-msgstr "Właściciel"
-
-msgid "Node owner"
-msgstr "Właściciel węzła"
-
-msgid "By using our service, you accept %s."
-msgstr "Korzystając z naszych usług, akceptujesz %s."
-
-msgid "our terms of use"
-msgstr "nasze warunki użytkowania"
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Działanie Jappix zostało przerwane przez problem sieciowy, błąd programu "
-"bądź złe dane logowania (sprawdź, czy podałeś prawidłowe dane dostępowe). Za "
-"usterkę przepraszamy."
-
-msgid "The element list on this server could not be obtained!"
-msgstr "Nie można uzyskać listy elementów tego serwera!"
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"Hasło zostało zmienione. Możesz połączyć się do swojego konta używając "
-"nowego hasła."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "Twoje konto XMPP zostało usunięte, żegnaj!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "Wylogowywanie zakończone pomyślnie, życzymy miłego dnia!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr "Pokój do którego dołączyłeś nie istnieje. Powinieneś go stworzyć!"
-
-msgid "The groupchat has been removed."
-msgstr "Pokój rozmów został usunięty, teraz ktoś inny będzie mógł go stworzyć."
-
-msgid "The user that you want to reach is not present in the room."
-msgstr ""
-"Użytkownik z którym chciałeś się skontaktować nie jest obecny w pokoju."
-
-msgid "Please enter the group chat address to join."
-msgstr "Wprowadź adres pokoju czatowego aby do niego dołączyć."
-
-msgid "Please enter your nickname to join %s."
-msgstr "Wprowadź swój nick aby dołączyć do %s."
-
-msgid "This room (%s) is protected with a password."
-msgstr "Ten pokój (%s) jest chroniony hasłem."
-
-msgid "Your browser is out of date!"
-msgstr "Twoja przeglądarka jest nieaktualna!"
-
-msgid "Last %s version is better!"
-msgstr "Ostatnia wersja %s jest lepsza!"
-
-msgid "Login"
-msgstr "Login"
-
-msgid "Register"
-msgstr "Rejestracja"
-
-msgid "Here we go!"
-msgstr "Do dzieła!"
-
-msgid "Server"
-msgstr "Serwer"
-
-msgid "Password"
-msgstr "Hasło"
-
-msgid "Remember me"
-msgstr "Zapamiętaj mnie"
-
-msgid "This tool has been disabled!"
-msgstr "To narzędzie zostało wyłączone, nie możesz z niego skorzystać!"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr ""
-"Z powodu błędu sieci połączenie zostało zerwane. Co chcesz teraz zrobić?"
-
-msgid "Reconnect"
-msgstr "Połącz ponownie"
-
-msgid "Messages"
-msgstr "Wiadomości"
-
-msgid "Profile"
-msgstr "Profil"
-
-msgid "Options"
-msgstr "Opcje"
-
-msgid "Disconnect"
-msgstr "Wyloguj"
-
-msgid "Filter"
-msgstr "Filtr"
-
-msgid "Add a friend"
-msgstr "Dodaj znajomego"
-
-msgid "Your groupchats"
-msgstr "Twoje rozmowy grupowe"
-
-msgid "Manage your favorite groupchats"
-msgstr "Zarządzaj ulubionymi pokojami rozmów"
-
-msgid "More stuff"
-msgstr "Więcej"
-
-msgid "Show all friends"
-msgstr "Pokaż wszystkich znajomych"
-
-msgid "Only show connected friends"
-msgstr "Pokazuj tylko połączonych znajomych"
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "Archiwum wiadomości"
-
-msgid "Date"
-msgstr "Data"
-
-msgid "A short message?"
-msgstr "Krótka wiadomość?"
-
-msgid "How are you?"
-msgstr "Jak się masz?"
-
-msgid "What are you doing?"
-msgstr "Co robisz?"
-
-msgid "Join a chat"
-msgstr "Dołącz do rozmowy"
-
-msgid "Status"
-msgstr "Status"
-
-msgid "Available"
-msgstr "Dostępny"
-
-msgid "Talkative"
-msgstr "Chętny do rozmowy"
-
-msgid "Away"
-msgstr "Nieobecny"
-
-msgid "Not available"
-msgstr "Niedostępny"
-
-msgid "Busy"
-msgstr "Zajęty"
-
-msgid "Offline"
-msgstr "Niepołączony"
-
-msgid "Mood"
-msgstr "Nastrój"
-
-msgid "None"
-msgstr "Żaden"
-
-msgid "Crazy"
-msgstr "Zwariowany"
-
-msgid "Excited"
-msgstr "Podekscytowany"
-
-msgid "Playful"
-msgstr "Rozbawiony"
-
-msgid "Happy"
-msgstr "Wesoły"
-
-msgid "Shocked"
-msgstr "Zszokowany"
-
-msgid "Hot"
-msgstr "Gorący"
-
-msgid "Sad"
-msgstr "Smutny"
-
-msgid "Amorous"
-msgstr "Rozkochany"
-
-msgid "Confident"
-msgstr "Pewny siebie"
-
-msgid "Activity"
-msgstr "Aktywność"
-
-msgid "Chores"
-msgstr "Prace domowe"
-
-msgid "Drinking"
-msgstr "Picie"
-
-msgid "Eating"
-msgstr "Jedzenie"
-
-msgid "Exercising"
-msgstr "Ćwiczenia"
-
-msgid "Grooming"
-msgstr "Higiena"
-
-msgid "Appointment"
-msgstr "Spotkanie"
-
-msgid "Inactive"
-msgstr "Nieaktywne"
-
-msgid "Relaxing"
-msgstr "Relaksowanie"
-
-msgid "Talking"
-msgstr "Rozmowa"
-
-msgid "Traveling"
-msgstr "Podróżowanie"
-
-msgid "Working"
-msgstr "Praca"
-
-msgid "View profile"
-msgstr "Zobacz profil"
-
-msgid "This is a repeat from %s"
-msgstr "To jest powtórzenie z %s"
-
-msgid "Repeat this notice"
-msgstr "Powtórz tą informację"
-
-msgid "Remove this notice"
-msgstr "Usuń tą informację"
-
-msgid "Your profile"
-msgstr "Twój profil"
-
-msgid "Identity"
-msgstr "Tożsamość"
-
-msgid "Profile image"
-msgstr "Awatar"
-
-msgid "Others"
-msgstr "Inne"
-
-msgid "Other"
-msgstr "Inny"
-
-msgid "Personal"
-msgstr "Personalne"
-
-msgid "Complete name"
-msgstr "Imię i nazwisko"
-
-msgid "Nickname"
-msgstr "Pseudonim"
-
-msgid "First name"
-msgstr "Imię"
-
-msgid "Last name"
-msgstr "Nazwisko"
-
-msgid "Date of birth"
-msgstr "Data urodzenia"
-
-msgid "Contact"
-msgstr "Kontakt"
-
-msgid "E-mail"
-msgstr "E-mail"
-
-msgid "Phone"
-msgstr "Telefon"
-
-msgid "Website"
-msgstr "Strona internetowa"
-
-msgid "Current"
-msgstr "Aktualny"
-
-msgid "Delete"
-msgstr "Usuń"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr "Jaka szkoda! Nie masz ustawionego awatara!"
-
-msgid "Address"
-msgstr "Adres"
-
-msgid "Street"
-msgstr "Ulica"
-
-msgid "City"
-msgstr "Miejscowość"
-
-msgid "Postal code"
-msgstr "Kod pocztowy"
-
-msgid "Country"
-msgstr "Kraj"
-
-msgid "Biography"
-msgstr "Biografia"
-
-msgid "Important notice"
-msgstr "Ważna uwaga"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-"Bądź ostrożny z informacjami, które przechowujesz w twoim profilu, bo to "
-"mogą być one dostępne dla wszystkich (nawet dla kogoś, dla kogo nie chcesz)."
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr ""
-"W XMPP nie wszystko jest prywatne; to jedna z takich rzeczy, Twój publiczny "
-"profil (vCard)."
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"Zaleca się, aby przesłać obrazek profilowy (maksymalnie %s), w formie "
-"zdjęcia siebie samego, bo sprawi, że będziesz łatwo rozpoznawalny przez "
-"znajomych."
-
-msgid "Save"
-msgstr "Zapisz"
-
-msgid "Cancel"
-msgstr "Anuluj"
-
-msgid "Edit options"
-msgstr "Edytuj opcje"
-
-msgid "Channel"
-msgstr "Kanał"
-
-msgid "Commands"
-msgstr "Komendy"
-
-msgid "Sounds"
-msgstr "Dźwięki"
-
-msgid "Privacy"
-msgstr "Prywatność"
-
-msgid "Message archiving"
-msgstr "Archiwizacja wiadomości"
-
-msgid "Store an history of your chats"
-msgstr ""
-
-msgid "Geolocation"
-msgstr "Geolokalizacja"
-
-msgid "Disabled"
-msgstr ""
-
-msgid "Store all chats"
-msgstr ""
-
-msgid "Store friend chats"
-msgstr ""
-
-msgid "Remove all archives"
-msgstr ""
-
-msgid "Empty"
-msgstr "Pusty"
-
-msgid "Empty channel"
-msgstr "Pusty kanał"
-
-msgid "Persistent"
-msgstr "Trwałe"
-
-msgid "Maximum notices"
-msgstr "Maksymalnie powiadomień"
-
-msgid "Account"
-msgstr "Konto"
-
-msgid "Change password"
-msgstr "Zmień hasło"
-
-msgid "Delete account"
-msgstr "Usuń konto"
-
-msgid "Old"
-msgstr "Stary"
-
-msgid "New (2 times)"
-msgstr "Nowe (dwa razy)"
-
-msgid "Suggested chatrooms"
-msgstr "Sugerowane pokoje rozmów"
-
-msgid "Skip"
-msgstr ""
-
-msgid "Continue"
-msgstr "Kontynuuj"
-
-msgid "To"
-msgstr "Do"
-
-msgid "Close"
-msgstr "Zamknij"
-
-msgid "unknown"
-msgstr "nieznany"
-
-msgid "Unavailable"
-msgstr "Niedostępny"
-
-msgid "is now"
-msgstr "jest teraz"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Proszę czekać, Twój awatar jest ładowany..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "Oto i on! Piękny awatar!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "Format obrazka jest niepoprawny lub obrazek ma zły rozmiar."
-
-msgid "Reply"
-msgstr "Odpowiedz"
-
-msgid "Error"
-msgstr "Błąd"
-
-msgid "Click here to solve the error"
-msgstr "Kliknij tutaj aby rozwiązać problem"
-
-msgid "You"
-msgstr "Ty"
-
-msgid "Remove"
-msgstr "Usuń"
-
-msgid "Rename"
-msgstr "Zmień nazwę"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Cześć, jestem %s, chciałbym abyś dodał mnie do swoich znajomych."
-
-msgid "Smiley insertion"
-msgstr "Wstaw emotikonę"
-
-msgid "Change style"
-msgstr "Zmień styl"
-
-msgid "Text in bold"
-msgstr "Pogrubiony tekst"
-
-msgid "Text in italic"
-msgstr "Pochyły tekst"
-
-msgid "Underlined text"
-msgstr "Podkreślony tekst"
-
-msgid "Send a file"
-msgstr "Wyślij plik"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr ""
-"Po przesłaniu na serwer, twoi znajomi zostaną poproszeni o pobranie pliku "
-"który przesłałeś."
-
-msgid "Save chat"
-msgstr "Zapisz rozmowę"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"Kliknij poniższy link aby utworzyć zapis rozmowy i poczekaj. Później kliknij "
-"ponownie aby pobrać plik."
-
-msgid "This chat is empty!"
-msgstr "Ten czat jest pusty!"
-
-msgid "Generate file!"
-msgstr "Wygeneruj plik!"
-
-msgid "Download file!"
-msgstr "Pobierz plik!"
-
-msgid "Clean current chat"
-msgstr "Wyczyść okno rozmowy"
-
-msgid "Show user profile"
-msgstr "Pokaż profil użytkownika"
-
-msgid "Add this contact to your friends"
-msgstr "Dodaj kontakt do znajomych"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Dodaj ten pokój do ulubionych"
-
-msgid "All tabs"
-msgstr "Wszystkie zakładki"
-
-msgid "Join groupchat"
-msgstr ""
-
-msgid "Close this tab"
-msgstr "Zamknij tą zakładkę"
-
-msgid "no subject defined for this room."
-msgstr "nie określono tematu dla tego pokoju."
-
-msgid "Administration panel for this room"
-msgstr "Panel administratora tego pokoju"
-
-msgid "Moderators"
-msgstr "Moderatorzy"
-
-msgid "Participants"
-msgstr "Uczestnicy"
-
-msgid "Visitors"
-msgstr "Odwiedzający"
-
-msgid "Manage favorite rooms"
-msgstr "Zarządzaj ulubionymi pokojami"
-
-msgid "Change favorites"
-msgstr "Zmień ulubione"
-
-msgid "Search a room"
-msgstr "Wyszukaj pokój"
-
-msgid "Select a favorite"
-msgstr "Wybierz ulubiony"
-
-msgid "Getting the name..."
-msgstr "Pobieranie nazwy..."
-
-msgid "Gateway"
-msgstr "Brama"
-
-msgid "Name"
-msgstr "Nazwa"
-
-msgid "Room"
-msgstr "Pokój"
-
-msgid "Add"
-msgstr "Dodaj"
-
-msgid "Edit"
-msgstr "Edytuj"
-
-msgid "Search a room on"
-msgstr "Szukaj pokoju na"
-
-msgid "No room found on this server."
-msgstr "Nie znaleziono pokoju na tym serwerze."
-
-msgid "Service discovery"
-msgstr "Przeglądarka usług"
-
-msgid "Server to query"
-msgstr "Serwer do odpytania"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "Przykro nam ale jednostka nie zwraca jakiegokolwiek wyniku!"
-
-msgid "Accounts"
-msgstr "Konta"
-
-msgid "Authentications"
-msgstr "Autentykacja"
-
-msgid "Automation"
-msgstr "Automatyzacja"
-
-msgid "Clients"
-msgstr "Klienci"
-
-msgid "Collaboration"
-msgstr "Współpraca"
-
-msgid "Components"
-msgstr "Komponenty"
-
-msgid "Rooms"
-msgstr "Pokoje"
-
-msgid "Directories"
-msgstr "Katalogi"
-
-msgid "Gateways"
-msgstr "Bramki"
-
-msgid "News"
-msgstr "Wiadomości"
-
-msgid "Hierarchy"
-msgstr "Hierarchia"
-
-msgid "Proxies"
-msgstr "Pośrednicy"
-
-msgid "Publication/Subscription"
-msgstr "Publikacje/subskrypcje"
-
-msgid "Storage"
-msgstr "Magazynowanie"
-
-msgid "Service offline or broken"
-msgstr "Usługa niedostępna bądź uszkodzona"
-
-msgid "Your inbox"
-msgstr "Twoja skrzynka odbiorcza"
-
-msgid "Available actions"
-msgstr "Dostępne działania"
-
-msgid "Clean"
-msgstr "Wyczyść"
-
-msgid "New"
-msgstr "Nowy"
-
-msgid "Received"
-msgstr "Odebrane"
-
-msgid "Subject"
-msgstr "Temat"
-
-msgid "Content"
-msgstr "Treść"
-
-msgid "Send message"
-msgstr "Wyślij wiadomość"
-
-msgid "Your inbox is empty."
-msgstr "Twoja skrzynka odbiorcza jest pusta."
-
-msgid "MUC administration"
-msgstr "Administracja MUC"
-
-msgid "You administrate this room"
-msgstr "Administrujesz tym pokojem"
-
-msgid "Enter new subject"
-msgstr "Podaj nowy temat"
-
-msgid "Configuration"
-msgstr "Konfiguracja"
-
-msgid "Authorizations"
-msgstr "Autoryzacja"
-
-msgid "Member list"
-msgstr "Lista członków"
-
-msgid "Owner list"
-msgstr "Lista właścicieli"
-
-msgid "Administrator list"
-msgstr "Lista administratorów"
-
-msgid "Outcast list"
-msgstr "Lista wykluczonych"
-
-msgid "Add an input"
-msgstr "Dodaj wpis"
-
-msgid "Destroy this MUC"
-msgstr "Usuń ten MUC"
-
-msgid "Yes, let's do it!"
-msgstr "Tak, zróbmy to!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "Twój znajomy przygląda się rozmowie."
-
-msgid "Your friend is writing a message..."
-msgstr "Twój znajomy pisze wiadomość..."
-
-msgid "Your friend stopped writing a message."
-msgstr "Twój znajomy przestał pisać."
-
-msgid "Your friend is doing something else."
-msgstr "Twój znajomy robi coś innego."
-
-msgid "Your friend closed the chat."
-msgstr "Twój znajomy zamknął rozmowę."
-
-msgid "Requesting this service..."
-msgstr "Żądanie usługi..."
-
-msgid "Loading"
-msgstr "Ładowanie"
-
-msgid "changed his/her nickname to %s"
-msgstr "zmieniono jego/jej nick na %s"
-
-msgid "joined the chat room"
-msgstr "dołączył(a) do czatu"
-
-msgid "left the chat room"
-msgstr "opuścił(a) czat"
-
-msgid "%s left"
-msgstr "pozostało %s"
-
-msgid "%s joined"
-msgstr "%s dołączył"
-
-msgid "no status"
-msgstr "brak statusu"
-
-msgid "has been kicked"
-msgstr "został(a) wyrzucony"
-
-msgid "has been banned"
-msgstr "został(a) zbanowany"
-
-msgid "no reason"
-msgstr "brak powodu"
-
-msgid "Communicate with the entire world!"
-msgstr "Rozmawiaj z całym światem!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-"Jappix jest otwartą społecznościową platformą, która pozwala ci łatwo "
-"uzyskać kontakt lub pozostać w kontakcie ze wszystkimi."
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-"Pozwala Ci być w kontakcie z milionami użytkowników, którzy używają obecnie "
-"sieci XMPP, tak jak Ty obecnie łączysz się doń przez Jappixa. Dołącz do "
-"społeczności i stań się wolny!"
-
-msgid "Hi there!"
-msgstr "Cześć wam!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr "Zaloguj się do swojego konta XMPP lub stwórz nowe - za darmo!"
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-"Dla bezpieczeństwa twojego konta, gdy się logujesz lub rejestrujesz, upewnij "
-"się, że twoje hasło pozostaje tajemnicą."
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-"Zaloguj się do twojego istniejącego konta XMPP. Możesz również użyć %s aby "
-"dołączyć do pokojów czatowych."
-
-msgid "Previous"
-msgstr "Poprzedni"
-
-msgid "General"
-msgstr "Ogólny"
-
-msgid "Advanced"
-msgstr "Zaawansowane"
-
-msgid "Resource"
-msgstr "Zasób"
-
-msgid "Priority"
-msgstr "Priorytet"
-
-msgid "Low"
-msgstr "Niski"
-
-msgid "Medium"
-msgstr "Średni"
-
-msgid "High"
-msgstr "Wysoki"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-"Dołącz do dowolnego czatu z nickiem, który chcesz mieć. Możesz też wrócić do "
-"%s."
-
-msgid "login page"
-msgstr "strona logowania"
-
-msgid "Share this link with your friends:"
-msgstr "Podziel się linkiem z przyjaciółmi:"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-"Załóż nowe konto XMPP by dołączyć do twoich przyjaciół w twojej własnej "
-"społeczności. To proste!"
-
-msgid "Required"
-msgstr "Wymagane"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "Rejestracja przebiegła pomyślnie! Oto Twój adres XMPP:"
-
-msgid "Manager"
-msgstr "Menedżer"
-
-msgid "Encrypted"
-msgstr "Szyfrowane"
-
-msgid "Unencrypted"
-msgstr "Nieszyfrowane"
-
-msgid "Where are you?"
-msgstr "Gdzie jesteś?"
-
-msgid "What's up with you?"
-msgstr "Co u Ciebie słychać?"
-
-msgid "Type something you want to share with your friends..."
-msgstr "Wpisz coś, czym chcesz się podzielić z twoimi znajomymi..."
-
-msgid "Fetching the social channel..."
-msgstr "Pobieranie kanału publicznego..."
-
-msgid "You are synchronized with your network."
-msgstr "Jesteś połączony ze swoją siecią."
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "Nie można nic wysłać: możesz jedynie otrzymywać powiadomienia!"
-
-msgid "Media viewer"
-msgstr "Odtwarzacz multimediów"
-
-msgid "Browse"
-msgstr "Przeglądaj"
-
-msgid "Command"
-msgstr "Komenda"
-
-msgid "Subscribe"
-msgstr "Subskrybuj"
-
-msgid "Join"
-msgstr "Dołącz"
-
-msgid "Automatic"
-msgstr "Automatycznie"
-
-msgid "Search"
-msgstr "Szukaj"
-
-msgid "No result!"
-msgstr "Brak wyników!"
-
-msgid "No notifications."
-msgstr "Brak powiadomień."
-
-msgid "would like to add you as a friend."
-msgstr "chciałby dodać Cię jako znajomego."
-
-msgid "would like you to join this chatroom:"
-msgstr "chciałby prosić Cię o dołączenie do tego pokoju: "
-
-msgid "Do you accept?"
-msgstr "Czy się zgadzasz?"
-
-msgid "Yes"
-msgstr "Tak"
-
-msgid "No"
-msgstr "Nie"
-
-msgid "would like to get authorization."
-msgstr "prosi o autoryzację."
-
-msgid "would like to send you a file: “%s”."
-msgstr "chciałby przesłać ci plik: “%s”."
-
-msgid "has received a file exchange request: “%s”."
-msgstr "otrzymano prośbę o wymianę pliku: \"% s\"."
-
-msgid "has accepted to receive your file: “%s”."
-msgstr "zaakceptowano do odebrania twój plik: “%s”."
-
-msgid "has rejected to receive your file: “%s”."
-msgstr "odrzucono twój plik: “%s”."
-
-msgid "could not receive your file: “%s”."
-msgstr "nie można odebrać twojego pliku: “%s”."
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr "Czy chcesz zobaczyć sugestie dla ciebie od znajomego %s?"
-
-msgid "commented an item you follow: “%s”."
-msgstr "skomentowano pozycję, którą podążasz: “%s”."
-
-msgid "liked your post: “%s”."
-msgstr "lubi twój post: “%s”."
-
-msgid "quoted you somewhere: “%s”."
-msgstr "zacytowano cię gdzieś: “%s”."
-
-msgid "published on your wall: “%s”."
-msgstr "opublikowano na twojej tablicy: “%s”."
-
-msgid "tagged you in a photo (%s)."
-msgstr "ustalono cię na fotografii *%s)."
-
-msgid "tagged you in a video (%s)."
-msgstr "ustalono cię na filmie (%s)."
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-"potwierdzanie twojego konta. Twój profil publiczny będzie dostępny w ciągu "
-"kilku chwil."
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-"usunięto twój profil publiczny po twoim żądaniu. Będziemy tęsknić za tobą!"
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-"zapisano ustawienia twojego nowego profilu publicznego. Będą one stosowane "
-"za kilka chwil."
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-"nie można potwierdzić twojego konta, aby utworzyć lub zaktualizować twój "
-"profil publiczny. Sprawdź swoje poświadczenia."
-
-msgid "Open"
-msgstr "Otwarte"
-
-msgid "Show"
-msgstr "Pokaż"
-
-msgid "Hide"
-msgstr "Ukryj"
-
-msgid "Submit"
-msgstr "Wyślij"
-
-msgid "Client"
-msgstr "Klient"
-
-msgid "System"
-msgstr "System"
-
-msgid "Local time"
-msgstr "Czas lokalny"
-
-msgid "Comments"
-msgstr "Komentarze"
-
-msgid "User profile"
-msgstr "Profil użytkownika"
-
-msgid "See his/her position on the globe"
-msgstr "Zobacz jej/jego położenie geograficzne"
-
-msgid "Confirm"
-msgstr "Potwierdź"
-
-msgid "anonymous mode"
-msgstr "tryb anonimowy"
-
-msgid "Groups"
-msgstr "Grupy"
-
-msgid "Unclassified"
-msgstr "Nieklasyfikowane"
-
-msgid "Authorize"
-msgstr "Autoryzuj"
-
-msgid "Ask for authorization"
-msgstr "Zapytaj o autoryzację"
-
-msgid "Unblock"
-msgstr "Odblokuj"
-
-msgid "Prohibit"
-msgstr "Zabroń"
-
-msgid "Block"
-msgstr "Blokuj"
-
-msgid "Chat"
-msgstr "Rozmowa"
-
-msgid "Groupchat"
-msgstr "Rozmowa grupowa"
-
-msgid "Jappix Mobile"
-msgstr "Jappix Mobile"
-
-msgid "Desktop"
-msgstr "Desktop"
-
-msgid "Mobile"
-msgstr "Mobilny"
-
-msgid "Please wait..."
-msgstr "Proszę czekać..."
-
-msgid "Please enable JavaScript"
-msgstr "Proszę włączyć JavaScript"
-
-msgid "Show comments"
-msgstr "Pokaż komentarze"
-
-msgid "Loading comments..."
-msgstr "Ładowanie komentarzy..."
-
-msgid "Could not get the comments!"
-msgstr "Nie można pobrać komentarzy!"
-
-msgid "Comments locked!"
-msgstr "Komentarze zablokowane!"
-
-msgid "Type your comment here..."
-msgstr "Wpisz swój komentarz tutaj..."
-
-msgid "Your channel"
-msgstr "Twój kanał"
-
-msgid "Channel of"
-msgstr "Kanał"
-
-msgid "More notices..."
-msgstr "Więcej powiadomień..."
-
-msgid "Attach a file"
-msgstr "Załącz plik"
-
-msgid "Send"
-msgstr "Wyślij"
-
-msgid "Unattach the file"
-msgstr "Odłącz plik"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-"Wystąpił błąd podczas wysyłania pliku: możliwe że jest zbyt duży "
-"(maksymalnie %s) bądź zablokowany!"
-
-msgid "Authorization failed"
-msgstr "Autoryzacja nie powiodła się"
-
-msgid "Registration failed, please choose a different username"
-msgstr "Rejestracja nie powiodła się, proszę wybrać inną nazwę użytkownika"
-
-msgid "Service unavailable"
-msgstr "Usługa niedostępna"
-
-msgid "Internal server error, try later"
-msgstr "Wewnętrzny błąd serwera, proszę spróbować później."
-
-msgid "Your form has been sent."
-msgstr "Twój formularz został wysłany."
-
-msgid "Application"
-msgstr "Aplikacja"
-
-msgid "Media integration"
-msgstr "Integracja mediów"
-
-msgid "Keep local chat archives"
-msgstr ""
-
-msgid "XMPP links"
-msgstr "linki XMPP"
-
-msgid "Open XMPP links with Jappix"
-msgstr "Otwieraj linki XMPP w Jappix"
-
-msgid "changed the subject to:"
-msgstr "zmień temat na:"
-
-msgid "Welcome!"
-msgstr "Witamy!"
-
-msgid "Friends"
-msgstr "Znajomi"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr ""
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-"Zanim zaczniesz tego używać, musisz zmienić niektóre ustawienia, znaleźć "
-"znajomych i uzupełnić swój profil."
-
-msgid "Enable notification sounds"
-msgstr "Włącz powiadomienia dźwiękowe"
-
-msgid "Share your position on the globe"
-msgstr "Dziel się swoją aktualną pozycją"
-
-msgid "Offline friends"
-msgstr "Rozłączeni znajomi"
-
-msgid "Don't hide offline friends"
-msgstr "Nie ukrywaj rozłączonych znajomych"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-"Użyj tego narzędzia do znalezienia Twoich znajomych na serwerze, którego "
-"używasz, lub dodaj ich później."
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr "Dobra robota! Teraz możesz podzielić się Jappix ze znajomymi!"
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-"Gdy naciśniesz przycisk zapisu, edytor profilu zostanie otwarty. "
-"Szczęśliwego uspołeczniania się!"
-
-msgid "Share Jappix on %s"
-msgstr "Dziel Jappix na %s"
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "Używaj Jappix, otwartej platformy społecznościowej. Ja jestem %s!"
-
-msgid "Unknown name"
-msgstr "Nazwa nieznana"
-
-msgid "Unknown country"
-msgstr "Kraj nieznany"
-
-msgid "Click to enable"
-msgstr "Kliknij by włączyć"
-
-msgid "Click to disable"
-msgstr "Kliknij by wyłączyć"
-
-msgid "Installation"
-msgstr "Instalacja"
-
-msgid "Jappix installation"
-msgstr "Instalacja Jappixa"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "Witaj w instalacji Jappix!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-"To narzędzie pomoże Ci szybko zainstalować Jappix-a, pierwszą platformę "
-"społecznościową opartą o protokół XMPP."
-
-msgid "Installation Steps:"
-msgstr "Zobaczmy kroki instalacji:"
-
-msgid "Welcome"
-msgstr "Witamy"
-
-msgid "Storage configuration"
-msgstr "Konfiguracja folderów"
-
-msgid "Administrator account"
-msgstr "Konto administratora"
-
-msgid "Main configuration"
-msgstr "Konfiguracja główna"
-
-msgid "Hosts configuration"
-msgstr "Konfiguracja hostów"
-
-msgid "Services installation"
-msgstr "Instalacja usług"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr "Jeśli aktualny język Ci nie pasuję (%1s), możesz zmienić go na %2s."
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"Jeśli potrzebujesz więcej informacji dotyczących instalacji i konfiguracji "
-"Jappixa, możesz użyć dokumentacji dostępnej pod adresem:"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-"Już pora zbudować twoją własną socjalną chmórę: przejdź do następnego kroku!"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr "Można zapisywać w folderze, możesz kontynuować!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-"Jappix oferuje Ci możliwość zarządzania konfiguracją, instalacji nowych "
-"pluginów lub sprawdzania aktualizacji. To właśnie dlatego musisz stworzyć "
-"konto administratora."
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-"Kiedy Jappix będzie już zainstalowany, kliknij w link Menedżer na stronie "
-"głównej."
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr "Ups! coś pominięto lub hasła nie pasują do siebie!"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-"Jappix wymaga wprowadzenia niektórych danych. Proszę poprawić następujące "
-"dane (lub pozostaw domyślne wartości, które są wystarczające dla większości "
-"ludzi)."
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-"Jeśli nie wypełnisz wymaganego pola, zostanie ono automatycznie wypełnione "
-"domyślną wartością."
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-"Potrzebujesz pomocy? Lepiej przeczytaj stronę dokumentacji o tym jak "
-"wypełnić ten formularz!"
-
-msgid "User"
-msgstr "Użytkownik"
-
-msgid "Service"
-msgstr "Usługa"
-
-msgid "Service name"
-msgstr "Nazwa usługi"
-
-msgid "Service description"
-msgstr "Opis usługi"
-
-msgid "Owner name"
-msgstr "Nazwa właściciela"
-
-msgid "Owner website"
-msgstr "Witryna właściciela"
-
-msgid "Connection"
-msgstr "Połączenie"
-
-msgid "Lock the host"
-msgstr "Zablokuj hosta"
-
-msgid "Anonymous mode"
-msgstr "Tryb anonimowy"
-
-msgid "HTTP authentication"
-msgstr "Uwierzytelnianie HTTP"
-
-msgid "Registration allowed"
-msgstr "Rejestracja włączona"
-
-msgid "Use the built-in BOSH proxy"
-msgstr "Użyj wbudowanego proxy BOSH"
-
-msgid "Manager link"
-msgstr "Menadżer linków"
-
-msgid "Groupchats to join"
-msgstr "Czaty grupowe do dołączenia"
-
-msgid "Suggest groupchats"
-msgstr "Sugerowane grupy rozmów"
-
-msgid "Encryption"
-msgstr "Szyfrowanie"
-
-msgid "HTTPS storage"
-msgstr "Magazyn HTTPS"
-
-msgid "Force HTTPS"
-msgstr "Wymuś HTTPS"
-
-msgid "Compression"
-msgstr "Kompresja"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"Ta strona pomoże Ci ustawić domyślne hosty, do których Jappix będzie się "
-"łączyć. Możesz zostawić to tak jak jest i kontynuować jeśli chcesz korzystać "
-"z oficjalnych hostów."
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"Być może nie wiesz czym jest serwer BOSH? Jest to swoisty most łączący "
-"klienta Jappix-a i serwer XMPP. Jest on niezbędny ze względów technicznych."
-
-msgid "Main host"
-msgstr "Host główny"
-
-msgid "Groupchat host"
-msgstr "Host rozmów grupowych"
-
-msgid "Pubsub host"
-msgstr "Host pubsub"
-
-msgid "Anonymous host"
-msgstr "Host anonimowy"
-
-msgid "Directory host"
-msgstr "Host katalogu"
-
-msgid "BOSH host"
-msgstr "host BOSH"
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-"Możesz zainstalować dodatkowe oprogramowanie na serwerze, które wzbogaci "
-"możliwości Jappix-a. Inne może być zmodyfikowane ze względu na domyślne "
-"ustawienia prywatności."
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-"Aby to wykonać, musisz mieć dostęp do shella na swoim serwerze i być "
-"zalogowanym jako root. Pamiętaj, że jest to opcjonalne, Jappix będzie "
-"działać bez tych modułów ale niektóre z jego możliwości będą niedostępne."
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-"Po skonfigurowaniu, Jappix wygeneruje pliki cache. Może to długo potrwać, "
-"poczekaj aż aplikacja będzie pokazana i nie wciskaj żadnego klawisza."
-
-msgid "Thanks for using Jappix!"
-msgstr "Dziękujemy za używanie Jappix!"
-
-msgid "Next"
-msgstr "Dalej"
-
-msgid "Finish"
-msgstr "Koniec"
-
-msgid "Check again"
-msgstr "Sprawdź ponownie"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-"Folder nie jest zapisywalny, ustaw odpowiednie uprawienia dla folderu %s."
-
-msgid "%s is installed on your system."
-msgstr "%s jest zainstalowane w Twoim systemie."
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s nie jest zainstalowane w Twoim systemie."
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr ""
-"Maksymalny rozmiar wysyłanego pliku ustawiony dla PHP jest wystarczający (%s)"
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-"Maksymalny rozmiar wysyłanego pliku ustawiony dla PHP jest niewystarczający "
-"(%1s), powinieneś ustawić go na %2s w %3s."
-
-msgid "Jappix manager"
-msgstr "Menedżer Jappix"
-
-msgid "Manager access"
-msgstr "Dostęp menadżera"
-
-msgid "Statistics"
-msgstr "Statystyki"
-
-msgid "Hosts"
-msgstr "Hosty"
-
-msgid "Design"
-msgstr "Wygląd"
-
-msgid "Repeat"
-msgstr "Powtarzanie"
-
-msgid "All"
-msgstr "Wszystko"
-
-msgid "Horizontal"
-msgstr "Poziomo"
-
-msgid "Vertical"
-msgstr "Pionowo"
-
-msgid "Center"
-msgstr "Środek"
-
-msgid "Left"
-msgstr "Lewa"
-
-msgid "Right"
-msgstr "Prawa"
-
-msgid "Top"
-msgstr "Góra"
-
-msgid "Bottom"
-msgstr "Dół"
-
-msgid "Adapt"
-msgstr "Przystosuj"
-
-msgid "Color"
-msgstr "Kolor"
-
-msgid "Users"
-msgstr "Użytkownicy"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-"Strefa zamknięta: tylko autoryzowani użytkownicy mogą zarządzać ustawieniami "
-"instalacji Jappix-a."
-
-msgid "Please use the form below to login to the administration panel."
-msgstr ""
-"Użyj poniższego formularza aby zalogować się do panelu administracyjnego."
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-"W celu zwiększenia bezpieczeństwa, sesje są ograniczone czasowo - kiedy "
-"wyłączysz przeglądarke, zostaniesz wylogowany."
-
-msgid "Credentials"
-msgstr "Uprawnienia"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "Zostałeś wylogowany. Żegnaj!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-"Ups. Nie zostałeś rozpoznany jako administrator, Sprawdź swoje uprawnienia!"
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr "Poniżej znajdziesz podstawowe statystyki instalacji Jappix-a."
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr ""
-"Za pomocą tego narzędzia możesz zmienić ustawienia instalacji Jappix-a."
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-"Zmień host XMPP, żeby ten węzeł Jappix działał przy pomocy tego narzędzia."
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-"Za pomocą tego narzędzia możesz zarządzać wszystkimi zgromadzonymi przez "
-"Jappix-a plikami: proszę wybrać pod-folder i rozpocząć edycję zawartości!"
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr "Jappix jest w pełni dostosowywalny: tu możesz zmienić jego wygląd."
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr "To nie jest poprawny obrazek, proszę użyć PNG, GIF lub JPG!"
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr "To nie jest prawidłowy obrazek, użyj proszę formatu PNG!"
-
-msgid "The image could not be received, would you mind retry?"
-msgstr "Obrazek nie został pobrany, czy mógł byś spróbować ponownie?"
-
-msgid "Your service logo has been successfully changed!"
-msgstr "Logo twojego serwisu zostało z sukcesem zmienione!"
-
-msgid "Your image was added to the list!"
-msgstr "Twój obrazek został dodany do listy!"
-
-msgid "Changes saved!"
-msgstr "Zmiany zapisane!"
-
-msgid "Logo"
-msgstr "Logo"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-"Możesz ustawić logo twojego własnego serwisu aby zastąpić nim domyślne. "
-"Zadbaj o odpowiedni rozmiar i przeważający kolor każdego loga!"
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr "Prześlij na serwer logo w zalecanym maksymalnym rozmiarze w pikselach."
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-"Formatem twojego loga musi być PNG. Pozostaw puste pole a logo nie zostanie "
-"zmienione."
-
-msgid "Remove this logo"
-msgstr "Usuń to logo"
-
-msgid "View this logo"
-msgstr "Podgląd tego loga"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-"Możesz ustawić więcej niż jednego administratora dla tej instalacji Jappix-"
-"a. Z pomocą tego narzędzia możesz też zmienić hasło."
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-"Za pomocą tego narzędzia możesz zaktualizować swoją instalacje Jappix-a lub "
-"sprawdzić, czy dostępne są nowe wersje."
-
-msgid "Access statistics"
-msgstr "Statystyki odwiedzin"
-
-msgid "Share statistics"
-msgstr "Statystyki udostępniania"
-
-msgid "Other statistics"
-msgstr "Inne statystyki"
-
-msgid "January"
-msgstr "Styczeń"
-
-msgid "February"
-msgstr "Luty"
-
-msgid "March"
-msgstr "Marzec"
-
-msgid "April"
-msgstr "Kwiecień"
-
-msgid "May"
-msgstr "Maj"
-
-msgid "June"
-msgstr "Czerwiec"
-
-msgid "July"
-msgstr "Lipiec"
-
-msgid "August"
-msgstr "Sierpień"
-
-msgid "September"
-msgstr "Wrzesień"
-
-msgid "October"
-msgstr "Październik"
-
-msgid "November"
-msgstr "Listopad"
-
-msgid "December"
-msgstr "Grudzień"
-
-msgid "Monday"
-msgstr "Poniedziałek"
-
-msgid "Tuesday"
-msgstr "Wtorek"
-
-msgid "Wednesday"
-msgstr "Środa"
-
-msgid "Thursday"
-msgstr "Czwartek"
-
-msgid "Friday"
-msgstr "Piątek"
-
-msgid "Saturday"
-msgstr "Sobota"
-
-msgid "Sunday"
-msgstr "Niedziela"
-
-msgid "Total"
-msgstr "Łącznie"
-
-msgid "Archives"
-msgstr ""
-
-msgid "Music"
-msgstr "Muzyka"
-
-msgid "Backgrounds"
-msgstr "Tła"
-
-msgid "Share"
-msgstr "Podziel się"
-
-msgid "Background"
-msgstr "Tło"
-
-msgid "Notice"
-msgstr "Informacja"
-
-msgid "Your design preferences have been saved!"
-msgstr "Ustawienia wyglądu zostały zapisane!"
-
-msgid "Please check your inputs: something is missing!"
-msgstr "Proszę sprawdzić wprowadzone dane: coś jest nie tak!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-"Za pomocą tego narzędznia zmienisz tło w swojej instalacji Jappix-a. Możesz "
-"albo ustawić kolor albo wgrać obrazek. "
-
-msgid "Use default background"
-msgstr "Użyj domyślnego tła"
-
-msgid "Use your own image"
-msgstr "Użyj własnego obrazka"
-
-msgid "Select a background to use and change the display options."
-msgstr "Wybierz tło i zmień ustawienia wyświetlania."
-
-msgid "Use your own color"
-msgstr "Użyj własnego koloru."
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr "Podaj wartość hex koloru, który chcesz użyć jako tło."
-
-msgid "Manage backgrounds"
-msgstr "Zarządzaj obrazkami tła"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-"Za pomocą tego narzędzia możesz dodać nowe tło do listy. Proszę wysłać "
-"poprawny obrazek."
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr "Jeśli chcesz usunąć niektóre tła, użyj poniższej przeglądarki."
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-"Ustaw wiadomość powitalną dla wszystkich swoich użytkowników. Np. "
-"ostrzeżenie, ważna aktualizacja czy reklama."
-
-msgid "Simple notice"
-msgstr "Zwykłe powiadomienie"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-"To powiadomienie potrzebuje tylko zwykłego tekstu, kod nie jest dozwolony!"
-
-msgid "Advanced notice"
-msgstr "Zaawansowane powiadomienie"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-"Możesz dostosować powiadomienie za pomocą HTML, CSS i JavaScript ale musisz "
-"zakodować wygląd."
-
-msgid "Available updates"
-msgstr "Dostępne aktualizacje"
-
-msgid "What's new?"
-msgstr "Co nowego?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr ""
-"Twój folder magazynu nie jest zapisywalny, proszę zastosuj odpowiednie "
-"uprawnienia!"
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-"%1s może powodować problemy dla proxy, proszę zwiększ wartość %2s do %3s!"
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-"Używasz rozwojowej wersji Jappix. Zaktualizuj ją poprzez nasze repozytorium "
-"przez wykonanie: %s."
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-"Nowa wersja Jappix-a jest dostępna! Sprawdź co nowego i uruchom aktualizator!"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr "Twoja wersja jest nieaktualna. Zaktualizuj ją do %s kilkając tu!"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"Wygląda na to, że Twoja wersja jest aktualna ale możesz sprawdzić ją ręcznie "
-"klikając tutaj."
-
-msgid "Check for updates"
-msgstr "Sprawdź aktualizacje"
-
-msgid "Update in progress"
-msgstr "Aktualizacja w toku."
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr ""
-"Jappix został zaktualizowany: teraz używasz najnowszej wersji. Miłej zabawy!"
-
-msgid "The update has failed! Please try again later."
-msgstr "Aktualizacja nie powiodła się! Proszę spróbować później."
-
-msgid "Downloading package..."
-msgstr "Ściąganie paczki..."
-
-msgid "Removing current Jappix system files..."
-msgstr "Usuwanie plików systemowych Jappix-a..."
-
-msgid "Extracting package..."
-msgstr "Rozpakowywanie paczki..."
-
-msgid "Regenerating storage folder tree..."
-msgstr "Wygeneruj ponownie drzewo folderu magazynującego..."
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix jest teraz zaktualizowany!"
-
-msgid "Aborted: socket error!"
-msgstr "Przerwano: błąd socket-a!"
-
-msgid "Aborted: buffer error!"
-msgstr "Przerwano: błąd bufora!"
-
-msgid "Aborted: everything is not writable!"
-msgstr "Przerwano: nie wszystko jest zapisywalne!"
-
-msgid "Aborted: could not extract the package!"
-msgstr "Przerwano: nie można rozpakować paczki!"
-
-msgid "Visits"
-msgstr "Wizyty"
-
-msgid "Daily"
-msgstr "Dziennie"
-
-msgid "Weekly"
-msgstr "Tygodniowo"
-
-msgid "Monthly"
-msgstr "Miesięcznie"
-
-msgid "Yearly"
-msgstr "Rocznie"
-
-msgid "Size"
-msgstr "Rozmiar"
-
-msgid "Clean everything"
-msgstr "Wyczyść wszystko"
-
-msgid "Purge cache"
-msgstr "Wyczyść cache"
-
-msgid "Purge logs"
-msgstr "Wyczyść logi"
-
-msgid "Purge sent files"
-msgstr "Opróżnij z wysłanych plików"
-
-msgid "Purge updates"
-msgstr "Wyczyść aktualizacje"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "Folder, który chciano wyczyścić jest teraz pusty!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-"Utrzymuj swoją instalację Jappix-a świeżego i szybkiego, czyść foldery "
-"foldery 'store' regularnie!"
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-"Wyślij swoją muzykę (Ogg Vorbis, MP3 lub WAV) i słuchaj jej w Jappix-ie!"
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr "Plik, który chcesz wysłać, musi być mniejszy niż %s."
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-"Bądź na bieżąco z tym, co Twoi użytkownicy przechowują na serwerze i za "
-"pomocą tego urządzenia usuwaj niepożądane treści."
-
-msgid "Title"
-msgstr "Tytuł"
-
-msgid "Artist"
-msgstr "Wykonawca"
-
-msgid "Album"
-msgstr "Album"
-
-msgid "File"
-msgstr "Plik"
-
-msgid "Upload"
-msgstr "Upload"
-
-msgid "The folder is empty."
-msgstr "Folder jest pusty,"
-
-msgid "The music could not be received, please retry!"
-msgstr "Muzyka nie została wczytana, proszę spróbować ponownie!"
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-"To nie jest poprawny plik muzyczny, proszę wysłać plik Ogg Vorbis, MP3 lub "
-"WAV!"
-
-msgid "Your music has been added!"
-msgstr "Twoja muzyja została dodana!"
-
-msgid "The selected elements have been removed."
-msgstr "Zaznaczone elementy zostały usunięte."
-
-msgid "You must select elements to remove!"
-msgstr "Musisz zaznaczyć elementy do usunięcia!"
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-"Za pomocą tego narzędzia dodasz nowego użytkownika lub zmienisz hasło (wpisz "
-"istniejącą nazwę użytkownika). Pamiętaj, żeby wybrać mocne hasło!"
-
-msgid "Manage"
-msgstr "Zarządzaj"
-
-msgid "List"
-msgstr "Lista"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-"Usuń użytkowników przy pomocy tego narzędzia. Należy pamiętać, że nie można "
-"usunąć użytkownika, jeśli ozostał tylko jeden."
-
-msgid "The user has been added!"
-msgstr "Użytkownik został dodany!"
-
-msgid "The chosen users have been removed."
-msgstr "Wybrani użytkownicy zostali usunięci."
-
-msgid "You must select one or more users to be removed!"
-msgstr "Musisz wybrać jednego lub kilku użytkowników do usunięcia!"
-
-msgid "Yesterday"
-msgstr "Wczoraj"
-
-msgid "%s days ago"
-msgstr "%s dni temu"
-
-msgid "User currently active"
-msgstr "User jest aktualnie aktywny"
-
-msgid "Last seen: %s"
-msgstr "Ostatnio widziany: %s"
-
-msgid "Inactive since: %s"
-msgstr "Nieaktywny od: %s"
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr "Twój znajomy wydaje się nie odbierać wiadomości od ciebie!"
-
-msgid "Static content server"
-msgstr "Zawartość statyczna serwera"
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr "To jest zawartość statyczna serwera dla %1s, “%2s”."
-
-msgid "User uploads server"
-msgstr "Użytkownik przesłał na serwer"
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr "Ten użytkownik przesłał na serwer %1s, “%2s”."
-
-msgid "Suggested friends"
-msgstr "Polecani znajomi"
-
-msgid "Check all"
-msgstr "Zaznacz wszystkie"
-
-msgid "Uncheck all"
-msgstr "Odznacz wszystkie"
-
-msgid "Choose"
-msgstr "Wybierz"
-
-msgid "List name"
-msgstr "Nazwa listy"
-
-msgid "Allow"
-msgstr "Zezwól"
-
-msgid "Deny"
-msgstr "Zabroń"
-
-msgid "Group"
-msgstr "Grupa"
-
-msgid "Subscription"
-msgstr "Subskrypcja"
-
-msgid "Both"
-msgstr "Zarówno"
-
-msgid "From"
-msgstr "Od"
-
-msgid "Everybody"
-msgstr "Wszyscy"
-
-msgid "Send messages"
-msgstr "Wyślij wiadomość"
-
-msgid "Send queries"
-msgstr "Wyślij zapytania"
-
-msgid "See my status"
-msgstr "Zobacz mój status"
-
-msgid "Send his/her status"
-msgstr "Wyślij status jemu/jej"
-
-msgid "Everything"
-msgstr "Wszystko"
-
-msgid "Item"
-msgstr "Pozycja"
-
-msgid "Order"
-msgstr "Kolejność"
-
-msgid "Active for this session"
-msgstr "Aktywny w tej sesji"
-
-msgid "Always active"
-msgstr "Zawsze aktywny"
-
-msgid "User directory"
-msgstr "Katalog użytkownika"
-
-msgid "Search a friend"
-msgstr "Znajdź znajomego"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-"Żądana właściwość nie jest zaimplementowana przez odbiorcę lub serwer i "
-"dlatego nie może być przetworzona"
-
-msgid "Send him/her a message"
-msgstr "Wyślij jemu/jej wiadomość"
-
-msgid "Start a chat with him/her"
-msgstr "Zacznij czat z nim/nią"
-
-msgid "Available shortcuts:"
-msgstr "Dostępne skróty klawiaturowe"
-
-msgid "%s removes the chat logs"
-msgstr "%s usuwa logi czatów"
-
-msgid "%s joins a groupchat"
-msgstr "%s dołącza do czatu grupowego"
-
-msgid "%s closes the chat"
-msgstr "%s zamyka czat"
-
-msgid "%s shows the user profile"
-msgstr "%s pokazuje profil użytkownika"
-
-msgid "%s sends a message to the room"
-msgstr "%s wysyła wiadomość do pokoju rozmów"
-
-msgid "%s changes your nickname"
-msgstr "%s zmienia twój nick"
-
-msgid "%s sends a message to someone in the room"
-msgstr "%s wysyła wiadomość do kogoś w pokoju"
-
-msgid "%s changes the room topic"
-msgstr "%s zmienia temat pokoju rozmów"
-
-msgid "%s kicks a user of the room"
-msgstr "%s wyrzucił użytkownika pokoju"
-
-msgid "%s bans a user of the room"
-msgstr "%s zbanował użytkownika pokoju"
-
-msgid "%s invites someone to join the room"
-msgstr "%s zaprosił kogoś do pokoju"
-
-msgid "Public profile"
-msgstr "Profil publiczny"
-
-msgid "Your profile anywhere on the Web."
-msgstr "Twój profil gdziekolwiek w Sieci WWW."
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-"%s jest usługą Jappix.com, która tworzy twój profil publiczny XMPP. Łatwiej "
-"jest upowszechnić go. Nie potrzeba konta XMPP aby zobaczyć twój kanał "
-"społecznościowy, twoją obecną pozycję i twoje szczegóły kontaktu."
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-"Ponadto, każdy obrazek który wysyłasz do swojego kanału społecznościowego "
-"jest dodawany do pięknej linii czasu. Możesz teraz zobaczyć obrazki które "
-"udostępniałeś z roku na rok."
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-"Możesz również korzystać z awatara XMPP jako jednego avatara dla każdej "
-"witryny, blogu i forum, którego używasz. Kiedy go zmienisz na XMPP, nowy "
-"avatar pojawi się wszędzie. Co za genialne ulepszenie!"
-
-msgid "Yay, let's create your public profile!"
-msgstr "Hurra, utwórz swój profil publiczny!"
-
-msgid "Enable my public profile"
-msgstr "Włącz mój profil publiczny"
-
-msgid "Jappix for your phone"
-msgstr "Jappix dla twojego telefonu"
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr ""
-"Pojedyncza aplikacja mobilna do wiadomości, kanałów, profili i wielu więcej "
-"rzeczy!"
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-"To powiadomienie jest tylko informacyjne, możliwe, że podlinkowane dane "
-"zostały usunięte."
-
-msgid "You haven't provided any file to download"
-msgstr "Nie dostarczyłeś żadnych plików do pobrania"
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr "Nie możesz pobrać pliku, jeśli nie dostarczyłeś klucza"
-
-msgid "Woah this file isn't found, please double check"
-msgstr "O żeż, ten plik nie istnieje, sprawdź proszę ponownie"
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr "Klucz, który podałeś nie ma zgody na pobranie tego pliku"
-
-msgid "Statistics are currently disabled in the settings."
-msgstr "Statystyki są obecnie wyłączone w ustawieniach."
-
-msgid "New event!"
-msgstr "Nowe zdarzenie!"
-
-msgid "%s is typing..."
-msgstr "%s pisze..."
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr "Kod zabezpieczający jest nieprawidłowy. Spróbuj ponownie z innym."
-
-msgid "The username you picked is not available. Please try another one."
-msgstr "Nazwa użytkownika wybrałeś nie jest dostępna. Prosimy spróbować innej."
-
-msgid "There was an error registering your account. Please retry."
-msgstr "Wystąpił błąd podczas rejestracji konta. Prosimy spróbować ponownie."
-
-msgid "Username"
-msgstr "Nazwa użytkownika"
-
-msgid "Enter password"
-msgstr "Wprowadź hasło"
-
-msgid "Once again..."
-msgstr "Jeszcze raz..."
-
-msgid "Code"
-msgstr "Kod"
-
-msgid "Security code"
-msgstr "Kod zabezpieczający"
-
-msgid "Advertising space available!"
-msgstr "Powierzchnia reklamowa dostępna!"
-
-msgid "Advertise here"
-msgstr "Zareklamuj się"
-
-msgid "Analytics (%s)"
-msgstr "Statystyki (%s)"
-
-msgid "Track visits"
-msgstr "Śledź wizyty"
-
-msgid "Piwik URL"
-msgstr "Piwik URL"
-
-msgid "Piwik tracking ID"
-msgstr "ID śledzenia Piwik"
-
-msgid "Advertising (%s)"
-msgstr "Reklama (%s)"
-
-msgid "Enable ads"
-msgstr "Włącz reklamy"
-
-msgid "Standard ads key"
-msgstr "Standardowy klucz reklam"
-
-msgid "Content ads key"
-msgstr "Treściowy klucz reklam"
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "Mute"
-msgstr ""
-
-msgid "Unmute"
-msgstr ""
-
-msgid "Is calling you"
-msgstr ""
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr ""
-
-msgid "Waiting..."
-msgstr ""
-
-msgid "Ringing..."
-msgstr ""
-
-msgid "Declined the call"
-msgstr ""
-
-msgid "Call error"
-msgstr ""
-
-msgid "Ended the call"
-msgstr ""
-
-msgid "Call ended"
-msgstr ""
-
-msgid "Call canceled"
-msgstr ""
-
-msgid "Canceled the call"
-msgstr ""
-
-msgid "Is already in a call"
-msgstr ""
-
-msgid "Ending call..."
-msgstr ""
-
-msgid "Accept"
-msgstr ""
-
-msgid "Decline"
-msgstr ""
-
-msgid "Okay"
-msgstr ""
-
-msgid "Retry"
-msgstr ""
-
-msgid "Audio Call"
-msgstr ""
-
-msgid "Video Call"
-msgstr ""
diff --git a/i18n/pt-br/LC_MESSAGES/main.mo b/i18n/pt-br/LC_MESSAGES/main.mo
deleted file mode 100644
index dcb63c27..00000000
--- a/i18n/pt-br/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/pt-br/LC_MESSAGES/main.po b/i18n/pt-br/LC_MESSAGES/main.po
deleted file mode 100644
index e31528f8..00000000
--- a/i18n/pt-br/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2378 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-# fahecon <fahecon@gmail.com>, 2013
-# Canopus, 2013
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:21+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/"
-"jappix/language/pt_BR/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: pt_BR\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "default:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"JavaScript está faltando no seu navegador web, de modo que você não será "
-"capaz de lançar Jappix! Corrija isso."
-
-msgid "Social channel, chat and more."
-msgstr ""
-
-msgid "Create your public profile."
-msgstr ""
-
-msgid "A mini-chat for your website."
-msgstr ""
-
-msgid "Get Jappix, get support."
-msgstr ""
-
-msgid "Statistics around Jappix."
-msgstr ""
-
-msgid "Legal disclaimer for Jappix."
-msgstr ""
-
-msgid "Download Jappix for free."
-msgstr ""
-
-msgid "Contribute to the Jappix code."
-msgstr ""
-
-msgid "Jappix for your company."
-msgstr ""
-
-msgid "Find a public Jappix node."
-msgstr ""
-
-msgid "Credits"
-msgstr "Créditos"
-
-msgid "Association"
-msgstr ""
-
-msgid "Web agency"
-msgstr ""
-
-msgid "Legal"
-msgstr ""
-
-msgid "Legal disclaimer"
-msgstr ""
-
-msgid "Terms of use and legal"
-msgstr ""
-
-msgid "Owner"
-msgstr ""
-
-msgid "Node owner"
-msgstr ""
-
-msgid "By using our service, you accept %s."
-msgstr ""
-
-msgid "our terms of use"
-msgstr ""
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Jappix foi interrompido por um problema de rede, um login errado (verifique "
-"se você inseriu as credenciais correta), Desculpe pelo transtorno."
-
-msgid "The element list on this server could not be obtained!"
-msgstr "A lista de elementos sobre esse servidor não pôde ser obtida!"
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"Sua senha foi mudada, agora você pode se conectar a sua conta com os seus "
-"dados de login nova."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "Sua conta XMPP foi removida, tchau!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "Você foi deslogado da sua conta XMPP, tenha um bom dia!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr "A sala em que você entrou parece não existir. Você deve cria-la!"
-
-msgid "The groupchat has been removed."
-msgstr "O grupo de chat foi removido, agor alguém terá que recria-lo"
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "O usuário com quem quer se comunicar não está presente na sala."
-
-msgid "Please enter the group chat address to join."
-msgstr "Por favor insira o endereço do grupo de chat para entrar."
-
-msgid "Please enter your nickname to join %s."
-msgstr "Por favor, digite um nome para se conectar em"
-
-msgid "This room (%s) is protected with a password."
-msgstr "Esta sala está protegida por uma senha."
-
-msgid "Your browser is out of date!"
-msgstr "Seu navegador esta desatualizado"
-
-msgid "Last %s version is better!"
-msgstr ""
-
-msgid "Login"
-msgstr "Logar"
-
-msgid "Register"
-msgstr "Registrar"
-
-msgid "Here we go!"
-msgstr "E lá vamos nós!"
-
-msgid "Server"
-msgstr "Servidor"
-
-msgid "Password"
-msgstr "Senha"
-
-msgid "Remember me"
-msgstr "Me lembrar"
-
-msgid "This tool has been disabled!"
-msgstr "Esta ferramenta foi desativada. Você não pode usá-la!"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr ""
-"Devido à problemas de rede, você foi desconectado. O que você quer fazer "
-"agora?"
-
-msgid "Reconnect"
-msgstr "Reconectar"
-
-msgid "Messages"
-msgstr "Mensagens"
-
-msgid "Profile"
-msgstr "Perfil"
-
-msgid "Options"
-msgstr "Opções"
-
-msgid "Disconnect"
-msgstr "Desconectar"
-
-msgid "Filter"
-msgstr "Filtrar"
-
-msgid "Add a friend"
-msgstr "Adicionar um amigo"
-
-msgid "Your groupchats"
-msgstr "Suas salas"
-
-msgid "Manage your favorite groupchats"
-msgstr "Administrar suas salas favoritas"
-
-msgid "More stuff"
-msgstr "Mais coisas"
-
-msgid "Show all friends"
-msgstr "Mostrar todos os amigos"
-
-msgid "Only show connected friends"
-msgstr "Mostrar apenas os amigos conectados"
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "Arquivo de mensagens"
-
-msgid "Date"
-msgstr "Data"
-
-msgid "A short message?"
-msgstr "Uma mensagem curta?"
-
-msgid "How are you?"
-msgstr "Como vai você?"
-
-msgid "What are you doing?"
-msgstr "O que você tem feito?"
-
-msgid "Join a chat"
-msgstr "Entrar na sala"
-
-msgid "Status"
-msgstr "Status"
-
-msgid "Available"
-msgstr "Disponível"
-
-msgid "Talkative"
-msgstr "Em conversa"
-
-msgid "Away"
-msgstr "Ausente"
-
-msgid "Not available"
-msgstr "Não disponível"
-
-msgid "Busy"
-msgstr "Ocupado"
-
-msgid "Offline"
-msgstr "Desconectado"
-
-msgid "Mood"
-msgstr "Humor"
-
-msgid "None"
-msgstr "Nada"
-
-msgid "Crazy"
-msgstr "Louco"
-
-msgid "Excited"
-msgstr "Animado"
-
-msgid "Playful"
-msgstr "Brincalhão"
-
-msgid "Happy"
-msgstr "Feliz"
-
-msgid "Shocked"
-msgstr "Chocado"
-
-msgid "Hot"
-msgstr "Quente"
-
-msgid "Sad"
-msgstr "Triste"
-
-msgid "Amorous"
-msgstr "Amoroso"
-
-msgid "Confident"
-msgstr "Confiante"
-
-msgid "Activity"
-msgstr "Atividade"
-
-msgid "Chores"
-msgstr "Tarefas"
-
-msgid "Drinking"
-msgstr "Bebendo"
-
-msgid "Eating"
-msgstr "Comendo"
-
-msgid "Exercising"
-msgstr "Se exercitando"
-
-msgid "Grooming"
-msgstr "Aparência"
-
-msgid "Appointment"
-msgstr "nomeação"
-
-msgid "Inactive"
-msgstr "Inativo"
-
-msgid "Relaxing"
-msgstr "Relaxante"
-
-msgid "Talking"
-msgstr "Falando"
-
-msgid "Traveling"
-msgstr "Viajando"
-
-msgid "Working"
-msgstr "Trabalhando"
-
-msgid "View profile"
-msgstr "Ver Perfil"
-
-msgid "This is a repeat from %s"
-msgstr "Essa é uma repetição de %s"
-
-msgid "Repeat this notice"
-msgstr "Repetir a notícia"
-
-msgid "Remove this notice"
-msgstr "Remover esta notícia"
-
-msgid "Your profile"
-msgstr "Seu perfil"
-
-msgid "Identity"
-msgstr "Identidade"
-
-msgid "Profile image"
-msgstr "Imagem do perfil"
-
-msgid "Others"
-msgstr "Outros"
-
-msgid "Other"
-msgstr "Outro"
-
-msgid "Personal"
-msgstr "Pessoal"
-
-msgid "Complete name"
-msgstr "Nome completo"
-
-msgid "Nickname"
-msgstr "Apelido"
-
-msgid "First name"
-msgstr "Primeiro nome"
-
-msgid "Last name"
-msgstr "Sobrenome"
-
-msgid "Date of birth"
-msgstr "Data de aniversário"
-
-msgid "Contact"
-msgstr "Contato"
-
-msgid "E-mail"
-msgstr "E-mail"
-
-msgid "Phone"
-msgstr "Telefone"
-
-msgid "Website"
-msgstr "Site"
-
-msgid "Current"
-msgstr "Atual"
-
-msgid "Delete"
-msgstr "Deletar"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr ""
-"Que pena! Você não possui imagem de perfil definida no seu cartão de "
-"identidade!"
-
-msgid "Address"
-msgstr "Endereço"
-
-msgid "Street"
-msgstr "Rua"
-
-msgid "City"
-msgstr "Cidade"
-
-msgid "Postal code"
-msgstr "Código Posta"
-
-msgid "Country"
-msgstr "País"
-
-msgid "Biography"
-msgstr "Biografia"
-
-msgid "Important notice"
-msgstr "Aviso importante"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr ""
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"É recomendável o envio de uma imagem de perfil (%s máximo), como uma foto "
-"sua, isso facilita seu reconhecimento"
-
-msgid "Save"
-msgstr "Salvar"
-
-msgid "Cancel"
-msgstr "Cancelar"
-
-msgid "Edit options"
-msgstr "Editar opções"
-
-msgid "Channel"
-msgstr "Canal"
-
-msgid "Commands"
-msgstr "Comandos"
-
-msgid "Sounds"
-msgstr "sons"
-
-msgid "Privacy"
-msgstr "Privacidade"
-
-msgid "Message archiving"
-msgstr "Arquivo de mensagens"
-
-msgid "Store an history of your chats"
-msgstr ""
-
-msgid "Geolocation"
-msgstr "Localização geográfica"
-
-msgid "Disabled"
-msgstr ""
-
-msgid "Store all chats"
-msgstr "Guardar todas as conversas"
-
-msgid "Store friend chats"
-msgstr ""
-
-msgid "Remove all archives"
-msgstr ""
-
-msgid "Empty"
-msgstr "Vazio"
-
-msgid "Empty channel"
-msgstr "Canal vazio"
-
-msgid "Persistent"
-msgstr "Persistente"
-
-msgid "Maximum notices"
-msgstr "Máximo de avisos"
-
-msgid "Account"
-msgstr "Conta"
-
-msgid "Change password"
-msgstr "Mudar senha"
-
-msgid "Delete account"
-msgstr "Deletar conta"
-
-msgid "Old"
-msgstr "Velho"
-
-msgid "New (2 times)"
-msgstr "Novo (2 vezes)"
-
-msgid "Suggested chatrooms"
-msgstr ""
-
-msgid "Skip"
-msgstr ""
-
-msgid "Continue"
-msgstr "Continue"
-
-msgid "To"
-msgstr "Para"
-
-msgid "Close"
-msgstr "Fechar"
-
-msgid "unknown"
-msgstr "desconhecido"
-
-msgid "Unavailable"
-msgstr "Indisponível"
-
-msgid "is now"
-msgstr "É agora"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Por favor aguarde enquanto seu avatar é enviado..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "Aqui está! Uma linda imagem nova de perfil!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "O arquivo da imagem não é suportado ou o tamanho é inválido."
-
-msgid "Reply"
-msgstr "Responder"
-
-msgid "Error"
-msgstr "Erro"
-
-msgid "Click here to solve the error"
-msgstr "Clique aqui para solucionar o erro"
-
-msgid "You"
-msgstr "Você"
-
-msgid "Remove"
-msgstr "Remover"
-
-msgid "Rename"
-msgstr "Renomear"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Olá, eu sou %s, eu gostaria de te adicionar como meu amigo."
-
-msgid "Smiley insertion"
-msgstr "Inserir emoticom"
-
-msgid "Change style"
-msgstr "Alterar estilo"
-
-msgid "Text in bold"
-msgstr "Texto em negrito"
-
-msgid "Text in italic"
-msgstr "Texto em itálico"
-
-msgid "Underlined text"
-msgstr "Texto sublinhado"
-
-msgid "Send a file"
-msgstr "Enviar um arquivo"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr "Quando enviado seu amigo será avisado para baixar o arquivo."
-
-msgid "Save chat"
-msgstr "Salvar conversa"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"Clique no link a seguir para acessar o log da conversa. Após um tempo, "
-"clique novamente para pegar o arquivo."
-
-msgid "This chat is empty!"
-msgstr "Esse chat está vazio!"
-
-msgid "Generate file!"
-msgstr "Gerar arquivo!"
-
-msgid "Download file!"
-msgstr "Ba"
-
-msgid "Clean current chat"
-msgstr "Apagar esta conversa"
-
-msgid "Show user profile"
-msgstr "Mostrar perfil do usuário"
-
-msgid "Add this contact to your friends"
-msgstr "Adicionar este contato aos seus amigos"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Adicionar este grupo de chat aos seus favoritos"
-
-msgid "All tabs"
-msgstr "Todas as abas"
-
-msgid "Join groupchat"
-msgstr ""
-
-msgid "Close this tab"
-msgstr "Fechar esta aba"
-
-msgid "no subject defined for this room."
-msgstr "nenhum assunto definido para esta sala."
-
-msgid "Administration panel for this room"
-msgstr "Painel de administração desta sala"
-
-msgid "Moderators"
-msgstr "Moderadores"
-
-msgid "Participants"
-msgstr "Participantes"
-
-msgid "Visitors"
-msgstr "Visitantes"
-
-msgid "Manage favorite rooms"
-msgstr "Gerenciar salas favoritas"
-
-msgid "Change favorites"
-msgstr "Alterar favoritos"
-
-msgid "Search a room"
-msgstr "Procurar uma sala"
-
-msgid "Select a favorite"
-msgstr "Selecionar um favorito"
-
-msgid "Getting the name..."
-msgstr "Buscando o nome..."
-
-msgid "Gateway"
-msgstr "Gateway"
-
-msgid "Name"
-msgstr "Nome"
-
-msgid "Room"
-msgstr "Sala"
-
-msgid "Add"
-msgstr "Adicionar"
-
-msgid "Edit"
-msgstr "Editar"
-
-msgid "Search a room on"
-msgstr "Procurar uma sala em"
-
-msgid "No room found on this server."
-msgstr "Nenhuma sala encontrada nesse servidor."
-
-msgid "Service discovery"
-msgstr "Descobrir serviços"
-
-msgid "Server to query"
-msgstr "Servidor para pesquisa"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "Desculpa, mas a entidade não retornou nenhum resultado!"
-
-msgid "Accounts"
-msgstr "Contas"
-
-msgid "Authentications"
-msgstr "Autenticações"
-
-msgid "Automation"
-msgstr "Automatização"
-
-msgid "Clients"
-msgstr "Clientes"
-
-msgid "Collaboration"
-msgstr "Colaboração"
-
-msgid "Components"
-msgstr "Componentes"
-
-msgid "Rooms"
-msgstr "Salas"
-
-msgid "Directories"
-msgstr "Diretórios"
-
-msgid "Gateways"
-msgstr "Gateways"
-
-msgid "News"
-msgstr "Notícias"
-
-msgid "Hierarchy"
-msgstr "Hierarquia"
-
-msgid "Proxies"
-msgstr "Proxies"
-
-msgid "Publication/Subscription"
-msgstr "Publicação/Subscrição"
-
-msgid "Storage"
-msgstr "Armazenamento"
-
-msgid "Service offline or broken"
-msgstr "Serviço offline ou indisponível"
-
-msgid "Your inbox"
-msgstr "Sua caixa de entrada"
-
-msgid "Available actions"
-msgstr "Ações disponíveis"
-
-msgid "Clean"
-msgstr "Limpar"
-
-msgid "New"
-msgstr "Novo"
-
-msgid "Received"
-msgstr "Recebidos"
-
-msgid "Subject"
-msgstr "Assunto"
-
-msgid "Content"
-msgstr "Conteúdo"
-
-msgid "Send message"
-msgstr "Enviar mensagem"
-
-msgid "Your inbox is empty."
-msgstr "Sua caixa de entrada está vazia."
-
-msgid "MUC administration"
-msgstr "Administração MUC"
-
-msgid "You administrate this room"
-msgstr "Você administra esta sala"
-
-msgid "Enter new subject"
-msgstr "Inserir novo assunto"
-
-msgid "Configuration"
-msgstr "Configuração"
-
-msgid "Authorizations"
-msgstr "Autorizações"
-
-msgid "Member list"
-msgstr "Lista de membros"
-
-msgid "Owner list"
-msgstr "Lista de proprietários"
-
-msgid "Administrator list"
-msgstr "Lista de administradores"
-
-msgid "Outcast list"
-msgstr "Lista de banidos"
-
-msgid "Add an input"
-msgstr "Adicionar uma entrada"
-
-msgid "Destroy this MUC"
-msgstr "Destruir esse MUC"
-
-msgid "Yes, let's do it!"
-msgstr "Sim, vamos lá!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "Seu amigo está prestando atenção na conversa."
-
-msgid "Your friend is writing a message..."
-msgstr "Seu amigo está digitando uma mensagem..."
-
-msgid "Your friend stopped writing a message."
-msgstr "Seu amigo parou de escrever uma mensagem."
-
-msgid "Your friend is doing something else."
-msgstr "Seu amigo está fazendo outra coisa."
-
-msgid "Your friend closed the chat."
-msgstr "Seu amigo fechou o chat."
-
-msgid "Requesting this service..."
-msgstr "Requisitando esse serviço..."
-
-msgid "Loading"
-msgstr "Carregando"
-
-msgid "changed his/her nickname to %s"
-msgstr "Alterado o apelido dele/dela para %s"
-
-msgid "joined the chat room"
-msgstr "entrou na sala de chat"
-
-msgid "left the chat room"
-msgstr "saiu da sala de chat"
-
-msgid "%s left"
-msgstr "%s saiu"
-
-msgid "%s joined"
-msgstr "%s entrou"
-
-msgid "no status"
-msgstr "sem status"
-
-msgid "has been kicked"
-msgstr "foi chutado"
-
-msgid "has been banned"
-msgstr "foi banido"
-
-msgid "no reason"
-msgstr "nenhum motivo"
-
-msgid "Communicate with the entire world!"
-msgstr "Comunique-se com o mundo inteiro!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-"Jappix é uma ótima plataforma social que você pode acessar de onde estiver, "
-"quando quiser e comunicar-se com quem quiser."
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-"Permite que você entre em contato com milhões de usuários que utilizam uma "
-"rede XMPP como você faz com o Jappix. Entre na comunidade e fique livre."
-
-msgid "Hi there!"
-msgstr "Olá!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr "Acesse sua conta XMPP existente ou crie uma nova de graça!"
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-"Acesse com sua conta XMPP. Você também pode usar o %s para acessar um grupo "
-"de chat."
-
-msgid "Previous"
-msgstr "Anterior"
-
-msgid "General"
-msgstr "Geral"
-
-msgid "Advanced"
-msgstr "Avançado"
-
-msgid "Resource"
-msgstr "Recurso"
-
-msgid "Priority"
-msgstr "Prioridade"
-
-msgid "Low"
-msgstr "Baixa"
-
-msgid "Medium"
-msgstr "Média"
-
-msgid "High"
-msgstr "Alta"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-"Insira o grupo de chat desejado e o seu apelido. Você também pode voltar "
-"para o %s."
-
-msgid "login page"
-msgstr "Página de login"
-
-msgid "Share this link with your friends:"
-msgstr "Compartilhe este link com seus amigos:"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-"Registre uma nova conta XMPP para acessar seus amigos em sua própria rede "
-"social. É simples!"
-
-msgid "Required"
-msgstr "Requerido"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "Você foi registrado, aqui está seu endereço XMPP:"
-
-msgid "Manager"
-msgstr "Gerenciador"
-
-msgid "Encrypted"
-msgstr "Encriptado"
-
-msgid "Unencrypted"
-msgstr "Desencriptado"
-
-msgid "Where are you?"
-msgstr "Onde você está?"
-
-msgid "What's up with you?"
-msgstr "O que você está pensando?"
-
-msgid "Type something you want to share with your friends..."
-msgstr "Escreva algo que você queira compartilhar com seus amigos..."
-
-msgid "Fetching the social channel..."
-msgstr "Buscando o canal social..."
-
-msgid "You are synchronized with your network."
-msgstr "Você está sincronizado com sua rede."
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "Não é possível enviar: você só pode receber avisos!"
-
-msgid "Media viewer"
-msgstr "Visualizador de media"
-
-msgid "Browse"
-msgstr "Navegar"
-
-msgid "Command"
-msgstr "Comando"
-
-msgid "Subscribe"
-msgstr "Assinar"
-
-msgid "Join"
-msgstr "Entrar"
-
-msgid "Automatic"
-msgstr "Automático"
-
-msgid "Search"
-msgstr "Procurar"
-
-msgid "No result!"
-msgstr "Nenhum resultado!"
-
-msgid "No notifications."
-msgstr "Nenhuma notificação."
-
-msgid "would like to add you as a friend."
-msgstr "gostaria de te adicionar como amigo."
-
-msgid "would like you to join this chatroom:"
-msgstr "gostaria de entrar nesta sala de chat:"
-
-msgid "Do you accept?"
-msgstr "Você aceita?"
-
-msgid "Yes"
-msgstr "Sim"
-
-msgid "No"
-msgstr "Não"
-
-msgid "would like to get authorization."
-msgstr "gostaria de pegar autorização."
-
-msgid "would like to send you a file: “%s”."
-msgstr "gostaria de te enviar um arquivo: “%s”."
-
-msgid "has received a file exchange request: “%s”."
-msgstr "recebeu uma solicitação de troca de arquivos: “%s”."
-
-msgid "has accepted to receive your file: “%s”."
-msgstr "aceitou receber seu arquivo: “%s”."
-
-msgid "has rejected to receive your file: “%s”."
-msgstr "negou receber seu arquivo: “%s”."
-
-msgid "could not receive your file: “%s”."
-msgstr "não conseguiu receber seu arquivo: “%s”."
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr "Gostaria de ver os amigos %s sugerem você?"
-
-msgid "commented an item you follow: “%s”."
-msgstr "Comentado um ítem que você segue: “%s”."
-
-msgid "liked your post: “%s”."
-msgstr "Gostou do seu post: “%s”."
-
-msgid "quoted you somewhere: “%s”."
-msgstr "Mencionou você em algum lugar: “%s”."
-
-msgid "published on your wall: “%s”."
-msgstr "publicou em seu mural: “%s”."
-
-msgid "tagged you in a photo (%s)."
-msgstr "marcou você numa foto (%s)."
-
-msgid "tagged you in a video (%s)."
-msgstr "marcou você em um vídeo (%s)."
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-
-msgid "Open"
-msgstr ""
-
-msgid "Show"
-msgstr "Mostrar"
-
-msgid "Hide"
-msgstr "Esconder"
-
-msgid "Submit"
-msgstr "Enviar"
-
-msgid "Client"
-msgstr "Cliente"
-
-msgid "System"
-msgstr "Sistema"
-
-msgid "Local time"
-msgstr "Hora local"
-
-msgid "Comments"
-msgstr "Comentários"
-
-msgid "User profile"
-msgstr "Perfil do usuário"
-
-msgid "See his/her position on the globe"
-msgstr "Visualizar a localização dele/dela"
-
-msgid "Confirm"
-msgstr "Confirmar"
-
-msgid "anonymous mode"
-msgstr "Modo anônimo"
-
-msgid "Groups"
-msgstr "Grupos"
-
-msgid "Unclassified"
-msgstr "Não classificado"
-
-msgid "Authorize"
-msgstr "Autorizar"
-
-msgid "Ask for authorization"
-msgstr "Solicitar autorização"
-
-msgid "Unblock"
-msgstr "Desbloquear"
-
-msgid "Prohibit"
-msgstr "Proibir"
-
-msgid "Block"
-msgstr "Bloquear"
-
-msgid "Chat"
-msgstr "Chat"
-
-msgid "Groupchat"
-msgstr "Grupo de chat"
-
-msgid "Jappix Mobile"
-msgstr "Jappix móvel"
-
-msgid "Desktop"
-msgstr "Desktop"
-
-msgid "Mobile"
-msgstr "Mobile"
-
-msgid "Please wait..."
-msgstr "Aguarde..."
-
-msgid "Please enable JavaScript"
-msgstr "Por favor, habilite JavaScript"
-
-msgid "Show comments"
-msgstr "Mostrar comentários"
-
-msgid "Loading comments..."
-msgstr "Carregando comentários..."
-
-msgid "Could not get the comments!"
-msgstr "Não foi possível buscar os comentários!"
-
-msgid "Comments locked!"
-msgstr "Comentários bloqueados!"
-
-msgid "Type your comment here..."
-msgstr "Escreva seu comentário aqui..."
-
-msgid "Your channel"
-msgstr "Seu canal"
-
-msgid "Channel of"
-msgstr "Canal de"
-
-msgid "More notices..."
-msgstr "Mais avisos..."
-
-msgid "Attach a file"
-msgstr "Anexar um arquivo"
-
-msgid "Send"
-msgstr "Enviar"
-
-msgid "Unattach the file"
-msgstr "Desanexar o arquivo"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-"Um erro ocorreu durante o envio do arquivo: talvez seja grande demais (%s "
-"máximo) ou não permitido."
-
-msgid "Authorization failed"
-msgstr "Autorização falhou"
-
-msgid "Registration failed, please choose a different username"
-msgstr "Registro falhou, escolhe um nome de usuário diferente"
-
-msgid "Service unavailable"
-msgstr "Serviço indisponível"
-
-msgid "Internal server error, try later"
-msgstr "Erro interno do servidor, tente mais tarde"
-
-msgid "Your form has been sent."
-msgstr "Seu formulário foi enviado."
-
-msgid "Application"
-msgstr "Aplicação"
-
-msgid "Media integration"
-msgstr "Integração de media"
-
-msgid "Keep local chat archives"
-msgstr ""
-
-msgid "XMPP links"
-msgstr "Links XMPP"
-
-msgid "Open XMPP links with Jappix"
-msgstr "Abrir links XMPP com o Jappix"
-
-msgid "changed the subject to:"
-msgstr "Assunto alterado para:"
-
-msgid "Welcome!"
-msgstr "Bem vindo!"
-
-msgid "Friends"
-msgstr "Amigos"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr ""
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-"Antes de começar a utilizar, você terá que alterar algumas configurações, "
-"procure por amigos e complete seu perfil."
-
-msgid "Enable notification sounds"
-msgstr "Habilitar som de notificação"
-
-msgid "Share your position on the globe"
-msgstr "Compartilhar sua localização"
-
-msgid "Offline friends"
-msgstr "Amigos offline"
-
-msgid "Don't hide offline friends"
-msgstr "Não esconder amigos offline"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-"Use esta ferramenta para encontrar seus amigos no servidor que você está "
-"utilizando, ou adicione-os mais tarde."
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr "Bom trabalho! Agora você pode compartilhar o Jappix com seus amigos!"
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-"Quando você apertar o botão de salvar, o editor de perfil será aberto. Boa "
-"socialização!"
-
-msgid "Share Jappix on %s"
-msgstr "Compartilhe o Jappix em %s:"
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "Usando Jappix, uma plataforma social aberta. Eu sou %s!"
-
-msgid "Unknown name"
-msgstr "Nome desconhecido"
-
-msgid "Unknown country"
-msgstr "País desconhecido"
-
-msgid "Click to enable"
-msgstr "Clique para habilitar"
-
-msgid "Click to disable"
-msgstr "Clique para desabilitar"
-
-msgid "Installation"
-msgstr "Instalação"
-
-msgid "Jappix installation"
-msgstr "Instalação do Jappix"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "Bem vindo à instalação do Jappix!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-"Essa ferramenta ajudará a agilizar a instalação do Jappix. A primeira "
-"plataforma social completa em seu servidor. Você nem precisa conhecimento "
-"técnico."
-
-msgid "Installation Steps:"
-msgstr "Vamos dar uma olhada nos passos de instalação:"
-
-msgid "Welcome"
-msgstr "Bem vindo"
-
-msgid "Storage configuration"
-msgstr "Configuração de armazenamento"
-
-msgid "Administrator account"
-msgstr "Conta de administrador"
-
-msgid "Main configuration"
-msgstr "Configuração principal"
-
-msgid "Hosts configuration"
-msgstr "Configuração de hosts"
-
-msgid "Services installation"
-msgstr "Instalação de serviços"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-"Se o idioma não bate com sua (%1s), você pode fazer o Jappix falar %2s e "
-"ficará salvo."
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"Se você quer alguma ajuda sobre a configuração e instalação do Jappix, você "
-"pode usar toda nossa documentação disponível em:"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr "É hora de criar sua própria rede social: vá para o próximo passo!"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr "Esta pasta possui permissão de escrita, pode continuar!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-"Jappix oferece a você a possibilidade de gerenciar suas configurações, "
-"instalar novos plugins ou procurar por atulizações. Por isso você deve criar "
-"um usuário de administração para acessar o gerenciador."
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-"Quando o Jappix for instalado, clique no link do gerenciador, em sua página "
-"inicial, para acessá-lo."
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr "Oops, você esqueceu algo ou as duas senhas não conferem."
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-"Jappix precisa que você especifique alguns valores para funcionar. Corrija "
-"as seguintes entradas (ou mantenha as configurações padrões, o que é "
-"suficiente para a maioria das pessoas)."
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-"Note que, se você não especificar um valor obrigatório, ele será "
-"automaticamente preenchido com valores padrão."
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-"Precisa de ajuda? É melhor você ler nossa página de documentação sobre como "
-"preencher este formulário!"
-
-msgid "User"
-msgstr "Usuário"
-
-msgid "Service"
-msgstr "Serviço"
-
-msgid "Service name"
-msgstr "Nome do serviço"
-
-msgid "Service description"
-msgstr "Descrição do serviço"
-
-msgid "Owner name"
-msgstr ""
-
-msgid "Owner website"
-msgstr ""
-
-msgid "Connection"
-msgstr "Conexão"
-
-msgid "Lock the host"
-msgstr "Veja o endereço"
-
-msgid "Anonymous mode"
-msgstr "Modo anônimo"
-
-msgid "HTTP authentication"
-msgstr ""
-
-msgid "Registration allowed"
-msgstr "Registro permitido"
-
-msgid "Use the built-in BOSH proxy"
-msgstr ""
-
-msgid "Manager link"
-msgstr "Link do gerenciador"
-
-msgid "Groupchats to join"
-msgstr "Grupos de chat para entrar"
-
-msgid "Suggest groupchats"
-msgstr ""
-
-msgid "Encryption"
-msgstr "Encriptação"
-
-msgid "HTTPS storage"
-msgstr "Armazenamento HTTPS"
-
-msgid "Force HTTPS"
-msgstr "Forçar HTTPS"
-
-msgid "Compression"
-msgstr "Compressão"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"Essa página ajuda você a especificar os endereços no qual o Jappix "
-"conectará. Você pode deixa-los assim e continuar caso queira usar os "
-"endereços dos serviços oficiais."
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"Talvez você não saiba o que é um servidor BOSH! Na verdade é um transmissor, "
-"entre o cliente (Jappix) e um servidor XMPP, necessário devido a limitações "
-"técnicas."
-
-msgid "Main host"
-msgstr "Endereço principal"
-
-msgid "Groupchat host"
-msgstr "Endereço dos grupos de chat"
-
-msgid "Pubsub host"
-msgstr "Endereço Pubsub"
-
-msgid "Anonymous host"
-msgstr "Endereço do modo anônimo"
-
-msgid "Directory host"
-msgstr "Endereço do diretório"
-
-msgid "BOSH host"
-msgstr "Endereço do BOSH"
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-"Você pode instalar programas extras em seu servidor para estender as "
-"funcionalidades do Jappix. Outros podem ser modificados por causa de "
-"restrições de segurança definidas por padrão."
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-"Para executar isso, você precisa ter acesso shell ao servidor e logar como "
-"root. Lembre-se, esta opções é facultativa. Jappix funcionará sem esses "
-"módulos, mas algumas de suas funções ficarão indisponíveis."
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-"Após terminar a instalação, Jappix vai gerar os arquivos de cache. Isso pode "
-"demorar um pouco. Espere até que a aplicação termine."
-
-msgid "Thanks for using Jappix!"
-msgstr "Obrigado por utilizar Jappix!"
-
-msgid "Next"
-msgstr "Próximo"
-
-msgid "Finish"
-msgstr "Terminar"
-
-msgid "Check again"
-msgstr "Checar novamente"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-"A pasta não tem permissão de escrita, aplique as permissões corretas à pasta "
-"%s."
-
-msgid "%s is installed on your system."
-msgstr "%s está instalado no seu sistema."
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s não está instalado em seu sistema, você deve instalar %2s."
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "PHP - maximum_upload_size é suficiente (%s)."
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-"PHP - maximum_upload_size não é suficiente (%1s), você deve alterar para %2s "
-"em %3s."
-
-msgid "Jappix manager"
-msgstr "Gerenciador do Jappix"
-
-msgid "Manager access"
-msgstr "Acesso ao gerenciador"
-
-msgid "Statistics"
-msgstr "Estatísticas"
-
-msgid "Hosts"
-msgstr "Endereços"
-
-msgid "Design"
-msgstr "Design"
-
-msgid "Repeat"
-msgstr "Repetir"
-
-msgid "All"
-msgstr "Todos"
-
-msgid "Horizontal"
-msgstr "Horizontal"
-
-msgid "Vertical"
-msgstr "Vertical"
-
-msgid "Center"
-msgstr "Centralizado"
-
-msgid "Left"
-msgstr "Esquerda"
-
-msgid "Right"
-msgstr "Direita"
-
-msgid "Top"
-msgstr "Topo"
-
-msgid "Bottom"
-msgstr "Fundo"
-
-msgid "Adapt"
-msgstr "Adaptar"
-
-msgid "Color"
-msgstr "Cor"
-
-msgid "Users"
-msgstr "Usuários"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-"Esta é uma área restrita: apenas usuários autorizados podem gerenciar este "
-"Jappix."
-
-msgid "Please use the form below to login to the administration panel."
-msgstr "Utilize o formulário abaixo para acessar o painel de administração."
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-"Para melhorar a segurança, as seções são limitadas em tempo, e, quando seu "
-"navegador for fechado, você será desconectado."
-
-msgid "Credentials"
-msgstr "Credenciais"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "Você foi desconectado. Tchau!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-"Opps, você não foi reconhecido como um administrador válido. Verifique suas "
-"credenciais!"
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-"Estatísticas básicas sobre coisas importantes são processadas pelo Jappix, "
-"você pode encontra-las abaixo."
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr "Altere as configurações do Jappix com esta ferramenta."
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-"Todos os arquivos armazenados por esse Jappix podem ser gerenciados com esta "
-"ferramenta: selecione uma sub-pasta e comece a editar seu conteúdo!"
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr ""
-"Jappix é totalmente customizável: você pode alterar seu design bem aqui."
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr "Esta não é uma imagem válida, use somente PNG, GIF ou JPG!"
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr "Esta não é uma imagem válida, envie somente no formato PNG!"
-
-msgid "The image could not be received, would you mind retry?"
-msgstr "A imagem não pôde ser recebida, se importa de enviar novamente?"
-
-msgid "Your service logo has been successfully changed!"
-msgstr "Sua logo foi alterada com sucesso!"
-
-msgid "Your image was added to the list!"
-msgstr "A sua imagem foi adicionada à lista!"
-
-msgid "Changes saved!"
-msgstr "Alterações salvas!"
-
-msgid "Logo"
-msgstr "Logo"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-"Você pode definir sua própria logo no lugar da padrão. Tome cuidado com o "
-"tamanho e as cores de cada logo!"
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr "Envie cada logo do tamanho de pixels recomendado."
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-"O formato da sua logo deve ser PNG. Deixe o campo em branco que a logo não "
-"será alterada."
-
-msgid "Remove this logo"
-msgstr "Remover essa logo"
-
-msgid "View this logo"
-msgstr "Visualizar essa logo"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-"Você pode definir mais de um administrador para este Jappix. Você também "
-"pode alterar uma senha com essa ferramenta. "
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-"Atualize seu Jappix com essa ferramenta ou cheque se há atualizações. "
-"Informações sobre novas versões serão mostradas (em inglês)."
-
-msgid "Access statistics"
-msgstr "Estatísticas de acesso"
-
-msgid "Share statistics"
-msgstr "Estatísticas de compartilhamento"
-
-msgid "Other statistics"
-msgstr "Outras estatísticas"
-
-msgid "January"
-msgstr "Janeiro"
-
-msgid "February"
-msgstr "Fevereiro"
-
-msgid "March"
-msgstr "Março"
-
-msgid "April"
-msgstr "Abril"
-
-msgid "May"
-msgstr "Maio"
-
-msgid "June"
-msgstr "Junho"
-
-msgid "July"
-msgstr "Julho"
-
-msgid "August"
-msgstr "Agosto"
-
-msgid "September"
-msgstr "Setembro"
-
-msgid "October"
-msgstr "Outubro"
-
-msgid "November"
-msgstr "Novembro"
-
-msgid "December"
-msgstr "Dezembro"
-
-msgid "Monday"
-msgstr "Segunda-feira"
-
-msgid "Tuesday"
-msgstr "Terça-feira"
-
-msgid "Wednesday"
-msgstr "Quarta-feira"
-
-msgid "Thursday"
-msgstr "Quinta-feira"
-
-msgid "Friday"
-msgstr "Sexta-feira"
-
-msgid "Saturday"
-msgstr "Sábado"
-
-msgid "Sunday"
-msgstr "Domingo"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Archives"
-msgstr ""
-
-msgid "Music"
-msgstr "Música"
-
-msgid "Backgrounds"
-msgstr "Papéis de parede"
-
-msgid "Share"
-msgstr "Compartilhar"
-
-msgid "Background"
-msgstr "Papel de parede"
-
-msgid "Notice"
-msgstr "Aviso"
-
-msgid "Your design preferences have been saved!"
-msgstr "Suas preferências de design foram salvas!"
-
-msgid "Please check your inputs: something is missing!"
-msgstr "Cheque suas entradas: alguma coisa está faltando!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-"Altere o papel de parede do seu Jappix. Você também pode inserir uma cor ou "
-"enviar uma imagem. Deixe sua criatividade fluir!"
-
-msgid "Use default background"
-msgstr "Usar papel de parede padrão"
-
-msgid "Use your own image"
-msgstr "Usar sua própria imagem"
-
-msgid "Select a background to use and change the display options."
-msgstr "Selecione um papel de parede e altere as opções de exibição."
-
-msgid "Use your own color"
-msgstr "Usar sua própria cor"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr ""
-"Digite código hexadecimal da cor deseja para usar como papel de parede."
-
-msgid "Manage backgrounds"
-msgstr "Gerenciar papéis de parede"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-"Você pode adicionar um novo papel de parede para a lista com essa "
-"ferramenta. Envie uma imagem válida."
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr "Se você quiser remover alguma imagem, use o navegador abaixo."
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-"Defina um aviso na tela inicial para todos os usuários, como uma mensagem "
-"importante ou uma advertência."
-
-msgid "Simple notice"
-msgstr "Aviso simples"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-"Esse aviso precisa apenas de texto simple para aparecer, nenhum código é "
-"permitido!"
-
-msgid "Advanced notice"
-msgstr "Aviso avançado"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr "Você pode customizar seu aviso com código HTML, CSS e Javascript."
-
-msgid "Available updates"
-msgstr "Atualizações disponíveis."
-
-msgid "What's new?"
-msgstr "O que há de novo?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr ""
-"Suas pastas de armazenamento não estão com permissão de escrita, aplique as "
-"permissões!"
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-"%1s pode estar causando problemas com o proxy, aumente o valor de %2s para "
-"%3s!"
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-"Você está utilizando uma versão de desenvolvimento do Jappix. Atualize-a "
-"através do nosso repositório executando: %s."
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-"Uma nova atualização do Jappix está disponível! Cheque o que há de novo e "
-"execute a atualização!"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr "Sua versão está desatualizada. Atualiza agora para %s clicando aqui!"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"Sua versão parece estar atualizada, mas você pode checar atualizações "
-"manualmente clicando aqui."
-
-msgid "Check for updates"
-msgstr "Checar por atualizações"
-
-msgid "Update in progress"
-msgstr "Atualização em progresso"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr ""
-"Jappix foi atualizado: você agora está rodando a última versão. Aproveite!"
-
-msgid "The update has failed! Please try again later."
-msgstr "A atualização falhou! Tente novamente depois."
-
-msgid "Downloading package..."
-msgstr "Baixando pacote..."
-
-msgid "Removing current Jappix system files..."
-msgstr "Removendo atuais arquivos de sistema do Jappix..."
-
-msgid "Extracting package..."
-msgstr "Extraindo pacote..."
-
-msgid "Regenerating storage folder tree..."
-msgstr "Regerando árvore de pastas de armazenamento..."
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix agora está atualizado!"
-
-msgid "Aborted: socket error!"
-msgstr "Abortado: erro de soquete!"
-
-msgid "Aborted: buffer error!"
-msgstr "Abortado: erro de buffer!"
-
-msgid "Aborted: everything is not writable!"
-msgstr "Abortado: tudo sem permissão de escrita!"
-
-msgid "Aborted: could not extract the package!"
-msgstr "Abortado: não foi possível extrair o pacote!"
-
-msgid "Visits"
-msgstr "Visitas"
-
-msgid "Daily"
-msgstr "Diariamente"
-
-msgid "Weekly"
-msgstr "Semanalmente"
-
-msgid "Monthly"
-msgstr "Mensalmente"
-
-msgid "Yearly"
-msgstr "Anualmente"
-
-msgid "Size"
-msgstr "Tamanho"
-
-msgid "Clean everything"
-msgstr "Apagar tudo"
-
-msgid "Purge cache"
-msgstr "Eliminar cache"
-
-msgid "Purge logs"
-msgstr "Eliminar logs"
-
-msgid "Purge sent files"
-msgstr "Eliminar arquivos enviados"
-
-msgid "Purge updates"
-msgstr "Eliminar atualizações"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "A pasta de armazenamento foi esvaziada!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-"Mantenha seu Jappix limpo e rápido, apague as pastas de armazenamento "
-"regularmente!"
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr "Envie suas músicas (Ogg Vorbis, MP3 ou WAV) para ouvi-las no Jappix!"
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr "O arquivo que você quer enviar deve ser menor do que %s."
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-"Fique sabendo o que os seus usuários armazenam em seu servidor e remova os "
-"conteúdos indesejados."
-
-msgid "Title"
-msgstr "Título"
-
-msgid "Artist"
-msgstr "Artistas"
-
-msgid "Album"
-msgstr "Álbum"
-
-msgid "File"
-msgstr "Arquivo"
-
-msgid "Upload"
-msgstr "Envio"
-
-msgid "The folder is empty."
-msgstr "A pasta está vazia."
-
-msgid "The music could not be received, please retry!"
-msgstr "A música não pôde ser recebida, tente novamente!"
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-"Esse não é um arquivo de música válido, envie apenas Ogg Vorbis, MP3 ou WAV!"
-
-msgid "Your music has been added!"
-msgstr "Sua música foi adicionada!"
-
-msgid "The selected elements have been removed."
-msgstr "Os elementos selecionados foram removidos."
-
-msgid "You must select elements to remove!"
-msgstr "Você precisa selecionar os elementos para remover!"
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-"Adicione um novo usuário ou troque uma senha (digite o nome de um usuário), "
-"com esta ferramenta. Envie uma senha difícil!"
-
-msgid "Manage"
-msgstr "Gerenciar"
-
-msgid "List"
-msgstr "Lista"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-
-msgid "The user has been added!"
-msgstr "O usuário foi adicionado!"
-
-msgid "The chosen users have been removed."
-msgstr "O usuário selecionado foi removido."
-
-msgid "You must select one or more users to be removed!"
-msgstr "Você precisa selecionar um ou mais usuários para remover!"
-
-msgid "Yesterday"
-msgstr "Ontem"
-
-msgid "%s days ago"
-msgstr "%s dias atrás"
-
-msgid "User currently active"
-msgstr "Usuário ativo"
-
-msgid "Last seen: %s"
-msgstr "Visto em: %s"
-
-msgid "Inactive since: %s"
-msgstr "Inativo desde: %s"
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr "Seu amigo parece não ter recebido sua(s) mensagem(ns)!"
-
-msgid "Static content server"
-msgstr "Servidor de conteúdo estático"
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr "Esse é o servidor de conteúdo estático para %1s, “%2s”."
-
-msgid "User uploads server"
-msgstr "Servidor de envio dos usuários"
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr "Esse é o servidor de envio dos usuários para %1s, “%2s”."
-
-msgid "Suggested friends"
-msgstr "Amigos sugeridos"
-
-msgid "Check all"
-msgstr "Marcar todos"
-
-msgid "Uncheck all"
-msgstr "Desmarcar todos"
-
-msgid "Choose"
-msgstr "Escolher"
-
-msgid "List name"
-msgstr "Nome da lista"
-
-msgid "Allow"
-msgstr "Permitir"
-
-msgid "Deny"
-msgstr "Recusar"
-
-msgid "Group"
-msgstr "Grupo"
-
-msgid "Subscription"
-msgstr "Subscrição"
-
-msgid "Both"
-msgstr "Ambos"
-
-msgid "From"
-msgstr "De"
-
-msgid "Everybody"
-msgstr "Todo mundo"
-
-msgid "Send messages"
-msgstr "Enviar mensagens"
-
-msgid "Send queries"
-msgstr "Enviar consultas"
-
-msgid "See my status"
-msgstr "Ver meu status"
-
-msgid "Send his/her status"
-msgstr "Enviar status dele/dela"
-
-msgid "Everything"
-msgstr "Tudo"
-
-msgid "Item"
-msgstr "Item"
-
-msgid "Order"
-msgstr "Ordem"
-
-msgid "Active for this session"
-msgstr "Ativos nessa sessão"
-
-msgid "Always active"
-msgstr "Sempre ativo"
-
-msgid "User directory"
-msgstr "Diretório de usuário"
-
-msgid "Search a friend"
-msgstr "Procurar um amigo"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-"A ferramenta solicitada não está implementada pelo servidor e por isso não "
-"pode ser processada."
-
-msgid "Send him/her a message"
-msgstr "Envie uma mensagem para ele/ela"
-
-msgid "Start a chat with him/her"
-msgstr "Comece um chat com ele/ela"
-
-msgid "Available shortcuts:"
-msgstr "Atalhos disponíveis"
-
-msgid "%s removes the chat logs"
-msgstr "%s remove os logs de chat"
-
-msgid "%s joins a groupchat"
-msgstr "%s entra em um grupo de chat"
-
-msgid "%s closes the chat"
-msgstr "%s fecha o chat"
-
-msgid "%s shows the user profile"
-msgstr "%s mostra o perfil do usuário"
-
-msgid "%s sends a message to the room"
-msgstr "%s envia uma mensagem para a sala"
-
-msgid "%s changes your nickname"
-msgstr "%s altera seu apelido"
-
-msgid "%s sends a message to someone in the room"
-msgstr "%s envia uma mensagem para alguém na sala"
-
-msgid "%s changes the room topic"
-msgstr "%s altera o tópico da sala"
-
-msgid "%s kicks a user of the room"
-msgstr "%s chuta um usuário da sala"
-
-msgid "%s bans a user of the room"
-msgstr "%s expulsa um usuário da sala"
-
-msgid "%s invites someone to join the room"
-msgstr "%s convida alguém para entrar na sala"
-
-msgid "Public profile"
-msgstr "Perfil público"
-
-msgid "Your profile anywhere on the Web."
-msgstr ""
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-
-msgid "Yay, let's create your public profile!"
-msgstr ""
-
-msgid "Enable my public profile"
-msgstr ""
-
-msgid "Jappix for your phone"
-msgstr ""
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr ""
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-
-msgid "You haven't provided any file to download"
-msgstr ""
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr ""
-
-msgid "Woah this file isn't found, please double check"
-msgstr ""
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr ""
-
-msgid "Statistics are currently disabled in the settings."
-msgstr ""
-
-msgid "New event!"
-msgstr "Novo evento!"
-
-msgid "%s is typing..."
-msgstr "%s está digitando..."
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-
-msgid "Username"
-msgstr "Nome de usuário"
-
-msgid "Enter password"
-msgstr "Digite a senha"
-
-msgid "Once again..."
-msgstr "Mais uma vez..."
-
-msgid "Code"
-msgstr "Código"
-
-msgid "Security code"
-msgstr "Código de segurança"
-
-msgid "Advertising space available!"
-msgstr ""
-
-msgid "Advertise here"
-msgstr ""
-
-msgid "Analytics (%s)"
-msgstr ""
-
-msgid "Track visits"
-msgstr ""
-
-msgid "Piwik URL"
-msgstr ""
-
-msgid "Piwik tracking ID"
-msgstr ""
-
-msgid "Advertising (%s)"
-msgstr ""
-
-msgid "Enable ads"
-msgstr ""
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "Content ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "Mute"
-msgstr ""
-
-msgid "Unmute"
-msgstr ""
-
-msgid "Is calling you"
-msgstr ""
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr ""
-
-msgid "Waiting..."
-msgstr ""
-
-msgid "Ringing..."
-msgstr ""
-
-msgid "Declined the call"
-msgstr ""
-
-msgid "Call error"
-msgstr ""
-
-msgid "Ended the call"
-msgstr ""
-
-msgid "Call ended"
-msgstr ""
-
-msgid "Call canceled"
-msgstr ""
-
-msgid "Canceled the call"
-msgstr ""
-
-msgid "Is already in a call"
-msgstr ""
-
-msgid "Ending call..."
-msgstr ""
-
-msgid "Accept"
-msgstr ""
-
-msgid "Decline"
-msgstr ""
-
-msgid "Okay"
-msgstr ""
-
-msgid "Retry"
-msgstr ""
-
-msgid "Audio Call"
-msgstr ""
-
-msgid "Video Call"
-msgstr ""
diff --git a/i18n/pt/LC_MESSAGES/main.mo b/i18n/pt/LC_MESSAGES/main.mo
deleted file mode 100644
index 796f0541..00000000
--- a/i18n/pt/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/pt/LC_MESSAGES/main.po b/i18n/pt/LC_MESSAGES/main.po
deleted file mode 100644
index d8c93eab..00000000
--- a/i18n/pt/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2396 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:21+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Portuguese (http://www.transifex.com/projects/p/jappix/"
-"language/pt/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: pt\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "default:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"O seu browser não tem o JavaScript ativo, deste modo não será possível "
-"lançar o Jappix! Por favor corrigir isso."
-
-msgid "Social channel, chat and more."
-msgstr "Canais sociais, conversas e mais."
-
-msgid "Create your public profile."
-msgstr "Criar um perfil público."
-
-msgid "A mini-chat for your website."
-msgstr "Um mini-chat para o seu site."
-
-msgid "Get Jappix, get support."
-msgstr "Obter Jappix, obter apoio."
-
-msgid "Statistics around Jappix."
-msgstr "Estatísticas cerca Jappix."
-
-msgid "Legal disclaimer for Jappix."
-msgstr "Desresponsabilização legal para Jappix."
-
-msgid "Download Jappix for free."
-msgstr "Baixe o Jappix gratuitamente."
-
-msgid "Contribute to the Jappix code."
-msgstr "Contribuir para o código Jappix."
-
-msgid "Jappix for your company."
-msgstr "Jappix para sua empresa."
-
-msgid "Find a public Jappix node."
-msgstr "Encontre um nó público do Jappix."
-
-msgid "Credits"
-msgstr "Créditos"
-
-msgid "Association"
-msgstr "Associação"
-
-msgid "Web agency"
-msgstr "Agência web"
-
-msgid "Legal"
-msgstr "Legal"
-
-msgid "Legal disclaimer"
-msgstr "Aviso Legal"
-
-msgid "Terms of use and legal"
-msgstr "Termos de uso e legais"
-
-msgid "Owner"
-msgstr "Proprietário"
-
-msgid "Node owner"
-msgstr "Proprietário do nó"
-
-msgid "By using our service, you accept %s."
-msgstr "Ao utilizar os nossos serviços, você aceita %s."
-
-msgid "our terms of use"
-msgstr "os nossos termos de uso"
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Jappix foi interrompido por um problema de rede, um bug ou um problema de "
-"login (verifique se digitou as credenciais certas), pedirmos desculpa pelo "
-"incomodo."
-
-msgid "The element list on this server could not be obtained!"
-msgstr "Não foi possível obter a lista de elementos neste servidor!"
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"A sua senha foi alterada, agora pode ligar-se à sua conta com os seus novos "
-"dados de login."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "A sua conta XMPP foi removido, tchau!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "Você foi desconectado de sua conta XMPP, tenha um bom dia!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr "A sala em que tentou entrar parece não existir."
-
-msgid "The groupchat has been removed."
-msgstr "O chat de grupo foi removido."
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "O utilizador que procura não está presente na sala."
-
-msgid "Please enter the group chat address to join."
-msgstr "Por favor insira o endereço de chat de grupo para participar."
-
-msgid "Please enter your nickname to join %s."
-msgstr "Digite o seu apelido para se juntar %."
-
-msgid "This room (%s) is protected with a password."
-msgstr "Esta sala (%s) é protegido com uma senha."
-
-msgid "Your browser is out of date!"
-msgstr "Seu navegador está desatualizado!"
-
-msgid "Last %s version is better!"
-msgstr "A última versão %s é melhor!"
-
-msgid "Login"
-msgstr "Login"
-
-msgid "Register"
-msgstr "Registar"
-
-msgid "Here we go!"
-msgstr "Aqui vamos nós!"
-
-msgid "Server"
-msgstr "Servidor"
-
-msgid "Password"
-msgstr "Senha"
-
-msgid "Remember me"
-msgstr "Lembre-se de mim"
-
-msgid "This tool has been disabled!"
-msgstr "Esta ferramenta foi desabilitada!"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr ""
-"Devido a um problema de rede, você foi desligado. O que pretende fazer agora?"
-
-msgid "Reconnect"
-msgstr "Voltar a ligar"
-
-msgid "Messages"
-msgstr "Mensagens"
-
-msgid "Profile"
-msgstr "Perfil"
-
-msgid "Options"
-msgstr "Opções"
-
-msgid "Disconnect"
-msgstr "Desligar"
-
-msgid "Filter"
-msgstr "Filtrar"
-
-msgid "Add a friend"
-msgstr "Adicionar um amigo"
-
-msgid "Your groupchats"
-msgstr "Seus chats de grupo"
-
-msgid "Manage your favorite groupchats"
-msgstr "Gerir os seus chats de grupo favoritos"
-
-msgid "More stuff"
-msgstr "Mais coisas"
-
-msgid "Show all friends"
-msgstr "Ver todos os amigos"
-
-msgid "Only show connected friends"
-msgstr "Apenas mostrar aos amigos ligados"
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "Mensagem arquivos"
-
-msgid "Date"
-msgstr "Data"
-
-msgid "A short message?"
-msgstr "Uma mensagem curta?"
-
-msgid "How are you?"
-msgstr "Como está?"
-
-msgid "What are you doing?"
-msgstr "O que está a fazer?"
-
-msgid "Join a chat"
-msgstr "Junte-se a um chat"
-
-msgid "Status"
-msgstr "Estado"
-
-msgid "Available"
-msgstr "Disponível"
-
-msgid "Talkative"
-msgstr "Falador"
-
-msgid "Away"
-msgstr "Longe"
-
-msgid "Not available"
-msgstr "Indisponível"
-
-msgid "Busy"
-msgstr "Ocupado"
-
-msgid "Offline"
-msgstr "Desligado"
-
-msgid "Mood"
-msgstr "Humor"
-
-msgid "None"
-msgstr "Nenhum"
-
-msgid "Crazy"
-msgstr "Louco"
-
-msgid "Excited"
-msgstr "Animado"
-
-msgid "Playful"
-msgstr "Brincalhão"
-
-msgid "Happy"
-msgstr "Feliz"
-
-msgid "Shocked"
-msgstr "Chocado"
-
-msgid "Hot"
-msgstr "Quente"
-
-msgid "Sad"
-msgstr "Triste"
-
-msgid "Amorous"
-msgstr "Amoroso"
-
-msgid "Confident"
-msgstr "Confiante"
-
-msgid "Activity"
-msgstr "Atividade"
-
-msgid "Chores"
-msgstr "Atarefado"
-
-msgid "Drinking"
-msgstr "Bebendo"
-
-msgid "Eating"
-msgstr "Alimentando-se"
-
-msgid "Exercising"
-msgstr "Exercitando-se"
-
-msgid "Grooming"
-msgstr "Noivado"
-
-msgid "Appointment"
-msgstr "Nomeação"
-
-msgid "Inactive"
-msgstr "Inativo"
-
-msgid "Relaxing"
-msgstr "Relaxando"
-
-msgid "Talking"
-msgstr "Falando"
-
-msgid "Traveling"
-msgstr "Viajando"
-
-msgid "Working"
-msgstr "Trabalhando"
-
-msgid "View profile"
-msgstr "Ver o perfil"
-
-msgid "This is a repeat from %s"
-msgstr "Esta é uma repetição de %s"
-
-msgid "Repeat this notice"
-msgstr "Repetir este aviso"
-
-msgid "Remove this notice"
-msgstr "Remover este aviso"
-
-msgid "Your profile"
-msgstr "O seu perfil"
-
-msgid "Identity"
-msgstr "Identidade"
-
-msgid "Profile image"
-msgstr "Imagem de perfil"
-
-msgid "Others"
-msgstr "Outros"
-
-msgid "Other"
-msgstr "Outro"
-
-msgid "Personal"
-msgstr "Pessoal"
-
-msgid "Complete name"
-msgstr "Nome completo"
-
-msgid "Nickname"
-msgstr "Apelido"
-
-msgid "First name"
-msgstr "Nome"
-
-msgid "Last name"
-msgstr "Sobrenome"
-
-msgid "Date of birth"
-msgstr "Data de nascimento"
-
-msgid "Contact"
-msgstr "Contato"
-
-msgid "E-mail"
-msgstr "E-mail"
-
-msgid "Phone"
-msgstr "Telefone"
-
-msgid "Website"
-msgstr "Site"
-
-msgid "Current"
-msgstr "Atual"
-
-msgid "Delete"
-msgstr "Excluir"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr ""
-"Que pena! Você não tem nenhuma imagem de perfil definida no seu cartão de "
-"identidade!"
-
-msgid "Address"
-msgstr "Endereço"
-
-msgid "Street"
-msgstr "Rua"
-
-msgid "City"
-msgstr "Cidade"
-
-msgid "Postal code"
-msgstr "Código postal"
-
-msgid "Country"
-msgstr "País"
-
-msgid "Biography"
-msgstr "Biografia"
-
-msgid "Important notice"
-msgstr "Aviso importante"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr ""
-"Nem tudo é privado sobre XMPP, esta é uma daquelas coisas, o seu perfil "
-"público (vCard)."
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"É altamente recomendável fazer upload de uma imagem de perfil (máximo %s), "
-"como uma foto de si, porque isso faz com que seja facilmente reconhecido "
-"pelos seus amigos."
-
-msgid "Save"
-msgstr "Guardar"
-
-msgid "Cancel"
-msgstr "Cancelar"
-
-msgid "Edit options"
-msgstr "Editar opções"
-
-msgid "Channel"
-msgstr "Canal"
-
-msgid "Commands"
-msgstr "Comandos"
-
-msgid "Sounds"
-msgstr "Sons"
-
-msgid "Privacy"
-msgstr "Privacidade"
-
-msgid "Message archiving"
-msgstr "Arquivamento de mensagens"
-
-msgid "Store an history of your chats"
-msgstr ""
-
-msgid "Geolocation"
-msgstr "Geolocalização"
-
-msgid "Disabled"
-msgstr ""
-
-msgid "Store all chats"
-msgstr ""
-
-msgid "Store friend chats"
-msgstr ""
-
-msgid "Remove all archives"
-msgstr ""
-
-msgid "Empty"
-msgstr "Vazio"
-
-msgid "Empty channel"
-msgstr "Canal vazio"
-
-msgid "Persistent"
-msgstr "Persistente"
-
-msgid "Maximum notices"
-msgstr "Avisos máximo"
-
-msgid "Account"
-msgstr "Conta"
-
-msgid "Change password"
-msgstr "Alterar senha"
-
-msgid "Delete account"
-msgstr "Excluir conta"
-
-msgid "Old"
-msgstr "Velho"
-
-msgid "New (2 times)"
-msgstr "Novo (2 vezes)"
-
-msgid "Suggested chatrooms"
-msgstr "Chatrooms sugeridas"
-
-msgid "Skip"
-msgstr ""
-
-msgid "Continue"
-msgstr "Continuar"
-
-msgid "To"
-msgstr "Para"
-
-msgid "Close"
-msgstr "Fechar"
-
-msgid "unknown"
-msgstr "desconhecido"
-
-msgid "Unavailable"
-msgstr "Indisponível"
-
-msgid "is now"
-msgstr "é agora"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Por favor, aguarde enquanto o seu avatar é carregado..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "Aqui está! Uma nova e bonita imagem de perfil!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "O ficheiro de imagem não é suportado ou tem um tamanho errado."
-
-msgid "Reply"
-msgstr "Responder"
-
-msgid "Error"
-msgstr "Erro"
-
-msgid "Click here to solve the error"
-msgstr "Clique aqui para resolver o erro"
-
-msgid "You"
-msgstr "Você"
-
-msgid "Remove"
-msgstr "Remover"
-
-msgid "Rename"
-msgstr "Alterar o nome"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Olá, eu sou %s e gostaria de adicioná-lo como meu amigo."
-
-msgid "Smiley insertion"
-msgstr "Inserção de smiley"
-
-msgid "Change style"
-msgstr "Mudar o estilo"
-
-msgid "Text in bold"
-msgstr "Texto em negrito"
-
-msgid "Text in italic"
-msgstr "Texto em itálico"
-
-msgid "Underlined text"
-msgstr "Texto sublinhado"
-
-msgid "Send a file"
-msgstr "Enviar um arquivo"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr ""
-"Após o upload, o seu amigo será alertado para fazer o download da imagem que "
-"lhe enviou."
-
-msgid "Save chat"
-msgstr "Guardar chat"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"Clique no link abaixo para obter o registo da conversa e aguarde. De "
-"seguida, clique novamente para obter o arquivo."
-
-msgid "This chat is empty!"
-msgstr "Este chat está vazio!"
-
-msgid "Generate file!"
-msgstr "Gerar arquivo!"
-
-msgid "Download file!"
-msgstr "Fazer download do arquivo!"
-
-msgid "Clean current chat"
-msgstr "Limpar conversas atuais"
-
-msgid "Show user profile"
-msgstr "Ver perfil do utilizador"
-
-msgid "Add this contact to your friends"
-msgstr "Adicionar este contato para seus amigos"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Adicione esta groupchat a seus favoritos"
-
-msgid "All tabs"
-msgstr "Todos os guias"
-
-msgid "Join groupchat"
-msgstr ""
-
-msgid "Close this tab"
-msgstr "Fechar esta guia"
-
-msgid "no subject defined for this room."
-msgstr "sem assunto definido para esta sala."
-
-msgid "Administration panel for this room"
-msgstr "Painel de administração para esta sala"
-
-msgid "Moderators"
-msgstr "Moderadores"
-
-msgid "Participants"
-msgstr "Participantes"
-
-msgid "Visitors"
-msgstr "Visitantes"
-
-msgid "Manage favorite rooms"
-msgstr "Gerir salas favoritas"
-
-msgid "Change favorites"
-msgstr "Alterar favoritos"
-
-msgid "Search a room"
-msgstr "Procure uma sala"
-
-msgid "Select a favorite"
-msgstr "Selecione uma favoritoa"
-
-msgid "Getting the name..."
-msgstr "Obtendo o nome ..."
-
-msgid "Gateway"
-msgstr "Porta de entrada"
-
-msgid "Name"
-msgstr "Nome"
-
-msgid "Room"
-msgstr "Sala"
-
-msgid "Add"
-msgstr "Adicionar"
-
-msgid "Edit"
-msgstr "Editar"
-
-msgid "Search a room on"
-msgstr "Procurar uma sala em"
-
-msgid "No room found on this server."
-msgstr "Nenhuma sala encontrada neste servidor."
-
-msgid "Service discovery"
-msgstr "Serviço de descoberta"
-
-msgid "Server to query"
-msgstr "Servidor para consultar"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "Desculpe, mas a entidade não devolveu nenhum resultado!"
-
-msgid "Accounts"
-msgstr "Contas"
-
-msgid "Authentications"
-msgstr "Autenticações"
-
-msgid "Automation"
-msgstr "Automação"
-
-msgid "Clients"
-msgstr "Clientes"
-
-msgid "Collaboration"
-msgstr "Colaboração"
-
-msgid "Components"
-msgstr "Componentes"
-
-msgid "Rooms"
-msgstr "Salas"
-
-msgid "Directories"
-msgstr "Diretórios"
-
-msgid "Gateways"
-msgstr "Gateways"
-
-msgid "News"
-msgstr "Notícia"
-
-msgid "Hierarchy"
-msgstr "Hierarquia"
-
-msgid "Proxies"
-msgstr "Proxies"
-
-msgid "Publication/Subscription"
-msgstr "Publicação/Assinatura"
-
-msgid "Storage"
-msgstr "Armazenamento"
-
-msgid "Service offline or broken"
-msgstr "Serviço offline ou com problemas"
-
-msgid "Your inbox"
-msgstr "A sua caixa de entrada"
-
-msgid "Available actions"
-msgstr "Ações disponíveis"
-
-msgid "Clean"
-msgstr "Limpar"
-
-msgid "New"
-msgstr "Novo"
-
-msgid "Received"
-msgstr "Recebido"
-
-msgid "Subject"
-msgstr "Assunto"
-
-msgid "Content"
-msgstr "Conteúdo"
-
-msgid "Send message"
-msgstr "Enviar mensagem"
-
-msgid "Your inbox is empty."
-msgstr "A sua caixa de entrada está vazia."
-
-msgid "MUC administration"
-msgstr "Administração de MUC"
-
-msgid "You administrate this room"
-msgstr "Você administra nesta sala"
-
-msgid "Enter new subject"
-msgstr "Indique o novo assunto"
-
-msgid "Configuration"
-msgstr "Configuração"
-
-msgid "Authorizations"
-msgstr "Autorizações"
-
-msgid "Member list"
-msgstr "Lista de membros"
-
-msgid "Owner list"
-msgstr "Lista de proprietários"
-
-msgid "Administrator list"
-msgstr "Lista de administrador"
-
-msgid "Outcast list"
-msgstr "Lista Outcast"
-
-msgid "Add an input"
-msgstr "Adicionar uma entrada"
-
-msgid "Destroy this MUC"
-msgstr "Destruí este MUC"
-
-msgid "Yes, let's do it!"
-msgstr "Sim, vamos fazê-lo!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "O seu amigo está a prestar atenção à conversa."
-
-msgid "Your friend is writing a message..."
-msgstr "O seu amigo está escrevendo uma mensagem ..."
-
-msgid "Your friend stopped writing a message."
-msgstr "O seu amigo parou de escrever uma mensagem."
-
-msgid "Your friend is doing something else."
-msgstr "O seu amigo está a fazer outra coisa."
-
-msgid "Your friend closed the chat."
-msgstr "O seu amigo fechou o chat."
-
-msgid "Requesting this service..."
-msgstr "A solicitar este serviço ..."
-
-msgid "Loading"
-msgstr "A carregar"
-
-msgid "changed his/her nickname to %s"
-msgstr "mudou o seu apelido para %s"
-
-msgid "joined the chat room"
-msgstr "entrou na sala"
-
-msgid "left the chat room"
-msgstr "saiu da sala"
-
-msgid "%s left"
-msgstr ""
-
-msgid "%s joined"
-msgstr ""
-
-msgid "no status"
-msgstr "nenhum estado"
-
-msgid "has been kicked"
-msgstr "foi expulso"
-
-msgid "has been banned"
-msgstr "foi proibido"
-
-msgid "no reason"
-msgstr "nenhuma razão"
-
-msgid "Communicate with the entire world!"
-msgstr "Comunique com o mundo inteiro!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-"Jappix é uma plataforma social aberta, que lhe permite fácilmente obter ou "
-"manter contato com todos."
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-"Junte-se aos milhões de utilizadores que estão a usar a rede XMPP (Google "
-"Talk, etc), não fique de fora!"
-
-msgid "Hi there!"
-msgstr "Olá!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr "Faça login na sua conta XMPP existente ou crie uma nova grátis!"
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-"Para a segurança da sua conta, quando faz login ou efetua o registo, "
-"certifique-se de que a password permanece secreta."
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-"Faça login com a sua conta XMPP existente. Também pode usar o %s para "
-"participar num chat de grupo."
-
-msgid "Previous"
-msgstr "Anterior"
-
-msgid "General"
-msgstr "Geral"
-
-msgid "Advanced"
-msgstr "Avançado"
-
-msgid "Resource"
-msgstr "Recurso"
-
-msgid "Priority"
-msgstr "Prioridade"
-
-msgid "Low"
-msgstr "Baixo"
-
-msgid "Medium"
-msgstr "Médio"
-
-msgid "High"
-msgstr "Alto"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-"Indique o grupo de chat em que pretende participar e o nick que pretende "
-"utilizar. Também pode voltar para o %s."
-
-msgid "login page"
-msgstr "página de login"
-
-msgid "Share this link with your friends:"
-msgstr "Partilhar este link com os seus amigos:"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-"Registe uma nova conta XMPP para se juntar aos seus amigos na sua própria "
-"nuvem social. Isto é simples!"
-
-msgid "Required"
-msgstr "Necessário"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "Registo efetuado, este é o seu endereço XMPP:"
-
-msgid "Manager"
-msgstr "Gestor"
-
-msgid "Encrypted"
-msgstr "Codificado"
-
-msgid "Unencrypted"
-msgstr "Descodificado"
-
-msgid "Where are you?"
-msgstr "Onde está?"
-
-msgid "What's up with you?"
-msgstr "O que se passa consigo?"
-
-msgid "Type something you want to share with your friends..."
-msgstr "Escreva algo que deseja partilhar com os seus amigos ..."
-
-msgid "Fetching the social channel..."
-msgstr "Obtendo o canal social ..."
-
-msgid "You are synchronized with your network."
-msgstr "Você está sincronizado com a sua rede."
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "Não pode enviar nada: só pode receber avisos!"
-
-msgid "Media viewer"
-msgstr "Media Viewer"
-
-msgid "Browse"
-msgstr "Procurar"
-
-msgid "Command"
-msgstr "Comando"
-
-msgid "Subscribe"
-msgstr "Subscrever"
-
-msgid "Join"
-msgstr "Juntar"
-
-msgid "Automatic"
-msgstr "Automático"
-
-msgid "Search"
-msgstr "Pesquisar"
-
-msgid "No result!"
-msgstr "Nenhum resultado!"
-
-msgid "No notifications."
-msgstr "Sem notificações."
-
-msgid "would like to add you as a friend."
-msgstr "gostaria de adicioná-lo como amigo."
-
-msgid "would like you to join this chatroom:"
-msgstr "gostaria que se juntasse a esta sala de chat:"
-
-msgid "Do you accept?"
-msgstr "Você aceita?"
-
-msgid "Yes"
-msgstr "Sim"
-
-msgid "No"
-msgstr "Não"
-
-msgid "would like to get authorization."
-msgstr "gostaria de obter autorização."
-
-msgid "would like to send you a file: “%s”."
-msgstr "gostaria de enviar-lhe um arquivo: \"%s\"."
-
-msgid "has received a file exchange request: “%s”."
-msgstr "recebeu um pedido de troca de arquivo: \"%s\"."
-
-msgid "has accepted to receive your file: “%s”."
-msgstr "aceitou receber o arquivo: \"%s\"."
-
-msgid "has rejected to receive your file: “%s”."
-msgstr "rejeitou a receber o seu arquivo: \"%s\"."
-
-msgid "could not receive your file: “%s”."
-msgstr "não pode receber o seu arquivo: \"%s\"."
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr "Pretende ver os amigos que %s lhe sugere?"
-
-msgid "commented an item you follow: “%s”."
-msgstr "comentou um item que segue: \"%s\"."
-
-msgid "liked your post: “%s”."
-msgstr "gostou do seu post: \"%s\"."
-
-msgid "quoted you somewhere: “%s”."
-msgstr "citou-o em algum local: \"%s\"."
-
-msgid "published on your wall: “%s”."
-msgstr "publicado na sua parede: \"%s\"."
-
-msgid "tagged you in a photo (%s)."
-msgstr "marcou-o numa foto (%s)."
-
-msgid "tagged you in a video (%s)."
-msgstr "marcou-o num vídeo (%s)."
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-
-msgid "Open"
-msgstr ""
-
-msgid "Show"
-msgstr "Mostrar"
-
-msgid "Hide"
-msgstr "Esconder"
-
-msgid "Submit"
-msgstr "Submeter"
-
-msgid "Client"
-msgstr "Cliente"
-
-msgid "System"
-msgstr "Sistema"
-
-msgid "Local time"
-msgstr "Hora local"
-
-msgid "Comments"
-msgstr "Comentários"
-
-msgid "User profile"
-msgstr "Perfil do utilizador"
-
-msgid "See his/her position on the globe"
-msgstr "Veja a sua posição no globo"
-
-msgid "Confirm"
-msgstr "Confirmar"
-
-msgid "anonymous mode"
-msgstr "modo anónimo"
-
-msgid "Groups"
-msgstr "Grupos"
-
-msgid "Unclassified"
-msgstr "Não classificado"
-
-msgid "Authorize"
-msgstr "Autorizar"
-
-msgid "Ask for authorization"
-msgstr "Pedir autorização"
-
-msgid "Unblock"
-msgstr "Desobstruir"
-
-msgid "Prohibit"
-msgstr "Proibir"
-
-msgid "Block"
-msgstr "Bloquear"
-
-msgid "Chat"
-msgstr "Conversar"
-
-msgid "Groupchat"
-msgstr "Chat de Grupo"
-
-msgid "Jappix Mobile"
-msgstr "Jappix móvel"
-
-msgid "Desktop"
-msgstr "Área de trabalho"
-
-msgid "Mobile"
-msgstr "Móvel"
-
-msgid "Please wait..."
-msgstr "Por favor, aguarde..."
-
-msgid "Please enable JavaScript"
-msgstr "Por favor habilite o JavaScript"
-
-msgid "Show comments"
-msgstr "Mostrar comentários"
-
-msgid "Loading comments..."
-msgstr "A carregar os comentários..."
-
-msgid "Could not get the comments!"
-msgstr "Não foi possível obter os comentários!"
-
-msgid "Comments locked!"
-msgstr "Comentários bloqueados!"
-
-msgid "Type your comment here..."
-msgstr "Escreva seu comentário aqui..."
-
-msgid "Your channel"
-msgstr "O seu canal"
-
-msgid "Channel of"
-msgstr "Canal de"
-
-msgid "More notices..."
-msgstr "Mais avisos..."
-
-msgid "Attach a file"
-msgstr "Anexar um arquivo"
-
-msgid "Send"
-msgstr "Enviar"
-
-msgid "Unattach the file"
-msgstr "Retirar o arquivo"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-"Ocorreu um erro ao carregar o arquivo: talvez seja muito grande (máximo %s) "
-"ou proibido!"
-
-msgid "Authorization failed"
-msgstr "Falha na autorização"
-
-msgid "Registration failed, please choose a different username"
-msgstr "Registo falhou, por favor, escolha um nome deutilizador diferente"
-
-msgid "Service unavailable"
-msgstr "Serviço indisponível"
-
-msgid "Internal server error, try later"
-msgstr "Erro interno do servidor, tente mais tarde"
-
-msgid "Your form has been sent."
-msgstr "O seu formulário foi enviado."
-
-msgid "Application"
-msgstr "Aplicação"
-
-msgid "Media integration"
-msgstr "Integração de mídia"
-
-msgid "Keep local chat archives"
-msgstr ""
-
-msgid "XMPP links"
-msgstr "Ligações XMPP"
-
-msgid "Open XMPP links with Jappix"
-msgstr "Abrir links XMPP com Jappix"
-
-msgid "changed the subject to:"
-msgstr "mudou o assunto para:"
-
-msgid "Welcome!"
-msgstr "Bem-vindo!"
-
-msgid "Friends"
-msgstr "Amigos"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr ""
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-"Antes de começar a usá-lo, terá que alterar algumas configurações, procurar "
-"amigos e completar o seu perfil."
-
-msgid "Enable notification sounds"
-msgstr "Ativar sons de notificação"
-
-msgid "Share your position on the globe"
-msgstr "Partilhe a sua posição no globo"
-
-msgid "Offline friends"
-msgstr "Amigos offline"
-
-msgid "Don't hide offline friends"
-msgstr "Não ocultar amigos offline"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-"Utilize esta ferramenta para encontrar os seus amigos no servidor que está a "
-"utilizar neste momento ou adicione-os mais tarde."
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr "Bom trabalho! Agora pode partilhar o Jappix com os seus amigos!"
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-"Quando pressionar o botão de gravação, o editor de perfis será aberta. Feliz "
-"socialização!"
-
-msgid "Share Jappix on %s"
-msgstr "Partilhe o Jappix em %s"
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "A utilizar o Jappix, uma plataforma social aberta. Sou %s!"
-
-msgid "Unknown name"
-msgstr "Nome desconhecido"
-
-msgid "Unknown country"
-msgstr "País desconhecido"
-
-msgid "Click to enable"
-msgstr "Clique para ativar"
-
-msgid "Click to disable"
-msgstr "Clique para desativar"
-
-msgid "Installation"
-msgstr "Instalação"
-
-msgid "Jappix installation"
-msgstr "Instalação Jappix"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "Bem-vindo à instalação Jappix!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-"Esta ferramenta irá ajudá-lo a instalar o Jappix, o primeira plataforma "
-"social XMPP, no seu servidor com facilidade."
-
-msgid "Installation Steps:"
-msgstr "Passos de instalação:"
-
-msgid "Welcome"
-msgstr "Bem-vindo"
-
-msgid "Storage configuration"
-msgstr "Configuração de armazenamento"
-
-msgid "Administrator account"
-msgstr "Conta de administrador"
-
-msgid "Main configuration"
-msgstr "Configuração principal"
-
-msgid "Hosts configuration"
-msgstr "Configuração de anfitriões"
-
-msgid "Services installation"
-msgstr "Serviços de instalação"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-"Se a linguagem atual não corresponde com a sua (%1s), pode fazer Jappix "
-"falar %2s será guardada."
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"Se quiser obter alguma ajuda sobre a instalação e configuração do Jappix, "
-"pode utilizar a nossa documentação, disponível em:"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-"É hora de construir a sua própria nuvem social: basta ir para a próxima "
-"etapa!"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr "A pasta é gravável, pode continuar!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-"O Jappix oferece-lhe a possibilidade de gerir a sua configuração, instalar "
-"novos plugins ou obter atualizações. É por isso que deve criar uma conta de "
-"administrador para aceder ao gestor."
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-"Quando o Jappix for instalado, basta clicar no link de gestão na página "
-"inicial."
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr "Opss, você perdeu alguma coisa ou as duas senhas não coincidem!"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-"O Jappix precisa que especifique alguns valores para trabalhar. Por favor, "
-"corrija os seguintes dados (ou mantenha os valores padrão, que são "
-"suficientes para a maioria das pessoas)."
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-"Note que, se não especificar um valor que é obrigatório, ele será "
-"automaticamente preenchido com o padrão."
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-"Precisa de ajuda? É melhor ler a nossa página de documentação sobre como "
-"preencher este formulário!"
-
-msgid "User"
-msgstr "Utilizador"
-
-msgid "Service"
-msgstr "Serviço"
-
-msgid "Service name"
-msgstr "Nome do serviço"
-
-msgid "Service description"
-msgstr "Descrição do serviço"
-
-msgid "Owner name"
-msgstr "Nome do proprietário"
-
-msgid "Owner website"
-msgstr "Proprietário do Site"
-
-msgid "Connection"
-msgstr "Ligação"
-
-msgid "Lock the host"
-msgstr "Bloquear o host"
-
-msgid "Anonymous mode"
-msgstr "Modo anónimo"
-
-msgid "HTTP authentication"
-msgstr "Autenticação HTTP"
-
-msgid "Registration allowed"
-msgstr "Registo permitido"
-
-msgid "Use the built-in BOSH proxy"
-msgstr "Utilize o o proxy BOSH embutido"
-
-msgid "Manager link"
-msgstr "Link do Gestor"
-
-msgid "Groupchats to join"
-msgstr "Chat de grupos para participar"
-
-msgid "Suggest groupchats"
-msgstr "Sugerir chats de grupo"
-
-msgid "Encryption"
-msgstr "Encriptado"
-
-msgid "HTTPS storage"
-msgstr "Armazenamento HTTPS"
-
-msgid "Force HTTPS"
-msgstr "Forçar HTTPS"
-
-msgid "Compression"
-msgstr "Compressão"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"Esta página ajuda-o a especificar os hosts padrão a que Jappix se vai ligar. "
-"Pode deixá-lo como está e continuar se quiser utilizar os hosts de serviços "
-"oficiais."
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"Talvez não saiba o que é um servidor BOSH? Na verdade, esta é uma ligação "
-"entre um cliente e um servidor Jappix XMPP, que é necessária devido a "
-"limitações técnicas."
-
-msgid "Main host"
-msgstr "Host principal"
-
-msgid "Groupchat host"
-msgstr "Host de chat de grupo"
-
-msgid "Pubsub host"
-msgstr "Host pubsub"
-
-msgid "Anonymous host"
-msgstr "Host anónimo"
-
-msgid "Directory host"
-msgstr "Host do diretório"
-
-msgid "BOSH host"
-msgstr "Host BOSH"
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-"Pode instalar software extra no seu servidor, para estender as "
-"funcionalidades do Jappix. Alguns podem ser modificados por restrições de "
-"segurança que são definidas por defeito."
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-"Para realizar isso, deve ser capaz de aceder ao shell de seu servidor e "
-"estar ligado como root. Lembre-se esta é facultativa, Jappix vai funcionar "
-"sem esses módulos, mas alguns de seus recursos estarão indisponíveis."
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-"Depois de terminar a instalação, o Jappix irá gerar os arquivos de cache. "
-"Pode ser lento, é só esperar até que o aplicativo seja exibido e não "
-"pressionar nenhum botão."
-
-msgid "Thanks for using Jappix!"
-msgstr "Obrigado por usar o Jappix!"
-
-msgid "Next"
-msgstr "Próximo"
-
-msgid "Finish"
-msgstr "Terminar"
-
-msgid "Check again"
-msgstr "Verifique novamente"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-"A pasta não é gravável, defina as permissões corretas para o diretório %s."
-
-msgid "%s is installed on your system."
-msgstr "%s está instalado no seu sistema."
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s não está instalado no seu sistema, deve instalar %2s."
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "O tamanho máximo de upload no PHP é suficiente (%s)."
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-"O tamanho máximo de upload no PHP não é suficiente (%1s), deve altera para "
-"%2s em %3s."
-
-msgid "Jappix manager"
-msgstr "Gestor do Jappix"
-
-msgid "Manager access"
-msgstr "Acesso ao gestor"
-
-msgid "Statistics"
-msgstr "Estatística"
-
-msgid "Hosts"
-msgstr "Hosts"
-
-msgid "Design"
-msgstr "Projeto"
-
-msgid "Repeat"
-msgstr "Repetir"
-
-msgid "All"
-msgstr "Todos"
-
-msgid "Horizontal"
-msgstr "Horizontal"
-
-msgid "Vertical"
-msgstr "Vertical"
-
-msgid "Center"
-msgstr "Centro"
-
-msgid "Left"
-msgstr "Esquerda"
-
-msgid "Right"
-msgstr "Direito"
-
-msgid "Top"
-msgstr "Topo"
-
-msgid "Bottom"
-msgstr "Fundo"
-
-msgid "Adapt"
-msgstr "Adaptar"
-
-msgid "Color"
-msgstr "Cor"
-
-msgid "Users"
-msgstr "Utilizadores"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-"Esta é uma área restrita: somente os utilizadores autorizados podem gerir "
-"este nó do Jappix."
-
-msgid "Please use the form below to login to the administration panel."
-msgstr "Utilize o formulário em baixo para aceder o painel de administração."
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-"Para melhorar a segurança, as sessões são limitadas no tempo e quando o "
-"navegador for fechado, será deligado."
-
-msgid "Credentials"
-msgstr "Credenciais"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "Foi desconectado. Adeus!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-"Opss, não foi reconhecido como um administrador. Verificar as suas "
-"credenciais!"
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-"Estatísticas básicas são processados ​​pelo Jappix sobre algumas coisas "
-"importantes, você pode encontrá-los em baixo."
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr "Alterar a configuração do nó Jappix com esta ferramenta."
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-"Todos os arquivos armazenados neste nó do Jappix podem ser geridos com esta "
-"ferramenta: selecione uma sub-pasta e comece a editar o seu conteúdo!"
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr "Jappix é totalmente personalizável: você pode mudar seu aspeto aqui."
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr "Esta não é uma imagem válida, por favor utilize PNG, GIF ou JPG!"
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr "Esta não é uma imagem válida, por favor, utilize o formato PNG!"
-
-msgid "The image could not be received, would you mind retry?"
-msgstr "A imagem não pode ser recebida, importa-se de repetir?"
-
-msgid "Your service logo has been successfully changed!"
-msgstr "Seu logotipo de serviço foi alterado com sucesso!"
-
-msgid "Your image was added to the list!"
-msgstr "A imagem foi adicionado à lista!"
-
-msgid "Changes saved!"
-msgstr "Alterações salva!"
-
-msgid "Logo"
-msgstr "Logotipo"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-"Você pode definir o seu próprio logotipo do serviço para substituir o "
-"padrão. Tome atenção ao tamanho e a cor principal de cada logotipo!"
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr "Carregar cada logotipo com o tamanho máximo recomendado de pixeis."
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-"O formato do logotipo deve ser PNG. Deixe um campo vazio e o logotipo não "
-"será alterado."
-
-msgid "Remove this logo"
-msgstr "Remover este logotipo"
-
-msgid "View this logo"
-msgstr "Ver este logotipo"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-"Pode definir mais de um administrador para este nó Jappix. Você também pode "
-"alterar a senha com esta ferramenta."
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-"Atualize o seu nó Jappix com esta ferramenta ou verifique se uma nova versão "
-"se encontra disponível. Informações sobre a última são também exibidas (em "
-"Inglês)."
-
-msgid "Access statistics"
-msgstr "Estatísticas de acesso"
-
-msgid "Share statistics"
-msgstr "Partilhe as estatísticas"
-
-msgid "Other statistics"
-msgstr "Outras estatísticas"
-
-msgid "January"
-msgstr "Janeiro"
-
-msgid "February"
-msgstr "Fevereiro"
-
-msgid "March"
-msgstr "Março"
-
-msgid "April"
-msgstr "Abril"
-
-msgid "May"
-msgstr "Maio"
-
-msgid "June"
-msgstr "Junho"
-
-msgid "July"
-msgstr "Julho"
-
-msgid "August"
-msgstr "Agosto"
-
-msgid "September"
-msgstr "Setembro"
-
-msgid "October"
-msgstr "Outubro"
-
-msgid "November"
-msgstr "Novembro"
-
-msgid "December"
-msgstr "Dezembro"
-
-msgid "Monday"
-msgstr "Segunda-feira"
-
-msgid "Tuesday"
-msgstr "Terça-feira"
-
-msgid "Wednesday"
-msgstr "Quarta-feira"
-
-msgid "Thursday"
-msgstr "Quinta-feira"
-
-msgid "Friday"
-msgstr "Sexta-feira"
-
-msgid "Saturday"
-msgstr "Sábado"
-
-msgid "Sunday"
-msgstr "Domingo"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Archives"
-msgstr ""
-
-msgid "Music"
-msgstr "Música"
-
-msgid "Backgrounds"
-msgstr "Fundos"
-
-msgid "Share"
-msgstr "Partilhar"
-
-msgid "Background"
-msgstr "Fundo"
-
-msgid "Notice"
-msgstr "Notar"
-
-msgid "Your design preferences have been saved!"
-msgstr "Suas preferências de design foram salvas!"
-
-msgid "Please check your inputs: something is missing!"
-msgstr "Verifique as suas entradas: algo está em falta!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-"Alterar o fundo do nó Jappix com esta ferramenta. Você pode definir uma cor "
-"personalizada ou uma imagem de upload. Deixe fluir a sua criatividade!"
-
-msgid "Use default background"
-msgstr "Utilizar o fundo padrão"
-
-msgid "Use your own image"
-msgstr "Utilizar a sua própria imagem"
-
-msgid "Select a background to use and change the display options."
-msgstr "Selecione um fundo para utilizar e altere as opções de exibição."
-
-msgid "Use your own color"
-msgstr "Use a sua própria cor"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr ""
-"Digite o valor de cor hexadecimal que deseja utilizar como plano de fundo."
-
-msgid "Manage backgrounds"
-msgstr "Gerir fundos"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-"Você pode adicionar um novo fundo para a lista com esta ferramenta. Por "
-"favor, envie uma imagem válida."
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr "Se deseja remover alguns fundos, utilize o navegador abaixo."
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-"Definir um aviso na homepage para todos os seus utilizadores, como uma "
-"advertência, uma mensagem importante ou um anúncio com esta ferramenta."
-
-msgid "Simple notice"
-msgstr "Aviso simples"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-"Este aviso só precisa de texto simples para ser exibido, mas nenhum código é "
-"permitido!"
-
-msgid "Advanced notice"
-msgstr "Aviso prévio"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-"Você pode personalizar o seu avisoembebendo HTML, CSS e JavaScript, mas "
-"necessita de codificar o estilo."
-
-msgid "Available updates"
-msgstr "Atualizações disponíveis"
-
-msgid "What's new?"
-msgstr "O que há de novo?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr ""
-"As pastas de armazenamento não são graváveis, aplique as permissões corretas!"
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-"%1s pode causar problemas para no proxy, por favor, aumente o valor de %2 "
-"para %3s!"
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-"Você está a usar uma versão de desenvolvimento do Jappix. Atualize-o através "
-"do nosso repositório executando: %s."
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-"Uma versão nova Jappix está disponível! Confirme o que é novo e inicie a "
-"atualização!"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr "A sua versão é antiga. Atualize agora para %s, clicando aqui!"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"A sua versão parece sera atual, mas pode verificar atualizações manualmente, "
-"clicando aqui."
-
-msgid "Check for updates"
-msgstr "Verificar atualizações"
-
-msgid "Update in progress"
-msgstr "Atualização a decorrer"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr ""
-"O Jappix foi atualizado: agora você está utilizar a versão mais recente. "
-"Divirta-se!"
-
-msgid "The update has failed! Please try again later."
-msgstr "A atualização falhou! Por favor, tente novamente mais tarde."
-
-msgid "Downloading package..."
-msgstr "Baixando pacote ..."
-
-msgid "Removing current Jappix system files..."
-msgstr "A remover os arquivos atuais do sistema..."
-
-msgid "Extracting package..."
-msgstr "Extrair um pacote ..."
-
-msgid "Regenerating storage folder tree..."
-msgstr "Regeneração a pasta de armazenamento ..."
-
-msgid "Jappix is now up to date!"
-msgstr "O Jappix encontra-se actualizado!"
-
-msgid "Aborted: socket error!"
-msgstr "Abortada: erro de socket!"
-
-msgid "Aborted: buffer error!"
-msgstr "Abortada: erro de buffer!"
-
-msgid "Aborted: everything is not writable!"
-msgstr "Abortada: tudo o que não é gravável!"
-
-msgid "Aborted: could not extract the package!"
-msgstr "Abortada: não foi possível extrair o pacote!"
-
-msgid "Visits"
-msgstr "Visitas"
-
-msgid "Daily"
-msgstr "Diário"
-
-msgid "Weekly"
-msgstr "Semanal"
-
-msgid "Monthly"
-msgstr "Mensal"
-
-msgid "Yearly"
-msgstr "Anual"
-
-msgid "Size"
-msgstr "Tamanho"
-
-msgid "Clean everything"
-msgstr "Tudo limpo"
-
-msgid "Purge cache"
-msgstr "Purgar cache"
-
-msgid "Purge logs"
-msgstr "Purgar logs"
-
-msgid "Purge sent files"
-msgstr "Purgar arquivos enviados"
-
-msgid "Purge updates"
-msgstr "Purgar atualizações"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "A pasta de armazenamento que você queria limpar agora está vazia!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-"Mantenha o seu nó Jappix atualizado e rápido, limpe as pastas de "
-"armazenamento regularmente!"
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-"Envie sua música (Ogg Vorbis, MP3 ou WAV) para poder ouvi-la em Jappix!"
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr "O arquivo que deseja carregar deve ser menor que %s."
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-"Você pode verificar o que os seus utilizadores armazenam no seu servidor e "
-"remover os conteúdos indesejados com esta ferramenta."
-
-msgid "Title"
-msgstr "Título"
-
-msgid "Artist"
-msgstr "Artista"
-
-msgid "Album"
-msgstr "Álbum"
-
-msgid "File"
-msgstr "Arquivo"
-
-msgid "Upload"
-msgstr "Carregar"
-
-msgid "The folder is empty."
-msgstr "A pasta está vazia."
-
-msgid "The music could not be received, please retry!"
-msgstr "A música não pode ser recebida, por favor, tente novamente!"
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-"Este não é um arquivo de música válido, por favor codifique-o em Ogg Vorbis, "
-"MP3 ou WAV!"
-
-msgid "Your music has been added!"
-msgstr "A sua música foi adicionada!"
-
-msgid "The selected elements have been removed."
-msgstr "Os elementos seleccionados foram removidos."
-
-msgid "You must select elements to remove!"
-msgstr "Você deve selecionar elementos para remover!"
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-"Adicione um novo utilizador com esta ferramenta, ou altere a senha (digite "
-"um nome de utilizador). Por favor indique uma senha forte!"
-
-msgid "Manage"
-msgstr "Gerir"
-
-msgid "List"
-msgstr "Lista"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-
-msgid "The user has been added!"
-msgstr "O utilizador foi adicionado!"
-
-msgid "The chosen users have been removed."
-msgstr "Os utilizadores seleccionados foram removidos."
-
-msgid "You must select one or more users to be removed!"
-msgstr "Você deve selecionar um ou mais utilizadores para serem removidos!"
-
-msgid "Yesterday"
-msgstr "Ontem"
-
-msgid "%s days ago"
-msgstr "%s dias atrás"
-
-msgid "User currently active"
-msgstr "Utilizador ativo"
-
-msgid "Last seen: %s"
-msgstr "Visto pela última vez: %s"
-
-msgid "Inactive since: %s"
-msgstr "Inativo desde: %s"
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr "O seu amigo parece não ter recebido a sua mensagem!"
-
-msgid "Static content server"
-msgstr "Servidor de conteúdo estático"
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr "Este é o servidor de conteúdo estático para %1s, “%2s”."
-
-msgid "User uploads server"
-msgstr "Servidor uploads dos utilizadores"
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr "Este é o servidor para envios para %1s, “%2s”."
-
-msgid "Suggested friends"
-msgstr "Amigos sugeridos"
-
-msgid "Check all"
-msgstr "Verifique todos"
-
-msgid "Uncheck all"
-msgstr "Desmarcar todos"
-
-msgid "Choose"
-msgstr "Escolher"
-
-msgid "List name"
-msgstr "Nome da lista"
-
-msgid "Allow"
-msgstr "Permitir"
-
-msgid "Deny"
-msgstr "Negar"
-
-msgid "Group"
-msgstr "Grupo"
-
-msgid "Subscription"
-msgstr "Assinatura"
-
-msgid "Both"
-msgstr "Ambos"
-
-msgid "From"
-msgstr "De"
-
-msgid "Everybody"
-msgstr "Todos"
-
-msgid "Send messages"
-msgstr "Enviar mensagens"
-
-msgid "Send queries"
-msgstr "Enviar consultas"
-
-msgid "See my status"
-msgstr "Ver o meu estado"
-
-msgid "Send his/her status"
-msgstr "Envie o seu estado"
-
-msgid "Everything"
-msgstr "Tudo"
-
-msgid "Item"
-msgstr "Item"
-
-msgid "Order"
-msgstr "Ordem"
-
-msgid "Active for this session"
-msgstr "Ativo para esta sessão"
-
-msgid "Always active"
-msgstr "Sempre ativo"
-
-msgid "User directory"
-msgstr "Diretório do utilizador"
-
-msgid "Search a friend"
-msgstr "Procure um amigo"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-"O recurso solicitado não foi implementado pelo destinatário ou servidor e "
-"como tal não pode ser processado."
-
-msgid "Send him/her a message"
-msgstr "Envie-lhe uma mensagem"
-
-msgid "Start a chat with him/her"
-msgstr "Iniciar uma conversa com ele/ela"
-
-msgid "Available shortcuts:"
-msgstr "Atalhos disponíveis:"
-
-msgid "%s removes the chat logs"
-msgstr "%s remova os logs das conversas"
-
-msgid "%s joins a groupchat"
-msgstr "%s junta-se a um grupo de chat"
-
-msgid "%s closes the chat"
-msgstr "%s fecha o chat"
-
-msgid "%s shows the user profile"
-msgstr "%s mostra o seu perfil"
-
-msgid "%s sends a message to the room"
-msgstr "%s envia uma mensagem para a sala"
-
-msgid "%s changes your nickname"
-msgstr "%s altera o seu apelido"
-
-msgid "%s sends a message to someone in the room"
-msgstr "%s envia uma mensagem para alguém na sala"
-
-msgid "%s changes the room topic"
-msgstr "%s altera o tópico da sala"
-
-msgid "%s kicks a user of the room"
-msgstr ""
-
-msgid "%s bans a user of the room"
-msgstr ""
-
-msgid "%s invites someone to join the room"
-msgstr "%s convida alguém para entrar na sala"
-
-msgid "Public profile"
-msgstr "Perfil público"
-
-msgid "Your profile anywhere on the Web."
-msgstr "O seu perfil em qualquer lugar na web."
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-"%s é um serviço Jappix.com que torna o seu perfil XMPP público . É mais "
-"fácil de partilhar. Não é necessária nenhuma conta XMPP para visualizar o "
-"seu canal social, a sua posição atual e seus detalhes de contato."
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-"Além disso, cada foto que colocar no seu canal social é adicionada a um "
-"cronograma de imagens. Agora pode ver as imagens que partilhou ano a ano."
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-
-msgid "Yay, let's create your public profile!"
-msgstr ""
-
-msgid "Enable my public profile"
-msgstr "Ativar meu perfil público"
-
-msgid "Jappix for your phone"
-msgstr "Jappix para o seu telefone"
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr ""
-"Um aplicativo de telefone único para mensagens, canais, perfis e muito mais!"
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-"Essa notificação é apenas informativa, talvez os dados a que se refere "
-"tenham sido removidos."
-
-msgid "You haven't provided any file to download"
-msgstr "Você não forneceu qualquer arquivo para download"
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr "Você não pode baixar um arquivo se não fornecer uma chave"
-
-msgid "Woah this file isn't found, please double check"
-msgstr "Woah este arquivo não foi encontrado, por favor, verifique novamente"
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr "A chave fornecida não tem as permissões para baixar este arquivo"
-
-msgid "Statistics are currently disabled in the settings."
-msgstr "As estatísticas estão atualmente desativadas nas configurações."
-
-msgid "New event!"
-msgstr "Novo evento!"
-
-msgid "%s is typing..."
-msgstr "%s está a digitar..."
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-
-msgid "Username"
-msgstr ""
-
-msgid "Enter password"
-msgstr ""
-
-msgid "Once again..."
-msgstr ""
-
-msgid "Code"
-msgstr ""
-
-msgid "Security code"
-msgstr ""
-
-msgid "Advertising space available!"
-msgstr ""
-
-msgid "Advertise here"
-msgstr ""
-
-msgid "Analytics (%s)"
-msgstr ""
-
-msgid "Track visits"
-msgstr ""
-
-msgid "Piwik URL"
-msgstr ""
-
-msgid "Piwik tracking ID"
-msgstr ""
-
-msgid "Advertising (%s)"
-msgstr ""
-
-msgid "Enable ads"
-msgstr ""
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "Content ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "Mute"
-msgstr ""
-
-msgid "Unmute"
-msgstr ""
-
-msgid "Is calling you"
-msgstr ""
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr ""
-
-msgid "Waiting..."
-msgstr ""
-
-msgid "Ringing..."
-msgstr ""
-
-msgid "Declined the call"
-msgstr ""
-
-msgid "Call error"
-msgstr ""
-
-msgid "Ended the call"
-msgstr ""
-
-msgid "Call ended"
-msgstr ""
-
-msgid "Call canceled"
-msgstr ""
-
-msgid "Canceled the call"
-msgstr ""
-
-msgid "Is already in a call"
-msgstr ""
-
-msgid "Ending call..."
-msgstr ""
-
-msgid "Accept"
-msgstr ""
-
-msgid "Decline"
-msgstr ""
-
-msgid "Okay"
-msgstr ""
-
-msgid "Retry"
-msgstr ""
-
-msgid "Audio Call"
-msgstr ""
-
-msgid "Video Call"
-msgstr ""
diff --git a/i18n/ru/LC_MESSAGES/main.mo b/i18n/ru/LC_MESSAGES/main.mo
deleted file mode 100644
index bb3ceb95..00000000
--- a/i18n/ru/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/ru/LC_MESSAGES/main.po b/i18n/ru/LC_MESSAGES/main.po
deleted file mode 100644
index 02a2bfbe..00000000
--- a/i18n/ru/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2411 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-# utapyngo, 2013-2014
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:21+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Russian (http://www.transifex.com/projects/p/jappix/language/"
-"ru/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: ru\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "default:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"JavaScript отключен в Вашем браузере, без него Jappix не может работать!"
-
-msgid "Social channel, chat and more."
-msgstr "Социальный канал, чат и многое другое."
-
-msgid "Create your public profile."
-msgstr "Создайте Ваш публичный профиль."
-
-msgid "A mini-chat for your website."
-msgstr "Мини-чат для Вашего веб-сайта."
-
-msgid "Get Jappix, get support."
-msgstr "Получить Jappix и поддержку."
-
-msgid "Statistics around Jappix."
-msgstr "Статистика Jappix."
-
-msgid "Legal disclaimer for Jappix."
-msgstr "Отказ от ответственности."
-
-msgid "Download Jappix for free."
-msgstr "Скачать Jappix бесплатно."
-
-msgid "Contribute to the Jappix code."
-msgstr "Внесите свой вклад в код Jappix."
-
-msgid "Jappix for your company."
-msgstr "Jappix для Вашей компании."
-
-msgid "Find a public Jappix node."
-msgstr "Найти пубичный узел Jappix."
-
-msgid "Credits"
-msgstr "О нас"
-
-msgid "Association"
-msgstr "Ассоциация"
-
-msgid "Web agency"
-msgstr "Веб-агентство"
-
-msgid "Legal"
-msgstr "Юридическая информация"
-
-msgid "Legal disclaimer"
-msgstr "Отказ от ответственности"
-
-msgid "Terms of use and legal"
-msgstr "Условия использования"
-
-msgid "Owner"
-msgstr "Владелец"
-
-msgid "Node owner"
-msgstr "Владелец узла"
-
-msgid "By using our service, you accept %s."
-msgstr "Используя наш сервис, Вы принимаете %s."
-
-msgid "our terms of use"
-msgstr "наши условия использования"
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Работа Jappix прервана из-за проблем со связью, ошибки или неверных "
-"регистрационных данных (проверьте имя и пароль). Просим прощения за "
-"неудобства."
-
-msgid "The element list on this server could not be obtained!"
-msgstr "Невозможно получить список элементов с этого сервера."
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr "Пароль изменен. Вы можете войти с новым паролем."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "Ваша учётная запись XMPP была удалена, до скорой встречи!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "Вы покинули свою учётную запись XMPP, удачного дня!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr "Вы пытаетесь войти в несуществующую комнату."
-
-msgid "The groupchat has been removed."
-msgstr "Комната была удалена."
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "Нужного Вам пользователя нет в комнате."
-
-msgid "Please enter the group chat address to join."
-msgstr ""
-"Пожалуйста, введите адрес группового чата, к которому хотите присоединиться."
-
-msgid "Please enter your nickname to join %s."
-msgstr "Введите свой псевдоним для присоединения к %s."
-
-msgid "This room (%s) is protected with a password."
-msgstr "Комната (%s) защищена паролем."
-
-msgid "Your browser is out of date!"
-msgstr "Ваш браузер устарел. Пожалуйста, обновите его!"
-
-msgid "Last %s version is better!"
-msgstr "Свежая версия %s – лучше!"
-
-msgid "Login"
-msgstr "Вход"
-
-msgid "Register"
-msgstr "Регистрация"
-
-msgid "Here we go!"
-msgstr "Вперёд!"
-
-msgid "Server"
-msgstr "Сервер"
-
-msgid "Password"
-msgstr "Пароль"
-
-msgid "Remember me"
-msgstr "Запомнить меня"
-
-msgid "This tool has been disabled!"
-msgstr "Этот инструмент был заблокирован!"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr "Из-за неполадок в сети Вы были отсоединены. Что Вы хотите сделать?"
-
-msgid "Reconnect"
-msgstr "Переподключение"
-
-msgid "Messages"
-msgstr "Сообщения"
-
-msgid "Profile"
-msgstr "Профиль"
-
-msgid "Options"
-msgstr "Настройки"
-
-msgid "Disconnect"
-msgstr "Выход"
-
-msgid "Filter"
-msgstr "Фильтр"
-
-msgid "Add a friend"
-msgstr "Добавить друга"
-
-msgid "Your groupchats"
-msgstr "Ваши групповые чаты"
-
-msgid "Manage your favorite groupchats"
-msgstr "Управление избранными комнатами"
-
-msgid "More stuff"
-msgstr "Дополнительно"
-
-msgid "Show all friends"
-msgstr "Показывать всех"
-
-msgid "Only show connected friends"
-msgstr "Показывать только подключённых"
-
-msgid "Groupchat presence messages"
-msgstr "Сообщения присутствия в групповых чатах"
-
-msgid "No chat images auto-load"
-msgstr "Не загружать картинки автоматически"
-
-msgid "Message archives"
-msgstr "Архив сообщений"
-
-msgid "Date"
-msgstr "Дата"
-
-msgid "A short message?"
-msgstr "Статусное сообщение?"
-
-msgid "How are you?"
-msgstr "Как дела?"
-
-msgid "What are you doing?"
-msgstr "Чем вы сейчас заняты?"
-
-msgid "Join a chat"
-msgstr "Присоединиться к чату"
-
-msgid "Status"
-msgstr "Состояние"
-
-msgid "Available"
-msgstr "Доступен"
-
-msgid "Talkative"
-msgstr "Готов поболтать"
-
-msgid "Away"
-msgstr "Отошёл"
-
-msgid "Not available"
-msgstr "Недоступен"
-
-msgid "Busy"
-msgstr "Занят"
-
-msgid "Offline"
-msgstr "Отключён"
-
-msgid "Mood"
-msgstr "Настроение"
-
-msgid "None"
-msgstr "Ничего"
-
-msgid "Crazy"
-msgstr "Сумасшедший"
-
-msgid "Excited"
-msgstr "Взволнованный"
-
-msgid "Playful"
-msgstr "Игривый"
-
-msgid "Happy"
-msgstr "Счастливый"
-
-msgid "Shocked"
-msgstr "Шокирован"
-
-msgid "Hot"
-msgstr "Горячий"
-
-msgid "Sad"
-msgstr "Грустный"
-
-msgid "Amorous"
-msgstr "Влюблённый"
-
-msgid "Confident"
-msgstr "Уверенный"
-
-msgid "Activity"
-msgstr "Деятельность"
-
-msgid "Chores"
-msgstr "Домашние дела"
-
-msgid "Drinking"
-msgstr "Пью"
-
-msgid "Eating"
-msgstr "Кушаю"
-
-msgid "Exercising"
-msgstr "Занимаюсь"
-
-msgid "Grooming"
-msgstr "Гигиена"
-
-msgid "Appointment"
-msgstr "Встреча"
-
-msgid "Inactive"
-msgstr "Неактивный"
-
-msgid "Relaxing"
-msgstr "Расслабляюсь"
-
-msgid "Talking"
-msgstr "Болтаю"
-
-msgid "Traveling"
-msgstr "Путешествую"
-
-msgid "Working"
-msgstr "Работаю"
-
-msgid "View profile"
-msgstr "Показать профиль"
-
-msgid "This is a repeat from %s"
-msgstr "Это повтор от %s"
-
-msgid "Repeat this notice"
-msgstr "Повторить уведомление"
-
-msgid "Remove this notice"
-msgstr "Удалить уведомление"
-
-msgid "Your profile"
-msgstr "Ваш профиль"
-
-msgid "Identity"
-msgstr "Личное"
-
-msgid "Profile image"
-msgstr "Аватар"
-
-msgid "Others"
-msgstr "Другое"
-
-msgid "Other"
-msgstr "Другое"
-
-msgid "Personal"
-msgstr "Персональные данные"
-
-msgid "Complete name"
-msgstr "Полное имя"
-
-msgid "Nickname"
-msgstr "Псевдоним"
-
-msgid "First name"
-msgstr "Имя"
-
-msgid "Last name"
-msgstr "Фамилия"
-
-msgid "Date of birth"
-msgstr "Дата рождения"
-
-msgid "Contact"
-msgstr "Контакт"
-
-msgid "E-mail"
-msgstr "E-mail"
-
-msgid "Phone"
-msgstr "Телефон"
-
-msgid "Website"
-msgstr "Веб-сайт"
-
-msgid "Current"
-msgstr "Текущий"
-
-msgid "Delete"
-msgstr "Удалить"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr "Какая жалость! У Вас нет аватара!"
-
-msgid "Address"
-msgstr "Адрес"
-
-msgid "Street"
-msgstr "Улица"
-
-msgid "City"
-msgstr "Город"
-
-msgid "Postal code"
-msgstr "Индекс"
-
-msgid "Country"
-msgstr "Страна"
-
-msgid "Biography"
-msgstr "Биография"
-
-msgid "Important notice"
-msgstr "Важное замечание"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-"Будьте осторожны с информацией, которую Вы храните в Вашем профиле, так как "
-"она может быть доступна кому угодно (даже кому-то, кому Вы не хотите её "
-"доверять)."
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr ""
-"Не вся информация в XMPP является закрытой. Hапример, Ваш профиль (vCard) "
-"виден всем."
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"Рекомендуется загрузить аватар (до %s), что сделает Вас легко узнаваемым "
-"среди друзей."
-
-msgid "Save"
-msgstr "Сохранить"
-
-msgid "Cancel"
-msgstr "Отмена"
-
-msgid "Edit options"
-msgstr "Редактировать настройки"
-
-msgid "Channel"
-msgstr "Канал"
-
-msgid "Commands"
-msgstr "Команды"
-
-msgid "Sounds"
-msgstr "Звуки"
-
-msgid "Privacy"
-msgstr "Приватность"
-
-msgid "Message archiving"
-msgstr "Архивация сообщений"
-
-msgid "Store an history of your chats"
-msgstr "Хранить историю Ваших бесед"
-
-msgid "Geolocation"
-msgstr "Геолокация"
-
-msgid "Disabled"
-msgstr "Отключено"
-
-msgid "Store all chats"
-msgstr "Хранить все беседы"
-
-msgid "Store friend chats"
-msgstr "Хранить беседы с друзьями"
-
-msgid "Remove all archives"
-msgstr "Удалить все архивы"
-
-msgid "Empty"
-msgstr "Очистить"
-
-msgid "Empty channel"
-msgstr "Очистить канал"
-
-msgid "Persistent"
-msgstr "Постоянный"
-
-msgid "Maximum notices"
-msgstr "Максимальное число уведомлений"
-
-msgid "Account"
-msgstr "Учётная запись"
-
-msgid "Change password"
-msgstr "Изменить пароль"
-
-msgid "Delete account"
-msgstr "Удалить учётную запись"
-
-msgid "Old"
-msgstr "Старый"
-
-msgid "New (2 times)"
-msgstr "Новый (ещё раз)"
-
-msgid "Suggested chatrooms"
-msgstr "Предлагаемые комнаты"
-
-msgid "Skip"
-msgstr "Пропустить"
-
-msgid "Continue"
-msgstr "Продолжить"
-
-msgid "To"
-msgstr "Кому"
-
-msgid "Close"
-msgstr "Закрыть"
-
-msgid "unknown"
-msgstr "неизвестно"
-
-msgid "Unavailable"
-msgstr "Недоступен"
-
-msgid "is now"
-msgstr "теперь"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Подождите, аватар загружается..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "Вот он, новый аватар!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "Этот файл не поддерживается или имеет неправильный размер."
-
-msgid "Reply"
-msgstr "Ответить"
-
-msgid "Error"
-msgstr "Ошибка"
-
-msgid "Click here to solve the error"
-msgstr "Щёлкните здесь, чтобы устранить ошибку"
-
-msgid "You"
-msgstr "Ты"
-
-msgid "Remove"
-msgstr "Удалить"
-
-msgid "Rename"
-msgstr "Переименовать"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Привет, я %s. Хочу добавить тебя в друзья."
-
-msgid "Smiley insertion"
-msgstr "Добавить смайлик"
-
-msgid "Change style"
-msgstr "Изменить стиль"
-
-msgid "Text in bold"
-msgstr "Полужирный"
-
-msgid "Text in italic"
-msgstr "Курсив"
-
-msgid "Underlined text"
-msgstr "Подчеркнутый"
-
-msgid "Send a file"
-msgstr "Отправить файл"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr ""
-"После загрузки Вашему другу будет предложено скачать отправленный Вами файл."
-
-msgid "Save chat"
-msgstr "Сохранить беседу"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"Щёлкните на следующей ссылке, чтобы получить журнал беседы, и подождите. "
-"Затем щёлкните ещё раз для получения файла."
-
-msgid "This chat is empty!"
-msgstr "Этот чат пуст!"
-
-msgid "Generate file!"
-msgstr "Создать файл!"
-
-msgid "Download file!"
-msgstr "Скачать файл!"
-
-msgid "Clean current chat"
-msgstr "Очистить текущий чат"
-
-msgid "Show user profile"
-msgstr "Показать профиль пользователя"
-
-msgid "Add this contact to your friends"
-msgstr "Добавить этого пользователя в друзья"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Добавить этот групповой чат в избранные"
-
-msgid "All tabs"
-msgstr "Все вкладки"
-
-msgid "Join groupchat"
-msgstr "Присоединиться к групповому чату"
-
-msgid "Close this tab"
-msgstr "Закрыть эту вкладку"
-
-msgid "no subject defined for this room."
-msgstr "для данной комнаты тема не была установлена."
-
-msgid "Administration panel for this room"
-msgstr "Панель администрирования для этой комнаты"
-
-msgid "Moderators"
-msgstr "Модераторы"
-
-msgid "Participants"
-msgstr "Участники"
-
-msgid "Visitors"
-msgstr "Посетители"
-
-msgid "Manage favorite rooms"
-msgstr "Управление избранными комнатами"
-
-msgid "Change favorites"
-msgstr "Изменить избранные"
-
-msgid "Search a room"
-msgstr "Найти комнату"
-
-msgid "Select a favorite"
-msgstr "Добавить в избраннное"
-
-msgid "Getting the name..."
-msgstr "Получение имени..."
-
-msgid "Gateway"
-msgstr "Транспорт"
-
-msgid "Name"
-msgstr "Имя"
-
-msgid "Room"
-msgstr "Комната"
-
-msgid "Add"
-msgstr "Добавить"
-
-msgid "Edit"
-msgstr "Изменить"
-
-msgid "Search a room on"
-msgstr "Найти комнату на"
-
-msgid "No room found on this server."
-msgstr "Комнат на сервере не найдено."
-
-msgid "Service discovery"
-msgstr "Обзор сервисов"
-
-msgid "Server to query"
-msgstr "Сервер для опроса"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "Ничего не найдено."
-
-msgid "Accounts"
-msgstr "Учётные записи"
-
-msgid "Authentications"
-msgstr "Аутентификация"
-
-msgid "Automation"
-msgstr "Автоматизация"
-
-msgid "Clients"
-msgstr "Клиенты"
-
-msgid "Collaboration"
-msgstr "Сотрудничество"
-
-msgid "Components"
-msgstr "Компоненты"
-
-msgid "Rooms"
-msgstr "Комнаты"
-
-msgid "Directories"
-msgstr "Директории"
-
-msgid "Gateways"
-msgstr "Транспорты"
-
-msgid "News"
-msgstr "Новости"
-
-msgid "Hierarchy"
-msgstr "Иерархия"
-
-msgid "Proxies"
-msgstr "Прокси"
-
-msgid "Publication/Subscription"
-msgstr "Публикация/Подписка"
-
-msgid "Storage"
-msgstr "Хранилище"
-
-msgid "Service offline or broken"
-msgstr "Сервис недоступен"
-
-msgid "Your inbox"
-msgstr "Входящие"
-
-msgid "Available actions"
-msgstr "Доступные действия"
-
-msgid "Clean"
-msgstr "Очистить"
-
-msgid "New"
-msgstr "Создать"
-
-msgid "Received"
-msgstr "Принятые"
-
-msgid "Subject"
-msgstr "Тема"
-
-msgid "Content"
-msgstr "Содержимое"
-
-msgid "Send message"
-msgstr "Отправить сообщение"
-
-msgid "Your inbox is empty."
-msgstr "Нет входящих сообщений."
-
-msgid "MUC administration"
-msgstr "Администрирование многопользовательской конференции"
-
-msgid "You administrate this room"
-msgstr "Вы управляете этой комнатой"
-
-msgid "Enter new subject"
-msgstr "Введите тему"
-
-msgid "Configuration"
-msgstr "Установки"
-
-msgid "Authorizations"
-msgstr "Авторизация"
-
-msgid "Member list"
-msgstr "Участники"
-
-msgid "Owner list"
-msgstr "Владельцы"
-
-msgid "Administrator list"
-msgstr "Администраторы"
-
-msgid "Outcast list"
-msgstr "Выгнанные"
-
-msgid "Add an input"
-msgstr "Добавить"
-
-msgid "Destroy this MUC"
-msgstr "Уничтожить эту комнату"
-
-msgid "Yes, let's do it!"
-msgstr "Да, давайте сделаем это!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "Ваш друг читает сообщение."
-
-msgid "Your friend is writing a message..."
-msgstr "Ваш друг пишет сообщение..."
-
-msgid "Your friend stopped writing a message."
-msgstr "Ваш друг прекратил писать сообщение."
-
-msgid "Your friend is doing something else."
-msgstr "Ваш друг отвлёкся."
-
-msgid "Your friend closed the chat."
-msgstr "Ваш друг закрыл окно чата."
-
-msgid "Requesting this service..."
-msgstr "Запрос сервиса..."
-
-msgid "Loading"
-msgstr "Загрузка"
-
-msgid "changed his/her nickname to %s"
-msgstr "сменил ник на %s"
-
-msgid "joined the chat room"
-msgstr "вошёл в комнату"
-
-msgid "left the chat room"
-msgstr "покинул комнату"
-
-msgid "%s left"
-msgstr "%s вышел"
-
-msgid "%s joined"
-msgstr "%s пришёл"
-
-msgid "no status"
-msgstr "нет статуса"
-
-msgid "has been kicked"
-msgstr "был выставлен"
-
-msgid "has been banned"
-msgstr "был забанен"
-
-msgid "no reason"
-msgstr "нет причины"
-
-msgid "Communicate with the entire world!"
-msgstr "Общайся со всем миром!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-"Jappix – это открытая социальная платформа, в которой Вы можете общаться с "
-"кем и когда угодно."
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-"Присоединяйтесь к миллионам пользователей XMPP, не оставайтесь в стороне!"
-
-msgid "Hi there!"
-msgstr "Приветствуем Вас здесь!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr "Добро пожаловать в %1s – %2s."
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr "Войдите в Вашу учётную запись XMPP или создайте новую бесплатно!"
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-"Ради безопасности Вашей учётной записи, убедитесь, что Ваш пароль остаётся в "
-"тайне, когда Вы его вводите."
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-"Войдите в Вашу учётную запись XMPP. Вы также можете использовать %s для "
-"присоединения к общей беседе."
-
-msgid "Previous"
-msgstr "Назад"
-
-msgid "General"
-msgstr "Общие"
-
-msgid "Advanced"
-msgstr "Дополнительно"
-
-msgid "Resource"
-msgstr "Ресурс"
-
-msgid "Priority"
-msgstr "Приоритет"
-
-msgid "Low"
-msgstr "Низкий"
-
-msgid "Medium"
-msgstr "Средний"
-
-msgid "High"
-msgstr "Высокий"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-"Введите название группового чата и псевдоним, который хотите там иметь. Вы "
-"также можете вернуться к %s."
-
-msgid "login page"
-msgstr "странице входа"
-
-msgid "Share this link with your friends:"
-msgstr "Поделитесь ссылкой с друзьями:"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-"Зарегистрируйте новую учётную запись XMPP, чтобы присоединиться к сети "
-"друзей. Это просто!"
-
-msgid "Required"
-msgstr "Обязательные поля"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "Вы были зарегистрированы, Ваш XMPP-адрес:"
-
-msgid "Manager"
-msgstr "Управление"
-
-msgid "Encrypted"
-msgstr "Шифровать"
-
-msgid "Unencrypted"
-msgstr "Не шифровать"
-
-msgid "Where are you?"
-msgstr "Где ты?"
-
-msgid "What's up with you?"
-msgstr "Что у Вас нового?"
-
-msgid "Type something you want to share with your friends..."
-msgstr "Напишите, чем Вы хотите поделиться с друзьями..."
-
-msgid "Fetching the social channel..."
-msgstr "Вход в социальный канал..."
-
-msgid "You are synchronized with your network."
-msgstr "Вы синхронизированы с сетью."
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "Не может быть отправлено: вы можете только получать уведомления!"
-
-msgid "Media viewer"
-msgstr "Медиа менеджер"
-
-msgid "Browse"
-msgstr "Просмотр"
-
-msgid "Command"
-msgstr "Команда"
-
-msgid "Subscribe"
-msgstr "Подписаться"
-
-msgid "Join"
-msgstr "Войти"
-
-msgid "Automatic"
-msgstr "Входить автоматически"
-
-msgid "Search"
-msgstr "Поиск"
-
-msgid "No result!"
-msgstr "Нет результата!"
-
-msgid "No notifications."
-msgstr "Нет уведомлений."
-
-msgid "would like to add you as a friend."
-msgstr "хочет добавить Вас в друзья."
-
-msgid "would like you to join this chatroom:"
-msgstr "хочет, чтобы Вы вошли в эту комнату:"
-
-msgid "Do you accept?"
-msgstr "Вы согласны?"
-
-msgid "Yes"
-msgstr "Да"
-
-msgid "No"
-msgstr "Нет"
-
-msgid "would like to get authorization."
-msgstr "хочет получить авторизацию."
-
-msgid "would like to send you a file: “%s”."
-msgstr "хочет отправить Вам файл: “%s”."
-
-msgid "has received a file exchange request: “%s”."
-msgstr "получил запрос на обмен файлами: “%s”."
-
-msgid "has accepted to receive your file: “%s”."
-msgstr "согласился на получение Вашего файла: “%s”."
-
-msgid "has rejected to receive your file: “%s”."
-msgstr "отклонил получение Вашего файла: “%s”."
-
-msgid "could not receive your file: “%s”."
-msgstr "не может получить Ваш файл: “%s”."
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr "Хотите ли Вы видеть друзей, предложенных Вам %s ?"
-
-msgid "commented an item you follow: “%s”."
-msgstr "прокомментировал то, за чем Вы следите: “%s”."
-
-msgid "liked your post: “%s”."
-msgstr "понравилось Ваше сообщение: “%s”."
-
-msgid "quoted you somewhere: “%s”."
-msgstr "цитировал Вас где-то: “%s”."
-
-msgid "published on your wall: “%s”."
-msgstr "опубликовал на Вашей стене: “%s”."
-
-msgid "tagged you in a photo (%s)."
-msgstr "отметил Вас на фото (%s)."
-
-msgid "tagged you in a video (%s)."
-msgstr "отметил Вас на видео (%s)."
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-"проверил Вашу учётную запись. Сейчас Ваш публичный профиль станет доступен."
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr "удалил Ваш публичный профиль по Вашему запросу. Мы будем скучать!"
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-"сохранил настройки Вашего нового публичного профиля. Сейчас они будут "
-"применены."
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-"не удалось проверить Вашу учётную запись, чтобы создать или обновить Ваш "
-"публичный профиль. Проверьте Ваши учётные данные."
-
-msgid "Open"
-msgstr "Открыть"
-
-msgid "Show"
-msgstr "Показать"
-
-msgid "Hide"
-msgstr "Скрыть"
-
-msgid "Submit"
-msgstr "Отправить"
-
-msgid "Client"
-msgstr "Клиент"
-
-msgid "System"
-msgstr "Система"
-
-msgid "Local time"
-msgstr "Местное время"
-
-msgid "Comments"
-msgstr "Комментарии"
-
-msgid "User profile"
-msgstr "Профиль пользователя"
-
-msgid "See his/her position on the globe"
-msgstr "Посмотреть географическое положение"
-
-msgid "Confirm"
-msgstr "Подтвердить"
-
-msgid "anonymous mode"
-msgstr "анонимный режим"
-
-msgid "Groups"
-msgstr "Группы"
-
-msgid "Unclassified"
-msgstr "Неизвестно"
-
-msgid "Authorize"
-msgstr "Авторизовать"
-
-msgid "Ask for authorization"
-msgstr "Запросить авторизацию"
-
-msgid "Unblock"
-msgstr "Разблокировать"
-
-msgid "Prohibit"
-msgstr "Запретить"
-
-msgid "Block"
-msgstr "Блокировать"
-
-msgid "Chat"
-msgstr "Чат"
-
-msgid "Groupchat"
-msgstr "Групповой чат"
-
-msgid "Jappix Mobile"
-msgstr "Мобильная версия Jappix"
-
-msgid "Desktop"
-msgstr "Полная версия"
-
-msgid "Mobile"
-msgstr "Мобильная версия"
-
-msgid "Please wait..."
-msgstr "Пожалуйста, подождите..."
-
-msgid "Please enable JavaScript"
-msgstr "Пожалуйста, включите JavaScript"
-
-msgid "Show comments"
-msgstr "Показать комментарии"
-
-msgid "Loading comments..."
-msgstr "Загрузка комментариев..."
-
-msgid "Could not get the comments!"
-msgstr "Не удалось получить комментарии!"
-
-msgid "Comments locked!"
-msgstr "Комментарии заблокированы!"
-
-msgid "Type your comment here..."
-msgstr "Введите свой комментарий..."
-
-msgid "Your channel"
-msgstr "Ваш канал"
-
-msgid "Channel of"
-msgstr "Канал"
-
-msgid "More notices..."
-msgstr "Другие уведомления..."
-
-msgid "Attach a file"
-msgstr "Присоединить файл"
-
-msgid "Send"
-msgstr "Отправить"
-
-msgid "Unattach the file"
-msgstr "Удалить файл"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-"При загрузке Вашего файла произошла ошибка: либо он слишком велик (максимум "
-"– %s), либо его формат запрещён!"
-
-msgid "Authorization failed"
-msgstr "Ошибка авторизации"
-
-msgid "Registration failed, please choose a different username"
-msgstr "Ошибка регистрации. Пожалуйста, выберите другое имя пользователя"
-
-msgid "Service unavailable"
-msgstr "Сервис недоступен"
-
-msgid "Internal server error, try later"
-msgstr "Внутренняя ошибка сервера. Попробуйте зайти позже"
-
-msgid "Your form has been sent."
-msgstr "Ваша форма была отправлена."
-
-msgid "Application"
-msgstr "Приложение"
-
-msgid "Media integration"
-msgstr "Медиа-интеграция"
-
-msgid "Keep local chat archives"
-msgstr "Хранить архивы бесед"
-
-msgid "XMPP links"
-msgstr "XMPP-ссылки"
-
-msgid "Open XMPP links with Jappix"
-msgstr "Открывать XMPP-ссылки в Jappix"
-
-msgid "changed the subject to:"
-msgstr "изменил тему на:"
-
-msgid "Welcome!"
-msgstr "Добро пожаловать!"
-
-msgid "Friends"
-msgstr "Друзья"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr "Добро пожаловать в Jappix – Ваше собственное социальное облако!"
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-"Перед тем, как Вы начнёте её использовать, Вам нужно изменить некоторые "
-"настройки, поискать друзей и заполнить Ваш профиль."
-
-msgid "Enable notification sounds"
-msgstr "Включить звуковые уведомления"
-
-msgid "Share your position on the globe"
-msgstr "Поделиться своим местоположением"
-
-msgid "Offline friends"
-msgstr "Друзья оффлайн"
-
-msgid "Don't hide offline friends"
-msgstr "Не скрывать друзей оффлайн"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr "Используйте это для поиска друзей, или добавьте их позже"
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr "Прекрасная работа! Теперь Вы можете поделиться Jappix с друзьями!"
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-"Нажатие на кнопку сохранения открывает редактор профиля. Удачного общения!"
-
-msgid "Share Jappix on %s"
-msgstr "Рассказать про Jappix в %s"
-
-msgid "Follow Jappix topic on %s"
-msgstr "Следить за Jappix на %s"
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "Использую для общения Jabber-сеть Jappix. Я – %s!"
-
-msgid "Unknown name"
-msgstr "Неизвестное имя"
-
-msgid "Unknown country"
-msgstr "Неизвестная страна"
-
-msgid "Click to enable"
-msgstr "Щёлкните, чтобы включить"
-
-msgid "Click to disable"
-msgstr "Щёлкните, чтобы выключить"
-
-msgid "Installation"
-msgstr "Установка"
-
-msgid "Jappix installation"
-msgstr "Установка Jappix"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "Добро пожаловать в установку Jappix!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-"Этот мастер поможет вам быстро установить Jappix, первую полноценную "
-"социальную платформу на XMPP-протоколе. Для установки не требуется особых "
-"технических навыков."
-
-msgid "Installation Steps:"
-msgstr "Давайте рассмотрим порядок установки:"
-
-msgid "Welcome"
-msgstr "Добро пожаловать"
-
-msgid "Storage configuration"
-msgstr "Настройка хранилища"
-
-msgid "Administrator account"
-msgstr "Учётная запись администратора"
-
-msgid "Main configuration"
-msgstr "Основные настройки"
-
-msgid "Hosts configuration"
-msgstr "Настройка хостов"
-
-msgid "Services installation"
-msgstr "Установка сервисов"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-"Если текущий язык не совпадает с Вашим (%1s), Вы можете настроить Jabbix на "
-"%2s."
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"Если Вы хотите получить помощь по установке и настройке Jappix, Вы можете "
-"использовать полную документацию, доступную на:"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-"Пришло время создать свое социальное облако: переходите к следующему шагу!"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-"Jappix хранит постоянные данные (такие как общие файлы, журналы переписки, "
-"Вашу музыку и собственные настройки) в нескольких папках."
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-"Jappix должен иметь возможность записывать в эту папку, чтобы создавать в "
-"ней поддиректории. Вы должны установить права %1s на %2s или сменить "
-"владельца папки на %3s (в зависимости от конфигурации)."
-
-msgid "The folder is writable, you can continue!"
-msgstr "Папка доступна для записи, можно продолжать!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-"Jabbix позволяет Вам управлять конфигурацией, устанавливать новые плагины "
-"или проверять обновления. Для доступа к панели управления требуется создать "
-"учётную запись администратора."
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-"Когда Jappix будет установлен, просто щёлкните на ссылку “Управление” на "
-"главной странице для доступа к ней."
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr "Опа! Либо Вы что-то забыли, либо пароли не совпадают!"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-"Jappix требуются некоторые значения для работы. Пожалуйста, исправьте "
-"следующие строки (или оставьте по умолчанию, они подходят большинству "
-"пользователей)."
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-"Примечание: если Вы не укажете обязательное значение, автоматически будет "
-"использовано значение по умолчанию."
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-"Нужна помощь? Вам лучше прочитать страницу документации, о том, как "
-"заполнять эту форму!"
-
-msgid "User"
-msgstr "Пользователь"
-
-msgid "Service"
-msgstr "Сервис"
-
-msgid "Service name"
-msgstr "Имя сервиса"
-
-msgid "Service description"
-msgstr "Описание сервиса"
-
-msgid "Owner name"
-msgstr "Имя владельца"
-
-msgid "Owner website"
-msgstr "Веб-сайт владельца"
-
-msgid "Connection"
-msgstr "Соединение"
-
-msgid "Lock the host"
-msgstr "Заблокировать хост"
-
-msgid "Anonymous mode"
-msgstr "Анонимный режим"
-
-msgid "HTTP authentication"
-msgstr "HTTP-аутентификация"
-
-msgid "Registration allowed"
-msgstr "Регистрация разрешена"
-
-msgid "Use the built-in BOSH proxy"
-msgstr "Использовать встроенный BOSH-прокси"
-
-msgid "Manager link"
-msgstr "Ссылка “Управление”"
-
-msgid "Groupchats to join"
-msgstr "Присоединяться к групповым чатам"
-
-msgid "Suggest groupchats"
-msgstr "Предлагать групповые чаты"
-
-msgid "Encryption"
-msgstr "Шифрование"
-
-msgid "HTTPS storage"
-msgstr "HTTPS-хранилище"
-
-msgid "Force HTTPS"
-msgstr "Принудительно использовать HTTPS"
-
-msgid "Compression"
-msgstr "Сжатие"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"На этой странице можно задать сервер, с которым Jappix будет соединяться по "
-"умолчанию. Вы можете оставить его как есть, если хотите использовать "
-"официальные серверы."
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"Возможно, Вы не знаете, что такое BOSH-сервер. Фактически, это переходник "
-"между Jappix-клиентом и XMPP-сервером, необходимый в силу технических "
-"ограничений."
-
-msgid "Main host"
-msgstr "Основной хост"
-
-msgid "Groupchat host"
-msgstr "Хост конференций"
-
-msgid "Pubsub host"
-msgstr "Хост Pubsub"
-
-msgid "Anonymous host"
-msgstr "Анонимный хост"
-
-msgid "Directory host"
-msgstr "Хост директорий"
-
-msgid "BOSH host"
-msgstr "BOSH хост"
-
-msgid "WebSocket host"
-msgstr "Хост WebSocket"
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-"Вы можете установить дополнительное ПО на Вашем сервере для расширения "
-"функционала. Некоторые могут быть изменены из-за ограничений безопасности "
-"устанавливаемых по умолчанию. "
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-"Для этого Вам необходимо иметь root-доступ к консоли Вашего сервера. "
-"Помните: это необязательные модули, Jappix будет работать и без них, но "
-"некоторые возможности будут недоступны."
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-"После окончания установки, Jappix сгенерирует файлы кэша. Процесс может "
-"занять некоторое время. Не нажимайте на кнопки и подождите, пока не "
-"отобразится окно приложения."
-
-msgid "Thanks for using Jappix!"
-msgstr "Спасибо за использование Jappix"
-
-msgid "Next"
-msgstr "Далее"
-
-msgid "Finish"
-msgstr "Готово"
-
-msgid "Check again"
-msgstr "Проверить снова"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-"Папка защищена от записи. Установите права на запись для директории %s."
-
-msgid "%s is installed on your system."
-msgstr "%s установлен в Вашей системе."
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s не установлен в Вашей системе. Вам необходимо установить %2s. "
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "Максимальный размер загружаемого файла в PHP достаточен (%s)."
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-"Текущего размера загружаемого файла в PHP недостаточно (%1s). Вам следует "
-"изменить его на %2s в %3s."
-
-msgid "Jappix manager"
-msgstr "Управление Jappix"
-
-msgid "Manager access"
-msgstr "Доступ к управлению"
-
-msgid "Statistics"
-msgstr "Статистика"
-
-msgid "Hosts"
-msgstr "Хосты"
-
-msgid "Design"
-msgstr "Дизайн"
-
-msgid "Repeat"
-msgstr "Повтор"
-
-msgid "All"
-msgstr "Все"
-
-msgid "Horizontal"
-msgstr "По горизонтали"
-
-msgid "Vertical"
-msgstr "По вертикали"
-
-msgid "Center"
-msgstr "По центру"
-
-msgid "Left"
-msgstr "Слева"
-
-msgid "Right"
-msgstr "Справа"
-
-msgid "Top"
-msgstr "Сверху"
-
-msgid "Bottom"
-msgstr "Снизу"
-
-msgid "Adapt"
-msgstr "Растянуть"
-
-msgid "Color"
-msgstr "Цвет"
-
-msgid "Users"
-msgstr "Пользователи"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-"Запретная зона: только авторизованные пользователи могут управлять этим "
-"узлом Jappix."
-
-msgid "Please use the form below to login to the administration panel."
-msgstr ""
-"Используйте нижеприведенную форму для доступа к панели администрирования."
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-"В целях безопасности сессия ограничена по времени. Когда Ваш браузер будет "
-"закрыт, вы также выйдете из нее."
-
-msgid "Credentials"
-msgstr "Учётные данные"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "Вы вышли из системы. До свидания!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-"Опа! Вы не признаны действующим администратором. Проверьте Ваши учётные "
-"данные!"
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr "Ниже показаны основные статистические данные, обработанные Jappix."
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr "Здесь Вы можете изменить настройки узла Jappix."
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr "Вы можете изменить XMPP-хосты, обслуживаемые этим Jappix-узлом."
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-"Всеми хранящимися на этом Jappix-узле файлами можно управлять здесь. Вы "
-"можете выбрать поддиректорию и отредактировать её содержимое."
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr ""
-"Jappix является полностью настраиваемым. Вы можете изменить его дизайн прямо "
-"здесь."
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr ""
-"Это недопустимый формат изображения. Пожалуйста, используйте PNG, GIF или "
-"JPG!"
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr ""
-"Это недопустимый формат изображения. Пожалуйста, используйте формат PNG!"
-
-msgid "The image could not be received, would you mind retry?"
-msgstr "Изображение не может быть получено. Хотите попробовать снова?"
-
-msgid "Your service logo has been successfully changed!"
-msgstr "Ваш логотип был успешно заменён!"
-
-msgid "Your image was added to the list!"
-msgstr "Ваш рисунок был добавлен к списку!"
-
-msgid "Changes saved!"
-msgstr "Изменения сохранены!"
-
-msgid "Logo"
-msgstr "Логотип"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-"Вы можете установить собственный логотип вместо логотипа по умолчанию. "
-"Уделите внимание размеру и цвету каждого логотипа!"
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr ""
-"Загрузите логотип для каждого рекомендованного максимального размера (в "
-"пикселях)."
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-"Формат логотипа должен быть PNG. Оставьте поле пустым, чтобы не изменять "
-"логотип."
-
-msgid "Remove this logo"
-msgstr "Удалить логотип"
-
-msgid "View this logo"
-msgstr "Посмотреть логотип"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-"Вы можете определить более одного администратора для этого узла Jappix. "
-"Здесь Вы также можете сменить пароль."
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-"Здесь Вы можете обновите узел Jappix или проверить наличие обновлений. "
-"Информация о последней версии тоже отображается здесь (на английском)."
-
-msgid "Access statistics"
-msgstr "Статистика доступа"
-
-msgid "Share statistics"
-msgstr "Статистика общих папок"
-
-msgid "Other statistics"
-msgstr "Другая статистика"
-
-msgid "January"
-msgstr "Январь"
-
-msgid "February"
-msgstr "Февраль"
-
-msgid "March"
-msgstr "Март"
-
-msgid "April"
-msgstr "Апрель"
-
-msgid "May"
-msgstr "Май"
-
-msgid "June"
-msgstr "Июнь"
-
-msgid "July"
-msgstr "Июль"
-
-msgid "August"
-msgstr "Август"
-
-msgid "September"
-msgstr "Сентябрь"
-
-msgid "October"
-msgstr "Октябрь"
-
-msgid "November"
-msgstr "Ноябрь"
-
-msgid "December"
-msgstr "Декабрь"
-
-msgid "Monday"
-msgstr "Понедельник"
-
-msgid "Tuesday"
-msgstr "Вторник"
-
-msgid "Wednesday"
-msgstr "Среда"
-
-msgid "Thursday"
-msgstr "Четверг"
-
-msgid "Friday"
-msgstr "Пятница"
-
-msgid "Saturday"
-msgstr "Суббота"
-
-msgid "Sunday"
-msgstr "Воскресенье"
-
-msgid "Total"
-msgstr "Всего"
-
-msgid "Archives"
-msgstr "Архивы"
-
-msgid "Music"
-msgstr "Музыка"
-
-msgid "Backgrounds"
-msgstr "Фоны"
-
-msgid "Share"
-msgstr "Поделиться"
-
-msgid "Background"
-msgstr "Фон"
-
-msgid "Notice"
-msgstr "Уведомление"
-
-msgid "Your design preferences have been saved!"
-msgstr "Ваши настройки дизайна были сохранены!"
-
-msgid "Please check your inputs: something is missing!"
-msgstr "Пожалуйста, проверьте введённые данные: чего-то не хватает!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-"Здесь можно изменить фон Вашего узла Jappix. Вы можете установить свой цвет "
-"или загрузить изображение. Дайте волю фантазии!"
-
-msgid "Use default background"
-msgstr "Использовать фон по умолчанию."
-
-msgid "Use your own image"
-msgstr "Использовать собственное изображение"
-
-msgid "Select a background to use and change the display options."
-msgstr "Выберите фон и настройте параметры отображения."
-
-msgid "Use your own color"
-msgstr "Использовать собственный цвет"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr ""
-"Введите шеснадцатиричное значение цвета, который Вы хотите использовать в "
-"качестве фонового."
-
-msgid "Manage backgrounds"
-msgstr "Управление фоновыми изображениями"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-"Вы можете добавить новое фоновое изображение в список. Пожалуйста, "
-"используйте поддерживаемое изображение."
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr ""
-"Если вы хотите удалить фоновые изображения, отметьте их в списке ниже и "
-"нажмите кнопку “Удалить” в самом низу страницы."
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-"Вы можете установить уведомление на главной странице для всех Ваших "
-"пользователей (например, предупреждение или важное сообщение)."
-
-msgid "Simple notice"
-msgstr "Простое уведомление"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr "Это уведомление должно быть обычным текстом, код недопустим!"
-
-msgid "Advanced notice"
-msgstr "Продвинутое уведомление"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-"Вы можете настроить уведомление с помощью HTML, CSS и JavaScript, но Вам "
-"нужно написать стиль."
-
-msgid "Available updates"
-msgstr "Доступные обновления"
-
-msgid "What's new?"
-msgstr "Что нового?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr ""
-"Ваши папки хранения защищены от записи. Пожалуйста, установите "
-"соответствующие права!"
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-"%1s может вызвать проблемы с прокси. Пожалуйста, увеличьте значение %2s до "
-"%3s!"
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-"Вы используете development-версию Jappix. Обновите её из нашего репозитория, "
-"выполнив: %s."
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-"Доступна новая версия Jappix! Посмотрите, что нового, и запустите обновление!"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr "Ваша версия устарела. Обновите её до %s, щёлкнув здесь!"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"Ваша версия, похоже, самая свежая, но Вы можете проверить обновления "
-"вручную, щёлкнув здесь."
-
-msgid "Check for updates"
-msgstr "Проверить обновления"
-
-msgid "Update in progress"
-msgstr "Выполняется обновление."
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr ""
-"Jappix был обновлен: теперь у Вас запущена свежайшая версия. Наслаждайтесь!"
-
-msgid "The update has failed! Please try again later."
-msgstr "Ошибка при обновлении! Попробуйте еще раз."
-
-msgid "Downloading package..."
-msgstr "Загрузка пакета..."
-
-msgid "Removing current Jappix system files..."
-msgstr "Удаление текущих системных файлов Jappix..."
-
-msgid "Extracting package..."
-msgstr "Извлечение пакета..."
-
-msgid "Regenerating storage folder tree..."
-msgstr "Восстановление дерева каталога..."
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix обновлён!"
-
-msgid "Aborted: socket error!"
-msgstr "Прервано: ошибка сокета!"
-
-msgid "Aborted: buffer error!"
-msgstr "Прервано: ошибка буфера!"
-
-msgid "Aborted: everything is not writable!"
-msgstr "Прервано: всё защищено от записи!"
-
-msgid "Aborted: could not extract the package!"
-msgstr "Прервано: невозможно извлечь пакет!"
-
-msgid "Visits"
-msgstr "Посещения"
-
-msgid "Daily"
-msgstr "За день"
-
-msgid "Weekly"
-msgstr "За неделю"
-
-msgid "Monthly"
-msgstr "За месяц"
-
-msgid "Yearly"
-msgstr "За год"
-
-msgid "Size"
-msgstr "Размер"
-
-msgid "Clean everything"
-msgstr "Очистить всё"
-
-msgid "Purge cache"
-msgstr "Очистить кэш"
-
-msgid "Purge logs"
-msgstr "Очистить журналы"
-
-msgid "Purge sent files"
-msgstr "Удалить отправленные файлы"
-
-msgid "Purge updates"
-msgstr "Удалить обновления"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "Папка, которую Вы хотели очистить, теперь пуста!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-"Храните свой узел Jappix в чистоте и порядке, регулярно очищайте папки "
-"хранения!"
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-"Вы можете загрузить музыку (Ogg Vorbis, MP3 или WAV), чтобы слушать ее в "
-"Jappix!"
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr "Размер загружаемых файлов должен быть меньше %s."
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-"Будьте в курсе того, что хранят Ваши пользователи на Вашем сервере, и "
-"удаляйте нежелательный контент этим инструментом."
-
-msgid "Title"
-msgstr "Название"
-
-msgid "Artist"
-msgstr "Исполнитель"
-
-msgid "Album"
-msgstr "Альбом"
-
-msgid "File"
-msgstr "Файл"
-
-msgid "Upload"
-msgstr "Загрузить"
-
-msgid "The folder is empty."
-msgstr "Эта папка пуста."
-
-msgid "The music could not be received, please retry!"
-msgstr "Не удалось получить музыку. Пожалуйста, попробуйте снова!"
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-"Это недопустимый аудио-файл. Пожалуйста, используйте Ogg Vorbis, MP3 или WAV!"
-
-msgid "Your music has been added!"
-msgstr "Ваша музыка добавлена!"
-
-msgid "The selected elements have been removed."
-msgstr "Выбранный элемент был удалён."
-
-msgid "You must select elements to remove!"
-msgstr "Выберите удаляемые элементы!"
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-"Вы можете добавить нового пользователя или изменить пароль (если введёте имя "
-"существующего пользователя). Используйте сложный пароль!"
-
-msgid "Manage"
-msgstr "Управление"
-
-msgid "List"
-msgstr "Список"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-"Здесь Вы можете удалить пользователей. Обратите внимание, Вы не можете "
-"удалить единственного оставшегося пользователя."
-
-msgid "The user has been added!"
-msgstr "Пользователь добавлен!"
-
-msgid "The chosen users have been removed."
-msgstr "Выбранные пользователи удалены."
-
-msgid "You must select one or more users to be removed!"
-msgstr "Выберите хотя бы одного пользователя для удаления!"
-
-msgid "Yesterday"
-msgstr "Вчера"
-
-msgid "%s days ago"
-msgstr "%s дней назад"
-
-msgid "User currently active"
-msgstr "Сейчас активен"
-
-msgid "Last seen: %s"
-msgstr "Последний раз был: %s"
-
-msgid "Inactive since: %s"
-msgstr "Бездействует с %s"
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr "Похоже, Ваш друг не получил Ваше сообщение!"
-
-msgid "Static content server"
-msgstr "Сервер статического содержимого"
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr "Это сервер статического контента для %1, “%2s”."
-
-msgid "User uploads server"
-msgstr "Сервер пользовательских загрузок"
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr "Это сервер пользовательских загрузок для %1s, “%2s”."
-
-msgid "Suggested friends"
-msgstr "Рекомендованные друзья"
-
-msgid "Check all"
-msgstr "Отметить все"
-
-msgid "Uncheck all"
-msgstr "Отменить выбор"
-
-msgid "Choose"
-msgstr "Выберите"
-
-msgid "List name"
-msgstr "Название списка"
-
-msgid "Allow"
-msgstr "Разрешить"
-
-msgid "Deny"
-msgstr "Запретить"
-
-msgid "Group"
-msgstr "Группа"
-
-msgid "Subscription"
-msgstr "Подписка"
-
-msgid "Both"
-msgstr "Оба"
-
-msgid "From"
-msgstr "От"
-
-msgid "Everybody"
-msgstr "Все"
-
-msgid "Send messages"
-msgstr "Отправлять сообщения"
-
-msgid "Send queries"
-msgstr "Отправлять запросы"
-
-msgid "See my status"
-msgstr "Видеть мой статус"
-
-msgid "Send his/her status"
-msgstr "Отправлять статус"
-
-msgid "Everything"
-msgstr "Всё"
-
-msgid "Item"
-msgstr "Элемент"
-
-msgid "Order"
-msgstr "Порядок"
-
-msgid "Active for this session"
-msgstr "Активный на сессию"
-
-msgid "Always active"
-msgstr "Всегда активный"
-
-msgid "User directory"
-msgstr "Каталог пользователей"
-
-msgid "Search a friend"
-msgstr "Найти друзей"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-"Запрошенная функция не реализована получателем или сервером, поэтому не "
-"может быть обработана."
-
-msgid "Send him/her a message"
-msgstr "Отправить ему/ей сообщение"
-
-msgid "Start a chat with him/her"
-msgstr "Начать беседу с ним/ней"
-
-msgid "Available shortcuts:"
-msgstr "Доступные ярлыки:"
-
-msgid "%s removes the chat logs"
-msgstr "%s удаляет журналы бесед"
-
-msgid "%s joins a groupchat"
-msgstr "%s присоединяет к групповому чату"
-
-msgid "%s closes the chat"
-msgstr "%s закрывает чат"
-
-msgid "%s shows the user profile"
-msgstr "%s отображает профиль пользователя"
-
-msgid "%s sends a message to the room"
-msgstr "%s отправляет сообщение в комнату"
-
-msgid "%s changes your nickname"
-msgstr "%s изменяет Ваш псевдоним"
-
-msgid "%s sends a message to someone in the room"
-msgstr "%s отправляет сообщение кому-то из комнаты"
-
-msgid "%s changes the room topic"
-msgstr "%s изменяет тему комнаты"
-
-msgid "%s kicks a user of the room"
-msgstr "%s выгоняет пользователя из комнаты"
-
-msgid "%s bans a user of the room"
-msgstr "%s не пускает пользователя в комнату"
-
-msgid "%s invites someone to join the room"
-msgstr "%s приглашает кого-то войти в комнату"
-
-msgid "Public profile"
-msgstr "Публичный профиль"
-
-msgid "Your profile anywhere on the Web."
-msgstr "Ваш профиль везде с вами."
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-"%s – это служба Jappix.com, которая делает Ваш XMPP-профиль публичным. Таким "
-"профилем легче делиться. Для просмотра Вашего канала, местоположения и "
-"контактных данных, не требуется учётная запись XMPP."
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-"Более того, каждое изображение, которое Вы публикуете в Вашем канале, "
-"добавляется в красивую галерею. Теперь Вы можете просматривать все "
-"изображения, публикуемые Вами год за годом."
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-"Вы также можете использовать Ваш XMPP-аватар в качестве единого аватара на "
-"всех сайтах, блогах и форумах. При изменении его в XMPP, новый аватар "
-"появляется везде. Здорово, не правда ли?"
-
-msgid "Yay, let's create your public profile!"
-msgstr "Конечно! Создать публичный профиль!"
-
-msgid "Enable my public profile"
-msgstr "Включить мой публичный профиль"
-
-msgid "Jappix for your phone"
-msgstr "Jappix для Вашего телефона"
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr "Единое приложение для сообщений, каналов, профилей и многого другого!"
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-"Это информационное уведомление. Данные, на которые оно ссылается, могут быть "
-"недоступны."
-
-msgid "You haven't provided any file to download"
-msgstr "Вы не предоставили на одного файла для скачивания"
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr "Вы не можете скачать файл, если не предоставите ключ"
-
-msgid "Woah this file isn't found, please double check"
-msgstr "Ой, этот файл не найден. Пожалуйста, перепроверьте"
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr ""
-"Ключ, которые Вы предоставили, не даёт разрешения на скачивание этого файла"
-
-msgid "Statistics are currently disabled in the settings."
-msgstr "Статистика выключена в настройках."
-
-msgid "New event!"
-msgstr "Новое событие!"
-
-msgid "%s is typing..."
-msgstr "%s набирает..."
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr "Вы ввели неверный код доступа. Попытайтесь ввести другой."
-
-msgid "The username you picked is not available. Please try another one."
-msgstr "Имя, которые Вы выбрали, недоступно. Попробуйте другое."
-
-msgid "There was an error registering your account. Please retry."
-msgstr "Ошибка при регистрации Вашей учётной записи. Попробуйте ещё раз."
-
-msgid "Username"
-msgstr "Имя пользователя"
-
-msgid "Enter password"
-msgstr "Введите пароль"
-
-msgid "Once again..."
-msgstr "Ещё раз..."
-
-msgid "Code"
-msgstr "Код"
-
-msgid "Security code"
-msgstr "Код доступа"
-
-msgid "Advertising space available!"
-msgstr "Доступно рекламное пространство!"
-
-msgid "Advertise here"
-msgstr "Поместить рекламу здесь"
-
-msgid "Analytics (%s)"
-msgstr "Аналитика (%s)"
-
-msgid "Track visits"
-msgstr "Отслеживать посещения"
-
-msgid "Piwik URL"
-msgstr "Piwik URL"
-
-msgid "Piwik tracking ID"
-msgstr "Piwik tracking ID"
-
-msgid "Advertising (%s)"
-msgstr "Реклама (%s)"
-
-msgid "Enable ads"
-msgstr "Включить рекламу"
-
-msgid "Standard ads key"
-msgstr "Standard ads key"
-
-msgid "Content ads key"
-msgstr "Content ads key"
-
-msgid "AdSense client ID"
-msgstr "Идентификатор клиента AdSense"
-
-msgid "AdSense slot"
-msgstr "Слот AdSense"
-
-msgid "Stop"
-msgstr "Остановить"
-
-msgid "Mute"
-msgstr "Выключить звук"
-
-msgid "Unmute"
-msgstr "Включить звук"
-
-msgid "Is calling you"
-msgstr "Вызывает"
-
-msgid "Initiating call"
-msgstr "Инициализация вызова"
-
-msgid "Connecting to call..."
-msgstr "Подключение..."
-
-msgid "Waiting..."
-msgstr "Ожидание..."
-
-msgid "Ringing..."
-msgstr "Звоним..."
-
-msgid "Declined the call"
-msgstr "Отклонил вызов"
-
-msgid "Call error"
-msgstr "Ошибка вызова"
-
-msgid "Ended the call"
-msgstr "Завершил вызов"
-
-msgid "Call ended"
-msgstr "Вызов завершён"
-
-msgid "Call canceled"
-msgstr "Вызов отменён"
-
-msgid "Canceled the call"
-msgstr "Отменил вызов"
-
-msgid "Is already in a call"
-msgstr "Уже разговаривает"
-
-msgid "Ending call..."
-msgstr "Завершение вызова..."
-
-msgid "Accept"
-msgstr "Принять"
-
-msgid "Decline"
-msgstr "Отклонить"
-
-msgid "Okay"
-msgstr "Хорошо"
-
-msgid "Retry"
-msgstr "Повторить"
-
-msgid "Audio Call"
-msgstr "Аудиовызов"
-
-msgid "Video Call"
-msgstr "Видеовызов"
diff --git a/i18n/sk/LC_MESSAGES/main.mo b/i18n/sk/LC_MESSAGES/main.mo
deleted file mode 100644
index 2ab5b613..00000000
--- a/i18n/sk/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/sk/LC_MESSAGES/main.po b/i18n/sk/LC_MESSAGES/main.po
deleted file mode 100644
index bf7f6100..00000000
--- a/i18n/sk/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2350 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:21+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Slovak (http://www.transifex.com/projects/p/jappix/language/"
-"sk/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: sk\n"
-"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "default:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"Vo vašom prehliadači chýba JavaScript, takže nebude možné spustiť Jappix! "
-"Prosím napravte to."
-
-msgid "Social channel, chat and more."
-msgstr ""
-
-msgid "Create your public profile."
-msgstr ""
-
-msgid "A mini-chat for your website."
-msgstr ""
-
-msgid "Get Jappix, get support."
-msgstr ""
-
-msgid "Statistics around Jappix."
-msgstr ""
-
-msgid "Legal disclaimer for Jappix."
-msgstr ""
-
-msgid "Download Jappix for free."
-msgstr ""
-
-msgid "Contribute to the Jappix code."
-msgstr ""
-
-msgid "Jappix for your company."
-msgstr ""
-
-msgid "Find a public Jappix node."
-msgstr ""
-
-msgid "Credits"
-msgstr ""
-
-msgid "Association"
-msgstr ""
-
-msgid "Web agency"
-msgstr ""
-
-msgid "Legal"
-msgstr ""
-
-msgid "Legal disclaimer"
-msgstr ""
-
-msgid "Terms of use and legal"
-msgstr ""
-
-msgid "Owner"
-msgstr ""
-
-msgid "Node owner"
-msgstr ""
-
-msgid "By using our service, you accept %s."
-msgstr ""
-
-msgid "our terms of use"
-msgstr ""
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Jappix bol prerušený problémom so sieťou, chybou alebo nesprávnym "
-"prihlásením (skontrolujte či sú zadané údaje správne). Ospravedlňujeme sa za "
-"nepríjemnosti."
-
-msgid "The element list on this server could not be obtained!"
-msgstr "Zoznam komponentov na tomto serveri nie je možné získať!"
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"Vaše heslo bolo zmenené, teraz sa môžete prihlásiť k vášmu účtu s novými "
-"prihlasovacími údajmi."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "Váš XMPP účet bol zmazaný, dovidenia!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "Boli ste odhlásený z vášho XMPP účtu, prajem pekný deň!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr "Zdá sa, že miestnosť do ktorej ste vstúpili neexistuje, Vytvárate ju!"
-
-msgid "The groupchat has been removed."
-msgstr ""
-"Skupinový rozhovor bol odstránený, teraz ho bude môcť vytvoriť niekto iný."
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "Užívateľ, ktorého chcete zastihnúť sa v tejto miestnosti nenachádza"
-
-msgid "Please enter the group chat address to join."
-msgstr ""
-"Prosím, vyplňte adresu skupinového rozhovoru ku ktorému sa chcete pripojiť"
-
-msgid "Please enter your nickname to join %s."
-msgstr "Prosím, vyplňte prezývku pre pripojenie do %s."
-
-msgid "This room (%s) is protected with a password."
-msgstr "Táto miestnosť (%s) je chránená heslom."
-
-msgid "Your browser is out of date!"
-msgstr "Váš prehliadač je zastaralý"
-
-msgid "Last %s version is better!"
-msgstr "Posledná %s verzia je lepšia!"
-
-msgid "Login"
-msgstr "Prihlásenie"
-
-msgid "Register"
-msgstr "Registrácia"
-
-msgid "Here we go!"
-msgstr "Poďme na to!"
-
-msgid "Server"
-msgstr "Server"
-
-msgid "Password"
-msgstr "Heslo"
-
-msgid "Remember me"
-msgstr "Zapamätaj si ma"
-
-msgid "This tool has been disabled!"
-msgstr "Táto možnosť bola zakázaná, nemôžete ju použiť!"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr "Pre problémy so sieťou ste boli odhlásený, Čo chcete robiť?"
-
-msgid "Reconnect"
-msgstr "Znovu pripojiť"
-
-msgid "Messages"
-msgstr "Správy"
-
-msgid "Profile"
-msgstr "Profil"
-
-msgid "Options"
-msgstr "Možnosti"
-
-msgid "Disconnect"
-msgstr "Odpojiť"
-
-msgid "Filter"
-msgstr "Filter"
-
-msgid "Add a friend"
-msgstr "Pridať priateľa"
-
-msgid "Your groupchats"
-msgstr "Vaše skupinové rozhovory"
-
-msgid "Manage your favorite groupchats"
-msgstr "Spravovať vaše obľúbené skupinové rozhovory"
-
-msgid "More stuff"
-msgstr "Ďalšie možnosti"
-
-msgid "Show all friends"
-msgstr "Zobraziť všetkých priateľov"
-
-msgid "Only show connected friends"
-msgstr "Zobraziť iba pripojených priateľov"
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "Archív správ"
-
-msgid "Date"
-msgstr "Dátum"
-
-msgid "A short message?"
-msgstr "Krátka správa?"
-
-msgid "How are you?"
-msgstr "Ako sa máš?"
-
-msgid "What are you doing?"
-msgstr "Čo robíš?"
-
-msgid "Join a chat"
-msgstr "Začať rozhovor"
-
-msgid "Status"
-msgstr "Status"
-
-msgid "Available"
-msgstr "Prihlásený"
-
-msgid "Talkative"
-msgstr "Zhovorčivý"
-
-msgid "Away"
-msgstr "Neprítomný"
-
-msgid "Not available"
-msgstr "Neprihlásený"
-
-msgid "Busy"
-msgstr "Zaneprázdnený"
-
-msgid "Offline"
-msgstr ""
-
-msgid "Mood"
-msgstr "Nálada"
-
-msgid "None"
-msgstr "Nič"
-
-msgid "Crazy"
-msgstr "Bláznivá"
-
-msgid "Excited"
-msgstr "Vzrušenie"
-
-msgid "Playful"
-msgstr "Hravá"
-
-msgid "Happy"
-msgstr "Šťastný"
-
-msgid "Shocked"
-msgstr "Šokovaný"
-
-msgid "Hot"
-msgstr "Nažhavený"
-
-msgid "Sad"
-msgstr "Smutný"
-
-msgid "Amorous"
-msgstr "Zamilovaný"
-
-msgid "Confident"
-msgstr "Dôverčivý"
-
-msgid "Activity"
-msgstr "Aktivita"
-
-msgid "Chores"
-msgstr "Fuška"
-
-msgid "Drinking"
-msgstr "Pije"
-
-msgid "Eating"
-msgstr "Jedenie"
-
-msgid "Exercising"
-msgstr "Vzdelávanie"
-
-msgid "Grooming"
-msgstr "Starostlivosť"
-
-msgid "Appointment"
-msgstr "Stretnutie"
-
-msgid "Inactive"
-msgstr "Neaktívny"
-
-msgid "Relaxing"
-msgstr "Relax"
-
-msgid "Talking"
-msgstr "Rozhovor"
-
-msgid "Traveling"
-msgstr "Cestovanie"
-
-msgid "Working"
-msgstr "Práca"
-
-msgid "View profile"
-msgstr "Zobraziť profil"
-
-msgid "This is a repeat from %s"
-msgstr ""
-
-msgid "Repeat this notice"
-msgstr "Zopakovať toto upozornenie"
-
-msgid "Remove this notice"
-msgstr "Odstrániť toto upozornenie"
-
-msgid "Your profile"
-msgstr "Váš profil"
-
-msgid "Identity"
-msgstr "Identita"
-
-msgid "Profile image"
-msgstr "Profilová fotka"
-
-msgid "Others"
-msgstr "Iné"
-
-msgid "Other"
-msgstr ""
-
-msgid "Personal"
-msgstr "Osobné"
-
-msgid "Complete name"
-msgstr "Celé meno"
-
-msgid "Nickname"
-msgstr "Prezývka"
-
-msgid "First name"
-msgstr "Meno"
-
-msgid "Last name"
-msgstr "Priezvisko"
-
-msgid "Date of birth"
-msgstr "Dátum narodenia"
-
-msgid "Contact"
-msgstr "Kontakt"
-
-msgid "E-mail"
-msgstr "E-mail"
-
-msgid "Phone"
-msgstr "Telefón"
-
-msgid "Website"
-msgstr "Webstránka"
-
-msgid "Current"
-msgstr "Momentálne"
-
-msgid "Delete"
-msgstr "Zmazať"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr "Aká škoda! Nemáte nastavenú profilovú fotku vo vašej vizitke!"
-
-msgid "Address"
-msgstr "Adresa"
-
-msgid "Street"
-msgstr "Ulica"
-
-msgid "City"
-msgstr "Mesto"
-
-msgid "Postal code"
-msgstr "PSČ"
-
-msgid "Country"
-msgstr "Krajina"
-
-msgid "Biography"
-msgstr "Biografia"
-
-msgid "Important notice"
-msgstr "Dôležitý oznam"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr ""
-"Nie všetko je súkromné v XMPP; toto je jedna z týchto vecí, váš verejný "
-"profil (vCard)"
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"Odporúčame nahrať profilovku (%s maximum), napríklad vašu fotku, aby vás "
-"priatelia ľahšie rozpoznali."
-
-msgid "Save"
-msgstr "Uložiť"
-
-msgid "Cancel"
-msgstr "Zrušiť"
-
-msgid "Edit options"
-msgstr "Upraviť možnosti"
-
-msgid "Channel"
-msgstr "Kanál"
-
-msgid "Commands"
-msgstr "Príkazy"
-
-msgid "Sounds"
-msgstr "Zvuky"
-
-msgid "Privacy"
-msgstr "Súkromie"
-
-msgid "Message archiving"
-msgstr "Archivácia správ"
-
-msgid "Store an history of your chats"
-msgstr ""
-
-msgid "Geolocation"
-msgstr "Geolokácia"
-
-msgid "Disabled"
-msgstr ""
-
-msgid "Store all chats"
-msgstr ""
-
-msgid "Store friend chats"
-msgstr ""
-
-msgid "Remove all archives"
-msgstr ""
-
-msgid "Empty"
-msgstr "Vymazanie"
-
-msgid "Empty channel"
-msgstr "Vymazať kanál"
-
-msgid "Persistent"
-msgstr "Natrvalo"
-
-msgid "Maximum notices"
-msgstr "Maximum upozornení"
-
-msgid "Account"
-msgstr "Účet"
-
-msgid "Change password"
-msgstr "Zmeniť heslo"
-
-msgid "Delete account"
-msgstr "Zmazať účet"
-
-msgid "Old"
-msgstr "Staré"
-
-msgid "New (2 times)"
-msgstr "Nové (2 krát)"
-
-msgid "Suggested chatrooms"
-msgstr ""
-
-msgid "Skip"
-msgstr ""
-
-msgid "Continue"
-msgstr "Pokračuj"
-
-msgid "To"
-msgstr "Komu"
-
-msgid "Close"
-msgstr "Zavrieť"
-
-msgid "unknown"
-msgstr "neznáme"
-
-msgid "Unavailable"
-msgstr "Nie je k dispozícii"
-
-msgid "is now"
-msgstr "je teraz"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Prosím počkajte pokiaľ sa nahrá váš avatar.."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "Tu je! Nová krásna profilová fotka!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "Súbor s obrázkom nie je podporovaný alebo má nesprávnu veľkosť"
-
-msgid "Reply"
-msgstr "Odpovedať"
-
-msgid "Error"
-msgstr "Chyba"
-
-msgid "Click here to solve the error"
-msgstr "Kliknite sem pre riešenie problému"
-
-msgid "You"
-msgstr "Ty"
-
-msgid "Remove"
-msgstr "Odstrániť"
-
-msgid "Rename"
-msgstr "Premenovať"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Ahoj, Ja som %s, chcem si ťa pridať ako priateľa"
-
-msgid "Smiley insertion"
-msgstr "Smajlíci"
-
-msgid "Change style"
-msgstr "Zmeň štýl"
-
-msgid "Text in bold"
-msgstr "Tučné"
-
-msgid "Text in italic"
-msgstr "Italic"
-
-msgid "Underlined text"
-msgstr "Podčiarknuté"
-
-msgid "Send a file"
-msgstr ""
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr ""
-
-msgid "Save chat"
-msgstr "Uložiť rozhovor"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"Klikni na nasledujúci link pre vytvorenie logu a počkaj. Potom klikni znova "
-"pre prevzatie súboru."
-
-msgid "This chat is empty!"
-msgstr "Tento rozhovor je prázdny"
-
-msgid "Generate file!"
-msgstr "Vygeneruj súbor!"
-
-msgid "Download file!"
-msgstr "Stiahni súbor!"
-
-msgid "Clean current chat"
-msgstr "Vyčisti prebiehajúci rozhovor"
-
-msgid "Show user profile"
-msgstr "Ukáž používateľov profil"
-
-msgid "Add this contact to your friends"
-msgstr "Pridaj tento kontakt medzi priateľov"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Pridať tento skupinový rozhovor k obľúbeným"
-
-msgid "All tabs"
-msgstr "Všetky karty"
-
-msgid "Join groupchat"
-msgstr ""
-
-msgid "Close this tab"
-msgstr "Zavrieť túto kartu"
-
-msgid "no subject defined for this room."
-msgstr "Nebol nastavený predmet pre túto miestnosť"
-
-msgid "Administration panel for this room"
-msgstr "Panel administrácie pre túto miestnosť"
-
-msgid "Moderators"
-msgstr "Moderátori"
-
-msgid "Participants"
-msgstr "Členovia"
-
-msgid "Visitors"
-msgstr "Návštevníci"
-
-msgid "Manage favorite rooms"
-msgstr "Spravovať obľúbené skupinové rozhovory"
-
-msgid "Change favorites"
-msgstr "Zmeniť obľúbené"
-
-msgid "Search a room"
-msgstr "Prehľadať miestnosť"
-
-msgid "Select a favorite"
-msgstr "Vyber obľúbené"
-
-msgid "Getting the name..."
-msgstr "Získavam meno..."
-
-msgid "Gateway"
-msgstr "Brána"
-
-msgid "Name"
-msgstr "Meno"
-
-msgid "Room"
-msgstr "Miestnosť"
-
-msgid "Add"
-msgstr "Pridať"
-
-msgid "Edit"
-msgstr "Upraviť"
-
-msgid "Search a room on"
-msgstr "Hľadať miestnosť na"
-
-msgid "No room found on this server."
-msgstr "Žiadna miestnosť sa nenašla na tomto serveri"
-
-msgid "Service discovery"
-msgstr "Vyhľadávanie služieb"
-
-msgid "Server to query"
-msgstr "Server na prehľadanie"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "Ospravedňujeme sa, ale výraz nevrátil žiaden výsledok"
-
-msgid "Accounts"
-msgstr "Účty"
-
-msgid "Authentications"
-msgstr "Autentifikácia"
-
-msgid "Automation"
-msgstr "Automatizácia"
-
-msgid "Clients"
-msgstr "Klienti"
-
-msgid "Collaboration"
-msgstr "Spolupráca"
-
-msgid "Components"
-msgstr "Komponenty"
-
-msgid "Rooms"
-msgstr "Miestnosti"
-
-msgid "Directories"
-msgstr "Adresáre"
-
-msgid "Gateways"
-msgstr "Brány"
-
-msgid "News"
-msgstr "Novinky"
-
-msgid "Hierarchy"
-msgstr "Hierarchia"
-
-msgid "Proxies"
-msgstr "Proxy servery"
-
-msgid "Publication/Subscription"
-msgstr "Publikovanie/Odoberanie"
-
-msgid "Storage"
-msgstr "Úložisko"
-
-msgid "Service offline or broken"
-msgstr "Služba je vypnutá alebo nefunkčná"
-
-msgid "Your inbox"
-msgstr "Vaše prijaté správy"
-
-msgid "Available actions"
-msgstr "Dostupné akcie"
-
-msgid "Clean"
-msgstr "Vyčistiť"
-
-msgid "New"
-msgstr "Nová"
-
-msgid "Received"
-msgstr "Prijaté"
-
-msgid "Subject"
-msgstr "Predmet"
-
-msgid "Content"
-msgstr "Obsah"
-
-msgid "Send message"
-msgstr "Poslať správu"
-
-msgid "Your inbox is empty."
-msgstr "Vaša schránka prijatých správ je prázdna"
-
-msgid "MUC administration"
-msgstr "MUC administrácia"
-
-msgid "You administrate this room"
-msgstr "Spravujete túto miestnosť"
-
-msgid "Enter new subject"
-msgstr "Vložte nový predmet"
-
-msgid "Configuration"
-msgstr "Konfigurácia"
-
-msgid "Authorizations"
-msgstr "Autorizácia"
-
-msgid "Member list"
-msgstr "Zoznam členov"
-
-msgid "Owner list"
-msgstr "Zoznam vlastníkov"
-
-msgid "Administrator list"
-msgstr "Zoznam administrátorov"
-
-msgid "Outcast list"
-msgstr "Zoznam neželaných"
-
-msgid "Add an input"
-msgstr "Pridaj člena"
-
-msgid "Destroy this MUC"
-msgstr "Znič toto MUC"
-
-msgid "Yes, let's do it!"
-msgstr "Áno, do toho!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "Váš priateľ sleduje konverzáciu"
-
-msgid "Your friend is writing a message..."
-msgstr "Váš priateľ píše..."
-
-msgid "Your friend stopped writing a message."
-msgstr "Váš priateľ prestal písať."
-
-msgid "Your friend is doing something else."
-msgstr "Váš priateľ robí niečo iné."
-
-msgid "Your friend closed the chat."
-msgstr "Váš priateľ zavrel rozhovor"
-
-msgid "Requesting this service..."
-msgstr "Požaduje túto službu.."
-
-msgid "Loading"
-msgstr "Načítava"
-
-msgid "changed his/her nickname to %s"
-msgstr ""
-
-msgid "joined the chat room"
-msgstr "vstúpil do miestnosti"
-
-msgid "left the chat room"
-msgstr "opustil miestnosť"
-
-msgid "%s left"
-msgstr ""
-
-msgid "%s joined"
-msgstr ""
-
-msgid "no status"
-msgstr "bez statusu"
-
-msgid "has been kicked"
-msgstr "bol vykopnutý"
-
-msgid "has been banned"
-msgstr "bol zabanovaný"
-
-msgid "no reason"
-msgstr "neudaný dôvod"
-
-msgid "Communicate with the entire world!"
-msgstr "Komunikujte s celým svetom!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-"Umožní vám byť v kontakte s miliónmi užívateľov, ktorí práve využívajú XMPP "
-"sieť ako vy s Jappix. Pridajte sa ku komunite a zostaňte voľný!"
-
-msgid "Hi there!"
-msgstr "Ahoj!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr "Prihlás sa do svojho existujúceho XMPP účtu alebo vytvor nový zadarmo!"
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-"Prihlás sa do svojho existujúceho XMPP účtu. Taktiež možeš použiť %s pre "
-"pripojenie ku skupinovému rozhovoru"
-
-msgid "Previous"
-msgstr "Predchádzajúce"
-
-msgid "General"
-msgstr "Všeobecné"
-
-msgid "Advanced"
-msgstr "Pokročilé"
-
-msgid "Resource"
-msgstr "Zdroj"
-
-msgid "Priority"
-msgstr "Priorita"
-
-msgid "Low"
-msgstr "Nízka"
-
-msgid "Medium"
-msgstr "Stredná"
-
-msgid "High"
-msgstr "Vysoká"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-"Zadajte názov skupinového rozhovoru ku ktorému sa chcete pridať a prezývku "
-"akú chcete. Alebo sa môžete vrátiť na %s."
-
-msgid "login page"
-msgstr "prihlásenie"
-
-msgid "Share this link with your friends:"
-msgstr "Zdieľaj tento odkaz s priateľmi:"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-"Zaregistruj nový XMPP účet a spoj sa s priateľmi vo svojej vlastnej "
-"socialnej sieti. Je to ednoduché!"
-
-msgid "Required"
-msgstr "Povinné"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "Boli ste zaregistrovaný, tu je vaša XMPP adresa:"
-
-msgid "Manager"
-msgstr "Správca"
-
-msgid "Encrypted"
-msgstr "Šifrovane"
-
-msgid "Unencrypted"
-msgstr "Nešifrované"
-
-msgid "Where are you?"
-msgstr "Kde ste?"
-
-msgid "What's up with you?"
-msgstr "Čo je s vami?"
-
-msgid "Type something you want to share with your friends..."
-msgstr ""
-
-msgid "Fetching the social channel..."
-msgstr "Preberanie kanálu..."
-
-msgid "You are synchronized with your network."
-msgstr "Ste synchronizovaný s vašou sieťou"
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "Nemôžete nič odoslať: môžete iba príjmať správy!"
-
-msgid "Media viewer"
-msgstr "Prehliadač médii"
-
-msgid "Browse"
-msgstr "Prehľadať"
-
-msgid "Command"
-msgstr "Príkaz"
-
-msgid "Subscribe"
-msgstr "Odoberať"
-
-msgid "Join"
-msgstr "Pridať sa"
-
-msgid "Automatic"
-msgstr "Automaticky"
-
-msgid "Search"
-msgstr "Hľadať"
-
-msgid "No result!"
-msgstr "Žiadne výsledky!"
-
-msgid "No notifications."
-msgstr "Žiadne upozornenia"
-
-msgid "would like to add you as a friend."
-msgstr "si vás chce pridať ako priateľa"
-
-msgid "would like you to join this chatroom:"
-msgstr "chce aby ste vstúpili do miestnosti:"
-
-msgid "Do you accept?"
-msgstr "Súhlasíte?"
-
-msgid "Yes"
-msgstr "Áno"
-
-msgid "No"
-msgstr "Nie"
-
-msgid "would like to get authorization."
-msgstr "žiada o povolenie."
-
-msgid "would like to send you a file: “%s”."
-msgstr ""
-
-msgid "has received a file exchange request: “%s”."
-msgstr ""
-
-msgid "has accepted to receive your file: “%s”."
-msgstr ""
-
-msgid "has rejected to receive your file: “%s”."
-msgstr ""
-
-msgid "could not receive your file: “%s”."
-msgstr ""
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr "Chcete vidieť priateľov, ktorých vám %s navrhuje? "
-
-msgid "commented an item you follow: “%s”."
-msgstr ""
-
-msgid "liked your post: “%s”."
-msgstr ""
-
-msgid "quoted you somewhere: “%s”."
-msgstr ""
-
-msgid "published on your wall: “%s”."
-msgstr ""
-
-msgid "tagged you in a photo (%s)."
-msgstr ""
-
-msgid "tagged you in a video (%s)."
-msgstr ""
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-
-msgid "Open"
-msgstr ""
-
-msgid "Show"
-msgstr ""
-
-msgid "Hide"
-msgstr ""
-
-msgid "Submit"
-msgstr "Povoliť"
-
-msgid "Client"
-msgstr "Klient"
-
-msgid "System"
-msgstr "Systém"
-
-msgid "Local time"
-msgstr "Lokálny čas"
-
-msgid "Comments"
-msgstr "Komentáre"
-
-msgid "User profile"
-msgstr "Užívateľov profil"
-
-msgid "See his/her position on the globe"
-msgstr "Zobraz jeho/jej pozíciu na zemeguli"
-
-msgid "Confirm"
-msgstr "Potvrdiť"
-
-msgid "anonymous mode"
-msgstr "anonymný mód"
-
-msgid "Groups"
-msgstr "Skupiny"
-
-msgid "Unclassified"
-msgstr "Nezaradené"
-
-msgid "Authorize"
-msgstr "Povoliť"
-
-msgid "Ask for authorization"
-msgstr "Požiadaj o povolenie"
-
-msgid "Unblock"
-msgstr "Odblokovať"
-
-msgid "Prohibit"
-msgstr "Zakázať"
-
-msgid "Block"
-msgstr "Blokovať"
-
-msgid "Chat"
-msgstr "Rozhovor"
-
-msgid "Groupchat"
-msgstr "Skupinový rozhovor"
-
-msgid "Jappix Mobile"
-msgstr "Jappix Mobile"
-
-msgid "Desktop"
-msgstr "Počítač"
-
-msgid "Mobile"
-msgstr "Mobil"
-
-msgid "Please wait..."
-msgstr "Čakajte prosím..."
-
-msgid "Please enable JavaScript"
-msgstr "Povoľte JavaScript prosím"
-
-msgid "Show comments"
-msgstr ""
-
-msgid "Loading comments..."
-msgstr ""
-
-msgid "Could not get the comments!"
-msgstr ""
-
-msgid "Comments locked!"
-msgstr ""
-
-msgid "Type your comment here..."
-msgstr ""
-
-msgid "Your channel"
-msgstr "Váš kanál"
-
-msgid "Channel of"
-msgstr "Kanál užívateľa"
-
-msgid "More notices..."
-msgstr "Ďaľšie upozornenia..."
-
-msgid "Attach a file"
-msgstr "Pripojiť súbor"
-
-msgid "Send"
-msgstr "Odoslať"
-
-msgid "Unattach the file"
-msgstr "Odpojiť súbor"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-"Stala sa chyba počas nahrávania vášho súboru: možno je príliš veľký ($s "
-"maximum) alebo zakázaný!"
-
-msgid "Authorization failed"
-msgstr "Overenie zlyhalo"
-
-msgid "Registration failed, please choose a different username"
-msgstr "Registrácia zlyhala, zvoľte prosím iné užívateľské meno"
-
-msgid "Service unavailable"
-msgstr "Služba je nedostupná"
-
-msgid "Internal server error, try later"
-msgstr "Internal server error, skúste neskôr"
-
-msgid "Your form has been sent."
-msgstr "Váš formulár bol odoslaný"
-
-msgid "Application"
-msgstr "Aplikácia"
-
-msgid "Media integration"
-msgstr ""
-
-msgid "Keep local chat archives"
-msgstr ""
-
-msgid "XMPP links"
-msgstr "XMPP odkaz"
-
-msgid "Open XMPP links with Jappix"
-msgstr "Otvoriť XMPP odkazy pomocou Jappix"
-
-msgid "changed the subject to:"
-msgstr "zmenil predmet na"
-
-msgid "Welcome!"
-msgstr "Vitajte!"
-
-msgid "Friends"
-msgstr "Priatelia"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr ""
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-"Skôr než ju začnete používať, mali by ste zmeniť niektoré nastavenia, "
-"vyhľadať priateľov a vyplniť svoj profil."
-
-msgid "Enable notification sounds"
-msgstr "Povoliť zvuk upozornení"
-
-msgid "Share your position on the globe"
-msgstr "Zdieľať svoju polohu na zemeguli"
-
-msgid "Offline friends"
-msgstr "Odpojení priatelia"
-
-msgid "Don't hide offline friends"
-msgstr "Neskrývať odpojených priateľov"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-"Použite tento nástroj na vyhľadanie vašich priateľov na serveri, ktorý "
-"používate, alebo ich pridajte neskôr."
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr "Výborne! Teraz môžte zdielať Jappix s priateľmi!"
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-
-msgid "Share Jappix on %s"
-msgstr "Zdieľať Jappix na %s"
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "Používam Jappix, otvorenú socialnu platformu. Ja som %s!"
-
-msgid "Unknown name"
-msgstr "Neznáme meno"
-
-msgid "Unknown country"
-msgstr "Neznáma krajina"
-
-msgid "Click to enable"
-msgstr "Klikni pre zapnutie"
-
-msgid "Click to disable"
-msgstr "Klikni pre vypnutie"
-
-msgid "Installation"
-msgstr "Inštalácia"
-
-msgid "Jappix installation"
-msgstr "Jappix inštalácia"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "Vitajte v Jappix inštalácii"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-"Tento nástroj vám pomôže rýchlo nainštalovať Jappix, prvú plnohodnotnú "
-"sociálnu platformu založenú na XMPP, na váš server. Nebudete dokonca "
-"potrebovať žiadne technické znalosti.( takmer :) ))"
-
-msgid "Installation Steps:"
-msgstr "Poďme sa pozrieť na inštalačné kroky:"
-
-msgid "Welcome"
-msgstr "Vitajte"
-
-msgid "Storage configuration"
-msgstr "Nastavenie úložiska"
-
-msgid "Administrator account"
-msgstr "Administračný účet"
-
-msgid "Main configuration"
-msgstr "Hlavná konfigurácia"
-
-msgid "Hosts configuration"
-msgstr "Hosts configuration"
-
-msgid "Services installation"
-msgstr "Inštalácia služieb"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-"Pokiaľ sa tento jazyk nezhoduje s vašim (%1s), môžete nechať Jappix hovoriť "
-"%2s.Voľba bude uložená."
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"Pokiaľ potrebujete pomoc ohľadom inštalácie a konfigurácie Jappix, môžete "
-"použiť dokumentáciu, dostupnú na:"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-"Nastal čas vybudovať vašu vlastnú socialnu sieť: stačí prejsť do daľšieho "
-"kroku!"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr "Do zložky je možné zapisovať, môžete pokračovať!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-"Jappix vám ponúka možnosť spravovať vaše konfiguráciu, inštalovať nové "
-"pluginy alebo vyhľadať aktualizácie. Preto si musíte vytvoriť administračný "
-"účet pre prístup k Správcovi."
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-"Po nainštalovaní Jappix, stačí kliknúť na odkaz Správca na domovskej stránke "
-"pre prístup."
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr "Ups, niečo ste prehliadli alebo heslá nesúhlasia!"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-"Jappix vyžaduje nastavenie niekoľkých hodnôt. Prosím, upravte nasledujúce "
-"hodnoty (alebo ponechajte predvolené, ktoré vyhovujú väčšine užívatelov). )"
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr "Ak nenastavíte povinné údaje, budú nastavené na predvolené hodnoty"
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-
-msgid "User"
-msgstr "Užívateľ"
-
-msgid "Service"
-msgstr "Služba"
-
-msgid "Service name"
-msgstr "Meno služby"
-
-msgid "Service description"
-msgstr "Popis služby"
-
-msgid "Owner name"
-msgstr ""
-
-msgid "Owner website"
-msgstr ""
-
-msgid "Connection"
-msgstr "Pripojenie"
-
-msgid "Lock the host"
-msgstr "Uzamknúť host"
-
-msgid "Anonymous mode"
-msgstr "Anonymný mód"
-
-msgid "HTTP authentication"
-msgstr ""
-
-msgid "Registration allowed"
-msgstr "Registrácia povolená"
-
-msgid "Use the built-in BOSH proxy"
-msgstr ""
-
-msgid "Manager link"
-msgstr ""
-
-msgid "Groupchats to join"
-msgstr ""
-
-msgid "Suggest groupchats"
-msgstr ""
-
-msgid "Encryption"
-msgstr "Šifrovanie"
-
-msgid "HTTPS storage"
-msgstr "HTTPS úložisko"
-
-msgid "Force HTTPS"
-msgstr "Vynútiť HTTPS"
-
-msgid "Compression"
-msgstr "Kompresia"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"Táto stránka vám pomôže nastaviť predvoleného Hostiteľa. Použite predvolené "
-"ak chcete využívať oficialnu službu Hostiteľa"
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"BOSH server je v podstate spojenie medzi Jappix klientom a XMPP serverom, "
-"ktoré je nevyhnutné z dôvodu technických obmedzení"
-
-msgid "Main host"
-msgstr "Hlavný hostiteľ (Main host)"
-
-msgid "Groupchat host"
-msgstr "Hostiteľ Skupinových rozhovorov (Groupchat host)"
-
-msgid "Pubsub host"
-msgstr ""
-
-msgid "Anonymous host"
-msgstr "Anonymous host"
-
-msgid "Directory host"
-msgstr "Directory host"
-
-msgid "BOSH host"
-msgstr "BOSH host"
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-"Môžete nainštalovať doplnky pre rozšírenie funkcionality Jappix. Niektoré "
-"môžete dodatočne upraviť, najmä z dôvodu bezpečnostných obmedzení, ktoré sú "
-"nastavené ako predvolené."
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-"Pre vykonanie musíte mať prístup k terminálu serveru a byť prihlásený ako "
-"root. Jappix bude pracovať aj bez týchto modulov ale niektoré z funkcii budú "
-"nedostupné"
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-"Keď skončíte nastavovanie, Jappix vygeneruje cache súbory. Môže to chvíľu "
-"trvať, počkajte pokiaľ sa nezobrazí aplikácia a nestláčajte žiadne tlačidlo."
-
-msgid "Thanks for using Jappix!"
-msgstr "Ďakujeme za používanie Jappix-u!"
-
-msgid "Next"
-msgstr "Ďalej"
-
-msgid "Finish"
-msgstr "Dokončiť"
-
-msgid "Check again"
-msgstr "Opakovať"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr "V zložke sa nedá zapisovať, nastavte práva pre zložku %s."
-
-msgid "%s is installed on your system."
-msgstr "%s je nainštalovaný vo vašom systéme"
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s nie je nainštalovaný vo vašom systéme, nainštalujte %2s."
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "PHP maximum upload size je dostatočná (%s)"
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-"PHP maximum upload size nie je dostatočná (%1s), mali by ste ju nastaviť na"
-"%2s v %3s."
-
-msgid "Jappix manager"
-msgstr "Jappix správca"
-
-msgid "Manager access"
-msgstr "Administrácia"
-
-msgid "Statistics"
-msgstr "Štatistika"
-
-msgid "Hosts"
-msgstr "Hosts"
-
-msgid "Design"
-msgstr "Dizajn"
-
-msgid "Repeat"
-msgstr "Opakovať"
-
-msgid "All"
-msgstr "Všetko"
-
-msgid "Horizontal"
-msgstr "Horizontálne"
-
-msgid "Vertical"
-msgstr "Vertikálne"
-
-msgid "Center"
-msgstr "Stred"
-
-msgid "Left"
-msgstr "Vľavo"
-
-msgid "Right"
-msgstr "Vpravo"
-
-msgid "Top"
-msgstr "Hore"
-
-msgid "Bottom"
-msgstr "Dole"
-
-msgid "Adapt"
-msgstr "Prispôsobiť"
-
-msgid "Color"
-msgstr "Farba"
-
-msgid "Users"
-msgstr "Užívatelia"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr "Iba autorizovaní užívatelia môžu spravovať tento Jappix uzol. "
-
-msgid "Please use the form below to login to the administration panel."
-msgstr "Použite nasledujúci formulár pre prihlásenie do Administračnej sekcie."
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-"Pre zvýšenie bezpečnosti je prihlásenie časovo obmedzené a po zatvorení "
-"prehliadača budete odhlásený."
-
-msgid "Credentials"
-msgstr "Overenie"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "Boli ste odhlásený, Dovidenia!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-"Ups, neboli ste rozpoznaný ako administrátor. Skontrolujte prihlasovacie "
-"údaje!"
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr "Štatistiky aplikácie Jappix"
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr "Zmena konfigurácie uzla Jappix"
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-"Všetky súbory na tomto Jappix uzle môžete spravovať pomocou tohto nástroja: "
-"vyberte podzložku a môžete editovať jej obsah."
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr "Jappix je plne prispôsobiteľný: jeho dizajn môžete zmeniť práve tu."
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr "Toto nie je platný obrázok, použite PNG,GIF alebo JPG "
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr ""
-
-msgid "The image could not be received, would you mind retry?"
-msgstr "Obrázok nebol prijatý, prajete si zopakovať?"
-
-msgid "Your service logo has been successfully changed!"
-msgstr ""
-
-msgid "Your image was added to the list!"
-msgstr "Váš obrázok bol pridaný do zoznamu!"
-
-msgid "Changes saved!"
-msgstr "Zmeny uložené!"
-
-msgid "Logo"
-msgstr ""
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr ""
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-
-msgid "Remove this logo"
-msgstr ""
-
-msgid "View this logo"
-msgstr ""
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-"Na tomto Jappix uzli môžte definovať viac ako jedného administrátora. "
-"Taktiež môžte zmeniť heslo."
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-"Aktualizuj Jappix uzol alebo skontroluj či je dostupná nová verzia. Zobrazia "
-"sa informácie o poslednej verzii (v angličtine)"
-
-msgid "Access statistics"
-msgstr "Štatistiky prístupu"
-
-msgid "Share statistics"
-msgstr "Štatistiky zdieľania"
-
-msgid "Other statistics"
-msgstr "Ostatné štatistiky"
-
-msgid "January"
-msgstr "Január"
-
-msgid "February"
-msgstr "Február"
-
-msgid "March"
-msgstr "Marec"
-
-msgid "April"
-msgstr "Apríl"
-
-msgid "May"
-msgstr "Máj"
-
-msgid "June"
-msgstr "Jún"
-
-msgid "July"
-msgstr "Júl"
-
-msgid "August"
-msgstr "August"
-
-msgid "September"
-msgstr "September"
-
-msgid "October"
-msgstr "Október"
-
-msgid "November"
-msgstr "November"
-
-msgid "December"
-msgstr "December"
-
-msgid "Monday"
-msgstr "Pondelok"
-
-msgid "Tuesday"
-msgstr "Utorok"
-
-msgid "Wednesday"
-msgstr "Streda"
-
-msgid "Thursday"
-msgstr "Štvrtok"
-
-msgid "Friday"
-msgstr "Piatok"
-
-msgid "Saturday"
-msgstr "Sobota"
-
-msgid "Sunday"
-msgstr "Nedeľa"
-
-msgid "Total"
-msgstr "Celkom"
-
-msgid "Archives"
-msgstr ""
-
-msgid "Music"
-msgstr "Hudba"
-
-msgid "Backgrounds"
-msgstr "Pozadia"
-
-msgid "Share"
-msgstr "Zdieľanie"
-
-msgid "Background"
-msgstr "Pozadie"
-
-msgid "Notice"
-msgstr "Upozornenie"
-
-msgid "Your design preferences have been saved!"
-msgstr "Vaše nastavenie dizajnu bolo uložené"
-
-msgid "Please check your inputs: something is missing!"
-msgstr "Skontrolujte údaje, niečo chýba!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-"Zmeňte pozadie vášho JAppix uzla.môžte si zvoliť farbu alebo uložený obrázok."
-"Let your creativity flow!"
-
-msgid "Use default background"
-msgstr "Použit predvolené pozadie"
-
-msgid "Use your own image"
-msgstr "Použiť vlastný obrázok"
-
-msgid "Select a background to use and change the display options."
-msgstr "Vyberte pozadie ktoré bude použité a meňte nastavenia zobrazenia"
-
-msgid "Use your own color"
-msgstr "Použiť vlastnú farbu"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr "Zadajte hexadecimálnu farbu pre vaše pozadie"
-
-msgid "Manage backgrounds"
-msgstr "Spravovať pozadia"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr "Pridajte nové pozadie to zoznamu. Pošlite platný obrázok"
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr "Ak chcete odobrať neaké pozadia, použite nasledujúci prehliadač "
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-"Nastavte upozornenie domovskej stránky pre všetkých užívateľov, napríklad "
-"varovanie, dôležitý oznam alebo reklamu."
-
-msgid "Simple notice"
-msgstr "Jednoduché upozornenie"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-"Toto oznámenie vyžaduje iba jednoduchý text, a žiaden kód nie je povolený"
-
-msgid "Advanced notice"
-msgstr "Pokročilé oznámenie"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-"Vaše upozornenie môžete upraviť pomocou embedded HTML, CSS a JavaScriptom, "
-"ale musíte nakódovať stýl."
-
-msgid "Available updates"
-msgstr "Dostupné aktualizácie"
-
-msgid "What's new?"
-msgstr "Čo je nové?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr "Vaša zložka na ukladanie nemá povolený zápis, upravte oprávnenia"
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr "%1s môže spôsobiť problémy s proxy, zvýšte hodnotu %2s na %3s!"
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-"Práve používate vývojovú verziu. Aktualizujte ju prostredníctvom nášho "
-"repozitáru spustením: %s."
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-"Dostupná nová verzia Jappix! Skontrolujte čo je nové a spustite update!"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr "Vaša verzia je neaktuálna. Aktualizujte ju na %s kliknutím sem!"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"Vaša verzia sa zdá byť aktuálna, ale môžete skontrolovať aktualizácie "
-"kliknutím sem."
-
-msgid "Check for updates"
-msgstr "Skontrolovať aktualizácie"
-
-msgid "Update in progress"
-msgstr "Prebieha aktualizácia"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr "Jappix bol aktualizovaný: práve používate najnovšiu verziu. Bavte sa!"
-
-msgid "The update has failed! Please try again later."
-msgstr "Aktualizácia zlyhala! Skúste to neskôr prosím."
-
-msgid "Downloading package..."
-msgstr "Preberanie balíku.."
-
-msgid "Removing current Jappix system files..."
-msgstr "Odstraňovanie súčastných systémových súborov Jappixu.."
-
-msgid "Extracting package..."
-msgstr "Rozbaľovanie balíku..."
-
-msgid "Regenerating storage folder tree..."
-msgstr "Regenerovanie storage folder tree..."
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix je aktualizovaný!"
-
-msgid "Aborted: socket error!"
-msgstr "Prerušené: socket error!"
-
-msgid "Aborted: buffer error!"
-msgstr "Prerušené: buffer error!"
-
-msgid "Aborted: everything is not writable!"
-msgstr "Prerušené: everything is not writable!"
-
-msgid "Aborted: could not extract the package!"
-msgstr "Prerušené: nedá sa rozbaliť balík!"
-
-msgid "Visits"
-msgstr "Návštevnosť"
-
-msgid "Daily"
-msgstr "Denne"
-
-msgid "Weekly"
-msgstr "Týždenne"
-
-msgid "Monthly"
-msgstr "Mesačne"
-
-msgid "Yearly"
-msgstr "Ročne"
-
-msgid "Size"
-msgstr "Veľkosť"
-
-msgid "Clean everything"
-msgstr "Vyčisti všetko"
-
-msgid "Purge cache"
-msgstr "Zbaviť sa cache"
-
-msgid "Purge logs"
-msgstr "Zbaviť sa logov"
-
-msgid "Purge sent files"
-msgstr ""
-
-msgid "Purge updates"
-msgstr "Zbaviť sa aktualizácii"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "Odkladací priestor, ktorý ste chceli vyčistiť je teraz prázdny!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-"Udržujte váš Jappix uzol čerstvý a rýchly, čistite pravidelne odkladací "
-"priestor!"
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-"Nahrajte svoju hudbu (Ogg Vorbis, MP3 alebo WAV) a môžte ju počúvať v "
-"Jappixe!"
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr "Súbor, ktorý chcete nahrať musí byť menší ako %s."
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-"Zostaňte v obraze o tom čo vaši užívatelia ukladajú na váš server a "
-"odstráňte neželaný obsah pomocou tohto nástroja"
-
-msgid "Title"
-msgstr "Titul"
-
-msgid "Artist"
-msgstr "Umelec"
-
-msgid "Album"
-msgstr "Album"
-
-msgid "File"
-msgstr "Súbor"
-
-msgid "Upload"
-msgstr "Nahrať"
-
-msgid "The folder is empty."
-msgstr "Zložka je prázdna"
-
-msgid "The music could not be received, please retry!"
-msgstr "Hudbu sa nepodarilo prevziať, prosím skúste znova!"
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-"Toto nie je platný hudobný súbor. konvertujte ho na Ogg Vorbis, MP3 alebo "
-"WAV!"
-
-msgid "Your music has been added!"
-msgstr "Vaša hudba bola pridaná!"
-
-msgid "The selected elements have been removed."
-msgstr "Vybrané položky budú odstránené."
-
-msgid "You must select elements to remove!"
-msgstr "Musíte vybrať položky na odstránenie!"
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-"Pridaj užívateľa alebo zmeň heslo (zadaj existujuce užívateľské meno). "
-"Zvoľte silné heslo!"
-
-msgid "Manage"
-msgstr "Spravovať"
-
-msgid "List"
-msgstr "Zoznam"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-
-msgid "The user has been added!"
-msgstr "Užívateľ bol pridaný"
-
-msgid "The chosen users have been removed."
-msgstr "Vybraný užívateľ bol odstránený."
-
-msgid "You must select one or more users to be removed!"
-msgstr "Musíte vybrať jedného alebo viacerých užívateľov pre odstránenie!"
-
-msgid "Yesterday"
-msgstr "Včera"
-
-msgid "%s days ago"
-msgstr "Pred %s dňami"
-
-msgid "User currently active"
-msgstr "Užívateľ je aktívny"
-
-msgid "Last seen: %s"
-msgstr "Naposledy videný: %s"
-
-msgid "Inactive since: %s"
-msgstr "Neaktívny od: %s"
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr "Zdá sa že váš priateľ nedostal nedostal vašu správu(y)!"
-
-msgid "Static content server"
-msgstr "Static content server"
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr "Toto je statický obsah serveru pre %1s, “%2s”."
-
-msgid "User uploads server"
-msgstr ""
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr ""
-
-msgid "Suggested friends"
-msgstr "Navrhovaní priatelia"
-
-msgid "Check all"
-msgstr "Označit všetko"
-
-msgid "Uncheck all"
-msgstr "Odznačit všetko"
-
-msgid "Choose"
-msgstr "Zvoliť"
-
-msgid "List name"
-msgstr "Meno zoznamu"
-
-msgid "Allow"
-msgstr "Povoliť"
-
-msgid "Deny"
-msgstr "Zamietnuť"
-
-msgid "Group"
-msgstr "Skupina"
-
-msgid "Subscription"
-msgstr "Odoberanie"
-
-msgid "Both"
-msgstr "Obe"
-
-msgid "From"
-msgstr "Od"
-
-msgid "Everybody"
-msgstr "Všetci"
-
-msgid "Send messages"
-msgstr "Poslať správu"
-
-msgid "Send queries"
-msgstr "Send queries"
-
-msgid "See my status"
-msgstr "Zobraziť môj status"
-
-msgid "Send his/her status"
-msgstr "Odoslať jeho-jej status"
-
-msgid "Everything"
-msgstr "Všetko"
-
-msgid "Item"
-msgstr "Položka"
-
-msgid "Order"
-msgstr "Poradie"
-
-msgid "Active for this session"
-msgstr "Aktívny pre toto sedenie"
-
-msgid "Always active"
-msgstr "Vždy aktívny"
-
-msgid "User directory"
-msgstr ""
-
-msgid "Search a friend"
-msgstr "Vyhľadať priateľa"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-
-msgid "Send him/her a message"
-msgstr ""
-
-msgid "Start a chat with him/her"
-msgstr ""
-
-msgid "Available shortcuts:"
-msgstr ""
-
-msgid "%s removes the chat logs"
-msgstr ""
-
-msgid "%s joins a groupchat"
-msgstr ""
-
-msgid "%s closes the chat"
-msgstr ""
-
-msgid "%s shows the user profile"
-msgstr ""
-
-msgid "%s sends a message to the room"
-msgstr ""
-
-msgid "%s changes your nickname"
-msgstr ""
-
-msgid "%s sends a message to someone in the room"
-msgstr ""
-
-msgid "%s changes the room topic"
-msgstr ""
-
-msgid "%s kicks a user of the room"
-msgstr ""
-
-msgid "%s bans a user of the room"
-msgstr ""
-
-msgid "%s invites someone to join the room"
-msgstr ""
-
-msgid "Public profile"
-msgstr ""
-
-msgid "Your profile anywhere on the Web."
-msgstr ""
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-
-msgid "Yay, let's create your public profile!"
-msgstr ""
-
-msgid "Enable my public profile"
-msgstr ""
-
-msgid "Jappix for your phone"
-msgstr ""
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr ""
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-
-msgid "You haven't provided any file to download"
-msgstr ""
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr ""
-
-msgid "Woah this file isn't found, please double check"
-msgstr ""
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr ""
-
-msgid "Statistics are currently disabled in the settings."
-msgstr ""
-
-msgid "New event!"
-msgstr ""
-
-msgid "%s is typing..."
-msgstr ""
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-
-msgid "Username"
-msgstr ""
-
-msgid "Enter password"
-msgstr ""
-
-msgid "Once again..."
-msgstr ""
-
-msgid "Code"
-msgstr ""
-
-msgid "Security code"
-msgstr ""
-
-msgid "Advertising space available!"
-msgstr ""
-
-msgid "Advertise here"
-msgstr ""
-
-msgid "Analytics (%s)"
-msgstr ""
-
-msgid "Track visits"
-msgstr ""
-
-msgid "Piwik URL"
-msgstr ""
-
-msgid "Piwik tracking ID"
-msgstr ""
-
-msgid "Advertising (%s)"
-msgstr ""
-
-msgid "Enable ads"
-msgstr ""
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "Content ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "Mute"
-msgstr ""
-
-msgid "Unmute"
-msgstr ""
-
-msgid "Is calling you"
-msgstr ""
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr ""
-
-msgid "Waiting..."
-msgstr ""
-
-msgid "Ringing..."
-msgstr ""
-
-msgid "Declined the call"
-msgstr ""
-
-msgid "Call error"
-msgstr ""
-
-msgid "Ended the call"
-msgstr ""
-
-msgid "Call ended"
-msgstr ""
-
-msgid "Call canceled"
-msgstr ""
-
-msgid "Canceled the call"
-msgstr ""
-
-msgid "Is already in a call"
-msgstr ""
-
-msgid "Ending call..."
-msgstr ""
-
-msgid "Accept"
-msgstr ""
-
-msgid "Decline"
-msgstr ""
-
-msgid "Okay"
-msgstr ""
-
-msgid "Retry"
-msgstr ""
-
-msgid "Audio Call"
-msgstr ""
-
-msgid "Video Call"
-msgstr ""
diff --git a/i18n/sv/LC_MESSAGES/main.mo b/i18n/sv/LC_MESSAGES/main.mo
deleted file mode 100644
index ea85be25..00000000
--- a/i18n/sv/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/sv/LC_MESSAGES/main.po b/i18n/sv/LC_MESSAGES/main.po
deleted file mode 100644
index 2a6003d5..00000000
--- a/i18n/sv/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2291 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:21+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Swedish (http://www.transifex.com/projects/p/jappix/language/"
-"sv/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: sv\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr ""
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"Jappix kräver Javascript för att fungera, men det saknas eller är avstängt i "
-"din webbläsare."
-
-msgid "Social channel, chat and more."
-msgstr ""
-
-msgid "Create your public profile."
-msgstr ""
-
-msgid "A mini-chat for your website."
-msgstr ""
-
-msgid "Get Jappix, get support."
-msgstr ""
-
-msgid "Statistics around Jappix."
-msgstr ""
-
-msgid "Legal disclaimer for Jappix."
-msgstr ""
-
-msgid "Download Jappix for free."
-msgstr ""
-
-msgid "Contribute to the Jappix code."
-msgstr ""
-
-msgid "Jappix for your company."
-msgstr ""
-
-msgid "Find a public Jappix node."
-msgstr ""
-
-msgid "Credits"
-msgstr ""
-
-msgid "Association"
-msgstr ""
-
-msgid "Web agency"
-msgstr ""
-
-msgid "Legal"
-msgstr ""
-
-msgid "Legal disclaimer"
-msgstr ""
-
-msgid "Terms of use and legal"
-msgstr ""
-
-msgid "Owner"
-msgstr ""
-
-msgid "Node owner"
-msgstr ""
-
-msgid "By using our service, you accept %s."
-msgstr ""
-
-msgid "our terms of use"
-msgstr ""
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Jappix har blivit avbryten av ett nätverksproblem, en bugg eller felaktiga "
-"loginuppgifter (se till att du har skrivit rätt uppgifter), Vi ber om ursäkt "
-"för besväret."
-
-msgid "The element list on this server could not be obtained!"
-msgstr "Elementlistan på denna server kunde inte hämtas!"
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr "Ditt lösenord har ändrats, du kan nu logga in med det."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "Ditt XMPP konto har blivit borttaget. Hejdå!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "Du har blivit utloggad från ditt XMPP konto. Ha en bra dag!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr ""
-
-msgid "The groupchat has been removed."
-msgstr ""
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "Användaren som du vill nå är inte närvarande i detta rum."
-
-msgid "Please enter the group chat address to join."
-msgstr "Var god skriv in gruppchat adressen du vill gå med i."
-
-msgid "Please enter your nickname to join %s."
-msgstr "Var god skriv in ditt användarnamn för att gå med i %s."
-
-msgid "This room (%s) is protected with a password."
-msgstr "Rummet (%s) är lösenordskyddat."
-
-msgid "Your browser is out of date!"
-msgstr "Din webbläsare är för gammal!"
-
-msgid "Last %s version is better!"
-msgstr "Versionen &s är bättre!"
-
-msgid "Login"
-msgstr "Logga in"
-
-msgid "Register"
-msgstr "Registrera"
-
-msgid "Here we go!"
-msgstr "Sätt igång!"
-
-msgid "Server"
-msgstr "Server"
-
-msgid "Password"
-msgstr "Lösenord"
-
-msgid "Remember me"
-msgstr "Kom ihåg mig"
-
-msgid "This tool has been disabled!"
-msgstr ""
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr ""
-"På grund av ett nätverksproblem så har du blivit frånkopplad. Vad vill du "
-"göra nu?"
-
-msgid "Reconnect"
-msgstr "Återanslut"
-
-msgid "Messages"
-msgstr "Meddelanden"
-
-msgid "Profile"
-msgstr "Profil"
-
-msgid "Options"
-msgstr "Inställningar"
-
-msgid "Disconnect"
-msgstr "Koppla ner"
-
-msgid "Filter"
-msgstr "Filtrera"
-
-msgid "Add a friend"
-msgstr "Lägg till en vän"
-
-msgid "Your groupchats"
-msgstr "Dina gruppchatter"
-
-msgid "Manage your favorite groupchats"
-msgstr "Hantera dina favorit gruppchatter"
-
-msgid "More stuff"
-msgstr "Fler verktyg"
-
-msgid "Show all friends"
-msgstr "Visa alla vänner"
-
-msgid "Only show connected friends"
-msgstr "Visa bara anslutna vänner"
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "Meddelandearkiv"
-
-msgid "Date"
-msgstr "Datum"
-
-msgid "A short message?"
-msgstr "Kort meddelande?"
-
-msgid "How are you?"
-msgstr "Hur mår du?"
-
-msgid "What are you doing?"
-msgstr "Vad gör du?"
-
-msgid "Join a chat"
-msgstr "Gå med i en chat"
-
-msgid "Status"
-msgstr "Tillstånd"
-
-msgid "Available"
-msgstr "Tillgänglig"
-
-msgid "Talkative"
-msgstr "Pratsam"
-
-msgid "Away"
-msgstr "Borta"
-
-msgid "Not available"
-msgstr "Ej tillgänglig"
-
-msgid "Busy"
-msgstr "Uppagen"
-
-msgid "Offline"
-msgstr ""
-
-msgid "Mood"
-msgstr "Humör"
-
-msgid "None"
-msgstr "Inget"
-
-msgid "Crazy"
-msgstr "Galen"
-
-msgid "Excited"
-msgstr "Upphetsad"
-
-msgid "Playful"
-msgstr "Lekfull"
-
-msgid "Happy"
-msgstr "Glad"
-
-msgid "Shocked"
-msgstr "Chockad"
-
-msgid "Hot"
-msgstr "Het"
-
-msgid "Sad"
-msgstr "Ledsen"
-
-msgid "Amorous"
-msgstr "Förälskad"
-
-msgid "Confident"
-msgstr "Självsäker"
-
-msgid "Activity"
-msgstr "Aktivitet"
-
-msgid "Chores"
-msgstr "Sysslor"
-
-msgid "Drinking"
-msgstr "Dricker"
-
-msgid "Eating"
-msgstr "Äter"
-
-msgid "Exercising"
-msgstr "Tränar"
-
-msgid "Grooming"
-msgstr "Förbereder"
-
-msgid "Appointment"
-msgstr "På möte"
-
-msgid "Inactive"
-msgstr "Inaktiv"
-
-msgid "Relaxing"
-msgstr "Slappnar av"
-
-msgid "Talking"
-msgstr "Pratar"
-
-msgid "Traveling"
-msgstr "Reser"
-
-msgid "Working"
-msgstr "Jobbar"
-
-msgid "View profile"
-msgstr "Visa profil"
-
-msgid "This is a repeat from %s"
-msgstr ""
-
-msgid "Repeat this notice"
-msgstr "Repetera notis"
-
-msgid "Remove this notice"
-msgstr "Radera notis"
-
-msgid "Your profile"
-msgstr "Din profil"
-
-msgid "Identity"
-msgstr "Identitet"
-
-msgid "Profile image"
-msgstr "Profilbild"
-
-msgid "Others"
-msgstr "Andra"
-
-msgid "Other"
-msgstr ""
-
-msgid "Personal"
-msgstr "Personliga"
-
-msgid "Complete name"
-msgstr "Fullständigt namn"
-
-msgid "Nickname"
-msgstr "Smeknamn"
-
-msgid "First name"
-msgstr "Förnamn"
-
-msgid "Last name"
-msgstr "Efternamn"
-
-msgid "Date of birth"
-msgstr "Födelsedatum"
-
-msgid "Contact"
-msgstr "Kontakt"
-
-msgid "E-mail"
-msgstr "E-post"
-
-msgid "Phone"
-msgstr "Telefon nummer"
-
-msgid "Website"
-msgstr "Hemsida"
-
-msgid "Current"
-msgstr "Nuvarande"
-
-msgid "Delete"
-msgstr "Radera"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr "Vad synd! Du har ingen profilbild för ditt identitetskort!"
-
-msgid "Address"
-msgstr "Address"
-
-msgid "Street"
-msgstr "Gata"
-
-msgid "City"
-msgstr "Stad"
-
-msgid "Postal code"
-msgstr "Postnummer"
-
-msgid "Country"
-msgstr "Land"
-
-msgid "Biography"
-msgstr "Biografi"
-
-msgid "Important notice"
-msgstr "Viktigt meddelande"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr ""
-"Allting är inte privat på XMPP, detta är en av sakerna. Din offentliga "
-"profil (vCard)."
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"Det är rekommenderat att ladda upp en profilbild (max %s), som en bild på "
-"dig själv. Det gör det lätt att identifieras av dina vänner."
-
-msgid "Save"
-msgstr "Spara"
-
-msgid "Cancel"
-msgstr "Avbryt"
-
-msgid "Edit options"
-msgstr "Ändra inställningar"
-
-msgid "Channel"
-msgstr "Kanal"
-
-msgid "Commands"
-msgstr "Kommandon"
-
-msgid "Sounds"
-msgstr "Ljud"
-
-msgid "Privacy"
-msgstr "Integritet"
-
-msgid "Message archiving"
-msgstr "Meddelande arkivering"
-
-msgid "Store an history of your chats"
-msgstr ""
-
-msgid "Geolocation"
-msgstr "Geolocation"
-
-msgid "Disabled"
-msgstr ""
-
-msgid "Store all chats"
-msgstr ""
-
-msgid "Store friend chats"
-msgstr ""
-
-msgid "Remove all archives"
-msgstr ""
-
-msgid "Empty"
-msgstr "Tom"
-
-msgid "Empty channel"
-msgstr "Tom kanal"
-
-msgid "Persistent"
-msgstr "Beständig"
-
-msgid "Maximum notices"
-msgstr "Maximalt antal notiser"
-
-msgid "Account"
-msgstr "Konto"
-
-msgid "Change password"
-msgstr "Ändra lösenord"
-
-msgid "Delete account"
-msgstr "Ta bort konto"
-
-msgid "Old"
-msgstr "Gammal"
-
-msgid "New (2 times)"
-msgstr "Ny"
-
-msgid "Suggested chatrooms"
-msgstr ""
-
-msgid "Skip"
-msgstr ""
-
-msgid "Continue"
-msgstr "Fortsätt"
-
-msgid "To"
-msgstr "Till"
-
-msgid "Close"
-msgstr "Stäng"
-
-msgid "unknown"
-msgstr "okänd"
-
-msgid "Unavailable"
-msgstr "Otillgänglig"
-
-msgid "is now"
-msgstr "är nu"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Var god vänta medans din profilbild uppladdas..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "Där är den! En ny vacker profilbild!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "Bildfilen stödjs ej eller har en ogiltlig storlek."
-
-msgid "Reply"
-msgstr "Svara"
-
-msgid "Error"
-msgstr "Fel"
-
-msgid "Click here to solve the error"
-msgstr "Klicka här för att lösa problemet"
-
-msgid "You"
-msgstr "Du"
-
-msgid "Remove"
-msgstr "Ta bort"
-
-msgid "Rename"
-msgstr "Byt namn"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Hej, Jag är %s och jag skulle vilja lägga till dig som min vän."
-
-msgid "Smiley insertion"
-msgstr "Smiley inläggning"
-
-msgid "Change style"
-msgstr "Ändra stil"
-
-msgid "Text in bold"
-msgstr "Bred text"
-
-msgid "Text in italic"
-msgstr "Kursiv text"
-
-msgid "Underlined text"
-msgstr "Understruken text"
-
-msgid "Send a file"
-msgstr ""
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr ""
-
-msgid "Save chat"
-msgstr "Spara chat"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"Trycka på denna länk för att få chatloggen och vänta. Tryck sedan igen för "
-"att få filen."
-
-msgid "This chat is empty!"
-msgstr "Denna chat är tom!"
-
-msgid "Generate file!"
-msgstr "Generera fil!"
-
-msgid "Download file!"
-msgstr "Ladda ner fil!"
-
-msgid "Clean current chat"
-msgstr "Rensa nuvarande chat"
-
-msgid "Show user profile"
-msgstr "Visa användarprofil"
-
-msgid "Add this contact to your friends"
-msgstr "Lägg till denna kontakt till dina vänner"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Lägg till denna gruppchat till dina favoriter"
-
-msgid "All tabs"
-msgstr "Alla flikar"
-
-msgid "Join groupchat"
-msgstr ""
-
-msgid "Close this tab"
-msgstr "Stäng denna flik"
-
-msgid "no subject defined for this room."
-msgstr "inget ämne satt i detta rum."
-
-msgid "Administration panel for this room"
-msgstr "Administrationspanel för detta rum"
-
-msgid "Moderators"
-msgstr "Moderatorer"
-
-msgid "Participants"
-msgstr "Deltagare"
-
-msgid "Visitors"
-msgstr "Besökare"
-
-msgid "Manage favorite rooms"
-msgstr "Hantera favoritrum"
-
-msgid "Change favorites"
-msgstr "Ändra favoriter"
-
-msgid "Search a room"
-msgstr "Sök efter ett rum"
-
-msgid "Select a favorite"
-msgstr "Välj en favorit"
-
-msgid "Getting the name..."
-msgstr "Få tag i namn..."
-
-msgid "Gateway"
-msgstr "Gateway"
-
-msgid "Name"
-msgstr "Namn"
-
-msgid "Room"
-msgstr "Rum"
-
-msgid "Add"
-msgstr "Lägg till"
-
-msgid "Edit"
-msgstr "Ändra"
-
-msgid "Search a room on"
-msgstr "Sök efter ett rum på"
-
-msgid "No room found on this server."
-msgstr "Inget rum hittat på denna server."
-
-msgid "Service discovery"
-msgstr "Tjänst upptäckande"
-
-msgid "Server to query"
-msgstr "Server att ifrågesätta"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "Ursäkta, men föremålet lämnade inga resultat!"
-
-msgid "Accounts"
-msgstr "Konton"
-
-msgid "Authentications"
-msgstr "Autentiseringar"
-
-msgid "Automation"
-msgstr "Automatik"
-
-msgid "Clients"
-msgstr "Klienter"
-
-msgid "Collaboration"
-msgstr "Kollaboration"
-
-msgid "Components"
-msgstr "Komponenter"
-
-msgid "Rooms"
-msgstr "Rum"
-
-msgid "Directories"
-msgstr "Kataloger"
-
-msgid "Gateways"
-msgstr "Gateway"
-
-msgid "News"
-msgstr "Nyheter"
-
-msgid "Hierarchy"
-msgstr "Hierarki"
-
-msgid "Proxies"
-msgstr ""
-
-msgid "Publication/Subscription"
-msgstr "Publicering/Prenumeration"
-
-msgid "Storage"
-msgstr "Lagring"
-
-msgid "Service offline or broken"
-msgstr "Tjänsten är ur funktion"
-
-msgid "Your inbox"
-msgstr "Din inkorg"
-
-msgid "Available actions"
-msgstr ""
-
-msgid "Clean"
-msgstr "Rensa"
-
-msgid "New"
-msgstr "Ny"
-
-msgid "Received"
-msgstr "Mottagen"
-
-msgid "Subject"
-msgstr "Ämne"
-
-msgid "Content"
-msgstr "Innehåll"
-
-msgid "Send message"
-msgstr "Skicka meddelande"
-
-msgid "Your inbox is empty."
-msgstr "Din inkorg är tom."
-
-msgid "MUC administration"
-msgstr ""
-
-msgid "You administrate this room"
-msgstr "Du administrerar detta rum"
-
-msgid "Enter new subject"
-msgstr "Ange nytt ämne"
-
-msgid "Configuration"
-msgstr "Inställningar"
-
-msgid "Authorizations"
-msgstr "Tillåtelser"
-
-msgid "Member list"
-msgstr "Medlemslista"
-
-msgid "Owner list"
-msgstr "Ägarlista"
-
-msgid "Administrator list"
-msgstr "Administratörslista"
-
-msgid "Outcast list"
-msgstr "Lista på uteslutna"
-
-msgid "Add an input"
-msgstr ""
-
-msgid "Destroy this MUC"
-msgstr ""
-
-msgid "Yes, let's do it!"
-msgstr "Ja, kör på!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr ""
-
-msgid "Your friend is writing a message..."
-msgstr "Din vän skriver..."
-
-msgid "Your friend stopped writing a message."
-msgstr "Din vän slutade skriva."
-
-msgid "Your friend is doing something else."
-msgstr ""
-
-msgid "Your friend closed the chat."
-msgstr ""
-
-msgid "Requesting this service..."
-msgstr ""
-
-msgid "Loading"
-msgstr "Startar"
-
-msgid "changed his/her nickname to %s"
-msgstr ""
-
-msgid "joined the chat room"
-msgstr "kom in i rummet"
-
-msgid "left the chat room"
-msgstr "lämnade rummet"
-
-msgid "%s left"
-msgstr ""
-
-msgid "%s joined"
-msgstr ""
-
-msgid "no status"
-msgstr "ingen status"
-
-msgid "has been kicked"
-msgstr "har sparkats ut"
-
-msgid "has been banned"
-msgstr "har utestängts"
-
-msgid "no reason"
-msgstr "ingen anledning"
-
-msgid "Communicate with the entire world!"
-msgstr "Kommunicera med hela världen!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-
-msgid "Hi there!"
-msgstr "Hej där!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr ""
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-
-msgid "Previous"
-msgstr "Föregående"
-
-msgid "General"
-msgstr "Allmänt"
-
-msgid "Advanced"
-msgstr "Avancerat"
-
-msgid "Resource"
-msgstr "Resurs"
-
-msgid "Priority"
-msgstr "Prioritet"
-
-msgid "Low"
-msgstr "Låg"
-
-msgid "Medium"
-msgstr "Medium"
-
-msgid "High"
-msgstr "Hög"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-
-msgid "login page"
-msgstr "inloggningssida"
-
-msgid "Share this link with your friends:"
-msgstr "Skicka denna länk till dina vänner:"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-
-msgid "Required"
-msgstr "Obligatorisk"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "Du har registrertats. Din XMPP-adress är:"
-
-msgid "Manager"
-msgstr ""
-
-msgid "Encrypted"
-msgstr "Krypterad"
-
-msgid "Unencrypted"
-msgstr "Okrypterad"
-
-msgid "Where are you?"
-msgstr "Var är du?"
-
-msgid "What's up with you?"
-msgstr "Hur är läget?"
-
-msgid "Type something you want to share with your friends..."
-msgstr ""
-
-msgid "Fetching the social channel..."
-msgstr "Hämtar den sociala kanalen..."
-
-msgid "You are synchronized with your network."
-msgstr ""
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr ""
-
-msgid "Media viewer"
-msgstr "Mediavisare"
-
-msgid "Browse"
-msgstr "Bläddra"
-
-msgid "Command"
-msgstr "Kommando"
-
-msgid "Subscribe"
-msgstr "Prenumerera"
-
-msgid "Join"
-msgstr "Gå med"
-
-msgid "Automatic"
-msgstr "Automatiskt"
-
-msgid "Search"
-msgstr "Sök"
-
-msgid "No result!"
-msgstr "Inget resultat!"
-
-msgid "No notifications."
-msgstr ""
-
-msgid "would like to add you as a friend."
-msgstr "vill lägga til dig som en vän."
-
-msgid "would like you to join this chatroom:"
-msgstr "vill att du går med i detta chattrum:"
-
-msgid "Do you accept?"
-msgstr "Vill du acceptera inbjudan?"
-
-msgid "Yes"
-msgstr "Ja"
-
-msgid "No"
-msgstr "Nej"
-
-msgid "would like to get authorization."
-msgstr "vill få tillåtelse."
-
-msgid "would like to send you a file: “%s”."
-msgstr ""
-
-msgid "has received a file exchange request: “%s”."
-msgstr ""
-
-msgid "has accepted to receive your file: “%s”."
-msgstr ""
-
-msgid "has rejected to receive your file: “%s”."
-msgstr ""
-
-msgid "could not receive your file: “%s”."
-msgstr "kunde ej ta emot din fil “%s”."
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr ""
-
-msgid "commented an item you follow: “%s”."
-msgstr ""
-
-msgid "liked your post: “%s”."
-msgstr ""
-
-msgid "quoted you somewhere: “%s”."
-msgstr ""
-
-msgid "published on your wall: “%s”."
-msgstr ""
-
-msgid "tagged you in a photo (%s)."
-msgstr ""
-
-msgid "tagged you in a video (%s)."
-msgstr ""
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-
-msgid "Open"
-msgstr ""
-
-msgid "Show"
-msgstr "Visa"
-
-msgid "Hide"
-msgstr ""
-
-msgid "Submit"
-msgstr "Skicka"
-
-msgid "Client"
-msgstr "Klient"
-
-msgid "System"
-msgstr "System"
-
-msgid "Local time"
-msgstr "Lokal tid"
-
-msgid "Comments"
-msgstr "Kommentarer"
-
-msgid "User profile"
-msgstr "Användarprofil"
-
-msgid "See his/her position on the globe"
-msgstr "Se hans/hennes position på jordklotet"
-
-msgid "Confirm"
-msgstr "Bekräfta"
-
-msgid "anonymous mode"
-msgstr "anonymt läge"
-
-msgid "Groups"
-msgstr "Grupper"
-
-msgid "Unclassified"
-msgstr "Oklassificerad"
-
-msgid "Authorize"
-msgstr "Tillåtelse"
-
-msgid "Ask for authorization"
-msgstr "Be om tillåtelse"
-
-msgid "Unblock"
-msgstr "Avblockera"
-
-msgid "Prohibit"
-msgstr "Förhindra"
-
-msgid "Block"
-msgstr "Blockera"
-
-msgid "Chat"
-msgstr "Chatt"
-
-msgid "Groupchat"
-msgstr "Gruppchatt"
-
-msgid "Jappix Mobile"
-msgstr "Jappix Mobilt"
-
-msgid "Desktop"
-msgstr "Skrivbord"
-
-msgid "Mobile"
-msgstr "Mobilt"
-
-msgid "Please wait..."
-msgstr "Var god vänta..."
-
-msgid "Please enable JavaScript"
-msgstr "Vänligen aktivera JavaScript"
-
-msgid "Show comments"
-msgstr "Visa kommentarer"
-
-msgid "Loading comments..."
-msgstr "Laddar kommentarer..."
-
-msgid "Could not get the comments!"
-msgstr "Kunde ej hämta kommentarer!"
-
-msgid "Comments locked!"
-msgstr ""
-
-msgid "Type your comment here..."
-msgstr "Skriv här..."
-
-msgid "Your channel"
-msgstr "Din kanal"
-
-msgid "Channel of"
-msgstr ""
-
-msgid "More notices..."
-msgstr "Fler notiser..."
-
-msgid "Attach a file"
-msgstr "Bifoga en fil"
-
-msgid "Send"
-msgstr "Skicka"
-
-msgid "Unattach the file"
-msgstr "Ta bort bifogad fil"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-"Ett fel uppstod vid uppladdning. Kanske filen är större än %s eller av "
-"blockerad av någon anledning."
-
-msgid "Authorization failed"
-msgstr "Tillåtelsekontroll misslyckades"
-
-msgid "Registration failed, please choose a different username"
-msgstr "Registrering misslyckades. Vänligen välj ett annat användarnamn"
-
-msgid "Service unavailable"
-msgstr "Tjänsten ej tillgänglig"
-
-msgid "Internal server error, try later"
-msgstr "Internt serverfel. Försök gärna senare"
-
-msgid "Your form has been sent."
-msgstr "Ditt formulär har skickats."
-
-msgid "Application"
-msgstr ""
-
-msgid "Media integration"
-msgstr ""
-
-msgid "Keep local chat archives"
-msgstr ""
-
-msgid "XMPP links"
-msgstr "XMPP-länkar"
-
-msgid "Open XMPP links with Jappix"
-msgstr "Öppna XMPP-länkar med Jappix"
-
-msgid "changed the subject to:"
-msgstr "ändrade ämnet till:"
-
-msgid "Welcome!"
-msgstr "Välkommen!"
-
-msgid "Friends"
-msgstr "Vänner"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr ""
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-
-msgid "Enable notification sounds"
-msgstr "Aktivera ljudeffekter"
-
-msgid "Share your position on the globe"
-msgstr ""
-
-msgid "Offline friends"
-msgstr "Ej inloggade vänner"
-
-msgid "Don't hide offline friends"
-msgstr "Visa även ej inloggade vänner"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr ""
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-
-msgid "Share Jappix on %s"
-msgstr ""
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "Använder Jappix, en öppen social plattform. Jag är %s!"
-
-msgid "Unknown name"
-msgstr "Okänt namn"
-
-msgid "Unknown country"
-msgstr "Okänt land"
-
-msgid "Click to enable"
-msgstr "Klicka för att aktivera"
-
-msgid "Click to disable"
-msgstr "Klicka för att deaktivera"
-
-msgid "Installation"
-msgstr "Installation"
-
-msgid "Jappix installation"
-msgstr "Installera Jappix"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "Välkommen till installationen av Jappix!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-
-msgid "Installation Steps:"
-msgstr ""
-
-msgid "Welcome"
-msgstr "Välkommen"
-
-msgid "Storage configuration"
-msgstr "Konfigurera lagring"
-
-msgid "Administrator account"
-msgstr "Administratörskonto"
-
-msgid "Main configuration"
-msgstr ""
-
-msgid "Hosts configuration"
-msgstr "Inställningar för värdar"
-
-msgid "Services installation"
-msgstr "Installation av tjänster"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr "Mappen är skrivbar -- du kan nu fortsätta!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr "Oops, något saknas, eller så matchar inte de två lösenorden!"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-
-msgid "User"
-msgstr "Användare"
-
-msgid "Service"
-msgstr "Tjänst"
-
-msgid "Service name"
-msgstr "Tjänstnamn"
-
-msgid "Service description"
-msgstr "Tjänstbeskrivning"
-
-msgid "Owner name"
-msgstr ""
-
-msgid "Owner website"
-msgstr ""
-
-msgid "Connection"
-msgstr "Anslutning"
-
-msgid "Lock the host"
-msgstr "Lås värd"
-
-msgid "Anonymous mode"
-msgstr "Anonymt läge"
-
-msgid "HTTP authentication"
-msgstr ""
-
-msgid "Registration allowed"
-msgstr "Registrering tillåten"
-
-msgid "Use the built-in BOSH proxy"
-msgstr ""
-
-msgid "Manager link"
-msgstr ""
-
-msgid "Groupchats to join"
-msgstr ""
-
-msgid "Suggest groupchats"
-msgstr ""
-
-msgid "Encryption"
-msgstr "Kryptering"
-
-msgid "HTTPS storage"
-msgstr "Lagring HTTPS"
-
-msgid "Force HTTPS"
-msgstr "Kräv HTTPS"
-
-msgid "Compression"
-msgstr "Komprimering"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-
-msgid "Main host"
-msgstr "Huvudvärd"
-
-msgid "Groupchat host"
-msgstr "Värd för gruppchatt"
-
-msgid "Pubsub host"
-msgstr "Värd för pubsub"
-
-msgid "Anonymous host"
-msgstr "Anonym värd"
-
-msgid "Directory host"
-msgstr "Katalogvärd"
-
-msgid "BOSH host"
-msgstr "BOSH värd"
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-
-msgid "Thanks for using Jappix!"
-msgstr "Tack för att du använder Jappix!"
-
-msgid "Next"
-msgstr "Nästa"
-
-msgid "Finish"
-msgstr "Slutför"
-
-msgid "Check again"
-msgstr "Kontrollera igen"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr "Mappen är ej skrivbar. Korrigera rättigheterna för mappen %s"
-
-msgid "%s is installed on your system."
-msgstr "%s har installerats på ditt system."
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s har ej installerats på ditt system. Du borde installera %2s."
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "Maxgränsen för uppladdning via PHP är tillräcklig (%s)."
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-"Maxgränsen för uppladdning via PHP är ej tillräcklig (%1s). Du bör ange "
-"gränsen till %2s i %3s."
-
-msgid "Jappix manager"
-msgstr ""
-
-msgid "Manager access"
-msgstr ""
-
-msgid "Statistics"
-msgstr "Statistik"
-
-msgid "Hosts"
-msgstr "Värdar"
-
-msgid "Design"
-msgstr "Utseende"
-
-msgid "Repeat"
-msgstr "Repetera"
-
-msgid "All"
-msgstr "Alla"
-
-msgid "Horizontal"
-msgstr "Sidled"
-
-msgid "Vertical"
-msgstr "Höjdled"
-
-msgid "Center"
-msgstr "Mitten"
-
-msgid "Left"
-msgstr "Vänster"
-
-msgid "Right"
-msgstr "Höger"
-
-msgid "Top"
-msgstr "Toppen"
-
-msgid "Bottom"
-msgstr "Botten"
-
-msgid "Adapt"
-msgstr "Anpassa"
-
-msgid "Color"
-msgstr "Färg"
-
-msgid "Users"
-msgstr "Användare"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-
-msgid "Please use the form below to login to the administration panel."
-msgstr ""
-"Vänligen använd formuläret nedan för att logga in på administratörsbilden."
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-
-msgid "Credentials"
-msgstr "Rättigheter"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "Du har nu loggats ut. Hej då!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-"Oops, du verkar inte ha administratörsrättigheter. Kontrollera dina "
-"rättigheter."
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr ""
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr ""
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr ""
-"Ej giltig bild. Vänligen använd enbart bilder i format PNG, GIF eller JPG."
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr "Detta är ej en giltig bild. Vänligen använd bildformatet PNG."
-
-msgid "The image could not be received, would you mind retry?"
-msgstr "Bilden kunde inte tas emot. Det kanske hjälper att försöka igen."
-
-msgid "Your service logo has been successfully changed!"
-msgstr ""
-
-msgid "Your image was added to the list!"
-msgstr "Din bild lades till i listan!"
-
-msgid "Changes saved!"
-msgstr "Ändringar sparade!"
-
-msgid "Logo"
-msgstr "Logotyp"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr ""
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-"Bildformatet för logotypen måste vara PNG. Om något fält lämnas tomt kommer "
-"loggan ej att ändras."
-
-msgid "Remove this logo"
-msgstr "Ta bort denna logotyp."
-
-msgid "View this logo"
-msgstr "Se denna logotyp"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-
-msgid "Access statistics"
-msgstr ""
-
-msgid "Share statistics"
-msgstr ""
-
-msgid "Other statistics"
-msgstr ""
-
-msgid "January"
-msgstr "Januari"
-
-msgid "February"
-msgstr "Februari"
-
-msgid "March"
-msgstr "Mars"
-
-msgid "April"
-msgstr "April"
-
-msgid "May"
-msgstr "Maj"
-
-msgid "June"
-msgstr "Juni"
-
-msgid "July"
-msgstr "Juli"
-
-msgid "August"
-msgstr "Augusti"
-
-msgid "September"
-msgstr "September"
-
-msgid "October"
-msgstr "Oktober"
-
-msgid "November"
-msgstr "November"
-
-msgid "December"
-msgstr "December"
-
-msgid "Monday"
-msgstr "Måndag"
-
-msgid "Tuesday"
-msgstr "Tisdag"
-
-msgid "Wednesday"
-msgstr "Onsdag"
-
-msgid "Thursday"
-msgstr "Torsdag"
-
-msgid "Friday"
-msgstr "Fredag"
-
-msgid "Saturday"
-msgstr "Lördag"
-
-msgid "Sunday"
-msgstr "Söndag"
-
-msgid "Total"
-msgstr "Totalt"
-
-msgid "Archives"
-msgstr ""
-
-msgid "Music"
-msgstr "Musik"
-
-msgid "Backgrounds"
-msgstr "Bakgrunder"
-
-msgid "Share"
-msgstr ""
-
-msgid "Background"
-msgstr "Bakgrund"
-
-msgid "Notice"
-msgstr "Notis"
-
-msgid "Your design preferences have been saved!"
-msgstr "Dina inställningar för utseendet har sparats!"
-
-msgid "Please check your inputs: something is missing!"
-msgstr "Vänligen kontrollera indata -- någonting saknas!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-
-msgid "Use default background"
-msgstr "Använd standardbakgrunden"
-
-msgid "Use your own image"
-msgstr "Använd egen bild"
-
-msgid "Select a background to use and change the display options."
-msgstr "Välj en bakgrund och ändra inställningar för utseendet."
-
-msgid "Use your own color"
-msgstr "Använd egen färg"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr ""
-"Ange det hexadecimala värdet (webbfärgvärdet) för den färg du vill använda "
-"som bakgrund."
-
-msgid "Manage backgrounds"
-msgstr "Anpassa bakgrunder"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr ""
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-
-msgid "Simple notice"
-msgstr ""
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-
-msgid "Advanced notice"
-msgstr ""
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-
-msgid "Available updates"
-msgstr "Tillgängliga uppdateringar"
-
-msgid "What's new?"
-msgstr "Vad är nytt?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr ""
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-"Du använder utvecklingsversionen av Jappix. Den uppdateras genom vårt repo "
-"genom att köra: %s."
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-"En ny version av Jappix finns tillgänglig! Kontrollera vad som är nytt och "
-"starta uppdateringen."
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr "Din version är gammal. Uppdatera till %s nu genom att klicka här!"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"Din version verkar vara aktuell, men du kan kontrollera uppdateringar "
-"manuellt genom att klicka här."
-
-msgid "Check for updates"
-msgstr "Sök efter uppdateringar"
-
-msgid "Update in progress"
-msgstr "Uppdaterar"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr ""
-"Jappix har uppdaterats. Du använder nu den senaste versionen. Varsågod!"
-
-msgid "The update has failed! Please try again later."
-msgstr "Uppdateringen misslyckades. Vänligen försök igen senare."
-
-msgid "Downloading package..."
-msgstr "Laddar ned.."
-
-msgid "Removing current Jappix system files..."
-msgstr ""
-
-msgid "Extracting package..."
-msgstr ""
-
-msgid "Regenerating storage folder tree..."
-msgstr ""
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix är nu uppdaterad!"
-
-msgid "Aborted: socket error!"
-msgstr ""
-
-msgid "Aborted: buffer error!"
-msgstr ""
-
-msgid "Aborted: everything is not writable!"
-msgstr ""
-
-msgid "Aborted: could not extract the package!"
-msgstr ""
-
-msgid "Visits"
-msgstr "Besök"
-
-msgid "Daily"
-msgstr "Dagligen"
-
-msgid "Weekly"
-msgstr "Veckovis"
-
-msgid "Monthly"
-msgstr "Månatligen"
-
-msgid "Yearly"
-msgstr "Årsvis"
-
-msgid "Size"
-msgstr "Storlek"
-
-msgid "Clean everything"
-msgstr "Rensa allt"
-
-msgid "Purge cache"
-msgstr "Rensa cache"
-
-msgid "Purge logs"
-msgstr "Rensa loggar"
-
-msgid "Purge sent files"
-msgstr ""
-
-msgid "Purge updates"
-msgstr "Rensa uppdateringar"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr ""
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr ""
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-
-msgid "Title"
-msgstr "Titel"
-
-msgid "Artist"
-msgstr "Artist"
-
-msgid "Album"
-msgstr "Album"
-
-msgid "File"
-msgstr "Fil"
-
-msgid "Upload"
-msgstr "Ladda upp"
-
-msgid "The folder is empty."
-msgstr "Mappen är tom."
-
-msgid "The music could not be received, please retry!"
-msgstr ""
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-
-msgid "Your music has been added!"
-msgstr ""
-
-msgid "The selected elements have been removed."
-msgstr ""
-
-msgid "You must select elements to remove!"
-msgstr ""
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-
-msgid "Manage"
-msgstr "Hantera"
-
-msgid "List"
-msgstr "Lista"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-
-msgid "The user has been added!"
-msgstr "Användaren har lagts till!"
-
-msgid "The chosen users have been removed."
-msgstr "De valda användarna har tagits bort."
-
-msgid "You must select one or more users to be removed!"
-msgstr "Välj en eller flera användare som ska tas bort!"
-
-msgid "Yesterday"
-msgstr "Igår"
-
-msgid "%s days ago"
-msgstr "%s dagar sedan"
-
-msgid "User currently active"
-msgstr ""
-
-msgid "Last seen: %s"
-msgstr ""
-
-msgid "Inactive since: %s"
-msgstr ""
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr ""
-
-msgid "Static content server"
-msgstr ""
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr ""
-
-msgid "User uploads server"
-msgstr ""
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr ""
-
-msgid "Suggested friends"
-msgstr ""
-
-msgid "Check all"
-msgstr "Markera alla"
-
-msgid "Uncheck all"
-msgstr "Avmarkera alla"
-
-msgid "Choose"
-msgstr "Välj"
-
-msgid "List name"
-msgstr ""
-
-msgid "Allow"
-msgstr "Tillåt"
-
-msgid "Deny"
-msgstr "Förbjud"
-
-msgid "Group"
-msgstr "Grupp"
-
-msgid "Subscription"
-msgstr "Prenumeration"
-
-msgid "Both"
-msgstr "Båda"
-
-msgid "From"
-msgstr "Från"
-
-msgid "Everybody"
-msgstr "Alla"
-
-msgid "Send messages"
-msgstr "Skicka meddelanden"
-
-msgid "Send queries"
-msgstr "Skicka frågor"
-
-msgid "See my status"
-msgstr "Se min status"
-
-msgid "Send his/her status"
-msgstr "Skicka hans/hennes status"
-
-msgid "Everything"
-msgstr "Allt"
-
-msgid "Item"
-msgstr ""
-
-msgid "Order"
-msgstr "Ordning"
-
-msgid "Active for this session"
-msgstr "Aktiv för denna session"
-
-msgid "Always active"
-msgstr "Alltid aktiv"
-
-msgid "User directory"
-msgstr "Deltagarkatalog"
-
-msgid "Search a friend"
-msgstr "Sök en vän"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-
-msgid "Send him/her a message"
-msgstr "Skicka honom/henne ett meddelande"
-
-msgid "Start a chat with him/her"
-msgstr "Öppna en chatt med honom/henne"
-
-msgid "Available shortcuts:"
-msgstr "Tillgängliga genvägar:"
-
-msgid "%s removes the chat logs"
-msgstr "%s tar bort chattloggar"
-
-msgid "%s joins a groupchat"
-msgstr "%s går med i en gruppchatt"
-
-msgid "%s closes the chat"
-msgstr "%s stänger chatten"
-
-msgid "%s shows the user profile"
-msgstr "%s visar användarprofil"
-
-msgid "%s sends a message to the room"
-msgstr "%s skickar ett meddelande till (alla i) rummet"
-
-msgid "%s changes your nickname"
-msgstr "%s ändrar ditt chattnamn"
-
-msgid "%s sends a message to someone in the room"
-msgstr "%s skickar ett meddelande till någon i rummet"
-
-msgid "%s changes the room topic"
-msgstr "%s ändrar rummets ämnestext"
-
-msgid "%s kicks a user of the room"
-msgstr ""
-
-msgid "%s bans a user of the room"
-msgstr ""
-
-msgid "%s invites someone to join the room"
-msgstr "%s bjuder in någon att gå med i rummet"
-
-msgid "Public profile"
-msgstr ""
-
-msgid "Your profile anywhere on the Web."
-msgstr ""
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-
-msgid "Yay, let's create your public profile!"
-msgstr ""
-
-msgid "Enable my public profile"
-msgstr ""
-
-msgid "Jappix for your phone"
-msgstr ""
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr ""
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-
-msgid "You haven't provided any file to download"
-msgstr ""
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr ""
-
-msgid "Woah this file isn't found, please double check"
-msgstr ""
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr ""
-
-msgid "Statistics are currently disabled in the settings."
-msgstr ""
-
-msgid "New event!"
-msgstr ""
-
-msgid "%s is typing..."
-msgstr ""
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-
-msgid "Username"
-msgstr ""
-
-msgid "Enter password"
-msgstr ""
-
-msgid "Once again..."
-msgstr ""
-
-msgid "Code"
-msgstr ""
-
-msgid "Security code"
-msgstr ""
-
-msgid "Advertising space available!"
-msgstr ""
-
-msgid "Advertise here"
-msgstr ""
-
-msgid "Analytics (%s)"
-msgstr ""
-
-msgid "Track visits"
-msgstr ""
-
-msgid "Piwik URL"
-msgstr ""
-
-msgid "Piwik tracking ID"
-msgstr ""
-
-msgid "Advertising (%s)"
-msgstr ""
-
-msgid "Enable ads"
-msgstr ""
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "Content ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "Mute"
-msgstr ""
-
-msgid "Unmute"
-msgstr ""
-
-msgid "Is calling you"
-msgstr ""
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr ""
-
-msgid "Waiting..."
-msgstr ""
-
-msgid "Ringing..."
-msgstr ""
-
-msgid "Declined the call"
-msgstr ""
-
-msgid "Call error"
-msgstr ""
-
-msgid "Ended the call"
-msgstr ""
-
-msgid "Call ended"
-msgstr ""
-
-msgid "Call canceled"
-msgstr ""
-
-msgid "Canceled the call"
-msgstr ""
-
-msgid "Is already in a call"
-msgstr ""
-
-msgid "Ending call..."
-msgstr ""
-
-msgid "Accept"
-msgstr ""
-
-msgid "Decline"
-msgstr ""
-
-msgid "Okay"
-msgstr ""
-
-msgid "Retry"
-msgstr ""
-
-msgid "Audio Call"
-msgstr ""
-
-msgid "Video Call"
-msgstr ""
diff --git a/i18n/tr/LC_MESSAGES/main.mo b/i18n/tr/LC_MESSAGES/main.mo
deleted file mode 100644
index 7e214bc4..00000000
--- a/i18n/tr/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/tr/LC_MESSAGES/main.po b/i18n/tr/LC_MESSAGES/main.po
deleted file mode 100644
index 071ea1dc..00000000
--- a/i18n/tr/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2375 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-# Caner BAŞARAN <basaran.caner@gmail.com>, 2013
-# Caner BAŞARAN <basaran.caner@gmail.com>, 2013
-# Fatih Malakçı <>, 2012
-# Onur Göker <>, 2012
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:21+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Turkish (http://www.transifex.com/projects/p/jappix/language/"
-"tr/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: tr\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr ""
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"Bilgisayarınızda javascript eksik ya da kapalı. Lütfen bu sorunu düzeltin, "
-"aksi halde Jappix çalışmayacaktır."
-
-msgid "Social channel, chat and more."
-msgstr "Sosyal kanal, sohbet ve daha fazlası"
-
-msgid "Create your public profile."
-msgstr "Açık profilinizi oluşturun."
-
-msgid "A mini-chat for your website."
-msgstr "Web siteniz için mini-sohbet."
-
-msgid "Get Jappix, get support."
-msgstr "Jappix'i edinin, destek alın."
-
-msgid "Statistics around Jappix."
-msgstr "Jappix istatistikleri."
-
-msgid "Legal disclaimer for Jappix."
-msgstr "Jappix için yasal feragatname"
-
-msgid "Download Jappix for free."
-msgstr "Jappix'i ücretsiz indirin."
-
-msgid "Contribute to the Jappix code."
-msgstr "Jappix koduna katkıda bulunun."
-
-msgid "Jappix for your company."
-msgstr "Şirketiniz için Jappix."
-
-msgid "Find a public Jappix node."
-msgstr "Açık bir Jappix ağı bulun."
-
-msgid "Credits"
-msgstr "Katkıda Bulunanlar"
-
-msgid "Association"
-msgstr "İşbirliği"
-
-msgid "Web agency"
-msgstr "Web ajansı"
-
-msgid "Legal"
-msgstr "Yasal"
-
-msgid "Legal disclaimer"
-msgstr "Yasal feragatname"
-
-msgid "Terms of use and legal"
-msgstr "Kullanım koşulları ve izinler"
-
-msgid "Owner"
-msgstr "Sahibi"
-
-msgid "Node owner"
-msgstr "Ağ sahibi"
-
-msgid "By using our service, you accept %s."
-msgstr "Servisimizi kullanarak bunu kabul etmiş olursunuz: %s."
-
-msgid "our terms of use"
-msgstr "Kullanım koşullarımız"
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Jappix bir ağ sorunundan dolayı kesildi, bir bug ya da giriş hatası (doğru "
-"kimlik girilip girilmediğini kontrol edin). Hata için üzgünüz."
-
-msgid "The element list on this server could not be obtained!"
-msgstr "Sunucudaki eleman listesi alınamadı!"
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"Parolanız değiştirildi, artık yeni kullanıcı bilgilerinizle giriş "
-"yapabilirsiniz."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "XMPP hesabınız kaldırıldı, güle güle!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "XMPP hesabınızın oturumunu sonlandırdınız, iyi günler!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr ""
-
-msgid "The groupchat has been removed."
-msgstr "Grup sohbet kaldırılmış."
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "Ulaşmaya çalıştığınız kişi odada değil."
-
-msgid "Please enter the group chat address to join."
-msgstr "Katılmak için grup sohbet adresini yazın."
-
-msgid "Please enter your nickname to join %s."
-msgstr "%s 'e bağlanmak için rumuzunuzu girin."
-
-msgid "This room (%s) is protected with a password."
-msgstr "(%s) odasına giriş parolalı yapılmaktadır."
-
-msgid "Your browser is out of date!"
-msgstr "Tarayıcınız güncel değil!"
-
-msgid "Last %s version is better!"
-msgstr "Son sürümü %s daha iyidir!"
-
-msgid "Login"
-msgstr "Giriş"
-
-msgid "Register"
-msgstr "Kayıt"
-
-msgid "Here we go!"
-msgstr "Başla!"
-
-msgid "Server"
-msgstr "Sunucu"
-
-msgid "Password"
-msgstr "Parola"
-
-msgid "Remember me"
-msgstr "Beni hatırla"
-
-msgid "This tool has been disabled!"
-msgstr "Bu araç devre dışı bırakıldı!\""
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr ""
-"Bağlantı probleminden dolayı, oturumunuz sonlandırıldı. Şimdi ne yapmak "
-"istersiniz?"
-
-msgid "Reconnect"
-msgstr "Tekrar bağlan"
-
-msgid "Messages"
-msgstr "Mesajlar"
-
-msgid "Profile"
-msgstr "Profil"
-
-msgid "Options"
-msgstr "Seçenekler"
-
-msgid "Disconnect"
-msgstr "Bağlantıyı kes"
-
-msgid "Filter"
-msgstr "Filtrele"
-
-msgid "Add a friend"
-msgstr "Arkadaş ekle"
-
-msgid "Your groupchats"
-msgstr "Grup sohbetleriniz"
-
-msgid "Manage your favorite groupchats"
-msgstr "Favori grup sohbetlerinizi düzenleyin"
-
-msgid "More stuff"
-msgstr "Daha fazla şey"
-
-msgid "Show all friends"
-msgstr "Tüm arkadaşları göster"
-
-msgid "Only show connected friends"
-msgstr "Sadece aktif arkadaşları göster"
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "Mesaj arşivleri"
-
-msgid "Date"
-msgstr "Tarih"
-
-msgid "A short message?"
-msgstr "Kısa bir mesaj?"
-
-msgid "How are you?"
-msgstr "Nasılsın?"
-
-msgid "What are you doing?"
-msgstr "Ne yapıyorsunuz?"
-
-msgid "Join a chat"
-msgstr "Bir sohbete katılın"
-
-msgid "Status"
-msgstr "Durum"
-
-msgid "Available"
-msgstr "Uygun"
-
-msgid "Talkative"
-msgstr "Konuşkan"
-
-msgid "Away"
-msgstr "Dışarıda"
-
-msgid "Not available"
-msgstr "Uygun değil"
-
-msgid "Busy"
-msgstr "Meşgul"
-
-msgid "Offline"
-msgstr "Çevrimdışı"
-
-msgid "Mood"
-msgstr "Ruh hali"
-
-msgid "None"
-msgstr "Hiçbiri"
-
-msgid "Crazy"
-msgstr "Çılgın"
-
-msgid "Excited"
-msgstr "Heyecanlı"
-
-msgid "Playful"
-msgstr "Oyunsever"
-
-msgid "Happy"
-msgstr "Mutlu"
-
-msgid "Shocked"
-msgstr "Şaşırmış"
-
-msgid "Hot"
-msgstr "Ateşli"
-
-msgid "Sad"
-msgstr "Üzgün"
-
-msgid "Amorous"
-msgstr "Baygın"
-
-msgid "Confident"
-msgstr "Emin"
-
-msgid "Activity"
-msgstr "Aktivite"
-
-msgid "Chores"
-msgstr "Sıkıcı İşler"
-
-msgid "Drinking"
-msgstr "İçmek"
-
-msgid "Eating"
-msgstr "Yemek"
-
-msgid "Exercising"
-msgstr "Egzersiz yapmak"
-
-msgid "Grooming"
-msgstr "Süpürmek"
-
-msgid "Appointment"
-msgstr "Randevu"
-
-msgid "Inactive"
-msgstr "İnaktif"
-
-msgid "Relaxing"
-msgstr "Rahatlıyor"
-
-msgid "Talking"
-msgstr "Konuşuyor"
-
-msgid "Traveling"
-msgstr "Seyahat ediyor"
-
-msgid "Working"
-msgstr "Çalışıyor"
-
-msgid "View profile"
-msgstr "Profili incele"
-
-msgid "This is a repeat from %s"
-msgstr "Bu %s 'den tekrardır."
-
-msgid "Repeat this notice"
-msgstr "Bildirimi tekrarla"
-
-msgid "Remove this notice"
-msgstr "Bildirimi kaldır"
-
-msgid "Your profile"
-msgstr "Profiliniz"
-
-msgid "Identity"
-msgstr "Kimlik"
-
-msgid "Profile image"
-msgstr "Profil resmi"
-
-msgid "Others"
-msgstr "Diğerleri"
-
-msgid "Other"
-msgstr "Diğer"
-
-msgid "Personal"
-msgstr "Kişisel"
-
-msgid "Complete name"
-msgstr "Tam ad"
-
-msgid "Nickname"
-msgstr "Rumuz"
-
-msgid "First name"
-msgstr "Ad"
-
-msgid "Last name"
-msgstr "Soyad"
-
-msgid "Date of birth"
-msgstr "Doğum tarihi"
-
-msgid "Contact"
-msgstr "İletişim"
-
-msgid "E-mail"
-msgstr "E-posta"
-
-msgid "Phone"
-msgstr "Telefon"
-
-msgid "Website"
-msgstr "Web Adresi"
-
-msgid "Current"
-msgstr "Şu Anda"
-
-msgid "Delete"
-msgstr "Sil"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr "Ne yazık! Profil imajınız bulunmamakta."
-
-msgid "Address"
-msgstr "Adres"
-
-msgid "Street"
-msgstr "Sokak"
-
-msgid "City"
-msgstr "Şehir"
-
-msgid "Postal code"
-msgstr "Posta kodu"
-
-msgid "Country"
-msgstr "Ülke"
-
-msgid "Biography"
-msgstr "Biyografi"
-
-msgid "Important notice"
-msgstr "Önemli bildirim"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr ""
-"XMPP'de her şey özel değildir. Bu onlardan birisi olan sizin açık "
-"profilinizdir (vCard)."
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"Arkadaşlarınızın kolayca tanıması için, kendinizin profil fotoğrafınızı "
-"yüklemenizi tavsiye ederiz (%s en fazla)."
-
-msgid "Save"
-msgstr "Kaydet"
-
-msgid "Cancel"
-msgstr "İptal"
-
-msgid "Edit options"
-msgstr "Düzenleme seçenekleri"
-
-msgid "Channel"
-msgstr "Kanal"
-
-msgid "Commands"
-msgstr "Komutlar"
-
-msgid "Sounds"
-msgstr "Sesler"
-
-msgid "Privacy"
-msgstr "Gizlilik"
-
-msgid "Message archiving"
-msgstr "Mesaj arşivleme"
-
-msgid "Store an history of your chats"
-msgstr ""
-
-msgid "Geolocation"
-msgstr "Coğrafik lokasyon"
-
-msgid "Disabled"
-msgstr "Devredışı"
-
-msgid "Store all chats"
-msgstr "Tüm sohbetleri sakla"
-
-msgid "Store friend chats"
-msgstr "Arkadaş sohbetlerini sakla"
-
-msgid "Remove all archives"
-msgstr "Tüm arşivleri kaldır"
-
-msgid "Empty"
-msgstr "Boş"
-
-msgid "Empty channel"
-msgstr "Boş kanal"
-
-msgid "Persistent"
-msgstr "Tutarlı"
-
-msgid "Maximum notices"
-msgstr "En fazla bildirim"
-
-msgid "Account"
-msgstr "Hesap"
-
-msgid "Change password"
-msgstr "Parola değiştir"
-
-msgid "Delete account"
-msgstr "Hesabı sil"
-
-msgid "Old"
-msgstr "Eski"
-
-msgid "New (2 times)"
-msgstr "Yeni (2 adet)"
-
-msgid "Suggested chatrooms"
-msgstr "Önerilen sohbet odaları"
-
-msgid "Skip"
-msgstr ""
-
-msgid "Continue"
-msgstr "Devam"
-
-msgid "To"
-msgstr "Kime"
-
-msgid "Close"
-msgstr "Kapat"
-
-msgid "unknown"
-msgstr "bilinmeyen"
-
-msgid "Unavailable"
-msgstr "Uygun değil"
-
-msgid "is now"
-msgstr "şu anda"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Avatarınız yüklenirken lütfen bekleyin..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "İşte burada! Yeni güzel bir profil fotoğrafı!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "Dosya formatı desteklenmiyor ya da hatalı dosya boyutu."
-
-msgid "Reply"
-msgstr "Cevap ver"
-
-msgid "Error"
-msgstr "Hata"
-
-msgid "Click here to solve the error"
-msgstr "Sorunu çözmek için tıklayın"
-
-msgid "You"
-msgstr "Siz"
-
-msgid "Remove"
-msgstr "Kaldır"
-
-msgid "Rename"
-msgstr "Yeniden adlandır"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Merhaba, ben %s, sizi arkadaşım olarak eklemek istiyorum."
-
-msgid "Smiley insertion"
-msgstr "Gülenyüz ekleme"
-
-msgid "Change style"
-msgstr "Stili değiştir"
-
-msgid "Text in bold"
-msgstr "Kalın yazı"
-
-msgid "Text in italic"
-msgstr "İtalik yazı"
-
-msgid "Underlined text"
-msgstr "Altıçizili"
-
-msgid "Send a file"
-msgstr "Dosya gönder"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr "Yüklendiğinde, arkadaşlarınız gönderdiğiniz dosyayı indirebilecek."
-
-msgid "Save chat"
-msgstr "Konuşmayı kaydet"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-"Sohbet günlükleri için bağlantıya tıklayın ve bekleyin. Daha sonra dosyayı "
-"almak için tekrar tıklayın."
-
-msgid "This chat is empty!"
-msgstr "Sohbet boş!"
-
-msgid "Generate file!"
-msgstr "Dosyayı oluştur!"
-
-msgid "Download file!"
-msgstr "Dosyayı indir!"
-
-msgid "Clean current chat"
-msgstr "Mevcut konuşmayı temizle"
-
-msgid "Show user profile"
-msgstr "Kullanıcı profilini göster"
-
-msgid "Add this contact to your friends"
-msgstr "Bu bağlantıyı arkadaşlarınız arasına ekleyin"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Bu grup sohbetini favorilerinize ekleyin"
-
-msgid "All tabs"
-msgstr "Tüm sekmeler"
-
-msgid "Join groupchat"
-msgstr ""
-
-msgid "Close this tab"
-msgstr "Bu sekmeyi kapat"
-
-msgid "no subject defined for this room."
-msgstr "bu oda için konu belirlenmedi."
-
-msgid "Administration panel for this room"
-msgstr "Bu oda için yönetici paneli"
-
-msgid "Moderators"
-msgstr "Moderatörler"
-
-msgid "Participants"
-msgstr "Katılımcılar"
-
-msgid "Visitors"
-msgstr "Ziyaretçiler"
-
-msgid "Manage favorite rooms"
-msgstr "Favori odaları düzenle"
-
-msgid "Change favorites"
-msgstr "Favorileri değiştir"
-
-msgid "Search a room"
-msgstr "Oda ara"
-
-msgid "Select a favorite"
-msgstr "Favori seç"
-
-msgid "Getting the name..."
-msgstr "İsmi alıyor..."
-
-msgid "Gateway"
-msgstr "Ağ Geçidi"
-
-msgid "Name"
-msgstr "Ad"
-
-msgid "Room"
-msgstr "Oda"
-
-msgid "Add"
-msgstr "Ekle"
-
-msgid "Edit"
-msgstr "Düzenle"
-
-msgid "Search a room on"
-msgstr "Bunda oda ara"
-
-msgid "No room found on this server."
-msgstr "Bu sunucuda oda bulunamadı"
-
-msgid "Service discovery"
-msgstr "Servis keşfi"
-
-msgid "Server to query"
-msgstr "Sorgu için sunucu"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "Üzgünüz, giriş herhangi bir sonuç dönmedi!"
-
-msgid "Accounts"
-msgstr "Hesaplar"
-
-msgid "Authentications"
-msgstr "Doğrulamalar"
-
-msgid "Automation"
-msgstr "Otomasyon"
-
-msgid "Clients"
-msgstr "İstemciler"
-
-msgid "Collaboration"
-msgstr "İşbirliği"
-
-msgid "Components"
-msgstr "Bileşenler"
-
-msgid "Rooms"
-msgstr "Odalar"
-
-msgid "Directories"
-msgstr "Klasörler"
-
-msgid "Gateways"
-msgstr "Ağ geçitleri"
-
-msgid "News"
-msgstr "Haberler"
-
-msgid "Hierarchy"
-msgstr "Hiyerarşi"
-
-msgid "Proxies"
-msgstr "Vekil sunucular"
-
-msgid "Publication/Subscription"
-msgstr "Yayınlama/Abonelik"
-
-msgid "Storage"
-msgstr "Depolama"
-
-msgid "Service offline or broken"
-msgstr "Servis çevrimdışı ya da hatalı"
-
-msgid "Your inbox"
-msgstr "Gelen kutunuz"
-
-msgid "Available actions"
-msgstr "Yapılabilecek işlemler"
-
-msgid "Clean"
-msgstr "Temizle"
-
-msgid "New"
-msgstr "Yeni"
-
-msgid "Received"
-msgstr "Alınan"
-
-msgid "Subject"
-msgstr "Konu"
-
-msgid "Content"
-msgstr "İçerik"
-
-msgid "Send message"
-msgstr "Mesaj gönder"
-
-msgid "Your inbox is empty."
-msgstr "Gelen kutusu boş."
-
-msgid "MUC administration"
-msgstr "MUC yönetimi"
-
-msgid "You administrate this room"
-msgstr "Bu odayı siz yönetiyorsunuz"
-
-msgid "Enter new subject"
-msgstr "Yeni konu girin"
-
-msgid "Configuration"
-msgstr "Yapılandırma"
-
-msgid "Authorizations"
-msgstr "Yetkiler"
-
-msgid "Member list"
-msgstr "Üye listesi"
-
-msgid "Owner list"
-msgstr "Sahip listesi"
-
-msgid "Administrator list"
-msgstr "Yönetici listesi"
-
-msgid "Outcast list"
-msgstr "Uzaklaştırılan listesi"
-
-msgid "Add an input"
-msgstr "Bir veri ekleyin"
-
-msgid "Destroy this MUC"
-msgstr "Bu MUC'u kaldırın"
-
-msgid "Yes, let's do it!"
-msgstr "Evet, hadi yapalım!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "Arkadaşınız konuşmayı izliyor."
-
-msgid "Your friend is writing a message..."
-msgstr "Arkadaşınız mesaj yazıyor..."
-
-msgid "Your friend stopped writing a message."
-msgstr "Arkadaşınız mesaj yazmayı durdurdu."
-
-msgid "Your friend is doing something else."
-msgstr "Arkadaşınız başka bir şey yapıyor."
-
-msgid "Your friend closed the chat."
-msgstr "Arkadaşınız sohbeti kapattı."
-
-msgid "Requesting this service..."
-msgstr "Servis bekleniyor..."
-
-msgid "Loading"
-msgstr "Yükleniyor"
-
-msgid "changed his/her nickname to %s"
-msgstr "rumuzunu %s olarak değiştirdi"
-
-msgid "joined the chat room"
-msgstr "sohbet odasına katıldı"
-
-msgid "left the chat room"
-msgstr "sohbet odasını terk etti"
-
-msgid "%s left"
-msgstr "%s ayrıldı"
-
-msgid "%s joined"
-msgstr "%s katıldı"
-
-msgid "no status"
-msgstr "durum yok"
-
-msgid "has been kicked"
-msgstr "atılmış"
-
-msgid "has been banned"
-msgstr "engellenmiş"
-
-msgid "no reason"
-msgstr "sebep yok"
-
-msgid "Communicate with the entire world!"
-msgstr "Tüm dünyayla iletişim kurun!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-
-msgid "Hi there!"
-msgstr "Merhaba!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr ""
-"Mevcut XMPP hesabınızla giriş yapın ya da ücretsiz yeni bir hesap oluşturun."
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-"Mevcut XMPP hesabınızla giriş yapın. Ayrıca grup sohbetleri için bunu da "
-"kullanabilirsiniz: %s"
-
-msgid "Previous"
-msgstr "Önceki"
-
-msgid "General"
-msgstr "Genel"
-
-msgid "Advanced"
-msgstr "Gelişmiş"
-
-msgid "Resource"
-msgstr "Kaynak"
-
-msgid "Priority"
-msgstr "Öncelik"
-
-msgid "Low"
-msgstr "Düşük"
-
-msgid "Medium"
-msgstr "Orta"
-
-msgid "High"
-msgstr "Yüksek"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-"Katılmak istediğiniz grup sohbeti ve istediğiniz rumuzu girin. Ayrıca %s "
-"geri dönebilirsiniz."
-
-msgid "login page"
-msgstr "giriş sayfası"
-
-msgid "Share this link with your friends:"
-msgstr "Arkadaşınla bu bağlantıyı paylaş:"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-
-msgid "Required"
-msgstr "Gerekli"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "Kaydoldunuz, işte XMPP adresiniz:"
-
-msgid "Manager"
-msgstr "Müdür"
-
-msgid "Encrypted"
-msgstr "Şifreli"
-
-msgid "Unencrypted"
-msgstr "Şifresiz"
-
-msgid "Where are you?"
-msgstr "Nerdesiniz?"
-
-msgid "What's up with you?"
-msgstr "Naber?"
-
-msgid "Type something you want to share with your friends..."
-msgstr "Arkadaşlarınızla paylamak istediğiniz bir şey yazın..."
-
-msgid "Fetching the social channel..."
-msgstr "Sosyal kanal getiriliyor..."
-
-msgid "You are synchronized with your network."
-msgstr "Ağınızla eşitlenmiştir."
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "Hiçbir şey gönderemezsiniz: sadece bildirim alabilirsiniz!"
-
-msgid "Media viewer"
-msgstr "Medya görüntüleyici"
-
-msgid "Browse"
-msgstr "Gözat"
-
-msgid "Command"
-msgstr "Komut"
-
-msgid "Subscribe"
-msgstr "Abone ol"
-
-msgid "Join"
-msgstr "Katıl"
-
-msgid "Automatic"
-msgstr "Otomatik"
-
-msgid "Search"
-msgstr "Ara"
-
-msgid "No result!"
-msgstr "Sonuç yok!"
-
-msgid "No notifications."
-msgstr "No notifications."
-
-msgid "would like to add you as a friend."
-msgstr "bir arkadaş eklemek istersiniz."
-
-msgid "would like you to join this chatroom:"
-msgstr "bu sohbet odasına katılmak istersiniz:"
-
-msgid "Do you accept?"
-msgstr "Kabul ediyor musun?"
-
-msgid "Yes"
-msgstr "Evet"
-
-msgid "No"
-msgstr "Hayır"
-
-msgid "would like to get authorization."
-msgstr "yetki almak istersiniz."
-
-msgid "would like to send you a file: “%s”."
-msgstr "bir dosya göndermek istersiniz: “%s”."
-
-msgid "has received a file exchange request: “%s”."
-msgstr "bir dosya alışverişi isteği alındı: “%s”."
-
-msgid "has accepted to receive your file: “%s”."
-msgstr ""
-
-msgid "has rejected to receive your file: “%s”."
-msgstr "dosya alımınız reddedildi: “%s”."
-
-msgid "could not receive your file: “%s”."
-msgstr "dosyanız alınamadı: “%s”."
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr "Arkadaşların sana %s önerilerini görmek ister misin?"
-
-msgid "commented an item you follow: “%s”."
-msgstr "takip ettiğin öğeye yorum yapıldı: “%s”."
-
-msgid "liked your post: “%s”."
-msgstr "gönderiniz beğenildi: “%s”."
-
-msgid "quoted you somewhere: “%s”."
-msgstr "bir yerde alıntılandınız: “%s”."
-
-msgid "published on your wall: “%s”."
-msgstr "duvarınızda yayınlandı: “%s”."
-
-msgid "tagged you in a photo (%s)."
-msgstr "bir fotoğraf içinde etiketlendiniz (%s)."
-
-msgid "tagged you in a video (%s)."
-msgstr "bir video içinde etiketlendiniz (%s)."
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-
-msgid "Open"
-msgstr ""
-
-msgid "Show"
-msgstr "Göster"
-
-msgid "Hide"
-msgstr "Gizle"
-
-msgid "Submit"
-msgstr "Gönder"
-
-msgid "Client"
-msgstr "İstemci"
-
-msgid "System"
-msgstr "Sistem"
-
-msgid "Local time"
-msgstr "Yerel zaman"
-
-msgid "Comments"
-msgstr "Yorumlar"
-
-msgid "User profile"
-msgstr "Kullanıcı profili"
-
-msgid "See his/her position on the globe"
-msgstr "See his/her position on the globe"
-
-msgid "Confirm"
-msgstr "Confirm"
-
-msgid "anonymous mode"
-msgstr "anonymous mode"
-
-msgid "Groups"
-msgstr "Groups"
-
-msgid "Unclassified"
-msgstr "Unclassified"
-
-msgid "Authorize"
-msgstr "Authorize"
-
-msgid "Ask for authorization"
-msgstr "Ask for authorization"
-
-msgid "Unblock"
-msgstr "Unblock"
-
-msgid "Prohibit"
-msgstr "Prohibit"
-
-msgid "Block"
-msgstr "Block"
-
-msgid "Chat"
-msgstr "Chat"
-
-msgid "Groupchat"
-msgstr "Groupchat"
-
-msgid "Jappix Mobile"
-msgstr "Jappix Mobile"
-
-msgid "Desktop"
-msgstr "Desktop"
-
-msgid "Mobile"
-msgstr "Mobile"
-
-msgid "Please wait..."
-msgstr "Please wait..."
-
-msgid "Please enable JavaScript"
-msgstr "Please enable JavaScript"
-
-msgid "Show comments"
-msgstr "Show comments"
-
-msgid "Loading comments..."
-msgstr "Loading comments..."
-
-msgid "Could not get the comments!"
-msgstr "Could not get the comments!"
-
-msgid "Comments locked!"
-msgstr "Comments locked!"
-
-msgid "Type your comment here..."
-msgstr "Type your comment here..."
-
-msgid "Your channel"
-msgstr "Your channel"
-
-msgid "Channel of"
-msgstr "Channel of"
-
-msgid "More notices..."
-msgstr "Daha fazla bildirim..."
-
-msgid "Attach a file"
-msgstr "Attach a file"
-
-msgid "Send"
-msgstr "Send"
-
-msgid "Unattach the file"
-msgstr "Unattach the file"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-
-msgid "Authorization failed"
-msgstr "Authorization failed"
-
-msgid "Registration failed, please choose a different username"
-msgstr "Registration failed, please choose a different username"
-
-msgid "Service unavailable"
-msgstr "Service unavailable"
-
-msgid "Internal server error, try later"
-msgstr "Internal server error, try later"
-
-msgid "Your form has been sent."
-msgstr "Your form has been sent."
-
-msgid "Application"
-msgstr "Application"
-
-msgid "Media integration"
-msgstr "Media integration"
-
-msgid "Keep local chat archives"
-msgstr ""
-
-msgid "XMPP links"
-msgstr "XMPP links"
-
-msgid "Open XMPP links with Jappix"
-msgstr "Open XMPP links with Jappix"
-
-msgid "changed the subject to:"
-msgstr "changed the subject to:"
-
-msgid "Welcome!"
-msgstr "Welcome!"
-
-msgid "Friends"
-msgstr "Friends"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr ""
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-
-msgid "Enable notification sounds"
-msgstr "Enable notification sounds"
-
-msgid "Share your position on the globe"
-msgstr "Share your position on the globe"
-
-msgid "Offline friends"
-msgstr "Offline friends"
-
-msgid "Don't hide offline friends"
-msgstr "Don't hide offline friends"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr "Aferin! Şimdi arkadaşlarınla Jappix'i paylaşabilirsin!"
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-
-msgid "Share Jappix on %s"
-msgstr "Share Jappix on %s"
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "Using Jappix, an open social platform. I am %s!"
-
-msgid "Unknown name"
-msgstr "Unknown name"
-
-msgid "Unknown country"
-msgstr "Unknown country"
-
-msgid "Click to enable"
-msgstr "Click to enable"
-
-msgid "Click to disable"
-msgstr "Click to disable"
-
-msgid "Installation"
-msgstr "Kurulum"
-
-msgid "Jappix installation"
-msgstr "Jappix kurulumu"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "Jappix kurulumuna hoşgeldiniz!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-
-msgid "Installation Steps:"
-msgstr "Kurulum Adımları:"
-
-msgid "Welcome"
-msgstr "Welcome"
-
-msgid "Storage configuration"
-msgstr "Storage configuration"
-
-msgid "Administrator account"
-msgstr "Administrator account"
-
-msgid "Main configuration"
-msgstr "Main configuration"
-
-msgid "Hosts configuration"
-msgstr "Hosts configuration"
-
-msgid "Services installation"
-msgstr "Services installation"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr "Sosyal bulutunu oluşturma vakti: sadece sonraki adıma geç!"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr "The folder is writable, you can continue!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr "Oops, you missed something or the two passwords do not match!"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-
-msgid "User"
-msgstr "User"
-
-msgid "Service"
-msgstr "Service"
-
-msgid "Service name"
-msgstr "Service name"
-
-msgid "Service description"
-msgstr "Service description"
-
-msgid "Owner name"
-msgstr "Kullanıcı adı"
-
-msgid "Owner website"
-msgstr "Kullanıcı web sayfası"
-
-msgid "Connection"
-msgstr "Connection"
-
-msgid "Lock the host"
-msgstr "Lock the host"
-
-msgid "Anonymous mode"
-msgstr "Anonymous mode"
-
-msgid "HTTP authentication"
-msgstr "HTTP doğrulama"
-
-msgid "Registration allowed"
-msgstr "Registration allowed"
-
-msgid "Use the built-in BOSH proxy"
-msgstr ""
-
-msgid "Manager link"
-msgstr "Manager link"
-
-msgid "Groupchats to join"
-msgstr "Groupchats to join"
-
-msgid "Suggest groupchats"
-msgstr "Önerilen grup sohbetler"
-
-msgid "Encryption"
-msgstr "Encryption"
-
-msgid "HTTPS storage"
-msgstr "HTTPS storage"
-
-msgid "Force HTTPS"
-msgstr "Force HTTPS"
-
-msgid "Compression"
-msgstr "Compression"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-
-msgid "Main host"
-msgstr "Main host"
-
-msgid "Groupchat host"
-msgstr "Groupchat host"
-
-msgid "Pubsub host"
-msgstr "Pubsub host"
-
-msgid "Anonymous host"
-msgstr "Anonymous host"
-
-msgid "Directory host"
-msgstr "Directory host"
-
-msgid "BOSH host"
-msgstr "BOSH host"
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-
-msgid "Thanks for using Jappix!"
-msgstr "Thanks for using Jappix!"
-
-msgid "Next"
-msgstr "Next"
-
-msgid "Finish"
-msgstr "Finish"
-
-msgid "Check again"
-msgstr "Check again"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-"The folder is not writable, set the right permissions to the %s directory."
-
-msgid "%s is installed on your system."
-msgstr "%s is installed on your system."
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s is not installed on your system, you should install %2s."
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "PHP maximum upload size is sufficient (%s)."
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-
-msgid "Jappix manager"
-msgstr "Jappix manager"
-
-msgid "Manager access"
-msgstr "Manager access"
-
-msgid "Statistics"
-msgstr "Statistics"
-
-msgid "Hosts"
-msgstr "Hosts"
-
-msgid "Design"
-msgstr "Design"
-
-msgid "Repeat"
-msgstr "Repeat"
-
-msgid "All"
-msgstr "All"
-
-msgid "Horizontal"
-msgstr "Horizontal"
-
-msgid "Vertical"
-msgstr "Vertical"
-
-msgid "Center"
-msgstr "Center"
-
-msgid "Left"
-msgstr "Left"
-
-msgid "Right"
-msgstr "Right"
-
-msgid "Top"
-msgstr "Top"
-
-msgid "Bottom"
-msgstr "Bottom"
-
-msgid "Adapt"
-msgstr "Adapt"
-
-msgid "Color"
-msgstr "Color"
-
-msgid "Users"
-msgstr "Users"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-
-msgid "Please use the form below to login to the administration panel."
-msgstr "Please use the form below to login to the administration panel."
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-
-msgid "Credentials"
-msgstr "Credentials"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "You have been logged out. Goodbye!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr "Change your Jappix node configuration with this tool."
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr "Jappix is fully customisable: you can change its design right here."
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr "This is not a valid image, please use PNG, GIF or JPG!"
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr "This is not a valid image, please use the PNG format!"
-
-msgid "The image could not be received, would you mind retry?"
-msgstr "The image could not be received, would you mind retry?"
-
-msgid "Your service logo has been successfully changed!"
-msgstr "Your service logo has been successfully changed!"
-
-msgid "Your image was added to the list!"
-msgstr "Your image was added to the list!"
-
-msgid "Changes saved!"
-msgstr "Changes saved!"
-
-msgid "Logo"
-msgstr "Logo"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr "Upload each logo with the recommended maximum pixel size."
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-
-msgid "Remove this logo"
-msgstr "Remove this logo"
-
-msgid "View this logo"
-msgstr "View this logo"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-
-msgid "Access statistics"
-msgstr "Access statistics"
-
-msgid "Share statistics"
-msgstr "Share statistics"
-
-msgid "Other statistics"
-msgstr "Other statistics"
-
-msgid "January"
-msgstr "January"
-
-msgid "February"
-msgstr "February"
-
-msgid "March"
-msgstr "March"
-
-msgid "April"
-msgstr "April"
-
-msgid "May"
-msgstr "May"
-
-msgid "June"
-msgstr "June"
-
-msgid "July"
-msgstr "July"
-
-msgid "August"
-msgstr "August"
-
-msgid "September"
-msgstr "September"
-
-msgid "October"
-msgstr "October"
-
-msgid "November"
-msgstr "November"
-
-msgid "December"
-msgstr "December"
-
-msgid "Monday"
-msgstr "Monday"
-
-msgid "Tuesday"
-msgstr "Tuesday"
-
-msgid "Wednesday"
-msgstr "Wednesday"
-
-msgid "Thursday"
-msgstr "Thursday"
-
-msgid "Friday"
-msgstr "Friday"
-
-msgid "Saturday"
-msgstr "Saturday"
-
-msgid "Sunday"
-msgstr "Sunday"
-
-msgid "Total"
-msgstr "Total"
-
-msgid "Archives"
-msgstr ""
-
-msgid "Music"
-msgstr "Music"
-
-msgid "Backgrounds"
-msgstr "Backgrounds"
-
-msgid "Share"
-msgstr "Share"
-
-msgid "Background"
-msgstr "Background"
-
-msgid "Notice"
-msgstr "Bildirim"
-
-msgid "Your design preferences have been saved!"
-msgstr "Your design preferences have been saved!"
-
-msgid "Please check your inputs: something is missing!"
-msgstr "Please check your inputs: something is missing!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-
-msgid "Use default background"
-msgstr "Use default background"
-
-msgid "Use your own image"
-msgstr "Use your own image"
-
-msgid "Select a background to use and change the display options."
-msgstr "Select a background to use and change the display options."
-
-msgid "Use your own color"
-msgstr "Use your own color"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr "Type the hexadecimal color value you want to use as a background."
-
-msgid "Manage backgrounds"
-msgstr "Manage backgrounds"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr "If you want to remove some backgrounds, use the browser below."
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-
-msgid "Simple notice"
-msgstr "Basit not"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr "Kod görüntülenemez,Sadece basit bir metin görüntülenebilir."
-
-msgid "Advanced notice"
-msgstr "Gelişmiş not"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-"Bildirimlerinizi Gömülü HTML,CSS ve Javascript aracılığıyla "
-"kişiselleştirebilirsiniz ancak stili kodlamak zorundasınız."
-
-msgid "Available updates"
-msgstr "Uygun güncellemeler"
-
-msgid "What's new?"
-msgstr "Neler yeni?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr "Depolamanız yazılabilir değil, lütfen gerekli izinleri verin!"
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-"%1s proxy problemleri oluşturabilir, lütfen %2s değerini %3s değeriyle "
-"değiştirin!"
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-"Jappix'in geliştirme versiyonunu kullanıyorsunuz. Depolama yerimizden şunu "
-"çalıştırarak güncelleme yapın: %s."
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-"Yeni bir Jappix versiyonu mevcut! Nelerin yeni olduğuna bakın ve güncelleyin!"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr "Sürümünüz güncel değil. Buraya tıklayarak şuna güncelleyin: %s"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"Sürümünüz güncel gözüküyor; ama buraya tıklayarak da güncellemeleri manuel "
-"olarak kontrol edebilirsiniz."
-
-msgid "Check for updates"
-msgstr "Güncellemeler için kontrol et"
-
-msgid "Update in progress"
-msgstr "Güncelleme işlemi sürüyor"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-
-msgid "The update has failed! Please try again later."
-msgstr "The update has failed! Please try again later."
-
-msgid "Downloading package..."
-msgstr "Downloading package..."
-
-msgid "Removing current Jappix system files..."
-msgstr "Removing current Jappix system files..."
-
-msgid "Extracting package..."
-msgstr "Extracting package..."
-
-msgid "Regenerating storage folder tree..."
-msgstr "Regenerating storage folder tree..."
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix is now up to date!"
-
-msgid "Aborted: socket error!"
-msgstr "Aborted: socket error!"
-
-msgid "Aborted: buffer error!"
-msgstr "Aborted: buffer error!"
-
-msgid "Aborted: everything is not writable!"
-msgstr "Aborted: everything is not writable!"
-
-msgid "Aborted: could not extract the package!"
-msgstr "Aborted: could not extract the package!"
-
-msgid "Visits"
-msgstr "Visits"
-
-msgid "Daily"
-msgstr "Daily"
-
-msgid "Weekly"
-msgstr "Weekly"
-
-msgid "Monthly"
-msgstr "Monthly"
-
-msgid "Yearly"
-msgstr "Yearly"
-
-msgid "Size"
-msgstr "Size"
-
-msgid "Clean everything"
-msgstr "Clean everything"
-
-msgid "Purge cache"
-msgstr "Purge cache"
-
-msgid "Purge logs"
-msgstr "Purge logs"
-
-msgid "Purge sent files"
-msgstr "Purge sent files"
-
-msgid "Purge updates"
-msgstr "Purge updates"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "The storage folder you wanted to clean is now empty!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr "The file you want to upload must be smaller than %s."
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-
-msgid "Title"
-msgstr "Title"
-
-msgid "Artist"
-msgstr "Artist"
-
-msgid "Album"
-msgstr "Album"
-
-msgid "File"
-msgstr "File"
-
-msgid "Upload"
-msgstr "Yükle"
-
-msgid "The folder is empty."
-msgstr "Klasör boş."
-
-msgid "The music could not be received, please retry!"
-msgstr "The music could not be received, please retry!"
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-
-msgid "Your music has been added!"
-msgstr "Müziğiniz eklendi!"
-
-msgid "The selected elements have been removed."
-msgstr "Seçili ögeler kaldırılmış."
-
-msgid "You must select elements to remove!"
-msgstr "Kaldırmak için bir öge seçmelisiniz!"
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-"Bu araçla yeni bir kullanıcı ekleyin yada bir parola değiştirin(geçerli bir "
-"kullanıcı adı girin) Lütfen zor bir parola seçin!"
-
-msgid "Manage"
-msgstr "Düzenle"
-
-msgid "List"
-msgstr "Liste"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-
-msgid "The user has been added!"
-msgstr "Kullanıcı eklenmiş!"
-
-msgid "The chosen users have been removed."
-msgstr "Seçili kullanıcı kaldırılmış."
-
-msgid "You must select one or more users to be removed!"
-msgstr "Kaldırmak için bir veya daha fazla kullanıcı seçmelisiniz!"
-
-msgid "Yesterday"
-msgstr "Dün"
-
-msgid "%s days ago"
-msgstr "%s gün önce"
-
-msgid "User currently active"
-msgstr "Kullanıcı aktif"
-
-msgid "Last seen: %s"
-msgstr "En son görüldüğü tarih: %s"
-
-msgid "Inactive since: %s"
-msgstr "Şu zamandan beri pasif: %s"
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr "Arkadaşınız mesaj(lar)ı almamış görünüyor!"
-
-msgid "Static content server"
-msgstr "Statik içerik sunucusu"
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr "Bu şunun için statik içerik sunucusu %1s, “%2s”."
-
-msgid "User uploads server"
-msgstr "Kullanıcı yükleme sunucusu"
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr "Bu şunun için kullanıcı yükleme sunucusu %1s, “%2s”."
-
-msgid "Suggested friends"
-msgstr "Önerilen arkadaşlar"
-
-msgid "Check all"
-msgstr "Tümünü seç"
-
-msgid "Uncheck all"
-msgstr "Seçilileri kaldır"
-
-msgid "Choose"
-msgstr "Seç"
-
-msgid "List name"
-msgstr "Adı listele"
-
-msgid "Allow"
-msgstr "İzin ver"
-
-msgid "Deny"
-msgstr "Engelle"
-
-msgid "Group"
-msgstr "Grup"
-
-msgid "Subscription"
-msgstr "Abonelik"
-
-msgid "Both"
-msgstr "Hepsi"
-
-msgid "From"
-msgstr "Kimden"
-
-msgid "Everybody"
-msgstr "Herkes"
-
-msgid "Send messages"
-msgstr "Mesaj gönder"
-
-msgid "Send queries"
-msgstr "Sorgu gönder"
-
-msgid "See my status"
-msgstr "Durumuma bak"
-
-msgid "Send his/her status"
-msgstr "Onun durumunu gönder"
-
-msgid "Everything"
-msgstr "Her şey"
-
-msgid "Item"
-msgstr "Öğe"
-
-msgid "Order"
-msgstr "Sıra"
-
-msgid "Active for this session"
-msgstr "Bu oturum için aktif"
-
-msgid "Always active"
-msgstr "Her zaman aktif"
-
-msgid "User directory"
-msgstr "Kullanıcı klasörü"
-
-msgid "Search a friend"
-msgstr "Bir arkadaşı ara"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-
-msgid "Send him/her a message"
-msgstr "Ona bir mesaj gönder"
-
-msgid "Start a chat with him/her"
-msgstr "Onunla bir konuşma başlat"
-
-msgid "Available shortcuts:"
-msgstr "Uygun kısayollar:"
-
-msgid "%s removes the chat logs"
-msgstr "%s sohbet günlüklerini kaldırdı"
-
-msgid "%s joins a groupchat"
-msgstr "%s grup sohbete katıldı"
-
-msgid "%s closes the chat"
-msgstr "%s sohbeti kapattı"
-
-msgid "%s shows the user profile"
-msgstr "%s kullanıcı profilini gösterdi"
-
-msgid "%s sends a message to the room"
-msgstr "%s odaya mesaj gönderiyor"
-
-msgid "%s changes your nickname"
-msgstr "%s rumuzunuzu değiştiriyor"
-
-msgid "%s sends a message to someone in the room"
-msgstr "%s odadaki birine mesaj gönderiyor"
-
-msgid "%s changes the room topic"
-msgstr "%s oda konusunu değiştiriyor"
-
-msgid "%s kicks a user of the room"
-msgstr ""
-
-msgid "%s bans a user of the room"
-msgstr ""
-
-msgid "%s invites someone to join the room"
-msgstr "%s invites someone to join the room"
-
-msgid "Public profile"
-msgstr "Genel"
-
-msgid "Your profile anywhere on the Web."
-msgstr "Profiliniz Web üzerinde her yerde."
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-
-msgid "Yay, let's create your public profile!"
-msgstr "Haydi, açık profilini oluştur!"
-
-msgid "Enable my public profile"
-msgstr "Genel profilimi aktif et"
-
-msgid "Jappix for your phone"
-msgstr "Mobil telefonunuz için Jappix"
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr ""
-"Mesajlar,Kanallar,profiller ve daha fazlası için tek bir telefon uygulaması!"
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-
-msgid "You haven't provided any file to download"
-msgstr "İndirilecek herhangi bir dosya belirlemediniz"
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr ""
-"Eğer bir anahtar sağlamazsanız, bir dosya indirme işlemini "
-"gerçekleştiremezsiniz."
-
-msgid "Woah this file isn't found, please double check"
-msgstr "Dosya bulunamadı, lütfen tekrar kontrol edin"
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr "Girdiğiniz anahtar bu dosyayı indirebilme yetkisine sahip değil."
-
-msgid "Statistics are currently disabled in the settings."
-msgstr "İstatistikler, ayarlarda geçici olarak kullanılamamaktadır."
-
-msgid "New event!"
-msgstr "Yeni olay!"
-
-msgid "%s is typing..."
-msgstr "%s yazıyor..."
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-
-msgid "Username"
-msgstr "Kullanıcı adı"
-
-msgid "Enter password"
-msgstr "Parola girin"
-
-msgid "Once again..."
-msgstr "Bir kez daha..."
-
-msgid "Code"
-msgstr "Kod"
-
-msgid "Security code"
-msgstr "Güvenlik kodu"
-
-msgid "Advertising space available!"
-msgstr ""
-
-msgid "Advertise here"
-msgstr ""
-
-msgid "Analytics (%s)"
-msgstr ""
-
-msgid "Track visits"
-msgstr ""
-
-msgid "Piwik URL"
-msgstr "Piwik URL"
-
-msgid "Piwik tracking ID"
-msgstr ""
-
-msgid "Advertising (%s)"
-msgstr ""
-
-msgid "Enable ads"
-msgstr "Reklamları etkinleştir"
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "Content ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "Mute"
-msgstr ""
-
-msgid "Unmute"
-msgstr ""
-
-msgid "Is calling you"
-msgstr ""
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr ""
-
-msgid "Waiting..."
-msgstr ""
-
-msgid "Ringing..."
-msgstr ""
-
-msgid "Declined the call"
-msgstr ""
-
-msgid "Call error"
-msgstr ""
-
-msgid "Ended the call"
-msgstr ""
-
-msgid "Call ended"
-msgstr ""
-
-msgid "Call canceled"
-msgstr ""
-
-msgid "Canceled the call"
-msgstr ""
-
-msgid "Is already in a call"
-msgstr ""
-
-msgid "Ending call..."
-msgstr ""
-
-msgid "Accept"
-msgstr ""
-
-msgid "Decline"
-msgstr ""
-
-msgid "Okay"
-msgstr ""
-
-msgid "Retry"
-msgstr ""
-
-msgid "Audio Call"
-msgstr ""
-
-msgid "Video Call"
-msgstr ""
diff --git a/i18n/uk/LC_MESSAGES/main.mo b/i18n/uk/LC_MESSAGES/main.mo
deleted file mode 100644
index 30ec03dc..00000000
--- a/i18n/uk/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/uk/LC_MESSAGES/main.po b/i18n/uk/LC_MESSAGES/main.po
deleted file mode 100644
index 54fb1f8d..00000000
--- a/i18n/uk/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2267 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:21+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Ukrainian (http://www.transifex.com/projects/p/jappix/"
-"language/uk/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: uk\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "default:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"У вашому браузері не активовано виконання JavaScript, тому Ви не зможете "
-"використовувати Jappix. Будь ласка, активуйте виконання JavaScript."
-
-msgid "Social channel, chat and more."
-msgstr ""
-
-msgid "Create your public profile."
-msgstr ""
-
-msgid "A mini-chat for your website."
-msgstr ""
-
-msgid "Get Jappix, get support."
-msgstr ""
-
-msgid "Statistics around Jappix."
-msgstr ""
-
-msgid "Legal disclaimer for Jappix."
-msgstr ""
-
-msgid "Download Jappix for free."
-msgstr ""
-
-msgid "Contribute to the Jappix code."
-msgstr ""
-
-msgid "Jappix for your company."
-msgstr ""
-
-msgid "Find a public Jappix node."
-msgstr ""
-
-msgid "Credits"
-msgstr ""
-
-msgid "Association"
-msgstr ""
-
-msgid "Web agency"
-msgstr ""
-
-msgid "Legal"
-msgstr ""
-
-msgid "Legal disclaimer"
-msgstr ""
-
-msgid "Terms of use and legal"
-msgstr ""
-
-msgid "Owner"
-msgstr ""
-
-msgid "Node owner"
-msgstr ""
-
-msgid "By using our service, you accept %s."
-msgstr ""
-
-msgid "our terms of use"
-msgstr ""
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Робота Jappix була перервана через проблеми зі зв'язком, помилку чи невірні "
-"дані користувача (перевірте логін та пароль), просимо вибачення за "
-"незручності."
-
-msgid "The element list on this server could not be obtained!"
-msgstr ""
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"Ваш пароль було змінено, тепер Ви можете увійти, використовуючи новий пароль."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "Ваш акаунт було видалено."
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr ""
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr "Кімнати, до якої ви приєднались, не існує. Ви повинні створити її."
-
-msgid "The groupchat has been removed."
-msgstr ""
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "Користувач, з яким Ви намагаєтесь зв’язатися, відсутній у кімнаті."
-
-msgid "Please enter the group chat address to join."
-msgstr "Будьласка введіть адресу чату."
-
-msgid "Please enter your nickname to join %s."
-msgstr "Будь ласка, введіть ваш псевдонім щоб приєднатися до %s."
-
-msgid "This room (%s) is protected with a password."
-msgstr "Кімната %s захищена паролем."
-
-msgid "Your browser is out of date!"
-msgstr "Ваш браузер застарів!"
-
-msgid "Last %s version is better!"
-msgstr ""
-
-msgid "Login"
-msgstr "Вхід"
-
-msgid "Register"
-msgstr "Реєстрація"
-
-msgid "Here we go!"
-msgstr "Поїхали!"
-
-msgid "Server"
-msgstr "Сервер"
-
-msgid "Password"
-msgstr "Пароль"
-
-msgid "Remember me"
-msgstr "Запам’ятати мене"
-
-msgid "This tool has been disabled!"
-msgstr "Цей інструмент був вимкнений, ви не можете використовувати його!"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr ""
-"Вас було від’єднано через проблеми з мережею. Що Ви хочете зробити тепер?"
-
-msgid "Reconnect"
-msgstr "Перепідключитись"
-
-msgid "Messages"
-msgstr "Повідомлення"
-
-msgid "Profile"
-msgstr "Профіль"
-
-msgid "Options"
-msgstr "Налаштування"
-
-msgid "Disconnect"
-msgstr "Від’єднатись"
-
-msgid "Filter"
-msgstr "Фільтр"
-
-msgid "Add a friend"
-msgstr "Додати друга"
-
-msgid "Your groupchats"
-msgstr "Ваша конференція"
-
-msgid "Manage your favorite groupchats"
-msgstr "Керування вашими улюбленими конференціями"
-
-msgid "More stuff"
-msgstr "Більше "
-
-msgid "Show all friends"
-msgstr "Показувати всіх друзів"
-
-msgid "Only show connected friends"
-msgstr "Показувати тільки під’єднаних друзів"
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "Архів повідомлень"
-
-msgid "Date"
-msgstr "Дата"
-
-msgid "A short message?"
-msgstr "Коротке повідомлення?"
-
-msgid "How are you?"
-msgstr "Як ти?"
-
-msgid "What are you doing?"
-msgstr "Що ти робиш?"
-
-msgid "Join a chat"
-msgstr "Приєднатися до чату"
-
-msgid "Status"
-msgstr "Статус"
-
-msgid "Available"
-msgstr "Доступний"
-
-msgid "Talkative"
-msgstr "Говіркий"
-
-msgid "Away"
-msgstr "Відійшов"
-
-msgid "Not available"
-msgstr "Не доступний"
-
-msgid "Busy"
-msgstr "Зайнятий"
-
-msgid "Offline"
-msgstr ""
-
-msgid "Mood"
-msgstr "Настрій"
-
-msgid "None"
-msgstr "Нема"
-
-msgid "Crazy"
-msgstr "Божевільний"
-
-msgid "Excited"
-msgstr "Зацікавлений"
-
-msgid "Playful"
-msgstr "Грайливий"
-
-msgid "Happy"
-msgstr "Веселий"
-
-msgid "Shocked"
-msgstr "Шокований"
-
-msgid "Hot"
-msgstr "Гарячий"
-
-msgid "Sad"
-msgstr "Сумний"
-
-msgid "Amorous"
-msgstr "Закоханий"
-
-msgid "Confident"
-msgstr "Впевнений"
-
-msgid "Activity"
-msgstr "Діяльність"
-
-msgid "Chores"
-msgstr "Господарські роботи"
-
-msgid "Drinking"
-msgstr "П'ю"
-
-msgid "Eating"
-msgstr "Їм"
-
-msgid "Exercising"
-msgstr "Виконую вправи"
-
-msgid "Grooming"
-msgstr "Чепурюсь"
-
-msgid "Appointment"
-msgstr ""
-
-msgid "Inactive"
-msgstr "Неактивний"
-
-msgid "Relaxing"
-msgstr "Відпочиваю"
-
-msgid "Talking"
-msgstr "Розмовляю"
-
-msgid "Traveling"
-msgstr "Подорожую"
-
-msgid "Working"
-msgstr "Працюю"
-
-msgid "View profile"
-msgstr "Показати профіль"
-
-msgid "This is a repeat from %s"
-msgstr ""
-
-msgid "Repeat this notice"
-msgstr "Повторити нагадування"
-
-msgid "Remove this notice"
-msgstr "Видалити нагадування"
-
-msgid "Your profile"
-msgstr "Твій профіль"
-
-msgid "Identity"
-msgstr ""
-
-msgid "Profile image"
-msgstr "Аватар"
-
-msgid "Others"
-msgstr "Інші"
-
-msgid "Other"
-msgstr ""
-
-msgid "Personal"
-msgstr "Персональні дані"
-
-msgid "Complete name"
-msgstr "Повне ім'я"
-
-msgid "Nickname"
-msgstr "Псевдонім"
-
-msgid "First name"
-msgstr "Ім'я"
-
-msgid "Last name"
-msgstr "Прізвище"
-
-msgid "Date of birth"
-msgstr "Дата народження"
-
-msgid "Contact"
-msgstr "Контакт"
-
-msgid "E-mail"
-msgstr ""
-
-msgid "Phone"
-msgstr "Телефон"
-
-msgid "Website"
-msgstr "Веб сайт"
-
-msgid "Current"
-msgstr "Поточні"
-
-msgid "Delete"
-msgstr "Видалити"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr "Ви не вказали аватар в вашому профілі."
-
-msgid "Address"
-msgstr "Адреса"
-
-msgid "Street"
-msgstr "Вулиця"
-
-msgid "City"
-msgstr "Місто"
-
-msgid "Postal code"
-msgstr "Індекс"
-
-msgid "Country"
-msgstr "Країна"
-
-msgid "Biography"
-msgstr "Біографія"
-
-msgid "Important notice"
-msgstr "Важливі нагадування"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr "Не вся інформація приватна в XMPP; Ваш профіль - одна з цих речей."
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-
-msgid "Save"
-msgstr "Зберегти"
-
-msgid "Cancel"
-msgstr "Відмінити"
-
-msgid "Edit options"
-msgstr "Редагувати налаштування"
-
-msgid "Channel"
-msgstr "Канал"
-
-msgid "Commands"
-msgstr ""
-
-msgid "Sounds"
-msgstr "Музика"
-
-msgid "Privacy"
-msgstr "Приватність"
-
-msgid "Message archiving"
-msgstr "Архів повідомлень"
-
-msgid "Store an history of your chats"
-msgstr ""
-
-msgid "Geolocation"
-msgstr "Географічне положення"
-
-msgid "Disabled"
-msgstr ""
-
-msgid "Store all chats"
-msgstr ""
-
-msgid "Store friend chats"
-msgstr ""
-
-msgid "Remove all archives"
-msgstr ""
-
-msgid "Empty"
-msgstr "Порожній"
-
-msgid "Empty channel"
-msgstr "Порожній канал"
-
-msgid "Persistent"
-msgstr "Наполегливий"
-
-msgid "Maximum notices"
-msgstr "Максимальна кількість нагадувань"
-
-msgid "Account"
-msgstr "Акаунт"
-
-msgid "Change password"
-msgstr "Змінити пароль"
-
-msgid "Delete account"
-msgstr "Видалити акаунт"
-
-msgid "Old"
-msgstr "Старий"
-
-msgid "New (2 times)"
-msgstr "Новий (2 рази)"
-
-msgid "Suggested chatrooms"
-msgstr ""
-
-msgid "Skip"
-msgstr ""
-
-msgid "Continue"
-msgstr "Продовжити"
-
-msgid "To"
-msgstr "До"
-
-msgid "Close"
-msgstr "Зачинити"
-
-msgid "unknown"
-msgstr "невідомий"
-
-msgid "Unavailable"
-msgstr "Не доступний"
-
-msgid "is now"
-msgstr "В даний час"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr ""
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "Ось вонін! Новий красивий аватар!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "Файл зображення не підтримується, або має неправильний розмір."
-
-msgid "Reply"
-msgstr "Відповісти"
-
-msgid "Error"
-msgstr "Помилка"
-
-msgid "Click here to solve the error"
-msgstr ""
-
-msgid "You"
-msgstr "Ти"
-
-msgid "Remove"
-msgstr "Видалити"
-
-msgid "Rename"
-msgstr "Перейменувати"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Привіт я %s, хочу додати тебе до списку друзів."
-
-msgid "Smiley insertion"
-msgstr "Вставити смайл"
-
-msgid "Change style"
-msgstr "Змінити стиль"
-
-msgid "Text in bold"
-msgstr "жирний"
-
-msgid "Text in italic"
-msgstr "курсивний"
-
-msgid "Underlined text"
-msgstr "підкреслений"
-
-msgid "Send a file"
-msgstr ""
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr ""
-
-msgid "Save chat"
-msgstr "Зберегти бесіду"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-
-msgid "This chat is empty!"
-msgstr "Ця бесіда порожня!"
-
-msgid "Generate file!"
-msgstr "Створити файл!"
-
-msgid "Download file!"
-msgstr "Завантажити файл!"
-
-msgid "Clean current chat"
-msgstr "Очистити бесіду"
-
-msgid "Show user profile"
-msgstr "Показати профіль користувача"
-
-msgid "Add this contact to your friends"
-msgstr "Додати цей контакт в друзі"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Додати конференцію в улюблені"
-
-msgid "All tabs"
-msgstr "Всі вкладки"
-
-msgid "Join groupchat"
-msgstr ""
-
-msgid "Close this tab"
-msgstr "Закрити цю вкладку"
-
-msgid "no subject defined for this room."
-msgstr "Не вказана тема для кімнати."
-
-msgid "Administration panel for this room"
-msgstr "Панель адміністрування для кімнати"
-
-msgid "Moderators"
-msgstr "Модератори"
-
-msgid "Participants"
-msgstr "Учасники"
-
-msgid "Visitors"
-msgstr "Відвідувачі"
-
-msgid "Manage favorite rooms"
-msgstr "Керування улюбленими кімнатами"
-
-msgid "Change favorites"
-msgstr "Змінити улюблені"
-
-msgid "Search a room"
-msgstr "Пошук кімнат"
-
-msgid "Select a favorite"
-msgstr "Оберіть улюблену"
-
-msgid "Getting the name..."
-msgstr "Отримання імені"
-
-msgid "Gateway"
-msgstr "Маршрутизатор"
-
-msgid "Name"
-msgstr "Ім'я"
-
-msgid "Room"
-msgstr "Кімната"
-
-msgid "Add"
-msgstr "Додати"
-
-msgid "Edit"
-msgstr "Редагувати"
-
-msgid "Search a room on"
-msgstr "Пошук кімнати на"
-
-msgid "No room found on this server."
-msgstr "Не знайдено кімнат на цьому сервері."
-
-msgid "Service discovery"
-msgstr "Пошук сервісів"
-
-msgid "Server to query"
-msgstr "запит на сервер"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr ""
-
-msgid "Accounts"
-msgstr "Акаунти"
-
-msgid "Authentications"
-msgstr "Автентифікація"
-
-msgid "Automation"
-msgstr "Автоматизація"
-
-msgid "Clients"
-msgstr "Клієнти"
-
-msgid "Collaboration"
-msgstr "Співробітництво"
-
-msgid "Components"
-msgstr "Компоненти"
-
-msgid "Rooms"
-msgstr "Кімнати"
-
-msgid "Directories"
-msgstr "Директорії"
-
-msgid "Gateways"
-msgstr "Маршрутизатори"
-
-msgid "News"
-msgstr "Новини"
-
-msgid "Hierarchy"
-msgstr "Ієрархія"
-
-msgid "Proxies"
-msgstr "Проксі"
-
-msgid "Publication/Subscription"
-msgstr "Публікація / Підписка"
-
-msgid "Storage"
-msgstr ""
-
-msgid "Service offline or broken"
-msgstr "Сервіс не в мережі або зламаний"
-
-msgid "Your inbox"
-msgstr "Вхідні"
-
-msgid "Available actions"
-msgstr "Доступні дії"
-
-msgid "Clean"
-msgstr "Очистити"
-
-msgid "New"
-msgstr "Нові"
-
-msgid "Received"
-msgstr "Отримані"
-
-msgid "Subject"
-msgstr "Тема"
-
-msgid "Content"
-msgstr "Вміст"
-
-msgid "Send message"
-msgstr "Надіслати повідомлення"
-
-msgid "Your inbox is empty."
-msgstr "Немає нових повідомлень"
-
-msgid "MUC administration"
-msgstr ""
-
-msgid "You administrate this room"
-msgstr "Ви адмініструєте цю кімнату"
-
-msgid "Enter new subject"
-msgstr "Введіть нову тему"
-
-msgid "Configuration"
-msgstr "Налаштування"
-
-msgid "Authorizations"
-msgstr "Авторизація"
-
-msgid "Member list"
-msgstr "Список користувачів"
-
-msgid "Owner list"
-msgstr "Список власників"
-
-msgid "Administrator list"
-msgstr "Список адміністраторів"
-
-msgid "Outcast list"
-msgstr ""
-
-msgid "Add an input"
-msgstr ""
-
-msgid "Destroy this MUC"
-msgstr "Знищити конференцію"
-
-msgid "Yes, let's do it!"
-msgstr "Так!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "Ваш друг звернув увагу на бесіду."
-
-msgid "Your friend is writing a message..."
-msgstr "Ваш друг пише повідомлення..."
-
-msgid "Your friend stopped writing a message."
-msgstr "Ваш друг припинив писати повідомлення."
-
-msgid "Your friend is doing something else."
-msgstr "Ваш друг робить щось інше."
-
-msgid "Your friend closed the chat."
-msgstr "Ваш друг закрив чат."
-
-msgid "Requesting this service..."
-msgstr "Запит сервісу..."
-
-msgid "Loading"
-msgstr "Завантаження"
-
-msgid "changed his/her nickname to %s"
-msgstr ""
-
-msgid "joined the chat room"
-msgstr "увійшов до кімнати"
-
-msgid "left the chat room"
-msgstr "вийшов з кімнати"
-
-msgid "%s left"
-msgstr ""
-
-msgid "%s joined"
-msgstr ""
-
-msgid "no status"
-msgstr "нема статусу"
-
-msgid "has been kicked"
-msgstr "було виграно"
-
-msgid "has been banned"
-msgstr "було забанено"
-
-msgid "no reason"
-msgstr "нема причини"
-
-msgid "Communicate with the entire world!"
-msgstr ""
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-
-msgid "Hi there!"
-msgstr "Привіт!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr ""
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-
-msgid "Previous"
-msgstr "Попередній"
-
-msgid "General"
-msgstr "Основні"
-
-msgid "Advanced"
-msgstr "Розширені"
-
-msgid "Resource"
-msgstr "Ресурс"
-
-msgid "Priority"
-msgstr "Приорітет"
-
-msgid "Low"
-msgstr "Низький"
-
-msgid "Medium"
-msgstr "Середній"
-
-msgid "High"
-msgstr "Високий"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-
-msgid "login page"
-msgstr "Сторінка входу"
-
-msgid "Share this link with your friends:"
-msgstr "Поділитись цим посиланням з другом."
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-
-msgid "Required"
-msgstr "Потребує"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr ""
-
-msgid "Manager"
-msgstr "Керівник"
-
-msgid "Encrypted"
-msgstr "Зашифровано"
-
-msgid "Unencrypted"
-msgstr ""
-
-msgid "Where are you?"
-msgstr "Де ти?"
-
-msgid "What's up with you?"
-msgstr "Що з тобою?"
-
-msgid "Type something you want to share with your friends..."
-msgstr ""
-
-msgid "Fetching the social channel..."
-msgstr "Отримання соціального каналу..."
-
-msgid "You are synchronized with your network."
-msgstr "Ви синхронізовані з вашою мережею."
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "Не можна нічого відправити: ви можете тільки приймати повідомлення!"
-
-msgid "Media viewer"
-msgstr ""
-
-msgid "Browse"
-msgstr "Браузер"
-
-msgid "Command"
-msgstr "Команди"
-
-msgid "Subscribe"
-msgstr "Підписка"
-
-msgid "Join"
-msgstr "Приєднатись"
-
-msgid "Automatic"
-msgstr "Автоматично"
-
-msgid "Search"
-msgstr "Пошук"
-
-msgid "No result!"
-msgstr "Нема результатів!"
-
-msgid "No notifications."
-msgstr "Нема нагадувань."
-
-msgid "would like to add you as a friend."
-msgstr "хоче додати вас як друга."
-
-msgid "would like you to join this chatroom:"
-msgstr "Хоче приєднатись до кімнати:"
-
-msgid "Do you accept?"
-msgstr "Ви приймаєте?"
-
-msgid "Yes"
-msgstr "Так"
-
-msgid "No"
-msgstr "Ні"
-
-msgid "would like to get authorization."
-msgstr "хоче отримати авторизацію."
-
-msgid "would like to send you a file: “%s”."
-msgstr ""
-
-msgid "has received a file exchange request: “%s”."
-msgstr ""
-
-msgid "has accepted to receive your file: “%s”."
-msgstr ""
-
-msgid "has rejected to receive your file: “%s”."
-msgstr ""
-
-msgid "could not receive your file: “%s”."
-msgstr ""
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr ""
-
-msgid "commented an item you follow: “%s”."
-msgstr ""
-
-msgid "liked your post: “%s”."
-msgstr ""
-
-msgid "quoted you somewhere: “%s”."
-msgstr ""
-
-msgid "published on your wall: “%s”."
-msgstr ""
-
-msgid "tagged you in a photo (%s)."
-msgstr ""
-
-msgid "tagged you in a video (%s)."
-msgstr ""
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-
-msgid "Open"
-msgstr ""
-
-msgid "Show"
-msgstr ""
-
-msgid "Hide"
-msgstr ""
-
-msgid "Submit"
-msgstr "Надіслати"
-
-msgid "Client"
-msgstr "Клієнт"
-
-msgid "System"
-msgstr "Система"
-
-msgid "Local time"
-msgstr "Локальний час"
-
-msgid "Comments"
-msgstr "Коментарі"
-
-msgid "User profile"
-msgstr "Профіль користувача"
-
-msgid "See his/her position on the globe"
-msgstr "Бачити його/її місцезнаходження"
-
-msgid "Confirm"
-msgstr "Підтвердити"
-
-msgid "anonymous mode"
-msgstr "анонімний режим"
-
-msgid "Groups"
-msgstr "Групи"
-
-msgid "Unclassified"
-msgstr "Немає групи"
-
-msgid "Authorize"
-msgstr "Авторизований"
-
-msgid "Ask for authorization"
-msgstr "Надіслати запит авторизації"
-
-msgid "Unblock"
-msgstr ""
-
-msgid "Prohibit"
-msgstr "Заборонити"
-
-msgid "Block"
-msgstr "Заблокувати"
-
-msgid "Chat"
-msgstr "Бесіда"
-
-msgid "Groupchat"
-msgstr "Конференція"
-
-msgid "Jappix Mobile"
-msgstr "мобільний Jappix "
-
-msgid "Desktop"
-msgstr "Повна версія"
-
-msgid "Mobile"
-msgstr "Мобільний"
-
-msgid "Please wait..."
-msgstr "Будь ласка, зачекайте..."
-
-msgid "Please enable JavaScript"
-msgstr "Будь ласка, дозвольте виконання JavaScript"
-
-msgid "Show comments"
-msgstr ""
-
-msgid "Loading comments..."
-msgstr ""
-
-msgid "Could not get the comments!"
-msgstr ""
-
-msgid "Comments locked!"
-msgstr ""
-
-msgid "Type your comment here..."
-msgstr ""
-
-msgid "Your channel"
-msgstr "Ваш канал"
-
-msgid "Channel of"
-msgstr ""
-
-msgid "More notices..."
-msgstr ""
-
-msgid "Attach a file"
-msgstr "Приєднати файл"
-
-msgid "Send"
-msgstr "Надіслати"
-
-msgid "Unattach the file"
-msgstr "Видалити файл"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-
-msgid "Authorization failed"
-msgstr "Помилка авторизації"
-
-msgid "Registration failed, please choose a different username"
-msgstr ""
-
-msgid "Service unavailable"
-msgstr "Сервіс недоступний"
-
-msgid "Internal server error, try later"
-msgstr ""
-
-msgid "Your form has been sent."
-msgstr ""
-
-msgid "Application"
-msgstr ""
-
-msgid "Media integration"
-msgstr ""
-
-msgid "Keep local chat archives"
-msgstr ""
-
-msgid "XMPP links"
-msgstr ""
-
-msgid "Open XMPP links with Jappix"
-msgstr ""
-
-msgid "changed the subject to:"
-msgstr ""
-
-msgid "Welcome!"
-msgstr ""
-
-msgid "Friends"
-msgstr "Друзі"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr ""
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-
-msgid "Enable notification sounds"
-msgstr ""
-
-msgid "Share your position on the globe"
-msgstr ""
-
-msgid "Offline friends"
-msgstr ""
-
-msgid "Don't hide offline friends"
-msgstr ""
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr ""
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-
-msgid "Share Jappix on %s"
-msgstr ""
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr ""
-
-msgid "Unknown name"
-msgstr ""
-
-msgid "Unknown country"
-msgstr ""
-
-msgid "Click to enable"
-msgstr ""
-
-msgid "Click to disable"
-msgstr ""
-
-msgid "Installation"
-msgstr ""
-
-msgid "Jappix installation"
-msgstr ""
-
-msgid "Welcome to the Jappix installation!"
-msgstr ""
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-
-msgid "Installation Steps:"
-msgstr ""
-
-msgid "Welcome"
-msgstr ""
-
-msgid "Storage configuration"
-msgstr ""
-
-msgid "Administrator account"
-msgstr ""
-
-msgid "Main configuration"
-msgstr ""
-
-msgid "Hosts configuration"
-msgstr ""
-
-msgid "Services installation"
-msgstr ""
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr ""
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr ""
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-
-msgid "User"
-msgstr ""
-
-msgid "Service"
-msgstr ""
-
-msgid "Service name"
-msgstr ""
-
-msgid "Service description"
-msgstr ""
-
-msgid "Owner name"
-msgstr ""
-
-msgid "Owner website"
-msgstr ""
-
-msgid "Connection"
-msgstr ""
-
-msgid "Lock the host"
-msgstr ""
-
-msgid "Anonymous mode"
-msgstr ""
-
-msgid "HTTP authentication"
-msgstr ""
-
-msgid "Registration allowed"
-msgstr ""
-
-msgid "Use the built-in BOSH proxy"
-msgstr ""
-
-msgid "Manager link"
-msgstr ""
-
-msgid "Groupchats to join"
-msgstr ""
-
-msgid "Suggest groupchats"
-msgstr ""
-
-msgid "Encryption"
-msgstr ""
-
-msgid "HTTPS storage"
-msgstr ""
-
-msgid "Force HTTPS"
-msgstr ""
-
-msgid "Compression"
-msgstr ""
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-
-msgid "Main host"
-msgstr ""
-
-msgid "Groupchat host"
-msgstr ""
-
-msgid "Pubsub host"
-msgstr ""
-
-msgid "Anonymous host"
-msgstr ""
-
-msgid "Directory host"
-msgstr ""
-
-msgid "BOSH host"
-msgstr ""
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-
-msgid "Thanks for using Jappix!"
-msgstr ""
-
-msgid "Next"
-msgstr ""
-
-msgid "Finish"
-msgstr ""
-
-msgid "Check again"
-msgstr ""
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-
-msgid "%s is installed on your system."
-msgstr ""
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr ""
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr ""
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-
-msgid "Jappix manager"
-msgstr ""
-
-msgid "Manager access"
-msgstr ""
-
-msgid "Statistics"
-msgstr ""
-
-msgid "Hosts"
-msgstr ""
-
-msgid "Design"
-msgstr ""
-
-msgid "Repeat"
-msgstr ""
-
-msgid "All"
-msgstr ""
-
-msgid "Horizontal"
-msgstr ""
-
-msgid "Vertical"
-msgstr ""
-
-msgid "Center"
-msgstr ""
-
-msgid "Left"
-msgstr ""
-
-msgid "Right"
-msgstr ""
-
-msgid "Top"
-msgstr ""
-
-msgid "Bottom"
-msgstr ""
-
-msgid "Adapt"
-msgstr ""
-
-msgid "Color"
-msgstr ""
-
-msgid "Users"
-msgstr ""
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-
-msgid "Please use the form below to login to the administration panel."
-msgstr ""
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-
-msgid "Credentials"
-msgstr ""
-
-msgid "You have been logged out. Goodbye!"
-msgstr ""
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr ""
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr ""
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr ""
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr ""
-
-msgid "The image could not be received, would you mind retry?"
-msgstr ""
-
-msgid "Your service logo has been successfully changed!"
-msgstr ""
-
-msgid "Your image was added to the list!"
-msgstr ""
-
-msgid "Changes saved!"
-msgstr ""
-
-msgid "Logo"
-msgstr ""
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr ""
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-
-msgid "Remove this logo"
-msgstr ""
-
-msgid "View this logo"
-msgstr ""
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-
-msgid "Access statistics"
-msgstr ""
-
-msgid "Share statistics"
-msgstr ""
-
-msgid "Other statistics"
-msgstr ""
-
-msgid "January"
-msgstr ""
-
-msgid "February"
-msgstr ""
-
-msgid "March"
-msgstr ""
-
-msgid "April"
-msgstr ""
-
-msgid "May"
-msgstr ""
-
-msgid "June"
-msgstr ""
-
-msgid "July"
-msgstr ""
-
-msgid "August"
-msgstr ""
-
-msgid "September"
-msgstr ""
-
-msgid "October"
-msgstr ""
-
-msgid "November"
-msgstr ""
-
-msgid "December"
-msgstr ""
-
-msgid "Monday"
-msgstr ""
-
-msgid "Tuesday"
-msgstr ""
-
-msgid "Wednesday"
-msgstr ""
-
-msgid "Thursday"
-msgstr ""
-
-msgid "Friday"
-msgstr ""
-
-msgid "Saturday"
-msgstr ""
-
-msgid "Sunday"
-msgstr ""
-
-msgid "Total"
-msgstr ""
-
-msgid "Archives"
-msgstr ""
-
-msgid "Music"
-msgstr ""
-
-msgid "Backgrounds"
-msgstr ""
-
-msgid "Share"
-msgstr ""
-
-msgid "Background"
-msgstr ""
-
-msgid "Notice"
-msgstr ""
-
-msgid "Your design preferences have been saved!"
-msgstr ""
-
-msgid "Please check your inputs: something is missing!"
-msgstr ""
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-
-msgid "Use default background"
-msgstr ""
-
-msgid "Use your own image"
-msgstr ""
-
-msgid "Select a background to use and change the display options."
-msgstr ""
-
-msgid "Use your own color"
-msgstr ""
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr ""
-
-msgid "Manage backgrounds"
-msgstr ""
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr ""
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-
-msgid "Simple notice"
-msgstr ""
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-
-msgid "Advanced notice"
-msgstr ""
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-
-msgid "Available updates"
-msgstr ""
-
-msgid "What's new?"
-msgstr ""
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr ""
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr ""
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-
-msgid "Check for updates"
-msgstr ""
-
-msgid "Update in progress"
-msgstr ""
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr ""
-
-msgid "The update has failed! Please try again later."
-msgstr ""
-
-msgid "Downloading package..."
-msgstr ""
-
-msgid "Removing current Jappix system files..."
-msgstr ""
-
-msgid "Extracting package..."
-msgstr ""
-
-msgid "Regenerating storage folder tree..."
-msgstr ""
-
-msgid "Jappix is now up to date!"
-msgstr ""
-
-msgid "Aborted: socket error!"
-msgstr ""
-
-msgid "Aborted: buffer error!"
-msgstr ""
-
-msgid "Aborted: everything is not writable!"
-msgstr ""
-
-msgid "Aborted: could not extract the package!"
-msgstr ""
-
-msgid "Visits"
-msgstr ""
-
-msgid "Daily"
-msgstr ""
-
-msgid "Weekly"
-msgstr ""
-
-msgid "Monthly"
-msgstr ""
-
-msgid "Yearly"
-msgstr ""
-
-msgid "Size"
-msgstr ""
-
-msgid "Clean everything"
-msgstr ""
-
-msgid "Purge cache"
-msgstr ""
-
-msgid "Purge logs"
-msgstr ""
-
-msgid "Purge sent files"
-msgstr ""
-
-msgid "Purge updates"
-msgstr ""
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr ""
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr ""
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-
-msgid "Title"
-msgstr ""
-
-msgid "Artist"
-msgstr ""
-
-msgid "Album"
-msgstr ""
-
-msgid "File"
-msgstr ""
-
-msgid "Upload"
-msgstr ""
-
-msgid "The folder is empty."
-msgstr ""
-
-msgid "The music could not be received, please retry!"
-msgstr ""
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-
-msgid "Your music has been added!"
-msgstr ""
-
-msgid "The selected elements have been removed."
-msgstr ""
-
-msgid "You must select elements to remove!"
-msgstr ""
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-
-msgid "Manage"
-msgstr ""
-
-msgid "List"
-msgstr ""
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-
-msgid "The user has been added!"
-msgstr ""
-
-msgid "The chosen users have been removed."
-msgstr ""
-
-msgid "You must select one or more users to be removed!"
-msgstr ""
-
-msgid "Yesterday"
-msgstr ""
-
-msgid "%s days ago"
-msgstr ""
-
-msgid "User currently active"
-msgstr ""
-
-msgid "Last seen: %s"
-msgstr ""
-
-msgid "Inactive since: %s"
-msgstr ""
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr ""
-
-msgid "Static content server"
-msgstr ""
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr ""
-
-msgid "User uploads server"
-msgstr ""
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr ""
-
-msgid "Suggested friends"
-msgstr ""
-
-msgid "Check all"
-msgstr ""
-
-msgid "Uncheck all"
-msgstr ""
-
-msgid "Choose"
-msgstr ""
-
-msgid "List name"
-msgstr ""
-
-msgid "Allow"
-msgstr ""
-
-msgid "Deny"
-msgstr ""
-
-msgid "Group"
-msgstr ""
-
-msgid "Subscription"
-msgstr ""
-
-msgid "Both"
-msgstr ""
-
-msgid "From"
-msgstr ""
-
-msgid "Everybody"
-msgstr ""
-
-msgid "Send messages"
-msgstr ""
-
-msgid "Send queries"
-msgstr ""
-
-msgid "See my status"
-msgstr ""
-
-msgid "Send his/her status"
-msgstr ""
-
-msgid "Everything"
-msgstr ""
-
-msgid "Item"
-msgstr ""
-
-msgid "Order"
-msgstr ""
-
-msgid "Active for this session"
-msgstr ""
-
-msgid "Always active"
-msgstr ""
-
-msgid "User directory"
-msgstr ""
-
-msgid "Search a friend"
-msgstr ""
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-
-msgid "Send him/her a message"
-msgstr ""
-
-msgid "Start a chat with him/her"
-msgstr ""
-
-msgid "Available shortcuts:"
-msgstr ""
-
-msgid "%s removes the chat logs"
-msgstr ""
-
-msgid "%s joins a groupchat"
-msgstr ""
-
-msgid "%s closes the chat"
-msgstr ""
-
-msgid "%s shows the user profile"
-msgstr ""
-
-msgid "%s sends a message to the room"
-msgstr ""
-
-msgid "%s changes your nickname"
-msgstr ""
-
-msgid "%s sends a message to someone in the room"
-msgstr ""
-
-msgid "%s changes the room topic"
-msgstr ""
-
-msgid "%s kicks a user of the room"
-msgstr ""
-
-msgid "%s bans a user of the room"
-msgstr ""
-
-msgid "%s invites someone to join the room"
-msgstr ""
-
-msgid "Public profile"
-msgstr ""
-
-msgid "Your profile anywhere on the Web."
-msgstr ""
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-
-msgid "Yay, let's create your public profile!"
-msgstr ""
-
-msgid "Enable my public profile"
-msgstr ""
-
-msgid "Jappix for your phone"
-msgstr ""
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr ""
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-
-msgid "You haven't provided any file to download"
-msgstr ""
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr ""
-
-msgid "Woah this file isn't found, please double check"
-msgstr ""
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr ""
-
-msgid "Statistics are currently disabled in the settings."
-msgstr ""
-
-msgid "New event!"
-msgstr ""
-
-msgid "%s is typing..."
-msgstr ""
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-
-msgid "Username"
-msgstr ""
-
-msgid "Enter password"
-msgstr ""
-
-msgid "Once again..."
-msgstr ""
-
-msgid "Code"
-msgstr ""
-
-msgid "Security code"
-msgstr ""
-
-msgid "Advertising space available!"
-msgstr ""
-
-msgid "Advertise here"
-msgstr ""
-
-msgid "Analytics (%s)"
-msgstr ""
-
-msgid "Track visits"
-msgstr ""
-
-msgid "Piwik URL"
-msgstr ""
-
-msgid "Piwik tracking ID"
-msgstr ""
-
-msgid "Advertising (%s)"
-msgstr ""
-
-msgid "Enable ads"
-msgstr ""
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "Content ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "Mute"
-msgstr ""
-
-msgid "Unmute"
-msgstr ""
-
-msgid "Is calling you"
-msgstr ""
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr ""
-
-msgid "Waiting..."
-msgstr ""
-
-msgid "Ringing..."
-msgstr ""
-
-msgid "Declined the call"
-msgstr ""
-
-msgid "Call error"
-msgstr ""
-
-msgid "Ended the call"
-msgstr ""
-
-msgid "Call ended"
-msgstr ""
-
-msgid "Call canceled"
-msgstr ""
-
-msgid "Canceled the call"
-msgstr ""
-
-msgid "Is already in a call"
-msgstr ""
-
-msgid "Ending call..."
-msgstr ""
-
-msgid "Accept"
-msgstr ""
-
-msgid "Decline"
-msgstr ""
-
-msgid "Okay"
-msgstr ""
-
-msgid "Retry"
-msgstr ""
-
-msgid "Audio Call"
-msgstr ""
-
-msgid "Video Call"
-msgstr ""
diff --git a/i18n/uz/LC_MESSAGES/main.mo b/i18n/uz/LC_MESSAGES/main.mo
deleted file mode 100644
index e022b8bd..00000000
--- a/i18n/uz/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/uz/LC_MESSAGES/main.po b/i18n/uz/LC_MESSAGES/main.po
deleted file mode 100644
index 6e778251..00000000
--- a/i18n/uz/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2274 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-# Nurkamol Vakhidov <nurkamol@gmail.com>, 2014
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:21+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Uzbek (Cyrillic) (http://www.transifex.com/projects/p/jappix/"
-"language/uz@Cyrl/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: uz@cyrl\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "одатдаги:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"Сизнинг браузерингизда JavaScript ўчирилган, у сиз Jappix ишламайди! "
-"Илтимос, муаммони хал этинг."
-
-msgid "Social channel, chat and more."
-msgstr "Ижтимоий тармоқ, чат ва бошқалар."
-
-msgid "Create your public profile."
-msgstr "Оммавий профиль очиш."
-
-msgid "A mini-chat for your website."
-msgstr "Сизнинг сайтингиз учун мини-чат."
-
-msgid "Get Jappix, get support."
-msgstr "Jappix ва ёрдам олиш."
-
-msgid "Statistics around Jappix."
-msgstr "Jappix статистикаси."
-
-msgid "Legal disclaimer for Jappix."
-msgstr ""
-
-msgid "Download Jappix for free."
-msgstr "Jappix бепул юклаб олиш."
-
-msgid "Contribute to the Jappix code."
-msgstr "Jappix кодига ўз хиссангизни қўшинг."
-
-msgid "Jappix for your company."
-msgstr "Сизнинг компаниянгиз учун Jappix"
-
-msgid "Find a public Jappix node."
-msgstr "Оммавий Jappix тугунини қидириш."
-
-msgid "Credits"
-msgstr "Кредитлар"
-
-msgid "Association"
-msgstr ""
-
-msgid "Web agency"
-msgstr "Веб агентлик"
-
-msgid "Legal"
-msgstr ""
-
-msgid "Legal disclaimer"
-msgstr ""
-
-msgid "Terms of use and legal"
-msgstr ""
-
-msgid "Owner"
-msgstr "Хўжайин"
-
-msgid "Node owner"
-msgstr ""
-
-msgid "By using our service, you accept %s."
-msgstr ""
-
-msgid "our terms of use"
-msgstr ""
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Тармоқда муаммо хосил бўлгани учун Jappix хизмати тўхтади, хатолик ёки "
-"нотўғри кўрсатилган маълумотлар (илтимос фойдаланувчи исми ва парольни "
-"текширинг). Келтирилган ноқулайликлар учун узр сўраймиз."
-
-msgid "The element list on this server could not be obtained!"
-msgstr "Ушбу сервердан элементлар рўйхатини олиб бўлмайди."
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"Сизнинг паролингиз ўзгарди, энди сиз аккаунтингизга янги киритилган логин "
-"маълумотлар орқали киришингиз мумкин."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "Сизнинг XMPP аккаунтингиз ўчириб юборилди, хайр!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "Сиз XMPP аккаунтингизни тарк этдингиз, кунингиз хайрли ўтсин!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr ""
-
-msgid "The groupchat has been removed."
-msgstr "Гуруҳ чати ўчирилиб юборилди."
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "Сизга керак бўлган фойдаланувчи хонада йўқ."
-
-msgid "Please enter the group chat address to join."
-msgstr "Илтимос, қўшилмоқчи бўлган гурухингиз чати манзилини киритинг."
-
-msgid "Please enter your nickname to join %s."
-msgstr "%s га қўшилиш учун никни киритинг."
-
-msgid "This room (%s) is protected with a password."
-msgstr "Ушбу (%s) хона пароль билан химояланган."
-
-msgid "Your browser is out of date!"
-msgstr "Сизнинг браузерингиз эскирган. Илтимос янгиланг!"
-
-msgid "Last %s version is better!"
-msgstr "Янги %s версия жуда хам зўр!"
-
-msgid "Login"
-msgstr "Кириш"
-
-msgid "Register"
-msgstr "Рўйхатдан ўтиш"
-
-msgid "Here we go!"
-msgstr "Олға!"
-
-msgid "Server"
-msgstr "Сервер"
-
-msgid "Password"
-msgstr "Пароль"
-
-msgid "Remember me"
-msgstr "Ёдда сақлаш"
-
-msgid "This tool has been disabled!"
-msgstr "Бу асбоб ўчирилган!"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr ""
-
-msgid "Reconnect"
-msgstr "Қайта боғланиш"
-
-msgid "Messages"
-msgstr "Хабарлар"
-
-msgid "Profile"
-msgstr "Профиль"
-
-msgid "Options"
-msgstr ""
-
-msgid "Disconnect"
-msgstr "Узиш"
-
-msgid "Filter"
-msgstr "Фильтр"
-
-msgid "Add a friend"
-msgstr "Дўст қўшиш"
-
-msgid "Your groupchats"
-msgstr ""
-
-msgid "Manage your favorite groupchats"
-msgstr ""
-
-msgid "More stuff"
-msgstr ""
-
-msgid "Show all friends"
-msgstr "Барча дўстларни кўрсатиш"
-
-msgid "Only show connected friends"
-msgstr "Фақат боғланган дўстларни кўрсатиш"
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "Хабар архивлари"
-
-msgid "Date"
-msgstr "Сана"
-
-msgid "A short message?"
-msgstr "Қисқа хабар?"
-
-msgid "How are you?"
-msgstr "Қалайсиз?"
-
-msgid "What are you doing?"
-msgstr "Нималар билан бандсиз?"
-
-msgid "Join a chat"
-msgstr "Чатга қўшилиш"
-
-msgid "Status"
-msgstr "Статус"
-
-msgid "Available"
-msgstr "Тармоқда"
-
-msgid "Talkative"
-msgstr "Сергап"
-
-msgid "Away"
-msgstr "Кетган"
-
-msgid "Not available"
-msgstr "Мавжуд эмас"
-
-msgid "Busy"
-msgstr "Банд"
-
-msgid "Offline"
-msgstr "Тармоқда эмас"
-
-msgid "Mood"
-msgstr "Кайфият"
-
-msgid "None"
-msgstr "Хеч нарса"
-
-msgid "Crazy"
-msgstr "Ақлдан озган"
-
-msgid "Excited"
-msgstr "Тасирчан"
-
-msgid "Playful"
-msgstr "Ўйноқи"
-
-msgid "Happy"
-msgstr "Хурсанд"
-
-msgid "Shocked"
-msgstr "Шокда"
-
-msgid "Hot"
-msgstr "Қайноқ"
-
-msgid "Sad"
-msgstr "Хафа"
-
-msgid "Amorous"
-msgstr " Севикли"
-
-msgid "Confident"
-msgstr "Ишончли"
-
-msgid "Activity"
-msgstr "Фаолият"
-
-msgid "Chores"
-msgstr ""
-
-msgid "Drinking"
-msgstr "Ичимлик"
-
-msgid "Eating"
-msgstr "Паловхўрлик"
-
-msgid "Exercising"
-msgstr ""
-
-msgid "Grooming"
-msgstr ""
-
-msgid "Appointment"
-msgstr ""
-
-msgid "Inactive"
-msgstr ""
-
-msgid "Relaxing"
-msgstr ""
-
-msgid "Talking"
-msgstr ""
-
-msgid "Traveling"
-msgstr ""
-
-msgid "Working"
-msgstr ""
-
-msgid "View profile"
-msgstr "Профильни кўриш"
-
-msgid "This is a repeat from %s"
-msgstr ""
-
-msgid "Repeat this notice"
-msgstr "Ушбу огоҳлантиришни қайтариш"
-
-msgid "Remove this notice"
-msgstr "Ушбу огоҳлантиришни ўчириш"
-
-msgid "Your profile"
-msgstr "Сизнинг профилингиз"
-
-msgid "Identity"
-msgstr "Идентификатор"
-
-msgid "Profile image"
-msgstr "Профиль расми"
-
-msgid "Others"
-msgstr "Бошқалар"
-
-msgid "Other"
-msgstr "Бошқа"
-
-msgid "Personal"
-msgstr "Шахсий"
-
-msgid "Complete name"
-msgstr "Тўлиқ исм"
-
-msgid "Nickname"
-msgstr "Ник исм"
-
-msgid "First name"
-msgstr "Исм"
-
-msgid "Last name"
-msgstr "Фамилия"
-
-msgid "Date of birth"
-msgstr "Туғилган сана"
-
-msgid "Contact"
-msgstr "Контакт"
-
-msgid "E-mail"
-msgstr "E-mail"
-
-msgid "Phone"
-msgstr "Телефон"
-
-msgid "Website"
-msgstr "Веб-сайт"
-
-msgid "Current"
-msgstr "Жорий"
-
-msgid "Delete"
-msgstr "Ўчириш"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr ""
-
-msgid "Address"
-msgstr "Манзил"
-
-msgid "Street"
-msgstr "Кўча"
-
-msgid "City"
-msgstr "Шахар"
-
-msgid "Postal code"
-msgstr "Почта коди"
-
-msgid "Country"
-msgstr "Мамлакат"
-
-msgid "Biography"
-msgstr "Биография"
-
-msgid "Important notice"
-msgstr "Мухим ёзув"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr ""
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-
-msgid "Save"
-msgstr "Сақлаш"
-
-msgid "Cancel"
-msgstr "Бекор"
-
-msgid "Edit options"
-msgstr ""
-
-msgid "Channel"
-msgstr "Канал"
-
-msgid "Commands"
-msgstr "Буйруқлар"
-
-msgid "Sounds"
-msgstr "Овозлар"
-
-msgid "Privacy"
-msgstr ""
-
-msgid "Message archiving"
-msgstr "Хабарни архивлаш"
-
-msgid "Store an history of your chats"
-msgstr ""
-
-msgid "Geolocation"
-msgstr "Геожойлашув"
-
-msgid "Disabled"
-msgstr "Ўчирилган"
-
-msgid "Store all chats"
-msgstr "Хамма чатларни сақлаш"
-
-msgid "Store friend chats"
-msgstr "Дўстлар чатини сақлаш"
-
-msgid "Remove all archives"
-msgstr "Хамма тарихларни ўчириш"
-
-msgid "Empty"
-msgstr "Бўш"
-
-msgid "Empty channel"
-msgstr "Бўш канал"
-
-msgid "Persistent"
-msgstr "Қатъий"
-
-msgid "Maximum notices"
-msgstr "Максимум огоҳлантирувлар"
-
-msgid "Account"
-msgstr "Аккаунт"
-
-msgid "Change password"
-msgstr "Парольни ўзгартириш"
-
-msgid "Delete account"
-msgstr "Аккаунтни ўчириш"
-
-msgid "Old"
-msgstr "Эски"
-
-msgid "New (2 times)"
-msgstr "Янги (2 марта)"
-
-msgid "Suggested chatrooms"
-msgstr " Таклиф қилинган чат хоналар"
-
-msgid "Skip"
-msgstr "Ўтказиб юбориш"
-
-msgid "Continue"
-msgstr "Давом этиш"
-
-msgid "To"
-msgstr "Га"
-
-msgid "Close"
-msgstr "Ёпиш"
-
-msgid "unknown"
-msgstr "ноаниқ"
-
-msgid "Unavailable"
-msgstr "Мавжуд эмас"
-
-msgid "is now"
-msgstr "хозир"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Илтимос, аватарингиз юкланилишини кутинг..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "Мана! Профильнинг янги расми!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "Ушбу расм қўлланилмайди ёки хажми ёмон."
-
-msgid "Reply"
-msgstr "Жавоб"
-
-msgid "Error"
-msgstr "Хатолик"
-
-msgid "Click here to solve the error"
-msgstr "Хатоликни бартараф этиш учун бу ерга босинг"
-
-msgid "You"
-msgstr "Сиз"
-
-msgid "Remove"
-msgstr "Ўчириш"
-
-msgid "Rename"
-msgstr "Қайта номлаш"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr ""
-
-msgid "Smiley insertion"
-msgstr "Кулгилар қўйиш"
-
-msgid "Change style"
-msgstr "Стилни ўзгартириш"
-
-msgid "Text in bold"
-msgstr "Семиз матн"
-
-msgid "Text in italic"
-msgstr "Оғган матн"
-
-msgid "Underlined text"
-msgstr "Остки чизиқли матн"
-
-msgid "Send a file"
-msgstr "Файл жўнатиш"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr ""
-
-msgid "Save chat"
-msgstr "Чатни сақлаш"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr ""
-
-msgid "This chat is empty!"
-msgstr "Бу чат бўш!"
-
-msgid "Generate file!"
-msgstr "Файл яратиш!"
-
-msgid "Download file!"
-msgstr "Файлни юклаш!"
-
-msgid "Clean current chat"
-msgstr "Жорий чатни тозалаш"
-
-msgid "Show user profile"
-msgstr "Фойдаланувчи профилини кўрсатиш"
-
-msgid "Add this contact to your friends"
-msgstr "Ушбу контактни дўстларнингиз қаторига қўшиш"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Ушбу гуруҳ чатни севимлиларга қўшиш"
-
-msgid "All tabs"
-msgstr "Барча ойналар"
-
-msgid "Join groupchat"
-msgstr "Гуруҳ чатга қўшилиш"
-
-msgid "Close this tab"
-msgstr "Бу ойнани ёпиш"
-
-msgid "no subject defined for this room."
-msgstr "ушбу хона учун мавзу аниқланмади."
-
-msgid "Administration panel for this room"
-msgstr "Ушбу хона учун администратор панели"
-
-msgid "Moderators"
-msgstr "Модераторлар"
-
-msgid "Participants"
-msgstr ""
-
-msgid "Visitors"
-msgstr "Мехмонлар"
-
-msgid "Manage favorite rooms"
-msgstr " Севимли хоналарни бошқариш"
-
-msgid "Change favorites"
-msgstr "Севимлиларни ўзгартириш"
-
-msgid "Search a room"
-msgstr "Хона қидириш"
-
-msgid "Select a favorite"
-msgstr "Севимлини танлаш"
-
-msgid "Getting the name..."
-msgstr ""
-
-msgid "Gateway"
-msgstr ""
-
-msgid "Name"
-msgstr "Номи"
-
-msgid "Room"
-msgstr "Хона"
-
-msgid "Add"
-msgstr "Қўшиш"
-
-msgid "Edit"
-msgstr "Ўзгартириш"
-
-msgid "Search a room on"
-msgstr ""
-
-msgid "No room found on this server."
-msgstr "Бу серверда хона топилмади."
-
-msgid "Service discovery"
-msgstr ""
-
-msgid "Server to query"
-msgstr ""
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr ""
-
-msgid "Accounts"
-msgstr "Аккаунтлар"
-
-msgid "Authentications"
-msgstr "Идентификациялар"
-
-msgid "Automation"
-msgstr "Автоматлаштириш"
-
-msgid "Clients"
-msgstr "Мижозлар"
-
-msgid "Collaboration"
-msgstr "Хамкорлик"
-
-msgid "Components"
-msgstr "Компонентлар"
-
-msgid "Rooms"
-msgstr "Хоналар"
-
-msgid "Directories"
-msgstr ""
-
-msgid "Gateways"
-msgstr ""
-
-msgid "News"
-msgstr "Янгиликлар"
-
-msgid "Hierarchy"
-msgstr "Дарахт"
-
-msgid "Proxies"
-msgstr ""
-
-msgid "Publication/Subscription"
-msgstr ""
-
-msgid "Storage"
-msgstr "Хотира"
-
-msgid "Service offline or broken"
-msgstr ""
-
-msgid "Your inbox"
-msgstr "Сизнинг кириш қутингиз"
-
-msgid "Available actions"
-msgstr "Мавжуд жараёнлар"
-
-msgid "Clean"
-msgstr "Тозалаш"
-
-msgid "New"
-msgstr "Янги"
-
-msgid "Received"
-msgstr "Қабул қилинди"
-
-msgid "Subject"
-msgstr "Мавзу"
-
-msgid "Content"
-msgstr "Мазмун"
-
-msgid "Send message"
-msgstr "Хабар жўнатиш"
-
-msgid "Your inbox is empty."
-msgstr ""
-
-msgid "MUC administration"
-msgstr ""
-
-msgid "You administrate this room"
-msgstr ""
-
-msgid "Enter new subject"
-msgstr "Янги мавзу киритинг"
-
-msgid "Configuration"
-msgstr ""
-
-msgid "Authorizations"
-msgstr "Авторизациялар"
-
-msgid "Member list"
-msgstr "Аъзолар рўйхати"
-
-msgid "Owner list"
-msgstr "Хўжайинлар рўйхати"
-
-msgid "Administrator list"
-msgstr "Администраторлар рўйхати"
-
-msgid "Outcast list"
-msgstr ""
-
-msgid "Add an input"
-msgstr ""
-
-msgid "Destroy this MUC"
-msgstr "Ушбу MUC ни йўқ қилиш"
-
-msgid "Yes, let's do it!"
-msgstr ""
-
-msgid "Your friend is paying attention to the conversation."
-msgstr ""
-
-msgid "Your friend is writing a message..."
-msgstr ""
-
-msgid "Your friend stopped writing a message."
-msgstr ""
-
-msgid "Your friend is doing something else."
-msgstr ""
-
-msgid "Your friend closed the chat."
-msgstr ""
-
-msgid "Requesting this service..."
-msgstr ""
-
-msgid "Loading"
-msgstr "Юкланмоқда"
-
-msgid "changed his/her nickname to %s"
-msgstr "ник исмини %s га ўзгартирди"
-
-msgid "joined the chat room"
-msgstr "чат хонасига қўшилди"
-
-msgid "left the chat room"
-msgstr "чат хонасини тарк этди"
-
-msgid "%s left"
-msgstr "%s тарк этди"
-
-msgid "%s joined"
-msgstr "%s қўшилди"
-
-msgid "no status"
-msgstr "статус йўқ"
-
-msgid "has been kicked"
-msgstr "чиқариб юборилди"
-
-msgid "has been banned"
-msgstr ""
-
-msgid "no reason"
-msgstr "сабаб йўқ"
-
-msgid "Communicate with the entire world!"
-msgstr ""
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr ""
-
-msgid "Hi there!"
-msgstr "Салом хаммага!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr "%1s, “%2s” га Хуш келибсиз."
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr ""
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr ""
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-
-msgid "Previous"
-msgstr "Олдинги"
-
-msgid "General"
-msgstr ""
-
-msgid "Advanced"
-msgstr ""
-
-msgid "Resource"
-msgstr ""
-
-msgid "Priority"
-msgstr "Приоритет"
-
-msgid "Low"
-msgstr "Паст"
-
-msgid "Medium"
-msgstr "Ўрта"
-
-msgid "High"
-msgstr "Юқори"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-
-msgid "login page"
-msgstr "кириш сахифаси"
-
-msgid "Share this link with your friends:"
-msgstr ""
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr ""
-
-msgid "Required"
-msgstr ""
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr ""
-
-msgid "Manager"
-msgstr ""
-
-msgid "Encrypted"
-msgstr ""
-
-msgid "Unencrypted"
-msgstr ""
-
-msgid "Where are you?"
-msgstr ""
-
-msgid "What's up with you?"
-msgstr ""
-
-msgid "Type something you want to share with your friends..."
-msgstr ""
-
-msgid "Fetching the social channel..."
-msgstr ""
-
-msgid "You are synchronized with your network."
-msgstr ""
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr ""
-
-msgid "Media viewer"
-msgstr ""
-
-msgid "Browse"
-msgstr ""
-
-msgid "Command"
-msgstr ""
-
-msgid "Subscribe"
-msgstr ""
-
-msgid "Join"
-msgstr "Қўшилиш"
-
-msgid "Automatic"
-msgstr ""
-
-msgid "Search"
-msgstr "Қидириш"
-
-msgid "No result!"
-msgstr "Натижалар йўқ"
-
-msgid "No notifications."
-msgstr ""
-
-msgid "would like to add you as a friend."
-msgstr ""
-
-msgid "would like you to join this chatroom:"
-msgstr ""
-
-msgid "Do you accept?"
-msgstr ""
-
-msgid "Yes"
-msgstr ""
-
-msgid "No"
-msgstr ""
-
-msgid "would like to get authorization."
-msgstr ""
-
-msgid "would like to send you a file: “%s”."
-msgstr ""
-
-msgid "has received a file exchange request: “%s”."
-msgstr ""
-
-msgid "has accepted to receive your file: “%s”."
-msgstr ""
-
-msgid "has rejected to receive your file: “%s”."
-msgstr ""
-
-msgid "could not receive your file: “%s”."
-msgstr ""
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr ""
-
-msgid "commented an item you follow: “%s”."
-msgstr ""
-
-msgid "liked your post: “%s”."
-msgstr ""
-
-msgid "quoted you somewhere: “%s”."
-msgstr ""
-
-msgid "published on your wall: “%s”."
-msgstr ""
-
-msgid "tagged you in a photo (%s)."
-msgstr ""
-
-msgid "tagged you in a video (%s)."
-msgstr ""
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-
-msgid "Open"
-msgstr "Очиш"
-
-msgid "Show"
-msgstr "Кўрсатиш"
-
-msgid "Hide"
-msgstr "Яшириш"
-
-msgid "Submit"
-msgstr "Тасдиқлаш"
-
-msgid "Client"
-msgstr "Мижоз"
-
-msgid "System"
-msgstr "Тизим"
-
-msgid "Local time"
-msgstr "Махаллий вақт"
-
-msgid "Comments"
-msgstr ""
-
-msgid "User profile"
-msgstr ""
-
-msgid "See his/her position on the globe"
-msgstr ""
-
-msgid "Confirm"
-msgstr ""
-
-msgid "anonymous mode"
-msgstr ""
-
-msgid "Groups"
-msgstr ""
-
-msgid "Unclassified"
-msgstr ""
-
-msgid "Authorize"
-msgstr ""
-
-msgid "Ask for authorization"
-msgstr ""
-
-msgid "Unblock"
-msgstr ""
-
-msgid "Prohibit"
-msgstr ""
-
-msgid "Block"
-msgstr ""
-
-msgid "Chat"
-msgstr ""
-
-msgid "Groupchat"
-msgstr ""
-
-msgid "Jappix Mobile"
-msgstr "Jappix Mobilex"
-
-msgid "Desktop"
-msgstr ""
-
-msgid "Mobile"
-msgstr ""
-
-msgid "Please wait..."
-msgstr ""
-
-msgid "Please enable JavaScript"
-msgstr ""
-
-msgid "Show comments"
-msgstr ""
-
-msgid "Loading comments..."
-msgstr ""
-
-msgid "Could not get the comments!"
-msgstr ""
-
-msgid "Comments locked!"
-msgstr ""
-
-msgid "Type your comment here..."
-msgstr ""
-
-msgid "Your channel"
-msgstr "Сизнинг каналингиз"
-
-msgid "Channel of"
-msgstr ""
-
-msgid "More notices..."
-msgstr ""
-
-msgid "Attach a file"
-msgstr "Файл қўйиш"
-
-msgid "Send"
-msgstr "Жўнатиш"
-
-msgid "Unattach the file"
-msgstr ""
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-
-msgid "Authorization failed"
-msgstr ""
-
-msgid "Registration failed, please choose a different username"
-msgstr ""
-
-msgid "Service unavailable"
-msgstr ""
-
-msgid "Internal server error, try later"
-msgstr "Серверда ички хатолик, кейинроқ харакат қилинг"
-
-msgid "Your form has been sent."
-msgstr "Сизнинг ёзувли формангиз жўнатилди."
-
-msgid "Application"
-msgstr "Илова"
-
-msgid "Media integration"
-msgstr "Медиа бириктириш"
-
-msgid "Keep local chat archives"
-msgstr ""
-
-msgid "XMPP links"
-msgstr "XMPP ёрлиқлар"
-
-msgid "Open XMPP links with Jappix"
-msgstr "XMPP ёрлиқларини Jappix билан очиш"
-
-msgid "changed the subject to:"
-msgstr "мавзу ушбу кўринишга ўзгарди:"
-
-msgid "Welcome!"
-msgstr "Хуш келибсиз!"
-
-msgid "Friends"
-msgstr "Дўстлар"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr "Сизнинг ижтимоий булутингиз, Jappix га хуш келибсиз!"
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-
-msgid "Enable notification sounds"
-msgstr "Огоҳлантирув товушларини ёқиш"
-
-msgid "Share your position on the globe"
-msgstr ""
-
-msgid "Offline friends"
-msgstr "Тармоқда бўлмаган дўстлар"
-
-msgid "Don't hide offline friends"
-msgstr ""
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr ""
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr ""
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-
-msgid "Share Jappix on %s"
-msgstr ""
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr ""
-
-msgid "Unknown name"
-msgstr "Ноаниқ ном"
-
-msgid "Unknown country"
-msgstr "Ноаниқ мамлакат"
-
-msgid "Click to enable"
-msgstr "Ёқиш учун босинг"
-
-msgid "Click to disable"
-msgstr "Ўчириш учун босинг"
-
-msgid "Installation"
-msgstr "Ўрнатиш"
-
-msgid "Jappix installation"
-msgstr "Jappix ни ўрнатиш"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "Jappix ўрнатишга хуш келибсиз!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-
-msgid "Installation Steps:"
-msgstr "Ўрнатилиш кетма-кетлиги"
-
-msgid "Welcome"
-msgstr "Хуш келибсиз"
-
-msgid "Storage configuration"
-msgstr "Хотирани созлаш"
-
-msgid "Administrator account"
-msgstr "Администратор аккаунти"
-
-msgid "Main configuration"
-msgstr "Асосий созланишлар"
-
-msgid "Hosts configuration"
-msgstr "Хостларнинг созланишлари"
-
-msgid "Services installation"
-msgstr "Хизматнинг ўрнатилиши"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr ""
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr ""
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-
-msgid "User"
-msgstr "Фойдаланувчи"
-
-msgid "Service"
-msgstr "Хизмат"
-
-msgid "Service name"
-msgstr "Хизмат номи"
-
-msgid "Service description"
-msgstr "Хизмат хақида қисқа"
-
-msgid "Owner name"
-msgstr "Хўжайин исми"
-
-msgid "Owner website"
-msgstr "Веб сайт хўжайини"
-
-msgid "Connection"
-msgstr "Боғланиш"
-
-msgid "Lock the host"
-msgstr "Хостни қулфлаш"
-
-msgid "Anonymous mode"
-msgstr "Ноаниқ режим"
-
-msgid "HTTP authentication"
-msgstr "HTTP аутентификация"
-
-msgid "Registration allowed"
-msgstr "Рўйхатдан ўтиш рухсат этилган"
-
-msgid "Use the built-in BOSH proxy"
-msgstr ""
-
-msgid "Manager link"
-msgstr ""
-
-msgid "Groupchats to join"
-msgstr ""
-
-msgid "Suggest groupchats"
-msgstr ""
-
-msgid "Encryption"
-msgstr ""
-
-msgid "HTTPS storage"
-msgstr ""
-
-msgid "Force HTTPS"
-msgstr ""
-
-msgid "Compression"
-msgstr ""
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-
-msgid "Main host"
-msgstr "Асосий хост"
-
-msgid "Groupchat host"
-msgstr "Гуруҳ чат хости"
-
-msgid "Pubsub host"
-msgstr "Pubsub хост"
-
-msgid "Anonymous host"
-msgstr "Ноаниқ хост"
-
-msgid "Directory host"
-msgstr ""
-
-msgid "BOSH host"
-msgstr "BOSH хост"
-
-msgid "WebSocket host"
-msgstr "WebSocket хост"
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-
-msgid "Thanks for using Jappix!"
-msgstr "Jappix дан фойдаланаётганингиз учун рахмат!"
-
-msgid "Next"
-msgstr "Кейинги"
-
-msgid "Finish"
-msgstr "Финиш"
-
-msgid "Check again"
-msgstr "Яна текшириш"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr ""
-
-msgid "%s is installed on your system."
-msgstr "%s сизнинг тизимингизга ўрнатилди."
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr ""
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr ""
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-
-msgid "Jappix manager"
-msgstr "Jappix бошқарувчи"
-
-msgid "Manager access"
-msgstr ""
-
-msgid "Statistics"
-msgstr "Статистикалар"
-
-msgid "Hosts"
-msgstr "Хостлар"
-
-msgid "Design"
-msgstr "Дизайн"
-
-msgid "Repeat"
-msgstr ""
-
-msgid "All"
-msgstr "Барча"
-
-msgid "Horizontal"
-msgstr "Горизонтал"
-
-msgid "Vertical"
-msgstr "Вертикал"
-
-msgid "Center"
-msgstr "Марказ"
-
-msgid "Left"
-msgstr "Чап"
-
-msgid "Right"
-msgstr "Ўнг"
-
-msgid "Top"
-msgstr ""
-
-msgid "Bottom"
-msgstr ""
-
-msgid "Adapt"
-msgstr ""
-
-msgid "Color"
-msgstr "Ранг"
-
-msgid "Users"
-msgstr "Фойдаланувчилар"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-
-msgid "Please use the form below to login to the administration panel."
-msgstr ""
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-
-msgid "Credentials"
-msgstr ""
-
-msgid "You have been logged out. Goodbye!"
-msgstr ""
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr ""
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr ""
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr ""
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr ""
-
-msgid "The image could not be received, would you mind retry?"
-msgstr ""
-
-msgid "Your service logo has been successfully changed!"
-msgstr ""
-
-msgid "Your image was added to the list!"
-msgstr ""
-
-msgid "Changes saved!"
-msgstr "Ўзгаришлар сақланди!"
-
-msgid "Logo"
-msgstr "Логотип"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr ""
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-
-msgid "Remove this logo"
-msgstr "Бу логотипни ўчириш"
-
-msgid "View this logo"
-msgstr "Бу логотипни кўриш"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-
-msgid "Access statistics"
-msgstr ""
-
-msgid "Share statistics"
-msgstr "Статистикаларни юбориш"
-
-msgid "Other statistics"
-msgstr "Бошқа статистикалар"
-
-msgid "January"
-msgstr "Январь"
-
-msgid "February"
-msgstr "Февраль"
-
-msgid "March"
-msgstr "Март"
-
-msgid "April"
-msgstr "Апрель"
-
-msgid "May"
-msgstr "Май"
-
-msgid "June"
-msgstr "Июнь"
-
-msgid "July"
-msgstr "Июль"
-
-msgid "August"
-msgstr "Август"
-
-msgid "September"
-msgstr "Сентябрь"
-
-msgid "October"
-msgstr "Октябрь"
-
-msgid "November"
-msgstr "Ноябрь"
-
-msgid "December"
-msgstr "Декабрь"
-
-msgid "Monday"
-msgstr "Душанба"
-
-msgid "Tuesday"
-msgstr "Сешанба"
-
-msgid "Wednesday"
-msgstr "Чоршанба"
-
-msgid "Thursday"
-msgstr "Пайшанба"
-
-msgid "Friday"
-msgstr "Жума"
-
-msgid "Saturday"
-msgstr "Шанба"
-
-msgid "Sunday"
-msgstr "Якшанба"
-
-msgid "Total"
-msgstr "Умумий"
-
-msgid "Archives"
-msgstr "Архивлар"
-
-msgid "Music"
-msgstr "Мусиқа"
-
-msgid "Backgrounds"
-msgstr "Орқа фонлар"
-
-msgid "Share"
-msgstr ""
-
-msgid "Background"
-msgstr "Орқа фон"
-
-msgid "Notice"
-msgstr ""
-
-msgid "Your design preferences have been saved!"
-msgstr ""
-
-msgid "Please check your inputs: something is missing!"
-msgstr ""
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-
-msgid "Use default background"
-msgstr "Одатдаги орқа фонни танлаш"
-
-msgid "Use your own image"
-msgstr "Шахсий расмингизни қўллаш"
-
-msgid "Select a background to use and change the display options."
-msgstr ""
-
-msgid "Use your own color"
-msgstr "Шахсий рангингизни қўллаш"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr ""
-
-msgid "Manage backgrounds"
-msgstr ""
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr ""
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-
-msgid "Simple notice"
-msgstr ""
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-
-msgid "Advanced notice"
-msgstr ""
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-
-msgid "Available updates"
-msgstr "Мавжуд янгиланишлар"
-
-msgid "What's new?"
-msgstr "Нималар янги?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr ""
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr ""
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr ""
-"Сизнинг версиянгиз эскирди. Хозир янгиламоқчи бўлсангиз бу %s ерга босинг!"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"Сизнинг версиянгиз янги, лекин сиз буни қўлбола холатда текшириш учун бу %s "
-"ерга босинг."
-
-msgid "Check for updates"
-msgstr "Янгиланишни текшириш"
-
-msgid "Update in progress"
-msgstr "Янгиланиш амалда"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr "Jappix янгиланди: энди сиз охирги версияга эга бўлдингиз. Завқланинг!"
-
-msgid "The update has failed! Please try again later."
-msgstr ""
-
-msgid "Downloading package..."
-msgstr "Пакет юкланмоқда..."
-
-msgid "Removing current Jappix system files..."
-msgstr "Жорий Jappix тизимли файллари ўчирилмоқда..."
-
-msgid "Extracting package..."
-msgstr ""
-
-msgid "Regenerating storage folder tree..."
-msgstr ""
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix янги версияга эга бўлди!"
-
-msgid "Aborted: socket error!"
-msgstr ""
-
-msgid "Aborted: buffer error!"
-msgstr ""
-
-msgid "Aborted: everything is not writable!"
-msgstr ""
-
-msgid "Aborted: could not extract the package!"
-msgstr ""
-
-msgid "Visits"
-msgstr ""
-
-msgid "Daily"
-msgstr "Кунлик"
-
-msgid "Weekly"
-msgstr "Хафталик"
-
-msgid "Monthly"
-msgstr "Ойлик"
-
-msgid "Yearly"
-msgstr "Йиллик"
-
-msgid "Size"
-msgstr "Хажм"
-
-msgid "Clean everything"
-msgstr "Хамма нарсани тозалаш"
-
-msgid "Purge cache"
-msgstr ""
-
-msgid "Purge logs"
-msgstr ""
-
-msgid "Purge sent files"
-msgstr ""
-
-msgid "Purge updates"
-msgstr ""
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "Сиз тозаланишини хохлаган хотира папкаси энди бўш!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr ""
-"Jappix да сизнинг мусиқаларингизни (Ogg Vorbis, MP3 ёки WAV) тинглаш учун "
-"юкланг!"
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr "Юкламоқчи бўлган файлингиз %s дан камроқ бўлиши шарт."
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-
-msgid "Title"
-msgstr "Номи"
-
-msgid "Artist"
-msgstr "Артист"
-
-msgid "Album"
-msgstr "Альбом"
-
-msgid "File"
-msgstr "Файл"
-
-msgid "Upload"
-msgstr "Юклаш"
-
-msgid "The folder is empty."
-msgstr "Папка бўш."
-
-msgid "The music could not be received, please retry!"
-msgstr ""
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-"Қўлламайдиган мусиқа формати, илтимос Ogg Vorbis, MP3 ёки WAV га конвертланг!"
-
-msgid "Your music has been added!"
-msgstr "Мусиқа қўшилди"
-
-msgid "The selected elements have been removed."
-msgstr ""
-
-msgid "You must select elements to remove!"
-msgstr ""
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-
-msgid "Manage"
-msgstr "Бошқарув"
-
-msgid "List"
-msgstr "Рўйхат"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-
-msgid "The user has been added!"
-msgstr "Фойдаланувчи қўшилди!"
-
-msgid "The chosen users have been removed."
-msgstr ""
-
-msgid "You must select one or more users to be removed!"
-msgstr "Фойдаланувчи ўчириш учун бир ёки ундан ортиқ танлашингиз керак!"
-
-msgid "Yesterday"
-msgstr "Кеча"
-
-msgid "%s days ago"
-msgstr "%s кунлар олдин"
-
-msgid "User currently active"
-msgstr "Жорий холатдаги актив фойдаланувчи"
-
-msgid "Last seen: %s"
-msgstr ""
-
-msgid "Inactive since: %s"
-msgstr ""
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr ""
-
-msgid "Static content server"
-msgstr ""
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr ""
-
-msgid "User uploads server"
-msgstr ""
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr ""
-
-msgid "Suggested friends"
-msgstr "Дўстлик қабул қилинди"
-
-msgid "Check all"
-msgstr "Хаммасини белгилаш"
-
-msgid "Uncheck all"
-msgstr "Хаммасини белгилашдан чиқариш"
-
-msgid "Choose"
-msgstr "Танлаш"
-
-msgid "List name"
-msgstr "Рўйхат номи"
-
-msgid "Allow"
-msgstr "Қабул"
-
-msgid "Deny"
-msgstr "Бекор"
-
-msgid "Group"
-msgstr "Гуруҳ"
-
-msgid "Subscription"
-msgstr ""
-
-msgid "Both"
-msgstr ""
-
-msgid "From"
-msgstr "Кимдан"
-
-msgid "Everybody"
-msgstr "Хар ким"
-
-msgid "Send messages"
-msgstr "Хабар жўнатиш"
-
-msgid "Send queries"
-msgstr ""
-
-msgid "See my status"
-msgstr "Статусимни кўриш"
-
-msgid "Send his/her status"
-msgstr ""
-
-msgid "Everything"
-msgstr "Хар нарса"
-
-msgid "Item"
-msgstr ""
-
-msgid "Order"
-msgstr "Тартиб"
-
-msgid "Active for this session"
-msgstr "Бу сессия учун актив"
-
-msgid "Always active"
-msgstr "Хар доим актив"
-
-msgid "User directory"
-msgstr "Фойдаланувчи луғати"
-
-msgid "Search a friend"
-msgstr "Дўстни қидириш"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-
-msgid "Send him/her a message"
-msgstr "Унга хат юбориш"
-
-msgid "Start a chat with him/her"
-msgstr "У билан чатни бошлаш"
-
-msgid "Available shortcuts:"
-msgstr "Мавжуд ёрлиқлар:"
-
-msgid "%s removes the chat logs"
-msgstr "%s чат логларини ўчиради"
-
-msgid "%s joins a groupchat"
-msgstr "%s гуруҳ чатга кириш"
-
-msgid "%s closes the chat"
-msgstr "%s чатни ёпиш"
-
-msgid "%s shows the user profile"
-msgstr "%s фойдаланувчи профилини кўрсатиш"
-
-msgid "%s sends a message to the room"
-msgstr "%s хонага хабар юбориш"
-
-msgid "%s changes your nickname"
-msgstr "%s сизнинг ник исмингизни ўзгартириш"
-
-msgid "%s sends a message to someone in the room"
-msgstr "%s хонадаги бирор бир фойдаланувчига хабар юбориш"
-
-msgid "%s changes the room topic"
-msgstr "%s хона мавзусини ўзгартириш"
-
-msgid "%s kicks a user of the room"
-msgstr "%s хона фойдаланувчисини чиқариб юбориш"
-
-msgid "%s bans a user of the room"
-msgstr "%s хона фойдаланувчисини бан қилиш"
-
-msgid "%s invites someone to join the room"
-msgstr "%s хонага фойдаланувчини таклиф қилиш"
-
-msgid "Public profile"
-msgstr "Сизнинг профилингиз"
-
-msgid "Your profile anywhere on the Web."
-msgstr "Сизнинг профилингиз Web да хар жойда."
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-
-msgid "Yay, let's create your public profile!"
-msgstr "Хўш, қани сизнинг оммабоп профилингизни яратсак!"
-
-msgid "Enable my public profile"
-msgstr "Менинг оммабоп профилимни ёқиш"
-
-msgid "Jappix for your phone"
-msgstr "Телефонинг телефонингиз учун Jappix"
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr ""
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-
-msgid "You haven't provided any file to download"
-msgstr ""
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr ""
-
-msgid "Woah this file isn't found, please double check"
-msgstr "Вой, ушбу файл топилмади, илтимос яна текшириб кўринг"
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr ""
-
-msgid "Statistics are currently disabled in the settings."
-msgstr "Ушбу созлашларда статистикалар ўчирилган."
-
-msgid "New event!"
-msgstr ""
-
-msgid "%s is typing..."
-msgstr "%s ёзмоқда..."
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-
-msgid "The username you picked is not available. Please try another one."
-msgstr "Сиз танлаган ник исм мавжуд эмас. Илтимос бошқасини киритинг."
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-"Сизининг аккаунтингиз яратилишида хатолик. Илтимос қайта харакат қилинг."
-
-msgid "Username"
-msgstr "Фойдаланувчи исми"
-
-msgid "Enter password"
-msgstr "Парольни киритинг"
-
-msgid "Once again..."
-msgstr "Яна бир марта..."
-
-msgid "Code"
-msgstr "Код"
-
-msgid "Security code"
-msgstr "Хафвсизлик коди"
-
-msgid "Advertising space available!"
-msgstr ""
-
-msgid "Advertise here"
-msgstr ""
-
-msgid "Analytics (%s)"
-msgstr ""
-
-msgid "Track visits"
-msgstr ""
-
-msgid "Piwik URL"
-msgstr ""
-
-msgid "Piwik tracking ID"
-msgstr ""
-
-msgid "Advertising (%s)"
-msgstr ""
-
-msgid "Enable ads"
-msgstr ""
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "Content ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr "Тўхтатиш"
-
-msgid "Mute"
-msgstr "Овозни ўчириш"
-
-msgid "Unmute"
-msgstr "Ўчиришдан чиқариш"
-
-msgid "Is calling you"
-msgstr "Сизга қўнғироқ қилмоқда"
-
-msgid "Initiating call"
-msgstr "Қўнғироқ юкланмоқда"
-
-msgid "Connecting to call..."
-msgstr "Қўнғироққа боғланиш..."
-
-msgid "Waiting..."
-msgstr "Кутилмоқда"
-
-msgid "Ringing..."
-msgstr "Чақирилмоқда..."
-
-msgid "Declined the call"
-msgstr "Қўнғироқни бекор қилишди"
-
-msgid "Call error"
-msgstr "Чақиришда хатолик"
-
-msgid "Ended the call"
-msgstr "Қўнғироқ тугаллашди"
-
-msgid "Call ended"
-msgstr "Қўнғироқ тамомланди"
-
-msgid "Call canceled"
-msgstr "Қўнғироқ бекор қилинди"
-
-msgid "Canceled the call"
-msgstr "Қўнғироқ бекор қилинди"
-
-msgid "Is already in a call"
-msgstr "Аслида қўнғироқ қилинган"
-
-msgid "Ending call..."
-msgstr "Қўнғироқ якунланмоқда..."
-
-msgid "Accept"
-msgstr "Қабул"
-
-msgid "Decline"
-msgstr "Бекор"
-
-msgid "Okay"
-msgstr "Яхши"
-
-msgid "Retry"
-msgstr "Қайта харакат"
-
-msgid "Audio Call"
-msgstr "Аудио қўнғироқ"
-
-msgid "Video Call"
-msgstr "Видео қўнғироқ"
diff --git a/i18n/vi/LC_MESSAGES/main.mo b/i18n/vi/LC_MESSAGES/main.mo
deleted file mode 100644
index 25d614ec..00000000
--- a/i18n/vi/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/vi/LC_MESSAGES/main.po b/i18n/vi/LC_MESSAGES/main.po
deleted file mode 100644
index c4cfa29b..00000000
--- a/i18n/vi/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2387 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-# serdiuk <serdiuk38@yahoo.com>, 2014
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-24 21:38+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/projects/p/"
-"jappix/language/vi_VN/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: vi_VN\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr ""
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr ""
-"Trình duyệt của bạn không hỗ trợ JavaScript hoặc chức năng này đã bị tắt. "
-"Bạn không thể sử dụng Jappix!"
-
-msgid "Social channel, chat and more."
-msgstr "Mạng xã hội, trò chuyện và hơn thế nữa."
-
-msgid "Create your public profile."
-msgstr "Tạo thông tin cá nhân."
-
-msgid "A mini-chat for your website."
-msgstr "Trình chat mini cho website."
-
-msgid "Get Jappix, get support."
-msgstr ""
-
-msgid "Statistics around Jappix."
-msgstr "Thông số về Jappix."
-
-msgid "Legal disclaimer for Jappix."
-msgstr ""
-
-msgid "Download Jappix for free."
-msgstr "Tải Jappix miễn phí."
-
-msgid "Contribute to the Jappix code."
-msgstr "Đóng góp code cho Jappix."
-
-msgid "Jappix for your company."
-msgstr ""
-
-msgid "Find a public Jappix node."
-msgstr ""
-
-msgid "Credits"
-msgstr ""
-
-msgid "Association"
-msgstr ""
-
-msgid "Web agency"
-msgstr ""
-
-msgid "Legal"
-msgstr ""
-
-msgid "Legal disclaimer"
-msgstr ""
-
-msgid "Terms of use and legal"
-msgstr ""
-
-msgid "Owner"
-msgstr ""
-
-msgid "Node owner"
-msgstr ""
-
-msgid "By using our service, you accept %s."
-msgstr ""
-
-msgid "our terms of use"
-msgstr ""
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr "Đăng nhập"
-
-msgid "The element list on this server could not be obtained!"
-msgstr "Danh sách các thành phần trên máy chủ không được xác định!"
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr ""
-"Mật khẩu của bạn đã được thay đổi, bạn có thể kết nối tới tài khoản của mình "
-"bằng mật khẩu mới."
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr "Tài khoản XMPP của bạn đã được gỡ bỏ."
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "Bạn vừa thoát khỏi hệ thống XMPP, chúc bạn một ngày tốt lành!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr ""
-
-msgid "The groupchat has been removed."
-msgstr ""
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "Người dùng bạn muốn tiếp xúc không có trong phòng chat."
-
-msgid "Please enter the group chat address to join."
-msgstr "Xin hãy nhập địa chỉ group chat để tham gia."
-
-msgid "Please enter your nickname to join %s."
-msgstr "Nhập nick name của bạn để tham gia %s."
-
-msgid "This room (%s) is protected with a password."
-msgstr "Phòng này (%s) được bảo vệ bởi mật khẩu."
-
-msgid "Your browser is out of date!"
-msgstr "Trình duyệt của bạn đã quá cũ!"
-
-msgid "Last %s version is better!"
-msgstr "Phiên bản trước %s vẫn tốt hơn!"
-
-msgid "Login"
-msgstr "Đăng nhập"
-
-msgid "Register"
-msgstr "Đăng ký"
-
-msgid "Here we go!"
-msgstr "Đăng nhập"
-
-msgid "Server"
-msgstr "Máy chủ"
-
-msgid "Password"
-msgstr "Mật khẩu"
-
-msgid "Remember me"
-msgstr "Ghi nhớ"
-
-msgid "This tool has been disabled!"
-msgstr "Chức năng này đã bị khóa!"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr ""
-"Có vấn đề xảy ra ra với mạng của bạn, bạn vừa bị ngắt kết nối. Bạn có muốn "
-"kết nối lại không?"
-
-msgid "Reconnect"
-msgstr "Kết nối lại"
-
-msgid "Messages"
-msgstr "Thông điệp"
-
-msgid "Profile"
-msgstr "Thông tin cá nhân"
-
-msgid "Options"
-msgstr "Tùy chọn"
-
-msgid "Disconnect"
-msgstr "Ngắt kết nối"
-
-msgid "Filter"
-msgstr "Lọc"
-
-msgid "Add a friend"
-msgstr "Thêm bạn"
-
-msgid "Your groupchats"
-msgstr "Nhóm chat của bạn"
-
-msgid "Manage your favorite groupchats"
-msgstr "Quản lý nhóm chat ưa thích"
-
-msgid "More stuff"
-msgstr "Các chức năng khác"
-
-msgid "Show all friends"
-msgstr "Hiện toàn bộ danh sách bạn bè."
-
-msgid "Only show connected friends"
-msgstr "Chỉ hiện những người online."
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "Tin nhắn lưu trữ"
-
-msgid "Date"
-msgstr "Ngày"
-
-msgid "A short message?"
-msgstr "Một tin nhắn nhanh?"
-
-msgid "How are you?"
-msgstr "Bạn khỏe không?"
-
-msgid "What are you doing?"
-msgstr "Bạn đang làm gì vậy?"
-
-msgid "Join a chat"
-msgstr "Tham gia chat"
-
-msgid "Status"
-msgstr "Tình trạng"
-
-msgid "Available"
-msgstr "Sẵn sàng"
-
-msgid "Talkative"
-msgstr "Sẵn sàng trò chuyện"
-
-msgid "Away"
-msgstr "Đã rời khỏi đây"
-
-msgid "Not available"
-msgstr "Không sẵn sàng"
-
-msgid "Busy"
-msgstr "Đang bận"
-
-msgid "Offline"
-msgstr ""
-
-msgid "Mood"
-msgstr "Tâm trạng"
-
-msgid "None"
-msgstr "Không gì cả"
-
-msgid "Crazy"
-msgstr "Hâm"
-
-msgid "Excited"
-msgstr "Khoái chí"
-
-msgid "Playful"
-msgstr "Vui vẻ"
-
-msgid "Happy"
-msgstr "Hạnh phúc"
-
-msgid "Shocked"
-msgstr "Shock"
-
-msgid "Hot"
-msgstr "Nóng"
-
-msgid "Sad"
-msgstr "Chán"
-
-msgid "Amorous"
-msgstr "Đa tình"
-
-msgid "Confident"
-msgstr "Tự tin"
-
-msgid "Activity"
-msgstr "Hoạt động"
-
-msgid "Chores"
-msgstr "Công việc"
-
-msgid "Drinking"
-msgstr "Đang nhậu"
-
-msgid "Eating"
-msgstr "Đang ăn"
-
-msgid "Exercising"
-msgstr "Đang tập"
-
-msgid "Grooming"
-msgstr "Đang chăm"
-
-msgid "Appointment"
-msgstr "Đang hẹn"
-
-msgid "Inactive"
-msgstr "Không sẵn sàng"
-
-msgid "Relaxing"
-msgstr "Đang nghỉ"
-
-msgid "Talking"
-msgstr "Đang trò chuyện"
-
-msgid "Traveling"
-msgstr "Đang du lịch"
-
-msgid "Working"
-msgstr "Đang làm việc"
-
-msgid "View profile"
-msgstr "Xem thông tin cá nhân"
-
-msgid "This is a repeat from %s"
-msgstr "Cái này được lặp lại từ %s"
-
-msgid "Repeat this notice"
-msgstr "Lặp lại chú ý này"
-
-msgid "Remove this notice"
-msgstr "Gỡ bỏ chú ý này"
-
-msgid "Your profile"
-msgstr "Thông tin cá nhân của bạn"
-
-msgid "Identity"
-msgstr "Nhận dạng"
-
-msgid "Profile image"
-msgstr "Ảnh cá nhân"
-
-msgid "Others"
-msgstr "Thông tin khác"
-
-msgid "Other"
-msgstr ""
-
-msgid "Personal"
-msgstr "Cá nhân"
-
-msgid "Complete name"
-msgstr "Tên đầy đủ"
-
-msgid "Nickname"
-msgstr "Nickname"
-
-msgid "First name"
-msgstr "Tên"
-
-msgid "Last name"
-msgstr "Họ"
-
-msgid "Date of birth"
-msgstr "Ngày sinh"
-
-msgid "Contact"
-msgstr "Liên hệ"
-
-msgid "E-mail"
-msgstr "Email"
-
-msgid "Phone"
-msgstr "Số điện thoại"
-
-msgid "Website"
-msgstr "Trang web"
-
-msgid "Current"
-msgstr "Hiện tại"
-
-msgid "Delete"
-msgstr "Xóa"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr "Rất tiếc! Bạn không có ảnh cá nhân trong thẻ nhận dạng!"
-
-msgid "Address"
-msgstr "Địa chỉ"
-
-msgid "Street"
-msgstr "Đường phố"
-
-msgid "City"
-msgstr "Thành phố"
-
-msgid "Postal code"
-msgstr "Mã quốc gia"
-
-msgid "Country"
-msgstr "Quốc gia"
-
-msgid "Biography"
-msgstr "Tiểu sử"
-
-msgid "Important notice"
-msgstr "Chú ý quan trọng"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-"Cẩn thận với các thông tin mà bạn lưu trên profile, nó có thể được truy cập "
-"bởi bất kỳ ai (cả với những người mà bạn không mong muốn)."
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr ""
-"Không phải mọi thứ đều riêng tư trên XMPP, thông tin công khai của bạn "
-"(vCard) là một trong số đó."
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"Khuyến cáo bạn nên upload ảnh đại diện (%s maximum) là ảnh của bạn để bạn bè "
-"có thể nhận ra."
-
-msgid "Save"
-msgstr "Lưu lại"
-
-msgid "Cancel"
-msgstr "Hủy bỏ"
-
-msgid "Edit options"
-msgstr "Thay đổi tùy chọn"
-
-msgid "Channel"
-msgstr "Kênh"
-
-msgid "Commands"
-msgstr "Dòng lệnh"
-
-msgid "Sounds"
-msgstr "Âm thanh"
-
-msgid "Privacy"
-msgstr "Riêng tư"
-
-msgid "Message archiving"
-msgstr "Lưu trữ tin nhắn"
-
-msgid "Store an history of your chats"
-msgstr ""
-
-msgid "Geolocation"
-msgstr "Địa lý"
-
-msgid "Disabled"
-msgstr ""
-
-msgid "Store all chats"
-msgstr ""
-
-msgid "Store friend chats"
-msgstr ""
-
-msgid "Remove all archives"
-msgstr ""
-
-msgid "Empty"
-msgstr "Trống rỗng"
-
-msgid "Empty channel"
-msgstr "Kênh rỗng"
-
-msgid "Persistent"
-msgstr "Cố định"
-
-msgid "Maximum notices"
-msgstr "Số lượng chú ý tối đa"
-
-msgid "Account"
-msgstr "Tài khoản"
-
-msgid "Change password"
-msgstr "Đỏi mật khẩu"
-
-msgid "Delete account"
-msgstr "Xóa tải khoản"
-
-msgid "Old"
-msgstr "Cũ"
-
-msgid "New (2 times)"
-msgstr "Mới (2 lần)"
-
-msgid "Suggested chatrooms"
-msgstr "Lựa chọn phòng chat"
-
-msgid "Skip"
-msgstr "Bỏ qua"
-
-msgid "Continue"
-msgstr "TIếp tục"
-
-msgid "To"
-msgstr "Đến"
-
-msgid "Close"
-msgstr "Đóng"
-
-msgid "unknown"
-msgstr "Không rõ"
-
-msgid "Unavailable"
-msgstr "Không sẵn sàng"
-
-msgid "is now"
-msgstr "ngay bây giờ"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "Xin hãy chờ, ảnh đại diện đang được upload ..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "OK đây rồi. Một bức ảnh đẹp!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "Loại file không được hỗ trợ hoặc sai kích cỡ."
-
-msgid "Reply"
-msgstr "Trả lời"
-
-msgid "Error"
-msgstr "Lỗi"
-
-msgid "Click here to solve the error"
-msgstr "Nhấn vào đây để sửa lỗi"
-
-msgid "You"
-msgstr "Bạn"
-
-msgid "Remove"
-msgstr "Gỡ bỏ"
-
-msgid "Rename"
-msgstr "Đổi tên"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "Xin chào, tôi là %s, tôi muốn kết bạn với bạn."
-
-msgid "Smiley insertion"
-msgstr "Chèn biểu tượng cảm xúc"
-
-msgid "Change style"
-msgstr "Đổi giao diện"
-
-msgid "Text in bold"
-msgstr "Chữ in đậm"
-
-msgid "Text in italic"
-msgstr "Chữ in nghiêng"
-
-msgid "Underlined text"
-msgstr "Chữ gạch dưới"
-
-msgid "Send a file"
-msgstr "Gửi file"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr "Sau khi upload xong, bạn của bạn sẽ được thông báo để tải file."
-
-msgid "Save chat"
-msgstr "Lưu chat"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr "Click vào liên kết sau để xem nhật ký chat. Click lần nữa để tải file."
-
-msgid "This chat is empty!"
-msgstr "Cuộc trò chuyện này không có nội dung."
-
-msgid "Generate file!"
-msgstr "Tạo file!"
-
-msgid "Download file!"
-msgstr "Tải file!"
-
-msgid "Clean current chat"
-msgstr "Xóa nội dung chat hiện tại"
-
-msgid "Show user profile"
-msgstr "Hiện thông tin người dùng"
-
-msgid "Add this contact to your friends"
-msgstr "Thêm người dùng này vào danh sách bạn bè"
-
-msgid "Add this groupchat to your favorites"
-msgstr "Thêm nhóm chat này vào danh sách ưa thích"
-
-msgid "All tabs"
-msgstr "Tất cả tab"
-
-msgid "Join groupchat"
-msgstr ""
-
-msgid "Close this tab"
-msgstr "Đóng cửa sổ này"
-
-msgid "no subject defined for this room."
-msgstr "phòng chat này không có tiêu đề."
-
-msgid "Administration panel for this room"
-msgstr "Quản lý phòng chat này"
-
-msgid "Moderators"
-msgstr "Người quản lý"
-
-msgid "Participants"
-msgstr "Những người tham gia"
-
-msgid "Visitors"
-msgstr "Khách"
-
-msgid "Manage favorite rooms"
-msgstr "Quản lý phòng chat ưa thích"
-
-msgid "Change favorites"
-msgstr "Thay đổi danh sách ưa thích"
-
-msgid "Search a room"
-msgstr "Tìm phòng chat"
-
-msgid "Select a favorite"
-msgstr "Chọn từ danh sách ưa thích"
-
-msgid "Getting the name..."
-msgstr "Đang lấy tên ..."
-
-msgid "Gateway"
-msgstr "Cổng thông tin"
-
-msgid "Name"
-msgstr "Tên"
-
-msgid "Room"
-msgstr "Phòng chat"
-
-msgid "Add"
-msgstr "Thêm"
-
-msgid "Edit"
-msgstr "Sửa"
-
-msgid "Search a room on"
-msgstr "Tìm trong phòng"
-
-msgid "No room found on this server."
-msgstr "Không có phòng chat nào trên máy chủ này"
-
-msgid "Service discovery"
-msgstr "Tìm kiếm dịch vụ"
-
-msgid "Server to query"
-msgstr "Tìm kiếm từ máy chủ"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "Không có kết quả nào!"
-
-msgid "Accounts"
-msgstr "Những tài khoản"
-
-msgid "Authentications"
-msgstr "Sự xác nhận"
-
-msgid "Automation"
-msgstr "Tự động"
-
-msgid "Clients"
-msgstr ""
-
-msgid "Collaboration"
-msgstr "Sự hợp tác"
-
-msgid "Components"
-msgstr "Các thành phần"
-
-msgid "Rooms"
-msgstr "Các phòng"
-
-msgid "Directories"
-msgstr ""
-
-msgid "Gateways"
-msgstr ""
-
-msgid "News"
-msgstr "Tin tức"
-
-msgid "Hierarchy"
-msgstr "Phân cấp"
-
-msgid "Proxies"
-msgstr ""
-
-msgid "Publication/Subscription"
-msgstr ""
-
-msgid "Storage"
-msgstr ""
-
-msgid "Service offline or broken"
-msgstr "Dịch vụ đã tắt hoặc hư hỏng"
-
-msgid "Your inbox"
-msgstr "Hòm thư chính"
-
-msgid "Available actions"
-msgstr "Chức năng sẵn có"
-
-msgid "Clean"
-msgstr "Dọn dẹp"
-
-msgid "New"
-msgstr "Mới"
-
-msgid "Received"
-msgstr "Đã nhận"
-
-msgid "Subject"
-msgstr "Tiêu đề"
-
-msgid "Content"
-msgstr "Nội dung"
-
-msgid "Send message"
-msgstr "Gửi tin nhắn"
-
-msgid "Your inbox is empty."
-msgstr "Hòm thư chính rỗng"
-
-msgid "MUC administration"
-msgstr "Quản lý MUC"
-
-msgid "You administrate this room"
-msgstr "Bạn quản lý phòng này"
-
-msgid "Enter new subject"
-msgstr "Nhập tiêu đề mới"
-
-msgid "Configuration"
-msgstr "Cấu hình"
-
-msgid "Authorizations"
-msgstr "Quyền hạn"
-
-msgid "Member list"
-msgstr "Danh sách thành viên"
-
-msgid "Owner list"
-msgstr "Danh sách chủ thể"
-
-msgid "Administrator list"
-msgstr "Danh sách người quản lý"
-
-msgid "Outcast list"
-msgstr ""
-
-msgid "Add an input"
-msgstr ""
-
-msgid "Destroy this MUC"
-msgstr "Loại bỏ MUC này"
-
-msgid "Yes, let's do it!"
-msgstr "OK, làm thôi!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "Bạn của bạn rất quan tâm đến đối thoại này."
-
-msgid "Your friend is writing a message..."
-msgstr "Bạn của bạn đang viết tin nhắn ..."
-
-msgid "Your friend stopped writing a message."
-msgstr "Bạn của bạn đã ngừng viết tin nhắn."
-
-msgid "Your friend is doing something else."
-msgstr "Bạn của bạn đang làm việc khác."
-
-msgid "Your friend closed the chat."
-msgstr "Bạn của bạn đã đóng cửa sổ chat."
-
-msgid "Requesting this service..."
-msgstr "Đang yêu cầu dịch vụ ..."
-
-msgid "Loading"
-msgstr "Đang tải"
-
-msgid "changed his/her nickname to %s"
-msgstr "đổi nickname của người đó thành %s"
-
-msgid "joined the chat room"
-msgstr "đã tham gia phòng chat"
-
-msgid "left the chat room"
-msgstr "đã rời phòng chat"
-
-msgid "%s left"
-msgstr ""
-
-msgid "%s joined"
-msgstr ""
-
-msgid "no status"
-msgstr "không đặt trạng thái"
-
-msgid "has been kicked"
-msgstr "đã bị kick"
-
-msgid "has been banned"
-msgstr "đã bị ban"
-
-msgid "no reason"
-msgstr "không có nguyên nhân"
-
-msgid "Communicate with the entire world!"
-msgstr "Follow the Giant!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-"Chào mừng bạn đến với FTG Chat. Đây sẽ là nơi để các bạn giao lưu trao đổi "
-"cũng như nhận được tư vấn hỗ trợ về hệ thống FTG."
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr "Cùng tham gia với chúng tôi trên hệ thống XMPP!"
-
-msgid "Hi there!"
-msgstr "Chào bạn!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr "Chào mừng bạn đến với %1s, \"%2s\"."
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr "Đăng nhập bằng tải khoản XMPP của bạn hoặc tạo mới tài khoản."
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr "Để đảm bảo an toàn, bạn nên thiết lập mật khẩu đủ mạnh."
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr ""
-"Đăng nhập bằng tài khoản XMPP của bạn. Bạn có thể sử dụng %s để tham gia "
-"chat nhóm."
-
-msgid "Previous"
-msgstr "Trở lại"
-
-msgid "General"
-msgstr "Tổng quan"
-
-msgid "Advanced"
-msgstr "Nâng cao"
-
-msgid "Resource"
-msgstr "Tài nguyên"
-
-msgid "Priority"
-msgstr "Độ ưu tiên"
-
-msgid "Low"
-msgstr "Thấp"
-
-msgid "Medium"
-msgstr "Vừa"
-
-msgid "High"
-msgstr "Cao"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr ""
-"Nhập nhóm chat bạn muốn tham gia và nickname muốn hiển thị. Bạn cũng có thể "
-"trở lại %s."
-
-msgid "login page"
-msgstr "trang đăng nhập"
-
-msgid "Share this link with your friends:"
-msgstr "Chia sẻ link này cho bạn bè:"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr "Đăng ký một tài khoản XMPP mới để tham gia. Rất đơn giản!"
-
-msgid "Required"
-msgstr "Bắt buộc"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "Bạn vừa đăng ký xong, đây là tài khoản XMPP của bạn:"
-
-msgid "Manager"
-msgstr "Quản lý"
-
-msgid "Encrypted"
-msgstr "Mã hóa"
-
-msgid "Unencrypted"
-msgstr "Giải mã"
-
-msgid "Where are you?"
-msgstr "Bạn đang ở đâu?"
-
-msgid "What's up with you?"
-msgstr "Bạn thế nào?"
-
-msgid "Type something you want to share with your friends..."
-msgstr "Gõ gì đó để chia sẻ với bạn bè ..."
-
-msgid "Fetching the social channel..."
-msgstr "Đang tìm kiếm kênh xã hội ..."
-
-msgid "You are synchronized with your network."
-msgstr "Bạn đã được đồng bộ lên network."
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "Không thể gửi: bạn chỉ có thể nhận thông báo!"
-
-msgid "Media viewer"
-msgstr "Trình xem Media"
-
-msgid "Browse"
-msgstr "Duyệt tới"
-
-msgid "Command"
-msgstr "Dòng lệnh"
-
-msgid "Subscribe"
-msgstr "Subscribe"
-
-msgid "Join"
-msgstr "Tham gia"
-
-msgid "Automatic"
-msgstr "Tự động"
-
-msgid "Search"
-msgstr "Tìm kiếm"
-
-msgid "No result!"
-msgstr "Không có kết quả!"
-
-msgid "No notifications."
-msgstr "Không có thông báo mới."
-
-msgid "would like to add you as a friend."
-msgstr "muốn kết bạn với bạn."
-
-msgid "would like you to join this chatroom:"
-msgstr "bạn có muốn tham gia phòng chat này:"
-
-msgid "Do you accept?"
-msgstr "Bạn đồng ý không?"
-
-msgid "Yes"
-msgstr "Đồng ý"
-
-msgid "No"
-msgstr "Không"
-
-msgid "would like to get authorization."
-msgstr "muốn được bạn cho phép."
-
-msgid "would like to send you a file: “%s”."
-msgstr "muốn gửi một file cho bạn: \"%s\"."
-
-msgid "has received a file exchange request: “%s”."
-msgstr "vừa nhận yêu cầu trao đổi file: \"%s\"."
-
-msgid "has accepted to receive your file: “%s”."
-msgstr ""
-
-msgid "has rejected to receive your file: “%s”."
-msgstr "đã từ chối nhận file của bạn: \"%s\"."
-
-msgid "could not receive your file: “%s”."
-msgstr "không thể nhận file của bạn: \"%s\"."
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr "Bạn có muốn được gợi ý kết bạn từ %s không?"
-
-msgid "commented an item you follow: “%s”."
-msgstr "đã bình luận một vấn đề bạn quan tâm: \"%s\"."
-
-msgid "liked your post: “%s”."
-msgstr "đã thích bài viết của bạn: \"%s\"."
-
-msgid "quoted you somewhere: “%s”."
-msgstr "đã trích dẫn từ bạn ở đâu đó: \"%s\"."
-
-msgid "published on your wall: “%s”."
-msgstr "đã viết lên tường của bạn:\"%s\"."
-
-msgid "tagged you in a photo (%s)."
-msgstr "đã đánh dấu bạn trong một ảnh (%s)."
-
-msgid "tagged you in a video (%s)."
-msgstr "đã đánh dấu bạn trong một video (%s)."
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-
-msgid "Open"
-msgstr ""
-
-msgid "Show"
-msgstr "Hiện"
-
-msgid "Hide"
-msgstr "Ẩn"
-
-msgid "Submit"
-msgstr "Xác nhận"
-
-msgid "Client"
-msgstr "Máy con"
-
-msgid "System"
-msgstr "Hệ thống"
-
-msgid "Local time"
-msgstr "Giờ hiện tại"
-
-msgid "Comments"
-msgstr "Những bình luận"
-
-msgid "User profile"
-msgstr "Thông tin người dùng"
-
-msgid "See his/her position on the globe"
-msgstr "Xem vị trí của người đó trên thế giới"
-
-msgid "Confirm"
-msgstr "Xác nhận"
-
-msgid "anonymous mode"
-msgstr "chế độ ẩn danh"
-
-msgid "Groups"
-msgstr "Nhóm"
-
-msgid "Unclassified"
-msgstr "Chưa được phân lớp"
-
-msgid "Authorize"
-msgstr "Cho phép"
-
-msgid "Ask for authorization"
-msgstr "Yêu cầu quyền hạn"
-
-msgid "Unblock"
-msgstr "Mở khóa"
-
-msgid "Prohibit"
-msgstr "Cấm"
-
-msgid "Block"
-msgstr "Khóa"
-
-msgid "Chat"
-msgstr "Trò chuyện"
-
-msgid "Groupchat"
-msgstr "Nhóm chat"
-
-msgid "Jappix Mobile"
-msgstr "Bản di động Jappix"
-
-msgid "Desktop"
-msgstr "Desktop"
-
-msgid "Mobile"
-msgstr "Di động"
-
-msgid "Please wait..."
-msgstr "Xin chờ ..."
-
-msgid "Please enable JavaScript"
-msgstr "Hãy bật JavaScript"
-
-msgid "Show comments"
-msgstr "Hiện bình luận"
-
-msgid "Loading comments..."
-msgstr "Đang tải bình luận ..."
-
-msgid "Could not get the comments!"
-msgstr "Không thể tải bình luận!"
-
-msgid "Comments locked!"
-msgstr "Bình luận đã bị khóa!"
-
-msgid "Type your comment here..."
-msgstr "Nhập bình luận của bạn ở đây..."
-
-msgid "Your channel"
-msgstr "Kênh của bạn"
-
-msgid "Channel of"
-msgstr "Kênh của"
-
-msgid "More notices..."
-msgstr "Thông báo khác..."
-
-msgid "Attach a file"
-msgstr "Đính kèm file"
-
-msgid "Send"
-msgstr "Gửi"
-
-msgid "Unattach the file"
-msgstr "Bỏ đính kèm"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr ""
-"Có lỗi xảy ra khi upload file: có thể do file quá lớn (%s max) hoặc bị ngắt "
-"kết nối!"
-
-msgid "Authorization failed"
-msgstr "Cấp phép thất bại!"
-
-msgid "Registration failed, please choose a different username"
-msgstr "Đăng ký thất bại, hãy chọn một tên khác"
-
-msgid "Service unavailable"
-msgstr "Dịch vụ không sẵn sàng"
-
-msgid "Internal server error, try later"
-msgstr "Lỗi từ máy chủ, hãy trở lại sau"
-
-msgid "Your form has been sent."
-msgstr "Form đã được gửi đi."
-
-msgid "Application"
-msgstr "Ứng dụng"
-
-msgid "Media integration"
-msgstr "Tích hợp media"
-
-msgid "Keep local chat archives"
-msgstr "Lưu trữ tin nhắn trên máy tính"
-
-msgid "XMPP links"
-msgstr "Liên kết XMPP"
-
-msgid "Open XMPP links with Jappix"
-msgstr "Mở liên kết XMPP từ Jappix"
-
-msgid "changed the subject to:"
-msgstr "đổi tiêu đề thành:"
-
-msgid "Welcome!"
-msgstr "Chào mừng!"
-
-msgid "Friends"
-msgstr "Bạn bè"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr "Chào mừng bạn đến với Jappix, mạng xã hội của chính bạn."
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr ""
-"Trước khi sử dụng, bạn phải thay đổi thiết lập, tìm kiếm bạn bè và hoàn tất "
-"thông tin cá nhân."
-
-msgid "Enable notification sounds"
-msgstr "Bật âm thanh thông báo"
-
-msgid "Share your position on the globe"
-msgstr "Chia sẻ vị trí của bạn trên bản đồ"
-
-msgid "Offline friends"
-msgstr "Bạn bè Offline"
-
-msgid "Don't hide offline friends"
-msgstr "Không ẩn bạn bè offline"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr "Dùng công cụ này để tìm kiếm bạn bè trên server, hoặc thêm họ sau."
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr ""
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr ""
-"Sau khi nhấn nút Lưu, trình chỉnh sửa thông tin cá nhân sẽ được mở. Chúc bạn "
-"vui vẻ!"
-
-msgid "Share Jappix on %s"
-msgstr "Chia sẻ Jappix lên %s"
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "Sử dụng Jappix, một nền tảng mạng xã hội mở. Tôi là %s!"
-
-msgid "Unknown name"
-msgstr "Tên không xác định"
-
-msgid "Unknown country"
-msgstr "Quốc gia không xác định"
-
-msgid "Click to enable"
-msgstr "Clik để bật"
-
-msgid "Click to disable"
-msgstr "Click để tắt"
-
-msgid "Installation"
-msgstr "Cài đặt"
-
-msgid "Jappix installation"
-msgstr "Cài đặt Jappix"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "Chào mừng bạn đến với trình cài đặt Jappix!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-
-msgid "Installation Steps:"
-msgstr ""
-
-msgid "Welcome"
-msgstr "Chào mừng"
-
-msgid "Storage configuration"
-msgstr "Cài đặt cấu hình lưu trữ"
-
-msgid "Administrator account"
-msgstr "Tài khoản người quản trị"
-
-msgid "Main configuration"
-msgstr "Cấu hình chính"
-
-msgid "Hosts configuration"
-msgstr "Cấu hình máy chủ"
-
-msgid "Services installation"
-msgstr "Cài đặt dịch vụ"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr ""
-"Nếu ngôn ngữ hiện tại không phù hợp với bạn(%1s),bạn có thế nói với Jappix "
-"%2s . Thông tin sẽ được lưu lại"
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"Nếu bạn muốn nhận được sự giúp đỡ về việc cài đặt và cấu hình Jappix, bạn có "
-"thể sử dụng toàn bộ tài liệu của chúng tôi,tại :"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr ""
-"Để xây dựng mạng xã hội đám mây của bạn,bạn chỉ cần thực hiện những bước "
-"tiếp theo!"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr "Các thư mục có thể ghi, bạn có thế tiếp tục!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-"Jappix cung cấp cho bạn khả năng để quản lý cấu hình của bạn, cài đặt plugin "
-"mới hoặc tìm kiếm các bản cập nhật. Đó là lý do tại sao bạn phải tạo một tài "
-"khoản quản trị để truy cập vào quản lý."
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr ""
-"Sau khi đã cài đặt xong Jappix, bạn nhấp vào đường dẫn quản lý trên trang "
-"chủ để truy cập."
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr "Rất tiếc, bạn đã quên điều gì đó hoặc hai mật khẩu không khớp!`"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-"Jappix cần bạn chỉ định một số giá trị để làm việc. Vui lòng sửa các đầu vào "
-"sau ( hoặc giữ nguyên giá trị mặc định)"
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr ""
-"Chú ý nếu bạn không chỉ định một giá trị bắt buộc phải có, nó sẽ được tự "
-"động gán giá trị mặc định"
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr ""
-
-msgid "User"
-msgstr "Người dùng"
-
-msgid "Service"
-msgstr "Dịch vụ"
-
-msgid "Service name"
-msgstr "Tên dịch vụ"
-
-msgid "Service description"
-msgstr "Mô tả dịch vụ"
-
-msgid "Owner name"
-msgstr ""
-
-msgid "Owner website"
-msgstr ""
-
-msgid "Connection"
-msgstr "Kết nối"
-
-msgid "Lock the host"
-msgstr "Khóa máy chủ"
-
-msgid "Anonymous mode"
-msgstr "Chế độ ẩn danh"
-
-msgid "HTTP authentication"
-msgstr ""
-
-msgid "Registration allowed"
-msgstr "Cho phép đăng ký"
-
-msgid "Use the built-in BOSH proxy"
-msgstr ""
-
-msgid "Manager link"
-msgstr "Đường dẫn quản trị"
-
-msgid "Groupchats to join"
-msgstr "Tham gia trò chuyện nhóm"
-
-msgid "Suggest groupchats"
-msgstr ""
-
-msgid "Encryption"
-msgstr "Mã hóa"
-
-msgid "HTTPS storage"
-msgstr "Lưu trữ HTTPS"
-
-msgid "Force HTTPS"
-msgstr ""
-
-msgid "Compression"
-msgstr "Nén"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"Trang này giúp bạn xác định máy chủ mặc định mà Jappix sẽ kết nối. Bạn có "
-"thể giữ nguyên và tiêp tục nếu bạn muốn sử dụng dịch vụ chính thức"
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"Có thể bạn không biết gì về một máy chủ BOSH. Trên thực tế, đó là một chuyển "
-"tiếp giữa một máy khách Jappix và một máy chủ XMPP,một sự cần thiết vì những "
-"hạn chế kỹ thuật"
-
-msgid "Main host"
-msgstr "Máy chủ chính"
-
-msgid "Groupchat host"
-msgstr "Máy chủ trò chuyện nhóm"
-
-msgid "Pubsub host"
-msgstr "Máy chủ Pubsub"
-
-msgid "Anonymous host"
-msgstr "Máy chủ ẩn danh"
-
-msgid "Directory host"
-msgstr "Thư mục chủ"
-
-msgid "BOSH host"
-msgstr "BOSH chủ"
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-"Bạn có thể cài đặt thêm những phần mêm vào máy chủ để mở rộng các tính năng "
-"của Jappix. Một vài người khác có thể thay đổi bởi vì những hạn chế bảo mật "
-"được thiết lập mặc định."
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-"Để thực hiện được điều này, bạn phải truy cập được vào shell máy chủ của bạn "
-"và đăng nhập như là một tài khoản root. Hãy nhớ rằng điều này là tùy ý, "
-"Jappix sẽ làm việc mà không có một vài mô-đun, nhưng một vài tính năng của "
-"nó cũng ko được sử dụng"
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-"Sau khi bạn hoàn thành việc cài đặt, Jappix sẽ tạo ra các tập tin lưu trữ bộ "
-"nhớ cache. Jappix có thể sẽ chậm, bạn cần phải chờ cho đến khi chương trình "
-"được hiển thị, và không bấm vào bất kỳ nút bấm nào."
-
-msgid "Thanks for using Jappix!"
-msgstr "Cảm ơn bạn đã sử dụng Jappix!"
-
-msgid "Next"
-msgstr "Tiếp theo"
-
-msgid "Finish"
-msgstr "Hoàn thành"
-
-msgid "Check again"
-msgstr "Kiểm tra lại"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr "Thư mục không được quyền ghi,thiết lập lại đúng quyền cho thư mục %s"
-
-msgid "%s is installed on your system."
-msgstr "%s đã được cài đặt trên hệ thống của bạn."
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s chưa được cài đặt trên hệ thống của bạn, bạn cần phải cài đặt %2s"
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "Kích thước tải lên tối đa PHP là (%s) "
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr ""
-"Kích thước PHP tối đa tải lên không đủ (%1s),bạn phải định nghĩa nó từ %2s "
-"đến %3s"
-
-msgid "Jappix manager"
-msgstr "Quản lý Jappix"
-
-msgid "Manager access"
-msgstr "Quản lý truy cập"
-
-msgid "Statistics"
-msgstr "Thống kê"
-
-msgid "Hosts"
-msgstr "Máy chủ"
-
-msgid "Design"
-msgstr "Thiết kế"
-
-msgid "Repeat"
-msgstr "Lặp lại"
-
-msgid "All"
-msgstr "Tất cả"
-
-msgid "Horizontal"
-msgstr "Chiều ngang"
-
-msgid "Vertical"
-msgstr "Chiều dọc"
-
-msgid "Center"
-msgstr "Trung tâm"
-
-msgid "Left"
-msgstr "Bên trái"
-
-msgid "Right"
-msgstr "Bên phải"
-
-msgid "Top"
-msgstr "Phía trên"
-
-msgid "Bottom"
-msgstr "Phía dưới"
-
-msgid "Adapt"
-msgstr "Thích ứng"
-
-msgid "Color"
-msgstr "Màu sắc"
-
-msgid "Users"
-msgstr "Người dùng"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr ""
-"Đây là khu vực giới hạn : chỉ những người dùng có thẩm quyền mới có thể quản "
-"lý nốt Jappix này."
-
-msgid "Please use the form below to login to the administration panel."
-msgstr "Vui lòng sử dụng mẫu dưới đây để đăng nhập vào bảng điều khiển chính."
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr ""
-"Để đảm bảo an toàn,phiên làm việc sẽ được hạn chế thời gian và khi trình "
-"duyện của bạn đóng lại,bạn sẽ bị đăng xuất ra khỏi hệ thống."
-
-msgid "Credentials"
-msgstr "Thông tin"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "Bạn đã đăng xuất. Tạm biệt!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr ""
-"Rât tiếc, bạn không được công nhận là một quản trị hợp lệ. Vui lòng kiểm tra "
-"lại thông tin của bạn!"
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr ""
-"Những thống kê cơ bản được xử xý bởi Jappix về một số thông tin quan trọng, "
-"bạn có thể tìm chúng ở phía dưới."
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr "Chỉnh sửa cấu hình nốt Jappix của bạn với công cụ này."
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-"Tất cả các tập tin lưu trữ của nôt Jappix có thể quản lý bằng công cụ : vui "
-"lòng chọn một thư mục con và bắt đầu chỉnh sửa nội cung của nó!"
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr ""
-"Jappix hoàn toàn được tùy biến: bạn có thể thay đổi thiết kế của nó tại đây."
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr "Hình ảnh không đúng định dạng, vui lòng sử dụng ảnh PNG, GIF hoặc JPG!"
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr "Hình ảnh không đúng định dạng, vui lòng sử dụng ảnh PNG!"
-
-msgid "The image could not be received, would you mind retry?"
-msgstr "Ảnh không thể nhận được,bạn có muốn thử lại?"
-
-msgid "Your service logo has been successfully changed!"
-msgstr "Logo dịch vụ của bạn đã được thay đổi thành công!"
-
-msgid "Your image was added to the list!"
-msgstr "Hình ảnh của ban đã được thêm vào danh sách!"
-
-msgid "Changes saved!"
-msgstr "Thay đổi đã được lưu!"
-
-msgid "Logo"
-msgstr "Logo"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-"Bạn có thể thiết lập logo dịch vụ của bạn thay thế logo mặc định. Chú ý về "
-"kích thước và màu sắc của mỗi logo!"
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr "Tải mỗi logo với kích thước lớn nhất theo yêu cầu."
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr ""
-"Định dạng logo của bạn phải là PNG. Để lại một trường trống và logo sẽ không "
-"được thay đổi."
-
-msgid "Remove this logo"
-msgstr "Gỡ bỏ logo này."
-
-msgid "View this logo"
-msgstr "Xem logo này."
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr ""
-"Bạn có thể định nghĩa nhiều hơn một người quản trị cho nốt Jappix này . Bạn "
-"cũng có thể đổi mật khẩu với công cụ này."
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-"Cập nhật nốt Jappix của bạn bằng công cụ này, hoặc kiểm tra nêu có một công "
-"cụ mới. Thông tin về phiên bản mới nhất sẽ luôn được hiển thị (bằng Tiếng "
-"Anh)."
-
-msgid "Access statistics"
-msgstr "Thống kê truy cập"
-
-msgid "Share statistics"
-msgstr "Chia sẻ số liệu thống kê"
-
-msgid "Other statistics"
-msgstr "Thống kê khác"
-
-msgid "January"
-msgstr "Tháng Một"
-
-msgid "February"
-msgstr "Tháng Hai"
-
-msgid "March"
-msgstr "Tháng Ba"
-
-msgid "April"
-msgstr "Tháng Tư"
-
-msgid "May"
-msgstr "Tháng Năm"
-
-msgid "June"
-msgstr "Tháng Sáu"
-
-msgid "July"
-msgstr "Tháng Bảy"
-
-msgid "August"
-msgstr "Tháng Tám"
-
-msgid "September"
-msgstr "Tháng Chín"
-
-msgid "October"
-msgstr "Tháng Mười"
-
-msgid "November"
-msgstr "Tháng Mười Một"
-
-msgid "December"
-msgstr "Tháng Mười Hai"
-
-msgid "Monday"
-msgstr "Thứ Hai"
-
-msgid "Tuesday"
-msgstr "Thứ Ba"
-
-msgid "Wednesday"
-msgstr "Thứ Tư"
-
-msgid "Thursday"
-msgstr "Thứ Năm"
-
-msgid "Friday"
-msgstr "Thứ Sáu"
-
-msgid "Saturday"
-msgstr "Thứ Bảy"
-
-msgid "Sunday"
-msgstr "Chủ Nhật"
-
-msgid "Total"
-msgstr "Tổng"
-
-msgid "Archives"
-msgstr ""
-
-msgid "Music"
-msgstr "Âm nhạc"
-
-msgid "Backgrounds"
-msgstr "Nền"
-
-msgid "Share"
-msgstr "Chia sẻ"
-
-msgid "Background"
-msgstr "Nền"
-
-msgid "Notice"
-msgstr "Thông báo"
-
-msgid "Your design preferences have been saved!"
-msgstr "Thiết kế của bạn đã được lưu!"
-
-msgid "Please check your inputs: something is missing!"
-msgstr "Vui lòng kiểm tra đầu vào của bạn : Một vài thứ bị thiếu!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-"Thay đổi nền nút Jappix của bạn với công cụ này. Bạn có thể tùy chỉnh màu "
-"sắc hoặc tải lên một hình ảnh."
-
-msgid "Use default background"
-msgstr "Sử dụng ảnh nền mặc định"
-
-msgid "Use your own image"
-msgstr "Sử dụng hình ảnh của bạn"
-
-msgid "Select a background to use and change the display options."
-msgstr "Chọn một ảnh nền để sử dụng và thay thôi tùy chọn hiển thị."
-
-msgid "Use your own color"
-msgstr "Sử dụng màu sắc của bạn"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr "Nhập giá trị màu hệ hexa mà bạn muốn sử dụng làm nền."
-
-msgid "Manage backgrounds"
-msgstr "Quản lý ảnh nền."
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr ""
-"Bạn có thể thêm ảnh nền mới vào danh sách với công cụ này. Vui lòng gửi một "
-"ảnh hợp lệ."
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr "Nếu bạn muốn gỡ bỏ một vài ảnh nền, sử dụng trình duyệt dưới đây."
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-"Định nghĩa một thông báo ở trang chủ cho tất cả người dùng của bạn, một "
-"thông tin cảnh báo, một tin nhắn quan trọng hoặc là một quảng cáo với công "
-"cụ này."
-
-msgid "Simple notice"
-msgstr "Thông báo đơn giản"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr ""
-"Thông báo này chỉ cho hiển thị văn bản đơn giản,nhưng không mã hóa được cho "
-"phép."
-
-msgid "Advanced notice"
-msgstr "Thông báo nâng cao"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-"Bạn có thể tùy chỉnh thông báo của bạn với mã nhúng HTML, CSS và JavaScrtip, "
-"nhưng bàn cần phải lập trình style"
-
-msgid "Available updates"
-msgstr "Cập nhật có sẵn"
-
-msgid "What's new?"
-msgstr "Có gì mới?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr "Thư mục lưu trữ của bạn không thể ghi, vui lòng áp dụng đúng quyền!"
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr "%1s có thể gây ra các vấn đề cho proxy, vui lòng tăng %2s lên %3s!"
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr ""
-"Bạn đang sử dụng phiên bản đang phát triển của Jappix. Cập nhật Jappix thông "
-"qua qua kho lưu trữ của chúng tôi bằng cách thực hiện : %s."
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr ""
-"Đã có phiên bản mới của Jappix. Kiểm tra những điều mới và chạy cập nhật "
-"chương trình!"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr ""
-"Phiên bản của bạn đã được cập nhật. Nâng cấp ngay đến phiên bản %s bằng cách "
-"nhấp vào đây!"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr ""
-"Phiên bản của bạn dường như đã được nâng cấp,nhưng bạn có thể kiểm tra cập "
-"nhật thủ công bằng cách nhấp vào đây."
-
-msgid "Check for updates"
-msgstr "Kiểm tra cập nhật"
-
-msgid "Update in progress"
-msgstr "Đang chạy cập nhật"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr ""
-"Jappix đã được cập nhật: bạn đang chạy phiên bản mới nhất. Chúc vui vẻ!"
-
-msgid "The update has failed! Please try again later."
-msgstr "Cập nhật có lỗi. Vui lòng thử lại sau."
-
-msgid "Downloading package..."
-msgstr "Đang tải xuống gói..."
-
-msgid "Removing current Jappix system files..."
-msgstr "Loại bỏ những tập tin hệ thống Jappix hiện tại..."
-
-msgid "Extracting package..."
-msgstr "Giải nén gói..."
-
-msgid "Regenerating storage folder tree..."
-msgstr "Tạo lại cây thư mục lưu trữ..."
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix bây giờ đã được nâng cấp phiên bản!"
-
-msgid "Aborted: socket error!"
-msgstr "Hủy bỏ : Lỗi socket!"
-
-msgid "Aborted: buffer error!"
-msgstr "Hủy bỏ : Lỗi bộ đệm 'buffer'!"
-
-msgid "Aborted: everything is not writable!"
-msgstr "Hủy bỏ : Tất cả đều không thể ghi !"
-
-msgid "Aborted: could not extract the package!"
-msgstr "Hủy bỏ: Không thể giải nén!"
-
-msgid "Visits"
-msgstr "Thăm"
-
-msgid "Daily"
-msgstr "Hàng ngày"
-
-msgid "Weekly"
-msgstr "Hàng tuần"
-
-msgid "Monthly"
-msgstr "Hàng tháng"
-
-msgid "Yearly"
-msgstr "Hàng năm"
-
-msgid "Size"
-msgstr "Kích thước"
-
-msgid "Clean everything"
-msgstr "Dọn dẹp mọi thứ"
-
-msgid "Purge cache"
-msgstr "Thanh lọc bộ nhớ đệm"
-
-msgid "Purge logs"
-msgstr "Thanh lọc bản ghi log"
-
-msgid "Purge sent files"
-msgstr "Thanh lọc việc gửi tập tin"
-
-msgid "Purge updates"
-msgstr "Thanh lọc cập nhật"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "Thư mục bạn muốn dọn dẹp hiện đã trống!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr ""
-"Luôn giữ cho Jappix sạch sẽ và gọn gàng, hãy dọn dẹp thư mục thường xuyên!"
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr "Tải nhạc của bạn lên(Ogg Vorbis, MP3)!"
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr "Tập tin mà bạn muốn tải lên phải nhỏ hơn %s."
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr ""
-
-msgid "Title"
-msgstr "Tiêu đề"
-
-msgid "Artist"
-msgstr ""
-
-msgid "Album"
-msgstr ""
-
-msgid "File"
-msgstr ""
-
-msgid "Upload"
-msgstr ""
-
-msgid "The folder is empty."
-msgstr ""
-
-msgid "The music could not be received, please retry!"
-msgstr ""
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr ""
-
-msgid "Your music has been added!"
-msgstr ""
-
-msgid "The selected elements have been removed."
-msgstr ""
-
-msgid "You must select elements to remove!"
-msgstr ""
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-
-msgid "Manage"
-msgstr ""
-
-msgid "List"
-msgstr ""
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-
-msgid "The user has been added!"
-msgstr ""
-
-msgid "The chosen users have been removed."
-msgstr ""
-
-msgid "You must select one or more users to be removed!"
-msgstr ""
-
-msgid "Yesterday"
-msgstr ""
-
-msgid "%s days ago"
-msgstr ""
-
-msgid "User currently active"
-msgstr ""
-
-msgid "Last seen: %s"
-msgstr ""
-
-msgid "Inactive since: %s"
-msgstr ""
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr ""
-
-msgid "Static content server"
-msgstr ""
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr ""
-
-msgid "User uploads server"
-msgstr ""
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr ""
-
-msgid "Suggested friends"
-msgstr ""
-
-msgid "Check all"
-msgstr ""
-
-msgid "Uncheck all"
-msgstr ""
-
-msgid "Choose"
-msgstr ""
-
-msgid "List name"
-msgstr ""
-
-msgid "Allow"
-msgstr ""
-
-msgid "Deny"
-msgstr ""
-
-msgid "Group"
-msgstr ""
-
-msgid "Subscription"
-msgstr ""
-
-msgid "Both"
-msgstr ""
-
-msgid "From"
-msgstr ""
-
-msgid "Everybody"
-msgstr ""
-
-msgid "Send messages"
-msgstr ""
-
-msgid "Send queries"
-msgstr ""
-
-msgid "See my status"
-msgstr ""
-
-msgid "Send his/her status"
-msgstr ""
-
-msgid "Everything"
-msgstr ""
-
-msgid "Item"
-msgstr ""
-
-msgid "Order"
-msgstr ""
-
-msgid "Active for this session"
-msgstr ""
-
-msgid "Always active"
-msgstr ""
-
-msgid "User directory"
-msgstr ""
-
-msgid "Search a friend"
-msgstr ""
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr ""
-
-msgid "Send him/her a message"
-msgstr ""
-
-msgid "Start a chat with him/her"
-msgstr ""
-
-msgid "Available shortcuts:"
-msgstr ""
-
-msgid "%s removes the chat logs"
-msgstr ""
-
-msgid "%s joins a groupchat"
-msgstr ""
-
-msgid "%s closes the chat"
-msgstr ""
-
-msgid "%s shows the user profile"
-msgstr ""
-
-msgid "%s sends a message to the room"
-msgstr ""
-
-msgid "%s changes your nickname"
-msgstr ""
-
-msgid "%s sends a message to someone in the room"
-msgstr ""
-
-msgid "%s changes the room topic"
-msgstr ""
-
-msgid "%s kicks a user of the room"
-msgstr ""
-
-msgid "%s bans a user of the room"
-msgstr ""
-
-msgid "%s invites someone to join the room"
-msgstr ""
-
-msgid "Public profile"
-msgstr ""
-
-msgid "Your profile anywhere on the Web."
-msgstr ""
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-
-msgid "Yay, let's create your public profile!"
-msgstr ""
-
-msgid "Enable my public profile"
-msgstr "Bật thông tin cá nhân của tôi."
-
-msgid "Jappix for your phone"
-msgstr ""
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr ""
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr ""
-
-msgid "You haven't provided any file to download"
-msgstr ""
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr ""
-
-msgid "Woah this file isn't found, please double check"
-msgstr ""
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr ""
-
-msgid "Statistics are currently disabled in the settings."
-msgstr ""
-
-msgid "New event!"
-msgstr ""
-
-msgid "%s is typing..."
-msgstr ""
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-
-msgid "Username"
-msgstr ""
-
-msgid "Enter password"
-msgstr ""
-
-msgid "Once again..."
-msgstr ""
-
-msgid "Code"
-msgstr ""
-
-msgid "Security code"
-msgstr ""
-
-msgid "Advertising space available!"
-msgstr ""
-
-msgid "Advertise here"
-msgstr ""
-
-msgid "Analytics (%s)"
-msgstr ""
-
-msgid "Track visits"
-msgstr ""
-
-msgid "Piwik URL"
-msgstr ""
-
-msgid "Piwik tracking ID"
-msgstr ""
-
-msgid "Advertising (%s)"
-msgstr ""
-
-msgid "Enable ads"
-msgstr ""
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "Content ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "Mute"
-msgstr ""
-
-msgid "Unmute"
-msgstr ""
-
-msgid "Is calling you"
-msgstr ""
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr ""
-
-msgid "Waiting..."
-msgstr ""
-
-msgid "Ringing..."
-msgstr ""
-
-msgid "Declined the call"
-msgstr ""
-
-msgid "Call error"
-msgstr ""
-
-msgid "Ended the call"
-msgstr ""
-
-msgid "Call ended"
-msgstr ""
-
-msgid "Call canceled"
-msgstr ""
-
-msgid "Canceled the call"
-msgstr ""
-
-msgid "Is already in a call"
-msgstr ""
-
-msgid "Ending call..."
-msgstr ""
-
-msgid "Accept"
-msgstr ""
-
-msgid "Decline"
-msgstr ""
-
-msgid "Okay"
-msgstr ""
-
-msgid "Retry"
-msgstr ""
-
-msgid "Audio Call"
-msgstr ""
-
-msgid "Video Call"
-msgstr ""
-
-msgid "Edited"
-msgstr ""
-
-msgid "Edited (%s)"
-msgstr ""
-
-msgid "Editing"
-msgstr ""
-
-msgid "Being edited"
-msgstr ""
-
-msgid "Delivered"
-msgstr ""
-
-msgid "Read"
-msgstr ""
-
-msgid "Sending..."
-msgstr ""
-
-msgid "%s requested your attention to the conversation"
-msgstr ""
-
-msgid "You requested %s's attention to the conversation"
-msgstr ""
-
-msgid "Attention to conversation requested."
-msgstr ""
diff --git a/i18n/zh-cn/LC_MESSAGES/main.mo b/i18n/zh-cn/LC_MESSAGES/main.mo
deleted file mode 100644
index a59316a5..00000000
--- a/i18n/zh-cn/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/zh-cn/LC_MESSAGES/main.po b/i18n/zh-cn/LC_MESSAGES/main.po
deleted file mode 100644
index 20ab7bf2..00000000
--- a/i18n/zh-cn/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2298 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:21+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/jappix/"
-"language/zh_CN/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: zh_CN\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "default:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr "网页浏览器找不到 JavaScript,无法启动 Jappix!请修正。"
-
-msgid "Social channel, chat and more."
-msgstr "社交频道,聊天以及更多。"
-
-msgid "Create your public profile."
-msgstr "创建公开资料"
-
-msgid "A mini-chat for your website."
-msgstr "网站上的迷你聊天"
-
-msgid "Get Jappix, get support."
-msgstr "使用Jappix,得到支持"
-
-msgid "Statistics around Jappix."
-msgstr "围绕Jappix的统计资料。"
-
-msgid "Legal disclaimer for Jappix."
-msgstr "对于Jappix的合法的免责声明"
-
-msgid "Download Jappix for free."
-msgstr "免费下载Jappix "
-
-msgid "Contribute to the Jappix code."
-msgstr "有助于Jappix代码"
-
-msgid "Jappix for your company."
-msgstr "你公司的Jappix"
-
-msgid "Find a public Jappix node."
-msgstr "找到一个公开的Jappix网点。 "
-
-msgid "Credits"
-msgstr "信用"
-
-msgid "Association"
-msgstr "联合"
-
-msgid "Web agency"
-msgstr "网络代理"
-
-msgid "Legal"
-msgstr "合法的"
-
-msgid "Legal disclaimer"
-msgstr "合法的免责声明"
-
-msgid "Terms of use and legal"
-msgstr "使用条款和合法的"
-
-msgid "Owner"
-msgstr "所有者"
-
-msgid "Node owner"
-msgstr "网店所有者"
-
-msgid "By using our service, you accept %s."
-msgstr "通过使用我们的服务,你接受%s."
-
-msgid "our terms of use"
-msgstr "使用条款"
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Jappix 已因网络问题、bug 或错误登录(检查你输入了正确的认证信息)而被中断,造"
-"成不便表示抱歉。"
-
-msgid "The element list on this server could not be obtained!"
-msgstr "服务器的元素列表无法获得!"
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr "密码已被更改,现在可以用新的登录数据连接账号。"
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr " Jappix 账号已被删除,再见!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "已经退出 Jappix 账号,祝你今天愉快!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr "你加入的聊天室似乎不存在。你应该创建一个新的!"
-
-msgid "The groupchat has been removed."
-msgstr "该群已被删除,现在其他人将可以重建一个。"
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "你想联系的用户不在聊天室内。"
-
-msgid "Please enter the group chat address to join."
-msgstr "请输入要加入的群地址。"
-
-msgid "Please enter your nickname to join %s."
-msgstr "请输入要加入 %s 用的昵称。"
-
-msgid "This room (%s) is protected with a password."
-msgstr "此聊天室(%s)有密码保护。"
-
-msgid "Your browser is out of date!"
-msgstr "你的浏览器已过时!"
-
-msgid "Last %s version is better!"
-msgstr "推荐使用最新版本 %s!"
-
-msgid "Login"
-msgstr "登录"
-
-msgid "Register"
-msgstr "注册"
-
-msgid "Here we go!"
-msgstr "开始!"
-
-msgid "Server"
-msgstr "服务器"
-
-msgid "Password"
-msgstr "密码"
-
-msgid "Remember me"
-msgstr "记住我"
-
-msgid "This tool has been disabled!"
-msgstr "此工具已被停用,你不能使用它!"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr "因为网络问题,你已被断线。你现在想做什么?"
-
-msgid "Reconnect"
-msgstr "重新联机"
-
-msgid "Messages"
-msgstr "消息"
-
-msgid "Profile"
-msgstr "个人资料"
-
-msgid "Options"
-msgstr "选项"
-
-msgid "Disconnect"
-msgstr "断线"
-
-msgid "Filter"
-msgstr "过滤"
-
-msgid "Add a friend"
-msgstr "添加好友"
-
-msgid "Your groupchats"
-msgstr "你的群"
-
-msgid "Manage your favorite groupchats"
-msgstr "管理你最喜爱的群"
-
-msgid "More stuff"
-msgstr "更多材料"
-
-msgid "Show all friends"
-msgstr "显示所有好友"
-
-msgid "Only show connected friends"
-msgstr "只显示已联机的好友"
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "消息存盘"
-
-msgid "Date"
-msgstr "日期"
-
-msgid "A short message?"
-msgstr "短消息?"
-
-msgid "How are you?"
-msgstr "你好吗?"
-
-msgid "What are you doing?"
-msgstr "你在做什么?"
-
-msgid "Join a chat"
-msgstr "加入聊天"
-
-msgid "Status"
-msgstr "状态"
-
-msgid "Available"
-msgstr "有空"
-
-msgid "Talkative"
-msgstr "健谈"
-
-msgid "Away"
-msgstr "离开"
-
-msgid "Not available"
-msgstr "没空"
-
-msgid "Busy"
-msgstr "忙碌"
-
-msgid "Offline"
-msgstr "脱机"
-
-msgid "Mood"
-msgstr "心情"
-
-msgid "None"
-msgstr "无"
-
-msgid "Crazy"
-msgstr "疯狂"
-
-msgid "Excited"
-msgstr "兴奋"
-
-msgid "Playful"
-msgstr "好玩"
-
-msgid "Happy"
-msgstr "快乐"
-
-msgid "Shocked"
-msgstr "震惊"
-
-msgid "Hot"
-msgstr "激动"
-
-msgid "Sad"
-msgstr "悲伤"
-
-msgid "Amorous"
-msgstr "爱慕"
-
-msgid "Confident"
-msgstr "自信"
-
-msgid "Activity"
-msgstr "活动"
-
-msgid "Chores"
-msgstr "杂事"
-
-msgid "Drinking"
-msgstr "喝"
-
-msgid "Eating"
-msgstr "吃"
-
-msgid "Exercising"
-msgstr "运动"
-
-msgid "Grooming"
-msgstr "推荐"
-
-msgid "Appointment"
-msgstr "预约"
-
-msgid "Inactive"
-msgstr "无效"
-
-msgid "Relaxing"
-msgstr "放松"
-
-msgid "Talking"
-msgstr "对话"
-
-msgid "Traveling"
-msgstr "旅行"
-
-msgid "Working"
-msgstr "工作"
-
-msgid "View profile"
-msgstr "查看个人资料"
-
-msgid "This is a repeat from %s"
-msgstr "这是对%s的重复"
-
-msgid "Repeat this notice"
-msgstr "重复此通知"
-
-msgid "Remove this notice"
-msgstr "删除此通知"
-
-msgid "Your profile"
-msgstr "你的个人资料"
-
-msgid "Identity"
-msgstr "身份证明"
-
-msgid "Profile image"
-msgstr "头像"
-
-msgid "Others"
-msgstr "其他"
-
-msgid "Other"
-msgstr ""
-
-msgid "Personal"
-msgstr "个人"
-
-msgid "Complete name"
-msgstr "全名"
-
-msgid "Nickname"
-msgstr "昵称"
-
-msgid "First name"
-msgstr "名"
-
-msgid "Last name"
-msgstr "姓"
-
-msgid "Date of birth"
-msgstr "生日"
-
-msgid "Contact"
-msgstr "联系人"
-
-msgid "E-mail"
-msgstr "电子邮件"
-
-msgid "Phone"
-msgstr "电话"
-
-msgid "Website"
-msgstr "网站"
-
-msgid "Current"
-msgstr "目前"
-
-msgid "Delete"
-msgstr "删除"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr "可惜!你没有在身份证上设置头像!"
-
-msgid "Address"
-msgstr "地址"
-
-msgid "Street"
-msgstr "街"
-
-msgid "City"
-msgstr "市"
-
-msgid "Postal code"
-msgstr "邮政编码"
-
-msgid "Country"
-msgstr "国家"
-
-msgid "Biography"
-msgstr "自传"
-
-msgid "Important notice"
-msgstr "重要通知"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr "在 XMPP 上不是所有东西是私有的;其中你的个人资料就是公开的(vCard)。"
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"强烈建议上传大头照(最大 %s),类似你的相片,因为那会使你的朋友更容易认得你。"
-
-msgid "Save"
-msgstr "保存"
-
-msgid "Cancel"
-msgstr "取消"
-
-msgid "Edit options"
-msgstr "编辑选项"
-
-msgid "Channel"
-msgstr "频道"
-
-msgid "Commands"
-msgstr "指令"
-
-msgid "Sounds"
-msgstr "声音"
-
-msgid "Privacy"
-msgstr "隐私"
-
-msgid "Message archiving"
-msgstr "消息存盘"
-
-msgid "Store an history of your chats"
-msgstr ""
-
-msgid "Geolocation"
-msgstr "地理位置"
-
-msgid "Disabled"
-msgstr ""
-
-msgid "Store all chats"
-msgstr ""
-
-msgid "Store friend chats"
-msgstr ""
-
-msgid "Remove all archives"
-msgstr ""
-
-msgid "Empty"
-msgstr "空白"
-
-msgid "Empty channel"
-msgstr "无意义的频道"
-
-msgid "Persistent"
-msgstr "持续"
-
-msgid "Maximum notices"
-msgstr "最大量的通知"
-
-msgid "Account"
-msgstr "账号"
-
-msgid "Change password"
-msgstr "变更密码"
-
-msgid "Delete account"
-msgstr "删除账号"
-
-msgid "Old"
-msgstr "旧"
-
-msgid "New (2 times)"
-msgstr "新(2 次)"
-
-msgid "Suggested chatrooms"
-msgstr ""
-
-msgid "Skip"
-msgstr ""
-
-msgid "Continue"
-msgstr "继续"
-
-msgid "To"
-msgstr "到"
-
-msgid "Close"
-msgstr "关闭"
-
-msgid "unknown"
-msgstr "陌生的"
-
-msgid "Unavailable"
-msgstr "无法使用"
-
-msgid "is now"
-msgstr "现在是"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "请稍待,头像 正被载入..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "这里!美丽的新头像!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "图像文件不被支持或尺寸大小错误。"
-
-msgid "Reply"
-msgstr "回复"
-
-msgid "Error"
-msgstr "错误"
-
-msgid "Click here to solve the error"
-msgstr "在这点一下以解决错误"
-
-msgid "You"
-msgstr "你"
-
-msgid "Remove"
-msgstr "删除"
-
-msgid "Rename"
-msgstr "重命名"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "嗨,我是 %s,我想加你为好友。"
-
-msgid "Smiley insertion"
-msgstr "插入微笑符号"
-
-msgid "Change style"
-msgstr "改变风格"
-
-msgid "Text in bold"
-msgstr "粗体字"
-
-msgid "Text in italic"
-msgstr "斜体字"
-
-msgid "Underlined text"
-msgstr "下划线字"
-
-msgid "Send a file"
-msgstr "发送一个文档"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr "一旦上传,你的朋友会被提示下载你发送的文档"
-
-msgid "Save chat"
-msgstr "保存聊天"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr "点击下面链接以获取聊天记录,且稍待。然后再点一下获取档案。"
-
-msgid "This chat is empty!"
-msgstr "此聊天室是空的!"
-
-msgid "Generate file!"
-msgstr "产生文档!"
-
-msgid "Download file!"
-msgstr "下载文件!"
-
-msgid "Clean current chat"
-msgstr "清除目前的聊天"
-
-msgid "Show user profile"
-msgstr "显示用户个人资料"
-
-msgid "Add this contact to your friends"
-msgstr "加入此联系人到你的好友"
-
-msgid "Add this groupchat to your favorites"
-msgstr "加入此群至你的收藏夹"
-
-msgid "All tabs"
-msgstr "全部选项卡"
-
-msgid "Join groupchat"
-msgstr ""
-
-msgid "Close this tab"
-msgstr "关闭此选项卡"
-
-msgid "no subject defined for this room."
-msgstr "此房间未设置主题。"
-
-msgid "Administration panel for this room"
-msgstr "此聊天室的管理面板"
-
-msgid "Moderators"
-msgstr "版主"
-
-msgid "Participants"
-msgstr "参与者"
-
-msgid "Visitors"
-msgstr "访客"
-
-msgid "Manage favorite rooms"
-msgstr "管理最喜欢的聊天室"
-
-msgid "Change favorites"
-msgstr "变更我的最爱"
-
-msgid "Search a room"
-msgstr "搜索聊天室"
-
-msgid "Select a favorite"
-msgstr "选取收藏夹"
-
-msgid "Getting the name..."
-msgstr "正在取得名称..."
-
-msgid "Gateway"
-msgstr "网关"
-
-msgid "Name"
-msgstr "名称"
-
-msgid "Room"
-msgstr "聊天室"
-
-msgid "Add"
-msgstr "增加"
-
-msgid "Edit"
-msgstr "编辑"
-
-msgid "Search a room on"
-msgstr "搜索聊天室于"
-
-msgid "No room found on this server."
-msgstr "在此服务器上找不到聊天室。"
-
-msgid "Service discovery"
-msgstr "服务搜索"
-
-msgid "Server to query"
-msgstr "查询的服务器"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "抱歉,实体未传回任何结果!"
-
-msgid "Accounts"
-msgstr "账号"
-
-msgid "Authentications"
-msgstr "身份验证"
-
-msgid "Automation"
-msgstr "自动"
-
-msgid "Clients"
-msgstr "客户端"
-
-msgid "Collaboration"
-msgstr "合作"
-
-msgid "Components"
-msgstr "成分"
-
-msgid "Rooms"
-msgstr "聊天室"
-
-msgid "Directories"
-msgstr "目录"
-
-msgid "Gateways"
-msgstr "网关"
-
-msgid "News"
-msgstr "新闻"
-
-msgid "Hierarchy"
-msgstr "等级制度"
-
-msgid "Proxies"
-msgstr "代理人"
-
-msgid "Publication/Subscription"
-msgstr "出版/订阅"
-
-msgid "Storage"
-msgstr "存储"
-
-msgid "Service offline or broken"
-msgstr "服务脱机或故障"
-
-msgid "Your inbox"
-msgstr "你的收件箱"
-
-msgid "Available actions"
-msgstr "可操作行为"
-
-msgid "Clean"
-msgstr "清除"
-
-msgid "New"
-msgstr "新加"
-
-msgid "Received"
-msgstr "已接收"
-
-msgid "Subject"
-msgstr "主题"
-
-msgid "Content"
-msgstr "内容"
-
-msgid "Send message"
-msgstr "发送消息"
-
-msgid "Your inbox is empty."
-msgstr "你的收件箱是空的。"
-
-msgid "MUC administration"
-msgstr "MUC 管理"
-
-msgid "You administrate this room"
-msgstr "你管理此聊天室"
-
-msgid "Enter new subject"
-msgstr "输入新的主题"
-
-msgid "Configuration"
-msgstr "设置"
-
-msgid "Authorizations"
-msgstr "授权"
-
-msgid "Member list"
-msgstr "会员清单"
-
-msgid "Owner list"
-msgstr "所有者清单"
-
-msgid "Administrator list"
-msgstr "管理员清单"
-
-msgid "Outcast list"
-msgstr "被驱逐者清单"
-
-msgid "Add an input"
-msgstr "增加输入"
-
-msgid "Destroy this MUC"
-msgstr "销毁此 MUC"
-
-msgid "Yes, let's do it!"
-msgstr "是,做吧!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "你的好友正在专心会话。"
-
-msgid "Your friend is writing a message..."
-msgstr "你的好友正在写消息..."
-
-msgid "Your friend stopped writing a message."
-msgstr "你的好友停止写消息。"
-
-msgid "Your friend is doing something else."
-msgstr "你的好友正在做其他事。"
-
-msgid "Your friend closed the chat."
-msgstr "你的好友关闭了聊天。"
-
-msgid "Requesting this service..."
-msgstr "正在请求此服务..."
-
-msgid "Loading"
-msgstr "正在加载"
-
-msgid "changed his/her nickname to %s"
-msgstr "更改他/她的昵称为%s"
-
-msgid "joined the chat room"
-msgstr "加入聊天室"
-
-msgid "left the chat room"
-msgstr "离开聊天室"
-
-msgid "%s left"
-msgstr ""
-
-msgid "%s joined"
-msgstr ""
-
-msgid "no status"
-msgstr "无状态"
-
-msgid "has been kicked"
-msgstr "已被踢除"
-
-msgid "has been banned"
-msgstr "已被禁止"
-
-msgid "no reason"
-msgstr "无理由"
-
-msgid "Communicate with the entire world!"
-msgstr "与全世界沟通!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-"Jappix是一个强大的社交平台,你可以在任何地点、任何时间访问他,并且与任何你希"
-"望的人交流。"
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr "它允许你与几百万跟你一样正在使用 Jappix 的用户联系。自由地加入社群吧!"
-
-msgid "Hi there!"
-msgstr "你好!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr "登录已有的 Jappix 账号或免费建立新账号!"
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr "当你登陆或者注册,确保你密码的保密性。不要把它给与他人,它是私人的。"
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr "登录你已有的 Jappix 账号。你也可以使用 %s 加入聊天群。"
-
-msgid "Previous"
-msgstr "上一页"
-
-msgid "General"
-msgstr "通用"
-
-msgid "Advanced"
-msgstr "高级"
-
-msgid "Resource"
-msgstr "资源"
-
-msgid "Priority"
-msgstr "优先权"
-
-msgid "Low"
-msgstr "低"
-
-msgid "Medium"
-msgstr "中"
-
-msgid "High"
-msgstr "高"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr "输入你想加入的群与想用的昵称。你也可以回到 %s。"
-
-msgid "login page"
-msgstr "登录页面"
-
-msgid "Share this link with your friends:"
-msgstr "与好友分享此链接:"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr "注册一个新的 Jappix 账号以便在你自己的社交云端上加入你的好友。很简单!"
-
-msgid "Required"
-msgstr "必须的"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "你已经注册了,这是你的 XMPP 地址:"
-
-msgid "Manager"
-msgstr "管理员"
-
-msgid "Encrypted"
-msgstr "加密"
-
-msgid "Unencrypted"
-msgstr "未加密"
-
-msgid "Where are you?"
-msgstr "你在哪里?"
-
-msgid "What's up with you?"
-msgstr "你怎么了?"
-
-msgid "Type something you want to share with your friends..."
-msgstr "写一些你希望与你朋友们分享的内容…"
-
-msgid "Fetching the social channel..."
-msgstr "取得社交频道..."
-
-msgid "You are synchronized with your network."
-msgstr "你已与你的网络同步。"
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "无法发送任何东西:你只能接收通知!"
-
-msgid "Media viewer"
-msgstr "媒体浏览器"
-
-msgid "Browse"
-msgstr "浏览"
-
-msgid "Command"
-msgstr "命令"
-
-msgid "Subscribe"
-msgstr "订阅"
-
-msgid "Join"
-msgstr "加入"
-
-msgid "Automatic"
-msgstr "自动"
-
-msgid "Search"
-msgstr "搜索"
-
-msgid "No result!"
-msgstr "无结果!"
-
-msgid "No notifications."
-msgstr "无通知。"
-
-msgid "would like to add you as a friend."
-msgstr "想加你为好友。"
-
-msgid "would like you to join this chatroom:"
-msgstr "想加你到此聊天室:"
-
-msgid "Do you accept?"
-msgstr "你接受吗?"
-
-msgid "Yes"
-msgstr "是"
-
-msgid "No"
-msgstr "否"
-
-msgid "would like to get authorization."
-msgstr "想得到授权。"
-
-msgid "would like to send you a file: “%s”."
-msgstr "想向您发送一个文档: “%s。"
-
-msgid "has received a file exchange request: “%s”."
-msgstr "已接收文档交换的要求:“%s”。"
-
-msgid "has accepted to receive your file: “%s”."
-msgstr "已接受接收你发送的文档:“%s”。"
-
-msgid "has rejected to receive your file: “%s”."
-msgstr "已拒绝接收你发送的文档:“%s”。"
-
-msgid "could not receive your file: “%s”."
-msgstr "无法接收你发送的文件:“%s”。"
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr "你要看好友 %s 建议你?"
-
-msgid "commented an item you follow: “%s”."
-msgstr "评论一个你关注的项目: “%s”."
-
-msgid "liked your post: “%s”."
-msgstr "喜欢你的帖子:“%s”。"
-
-msgid "quoted you somewhere: “%s”."
-msgstr "在某处引用你:“%s”。"
-
-msgid "published on your wall: “%s”."
-msgstr "在你的留言板上发表了:“%s”。"
-
-msgid "tagged you in a photo (%s)."
-msgstr "在一张照片中圈了你(%s)。"
-
-msgid "tagged you in a video (%s)."
-msgstr " 在一个视频中圈了你(%s)。"
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-
-msgid "Open"
-msgstr ""
-
-msgid "Show"
-msgstr "表演"
-
-msgid "Hide"
-msgstr "隐藏"
-
-msgid "Submit"
-msgstr "提交"
-
-msgid "Client"
-msgstr "客户端"
-
-msgid "System"
-msgstr "系统"
-
-msgid "Local time"
-msgstr "本地时间"
-
-msgid "Comments"
-msgstr "评论"
-
-msgid "User profile"
-msgstr "用户信息"
-
-msgid "See his/her position on the globe"
-msgstr "看他/ 她在地球上的位置"
-
-msgid "Confirm"
-msgstr "确认"
-
-msgid "anonymous mode"
-msgstr "匿名模式"
-
-msgid "Groups"
-msgstr "群组"
-
-msgid "Unclassified"
-msgstr "未分类"
-
-msgid "Authorize"
-msgstr "授权"
-
-msgid "Ask for authorization"
-msgstr "要求授权"
-
-msgid "Unblock"
-msgstr "解除锁定"
-
-msgid "Prohibit"
-msgstr "禁止"
-
-msgid "Block"
-msgstr "阻挡"
-
-msgid "Chat"
-msgstr "聊天"
-
-msgid "Groupchat"
-msgstr "聊天群"
-
-msgid "Jappix Mobile"
-msgstr "Jappix 移动"
-
-msgid "Desktop"
-msgstr "桌面"
-
-msgid "Mobile"
-msgstr "移动"
-
-msgid "Please wait..."
-msgstr "请稍待..."
-
-msgid "Please enable JavaScript"
-msgstr "请启用 JavaScript"
-
-msgid "Show comments"
-msgstr "显示评论"
-
-msgid "Loading comments..."
-msgstr "载入评论..."
-
-msgid "Could not get the comments!"
-msgstr "无法取得评论!"
-
-msgid "Comments locked!"
-msgstr "评论锁定"
-
-msgid "Type your comment here..."
-msgstr "在此输入你的评论..."
-
-msgid "Your channel"
-msgstr "你的频道"
-
-msgid "Channel of"
-msgstr "频道: "
-
-msgid "More notices..."
-msgstr "更多通知..."
-
-msgid "Attach a file"
-msgstr "附加文档"
-
-msgid "Send"
-msgstr "发送"
-
-msgid "Unattach the file"
-msgstr "取消附加文档"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr "当上传你的文档时发生错误:也许它太大(最大 %s)或被禁止!"
-
-msgid "Authorization failed"
-msgstr "授权失败"
-
-msgid "Registration failed, please choose a different username"
-msgstr "注册失败,请挑选另一个用户名称"
-
-msgid "Service unavailable"
-msgstr "找不到服务器"
-
-msgid "Internal server error, try later"
-msgstr "内部服务器错误,稍后再试"
-
-msgid "Your form has been sent."
-msgstr "你的表格已被送出。"
-
-msgid "Application"
-msgstr "应用程序"
-
-msgid "Media integration"
-msgstr "媒体整合"
-
-msgid "Keep local chat archives"
-msgstr ""
-
-msgid "XMPP links"
-msgstr "XMPP 链接"
-
-msgid "Open XMPP links with Jappix"
-msgstr "用 Jappix 开启 XMPP 链接"
-
-msgid "changed the subject to:"
-msgstr "变更主题为:"
-
-msgid "Welcome!"
-msgstr "欢迎!"
-
-msgid "Friends"
-msgstr "好友"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr ""
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr "在你开始使用它之前,你必须变更一些设置,搜索朋友并完成你的个人信息。"
-
-msgid "Enable notification sounds"
-msgstr "启用通知音效"
-
-msgid "Share your position on the globe"
-msgstr "分享你在地球上的位置"
-
-msgid "Offline friends"
-msgstr "脱机好友"
-
-msgid "Don't hide offline friends"
-msgstr "不要隐藏脱机好友"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr "使用此工具在你正在使用的服务器上找到你的朋友,或稍后加入他们。"
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr "做的好!现在,你可以与你的朋友们分享Jappix"
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr "当你点击保存键,个人资料编辑器将会被打开,快乐的社交吧!"
-
-msgid "Share Jappix on %s"
-msgstr "在 %s 上分享 Jappix"
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "使用 Jappix,一个开放社交平台。我是 %s!"
-
-msgid "Unknown name"
-msgstr "陌生的名字"
-
-msgid "Unknown country"
-msgstr "不知名的国家"
-
-msgid "Click to enable"
-msgstr "点一下以启用"
-
-msgid "Click to disable"
-msgstr "点一下以停用"
-
-msgid "Installation"
-msgstr "安装"
-
-msgid "Jappix installation"
-msgstr "Jappix 安装"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "欢迎来到 Jappix 安装!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-"此工具将帮你快速地安装 Jappix,第一个以 XMPP 为基础的全功能的社交平台。你甚至"
-"不需要任何技术知识。"
-
-msgid "Installation Steps:"
-msgstr "让我们看一下安装步骤:"
-
-msgid "Welcome"
-msgstr "欢迎"
-
-msgid "Storage configuration"
-msgstr "保存空间设置"
-
-msgid "Administrator account"
-msgstr "管理员账号"
-
-msgid "Main configuration"
-msgstr "主要设置"
-
-msgid "Hosts configuration"
-msgstr "主机设置"
-
-msgid "Services installation"
-msgstr "服务安装"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr "如果目前的语言与你的(%1s)不符,你可以让 Jappix 说 %2s 它将被保存。"
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"如果你想得到一些有关Jappix的安装和配置的帮助,你可以使用我们的所有可用的文件"
-"编制。"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr "是时候该去创建你自己的社交圈:只要进入下一步"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr "文件夹可写入,你可以继续!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-" Jappix 向你提供管理你的配置的可能,安装新的插件或者搜寻更新。这就是为什么必"
-"须建立管理员账户从而访问管理人员的原因。"
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr "当 Jappix 安装完成后,只要点一下首页上的管理员链接就可以进入。"
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr "糟糕,你漏了某些东西或两个密码不一致!"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-"Jappix 需要你指定某些价值标准才能开始工作。请改正下列输入(或保留默认值,对大"
-"多数人来说是足够的)。"
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr "请注意,如果你不指定一个强制性的值,它将自动被默认值完成。"
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr "需要帮助?你最好阅读我们的文档页中有关如何填写这个表格的内容!"
-
-msgid "User"
-msgstr "用户"
-
-msgid "Service"
-msgstr "服务"
-
-msgid "Service name"
-msgstr "服务名称"
-
-msgid "Service description"
-msgstr "服务说明"
-
-msgid "Owner name"
-msgstr "用户名字"
-
-msgid "Owner website"
-msgstr "所有者网站"
-
-msgid "Connection"
-msgstr "联机"
-
-msgid "Lock the host"
-msgstr "锁定主机"
-
-msgid "Anonymous mode"
-msgstr "匿名模式"
-
-msgid "HTTP authentication"
-msgstr "HTTP身份验证"
-
-msgid "Registration allowed"
-msgstr "允许注册"
-
-msgid "Use the built-in BOSH proxy"
-msgstr ""
-
-msgid "Manager link"
-msgstr "管理员连结"
-
-msgid "Groupchats to join"
-msgstr "参与小组聊天"
-
-msgid "Suggest groupchats"
-msgstr ""
-
-msgid "Encryption"
-msgstr "加密"
-
-msgid "HTTPS storage"
-msgstr "HTTPS 保存空间"
-
-msgid "Force HTTPS"
-msgstr "强制使用 HTTPS"
-
-msgid "Compression"
-msgstr "压缩"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"这一页帮助你指定Jappix将会链接的默认主机。如果你希望使用官方服务主机,你可以"
-"保留它现状和继续。"
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"或许你不知道BOSH服务器是什么?事实上,这是一个在Jappix客户和XMPP服务器之间的"
-"驿站,因为技术上的限制从而它是必须的。"
-
-msgid "Main host"
-msgstr "重要主机"
-
-msgid "Groupchat host"
-msgstr "群组聊天主机"
-
-msgid "Pubsub host"
-msgstr "Pubsub主机"
-
-msgid "Anonymous host"
-msgstr "匿名主机"
-
-msgid "Directory host"
-msgstr "目录主机"
-
-msgid "BOSH host"
-msgstr "BOSH 主机"
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-"你可以在你的服务器上安装一些额外的软件,从而拓展你的Mensinx功能。其他的可以被"
-"修改,因为设置为默认的安全限制。"
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-"为了执行这个,你必须可以访问你的主机的外壳,并且作为根登录。记住这是兼容的,"
-"Jappix会在没有模版的情况下工作,但是其部分功能会不可用。"
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-"在你完成设置后,Jappix 将产生一些缓存文件。它也许会费时,只能等到应用程序显示"
-"且不要按任何按钮。"
-
-msgid "Thanks for using Jappix!"
-msgstr "感谢使用 Jappix!"
-
-msgid "Next"
-msgstr "下一页"
-
-msgid "Finish"
-msgstr "完成"
-
-msgid "Check again"
-msgstr "再检查"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr "文件夹不可写入,设置正确权限至 %s 目录。"
-
-msgid "%s is installed on your system."
-msgstr "%s 已经安装在你的系统。"
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s 未安装在你的系统,你需要安装 %2s。"
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "PHP 最大上传已足够(%s)。"
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr "PHP 最大上传不足够(%1s),你必须定义它为 %2s 在 %3s 中。"
-
-msgid "Jappix manager"
-msgstr "Jappix 管理员"
-
-msgid "Manager access"
-msgstr "管理员入口"
-
-msgid "Statistics"
-msgstr "统计"
-
-msgid "Hosts"
-msgstr "主机"
-
-msgid "Design"
-msgstr "设计"
-
-msgid "Repeat"
-msgstr "重复"
-
-msgid "All"
-msgstr "全部"
-
-msgid "Horizontal"
-msgstr "同一水平"
-
-msgid "Vertical"
-msgstr "垂直"
-
-msgid "Center"
-msgstr "中心"
-
-msgid "Left"
-msgstr "左"
-
-msgid "Right"
-msgstr "右"
-
-msgid "Top"
-msgstr "上"
-
-msgid "Bottom"
-msgstr "下"
-
-msgid "Adapt"
-msgstr "适应"
-
-msgid "Color"
-msgstr "色彩"
-
-msgid "Users"
-msgstr "用户"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr "这是限制区域:只有得到授权的用户可以管理此 Jappix 节点。"
-
-msgid "Please use the form below to login to the administration panel."
-msgstr "请使用下面的窗体登录管理面板。"
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr "为了改善安全性,会话时间会被限制,当你的浏览器关闭时,你会被退出。"
-
-msgid "Credentials"
-msgstr "认证信息"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "你已退出系统。再见!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr "糟糕,你无法被认为是有效的管理员。检查你的认证信息!"
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr "基本统计是由 Jappix 处理关于一些重要事物,你可以在下面找到它们。"
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr "利用此工具改变 Jappix 节点设置。"
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-"所有此 Jappix 节点保存的文档可利用此工具管理:请选取子文件夹且开始编辑它的内"
-"容!"
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr "Jappix 可完全自定义:你可以在这边变更它的设计。"
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr "这不是有效的影像,请使用 PNG、GIF 或 JPG!"
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr "这不是一个有效的图像,请使用PNG格式!"
-
-msgid "The image could not be received, would you mind retry?"
-msgstr "影像无法被收到,你介意重试吗?"
-
-msgid "Your service logo has been successfully changed!"
-msgstr "服务标志已经成功更改!"
-
-msgid "Your image was added to the list!"
-msgstr "你的影像已被加入到列表!"
-
-msgid "Changes saved!"
-msgstr "变更已被保存!"
-
-msgid "Logo"
-msgstr "标志"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-"你可以设置你自己的服务标志去替代默认的。注意每一个标志的尺寸和主要颜色!"
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr "上传每一个标志,其尺寸在建议的最大像素尺寸内。"
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr "你的标志格式必须是PNG格式。在该段落留空,标志将不改变。"
-
-msgid "Remove this logo"
-msgstr "移除这个标志"
-
-msgid "View this logo"
-msgstr "查看这个标志"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr "你可以为此 Jappix 节点定义多位管理员。你也可以利用此工具变更密码。"
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-"利用此工具更新你的 Jappix 节点,或检查是否有新的可用的Jappix 节点。也会显示关"
-"于最新版本的信息。"
-
-msgid "Access statistics"
-msgstr "存取统计"
-
-msgid "Share statistics"
-msgstr "分享统计"
-
-msgid "Other statistics"
-msgstr "其他统计"
-
-msgid "January"
-msgstr "1月"
-
-msgid "February"
-msgstr "2月"
-
-msgid "March"
-msgstr "3月"
-
-msgid "April"
-msgstr "4月"
-
-msgid "May"
-msgstr "5月"
-
-msgid "June"
-msgstr "6月"
-
-msgid "July"
-msgstr "7月"
-
-msgid "August"
-msgstr "8月"
-
-msgid "September"
-msgstr "9月"
-
-msgid "October"
-msgstr "10月"
-
-msgid "November"
-msgstr "11月"
-
-msgid "December"
-msgstr "12月"
-
-msgid "Monday"
-msgstr "星期一"
-
-msgid "Tuesday"
-msgstr "星期二"
-
-msgid "Wednesday"
-msgstr "星期三"
-
-msgid "Thursday"
-msgstr "星期四"
-
-msgid "Friday"
-msgstr "星期五"
-
-msgid "Saturday"
-msgstr "星期六"
-
-msgid "Sunday"
-msgstr "星期日"
-
-msgid "Total"
-msgstr "合计"
-
-msgid "Archives"
-msgstr ""
-
-msgid "Music"
-msgstr "音乐"
-
-msgid "Backgrounds"
-msgstr "背景"
-
-msgid "Share"
-msgstr "分享"
-
-msgid "Background"
-msgstr "背景"
-
-msgid "Notice"
-msgstr "通知"
-
-msgid "Your design preferences have been saved!"
-msgstr "你的设计偏好已被保存!"
-
-msgid "Please check your inputs: something is missing!"
-msgstr "请检查你的输入:漏了某些东西!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-"利用此工具变更你的 Jappix 节点背景。你可以设置自定义色彩或上传的影像。释放出"
-"你的创造力!"
-
-msgid "Use default background"
-msgstr "使用预设的背景"
-
-msgid "Use your own image"
-msgstr "使用你自己的头像"
-
-msgid "Select a background to use and change the display options."
-msgstr "选取要使用的背景并变更显示选项。"
-
-msgid "Use your own color"
-msgstr "使用你自己的颜色"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr "输入你要用来当作背景的 16 进位色彩值。"
-
-msgid "Manage backgrounds"
-msgstr "管理背景"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr "你可以用这个工具向清单增添一个新的背景。请传送一个有效的图像。"
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr "如果你想清除一些背景,使用下面的浏览器。"
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-"用这个工具为你所有的用户定义一个网页通知,比如一个警告,一个重要消息或者一个"
-"广告。"
-
-msgid "Simple notice"
-msgstr "简单通知"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr "这个通知只需要显示简单的文本,但不允许代码。"
-
-msgid "Advanced notice"
-msgstr "高级通知"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-"你可以通过嵌入式的HTML, CSS 和 JavaScript自定义你的通知,但是你需要编码风格。"
-
-msgid "Available updates"
-msgstr "可用的更新"
-
-msgid "What's new?"
-msgstr "有什么新鲜的?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr "你的保存空间文件夹无法写入,请申请正确权限!"
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr "%1可能对于代理造成问题,请增加%2s的值到%3s!"
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr "你正在使用开发版本的 Jappix。请通过执行:%s从我们的存放区更新它。"
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr "有新版本的 Jappix 可用!检查有什么新的并启动更新!"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr "你的版本已经过时。在此点一下以便立刻更新!"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr "你的版本似乎是最新的,但是你可以在此点一下以便手动检查更新。"
-
-msgid "Check for updates"
-msgstr "检查更新"
-
-msgid "Update in progress"
-msgstr "更新正在进行"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr "Jappix 已更新:你现在使用的是最新版本。祝你玩得愉快!"
-
-msgid "The update has failed! Please try again later."
-msgstr "更新失败!请稍后重试。"
-
-msgid "Downloading package..."
-msgstr "正在下载套件..."
-
-msgid "Removing current Jappix system files..."
-msgstr "删除目前的 Jappix 系统文档..."
-
-msgid "Extracting package..."
-msgstr "正在提取套件..."
-
-msgid "Regenerating storage folder tree..."
-msgstr "重新产生保存空间树形目录..."
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix 现在是最新版!"
-
-msgid "Aborted: socket error!"
-msgstr "中止:socket 错误!"
-
-msgid "Aborted: buffer error!"
-msgstr "中止:缓冲器错误!"
-
-msgid "Aborted: everything is not writable!"
-msgstr "中止:全部都无法写入!"
-
-msgid "Aborted: could not extract the package!"
-msgstr "中止:无法提取套件!"
-
-msgid "Visits"
-msgstr "访问"
-
-msgid "Daily"
-msgstr "日"
-
-msgid "Weekly"
-msgstr "周"
-
-msgid "Monthly"
-msgstr "月"
-
-msgid "Yearly"
-msgstr "年"
-
-msgid "Size"
-msgstr "大小"
-
-msgid "Clean everything"
-msgstr "全部清除"
-
-msgid "Purge cache"
-msgstr "清除存储器"
-
-msgid "Purge logs"
-msgstr "清除日志"
-
-msgid "Purge sent files"
-msgstr "废止发送文档"
-
-msgid "Purge updates"
-msgstr "清除更新"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "你要清除的保存空间文件夹是空的!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr "保持你的 Jappix 节点清新与快速,定期清除保存空间文件夹!"
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr "上传你的音乐(Ogg Vorbis、MP3 或 WAV)以便可以在 Jappix 聆听!"
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr "你要上传的文档必须小于 %s。"
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr "敬请关注你的用户在服务器上的存储,并且用移除不想要的内容。"
-
-msgid "Title"
-msgstr "标题"
-
-msgid "Artist"
-msgstr "艺术家"
-
-msgid "Album"
-msgstr "专辑"
-
-msgid "File"
-msgstr "文档"
-
-msgid "Upload"
-msgstr "上传"
-
-msgid "The folder is empty."
-msgstr "文件夹是空的。"
-
-msgid "The music could not be received, please retry!"
-msgstr "音乐无法被收到,请重试!"
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr "这不是有效的音乐文档,请用 Ogg Vorbis、MP3 或 WAV 编码!"
-
-msgid "Your music has been added!"
-msgstr "你的音乐已被加入!"
-
-msgid "The selected elements have been removed."
-msgstr "选取的元素已被删除。"
-
-msgid "You must select elements to remove!"
-msgstr "你必须选取要删除的元素!"
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-"利用此工具加入新的用户,或变更密码(输入已存在的用户名称)。请输入安全的密"
-"码!"
-
-msgid "Manage"
-msgstr "管理"
-
-msgid "List"
-msgstr "清单"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-
-msgid "The user has been added!"
-msgstr "用户已被加入!"
-
-msgid "The chosen users have been removed."
-msgstr "选取的用户已经被删除。"
-
-msgid "You must select one or more users to be removed!"
-msgstr "你必须选取一或多位用户以便删除!"
-
-msgid "Yesterday"
-msgstr "昨日"
-
-msgid "%s days ago"
-msgstr "%s 日前"
-
-msgid "User currently active"
-msgstr "用户目前活跃中"
-
-msgid "Last seen: %s"
-msgstr "上次见到:%s"
-
-msgid "Inactive since: %s"
-msgstr "不活动自:%s"
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr "你的好友似乎没收到你的消息!"
-
-msgid "Static content server"
-msgstr "静态内容服务器"
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr "这是 %1s,%2s用的静态内容服务器,“”。"
-
-msgid "User uploads server"
-msgstr "用户上传主机"
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr "这个是%1s,“%2s”的用户上传主机"
-
-msgid "Suggested friends"
-msgstr "建议的好友"
-
-msgid "Check all"
-msgstr "全选"
-
-msgid "Uncheck all"
-msgstr "取消全选"
-
-msgid "Choose"
-msgstr "选取"
-
-msgid "List name"
-msgstr "清单名称"
-
-msgid "Allow"
-msgstr "允许"
-
-msgid "Deny"
-msgstr "拒绝"
-
-msgid "Group"
-msgstr "群组"
-
-msgid "Subscription"
-msgstr "订阅"
-
-msgid "Both"
-msgstr "两者"
-
-msgid "From"
-msgstr "来自"
-
-msgid "Everybody"
-msgstr "每一位"
-
-msgid "Send messages"
-msgstr "发送消息"
-
-msgid "Send queries"
-msgstr "发送查询"
-
-msgid "See my status"
-msgstr "看我的状态"
-
-msgid "Send his/her status"
-msgstr "发送他/她的状态"
-
-msgid "Everything"
-msgstr "所有的"
-
-msgid "Item"
-msgstr "项目"
-
-msgid "Order"
-msgstr "命令"
-
-msgid "Active for this session"
-msgstr "启动这个会话"
-
-msgid "Always active"
-msgstr "经常活跃"
-
-msgid "User directory"
-msgstr "用户目录"
-
-msgid "Search a friend"
-msgstr "搜索好友"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr "接受者或者服务器未能实现这个要求的功能,因此而不能被处理。"
-
-msgid "Send him/her a message"
-msgstr "发送消息给他/她"
-
-msgid "Start a chat with him/her"
-msgstr "开始与他聊天"
-
-msgid "Available shortcuts:"
-msgstr "可用的快捷方式:"
-
-msgid "%s removes the chat logs"
-msgstr "%s 移除那个聊天会话"
-
-msgid "%s joins a groupchat"
-msgstr "%s 参与一个小组聊天"
-
-msgid "%s closes the chat"
-msgstr "%s 关闭聊天"
-
-msgid "%s shows the user profile"
-msgstr "%s 显示用户数据"
-
-msgid "%s sends a message to the room"
-msgstr "%s 发送一个消息给这个房间"
-
-msgid "%s changes your nickname"
-msgstr "%s 更改你的昵称"
-
-msgid "%s sends a message to someone in the room"
-msgstr "%s 给聊天室中的某人发送消息"
-
-msgid "%s changes the room topic"
-msgstr "%s 更改聊天室主题"
-
-msgid "%s kicks a user of the room"
-msgstr ""
-
-msgid "%s bans a user of the room"
-msgstr ""
-
-msgid "%s invites someone to join the room"
-msgstr "%s 邀请某人加入该聊天室"
-
-msgid "Public profile"
-msgstr "公开资料"
-
-msgid "Your profile anywhere on the Web."
-msgstr "你的公开资料在网站上的任何地方"
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-" %s 是一个Jappix.com 的服务,它令你的XMPP数据公开。这将更容易的将它分享。XMPP"
-"帐户不要求查阅你的社交频道,目前职位和联系人详情。"
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-"另外,每一张你在社交频道张贴的照片被添加在美丽的照片时间表中。你现在可以按照"
-"年份浏览你分享的照片。"
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-
-msgid "Yay, let's create your public profile!"
-msgstr ""
-
-msgid "Enable my public profile"
-msgstr "启用我的公共资料"
-
-msgid "Jappix for your phone"
-msgstr "你手机的Jappix"
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr "对于信息,频道,个人资料还有其他的单一手机应用"
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr "此通知只是告知性的,可能连接它的数据已被移除。"
-
-msgid "You haven't provided any file to download"
-msgstr "还没有提供任何文件供下载"
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr "如果你不提供密码是不能下载此文件的。"
-
-msgid "Woah this file isn't found, please double check"
-msgstr "此文件未找到,请重新查找"
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr "你提供的密码没有权限下载这个文件。"
-
-msgid "Statistics are currently disabled in the settings."
-msgstr "设置中统计资料目前不能使用。"
-
-msgid "New event!"
-msgstr ""
-
-msgid "%s is typing..."
-msgstr ""
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-
-msgid "Username"
-msgstr ""
-
-msgid "Enter password"
-msgstr ""
-
-msgid "Once again..."
-msgstr ""
-
-msgid "Code"
-msgstr ""
-
-msgid "Security code"
-msgstr ""
-
-msgid "Advertising space available!"
-msgstr ""
-
-msgid "Advertise here"
-msgstr ""
-
-msgid "Analytics (%s)"
-msgstr ""
-
-msgid "Track visits"
-msgstr ""
-
-msgid "Piwik URL"
-msgstr ""
-
-msgid "Piwik tracking ID"
-msgstr ""
-
-msgid "Advertising (%s)"
-msgstr ""
-
-msgid "Enable ads"
-msgstr ""
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "Content ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "Mute"
-msgstr ""
-
-msgid "Unmute"
-msgstr ""
-
-msgid "Is calling you"
-msgstr ""
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr ""
-
-msgid "Waiting..."
-msgstr ""
-
-msgid "Ringing..."
-msgstr ""
-
-msgid "Declined the call"
-msgstr ""
-
-msgid "Call error"
-msgstr ""
-
-msgid "Ended the call"
-msgstr ""
-
-msgid "Call ended"
-msgstr ""
-
-msgid "Call canceled"
-msgstr ""
-
-msgid "Canceled the call"
-msgstr ""
-
-msgid "Is already in a call"
-msgstr ""
-
-msgid "Ending call..."
-msgstr ""
-
-msgid "Accept"
-msgstr ""
-
-msgid "Decline"
-msgstr ""
-
-msgid "Okay"
-msgstr ""
-
-msgid "Retry"
-msgstr ""
-
-msgid "Audio Call"
-msgstr ""
-
-msgid "Video Call"
-msgstr ""
diff --git a/i18n/zh-tw/LC_MESSAGES/main.mo b/i18n/zh-tw/LC_MESSAGES/main.mo
deleted file mode 100644
index 544d8651..00000000
--- a/i18n/zh-tw/LC_MESSAGES/main.mo
+++ /dev/null
Binary files differ
diff --git a/i18n/zh-tw/LC_MESSAGES/main.po b/i18n/zh-tw/LC_MESSAGES/main.po
deleted file mode 100644
index 447302de..00000000
--- a/i18n/zh-tw/LC_MESSAGES/main.po
+++ /dev/null
@@ -1,2298 +0,0 @@
-# Jappix - An open social platform
-# These are the default english strings of Jappix
-# -------------------------------------------------
-# License: AGPL
-# Authors: Valérian Saliou, JanCBorchardt
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: Jappix\n"
-"PO-Revision-Date: 2014-05-08 10:21+0100\n"
-"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
-"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/jappix/"
-"language/zh_TW/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: zh_TW\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"POT-Creation-Date: \n"
-"X-Generator: Poedit 1.6.5\n"
-
-msgid "default:LTR"
-msgstr "default:LTR"
-
-msgid ""
-"JavaScript is missing in your web browser, so that you will not be able to "
-"launch Jappix! Please fix this."
-msgstr "網頁流覽器找不到 JavaScript,無法啟動 Jappix!請修正。"
-
-msgid "Social channel, chat and more."
-msgstr "社交頻道,聊天以及更多。"
-
-msgid "Create your public profile."
-msgstr "創建公開資料"
-
-msgid "A mini-chat for your website."
-msgstr "網站上的迷你聊天"
-
-msgid "Get Jappix, get support."
-msgstr "使用Jappix,得到支持"
-
-msgid "Statistics around Jappix."
-msgstr "圍繞Jappix的統計資料。"
-
-msgid "Legal disclaimer for Jappix."
-msgstr "對於Jappix的合法的免責聲明"
-
-msgid "Download Jappix for free."
-msgstr "免費下載Jappix "
-
-msgid "Contribute to the Jappix code."
-msgstr "有助於Jappix代碼"
-
-msgid "Jappix for your company."
-msgstr "你公司的Jappix"
-
-msgid "Find a public Jappix node."
-msgstr "找到一個公開的Jappix網點。 "
-
-msgid "Credits"
-msgstr "信用"
-
-msgid "Association"
-msgstr "聯合"
-
-msgid "Web agency"
-msgstr "網路代理"
-
-msgid "Legal"
-msgstr "合法的"
-
-msgid "Legal disclaimer"
-msgstr "合法的免責聲明"
-
-msgid "Terms of use and legal"
-msgstr "使用條款和合法的"
-
-msgid "Owner"
-msgstr "所有者"
-
-msgid "Node owner"
-msgstr "網店所有者"
-
-msgid "By using our service, you accept %s."
-msgstr "通過使用我們的服務,你接受%s."
-
-msgid "our terms of use"
-msgstr "使用條款"
-
-msgid ""
-"Jappix has been interrupted by a network issue, a bug or bad login (check "
-"that you entered the right credentials), sorry for the inconvenience."
-msgstr ""
-"Jappix 已因網路問題、bug 或錯誤登錄(檢查你輸入了正確的認證資訊)而被中斷,造"
-"成不便表示抱歉。"
-
-msgid "The element list on this server could not be obtained!"
-msgstr "伺服器的元素清單無法獲得!"
-
-msgid ""
-"Your password has been changed, now you can connect to your account with "
-"your new login data."
-msgstr "密碼已被更改,現在可以用新的登錄資料連接帳號。"
-
-msgid "Your XMPP account has been removed, bye!"
-msgstr " Jappix 帳號已被刪除,再見!"
-
-msgid "You have been logged out of your XMPP account, have a nice day!"
-msgstr "已經退出 Jappix 帳號,祝你今天愉快!"
-
-msgid "The room you tried to join doesn't seem to exist."
-msgstr "你加入的聊天室似乎不存在。你應該創建一個新的!"
-
-msgid "The groupchat has been removed."
-msgstr "該群已被刪除,現在其他人將可以重建一個。"
-
-msgid "The user that you want to reach is not present in the room."
-msgstr "你想聯繫的用戶不在聊天室內。"
-
-msgid "Please enter the group chat address to join."
-msgstr "請輸入要加入的群位址。"
-
-msgid "Please enter your nickname to join %s."
-msgstr "請輸入要加入 %s 用的昵稱。"
-
-msgid "This room (%s) is protected with a password."
-msgstr "此聊天室(%s)有密碼保護。"
-
-msgid "Your browser is out of date!"
-msgstr "你的流覽器已過時!"
-
-msgid "Last %s version is better!"
-msgstr "推薦使用最新版本 %s!"
-
-msgid "Login"
-msgstr "登錄"
-
-msgid "Register"
-msgstr "註冊"
-
-msgid "Here we go!"
-msgstr "開始!"
-
-msgid "Server"
-msgstr "伺服器"
-
-msgid "Password"
-msgstr "密碼"
-
-msgid "Remember me"
-msgstr "記住我"
-
-msgid "This tool has been disabled!"
-msgstr "此工具已被停用,你不能使用它!"
-
-msgid ""
-"Due to a network issue, you were disconnected. What do you want to do now?"
-msgstr "因為網路問題,你已被斷線。你現在想做什麼?"
-
-msgid "Reconnect"
-msgstr "重新連線"
-
-msgid "Messages"
-msgstr "消息"
-
-msgid "Profile"
-msgstr "個人資料"
-
-msgid "Options"
-msgstr "選項"
-
-msgid "Disconnect"
-msgstr "斷線"
-
-msgid "Filter"
-msgstr "過濾"
-
-msgid "Add a friend"
-msgstr "添加好友"
-
-msgid "Your groupchats"
-msgstr "你的群"
-
-msgid "Manage your favorite groupchats"
-msgstr "管理你最喜愛的群"
-
-msgid "More stuff"
-msgstr "更多材料"
-
-msgid "Show all friends"
-msgstr "顯示所有好友"
-
-msgid "Only show connected friends"
-msgstr "只顯示已連線的好友"
-
-msgid "Groupchat presence messages"
-msgstr ""
-
-msgid "No chat images auto-load"
-msgstr ""
-
-msgid "Message archives"
-msgstr "消息存檔"
-
-msgid "Date"
-msgstr "日期"
-
-msgid "A short message?"
-msgstr "短消息?"
-
-msgid "How are you?"
-msgstr "你好嗎?"
-
-msgid "What are you doing?"
-msgstr "你在做什麼?"
-
-msgid "Join a chat"
-msgstr "加入聊天"
-
-msgid "Status"
-msgstr "狀態"
-
-msgid "Available"
-msgstr "有空"
-
-msgid "Talkative"
-msgstr "健談"
-
-msgid "Away"
-msgstr "離開"
-
-msgid "Not available"
-msgstr "沒空"
-
-msgid "Busy"
-msgstr "忙碌"
-
-msgid "Offline"
-msgstr "離線"
-
-msgid "Mood"
-msgstr "心情"
-
-msgid "None"
-msgstr "無"
-
-msgid "Crazy"
-msgstr "瘋狂"
-
-msgid "Excited"
-msgstr "興奮"
-
-msgid "Playful"
-msgstr "好玩"
-
-msgid "Happy"
-msgstr "快樂"
-
-msgid "Shocked"
-msgstr "震驚"
-
-msgid "Hot"
-msgstr "激動"
-
-msgid "Sad"
-msgstr "悲傷"
-
-msgid "Amorous"
-msgstr "愛慕"
-
-msgid "Confident"
-msgstr "自信"
-
-msgid "Activity"
-msgstr "活動"
-
-msgid "Chores"
-msgstr "雜事"
-
-msgid "Drinking"
-msgstr "喝"
-
-msgid "Eating"
-msgstr "吃"
-
-msgid "Exercising"
-msgstr "運動"
-
-msgid "Grooming"
-msgstr "推薦"
-
-msgid "Appointment"
-msgstr "預約"
-
-msgid "Inactive"
-msgstr "無效"
-
-msgid "Relaxing"
-msgstr "放鬆"
-
-msgid "Talking"
-msgstr "對話"
-
-msgid "Traveling"
-msgstr "旅行"
-
-msgid "Working"
-msgstr "工作"
-
-msgid "View profile"
-msgstr "查看個人資料"
-
-msgid "This is a repeat from %s"
-msgstr "這是對%s的重複"
-
-msgid "Repeat this notice"
-msgstr "重複此通知"
-
-msgid "Remove this notice"
-msgstr "刪除此通知"
-
-msgid "Your profile"
-msgstr "你的個人資料"
-
-msgid "Identity"
-msgstr "身份證明"
-
-msgid "Profile image"
-msgstr "頭像"
-
-msgid "Others"
-msgstr "其他"
-
-msgid "Other"
-msgstr ""
-
-msgid "Personal"
-msgstr "個人"
-
-msgid "Complete name"
-msgstr "全名"
-
-msgid "Nickname"
-msgstr "昵稱"
-
-msgid "First name"
-msgstr "名"
-
-msgid "Last name"
-msgstr "姓"
-
-msgid "Date of birth"
-msgstr "生日"
-
-msgid "Contact"
-msgstr "連絡人"
-
-msgid "E-mail"
-msgstr "電子郵件"
-
-msgid "Phone"
-msgstr "電話"
-
-msgid "Website"
-msgstr "網站"
-
-msgid "Current"
-msgstr "目前"
-
-msgid "Delete"
-msgstr "刪除"
-
-msgid "What a pity! You have no profile image defined in your identity card!"
-msgstr "可惜!你沒有在身份證上設置頭像!"
-
-msgid "Address"
-msgstr "地址"
-
-msgid "Street"
-msgstr "街"
-
-msgid "City"
-msgstr "市"
-
-msgid "Postal code"
-msgstr "郵遞區號"
-
-msgid "Country"
-msgstr "國家"
-
-msgid "Biography"
-msgstr "自傳"
-
-msgid "Important notice"
-msgstr "重要通知"
-
-msgid ""
-"Be careful with the information you store into your profile, because it "
-"might be accessible by everyone (even someone you don't want to)."
-msgstr ""
-
-msgid ""
-"Not everything is private on XMPP; this is one of those things, your public "
-"profile (vCard)."
-msgstr "在 XMPP 上不是所有東西是私有的;其中你的個人資料就是公開的(vCard)。"
-
-msgid ""
-"It is strongly recommended to upload a profile image (%s maximum), like a "
-"picture of yourself, because that makes you easily recognizable by your "
-"friends."
-msgstr ""
-"強烈建議上傳大頭照(最大 %s),類似你的相片,因為那會使你的朋友更容易認得你。"
-
-msgid "Save"
-msgstr "保存"
-
-msgid "Cancel"
-msgstr "取消"
-
-msgid "Edit options"
-msgstr "編輯選項"
-
-msgid "Channel"
-msgstr "頻道"
-
-msgid "Commands"
-msgstr "指令"
-
-msgid "Sounds"
-msgstr "聲音"
-
-msgid "Privacy"
-msgstr "隱私"
-
-msgid "Message archiving"
-msgstr "消息存檔"
-
-msgid "Store an history of your chats"
-msgstr ""
-
-msgid "Geolocation"
-msgstr "地理位置"
-
-msgid "Disabled"
-msgstr ""
-
-msgid "Store all chats"
-msgstr ""
-
-msgid "Store friend chats"
-msgstr ""
-
-msgid "Remove all archives"
-msgstr ""
-
-msgid "Empty"
-msgstr "空白"
-
-msgid "Empty channel"
-msgstr "無意義的頻道"
-
-msgid "Persistent"
-msgstr "持續"
-
-msgid "Maximum notices"
-msgstr "最大量的通知"
-
-msgid "Account"
-msgstr "帳號"
-
-msgid "Change password"
-msgstr "變更密碼"
-
-msgid "Delete account"
-msgstr "刪除帳號"
-
-msgid "Old"
-msgstr "舊"
-
-msgid "New (2 times)"
-msgstr "新(2 次)"
-
-msgid "Suggested chatrooms"
-msgstr ""
-
-msgid "Skip"
-msgstr ""
-
-msgid "Continue"
-msgstr "繼續"
-
-msgid "To"
-msgstr "到"
-
-msgid "Close"
-msgstr "關閉"
-
-msgid "unknown"
-msgstr "陌生的"
-
-msgid "Unavailable"
-msgstr "無法使用"
-
-msgid "is now"
-msgstr "現在是"
-
-msgid "Please wait while your avatar is uploaded..."
-msgstr "請稍待,頭像 正被載入..."
-
-msgid "Here it is! A new beautiful profile image!"
-msgstr "這裡!美麗的新頭像!"
-
-msgid "The image file is not supported or has a bad size."
-msgstr "影像檔不被支援或尺寸大小錯誤。"
-
-msgid "Reply"
-msgstr "回復"
-
-msgid "Error"
-msgstr "錯誤"
-
-msgid "Click here to solve the error"
-msgstr "在這點一下以解決錯誤"
-
-msgid "You"
-msgstr "你"
-
-msgid "Remove"
-msgstr "刪除"
-
-msgid "Rename"
-msgstr "重命名"
-
-msgid "Hi, I am %s, I would like to add you as my friend."
-msgstr "嗨,我是 %s,我想加你為好友。"
-
-msgid "Smiley insertion"
-msgstr "插入微笑符號"
-
-msgid "Change style"
-msgstr "改變風格"
-
-msgid "Text in bold"
-msgstr "粗體字"
-
-msgid "Text in italic"
-msgstr "斜體字"
-
-msgid "Underlined text"
-msgstr "底線字"
-
-msgid "Send a file"
-msgstr "發送一個文檔"
-
-msgid ""
-"Once uploaded, your friend will be prompted to download the file you sent."
-msgstr "一旦上傳,你的朋友會被提示下載你發送的文檔"
-
-msgid "Save chat"
-msgstr "保存聊天"
-
-msgid ""
-"Click on the following link to get the chat log, and wait. Then click again "
-"to get the file."
-msgstr "點擊下面連結以獲取聊天記錄,且稍待。然後再點一下獲取檔案。"
-
-msgid "This chat is empty!"
-msgstr "此聊天室是空的!"
-
-msgid "Generate file!"
-msgstr "產生文檔!"
-
-msgid "Download file!"
-msgstr "下載檔案!"
-
-msgid "Clean current chat"
-msgstr "清除目前的聊天"
-
-msgid "Show user profile"
-msgstr "顯示使用者個人資料"
-
-msgid "Add this contact to your friends"
-msgstr "加入此連絡人到你的好友"
-
-msgid "Add this groupchat to your favorites"
-msgstr "加入此群至你的我的最愛"
-
-msgid "All tabs"
-msgstr "全部選項卡"
-
-msgid "Join groupchat"
-msgstr ""
-
-msgid "Close this tab"
-msgstr "關閉此選項卡"
-
-msgid "no subject defined for this room."
-msgstr "此房間未設置主題。"
-
-msgid "Administration panel for this room"
-msgstr "此聊天室的管理面板"
-
-msgid "Moderators"
-msgstr "版主"
-
-msgid "Participants"
-msgstr "參與者"
-
-msgid "Visitors"
-msgstr "訪客"
-
-msgid "Manage favorite rooms"
-msgstr "管理最喜歡的聊天室"
-
-msgid "Change favorites"
-msgstr "變更我的最愛"
-
-msgid "Search a room"
-msgstr "搜索聊天室"
-
-msgid "Select a favorite"
-msgstr "選取我的最愛"
-
-msgid "Getting the name..."
-msgstr "正在取得名稱..."
-
-msgid "Gateway"
-msgstr "閘道"
-
-msgid "Name"
-msgstr "名稱"
-
-msgid "Room"
-msgstr "聊天室"
-
-msgid "Add"
-msgstr "增加"
-
-msgid "Edit"
-msgstr "編輯"
-
-msgid "Search a room on"
-msgstr "搜索聊天室於"
-
-msgid "No room found on this server."
-msgstr "在此伺服器上找不到聊天室。"
-
-msgid "Service discovery"
-msgstr "服務搜索"
-
-msgid "Server to query"
-msgstr "查詢的伺服器"
-
-msgid "Sorry, but the entity didn't return any result!"
-msgstr "抱歉,實體未傳回任何結果!"
-
-msgid "Accounts"
-msgstr "帳號"
-
-msgid "Authentications"
-msgstr "身份驗證"
-
-msgid "Automation"
-msgstr "自動"
-
-msgid "Clients"
-msgstr "用戶端"
-
-msgid "Collaboration"
-msgstr "合作"
-
-msgid "Components"
-msgstr "成分"
-
-msgid "Rooms"
-msgstr "聊天室"
-
-msgid "Directories"
-msgstr "目錄"
-
-msgid "Gateways"
-msgstr "閘道"
-
-msgid "News"
-msgstr "新聞"
-
-msgid "Hierarchy"
-msgstr "等級制度"
-
-msgid "Proxies"
-msgstr "代理人"
-
-msgid "Publication/Subscription"
-msgstr "出版/訂閱"
-
-msgid "Storage"
-msgstr "存儲"
-
-msgid "Service offline or broken"
-msgstr "服務離線或故障"
-
-msgid "Your inbox"
-msgstr "你的收件箱"
-
-msgid "Available actions"
-msgstr "可操作行為"
-
-msgid "Clean"
-msgstr "清除"
-
-msgid "New"
-msgstr "新加"
-
-msgid "Received"
-msgstr "已接收"
-
-msgid "Subject"
-msgstr "主題"
-
-msgid "Content"
-msgstr "內容"
-
-msgid "Send message"
-msgstr "發送消息"
-
-msgid "Your inbox is empty."
-msgstr "你的收件箱是空的。"
-
-msgid "MUC administration"
-msgstr "MUC 管理"
-
-msgid "You administrate this room"
-msgstr "你管理此聊天室"
-
-msgid "Enter new subject"
-msgstr "輸入新的主題"
-
-msgid "Configuration"
-msgstr "設置"
-
-msgid "Authorizations"
-msgstr "授權"
-
-msgid "Member list"
-msgstr "會員清單"
-
-msgid "Owner list"
-msgstr "所有者清單"
-
-msgid "Administrator list"
-msgstr "管理員清單"
-
-msgid "Outcast list"
-msgstr "被驅逐者清單"
-
-msgid "Add an input"
-msgstr "增加輸入"
-
-msgid "Destroy this MUC"
-msgstr "銷毀此 MUC"
-
-msgid "Yes, let's do it!"
-msgstr "是,做吧!"
-
-msgid "Your friend is paying attention to the conversation."
-msgstr "你的好友正在專心會話。"
-
-msgid "Your friend is writing a message..."
-msgstr "你的好友正在寫消息..."
-
-msgid "Your friend stopped writing a message."
-msgstr "你的好友停止寫消息。"
-
-msgid "Your friend is doing something else."
-msgstr "你的好友正在做其他事。"
-
-msgid "Your friend closed the chat."
-msgstr "你的好友關閉了聊天。"
-
-msgid "Requesting this service..."
-msgstr "正在請求此服務..."
-
-msgid "Loading"
-msgstr "正在載入"
-
-msgid "changed his/her nickname to %s"
-msgstr "更改他/她的昵稱為%s"
-
-msgid "joined the chat room"
-msgstr "加入聊天室"
-
-msgid "left the chat room"
-msgstr "離開聊天室"
-
-msgid "%s left"
-msgstr ""
-
-msgid "%s joined"
-msgstr ""
-
-msgid "no status"
-msgstr "無狀態"
-
-msgid "has been kicked"
-msgstr "已被踢除"
-
-msgid "has been banned"
-msgstr "已被禁止"
-
-msgid "no reason"
-msgstr "無理由"
-
-msgid "Communicate with the entire world!"
-msgstr "與全世界溝通!"
-
-msgid ""
-"Jappix is an open social platform, that let's you easily get or keep in "
-"touch with everyone."
-msgstr ""
-"Jappix是一個強大的社交平臺,你可以在任何地點、任何時間訪問他,並且與任何你希"
-"望的人交流。"
-
-msgid ""
-"Join the millions of users who are currently using the XMPP Network (Google "
-"Talk, etc), don't stay out!"
-msgstr "它允許你與幾百萬跟你一樣正在使用 Jappix 的用戶聯繫。自由地加入社群吧!"
-
-msgid "Hi there!"
-msgstr "你好!"
-
-msgid "Welcome to %1s, “%2s”."
-msgstr ""
-
-msgid "Login to your existing XMPP account or create a new one for free!"
-msgstr "登錄已有的 Jappix 帳號或免費建立新帳號!"
-
-msgid ""
-"For your account safety, when you login or register, make sure your password "
-"remains secret."
-msgstr "當你登陸或者註冊,確保你密碼的保密性。不要把它給與他人,它是私人的。"
-
-msgid ""
-"Login to your existing XMPP account. You can also use the %s to join a "
-"groupchat."
-msgstr "登錄你已有的 Jappix 帳號。你也可以使用 %s 加入聊天群。"
-
-msgid "Previous"
-msgstr "上一頁"
-
-msgid "General"
-msgstr "通用"
-
-msgid "Advanced"
-msgstr "高級"
-
-msgid "Resource"
-msgstr "資源"
-
-msgid "Priority"
-msgstr "優先權"
-
-msgid "Low"
-msgstr "低"
-
-msgid "Medium"
-msgstr "中"
-
-msgid "High"
-msgstr "高"
-
-msgid ""
-"Enter the groupchat you want to join and the nick you want to have. You can "
-"also go back to the %s."
-msgstr "輸入你想加入的群與想用的昵稱。你也可以回到 %s。"
-
-msgid "login page"
-msgstr "登錄頁面"
-
-msgid "Share this link with your friends:"
-msgstr "與好友分享此連結:"
-
-msgid ""
-"Register a new XMPP account to join your friends on your own social cloud. "
-"That's simple!"
-msgstr "註冊一個新的 Jappix 帳號以便在你自己的社交雲端上加入你的好友。很簡單!"
-
-msgid "Required"
-msgstr "必須的"
-
-msgid "You have been registered, here is your XMPP address:"
-msgstr "你已經註冊了,這是你的 XMPP 地址:"
-
-msgid "Manager"
-msgstr "管理員"
-
-msgid "Encrypted"
-msgstr "加密"
-
-msgid "Unencrypted"
-msgstr "未加密"
-
-msgid "Where are you?"
-msgstr "你在哪裡?"
-
-msgid "What's up with you?"
-msgstr "你怎麼了?"
-
-msgid "Type something you want to share with your friends..."
-msgstr "寫一些你希望與你朋友們分享的內容…"
-
-msgid "Fetching the social channel..."
-msgstr "取得社交頻道..."
-
-msgid "You are synchronized with your network."
-msgstr "你已與你的網路同步。"
-
-msgid "Cannot send anything: you can only receive notices!"
-msgstr "無法發送任何東西:你只能接收通知!"
-
-msgid "Media viewer"
-msgstr "媒體流覽器"
-
-msgid "Browse"
-msgstr "流覽"
-
-msgid "Command"
-msgstr "命令"
-
-msgid "Subscribe"
-msgstr "訂閱"
-
-msgid "Join"
-msgstr "加入"
-
-msgid "Automatic"
-msgstr "自動"
-
-msgid "Search"
-msgstr "搜索"
-
-msgid "No result!"
-msgstr "無結果!"
-
-msgid "No notifications."
-msgstr "無通知。"
-
-msgid "would like to add you as a friend."
-msgstr "想加你為好友。"
-
-msgid "would like you to join this chatroom:"
-msgstr "想加你到此聊天室:"
-
-msgid "Do you accept?"
-msgstr "你接受嗎?"
-
-msgid "Yes"
-msgstr "是"
-
-msgid "No"
-msgstr "否"
-
-msgid "would like to get authorization."
-msgstr "想得到授權。"
-
-msgid "would like to send you a file: “%s”."
-msgstr "想向您發送一個文檔: “%s。"
-
-msgid "has received a file exchange request: “%s”."
-msgstr "已接收文檔交換的要求:“%s”。"
-
-msgid "has accepted to receive your file: “%s”."
-msgstr "已接受接收你發送的文檔:“%s”。"
-
-msgid "has rejected to receive your file: “%s”."
-msgstr "已拒絕接收你發送的文檔:“%s”。"
-
-msgid "could not receive your file: “%s”."
-msgstr "無法接收你發送的文件:“%s”。"
-
-msgid "Do you want to see the friends %s suggests you?"
-msgstr "你要看好友 %s 建議你?"
-
-msgid "commented an item you follow: “%s”."
-msgstr "評論一個你關注的項目: “%s”."
-
-msgid "liked your post: “%s”."
-msgstr "喜歡你的帖子:“%s”。"
-
-msgid "quoted you somewhere: “%s”."
-msgstr "在某處引用你:“%s”。"
-
-msgid "published on your wall: “%s”."
-msgstr "在你的留言板上發表了:“%s”。"
-
-msgid "tagged you in a photo (%s)."
-msgstr "在一張照片中圈了你(%s)。"
-
-msgid "tagged you in a video (%s)."
-msgstr " 在一個視頻中圈了你(%s)。"
-
-msgid ""
-"validated your account. Your public profile will be available in a few "
-"moments."
-msgstr ""
-
-msgid "has removed your public profile after your request. We will miss you!"
-msgstr ""
-
-msgid ""
-"has saved your new public profile settings. They will be applied in a few "
-"moments."
-msgstr ""
-
-msgid ""
-"could not validate your account to create or update your public profile. "
-"Check your credentials."
-msgstr ""
-
-msgid "Open"
-msgstr ""
-
-msgid "Show"
-msgstr "表演"
-
-msgid "Hide"
-msgstr "隱藏"
-
-msgid "Submit"
-msgstr "提交"
-
-msgid "Client"
-msgstr "用戶端"
-
-msgid "System"
-msgstr "系統"
-
-msgid "Local time"
-msgstr "本地時間"
-
-msgid "Comments"
-msgstr "評論"
-
-msgid "User profile"
-msgstr "使用者資訊"
-
-msgid "See his/her position on the globe"
-msgstr "看他/ 她在地球上的位置"
-
-msgid "Confirm"
-msgstr "確認"
-
-msgid "anonymous mode"
-msgstr "匿名模式"
-
-msgid "Groups"
-msgstr "群組"
-
-msgid "Unclassified"
-msgstr "未分類"
-
-msgid "Authorize"
-msgstr "授權"
-
-msgid "Ask for authorization"
-msgstr "要求授權"
-
-msgid "Unblock"
-msgstr "解除鎖定"
-
-msgid "Prohibit"
-msgstr "禁止"
-
-msgid "Block"
-msgstr "阻擋"
-
-msgid "Chat"
-msgstr "聊天"
-
-msgid "Groupchat"
-msgstr "聊天群"
-
-msgid "Jappix Mobile"
-msgstr "Jappix 移動"
-
-msgid "Desktop"
-msgstr "桌面"
-
-msgid "Mobile"
-msgstr "移動"
-
-msgid "Please wait..."
-msgstr "請稍待..."
-
-msgid "Please enable JavaScript"
-msgstr "請啟用 JavaScript"
-
-msgid "Show comments"
-msgstr "顯示評論"
-
-msgid "Loading comments..."
-msgstr "載入評論..."
-
-msgid "Could not get the comments!"
-msgstr "無法取得評論!"
-
-msgid "Comments locked!"
-msgstr "評論鎖定"
-
-msgid "Type your comment here..."
-msgstr "在此輸入你的評論..."
-
-msgid "Your channel"
-msgstr "你的頻道"
-
-msgid "Channel of"
-msgstr "頻道: "
-
-msgid "More notices..."
-msgstr "更多通知..."
-
-msgid "Attach a file"
-msgstr "附加文檔"
-
-msgid "Send"
-msgstr "發送"
-
-msgid "Unattach the file"
-msgstr "取消附加文檔"
-
-msgid ""
-"An error occured while uploading your file: maybe it is too big (%s maximum) "
-"or forbidden!"
-msgstr "當上傳你的文檔時發生錯誤:也許它太大(最大 %s)或被禁止!"
-
-msgid "Authorization failed"
-msgstr "授權失敗"
-
-msgid "Registration failed, please choose a different username"
-msgstr "註冊失敗,請挑選另一個用戶名稱"
-
-msgid "Service unavailable"
-msgstr "找不到伺服器"
-
-msgid "Internal server error, try later"
-msgstr "內部伺服器錯誤,稍後再試"
-
-msgid "Your form has been sent."
-msgstr "你的表格已被送出。"
-
-msgid "Application"
-msgstr "應用程式"
-
-msgid "Media integration"
-msgstr "媒體整合"
-
-msgid "Keep local chat archives"
-msgstr ""
-
-msgid "XMPP links"
-msgstr "XMPP 連結"
-
-msgid "Open XMPP links with Jappix"
-msgstr "用 Jappix 開啟 XMPP 連結"
-
-msgid "changed the subject to:"
-msgstr "變更主題為:"
-
-msgid "Welcome!"
-msgstr "歡迎!"
-
-msgid "Friends"
-msgstr "好友"
-
-msgid "Welcome to Jappix, your own social cloud!"
-msgstr ""
-
-msgid ""
-"Before you start using it, you will have to change some settings, search for "
-"friends and complete your profile."
-msgstr "在你開始使用它之前,你必須變更一些設置,搜索朋友並完成你的個人資訊。"
-
-msgid "Enable notification sounds"
-msgstr "啟用通知音效"
-
-msgid "Share your position on the globe"
-msgstr "分享你在地球上的位置"
-
-msgid "Offline friends"
-msgstr "離線好友"
-
-msgid "Don't hide offline friends"
-msgstr "不要隱藏離線好友"
-
-msgid ""
-"Use this tool to find your friends on the server you are using right now, or "
-"add them later."
-msgstr "使用此工具在你正在使用的伺服器上找到你的朋友,或稍後加入他們。"
-
-msgid "Good job! Now, you can share Jappix with your friends!"
-msgstr "做的好!現在,你可以與你的朋友們分享Jappix"
-
-msgid ""
-"When you will press the save button, the profile editor will be opened. "
-"Happy socializing!"
-msgstr "當你點擊保存鍵,個人資料編輯器將會被打開,快樂的社交吧!"
-
-msgid "Share Jappix on %s"
-msgstr "在 %s 上分享 Jappix"
-
-msgid "Follow Jappix topic on %s"
-msgstr ""
-
-msgid "Using Jappix, an open social platform. I am %s!"
-msgstr "使用 Jappix,一個開放社交平臺。我是 %s!"
-
-msgid "Unknown name"
-msgstr "陌生的名字"
-
-msgid "Unknown country"
-msgstr "不知名的國家"
-
-msgid "Click to enable"
-msgstr "點一下以啟用"
-
-msgid "Click to disable"
-msgstr "點一下以停用"
-
-msgid "Installation"
-msgstr "安裝"
-
-msgid "Jappix installation"
-msgstr "Jappix 安裝"
-
-msgid "Welcome to the Jappix installation!"
-msgstr "歡迎來到 Jappix 安裝!"
-
-msgid ""
-"This tool will help you installing Jappix, the first full-featured XMPP-"
-"based social platform, on your server with ease."
-msgstr ""
-"此工具將幫你快速地安裝 Jappix,第一個以 XMPP 為基礎的全功能的社交平臺。你甚至"
-"不需要任何技術知識。"
-
-msgid "Installation Steps:"
-msgstr "讓我們看一下安裝步驟:"
-
-msgid "Welcome"
-msgstr "歡迎"
-
-msgid "Storage configuration"
-msgstr "保存空間設置"
-
-msgid "Administrator account"
-msgstr "管理員帳號"
-
-msgid "Main configuration"
-msgstr "主要設置"
-
-msgid "Hosts configuration"
-msgstr "主機設置"
-
-msgid "Services installation"
-msgstr "服務安裝"
-
-msgid ""
-"If the current language does not match yours (%1s), you can make Jappix "
-"speak %2s it will be saved."
-msgstr "如果目前的語言與你的(%1s)不符,你可以讓 Jappix 說 %2s 它將被保存。"
-
-msgid ""
-"If you want to get some help about the Jappix installation and "
-"configuration, you can use our whole documentation, available at:"
-msgstr ""
-"如果你想得到一些有關Jappix的安裝和配置的説明,你可以使用我們的所有可用的檔編"
-"制。"
-
-msgid "It's time to build your own social cloud: just go to the next step!"
-msgstr "是時候該去創建你自己的社交圈:只要進入下一步"
-
-msgid ""
-"Jappix stores persistent data (such as shared files, chat logs, your own "
-"music and its configuration) into multiple storage folders."
-msgstr ""
-
-msgid ""
-"Jappix must be able to write in this folder to create its sub-directories. "
-"If not, you must set the rights of %1s to %2s or change the folder owner to "
-"%3s (depending of your configuration)."
-msgstr ""
-
-msgid "The folder is writable, you can continue!"
-msgstr "資料夾可寫入,你可以繼續!"
-
-msgid ""
-"Jappix offers you the possibility to manage your configuration, install new "
-"plugins or search for updates. That's why you must create an administrator "
-"account to access the manager."
-msgstr ""
-" Jappix 向你提供管理你的配置的可能,安裝新的外掛程式或者搜尋更新。這就是為什"
-"麼必須建立管理員帳戶從而訪問管理人員的原因。"
-
-msgid ""
-"When Jappix will be installed, just click on the manager link on the home "
-"page to access it."
-msgstr "當 Jappix 安裝完成後,只要點一下首頁上的管理員連結就可以進入。"
-
-msgid "Oops, you missed something or the two passwords do not match!"
-msgstr "糟糕,你漏了某些東西或兩個密碼不一致!"
-
-msgid ""
-"Jappix needs that you specify some values to work. Please correct the "
-"following inputs (or keep the default values, which are sufficient for most "
-"people)."
-msgstr ""
-"Jappix 需要你指定某些價值標準才能開始工作。請改正下列輸入(或保留預設值,對大"
-"多數人來說是足夠的)。"
-
-msgid ""
-"Note that if you don't specify a value which is compulsory, it will be "
-"automatically completed with the default one."
-msgstr "請注意,如果你不指定一個強制性的值,它將自動被預設值完成。"
-
-msgid ""
-"Need help? You'd better read our documentation page about how to fill this "
-"form!"
-msgstr "需要幫助?你最好閱讀我們的文檔頁中有關如何填寫這個表格的內容!"
-
-msgid "User"
-msgstr "用戶"
-
-msgid "Service"
-msgstr "服務"
-
-msgid "Service name"
-msgstr "服務名稱"
-
-msgid "Service description"
-msgstr "服務說明"
-
-msgid "Owner name"
-msgstr "用戶名字"
-
-msgid "Owner website"
-msgstr "所有者網站"
-
-msgid "Connection"
-msgstr "連線"
-
-msgid "Lock the host"
-msgstr "鎖定主機"
-
-msgid "Anonymous mode"
-msgstr "匿名模式"
-
-msgid "HTTP authentication"
-msgstr "HTTP身份驗證"
-
-msgid "Registration allowed"
-msgstr "允許註冊"
-
-msgid "Use the built-in BOSH proxy"
-msgstr ""
-
-msgid "Manager link"
-msgstr "管理員連結"
-
-msgid "Groupchats to join"
-msgstr "參與小組聊天"
-
-msgid "Suggest groupchats"
-msgstr ""
-
-msgid "Encryption"
-msgstr "加密"
-
-msgid "HTTPS storage"
-msgstr "HTTPS 保存空間"
-
-msgid "Force HTTPS"
-msgstr "強制使用 HTTPS"
-
-msgid "Compression"
-msgstr "壓縮"
-
-msgid "Cache assets"
-msgstr ""
-
-msgid ""
-"This page helps you specify the default hosts Jappix will connect to. You "
-"can leave it as it is and continue if you want to use the official service "
-"hosts."
-msgstr ""
-"這一頁幫助你指定Jappix將會連結的預設主機。如果你希望使用官方服務主機,你可以"
-"保留它現狀和繼續。"
-
-msgid ""
-"Maybe you don't know what a BOSH server is? In fact, this is a relay between "
-"a Jappix client and a XMPP server, which is necessary because of technical "
-"limitations."
-msgstr ""
-"或許你不知道BOSH伺服器是什麼?事實上,這是一個在Jappix客戶和XMPP伺服器之間的"
-"驛站,因為技術上的限制從而它是必須的。"
-
-msgid "Main host"
-msgstr "重要主機"
-
-msgid "Groupchat host"
-msgstr "群組聊天主機"
-
-msgid "Pubsub host"
-msgstr "Pubsub主機"
-
-msgid "Anonymous host"
-msgstr "匿名主機"
-
-msgid "Directory host"
-msgstr "目錄主機"
-
-msgid "BOSH host"
-msgstr "BOSH 主機"
-
-msgid "WebSocket host"
-msgstr ""
-
-msgid ""
-"You can install some extra softwares on your server, to extend your Jappix "
-"features. Some others might be modified, because of security restrictions "
-"which are set by default."
-msgstr ""
-"你可以在你的伺服器上安裝一些額外的軟體,從而拓展你的Mensinx功能。其他的可以被"
-"修改,因為設置為默認的安全限制。"
-
-msgid ""
-"To perform this, you must be able to access your server's shell and be "
-"logged in as root. Remember this is facultative, Jappix will work without "
-"these modules, but some of its features will be unavailable."
-msgstr ""
-"為了執行這個,你必須可以訪問你的主機的外殼,並且作為根登錄。記住這是相容的,"
-"Jappix會在沒有模版的情況下工作,但是其部分功能會不可用。"
-
-msgid ""
-"After you finished the setup, Jappix will generate the cache files. It might "
-"be slow, just wait until the application is displayed and do not press any "
-"button."
-msgstr ""
-"在你完成設置後,Jappix 將產生一些快取檔案。它也許會費時,只能等到應用程式顯示"
-"且不要按任何按鈕。"
-
-msgid "Thanks for using Jappix!"
-msgstr "感謝使用 Jappix!"
-
-msgid "Next"
-msgstr "下一頁"
-
-msgid "Finish"
-msgstr "完成"
-
-msgid "Check again"
-msgstr "再檢查"
-
-msgid ""
-"The folder is not writable, set the right permissions to the %s directory."
-msgstr "資料夾不可寫入,設置正確許可權至 %s 目錄。"
-
-msgid "%s is installed on your system."
-msgstr "%s 已經安裝在你的系統。"
-
-msgid "%1s is not installed on your system, you should install %2s."
-msgstr "%1s 未安裝在你的系統,你需要安裝 %2s。"
-
-msgid "PHP maximum upload size is sufficient (%s)."
-msgstr "PHP 最大上傳已足夠(%s)。"
-
-msgid ""
-"PHP maximum upload size is not sufficient (%1s), you should define it to %2s "
-"in %3s."
-msgstr "PHP 最大上傳不足夠(%1s),你必須定義它為 %2s 在 %3s 中。"
-
-msgid "Jappix manager"
-msgstr "Jappix 管理員"
-
-msgid "Manager access"
-msgstr "管理員入口"
-
-msgid "Statistics"
-msgstr "統計"
-
-msgid "Hosts"
-msgstr "主機"
-
-msgid "Design"
-msgstr "設計"
-
-msgid "Repeat"
-msgstr "重複"
-
-msgid "All"
-msgstr "全部"
-
-msgid "Horizontal"
-msgstr "同一水準"
-
-msgid "Vertical"
-msgstr "垂直"
-
-msgid "Center"
-msgstr "中心"
-
-msgid "Left"
-msgstr "左"
-
-msgid "Right"
-msgstr "右"
-
-msgid "Top"
-msgstr "上"
-
-msgid "Bottom"
-msgstr "下"
-
-msgid "Adapt"
-msgstr "適應"
-
-msgid "Color"
-msgstr "色彩"
-
-msgid "Users"
-msgstr "用戶"
-
-msgid ""
-"This is a restricted area: only the authorized users can manage this Jappix "
-"node."
-msgstr "這是限制區域:只有得到授權的用戶可以管理此 Jappix 節點。"
-
-msgid "Please use the form below to login to the administration panel."
-msgstr "請使用下面的表單登錄管理面板。"
-
-msgid ""
-"To improve security, sessions are limited in time and when your browser will "
-"be closed, you will be logged out."
-msgstr "為了改善安全性,會話時間會被限制,當你的流覽器關閉時,你會被退出。"
-
-msgid "Credentials"
-msgstr "認證資訊"
-
-msgid "You have been logged out. Goodbye!"
-msgstr "你已退出系統。再見!"
-
-msgid ""
-"Oops, you could not be recognized as a valid administrator. Check your "
-"credentials!"
-msgstr "糟糕,你無法被認為是有效的管理員。檢查你的認證資訊!"
-
-msgid ""
-"Basic statistics are processed by Jappix about some important things, you "
-"can find them below."
-msgstr "基本統計是由 Jappix 處理關於一些重要事物,你可以在下面找到它們。"
-
-msgid "Change your Jappix node configuration with this tool."
-msgstr "利用此工具改變 Jappix 節點設置。"
-
-msgid "Change the XMPP hosts that this Jappix node serves with this tool."
-msgstr ""
-
-msgid ""
-"All this Jappix node stored files can be managed with this tool: please "
-"select a sub-folder and start editing its content!"
-msgstr ""
-"所有此 Jappix 節點保存的文檔可利用此工具管理:請選取子資料夾且開始編輯它的內"
-"容!"
-
-msgid "Jappix is fully customisable: you can change its design right here."
-msgstr "Jappix 可完全自訂:你可以在這邊變更它的設計。"
-
-msgid "This is not a valid image, please use PNG, GIF or JPG!"
-msgstr "這不是有效的影像,請使用 PNG、GIF 或 JPG!"
-
-msgid "This is not a valid image, please use the PNG format!"
-msgstr "這不是一個有效的圖像,請使用PNG格式!"
-
-msgid "The image could not be received, would you mind retry?"
-msgstr "影像無法被收到,你介意重試嗎?"
-
-msgid "Your service logo has been successfully changed!"
-msgstr "服務標章已經成功更改!"
-
-msgid "Your image was added to the list!"
-msgstr "你的影像已被加入到清單!"
-
-msgid "Changes saved!"
-msgstr "變更已被保存!"
-
-msgid "Logo"
-msgstr "標誌"
-
-msgid ""
-"You can set your own service logo to replace the default one. Take care of "
-"the size and the main color of each logo!"
-msgstr ""
-"你可以設置你自己的服務標章去替代默認的。注意每一個標誌的尺寸和主要顏色!"
-
-msgid "Upload each logo with the recommended maximum pixel size."
-msgstr "上傳每一個標誌,其尺寸在建議的最大圖元尺寸內。"
-
-msgid ""
-"Your logo format must be PNG. Leave a field empty and the logo will not be "
-"changed."
-msgstr "你的標誌格式必須是PNG格式。在該段落留空,標誌將不改變。"
-
-msgid "Remove this logo"
-msgstr "移除這個標誌"
-
-msgid "View this logo"
-msgstr "查看這個標誌"
-
-msgid ""
-"You can define more than one administrator for this Jappix node. You can "
-"also change a password with this tool."
-msgstr "你可以為此 Jappix 節點定義多位管理員。你也可以利用此工具變更密碼。"
-
-msgid ""
-"Update your Jappix node with this tool, or check if a new one is available. "
-"Informations about the latest version are also displayed (in english)."
-msgstr ""
-"利用此工具更新你的 Jappix 節點,或檢查是否有新的可用的Jappix 節點。也會顯示關"
-"於最新版本的資訊。"
-
-msgid "Access statistics"
-msgstr "存取統計"
-
-msgid "Share statistics"
-msgstr "分享統計"
-
-msgid "Other statistics"
-msgstr "其他統計"
-
-msgid "January"
-msgstr "1月"
-
-msgid "February"
-msgstr "2月"
-
-msgid "March"
-msgstr "3月"
-
-msgid "April"
-msgstr "4月"
-
-msgid "May"
-msgstr "5月"
-
-msgid "June"
-msgstr "6月"
-
-msgid "July"
-msgstr "7月"
-
-msgid "August"
-msgstr "8月"
-
-msgid "September"
-msgstr "9月"
-
-msgid "October"
-msgstr "10月"
-
-msgid "November"
-msgstr "11月"
-
-msgid "December"
-msgstr "12月"
-
-msgid "Monday"
-msgstr "星期一"
-
-msgid "Tuesday"
-msgstr "星期二"
-
-msgid "Wednesday"
-msgstr "星期三"
-
-msgid "Thursday"
-msgstr "星期四"
-
-msgid "Friday"
-msgstr "星期五"
-
-msgid "Saturday"
-msgstr "星期六"
-
-msgid "Sunday"
-msgstr "星期日"
-
-msgid "Total"
-msgstr "合計"
-
-msgid "Archives"
-msgstr ""
-
-msgid "Music"
-msgstr "音樂"
-
-msgid "Backgrounds"
-msgstr "背景"
-
-msgid "Share"
-msgstr "分享"
-
-msgid "Background"
-msgstr "背景"
-
-msgid "Notice"
-msgstr "通知"
-
-msgid "Your design preferences have been saved!"
-msgstr "你的設計偏好已被保存!"
-
-msgid "Please check your inputs: something is missing!"
-msgstr "請檢查你的輸入:漏了某些東西!"
-
-msgid ""
-"Change your Jappix node background with this tool. You can either set a "
-"custom color or an uploaded image. Let your creativity flow!"
-msgstr ""
-"利用此工具變更你的 Jappix 節點背景。你可以設置自訂色彩或上傳的影像。釋放出你"
-"的創造力!"
-
-msgid "Use default background"
-msgstr "使用預設的背景"
-
-msgid "Use your own image"
-msgstr "使用你自己的頭像"
-
-msgid "Select a background to use and change the display options."
-msgstr "選取要使用的背景並變更顯示選項。"
-
-msgid "Use your own color"
-msgstr "使用你自己的顏色"
-
-msgid "Type the hexadecimal color value you want to use as a background."
-msgstr "輸入你要用來當作背景的 16 進位色彩值。"
-
-msgid "Manage backgrounds"
-msgstr "管理背景"
-
-msgid ""
-"You can add a new background to the list with this tool. Please send a valid "
-"image."
-msgstr "你可以用這個工具向清單增添一個新的背景。請傳送一個有效的圖像。"
-
-msgid "If you want to remove some backgrounds, use the browser below."
-msgstr "如果你想清除一些背景,使用下面的流覽器。"
-
-msgid ""
-"Define a homepage notice for all your users, such as a warn, an important "
-"message or an advert with this tool."
-msgstr ""
-"用這個工具為你所有的用戶定義一個網頁通知,比如一個警告,一個重要消息或者一個"
-"廣告。"
-
-msgid "Simple notice"
-msgstr "簡單通知"
-
-msgid ""
-"This notice only needs simple text to be displayed, but no code is allowed!"
-msgstr "這個通知只需要顯示簡單的文本,但不允許代碼。"
-
-msgid "Advanced notice"
-msgstr "高級通知"
-
-msgid ""
-"You can customize your notice with embedded HTML, CSS and JavaScript, but "
-"you need to code the style."
-msgstr ""
-"你可以通過嵌入式的HTML, CSS 和 JavaScript自訂你的通知,但是你需要編碼風格。"
-
-msgid "Available updates"
-msgstr "可用的更新"
-
-msgid "What's new?"
-msgstr "有什麼新鮮的?"
-
-msgid "Your storage folders are not writable, please apply the good rights!"
-msgstr "你的保存空間資料夾無法寫入,請申請正確許可權!"
-
-msgid ""
-"%1s may cause problems to the proxy, please increase %2s value up to %3s!"
-msgstr "%1可能對於代理造成問題,請增加%2s的值到%3s!"
-
-msgid ""
-"You are using a development version of Jappix. Update it through our "
-"repository by executing: %s."
-msgstr "你正在使用開發版本的 Jappix。請通過執行:%s從我們的存放區更新它。"
-
-msgid ""
-"A new Jappix version is available! Check what is new and launch the update!"
-msgstr "有新版本的 Jappix 可用!檢查有什麼新的並啟動更新!"
-
-msgid "Your version is out to date. Update it now to %s by clicking here!"
-msgstr "你的版本已經過時。在此點一下以便立刻更新!"
-
-msgid ""
-"Your version seems to be up to date, but you can check updates manually by "
-"clicking here."
-msgstr "你的版本似乎是最新的,但是你可以在此點一下以便手動檢查更新。"
-
-msgid "Check for updates"
-msgstr "檢查更新"
-
-msgid "Update in progress"
-msgstr "更新正在進行"
-
-msgid ""
-"Jappix has been updated: you are now running the latest version. Have fun!"
-msgstr "Jappix 已更新:你現在使用的是最新版本。祝你玩得愉快!"
-
-msgid "The update has failed! Please try again later."
-msgstr "更新失敗!請稍後重試。"
-
-msgid "Downloading package..."
-msgstr "正在下載套件..."
-
-msgid "Removing current Jappix system files..."
-msgstr "刪除目前的 Jappix 系統文檔..."
-
-msgid "Extracting package..."
-msgstr "正在提取套件..."
-
-msgid "Regenerating storage folder tree..."
-msgstr "重新產生保存空間樹形目錄..."
-
-msgid "Jappix is now up to date!"
-msgstr "Jappix 現在是最新版!"
-
-msgid "Aborted: socket error!"
-msgstr "中止:socket 錯誤!"
-
-msgid "Aborted: buffer error!"
-msgstr "中止:緩衝器錯誤!"
-
-msgid "Aborted: everything is not writable!"
-msgstr "中止:全部都無法寫入!"
-
-msgid "Aborted: could not extract the package!"
-msgstr "中止:無法提取套件!"
-
-msgid "Visits"
-msgstr "訪問"
-
-msgid "Daily"
-msgstr "日"
-
-msgid "Weekly"
-msgstr "周"
-
-msgid "Monthly"
-msgstr "月"
-
-msgid "Yearly"
-msgstr "年"
-
-msgid "Size"
-msgstr "大小"
-
-msgid "Clean everything"
-msgstr "全部清除"
-
-msgid "Purge cache"
-msgstr "清除記憶體"
-
-msgid "Purge logs"
-msgstr "清除日誌"
-
-msgid "Purge sent files"
-msgstr "廢止發送文檔"
-
-msgid "Purge updates"
-msgstr "清除更新"
-
-msgid "The storage folder you wanted to clean is now empty!"
-msgstr "你要清除的保存空間資料夾是空的!"
-
-msgid ""
-"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
-msgstr "保持你的 Jappix 節點清新與快速,定期清除保存空間資料夾!"
-
-msgid ""
-"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
-"Jappix!"
-msgstr "上傳你的音樂(Ogg Vorbis、MP3 或 WAV)以便可以在 Jappix 聆聽!"
-
-msgid "The file you want to upload must be smaller than %s."
-msgstr "你要上傳的文檔必須小於 %s。"
-
-msgid ""
-"You can check what your users store on your server and remove undesired "
-"content with this tool."
-msgstr "敬請關注你的使用者在伺服器上的存儲,並且用移除不想要的內容。"
-
-msgid "Title"
-msgstr "標題"
-
-msgid "Artist"
-msgstr "藝術家"
-
-msgid "Album"
-msgstr "專輯"
-
-msgid "File"
-msgstr "文檔"
-
-msgid "Upload"
-msgstr "上傳"
-
-msgid "The folder is empty."
-msgstr "資料夾是空的。"
-
-msgid "The music could not be received, please retry!"
-msgstr "音樂無法被收到,請重試!"
-
-msgid ""
-"This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"
-msgstr "這不是有效的音樂文檔,請用 Ogg Vorbis、MP3 或 WAV 編碼!"
-
-msgid "Your music has been added!"
-msgstr "你的音樂已被加入!"
-
-msgid "The selected elements have been removed."
-msgstr "選取的元素已被刪除。"
-
-msgid "You must select elements to remove!"
-msgstr "你必須選取要刪除的元素!"
-
-msgid ""
-"Add a new user with this tool, or change a password (type an existing "
-"username). Please submit a strong password!"
-msgstr ""
-"利用此工具加入新的使用者,或變更密碼(輸入已存在的用戶名稱)。請輸入安全的密"
-"碼!"
-
-msgid "Manage"
-msgstr "管理"
-
-msgid "List"
-msgstr "清單"
-
-msgid ""
-"Remove users with this tool. Note that you cannot remove a user if he is the "
-"only one remaining."
-msgstr ""
-
-msgid "The user has been added!"
-msgstr "用戶已被加入!"
-
-msgid "The chosen users have been removed."
-msgstr "選取的用戶已經被刪除。"
-
-msgid "You must select one or more users to be removed!"
-msgstr "你必須選取一或多位用戶以便刪除!"
-
-msgid "Yesterday"
-msgstr "昨日"
-
-msgid "%s days ago"
-msgstr "%s 日前"
-
-msgid "User currently active"
-msgstr "用戶目前活躍中"
-
-msgid "Last seen: %s"
-msgstr "上次見到:%s"
-
-msgid "Inactive since: %s"
-msgstr "不活動自:%s"
-
-msgid "Your friend seems not to have received your message(s)!"
-msgstr "你的好友似乎沒收到你的消息!"
-
-msgid "Static content server"
-msgstr "靜態內容伺服器"
-
-msgid "This is the static content server for %1s, “%2s”."
-msgstr "這是 %1s,%2s用的靜態內容伺服器,“”。"
-
-msgid "User uploads server"
-msgstr "使用者上傳主機"
-
-msgid "This is the user uploads server for %1s, “%2s”."
-msgstr "這個是%1s,“%2s”的使用者上傳主機"
-
-msgid "Suggested friends"
-msgstr "建議的好友"
-
-msgid "Check all"
-msgstr "全選"
-
-msgid "Uncheck all"
-msgstr "取消全選"
-
-msgid "Choose"
-msgstr "選取"
-
-msgid "List name"
-msgstr "清單名稱"
-
-msgid "Allow"
-msgstr "允許"
-
-msgid "Deny"
-msgstr "拒絕"
-
-msgid "Group"
-msgstr "群組"
-
-msgid "Subscription"
-msgstr "訂閱"
-
-msgid "Both"
-msgstr "兩者"
-
-msgid "From"
-msgstr "來自"
-
-msgid "Everybody"
-msgstr "每一位"
-
-msgid "Send messages"
-msgstr "發送消息"
-
-msgid "Send queries"
-msgstr "發送查詢"
-
-msgid "See my status"
-msgstr "看我的狀態"
-
-msgid "Send his/her status"
-msgstr "發送他/她的狀態"
-
-msgid "Everything"
-msgstr "所有的"
-
-msgid "Item"
-msgstr "項目"
-
-msgid "Order"
-msgstr "命令"
-
-msgid "Active for this session"
-msgstr "啟動這個會話"
-
-msgid "Always active"
-msgstr "經常活躍"
-
-msgid "User directory"
-msgstr "使用者目錄"
-
-msgid "Search a friend"
-msgstr "搜索好友"
-
-msgid ""
-"The feature requested is not implemented by the recipient or server and "
-"therefore cannot be processed."
-msgstr "接受者或者伺服器未能實現這個要求的功能,因此而不能被處理。"
-
-msgid "Send him/her a message"
-msgstr "發送消息給他/她"
-
-msgid "Start a chat with him/her"
-msgstr "開始與他聊天"
-
-msgid "Available shortcuts:"
-msgstr "可用的快捷方式:"
-
-msgid "%s removes the chat logs"
-msgstr "%s 移除那個聊天會話"
-
-msgid "%s joins a groupchat"
-msgstr "%s 參與一個小組聊天"
-
-msgid "%s closes the chat"
-msgstr "%s 關閉聊天"
-
-msgid "%s shows the user profile"
-msgstr "%s 顯示使用者資料"
-
-msgid "%s sends a message to the room"
-msgstr "%s 發送一個消息給這個房間"
-
-msgid "%s changes your nickname"
-msgstr "%s 更改你的昵稱"
-
-msgid "%s sends a message to someone in the room"
-msgstr "%s 給聊天室中的某人發送消息"
-
-msgid "%s changes the room topic"
-msgstr "%s 更改聊天室主題"
-
-msgid "%s kicks a user of the room"
-msgstr ""
-
-msgid "%s bans a user of the room"
-msgstr ""
-
-msgid "%s invites someone to join the room"
-msgstr "%s 邀請某人加入該聊天室"
-
-msgid "Public profile"
-msgstr "公開資料"
-
-msgid "Your profile anywhere on the Web."
-msgstr "你的公開資料在網站上的任何地方"
-
-msgid ""
-"%s is a Jappix.com service which makes your XMPP profile public. It is "
-"easier to share it. No XMPP account is required to view your social channel, "
-"your current position and your contact details."
-msgstr ""
-" %s 是一個Jappix.com 的服務,它令你的XMPP資料公開。這將更容易的將它分享。XMPP"
-"帳戶不要求查閱你的社交頻道,目前職位和連絡人詳情。"
-
-msgid ""
-"Furthermore, every picture you post in your social channel is added to a "
-"beautiful picture timeline. You can now view the pictures you shared year by "
-"year."
-msgstr ""
-"另外,每一張你在社交頻道張貼的照片被添加在美麗的照片時間表中。你現在可以按照"
-"年份流覽你分享的照片。"
-
-msgid ""
-"You can also use your XMPP avatar as a single avatar for every website, blog "
-"and forum you use. When you change it on XMPP, the new avatar appears "
-"everywhere. What a genius improvement!"
-msgstr ""
-
-msgid "Yay, let's create your public profile!"
-msgstr ""
-
-msgid "Enable my public profile"
-msgstr "啟用我的公共資料"
-
-msgid "Jappix for your phone"
-msgstr "你手機的Jappix"
-
-msgid "A single phone app for messages, channels, profiles and much more!"
-msgstr "對於資訊,頻道,個人資料還有其他的單一手機應用"
-
-msgid ""
-"This notification is only informative, maybe the data it links to have been "
-"removed."
-msgstr "此通知只是告知性的,可能連接它的資料已被移除。"
-
-msgid "You haven't provided any file to download"
-msgstr "還沒有提供任何檔供下載"
-
-msgid "You cannot download a file if you don't provide a key"
-msgstr "如果你不提供密碼是不能下載此檔的。"
-
-msgid "Woah this file isn't found, please double check"
-msgstr "此檔未找到,請重新查找"
-
-msgid "The key you provided does not have the permission to download this file"
-msgstr "你提供的密碼沒有許可權下載這個檔。"
-
-msgid "Statistics are currently disabled in the settings."
-msgstr "設置中統計資料目前不能使用。"
-
-msgid "New event!"
-msgstr ""
-
-msgid "%s is typing..."
-msgstr ""
-
-msgid ""
-"The security code you entered is invalid. Please retry with another one."
-msgstr ""
-
-msgid "The username you picked is not available. Please try another one."
-msgstr ""
-
-msgid "There was an error registering your account. Please retry."
-msgstr ""
-
-msgid "Username"
-msgstr ""
-
-msgid "Enter password"
-msgstr ""
-
-msgid "Once again..."
-msgstr ""
-
-msgid "Code"
-msgstr ""
-
-msgid "Security code"
-msgstr ""
-
-msgid "Advertising space available!"
-msgstr ""
-
-msgid "Advertise here"
-msgstr ""
-
-msgid "Analytics (%s)"
-msgstr ""
-
-msgid "Track visits"
-msgstr ""
-
-msgid "Piwik URL"
-msgstr ""
-
-msgid "Piwik tracking ID"
-msgstr ""
-
-msgid "Advertising (%s)"
-msgstr ""
-
-msgid "Enable ads"
-msgstr ""
-
-msgid "Standard ads key"
-msgstr ""
-
-msgid "Content ads key"
-msgstr ""
-
-msgid "AdSense client ID"
-msgstr ""
-
-msgid "AdSense slot"
-msgstr ""
-
-msgid "Stop"
-msgstr ""
-
-msgid "Mute"
-msgstr ""
-
-msgid "Unmute"
-msgstr ""
-
-msgid "Is calling you"
-msgstr ""
-
-msgid "Initiating call"
-msgstr ""
-
-msgid "Connecting to call..."
-msgstr ""
-
-msgid "Waiting..."
-msgstr ""
-
-msgid "Ringing..."
-msgstr ""
-
-msgid "Declined the call"
-msgstr ""
-
-msgid "Call error"
-msgstr ""
-
-msgid "Ended the call"
-msgstr ""
-
-msgid "Call ended"
-msgstr ""
-
-msgid "Call canceled"
-msgstr ""
-
-msgid "Canceled the call"
-msgstr ""
-
-msgid "Is already in a call"
-msgstr ""
-
-msgid "Ending call..."
-msgstr ""
-
-msgid "Accept"
-msgstr ""
-
-msgid "Decline"
-msgstr ""
-
-msgid "Okay"
-msgstr ""
-
-msgid "Retry"
-msgstr ""
-
-msgid "Audio Call"
-msgstr ""
-
-msgid "Video Call"
-msgstr ""
diff --git a/images/logo.png b/images/logo.png
new file mode 100644
index 00000000..846efbb4
--- /dev/null
+++ b/images/logo.png
Binary files differ
diff --git a/index.php b/index.php
deleted file mode 100644
index fee59d19..00000000
--- a/index.php
+++ /dev/null
@@ -1,103 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the Jappix PHP application launcher
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// PHP base
-define('JAPPIX_BASE', '.');
-
-// Get the function files
-require_once('./server/functions.php');
-
-// Get the configuration
-require_once('./server/read-main.php');
-require_once('./server/read-hosts.php');
-
-// Get some extra-libs
-require_once('./server/gettext.php');
-
-// Prepare application
-enableErrorSink();
-hideErrors();
-compressThis();
-
-// Include the good language file
-$locale = checkLanguage();
-includeTranslation($locale, 'main');
-
-// Get the Jappix version & its hash
-$version = getVersion();
-$hash = genHash($version);
-
-// Include the good application file
-$include_app = 'desktop';
-
-// App to include?
-if(!isInstalled()) {
- // Not yet installed
- $include_app = 'install';
-} else if(anonymousMode()) {
- // Anonymous
- $include_app = 'desktop';
-} else if(isset($_GET['m']) && !empty($_GET['m'])) {
- // Not anonymous, any forced mode?
- $force_mode = $_GET['m'];
-
- // Switch between two Jappix apps
- if(($force_mode == 'desktop') || ($force_mode == 'mobile')) {
- // Write the cookie
- setcookie('jappix_mode', $force_mode, (time() + 31536000));
-
- // Define the app to include
- $include_app = $force_mode;
- } else if(($force_mode == 'manager') || ($force_mode == 'download')) {
- $include_app = $force_mode;
- }
-} else if(isset($_COOKIE['jappix_mode'])) {
- // Not forced, any cookie stored?
- if($_COOKIE['jappix_mode'] == 'mobile') {
- $include_app = 'mobile';
- }
-}
-
-// Special stuffs for Jappix apps?
-if(($include_app == 'desktop') || ($include_app == 'mobile')) {
- // Redirects the user to HTTPS if forced
- if(!useHttps() && httpsForce()) {
- // Apply some special headers
- header('Status: 301 Moved Permanently', true, 301);
- header('Location: https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
-
- // Kill the script!
- exit('HTTP/1.1 301 Moved Permanently');
- }
-
- // Is it a static node?
- if(isStatic()) {
- $include_app = 'static';
- }
-
- // Is it an upload node?
- if(isUpload()) {
- $include_app = 'upload';
- }
-
- // Save this visit (for the stats)
- if(hasStatistics()) {
- writeVisit();
- }
-}
-
-// Include it!
-include('./server/'.$include_app.'.php');
-
-?>
diff --git a/log/.htaccess b/log/.htaccess
deleted file mode 100644
index a6e0b168..00000000
--- a/log/.htaccess
+++ /dev/null
@@ -1,2 +0,0 @@
-# Security rule
-deny from all \ No newline at end of file
diff --git a/misc/certs/00673b5b.0 b/misc/certs/00673b5b.0
deleted file mode 100644
index 998460f1..00000000
--- a/misc/certs/00673b5b.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
-qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
-Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
-MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
-BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
-NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
-LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
-A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
-W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
-3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
-6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
-Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
-NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
-MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
-r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
-DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
-YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
-xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
-/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
-LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
-jVaMaA==
------END CERTIFICATE-----
diff --git a/misc/certs/024dc131.0 b/misc/certs/024dc131.0
deleted file mode 100644
index 01bb0be0..00000000
--- a/misc/certs/024dc131.0
+++ /dev/null
@@ -1,43 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAw
-cjELMAkGA1UEBhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNy
-b3NlYyBMdGQuMRQwEgYDVQQLEwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9z
-ZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0MDYxMjI4NDRaFw0xNzA0MDYxMjI4
-NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEWMBQGA1UEChMN
-TWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMTGU1p
-Y3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2u
-uO/TEdyB5s87lozWbxXGd36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+
-LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/NoqdNAoI/gqyFxuEPkEeZlApxcpMqyabA
-vjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjcQR/Ji3HWVBTji1R4P770
-Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJPqW+jqpx
-62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcB
-AQRbMFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3Aw
-LQYIKwYBBQUHMAKGIWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAP
-BgNVHRMBAf8EBTADAQH/MIIBcwYDVR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIB
-AQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3LmUtc3ppZ25vLmh1L1NaU1ov
-MIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0AdAB2AOEAbgB5
-ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
-AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABT
-AHoAbwBsAGcA4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABh
-ACAAcwB6AGUAcgBpAG4AdAAgAGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABo
-AHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMAegBpAGcAbgBvAC4AaAB1AC8AUwBa
-AFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6Ly93d3cuZS1zemln
-bm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NOPU1p
-Y3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxP
-PU1pY3Jvc2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZv
-Y2F0aW9uTGlzdDtiaW5hcnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuB
-EGluZm9AZS1zemlnbm8uaHWkdzB1MSMwIQYDVQQDDBpNaWNyb3NlYyBlLVN6aWdu
-w7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhTWjEWMBQGA1UEChMNTWlj
-cm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhVMIGsBgNV
-HSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJI
-VTERMA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDAS
-BgNVBAsTC2UtU3ppZ25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBS
-b290IENBghEAzLjnv04pGv2i3GalHCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS
-8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMTnGZjWS7KXHAM/IO8VbH0jgds
-ZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FEaGAHQzAxQmHl
-7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
-86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfR
-hUZLphK3dehKyVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/
-MPMMNz7UwiiAc7EBt51alhQBS6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
------END CERTIFICATE-----
diff --git a/misc/certs/02b73561.0 b/misc/certs/02b73561.0
deleted file mode 100644
index fe804a37..00000000
--- a/misc/certs/02b73561.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp
-ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow
-fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
-A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV
-BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM
-cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S
-HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996
-CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk
-3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz
-6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV
-HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
-EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv
-Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw
-Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww
-DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0
-5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
-Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI
-gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ
-aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl
-izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk=
------END CERTIFICATE-----
diff --git a/misc/certs/039c618a.0 b/misc/certs/039c618a.0
deleted file mode 100644
index 5205c777..00000000
--- a/misc/certs/039c618a.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xS
-S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg
-SGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcNMDUxMTA3MTAwNzU3
-WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVrdHJv
-bmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJU
-UjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSw
-bGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWe
-LiAoYykgS2FzxLFtIDIwMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqeLCDe2JAOCtFp0if7qnef
-J1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKIx+XlZEdh
-R3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJ
-Qv2gQrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGX
-JHpsmxcPbe9TmJEr5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1p
-zpwACPI2/z7woQ8arBT9pmAPAgMBAAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58S
-Fq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
-KoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/nttRbj2hWyfIvwq
-ECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
-Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFz
-gw2lGh1uEpJ+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotH
-uFEJjOp9zYhys2AzsfAKRO8P9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LS
-y3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5UrbnBEI=
------END CERTIFICATE-----
diff --git a/misc/certs/03f0efa4.0 b/misc/certs/03f0efa4.0
deleted file mode 100644
index 2ba88cdd..00000000
--- a/misc/certs/03f0efa4.0
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v
-dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0
-MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww
-KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G
-A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13
-5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE
-SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O
-JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu
-ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE
-AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB
-AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB
-CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw
-b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo
-7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/
-0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7
-nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
-x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ
-33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
------END CERTIFICATE-----
diff --git a/misc/certs/052e396b.0 b/misc/certs/052e396b.0
deleted file mode 100644
index ad3800d5..00000000
--- a/misc/certs/052e396b.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1
-MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK
-EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh
-BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq
-xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G
-87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i
-2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U
-WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1
-0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G
-A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T
-AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr
-pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL
-ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm
-aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv
-hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm
-hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
-dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3
-P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y
-iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no
-xqE=
------END CERTIFICATE-----
diff --git a/misc/certs/062cdee6.0 b/misc/certs/062cdee6.0
deleted file mode 100644
index 8afb2190..00000000
--- a/misc/certs/062cdee6.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G
-A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp
-Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4
-MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG
-A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8
-RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT
-gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm
-KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd
-QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ
-XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw
-DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o
-LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU
-RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp
-jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK
-6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX
-mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs
-Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH
-WD9f
------END CERTIFICATE-----
diff --git a/misc/certs/080911ac.0 b/misc/certs/080911ac.0
deleted file mode 100644
index ffa4dbe4..00000000
--- a/misc/certs/080911ac.0
+++ /dev/null
@@ -1,34 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC
-TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz
-MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw
-IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR
-dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp
-li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D
-rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ
-WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug
-F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU
-xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC
-Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv
-dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw
-ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl
-IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh
-c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy
-ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
-Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI
-KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T
-KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq
-y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p
-dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD
-VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL
-MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk
-fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8
-7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R
-cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y
-mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW
-xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK
-SnQ2+Q==
------END CERTIFICATE-----
diff --git a/misc/certs/0810ba98.0 b/misc/certs/0810ba98.0
deleted file mode 100644
index f001356e..00000000
--- a/misc/certs/0810ba98.0
+++ /dev/null
@@ -1,37 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJF
-UzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJ
-R1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcN
-MDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3WjBoMQswCQYDVQQGEwJFUzEfMB0G
-A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScw
-JQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+
-WmmmO3I2F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKj
-SgbwJ/BXufjpTjJ3Cj9BZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGl
-u6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQD0EbtFpKd71ng+CT516nDOeB0/RSrFOy
-A8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXteJajCq+TA81yc477OMUxk
-Hl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMBAAGjggM7
-MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBr
-aS5ndmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIIC
-IwYKKwYBBAG/VQIBADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8A
-cgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIA
-YQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIAYQBsAGkAdABhAHQAIABWAGEA
-bABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQByAGEAYwBpAPMA
-bgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
-aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMA
-aQBvAG4AYQBtAGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQA
-ZQAgAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEA
-YwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBuAHQAcgBhACAAZQBuACAAbABhACAA
-ZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAAOgAvAC8AdwB3AHcA
-LgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0dHA6
-Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+y
-eAT8MIGVBgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQsw
-CQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0G
-A1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVu
-Y2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRhTvW1yEICKrNcda3Fbcrn
-lD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdzCkj+IHLt
-b8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg
-9J63NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XF
-ducTZnV+ZfsBn5OHiJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmC
-IoaZM3Fa6hlXPZHNqcCjbgcTpsnt+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
------END CERTIFICATE-----
diff --git a/misc/certs/08aef7bb.0 b/misc/certs/08aef7bb.0
deleted file mode 100644
index 5a265ef0..00000000
--- a/misc/certs/08aef7bb.0
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMx
-IDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxs
-cyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9v
-dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcxMjEzMTcwNzU0WhcNMjIxMjE0
-MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdl
-bGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQD
-DC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+r
-WxxTkqxtnt3CxC5FlAM1iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjU
-Dk/41itMpBb570OYj7OeUt9tkTmPOL13i0Nj67eT/DBMHAGTthP796EfvyXhdDcs
-HqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8bJVhHlfXBIEyg1J55oNj
-z7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiBK0HmOFaf
-SZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/Slwxl
-AgMBAAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqG
-KGh0dHA6Ly9jcmwucGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0P
-AQH/BAQDAgHGMB0GA1UdDgQWBBQmlRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0j
-BIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGBi6SBiDCBhTELMAkGA1UEBhMC
-VVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNX
-ZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEB
-ALkVsUSRzCPIK0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd
-/ZDJPHV3V3p9+N701NX3leZ0bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pB
-A4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSljqHyita04pO2t/caaH/+Xc/77szWn
-k4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+esE2fDbbFwRnzVlhE9
-iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJtylv
-2G0xffX8oRAHh84vWdw+WNs=
------END CERTIFICATE-----
diff --git a/misc/certs/09789157.0 b/misc/certs/09789157.0
deleted file mode 100644
index f7519150..00000000
--- a/misc/certs/09789157.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
-HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs
-ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
-MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD
-VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy
-ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy
-dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p
-OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2
-8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K
-Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe
-hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk
-6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw
-DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q
-AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI
-bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB
-ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z
-qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
-iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn
-0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN
-sSi6
------END CERTIFICATE-----
diff --git a/misc/certs/0b759015.0 b/misc/certs/0b759015.0
deleted file mode 100644
index 4d9767dd..00000000
--- a/misc/certs/0b759015.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1
-MQswCQYDVQQGEwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxp
-Z2kgQS5TLjE8MDoGA1UEAxMzZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZp
-a2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3MDEwNDExMzI0OFoXDTE3MDEwNDEx
-MzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0cm9uaWsgQmlsZ2kg
-R3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9uaWsg
-U2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdU
-MZTe1RK6UxYC6lhj71vY8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlT
-L/jDj/6z/P2douNffb7tC+Bg62nsM+3YjfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H
-5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAIJjjcJRFHLfO6IxClv7wC
-90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk9Ok0oSy1
-c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/
-BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoE
-VtstxNulMA0GCSqGSIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLP
-qk/CaOv/gKlR6D1id4k9CnU58W5dF4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S
-/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwqD2fK/A+JYZ1lpTzlvBNbCNvj
-/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4Vwpm+Vganf2X
-KWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
-fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
------END CERTIFICATE-----
diff --git a/misc/certs/0c4c9b6c.0 b/misc/certs/0c4c9b6c.0
deleted file mode 100644
index 70b4ce41..00000000
--- a/misc/certs/0c4c9b6c.0
+++ /dev/null
@@ -1,41 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD
-VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0
-IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3
-MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
-aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx
-MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy
-cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG
-A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl
-BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI
-hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed
-KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7
-G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2
-zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4
-ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG
-HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2
-Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V
-yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e
-beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r
-6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
-wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog
-zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW
-BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr
-ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp
-ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk
-cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt
-YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC
-CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow
-KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI
-hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ
-UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz
-X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x
-fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz
-a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd
-Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd
-SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O
-AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso
-M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge
-v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
-09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
------END CERTIFICATE-----
diff --git a/misc/certs/0d188d89.0 b/misc/certs/0d188d89.0
deleted file mode 100644
index 4d9767dd..00000000
--- a/misc/certs/0d188d89.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1
-MQswCQYDVQQGEwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxp
-Z2kgQS5TLjE8MDoGA1UEAxMzZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZp
-a2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3MDEwNDExMzI0OFoXDTE3MDEwNDEx
-MzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0cm9uaWsgQmlsZ2kg
-R3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9uaWsg
-U2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdU
-MZTe1RK6UxYC6lhj71vY8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlT
-L/jDj/6z/P2douNffb7tC+Bg62nsM+3YjfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H
-5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAIJjjcJRFHLfO6IxClv7wC
-90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk9Ok0oSy1
-c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/
-BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoE
-VtstxNulMA0GCSqGSIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLP
-qk/CaOv/gKlR6D1id4k9CnU58W5dF4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S
-/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwqD2fK/A+JYZ1lpTzlvBNbCNvj
-/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4Vwpm+Vganf2X
-KWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
-fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
------END CERTIFICATE-----
diff --git a/misc/certs/0d1b923b.0 b/misc/certs/0d1b923b.0
deleted file mode 100644
index c0328d0c..00000000
--- a/misc/certs/0d1b923b.0
+++ /dev/null
@@ -1,26 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCB
-rjELMAkGA1UEBhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcp
-MRIwEAYDVQQHEwlTdHV0dGdhcnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fz
-c2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVTLVRSVVNUIEF1dGhlbnRpY2F0aW9u
-IGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0wNTA2MjIwMDAwMDBa
-Fw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFkZW4t
-V3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMg
-RGV1dHNjaGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJV
-U1QgQXV0aGVudGljYXRpb24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBO
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1
-toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob4QSwI7+Vio5bG0F/WsPo
-TUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXLg3KSwlOy
-ggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1
-XgqfeN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteF
-hy+S8dF2g08LOlk3KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm
-7QIDAQABo4GSMIGPMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEG
-MCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJvbmxpbmUxLTIwNDgtNTAdBgNV
-HQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAUD8oeXHngovMp
-ttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD
-pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFo
-LtU96G7m1R08P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersF
-iXOMy6ZNwPv2AtawB6MDwidAnwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0y
-h9WUUpY6RsZxlj33mA6ykaqP2vROJAA5VeitF7nTNCtKqUDMFypVZUF0Qn71wK/I
-k63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8bHz2eBIPdltkdOpQ=
------END CERTIFICATE-----
diff --git a/misc/certs/10531352.0 b/misc/certs/10531352.0
deleted file mode 100644
index f7519150..00000000
--- a/misc/certs/10531352.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
-HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs
-ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
-MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD
-VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy
-ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy
-dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p
-OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2
-8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K
-Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe
-hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk
-6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw
-DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q
-AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI
-bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB
-ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z
-qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
-iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn
-0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN
-sSi6
------END CERTIFICATE-----
diff --git a/misc/certs/111e6273.0 b/misc/certs/111e6273.0
deleted file mode 100644
index 6f0f8db0..00000000
--- a/misc/certs/111e6273.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
-A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
-Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
-MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
-A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
-v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
-eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
-tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
-C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
-zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
-mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
-V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
-bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
-3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
-J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
-291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
-ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
-AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
-TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
------END CERTIFICATE-----
diff --git a/misc/certs/1155c94b.0 b/misc/certs/1155c94b.0
deleted file mode 100644
index 74be4914..00000000
--- a/misc/certs/1155c94b.0
+++ /dev/null
@@ -1,26 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMx
-IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
-dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
-HhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTELMAkGA1UEBhMCRVMx
-IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
-dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5u
-Cp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5Vj1H5WuretXDE7aTt/6MNbg9kUDGvASdY
-rv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJHlShbz++AbOCQl4oBPB3z
-hxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf3H5idPay
-BQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcL
-iam8NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcb
-AgMBAAGjgZ8wgZwwKgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lv
-bmFsLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0
-MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E
-FgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQADggEBAEdz/o0n
-VPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
-u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36m
-hoEyIwOdyPdfwUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzfl
-ZKG+TQyTmAyX9odtsz/ny4Cm7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBp
-QWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YGVM+h4k0460tQtcsm9MracEpqoeJ5
-quGnM/b9Sh/22WA=
------END CERTIFICATE-----
diff --git a/misc/certs/116bf586.0 b/misc/certs/116bf586.0
deleted file mode 100644
index f9364c08..00000000
--- a/misc/certs/116bf586.0
+++ /dev/null
@@ -1,17 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL
-MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj
-KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2
-MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV
-BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw
-NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV
-BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
-MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL
-So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal
-tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
-BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG
-CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT
-qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz
-rD6ogRLQy7rQkgu2npaqBA+K
------END CERTIFICATE-----
diff --git a/misc/certs/119afc2e.0 b/misc/certs/119afc2e.0
deleted file mode 100644
index 269961b5..00000000
--- a/misc/certs/119afc2e.0
+++ /dev/null
@@ -1,29 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcN
-AQkBFglwa2lAc2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZp
-dHNlZXJpbWlza2Vza3VzMRAwDgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMw
-MVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMQsw
-CQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEQ
-MA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOB
-SvZiF3tfTQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkz
-ABpTpyHhOEvWgxutr2TC+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvH
-LCu3GFH+4Hv2qEivbDtPL+/40UceJlfwUR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMP
-PbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDaTpxt4brNj3pssAki14sL
-2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQFMAMBAf8w
-ggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwIC
-MIHDHoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDk
-AGwAagBhAHMAdABhAHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0
-AHMAZQBlAHIAaQBtAGkAcwBrAGUAcwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABz
-AGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABrAGkAbgBuAGkAdABhAG0AaQBz
-AGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nwcy8wKwYDVR0f
-BCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
-FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcY
-P2/v6X2+MA4GA1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOi
-CfP+JmeaUOTDBS8rNXiRTHyoERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+g
-kcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyLabVAyJRld/JXIWY7zoVAtjNjGr95
-HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678IIbsSt4beDI3poHS
-na9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkhMp6q
-qIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0Z
-TbvGRNs2yyqcjg==
------END CERTIFICATE-----
diff --git a/misc/certs/11a09b38.0 b/misc/certs/11a09b38.0
deleted file mode 100644
index e1cce316..00000000
--- a/misc/certs/11a09b38.0
+++ /dev/null
@@ -1,30 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJE
-SzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEw
-ODM5MzBaFw0zNzAyMTEwOTA5MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNU
-REMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuHnEz9pPPEXyG9VhDr
-2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0zY0s
-2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItU
-GBxIYXvViGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKj
-dGqPqcNiKXEx5TukYBdedObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+r
-TpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/
-BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB5DCB4TCB3gYIKoFQgSkB
-AQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5kay9yZXBv
-c2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRl
-ciBmcmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEu
-MS4xLiBDZXJ0aWZpY2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIg
-T0lEIDEuMi4yMDguMTY5LjEuMS4xLjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1Ud
-HwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEMMAoGA1UEChMDVERDMRQwEgYD
-VQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYmaHR0cDovL2Ny
-bC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
-MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZ
-J2cdUBVLc647+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqG
-SIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACrom
-JkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4A9G28kNBKWKnctj7fAXmMXAnVBhO
-inxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYscA+UYyAFMP8uXBV2Y
-caaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9AOoB
-mbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQ
-YqbsFbS1AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9
-BKNDLdr8C2LqL19iUw==
------END CERTIFICATE-----
diff --git a/misc/certs/11f154d6.0 b/misc/certs/11f154d6.0
deleted file mode 100644
index 3938d872..00000000
--- a/misc/certs/11f154d6.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4
-nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO
-8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV
-ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb
-PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
-6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr
-n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a
-qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4
-wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
-ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs
-pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4
-E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
------END CERTIFICATE-----
diff --git a/misc/certs/124bbd54.0 b/misc/certs/124bbd54.0
deleted file mode 100644
index 72cbf561..00000000
--- a/misc/certs/124bbd54.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0
-aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla
-MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
-BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD
-VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW
-fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt
-TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL
-fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW
-1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7
-kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G
-A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD
-VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v
-ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo
-dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu
-Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/
-HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
-pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS
-jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+
-xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn
-dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi
------END CERTIFICATE-----
diff --git a/misc/certs/128805a3.0 b/misc/certs/128805a3.0
deleted file mode 100644
index 013d461d..00000000
--- a/misc/certs/128805a3.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1
-MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
-czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
-CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy
-MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl
-ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS
-b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy
-euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO
-bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw
-WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d
-MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE
-1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD
-VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/
-zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB
-BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF
-BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV
-v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG
-E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
-uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW
-iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v
-GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0=
------END CERTIFICATE-----
diff --git a/misc/certs/12d55845.0 b/misc/certs/12d55845.0
deleted file mode 100644
index b2e43c93..00000000
--- a/misc/certs/12d55845.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
-MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
-DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow
-PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
-Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O
-rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq
-OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b
-xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw
-7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD
-aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG
-SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69
-ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
-AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
-R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
-JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
-Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
------END CERTIFICATE-----
diff --git a/misc/certs/157753a5.0 b/misc/certs/157753a5.0
deleted file mode 100644
index 20585f1c..00000000
--- a/misc/certs/157753a5.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
-IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
-MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
-FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
-bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
-H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
-uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
-mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
-a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
-E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
-WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
-VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
-Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
-cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
-IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
-AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
-YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
-6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
-Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
-c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
-mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
------END CERTIFICATE-----
diff --git a/misc/certs/1636090b.0 b/misc/certs/1636090b.0
deleted file mode 100644
index 5ecc81c3..00000000
--- a/misc/certs/1636090b.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix
-RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1
-dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p
-YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw
-NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK
-EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl
-cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl
-c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz
-dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ
-fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns
-bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD
-75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP
-FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV
-HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp
-5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu
-b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA
-A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p
-6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
-TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7
-dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys
-Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI
-l7WdmplNsDz4SgCbZN2fOUvRJ9e4
------END CERTIFICATE-----
diff --git a/misc/certs/17b51fe6.0 b/misc/certs/17b51fe6.0
deleted file mode 100644
index 6d0133d3..00000000
--- a/misc/certs/17b51fe6.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw
-PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz
-cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9
-MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz
-IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ
-ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR
-VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL
-kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd
-EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas
-H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0
-HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud
-DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4
-QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu
-Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/
-AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8
-yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR
-FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA
-ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB
-kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
-l7+ijrRU
------END CERTIFICATE-----
diff --git a/misc/certs/18856ac4.0 b/misc/certs/18856ac4.0
deleted file mode 100644
index aff52a8e..00000000
--- a/misc/certs/18856ac4.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr
-MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG
-A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0
-MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp
-Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD
-QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz
-i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8
-h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV
-MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9
-UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni
-8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC
-h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD
-VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB
-AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm
-KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ
-X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr
-QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5
-pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN
-QSdJQO7e5iNEOdyhIta6A/I=
------END CERTIFICATE-----
diff --git a/misc/certs/1dac3003.0 b/misc/certs/1dac3003.0
deleted file mode 100644
index 13a7df49..00000000
--- a/misc/certs/1dac3003.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx
-ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w
-MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD
-VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx
-FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu
-ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7
-gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH
-fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a
-ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT
-ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF
-MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk
-c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto
-dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt
-aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI
-hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk
-QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/
-h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
-nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR
-rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2
-9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis=
------END CERTIFICATE-----
diff --git a/misc/certs/1dcd6f4c.0 b/misc/certs/1dcd6f4c.0
deleted file mode 100644
index 51187d8a..00000000
--- a/misc/certs/1dcd6f4c.0
+++ /dev/null
@@ -1,32 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/
-MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow
-PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
-AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR
-IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q
-gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy
-yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts
-F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2
-jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx
-ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC
-VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK
-YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH
-EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN
-Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud
-DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE
-MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK
-UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
-TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf
-qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK
-ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE
-JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7
-hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1
-EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm
-nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX
-udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz
-ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe
-LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl
-pYYsfPQS
------END CERTIFICATE-----
diff --git a/misc/certs/1df5ec47.0 b/misc/certs/1df5ec47.0
deleted file mode 100644
index b7926f15..00000000
--- a/misc/certs/1df5ec47.0
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezEL
-MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
-BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1
-c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAeFw0wOTA5MDkwODE1MjdaFw0yOTEy
-MzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNUQyBUcnVzdENlbnRl
-ciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0ExKDAm
-BgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF
-5+cvAqBNLaT6hdqbJYUtQCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYv
-DIRlzg9uwliT6CwLOunBjvvya8o84pxOjuT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8v
-zArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+EutCHnNaYlAJ/Uqwa1D7KRT
-yGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1M4BDj5yj
-dipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBh
-MB8GA1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMB
-Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI
-4jANBgkqhkiG9w0BAQUFAAOCAQEAg8ev6n9NCjw5sWi+e22JLumzCecYV42Fmhfz
-dkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+KGwWaODIl0YgoGhnYIg5IFHY
-aAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhKBgePxLcHsU0G
-DeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV
-CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPH
-LQNjO9Po5KIqwoIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
------END CERTIFICATE-----
diff --git a/misc/certs/1e1eab7c.0 b/misc/certs/1e1eab7c.0
deleted file mode 100644
index e068f844..00000000
--- a/misc/certs/1e1eab7c.0
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx
-KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd
-BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl
-YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1
-OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy
-aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50
-ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN
-8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/
-RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4
-hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5
-ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM
-EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj
-QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1
-A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy
-WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ
-1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30
-6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT
-91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
-e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p
-TpPDpFQUWw==
------END CERTIFICATE-----
diff --git a/misc/certs/1e8e7201.0 b/misc/certs/1e8e7201.0
deleted file mode 100644
index 8afb2190..00000000
--- a/misc/certs/1e8e7201.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G
-A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp
-Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4
-MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG
-A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8
-RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT
-gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm
-KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd
-QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ
-XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw
-DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o
-LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU
-RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp
-jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK
-6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX
-mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs
-Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH
-WD9f
------END CERTIFICATE-----
diff --git a/misc/certs/1eb37bdf.0 b/misc/certs/1eb37bdf.0
deleted file mode 100644
index 7d3a2491..00000000
--- a/misc/certs/1eb37bdf.0
+++ /dev/null
@@ -1,42 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD
-VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0
-IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3
-MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz
-IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz
-MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj
-dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw
-EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp
-MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G
-CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9
-28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq
-VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q
-DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR
-5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL
-ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a
-Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl
-UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s
-+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5
-Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
-ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx
-hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV
-HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1
-+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN
-YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t
-L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy
-ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt
-IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV
-HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w
-DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW
-PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF
-5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1
-glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH
-FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2
-pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD
-xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG
-tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq
-jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De
-fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
-OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ
-d0jQ
------END CERTIFICATE-----
diff --git a/misc/certs/1ec4d31a.0 b/misc/certs/1ec4d31a.0
deleted file mode 100644
index 2202c692..00000000
--- a/misc/certs/1ec4d31a.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
-pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
-13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
-U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
-F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
-oJ2daZH9
------END CERTIFICATE-----
diff --git a/misc/certs/201cada0.0 b/misc/certs/201cada0.0
deleted file mode 100644
index 492d55a9..00000000
--- a/misc/certs/201cada0.0
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
-bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2
-MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
-ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC
-206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci
-KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2
-JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9
-BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e
-Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B
-PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67
-Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq
-Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ
-o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3
-+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj
-YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj
-FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
-AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn
-xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2
-LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc
-obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8
-CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe
-IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA
-DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F
-AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX
-Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb
-AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl
-Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw
-RY8mkaKO/qk=
------END CERTIFICATE-----
diff --git a/misc/certs/20d096ba.0 b/misc/certs/20d096ba.0
deleted file mode 100644
index 3997ac24..00000000
--- a/misc/certs/20d096ba.0
+++ /dev/null
@@ -1,18 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy
-NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y
-LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+
-TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y
-TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0
-LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW
-I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw
-nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI
------END CERTIFICATE-----
diff --git a/misc/certs/219d9499.0 b/misc/certs/219d9499.0
deleted file mode 100644
index 42e8d1ee..00000000
--- a/misc/certs/219d9499.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
-MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
-YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
-MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
-ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
-MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
-ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
-PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
-wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
-EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
-avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
-YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
-sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
-/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
-IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
-ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
-OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
-TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
-HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
-dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
-ReYNnyicsbkqWletNw+vHX/bvZ8=
------END CERTIFICATE-----
diff --git a/misc/certs/2251b13a.0 b/misc/certs/2251b13a.0
deleted file mode 100644
index 8d80b192..00000000
--- a/misc/certs/2251b13a.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAw
-PDEbMBkGA1UEAxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWdu
-MQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwx
-GzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBDQTEQMA4GA1UEChMHQ29tU2lnbjEL
-MAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGtWhf
-HZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs49oh
-gHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sW
-v+bznkqH7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ue
-Mv5WJDmyVIRD9YTC2LxBkMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr
-9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d19guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt
-6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUwAwEB/zBEBgNVHR8EPTA7
-MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29tU2lnblNl
-Y3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58
-ADsAj8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkq
-hkiG9w0BAQUFAAOCAQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7p
-iL1DRYHjZiM/EoZNGeQFsOY3wo3aBijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtC
-dsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtpFhpFfTMDZflScZAmlaxMDPWL
-kz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP51qJThRv4zdL
-hfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
-OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
------END CERTIFICATE-----
diff --git a/misc/certs/23f4c490.0 b/misc/certs/23f4c490.0
deleted file mode 100644
index d552e65d..00000000
--- a/misc/certs/23f4c490.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
-MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
-U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
-NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
-ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
-ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
-DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
-8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
-+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
-X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
-K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
-1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
-A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
-zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
-YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
-bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
-DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
-L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
-eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
-xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
-VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
-WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
------END CERTIFICATE-----
diff --git a/misc/certs/244b5494.0 b/misc/certs/244b5494.0
deleted file mode 100644
index 9e6810ab..00000000
--- a/misc/certs/244b5494.0
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
-ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
-MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
-LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
-RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
-+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
-PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
-xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
-Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
-hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
-EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
-FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
-nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
-eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
-hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
-Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
-vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
-+OkuE6N36B9K
------END CERTIFICATE-----
diff --git a/misc/certs/24ad0b63.0 b/misc/certs/24ad0b63.0
deleted file mode 100644
index cd0e805f..00000000
--- a/misc/certs/24ad0b63.0
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAxIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
-MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
-BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
-ADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0f
-zGVuDLDQVoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHi
-TkVWaR94AoDa3EeRKbs2yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0G
-CSqGSIb3DQEBBQUAA4GBAFgVKTk8d6PaXCUDfGD67gmZPCcQcMgMCeazh88K4hiW
-NWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n0a3hUKw8fGJLj7qE1xIV
-Gx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZRjXZ+Hxb
------END CERTIFICATE-----
diff --git a/misc/certs/27af790d.0 b/misc/certs/27af790d.0
deleted file mode 100644
index f9364c08..00000000
--- a/misc/certs/27af790d.0
+++ /dev/null
@@ -1,17 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL
-MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj
-KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2
-MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV
-BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw
-NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV
-BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
-MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL
-So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal
-tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
-BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG
-CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT
-qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz
-rD6ogRLQy7rQkgu2npaqBA+K
------END CERTIFICATE-----
diff --git a/misc/certs/2a4b3efc.0 b/misc/certs/2a4b3efc.0
deleted file mode 100644
index 7d83bc84..00000000
--- a/misc/certs/2a4b3efc.0
+++ /dev/null
@@ -1,37 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGYDCCBEigAwIBAgIJAMrXjAsE+ETAMA0GCSqGSIb3DQEBBAUAMGgxCzAJBgNV
-BAYTAkZSMQ4wDAYDVQQKEwVHQU5ESTErMCkGA1UEAxMiR2FuZGkgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgdjEuMTEcMBoGCSqGSIb3DQEJARYNbm9jQGdhbmRpLm5l
-dDAeFw0wNjEwMTMxMzUxMTFaFw0xNjEwMTAxMzUxMTFaMGgxCzAJBgNVBAYTAkZS
-MQ4wDAYDVQQKEwVHQU5ESTErMCkGA1UEAxMiR2FuZGkgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkgdjEuMTEcMBoGCSqGSIb3DQEJARYNbm9jQGdhbmRpLm5ldDCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALKenXL3I12vH0p9w9gVtUAU/H7E
-Lgt3uDuTUIRJOuienetnwJR/e3hXpjrA/Zhr4ukdmSvnydb/InTjb9LctqSJwJbl
-wuHGi3DUtLfAZHNzJpKP/6ZKKYITRLiCBVKwiVD/DTT8gw5uC/wZCSO6t5VzAcZ1
-rjBU5XxaZL6HIpyHYx7zmfcweUZXrwa7Ki94/vTezeHWtb9wxe+EKE0AYKt0wQOA
-G4Z1mEkewXWSf9eqUBm3HHlB1FmippKVwp8GPNadB2mtSJFB9dDBCsd4GCfoDG/i
-ejmf4bSNBDmT7mLUqBrQk0HYrWFq6byG9/3pTBmT+NsAZGqpokXhj7jCznKUNxZe
-1NeR2cGEuGnxPcwRc+SUtqYTlNDbSZ0KrhJfidLcX4c/2aaTyNUsbJkAHHTD7F+L
-Qqra1vhmHYA06nOF6i1jgksacJlrGXSq68NXLWtXFhTY2Xd38ZBnsbVEu0M2BsmD
-kuW29r5fODtthUrHmH/s3zg20NGUCpNVTrwrK70UR0qAfewJ/+uInr/7YLq9kQTO
-OuJgCDdqmb8nTuKPH7dGvsAB/XkxO0a1kbzEEMRLuoOxqaz27+3syyfn9974sfIU
-HKMc+k1gQF3/9yrr3MmKnJMcPXuJ5DTi6WXRwsT/fqSSxxVikiL2LkG+Sx7XsSIy
-AKHyRm3a0RdvXDdrAgMBAAGjggELMIIBBzAdBgNVHQ4EFgQU9hfW5YjchtRUaE00
-1S859peLDzkwgZoGA1UdIwSBkjCBj4AU9hfW5YjchtRUaE001S859peLDzmhbKRq
-MGgxCzAJBgNVBAYTAkZSMQ4wDAYDVQQKEwVHQU5ESTErMCkGA1UEAxMiR2FuZGkg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgdjEuMTEcMBoGCSqGSIb3DQEJARYNbm9j
-QGdhbmRpLm5ldIIJAMrXjAsE+ETAMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQD
-AgEGMBEGCWCGSAGG+EIBAQQEAwIBBjAYBgNVHREEETAPgQ1ub2NAZ2FuZGkubmV0
-MA0GCSqGSIb3DQEBBAUAA4ICAQARq1aB1NhNyCCC5vOWWfoxGQWdPi9YBKUfD0CY
-HTukJI5BIm9RO9NPmVL/0kKE9CEVcVfWotD1tHNLBGsFlKlG8adOg8S24fw+tZa3
-C3HU0fNcSg+6lQJQetrQxKjvORRsTIRI9ikV0FAmlt/OZXfkYU/nh7dUsDroDfps
-608KRpDfcCCz1r/k4G/iv26mM+tLFvRAsNvq+kp+gIApYVQHu0eK+MCmUmq1t2kH
-MB6+zlSN+lOCErVHEAuUAbndbnynadox6HeUk7pwODRukMzzqb2Jmp/Q5l+I/8Oz
-vfeDQK35KAiZaOYr7SG1dB4ys0mV7KFItjGGkGM2tTS/+4tLBcfSHN3rd7mvdAbQ
-4912VpHDo0wzNmieeF5OlIyY8mSq/NMtZzylaU2uJ3wO/V2bvQEugggO0HzKMwLG
-a7e68g045lClPizJ82Q4Z7F2Sc0znEnvs+u7UeDk+UARRs/SUUlOUI93mQdHlek9
-/SEDuf7x0ZhDhVfQEhAGMuLQESS/+BevxlnRraHCrRre64qLnlehvjlHzS6fyV9u
-b2X4PoCxX6yUPOHXHsmjibrmra8H+q063zXYhJE4dWJM8E2Zqjn1nS143WF2j3LS
-StdCCa7zMsGb8oH3LvVfoSzl2lAOkUsjblz9P9SYmyLfmI1xT1nu/sfgIbEabx+b
-5vReDA==
------END CERTIFICATE-----
diff --git a/misc/certs/2ab3b959.0 b/misc/certs/2ab3b959.0
deleted file mode 100644
index 5f7c1ce4..00000000
--- a/misc/certs/2ab3b959.0
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD
-EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X
-DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw
-DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u
-c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr
-TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA
-OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC
-2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW
-RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P
-AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW
-ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0
-YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz
-b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO
-ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB
-IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs
-b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
-ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s
-YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg
-a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g
-SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0
-aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg
-YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg
-Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY
-ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g
-pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4
-Fp1hBWeAyNDYpQcCNJgEjTME1A==
------END CERTIFICATE-----
diff --git a/misc/certs/2afc57aa.0 b/misc/certs/2afc57aa.0
deleted file mode 100644
index c28ac18d..00000000
--- a/misc/certs/2afc57aa.0
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL
-MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
-BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
-Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1
-OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
-SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc
-VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf
-tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg
-uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J
-XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK
-8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99
-5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3
-kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
-dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6
-Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
-JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
-Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS
-GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt
-ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8
-au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV
-hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI
-dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ==
------END CERTIFICATE-----
diff --git a/misc/certs/2b349938.0 b/misc/certs/2b349938.0
deleted file mode 100644
index 73a33674..00000000
--- a/misc/certs/2b349938.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE
-BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
-dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL
-MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
-cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP
-Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr
-ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL
-MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1
-yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr
-VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/
-nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
-KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG
-XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj
-vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt
-Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g
-N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC
-nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
------END CERTIFICATE-----
diff --git a/misc/certs/2c543cd1.0 b/misc/certs/2c543cd1.0
deleted file mode 100644
index bcb25297..00000000
--- a/misc/certs/2c543cd1.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
-MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
-YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
-R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
-9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
-fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
-iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
-1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
-bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
-MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
-ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
-uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
-Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
-tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
-PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
-hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
-5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
------END CERTIFICATE-----
diff --git a/misc/certs/2cfc4974.0 b/misc/certs/2cfc4974.0
deleted file mode 100644
index e1cce316..00000000
--- a/misc/certs/2cfc4974.0
+++ /dev/null
@@ -1,30 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJE
-SzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEw
-ODM5MzBaFw0zNzAyMTEwOTA5MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNU
-REMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuHnEz9pPPEXyG9VhDr
-2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0zY0s
-2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItU
-GBxIYXvViGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKj
-dGqPqcNiKXEx5TukYBdedObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+r
-TpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/
-BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB5DCB4TCB3gYIKoFQgSkB
-AQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5kay9yZXBv
-c2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRl
-ciBmcmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEu
-MS4xLiBDZXJ0aWZpY2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIg
-T0lEIDEuMi4yMDguMTY5LjEuMS4xLjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1Ud
-HwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEMMAoGA1UEChMDVERDMRQwEgYD
-VQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYmaHR0cDovL2Ny
-bC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
-MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZ
-J2cdUBVLc647+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqG
-SIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACrom
-JkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4A9G28kNBKWKnctj7fAXmMXAnVBhO
-inxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYscA+UYyAFMP8uXBV2Y
-caaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9AOoB
-mbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQ
-YqbsFbS1AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9
-BKNDLdr8C2LqL19iUw==
------END CERTIFICATE-----
diff --git a/misc/certs/2d9dafe4.0 b/misc/certs/2d9dafe4.0
deleted file mode 100644
index 23b53062..00000000
--- a/misc/certs/2d9dafe4.0
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg
-Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow
-TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw
-HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB
-BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y
-ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E
-N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9
-tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX
-0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c
-/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X
-KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY
-zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS
-O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D
-34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP
-K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3
-AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv
-Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj
-QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV
-cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS
-IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2
-HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa
-O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv
-033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u
-dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE
-kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41
-3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD
-u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq
-4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc=
------END CERTIFICATE-----
diff --git a/misc/certs/2e4eed3c.0 b/misc/certs/2e4eed3c.0
deleted file mode 100644
index 998460f1..00000000
--- a/misc/certs/2e4eed3c.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
-qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
-Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
-MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
-BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
-NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
-LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
-A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
-W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
-3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
-6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
-Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
-NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
-MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
-r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
-DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
-YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
-xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
-/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
-LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
-jVaMaA==
------END CERTIFICATE-----
diff --git a/misc/certs/2e5ac55d.0 b/misc/certs/2e5ac55d.0
deleted file mode 100644
index b2e43c93..00000000
--- a/misc/certs/2e5ac55d.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
-MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
-DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow
-PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
-Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O
-rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq
-OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b
-xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw
-7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD
-aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG
-SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69
-ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
-AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
-R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
-JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
-Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
------END CERTIFICATE-----
diff --git a/misc/certs/2edf7016.0 b/misc/certs/2edf7016.0
deleted file mode 100644
index cd0e805f..00000000
--- a/misc/certs/2edf7016.0
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAxIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
-MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
-BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
-ADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0f
-zGVuDLDQVoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHi
-TkVWaR94AoDa3EeRKbs2yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0G
-CSqGSIb3DQEBBQUAA4GBAFgVKTk8d6PaXCUDfGD67gmZPCcQcMgMCeazh88K4hiW
-NWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n0a3hUKw8fGJLj7qE1xIV
-Gx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZRjXZ+Hxb
------END CERTIFICATE-----
diff --git a/misc/certs/2fa87019.0 b/misc/certs/2fa87019.0
deleted file mode 100644
index 11289bcd..00000000
--- a/misc/certs/2fa87019.0
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi
-MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
-MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp
-dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV
-UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO
-ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz
-c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP
-OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl
-mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF
-BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4
-qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw
-gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB
-BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu
-bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp
-dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8
-6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/
-h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH
-/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
-wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN
-pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
------END CERTIFICATE-----
diff --git a/misc/certs/2fb1850a.0 b/misc/certs/2fb1850a.0
deleted file mode 100644
index 492d55a9..00000000
--- a/misc/certs/2fb1850a.0
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
-bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2
-MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
-ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC
-206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci
-KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2
-JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9
-BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e
-Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B
-PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67
-Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq
-Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ
-o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3
-+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj
-YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj
-FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
-AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn
-xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2
-LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc
-obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8
-CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe
-IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA
-DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F
-AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX
-Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb
-AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl
-Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw
-RY8mkaKO/qk=
------END CERTIFICATE-----
diff --git a/misc/certs/33815e15.0 b/misc/certs/33815e15.0
deleted file mode 100644
index ccf48a4d..00000000
--- a/misc/certs/33815e15.0
+++ /dev/null
@@ -1,43 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW
-MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
-Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9
-MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
-U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
-cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
-A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
-pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
-OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
-Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
-Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
-HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
-Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
-+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
-Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
-Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
-26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
-AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
-VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul
-F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC
-ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w
-ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk
-aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0
-YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg
-c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93
-d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG
-CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF
-wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS
-Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst
-0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc
-pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl
-CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF
-P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK
-1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm
-KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
-JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ
-8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm
-fyWl8kgAwKQB2j8=
------END CERTIFICATE-----
diff --git a/misc/certs/343eb6cb.0 b/misc/certs/343eb6cb.0
deleted file mode 100644
index edbeb27e..00000000
--- a/misc/certs/343eb6cb.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG
-A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh
-bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE
-ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS
-b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5
-7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS
-J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y
-HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP
-t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz
-FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY
-XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/
-MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw
-hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js
-MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA
-A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj
-Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx
-XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o
-omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc
-A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
-WL1WMRJOEcgh4LMRkWXbtKaIOM5V
------END CERTIFICATE-----
diff --git a/misc/certs/349f2832.0 b/misc/certs/349f2832.0
deleted file mode 100644
index 87a13f62..00000000
--- a/misc/certs/349f2832.0
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB
-8zELMAkGA1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2Vy
-dGlmaWNhY2lvIChOSUYgUS0wODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1
-YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYDVQQLEyxWZWdldSBodHRwczovL3d3
-dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UECxMsSmVyYXJxdWlh
-IEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMTBkVD
-LUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQG
-EwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8g
-KE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBD
-ZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQu
-bmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMg
-ZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUNDMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R
-85iKw5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm
-4CgPukLjbo73FCeTae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaV
-HMf5NLWUhdWZXqBIoH7nF2W4onW4HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNd
-QlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0aE9jD2z3Il3rucO2n5nzbcc8t
-lGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw0JDnJwIDAQAB
-o4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4
-opvpXY0wfwYDVR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBo
-dHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidW
-ZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAwDQYJKoZIhvcN
-AQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJlF7W2u++AVtd0x7Y
-/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNaAl6k
-SBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhy
-Rp/7SNVel+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOS
-Agu+TGbrIP65y7WZf+a2E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xl
-nJ2lYJU6Un/10asIbvPuW/mIPX64b24D5EI=
------END CERTIFICATE-----
diff --git a/misc/certs/3513523f.0 b/misc/certs/3513523f.0
deleted file mode 100644
index fd4341df..00000000
--- a/misc/certs/3513523f.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
-QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
-MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
-b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
-CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
-nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
-43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
-T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
-gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
-BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
-TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
-DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
-hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
-06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
-PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
-YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
-CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
------END CERTIFICATE-----
diff --git a/misc/certs/381ce4dd.0 b/misc/certs/381ce4dd.0
deleted file mode 100644
index 44e96735..00000000
--- a/misc/certs/381ce4dd.0
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UE
-AwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00x
-CzAJBgNVBAYTAkVTMB4XDTA4MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEW
-MBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZF
-RElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
-AgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHkWLn7
-09gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7
-XBZXehuDYAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5P
-Grjm6gSSrj0RuVFCPYewMYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAK
-t0SdE3QrwqXrIhWYENiLxQSfHY9g5QYbm8+5eaA9oiM/Qj9r+hwDezCNzmzAv+Yb
-X79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbkHQl/Sog4P75n/TSW9R28
-MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTTxKJxqvQU
-fecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI
-2Sf23EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyH
-K9caUPgn6C9D4zq92Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEae
-ZAwUswdbxcJzbPEHXEUkFDWug/FqTYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAP
-BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz4SsrSbbXc6GqlPUB53NlTKxQ
-MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU9QHnc2VMrFAw
-RAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
-bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWIm
-fQwng4/F9tqgaHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3
-gvoFNTPhNahXwOf9jU8/kzJPeGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKe
-I6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1PwkzQSulgUV1qzOMPPKC8W64iLgpq0i
-5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1ThCojz2GuHURwCRi
-ipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oIKiMn
-MCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZ
-o5NjEFIqnxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6
-zqylfDJKZ0DcMDQj3dcEI2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacN
-GHk0vFQYXlPKNFHtRQrmjseCNj6nOGOpMCwXEGCSn1WHElkQwg9naRHMTh5+Spqt
-r0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3otkYNbn5XOmeUwssfnHdK
-Z05phkOTOPu220+DkdRgfks+KzgHVZhepA==
------END CERTIFICATE-----
diff --git a/misc/certs/399e7759.0 b/misc/certs/399e7759.0
deleted file mode 100644
index fd4341df..00000000
--- a/misc/certs/399e7759.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
-QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
-MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
-b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
-CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
-nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
-43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
-T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
-gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
-BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
-TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
-DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
-hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
-06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
-PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
-YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
-CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
------END CERTIFICATE-----
diff --git a/misc/certs/3a3b02ce.0 b/misc/certs/3a3b02ce.0
deleted file mode 100644
index a695c21b..00000000
--- a/misc/certs/3a3b02ce.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB
-ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly
-aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
-ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w
-NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G
-A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD
-VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX
-SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR
-VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2
-w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF
-mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg
-4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9
-4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw
-DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw
-EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx
-SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2
-ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8
-vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
-hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi
-Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ
-/L7fCg0=
------END CERTIFICATE-----
diff --git a/misc/certs/3ad48a91.0 b/misc/certs/3ad48a91.0
deleted file mode 100644
index 519028c6..00000000
--- a/misc/certs/3ad48a91.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
-RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
-VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
-DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
-ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
-VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
-mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
-IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
-mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
-XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
-dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
-jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
-BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
-DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
-9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
-jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
-Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
-ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
-R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
------END CERTIFICATE-----
diff --git a/misc/certs/3b2716e5.0 b/misc/certs/3b2716e5.0
deleted file mode 100644
index a684013b..00000000
--- a/misc/certs/3b2716e5.0
+++ /dev/null
@@ -1,34 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNV
-BAMML0VCRyBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMTcwNQYDVQQKDC5FQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXpt
-ZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAeFw0wNjA4MTcwMDIxMDlaFw0xNjA4
-MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25payBTZXJ0aWZpa2Eg
-SGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2ltIFRl
-a25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIi
-MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h
-4fuXd7hxlugTlkaDT7byX3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAk
-tiHq6yOU/im/+4mRDGSaBUorzAzu8T2bgmmkTPiab+ci2hC6X5L8GCcKqKpE+i4s
-tPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfreYteIAbTdgtsApWjluTL
-dlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZTqNGFav4
-c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8Um
-TDGyY5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z
-+kI2sSXFCjEmN1ZnuqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0O
-Lna9XvNRiYuoP1Vzv9s6xiQFlpJIqkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMW
-OeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vmExH8nYQKE3vwO9D8owrXieqW
-fo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0Nokb+Clsi7n2
-l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
-/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgw
-FoAU587GT/wWZ5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+
-8ygjdsZs93/mQJ7ANtyVDR2tFcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI
-6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgmzJNSroIBk5DKd8pNSe/iWtkqvTDO
-TLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64kXPBfrAowzIpAoHME
-wfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqTbCmY
-Iai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJn
-xk1Gj7sURT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4Q
-DgZxGhBM/nV+/x5XOULK1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9q
-Kd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11t
-hie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQY9iJSrSq3RZj9W6+YKH4
-7ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9AahH3eU7
-QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
------END CERTIFICATE-----
diff --git a/misc/certs/3bde41ac.0 b/misc/certs/3bde41ac.0
deleted file mode 100644
index de97f841..00000000
--- a/misc/certs/3bde41ac.0
+++ /dev/null
@@ -1,35 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE
-BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h
-cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy
-MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg
-Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi
-MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9
-thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM
-cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG
-L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i
-NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h
-X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b
-m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy
-Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja
-EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T
-KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF
-6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh
-OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD
-VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD
-VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
-cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv
-ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl
-AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF
-661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9
-am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1
-ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481
-PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS
-3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k
-SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF
-3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM
-ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g
-StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz
-Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB
-jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
------END CERTIFICATE-----
diff --git a/misc/certs/3c58f906.0 b/misc/certs/3c58f906.0
deleted file mode 100644
index 20585f1c..00000000
--- a/misc/certs/3c58f906.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
-IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
-MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
-FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
-bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
-H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
-uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
-mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
-a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
-E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
-WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
-VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
-Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
-cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
-IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
-AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
-YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
-6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
-Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
-c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
-mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
------END CERTIFICATE-----
diff --git a/misc/certs/3c860d51.0 b/misc/certs/3c860d51.0
deleted file mode 100644
index d7211878..00000000
--- a/misc/certs/3c860d51.0
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
-BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln
-biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF
-MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT
-d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8
-76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+
-bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c
-6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE
-emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd
-MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt
-MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y
-MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y
-FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi
-aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM
-gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB
-qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7
-lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn
-8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
-L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6
-45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO
-UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5
-O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC
-bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv
-GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a
-77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC
-hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3
-92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp
-Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w
-ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt
-Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
------END CERTIFICATE-----
diff --git a/misc/certs/3d441de8.0 b/misc/certs/3d441de8.0
deleted file mode 100644
index cedf5967..00000000
--- a/misc/certs/3d441de8.0
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO
-TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh
-dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX
-DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl
-ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv
-b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291
-qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp
-uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU
-Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE
-pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp
-5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M
-UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN
-GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy
-5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv
-6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK
-eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6
-B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/
-BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov
-L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG
-SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS
-CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen
-5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897
-IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK
-gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL
-+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL
-vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm
-bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk
-N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC
-Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z
-ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ==
------END CERTIFICATE-----
diff --git a/misc/certs/3e45d192.0 b/misc/certs/3e45d192.0
deleted file mode 100644
index a28e9a0e..00000000
--- a/misc/certs/3e45d192.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx
-FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg
-Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG
-A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr
-b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ
-jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn
-PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh
-ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9
-nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h
-q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED
-MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC
-mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3
-7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB
-oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs
-EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO
-fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi
-AmvZWg==
------END CERTIFICATE-----
diff --git a/misc/certs/3e7271e8.0 b/misc/certs/3e7271e8.0
deleted file mode 100644
index 06926c8e..00000000
--- a/misc/certs/3e7271e8.0
+++ /dev/null
@@ -1,26 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
-RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
-bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
-IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy
-MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
-LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
-YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
-A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
-K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
-sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
-MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
-XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
-HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
-4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA
-vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G
-CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA
-WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
-oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ
-h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18
-f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN
-B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy
-vUxFnmG6v4SBkgPR0ml8xQ==
------END CERTIFICATE-----
diff --git a/misc/certs/3ee7e181.0 b/misc/certs/3ee7e181.0
deleted file mode 100644
index 8940ef5a..00000000
--- a/misc/certs/3ee7e181.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYT
-AkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQ
-TS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG
-9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMB4XDTAyMTIxMzE0MjkyM1oXDTIw
-MTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAM
-BgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEO
-MAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2
-LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaI
-s9z4iPf930Pfeo2aSVz2TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2
-xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCWSo7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4
-u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYyHF2fYPepraX/z9E0+X1b
-F8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNdfrGoRpAx
-Vs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGd
-PDPQtQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNV
-HSAEDjAMMAoGCCqBegF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAx
-NjAfBgNVHSMEGDAWgBSjBS8YYFDCiQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUF
-AAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RKq89toB9RlPhJy3Q2FLwV3duJ
-L92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3QMZsyK10XZZOY
-YLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
-Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2a
-NjSaTFR+FwNIlQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R
-0982gaEbeC9xs/FZTEYYKKuF0mBWWg==
------END CERTIFICATE-----
diff --git a/misc/certs/40547a79.0 b/misc/certs/40547a79.0
deleted file mode 100644
index 6146dcb5..00000000
--- a/misc/certs/40547a79.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB
-gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
-A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
-BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw
-MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
-YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
-RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3
-UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI
-2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8
-Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
-+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
-DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
-nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW
-/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g
-PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u
-QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY
-SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv
-IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
-RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4
-zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd
-BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB
-ZQ==
------END CERTIFICATE-----
diff --git a/misc/certs/408e388a.0 b/misc/certs/408e388a.0
deleted file mode 100644
index 5a324a35..00000000
--- a/misc/certs/408e388a.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEFTCCA36gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBvjELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UE
-ChMfU29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9z
-dG1hc3RlcjEgMB4GA1UEAxMXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJTAjBgkq
-hkiG9w0BCQEWFmhvc3RtYXN0ZXJAc3BpLWluYy5vcmcwHhcNMDMwMTE1MTYyOTE3
-WhcNMDcwMTE0MTYyOTE3WjCBvjELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0luZGlh
-bmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMfU29mdHdhcmUgaW4g
-dGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1hc3RlcjEgMB4GA1UE
-AxMXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJTAjBgkqhkiG9w0BCQEWFmhvc3Rt
-YXN0ZXJAc3BpLWluYy5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAPB6
-rdoiLR3RodtM22LMcfwfqb5OrJNl7fwmvskgF7yP6sdD2bOfDIXhg9852jhY8/kL
-VOFe1ELAL2OyN4RAxk0rliZQVgeTgqvgkOVIBbNwgnjN6mqtuWzFiPL+NXQExq40
-I3whM+4lEiwSHaV+MYxWanMdhc+kImT50LKfkxcdAgMBAAGjggEfMIIBGzAdBgNV
-HQ4EFgQUB63oQR1/vda/G4F6P4xLiN4E0vowgesGA1UdIwSB4zCB4IAUB63oQR1/
-vda/G4F6P4xLiN4E0vqhgcSkgcEwgb4xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdJ
-bmRpYW5hMRUwEwYDVQQHEwxJbmRpYW5hcG9saXMxKDAmBgNVBAoTH1NvZnR3YXJl
-IGluIHRoZSBQdWJsaWMgSW50ZXJlc3QxEzARBgNVBAsTCmhvc3RtYXN0ZXIxIDAe
-BgNVBAMTF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MSUwIwYJKoZIhvcNAQkBFhZo
-b3N0bWFzdGVyQHNwaS1pbmMub3JnggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcN
-AQEEBQADgYEAm/Abn8c2y1nO3fgpAIslxvi9iNBZDhQtJ0VQZY6wgSfANyDOR4DW
-iexO/AlorB49KnkFS7TjCAoLOZhcg5FaNiKnlstMI5krQmau1Qnb/vGSNsE/UGms
-1ts+QYPUs0KmGEAFUri2XzLy+aQo9Kw74VBvqnxvaaMeY5yMcKNOieY=
------END CERTIFICATE-----
diff --git a/misc/certs/40dc992e.0 b/misc/certs/40dc992e.0
deleted file mode 100644
index 5ecc81c3..00000000
--- a/misc/certs/40dc992e.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix
-RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1
-dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p
-YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw
-NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK
-EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl
-cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl
-c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz
-dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ
-fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns
-bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD
-75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP
-FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV
-HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp
-5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu
-b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA
-A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p
-6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
-TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7
-dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys
-Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI
-l7WdmplNsDz4SgCbZN2fOUvRJ9e4
------END CERTIFICATE-----
diff --git a/misc/certs/415660c1.0 b/misc/certs/415660c1.0
deleted file mode 100644
index d209ab6f..00000000
--- a/misc/certs/415660c1.0
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
-MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
-BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
-ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
-BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
-I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
-CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i
-2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWXbj9T/UWZYB2oK0z5XqcJ
-2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/D/xwzoiQ
------END CERTIFICATE-----
diff --git a/misc/certs/418595b9.0 b/misc/certs/418595b9.0
deleted file mode 100644
index ab1606c2..00000000
--- a/misc/certs/418595b9.0
+++ /dev/null
@@ -1,30 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRS
-MRgwFgYDVQQHDA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJp
-bGltc2VsIHZlIFRla25vbG9qaWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSw
-VEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ryb25payB2ZSBLcmlwdG9sb2ppIEFy
-YcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNVBAsMGkthbXUgU2Vy
-dGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUgS8O2
-ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAe
-Fw0wNzA4MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIx
-GDAWBgNVBAcMD0dlYnplIC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmls
-aW1zZWwgdmUgVGVrbm9sb2ppayBBcmHFn3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBU
-QUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZlIEtyaXB0b2xvamkgQXJh
-xZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2FtdSBTZXJ0
-aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7Zr
-IFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4h
-gb46ezzb8R1Sf1n68yJMlaCQvEhOEav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yK
-O7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1xnnRFDDtG1hba+818qEhTsXO
-fJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR6Oqeyjh1jmKw
-lZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
-hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQID
-AQABo0IwQDAdBgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/
-BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmP
-NOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4N5EY3ATIZJkrGG2AA1nJrvhY0D7t
-wyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLTy9LQQfMmNkqblWwM
-7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYhLBOh
-gLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5n
-oN+J1q2MdqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUs
-yZyQ2uypQjyttgI=
------END CERTIFICATE-----
diff --git a/misc/certs/4304c5e5.0 b/misc/certs/4304c5e5.0
deleted file mode 100644
index 11289bcd..00000000
--- a/misc/certs/4304c5e5.0
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi
-MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
-MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp
-dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV
-UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO
-ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz
-c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP
-OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl
-mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF
-BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4
-qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw
-gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB
-BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu
-bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp
-dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8
-6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/
-h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH
-/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
-wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN
-pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
------END CERTIFICATE-----
diff --git a/misc/certs/442adcac.0 b/misc/certs/442adcac.0
deleted file mode 100644
index b133fcb4..00000000
--- a/misc/certs/442adcac.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM
-MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
-QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM
-MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
-QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E
-jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo
-ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI
-ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu
-Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg
-AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7
-HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA
-uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa
-TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg
-xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q
-CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x
-O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs
-6GAqm4VKQPNriiTsBhYscw==
------END CERTIFICATE-----
diff --git a/misc/certs/4597689c.0 b/misc/certs/4597689c.0
deleted file mode 100644
index e29f64ea..00000000
--- a/misc/certs/4597689c.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj
-dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0
-NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD
-VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G
-vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/
-BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C
-AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl
-IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw
-NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq
-y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF
-MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
-A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy
-0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1
-E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN
------END CERTIFICATE-----
diff --git a/misc/certs/46b2fd3b.0 b/misc/certs/46b2fd3b.0
deleted file mode 100644
index 0aa3e357..00000000
--- a/misc/certs/46b2fd3b.0
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE
-BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu
-IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw
-WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD
-ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y
-IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn
-IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+
-6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob
-jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw
-izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl
-+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY
-zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP
-pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF
-KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW
-ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB
-AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
-BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0
-ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
-IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA
-A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0
-uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+
-FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7
-jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/
-u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D
-YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1
-puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa
-icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG
-DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x
-kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z
-Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
------END CERTIFICATE-----
diff --git a/misc/certs/480720ec.0 b/misc/certs/480720ec.0
deleted file mode 100644
index 03c70c70..00000000
--- a/misc/certs/480720ec.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
-MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
-R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
-MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
-Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
-AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
-ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
-7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
-kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
-mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
-KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
-6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
-4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
-oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
-UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
-AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
------END CERTIFICATE-----
diff --git a/misc/certs/48a195d8.0 b/misc/certs/48a195d8.0
deleted file mode 100644
index 76383219..00000000
--- a/misc/certs/48a195d8.0
+++ /dev/null
@@ -1,34 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4
-MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6
-ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD
-VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j
-b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq
-scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO
-xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H
-LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX
-uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD
-yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+
-JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q
-rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN
-BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L
-hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB
-QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+
-HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu
-Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg
-QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB
-BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
-MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA
-A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb
-laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56
-awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo
-JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw
-LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT
-VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk
-LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb
-UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/
-QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+
-naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls
-QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
------END CERTIFICATE-----
diff --git a/misc/certs/48bec511.0 b/misc/certs/48bec511.0
deleted file mode 100644
index a04e656d..00000000
--- a/misc/certs/48bec511.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM
-MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D
-ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU
-cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3
-WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg
-Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw
-IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH
-UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM
-TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU
-BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM
-kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x
-AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV
-HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y
-sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL
-I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8
-J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY
-VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
-03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
------END CERTIFICATE-----
diff --git a/misc/certs/4a6481c9.0 b/misc/certs/4a6481c9.0
deleted file mode 100644
index 6f0f8db0..00000000
--- a/misc/certs/4a6481c9.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
-A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
-Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
-MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
-A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
-v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
-eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
-tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
-C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
-zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
-mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
-V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
-bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
-3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
-J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
-291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
-ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
-AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
-TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
------END CERTIFICATE-----
diff --git a/misc/certs/4bfab552.0 b/misc/certs/4bfab552.0
deleted file mode 100644
index c1a0a481..00000000
--- a/misc/certs/4bfab552.0
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
-HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs
-ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw
-MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
-b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj
-aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp
-Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg
-nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1
-HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N
-Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN
-dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0
-HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
-BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G
-CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU
-sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3
-4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg
-8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
-pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1
-mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
------END CERTIFICATE-----
diff --git a/misc/certs/4d654d1d.0 b/misc/certs/4d654d1d.0
deleted file mode 100644
index 82ae5e1b..00000000
--- a/misc/certs/4d654d1d.0
+++ /dev/null
@@ -1,15 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD
-VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
-bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
-b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV
-UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
-cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
-b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH
-iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS
-r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4
-04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r
-GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9
-3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
-lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
------END CERTIFICATE-----
diff --git a/misc/certs/4e18c148.0 b/misc/certs/4e18c148.0
deleted file mode 100644
index 05879ff3..00000000
--- a/misc/certs/4e18c148.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc
-MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj
-IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB
-IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE
-RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl
-U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290
-IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU
-ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC
-QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr
-rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S
-NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc
-QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH
-txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP
-BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
-AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp
-tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa
-IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl
-6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+
-xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
-Cm26OWMohpLzGITY+9HPBVZkVw==
------END CERTIFICATE-----
diff --git a/misc/certs/4f316efb.0 b/misc/certs/4f316efb.0
deleted file mode 100644
index d7211878..00000000
--- a/misc/certs/4f316efb.0
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
-BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln
-biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF
-MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT
-d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8
-76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+
-bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c
-6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE
-emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd
-MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt
-MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y
-MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y
-FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi
-aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM
-gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB
-qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7
-lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn
-8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
-L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6
-45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO
-UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5
-O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC
-bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv
-GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a
-77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC
-hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3
-92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp
-Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w
-ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt
-Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
------END CERTIFICATE-----
diff --git a/misc/certs/4fbd6bfa.0 b/misc/certs/4fbd6bfa.0
deleted file mode 100644
index 1c747eb5..00000000
--- a/misc/certs/4fbd6bfa.0
+++ /dev/null
@@ -1,26 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB
-kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw
-IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG
-EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
-VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu
-dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6
-E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ
-D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK
-4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq
-lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW
-bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB
-o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
-MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js
-LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr
-BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB
-AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
-Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj
-j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH
-KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv
-2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3
-mfnGV/TJVTl4uix5yaaIK/QI
------END CERTIFICATE-----
diff --git a/misc/certs/5021a0a2.0 b/misc/certs/5021a0a2.0
deleted file mode 100644
index 8b8caf55..00000000
--- a/misc/certs/5021a0a2.0
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL
-MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
-BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1
-c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx
-MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg
-R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD
-VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR
-JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T
-fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu
-jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z
-wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ
-fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD
-VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO
-BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G
-CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1
-7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn
-8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs
-ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
-ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/
-2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
------END CERTIFICATE-----
diff --git a/misc/certs/5046c355.0 b/misc/certs/5046c355.0
deleted file mode 100644
index 67a172cb..00000000
--- a/misc/certs/5046c355.0
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE
-BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu
-IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow
-RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY
-U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
-MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv
-Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br
-YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF
-nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH
-6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt
-eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/
-c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ
-MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH
-HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf
-jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6
-5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB
-rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU
-F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c
-wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
-cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB
-AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp
-WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9
-xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ
-2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ
-IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8
-aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X
-em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR
-dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/
-OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+
-hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy
-tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
------END CERTIFICATE-----
diff --git a/misc/certs/524d9b43.0 b/misc/certs/524d9b43.0
deleted file mode 100644
index b5f18751..00000000
--- a/misc/certs/524d9b43.0
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB
-vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
-ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp
-U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W
-ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
-Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0
-IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y
-IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh
-bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF
-9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH
-H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H
-LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN
-/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT
-rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw
-WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs
-exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
-DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4
-sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+
-seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz
-4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+
-BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR
-lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3
-7M2CYfE45k+XmCpajQ==
------END CERTIFICATE-----
diff --git a/misc/certs/5443e9e3.0 b/misc/certs/5443e9e3.0
deleted file mode 100644
index e068f844..00000000
--- a/misc/certs/5443e9e3.0
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx
-KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd
-BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl
-YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1
-OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy
-aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50
-ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN
-8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/
-RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4
-hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5
-ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM
-EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj
-QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1
-A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy
-WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ
-1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30
-6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT
-91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
-e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p
-TpPDpFQUWw==
------END CERTIFICATE-----
diff --git a/misc/certs/54657681.0 b/misc/certs/54657681.0
deleted file mode 100644
index 9daec241..00000000
--- a/misc/certs/54657681.0
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg
-Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow
-TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw
-HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB
-BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr
-6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV
-L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91
-1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx
-MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ
-QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB
-arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr
-Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi
-FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS
-P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN
-9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP
-AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz
-uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h
-9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s
-A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t
-OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo
-+fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7
-KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2
-DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us
-H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ
-I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7
-5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h
-3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz
-Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA=
------END CERTIFICATE-----
diff --git a/misc/certs/55a10908.0 b/misc/certs/55a10908.0
deleted file mode 100644
index 85a877b8..00000000
--- a/misc/certs/55a10908.0
+++ /dev/null
@@ -1,18 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
-NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
-dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
-WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
-v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
-UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
-IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
-W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
------END CERTIFICATE-----
diff --git a/misc/certs/5620c4aa.0 b/misc/certs/5620c4aa.0
deleted file mode 100644
index 78e6ca59..00000000
--- a/misc/certs/5620c4aa.0
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL
-MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
-BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
-Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1
-OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
-SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc
-VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW
-Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q
-Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2
-1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq
-ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1
-Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX
-XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
-dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6
-Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
-JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
-Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN
-irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8
-TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6
-g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB
-95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj
-S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A==
------END CERTIFICATE-----
diff --git a/misc/certs/56657bde.0 b/misc/certs/56657bde.0
deleted file mode 100644
index 72cbf561..00000000
--- a/misc/certs/56657bde.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0
-aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla
-MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
-BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD
-VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW
-fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt
-TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL
-fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW
-1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7
-kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G
-A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD
-VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v
-ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo
-dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu
-Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/
-HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
-pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS
-jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+
-xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn
-dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi
------END CERTIFICATE-----
diff --git a/misc/certs/56b8a0b6.0 b/misc/certs/56b8a0b6.0
deleted file mode 100644
index 5205c777..00000000
--- a/misc/certs/56b8a0b6.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xS
-S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg
-SGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcNMDUxMTA3MTAwNzU3
-WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVrdHJv
-bmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJU
-UjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSw
-bGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWe
-LiAoYykgS2FzxLFtIDIwMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqeLCDe2JAOCtFp0if7qnef
-J1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKIx+XlZEdh
-R3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJ
-Qv2gQrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGX
-JHpsmxcPbe9TmJEr5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1p
-zpwACPI2/z7woQ8arBT9pmAPAgMBAAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58S
-Fq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
-KoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/nttRbj2hWyfIvwq
-ECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
-Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFz
-gw2lGh1uEpJ+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotH
-uFEJjOp9zYhys2AzsfAKRO8P9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LS
-y3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5UrbnBEI=
------END CERTIFICATE-----
diff --git a/misc/certs/56e29e75.0 b/misc/certs/56e29e75.0
deleted file mode 100644
index b735d1c3..00000000
--- a/misc/certs/56e29e75.0
+++ /dev/null
@@ -1,46 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIIDjCCBfagAwIBAgIJAOiOtsn4KhQoMA0GCSqGSIb3DQEBBQUAMIG8MQswCQYD
-VQQGEwJVUzEQMA4GA1UECBMHSW5kaWFuYTEVMBMGA1UEBxMMSW5kaWFuYXBvbGlz
-MSgwJgYDVQQKEx9Tb2Z0d2FyZSBpbiB0aGUgUHVibGljIEludGVyZXN0MRMwEQYD
-VQQLEwpob3N0bWFzdGVyMR4wHAYDVQQDExVDZXJ0aWZpY2F0ZSBBdXRob3JpdHkx
-JTAjBgkqhkiG9w0BCQEWFmhvc3RtYXN0ZXJAc3BpLWluYy5vcmcwHhcNMDgwNTEz
-MDgwNzU2WhcNMTgwNTExMDgwNzU2WjCBvDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMfU29mdHdh
-cmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1hc3RlcjEe
-MBwGA1UEAxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSUwIwYJKoZIhvcNAQkBFhZo
-b3N0bWFzdGVyQHNwaS1pbmMub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEA3DbmR0LCxFF1KYdAw9iOIQbSGE7r7yC9kDyFEBOMKVuUY/b0LfEGQpG5
-GcRCaQi/izZF6igFM0lIoCdDkzWKQdh4s/Dvs24t3dHLfer0dSbTPpA67tfnLAS1
-fOH1fMVO73e9XKKTM5LOfYFIz2u1IiwIg/3T1c87Lf21SZBb9q1NE8re06adU1Fx
-Y0b4ShZcmO4tbZoWoXaQ4mBDmdaJ1mwuepiyCwMs43pPx93jzONKao15Uvr0wa8u
-jyoIyxspgpJyQ7zOiKmqp4pRQ1WFmjcDeJPI8L20QcgHQprLNZd6ioFl3h1UCAHx
-ZFy3FxpRvB7DWYd2GBaY7r/2Z4GLBjXFS21ZGcfSxki+bhQog0oQnBv1b7ypjvVp
-/rLBVcznFMn5WxRTUQfqzj3kTygfPGEJ1zPSbqdu1McTCW9rXRTunYkbpWry9vjQ
-co7qch8vNGopCsUK7BxAhRL3pqXTT63AhYxMfHMgzFMY8bJYTAH1v+pk1Vw5xc5s
-zFNaVrpBDyXfa1C2x4qgvQLCxTtVpbJkIoRRKFauMe5e+wsWTUYFkYBE7axt8Feo
-+uthSKDLG7Mfjs3FIXcDhB78rKNDCGOM7fkn77SwXWfWT+3Qiz5dW8mRvZYChD3F
-TbxCP3T9PF2sXEg2XocxLxhsxGjuoYvJWdAY4wCAs1QnLpnwFVMCAwEAAaOCAg8w
-ggILMB0GA1UdDgQWBBQ0cdE41xU2g0dr1zdkQjuOjVKdqzCB8QYDVR0jBIHpMIHm
-gBQ0cdE41xU2g0dr1zdkQjuOjVKdq6GBwqSBvzCBvDELMAkGA1UEBhMCVVMxEDAO
-BgNVBAgTB0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMf
-U29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1h
-c3RlcjEeMBwGA1UEAxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSUwIwYJKoZIhvcN
-AQkBFhZob3N0bWFzdGVyQHNwaS1pbmMub3JnggkA6I62yfgqFCgwDwYDVR0TAQH/
-BAUwAwEB/zARBglghkgBhvhCAQEEBAMCAAcwCQYDVR0SBAIwADAuBglghkgBhvhC
-AQ0EIRYfU29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDAwBglghkgBhvhC
-AQQEIxYhaHR0cHM6Ly9jYS5zcGktaW5jLm9yZy9jYS1jcmwucGVtMDIGCWCGSAGG
-+EIBAwQlFiNodHRwczovL2NhLnNwaS1pbmMub3JnL2NlcnQtY3JsLnBlbTAhBgNV
-HREEGjAYgRZob3N0bWFzdGVyQHNwaS1pbmMub3JnMA4GA1UdDwEB/wQEAwIBBjAN
-BgkqhkiG9w0BAQUFAAOCAgEAtM294LnqsgMrfjLp3nI/yUuCXp3ir1UJogxU6M8Y
-PCggHam7AwIvUjki+RfPrWeQswN/2BXja367m1YBrzXU2rnHZxeb1NUON7MgQS4M
-AcRb+WU+wmHo0vBqlXDDxm/VNaSsWXLhid+hoJ0kvSl56WEq2dMeyUakCHhBknIP
-qxR17QnwovBc78MKYiC3wihmrkwvLo9FYyaW8O4x5otVm6o6+YI5HYg84gd1GuEP
-sTC8cTLSOv76oYnzQyzWcsR5pxVIBcDYLXIC48s9Fmq6ybgREOJJhcyWR2AFJS7v
-dVkz9UcZFu/abF8HyKZQth3LZjQl/GaD68W2MEH4RkRiqMEMVObqTFoo5q7Gt/5/
-O5aoLu7HaD7dAD0prypjq1/uSSotxdz70cbT0ZdWUoa2lOvUYFG3/B6bzAKb1B+P
-+UqPti4oOxfMxaYF49LTtcYDyeFIQpvLP+QX4P4NAZUJurgNceQJcHdC2E3hQqlg
-g9cXiUPS1N2nGLar1CQlh7XU4vwuImm9rWgs/3K1mKoGnOcqarihk3bOsPN/nOHg
-T7jYhkalMwIsJWE3KpLIrIF0aGOHM3a9BX9e1dUCbb2v/ypaqknsmHlHU5H2DjRa
-yaXG67Ljxay2oHA1u8hRadDytaIybrw/oDc5fHE2pgXfDBLkFqfF1stjo5VwP+YE
-o2A=
------END CERTIFICATE-----
diff --git a/misc/certs/57692373.0 b/misc/certs/57692373.0
deleted file mode 100644
index 2031f3ed..00000000
--- a/misc/certs/57692373.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs
-IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg
-R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A
-PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8
-Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL
-TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL
-5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7
-S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe
-2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap
-EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td
-EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv
-/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN
-A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0
-abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF
-I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz
-4iIprn2DQKi6bA==
------END CERTIFICATE-----
diff --git a/misc/certs/578d5c04.0 b/misc/certs/578d5c04.0
deleted file mode 100644
index 676db975..00000000
--- a/misc/certs/578d5c04.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
-UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
-dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
-MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
-dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
-BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
-cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
-AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
-MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
-aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
-ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
-IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
-MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
-A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
-7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
-1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
------END CERTIFICATE-----
diff --git a/misc/certs/57bbd831.0 b/misc/certs/57bbd831.0
deleted file mode 100644
index c28e86d7..00000000
--- a/misc/certs/57bbd831.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEc
-MBoGA1UEChMTSmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRp
-b25DQTAeFw0wNzEyMTIxNTAwMDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYT
-AkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zlcm5tZW50MRYwFAYDVQQLEw1BcHBs
-aWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp23gdE6H
-j6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4fl+K
-f5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55
-IrmTwcrNwVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cw
-FO5cjFW6WY2H/CPek9AEjP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDiht
-QWEjdnjDuGWk81quzMKq2edY3rZ+nYVunyoKb58DKTCXKB28t89UKU5RMfkntigm
-/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRUWssmP3HMlEYNllPqa0jQ
-k/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNVBAYTAkpQ
-MRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOC
-seODvOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
-ggEBADlqRHZ3ODrso2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJ
-hyzjVOGjprIIC8CFqMjSnHH2HZ9g/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+
-eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYDio+nEhEMy/0/ecGc/WLuo89U
-DNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmWdupwX3kSa+Sj
-B1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
-rosot4LKGAfmt1t06SAZf7IbiVQ=
------END CERTIFICATE-----
diff --git a/misc/certs/57bcb2da.0 b/misc/certs/57bcb2da.0
deleted file mode 100644
index 67a172cb..00000000
--- a/misc/certs/57bcb2da.0
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE
-BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu
-IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow
-RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY
-U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
-MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv
-Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br
-YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF
-nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH
-6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt
-eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/
-c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ
-MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH
-HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf
-jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6
-5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB
-rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU
-F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c
-wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
-cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB
-AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp
-WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9
-xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ
-2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ
-IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8
-aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X
-em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR
-dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/
-OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+
-hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy
-tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
------END CERTIFICATE-----
diff --git a/misc/certs/58a44af1.0 b/misc/certs/58a44af1.0
deleted file mode 100644
index 8940ef5a..00000000
--- a/misc/certs/58a44af1.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYT
-AkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQ
-TS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG
-9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMB4XDTAyMTIxMzE0MjkyM1oXDTIw
-MTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAM
-BgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEO
-MAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2
-LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaI
-s9z4iPf930Pfeo2aSVz2TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2
-xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCWSo7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4
-u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYyHF2fYPepraX/z9E0+X1b
-F8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNdfrGoRpAx
-Vs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGd
-PDPQtQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNV
-HSAEDjAMMAoGCCqBegF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAx
-NjAfBgNVHSMEGDAWgBSjBS8YYFDCiQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUF
-AAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RKq89toB9RlPhJy3Q2FLwV3duJ
-L92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3QMZsyK10XZZOY
-YLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
-Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2a
-NjSaTFR+FwNIlQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R
-0982gaEbeC9xs/FZTEYYKKuF0mBWWg==
------END CERTIFICATE-----
diff --git a/misc/certs/590d426f.0 b/misc/certs/590d426f.0
deleted file mode 100644
index 3ccc18e8..00000000
--- a/misc/certs/590d426f.0
+++ /dev/null
@@ -1,83 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
-IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
-IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
-Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO
-BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi
-MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ
-ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ
-8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6
-zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y
-fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7
-w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc
-G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k
-epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q
-laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ
-QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU
-fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826
-YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w
-ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY
-gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe
-MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0
-IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy
-dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw
-czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0
-dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl
-aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC
-AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg
-b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB
-ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc
-nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg
-18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c
-gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl
-Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY
-sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T
-SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF
-CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum
-GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk
-zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW
-omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIHWTCCBUGgAwIBAgIDCkGKMA0GCSqGSIb3DQEBCwUAMHkxEDAOBgNVBAoTB1Jv
-b3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZ
-Q0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSc3VwcG9y
-dEBjYWNlcnQub3JnMB4XDTExMDUyMzE3NDgwMloXDTIxMDUyMDE3NDgwMlowVDEU
-MBIGA1UEChMLQ0FjZXJ0IEluYy4xHjAcBgNVBAsTFWh0dHA6Ly93d3cuQ0FjZXJ0
-Lm9yZzEcMBoGA1UEAxMTQ0FjZXJ0IENsYXNzIDMgUm9vdDCCAiIwDQYJKoZIhvcN
-AQEBBQADggIPADCCAgoCggIBAKtJNRFIfNImflOUz0Op3SjXQiqL84d4GVh8D57a
-iX3h++tykA10oZZkq5+gJJlz2uJVdscXe/UErEa4w75/ZI0QbCTzYZzA8pD6Ueb1
-aQFjww9W4kpCz+JEjCUoqMV5CX1GuYrz6fM0KQhF5Byfy5QEHIGoFLOYZcRD7E6C
-jQnRvapbjZLQ7N6QxX8KwuPr5jFaXnQ+lzNZ6MMDPWAzv/fRb0fEze5ig1JuLgia
-pNkVGJGmhZJHsK5I6223IeyFGmhyNav/8BBdwPSUp2rVO5J+TJAFfpPBLIukjmJ0
-FXFuC3ED6q8VOJrU0gVyb4z5K+taciX5OUbjchs+BMNkJyIQKopPWKcDrb60LhPt
-XapI19V91Cp7XPpGBFDkzA5CW4zt2/LP/JaT4NsRNlRiNDiPDGCbO5dWOK3z0luL
-oFvqTpa4fNfVoIZwQNORKbeiPK31jLvPGpKK5DR7wNhsX+kKwsOnIJpa3yxdUly6
-R9Wb7yQocDggL9V/KcCyQQNokszgnMyXS0XvOhAKq3A6mJVwrTWx6oUrpByAITGp
-rmB6gCZIALgBwJNjVSKRPFbnr9s6JfOPMVTqJouBWfmh0VMRxXudA/Z0EeBtsSw/
-LIaRmXGapneLNGDRFLQsrJ2vjBDTn8Rq+G8T/HNZ92ZCdB6K4/jc0m+YnMtHmJVA
-BfvpAgMBAAGjggINMIICCTAdBgNVHQ4EFgQUdahxYEyIE/B42Yl3tW3Fid+8sXow
-gaMGA1UdIwSBmzCBmIAUFrUyG9TH8+DmjvO90rA67rI5GNGhfaR7MHkxEDAOBgNV
-BAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAG
-A1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS
-c3VwcG9ydEBjYWNlcnQub3JnggEAMA8GA1UdEwEB/wQFMAMBAf8wXQYIKwYBBQUH
-AQEEUTBPMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5DQWNlcnQub3JnLzAoBggr
-BgEFBQcwAoYcaHR0cDovL3d3dy5DQWNlcnQub3JnL2NhLmNydDBKBgNVHSAEQzBB
-MD8GCCsGAQQBgZBKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuQ0FjZXJ0Lm9y
-Zy9pbmRleC5waHA/aWQ9MTAwNAYJYIZIAYb4QgEIBCcWJWh0dHA6Ly93d3cuQ0Fj
-ZXJ0Lm9yZy9pbmRleC5waHA/aWQ9MTAwUAYJYIZIAYb4QgENBEMWQVRvIGdldCB5
-b3VyIG93biBjZXJ0aWZpY2F0ZSBmb3IgRlJFRSwgZ28gdG8gaHR0cDovL3d3dy5D
-QWNlcnQub3JnMA0GCSqGSIb3DQEBCwUAA4ICAQApKIWuRKm5r6R5E/CooyuXYPNc
-7uMvwfbiZqARrjY3OnYVBFPqQvX56sAV2KaC2eRhrnILKVyQQ+hBsuF32wITRHhH
-Va9Y/MyY9kW50SD42CEH/m2qc9SzxgfpCYXMO/K2viwcJdVxjDm1Luq+GIG6sJO4
-D+Pm1yaMMVpyA4RS5qb1MyJFCsgLDYq4Nm+QCaGrvdfVTi5xotSu+qdUK+s1jVq3
-VIgv7nSf7UgWyg1I0JTTrKSi9iTfkuO960NAkW4cGI5WtIIS86mTn9S8nK2cde5a
-lxuV53QtHA+wLJef+6kzOXrnAzqSjiL2jA3k2X4Ndhj3AfnvlpaiVXPAPHG0HRpW
-Q7fDCo1y/OIQCQtBzoyUoPkD/XFzS4pXM+WOdH4VAQDmzEoc53+VGS3FpQyLu7Xt
-hbNc09+4ufLKxw0BFKxwWMWMjTPUnWajGlCVI/xI4AZDEtnNp4Y5LzZyo4AQ5OHz
-0ctbGsDkgJp8E3MGT9ujayQKurMcvEp4u+XjdTilSKeiHq921F73OIZWWonO1sOn
-ebJSoMbxhbQljPI/lrMQ2Y1sVzufb4Y6GIIiNsiwkTjbKqGTqoQ/9SdlrnPVyNXT
-d+pLncdBu8fA46A/5H2kjXPmEkvfoXNzczqA6NXLji/L6hOn1kGLrPo8idck9U60
-4GGSt/M3mMS+lqO3ig==
------END CERTIFICATE-----
diff --git a/misc/certs/594f1775.0 b/misc/certs/594f1775.0
deleted file mode 100644
index 676db975..00000000
--- a/misc/certs/594f1775.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
-UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
-dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
-MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
-dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
-BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
-cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
-AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
-MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
-aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
-ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
-IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
-MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
-A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
-7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
-1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
------END CERTIFICATE-----
diff --git a/misc/certs/5a3f0ff8.0 b/misc/certs/5a3f0ff8.0
deleted file mode 100644
index 6146dcb5..00000000
--- a/misc/certs/5a3f0ff8.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB
-gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
-A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
-BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw
-MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
-YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
-RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3
-UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI
-2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8
-Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
-+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
-DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
-nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW
-/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g
-PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u
-QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY
-SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv
-IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
-RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4
-zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd
-BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB
-ZQ==
------END CERTIFICATE-----
diff --git a/misc/certs/5a5372fc.0 b/misc/certs/5a5372fc.0
deleted file mode 100644
index dd373608..00000000
--- a/misc/certs/5a5372fc.0
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD
-EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05
-OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G
-A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
-Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l
-dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG
-SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK
-gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX
-iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc
-Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E
-BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G
-SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu
-b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh
-bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv
-Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln
-aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0
-IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
-c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph
-biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo
-ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP
-UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj
-YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo
-dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA
-bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06
-sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa
-n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS
-NitjrFgBazMpUIaD8QFI
------END CERTIFICATE-----
diff --git a/misc/certs/5ad8a5d6.0 b/misc/certs/5ad8a5d6.0
deleted file mode 100644
index f4ce4ca4..00000000
--- a/misc/certs/5ad8a5d6.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
-A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
-b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
-MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
-YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
-aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
-jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
-xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
-1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
-snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
-U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
-9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
-BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
-AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
-yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
-38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
-AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
-DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
-HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
------END CERTIFICATE-----
diff --git a/misc/certs/5c44d531.0 b/misc/certs/5c44d531.0
deleted file mode 100644
index cedf5967..00000000
--- a/misc/certs/5c44d531.0
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO
-TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh
-dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX
-DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl
-ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv
-b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291
-qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp
-uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU
-Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE
-pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp
-5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M
-UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN
-GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy
-5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv
-6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK
-eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6
-B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/
-BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov
-L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG
-SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS
-CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen
-5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897
-IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK
-gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL
-+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL
-vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm
-bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk
-N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC
-Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z
-ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ==
------END CERTIFICATE-----
diff --git a/misc/certs/5cf9d536.0 b/misc/certs/5cf9d536.0
deleted file mode 100644
index ffa4dbe4..00000000
--- a/misc/certs/5cf9d536.0
+++ /dev/null
@@ -1,34 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC
-TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz
-MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw
-IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR
-dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp
-li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D
-rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ
-WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug
-F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU
-xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC
-Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv
-dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw
-ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl
-IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh
-c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy
-ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
-Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI
-KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T
-KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq
-y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p
-dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD
-VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL
-MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk
-fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8
-7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R
-cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y
-mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW
-xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK
-SnQ2+Q==
------END CERTIFICATE-----
diff --git a/misc/certs/5e4e69e7.0 b/misc/certs/5e4e69e7.0
deleted file mode 100644
index e19fdea0..00000000
--- a/misc/certs/5e4e69e7.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
-ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
-U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp
-U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg
-SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln
-biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm
-GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve
-fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw
-AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ
-aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj
-aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW
-kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC
-4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga
-FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
------END CERTIFICATE-----
diff --git a/misc/certs/5ed36f99.0 b/misc/certs/5ed36f99.0
deleted file mode 100644
index 3ccc18e8..00000000
--- a/misc/certs/5ed36f99.0
+++ /dev/null
@@ -1,83 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
-IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
-IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
-Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO
-BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi
-MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ
-ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ
-8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6
-zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y
-fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7
-w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc
-G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k
-epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q
-laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ
-QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU
-fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826
-YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w
-ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY
-gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe
-MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0
-IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy
-dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw
-czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0
-dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl
-aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC
-AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg
-b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB
-ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc
-nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg
-18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c
-gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl
-Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY
-sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T
-SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF
-CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum
-GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk
-zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW
-omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIHWTCCBUGgAwIBAgIDCkGKMA0GCSqGSIb3DQEBCwUAMHkxEDAOBgNVBAoTB1Jv
-b3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZ
-Q0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSc3VwcG9y
-dEBjYWNlcnQub3JnMB4XDTExMDUyMzE3NDgwMloXDTIxMDUyMDE3NDgwMlowVDEU
-MBIGA1UEChMLQ0FjZXJ0IEluYy4xHjAcBgNVBAsTFWh0dHA6Ly93d3cuQ0FjZXJ0
-Lm9yZzEcMBoGA1UEAxMTQ0FjZXJ0IENsYXNzIDMgUm9vdDCCAiIwDQYJKoZIhvcN
-AQEBBQADggIPADCCAgoCggIBAKtJNRFIfNImflOUz0Op3SjXQiqL84d4GVh8D57a
-iX3h++tykA10oZZkq5+gJJlz2uJVdscXe/UErEa4w75/ZI0QbCTzYZzA8pD6Ueb1
-aQFjww9W4kpCz+JEjCUoqMV5CX1GuYrz6fM0KQhF5Byfy5QEHIGoFLOYZcRD7E6C
-jQnRvapbjZLQ7N6QxX8KwuPr5jFaXnQ+lzNZ6MMDPWAzv/fRb0fEze5ig1JuLgia
-pNkVGJGmhZJHsK5I6223IeyFGmhyNav/8BBdwPSUp2rVO5J+TJAFfpPBLIukjmJ0
-FXFuC3ED6q8VOJrU0gVyb4z5K+taciX5OUbjchs+BMNkJyIQKopPWKcDrb60LhPt
-XapI19V91Cp7XPpGBFDkzA5CW4zt2/LP/JaT4NsRNlRiNDiPDGCbO5dWOK3z0luL
-oFvqTpa4fNfVoIZwQNORKbeiPK31jLvPGpKK5DR7wNhsX+kKwsOnIJpa3yxdUly6
-R9Wb7yQocDggL9V/KcCyQQNokszgnMyXS0XvOhAKq3A6mJVwrTWx6oUrpByAITGp
-rmB6gCZIALgBwJNjVSKRPFbnr9s6JfOPMVTqJouBWfmh0VMRxXudA/Z0EeBtsSw/
-LIaRmXGapneLNGDRFLQsrJ2vjBDTn8Rq+G8T/HNZ92ZCdB6K4/jc0m+YnMtHmJVA
-BfvpAgMBAAGjggINMIICCTAdBgNVHQ4EFgQUdahxYEyIE/B42Yl3tW3Fid+8sXow
-gaMGA1UdIwSBmzCBmIAUFrUyG9TH8+DmjvO90rA67rI5GNGhfaR7MHkxEDAOBgNV
-BAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAG
-A1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS
-c3VwcG9ydEBjYWNlcnQub3JnggEAMA8GA1UdEwEB/wQFMAMBAf8wXQYIKwYBBQUH
-AQEEUTBPMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5DQWNlcnQub3JnLzAoBggr
-BgEFBQcwAoYcaHR0cDovL3d3dy5DQWNlcnQub3JnL2NhLmNydDBKBgNVHSAEQzBB
-MD8GCCsGAQQBgZBKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuQ0FjZXJ0Lm9y
-Zy9pbmRleC5waHA/aWQ9MTAwNAYJYIZIAYb4QgEIBCcWJWh0dHA6Ly93d3cuQ0Fj
-ZXJ0Lm9yZy9pbmRleC5waHA/aWQ9MTAwUAYJYIZIAYb4QgENBEMWQVRvIGdldCB5
-b3VyIG93biBjZXJ0aWZpY2F0ZSBmb3IgRlJFRSwgZ28gdG8gaHR0cDovL3d3dy5D
-QWNlcnQub3JnMA0GCSqGSIb3DQEBCwUAA4ICAQApKIWuRKm5r6R5E/CooyuXYPNc
-7uMvwfbiZqARrjY3OnYVBFPqQvX56sAV2KaC2eRhrnILKVyQQ+hBsuF32wITRHhH
-Va9Y/MyY9kW50SD42CEH/m2qc9SzxgfpCYXMO/K2viwcJdVxjDm1Luq+GIG6sJO4
-D+Pm1yaMMVpyA4RS5qb1MyJFCsgLDYq4Nm+QCaGrvdfVTi5xotSu+qdUK+s1jVq3
-VIgv7nSf7UgWyg1I0JTTrKSi9iTfkuO960NAkW4cGI5WtIIS86mTn9S8nK2cde5a
-lxuV53QtHA+wLJef+6kzOXrnAzqSjiL2jA3k2X4Ndhj3AfnvlpaiVXPAPHG0HRpW
-Q7fDCo1y/OIQCQtBzoyUoPkD/XFzS4pXM+WOdH4VAQDmzEoc53+VGS3FpQyLu7Xt
-hbNc09+4ufLKxw0BFKxwWMWMjTPUnWajGlCVI/xI4AZDEtnNp4Y5LzZyo4AQ5OHz
-0ctbGsDkgJp8E3MGT9ujayQKurMcvEp4u+XjdTilSKeiHq921F73OIZWWonO1sOn
-ebJSoMbxhbQljPI/lrMQ2Y1sVzufb4Y6GIIiNsiwkTjbKqGTqoQ/9SdlrnPVyNXT
-d+pLncdBu8fA46A/5H2kjXPmEkvfoXNzczqA6NXLji/L6hOn1kGLrPo8idck9U60
-4GGSt/M3mMS+lqO3ig==
------END CERTIFICATE-----
diff --git a/misc/certs/5f267794.0 b/misc/certs/5f267794.0
deleted file mode 100644
index 4b8939cc..00000000
--- a/misc/certs/5f267794.0
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
-ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
-KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
-ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
-MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
-ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
-b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
-bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
-U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
-A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
-I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
-wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
-AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
-oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
-BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
-dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
-MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
-b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
-dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
-MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
-E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
-MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
-hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
-95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
-2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
------END CERTIFICATE-----
diff --git a/misc/certs/5f47b495.0 b/misc/certs/5f47b495.0
deleted file mode 100644
index 5762f37e..00000000
--- a/misc/certs/5f47b495.0
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE
-BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w
-MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
-IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC
-SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1
-ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB
-MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv
-UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX
-4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9
-KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/
-gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb
-rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ
-51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F
-be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe
-KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F
-v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn
-fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7
-jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz
-ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
-ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL
-e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70
-jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz
-WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V
-SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j
-pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX
-X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok
-fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R
-K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU
-ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU
-LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT
-LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
------END CERTIFICATE-----
diff --git a/misc/certs/60afe812.0 b/misc/certs/60afe812.0
deleted file mode 100644
index 56b9ee47..00000000
--- a/misc/certs/60afe812.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG
-EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3
-MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl
-cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR
-dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB
-pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM
-b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm
-aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz
-IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT
-lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz
-AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5
-VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG
-ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2
-BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG
-AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M
-U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh
-bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C
-+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
-bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F
-uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2
-XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
------END CERTIFICATE-----
diff --git a/misc/certs/635ccfd5.0 b/misc/certs/635ccfd5.0
deleted file mode 100644
index 5f7c1ce4..00000000
--- a/misc/certs/635ccfd5.0
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD
-EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X
-DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw
-DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u
-c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr
-TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA
-OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC
-2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW
-RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P
-AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW
-ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0
-YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz
-b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO
-ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB
-IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs
-b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
-ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s
-YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg
-a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g
-SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0
-aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg
-YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg
-Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY
-ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g
-pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4
-Fp1hBWeAyNDYpQcCNJgEjTME1A==
------END CERTIFICATE-----
diff --git a/misc/certs/6410666e.0 b/misc/certs/6410666e.0
deleted file mode 100644
index 51187d8a..00000000
--- a/misc/certs/6410666e.0
+++ /dev/null
@@ -1,32 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/
-MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow
-PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
-AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR
-IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q
-gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy
-yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts
-F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2
-jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx
-ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC
-VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK
-YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH
-EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN
-Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud
-DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE
-MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK
-UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
-TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf
-qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK
-ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE
-JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7
-hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1
-EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm
-nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX
-udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz
-ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe
-LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl
-pYYsfPQS
------END CERTIFICATE-----
diff --git a/misc/certs/653b494a.0 b/misc/certs/653b494a.0
deleted file mode 100644
index 519028c6..00000000
--- a/misc/certs/653b494a.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
-RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
-VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
-DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
-ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
-VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
-mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
-IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
-mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
-XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
-dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
-jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
-BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
-DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
-9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
-jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
-Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
-ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
-R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
------END CERTIFICATE-----
diff --git a/misc/certs/656b3e35.0 b/misc/certs/656b3e35.0
deleted file mode 100644
index 75708ece..00000000
--- a/misc/certs/656b3e35.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIESzCCAzOgAwIBAgIJAJigUTEEXRQpMA0GCSqGSIb3DQEBBQUAMHYxCzAJBgNV
-BAYTAkRFMQ8wDQYDVQQIEwZIZXNzZW4xDjAMBgNVBAcTBUZ1bGRhMRAwDgYDVQQK
-EwdEZWJjb25mMRMwEQYDVQQDEwpEZWJjb25mIENBMR8wHQYJKoZIhvcNAQkBFhBq
-b2VyZ0BkZWJpYW4ub3JnMB4XDTA1MTEwNTE3NTUxNFoXDTE1MTEwMzE3NTUxNFow
-djELMAkGA1UEBhMCREUxDzANBgNVBAgTBkhlc3NlbjEOMAwGA1UEBxMFRnVsZGEx
-EDAOBgNVBAoTB0RlYmNvbmYxEzARBgNVBAMTCkRlYmNvbmYgQ0ExHzAdBgkqhkiG
-9w0BCQEWEGpvZXJnQGRlYmlhbi5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCvbOo0SrIwI5IMlsshH8WF3dHB9r9JlSKhMPaybawa1EyvZspMQ3wa
-F5qxNf3Sj+NElEmjseEqvCZiIIzqwerHu0Qw62cDYCdCd2+Wb5m0bPYB5CGHiyU1
-eNP0je42O0YeXG2BvUujN8AviocVo39X2YwNQ0ryy4OaqYgm2pRlbtT2ESbF+SfV
-Y2iqQj/f8ymF+lHo/pz8tbAqxWcqaSiHFAVQJrdqtFhtoodoNiE3q76zJoUkZTXB
-k60Yc3MJSnatZCpnsSBr/D7zpntl0THrUjjtdRWCjQVhqfhM1yZJV+ApbLdheFh0
-ZWlSxdnp25p0q0XYw/7G92ELyFDfBUUNAgMBAAGjgdswgdgwHQYDVR0OBBYEFMuV
-dFNb4mCWUFbcP5LOtxFLrEVTMIGoBgNVHSMEgaAwgZ2AFMuVdFNb4mCWUFbcP5LO
-txFLrEVToXqkeDB2MQswCQYDVQQGEwJERTEPMA0GA1UECBMGSGVzc2VuMQ4wDAYD
-VQQHEwVGdWxkYTEQMA4GA1UEChMHRGViY29uZjETMBEGA1UEAxMKRGViY29uZiBD
-QTEfMB0GCSqGSIb3DQEJARYQam9lcmdAZGViaWFuLm9yZ4IJAJigUTEEXRQpMAwG
-A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAGZXxHg4mnkvilRIM1EQfGdY
-S5b/WcyF2MYSTeTvK4aIB6VHwpZoZCnDGj2m2D3CkHT0upAD9o0zM1tdsfncLzV+
-mDT/jNmBtYo4QXx5vEPwvEIcgrWjwk7SyaEUhZjtolTkHB7ACl0oD0r71St4iEPR
-qTUCEXk2E47bg1Fz58wNt/yo2+4iqiRjg1XCH4evkQuhpW+dTZnDyFNqwSYZapOE
-TBA+9zBb6xD1KM2DdY7r4GiyYItN0BKLfuWbh9LXGbl1C+f4P11g+m2MPiavIeCe
-1iazG5pcS3KoTLACsYlEX24TINtg4kcuS81XdllcnsV3Kdts0nIqPj6uhTTZD0k=
------END CERTIFICATE-----
diff --git a/misc/certs/65b876bd.0 b/misc/certs/65b876bd.0
deleted file mode 100644
index ab1606c2..00000000
--- a/misc/certs/65b876bd.0
+++ /dev/null
@@ -1,30 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRS
-MRgwFgYDVQQHDA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJp
-bGltc2VsIHZlIFRla25vbG9qaWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSw
-VEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ryb25payB2ZSBLcmlwdG9sb2ppIEFy
-YcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNVBAsMGkthbXUgU2Vy
-dGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUgS8O2
-ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAe
-Fw0wNzA4MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIx
-GDAWBgNVBAcMD0dlYnplIC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmls
-aW1zZWwgdmUgVGVrbm9sb2ppayBBcmHFn3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBU
-QUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZlIEtyaXB0b2xvamkgQXJh
-xZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2FtdSBTZXJ0
-aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7Zr
-IFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4h
-gb46ezzb8R1Sf1n68yJMlaCQvEhOEav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yK
-O7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1xnnRFDDtG1hba+818qEhTsXO
-fJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR6Oqeyjh1jmKw
-lZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
-hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQID
-AQABo0IwQDAdBgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/
-BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmP
-NOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4N5EY3ATIZJkrGG2AA1nJrvhY0D7t
-wyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLTy9LQQfMmNkqblWwM
-7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYhLBOh
-gLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5n
-oN+J1q2MdqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUs
-yZyQ2uypQjyttgI=
------END CERTIFICATE-----
diff --git a/misc/certs/667c66d4.0 b/misc/certs/667c66d4.0
deleted file mode 100644
index 41b460e7..00000000
--- a/misc/certs/667c66d4.0
+++ /dev/null
@@ -1,34 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk
-MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0
-YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg
-Q0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYT
-AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp
-Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIICIjAN
-BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9
-m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdih
-FvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/
-TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3F
-EzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbco
-kdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBu
-HYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNF
-vJbNcA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo
-19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC
-L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJW
-bjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p/r+D5kNX
-JLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw
-FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
-BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzc
-K6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzf
-ky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7Ik
-Vh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQMbFamIp1TpBcahQq4FJHgmDmHtqB
-sfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e
-3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsR
-ls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ip
-mXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH
-b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksf
-rK/7DZBaZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmms
-hFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y
-zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6
-MBr1mmz0DlP5OlvRHA==
------END CERTIFICATE-----
diff --git a/misc/certs/67495436.0 b/misc/certs/67495436.0
deleted file mode 100644
index acfed9d2..00000000
--- a/misc/certs/67495436.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB
-rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
-Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
-MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV
-BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa
-Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl
-LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u
-MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl
-ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm
-gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8
-YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf
-b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9
-9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S
-zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk
-OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV
-HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA
-2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW
-oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
-t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c
-KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM
-m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu
-MdRAGmI0Nj81Aa6sY6A=
------END CERTIFICATE-----
diff --git a/misc/certs/67d559d1.0 b/misc/certs/67d559d1.0
deleted file mode 100644
index c5dad57a..00000000
--- a/misc/certs/67d559d1.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
-MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx
-MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV
-BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG
-29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk
-oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk
-3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL
-qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN
-nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw
-DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG
-MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX
-ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H
-DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO
-TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv
-kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w
-zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa
------END CERTIFICATE-----
diff --git a/misc/certs/69105f4f.0 b/misc/certs/69105f4f.0
deleted file mode 100644
index 2731638b..00000000
--- a/misc/certs/69105f4f.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
-b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
-cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
-JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
-mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
-wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
-VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
-AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
-AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
-BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
-pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
-dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
-fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
-NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
-H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
-+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
------END CERTIFICATE-----
diff --git a/misc/certs/6adf0799.0 b/misc/certs/6adf0799.0
deleted file mode 100644
index 2ba88cdd..00000000
--- a/misc/certs/6adf0799.0
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v
-dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0
-MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww
-KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G
-A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13
-5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE
-SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O
-JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu
-ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE
-AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB
-AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB
-CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw
-b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo
-7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/
-0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7
-nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
-x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ
-33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
------END CERTIFICATE-----
diff --git a/misc/certs/6b99d060.0 b/misc/certs/6b99d060.0
deleted file mode 100644
index 855485cf..00000000
--- a/misc/certs/6b99d060.0
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
-VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
-Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
-KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
-NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
-NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
-ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
-BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
-Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
-4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
-KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
-rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
-94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
-sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
-gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
-kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
-vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
-A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
-O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
-AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
-9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
-eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
-0vdXcDazv/wor3ElhVsT/h5/WrQ8
------END CERTIFICATE-----
diff --git a/misc/certs/6cc3c4c3.0 b/misc/certs/6cc3c4c3.0
deleted file mode 100644
index 27df192f..00000000
--- a/misc/certs/6cc3c4c3.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
-VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
-MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
-MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
-DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
-dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
-cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
-DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
-gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
-yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
-L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
-EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
-7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
-QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
-qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
------END CERTIFICATE-----
diff --git a/misc/certs/6e52cc39.0 b/misc/certs/6e52cc39.0
deleted file mode 100644
index 75708ece..00000000
--- a/misc/certs/6e52cc39.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIESzCCAzOgAwIBAgIJAJigUTEEXRQpMA0GCSqGSIb3DQEBBQUAMHYxCzAJBgNV
-BAYTAkRFMQ8wDQYDVQQIEwZIZXNzZW4xDjAMBgNVBAcTBUZ1bGRhMRAwDgYDVQQK
-EwdEZWJjb25mMRMwEQYDVQQDEwpEZWJjb25mIENBMR8wHQYJKoZIhvcNAQkBFhBq
-b2VyZ0BkZWJpYW4ub3JnMB4XDTA1MTEwNTE3NTUxNFoXDTE1MTEwMzE3NTUxNFow
-djELMAkGA1UEBhMCREUxDzANBgNVBAgTBkhlc3NlbjEOMAwGA1UEBxMFRnVsZGEx
-EDAOBgNVBAoTB0RlYmNvbmYxEzARBgNVBAMTCkRlYmNvbmYgQ0ExHzAdBgkqhkiG
-9w0BCQEWEGpvZXJnQGRlYmlhbi5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCvbOo0SrIwI5IMlsshH8WF3dHB9r9JlSKhMPaybawa1EyvZspMQ3wa
-F5qxNf3Sj+NElEmjseEqvCZiIIzqwerHu0Qw62cDYCdCd2+Wb5m0bPYB5CGHiyU1
-eNP0je42O0YeXG2BvUujN8AviocVo39X2YwNQ0ryy4OaqYgm2pRlbtT2ESbF+SfV
-Y2iqQj/f8ymF+lHo/pz8tbAqxWcqaSiHFAVQJrdqtFhtoodoNiE3q76zJoUkZTXB
-k60Yc3MJSnatZCpnsSBr/D7zpntl0THrUjjtdRWCjQVhqfhM1yZJV+ApbLdheFh0
-ZWlSxdnp25p0q0XYw/7G92ELyFDfBUUNAgMBAAGjgdswgdgwHQYDVR0OBBYEFMuV
-dFNb4mCWUFbcP5LOtxFLrEVTMIGoBgNVHSMEgaAwgZ2AFMuVdFNb4mCWUFbcP5LO
-txFLrEVToXqkeDB2MQswCQYDVQQGEwJERTEPMA0GA1UECBMGSGVzc2VuMQ4wDAYD
-VQQHEwVGdWxkYTEQMA4GA1UEChMHRGViY29uZjETMBEGA1UEAxMKRGViY29uZiBD
-QTEfMB0GCSqGSIb3DQEJARYQam9lcmdAZGViaWFuLm9yZ4IJAJigUTEEXRQpMAwG
-A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAGZXxHg4mnkvilRIM1EQfGdY
-S5b/WcyF2MYSTeTvK4aIB6VHwpZoZCnDGj2m2D3CkHT0upAD9o0zM1tdsfncLzV+
-mDT/jNmBtYo4QXx5vEPwvEIcgrWjwk7SyaEUhZjtolTkHB7ACl0oD0r71St4iEPR
-qTUCEXk2E47bg1Fz58wNt/yo2+4iqiRjg1XCH4evkQuhpW+dTZnDyFNqwSYZapOE
-TBA+9zBb6xD1KM2DdY7r4GiyYItN0BKLfuWbh9LXGbl1C+f4P11g+m2MPiavIeCe
-1iazG5pcS3KoTLACsYlEX24TINtg4kcuS81XdllcnsV3Kdts0nIqPj6uhTTZD0k=
------END CERTIFICATE-----
diff --git a/misc/certs/6e8bf996.0 b/misc/certs/6e8bf996.0
deleted file mode 100644
index b133fcb4..00000000
--- a/misc/certs/6e8bf996.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM
-MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
-QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM
-MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
-QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E
-jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo
-ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI
-ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu
-Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg
-AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7
-HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA
-uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa
-TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg
-xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q
-CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x
-O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs
-6GAqm4VKQPNriiTsBhYscw==
------END CERTIFICATE-----
diff --git a/misc/certs/6f2c1157.0 b/misc/certs/6f2c1157.0
deleted file mode 100644
index c60cce89..00000000
--- a/misc/certs/6f2c1157.0
+++ /dev/null
@@ -1,37 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsx
-CzAJBgNVBAYTAkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRp
-ZmljYWNpw7NuIERpZ2l0YWwgLSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwa
-QUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4wHhcNMDYxMTI3MjA0NjI5WhcNMzAw
-NDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+U29jaWVkYWQgQ2Ft
-ZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJhIFMu
-QS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkq
-hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeG
-qentLhM0R7LQcNzJPNCNyu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzL
-fDe3fezTf3MZsGqy2IiKLUV0qPezuMDU2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQ
-Y5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU34ojC2I+GdV75LaeHM/J4
-Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP2yYe68yQ
-54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+b
-MMCm8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48j
-ilSH5L887uvDdUhfHjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++Ej
-YfDIJss2yKHzMI+ko6Kh3VOz3vCaMh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/zt
-A/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK5lw1omdMEWux+IBkAC1vImHF
-rEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1bczwmPS9KvqfJ
-pxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCB
-lTCBkgYEVR0gADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFy
-YS5jb20vZHBjLzBaBggrBgEFBQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW50
-7WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2UgcHVlZGVuIGVuY29udHJhciBlbiBs
-YSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEfAygPU3zmpFmps4p6
-xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuXEpBc
-unvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/
-Jre7Ir5v/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dp
-ezy4ydV/NgIlqmjCMRW3MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42
-gzmRkBDI8ck1fj+404HGIGQatlDCIaR43NAvO2STdPCWkPHv+wlaNECW8DYSwaN0
-jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wkeZBWN7PGKX6jD/EpOe9+
-XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f/RWmnkJD
-W2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/
-RL5hRqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35r
-MDOhYil/SrnhLecUIw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxk
-BYn8eNZcLCZDqQ==
------END CERTIFICATE-----
diff --git a/misc/certs/6fcc125d.0 b/misc/certs/6fcc125d.0
deleted file mode 100644
index 6e1ccd8e..00000000
--- a/misc/certs/6fcc125d.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr
-MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl
-cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
-bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw
-CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h
-dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l
-cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h
-2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E
-lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV
-ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq
-299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t
-vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL
-dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
-AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF
-AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR
-zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3
-LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd
-7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw
-++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
-398znM/jra6O1I7mT1GvFpLgXPYHDw==
------END CERTIFICATE-----
diff --git a/misc/certs/706f604c.0 b/misc/certs/706f604c.0
deleted file mode 100644
index f21e6d8b..00000000
--- a/misc/certs/706f604c.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
-gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
-MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY
-UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx
-NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3
-dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy
-dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6
-38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP
-KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q
-DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4
-qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa
-JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi
-PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P
-BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs
-jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0
-eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD
-ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR
-vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
-qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa
-IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
-i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
-O+7ETPTsJ3xCwnR8gooJybQDJbw=
------END CERTIFICATE-----
diff --git a/misc/certs/72f369af.0 b/misc/certs/72f369af.0
deleted file mode 100644
index 053f4335..00000000
--- a/misc/certs/72f369af.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg
-Q2xhc3MgMiBDQSAxMB4XDTA2MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzEL
-MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD
-VQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7McXA0
-ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLX
-l18xoS830r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVB
-HfCuuCkslFJgNJQ72uA40Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B
-5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/RuFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3
-WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0PAQH/BAQD
-AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLP
-gcIV1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+
-DKhQ7SLHrQVMdvvt7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKu
-BctN518fV4bVIJwo+28TOPX2EZL2fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHs
-h7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5wwDX3OaJdZtB7WZ+oRxKaJyOk
-LY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
------END CERTIFICATE-----
diff --git a/misc/certs/72fa7371.0 b/misc/certs/72fa7371.0
deleted file mode 100644
index 2202c692..00000000
--- a/misc/certs/72fa7371.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
-pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
-13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
-U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
-F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
-oJ2daZH9
------END CERTIFICATE-----
diff --git a/misc/certs/74c26bd0.0 b/misc/certs/74c26bd0.0
deleted file mode 100644
index 03cb8458..00000000
--- a/misc/certs/74c26bd0.0
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
-ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
-MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
-dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
-c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
-UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
-58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
-o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
-MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
-aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
-A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
-Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
-8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
------END CERTIFICATE-----
diff --git a/misc/certs/755f7420.0 b/misc/certs/755f7420.0
deleted file mode 100644
index c5dad57a..00000000
--- a/misc/certs/755f7420.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
-MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx
-MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV
-BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG
-29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk
-oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk
-3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL
-qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN
-nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw
-DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG
-MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX
-ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H
-DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO
-TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv
-kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w
-zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa
------END CERTIFICATE-----
diff --git a/misc/certs/75680d2e.0 b/misc/certs/75680d2e.0
deleted file mode 100644
index 33c71ba9..00000000
--- a/misc/certs/75680d2e.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
-YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
-MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
-BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
-GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
-BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
-3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
-YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
-rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
-ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
-oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
-MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
-QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
-b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
-AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
-GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
-Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
-G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
-l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
-smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
------END CERTIFICATE-----
diff --git a/misc/certs/7651b327.0 b/misc/certs/7651b327.0
deleted file mode 100644
index d209ab6f..00000000
--- a/misc/certs/7651b327.0
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
-MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
-BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
-ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
-BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
-I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
-CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i
-2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWXbj9T/UWZYB2oK0z5XqcJ
-2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/D/xwzoiQ
------END CERTIFICATE-----
diff --git a/misc/certs/76579174.0 b/misc/certs/76579174.0
deleted file mode 100644
index f21e6d8b..00000000
--- a/misc/certs/76579174.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
-gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
-MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY
-UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx
-NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3
-dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy
-dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6
-38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP
-KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q
-DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4
-qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa
-JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi
-PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P
-BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs
-jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0
-eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD
-ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR
-vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
-qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa
-IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
-i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
-O+7ETPTsJ3xCwnR8gooJybQDJbw=
------END CERTIFICATE-----
diff --git a/misc/certs/7672ac4b.0 b/misc/certs/7672ac4b.0
deleted file mode 100644
index e764de4d..00000000
--- a/misc/certs/7672ac4b.0
+++ /dev/null
@@ -1,32 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjET
-MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAk
-BgNVBAMMHUNlcnRpbm9taXMgLSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4
-Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNl
-cnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYwJAYDVQQDDB1DZXJ0
-aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jY
-F1AMnmHawE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N
-8y4oH3DfVS9O7cdxbwlyLu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWe
-rP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K
-/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92NjMD2AR5vpTESOH2VwnHu
-7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9qc1pkIuVC
-28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6
-lSTClrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1E
-nn1So2+WLhl+HPNbxxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB
-0iSVL1N6aaLwD4ZFjliCK0wi1F6g530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql09
-5gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna4NH4+ej9Uji29YnfAgMBAAGj
-WzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQN
-jLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
-KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9s
-ov3/4gbIOZ/xWqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZM
-OH8oMDX/nyNTt7buFHAAQCvaR6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q
-619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40nJ+U8/aGH88bc62UeYdocMMzpXDn
-2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1BCxMjidPJC+iKunqj
-o3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjvJL1v
-nxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG
-5ERQL1TEqkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWq
-pdEdnV1j6CTmNhTih60bWfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZb
-dsLLO7XSAPCjDuGtbkD326C00EauFddEwk01+dIL8hf2rGbVJLJP0RyZwG71fet0
-BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/vgt2Fl43N+bYdJeimUV5
------END CERTIFICATE-----
diff --git a/misc/certs/76cb8f92.0 b/misc/certs/76cb8f92.0
deleted file mode 100644
index edbeb27e..00000000
--- a/misc/certs/76cb8f92.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG
-A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh
-bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE
-ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS
-b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5
-7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS
-J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y
-HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP
-t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz
-FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY
-XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/
-MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw
-hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js
-MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA
-A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj
-Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx
-XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o
-omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc
-A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
-WL1WMRJOEcgh4LMRkWXbtKaIOM5V
------END CERTIFICATE-----
diff --git a/misc/certs/76faf6c0.0 b/misc/certs/76faf6c0.0
deleted file mode 100644
index bda7b1aa..00000000
--- a/misc/certs/76faf6c0.0
+++ /dev/null
@@ -1,38 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
-GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
-b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV
-BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
-YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM
-V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB
-4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr
-H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd
-8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv
-vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT
-mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe
-btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc
-T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt
-WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ
-c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A
-4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD
-VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG
-CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0
-aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
-aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu
-dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw
-czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G
-A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC
-TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg
-Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0
-7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem
-d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd
-+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B
-4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN
-t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x
-DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57
-k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s
-zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j
-Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT
-mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK
-4SVhM7JZG+Ju1zdXtg2pEto=
------END CERTIFICATE-----
diff --git a/misc/certs/778e3cb0.0 b/misc/certs/778e3cb0.0
deleted file mode 100644
index 1c747eb5..00000000
--- a/misc/certs/778e3cb0.0
+++ /dev/null
@@ -1,26 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB
-kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw
-IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG
-EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
-VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu
-dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6
-E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ
-D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK
-4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq
-lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW
-bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB
-o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
-MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js
-LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr
-BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB
-AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
-Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj
-j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH
-KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv
-2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3
-mfnGV/TJVTl4uix5yaaIK/QI
------END CERTIFICATE-----
diff --git a/misc/certs/790a7190.0 b/misc/certs/790a7190.0
deleted file mode 100644
index 13a7df49..00000000
--- a/misc/certs/790a7190.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx
-ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w
-MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD
-VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx
-FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu
-ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7
-gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH
-fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a
-ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT
-ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF
-MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk
-c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto
-dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt
-aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI
-hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk
-QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/
-h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
-nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR
-rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2
-9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis=
------END CERTIFICATE-----
diff --git a/misc/certs/7999be0d.0 b/misc/certs/7999be0d.0
deleted file mode 100644
index bcb25297..00000000
--- a/misc/certs/7999be0d.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
-MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
-YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
-R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
-9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
-fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
-iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
-1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
-bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
-MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
-ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
-uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
-Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
-tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
-PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
-hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
-5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
------END CERTIFICATE-----
diff --git a/misc/certs/79ad8b43.0 b/misc/certs/79ad8b43.0
deleted file mode 100644
index 768a9eb9..00000000
--- a/misc/certs/79ad8b43.0
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
-ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw
-MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j
-LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ
-KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo
-RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu
-WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw
-Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD
-AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK
-eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM
-zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+
-WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
-/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==
------END CERTIFICATE-----
diff --git a/misc/certs/7a481e66.0 b/misc/certs/7a481e66.0
deleted file mode 100644
index 78e6ca59..00000000
--- a/misc/certs/7a481e66.0
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL
-MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
-BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
-Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1
-OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
-SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc
-VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW
-Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q
-Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2
-1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq
-ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1
-Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX
-XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
-dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6
-Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
-JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
-Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN
-irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8
-TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6
-g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB
-95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj
-S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A==
------END CERTIFICATE-----
diff --git a/misc/certs/7a819ef2.0 b/misc/certs/7a819ef2.0
deleted file mode 100644
index 35cc4eb5..00000000
--- a/misc/certs/7a819ef2.0
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
-GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
-b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV
-BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
-YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa
-GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg
-Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J
-WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB
-rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp
-+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1
-ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i
-Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz
-PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og
-/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH
-oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI
-yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud
-EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2
-A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL
-MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
-ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f
-BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn
-g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl
-fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K
-WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha
-B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc
-hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR
-TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD
-mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z
-ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y
-4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza
-8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
------END CERTIFICATE-----
diff --git a/misc/certs/7d0b38bd.0 b/misc/certs/7d0b38bd.0
deleted file mode 100644
index e19fdea0..00000000
--- a/misc/certs/7d0b38bd.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
-ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
-U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp
-U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg
-SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln
-biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm
-GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve
-fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw
-AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ
-aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj
-aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW
-kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC
-4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga
-FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
------END CERTIFICATE-----
diff --git a/misc/certs/7d3cd826.0 b/misc/certs/7d3cd826.0
deleted file mode 100644
index 2b609836..00000000
--- a/misc/certs/7d3cd826.0
+++ /dev/null
@@ -1,18 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy
-NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD
-cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs
-2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY
-JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE
-Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ
-n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A
-PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu
------END CERTIFICATE-----
diff --git a/misc/certs/7d453d8f.0 b/misc/certs/7d453d8f.0
deleted file mode 100644
index 68803644..00000000
--- a/misc/certs/7d453d8f.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
-N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
-KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
-kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
-CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
-Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
-imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
-2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
-DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
-/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
-F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
-TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
------END CERTIFICATE-----
diff --git a/misc/certs/7d5a75e4.0 b/misc/certs/7d5a75e4.0
deleted file mode 100644
index 5a265ef0..00000000
--- a/misc/certs/7d5a75e4.0
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMx
-IDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxs
-cyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9v
-dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcxMjEzMTcwNzU0WhcNMjIxMjE0
-MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdl
-bGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQD
-DC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+r
-WxxTkqxtnt3CxC5FlAM1iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjU
-Dk/41itMpBb570OYj7OeUt9tkTmPOL13i0Nj67eT/DBMHAGTthP796EfvyXhdDcs
-HqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8bJVhHlfXBIEyg1J55oNj
-z7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiBK0HmOFaf
-SZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/Slwxl
-AgMBAAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqG
-KGh0dHA6Ly9jcmwucGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0P
-AQH/BAQDAgHGMB0GA1UdDgQWBBQmlRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0j
-BIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGBi6SBiDCBhTELMAkGA1UEBhMC
-VVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNX
-ZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEB
-ALkVsUSRzCPIK0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd
-/ZDJPHV3V3p9+N701NX3leZ0bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pB
-A4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSljqHyita04pO2t/caaH/+Xc/77szWn
-k4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+esE2fDbbFwRnzVlhE9
-iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJtylv
-2G0xffX8oRAHh84vWdw+WNs=
------END CERTIFICATE-----
diff --git a/misc/certs/812e17de.0 b/misc/certs/812e17de.0
deleted file mode 100644
index 05879ff3..00000000
--- a/misc/certs/812e17de.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc
-MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj
-IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB
-IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE
-RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl
-U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290
-IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU
-ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC
-QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr
-rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S
-NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc
-QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH
-txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP
-BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
-AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp
-tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa
-IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl
-6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+
-xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
-Cm26OWMohpLzGITY+9HPBVZkVw==
------END CERTIFICATE-----
diff --git a/misc/certs/8160b96c.0 b/misc/certs/8160b96c.0
deleted file mode 100644
index aa844e75..00000000
--- a/misc/certs/8160b96c.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD
-VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0
-ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G
-CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y
-OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx
-FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp
-Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
-dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP
-kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc
-cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U
-fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7
-N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC
-xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1
-+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
-A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM
-Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG
-SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h
-mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk
-ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
-tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c
-2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t
-HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW
------END CERTIFICATE-----
diff --git a/misc/certs/81b9768f.0 b/misc/certs/81b9768f.0
deleted file mode 100644
index 9e6810ab..00000000
--- a/misc/certs/81b9768f.0
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
-ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
-MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
-LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
-RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
-+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
-PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
-xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
-Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
-hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
-EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
-FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
-nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
-eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
-hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
-Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
-vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
-+OkuE6N36B9K
------END CERTIFICATE-----
diff --git a/misc/certs/82223c44.0 b/misc/certs/82223c44.0
deleted file mode 100644
index 9daec241..00000000
--- a/misc/certs/82223c44.0
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg
-Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow
-TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw
-HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB
-BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr
-6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV
-L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91
-1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx
-MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ
-QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB
-arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr
-Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi
-FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS
-P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN
-9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP
-AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz
-uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h
-9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s
-A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t
-OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo
-+fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7
-KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2
-DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us
-H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ
-I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7
-5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h
-3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz
-Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA=
------END CERTIFICATE-----
diff --git a/misc/certs/8317b10c.0 b/misc/certs/8317b10c.0
deleted file mode 100644
index d9368cff..00000000
--- a/misc/certs/8317b10c.0
+++ /dev/null
@@ -1,39 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQD
-EzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVneXpvaSAoQ2xhc3MgUUEpIFRhbnVz
-aXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0bG9jay5odTAeFw0w
-MzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTERMA8G
-A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
-Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5l
-dExvY2sgTWlub3NpdGV0dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZh
-bnlraWFkbzEeMBwGCSqGSIb3DQEJARYPaW5mb0BuZXRsb2NrLmh1MIIBIjANBgkq
-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRVCacbvWy5FPSKAtt2/Goq
-eKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e8ia6AFQe
-r7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO5
-3Lhbm+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWd
-vLrqOU+L73Sa58XQ0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0l
-mT+1fMptsK6ZmfoIYOcZwvK9UdPM0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4IC
-wDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAQYwggJ1Bglg
-hkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2YW55IGEgTmV0
-TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
-biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQg
-ZWxla3Ryb25pa3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywg
-dmFsYW1pbnQgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6
-b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwgYXogQWx0YWxhbm9zIFN6ZXJ6b2Rl
-c2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kgZWxqYXJhcyBtZWd0
-ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczovL3d3
-dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0Bu
-ZXRsb2NrLm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBh
-bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRo
-ZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3
-Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0IGluZm9AbmV0bG9jay5u
-ZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3DQEBBQUA
-A4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQ
-MznNwNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+
-NFAwLvt/MpqNPfMgW/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCR
-VCHnpgu0mfVRQdzNo0ci2ccBgcTcR08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY
-83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR5qq5aKrN9p2QdRLqOBrKROi3
-macqaJVmlaut74nLYKkGEsaUR+ko
------END CERTIFICATE-----
diff --git a/misc/certs/8470719d.0 b/misc/certs/8470719d.0
deleted file mode 100644
index 8b30d110..00000000
--- a/misc/certs/8470719d.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6
-MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
-dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX
-BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy
-MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp
-eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg
-/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl
-wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh
-AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2
-PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu
-AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
-BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR
-MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc
-HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/
-Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+
-f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO
-rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch
-6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3
-7CAFYd4=
------END CERTIFICATE-----
diff --git a/misc/certs/84cba82f.0 b/misc/certs/84cba82f.0
deleted file mode 100644
index 4069c783..00000000
--- a/misc/certs/84cba82f.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGDAJUUjEPMA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykg
-MjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8
-dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMxMDI3MTdaFw0xNTAz
-MjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2Vy
-dGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYD
-VQQHDAZBTktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kg
-xLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEu
-xZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7
-XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GXyGl8hMW0kWxsE2qkVa2k
-heiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8iSi9BB35J
-YbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5C
-urKZ8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1
-JuTm5Rh8i27fbMx4W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51
-b0dewQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV
-9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46sWrv7/hg0Uw2ZkUd82YCdAR7
-kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxEq8Sn5RTOPEFh
-fEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
-B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdA
-aLX/7KfS0zgYnNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKS
-RGQDJereW26fyfJOrN3H
------END CERTIFICATE-----
diff --git a/misc/certs/85cde254.0 b/misc/certs/85cde254.0
deleted file mode 100644
index c1a0a481..00000000
--- a/misc/certs/85cde254.0
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
-HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs
-ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw
-MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
-b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj
-aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp
-Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg
-nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1
-HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N
-Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN
-dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0
-HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
-BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G
-CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU
-sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3
-4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg
-8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
-pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1
-mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
------END CERTIFICATE-----
diff --git a/misc/certs/861a399d.0 b/misc/certs/861a399d.0
deleted file mode 100644
index 43b8375f..00000000
--- a/misc/certs/861a399d.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw
-MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD
-VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul
-CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n
-tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl
-dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch
-PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC
-+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O
-BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E
-BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl
-MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk
-ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB
-IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X
-7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz
-43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
-eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl
-pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA
-WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
------END CERTIFICATE-----
diff --git a/misc/certs/861e0100.0 b/misc/certs/861e0100.0
deleted file mode 100644
index d9368cff..00000000
--- a/misc/certs/861e0100.0
+++ /dev/null
@@ -1,39 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQD
-EzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVneXpvaSAoQ2xhc3MgUUEpIFRhbnVz
-aXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0bG9jay5odTAeFw0w
-MzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTERMA8G
-A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
-Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5l
-dExvY2sgTWlub3NpdGV0dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZh
-bnlraWFkbzEeMBwGCSqGSIb3DQEJARYPaW5mb0BuZXRsb2NrLmh1MIIBIjANBgkq
-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRVCacbvWy5FPSKAtt2/Goq
-eKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e8ia6AFQe
-r7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO5
-3Lhbm+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWd
-vLrqOU+L73Sa58XQ0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0l
-mT+1fMptsK6ZmfoIYOcZwvK9UdPM0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4IC
-wDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAQYwggJ1Bglg
-hkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2YW55IGEgTmV0
-TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
-biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQg
-ZWxla3Ryb25pa3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywg
-dmFsYW1pbnQgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6
-b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwgYXogQWx0YWxhbm9zIFN6ZXJ6b2Rl
-c2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kgZWxqYXJhcyBtZWd0
-ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczovL3d3
-dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0Bu
-ZXRsb2NrLm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBh
-bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRo
-ZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3
-Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0IGluZm9AbmV0bG9jay5u
-ZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3DQEBBQUA
-A4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQ
-MznNwNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+
-NFAwLvt/MpqNPfMgW/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCR
-VCHnpgu0mfVRQdzNo0ci2ccBgcTcR08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY
-83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR5qq5aKrN9p2QdRLqOBrKROi3
-macqaJVmlaut74nLYKkGEsaUR+ko
------END CERTIFICATE-----
diff --git a/misc/certs/86212b19.0 b/misc/certs/86212b19.0
deleted file mode 100644
index 04f4a812..00000000
--- a/misc/certs/86212b19.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE
-BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
-dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL
-MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
-cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y
-YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua
-kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL
-QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp
-6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG
-yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i
-QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
-KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO
-tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu
-QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ
-Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u
-olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48
-x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
------END CERTIFICATE-----
diff --git a/misc/certs/876f1e28.0 b/misc/certs/876f1e28.0
deleted file mode 100644
index 3b1e6e82..00000000
--- a/misc/certs/876f1e28.0
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEW
-MBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkgRzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1
-OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoG
-A1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRzIwggIiMA0G
-CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8Oo1XJ
-JZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsD
-vfOpL9HG4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnoo
-D/Uefyf3lLE3PbfHkffiAez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/
-Q0kGi4xDuFby2X8hQxfqp0iVAXV16iulQ5XqFYSdCI0mblWbq9zSOdIxHWDirMxW
-RST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbsO+wmETRIjfaAKxojAuuK
-HDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8HvKTlXcxN
-nw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM
-0D4LnMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/i
-UUjXuG+v+E5+M5iSFGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9
-Ha90OrInwMEePnWjFqmveiJdnxMaz6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHg
-TuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJKoZIhvcNAQEL
-BQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K
-2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfX
-UfEpY9Z1zRbkJ4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl
-6/2o1PXWT6RbdejF0mCy2wl+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK
-9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG/+gyRr61M3Z3qAFdlsHB1b6uJcDJ
-HgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTcnIhT76IxW1hPkWLI
-wpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/XldblhY
-XzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5l
-IxKVCCIcl85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoo
-hdVddLHRDiBYmxOlsGOm7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulr
-so8uBtjRkcfGEvRM/TAXw8HaOFvjqermobp573PYtlNXLfbQ4ddI
------END CERTIFICATE-----
diff --git a/misc/certs/87753b0d.0 b/misc/certs/87753b0d.0
deleted file mode 100644
index bed6cd0d..00000000
--- a/misc/certs/87753b0d.0
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy
-c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD
-VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1
-c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
-AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81
-WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG
-FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq
-XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL
-se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb
-KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd
-IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73
-y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt
-hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc
-QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4
-Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV
-HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ
-KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
-dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ
-L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr
-Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo
-ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY
-T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz
-GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m
-1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV
-OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH
-6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX
-QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
------END CERTIFICATE-----
diff --git a/misc/certs/882de061.0 b/misc/certs/882de061.0
deleted file mode 100644
index 0a38740b..00000000
--- a/misc/certs/882de061.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT
-AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD
-QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP
-MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC
-ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do
-0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ
-UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d
-RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ
-OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv
-JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C
-AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O
-BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ
-LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY
-MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ
-44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I
-Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw
-i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN
-9u6wWk5JRFRYX0KD
------END CERTIFICATE-----
diff --git a/misc/certs/8867006a.0 b/misc/certs/8867006a.0
deleted file mode 100644
index bed6cd0d..00000000
--- a/misc/certs/8867006a.0
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy
-c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD
-VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1
-c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
-AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81
-WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG
-FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq
-XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL
-se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb
-KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd
-IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73
-y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt
-hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc
-QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4
-Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV
-HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ
-KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
-dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ
-L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr
-Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo
-ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY
-T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz
-GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m
-1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV
-OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH
-6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX
-QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
------END CERTIFICATE-----
diff --git a/misc/certs/88f89ea7.0 b/misc/certs/88f89ea7.0
deleted file mode 100644
index 4069c783..00000000
--- a/misc/certs/88f89ea7.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGDAJUUjEPMA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykg
-MjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8
-dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMxMDI3MTdaFw0xNTAz
-MjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2Vy
-dGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYD
-VQQHDAZBTktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kg
-xLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEu
-xZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7
-XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GXyGl8hMW0kWxsE2qkVa2k
-heiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8iSi9BB35J
-YbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5C
-urKZ8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1
-JuTm5Rh8i27fbMx4W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51
-b0dewQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV
-9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46sWrv7/hg0Uw2ZkUd82YCdAR7
-kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxEq8Sn5RTOPEFh
-fEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
-B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdA
-aLX/7KfS0zgYnNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKS
-RGQDJereW26fyfJOrN3H
------END CERTIFICATE-----
diff --git a/misc/certs/895cad1a.0 b/misc/certs/895cad1a.0
deleted file mode 100644
index c81744b5..00000000
--- a/misc/certs/895cad1a.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJD
-TjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2
-MDcwOTE0WhcNMjcwNDE2MDcwOTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMF
-Q05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzDo+/hn7E7SIX1mlwh
-IhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tizVHa6
-dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZO
-V/kbZKKTVrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrC
-GHn2emU1z5DrvTOTn1OrczvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gN
-v7Sg2Ca+I19zN38m5pIEo3/PIKe38zrKy5nLAgMBAAGjczBxMBEGCWCGSAGG+EIB
-AQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscCwQ7vptU7ETAPBgNVHRMB
-Af8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991SlgrHAsEO
-76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnK
-OOK5Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvH
-ugDnuL8BV8F3RTIMO/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7Hgvi
-yJA/qIYM/PmLXoXLT1tLYhFHxUV8BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fL
-buXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2G8kS1sHNzYDzAgE8yGnLRUhj
-2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5mmxE=
------END CERTIFICATE-----
diff --git a/misc/certs/89c02a45.0 b/misc/certs/89c02a45.0
deleted file mode 100644
index 546c95e3..00000000
--- a/misc/certs/89c02a45.0
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL
-MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
-BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT
-IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw
-MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy
-ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N
-T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR
-FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J
-cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW
-BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm
-fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv
-GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
------END CERTIFICATE-----
diff --git a/misc/certs/8b59b1ad.0 b/misc/certs/8b59b1ad.0
deleted file mode 100644
index b9665db7..00000000
--- a/misc/certs/8b59b1ad.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx
-MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB
-ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV
-BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV
-6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX
-GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP
-dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH
-1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF
-62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW
-BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw
-AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL
-MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU
-cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv
-b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6
-IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/
-iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
-GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh
-4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm
-XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
------END CERTIFICATE-----
diff --git a/misc/certs/8d86cdd1.0 b/misc/certs/8d86cdd1.0
deleted file mode 100644
index 0a38740b..00000000
--- a/misc/certs/8d86cdd1.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT
-AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD
-QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP
-MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC
-ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do
-0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ
-UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d
-RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ
-OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv
-JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C
-AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O
-BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ
-LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY
-MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ
-44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I
-Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw
-i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN
-9u6wWk5JRFRYX0KD
------END CERTIFICATE-----
diff --git a/misc/certs/8e52d3cd.0 b/misc/certs/8e52d3cd.0
deleted file mode 100644
index 6fdb6439..00000000
--- a/misc/certs/8e52d3cd.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg
-Q2xhc3MgMyBDQSAxMB4XDTA1MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzEL
-MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD
-VQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKxifZg
-isRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//z
-NIqeKNc0n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI
-+MkcVyzwPX6UvCWThOiaAJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2R
-hzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+
-mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0PAQH/BAQD
-AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFP
-Bdy7pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27s
-EzNxZy5p+qksP2bAEllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2
-mSlf56oBzKwzqBwKu5HEA6BvtjT5htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yC
-e/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQjel/wroQk5PMr+4okoyeYZdow
-dXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
------END CERTIFICATE-----
diff --git a/misc/certs/8f7b96c4.0 b/misc/certs/8f7b96c4.0
deleted file mode 100644
index e29f64ea..00000000
--- a/misc/certs/8f7b96c4.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj
-dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0
-NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD
-VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G
-vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/
-BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C
-AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl
-IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw
-NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq
-y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF
-MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
-A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy
-0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1
-E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN
------END CERTIFICATE-----
diff --git a/misc/certs/91739615.0 b/misc/certs/91739615.0
deleted file mode 100644
index 013d461d..00000000
--- a/misc/certs/91739615.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1
-MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
-czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
-CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy
-MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl
-ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS
-b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy
-euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO
-bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw
-WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d
-MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE
-1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD
-VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/
-zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB
-BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF
-BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV
-v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG
-E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
-uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW
-iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v
-GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0=
------END CERTIFICATE-----
diff --git a/misc/certs/930ac5d2.0 b/misc/certs/930ac5d2.0
deleted file mode 100644
index 5762f37e..00000000
--- a/misc/certs/930ac5d2.0
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE
-BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w
-MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
-IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC
-SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1
-ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB
-MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv
-UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX
-4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9
-KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/
-gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb
-rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ
-51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F
-be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe
-KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F
-v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn
-fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7
-jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz
-ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
-ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL
-e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70
-jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz
-WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V
-SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j
-pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX
-X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok
-fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R
-K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU
-ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU
-LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT
-LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
------END CERTIFICATE-----
diff --git a/misc/certs/9339512a.0 b/misc/certs/9339512a.0
deleted file mode 100644
index bda7b1aa..00000000
--- a/misc/certs/9339512a.0
+++ /dev/null
@@ -1,38 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
-GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
-b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV
-BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
-YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM
-V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB
-4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr
-H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd
-8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv
-vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT
-mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe
-btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc
-T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt
-WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ
-c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A
-4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD
-VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG
-CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0
-aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
-aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu
-dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw
-czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G
-A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC
-TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg
-Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0
-7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem
-d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd
-+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B
-4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN
-t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x
-DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57
-k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s
-zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j
-Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT
-mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK
-4SVhM7JZG+Ju1zdXtg2pEto=
------END CERTIFICATE-----
diff --git a/misc/certs/93bc0acc.0 b/misc/certs/93bc0acc.0
deleted file mode 100644
index 04f4a812..00000000
--- a/misc/certs/93bc0acc.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE
-BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
-dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL
-MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
-cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y
-YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua
-kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL
-QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp
-6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG
-yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i
-QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
-KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO
-tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu
-QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ
-Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u
-olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48
-x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
------END CERTIFICATE-----
diff --git a/misc/certs/95aff9e3.0 b/misc/certs/95aff9e3.0
deleted file mode 100644
index a04e656d..00000000
--- a/misc/certs/95aff9e3.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM
-MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D
-ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU
-cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3
-WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg
-Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw
-IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH
-UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM
-TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU
-BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM
-kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x
-AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV
-HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y
-sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL
-I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8
-J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY
-VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
-03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
------END CERTIFICATE-----
diff --git a/misc/certs/9685a493.0 b/misc/certs/9685a493.0
deleted file mode 100644
index a28e9a0e..00000000
--- a/misc/certs/9685a493.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx
-FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg
-Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG
-A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr
-b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ
-jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn
-PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh
-ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9
-nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h
-q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED
-MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC
-mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3
-7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB
-oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs
-EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO
-fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi
-AmvZWg==
------END CERTIFICATE-----
diff --git a/misc/certs/9772ca32.0 b/misc/certs/9772ca32.0
deleted file mode 100644
index 03c70c70..00000000
--- a/misc/certs/9772ca32.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
-MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
-R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
-MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
-Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
-AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
-ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
-7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
-kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
-mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
-KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
-6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
-4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
-oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
-UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
-AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
------END CERTIFICATE-----
diff --git a/misc/certs/9818ca0b.0 b/misc/certs/9818ca0b.0
deleted file mode 100644
index b7926f15..00000000
--- a/misc/certs/9818ca0b.0
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezEL
-MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
-BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1
-c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAeFw0wOTA5MDkwODE1MjdaFw0yOTEy
-MzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNUQyBUcnVzdENlbnRl
-ciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0ExKDAm
-BgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF
-5+cvAqBNLaT6hdqbJYUtQCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYv
-DIRlzg9uwliT6CwLOunBjvvya8o84pxOjuT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8v
-zArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+EutCHnNaYlAJ/Uqwa1D7KRT
-yGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1M4BDj5yj
-dipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBh
-MB8GA1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMB
-Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI
-4jANBgkqhkiG9w0BAQUFAAOCAQEAg8ev6n9NCjw5sWi+e22JLumzCecYV42Fmhfz
-dkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+KGwWaODIl0YgoGhnYIg5IFHY
-aAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhKBgePxLcHsU0G
-DeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV
-CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPH
-LQNjO9Po5KIqwoIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
------END CERTIFICATE-----
diff --git a/misc/certs/988a38cb.0 b/misc/certs/988a38cb.0
deleted file mode 100644
index 56b9ee47..00000000
--- a/misc/certs/988a38cb.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG
-EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3
-MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl
-cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR
-dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB
-pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM
-b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm
-aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz
-IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT
-lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz
-AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5
-VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG
-ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2
-BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG
-AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M
-U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh
-bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C
-+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
-bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F
-uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2
-XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
------END CERTIFICATE-----
diff --git a/misc/certs/98ec67f0.0 b/misc/certs/98ec67f0.0
deleted file mode 100644
index 51285e33..00000000
--- a/misc/certs/98ec67f0.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
-VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
-dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
-MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
-MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
-A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
-b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
-cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
-bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
-VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
-ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
-uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
-9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
-hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
-pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
------END CERTIFICATE-----
diff --git a/misc/certs/99d0fa06.0 b/misc/certs/99d0fa06.0
deleted file mode 100644
index 3ccc18e8..00000000
--- a/misc/certs/99d0fa06.0
+++ /dev/null
@@ -1,83 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
-IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
-IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
-Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO
-BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi
-MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ
-ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ
-8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6
-zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y
-fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7
-w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc
-G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k
-epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q
-laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ
-QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU
-fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826
-YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w
-ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY
-gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe
-MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0
-IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy
-dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw
-czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0
-dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl
-aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC
-AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg
-b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB
-ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc
-nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg
-18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c
-gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl
-Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY
-sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T
-SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF
-CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum
-GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk
-zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW
-omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIHWTCCBUGgAwIBAgIDCkGKMA0GCSqGSIb3DQEBCwUAMHkxEDAOBgNVBAoTB1Jv
-b3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZ
-Q0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSc3VwcG9y
-dEBjYWNlcnQub3JnMB4XDTExMDUyMzE3NDgwMloXDTIxMDUyMDE3NDgwMlowVDEU
-MBIGA1UEChMLQ0FjZXJ0IEluYy4xHjAcBgNVBAsTFWh0dHA6Ly93d3cuQ0FjZXJ0
-Lm9yZzEcMBoGA1UEAxMTQ0FjZXJ0IENsYXNzIDMgUm9vdDCCAiIwDQYJKoZIhvcN
-AQEBBQADggIPADCCAgoCggIBAKtJNRFIfNImflOUz0Op3SjXQiqL84d4GVh8D57a
-iX3h++tykA10oZZkq5+gJJlz2uJVdscXe/UErEa4w75/ZI0QbCTzYZzA8pD6Ueb1
-aQFjww9W4kpCz+JEjCUoqMV5CX1GuYrz6fM0KQhF5Byfy5QEHIGoFLOYZcRD7E6C
-jQnRvapbjZLQ7N6QxX8KwuPr5jFaXnQ+lzNZ6MMDPWAzv/fRb0fEze5ig1JuLgia
-pNkVGJGmhZJHsK5I6223IeyFGmhyNav/8BBdwPSUp2rVO5J+TJAFfpPBLIukjmJ0
-FXFuC3ED6q8VOJrU0gVyb4z5K+taciX5OUbjchs+BMNkJyIQKopPWKcDrb60LhPt
-XapI19V91Cp7XPpGBFDkzA5CW4zt2/LP/JaT4NsRNlRiNDiPDGCbO5dWOK3z0luL
-oFvqTpa4fNfVoIZwQNORKbeiPK31jLvPGpKK5DR7wNhsX+kKwsOnIJpa3yxdUly6
-R9Wb7yQocDggL9V/KcCyQQNokszgnMyXS0XvOhAKq3A6mJVwrTWx6oUrpByAITGp
-rmB6gCZIALgBwJNjVSKRPFbnr9s6JfOPMVTqJouBWfmh0VMRxXudA/Z0EeBtsSw/
-LIaRmXGapneLNGDRFLQsrJ2vjBDTn8Rq+G8T/HNZ92ZCdB6K4/jc0m+YnMtHmJVA
-BfvpAgMBAAGjggINMIICCTAdBgNVHQ4EFgQUdahxYEyIE/B42Yl3tW3Fid+8sXow
-gaMGA1UdIwSBmzCBmIAUFrUyG9TH8+DmjvO90rA67rI5GNGhfaR7MHkxEDAOBgNV
-BAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAG
-A1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS
-c3VwcG9ydEBjYWNlcnQub3JnggEAMA8GA1UdEwEB/wQFMAMBAf8wXQYIKwYBBQUH
-AQEEUTBPMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5DQWNlcnQub3JnLzAoBggr
-BgEFBQcwAoYcaHR0cDovL3d3dy5DQWNlcnQub3JnL2NhLmNydDBKBgNVHSAEQzBB
-MD8GCCsGAQQBgZBKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuQ0FjZXJ0Lm9y
-Zy9pbmRleC5waHA/aWQ9MTAwNAYJYIZIAYb4QgEIBCcWJWh0dHA6Ly93d3cuQ0Fj
-ZXJ0Lm9yZy9pbmRleC5waHA/aWQ9MTAwUAYJYIZIAYb4QgENBEMWQVRvIGdldCB5
-b3VyIG93biBjZXJ0aWZpY2F0ZSBmb3IgRlJFRSwgZ28gdG8gaHR0cDovL3d3dy5D
-QWNlcnQub3JnMA0GCSqGSIb3DQEBCwUAA4ICAQApKIWuRKm5r6R5E/CooyuXYPNc
-7uMvwfbiZqARrjY3OnYVBFPqQvX56sAV2KaC2eRhrnILKVyQQ+hBsuF32wITRHhH
-Va9Y/MyY9kW50SD42CEH/m2qc9SzxgfpCYXMO/K2viwcJdVxjDm1Luq+GIG6sJO4
-D+Pm1yaMMVpyA4RS5qb1MyJFCsgLDYq4Nm+QCaGrvdfVTi5xotSu+qdUK+s1jVq3
-VIgv7nSf7UgWyg1I0JTTrKSi9iTfkuO960NAkW4cGI5WtIIS86mTn9S8nK2cde5a
-lxuV53QtHA+wLJef+6kzOXrnAzqSjiL2jA3k2X4Ndhj3AfnvlpaiVXPAPHG0HRpW
-Q7fDCo1y/OIQCQtBzoyUoPkD/XFzS4pXM+WOdH4VAQDmzEoc53+VGS3FpQyLu7Xt
-hbNc09+4ufLKxw0BFKxwWMWMjTPUnWajGlCVI/xI4AZDEtnNp4Y5LzZyo4AQ5OHz
-0ctbGsDkgJp8E3MGT9ujayQKurMcvEp4u+XjdTilSKeiHq921F73OIZWWonO1sOn
-ebJSoMbxhbQljPI/lrMQ2Y1sVzufb4Y6GIIiNsiwkTjbKqGTqoQ/9SdlrnPVyNXT
-d+pLncdBu8fA46A/5H2kjXPmEkvfoXNzczqA6NXLji/L6hOn1kGLrPo8idck9U60
-4GGSt/M3mMS+lqO3ig==
------END CERTIFICATE-----
diff --git a/misc/certs/9a3db647.0 b/misc/certs/9a3db647.0
deleted file mode 100644
index 7d83bc84..00000000
--- a/misc/certs/9a3db647.0
+++ /dev/null
@@ -1,37 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGYDCCBEigAwIBAgIJAMrXjAsE+ETAMA0GCSqGSIb3DQEBBAUAMGgxCzAJBgNV
-BAYTAkZSMQ4wDAYDVQQKEwVHQU5ESTErMCkGA1UEAxMiR2FuZGkgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgdjEuMTEcMBoGCSqGSIb3DQEJARYNbm9jQGdhbmRpLm5l
-dDAeFw0wNjEwMTMxMzUxMTFaFw0xNjEwMTAxMzUxMTFaMGgxCzAJBgNVBAYTAkZS
-MQ4wDAYDVQQKEwVHQU5ESTErMCkGA1UEAxMiR2FuZGkgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkgdjEuMTEcMBoGCSqGSIb3DQEJARYNbm9jQGdhbmRpLm5ldDCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALKenXL3I12vH0p9w9gVtUAU/H7E
-Lgt3uDuTUIRJOuienetnwJR/e3hXpjrA/Zhr4ukdmSvnydb/InTjb9LctqSJwJbl
-wuHGi3DUtLfAZHNzJpKP/6ZKKYITRLiCBVKwiVD/DTT8gw5uC/wZCSO6t5VzAcZ1
-rjBU5XxaZL6HIpyHYx7zmfcweUZXrwa7Ki94/vTezeHWtb9wxe+EKE0AYKt0wQOA
-G4Z1mEkewXWSf9eqUBm3HHlB1FmippKVwp8GPNadB2mtSJFB9dDBCsd4GCfoDG/i
-ejmf4bSNBDmT7mLUqBrQk0HYrWFq6byG9/3pTBmT+NsAZGqpokXhj7jCznKUNxZe
-1NeR2cGEuGnxPcwRc+SUtqYTlNDbSZ0KrhJfidLcX4c/2aaTyNUsbJkAHHTD7F+L
-Qqra1vhmHYA06nOF6i1jgksacJlrGXSq68NXLWtXFhTY2Xd38ZBnsbVEu0M2BsmD
-kuW29r5fODtthUrHmH/s3zg20NGUCpNVTrwrK70UR0qAfewJ/+uInr/7YLq9kQTO
-OuJgCDdqmb8nTuKPH7dGvsAB/XkxO0a1kbzEEMRLuoOxqaz27+3syyfn9974sfIU
-HKMc+k1gQF3/9yrr3MmKnJMcPXuJ5DTi6WXRwsT/fqSSxxVikiL2LkG+Sx7XsSIy
-AKHyRm3a0RdvXDdrAgMBAAGjggELMIIBBzAdBgNVHQ4EFgQU9hfW5YjchtRUaE00
-1S859peLDzkwgZoGA1UdIwSBkjCBj4AU9hfW5YjchtRUaE001S859peLDzmhbKRq
-MGgxCzAJBgNVBAYTAkZSMQ4wDAYDVQQKEwVHQU5ESTErMCkGA1UEAxMiR2FuZGkg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgdjEuMTEcMBoGCSqGSIb3DQEJARYNbm9j
-QGdhbmRpLm5ldIIJAMrXjAsE+ETAMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQD
-AgEGMBEGCWCGSAGG+EIBAQQEAwIBBjAYBgNVHREEETAPgQ1ub2NAZ2FuZGkubmV0
-MA0GCSqGSIb3DQEBBAUAA4ICAQARq1aB1NhNyCCC5vOWWfoxGQWdPi9YBKUfD0CY
-HTukJI5BIm9RO9NPmVL/0kKE9CEVcVfWotD1tHNLBGsFlKlG8adOg8S24fw+tZa3
-C3HU0fNcSg+6lQJQetrQxKjvORRsTIRI9ikV0FAmlt/OZXfkYU/nh7dUsDroDfps
-608KRpDfcCCz1r/k4G/iv26mM+tLFvRAsNvq+kp+gIApYVQHu0eK+MCmUmq1t2kH
-MB6+zlSN+lOCErVHEAuUAbndbnynadox6HeUk7pwODRukMzzqb2Jmp/Q5l+I/8Oz
-vfeDQK35KAiZaOYr7SG1dB4ys0mV7KFItjGGkGM2tTS/+4tLBcfSHN3rd7mvdAbQ
-4912VpHDo0wzNmieeF5OlIyY8mSq/NMtZzylaU2uJ3wO/V2bvQEugggO0HzKMwLG
-a7e68g045lClPizJ82Q4Z7F2Sc0znEnvs+u7UeDk+UARRs/SUUlOUI93mQdHlek9
-/SEDuf7x0ZhDhVfQEhAGMuLQESS/+BevxlnRraHCrRre64qLnlehvjlHzS6fyV9u
-b2X4PoCxX6yUPOHXHsmjibrmra8H+q063zXYhJE4dWJM8E2Zqjn1nS143WF2j3LS
-StdCCa7zMsGb8oH3LvVfoSzl2lAOkUsjblz9P9SYmyLfmI1xT1nu/sfgIbEabx+b
-5vReDA==
------END CERTIFICATE-----
diff --git a/misc/certs/9af9f759.0 b/misc/certs/9af9f759.0
deleted file mode 100644
index 2b609836..00000000
--- a/misc/certs/9af9f759.0
+++ /dev/null
@@ -1,18 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy
-NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD
-cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs
-2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY
-JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE
-Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ
-n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A
-PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu
------END CERTIFICATE-----
diff --git a/misc/certs/9b353c9a.0 b/misc/certs/9b353c9a.0
deleted file mode 100644
index 21ccc8f1..00000000
--- a/misc/certs/9b353c9a.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE
-SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg
-Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV
-BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl
-cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA
-vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu
-Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a
-0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1
-4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN
-eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD
-R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG
-A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu
-dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME
-Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3
-WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw
-HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ
-KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO
-Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX
-wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
-2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89
-9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0
-jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38
-aQNiuJkFBT1reBK9sG9l
------END CERTIFICATE-----
diff --git a/misc/certs/9c2e7d30.0 b/misc/certs/9c2e7d30.0
deleted file mode 100644
index 36a998d2..00000000
--- a/misc/certs/9c2e7d30.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
-MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx
-MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV
-BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o
-Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt
-5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s
-3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej
-vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu
-8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw
-DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG
-MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil
-zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/
-3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD
-FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6
-Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2
-ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M
------END CERTIFICATE-----
diff --git a/misc/certs/9c472bf7.0 b/misc/certs/9c472bf7.0
deleted file mode 100644
index 23ddad0b..00000000
--- a/misc/certs/9c472bf7.0
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJB
-VDFIMEYGA1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBp
-bSBlbGVrdHIuIERhdGVudmVya2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5R
-dWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5RdWFsLTAzMB4XDTA1MDgxNzIyMDAw
-MFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgwRgYDVQQKDD9BLVRy
-dXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0ZW52
-ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMM
-EEEtVHJ1c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCtPWFuA/OQO8BBC4SAzewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUj
-lUC5B3ilJfYKvUWG6Nm9wASOhURh73+nyfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZ
-znF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPESU7l0+m0iKsMrmKS1GWH
-2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4iHQF63n1
-k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs
-2e3Vcuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYD
-VR0OBAoECERqlWdVeRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
-AQEAVdRU0VlIXLOThaq/Yy/kgM40ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fG
-KOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmrsQd7TZjTXLDR8KdCoLXEjq/+
-8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZdJXDRZslo+S4R
-FGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
-mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmE
-DNuxUCAKGkq6ahq97BvIxYSazQ==
------END CERTIFICATE-----
diff --git a/misc/certs/9c8dfbd4.0 b/misc/certs/9c8dfbd4.0
deleted file mode 100644
index 4bcc6a43..00000000
--- a/misc/certs/9c8dfbd4.0
+++ /dev/null
@@ -1,13 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC
-VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ
-cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ
-BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt
-VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D
-0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9
-ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G
-A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs
-aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I
-flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ==
------END CERTIFICATE-----
diff --git a/misc/certs/9d520b32.0 b/misc/certs/9d520b32.0
deleted file mode 100644
index de75da58..00000000
--- a/misc/certs/9d520b32.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDEl
-MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMh
-U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIz
-MloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09N
-IFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNlY3VyaXR5IENvbW11
-bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSE
-RMqm4miO/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gO
-zXppFodEtZDkBp2uoQSXWHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5
-bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4zZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDF
-MxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4bepJz11sS6/vmsJWXMY1
-VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK9U2vP9eC
-OKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G
-CSqGSIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HW
-tWS3irO4G8za+6xmiEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZ
-q51ihPZRwSzJIxXYKLerJRO1RuGGAv8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDb
-EJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnWmHyojf6GPgcWkuF75x3sM3Z+
-Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEWT1MKZPlO9L9O
-VL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
------END CERTIFICATE-----
diff --git a/misc/certs/9d6523ce.0 b/misc/certs/9d6523ce.0
deleted file mode 100644
index 4b542569..00000000
--- a/misc/certs/9d6523ce.0
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe
-MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0
-ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
-Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw
-IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL
-SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF
-AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH
-SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh
-ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X
-DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1
-TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ
-fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA
-sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU
-WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS
-nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH
-dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip
-NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC
-AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF
-MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
-ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB
-uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl
-PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP
-JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/
-gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2
-j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6
-5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB
-o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS
-/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z
-Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE
-W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D
-hNQ+IIX3Sj0rnP0qCglN6oH4EZw=
------END CERTIFICATE-----
diff --git a/misc/certs/9dbefe7b.0 b/misc/certs/9dbefe7b.0
deleted file mode 100644
index de75da58..00000000
--- a/misc/certs/9dbefe7b.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDEl
-MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMh
-U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIz
-MloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09N
-IFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNlY3VyaXR5IENvbW11
-bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSE
-RMqm4miO/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gO
-zXppFodEtZDkBp2uoQSXWHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5
-bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4zZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDF
-MxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4bepJz11sS6/vmsJWXMY1
-VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK9U2vP9eC
-OKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G
-CSqGSIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HW
-tWS3irO4G8za+6xmiEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZ
-q51ihPZRwSzJIxXYKLerJRO1RuGGAv8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDb
-EJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnWmHyojf6GPgcWkuF75x3sM3Z+
-Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEWT1MKZPlO9L9O
-VL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
------END CERTIFICATE-----
diff --git a/misc/certs/9ec3a561.0 b/misc/certs/9ec3a561.0
deleted file mode 100644
index 97c392fa..00000000
--- a/misc/certs/9ec3a561.0
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB
-rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt
-Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa
-Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV
-BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l
-dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE
-AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B
-YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9
-hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l
-L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm
-SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM
-1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws
-6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud
-DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw
-Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50
-aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
-AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u
-7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0
-xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ
-rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim
-eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk
-USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
------END CERTIFICATE-----
diff --git a/misc/certs/9f533518.0 b/misc/certs/9f533518.0
deleted file mode 100644
index 70b4ce41..00000000
--- a/misc/certs/9f533518.0
+++ /dev/null
@@ -1,41 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD
-VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0
-IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3
-MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
-aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx
-MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy
-cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG
-A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl
-BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI
-hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed
-KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7
-G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2
-zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4
-ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG
-HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2
-Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V
-yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e
-beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r
-6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
-wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog
-zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW
-BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr
-ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp
-ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk
-cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt
-YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC
-CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow
-KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI
-hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ
-UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz
-X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x
-fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz
-a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd
-Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd
-SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O
-AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso
-M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge
-v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
-09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
------END CERTIFICATE-----
diff --git a/misc/certs/9f541fb4.0 b/misc/certs/9f541fb4.0
deleted file mode 100644
index 32b72ee3..00000000
--- a/misc/certs/9f541fb4.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
-UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
-EwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJ
-BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
-ETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC/
-k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGODVvso
-LeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3o
-TQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCG
-SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
-JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
-RFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3
-MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6C
-TShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5
-WzAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
-SIb3DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR
-xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL
-B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID
------END CERTIFICATE-----
diff --git a/misc/certs/A-Trust-nQual-03.pem b/misc/certs/A-Trust-nQual-03.pem
deleted file mode 100644
index 23ddad0b..00000000
--- a/misc/certs/A-Trust-nQual-03.pem
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJB
-VDFIMEYGA1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBp
-bSBlbGVrdHIuIERhdGVudmVya2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5R
-dWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5RdWFsLTAzMB4XDTA1MDgxNzIyMDAw
-MFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgwRgYDVQQKDD9BLVRy
-dXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0ZW52
-ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMM
-EEEtVHJ1c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCtPWFuA/OQO8BBC4SAzewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUj
-lUC5B3ilJfYKvUWG6Nm9wASOhURh73+nyfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZ
-znF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPESU7l0+m0iKsMrmKS1GWH
-2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4iHQF63n1
-k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs
-2e3Vcuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYD
-VR0OBAoECERqlWdVeRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
-AQEAVdRU0VlIXLOThaq/Yy/kgM40ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fG
-KOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmrsQd7TZjTXLDR8KdCoLXEjq/+
-8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZdJXDRZslo+S4R
-FGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
-mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmE
-DNuxUCAKGkq6ahq97BvIxYSazQ==
------END CERTIFICATE-----
diff --git a/misc/certs/ACEDICOM_Root.pem b/misc/certs/ACEDICOM_Root.pem
deleted file mode 100644
index 44e96735..00000000
--- a/misc/certs/ACEDICOM_Root.pem
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UE
-AwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00x
-CzAJBgNVBAYTAkVTMB4XDTA4MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEW
-MBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZF
-RElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
-AgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHkWLn7
-09gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7
-XBZXehuDYAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5P
-Grjm6gSSrj0RuVFCPYewMYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAK
-t0SdE3QrwqXrIhWYENiLxQSfHY9g5QYbm8+5eaA9oiM/Qj9r+hwDezCNzmzAv+Yb
-X79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbkHQl/Sog4P75n/TSW9R28
-MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTTxKJxqvQU
-fecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI
-2Sf23EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyH
-K9caUPgn6C9D4zq92Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEae
-ZAwUswdbxcJzbPEHXEUkFDWug/FqTYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAP
-BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz4SsrSbbXc6GqlPUB53NlTKxQ
-MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU9QHnc2VMrFAw
-RAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
-bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWIm
-fQwng4/F9tqgaHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3
-gvoFNTPhNahXwOf9jU8/kzJPeGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKe
-I6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1PwkzQSulgUV1qzOMPPKC8W64iLgpq0i
-5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1ThCojz2GuHURwCRi
-ipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oIKiMn
-MCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZ
-o5NjEFIqnxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6
-zqylfDJKZ0DcMDQj3dcEI2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacN
-GHk0vFQYXlPKNFHtRQrmjseCNj6nOGOpMCwXEGCSn1WHElkQwg9naRHMTh5+Spqt
-r0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3otkYNbn5XOmeUwssfnHdK
-Z05phkOTOPu220+DkdRgfks+KzgHVZhepA==
------END CERTIFICATE-----
diff --git a/misc/certs/AC_Raíz_Certicámara_S.A..pem b/misc/certs/AC_Raíz_Certicámara_S.A..pem
deleted file mode 100644
index c60cce89..00000000
--- a/misc/certs/AC_Raíz_Certicámara_S.A..pem
+++ /dev/null
@@ -1,37 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsx
-CzAJBgNVBAYTAkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRp
-ZmljYWNpw7NuIERpZ2l0YWwgLSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwa
-QUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4wHhcNMDYxMTI3MjA0NjI5WhcNMzAw
-NDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+U29jaWVkYWQgQ2Ft
-ZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJhIFMu
-QS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkq
-hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeG
-qentLhM0R7LQcNzJPNCNyu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzL
-fDe3fezTf3MZsGqy2IiKLUV0qPezuMDU2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQ
-Y5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU34ojC2I+GdV75LaeHM/J4
-Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP2yYe68yQ
-54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+b
-MMCm8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48j
-ilSH5L887uvDdUhfHjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++Ej
-YfDIJss2yKHzMI+ko6Kh3VOz3vCaMh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/zt
-A/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK5lw1omdMEWux+IBkAC1vImHF
-rEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1bczwmPS9KvqfJ
-pxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCB
-lTCBkgYEVR0gADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFy
-YS5jb20vZHBjLzBaBggrBgEFBQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW50
-7WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2UgcHVlZGVuIGVuY29udHJhciBlbiBs
-YSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEfAygPU3zmpFmps4p6
-xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuXEpBc
-unvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/
-Jre7Ir5v/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dp
-ezy4ydV/NgIlqmjCMRW3MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42
-gzmRkBDI8ck1fj+404HGIGQatlDCIaR43NAvO2STdPCWkPHv+wlaNECW8DYSwaN0
-jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wkeZBWN7PGKX6jD/EpOe9+
-XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f/RWmnkJD
-W2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/
-RL5hRqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35r
-MDOhYil/SrnhLecUIw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxk
-BYn8eNZcLCZDqQ==
------END CERTIFICATE-----
diff --git a/misc/certs/Actalis_Authentication_Root_CA.pem b/misc/certs/Actalis_Authentication_Root_CA.pem
deleted file mode 100644
index 5762f37e..00000000
--- a/misc/certs/Actalis_Authentication_Root_CA.pem
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE
-BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w
-MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
-IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC
-SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1
-ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB
-MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv
-UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX
-4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9
-KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/
-gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb
-rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ
-51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F
-be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe
-KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F
-v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn
-fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7
-jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz
-ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
-ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL
-e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70
-jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz
-WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V
-SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j
-pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX
-X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok
-fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R
-K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU
-ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU
-LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT
-LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
------END CERTIFICATE-----
diff --git a/misc/certs/AddTrust_External_Root.pem b/misc/certs/AddTrust_External_Root.pem
deleted file mode 100644
index 20585f1c..00000000
--- a/misc/certs/AddTrust_External_Root.pem
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
-IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
-MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
-FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
-bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
-H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
-uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
-mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
-a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
-E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
-WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
-VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
-Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
-cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
-IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
-AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
-YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
-6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
-Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
-c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
-mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
------END CERTIFICATE-----
diff --git a/misc/certs/AddTrust_Low-Value_Services_Root.pem b/misc/certs/AddTrust_Low-Value_Services_Root.pem
deleted file mode 100644
index 43b8375f..00000000
--- a/misc/certs/AddTrust_Low-Value_Services_Root.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw
-MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD
-VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul
-CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n
-tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl
-dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch
-PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC
-+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O
-BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E
-BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl
-MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk
-ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB
-IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X
-7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz
-43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
-eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl
-pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA
-WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
------END CERTIFICATE-----
diff --git a/misc/certs/AddTrust_Public_Services_Root.pem b/misc/certs/AddTrust_Public_Services_Root.pem
deleted file mode 100644
index b9665db7..00000000
--- a/misc/certs/AddTrust_Public_Services_Root.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx
-MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB
-ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV
-BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV
-6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX
-GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP
-dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH
-1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF
-62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW
-BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw
-AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL
-MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU
-cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv
-b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6
-IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/
-iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
-GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh
-4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm
-XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
------END CERTIFICATE-----
diff --git a/misc/certs/AddTrust_Qualified_Certificates_Root.pem b/misc/certs/AddTrust_Qualified_Certificates_Root.pem
deleted file mode 100644
index ad3800d5..00000000
--- a/misc/certs/AddTrust_Qualified_Certificates_Root.pem
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1
-MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK
-EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh
-BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq
-xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G
-87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i
-2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U
-WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1
-0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G
-A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T
-AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr
-pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL
-ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm
-aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv
-hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm
-hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
-dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3
-P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y
-iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no
-xqE=
------END CERTIFICATE-----
diff --git a/misc/certs/AffirmTrust_Commercial.pem b/misc/certs/AffirmTrust_Commercial.pem
deleted file mode 100644
index 73a33674..00000000
--- a/misc/certs/AffirmTrust_Commercial.pem
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE
-BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
-dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL
-MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
-cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP
-Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr
-ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL
-MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1
-yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr
-VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/
-nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
-KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG
-XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj
-vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt
-Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g
-N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC
-nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
------END CERTIFICATE-----
diff --git a/misc/certs/AffirmTrust_Networking.pem b/misc/certs/AffirmTrust_Networking.pem
deleted file mode 100644
index 04f4a812..00000000
--- a/misc/certs/AffirmTrust_Networking.pem
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE
-BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
-dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL
-MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
-cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y
-YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua
-kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL
-QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp
-6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG
-yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i
-QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
-KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO
-tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu
-QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ
-Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u
-olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48
-x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
------END CERTIFICATE-----
diff --git a/misc/certs/AffirmTrust_Premium.pem b/misc/certs/AffirmTrust_Premium.pem
deleted file mode 100644
index 516ecf55..00000000
--- a/misc/certs/AffirmTrust_Premium.pem
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE
-BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz
-dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG
-A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U
-cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf
-qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ
-JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ
-+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS
-s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5
-HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7
-70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG
-V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S
-qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S
-5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia
-C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX
-OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE
-FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
-BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2
-KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
-Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B
-8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ
-MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc
-0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ
-u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF
-u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH
-YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8
-GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO
-RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e
-KeC2uAloGRwYQw==
------END CERTIFICATE-----
diff --git a/misc/certs/AffirmTrust_Premium_ECC.pem b/misc/certs/AffirmTrust_Premium_ECC.pem
deleted file mode 100644
index 4bcc6a43..00000000
--- a/misc/certs/AffirmTrust_Premium_ECC.pem
+++ /dev/null
@@ -1,13 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC
-VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ
-cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ
-BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt
-VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D
-0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9
-ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G
-A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs
-aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I
-flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ==
------END CERTIFICATE-----
diff --git a/misc/certs/America_Online_Root_Certification_Authority_1.pem b/misc/certs/America_Online_Root_Certification_Authority_1.pem
deleted file mode 100644
index d6837453..00000000
--- a/misc/certs/America_Online_Root_Certification_Authority_1.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
-bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2
-MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
-ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk
-hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym
-1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW
-OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb
-2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko
-O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU
-AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
-BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF
-Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb
-LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir
-oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C
-MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
-sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
------END CERTIFICATE-----
diff --git a/misc/certs/America_Online_Root_Certification_Authority_2.pem b/misc/certs/America_Online_Root_Certification_Authority_2.pem
deleted file mode 100644
index 492d55a9..00000000
--- a/misc/certs/America_Online_Root_Certification_Authority_2.pem
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
-bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2
-MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
-ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC
-206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci
-KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2
-JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9
-BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e
-Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B
-PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67
-Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq
-Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ
-o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3
-+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj
-YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj
-FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
-AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn
-xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2
-LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc
-obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8
-CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe
-IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA
-DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F
-AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX
-Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb
-AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl
-Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw
-RY8mkaKO/qk=
------END CERTIFICATE-----
diff --git a/misc/certs/ApplicationCA_-_Japanese_Government.pem b/misc/certs/ApplicationCA_-_Japanese_Government.pem
deleted file mode 100644
index c28e86d7..00000000
--- a/misc/certs/ApplicationCA_-_Japanese_Government.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEc
-MBoGA1UEChMTSmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRp
-b25DQTAeFw0wNzEyMTIxNTAwMDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYT
-AkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zlcm5tZW50MRYwFAYDVQQLEw1BcHBs
-aWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp23gdE6H
-j6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4fl+K
-f5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55
-IrmTwcrNwVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cw
-FO5cjFW6WY2H/CPek9AEjP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDiht
-QWEjdnjDuGWk81quzMKq2edY3rZ+nYVunyoKb58DKTCXKB28t89UKU5RMfkntigm
-/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRUWssmP3HMlEYNllPqa0jQ
-k/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNVBAYTAkpQ
-MRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOC
-seODvOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
-ggEBADlqRHZ3ODrso2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJ
-hyzjVOGjprIIC8CFqMjSnHH2HZ9g/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+
-eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYDio+nEhEMy/0/ecGc/WLuo89U
-DNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmWdupwX3kSa+Sj
-B1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
-rosot4LKGAfmt1t06SAZf7IbiVQ=
------END CERTIFICATE-----
diff --git a/misc/certs/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.pem b/misc/certs/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.pem
deleted file mode 100644
index de97f841..00000000
--- a/misc/certs/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.pem
+++ /dev/null
@@ -1,35 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE
-BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h
-cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy
-MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg
-Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi
-MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9
-thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM
-cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG
-L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i
-NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h
-X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b
-m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy
-Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja
-EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T
-KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF
-6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh
-OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD
-VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD
-VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
-cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv
-ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl
-AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF
-661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9
-am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1
-ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481
-PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS
-3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k
-SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF
-3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM
-ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g
-StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz
-Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB
-jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
------END CERTIFICATE-----
diff --git a/misc/certs/Baltimore_CyberTrust_Root.pem b/misc/certs/Baltimore_CyberTrust_Root.pem
deleted file mode 100644
index 519028c6..00000000
--- a/misc/certs/Baltimore_CyberTrust_Root.pem
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
-RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
-VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
-DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
-ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
-VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
-mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
-IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
-mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
-XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
-dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
-jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
-BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
-DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
-9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
-jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
-Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
-ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
-R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
------END CERTIFICATE-----
diff --git a/misc/certs/Buypass_Class_2_CA_1.pem b/misc/certs/Buypass_Class_2_CA_1.pem
deleted file mode 100644
index 053f4335..00000000
--- a/misc/certs/Buypass_Class_2_CA_1.pem
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg
-Q2xhc3MgMiBDQSAxMB4XDTA2MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzEL
-MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD
-VQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7McXA0
-ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLX
-l18xoS830r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVB
-HfCuuCkslFJgNJQ72uA40Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B
-5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/RuFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3
-WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0PAQH/BAQD
-AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLP
-gcIV1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+
-DKhQ7SLHrQVMdvvt7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKu
-BctN518fV4bVIJwo+28TOPX2EZL2fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHs
-h7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5wwDX3OaJdZtB7WZ+oRxKaJyOk
-LY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
------END CERTIFICATE-----
diff --git a/misc/certs/Buypass_Class_2_Root_CA.pem b/misc/certs/Buypass_Class_2_Root_CA.pem
deleted file mode 100644
index 9daec241..00000000
--- a/misc/certs/Buypass_Class_2_Root_CA.pem
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg
-Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow
-TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw
-HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB
-BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr
-6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV
-L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91
-1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx
-MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ
-QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB
-arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr
-Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi
-FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS
-P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN
-9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP
-AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz
-uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h
-9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s
-A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t
-OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo
-+fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7
-KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2
-DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us
-H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ
-I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7
-5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h
-3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz
-Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA=
------END CERTIFICATE-----
diff --git a/misc/certs/Buypass_Class_3_CA_1.pem b/misc/certs/Buypass_Class_3_CA_1.pem
deleted file mode 100644
index 6fdb6439..00000000
--- a/misc/certs/Buypass_Class_3_CA_1.pem
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg
-Q2xhc3MgMyBDQSAxMB4XDTA1MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzEL
-MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD
-VQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKxifZg
-isRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//z
-NIqeKNc0n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI
-+MkcVyzwPX6UvCWThOiaAJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2R
-hzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+
-mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0PAQH/BAQD
-AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFP
-Bdy7pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27s
-EzNxZy5p+qksP2bAEllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2
-mSlf56oBzKwzqBwKu5HEA6BvtjT5htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yC
-e/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQjel/wroQk5PMr+4okoyeYZdow
-dXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
------END CERTIFICATE-----
diff --git a/misc/certs/Buypass_Class_3_Root_CA.pem b/misc/certs/Buypass_Class_3_Root_CA.pem
deleted file mode 100644
index 23b53062..00000000
--- a/misc/certs/Buypass_Class_3_Root_CA.pem
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg
-Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow
-TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw
-HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB
-BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y
-ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E
-N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9
-tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX
-0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c
-/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X
-KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY
-zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS
-O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D
-34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP
-K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3
-AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv
-Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj
-QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV
-cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS
-IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2
-HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa
-O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv
-033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u
-dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE
-kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41
-3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD
-u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq
-4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc=
------END CERTIFICATE-----
diff --git a/misc/certs/CA_Disig.pem b/misc/certs/CA_Disig.pem
deleted file mode 100644
index 6496d08d..00000000
--- a/misc/certs/CA_Disig.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzET
-MBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UE
-AxMIQ0EgRGlzaWcwHhcNMDYwMzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQsw
-CQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcg
-YS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgmGErE
-Nx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnX
-mjxUizkDPw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYD
-XcDtab86wYqg6I7ZuUUohwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhW
-S8+2rT+MitcE5eN4TPWGqvWP+j1scaMtymfraHtuM6kMgiioTGohQBUgDCZbg8Kp
-FhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8wgfwwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0PAQH/BAQD
-AgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cu
-ZGlzaWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5z
-ay9jYS9jcmwvY2FfZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2sv
-Y2EvY3JsL2NhX2Rpc2lnLmNybDAaBgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEw
-DQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59tWDYcPQuBDRIrRhCA/ec8J9B6
-yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3mkkp7M5+cTxq
-EEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
-CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeB
-EicTXxChds6KezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFN
-PGO+I++MzVpQuGhU+QqZMxEA4Z7CRneC9VkGjCFMhwnN5ag=
------END CERTIFICATE-----
diff --git a/misc/certs/CNNIC_ROOT.pem b/misc/certs/CNNIC_ROOT.pem
deleted file mode 100644
index c81744b5..00000000
--- a/misc/certs/CNNIC_ROOT.pem
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJD
-TjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2
-MDcwOTE0WhcNMjcwNDE2MDcwOTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMF
-Q05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzDo+/hn7E7SIX1mlwh
-IhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tizVHa6
-dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZO
-V/kbZKKTVrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrC
-GHn2emU1z5DrvTOTn1OrczvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gN
-v7Sg2Ca+I19zN38m5pIEo3/PIKe38zrKy5nLAgMBAAGjczBxMBEGCWCGSAGG+EIB
-AQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscCwQ7vptU7ETAPBgNVHRMB
-Af8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991SlgrHAsEO
-76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnK
-OOK5Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvH
-ugDnuL8BV8F3RTIMO/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7Hgvi
-yJA/qIYM/PmLXoXLT1tLYhFHxUV8BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fL
-buXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2G8kS1sHNzYDzAgE8yGnLRUhj
-2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5mmxE=
------END CERTIFICATE-----
diff --git a/misc/certs/COMODO_Certification_Authority.pem b/misc/certs/COMODO_Certification_Authority.pem
deleted file mode 100644
index 6146dcb5..00000000
--- a/misc/certs/COMODO_Certification_Authority.pem
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB
-gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
-A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
-BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw
-MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
-YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
-RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3
-UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI
-2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8
-Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
-+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
-DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
-nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW
-/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g
-PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u
-QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY
-SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv
-IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
-RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4
-zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd
-BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB
-ZQ==
------END CERTIFICATE-----
diff --git a/misc/certs/COMODO_ECC_Certification_Authority.pem b/misc/certs/COMODO_ECC_Certification_Authority.pem
deleted file mode 100644
index 546c95e3..00000000
--- a/misc/certs/COMODO_ECC_Certification_Authority.pem
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL
-MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
-BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT
-IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw
-MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy
-ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N
-T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR
-FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J
-cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW
-BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm
-fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv
-GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
------END CERTIFICATE-----
diff --git a/misc/certs/Camerfirma_Chambers_of_Commerce_Root.pem b/misc/certs/Camerfirma_Chambers_of_Commerce_Root.pem
deleted file mode 100644
index b3962515..00000000
--- a/misc/certs/Camerfirma_Chambers_of_Commerce_Root.pem
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn
-MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
-ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg
-b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa
-MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB
-ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw
-IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B
-AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb
-unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d
-BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq
-7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3
-0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX
-roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG
-A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j
-aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p
-26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA
-BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud
-EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN
-BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
-aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB
-AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd
-p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi
-1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc
-XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0
-eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu
-tGWaIZDgqtCYvDi1czyL+Nw=
------END CERTIFICATE-----
diff --git a/misc/certs/Camerfirma_Global_Chambersign_Root.pem b/misc/certs/Camerfirma_Global_Chambersign_Root.pem
deleted file mode 100644
index f5053061..00000000
--- a/misc/certs/Camerfirma_Global_Chambersign_Root.pem
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn
-MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
-ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo
-YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9
-MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy
-NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G
-A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA
-A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0
-Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s
-QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV
-eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795
-B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh
-z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T
-AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i
-ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w
-TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH
-MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD
-VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE
-VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
-bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B
-AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM
-bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi
-ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG
-VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c
-ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/
-AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
------END CERTIFICATE-----
diff --git a/misc/certs/Certigna.pem b/misc/certs/Certigna.pem
deleted file mode 100644
index 220d95f9..00000000
--- a/misc/certs/Certigna.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV
-BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X
-DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ
-BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4
-QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny
-gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw
-zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q
-130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2
-JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw
-DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw
-ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT
-AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj
-AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG
-9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h
-bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc
-fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu
-HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w
-t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
-WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
------END CERTIFICATE-----
diff --git a/misc/certs/Certinomis_-_Autorité_Racine.pem b/misc/certs/Certinomis_-_Autorité_Racine.pem
deleted file mode 100644
index e764de4d..00000000
--- a/misc/certs/Certinomis_-_Autorité_Racine.pem
+++ /dev/null
@@ -1,32 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjET
-MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAk
-BgNVBAMMHUNlcnRpbm9taXMgLSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4
-Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNl
-cnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYwJAYDVQQDDB1DZXJ0
-aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jY
-F1AMnmHawE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N
-8y4oH3DfVS9O7cdxbwlyLu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWe
-rP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K
-/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92NjMD2AR5vpTESOH2VwnHu
-7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9qc1pkIuVC
-28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6
-lSTClrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1E
-nn1So2+WLhl+HPNbxxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB
-0iSVL1N6aaLwD4ZFjliCK0wi1F6g530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql09
-5gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna4NH4+ej9Uji29YnfAgMBAAGj
-WzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQN
-jLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
-KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9s
-ov3/4gbIOZ/xWqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZM
-OH8oMDX/nyNTt7buFHAAQCvaR6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q
-619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40nJ+U8/aGH88bc62UeYdocMMzpXDn
-2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1BCxMjidPJC+iKunqj
-o3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjvJL1v
-nxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG
-5ERQL1TEqkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWq
-pdEdnV1j6CTmNhTih60bWfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZb
-dsLLO7XSAPCjDuGtbkD326C00EauFddEwk01+dIL8hf2rGbVJLJP0RyZwG71fet0
-BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/vgt2Fl43N+bYdJeimUV5
------END CERTIFICATE-----
diff --git a/misc/certs/Certplus_Class_2_Primary_CA.pem b/misc/certs/Certplus_Class_2_Primary_CA.pem
deleted file mode 100644
index 6d0133d3..00000000
--- a/misc/certs/Certplus_Class_2_Primary_CA.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw
-PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz
-cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9
-MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz
-IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ
-ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR
-VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL
-kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd
-EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas
-H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0
-HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud
-DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4
-QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu
-Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/
-AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8
-yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR
-FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA
-ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB
-kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
-l7+ijrRU
------END CERTIFICATE-----
diff --git a/misc/certs/Certum_Root_CA.pem b/misc/certs/Certum_Root_CA.pem
deleted file mode 100644
index b133fcb4..00000000
--- a/misc/certs/Certum_Root_CA.pem
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM
-MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
-QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM
-MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
-QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E
-jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo
-ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI
-ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu
-Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg
-AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7
-HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA
-uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa
-TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg
-xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q
-CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x
-O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs
-6GAqm4VKQPNriiTsBhYscw==
------END CERTIFICATE-----
diff --git a/misc/certs/Certum_Trusted_Network_CA.pem b/misc/certs/Certum_Trusted_Network_CA.pem
deleted file mode 100644
index a04e656d..00000000
--- a/misc/certs/Certum_Trusted_Network_CA.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM
-MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D
-ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU
-cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3
-WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg
-Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw
-IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH
-UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM
-TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU
-BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM
-kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x
-AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV
-HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y
-sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL
-I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8
-J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY
-VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
-03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
------END CERTIFICATE-----
diff --git a/misc/certs/Chambers_of_Commerce_Root_-_2008.pem b/misc/certs/Chambers_of_Commerce_Root_-_2008.pem
deleted file mode 100644
index 7d3a2491..00000000
--- a/misc/certs/Chambers_of_Commerce_Root_-_2008.pem
+++ /dev/null
@@ -1,42 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD
-VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0
-IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3
-MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz
-IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz
-MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj
-dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw
-EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp
-MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G
-CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9
-28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq
-VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q
-DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR
-5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL
-ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a
-Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl
-UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s
-+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5
-Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
-ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx
-hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV
-HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1
-+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN
-YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t
-L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy
-ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt
-IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV
-HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w
-DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW
-PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF
-5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1
-glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH
-FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2
-pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD
-xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG
-tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq
-jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De
-fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
-OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ
-d0jQ
------END CERTIFICATE-----
diff --git a/misc/certs/ComSign_CA.pem b/misc/certs/ComSign_CA.pem
deleted file mode 100644
index 35fb5229..00000000
--- a/misc/certs/ComSign_CA.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0
-MRMwEQYDVQQDEwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQG
-EwJJTDAeFw0wNDAzMjQxMTMyMThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMT
-CkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNpZ24xCzAJBgNVBAYTAklMMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49qROR+WCf4C9DklBKK
-8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTyP2Q2
-98CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb
-2CEJKHxNGGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxC
-ejVb7Us6eva1jsz/D3zkYDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7Kpi
-Xd3DTKaCQeQzC6zJMw9kglcq/QytNuEMrkvF7zuZ2SOzW120V+x0cAwqTwIDAQAB
-o4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Zl
-ZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0PAQH/BAQD
-AgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRL
-AZs+VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWd
-foPPbrxHbvUanlR2QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0M
-cXS6hMTXcpuEfDhOZAYnKuGntewImbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq
-8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb/627HOkthIDYIb6FUtnUdLlp
-hbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VGzT2ouvDzuFYk
-Res3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U
-AGegcQCCSA==
------END CERTIFICATE-----
diff --git a/misc/certs/ComSign_Secured_CA.pem b/misc/certs/ComSign_Secured_CA.pem
deleted file mode 100644
index 8d80b192..00000000
--- a/misc/certs/ComSign_Secured_CA.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAw
-PDEbMBkGA1UEAxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWdu
-MQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwx
-GzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBDQTEQMA4GA1UEChMHQ29tU2lnbjEL
-MAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGtWhf
-HZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs49oh
-gHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sW
-v+bznkqH7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ue
-Mv5WJDmyVIRD9YTC2LxBkMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr
-9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d19guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt
-6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUwAwEB/zBEBgNVHR8EPTA7
-MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29tU2lnblNl
-Y3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58
-ADsAj8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkq
-hkiG9w0BAQUFAAOCAQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7p
-iL1DRYHjZiM/EoZNGeQFsOY3wo3aBijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtC
-dsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtpFhpFfTMDZflScZAmlaxMDPWL
-kz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP51qJThRv4zdL
-hfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
-OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
------END CERTIFICATE-----
diff --git a/misc/certs/Comodo_AAA_Services_root.pem b/misc/certs/Comodo_AAA_Services_root.pem
deleted file mode 100644
index 33c71ba9..00000000
--- a/misc/certs/Comodo_AAA_Services_root.pem
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
-YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
-MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
-BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
-GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
-BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
-3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
-YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
-rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
-ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
-oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
-MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
-QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
-b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
-AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
-GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
-Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
-G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
-l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
-smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
------END CERTIFICATE-----
diff --git a/misc/certs/Comodo_Secure_Services_root.pem b/misc/certs/Comodo_Secure_Services_root.pem
deleted file mode 100644
index fe804a37..00000000
--- a/misc/certs/Comodo_Secure_Services_root.pem
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp
-ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow
-fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
-A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV
-BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM
-cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S
-HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996
-CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk
-3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz
-6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV
-HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
-EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv
-Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw
-Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww
-DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0
-5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
-Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI
-gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ
-aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl
-izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk=
------END CERTIFICATE-----
diff --git a/misc/certs/Comodo_Trusted_Services_root.pem b/misc/certs/Comodo_Trusted_Services_root.pem
deleted file mode 100644
index 72cbf561..00000000
--- a/misc/certs/Comodo_Trusted_Services_root.pem
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0
-aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla
-MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
-BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD
-VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW
-fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt
-TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL
-fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW
-1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7
-kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G
-A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD
-VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v
-ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo
-dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu
-Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/
-HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
-pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS
-jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+
-xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn
-dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi
------END CERTIFICATE-----
diff --git a/misc/certs/Cybertrust_Global_Root.pem b/misc/certs/Cybertrust_Global_Root.pem
deleted file mode 100644
index edbeb27e..00000000
--- a/misc/certs/Cybertrust_Global_Root.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG
-A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh
-bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE
-ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS
-b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5
-7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS
-J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y
-HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP
-t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz
-FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY
-XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/
-MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw
-hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js
-MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA
-A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj
-Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx
-XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o
-omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc
-A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
-WL1WMRJOEcgh4LMRkWXbtKaIOM5V
------END CERTIFICATE-----
diff --git a/misc/certs/DST_ACES_CA_X6.pem b/misc/certs/DST_ACES_CA_X6.pem
deleted file mode 100644
index 13a7df49..00000000
--- a/misc/certs/DST_ACES_CA_X6.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx
-ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w
-MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD
-VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx
-FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu
-ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7
-gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH
-fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a
-ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT
-ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF
-MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk
-c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto
-dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt
-aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI
-hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk
-QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/
-h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
-nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR
-rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2
-9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis=
------END CERTIFICATE-----
diff --git a/misc/certs/DST_Root_CA_X3.pem b/misc/certs/DST_Root_CA_X3.pem
deleted file mode 100644
index b2e43c93..00000000
--- a/misc/certs/DST_Root_CA_X3.pem
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
-MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
-DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow
-PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
-Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O
-rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq
-OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b
-xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw
-7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD
-aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG
-SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69
-ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
-AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
-R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
-JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
-Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
------END CERTIFICATE-----
diff --git a/misc/certs/Deutsche_Telekom_Root_CA_2.pem b/misc/certs/Deutsche_Telekom_Root_CA_2.pem
deleted file mode 100644
index 05879ff3..00000000
--- a/misc/certs/Deutsche_Telekom_Root_CA_2.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc
-MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj
-IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB
-IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE
-RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl
-U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290
-IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU
-ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC
-QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr
-rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S
-NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc
-QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH
-txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP
-BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
-AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp
-tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa
-IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl
-6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+
-xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
-Cm26OWMohpLzGITY+9HPBVZkVw==
------END CERTIFICATE-----
diff --git a/misc/certs/DigiCert_Assured_ID_Root_CA.pem b/misc/certs/DigiCert_Assured_ID_Root_CA.pem
deleted file mode 100644
index 2731638b..00000000
--- a/misc/certs/DigiCert_Assured_ID_Root_CA.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
-b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
-cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
-JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
-mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
-wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
-VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
-AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
-AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
-BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
-pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
-dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
-fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
-NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
-H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
-+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
------END CERTIFICATE-----
diff --git a/misc/certs/DigiCert_Global_Root_CA.pem b/misc/certs/DigiCert_Global_Root_CA.pem
deleted file mode 100644
index fd4341df..00000000
--- a/misc/certs/DigiCert_Global_Root_CA.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
-QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
-MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
-b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
-CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
-nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
-43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
-T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
-gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
-BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
-TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
-DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
-hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
-06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
-PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
-YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
-CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
------END CERTIFICATE-----
diff --git a/misc/certs/DigiCert_High_Assurance_EV_Root_CA.pem b/misc/certs/DigiCert_High_Assurance_EV_Root_CA.pem
deleted file mode 100644
index 9e6810ab..00000000
--- a/misc/certs/DigiCert_High_Assurance_EV_Root_CA.pem
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
-ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
-MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
-LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
-RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
-+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
-PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
-xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
-Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
-hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
-EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
-FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
-nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
-eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
-hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
-Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
-vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
-+OkuE6N36B9K
------END CERTIFICATE-----
diff --git a/misc/certs/Digital_Signature_Trust_Co._Global_CA_1.pem b/misc/certs/Digital_Signature_Trust_Co._Global_CA_1.pem
deleted file mode 100644
index 4e25ac5d..00000000
--- a/misc/certs/Digital_Signature_Trust_Co._Global_CA_1.pem
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
-UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
-EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ
-BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
-ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg
-bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ
-j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV
-Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG
-SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
-JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
-RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw
-MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5
-fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i
-+DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
-SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN
-QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+
-gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl
------END CERTIFICATE-----
diff --git a/misc/certs/Digital_Signature_Trust_Co._Global_CA_3.pem b/misc/certs/Digital_Signature_Trust_Co._Global_CA_3.pem
deleted file mode 100644
index 32b72ee3..00000000
--- a/misc/certs/Digital_Signature_Trust_Co._Global_CA_3.pem
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
-UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
-EwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJ
-BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
-ETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC/
-k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGODVvso
-LeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3o
-TQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCG
-SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
-JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
-RFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3
-MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6C
-TShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5
-WzAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
-SIb3DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR
-xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL
-B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID
------END CERTIFICATE-----
diff --git a/misc/certs/E-Guven_Kok_Elektronik_Sertifika_Hizmet_Saglayicisi.pem b/misc/certs/E-Guven_Kok_Elektronik_Sertifika_Hizmet_Saglayicisi.pem
deleted file mode 100644
index 4d9767dd..00000000
--- a/misc/certs/E-Guven_Kok_Elektronik_Sertifika_Hizmet_Saglayicisi.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1
-MQswCQYDVQQGEwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxp
-Z2kgQS5TLjE8MDoGA1UEAxMzZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZp
-a2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3MDEwNDExMzI0OFoXDTE3MDEwNDEx
-MzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0cm9uaWsgQmlsZ2kg
-R3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9uaWsg
-U2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdU
-MZTe1RK6UxYC6lhj71vY8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlT
-L/jDj/6z/P2douNffb7tC+Bg62nsM+3YjfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H
-5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAIJjjcJRFHLfO6IxClv7wC
-90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk9Ok0oSy1
-c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/
-BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoE
-VtstxNulMA0GCSqGSIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLP
-qk/CaOv/gKlR6D1id4k9CnU58W5dF4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S
-/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwqD2fK/A+JYZ1lpTzlvBNbCNvj
-/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4Vwpm+Vganf2X
-KWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
-fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
------END CERTIFICATE-----
diff --git a/misc/certs/EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.pem b/misc/certs/EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.pem
deleted file mode 100644
index a684013b..00000000
--- a/misc/certs/EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.pem
+++ /dev/null
@@ -1,34 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNV
-BAMML0VCRyBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMTcwNQYDVQQKDC5FQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXpt
-ZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAeFw0wNjA4MTcwMDIxMDlaFw0xNjA4
-MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25payBTZXJ0aWZpa2Eg
-SGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2ltIFRl
-a25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIi
-MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h
-4fuXd7hxlugTlkaDT7byX3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAk
-tiHq6yOU/im/+4mRDGSaBUorzAzu8T2bgmmkTPiab+ci2hC6X5L8GCcKqKpE+i4s
-tPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfreYteIAbTdgtsApWjluTL
-dlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZTqNGFav4
-c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8Um
-TDGyY5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z
-+kI2sSXFCjEmN1ZnuqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0O
-Lna9XvNRiYuoP1Vzv9s6xiQFlpJIqkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMW
-OeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vmExH8nYQKE3vwO9D8owrXieqW
-fo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0Nokb+Clsi7n2
-l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
-/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgw
-FoAU587GT/wWZ5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+
-8ygjdsZs93/mQJ7ANtyVDR2tFcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI
-6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgmzJNSroIBk5DKd8pNSe/iWtkqvTDO
-TLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64kXPBfrAowzIpAoHME
-wfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqTbCmY
-Iai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJn
-xk1Gj7sURT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4Q
-DgZxGhBM/nV+/x5XOULK1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9q
-Kd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11t
-hie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQY9iJSrSq3RZj9W6+YKH4
-7ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9AahH3eU7
-QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
------END CERTIFICATE-----
diff --git a/misc/certs/EC-ACC.pem b/misc/certs/EC-ACC.pem
deleted file mode 100644
index 87a13f62..00000000
--- a/misc/certs/EC-ACC.pem
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB
-8zELMAkGA1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2Vy
-dGlmaWNhY2lvIChOSUYgUS0wODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1
-YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYDVQQLEyxWZWdldSBodHRwczovL3d3
-dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UECxMsSmVyYXJxdWlh
-IEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMTBkVD
-LUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQG
-EwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8g
-KE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBD
-ZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQu
-bmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMg
-ZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUNDMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R
-85iKw5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm
-4CgPukLjbo73FCeTae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaV
-HMf5NLWUhdWZXqBIoH7nF2W4onW4HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNd
-QlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0aE9jD2z3Il3rucO2n5nzbcc8t
-lGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw0JDnJwIDAQAB
-o4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4
-opvpXY0wfwYDVR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBo
-dHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidW
-ZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAwDQYJKoZIhvcN
-AQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJlF7W2u++AVtd0x7Y
-/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNaAl6k
-SBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhy
-Rp/7SNVel+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOS
-Agu+TGbrIP65y7WZf+a2E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xl
-nJ2lYJU6Un/10asIbvPuW/mIPX64b24D5EI=
------END CERTIFICATE-----
diff --git a/misc/certs/EE_Certification_Centre_Root_CA.pem b/misc/certs/EE_Certification_Centre_Root_CA.pem
deleted file mode 100644
index 013d461d..00000000
--- a/misc/certs/EE_Certification_Centre_Root_CA.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1
-MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
-czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
-CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy
-MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl
-ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS
-b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy
-euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO
-bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw
-WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d
-MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE
-1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD
-VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/
-zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB
-BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF
-BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV
-v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG
-E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
-uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW
-iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v
-GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0=
------END CERTIFICATE-----
diff --git a/misc/certs/Entrust.net_Premium_2048_Secure_Server_CA.pem b/misc/certs/Entrust.net_Premium_2048_Secure_Server_CA.pem
deleted file mode 100644
index 06926c8e..00000000
--- a/misc/certs/Entrust.net_Premium_2048_Secure_Server_CA.pem
+++ /dev/null
@@ -1,26 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
-RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
-bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
-IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy
-MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
-LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
-YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
-A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
-K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
-sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
-MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
-XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
-HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
-4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA
-vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G
-CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA
-WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
-oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ
-h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18
-f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN
-B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy
-vUxFnmG6v4SBkgPR0ml8xQ==
------END CERTIFICATE-----
diff --git a/misc/certs/Entrust.net_Secure_Server_CA.pem b/misc/certs/Entrust.net_Secure_Server_CA.pem
deleted file mode 100644
index 4b8939cc..00000000
--- a/misc/certs/Entrust.net_Secure_Server_CA.pem
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
-ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
-KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
-ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
-MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
-ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
-b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
-bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
-U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
-A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
-I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
-wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
-AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
-oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
-BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
-dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
-MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
-b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
-dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
-MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
-E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
-MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
-hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
-95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
-2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
------END CERTIFICATE-----
diff --git a/misc/certs/Entrust_Root_Certification_Authority.pem b/misc/certs/Entrust_Root_Certification_Authority.pem
deleted file mode 100644
index 855485cf..00000000
--- a/misc/certs/Entrust_Root_Certification_Authority.pem
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
-VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
-Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
-KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
-NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
-NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
-ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
-BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
-Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
-4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
-KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
-rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
-94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
-sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
-gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
-kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
-vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
-A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
-O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
-AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
-9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
-eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
-0vdXcDazv/wor3ElhVsT/h5/WrQ8
------END CERTIFICATE-----
diff --git a/misc/certs/Equifax_Secure_CA.pem b/misc/certs/Equifax_Secure_CA.pem
deleted file mode 100644
index 676db975..00000000
--- a/misc/certs/Equifax_Secure_CA.pem
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
-UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
-dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
-MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
-dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
-BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
-cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
-AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
-MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
-aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
-ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
-IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
-MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
-A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
-7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
-1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
------END CERTIFICATE-----
diff --git a/misc/certs/Equifax_Secure_Global_eBusiness_CA.pem b/misc/certs/Equifax_Secure_Global_eBusiness_CA.pem
deleted file mode 100644
index 03cb8458..00000000
--- a/misc/certs/Equifax_Secure_Global_eBusiness_CA.pem
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
-ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
-MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
-dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
-c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
-UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
-58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
-o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
-MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
-aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
-A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
-Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
-8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
------END CERTIFICATE-----
diff --git a/misc/certs/Equifax_Secure_eBusiness_CA_1.pem b/misc/certs/Equifax_Secure_eBusiness_CA_1.pem
deleted file mode 100644
index 768a9eb9..00000000
--- a/misc/certs/Equifax_Secure_eBusiness_CA_1.pem
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
-ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw
-MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j
-LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ
-KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo
-RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu
-WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw
-Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD
-AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK
-eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM
-zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+
-WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
-/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==
------END CERTIFICATE-----
diff --git a/misc/certs/Equifax_Secure_eBusiness_CA_2.pem b/misc/certs/Equifax_Secure_eBusiness_CA_2.pem
deleted file mode 100644
index e29f64ea..00000000
--- a/misc/certs/Equifax_Secure_eBusiness_CA_2.pem
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj
-dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0
-NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD
-VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G
-vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/
-BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C
-AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl
-IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw
-NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq
-y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF
-MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
-A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy
-0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1
-E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN
------END CERTIFICATE-----
diff --git a/misc/certs/Firmaprofesional_Root_CA.pem b/misc/certs/Firmaprofesional_Root_CA.pem
deleted file mode 100644
index 74be4914..00000000
--- a/misc/certs/Firmaprofesional_Root_CA.pem
+++ /dev/null
@@ -1,26 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMx
-IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
-dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
-HhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTELMAkGA1UEBhMCRVMx
-IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
-dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5u
-Cp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5Vj1H5WuretXDE7aTt/6MNbg9kUDGvASdY
-rv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJHlShbz++AbOCQl4oBPB3z
-hxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf3H5idPay
-BQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcL
-iam8NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcb
-AgMBAAGjgZ8wgZwwKgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lv
-bmFsLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0
-MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E
-FgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQADggEBAEdz/o0n
-VPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
-u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36m
-hoEyIwOdyPdfwUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzfl
-ZKG+TQyTmAyX9odtsz/ny4Cm7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBp
-QWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YGVM+h4k0460tQtcsm9MracEpqoeJ5
-quGnM/b9Sh/22WA=
------END CERTIFICATE-----
diff --git a/misc/certs/GTE_CyberTrust_Global_Root.pem b/misc/certs/GTE_CyberTrust_Global_Root.pem
deleted file mode 100644
index 82ae5e1b..00000000
--- a/misc/certs/GTE_CyberTrust_Global_Root.pem
+++ /dev/null
@@ -1,15 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD
-VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
-bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
-b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV
-UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
-cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
-b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH
-iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS
-r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4
-04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r
-GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9
-3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
-lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
------END CERTIFICATE-----
diff --git a/misc/certs/GeoTrust_Global_CA.pem b/misc/certs/GeoTrust_Global_CA.pem
deleted file mode 100644
index bcb25297..00000000
--- a/misc/certs/GeoTrust_Global_CA.pem
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
-MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
-YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
-R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
-9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
-fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
-iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
-1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
-bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
-MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
-ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
-uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
-Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
-tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
-PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
-hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
-5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
------END CERTIFICATE-----
diff --git a/misc/certs/GeoTrust_Global_CA_2.pem b/misc/certs/GeoTrust_Global_CA_2.pem
deleted file mode 100644
index 2031f3ed..00000000
--- a/misc/certs/GeoTrust_Global_CA_2.pem
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs
-IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg
-R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A
-PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8
-Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL
-TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL
-5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7
-S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe
-2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap
-EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td
-EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv
-/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN
-A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0
-abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF
-I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz
-4iIprn2DQKi6bA==
------END CERTIFICATE-----
diff --git a/misc/certs/GeoTrust_Primary_Certification_Authority.pem b/misc/certs/GeoTrust_Primary_Certification_Authority.pem
deleted file mode 100644
index 03c70c70..00000000
--- a/misc/certs/GeoTrust_Primary_Certification_Authority.pem
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
-MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
-R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
-MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
-Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
-AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
-ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
-7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
-kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
-mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
-KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
-6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
-4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
-oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
-UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
-AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
------END CERTIFICATE-----
diff --git a/misc/certs/GeoTrust_Primary_Certification_Authority_-_G2.pem b/misc/certs/GeoTrust_Primary_Certification_Authority_-_G2.pem
deleted file mode 100644
index f9364c08..00000000
--- a/misc/certs/GeoTrust_Primary_Certification_Authority_-_G2.pem
+++ /dev/null
@@ -1,17 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL
-MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj
-KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2
-MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV
-BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw
-NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV
-BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
-MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL
-So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal
-tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
-BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG
-CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT
-qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz
-rD6ogRLQy7rQkgu2npaqBA+K
------END CERTIFICATE-----
diff --git a/misc/certs/GeoTrust_Primary_Certification_Authority_-_G3.pem b/misc/certs/GeoTrust_Primary_Certification_Authority_-_G3.pem
deleted file mode 100644
index dc1f859a..00000000
--- a/misc/certs/GeoTrust_Primary_Certification_Authority_-_G3.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB
-mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT
-MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
-eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ
-BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
-MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0
-BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz
-+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm
-hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn
-5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W
-JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL
-DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC
-huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
-HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB
-AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB
-zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN
-kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
-AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH
-SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G
-spki4cErx5z481+oghLrGREt
------END CERTIFICATE-----
diff --git a/misc/certs/GeoTrust_Universal_CA.pem b/misc/certs/GeoTrust_Universal_CA.pem
deleted file mode 100644
index 6bc28885..00000000
--- a/misc/certs/GeoTrust_Universal_CA.pem
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy
-c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE
-BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0
-IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV
-VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8
-cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT
-QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh
-F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v
-c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w
-mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd
-VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX
-teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ
-f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe
-Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+
-nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB
-/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY
-MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG
-9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
-aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX
-IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn
-ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z
-uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN
-Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja
-QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW
-koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9
-ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt
-DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm
-bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw=
------END CERTIFICATE-----
diff --git a/misc/certs/GeoTrust_Universal_CA_2.pem b/misc/certs/GeoTrust_Universal_CA_2.pem
deleted file mode 100644
index bed6cd0d..00000000
--- a/misc/certs/GeoTrust_Universal_CA_2.pem
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy
-c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD
-VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1
-c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
-AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81
-WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG
-FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq
-XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL
-se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb
-KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd
-IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73
-y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt
-hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc
-QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4
-Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV
-HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ
-KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
-dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ
-L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr
-Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo
-ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY
-T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz
-GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m
-1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV
-OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH
-6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX
-QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
------END CERTIFICATE-----
diff --git a/misc/certs/GlobalSign_Root_CA.pem b/misc/certs/GlobalSign_Root_CA.pem
deleted file mode 100644
index f4ce4ca4..00000000
--- a/misc/certs/GlobalSign_Root_CA.pem
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
-A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
-b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
-MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
-YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
-aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
-jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
-xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
-1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
-snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
-U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
-9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
-BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
-AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
-yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
-38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
-AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
-DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
-HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
------END CERTIFICATE-----
diff --git a/misc/certs/GlobalSign_Root_CA_-_R2.pem b/misc/certs/GlobalSign_Root_CA_-_R2.pem
deleted file mode 100644
index 6f0f8db0..00000000
--- a/misc/certs/GlobalSign_Root_CA_-_R2.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
-A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
-Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
-MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
-A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
-v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
-eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
-tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
-C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
-zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
-mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
-V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
-bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
-3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
-J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
-291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
-ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
-AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
-TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
------END CERTIFICATE-----
diff --git a/misc/certs/GlobalSign_Root_CA_-_R3.pem b/misc/certs/GlobalSign_Root_CA_-_R3.pem
deleted file mode 100644
index 8afb2190..00000000
--- a/misc/certs/GlobalSign_Root_CA_-_R3.pem
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G
-A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp
-Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4
-MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG
-A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8
-RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT
-gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm
-KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd
-QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ
-XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw
-DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o
-LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU
-RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp
-jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK
-6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX
-mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs
-Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH
-WD9f
------END CERTIFICATE-----
diff --git a/misc/certs/Global_Chambersign_Root_-_2008.pem b/misc/certs/Global_Chambersign_Root_-_2008.pem
deleted file mode 100644
index 70b4ce41..00000000
--- a/misc/certs/Global_Chambersign_Root_-_2008.pem
+++ /dev/null
@@ -1,41 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD
-VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0
-IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3
-MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
-aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx
-MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy
-cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG
-A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl
-BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI
-hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed
-KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7
-G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2
-zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4
-ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG
-HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2
-Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V
-yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e
-beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r
-6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
-wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog
-zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW
-BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr
-ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp
-ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk
-cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt
-YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC
-CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow
-KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI
-hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ
-UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz
-X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x
-fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz
-a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd
-Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd
-SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O
-AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso
-M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge
-v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
-09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
------END CERTIFICATE-----
diff --git a/misc/certs/Go_Daddy_Class_2_CA.pem b/misc/certs/Go_Daddy_Class_2_CA.pem
deleted file mode 100644
index 42e8d1ee..00000000
--- a/misc/certs/Go_Daddy_Class_2_CA.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
-MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
-YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
-MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
-ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
-MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
-ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
-PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
-wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
-EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
-avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
-YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
-sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
-/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
-IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
-ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
-OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
-TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
-HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
-dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
-ReYNnyicsbkqWletNw+vHX/bvZ8=
------END CERTIFICATE-----
diff --git a/misc/certs/Go_Daddy_Root_Certificate_Authority_-_G2.pem b/misc/certs/Go_Daddy_Root_Certificate_Authority_-_G2.pem
deleted file mode 100644
index c2b29078..00000000
--- a/misc/certs/Go_Daddy_Root_Certificate_Authority_-_G2.pem
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT
-EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp
-ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz
-NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH
-EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE
-AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD
-E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH
-/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy
-DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh
-GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR
-tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA
-AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
-FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX
-WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu
-9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr
-gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo
-2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
-LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI
-4uJEvlz36hz1
------END CERTIFICATE-----
diff --git a/misc/certs/Hellenic_Academic_and_Research_Institutions_RootCA_2011.pem b/misc/certs/Hellenic_Academic_and_Research_Institutions_RootCA_2011.pem
deleted file mode 100644
index 5ecc81c3..00000000
--- a/misc/certs/Hellenic_Academic_and_Research_Institutions_RootCA_2011.pem
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix
-RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1
-dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p
-YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw
-NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK
-EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl
-cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl
-c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz
-dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ
-fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns
-bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD
-75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP
-FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV
-HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp
-5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu
-b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA
-A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p
-6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
-TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7
-dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys
-Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI
-l7WdmplNsDz4SgCbZN2fOUvRJ9e4
------END CERTIFICATE-----
diff --git a/misc/certs/Hongkong_Post_Root_CA_1.pem b/misc/certs/Hongkong_Post_Root_CA_1.pem
deleted file mode 100644
index a28e9a0e..00000000
--- a/misc/certs/Hongkong_Post_Root_CA_1.pem
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx
-FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg
-Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG
-A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr
-b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ
-jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn
-PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh
-ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9
-nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h
-q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED
-MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC
-mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3
-7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB
-oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs
-EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO
-fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi
-AmvZWg==
------END CERTIFICATE-----
diff --git a/misc/certs/IGC_A.pem b/misc/certs/IGC_A.pem
deleted file mode 100644
index 8940ef5a..00000000
--- a/misc/certs/IGC_A.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYT
-AkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQ
-TS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG
-9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMB4XDTAyMTIxMzE0MjkyM1oXDTIw
-MTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAM
-BgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEO
-MAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2
-LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaI
-s9z4iPf930Pfeo2aSVz2TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2
-xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCWSo7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4
-u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYyHF2fYPepraX/z9E0+X1b
-F8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNdfrGoRpAx
-Vs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGd
-PDPQtQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNV
-HSAEDjAMMAoGCCqBegF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAx
-NjAfBgNVHSMEGDAWgBSjBS8YYFDCiQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUF
-AAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RKq89toB9RlPhJy3Q2FLwV3duJ
-L92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3QMZsyK10XZZOY
-YLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
-Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2a
-NjSaTFR+FwNIlQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R
-0982gaEbeC9xs/FZTEYYKKuF0mBWWg==
------END CERTIFICATE-----
diff --git a/misc/certs/Izenpe.com.pem b/misc/certs/Izenpe.com.pem
deleted file mode 100644
index 76383219..00000000
--- a/misc/certs/Izenpe.com.pem
+++ /dev/null
@@ -1,34 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4
-MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6
-ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD
-VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j
-b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq
-scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO
-xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H
-LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX
-uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD
-yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+
-JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q
-rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN
-BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L
-hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB
-QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+
-HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu
-Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg
-QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB
-BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
-MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA
-A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb
-laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56
-awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo
-JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw
-LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT
-VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk
-LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb
-UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/
-QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+
-naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls
-QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
------END CERTIFICATE-----
diff --git a/misc/certs/Juur-SK.pem b/misc/certs/Juur-SK.pem
deleted file mode 100644
index 269961b5..00000000
--- a/misc/certs/Juur-SK.pem
+++ /dev/null
@@ -1,29 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcN
-AQkBFglwa2lAc2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZp
-dHNlZXJpbWlza2Vza3VzMRAwDgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMw
-MVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMQsw
-CQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEQ
-MA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOB
-SvZiF3tfTQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkz
-ABpTpyHhOEvWgxutr2TC+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvH
-LCu3GFH+4Hv2qEivbDtPL+/40UceJlfwUR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMP
-PbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDaTpxt4brNj3pssAki14sL
-2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQFMAMBAf8w
-ggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwIC
-MIHDHoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDk
-AGwAagBhAHMAdABhAHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0
-AHMAZQBlAHIAaQBtAGkAcwBrAGUAcwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABz
-AGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABrAGkAbgBuAGkAdABhAG0AaQBz
-AGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nwcy8wKwYDVR0f
-BCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
-FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcY
-P2/v6X2+MA4GA1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOi
-CfP+JmeaUOTDBS8rNXiRTHyoERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+g
-kcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyLabVAyJRld/JXIWY7zoVAtjNjGr95
-HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678IIbsSt4beDI3poHS
-na9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkhMp6q
-qIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0Z
-TbvGRNs2yyqcjg==
------END CERTIFICATE-----
diff --git a/misc/certs/Microsec_e-Szigno_Root_CA.pem b/misc/certs/Microsec_e-Szigno_Root_CA.pem
deleted file mode 100644
index 01bb0be0..00000000
--- a/misc/certs/Microsec_e-Szigno_Root_CA.pem
+++ /dev/null
@@ -1,43 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAw
-cjELMAkGA1UEBhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNy
-b3NlYyBMdGQuMRQwEgYDVQQLEwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9z
-ZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0MDYxMjI4NDRaFw0xNzA0MDYxMjI4
-NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEWMBQGA1UEChMN
-TWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMTGU1p
-Y3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2u
-uO/TEdyB5s87lozWbxXGd36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+
-LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/NoqdNAoI/gqyFxuEPkEeZlApxcpMqyabA
-vjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjcQR/Ji3HWVBTji1R4P770
-Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJPqW+jqpx
-62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcB
-AQRbMFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3Aw
-LQYIKwYBBQUHMAKGIWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAP
-BgNVHRMBAf8EBTADAQH/MIIBcwYDVR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIB
-AQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3LmUtc3ppZ25vLmh1L1NaU1ov
-MIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0AdAB2AOEAbgB5
-ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
-AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABT
-AHoAbwBsAGcA4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABh
-ACAAcwB6AGUAcgBpAG4AdAAgAGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABo
-AHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMAegBpAGcAbgBvAC4AaAB1AC8AUwBa
-AFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6Ly93d3cuZS1zemln
-bm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NOPU1p
-Y3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxP
-PU1pY3Jvc2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZv
-Y2F0aW9uTGlzdDtiaW5hcnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuB
-EGluZm9AZS1zemlnbm8uaHWkdzB1MSMwIQYDVQQDDBpNaWNyb3NlYyBlLVN6aWdu
-w7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhTWjEWMBQGA1UEChMNTWlj
-cm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhVMIGsBgNV
-HSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJI
-VTERMA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDAS
-BgNVBAsTC2UtU3ppZ25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBS
-b290IENBghEAzLjnv04pGv2i3GalHCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS
-8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMTnGZjWS7KXHAM/IO8VbH0jgds
-ZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FEaGAHQzAxQmHl
-7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
-86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfR
-hUZLphK3dehKyVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/
-MPMMNz7UwiiAc7EBt51alhQBS6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
------END CERTIFICATE-----
diff --git a/misc/certs/Microsec_e-Szigno_Root_CA_2009.pem b/misc/certs/Microsec_e-Szigno_Root_CA_2009.pem
deleted file mode 100644
index aa844e75..00000000
--- a/misc/certs/Microsec_e-Szigno_Root_CA_2009.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD
-VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0
-ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G
-CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y
-OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx
-FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp
-Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
-dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP
-kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc
-cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U
-fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7
-N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC
-xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1
-+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
-A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM
-Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG
-SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h
-mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk
-ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
-tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c
-2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t
-HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW
------END CERTIFICATE-----
diff --git a/misc/certs/NetLock_Arany_=Class_Gold=_Főtanúsítvány.pem b/misc/certs/NetLock_Arany_=Class_Gold=_Főtanúsítvány.pem
deleted file mode 100644
index 56b9ee47..00000000
--- a/misc/certs/NetLock_Arany_=Class_Gold=_Főtanúsítvány.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG
-EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3
-MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl
-cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR
-dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB
-pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM
-b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm
-aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz
-IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT
-lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz
-AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5
-VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG
-ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2
-BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG
-AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M
-U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh
-bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C
-+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
-bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F
-uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2
-XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
------END CERTIFICATE-----
diff --git a/misc/certs/NetLock_Business_=Class_B=_Root.pem b/misc/certs/NetLock_Business_=Class_B=_Root.pem
deleted file mode 100644
index dd373608..00000000
--- a/misc/certs/NetLock_Business_=Class_B=_Root.pem
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD
-EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05
-OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G
-A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
-Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l
-dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG
-SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK
-gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX
-iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc
-Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E
-BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G
-SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu
-b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh
-bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv
-Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln
-aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0
-IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
-c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph
-biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo
-ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP
-UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj
-YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo
-dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA
-bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06
-sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa
-n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS
-NitjrFgBazMpUIaD8QFI
------END CERTIFICATE-----
diff --git a/misc/certs/NetLock_Express_=Class_C=_Root.pem b/misc/certs/NetLock_Express_=Class_C=_Root.pem
deleted file mode 100644
index 5f7c1ce4..00000000
--- a/misc/certs/NetLock_Express_=Class_C=_Root.pem
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD
-EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X
-DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw
-DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u
-c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr
-TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA
-OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC
-2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW
-RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P
-AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW
-ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0
-YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz
-b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO
-ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB
-IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs
-b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
-ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s
-YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg
-a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g
-SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0
-aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg
-YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg
-Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY
-ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g
-pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4
-Fp1hBWeAyNDYpQcCNJgEjTME1A==
------END CERTIFICATE-----
diff --git a/misc/certs/NetLock_Notary_=Class_A=_Root.pem b/misc/certs/NetLock_Notary_=Class_A=_Root.pem
deleted file mode 100644
index c4e61081..00000000
--- a/misc/certs/NetLock_Notary_=Class_A=_Root.pem
+++ /dev/null
@@ -1,37 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV
-MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe
-TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0
-dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB
-KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0
-N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC
-dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu
-MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL
-b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD
-zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi
-3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8
-WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY
-Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi
-NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC
-ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4
-QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0
-YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz
-aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
-IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm
-ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg
-ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs
-amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv
-IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3
-Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6
-ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1
-YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg
-dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs
-b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G
-CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO
-xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP
-0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ
-QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk
-f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK
-8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI
------END CERTIFICATE-----
diff --git a/misc/certs/NetLock_Qualified_=Class_QA=_Root.pem b/misc/certs/NetLock_Qualified_=Class_QA=_Root.pem
deleted file mode 100644
index d9368cff..00000000
--- a/misc/certs/NetLock_Qualified_=Class_QA=_Root.pem
+++ /dev/null
@@ -1,39 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQD
-EzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVneXpvaSAoQ2xhc3MgUUEpIFRhbnVz
-aXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0bG9jay5odTAeFw0w
-MzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTERMA8G
-A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
-Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5l
-dExvY2sgTWlub3NpdGV0dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZh
-bnlraWFkbzEeMBwGCSqGSIb3DQEJARYPaW5mb0BuZXRsb2NrLmh1MIIBIjANBgkq
-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRVCacbvWy5FPSKAtt2/Goq
-eKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e8ia6AFQe
-r7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO5
-3Lhbm+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWd
-vLrqOU+L73Sa58XQ0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0l
-mT+1fMptsK6ZmfoIYOcZwvK9UdPM0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4IC
-wDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAQYwggJ1Bglg
-hkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2YW55IGEgTmV0
-TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
-biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQg
-ZWxla3Ryb25pa3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywg
-dmFsYW1pbnQgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6
-b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwgYXogQWx0YWxhbm9zIFN6ZXJ6b2Rl
-c2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kgZWxqYXJhcyBtZWd0
-ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczovL3d3
-dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0Bu
-ZXRsb2NrLm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBh
-bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRo
-ZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3
-Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0IGluZm9AbmV0bG9jay5u
-ZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3DQEBBQUA
-A4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQ
-MznNwNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+
-NFAwLvt/MpqNPfMgW/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCR
-VCHnpgu0mfVRQdzNo0ci2ccBgcTcR08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY
-83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR5qq5aKrN9p2QdRLqOBrKROi3
-macqaJVmlaut74nLYKkGEsaUR+ko
------END CERTIFICATE-----
diff --git a/misc/certs/Network_Solutions_Certificate_Authority.pem b/misc/certs/Network_Solutions_Certificate_Authority.pem
deleted file mode 100644
index 11289bcd..00000000
--- a/misc/certs/Network_Solutions_Certificate_Authority.pem
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi
-MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
-MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp
-dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV
-UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO
-ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz
-c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP
-OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl
-mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF
-BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4
-qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw
-gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB
-BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu
-bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp
-dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8
-6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/
-h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH
-/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
-wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN
-pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
------END CERTIFICATE-----
diff --git a/misc/certs/OISTE_WISeKey_Global_Root_GA_CA.pem b/misc/certs/OISTE_WISeKey_Global_Root_GA_CA.pem
deleted file mode 100644
index a695c21b..00000000
--- a/misc/certs/OISTE_WISeKey_Global_Root_GA_CA.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB
-ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly
-aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
-ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w
-NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G
-A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD
-VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX
-SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR
-VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2
-w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF
-mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg
-4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9
-4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw
-DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw
-EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx
-SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2
-ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8
-vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
-hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi
-Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ
-/L7fCg0=
------END CERTIFICATE-----
diff --git a/misc/certs/QuoVadis_Root_CA.pem b/misc/certs/QuoVadis_Root_CA.pem
deleted file mode 100644
index ffa4dbe4..00000000
--- a/misc/certs/QuoVadis_Root_CA.pem
+++ /dev/null
@@ -1,34 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC
-TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz
-MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw
-IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR
-dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp
-li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D
-rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ
-WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug
-F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU
-xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC
-Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv
-dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw
-ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl
-IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh
-c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy
-ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
-Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI
-KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T
-KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq
-y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p
-dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD
-VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL
-MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk
-fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8
-7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R
-cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y
-mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW
-xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK
-SnQ2+Q==
------END CERTIFICATE-----
diff --git a/misc/certs/QuoVadis_Root_CA_2.pem b/misc/certs/QuoVadis_Root_CA_2.pem
deleted file mode 100644
index 35cc4eb5..00000000
--- a/misc/certs/QuoVadis_Root_CA_2.pem
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
-GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
-b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV
-BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
-YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa
-GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg
-Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J
-WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB
-rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp
-+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1
-ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i
-Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz
-PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og
-/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH
-oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI
-yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud
-EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2
-A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL
-MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
-ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f
-BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn
-g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl
-fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K
-WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha
-B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc
-hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR
-TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD
-mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z
-ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y
-4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza
-8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
------END CERTIFICATE-----
diff --git a/misc/certs/QuoVadis_Root_CA_3.pem b/misc/certs/QuoVadis_Root_CA_3.pem
deleted file mode 100644
index bda7b1aa..00000000
--- a/misc/certs/QuoVadis_Root_CA_3.pem
+++ /dev/null
@@ -1,38 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
-GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
-b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV
-BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
-YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM
-V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB
-4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr
-H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd
-8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv
-vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT
-mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe
-btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc
-T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt
-WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ
-c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A
-4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD
-VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG
-CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0
-aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
-aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu
-dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw
-czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G
-A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC
-TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg
-Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0
-7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem
-d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd
-+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B
-4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN
-t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x
-DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57
-k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s
-zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j
-Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT
-mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK
-4SVhM7JZG+Ju1zdXtg2pEto=
------END CERTIFICATE-----
diff --git a/misc/certs/RSA_Root_Certificate_1.pem b/misc/certs/RSA_Root_Certificate_1.pem
deleted file mode 100644
index 2b609836..00000000
--- a/misc/certs/RSA_Root_Certificate_1.pem
+++ /dev/null
@@ -1,18 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy
-NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD
-cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs
-2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY
-JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE
-Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ
-n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A
-PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu
------END CERTIFICATE-----
diff --git a/misc/certs/RSA_Security_2048_v3.pem b/misc/certs/RSA_Security_2048_v3.pem
deleted file mode 100644
index 8b30d110..00000000
--- a/misc/certs/RSA_Security_2048_v3.pem
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6
-MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
-dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX
-BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy
-MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp
-eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg
-/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl
-wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh
-AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2
-PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu
-AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
-BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR
-MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc
-HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/
-Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+
-f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO
-rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch
-6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3
-7CAFYd4=
------END CERTIFICATE-----
diff --git a/misc/certs/Root_CA_Generalitat_Valenciana.pem b/misc/certs/Root_CA_Generalitat_Valenciana.pem
deleted file mode 100644
index f001356e..00000000
--- a/misc/certs/Root_CA_Generalitat_Valenciana.pem
+++ /dev/null
@@ -1,37 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJF
-UzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJ
-R1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcN
-MDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3WjBoMQswCQYDVQQGEwJFUzEfMB0G
-A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScw
-JQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+
-WmmmO3I2F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKj
-SgbwJ/BXufjpTjJ3Cj9BZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGl
-u6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQD0EbtFpKd71ng+CT516nDOeB0/RSrFOy
-A8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXteJajCq+TA81yc477OMUxk
-Hl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMBAAGjggM7
-MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBr
-aS5ndmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIIC
-IwYKKwYBBAG/VQIBADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8A
-cgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIA
-YQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIAYQBsAGkAdABhAHQAIABWAGEA
-bABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQByAGEAYwBpAPMA
-bgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
-aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMA
-aQBvAG4AYQBtAGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQA
-ZQAgAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEA
-YwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBuAHQAcgBhACAAZQBuACAAbABhACAA
-ZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAAOgAvAC8AdwB3AHcA
-LgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0dHA6
-Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+y
-eAT8MIGVBgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQsw
-CQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0G
-A1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVu
-Y2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRhTvW1yEICKrNcda3Fbcrn
-lD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdzCkj+IHLt
-b8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg
-9J63NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XF
-ducTZnV+ZfsBn5OHiJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmC
-IoaZM3Fa6hlXPZHNqcCjbgcTpsnt+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
------END CERTIFICATE-----
diff --git a/misc/certs/S-TRUST_Authentication_and_Encryption_Root_CA_2005_PN.pem b/misc/certs/S-TRUST_Authentication_and_Encryption_Root_CA_2005_PN.pem
deleted file mode 100644
index c0328d0c..00000000
--- a/misc/certs/S-TRUST_Authentication_and_Encryption_Root_CA_2005_PN.pem
+++ /dev/null
@@ -1,26 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCB
-rjELMAkGA1UEBhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcp
-MRIwEAYDVQQHEwlTdHV0dGdhcnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fz
-c2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVTLVRSVVNUIEF1dGhlbnRpY2F0aW9u
-IGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0wNTA2MjIwMDAwMDBa
-Fw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFkZW4t
-V3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMg
-RGV1dHNjaGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJV
-U1QgQXV0aGVudGljYXRpb24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBO
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1
-toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob4QSwI7+Vio5bG0F/WsPo
-TUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXLg3KSwlOy
-ggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1
-XgqfeN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteF
-hy+S8dF2g08LOlk3KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm
-7QIDAQABo4GSMIGPMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEG
-MCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJvbmxpbmUxLTIwNDgtNTAdBgNV
-HQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAUD8oeXHngovMp
-ttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD
-pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFo
-LtU96G7m1R08P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersF
-iXOMy6ZNwPv2AtawB6MDwidAnwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0y
-h9WUUpY6RsZxlj33mA6ykaqP2vROJAA5VeitF7nTNCtKqUDMFypVZUF0Qn71wK/I
-k63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8bHz2eBIPdltkdOpQ=
------END CERTIFICATE-----
diff --git a/misc/certs/SecureSign_RootCA11.pem b/misc/certs/SecureSign_RootCA11.pem
deleted file mode 100644
index aff52a8e..00000000
--- a/misc/certs/SecureSign_RootCA11.pem
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr
-MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG
-A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0
-MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp
-Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD
-QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz
-i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8
-h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV
-MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9
-UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni
-8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC
-h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD
-VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB
-AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm
-KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ
-X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr
-QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5
-pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN
-QSdJQO7e5iNEOdyhIta6A/I=
------END CERTIFICATE-----
diff --git a/misc/certs/SecureTrust_CA.pem b/misc/certs/SecureTrust_CA.pem
deleted file mode 100644
index 37400921..00000000
--- a/misc/certs/SecureTrust_CA.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
-FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz
-MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv
-cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz
-Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO
-0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao
-wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj
-7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS
-8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT
-BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
-/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg
-JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC
-NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3
-6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/
-3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm
-D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS
-CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
-3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
------END CERTIFICATE-----
diff --git a/misc/certs/Secure_Global_CA.pem b/misc/certs/Secure_Global_CA.pem
deleted file mode 100644
index 1f4574e7..00000000
--- a/misc/certs/Secure_Global_CA.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
-GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx
-MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg
-Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ
-iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa
-/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ
-jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI
-HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7
-sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w
-gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw
-KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG
-AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L
-URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO
-H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm
-I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY
-iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
-f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
------END CERTIFICATE-----
diff --git a/misc/certs/Security_Communication_EV_RootCA1.pem b/misc/certs/Security_Communication_EV_RootCA1.pem
deleted file mode 100644
index de75da58..00000000
--- a/misc/certs/Security_Communication_EV_RootCA1.pem
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDEl
-MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMh
-U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIz
-MloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09N
-IFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNlY3VyaXR5IENvbW11
-bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSE
-RMqm4miO/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gO
-zXppFodEtZDkBp2uoQSXWHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5
-bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4zZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDF
-MxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4bepJz11sS6/vmsJWXMY1
-VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK9U2vP9eC
-OKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G
-CSqGSIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HW
-tWS3irO4G8za+6xmiEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZ
-q51ihPZRwSzJIxXYKLerJRO1RuGGAv8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDb
-EJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnWmHyojf6GPgcWkuF75x3sM3Z+
-Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEWT1MKZPlO9L9O
-VL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
------END CERTIFICATE-----
diff --git a/misc/certs/Security_Communication_RootCA2.pem b/misc/certs/Security_Communication_RootCA2.pem
deleted file mode 100644
index 078bd0e3..00000000
--- a/misc/certs/Security_Communication_RootCA2.pem
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl
-MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe
-U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX
-DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy
-dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj
-YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV
-OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr
-zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM
-VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ
-hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO
-ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw
-awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs
-OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
-DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF
-coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc
-okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8
-t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy
-1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/
-SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
------END CERTIFICATE-----
diff --git a/misc/certs/Security_Communication_Root_CA.pem b/misc/certs/Security_Communication_Root_CA.pem
deleted file mode 100644
index ad1424ac..00000000
--- a/misc/certs/Security_Communication_Root_CA.pem
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY
-MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t
-dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5
-WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD
-VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8
-9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ
-DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9
-Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N
-QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ
-xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G
-A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T
-AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG
-kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr
-Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5
-Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU
-JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot
-RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw==
------END CERTIFICATE-----
diff --git a/misc/certs/Sonera_Class_1_Root_CA.pem b/misc/certs/Sonera_Class_1_Root_CA.pem
deleted file mode 100644
index c5dad57a..00000000
--- a/misc/certs/Sonera_Class_1_Root_CA.pem
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
-MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx
-MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV
-BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG
-29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk
-oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk
-3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL
-qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN
-nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw
-DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG
-MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX
-ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H
-DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO
-TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv
-kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w
-zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa
------END CERTIFICATE-----
diff --git a/misc/certs/Sonera_Class_2_Root_CA.pem b/misc/certs/Sonera_Class_2_Root_CA.pem
deleted file mode 100644
index 36a998d2..00000000
--- a/misc/certs/Sonera_Class_2_Root_CA.pem
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
-MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx
-MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV
-BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o
-Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt
-5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s
-3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej
-vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu
-8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw
-DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG
-MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil
-zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/
-3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD
-FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6
-Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2
-ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M
------END CERTIFICATE-----
diff --git a/misc/certs/Staat_der_Nederlanden_Root_CA.pem b/misc/certs/Staat_der_Nederlanden_Root_CA.pem
deleted file mode 100644
index c4eb117f..00000000
--- a/misc/certs/Staat_der_Nederlanden_Root_CA.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO
-TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh
-dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy
-MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk
-ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn
-ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71
-9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO
-hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U
-tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o
-BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh
-SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww
-OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv
-cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA
-7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k
-/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm
-eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6
-u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy
-7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
-iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
------END CERTIFICATE-----
diff --git a/misc/certs/Staat_der_Nederlanden_Root_CA_-_G2.pem b/misc/certs/Staat_der_Nederlanden_Root_CA_-_G2.pem
deleted file mode 100644
index cedf5967..00000000
--- a/misc/certs/Staat_der_Nederlanden_Root_CA_-_G2.pem
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO
-TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh
-dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX
-DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl
-ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv
-b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291
-qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp
-uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU
-Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE
-pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp
-5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M
-UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN
-GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy
-5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv
-6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK
-eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6
-B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/
-BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov
-L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG
-SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS
-CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen
-5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897
-IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK
-gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL
-+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL
-vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm
-bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk
-N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC
-Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z
-ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ==
------END CERTIFICATE-----
diff --git a/misc/certs/Starfield_Class_2_CA.pem b/misc/certs/Starfield_Class_2_CA.pem
deleted file mode 100644
index d552e65d..00000000
--- a/misc/certs/Starfield_Class_2_CA.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
-MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
-U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
-NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
-ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
-ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
-DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
-8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
-+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
-X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
-K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
-1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
-A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
-zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
-YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
-bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
-DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
-L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
-eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
-xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
-VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
-WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
------END CERTIFICATE-----
diff --git a/misc/certs/Starfield_Root_Certificate_Authority_-_G2.pem b/misc/certs/Starfield_Root_Certificate_Authority_-_G2.pem
deleted file mode 100644
index c1a0a481..00000000
--- a/misc/certs/Starfield_Root_Certificate_Authority_-_G2.pem
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
-HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs
-ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw
-MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
-b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj
-aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp
-Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg
-nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1
-HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N
-Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN
-dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0
-HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
-BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G
-CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU
-sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3
-4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg
-8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
-pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1
-mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
------END CERTIFICATE-----
diff --git a/misc/certs/Starfield_Services_Root_Certificate_Authority_-_G2.pem b/misc/certs/Starfield_Services_Root_Certificate_Authority_-_G2.pem
deleted file mode 100644
index f7519150..00000000
--- a/misc/certs/Starfield_Services_Root_Certificate_Authority_-_G2.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
-HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs
-ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
-MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD
-VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy
-ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy
-dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p
-OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2
-8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K
-Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe
-hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk
-6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw
-DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q
-AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI
-bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB
-ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z
-qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
-iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn
-0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN
-sSi6
------END CERTIFICATE-----
diff --git a/misc/certs/StartCom_Certification_Authority_G2.pem b/misc/certs/StartCom_Certification_Authority_G2.pem
deleted file mode 100644
index 3b1e6e82..00000000
--- a/misc/certs/StartCom_Certification_Authority_G2.pem
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEW
-MBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkgRzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1
-OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoG
-A1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRzIwggIiMA0G
-CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8Oo1XJ
-JZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsD
-vfOpL9HG4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnoo
-D/Uefyf3lLE3PbfHkffiAez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/
-Q0kGi4xDuFby2X8hQxfqp0iVAXV16iulQ5XqFYSdCI0mblWbq9zSOdIxHWDirMxW
-RST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbsO+wmETRIjfaAKxojAuuK
-HDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8HvKTlXcxN
-nw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM
-0D4LnMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/i
-UUjXuG+v+E5+M5iSFGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9
-Ha90OrInwMEePnWjFqmveiJdnxMaz6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHg
-TuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJKoZIhvcNAQEL
-BQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K
-2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfX
-UfEpY9Z1zRbkJ4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl
-6/2o1PXWT6RbdejF0mCy2wl+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK
-9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG/+gyRr61M3Z3qAFdlsHB1b6uJcDJ
-HgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTcnIhT76IxW1hPkWLI
-wpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/XldblhY
-XzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5l
-IxKVCCIcl85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoo
-hdVddLHRDiBYmxOlsGOm7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulr
-so8uBtjRkcfGEvRM/TAXw8HaOFvjqermobp573PYtlNXLfbQ4ddI
------END CERTIFICATE-----
diff --git a/misc/certs/Startcom_Certification_Authority.pem b/misc/certs/Startcom_Certification_Authority.pem
deleted file mode 100644
index ccf48a4d..00000000
--- a/misc/certs/Startcom_Certification_Authority.pem
+++ /dev/null
@@ -1,43 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW
-MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
-Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9
-MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
-U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
-cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
-A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
-pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
-OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
-Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
-Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
-HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
-Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
-+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
-Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
-Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
-26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
-AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
-VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul
-F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC
-ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w
-ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk
-aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0
-YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg
-c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93
-d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG
-CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF
-wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS
-Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst
-0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc
-pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl
-CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF
-P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK
-1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm
-KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
-JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ
-8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm
-fyWl8kgAwKQB2j8=
------END CERTIFICATE-----
diff --git a/misc/certs/SwissSign_Gold_CA_-_G2.pem b/misc/certs/SwissSign_Gold_CA_-_G2.pem
deleted file mode 100644
index d7211878..00000000
--- a/misc/certs/SwissSign_Gold_CA_-_G2.pem
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
-BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln
-biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF
-MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT
-d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8
-76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+
-bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c
-6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE
-emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd
-MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt
-MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y
-MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y
-FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi
-aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM
-gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB
-qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7
-lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn
-8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
-L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6
-45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO
-UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5
-O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC
-bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv
-GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a
-77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC
-hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3
-92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp
-Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w
-ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt
-Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
------END CERTIFICATE-----
diff --git a/misc/certs/SwissSign_Platinum_CA_-_G2.pem b/misc/certs/SwissSign_Platinum_CA_-_G2.pem
deleted file mode 100644
index 0aa3e357..00000000
--- a/misc/certs/SwissSign_Platinum_CA_-_G2.pem
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE
-BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu
-IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw
-WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD
-ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y
-IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn
-IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+
-6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob
-jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw
-izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl
-+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY
-zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP
-pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF
-KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW
-ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB
-AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
-BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0
-ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
-IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA
-A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0
-uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+
-FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7
-jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/
-u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D
-YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1
-puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa
-icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG
-DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x
-kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z
-Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
------END CERTIFICATE-----
diff --git a/misc/certs/SwissSign_Silver_CA_-_G2.pem b/misc/certs/SwissSign_Silver_CA_-_G2.pem
deleted file mode 100644
index 67a172cb..00000000
--- a/misc/certs/SwissSign_Silver_CA_-_G2.pem
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE
-BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu
-IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow
-RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY
-U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
-MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv
-Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br
-YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF
-nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH
-6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt
-eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/
-c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ
-MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH
-HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf
-jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6
-5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB
-rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU
-F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c
-wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
-cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB
-AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp
-WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9
-xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ
-2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ
-IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8
-aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X
-em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR
-dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/
-OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+
-hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy
-tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
------END CERTIFICATE-----
diff --git a/misc/certs/Swisscom_Root_CA_1.pem b/misc/certs/Swisscom_Root_CA_1.pem
deleted file mode 100644
index 41b460e7..00000000
--- a/misc/certs/Swisscom_Root_CA_1.pem
+++ /dev/null
@@ -1,34 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk
-MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0
-YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg
-Q0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYT
-AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp
-Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIICIjAN
-BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9
-m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdih
-FvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/
-TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3F
-EzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbco
-kdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBu
-HYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNF
-vJbNcA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo
-19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC
-L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJW
-bjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p/r+D5kNX
-JLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw
-FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
-BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzc
-K6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzf
-ky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7Ik
-Vh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQMbFamIp1TpBcahQq4FJHgmDmHtqB
-sfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e
-3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsR
-ls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ip
-mXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH
-b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksf
-rK/7DZBaZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmms
-hFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y
-zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6
-MBr1mmz0DlP5OlvRHA==
------END CERTIFICATE-----
diff --git a/misc/certs/T-TeleSec_GlobalRoot_Class_3.pem b/misc/certs/T-TeleSec_GlobalRoot_Class_3.pem
deleted file mode 100644
index e068f844..00000000
--- a/misc/certs/T-TeleSec_GlobalRoot_Class_3.pem
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx
-KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd
-BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl
-YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1
-OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy
-aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50
-ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN
-8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/
-RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4
-hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5
-ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM
-EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj
-QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1
-A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy
-WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ
-1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30
-6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT
-91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
-e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p
-TpPDpFQUWw==
------END CERTIFICATE-----
diff --git a/misc/certs/TC_TrustCenter_Class_2_CA_II.pem b/misc/certs/TC_TrustCenter_Class_2_CA_II.pem
deleted file mode 100644
index c28ac18d..00000000
--- a/misc/certs/TC_TrustCenter_Class_2_CA_II.pem
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL
-MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
-BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
-Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1
-OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
-SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc
-VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf
-tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg
-uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J
-XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK
-8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99
-5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3
-kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
-dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6
-Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
-JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
-Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS
-GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt
-ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8
-au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV
-hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI
-dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ==
------END CERTIFICATE-----
diff --git a/misc/certs/TC_TrustCenter_Class_3_CA_II.pem b/misc/certs/TC_TrustCenter_Class_3_CA_II.pem
deleted file mode 100644
index 78e6ca59..00000000
--- a/misc/certs/TC_TrustCenter_Class_3_CA_II.pem
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL
-MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
-BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
-Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1
-OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
-SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc
-VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW
-Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q
-Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2
-1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq
-ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1
-Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX
-XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
-dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6
-Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
-JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
-Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN
-irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8
-TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6
-g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB
-95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj
-S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A==
------END CERTIFICATE-----
diff --git a/misc/certs/TC_TrustCenter_Universal_CA_I.pem b/misc/certs/TC_TrustCenter_Universal_CA_I.pem
deleted file mode 100644
index 8b8caf55..00000000
--- a/misc/certs/TC_TrustCenter_Universal_CA_I.pem
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL
-MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
-BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1
-c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx
-MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg
-R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD
-VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR
-JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T
-fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu
-jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z
-wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ
-fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD
-VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO
-BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G
-CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1
-7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn
-8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs
-ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
-ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/
-2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
------END CERTIFICATE-----
diff --git a/misc/certs/TC_TrustCenter_Universal_CA_III.pem b/misc/certs/TC_TrustCenter_Universal_CA_III.pem
deleted file mode 100644
index b7926f15..00000000
--- a/misc/certs/TC_TrustCenter_Universal_CA_III.pem
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezEL
-MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
-BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1
-c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAeFw0wOTA5MDkwODE1MjdaFw0yOTEy
-MzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNUQyBUcnVzdENlbnRl
-ciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0ExKDAm
-BgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF
-5+cvAqBNLaT6hdqbJYUtQCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYv
-DIRlzg9uwliT6CwLOunBjvvya8o84pxOjuT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8v
-zArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+EutCHnNaYlAJ/Uqwa1D7KRT
-yGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1M4BDj5yj
-dipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBh
-MB8GA1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMB
-Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI
-4jANBgkqhkiG9w0BAQUFAAOCAQEAg8ev6n9NCjw5sWi+e22JLumzCecYV42Fmhfz
-dkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+KGwWaODIl0YgoGhnYIg5IFHY
-aAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhKBgePxLcHsU0G
-DeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV
-CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPH
-LQNjO9Po5KIqwoIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
------END CERTIFICATE-----
diff --git a/misc/certs/TDC_Internet_Root_CA.pem b/misc/certs/TDC_Internet_Root_CA.pem
deleted file mode 100644
index 21ccc8f1..00000000
--- a/misc/certs/TDC_Internet_Root_CA.pem
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE
-SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg
-Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV
-BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl
-cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA
-vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu
-Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a
-0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1
-4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN
-eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD
-R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG
-A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu
-dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME
-Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3
-WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw
-HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ
-KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO
-Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX
-wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
-2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89
-9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0
-jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38
-aQNiuJkFBT1reBK9sG9l
------END CERTIFICATE-----
diff --git a/misc/certs/TDC_OCES_Root_CA.pem b/misc/certs/TDC_OCES_Root_CA.pem
deleted file mode 100644
index e1cce316..00000000
--- a/misc/certs/TDC_OCES_Root_CA.pem
+++ /dev/null
@@ -1,30 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJE
-SzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEw
-ODM5MzBaFw0zNzAyMTEwOTA5MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNU
-REMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuHnEz9pPPEXyG9VhDr
-2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0zY0s
-2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItU
-GBxIYXvViGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKj
-dGqPqcNiKXEx5TukYBdedObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+r
-TpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/
-BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB5DCB4TCB3gYIKoFQgSkB
-AQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5kay9yZXBv
-c2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRl
-ciBmcmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEu
-MS4xLiBDZXJ0aWZpY2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIg
-T0lEIDEuMi4yMDguMTY5LjEuMS4xLjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1Ud
-HwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEMMAoGA1UEChMDVERDMRQwEgYD
-VQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYmaHR0cDovL2Ny
-bC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
-MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZ
-J2cdUBVLc647+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqG
-SIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACrom
-JkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4A9G28kNBKWKnctj7fAXmMXAnVBhO
-inxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYscA+UYyAFMP8uXBV2Y
-caaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9AOoB
-mbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQ
-YqbsFbS1AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9
-BKNDLdr8C2LqL19iUw==
------END CERTIFICATE-----
diff --git a/misc/certs/TURKTRUST_Certificate_Services_Provider_Root_1.pem b/misc/certs/TURKTRUST_Certificate_Services_Provider_Root_1.pem
deleted file mode 100644
index 4069c783..00000000
--- a/misc/certs/TURKTRUST_Certificate_Services_Provider_Root_1.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGDAJUUjEPMA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykg
-MjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8
-dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMxMDI3MTdaFw0xNTAz
-MjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2Vy
-dGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYD
-VQQHDAZBTktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kg
-xLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEu
-xZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7
-XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GXyGl8hMW0kWxsE2qkVa2k
-heiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8iSi9BB35J
-YbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5C
-urKZ8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1
-JuTm5Rh8i27fbMx4W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51
-b0dewQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV
-9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46sWrv7/hg0Uw2ZkUd82YCdAR7
-kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxEq8Sn5RTOPEFh
-fEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
-B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdA
-aLX/7KfS0zgYnNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKS
-RGQDJereW26fyfJOrN3H
------END CERTIFICATE-----
diff --git a/misc/certs/TURKTRUST_Certificate_Services_Provider_Root_2.pem b/misc/certs/TURKTRUST_Certificate_Services_Provider_Root_2.pem
deleted file mode 100644
index 5205c777..00000000
--- a/misc/certs/TURKTRUST_Certificate_Services_Provider_Root_2.pem
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xS
-S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg
-SGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcNMDUxMTA3MTAwNzU3
-WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVrdHJv
-bmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJU
-UjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSw
-bGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWe
-LiAoYykgS2FzxLFtIDIwMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqeLCDe2JAOCtFp0if7qnef
-J1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKIx+XlZEdh
-R3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJ
-Qv2gQrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGX
-JHpsmxcPbe9TmJEr5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1p
-zpwACPI2/z7woQ8arBT9pmAPAgMBAAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58S
-Fq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
-KoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/nttRbj2hWyfIvwq
-ECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
-Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFz
-gw2lGh1uEpJ+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotH
-uFEJjOp9zYhys2AzsfAKRO8P9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LS
-y3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5UrbnBEI=
------END CERTIFICATE-----
diff --git a/misc/certs/TÜBİTAK_UEKAE_Kök_Sertifika_Hizmet_Sağlayıcısı_-_Sürüm_3.pem b/misc/certs/TÜBİTAK_UEKAE_Kök_Sertifika_Hizmet_Sağlayıcısı_-_Sürüm_3.pem
deleted file mode 100644
index ab1606c2..00000000
--- a/misc/certs/TÜBİTAK_UEKAE_Kök_Sertifika_Hizmet_Sağlayıcısı_-_Sürüm_3.pem
+++ /dev/null
@@ -1,30 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRS
-MRgwFgYDVQQHDA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJp
-bGltc2VsIHZlIFRla25vbG9qaWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSw
-VEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ryb25payB2ZSBLcmlwdG9sb2ppIEFy
-YcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNVBAsMGkthbXUgU2Vy
-dGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUgS8O2
-ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAe
-Fw0wNzA4MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIx
-GDAWBgNVBAcMD0dlYnplIC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmls
-aW1zZWwgdmUgVGVrbm9sb2ppayBBcmHFn3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBU
-QUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZlIEtyaXB0b2xvamkgQXJh
-xZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2FtdSBTZXJ0
-aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7Zr
-IFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4h
-gb46ezzb8R1Sf1n68yJMlaCQvEhOEav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yK
-O7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1xnnRFDDtG1hba+818qEhTsXO
-fJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR6Oqeyjh1jmKw
-lZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
-hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQID
-AQABo0IwQDAdBgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/
-BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmP
-NOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4N5EY3ATIZJkrGG2AA1nJrvhY0D7t
-wyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLTy9LQQfMmNkqblWwM
-7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYhLBOh
-gLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5n
-oN+J1q2MdqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUs
-yZyQ2uypQjyttgI=
------END CERTIFICATE-----
diff --git a/misc/certs/TWCA_Root_Certification_Authority.pem b/misc/certs/TWCA_Root_Certification_Authority.pem
deleted file mode 100644
index 8d39bc6f..00000000
--- a/misc/certs/TWCA_Root_Certification_Authority.pem
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES
-MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU
-V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz
-WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO
-LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE
-AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH
-K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX
-RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z
-rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx
-3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq
-hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC
-MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls
-XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D
-lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn
-aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ
-YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
------END CERTIFICATE-----
diff --git a/misc/certs/Taiwan_GRCA.pem b/misc/certs/Taiwan_GRCA.pem
deleted file mode 100644
index 51187d8a..00000000
--- a/misc/certs/Taiwan_GRCA.pem
+++ /dev/null
@@ -1,32 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/
-MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow
-PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
-AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR
-IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q
-gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy
-yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts
-F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2
-jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx
-ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC
-VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK
-YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH
-EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN
-Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud
-DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE
-MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK
-UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
-TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf
-qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK
-ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE
-JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7
-hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1
-EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm
-nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX
-udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz
-ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe
-LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl
-pYYsfPQS
------END CERTIFICATE-----
diff --git a/misc/certs/Thawte_Premium_Server_CA.pem b/misc/certs/Thawte_Premium_Server_CA.pem
deleted file mode 100644
index 51285e33..00000000
--- a/misc/certs/Thawte_Premium_Server_CA.pem
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
-VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
-dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
-MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
-MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
-A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
-b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
-cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
-bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
-VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
-ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
-uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
-9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
-hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
-pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
------END CERTIFICATE-----
diff --git a/misc/certs/Thawte_Server_CA.pem b/misc/certs/Thawte_Server_CA.pem
deleted file mode 100644
index 27df192f..00000000
--- a/misc/certs/Thawte_Server_CA.pem
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
-VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
-MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
-MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
-DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
-dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
-cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
-DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
-gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
-yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
-L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
-EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
-7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
-QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
-qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
------END CERTIFICATE-----
diff --git a/misc/certs/Trustis_FPS_Root_CA.pem b/misc/certs/Trustis_FPS_Root_CA.pem
deleted file mode 100644
index fb804c94..00000000
--- a/misc/certs/Trustis_FPS_Root_CA.pem
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF
-MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL
-ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx
-MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc
-MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+
-AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH
-iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj
-vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA
-0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB
-OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/
-BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E
-FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01
-GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW
-zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4
-1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE
-f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F
-jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN
-ZetX2fNXlrtIzYE=
------END CERTIFICATE-----
diff --git a/misc/certs/UTN_DATACorp_SGC_Root_CA.pem b/misc/certs/UTN_DATACorp_SGC_Root_CA.pem
deleted file mode 100644
index 1c747eb5..00000000
--- a/misc/certs/UTN_DATACorp_SGC_Root_CA.pem
+++ /dev/null
@@ -1,26 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB
-kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw
-IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG
-EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
-VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu
-dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6
-E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ
-D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK
-4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq
-lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW
-bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB
-o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
-MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js
-LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr
-BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB
-AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
-Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj
-j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH
-KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv
-2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3
-mfnGV/TJVTl4uix5yaaIK/QI
------END CERTIFICATE-----
diff --git a/misc/certs/UTN_USERFirst_Email_Root_CA.pem b/misc/certs/UTN_USERFirst_Email_Root_CA.pem
deleted file mode 100644
index 97c392fa..00000000
--- a/misc/certs/UTN_USERFirst_Email_Root_CA.pem
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB
-rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt
-Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa
-Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV
-BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l
-dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE
-AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B
-YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9
-hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l
-L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm
-SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM
-1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws
-6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud
-DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw
-Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50
-aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
-AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u
-7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0
-xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ
-rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim
-eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk
-USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
------END CERTIFICATE-----
diff --git a/misc/certs/UTN_USERFirst_Hardware_Root_CA.pem b/misc/certs/UTN_USERFirst_Hardware_Root_CA.pem
deleted file mode 100644
index 46386b73..00000000
--- a/misc/certs/UTN_USERFirst_Hardware_Root_CA.pem
+++ /dev/null
@@ -1,26 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
-lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
-SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
-A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
-MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
-d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
-cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
-0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
-M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
-MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
-oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
-DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
-oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
-dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
-bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
-BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
-//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
-CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
-CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
-3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
-KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
------END CERTIFICATE-----
diff --git a/misc/certs/ValiCert_Class_1_VA.pem b/misc/certs/ValiCert_Class_1_VA.pem
deleted file mode 100644
index 3997ac24..00000000
--- a/misc/certs/ValiCert_Class_1_VA.pem
+++ /dev/null
@@ -1,18 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy
-NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y
-LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+
-TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y
-TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0
-LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW
-I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw
-nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI
------END CERTIFICATE-----
diff --git a/misc/certs/ValiCert_Class_2_VA.pem b/misc/certs/ValiCert_Class_2_VA.pem
deleted file mode 100644
index 85a877b8..00000000
--- a/misc/certs/ValiCert_Class_2_VA.pem
+++ /dev/null
@@ -1,18 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
-NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
-dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
-WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
-v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
-UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
-IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
-W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
------END CERTIFICATE-----
diff --git a/misc/certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G4.pem b/misc/certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G4.pem
deleted file mode 100644
index e19fdea0..00000000
--- a/misc/certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G4.pem
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
-ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
-U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp
-U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg
-SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln
-biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm
-GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve
-fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw
-AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ
-aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj
-aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW
-kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC
-4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga
-FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
------END CERTIFICATE-----
diff --git a/misc/certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.pem b/misc/certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.pem
deleted file mode 100644
index 707ff085..00000000
--- a/misc/certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.pem
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
-yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
-ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
-U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
-ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
-ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
-U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
-nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
-t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
-SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
-BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
-rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
-NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
-BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
-BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
-aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
-MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
-p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
-5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
-WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
-4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
-hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
------END CERTIFICATE-----
diff --git a/misc/certs/VeriSign_Universal_Root_Certification_Authority.pem b/misc/certs/VeriSign_Universal_Root_Certification_Authority.pem
deleted file mode 100644
index b5f18751..00000000
--- a/misc/certs/VeriSign_Universal_Root_Certification_Authority.pem
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB
-vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
-ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp
-U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W
-ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
-Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0
-IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y
-IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh
-bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF
-9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH
-H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H
-LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN
-/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT
-rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw
-WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs
-exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
-DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4
-sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+
-seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz
-4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+
-BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR
-lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3
-7M2CYfE45k+XmCpajQ==
------END CERTIFICATE-----
diff --git a/misc/certs/Verisign_Class_1_Public_Primary_Certification_Authority.pem b/misc/certs/Verisign_Class_1_Public_Primary_Certification_Authority.pem
deleted file mode 100644
index cd0e805f..00000000
--- a/misc/certs/Verisign_Class_1_Public_Primary_Certification_Authority.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAxIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
-MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
-BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
-ADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0f
-zGVuDLDQVoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHi
-TkVWaR94AoDa3EeRKbs2yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0G
-CSqGSIb3DQEBBQUAA4GBAFgVKTk8d6PaXCUDfGD67gmZPCcQcMgMCeazh88K4hiW
-NWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n0a3hUKw8fGJLj7qE1xIV
-Gx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZRjXZ+Hxb
------END CERTIFICATE-----
diff --git a/misc/certs/Verisign_Class_1_Public_Primary_Certification_Authority_-_G2.pem b/misc/certs/Verisign_Class_1_Public_Primary_Certification_Authority_-_G2.pem
deleted file mode 100644
index c7b612a2..00000000
--- a/misc/certs/Verisign_Class_1_Public_Primary_Certification_Authority_-_G2.pem
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK
-VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm
-Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J
-h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul
-uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68
-DzFc6PLZ
------END CERTIFICATE-----
diff --git a/misc/certs/Verisign_Class_1_Public_Primary_Certification_Authority_-_G3.pem b/misc/certs/Verisign_Class_1_Public_Primary_Certification_Authority_-_G3.pem
deleted file mode 100644
index 3938d872..00000000
--- a/misc/certs/Verisign_Class_1_Public_Primary_Certification_Authority_-_G3.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4
-nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO
-8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV
-ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb
-PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
-6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr
-n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a
-qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4
-wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
-ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs
-pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4
-E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
------END CERTIFICATE-----
diff --git a/misc/certs/Verisign_Class_2_Public_Primary_Certification_Authority_-_G2.pem b/misc/certs/Verisign_Class_2_Public_Primary_Certification_Authority_-_G2.pem
deleted file mode 100644
index c2e9d2bc..00000000
--- a/misc/certs/Verisign_Class_2_Public_Primary_Certification_Authority_-_G2.pem
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns
-YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
-MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
-aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe
-Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj
-IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx
-KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
-eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM
-HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw
-DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC
-AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji
-nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX
-rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn
-jBJ7xUS0rg==
------END CERTIFICATE-----
diff --git a/misc/certs/Verisign_Class_2_Public_Primary_Certification_Authority_-_G3.pem b/misc/certs/Verisign_Class_2_Public_Primary_Certification_Authority_-_G3.pem
deleted file mode 100644
index 66928109..00000000
--- a/misc/certs/Verisign_Class_2_Public_Primary_Certification_Authority_-_G3.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy
-aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s
-IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp
-Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV
-BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
-Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu
-Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g
-Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
-IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU
-J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO
-JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY
-wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o
-koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
-qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E
-Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe
-xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u
-7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
-sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI
-sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP
-cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
------END CERTIFICATE-----
diff --git a/misc/certs/Verisign_Class_3_Public_Primary_Certification_Authority.pem b/misc/certs/Verisign_Class_3_Public_Primary_Certification_Authority.pem
deleted file mode 100644
index d209ab6f..00000000
--- a/misc/certs/Verisign_Class_3_Public_Primary_Certification_Authority.pem
+++ /dev/null
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
-MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
-BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
-ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
-BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
-I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
-CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i
-2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWXbj9T/UWZYB2oK0z5XqcJ
-2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/D/xwzoiQ
------END CERTIFICATE-----
diff --git a/misc/certs/Verisign_Class_3_Public_Primary_Certification_Authority_-_G2.pem b/misc/certs/Verisign_Class_3_Public_Primary_Certification_Authority_-_G2.pem
deleted file mode 100644
index 2202c692..00000000
--- a/misc/certs/Verisign_Class_3_Public_Primary_Certification_Authority_-_G2.pem
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
-pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
-13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
-U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
-F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
-oJ2daZH9
------END CERTIFICATE-----
diff --git a/misc/certs/Verisign_Class_3_Public_Primary_Certification_Authority_-_G3.pem b/misc/certs/Verisign_Class_3_Public_Primary_Certification_Authority_-_G3.pem
deleted file mode 100644
index 68803644..00000000
--- a/misc/certs/Verisign_Class_3_Public_Primary_Certification_Authority_-_G3.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
-N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
-KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
-kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
-CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
-Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
-imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
-2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
-DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
-/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
-F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
-TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
------END CERTIFICATE-----
diff --git a/misc/certs/Verisign_Class_4_Public_Primary_Certification_Authority_-_G3.pem b/misc/certs/Verisign_Class_4_Public_Primary_Certification_Authority_-_G3.pem
deleted file mode 100644
index a0c3ef82..00000000
--- a/misc/certs/Verisign_Class_4_Public_Primary_Certification_Authority_-_G3.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
-GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
-+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
-U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
-NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
-ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
-ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
-CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
-g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
-fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
-2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
-bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
------END CERTIFICATE-----
diff --git a/misc/certs/Visa_eCommerce_Root.pem b/misc/certs/Visa_eCommerce_Root.pem
deleted file mode 100644
index 6e1ccd8e..00000000
--- a/misc/certs/Visa_eCommerce_Root.pem
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr
-MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl
-cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
-bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw
-CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h
-dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l
-cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h
-2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E
-lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV
-ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq
-299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t
-vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL
-dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
-AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF
-AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR
-zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3
-LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd
-7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw
-++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
-398znM/jra6O1I7mT1GvFpLgXPYHDw==
------END CERTIFICATE-----
diff --git a/misc/certs/WellsSecure_Public_Root_Certificate_Authority.pem b/misc/certs/WellsSecure_Public_Root_Certificate_Authority.pem
deleted file mode 100644
index 5a265ef0..00000000
--- a/misc/certs/WellsSecure_Public_Root_Certificate_Authority.pem
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMx
-IDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxs
-cyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9v
-dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcxMjEzMTcwNzU0WhcNMjIxMjE0
-MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdl
-bGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQD
-DC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+r
-WxxTkqxtnt3CxC5FlAM1iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjU
-Dk/41itMpBb570OYj7OeUt9tkTmPOL13i0Nj67eT/DBMHAGTthP796EfvyXhdDcs
-HqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8bJVhHlfXBIEyg1J55oNj
-z7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiBK0HmOFaf
-SZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/Slwxl
-AgMBAAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqG
-KGh0dHA6Ly9jcmwucGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0P
-AQH/BAQDAgHGMB0GA1UdDgQWBBQmlRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0j
-BIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGBi6SBiDCBhTELMAkGA1UEBhMC
-VVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNX
-ZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEB
-ALkVsUSRzCPIK0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd
-/ZDJPHV3V3p9+N701NX3leZ0bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pB
-A4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSljqHyita04pO2t/caaH/+Xc/77szWn
-k4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+esE2fDbbFwRnzVlhE9
-iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJtylv
-2G0xffX8oRAHh84vWdw+WNs=
------END CERTIFICATE-----
diff --git a/misc/certs/Wells_Fargo_Root_CA.pem b/misc/certs/Wells_Fargo_Root_CA.pem
deleted file mode 100644
index 2ba88cdd..00000000
--- a/misc/certs/Wells_Fargo_Root_CA.pem
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v
-dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0
-MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww
-KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G
-A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13
-5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE
-SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O
-JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu
-ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE
-AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB
-AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB
-CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw
-b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo
-7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/
-0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7
-nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
-x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ
-33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
------END CERTIFICATE-----
diff --git a/misc/certs/XRamp_Global_CA_Root.pem b/misc/certs/XRamp_Global_CA_Root.pem
deleted file mode 100644
index f21e6d8b..00000000
--- a/misc/certs/XRamp_Global_CA_Root.pem
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
-gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
-MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY
-UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx
-NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3
-dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy
-dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6
-38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP
-KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q
-DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4
-qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa
-JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi
-PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P
-BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs
-jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0
-eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD
-ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR
-vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
-qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa
-IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
-i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
-O+7ETPTsJ3xCwnR8gooJybQDJbw=
------END CERTIFICATE-----
diff --git a/misc/certs/a0bc6fbb.0 b/misc/certs/a0bc6fbb.0
deleted file mode 100644
index f5053061..00000000
--- a/misc/certs/a0bc6fbb.0
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn
-MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
-ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo
-YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9
-MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy
-NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G
-A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA
-A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0
-Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s
-QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV
-eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795
-B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh
-z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T
-AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i
-ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w
-TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH
-MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD
-VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE
-VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
-bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B
-AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM
-bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi
-ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG
-VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c
-ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/
-AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
------END CERTIFICATE-----
diff --git a/misc/certs/a15b3b6b.0 b/misc/certs/a15b3b6b.0
deleted file mode 100644
index 32b72ee3..00000000
--- a/misc/certs/a15b3b6b.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
-UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
-EwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJ
-BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
-ETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC/
-k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGODVvso
-LeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3o
-TQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCG
-SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
-JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
-RFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3
-MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6C
-TShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5
-WzAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
-SIb3DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR
-xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL
-B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID
------END CERTIFICATE-----
diff --git a/misc/certs/a2df7ad7.0 b/misc/certs/a2df7ad7.0
deleted file mode 100644
index b9665db7..00000000
--- a/misc/certs/a2df7ad7.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx
-MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB
-ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV
-BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV
-6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX
-GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP
-dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH
-1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF
-62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW
-BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw
-AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL
-MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU
-cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv
-b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6
-IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/
-iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
-GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh
-4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm
-XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
------END CERTIFICATE-----
diff --git a/misc/certs/a3896b44.0 b/misc/certs/a3896b44.0
deleted file mode 100644
index ad1424ac..00000000
--- a/misc/certs/a3896b44.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY
-MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t
-dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5
-WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD
-VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8
-9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ
-DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9
-Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N
-QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ
-xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G
-A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T
-AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG
-kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr
-Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5
-Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU
-JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot
-RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw==
------END CERTIFICATE-----
diff --git a/misc/certs/a5fd78f0.0 b/misc/certs/a5fd78f0.0
deleted file mode 100644
index c28ac18d..00000000
--- a/misc/certs/a5fd78f0.0
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL
-MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
-BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
-Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1
-OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
-SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc
-VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf
-tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg
-uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J
-XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK
-8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99
-5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3
-kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
-dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6
-Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
-JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
-Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS
-GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt
-ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8
-au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV
-hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI
-dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ==
------END CERTIFICATE-----
diff --git a/misc/certs/a6a593ba.0 b/misc/certs/a6a593ba.0
deleted file mode 100644
index 4e25ac5d..00000000
--- a/misc/certs/a6a593ba.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
-UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
-EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ
-BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
-ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg
-bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ
-j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV
-Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG
-SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
-JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
-RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw
-MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5
-fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i
-+DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
-SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN
-QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+
-gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl
------END CERTIFICATE-----
diff --git a/misc/certs/a7605362.0 b/misc/certs/a7605362.0
deleted file mode 100644
index 36a998d2..00000000
--- a/misc/certs/a7605362.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
-MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx
-MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV
-BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o
-Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt
-5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s
-3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej
-vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu
-8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw
-DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG
-MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil
-zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/
-3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD
-FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6
-Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2
-ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M
------END CERTIFICATE-----
diff --git a/misc/certs/a760e1bd.0 b/misc/certs/a760e1bd.0
deleted file mode 100644
index 6e1ccd8e..00000000
--- a/misc/certs/a760e1bd.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr
-MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl
-cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
-bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw
-CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h
-dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l
-cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h
-2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E
-lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV
-ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq
-299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t
-vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL
-dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
-AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF
-AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR
-zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3
-LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd
-7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw
-++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
-398znM/jra6O1I7mT1GvFpLgXPYHDw==
------END CERTIFICATE-----
diff --git a/misc/certs/a7d2cf64.0 b/misc/certs/a7d2cf64.0
deleted file mode 100644
index 447ee3d8..00000000
--- a/misc/certs/a7d2cf64.0
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL
-MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp
-IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi
-BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw
-MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
-d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig
-YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v
-dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/
-BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6
-papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K
-DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3
-KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox
-XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
------END CERTIFICATE-----
diff --git a/misc/certs/a8dee976.0 b/misc/certs/a8dee976.0
deleted file mode 100644
index 0aa3e357..00000000
--- a/misc/certs/a8dee976.0
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE
-BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu
-IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw
-WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD
-ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y
-IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn
-IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+
-6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob
-jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw
-izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl
-+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY
-zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP
-pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF
-KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW
-ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB
-AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
-BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0
-ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
-IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA
-A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0
-uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+
-FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7
-jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/
-u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D
-YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1
-puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa
-icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG
-DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x
-kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z
-Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
------END CERTIFICATE-----
diff --git a/misc/certs/ab5346f4.0 b/misc/certs/ab5346f4.0
deleted file mode 100644
index aff52a8e..00000000
--- a/misc/certs/ab5346f4.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr
-MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG
-A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0
-MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp
-Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD
-QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz
-i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8
-h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV
-MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9
-UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni
-8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC
-h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD
-VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB
-AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm
-KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ
-X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr
-QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5
-pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN
-QSdJQO7e5iNEOdyhIta6A/I=
------END CERTIFICATE-----
diff --git a/misc/certs/ad088e1d.0 b/misc/certs/ad088e1d.0
deleted file mode 100644
index 6bc28885..00000000
--- a/misc/certs/ad088e1d.0
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy
-c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE
-BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0
-IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV
-VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8
-cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT
-QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh
-F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v
-c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w
-mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd
-VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX
-teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ
-f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe
-Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+
-nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB
-/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY
-MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG
-9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
-aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX
-IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn
-ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z
-uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN
-Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja
-QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW
-koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9
-ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt
-DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm
-bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw=
------END CERTIFICATE-----
diff --git a/misc/certs/add67345.0 b/misc/certs/add67345.0
deleted file mode 100644
index c4e61081..00000000
--- a/misc/certs/add67345.0
+++ /dev/null
@@ -1,37 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV
-MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe
-TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0
-dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB
-KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0
-N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC
-dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu
-MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL
-b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD
-zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi
-3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8
-WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY
-Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi
-NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC
-ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4
-QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0
-YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz
-aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
-IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm
-ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg
-ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs
-amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv
-IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3
-Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6
-ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1
-YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg
-dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs
-b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G
-CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO
-xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP
-0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ
-QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk
-f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK
-8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI
------END CERTIFICATE-----
diff --git a/misc/certs/ae8153b9.0 b/misc/certs/ae8153b9.0
deleted file mode 100644
index ccf48a4d..00000000
--- a/misc/certs/ae8153b9.0
+++ /dev/null
@@ -1,43 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW
-MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
-Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9
-MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
-U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
-cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
-A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
-pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
-OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
-Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
-Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
-HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
-Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
-+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
-Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
-Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
-26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
-AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
-VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul
-F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC
-ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w
-ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk
-aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0
-YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg
-c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93
-d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG
-CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF
-wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS
-Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst
-0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc
-pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl
-CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF
-P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK
-1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm
-KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
-JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ
-8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm
-fyWl8kgAwKQB2j8=
------END CERTIFICATE-----
diff --git a/misc/certs/aeb67534.0 b/misc/certs/aeb67534.0
deleted file mode 100644
index 87a13f62..00000000
--- a/misc/certs/aeb67534.0
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB
-8zELMAkGA1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2Vy
-dGlmaWNhY2lvIChOSUYgUS0wODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1
-YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYDVQQLEyxWZWdldSBodHRwczovL3d3
-dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UECxMsSmVyYXJxdWlh
-IEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMTBkVD
-LUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQG
-EwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8g
-KE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBD
-ZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQu
-bmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMg
-ZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUNDMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R
-85iKw5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm
-4CgPukLjbo73FCeTae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaV
-HMf5NLWUhdWZXqBIoH7nF2W4onW4HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNd
-QlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0aE9jD2z3Il3rucO2n5nzbcc8t
-lGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw0JDnJwIDAQAB
-o4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4
-opvpXY0wfwYDVR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBo
-dHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidW
-ZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAwDQYJKoZIhvcN
-AQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJlF7W2u++AVtd0x7Y
-/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNaAl6k
-SBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhy
-Rp/7SNVel+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOS
-Agu+TGbrIP65y7WZf+a2E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xl
-nJ2lYJU6Un/10asIbvPuW/mIPX64b24D5EI=
------END CERTIFICATE-----
diff --git a/misc/certs/aee5f10d.0 b/misc/certs/aee5f10d.0
deleted file mode 100644
index 06926c8e..00000000
--- a/misc/certs/aee5f10d.0
+++ /dev/null
@@ -1,26 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
-RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
-bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
-IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy
-MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
-LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
-YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
-A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
-K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
-sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
-MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
-XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
-HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
-4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA
-vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G
-CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA
-WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
-oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ
-h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18
-f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN
-B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy
-vUxFnmG6v4SBkgPR0ml8xQ==
------END CERTIFICATE-----
diff --git a/misc/certs/b097d71d.0 b/misc/certs/b097d71d.0
deleted file mode 100644
index 5a324a35..00000000
--- a/misc/certs/b097d71d.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEFTCCA36gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBvjELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UE
-ChMfU29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9z
-dG1hc3RlcjEgMB4GA1UEAxMXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJTAjBgkq
-hkiG9w0BCQEWFmhvc3RtYXN0ZXJAc3BpLWluYy5vcmcwHhcNMDMwMTE1MTYyOTE3
-WhcNMDcwMTE0MTYyOTE3WjCBvjELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0luZGlh
-bmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMfU29mdHdhcmUgaW4g
-dGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1hc3RlcjEgMB4GA1UE
-AxMXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJTAjBgkqhkiG9w0BCQEWFmhvc3Rt
-YXN0ZXJAc3BpLWluYy5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAPB6
-rdoiLR3RodtM22LMcfwfqb5OrJNl7fwmvskgF7yP6sdD2bOfDIXhg9852jhY8/kL
-VOFe1ELAL2OyN4RAxk0rliZQVgeTgqvgkOVIBbNwgnjN6mqtuWzFiPL+NXQExq40
-I3whM+4lEiwSHaV+MYxWanMdhc+kImT50LKfkxcdAgMBAAGjggEfMIIBGzAdBgNV
-HQ4EFgQUB63oQR1/vda/G4F6P4xLiN4E0vowgesGA1UdIwSB4zCB4IAUB63oQR1/
-vda/G4F6P4xLiN4E0vqhgcSkgcEwgb4xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdJ
-bmRpYW5hMRUwEwYDVQQHEwxJbmRpYW5hcG9saXMxKDAmBgNVBAoTH1NvZnR3YXJl
-IGluIHRoZSBQdWJsaWMgSW50ZXJlc3QxEzARBgNVBAsTCmhvc3RtYXN0ZXIxIDAe
-BgNVBAMTF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MSUwIwYJKoZIhvcNAQkBFhZo
-b3N0bWFzdGVyQHNwaS1pbmMub3JnggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcN
-AQEEBQADgYEAm/Abn8c2y1nO3fgpAIslxvi9iNBZDhQtJ0VQZY6wgSfANyDOR4DW
-iexO/AlorB49KnkFS7TjCAoLOZhcg5FaNiKnlstMI5krQmau1Qnb/vGSNsE/UGms
-1ts+QYPUs0KmGEAFUri2XzLy+aQo9Kw74VBvqnxvaaMeY5yMcKNOieY=
------END CERTIFICATE-----
diff --git a/misc/certs/b0f3e76e.0 b/misc/certs/b0f3e76e.0
deleted file mode 100644
index f4ce4ca4..00000000
--- a/misc/certs/b0f3e76e.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
-A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
-b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
-MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
-YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
-aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
-jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
-xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
-1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
-snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
-U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
-9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
-BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
-AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
-yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
-38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
-AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
-DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
-HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
------END CERTIFICATE-----
diff --git a/misc/certs/b1159c4c.0 b/misc/certs/b1159c4c.0
deleted file mode 100644
index 2731638b..00000000
--- a/misc/certs/b1159c4c.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
-b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
-cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
-JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
-mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
-wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
-VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
-AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
-AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
-BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
-pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
-dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
-fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
-NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
-H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
-+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
------END CERTIFICATE-----
diff --git a/misc/certs/b13cc6df.0 b/misc/certs/b13cc6df.0
deleted file mode 100644
index 46386b73..00000000
--- a/misc/certs/b13cc6df.0
+++ /dev/null
@@ -1,26 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
-lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
-SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
-A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
-MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
-d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
-cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
-0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
-M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
-MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
-oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
-DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
-oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
-dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
-bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
-BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
-//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
-CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
-CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
-3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
-KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
------END CERTIFICATE-----
diff --git a/misc/certs/b1b8a7f3.0 b/misc/certs/b1b8a7f3.0
deleted file mode 100644
index a695c21b..00000000
--- a/misc/certs/b1b8a7f3.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB
-ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly
-aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
-ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w
-NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G
-A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD
-VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX
-SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR
-VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2
-w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF
-mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg
-4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9
-4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw
-DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw
-EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx
-SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2
-ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8
-vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
-hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi
-Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ
-/L7fCg0=
------END CERTIFICATE-----
diff --git a/misc/certs/b204d74a.0 b/misc/certs/b204d74a.0
deleted file mode 100644
index 707ff085..00000000
--- a/misc/certs/b204d74a.0
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
-yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
-ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
-U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
-ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
-ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
-U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
-nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
-t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
-SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
-BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
-rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
-NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
-BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
-BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
-aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
-MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
-p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
-5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
-WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
-4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
-hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
------END CERTIFICATE-----
diff --git a/misc/certs/b42ff584.0 b/misc/certs/b42ff584.0
deleted file mode 100644
index c4eb117f..00000000
--- a/misc/certs/b42ff584.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO
-TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh
-dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy
-MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk
-ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn
-ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71
-9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO
-hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U
-tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o
-BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh
-SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww
-OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv
-cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA
-7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k
-/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm
-eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6
-u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy
-7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
-iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
------END CERTIFICATE-----
diff --git a/misc/certs/b66938e9.0 b/misc/certs/b66938e9.0
deleted file mode 100644
index 1f4574e7..00000000
--- a/misc/certs/b66938e9.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
-GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx
-MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg
-Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ
-iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa
-/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ
-jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI
-HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7
-sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w
-gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw
-KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG
-AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L
-URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO
-H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm
-I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY
-iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
-f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
------END CERTIFICATE-----
diff --git a/misc/certs/b6c5745d.0 b/misc/certs/b6c5745d.0
deleted file mode 100644
index 6496d08d..00000000
--- a/misc/certs/b6c5745d.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzET
-MBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UE
-AxMIQ0EgRGlzaWcwHhcNMDYwMzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQsw
-CQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcg
-YS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgmGErE
-Nx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnX
-mjxUizkDPw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYD
-XcDtab86wYqg6I7ZuUUohwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhW
-S8+2rT+MitcE5eN4TPWGqvWP+j1scaMtymfraHtuM6kMgiioTGohQBUgDCZbg8Kp
-FhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8wgfwwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0PAQH/BAQD
-AgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cu
-ZGlzaWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5z
-ay9jYS9jcmwvY2FfZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2sv
-Y2EvY3JsL2NhX2Rpc2lnLmNybDAaBgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEw
-DQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59tWDYcPQuBDRIrRhCA/ec8J9B6
-yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3mkkp7M5+cTxq
-EEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
-CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeB
-EicTXxChds6KezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFN
-PGO+I++MzVpQuGhU+QqZMxEA4Z7CRneC9VkGjCFMhwnN5ag=
------END CERTIFICATE-----
diff --git a/misc/certs/b727005e.0 b/misc/certs/b727005e.0
deleted file mode 100644
index 516ecf55..00000000
--- a/misc/certs/b727005e.0
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE
-BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz
-dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG
-A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U
-cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf
-qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ
-JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ
-+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS
-s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5
-HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7
-70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG
-V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S
-qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S
-5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia
-C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX
-OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE
-FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
-BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2
-KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
-Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B
-8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ
-MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc
-0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ
-u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF
-u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH
-YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8
-GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO
-RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e
-KeC2uAloGRwYQw==
------END CERTIFICATE-----
diff --git a/misc/certs/b7a5b843.0 b/misc/certs/b7a5b843.0
deleted file mode 100644
index 8d39bc6f..00000000
--- a/misc/certs/b7a5b843.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES
-MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU
-V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz
-WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO
-LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE
-AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH
-K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX
-RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z
-rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx
-3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq
-hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC
-MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls
-XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D
-lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn
-aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ
-YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
------END CERTIFICATE-----
diff --git a/misc/certs/b7db1890.0 b/misc/certs/b7db1890.0
deleted file mode 100644
index 8d39bc6f..00000000
--- a/misc/certs/b7db1890.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES
-MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU
-V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz
-WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO
-LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE
-AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH
-K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX
-RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z
-rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx
-3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq
-hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC
-MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls
-XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D
-lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn
-aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ
-YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
------END CERTIFICATE-----
diff --git a/misc/certs/b7e7231a.0 b/misc/certs/b7e7231a.0
deleted file mode 100644
index dd373608..00000000
--- a/misc/certs/b7e7231a.0
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD
-EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05
-OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G
-A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
-Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l
-dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG
-SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK
-gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX
-iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc
-Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E
-BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G
-SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu
-b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh
-bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv
-Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln
-aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0
-IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
-c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph
-biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo
-ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP
-UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj
-YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo
-dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA
-bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06
-sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa
-n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS
-NitjrFgBazMpUIaD8QFI
------END CERTIFICATE-----
diff --git a/misc/certs/b8e83700.0 b/misc/certs/b8e83700.0
deleted file mode 100644
index c7b612a2..00000000
--- a/misc/certs/b8e83700.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK
-VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm
-Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J
-h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul
-uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68
-DzFc6PLZ
------END CERTIFICATE-----
diff --git a/misc/certs/ba89ed3b.0 b/misc/certs/ba89ed3b.0
deleted file mode 100644
index acfed9d2..00000000
--- a/misc/certs/ba89ed3b.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB
-rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
-Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
-MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV
-BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa
-Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl
-LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u
-MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl
-ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm
-gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8
-YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf
-b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9
-9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S
-zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk
-OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV
-HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA
-2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW
-oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
-t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c
-KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM
-m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu
-MdRAGmI0Nj81Aa6sY6A=
------END CERTIFICATE-----
diff --git a/misc/certs/bad35b78.0 b/misc/certs/bad35b78.0
deleted file mode 100644
index a0c3ef82..00000000
--- a/misc/certs/bad35b78.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
-GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
-+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
-U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
-NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
-ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
-ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
-CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
-g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
-fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
-2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
-bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
------END CERTIFICATE-----
diff --git a/misc/certs/bb2d49a0.0 b/misc/certs/bb2d49a0.0
deleted file mode 100644
index 35fb5229..00000000
--- a/misc/certs/bb2d49a0.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0
-MRMwEQYDVQQDEwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQG
-EwJJTDAeFw0wNDAzMjQxMTMyMThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMT
-CkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNpZ24xCzAJBgNVBAYTAklMMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49qROR+WCf4C9DklBKK
-8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTyP2Q2
-98CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb
-2CEJKHxNGGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxC
-ejVb7Us6eva1jsz/D3zkYDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7Kpi
-Xd3DTKaCQeQzC6zJMw9kglcq/QytNuEMrkvF7zuZ2SOzW120V+x0cAwqTwIDAQAB
-o4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Zl
-ZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0PAQH/BAQD
-AgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRL
-AZs+VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWd
-foPPbrxHbvUanlR2QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0M
-cXS6hMTXcpuEfDhOZAYnKuGntewImbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq
-8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb/627HOkthIDYIb6FUtnUdLlp
-hbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VGzT2ouvDzuFYk
-Res3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U
-AGegcQCCSA==
------END CERTIFICATE-----
diff --git a/misc/certs/bc3f2570.0 b/misc/certs/bc3f2570.0
deleted file mode 100644
index c2b29078..00000000
--- a/misc/certs/bc3f2570.0
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT
-EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp
-ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz
-NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH
-EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE
-AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD
-E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH
-/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy
-DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh
-GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR
-tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA
-AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
-FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX
-WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu
-9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr
-gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo
-2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
-LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI
-4uJEvlz36hz1
------END CERTIFICATE-----
diff --git a/misc/certs/bcdd5959.0 b/misc/certs/bcdd5959.0
deleted file mode 100644
index 85a877b8..00000000
--- a/misc/certs/bcdd5959.0
+++ /dev/null
@@ -1,18 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
-NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
-dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
-WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
-v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
-UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
-IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
-W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
------END CERTIFICATE-----
diff --git a/misc/certs/bd1910d4.0 b/misc/certs/bd1910d4.0
deleted file mode 100644
index c81744b5..00000000
--- a/misc/certs/bd1910d4.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJD
-TjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2
-MDcwOTE0WhcNMjcwNDE2MDcwOTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMF
-Q05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzDo+/hn7E7SIX1mlwh
-IhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tizVHa6
-dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZO
-V/kbZKKTVrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrC
-GHn2emU1z5DrvTOTn1OrczvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gN
-v7Sg2Ca+I19zN38m5pIEo3/PIKe38zrKy5nLAgMBAAGjczBxMBEGCWCGSAGG+EIB
-AQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscCwQ7vptU7ETAPBgNVHRMB
-Af8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991SlgrHAsEO
-76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnK
-OOK5Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvH
-ugDnuL8BV8F3RTIMO/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7Hgvi
-yJA/qIYM/PmLXoXLT1tLYhFHxUV8BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fL
-buXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2G8kS1sHNzYDzAgE8yGnLRUhj
-2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5mmxE=
------END CERTIFICATE-----
diff --git a/misc/certs/bda4cc84.0 b/misc/certs/bda4cc84.0
deleted file mode 100644
index d6837453..00000000
--- a/misc/certs/bda4cc84.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
-bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2
-MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
-ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk
-hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym
-1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW
-OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb
-2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko
-O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU
-AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
-BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF
-Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb
-LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir
-oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C
-MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
-sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
------END CERTIFICATE-----
diff --git a/misc/certs/bdacca6f.0 b/misc/certs/bdacca6f.0
deleted file mode 100644
index 1f4574e7..00000000
--- a/misc/certs/bdacca6f.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
-GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx
-MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg
-Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ
-iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa
-/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ
-jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI
-HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7
-sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w
-gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw
-KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG
-AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L
-URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO
-H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm
-I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY
-iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
-f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
------END CERTIFICATE-----
diff --git a/misc/certs/bf64f35b.0 b/misc/certs/bf64f35b.0
deleted file mode 100644
index 855485cf..00000000
--- a/misc/certs/bf64f35b.0
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
-VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
-Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
-KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
-NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
-NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
-ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
-BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
-Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
-4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
-KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
-rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
-94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
-sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
-gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
-kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
-vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
-A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
-O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
-AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
-9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
-eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
-0vdXcDazv/wor3ElhVsT/h5/WrQ8
------END CERTIFICATE-----
diff --git a/misc/certs/c01cdfa2.0 b/misc/certs/c01cdfa2.0
deleted file mode 100644
index b5f18751..00000000
--- a/misc/certs/c01cdfa2.0
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB
-vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
-ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp
-U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W
-ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
-Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0
-IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y
-IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh
-bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF
-9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH
-H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H
-LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN
-/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT
-rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw
-WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs
-exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
-DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4
-sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+
-seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz
-4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+
-BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR
-lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3
-7M2CYfE45k+XmCpajQ==
------END CERTIFICATE-----
diff --git a/misc/certs/c089bbbd.0 b/misc/certs/c089bbbd.0
deleted file mode 100644
index 447ee3d8..00000000
--- a/misc/certs/c089bbbd.0
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL
-MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp
-IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi
-BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw
-MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
-d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig
-YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v
-dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/
-BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6
-papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K
-DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3
-KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox
-XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
------END CERTIFICATE-----
diff --git a/misc/certs/c0ff1f52.0 b/misc/certs/c0ff1f52.0
deleted file mode 100644
index 68803644..00000000
--- a/misc/certs/c0ff1f52.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
-N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
-KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
-kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
-CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
-Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
-imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
-2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
-DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
-/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
-F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
-TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
------END CERTIFICATE-----
diff --git a/misc/certs/c19d42c7.0 b/misc/certs/c19d42c7.0
deleted file mode 100644
index c7b612a2..00000000
--- a/misc/certs/c19d42c7.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK
-VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm
-Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J
-h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul
-uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68
-DzFc6PLZ
------END CERTIFICATE-----
diff --git a/misc/certs/c215bc69.0 b/misc/certs/c215bc69.0
deleted file mode 100644
index 4e25ac5d..00000000
--- a/misc/certs/c215bc69.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
-UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
-EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ
-BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
-ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg
-bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ
-j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV
-Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG
-SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
-JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
-RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw
-MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5
-fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i
-+DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
-SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN
-QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+
-gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl
------END CERTIFICATE-----
diff --git a/misc/certs/c33a80d4.0 b/misc/certs/c33a80d4.0
deleted file mode 100644
index 51285e33..00000000
--- a/misc/certs/c33a80d4.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
-VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
-dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
-MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
-MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
-A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
-b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
-cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
-bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
-VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
-ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
-uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
-9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
-hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
-pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
------END CERTIFICATE-----
diff --git a/misc/certs/c3a6a9ad.0 b/misc/certs/c3a6a9ad.0
deleted file mode 100644
index 23ddad0b..00000000
--- a/misc/certs/c3a6a9ad.0
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJB
-VDFIMEYGA1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBp
-bSBlbGVrdHIuIERhdGVudmVya2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5R
-dWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5RdWFsLTAzMB4XDTA1MDgxNzIyMDAw
-MFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgwRgYDVQQKDD9BLVRy
-dXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0ZW52
-ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMM
-EEEtVHJ1c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCtPWFuA/OQO8BBC4SAzewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUj
-lUC5B3ilJfYKvUWG6Nm9wASOhURh73+nyfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZ
-znF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPESU7l0+m0iKsMrmKS1GWH
-2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4iHQF63n1
-k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs
-2e3Vcuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYD
-VR0OBAoECERqlWdVeRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
-AQEAVdRU0VlIXLOThaq/Yy/kgM40ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fG
-KOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmrsQd7TZjTXLDR8KdCoLXEjq/+
-8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZdJXDRZslo+S4R
-FGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
-mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmE
-DNuxUCAKGkq6ahq97BvIxYSazQ==
------END CERTIFICATE-----
diff --git a/misc/certs/c47d9980.0 b/misc/certs/c47d9980.0
deleted file mode 100644
index 7d3a2491..00000000
--- a/misc/certs/c47d9980.0
+++ /dev/null
@@ -1,42 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD
-VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0
-IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3
-MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz
-IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz
-MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj
-dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw
-EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp
-MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G
-CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9
-28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq
-VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q
-DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR
-5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL
-ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a
-Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl
-UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s
-+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5
-Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
-ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx
-hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV
-HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1
-+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN
-YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t
-L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy
-ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt
-IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV
-HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w
-DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW
-PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF
-5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1
-glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH
-FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2
-pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD
-xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG
-tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq
-jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De
-fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
-OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ
-d0jQ
------END CERTIFICATE-----
diff --git a/misc/certs/c51c224c.0 b/misc/certs/c51c224c.0
deleted file mode 100644
index fb804c94..00000000
--- a/misc/certs/c51c224c.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF
-MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL
-ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx
-MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc
-MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+
-AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH
-iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj
-vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA
-0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB
-OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/
-BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E
-FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01
-GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW
-zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4
-1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE
-f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F
-jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN
-ZetX2fNXlrtIzYE=
------END CERTIFICATE-----
diff --git a/misc/certs/c527e4ab.0 b/misc/certs/c527e4ab.0
deleted file mode 100644
index a0c3ef82..00000000
--- a/misc/certs/c527e4ab.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
-GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
-+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
-U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
-NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
-ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
-ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
-CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
-g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
-fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
-2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
-bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
------END CERTIFICATE-----
diff --git a/misc/certs/c5e082db.0 b/misc/certs/c5e082db.0
deleted file mode 100644
index 97c392fa..00000000
--- a/misc/certs/c5e082db.0
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB
-rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt
-Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa
-Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV
-BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l
-dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE
-AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B
-YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9
-hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l
-L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm
-SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM
-1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws
-6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud
-DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw
-Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50
-aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
-AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u
-7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0
-xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ
-rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim
-eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk
-USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
------END CERTIFICATE-----
diff --git a/misc/certs/c692a373.0 b/misc/certs/c692a373.0
deleted file mode 100644
index 82ae5e1b..00000000
--- a/misc/certs/c692a373.0
+++ /dev/null
@@ -1,15 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD
-VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
-bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
-b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV
-UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
-cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
-b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH
-iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS
-r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4
-04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r
-GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9
-3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
-lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
------END CERTIFICATE-----
diff --git a/misc/certs/c7e2a638.0 b/misc/certs/c7e2a638.0
deleted file mode 100644
index dc1f859a..00000000
--- a/misc/certs/c7e2a638.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB
-mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT
-MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
-eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ
-BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
-MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0
-BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz
-+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm
-hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn
-5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W
-JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL
-DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC
-huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
-HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB
-AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB
-zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN
-kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
-AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH
-SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G
-spki4cErx5z481+oghLrGREt
------END CERTIFICATE-----
diff --git a/misc/certs/c8763593.0 b/misc/certs/c8763593.0
deleted file mode 100644
index c60cce89..00000000
--- a/misc/certs/c8763593.0
+++ /dev/null
@@ -1,37 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsx
-CzAJBgNVBAYTAkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRp
-ZmljYWNpw7NuIERpZ2l0YWwgLSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwa
-QUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4wHhcNMDYxMTI3MjA0NjI5WhcNMzAw
-NDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+U29jaWVkYWQgQ2Ft
-ZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJhIFMu
-QS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkq
-hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeG
-qentLhM0R7LQcNzJPNCNyu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzL
-fDe3fezTf3MZsGqy2IiKLUV0qPezuMDU2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQ
-Y5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU34ojC2I+GdV75LaeHM/J4
-Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP2yYe68yQ
-54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+b
-MMCm8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48j
-ilSH5L887uvDdUhfHjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++Ej
-YfDIJss2yKHzMI+ko6Kh3VOz3vCaMh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/zt
-A/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK5lw1omdMEWux+IBkAC1vImHF
-rEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1bczwmPS9KvqfJ
-pxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCB
-lTCBkgYEVR0gADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFy
-YS5jb20vZHBjLzBaBggrBgEFBQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW50
-7WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2UgcHVlZGVuIGVuY29udHJhciBlbiBs
-YSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEfAygPU3zmpFmps4p6
-xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuXEpBc
-unvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/
-Jre7Ir5v/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dp
-ezy4ydV/NgIlqmjCMRW3MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42
-gzmRkBDI8ck1fj+404HGIGQatlDCIaR43NAvO2STdPCWkPHv+wlaNECW8DYSwaN0
-jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wkeZBWN7PGKX6jD/EpOe9+
-XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f/RWmnkJD
-W2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/
-RL5hRqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35r
-MDOhYil/SrnhLecUIw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxk
-BYn8eNZcLCZDqQ==
------END CERTIFICATE-----
diff --git a/misc/certs/c8841d13.0 b/misc/certs/c8841d13.0
deleted file mode 100644
index 8b8caf55..00000000
--- a/misc/certs/c8841d13.0
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL
-MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
-BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1
-c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx
-MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg
-R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD
-VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR
-JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T
-fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu
-jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z
-wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ
-fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD
-VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO
-BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G
-CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1
-7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn
-8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs
-ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
-ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/
-2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
------END CERTIFICATE-----
diff --git a/misc/certs/c99398f3.0 b/misc/certs/c99398f3.0
deleted file mode 100644
index 8b30d110..00000000
--- a/misc/certs/c99398f3.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6
-MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
-dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX
-BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy
-MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp
-eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg
-/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl
-wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh
-AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2
-PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu
-AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
-BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR
-MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc
-HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/
-Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+
-f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO
-rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch
-6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3
-7CAFYd4=
------END CERTIFICATE-----
diff --git a/misc/certs/c9f83a1c.0 b/misc/certs/c9f83a1c.0
deleted file mode 100644
index fe804a37..00000000
--- a/misc/certs/c9f83a1c.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp
-ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow
-fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
-A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV
-BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM
-cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S
-HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996
-CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk
-3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz
-6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV
-HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
-EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv
-Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw
-Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww
-DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0
-5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
-Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI
-gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ
-aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl
-izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk=
------END CERTIFICATE-----
diff --git a/misc/certs/ca-certificates.crt b/misc/certs/ca-certificates.crt
deleted file mode 100644
index d1ed7d19..00000000
--- a/misc/certs/ca-certificates.crt
+++ /dev/null
@@ -1,4025 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
-IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
-IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
-Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO
-BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi
-MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ
-ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ
-8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6
-zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y
-fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7
-w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc
-G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k
-epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q
-laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ
-QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU
-fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826
-YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w
-ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY
-gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe
-MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0
-IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy
-dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw
-czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0
-dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl
-aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC
-AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg
-b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB
-ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc
-nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg
-18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c
-gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl
-Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY
-sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T
-SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF
-CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum
-GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk
-zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW
-omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIHWTCCBUGgAwIBAgIDCkGKMA0GCSqGSIb3DQEBCwUAMHkxEDAOBgNVBAoTB1Jv
-b3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZ
-Q0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSc3VwcG9y
-dEBjYWNlcnQub3JnMB4XDTExMDUyMzE3NDgwMloXDTIxMDUyMDE3NDgwMlowVDEU
-MBIGA1UEChMLQ0FjZXJ0IEluYy4xHjAcBgNVBAsTFWh0dHA6Ly93d3cuQ0FjZXJ0
-Lm9yZzEcMBoGA1UEAxMTQ0FjZXJ0IENsYXNzIDMgUm9vdDCCAiIwDQYJKoZIhvcN
-AQEBBQADggIPADCCAgoCggIBAKtJNRFIfNImflOUz0Op3SjXQiqL84d4GVh8D57a
-iX3h++tykA10oZZkq5+gJJlz2uJVdscXe/UErEa4w75/ZI0QbCTzYZzA8pD6Ueb1
-aQFjww9W4kpCz+JEjCUoqMV5CX1GuYrz6fM0KQhF5Byfy5QEHIGoFLOYZcRD7E6C
-jQnRvapbjZLQ7N6QxX8KwuPr5jFaXnQ+lzNZ6MMDPWAzv/fRb0fEze5ig1JuLgia
-pNkVGJGmhZJHsK5I6223IeyFGmhyNav/8BBdwPSUp2rVO5J+TJAFfpPBLIukjmJ0
-FXFuC3ED6q8VOJrU0gVyb4z5K+taciX5OUbjchs+BMNkJyIQKopPWKcDrb60LhPt
-XapI19V91Cp7XPpGBFDkzA5CW4zt2/LP/JaT4NsRNlRiNDiPDGCbO5dWOK3z0luL
-oFvqTpa4fNfVoIZwQNORKbeiPK31jLvPGpKK5DR7wNhsX+kKwsOnIJpa3yxdUly6
-R9Wb7yQocDggL9V/KcCyQQNokszgnMyXS0XvOhAKq3A6mJVwrTWx6oUrpByAITGp
-rmB6gCZIALgBwJNjVSKRPFbnr9s6JfOPMVTqJouBWfmh0VMRxXudA/Z0EeBtsSw/
-LIaRmXGapneLNGDRFLQsrJ2vjBDTn8Rq+G8T/HNZ92ZCdB6K4/jc0m+YnMtHmJVA
-BfvpAgMBAAGjggINMIICCTAdBgNVHQ4EFgQUdahxYEyIE/B42Yl3tW3Fid+8sXow
-gaMGA1UdIwSBmzCBmIAUFrUyG9TH8+DmjvO90rA67rI5GNGhfaR7MHkxEDAOBgNV
-BAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAG
-A1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS
-c3VwcG9ydEBjYWNlcnQub3JnggEAMA8GA1UdEwEB/wQFMAMBAf8wXQYIKwYBBQUH
-AQEEUTBPMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5DQWNlcnQub3JnLzAoBggr
-BgEFBQcwAoYcaHR0cDovL3d3dy5DQWNlcnQub3JnL2NhLmNydDBKBgNVHSAEQzBB
-MD8GCCsGAQQBgZBKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuQ0FjZXJ0Lm9y
-Zy9pbmRleC5waHA/aWQ9MTAwNAYJYIZIAYb4QgEIBCcWJWh0dHA6Ly93d3cuQ0Fj
-ZXJ0Lm9yZy9pbmRleC5waHA/aWQ9MTAwUAYJYIZIAYb4QgENBEMWQVRvIGdldCB5
-b3VyIG93biBjZXJ0aWZpY2F0ZSBmb3IgRlJFRSwgZ28gdG8gaHR0cDovL3d3dy5D
-QWNlcnQub3JnMA0GCSqGSIb3DQEBCwUAA4ICAQApKIWuRKm5r6R5E/CooyuXYPNc
-7uMvwfbiZqARrjY3OnYVBFPqQvX56sAV2KaC2eRhrnILKVyQQ+hBsuF32wITRHhH
-Va9Y/MyY9kW50SD42CEH/m2qc9SzxgfpCYXMO/K2viwcJdVxjDm1Luq+GIG6sJO4
-D+Pm1yaMMVpyA4RS5qb1MyJFCsgLDYq4Nm+QCaGrvdfVTi5xotSu+qdUK+s1jVq3
-VIgv7nSf7UgWyg1I0JTTrKSi9iTfkuO960NAkW4cGI5WtIIS86mTn9S8nK2cde5a
-lxuV53QtHA+wLJef+6kzOXrnAzqSjiL2jA3k2X4Ndhj3AfnvlpaiVXPAPHG0HRpW
-Q7fDCo1y/OIQCQtBzoyUoPkD/XFzS4pXM+WOdH4VAQDmzEoc53+VGS3FpQyLu7Xt
-hbNc09+4ufLKxw0BFKxwWMWMjTPUnWajGlCVI/xI4AZDEtnNp4Y5LzZyo4AQ5OHz
-0ctbGsDkgJp8E3MGT9ujayQKurMcvEp4u+XjdTilSKeiHq921F73OIZWWonO1sOn
-ebJSoMbxhbQljPI/lrMQ2Y1sVzufb4Y6GIIiNsiwkTjbKqGTqoQ/9SdlrnPVyNXT
-d+pLncdBu8fA46A/5H2kjXPmEkvfoXNzczqA6NXLji/L6hOn1kGLrPo8idck9U60
-4GGSt/M3mMS+lqO3ig==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIESzCCAzOgAwIBAgIJAJigUTEEXRQpMA0GCSqGSIb3DQEBBQUAMHYxCzAJBgNV
-BAYTAkRFMQ8wDQYDVQQIEwZIZXNzZW4xDjAMBgNVBAcTBUZ1bGRhMRAwDgYDVQQK
-EwdEZWJjb25mMRMwEQYDVQQDEwpEZWJjb25mIENBMR8wHQYJKoZIhvcNAQkBFhBq
-b2VyZ0BkZWJpYW4ub3JnMB4XDTA1MTEwNTE3NTUxNFoXDTE1MTEwMzE3NTUxNFow
-djELMAkGA1UEBhMCREUxDzANBgNVBAgTBkhlc3NlbjEOMAwGA1UEBxMFRnVsZGEx
-EDAOBgNVBAoTB0RlYmNvbmYxEzARBgNVBAMTCkRlYmNvbmYgQ0ExHzAdBgkqhkiG
-9w0BCQEWEGpvZXJnQGRlYmlhbi5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCvbOo0SrIwI5IMlsshH8WF3dHB9r9JlSKhMPaybawa1EyvZspMQ3wa
-F5qxNf3Sj+NElEmjseEqvCZiIIzqwerHu0Qw62cDYCdCd2+Wb5m0bPYB5CGHiyU1
-eNP0je42O0YeXG2BvUujN8AviocVo39X2YwNQ0ryy4OaqYgm2pRlbtT2ESbF+SfV
-Y2iqQj/f8ymF+lHo/pz8tbAqxWcqaSiHFAVQJrdqtFhtoodoNiE3q76zJoUkZTXB
-k60Yc3MJSnatZCpnsSBr/D7zpntl0THrUjjtdRWCjQVhqfhM1yZJV+ApbLdheFh0
-ZWlSxdnp25p0q0XYw/7G92ELyFDfBUUNAgMBAAGjgdswgdgwHQYDVR0OBBYEFMuV
-dFNb4mCWUFbcP5LOtxFLrEVTMIGoBgNVHSMEgaAwgZ2AFMuVdFNb4mCWUFbcP5LO
-txFLrEVToXqkeDB2MQswCQYDVQQGEwJERTEPMA0GA1UECBMGSGVzc2VuMQ4wDAYD
-VQQHEwVGdWxkYTEQMA4GA1UEChMHRGViY29uZjETMBEGA1UEAxMKRGViY29uZiBD
-QTEfMB0GCSqGSIb3DQEJARYQam9lcmdAZGViaWFuLm9yZ4IJAJigUTEEXRQpMAwG
-A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAGZXxHg4mnkvilRIM1EQfGdY
-S5b/WcyF2MYSTeTvK4aIB6VHwpZoZCnDGj2m2D3CkHT0upAD9o0zM1tdsfncLzV+
-mDT/jNmBtYo4QXx5vEPwvEIcgrWjwk7SyaEUhZjtolTkHB7ACl0oD0r71St4iEPR
-qTUCEXk2E47bg1Fz58wNt/yo2+4iqiRjg1XCH4evkQuhpW+dTZnDyFNqwSYZapOE
-TBA+9zBb6xD1KM2DdY7r4GiyYItN0BKLfuWbh9LXGbl1C+f4P11g+m2MPiavIeCe
-1iazG5pcS3KoTLACsYlEX24TINtg4kcuS81XdllcnsV3Kdts0nIqPj6uhTTZD0k=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UE
-AwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00x
-CzAJBgNVBAYTAkVTMB4XDTA4MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEW
-MBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZF
-RElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
-AgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHkWLn7
-09gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7
-XBZXehuDYAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5P
-Grjm6gSSrj0RuVFCPYewMYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAK
-t0SdE3QrwqXrIhWYENiLxQSfHY9g5QYbm8+5eaA9oiM/Qj9r+hwDezCNzmzAv+Yb
-X79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbkHQl/Sog4P75n/TSW9R28
-MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTTxKJxqvQU
-fecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI
-2Sf23EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyH
-K9caUPgn6C9D4zq92Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEae
-ZAwUswdbxcJzbPEHXEUkFDWug/FqTYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAP
-BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz4SsrSbbXc6GqlPUB53NlTKxQ
-MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU9QHnc2VMrFAw
-RAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
-bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWIm
-fQwng4/F9tqgaHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3
-gvoFNTPhNahXwOf9jU8/kzJPeGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKe
-I6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1PwkzQSulgUV1qzOMPPKC8W64iLgpq0i
-5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1ThCojz2GuHURwCRi
-ipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oIKiMn
-MCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZ
-o5NjEFIqnxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6
-zqylfDJKZ0DcMDQj3dcEI2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacN
-GHk0vFQYXlPKNFHtRQrmjseCNj6nOGOpMCwXEGCSn1WHElkQwg9naRHMTh5+Spqt
-r0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3otkYNbn5XOmeUwssfnHdK
-Z05phkOTOPu220+DkdRgfks+KzgHVZhepA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsx
-CzAJBgNVBAYTAkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRp
-ZmljYWNpw7NuIERpZ2l0YWwgLSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwa
-QUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4wHhcNMDYxMTI3MjA0NjI5WhcNMzAw
-NDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+U29jaWVkYWQgQ2Ft
-ZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJhIFMu
-QS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkq
-hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeG
-qentLhM0R7LQcNzJPNCNyu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzL
-fDe3fezTf3MZsGqy2IiKLUV0qPezuMDU2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQ
-Y5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU34ojC2I+GdV75LaeHM/J4
-Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP2yYe68yQ
-54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+b
-MMCm8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48j
-ilSH5L887uvDdUhfHjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++Ej
-YfDIJss2yKHzMI+ko6Kh3VOz3vCaMh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/zt
-A/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK5lw1omdMEWux+IBkAC1vImHF
-rEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1bczwmPS9KvqfJ
-pxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCB
-lTCBkgYEVR0gADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFy
-YS5jb20vZHBjLzBaBggrBgEFBQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW50
-7WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2UgcHVlZGVuIGVuY29udHJhciBlbiBs
-YSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEfAygPU3zmpFmps4p6
-xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuXEpBc
-unvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/
-Jre7Ir5v/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dp
-ezy4ydV/NgIlqmjCMRW3MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42
-gzmRkBDI8ck1fj+404HGIGQatlDCIaR43NAvO2STdPCWkPHv+wlaNECW8DYSwaN0
-jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wkeZBWN7PGKX6jD/EpOe9+
-XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f/RWmnkJD
-W2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/
-RL5hRqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35r
-MDOhYil/SrnhLecUIw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxk
-BYn8eNZcLCZDqQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE
-BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w
-MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
-IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC
-SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1
-ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB
-MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv
-UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX
-4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9
-KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/
-gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb
-rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ
-51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F
-be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe
-KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F
-v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn
-fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7
-jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz
-ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
-ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL
-e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70
-jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz
-WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V
-SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j
-pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX
-X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok
-fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R
-K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU
-ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU
-LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT
-LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
-IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
-MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
-FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
-bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
-H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
-uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
-mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
-a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
-E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
-WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
-VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
-Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
-cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
-IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
-AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
-YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
-6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
-Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
-c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
-mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw
-MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD
-VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul
-CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n
-tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl
-dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch
-PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC
-+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O
-BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E
-BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl
-MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk
-ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB
-IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X
-7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz
-43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
-eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl
-pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA
-WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx
-MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB
-ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV
-BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV
-6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX
-GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP
-dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH
-1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF
-62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW
-BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw
-AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL
-MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU
-cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv
-b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6
-IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/
-iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
-GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh
-4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm
-XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1
-MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK
-EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh
-BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq
-xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G
-87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i
-2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U
-WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1
-0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G
-A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T
-AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr
-pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL
-ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm
-aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv
-hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm
-hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
-dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3
-P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y
-iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no
-xqE=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE
-BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
-dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL
-MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
-cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP
-Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr
-ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL
-MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1
-yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr
-VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/
-nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
-KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG
-XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj
-vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt
-Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g
-N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC
-nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE
-BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
-dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL
-MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
-cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y
-YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua
-kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL
-QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp
-6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG
-yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i
-QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
-KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO
-tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu
-QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ
-Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u
-olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48
-x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE
-BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz
-dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG
-A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U
-cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf
-qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ
-JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ
-+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS
-s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5
-HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7
-70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG
-V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S
-qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S
-5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia
-C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX
-OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE
-FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
-BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2
-KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
-Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B
-8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ
-MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc
-0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ
-u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF
-u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH
-YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8
-GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO
-RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e
-KeC2uAloGRwYQw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC
-VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ
-cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ
-BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt
-VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D
-0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9
-ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G
-A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs
-aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I
-flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
-bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2
-MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
-ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk
-hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym
-1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW
-OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb
-2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko
-O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU
-AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
-BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF
-Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb
-LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir
-oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C
-MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
-sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
-bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2
-MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
-ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC
-206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci
-KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2
-JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9
-BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e
-Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B
-PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67
-Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq
-Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ
-o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3
-+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj
-YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj
-FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
-AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn
-xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2
-LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc
-obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8
-CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe
-IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA
-DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F
-AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX
-Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb
-AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl
-Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw
-RY8mkaKO/qk=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEc
-MBoGA1UEChMTSmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRp
-b25DQTAeFw0wNzEyMTIxNTAwMDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYT
-AkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zlcm5tZW50MRYwFAYDVQQLEw1BcHBs
-aWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp23gdE6H
-j6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4fl+K
-f5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55
-IrmTwcrNwVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cw
-FO5cjFW6WY2H/CPek9AEjP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDiht
-QWEjdnjDuGWk81quzMKq2edY3rZ+nYVunyoKb58DKTCXKB28t89UKU5RMfkntigm
-/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRUWssmP3HMlEYNllPqa0jQ
-k/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNVBAYTAkpQ
-MRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOC
-seODvOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
-ggEBADlqRHZ3ODrso2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJ
-hyzjVOGjprIIC8CFqMjSnHH2HZ9g/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+
-eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYDio+nEhEMy/0/ecGc/WLuo89U
-DNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmWdupwX3kSa+Sj
-B1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
-rosot4LKGAfmt1t06SAZf7IbiVQ=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJB
-VDFIMEYGA1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBp
-bSBlbGVrdHIuIERhdGVudmVya2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5R
-dWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5RdWFsLTAzMB4XDTA1MDgxNzIyMDAw
-MFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgwRgYDVQQKDD9BLVRy
-dXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0ZW52
-ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMM
-EEEtVHJ1c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCtPWFuA/OQO8BBC4SAzewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUj
-lUC5B3ilJfYKvUWG6Nm9wASOhURh73+nyfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZ
-znF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPESU7l0+m0iKsMrmKS1GWH
-2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4iHQF63n1
-k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs
-2e3Vcuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYD
-VR0OBAoECERqlWdVeRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
-AQEAVdRU0VlIXLOThaq/Yy/kgM40ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fG
-KOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmrsQd7TZjTXLDR8KdCoLXEjq/+
-8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZdJXDRZslo+S4R
-FGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
-mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmE
-DNuxUCAKGkq6ahq97BvIxYSazQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE
-BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h
-cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy
-MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg
-Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi
-MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9
-thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM
-cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG
-L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i
-NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h
-X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b
-m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy
-Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja
-EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T
-KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF
-6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh
-OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD
-VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD
-VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
-cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv
-ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl
-AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF
-661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9
-am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1
-ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481
-PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS
-3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k
-SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF
-3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM
-ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g
-StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz
-Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB
-jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
-RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
-VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
-DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
-ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
-VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
-mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
-IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
-mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
-XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
-dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
-jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
-BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
-DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
-9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
-jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
-Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
-ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
-R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg
-Q2xhc3MgMiBDQSAxMB4XDTA2MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzEL
-MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD
-VQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7McXA0
-ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLX
-l18xoS830r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVB
-HfCuuCkslFJgNJQ72uA40Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B
-5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/RuFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3
-WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0PAQH/BAQD
-AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLP
-gcIV1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+
-DKhQ7SLHrQVMdvvt7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKu
-BctN518fV4bVIJwo+28TOPX2EZL2fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHs
-h7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5wwDX3OaJdZtB7WZ+oRxKaJyOk
-LY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg
-Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow
-TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw
-HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB
-BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr
-6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV
-L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91
-1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx
-MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ
-QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB
-arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr
-Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi
-FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS
-P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN
-9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP
-AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz
-uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h
-9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s
-A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t
-OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo
-+fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7
-KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2
-DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us
-H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ
-I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7
-5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h
-3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz
-Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg
-Q2xhc3MgMyBDQSAxMB4XDTA1MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzEL
-MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD
-VQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKxifZg
-isRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//z
-NIqeKNc0n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI
-+MkcVyzwPX6UvCWThOiaAJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2R
-hzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+
-mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0PAQH/BAQD
-AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFP
-Bdy7pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27s
-EzNxZy5p+qksP2bAEllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2
-mSlf56oBzKwzqBwKu5HEA6BvtjT5htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yC
-e/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQjel/wroQk5PMr+4okoyeYZdow
-dXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg
-Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow
-TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw
-HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB
-BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y
-ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E
-N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9
-tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX
-0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c
-/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X
-KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY
-zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS
-O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D
-34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP
-K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3
-AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv
-Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj
-QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV
-cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS
-IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2
-HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa
-O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv
-033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u
-dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE
-kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41
-3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD
-u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq
-4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzET
-MBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UE
-AxMIQ0EgRGlzaWcwHhcNMDYwMzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQsw
-CQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcg
-YS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgmGErE
-Nx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnX
-mjxUizkDPw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYD
-XcDtab86wYqg6I7ZuUUohwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhW
-S8+2rT+MitcE5eN4TPWGqvWP+j1scaMtymfraHtuM6kMgiioTGohQBUgDCZbg8Kp
-FhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8wgfwwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0PAQH/BAQD
-AgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cu
-ZGlzaWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5z
-ay9jYS9jcmwvY2FfZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2sv
-Y2EvY3JsL2NhX2Rpc2lnLmNybDAaBgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEw
-DQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59tWDYcPQuBDRIrRhCA/ec8J9B6
-yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3mkkp7M5+cTxq
-EEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
-CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeB
-EicTXxChds6KezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFN
-PGO+I++MzVpQuGhU+QqZMxEA4Z7CRneC9VkGjCFMhwnN5ag=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn
-MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
-ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg
-b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa
-MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB
-ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw
-IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B
-AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb
-unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d
-BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq
-7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3
-0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX
-roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG
-A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j
-aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p
-26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA
-BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud
-EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN
-BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
-aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB
-AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd
-p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi
-1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc
-XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0
-eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu
-tGWaIZDgqtCYvDi1czyL+Nw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn
-MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
-ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo
-YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9
-MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy
-NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G
-A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA
-A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0
-Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s
-QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV
-eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795
-B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh
-z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T
-AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i
-ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w
-TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH
-MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD
-VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE
-VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
-bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B
-AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM
-bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi
-ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG
-VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c
-ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/
-AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV
-BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X
-DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ
-BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4
-QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny
-gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw
-zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q
-130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2
-JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw
-DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw
-ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT
-AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj
-AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG
-9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h
-bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc
-fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu
-HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w
-t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
-WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjET
-MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAk
-BgNVBAMMHUNlcnRpbm9taXMgLSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4
-Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNl
-cnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYwJAYDVQQDDB1DZXJ0
-aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jY
-F1AMnmHawE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N
-8y4oH3DfVS9O7cdxbwlyLu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWe
-rP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K
-/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92NjMD2AR5vpTESOH2VwnHu
-7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9qc1pkIuVC
-28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6
-lSTClrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1E
-nn1So2+WLhl+HPNbxxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB
-0iSVL1N6aaLwD4ZFjliCK0wi1F6g530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql09
-5gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna4NH4+ej9Uji29YnfAgMBAAGj
-WzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQN
-jLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
-KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9s
-ov3/4gbIOZ/xWqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZM
-OH8oMDX/nyNTt7buFHAAQCvaR6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q
-619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40nJ+U8/aGH88bc62UeYdocMMzpXDn
-2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1BCxMjidPJC+iKunqj
-o3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjvJL1v
-nxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG
-5ERQL1TEqkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWq
-pdEdnV1j6CTmNhTih60bWfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZb
-dsLLO7XSAPCjDuGtbkD326C00EauFddEwk01+dIL8hf2rGbVJLJP0RyZwG71fet0
-BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/vgt2Fl43N+bYdJeimUV5
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw
-PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz
-cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9
-MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz
-IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ
-ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR
-VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL
-kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd
-EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas
-H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0
-HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud
-DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4
-QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu
-Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/
-AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8
-yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR
-FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA
-ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB
-kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
-l7+ijrRU
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT
-AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD
-QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP
-MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC
-ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do
-0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ
-UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d
-RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ
-OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv
-JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C
-AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O
-BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ
-LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY
-MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ
-44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I
-Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw
-i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN
-9u6wWk5JRFRYX0KD
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM
-MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
-QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM
-MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
-QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E
-jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo
-ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI
-ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu
-Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg
-AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7
-HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA
-uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa
-TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg
-xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q
-CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x
-O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs
-6GAqm4VKQPNriiTsBhYscw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM
-MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D
-ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU
-cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3
-WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg
-Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw
-IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH
-UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM
-TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU
-BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM
-kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x
-AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV
-HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y
-sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL
-I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8
-J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY
-VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
-03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD
-VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0
-IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3
-MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz
-IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz
-MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj
-dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw
-EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp
-MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G
-CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9
-28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq
-VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q
-DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR
-5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL
-ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a
-Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl
-UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s
-+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5
-Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
-ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx
-hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV
-HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1
-+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN
-YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t
-L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy
-ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt
-IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV
-HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w
-DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW
-PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF
-5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1
-glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH
-FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2
-pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD
-xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG
-tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq
-jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De
-fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
-OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ
-d0jQ
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJD
-TjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2
-MDcwOTE0WhcNMjcwNDE2MDcwOTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMF
-Q05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzDo+/hn7E7SIX1mlwh
-IhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tizVHa6
-dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZO
-V/kbZKKTVrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrC
-GHn2emU1z5DrvTOTn1OrczvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gN
-v7Sg2Ca+I19zN38m5pIEo3/PIKe38zrKy5nLAgMBAAGjczBxMBEGCWCGSAGG+EIB
-AQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscCwQ7vptU7ETAPBgNVHRMB
-Af8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991SlgrHAsEO
-76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnK
-OOK5Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvH
-ugDnuL8BV8F3RTIMO/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7Hgvi
-yJA/qIYM/PmLXoXLT1tLYhFHxUV8BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fL
-buXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2G8kS1sHNzYDzAgE8yGnLRUhj
-2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5mmxE=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
-YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
-MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
-BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
-GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
-BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
-3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
-YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
-rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
-ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
-oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
-MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
-QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
-b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
-AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
-GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
-Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
-G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
-l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
-smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB
-gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
-A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
-BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw
-MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
-YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
-RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3
-UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI
-2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8
-Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
-+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
-DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
-nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW
-/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g
-PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u
-QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY
-SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv
-IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
-RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4
-zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd
-BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB
-ZQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL
-MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
-BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT
-IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw
-MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy
-ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N
-T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR
-FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J
-cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW
-BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm
-fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv
-GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp
-ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow
-fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
-A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV
-BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM
-cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S
-HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996
-CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk
-3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz
-6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV
-HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
-EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv
-Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw
-Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww
-DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0
-5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
-Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI
-gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ
-aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl
-izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0
-aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla
-MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
-BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD
-VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW
-fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt
-TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL
-fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW
-1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7
-kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G
-A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD
-VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v
-ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo
-dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu
-Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/
-HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
-pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS
-jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+
-xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn
-dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0
-MRMwEQYDVQQDEwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQG
-EwJJTDAeFw0wNDAzMjQxMTMyMThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMT
-CkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNpZ24xCzAJBgNVBAYTAklMMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49qROR+WCf4C9DklBKK
-8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTyP2Q2
-98CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb
-2CEJKHxNGGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxC
-ejVb7Us6eva1jsz/D3zkYDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7Kpi
-Xd3DTKaCQeQzC6zJMw9kglcq/QytNuEMrkvF7zuZ2SOzW120V+x0cAwqTwIDAQAB
-o4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Zl
-ZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0PAQH/BAQD
-AgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRL
-AZs+VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWd
-foPPbrxHbvUanlR2QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0M
-cXS6hMTXcpuEfDhOZAYnKuGntewImbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq
-8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb/627HOkthIDYIb6FUtnUdLlp
-hbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VGzT2ouvDzuFYk
-Res3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U
-AGegcQCCSA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAw
-PDEbMBkGA1UEAxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWdu
-MQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwx
-GzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBDQTEQMA4GA1UEChMHQ29tU2lnbjEL
-MAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGtWhf
-HZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs49oh
-gHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sW
-v+bznkqH7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ue
-Mv5WJDmyVIRD9YTC2LxBkMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr
-9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d19guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt
-6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUwAwEB/zBEBgNVHR8EPTA7
-MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29tU2lnblNl
-Y3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58
-ADsAj8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkq
-hkiG9w0BAQUFAAOCAQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7p
-iL1DRYHjZiM/EoZNGeQFsOY3wo3aBijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtC
-dsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtpFhpFfTMDZflScZAmlaxMDPWL
-kz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP51qJThRv4zdL
-hfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
-OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG
-A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh
-bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE
-ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS
-b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5
-7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS
-J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y
-HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP
-t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz
-FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY
-XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/
-MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw
-hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js
-MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA
-A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj
-Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx
-XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o
-omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc
-A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
-WL1WMRJOEcgh4LMRkWXbtKaIOM5V
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc
-MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj
-IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB
-IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE
-RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl
-U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290
-IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU
-ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC
-QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr
-rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S
-NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc
-QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH
-txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP
-BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
-AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp
-tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa
-IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl
-6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+
-xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
-Cm26OWMohpLzGITY+9HPBVZkVw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
-b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
-cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
-JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
-mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
-wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
-VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
-AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
-AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
-BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
-pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
-dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
-fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
-NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
-H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
-+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
-QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
-MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
-b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
-CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
-nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
-43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
-T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
-gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
-BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
-TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
-DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
-hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
-06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
-PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
-YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
-CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
-ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
-MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
-LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
-RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
-+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
-PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
-xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
-Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
-hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
-EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
-FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
-nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
-eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
-hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
-Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
-vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
-+OkuE6N36B9K
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
-UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
-EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ
-BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
-ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg
-bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ
-j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV
-Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG
-SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
-JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
-RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw
-MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5
-fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i
-+DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
-SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN
-QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+
-gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
-UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
-EwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJ
-BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
-ETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC/
-k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGODVvso
-LeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3o
-TQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCG
-SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
-JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
-RFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3
-MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6C
-TShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5
-WzAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
-SIb3DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR
-xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL
-B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx
-ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w
-MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD
-VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx
-FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu
-ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7
-gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH
-fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a
-ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT
-ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF
-MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk
-c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto
-dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt
-aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI
-hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk
-QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/
-h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
-nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR
-rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2
-9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
-MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
-DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow
-PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
-Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O
-rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq
-OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b
-xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw
-7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD
-aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG
-SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69
-ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
-AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
-R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
-JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
-Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNV
-BAMML0VCRyBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMTcwNQYDVQQKDC5FQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXpt
-ZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAeFw0wNjA4MTcwMDIxMDlaFw0xNjA4
-MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25payBTZXJ0aWZpa2Eg
-SGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2ltIFRl
-a25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIi
-MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h
-4fuXd7hxlugTlkaDT7byX3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAk
-tiHq6yOU/im/+4mRDGSaBUorzAzu8T2bgmmkTPiab+ci2hC6X5L8GCcKqKpE+i4s
-tPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfreYteIAbTdgtsApWjluTL
-dlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZTqNGFav4
-c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8Um
-TDGyY5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z
-+kI2sSXFCjEmN1ZnuqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0O
-Lna9XvNRiYuoP1Vzv9s6xiQFlpJIqkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMW
-OeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vmExH8nYQKE3vwO9D8owrXieqW
-fo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0Nokb+Clsi7n2
-l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
-/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgw
-FoAU587GT/wWZ5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+
-8ygjdsZs93/mQJ7ANtyVDR2tFcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI
-6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgmzJNSroIBk5DKd8pNSe/iWtkqvTDO
-TLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64kXPBfrAowzIpAoHME
-wfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqTbCmY
-Iai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJn
-xk1Gj7sURT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4Q
-DgZxGhBM/nV+/x5XOULK1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9q
-Kd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11t
-hie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQY9iJSrSq3RZj9W6+YKH4
-7ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9AahH3eU7
-QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB
-8zELMAkGA1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2Vy
-dGlmaWNhY2lvIChOSUYgUS0wODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1
-YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYDVQQLEyxWZWdldSBodHRwczovL3d3
-dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UECxMsSmVyYXJxdWlh
-IEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMTBkVD
-LUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQG
-EwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8g
-KE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBD
-ZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQu
-bmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMg
-ZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUNDMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R
-85iKw5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm
-4CgPukLjbo73FCeTae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaV
-HMf5NLWUhdWZXqBIoH7nF2W4onW4HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNd
-QlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0aE9jD2z3Il3rucO2n5nzbcc8t
-lGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw0JDnJwIDAQAB
-o4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4
-opvpXY0wfwYDVR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBo
-dHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidW
-ZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAwDQYJKoZIhvcN
-AQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJlF7W2u++AVtd0x7Y
-/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNaAl6k
-SBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhy
-Rp/7SNVel+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOS
-Agu+TGbrIP65y7WZf+a2E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xl
-nJ2lYJU6Un/10asIbvPuW/mIPX64b24D5EI=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1
-MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1
-czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG
-CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy
-MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl
-ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS
-b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy
-euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO
-bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw
-WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d
-MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE
-1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD
-VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/
-zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB
-BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF
-BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV
-v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG
-E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
-uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW
-iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v
-GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1
-MQswCQYDVQQGEwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxp
-Z2kgQS5TLjE8MDoGA1UEAxMzZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZp
-a2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3MDEwNDExMzI0OFoXDTE3MDEwNDEx
-MzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0cm9uaWsgQmlsZ2kg
-R3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9uaWsg
-U2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdU
-MZTe1RK6UxYC6lhj71vY8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlT
-L/jDj/6z/P2douNffb7tC+Bg62nsM+3YjfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H
-5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAIJjjcJRFHLfO6IxClv7wC
-90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk9Ok0oSy1
-c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/
-BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoE
-VtstxNulMA0GCSqGSIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLP
-qk/CaOv/gKlR6D1id4k9CnU58W5dF4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S
-/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwqD2fK/A+JYZ1lpTzlvBNbCNvj
-/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4Vwpm+Vganf2X
-KWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
-fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
-RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
-bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
-IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy
-MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
-LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
-YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
-A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
-K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
-sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
-MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
-XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
-HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
-4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA
-vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G
-CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA
-WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
-oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ
-h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18
-f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN
-B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy
-vUxFnmG6v4SBkgPR0ml8xQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
-ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
-KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
-ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
-MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
-ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
-b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
-bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
-U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
-A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
-I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
-wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
-AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
-oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
-BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
-dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
-MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
-b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
-dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
-MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
-E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
-MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
-hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
-95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
-2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
-VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
-Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
-KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
-NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
-NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
-ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
-BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
-Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
-4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
-KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
-rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
-94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
-sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
-gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
-kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
-vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
-A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
-O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
-AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
-9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
-eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
-0vdXcDazv/wor3ElhVsT/h5/WrQ8
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe
-MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0
-ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
-Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw
-IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL
-SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF
-AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH
-SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh
-ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X
-DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1
-TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ
-fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA
-sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU
-WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS
-nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH
-dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip
-NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC
-AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF
-MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
-ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB
-uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl
-PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP
-JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/
-gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2
-j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6
-5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB
-o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS
-/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z
-Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE
-W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D
-hNQ+IIX3Sj0rnP0qCglN6oH4EZw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
-UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
-dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
-MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
-dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
-BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
-cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
-AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
-MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
-aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
-ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
-IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
-MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
-A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
-7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
-1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
-ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw
-MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j
-LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ
-KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo
-RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu
-WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw
-Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD
-AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK
-eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM
-zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+
-WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
-/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj
-dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0
-NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD
-VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G
-vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/
-BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C
-AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl
-IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw
-NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq
-y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF
-MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
-A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy
-0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1
-E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
-ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
-MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
-dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
-c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
-UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
-58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
-o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
-MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
-aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
-A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
-Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
-8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMx
-IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
-dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
-HhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTELMAkGA1UEBhMCRVMx
-IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
-dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5u
-Cp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5Vj1H5WuretXDE7aTt/6MNbg9kUDGvASdY
-rv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJHlShbz++AbOCQl4oBPB3z
-hxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf3H5idPay
-BQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcL
-iam8NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcb
-AgMBAAGjgZ8wgZwwKgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lv
-bmFsLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0
-MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E
-FgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQADggEBAEdz/o0n
-VPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
-u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36m
-hoEyIwOdyPdfwUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzfl
-ZKG+TQyTmAyX9odtsz/ny4Cm7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBp
-QWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YGVM+h4k0460tQtcsm9MracEpqoeJ5
-quGnM/b9Sh/22WA=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs
-IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg
-R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A
-PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8
-Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL
-TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL
-5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7
-S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe
-2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap
-EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td
-EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv
-/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN
-A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0
-abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF
-I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz
-4iIprn2DQKi6bA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
-MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
-YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
-R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
-9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
-fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
-iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
-1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
-bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
-MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
-ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
-uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
-Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
-tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
-PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
-hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
-5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
-MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
-R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
-MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
-Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
-AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
-ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
-7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
-kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
-mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
-KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
-6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
-4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
-oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
-UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
-AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL
-MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj
-KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2
-MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV
-BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw
-NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV
-BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
-MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL
-So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal
-tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
-BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG
-CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT
-qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz
-rD6ogRLQy7rQkgu2npaqBA+K
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB
-mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT
-MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
-eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ
-BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
-MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0
-BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz
-+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm
-hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn
-5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W
-JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL
-DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC
-huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
-HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB
-AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB
-zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN
-kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
-AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH
-SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G
-spki4cErx5z481+oghLrGREt
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy
-c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD
-VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1
-c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
-AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81
-WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG
-FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq
-XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL
-se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb
-KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd
-IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73
-y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt
-hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc
-QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4
-Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV
-HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ
-KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
-dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ
-L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr
-Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo
-ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY
-T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz
-GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m
-1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV
-OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH
-6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX
-QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy
-c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE
-BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0
-IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV
-VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8
-cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT
-QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh
-F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v
-c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w
-mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd
-VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX
-teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ
-f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe
-Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+
-nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB
-/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY
-MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG
-9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
-aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX
-IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn
-ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z
-uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN
-Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja
-QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW
-koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9
-ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt
-DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm
-bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD
-VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0
-IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3
-MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
-aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx
-MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy
-cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG
-A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl
-BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI
-hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed
-KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7
-G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2
-zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4
-ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG
-HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2
-Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V
-yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e
-beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r
-6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
-wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog
-zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW
-BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr
-ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp
-ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk
-cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt
-YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC
-CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow
-KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI
-hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ
-UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz
-X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x
-fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz
-a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd
-Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd
-SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O
-AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso
-M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge
-v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
-09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
-A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
-b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
-MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
-YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
-aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
-jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
-xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
-1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
-snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
-U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
-9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
-BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
-AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
-yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
-38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
-AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
-DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
-HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
-A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
-Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
-MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
-A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
-v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
-eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
-tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
-C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
-zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
-mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
-V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
-bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
-3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
-J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
-291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
-ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
-AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
-TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G
-A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp
-Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4
-MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG
-A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8
-RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT
-gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm
-KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd
-QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ
-XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw
-DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o
-LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU
-RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp
-jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK
-6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX
-mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs
-Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH
-WD9f
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
-MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
-YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
-MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
-ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
-MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
-ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
-PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
-wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
-EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
-avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
-YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
-sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
-/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
-IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
-ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
-OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
-TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
-HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
-dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
-ReYNnyicsbkqWletNw+vHX/bvZ8=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT
-EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp
-ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz
-NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH
-EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE
-AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD
-E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH
-/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy
-DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh
-GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR
-tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA
-AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
-FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX
-WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu
-9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr
-gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo
-2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
-LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI
-4uJEvlz36hz1
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD
-VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
-bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
-b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV
-UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
-cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
-b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH
-iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS
-r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4
-04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r
-GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9
-3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
-lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix
-RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1
-dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p
-YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw
-NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK
-EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl
-cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl
-c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz
-dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ
-fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns
-bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD
-75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP
-FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV
-HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp
-5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu
-b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA
-A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p
-6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
-TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7
-dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys
-Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI
-l7WdmplNsDz4SgCbZN2fOUvRJ9e4
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx
-FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg
-Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG
-A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr
-b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ
-jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn
-PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh
-ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9
-nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h
-q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED
-MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC
-mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3
-7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB
-oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs
-EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO
-fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi
-AmvZWg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYT
-AkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQ
-TS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG
-9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMB4XDTAyMTIxMzE0MjkyM1oXDTIw
-MTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAM
-BgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEO
-MAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2
-LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaI
-s9z4iPf930Pfeo2aSVz2TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2
-xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCWSo7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4
-u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYyHF2fYPepraX/z9E0+X1b
-F8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNdfrGoRpAx
-Vs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGd
-PDPQtQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNV
-HSAEDjAMMAoGCCqBegF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAx
-NjAfBgNVHSMEGDAWgBSjBS8YYFDCiQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUF
-AAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RKq89toB9RlPhJy3Q2FLwV3duJ
-L92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3QMZsyK10XZZOY
-YLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
-Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2a
-NjSaTFR+FwNIlQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R
-0982gaEbeC9xs/FZTEYYKKuF0mBWWg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4
-MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6
-ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD
-VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j
-b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq
-scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO
-xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H
-LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX
-uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD
-yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+
-JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q
-rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN
-BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L
-hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB
-QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+
-HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu
-Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg
-QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB
-BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
-MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA
-A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb
-laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56
-awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo
-JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw
-LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT
-VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk
-LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb
-UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/
-QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+
-naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls
-QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcN
-AQkBFglwa2lAc2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZp
-dHNlZXJpbWlza2Vza3VzMRAwDgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMw
-MVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMQsw
-CQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEQ
-MA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOB
-SvZiF3tfTQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkz
-ABpTpyHhOEvWgxutr2TC+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvH
-LCu3GFH+4Hv2qEivbDtPL+/40UceJlfwUR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMP
-PbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDaTpxt4brNj3pssAki14sL
-2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQFMAMBAf8w
-ggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwIC
-MIHDHoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDk
-AGwAagBhAHMAdABhAHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0
-AHMAZQBlAHIAaQBtAGkAcwBrAGUAcwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABz
-AGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABrAGkAbgBuAGkAdABhAG0AaQBz
-AGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nwcy8wKwYDVR0f
-BCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
-FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcY
-P2/v6X2+MA4GA1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOi
-CfP+JmeaUOTDBS8rNXiRTHyoERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+g
-kcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyLabVAyJRld/JXIWY7zoVAtjNjGr95
-HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678IIbsSt4beDI3poHS
-na9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkhMp6q
-qIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0Z
-TbvGRNs2yyqcjg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD
-VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0
-ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G
-CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y
-OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx
-FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp
-Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
-dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP
-kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc
-cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U
-fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7
-N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC
-xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1
-+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
-A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM
-Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG
-SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h
-mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk
-ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
-tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c
-2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t
-HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAw
-cjELMAkGA1UEBhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNy
-b3NlYyBMdGQuMRQwEgYDVQQLEwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9z
-ZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0MDYxMjI4NDRaFw0xNzA0MDYxMjI4
-NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEWMBQGA1UEChMN
-TWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMTGU1p
-Y3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2u
-uO/TEdyB5s87lozWbxXGd36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+
-LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/NoqdNAoI/gqyFxuEPkEeZlApxcpMqyabA
-vjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjcQR/Ji3HWVBTji1R4P770
-Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJPqW+jqpx
-62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcB
-AQRbMFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3Aw
-LQYIKwYBBQUHMAKGIWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAP
-BgNVHRMBAf8EBTADAQH/MIIBcwYDVR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIB
-AQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3LmUtc3ppZ25vLmh1L1NaU1ov
-MIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0AdAB2AOEAbgB5
-ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
-AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABT
-AHoAbwBsAGcA4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABh
-ACAAcwB6AGUAcgBpAG4AdAAgAGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABo
-AHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMAegBpAGcAbgBvAC4AaAB1AC8AUwBa
-AFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6Ly93d3cuZS1zemln
-bm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NOPU1p
-Y3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxP
-PU1pY3Jvc2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZv
-Y2F0aW9uTGlzdDtiaW5hcnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuB
-EGluZm9AZS1zemlnbm8uaHWkdzB1MSMwIQYDVQQDDBpNaWNyb3NlYyBlLVN6aWdu
-w7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhTWjEWMBQGA1UEChMNTWlj
-cm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhVMIGsBgNV
-HSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJI
-VTERMA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDAS
-BgNVBAsTC2UtU3ppZ25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBS
-b290IENBghEAzLjnv04pGv2i3GalHCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS
-8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMTnGZjWS7KXHAM/IO8VbH0jgds
-ZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FEaGAHQzAxQmHl
-7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
-86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfR
-hUZLphK3dehKyVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/
-MPMMNz7UwiiAc7EBt51alhQBS6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG
-EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3
-MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl
-cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR
-dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB
-pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM
-b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm
-aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz
-IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT
-lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz
-AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5
-VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG
-ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2
-BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG
-AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M
-U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh
-bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C
-+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
-bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F
-uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2
-XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD
-EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05
-OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G
-A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
-Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l
-dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG
-SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK
-gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX
-iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc
-Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E
-BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G
-SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu
-b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh
-bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv
-Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln
-aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0
-IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
-c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph
-biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo
-ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP
-UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj
-YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo
-dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA
-bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06
-sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa
-n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS
-NitjrFgBazMpUIaD8QFI
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD
-EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X
-DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw
-DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u
-c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr
-TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA
-OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC
-2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW
-RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P
-AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW
-ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0
-YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz
-b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO
-ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB
-IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs
-b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
-ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s
-YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg
-a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g
-SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0
-aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg
-YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg
-Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY
-ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g
-pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4
-Fp1hBWeAyNDYpQcCNJgEjTME1A==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV
-MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe
-TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0
-dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB
-KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0
-N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC
-dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu
-MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL
-b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD
-zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi
-3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8
-WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY
-Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi
-NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC
-ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4
-QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0
-YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz
-aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
-IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm
-ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg
-ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs
-amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv
-IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3
-Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6
-ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1
-YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg
-dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs
-b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G
-CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO
-xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP
-0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ
-QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk
-f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK
-8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQD
-EzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVneXpvaSAoQ2xhc3MgUUEpIFRhbnVz
-aXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0bG9jay5odTAeFw0w
-MzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTERMA8G
-A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
-Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5l
-dExvY2sgTWlub3NpdGV0dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZh
-bnlraWFkbzEeMBwGCSqGSIb3DQEJARYPaW5mb0BuZXRsb2NrLmh1MIIBIjANBgkq
-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRVCacbvWy5FPSKAtt2/Goq
-eKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e8ia6AFQe
-r7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO5
-3Lhbm+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWd
-vLrqOU+L73Sa58XQ0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0l
-mT+1fMptsK6ZmfoIYOcZwvK9UdPM0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4IC
-wDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAQYwggJ1Bglg
-hkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2YW55IGEgTmV0
-TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
-biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQg
-ZWxla3Ryb25pa3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywg
-dmFsYW1pbnQgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6
-b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwgYXogQWx0YWxhbm9zIFN6ZXJ6b2Rl
-c2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kgZWxqYXJhcyBtZWd0
-ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczovL3d3
-dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0Bu
-ZXRsb2NrLm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBh
-bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRo
-ZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3
-Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0IGluZm9AbmV0bG9jay5u
-ZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3DQEBBQUA
-A4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQ
-MznNwNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+
-NFAwLvt/MpqNPfMgW/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCR
-VCHnpgu0mfVRQdzNo0ci2ccBgcTcR08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY
-83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR5qq5aKrN9p2QdRLqOBrKROi3
-macqaJVmlaut74nLYKkGEsaUR+ko
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi
-MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
-MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp
-dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV
-UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO
-ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz
-c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP
-OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl
-mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF
-BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4
-qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw
-gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB
-BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu
-bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp
-dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8
-6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/
-h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH
-/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
-wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN
-pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB
-ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly
-aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
-ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w
-NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G
-A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD
-VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX
-SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR
-VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2
-w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF
-mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg
-4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9
-4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw
-DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw
-EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx
-SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2
-ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8
-vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
-hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi
-Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ
-/L7fCg0=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
-GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
-b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV
-BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
-YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa
-GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg
-Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J
-WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB
-rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp
-+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1
-ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i
-Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz
-PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og
-/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH
-oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI
-yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud
-EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2
-A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL
-MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
-ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f
-BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn
-g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl
-fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K
-WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha
-B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc
-hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR
-TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD
-mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z
-ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y
-4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza
-8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
-GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
-b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV
-BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
-YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM
-V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB
-4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr
-H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd
-8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv
-vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT
-mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe
-btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc
-T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt
-WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ
-c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A
-4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD
-VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG
-CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0
-aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
-aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu
-dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw
-czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G
-A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC
-TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg
-Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0
-7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem
-d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd
-+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B
-4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN
-t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x
-DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57
-k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s
-zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j
-Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT
-mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK
-4SVhM7JZG+Ju1zdXtg2pEto=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC
-TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz
-MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw
-IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR
-dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp
-li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D
-rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ
-WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug
-F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU
-xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC
-Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv
-dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw
-ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl
-IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh
-c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy
-ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
-Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI
-KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T
-KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq
-y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p
-dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD
-VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL
-MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk
-fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8
-7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R
-cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y
-mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW
-xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK
-SnQ2+Q==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJF
-UzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJ
-R1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcN
-MDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3WjBoMQswCQYDVQQGEwJFUzEfMB0G
-A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScw
-JQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+
-WmmmO3I2F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKj
-SgbwJ/BXufjpTjJ3Cj9BZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGl
-u6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQD0EbtFpKd71ng+CT516nDOeB0/RSrFOy
-A8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXteJajCq+TA81yc477OMUxk
-Hl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMBAAGjggM7
-MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBr
-aS5ndmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIIC
-IwYKKwYBBAG/VQIBADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8A
-cgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIA
-YQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIAYQBsAGkAdABhAHQAIABWAGEA
-bABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQByAGEAYwBpAPMA
-bgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
-aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMA
-aQBvAG4AYQBtAGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQA
-ZQAgAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEA
-YwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBuAHQAcgBhACAAZQBuACAAbABhACAA
-ZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAAOgAvAC8AdwB3AHcA
-LgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0dHA6
-Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+y
-eAT8MIGVBgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQsw
-CQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0G
-A1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVu
-Y2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRhTvW1yEICKrNcda3Fbcrn
-lD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdzCkj+IHLt
-b8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg
-9J63NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XF
-ducTZnV+ZfsBn5OHiJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmC
-IoaZM3Fa6hlXPZHNqcCjbgcTpsnt+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy
-NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD
-cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs
-2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY
-JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE
-Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ
-n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A
-PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6
-MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
-dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX
-BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy
-MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp
-eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg
-/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl
-wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh
-AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2
-PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu
-AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
-BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR
-MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc
-HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/
-Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+
-f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO
-rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch
-6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3
-7CAFYd4=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
-GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx
-MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg
-Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ
-iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa
-/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ
-jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI
-HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7
-sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w
-gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw
-KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG
-AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L
-URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO
-H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm
-I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY
-iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
-f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr
-MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG
-A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0
-MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp
-Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD
-QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz
-i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8
-h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV
-MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9
-UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni
-8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC
-h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD
-VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB
-AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm
-KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ
-X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr
-QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5
-pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN
-QSdJQO7e5iNEOdyhIta6A/I=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
-FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz
-MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv
-cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz
-Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO
-0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao
-wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj
-7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS
-8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT
-BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
-/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg
-JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC
-NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3
-6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/
-3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm
-D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS
-CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
-3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDEl
-MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMh
-U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIz
-MloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09N
-IFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNlY3VyaXR5IENvbW11
-bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSE
-RMqm4miO/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gO
-zXppFodEtZDkBp2uoQSXWHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5
-bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4zZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDF
-MxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4bepJz11sS6/vmsJWXMY1
-VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK9U2vP9eC
-OKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G
-CSqGSIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HW
-tWS3irO4G8za+6xmiEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZ
-q51ihPZRwSzJIxXYKLerJRO1RuGGAv8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDb
-EJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnWmHyojf6GPgcWkuF75x3sM3Z+
-Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEWT1MKZPlO9L9O
-VL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl
-MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe
-U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX
-DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy
-dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj
-YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV
-OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr
-zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM
-VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ
-hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO
-ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw
-awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs
-OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
-DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF
-coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc
-okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8
-t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy
-1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/
-SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY
-MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t
-dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5
-WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD
-VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8
-9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ
-DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9
-Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N
-QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ
-xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G
-A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T
-AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG
-kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr
-Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5
-Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU
-JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot
-RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
-MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx
-MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV
-BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG
-29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk
-oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk
-3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL
-qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN
-nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw
-DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG
-MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX
-ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H
-DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO
-TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv
-kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w
-zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
-MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx
-MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV
-BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o
-Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt
-5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s
-3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej
-vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu
-8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw
-DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG
-MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil
-zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/
-3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD
-FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6
-Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2
-ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO
-TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh
-dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy
-MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk
-ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn
-ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71
-9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO
-hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U
-tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o
-BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh
-SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww
-OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv
-cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA
-7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k
-/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm
-eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6
-u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy
-7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
-iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO
-TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh
-dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX
-DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl
-ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv
-b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291
-qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp
-uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU
-Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE
-pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp
-5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M
-UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN
-GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy
-5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv
-6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK
-eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6
-B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/
-BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov
-L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG
-SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS
-CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen
-5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897
-IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK
-gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL
-+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL
-vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm
-bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk
-N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC
-Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z
-ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
-MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
-U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
-NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
-ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
-ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
-DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
-8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
-+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
-X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
-K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
-1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
-A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
-zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
-YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
-bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
-DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
-L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
-eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
-xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
-VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
-WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
-HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs
-ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw
-MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
-b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj
-aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp
-Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg
-nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1
-HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N
-Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN
-dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0
-HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
-BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G
-CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU
-sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3
-4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg
-8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
-pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1
-mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
-HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs
-ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
-MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD
-VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy
-ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy
-dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p
-OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2
-8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K
-Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe
-hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk
-6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw
-DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q
-AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI
-bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB
-ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z
-qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
-iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn
-0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN
-sSi6
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW
-MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
-Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9
-MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
-U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
-cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
-A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
-pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
-OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
-Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
-Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
-HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
-Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
-+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
-Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
-Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
-26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
-AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
-VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul
-F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC
-ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w
-ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk
-aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0
-YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg
-c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93
-d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG
-CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF
-wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS
-Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst
-0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc
-pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl
-CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF
-P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK
-1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm
-KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
-JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ
-8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm
-fyWl8kgAwKQB2j8=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEW
-MBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkgRzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1
-OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoG
-A1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRzIwggIiMA0G
-CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8Oo1XJ
-JZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsD
-vfOpL9HG4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnoo
-D/Uefyf3lLE3PbfHkffiAez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/
-Q0kGi4xDuFby2X8hQxfqp0iVAXV16iulQ5XqFYSdCI0mblWbq9zSOdIxHWDirMxW
-RST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbsO+wmETRIjfaAKxojAuuK
-HDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8HvKTlXcxN
-nw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM
-0D4LnMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/i
-UUjXuG+v+E5+M5iSFGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9
-Ha90OrInwMEePnWjFqmveiJdnxMaz6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHg
-TuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJKoZIhvcNAQEL
-BQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K
-2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfX
-UfEpY9Z1zRbkJ4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl
-6/2o1PXWT6RbdejF0mCy2wl+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK
-9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG/+gyRr61M3Z3qAFdlsHB1b6uJcDJ
-HgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTcnIhT76IxW1hPkWLI
-wpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/XldblhY
-XzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5l
-IxKVCCIcl85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoo
-hdVddLHRDiBYmxOlsGOm7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulr
-so8uBtjRkcfGEvRM/TAXw8HaOFvjqermobp573PYtlNXLfbQ4ddI
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCB
-rjELMAkGA1UEBhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcp
-MRIwEAYDVQQHEwlTdHV0dGdhcnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fz
-c2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVTLVRSVVNUIEF1dGhlbnRpY2F0aW9u
-IGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0wNTA2MjIwMDAwMDBa
-Fw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFkZW4t
-V3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMg
-RGV1dHNjaGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJV
-U1QgQXV0aGVudGljYXRpb24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBO
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1
-toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob4QSwI7+Vio5bG0F/WsPo
-TUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXLg3KSwlOy
-ggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1
-XgqfeN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteF
-hy+S8dF2g08LOlk3KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm
-7QIDAQABo4GSMIGPMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEG
-MCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJvbmxpbmUxLTIwNDgtNTAdBgNV
-HQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAUD8oeXHngovMp
-ttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD
-pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFo
-LtU96G7m1R08P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersF
-iXOMy6ZNwPv2AtawB6MDwidAnwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0y
-h9WUUpY6RsZxlj33mA6ykaqP2vROJAA5VeitF7nTNCtKqUDMFypVZUF0Qn71wK/I
-k63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8bHz2eBIPdltkdOpQ=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk
-MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0
-YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg
-Q0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYT
-AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp
-Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIICIjAN
-BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9
-m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdih
-FvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/
-TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3F
-EzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbco
-kdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBu
-HYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNF
-vJbNcA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo
-19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC
-L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJW
-bjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p/r+D5kNX
-JLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw
-FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
-BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzc
-K6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzf
-ky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7Ik
-Vh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQMbFamIp1TpBcahQq4FJHgmDmHtqB
-sfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e
-3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsR
-ls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ip
-mXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH
-b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksf
-rK/7DZBaZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmms
-hFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y
-zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6
-MBr1mmz0DlP5OlvRHA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
-BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln
-biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF
-MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT
-d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8
-76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+
-bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c
-6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE
-emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd
-MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt
-MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y
-MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y
-FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi
-aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM
-gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB
-qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7
-lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn
-8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
-L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6
-45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO
-UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5
-O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC
-bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv
-GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a
-77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC
-hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3
-92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp
-Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w
-ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt
-Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE
-BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu
-IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw
-WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD
-ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y
-IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn
-IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+
-6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob
-jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw
-izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl
-+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY
-zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP
-pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF
-KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW
-ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB
-AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
-BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0
-ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
-IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA
-A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0
-uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+
-FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7
-jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/
-u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D
-YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1
-puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa
-icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG
-DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x
-kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z
-Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE
-BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu
-IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow
-RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY
-U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
-MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv
-Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br
-YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF
-nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH
-6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt
-eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/
-c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ
-MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH
-HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf
-jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6
-5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB
-rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU
-F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c
-wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
-cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB
-AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp
-WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9
-xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ
-2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ
-IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8
-aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X
-em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR
-dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/
-OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+
-hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy
-tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/
-MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow
-PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
-AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR
-IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q
-gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy
-yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts
-F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2
-jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx
-ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC
-VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK
-YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH
-EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN
-Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud
-DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE
-MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK
-UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
-TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf
-qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK
-ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE
-JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7
-hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1
-EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm
-nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX
-udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz
-ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe
-LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl
-pYYsfPQS
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL
-MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
-BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
-Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1
-OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
-SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc
-VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf
-tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg
-uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J
-XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK
-8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99
-5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3
-kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
-dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6
-Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
-JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
-Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS
-GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt
-ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8
-au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV
-hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI
-dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL
-MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
-BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
-Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1
-OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
-SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc
-VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW
-Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q
-Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2
-1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq
-ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1
-Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX
-XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
-dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6
-Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
-JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
-Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
-TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN
-irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8
-TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6
-g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB
-95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj
-S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL
-MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
-BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1
-c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx
-MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg
-R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD
-VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR
-JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T
-fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu
-jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z
-wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ
-fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD
-VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO
-BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G
-CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1
-7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn
-8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs
-ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
-ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/
-2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezEL
-MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
-BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1
-c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAeFw0wOTA5MDkwODE1MjdaFw0yOTEy
-MzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNUQyBUcnVzdENlbnRl
-ciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0ExKDAm
-BgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF
-5+cvAqBNLaT6hdqbJYUtQCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYv
-DIRlzg9uwliT6CwLOunBjvvya8o84pxOjuT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8v
-zArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+EutCHnNaYlAJ/Uqwa1D7KRT
-yGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1M4BDj5yj
-dipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBh
-MB8GA1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMB
-Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI
-4jANBgkqhkiG9w0BAQUFAAOCAQEAg8ev6n9NCjw5sWi+e22JLumzCecYV42Fmhfz
-dkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+KGwWaODIl0YgoGhnYIg5IFHY
-aAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhKBgePxLcHsU0G
-DeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV
-CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPH
-LQNjO9Po5KIqwoIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE
-SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg
-Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV
-BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl
-cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA
-vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu
-Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a
-0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1
-4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN
-eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD
-R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG
-A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu
-dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME
-Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3
-WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw
-HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ
-KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO
-Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX
-wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
-2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89
-9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0
-jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38
-aQNiuJkFBT1reBK9sG9l
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJE
-SzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEw
-ODM5MzBaFw0zNzAyMTEwOTA5MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNU
-REMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuHnEz9pPPEXyG9VhDr
-2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0zY0s
-2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItU
-GBxIYXvViGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKj
-dGqPqcNiKXEx5TukYBdedObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+r
-TpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/
-BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB5DCB4TCB3gYIKoFQgSkB
-AQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5kay9yZXBv
-c2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRl
-ciBmcmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEu
-MS4xLiBDZXJ0aWZpY2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIg
-T0lEIDEuMi4yMDguMTY5LjEuMS4xLjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1Ud
-HwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEMMAoGA1UEChMDVERDMRQwEgYD
-VQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYmaHR0cDovL2Ny
-bC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
-MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZ
-J2cdUBVLc647+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqG
-SIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACrom
-JkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4A9G28kNBKWKnctj7fAXmMXAnVBhO
-inxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYscA+UYyAFMP8uXBV2Y
-caaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9AOoB
-mbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQ
-YqbsFbS1AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9
-BKNDLdr8C2LqL19iUw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
-VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
-dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
-MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
-MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
-A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
-b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
-cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
-bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
-VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
-ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
-uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
-9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
-hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
-pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
-qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
-Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
-MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
-BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
-NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
-LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
-A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
-W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
-3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
-6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
-Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
-NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
-MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
-r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
-DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
-YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
-xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
-/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
-LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
-jVaMaA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL
-MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp
-IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi
-BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw
-MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
-d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig
-YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v
-dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/
-BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6
-papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K
-DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3
-KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox
-XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB
-rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
-Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
-MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV
-BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa
-Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl
-LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u
-MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl
-ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm
-gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8
-YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf
-b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9
-9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S
-zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk
-OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV
-HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA
-2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW
-oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
-t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c
-KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM
-m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu
-MdRAGmI0Nj81Aa6sY6A=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
-VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
-MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
-MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
-DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
-dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
-cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
-DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
-gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
-yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
-L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
-EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
-7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
-QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
-qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF
-MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL
-ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx
-MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc
-MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+
-AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH
-iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj
-vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA
-0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB
-OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/
-BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E
-FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01
-GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW
-zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4
-1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE
-f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F
-jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN
-ZetX2fNXlrtIzYE=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx
-KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd
-BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl
-YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1
-OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy
-aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50
-ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN
-8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/
-RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4
-hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5
-ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM
-EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj
-QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1
-A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy
-WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ
-1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30
-6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT
-91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
-e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p
-TpPDpFQUWw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRS
-MRgwFgYDVQQHDA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJp
-bGltc2VsIHZlIFRla25vbG9qaWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSw
-VEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ryb25payB2ZSBLcmlwdG9sb2ppIEFy
-YcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNVBAsMGkthbXUgU2Vy
-dGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUgS8O2
-ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAe
-Fw0wNzA4MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIx
-GDAWBgNVBAcMD0dlYnplIC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmls
-aW1zZWwgdmUgVGVrbm9sb2ppayBBcmHFn3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBU
-QUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZlIEtyaXB0b2xvamkgQXJh
-xZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2FtdSBTZXJ0
-aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7Zr
-IFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4h
-gb46ezzb8R1Sf1n68yJMlaCQvEhOEav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yK
-O7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1xnnRFDDtG1hba+818qEhTsXO
-fJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR6Oqeyjh1jmKw
-lZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
-hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQID
-AQABo0IwQDAdBgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/
-BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmP
-NOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4N5EY3ATIZJkrGG2AA1nJrvhY0D7t
-wyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLTy9LQQfMmNkqblWwM
-7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYhLBOh
-gLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5n
-oN+J1q2MdqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUs
-yZyQ2uypQjyttgI=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGDAJUUjEPMA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykg
-MjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8
-dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMxMDI3MTdaFw0xNTAz
-MjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2Vy
-dGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYD
-VQQHDAZBTktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kg
-xLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEu
-xZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7
-XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GXyGl8hMW0kWxsE2qkVa2k
-heiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8iSi9BB35J
-YbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5C
-urKZ8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1
-JuTm5Rh8i27fbMx4W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51
-b0dewQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV
-9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46sWrv7/hg0Uw2ZkUd82YCdAR7
-kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxEq8Sn5RTOPEFh
-fEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
-B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdA
-aLX/7KfS0zgYnNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKS
-RGQDJereW26fyfJOrN3H
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xS
-S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg
-SGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcNMDUxMTA3MTAwNzU3
-WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVrdHJv
-bmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJU
-UjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSw
-bGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWe
-LiAoYykgS2FzxLFtIDIwMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqeLCDe2JAOCtFp0if7qnef
-J1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKIx+XlZEdh
-R3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJ
-Qv2gQrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGX
-JHpsmxcPbe9TmJEr5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1p
-zpwACPI2/z7woQ8arBT9pmAPAgMBAAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58S
-Fq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
-KoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/nttRbj2hWyfIvwq
-ECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
-Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFz
-gw2lGh1uEpJ+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotH
-uFEJjOp9zYhys2AzsfAKRO8P9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LS
-y3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5UrbnBEI=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES
-MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU
-V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz
-WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO
-LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE
-AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH
-K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX
-RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z
-rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx
-3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq
-hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC
-MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls
-XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D
-lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn
-aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ
-YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB
-kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw
-IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG
-EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
-VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu
-dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6
-E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ
-D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK
-4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq
-lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW
-bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB
-o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
-MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js
-LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr
-BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB
-AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
-Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj
-j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH
-KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv
-2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3
-mfnGV/TJVTl4uix5yaaIK/QI
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB
-rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt
-Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa
-Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV
-BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l
-dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE
-AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B
-YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9
-hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l
-L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm
-SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM
-1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws
-6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud
-DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw
-Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50
-aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
-AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u
-7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0
-xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ
-rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim
-eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk
-USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
-lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
-SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
-A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
-MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
-d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
-cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
-0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
-M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
-MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
-oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
-DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
-oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
-dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
-bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
-BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
-//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
-CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
-CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
-3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
-KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy
-NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y
-LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+
-TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y
-TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0
-LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW
-I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw
-nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
-NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
-dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
-WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
-v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
-UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
-IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
-W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAxIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
-MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
-BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
-ADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0f
-zGVuDLDQVoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHi
-TkVWaR94AoDa3EeRKbs2yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0G
-CSqGSIb3DQEBBQUAA4GBAFgVKTk8d6PaXCUDfGD67gmZPCcQcMgMCeazh88K4hiW
-NWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n0a3hUKw8fGJLj7qE1xIV
-Gx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZRjXZ+Hxb
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK
-VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm
-Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J
-h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul
-uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68
-DzFc6PLZ
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4
-nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO
-8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV
-ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb
-PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
-6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr
-n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a
-qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4
-wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
-ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs
-pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4
-E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns
-YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
-MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
-aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe
-Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj
-IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx
-KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
-eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM
-HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw
-DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC
-AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji
-nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX
-rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn
-jBJ7xUS0rg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy
-aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s
-IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp
-Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV
-BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
-Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu
-Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g
-Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
-IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU
-J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO
-JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY
-wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o
-koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
-qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E
-Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe
-xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u
-7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
-sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI
-sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP
-cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
-MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
-BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
-ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
-BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
-I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
-CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i
-2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWXbj9T/UWZYB2oK0z5XqcJ
-2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/D/xwzoiQ
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
-pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
-13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
-U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
-F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
-oJ2daZH9
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
-N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
-KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
-kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
-CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
-Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
-imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
-2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
-DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
-/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
-F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
-TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
-ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
-U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp
-U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg
-SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln
-biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm
-GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve
-fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw
-AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ
-aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj
-aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW
-kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC
-4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga
-FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
-yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
-ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
-U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
-ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
-ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
-U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
-nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
-t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
-SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
-BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
-rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
-NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
-BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
-BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
-aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
-MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
-p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
-5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
-WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
-4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
-hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
-GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
-+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
-U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
-NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
-ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
-ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
-CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
-g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
-fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
-2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
-bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB
-vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
-ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp
-U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W
-ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
-Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0
-IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y
-IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh
-bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF
-9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH
-H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H
-LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN
-/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT
-rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw
-WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs
-exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
-DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4
-sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+
-seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz
-4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+
-BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR
-lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3
-7M2CYfE45k+XmCpajQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr
-MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl
-cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
-bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw
-CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h
-dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l
-cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h
-2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E
-lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV
-ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq
-299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t
-vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL
-dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
-AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF
-AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR
-zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3
-LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd
-7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw
-++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
-398znM/jra6O1I7mT1GvFpLgXPYHDw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v
-dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0
-MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww
-KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G
-A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13
-5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE
-SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O
-JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu
-ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE
-AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB
-AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB
-CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw
-b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo
-7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/
-0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7
-nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
-x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ
-33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMx
-IDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxs
-cyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9v
-dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcxMjEzMTcwNzU0WhcNMjIxMjE0
-MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdl
-bGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQD
-DC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+r
-WxxTkqxtnt3CxC5FlAM1iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjU
-Dk/41itMpBb570OYj7OeUt9tkTmPOL13i0Nj67eT/DBMHAGTthP796EfvyXhdDcs
-HqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8bJVhHlfXBIEyg1J55oNj
-z7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiBK0HmOFaf
-SZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/Slwxl
-AgMBAAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqG
-KGh0dHA6Ly9jcmwucGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0P
-AQH/BAQDAgHGMB0GA1UdDgQWBBQmlRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0j
-BIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGBi6SBiDCBhTELMAkGA1UEBhMC
-VVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNX
-ZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEB
-ALkVsUSRzCPIK0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd
-/ZDJPHV3V3p9+N701NX3leZ0bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pB
-A4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSljqHyita04pO2t/caaH/+Xc/77szWn
-k4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+esE2fDbbFwRnzVlhE9
-iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJtylv
-2G0xffX8oRAHh84vWdw+WNs=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
-gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
-MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY
-UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx
-NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3
-dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy
-dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6
-38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP
-KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q
-DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4
-qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa
-JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi
-PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P
-BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs
-jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0
-eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD
-ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR
-vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
-qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa
-IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
-i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
-O+7ETPTsJ3xCwnR8gooJybQDJbw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEFTCCA36gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBvjELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UE
-ChMfU29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9z
-dG1hc3RlcjEgMB4GA1UEAxMXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJTAjBgkq
-hkiG9w0BCQEWFmhvc3RtYXN0ZXJAc3BpLWluYy5vcmcwHhcNMDMwMTE1MTYyOTE3
-WhcNMDcwMTE0MTYyOTE3WjCBvjELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0luZGlh
-bmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMfU29mdHdhcmUgaW4g
-dGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1hc3RlcjEgMB4GA1UE
-AxMXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJTAjBgkqhkiG9w0BCQEWFmhvc3Rt
-YXN0ZXJAc3BpLWluYy5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAPB6
-rdoiLR3RodtM22LMcfwfqb5OrJNl7fwmvskgF7yP6sdD2bOfDIXhg9852jhY8/kL
-VOFe1ELAL2OyN4RAxk0rliZQVgeTgqvgkOVIBbNwgnjN6mqtuWzFiPL+NXQExq40
-I3whM+4lEiwSHaV+MYxWanMdhc+kImT50LKfkxcdAgMBAAGjggEfMIIBGzAdBgNV
-HQ4EFgQUB63oQR1/vda/G4F6P4xLiN4E0vowgesGA1UdIwSB4zCB4IAUB63oQR1/
-vda/G4F6P4xLiN4E0vqhgcSkgcEwgb4xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdJ
-bmRpYW5hMRUwEwYDVQQHEwxJbmRpYW5hcG9saXMxKDAmBgNVBAoTH1NvZnR3YXJl
-IGluIHRoZSBQdWJsaWMgSW50ZXJlc3QxEzARBgNVBAsTCmhvc3RtYXN0ZXIxIDAe
-BgNVBAMTF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MSUwIwYJKoZIhvcNAQkBFhZo
-b3N0bWFzdGVyQHNwaS1pbmMub3JnggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcN
-AQEEBQADgYEAm/Abn8c2y1nO3fgpAIslxvi9iNBZDhQtJ0VQZY6wgSfANyDOR4DW
-iexO/AlorB49KnkFS7TjCAoLOZhcg5FaNiKnlstMI5krQmau1Qnb/vGSNsE/UGms
-1ts+QYPUs0KmGEAFUri2XzLy+aQo9Kw74VBvqnxvaaMeY5yMcKNOieY=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIIDjCCBfagAwIBAgIJAOiOtsn4KhQoMA0GCSqGSIb3DQEBBQUAMIG8MQswCQYD
-VQQGEwJVUzEQMA4GA1UECBMHSW5kaWFuYTEVMBMGA1UEBxMMSW5kaWFuYXBvbGlz
-MSgwJgYDVQQKEx9Tb2Z0d2FyZSBpbiB0aGUgUHVibGljIEludGVyZXN0MRMwEQYD
-VQQLEwpob3N0bWFzdGVyMR4wHAYDVQQDExVDZXJ0aWZpY2F0ZSBBdXRob3JpdHkx
-JTAjBgkqhkiG9w0BCQEWFmhvc3RtYXN0ZXJAc3BpLWluYy5vcmcwHhcNMDgwNTEz
-MDgwNzU2WhcNMTgwNTExMDgwNzU2WjCBvDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMfU29mdHdh
-cmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1hc3RlcjEe
-MBwGA1UEAxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSUwIwYJKoZIhvcNAQkBFhZo
-b3N0bWFzdGVyQHNwaS1pbmMub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEA3DbmR0LCxFF1KYdAw9iOIQbSGE7r7yC9kDyFEBOMKVuUY/b0LfEGQpG5
-GcRCaQi/izZF6igFM0lIoCdDkzWKQdh4s/Dvs24t3dHLfer0dSbTPpA67tfnLAS1
-fOH1fMVO73e9XKKTM5LOfYFIz2u1IiwIg/3T1c87Lf21SZBb9q1NE8re06adU1Fx
-Y0b4ShZcmO4tbZoWoXaQ4mBDmdaJ1mwuepiyCwMs43pPx93jzONKao15Uvr0wa8u
-jyoIyxspgpJyQ7zOiKmqp4pRQ1WFmjcDeJPI8L20QcgHQprLNZd6ioFl3h1UCAHx
-ZFy3FxpRvB7DWYd2GBaY7r/2Z4GLBjXFS21ZGcfSxki+bhQog0oQnBv1b7ypjvVp
-/rLBVcznFMn5WxRTUQfqzj3kTygfPGEJ1zPSbqdu1McTCW9rXRTunYkbpWry9vjQ
-co7qch8vNGopCsUK7BxAhRL3pqXTT63AhYxMfHMgzFMY8bJYTAH1v+pk1Vw5xc5s
-zFNaVrpBDyXfa1C2x4qgvQLCxTtVpbJkIoRRKFauMe5e+wsWTUYFkYBE7axt8Feo
-+uthSKDLG7Mfjs3FIXcDhB78rKNDCGOM7fkn77SwXWfWT+3Qiz5dW8mRvZYChD3F
-TbxCP3T9PF2sXEg2XocxLxhsxGjuoYvJWdAY4wCAs1QnLpnwFVMCAwEAAaOCAg8w
-ggILMB0GA1UdDgQWBBQ0cdE41xU2g0dr1zdkQjuOjVKdqzCB8QYDVR0jBIHpMIHm
-gBQ0cdE41xU2g0dr1zdkQjuOjVKdq6GBwqSBvzCBvDELMAkGA1UEBhMCVVMxEDAO
-BgNVBAgTB0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMf
-U29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1h
-c3RlcjEeMBwGA1UEAxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSUwIwYJKoZIhvcN
-AQkBFhZob3N0bWFzdGVyQHNwaS1pbmMub3JnggkA6I62yfgqFCgwDwYDVR0TAQH/
-BAUwAwEB/zARBglghkgBhvhCAQEEBAMCAAcwCQYDVR0SBAIwADAuBglghkgBhvhC
-AQ0EIRYfU29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDAwBglghkgBhvhC
-AQQEIxYhaHR0cHM6Ly9jYS5zcGktaW5jLm9yZy9jYS1jcmwucGVtMDIGCWCGSAGG
-+EIBAwQlFiNodHRwczovL2NhLnNwaS1pbmMub3JnL2NlcnQtY3JsLnBlbTAhBgNV
-HREEGjAYgRZob3N0bWFzdGVyQHNwaS1pbmMub3JnMA4GA1UdDwEB/wQEAwIBBjAN
-BgkqhkiG9w0BAQUFAAOCAgEAtM294LnqsgMrfjLp3nI/yUuCXp3ir1UJogxU6M8Y
-PCggHam7AwIvUjki+RfPrWeQswN/2BXja367m1YBrzXU2rnHZxeb1NUON7MgQS4M
-AcRb+WU+wmHo0vBqlXDDxm/VNaSsWXLhid+hoJ0kvSl56WEq2dMeyUakCHhBknIP
-qxR17QnwovBc78MKYiC3wihmrkwvLo9FYyaW8O4x5otVm6o6+YI5HYg84gd1GuEP
-sTC8cTLSOv76oYnzQyzWcsR5pxVIBcDYLXIC48s9Fmq6ybgREOJJhcyWR2AFJS7v
-dVkz9UcZFu/abF8HyKZQth3LZjQl/GaD68W2MEH4RkRiqMEMVObqTFoo5q7Gt/5/
-O5aoLu7HaD7dAD0prypjq1/uSSotxdz70cbT0ZdWUoa2lOvUYFG3/B6bzAKb1B+P
-+UqPti4oOxfMxaYF49LTtcYDyeFIQpvLP+QX4P4NAZUJurgNceQJcHdC2E3hQqlg
-g9cXiUPS1N2nGLar1CQlh7XU4vwuImm9rWgs/3K1mKoGnOcqarihk3bOsPN/nOHg
-T7jYhkalMwIsJWE3KpLIrIF0aGOHM3a9BX9e1dUCbb2v/ypaqknsmHlHU5H2DjRa
-yaXG67Ljxay2oHA1u8hRadDytaIybrw/oDc5fHE2pgXfDBLkFqfF1stjo5VwP+YE
-o2A=
------END CERTIFICATE-----
diff --git a/misc/certs/ca.pem b/misc/certs/ca.pem
deleted file mode 100644
index 75708ece..00000000
--- a/misc/certs/ca.pem
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIESzCCAzOgAwIBAgIJAJigUTEEXRQpMA0GCSqGSIb3DQEBBQUAMHYxCzAJBgNV
-BAYTAkRFMQ8wDQYDVQQIEwZIZXNzZW4xDjAMBgNVBAcTBUZ1bGRhMRAwDgYDVQQK
-EwdEZWJjb25mMRMwEQYDVQQDEwpEZWJjb25mIENBMR8wHQYJKoZIhvcNAQkBFhBq
-b2VyZ0BkZWJpYW4ub3JnMB4XDTA1MTEwNTE3NTUxNFoXDTE1MTEwMzE3NTUxNFow
-djELMAkGA1UEBhMCREUxDzANBgNVBAgTBkhlc3NlbjEOMAwGA1UEBxMFRnVsZGEx
-EDAOBgNVBAoTB0RlYmNvbmYxEzARBgNVBAMTCkRlYmNvbmYgQ0ExHzAdBgkqhkiG
-9w0BCQEWEGpvZXJnQGRlYmlhbi5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCvbOo0SrIwI5IMlsshH8WF3dHB9r9JlSKhMPaybawa1EyvZspMQ3wa
-F5qxNf3Sj+NElEmjseEqvCZiIIzqwerHu0Qw62cDYCdCd2+Wb5m0bPYB5CGHiyU1
-eNP0je42O0YeXG2BvUujN8AviocVo39X2YwNQ0ryy4OaqYgm2pRlbtT2ESbF+SfV
-Y2iqQj/f8ymF+lHo/pz8tbAqxWcqaSiHFAVQJrdqtFhtoodoNiE3q76zJoUkZTXB
-k60Yc3MJSnatZCpnsSBr/D7zpntl0THrUjjtdRWCjQVhqfhM1yZJV+ApbLdheFh0
-ZWlSxdnp25p0q0XYw/7G92ELyFDfBUUNAgMBAAGjgdswgdgwHQYDVR0OBBYEFMuV
-dFNb4mCWUFbcP5LOtxFLrEVTMIGoBgNVHSMEgaAwgZ2AFMuVdFNb4mCWUFbcP5LO
-txFLrEVToXqkeDB2MQswCQYDVQQGEwJERTEPMA0GA1UECBMGSGVzc2VuMQ4wDAYD
-VQQHEwVGdWxkYTEQMA4GA1UEChMHRGViY29uZjETMBEGA1UEAxMKRGViY29uZiBD
-QTEfMB0GCSqGSIb3DQEJARYQam9lcmdAZGViaWFuLm9yZ4IJAJigUTEEXRQpMAwG
-A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAGZXxHg4mnkvilRIM1EQfGdY
-S5b/WcyF2MYSTeTvK4aIB6VHwpZoZCnDGj2m2D3CkHT0upAD9o0zM1tdsfncLzV+
-mDT/jNmBtYo4QXx5vEPwvEIcgrWjwk7SyaEUhZjtolTkHB7ACl0oD0r71St4iEPR
-qTUCEXk2E47bg1Fz58wNt/yo2+4iqiRjg1XCH4evkQuhpW+dTZnDyFNqwSYZapOE
-TBA+9zBb6xD1KM2DdY7r4GiyYItN0BKLfuWbh9LXGbl1C+f4P11g+m2MPiavIeCe
-1iazG5pcS3KoTLACsYlEX24TINtg4kcuS81XdllcnsV3Kdts0nIqPj6uhTTZD0k=
------END CERTIFICATE-----
diff --git a/misc/certs/ca6e4ad9.0 b/misc/certs/ca6e4ad9.0
deleted file mode 100644
index 4b542569..00000000
--- a/misc/certs/ca6e4ad9.0
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe
-MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0
-ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
-Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw
-IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL
-SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF
-AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH
-SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh
-ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X
-DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1
-TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ
-fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA
-sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU
-WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS
-nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH
-dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip
-NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC
-AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF
-MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
-ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB
-uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl
-PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP
-JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/
-gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2
-j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6
-5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB
-o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS
-/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z
-Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE
-W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D
-hNQ+IIX3Sj0rnP0qCglN6oH4EZw=
------END CERTIFICATE-----
diff --git a/misc/certs/cacert.org.pem b/misc/certs/cacert.org.pem
deleted file mode 100644
index 3ccc18e8..00000000
--- a/misc/certs/cacert.org.pem
+++ /dev/null
@@ -1,83 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
-IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
-IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
-Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO
-BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi
-MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ
-ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ
-8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6
-zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y
-fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7
-w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc
-G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k
-epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q
-laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ
-QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU
-fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826
-YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w
-ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY
-gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe
-MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0
-IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy
-dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw
-czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0
-dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl
-aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC
-AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg
-b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB
-ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc
-nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg
-18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c
-gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl
-Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY
-sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T
-SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF
-CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum
-GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk
-zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW
-omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIHWTCCBUGgAwIBAgIDCkGKMA0GCSqGSIb3DQEBCwUAMHkxEDAOBgNVBAoTB1Jv
-b3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZ
-Q0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSc3VwcG9y
-dEBjYWNlcnQub3JnMB4XDTExMDUyMzE3NDgwMloXDTIxMDUyMDE3NDgwMlowVDEU
-MBIGA1UEChMLQ0FjZXJ0IEluYy4xHjAcBgNVBAsTFWh0dHA6Ly93d3cuQ0FjZXJ0
-Lm9yZzEcMBoGA1UEAxMTQ0FjZXJ0IENsYXNzIDMgUm9vdDCCAiIwDQYJKoZIhvcN
-AQEBBQADggIPADCCAgoCggIBAKtJNRFIfNImflOUz0Op3SjXQiqL84d4GVh8D57a
-iX3h++tykA10oZZkq5+gJJlz2uJVdscXe/UErEa4w75/ZI0QbCTzYZzA8pD6Ueb1
-aQFjww9W4kpCz+JEjCUoqMV5CX1GuYrz6fM0KQhF5Byfy5QEHIGoFLOYZcRD7E6C
-jQnRvapbjZLQ7N6QxX8KwuPr5jFaXnQ+lzNZ6MMDPWAzv/fRb0fEze5ig1JuLgia
-pNkVGJGmhZJHsK5I6223IeyFGmhyNav/8BBdwPSUp2rVO5J+TJAFfpPBLIukjmJ0
-FXFuC3ED6q8VOJrU0gVyb4z5K+taciX5OUbjchs+BMNkJyIQKopPWKcDrb60LhPt
-XapI19V91Cp7XPpGBFDkzA5CW4zt2/LP/JaT4NsRNlRiNDiPDGCbO5dWOK3z0luL
-oFvqTpa4fNfVoIZwQNORKbeiPK31jLvPGpKK5DR7wNhsX+kKwsOnIJpa3yxdUly6
-R9Wb7yQocDggL9V/KcCyQQNokszgnMyXS0XvOhAKq3A6mJVwrTWx6oUrpByAITGp
-rmB6gCZIALgBwJNjVSKRPFbnr9s6JfOPMVTqJouBWfmh0VMRxXudA/Z0EeBtsSw/
-LIaRmXGapneLNGDRFLQsrJ2vjBDTn8Rq+G8T/HNZ92ZCdB6K4/jc0m+YnMtHmJVA
-BfvpAgMBAAGjggINMIICCTAdBgNVHQ4EFgQUdahxYEyIE/B42Yl3tW3Fid+8sXow
-gaMGA1UdIwSBmzCBmIAUFrUyG9TH8+DmjvO90rA67rI5GNGhfaR7MHkxEDAOBgNV
-BAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAG
-A1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS
-c3VwcG9ydEBjYWNlcnQub3JnggEAMA8GA1UdEwEB/wQFMAMBAf8wXQYIKwYBBQUH
-AQEEUTBPMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5DQWNlcnQub3JnLzAoBggr
-BgEFBQcwAoYcaHR0cDovL3d3dy5DQWNlcnQub3JnL2NhLmNydDBKBgNVHSAEQzBB
-MD8GCCsGAQQBgZBKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuQ0FjZXJ0Lm9y
-Zy9pbmRleC5waHA/aWQ9MTAwNAYJYIZIAYb4QgEIBCcWJWh0dHA6Ly93d3cuQ0Fj
-ZXJ0Lm9yZy9pbmRleC5waHA/aWQ9MTAwUAYJYIZIAYb4QgENBEMWQVRvIGdldCB5
-b3VyIG93biBjZXJ0aWZpY2F0ZSBmb3IgRlJFRSwgZ28gdG8gaHR0cDovL3d3dy5D
-QWNlcnQub3JnMA0GCSqGSIb3DQEBCwUAA4ICAQApKIWuRKm5r6R5E/CooyuXYPNc
-7uMvwfbiZqARrjY3OnYVBFPqQvX56sAV2KaC2eRhrnILKVyQQ+hBsuF32wITRHhH
-Va9Y/MyY9kW50SD42CEH/m2qc9SzxgfpCYXMO/K2viwcJdVxjDm1Luq+GIG6sJO4
-D+Pm1yaMMVpyA4RS5qb1MyJFCsgLDYq4Nm+QCaGrvdfVTi5xotSu+qdUK+s1jVq3
-VIgv7nSf7UgWyg1I0JTTrKSi9iTfkuO960NAkW4cGI5WtIIS86mTn9S8nK2cde5a
-lxuV53QtHA+wLJef+6kzOXrnAzqSjiL2jA3k2X4Ndhj3AfnvlpaiVXPAPHG0HRpW
-Q7fDCo1y/OIQCQtBzoyUoPkD/XFzS4pXM+WOdH4VAQDmzEoc53+VGS3FpQyLu7Xt
-hbNc09+4ufLKxw0BFKxwWMWMjTPUnWajGlCVI/xI4AZDEtnNp4Y5LzZyo4AQ5OHz
-0ctbGsDkgJp8E3MGT9ujayQKurMcvEp4u+XjdTilSKeiHq921F73OIZWWonO1sOn
-ebJSoMbxhbQljPI/lrMQ2Y1sVzufb4Y6GIIiNsiwkTjbKqGTqoQ/9SdlrnPVyNXT
-d+pLncdBu8fA46A/5H2kjXPmEkvfoXNzczqA6NXLji/L6hOn1kGLrPo8idck9U60
-4GGSt/M3mMS+lqO3ig==
------END CERTIFICATE-----
diff --git a/misc/certs/cb357862.0 b/misc/certs/cb357862.0
deleted file mode 100644
index c2e9d2bc..00000000
--- a/misc/certs/cb357862.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns
-YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
-MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
-aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe
-Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj
-IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx
-KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
-eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM
-HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw
-DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC
-AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji
-nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX
-rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn
-jBJ7xUS0rg==
------END CERTIFICATE-----
diff --git a/misc/certs/cb59f961.0 b/misc/certs/cb59f961.0
deleted file mode 100644
index f5053061..00000000
--- a/misc/certs/cb59f961.0
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn
-MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
-ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo
-YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9
-MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy
-NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G
-A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA
-A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0
-Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s
-QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV
-eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795
-B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh
-z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T
-AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i
-ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w
-TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH
-MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD
-VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE
-VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
-bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B
-AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM
-bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi
-ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG
-VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c
-ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/
-AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
------END CERTIFICATE-----
diff --git a/misc/certs/cbeee9e2.0 b/misc/certs/cbeee9e2.0
deleted file mode 100644
index 2031f3ed..00000000
--- a/misc/certs/cbeee9e2.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs
-IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg
-R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A
-PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8
-Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL
-TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL
-5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7
-S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe
-2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap
-EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td
-EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv
-/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN
-A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0
-abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF
-I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz
-4iIprn2DQKi6bA==
------END CERTIFICATE-----
diff --git a/misc/certs/cbf06781.0 b/misc/certs/cbf06781.0
deleted file mode 100644
index c2b29078..00000000
--- a/misc/certs/cbf06781.0
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT
-EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp
-ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz
-NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH
-EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE
-AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD
-E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH
-/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy
-DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh
-GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR
-tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA
-AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
-FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX
-WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu
-9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr
-gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo
-2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
-LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI
-4uJEvlz36hz1
------END CERTIFICATE-----
diff --git a/misc/certs/cc450945.0 b/misc/certs/cc450945.0
deleted file mode 100644
index 76383219..00000000
--- a/misc/certs/cc450945.0
+++ /dev/null
@@ -1,34 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4
-MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6
-ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD
-VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j
-b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq
-scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO
-xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H
-LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX
-uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD
-yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+
-JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q
-rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN
-BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L
-hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB
-QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+
-HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu
-Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg
-QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB
-BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
-MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA
-A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb
-laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56
-awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo
-JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw
-LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT
-VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk
-LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb
-UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/
-QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+
-naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls
-QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
------END CERTIFICATE-----
diff --git a/misc/certs/ccc52f49.0 b/misc/certs/ccc52f49.0
deleted file mode 100644
index 4bcc6a43..00000000
--- a/misc/certs/ccc52f49.0
+++ /dev/null
@@ -1,13 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC
-VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ
-cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ
-BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt
-VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D
-0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9
-ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G
-A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs
-aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I
-flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ==
------END CERTIFICATE-----
diff --git a/misc/certs/cd58d51e.0 b/misc/certs/cd58d51e.0
deleted file mode 100644
index 078bd0e3..00000000
--- a/misc/certs/cd58d51e.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl
-MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe
-U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX
-DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy
-dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj
-YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV
-OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr
-zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM
-VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ
-hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO
-ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw
-awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs
-OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
-DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF
-coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc
-okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8
-t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy
-1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/
-SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
------END CERTIFICATE-----
diff --git a/misc/certs/cdaebb72.0 b/misc/certs/cdaebb72.0
deleted file mode 100644
index c4eb117f..00000000
--- a/misc/certs/cdaebb72.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO
-TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh
-dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy
-MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk
-ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn
-ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71
-9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO
-hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U
-tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o
-BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh
-SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww
-OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv
-cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA
-7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k
-/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm
-eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6
-u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy
-7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
-iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
------END CERTIFICATE-----
diff --git a/misc/certs/ce026bf8.0 b/misc/certs/ce026bf8.0
deleted file mode 100644
index 74be4914..00000000
--- a/misc/certs/ce026bf8.0
+++ /dev/null
@@ -1,26 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMx
-IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
-dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
-HhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTELMAkGA1UEBhMCRVMx
-IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
-dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5u
-Cp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5Vj1H5WuretXDE7aTt/6MNbg9kUDGvASdY
-rv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJHlShbz++AbOCQl4oBPB3z
-hxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf3H5idPay
-BQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcL
-iam8NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcb
-AgMBAAGjgZ8wgZwwKgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lv
-bmFsLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0
-MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E
-FgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQADggEBAEdz/o0n
-VPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
-u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36m
-hoEyIwOdyPdfwUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzfl
-ZKG+TQyTmAyX9odtsz/ny4Cm7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBp
-QWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YGVM+h4k0460tQtcsm9MracEpqoeJ5
-quGnM/b9Sh/22WA=
------END CERTIFICATE-----
diff --git a/misc/certs/certSIGN_ROOT_CA.pem b/misc/certs/certSIGN_ROOT_CA.pem
deleted file mode 100644
index 0a38740b..00000000
--- a/misc/certs/certSIGN_ROOT_CA.pem
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT
-AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD
-QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP
-MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC
-ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do
-0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ
-UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d
-RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ
-OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv
-JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C
-AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O
-BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ
-LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY
-MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ
-44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I
-Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw
-i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN
-9u6wWk5JRFRYX0KD
------END CERTIFICATE-----
diff --git a/misc/certs/cf701eeb.0 b/misc/certs/cf701eeb.0
deleted file mode 100644
index 37400921..00000000
--- a/misc/certs/cf701eeb.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
-FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz
-MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv
-cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz
-Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO
-0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao
-wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj
-7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS
-8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT
-BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
-/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg
-JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC
-NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3
-6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/
-3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm
-D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS
-CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
-3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
------END CERTIFICATE-----
diff --git a/misc/certs/cfa1c2ee.0 b/misc/certs/cfa1c2ee.0
deleted file mode 100644
index 053f4335..00000000
--- a/misc/certs/cfa1c2ee.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg
-Q2xhc3MgMiBDQSAxMB4XDTA2MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzEL
-MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD
-VQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7McXA0
-ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLX
-l18xoS830r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVB
-HfCuuCkslFJgNJQ72uA40Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B
-5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/RuFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3
-WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0PAQH/BAQD
-AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLP
-gcIV1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+
-DKhQ7SLHrQVMdvvt7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKu
-BctN518fV4bVIJwo+28TOPX2EZL2fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHs
-h7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5wwDX3OaJdZtB7WZ+oRxKaJyOk
-LY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
------END CERTIFICATE-----
diff --git a/misc/certs/d16a5865.0 b/misc/certs/d16a5865.0
deleted file mode 100644
index de97f841..00000000
--- a/misc/certs/d16a5865.0
+++ /dev/null
@@ -1,35 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE
-BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h
-cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy
-MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg
-Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi
-MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9
-thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM
-cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG
-L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i
-NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h
-X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b
-m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy
-Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja
-EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T
-KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF
-6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh
-OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD
-VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD
-VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
-cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv
-ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl
-AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF
-661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9
-am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1
-ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481
-PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS
-3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k
-SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF
-3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM
-ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g
-StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz
-Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB
-jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
------END CERTIFICATE-----
diff --git a/misc/certs/d537fba6.0 b/misc/certs/d537fba6.0
deleted file mode 100644
index 21ccc8f1..00000000
--- a/misc/certs/d537fba6.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE
-SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg
-Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV
-BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl
-cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA
-vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu
-Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a
-0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1
-4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN
-eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD
-R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG
-A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu
-dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME
-Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3
-WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw
-HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ
-KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO
-Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX
-wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
-2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89
-9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0
-jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38
-aQNiuJkFBT1reBK9sG9l
------END CERTIFICATE-----
diff --git a/misc/certs/d59297b8.0 b/misc/certs/d59297b8.0
deleted file mode 100644
index 078bd0e3..00000000
--- a/misc/certs/d59297b8.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl
-MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe
-U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX
-DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy
-dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj
-YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV
-OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr
-zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM
-VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ
-hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO
-ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw
-awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs
-OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
-DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF
-coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc
-okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8
-t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy
-1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/
-SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
------END CERTIFICATE-----
diff --git a/misc/certs/d64f06f3.0 b/misc/certs/d64f06f3.0
deleted file mode 100644
index 6496d08d..00000000
--- a/misc/certs/d64f06f3.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzET
-MBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UE
-AxMIQ0EgRGlzaWcwHhcNMDYwMzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQsw
-CQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcg
-YS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgmGErE
-Nx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnX
-mjxUizkDPw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYD
-XcDtab86wYqg6I7ZuUUohwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhW
-S8+2rT+MitcE5eN4TPWGqvWP+j1scaMtymfraHtuM6kMgiioTGohQBUgDCZbg8Kp
-FhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8wgfwwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0PAQH/BAQD
-AgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cu
-ZGlzaWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5z
-ay9jYS9jcmwvY2FfZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2sv
-Y2EvY3JsL2NhX2Rpc2lnLmNybDAaBgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEw
-DQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59tWDYcPQuBDRIrRhCA/ec8J9B6
-yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3mkkp7M5+cTxq
-EEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
-CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeB
-EicTXxChds6KezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFN
-PGO+I++MzVpQuGhU+QqZMxEA4Z7CRneC9VkGjCFMhwnN5ag=
------END CERTIFICATE-----
diff --git a/misc/certs/d78a75c7.0 b/misc/certs/d78a75c7.0
deleted file mode 100644
index 66928109..00000000
--- a/misc/certs/d78a75c7.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy
-aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s
-IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp
-Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV
-BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
-Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu
-Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g
-Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
-IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU
-J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO
-JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY
-wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o
-koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
-qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E
-Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe
-xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u
-7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
-sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI
-sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP
-cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
------END CERTIFICATE-----
diff --git a/misc/certs/d7e8dc79.0 b/misc/certs/d7e8dc79.0
deleted file mode 100644
index 35cc4eb5..00000000
--- a/misc/certs/d7e8dc79.0
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
-GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
-b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV
-BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
-YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa
-GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg
-Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J
-WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB
-rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp
-+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1
-ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i
-Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz
-PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og
-/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH
-oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI
-yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud
-EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2
-A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL
-MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
-ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f
-BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn
-g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl
-fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K
-WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha
-B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc
-hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR
-TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD
-mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z
-ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y
-4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza
-8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
------END CERTIFICATE-----
diff --git a/misc/certs/d853d49e.0 b/misc/certs/d853d49e.0
deleted file mode 100644
index fb804c94..00000000
--- a/misc/certs/d853d49e.0
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF
-MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL
-ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx
-MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc
-MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+
-AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH
-iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj
-vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA
-0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB
-OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/
-BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E
-FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01
-GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW
-zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4
-1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE
-f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F
-jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN
-ZetX2fNXlrtIzYE=
------END CERTIFICATE-----
diff --git a/misc/certs/d957f522.0 b/misc/certs/d957f522.0
deleted file mode 100644
index e764de4d..00000000
--- a/misc/certs/d957f522.0
+++ /dev/null
@@ -1,32 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjET
-MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAk
-BgNVBAMMHUNlcnRpbm9taXMgLSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4
-Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNl
-cnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYwJAYDVQQDDB1DZXJ0
-aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jY
-F1AMnmHawE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N
-8y4oH3DfVS9O7cdxbwlyLu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWe
-rP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K
-/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92NjMD2AR5vpTESOH2VwnHu
-7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9qc1pkIuVC
-28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6
-lSTClrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1E
-nn1So2+WLhl+HPNbxxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB
-0iSVL1N6aaLwD4ZFjliCK0wi1F6g530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql09
-5gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna4NH4+ej9Uji29YnfAgMBAAGj
-WzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQN
-jLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
-KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9s
-ov3/4gbIOZ/xWqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZM
-OH8oMDX/nyNTt7buFHAAQCvaR6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q
-619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40nJ+U8/aGH88bc62UeYdocMMzpXDn
-2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1BCxMjidPJC+iKunqj
-o3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjvJL1v
-nxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG
-5ERQL1TEqkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWq
-pdEdnV1j6CTmNhTih60bWfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZb
-dsLLO7XSAPCjDuGtbkD326C00EauFddEwk01+dIL8hf2rGbVJLJP0RyZwG71fet0
-BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/vgt2Fl43N+bYdJeimUV5
------END CERTIFICATE-----
diff --git a/misc/certs/d9d12c58.0 b/misc/certs/d9d12c58.0
deleted file mode 100644
index c4e61081..00000000
--- a/misc/certs/d9d12c58.0
+++ /dev/null
@@ -1,37 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV
-MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe
-TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0
-dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB
-KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0
-N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC
-dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu
-MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL
-b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD
-zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi
-3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8
-WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY
-Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi
-NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC
-ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4
-QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0
-YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz
-aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
-IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm
-ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg
-ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs
-amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv
-IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3
-Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6
-ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1
-YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg
-dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs
-b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G
-CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO
-xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP
-0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ
-QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk
-f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK
-8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI
------END CERTIFICATE-----
diff --git a/misc/certs/dbc54cab.0 b/misc/certs/dbc54cab.0
deleted file mode 100644
index 516ecf55..00000000
--- a/misc/certs/dbc54cab.0
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE
-BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz
-dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG
-A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U
-cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf
-qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ
-JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ
-+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS
-s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5
-HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7
-70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG
-V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S
-qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S
-5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia
-C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX
-OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE
-FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
-BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2
-KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
-Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B
-8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ
-MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc
-0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ
-u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF
-u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH
-YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8
-GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO
-RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e
-KeC2uAloGRwYQw==
------END CERTIFICATE-----
diff --git a/misc/certs/dc45b0bd.0 b/misc/certs/dc45b0bd.0
deleted file mode 100644
index 66928109..00000000
--- a/misc/certs/dc45b0bd.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy
-aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s
-IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp
-Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV
-BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
-Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu
-Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g
-Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
-IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU
-J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO
-JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY
-wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o
-koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
-qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E
-Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe
-xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u
-7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
-sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI
-sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP
-cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
------END CERTIFICATE-----
diff --git a/misc/certs/ddc328ff.0 b/misc/certs/ddc328ff.0
deleted file mode 100644
index 27df192f..00000000
--- a/misc/certs/ddc328ff.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
-VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
-MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
-MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
-DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
-dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
-cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
-DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
-gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
-yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
-L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
-EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
-7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
-QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
-qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
------END CERTIFICATE-----
diff --git a/misc/certs/e113c810.0 b/misc/certs/e113c810.0
deleted file mode 100644
index 220d95f9..00000000
--- a/misc/certs/e113c810.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV
-BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X
-DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ
-BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4
-QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny
-gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw
-zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q
-130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2
-JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw
-DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw
-ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT
-AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj
-AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG
-9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h
-bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc
-fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu
-HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w
-t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
-WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
------END CERTIFICATE-----
diff --git a/misc/certs/e268a4c5.0 b/misc/certs/e268a4c5.0
deleted file mode 100644
index 43b8375f..00000000
--- a/misc/certs/e268a4c5.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw
-MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD
-VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul
-CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n
-tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl
-dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch
-PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC
-+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O
-BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E
-BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl
-MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk
-ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB
-IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X
-7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz
-43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
-eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl
-pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA
-WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
------END CERTIFICATE-----
diff --git a/misc/certs/e2799e36.0 b/misc/certs/e2799e36.0
deleted file mode 100644
index dc1f859a..00000000
--- a/misc/certs/e2799e36.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB
-mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT
-MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
-eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ
-BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
-MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0
-BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz
-+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm
-hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn
-5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W
-JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL
-DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC
-huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
-HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB
-AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB
-zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN
-kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
-AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH
-SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G
-spki4cErx5z481+oghLrGREt
------END CERTIFICATE-----
diff --git a/misc/certs/e48193cf.0 b/misc/certs/e48193cf.0
deleted file mode 100644
index 73a33674..00000000
--- a/misc/certs/e48193cf.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE
-BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
-dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL
-MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
-cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP
-Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr
-ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL
-MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1
-yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr
-VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/
-nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
-KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG
-XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj
-vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt
-Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g
-N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC
-nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
------END CERTIFICATE-----
diff --git a/misc/certs/e536d871.0 b/misc/certs/e536d871.0
deleted file mode 100644
index ad3800d5..00000000
--- a/misc/certs/e536d871.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1
-MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK
-EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh
-BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq
-xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G
-87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i
-2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U
-WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1
-0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G
-A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T
-AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr
-pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL
-ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm
-aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv
-hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm
-hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
-dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3
-P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y
-iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no
-xqE=
------END CERTIFICATE-----
diff --git a/misc/certs/e5662767.0 b/misc/certs/e5662767.0
deleted file mode 100644
index 3ccc18e8..00000000
--- a/misc/certs/e5662767.0
+++ /dev/null
@@ -1,83 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
-IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
-IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
-Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO
-BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi
-MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ
-ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ
-8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6
-zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y
-fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7
-w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc
-G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k
-epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q
-laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ
-QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU
-fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826
-YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w
-ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY
-gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe
-MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0
-IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy
-dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw
-czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0
-dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl
-aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC
-AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg
-b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB
-ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc
-nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg
-18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c
-gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl
-Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY
-sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T
-SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF
-CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum
-GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk
-zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW
-omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIHWTCCBUGgAwIBAgIDCkGKMA0GCSqGSIb3DQEBCwUAMHkxEDAOBgNVBAoTB1Jv
-b3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZ
-Q0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSc3VwcG9y
-dEBjYWNlcnQub3JnMB4XDTExMDUyMzE3NDgwMloXDTIxMDUyMDE3NDgwMlowVDEU
-MBIGA1UEChMLQ0FjZXJ0IEluYy4xHjAcBgNVBAsTFWh0dHA6Ly93d3cuQ0FjZXJ0
-Lm9yZzEcMBoGA1UEAxMTQ0FjZXJ0IENsYXNzIDMgUm9vdDCCAiIwDQYJKoZIhvcN
-AQEBBQADggIPADCCAgoCggIBAKtJNRFIfNImflOUz0Op3SjXQiqL84d4GVh8D57a
-iX3h++tykA10oZZkq5+gJJlz2uJVdscXe/UErEa4w75/ZI0QbCTzYZzA8pD6Ueb1
-aQFjww9W4kpCz+JEjCUoqMV5CX1GuYrz6fM0KQhF5Byfy5QEHIGoFLOYZcRD7E6C
-jQnRvapbjZLQ7N6QxX8KwuPr5jFaXnQ+lzNZ6MMDPWAzv/fRb0fEze5ig1JuLgia
-pNkVGJGmhZJHsK5I6223IeyFGmhyNav/8BBdwPSUp2rVO5J+TJAFfpPBLIukjmJ0
-FXFuC3ED6q8VOJrU0gVyb4z5K+taciX5OUbjchs+BMNkJyIQKopPWKcDrb60LhPt
-XapI19V91Cp7XPpGBFDkzA5CW4zt2/LP/JaT4NsRNlRiNDiPDGCbO5dWOK3z0luL
-oFvqTpa4fNfVoIZwQNORKbeiPK31jLvPGpKK5DR7wNhsX+kKwsOnIJpa3yxdUly6
-R9Wb7yQocDggL9V/KcCyQQNokszgnMyXS0XvOhAKq3A6mJVwrTWx6oUrpByAITGp
-rmB6gCZIALgBwJNjVSKRPFbnr9s6JfOPMVTqJouBWfmh0VMRxXudA/Z0EeBtsSw/
-LIaRmXGapneLNGDRFLQsrJ2vjBDTn8Rq+G8T/HNZ92ZCdB6K4/jc0m+YnMtHmJVA
-BfvpAgMBAAGjggINMIICCTAdBgNVHQ4EFgQUdahxYEyIE/B42Yl3tW3Fid+8sXow
-gaMGA1UdIwSBmzCBmIAUFrUyG9TH8+DmjvO90rA67rI5GNGhfaR7MHkxEDAOBgNV
-BAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAG
-A1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS
-c3VwcG9ydEBjYWNlcnQub3JnggEAMA8GA1UdEwEB/wQFMAMBAf8wXQYIKwYBBQUH
-AQEEUTBPMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5DQWNlcnQub3JnLzAoBggr
-BgEFBQcwAoYcaHR0cDovL3d3dy5DQWNlcnQub3JnL2NhLmNydDBKBgNVHSAEQzBB
-MD8GCCsGAQQBgZBKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuQ0FjZXJ0Lm9y
-Zy9pbmRleC5waHA/aWQ9MTAwNAYJYIZIAYb4QgEIBCcWJWh0dHA6Ly93d3cuQ0Fj
-ZXJ0Lm9yZy9pbmRleC5waHA/aWQ9MTAwUAYJYIZIAYb4QgENBEMWQVRvIGdldCB5
-b3VyIG93biBjZXJ0aWZpY2F0ZSBmb3IgRlJFRSwgZ28gdG8gaHR0cDovL3d3dy5D
-QWNlcnQub3JnMA0GCSqGSIb3DQEBCwUAA4ICAQApKIWuRKm5r6R5E/CooyuXYPNc
-7uMvwfbiZqARrjY3OnYVBFPqQvX56sAV2KaC2eRhrnILKVyQQ+hBsuF32wITRHhH
-Va9Y/MyY9kW50SD42CEH/m2qc9SzxgfpCYXMO/K2viwcJdVxjDm1Luq+GIG6sJO4
-D+Pm1yaMMVpyA4RS5qb1MyJFCsgLDYq4Nm+QCaGrvdfVTi5xotSu+qdUK+s1jVq3
-VIgv7nSf7UgWyg1I0JTTrKSi9iTfkuO960NAkW4cGI5WtIIS86mTn9S8nK2cde5a
-lxuV53QtHA+wLJef+6kzOXrnAzqSjiL2jA3k2X4Ndhj3AfnvlpaiVXPAPHG0HRpW
-Q7fDCo1y/OIQCQtBzoyUoPkD/XFzS4pXM+WOdH4VAQDmzEoc53+VGS3FpQyLu7Xt
-hbNc09+4ufLKxw0BFKxwWMWMjTPUnWajGlCVI/xI4AZDEtnNp4Y5LzZyo4AQ5OHz
-0ctbGsDkgJp8E3MGT9ujayQKurMcvEp4u+XjdTilSKeiHq921F73OIZWWonO1sOn
-ebJSoMbxhbQljPI/lrMQ2Y1sVzufb4Y6GIIiNsiwkTjbKqGTqoQ/9SdlrnPVyNXT
-d+pLncdBu8fA46A/5H2kjXPmEkvfoXNzczqA6NXLji/L6hOn1kGLrPo8idck9U60
-4GGSt/M3mMS+lqO3ig==
------END CERTIFICATE-----
diff --git a/misc/certs/e60bf0c0.0 b/misc/certs/e60bf0c0.0
deleted file mode 100644
index 41b460e7..00000000
--- a/misc/certs/e60bf0c0.0
+++ /dev/null
@@ -1,34 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk
-MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0
-YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg
-Q0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYT
-AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp
-Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIICIjAN
-BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9
-m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdih
-FvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/
-TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3F
-EzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbco
-kdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBu
-HYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNF
-vJbNcA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo
-19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC
-L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJW
-bjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p/r+D5kNX
-JLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw
-FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
-BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzc
-K6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzf
-ky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7Ik
-Vh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQMbFamIp1TpBcahQq4FJHgmDmHtqB
-sfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e
-3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsR
-ls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ip
-mXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH
-b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksf
-rK/7DZBaZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmms
-hFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y
-zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6
-MBr1mmz0DlP5OlvRHA==
------END CERTIFICATE-----
diff --git a/misc/certs/e775ed2d.0 b/misc/certs/e775ed2d.0
deleted file mode 100644
index 6bc28885..00000000
--- a/misc/certs/e775ed2d.0
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy
-c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE
-BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0
-IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV
-VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8
-cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT
-QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh
-F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v
-c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w
-mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd
-VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX
-teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ
-f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe
-Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+
-nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB
-/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY
-MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG
-9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
-aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX
-IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn
-ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z
-uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN
-Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja
-QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW
-koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9
-ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt
-DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm
-bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw=
------END CERTIFICATE-----
diff --git a/misc/certs/e7b8d656.0 b/misc/certs/e7b8d656.0
deleted file mode 100644
index 768a9eb9..00000000
--- a/misc/certs/e7b8d656.0
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
-ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw
-MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j
-LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ
-KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo
-RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu
-WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw
-Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD
-AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK
-eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM
-zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+
-WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
-/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==
------END CERTIFICATE-----
diff --git a/misc/certs/e8651083.0 b/misc/certs/e8651083.0
deleted file mode 100644
index aa844e75..00000000
--- a/misc/certs/e8651083.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD
-VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0
-ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G
-CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y
-OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx
-FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp
-Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
-dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP
-kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc
-cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U
-fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7
-N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC
-xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1
-+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
-A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM
-Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG
-SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h
-mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk
-ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
-tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c
-2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t
-HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW
------END CERTIFICATE-----
diff --git a/misc/certs/e8de2f56.0 b/misc/certs/e8de2f56.0
deleted file mode 100644
index 23b53062..00000000
--- a/misc/certs/e8de2f56.0
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg
-Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow
-TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw
-HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB
-BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y
-ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E
-N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9
-tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX
-0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c
-/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X
-KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY
-zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS
-O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D
-34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP
-K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3
-AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv
-Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj
-QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV
-cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS
-IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2
-HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa
-O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv
-033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u
-dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE
-kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41
-3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD
-u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq
-4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc=
------END CERTIFICATE-----
diff --git a/misc/certs/ePKI_Root_Certification_Authority.pem b/misc/certs/ePKI_Root_Certification_Authority.pem
deleted file mode 100644
index 4b542569..00000000
--- a/misc/certs/ePKI_Root_Certification_Authority.pem
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe
-MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0
-ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
-Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw
-IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL
-SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF
-AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH
-SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh
-ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X
-DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1
-TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ
-fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA
-sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU
-WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS
-nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH
-dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip
-NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC
-AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF
-MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
-ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB
-uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl
-PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP
-JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/
-gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2
-j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6
-5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB
-o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS
-/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z
-Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE
-W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D
-hNQ+IIX3Sj0rnP0qCglN6oH4EZw=
------END CERTIFICATE-----
diff --git a/misc/certs/ea169617.0 b/misc/certs/ea169617.0
deleted file mode 100644
index 44e96735..00000000
--- a/misc/certs/ea169617.0
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UE
-AwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00x
-CzAJBgNVBAYTAkVTMB4XDTA4MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEW
-MBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZF
-RElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
-AgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHkWLn7
-09gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7
-XBZXehuDYAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5P
-Grjm6gSSrj0RuVFCPYewMYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAK
-t0SdE3QrwqXrIhWYENiLxQSfHY9g5QYbm8+5eaA9oiM/Qj9r+hwDezCNzmzAv+Yb
-X79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbkHQl/Sog4P75n/TSW9R28
-MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTTxKJxqvQU
-fecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI
-2Sf23EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyH
-K9caUPgn6C9D4zq92Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEae
-ZAwUswdbxcJzbPEHXEUkFDWug/FqTYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAP
-BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz4SsrSbbXc6GqlPUB53NlTKxQ
-MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU9QHnc2VMrFAw
-RAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
-bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWIm
-fQwng4/F9tqgaHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3
-gvoFNTPhNahXwOf9jU8/kzJPeGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKe
-I6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1PwkzQSulgUV1qzOMPPKC8W64iLgpq0i
-5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1ThCojz2GuHURwCRi
-ipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oIKiMn
-MCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZ
-o5NjEFIqnxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6
-zqylfDJKZ0DcMDQj3dcEI2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacN
-GHk0vFQYXlPKNFHtRQrmjseCNj6nOGOpMCwXEGCSn1WHElkQwg9naRHMTh5+Spqt
-r0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3otkYNbn5XOmeUwssfnHdK
-Z05phkOTOPu220+DkdRgfks+KzgHVZhepA==
------END CERTIFICATE-----
diff --git a/misc/certs/eacdeb40.0 b/misc/certs/eacdeb40.0
deleted file mode 100644
index d6837453..00000000
--- a/misc/certs/eacdeb40.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
-bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2
-MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
-ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk
-hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym
-1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW
-OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb
-2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko
-O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU
-AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
-BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF
-Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb
-LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir
-oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C
-MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
-sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
------END CERTIFICATE-----
diff --git a/misc/certs/eb375c3e.0 b/misc/certs/eb375c3e.0
deleted file mode 100644
index 6fdb6439..00000000
--- a/misc/certs/eb375c3e.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd
-MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg
-Q2xhc3MgMyBDQSAxMB4XDTA1MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzEL
-MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD
-VQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKxifZg
-isRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//z
-NIqeKNc0n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI
-+MkcVyzwPX6UvCWThOiaAJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2R
-hzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+
-mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0PAQH/BAQD
-AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFP
-Bdy7pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27s
-EzNxZy5p+qksP2bAEllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2
-mSlf56oBzKwzqBwKu5HEA6BvtjT5htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yC
-e/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQjel/wroQk5PMr+4okoyeYZdow
-dXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
------END CERTIFICATE-----
diff --git a/misc/certs/ec87c655.0 b/misc/certs/ec87c655.0
deleted file mode 100644
index b735d1c3..00000000
--- a/misc/certs/ec87c655.0
+++ /dev/null
@@ -1,46 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIIDjCCBfagAwIBAgIJAOiOtsn4KhQoMA0GCSqGSIb3DQEBBQUAMIG8MQswCQYD
-VQQGEwJVUzEQMA4GA1UECBMHSW5kaWFuYTEVMBMGA1UEBxMMSW5kaWFuYXBvbGlz
-MSgwJgYDVQQKEx9Tb2Z0d2FyZSBpbiB0aGUgUHVibGljIEludGVyZXN0MRMwEQYD
-VQQLEwpob3N0bWFzdGVyMR4wHAYDVQQDExVDZXJ0aWZpY2F0ZSBBdXRob3JpdHkx
-JTAjBgkqhkiG9w0BCQEWFmhvc3RtYXN0ZXJAc3BpLWluYy5vcmcwHhcNMDgwNTEz
-MDgwNzU2WhcNMTgwNTExMDgwNzU2WjCBvDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMfU29mdHdh
-cmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1hc3RlcjEe
-MBwGA1UEAxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSUwIwYJKoZIhvcNAQkBFhZo
-b3N0bWFzdGVyQHNwaS1pbmMub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEA3DbmR0LCxFF1KYdAw9iOIQbSGE7r7yC9kDyFEBOMKVuUY/b0LfEGQpG5
-GcRCaQi/izZF6igFM0lIoCdDkzWKQdh4s/Dvs24t3dHLfer0dSbTPpA67tfnLAS1
-fOH1fMVO73e9XKKTM5LOfYFIz2u1IiwIg/3T1c87Lf21SZBb9q1NE8re06adU1Fx
-Y0b4ShZcmO4tbZoWoXaQ4mBDmdaJ1mwuepiyCwMs43pPx93jzONKao15Uvr0wa8u
-jyoIyxspgpJyQ7zOiKmqp4pRQ1WFmjcDeJPI8L20QcgHQprLNZd6ioFl3h1UCAHx
-ZFy3FxpRvB7DWYd2GBaY7r/2Z4GLBjXFS21ZGcfSxki+bhQog0oQnBv1b7ypjvVp
-/rLBVcznFMn5WxRTUQfqzj3kTygfPGEJ1zPSbqdu1McTCW9rXRTunYkbpWry9vjQ
-co7qch8vNGopCsUK7BxAhRL3pqXTT63AhYxMfHMgzFMY8bJYTAH1v+pk1Vw5xc5s
-zFNaVrpBDyXfa1C2x4qgvQLCxTtVpbJkIoRRKFauMe5e+wsWTUYFkYBE7axt8Feo
-+uthSKDLG7Mfjs3FIXcDhB78rKNDCGOM7fkn77SwXWfWT+3Qiz5dW8mRvZYChD3F
-TbxCP3T9PF2sXEg2XocxLxhsxGjuoYvJWdAY4wCAs1QnLpnwFVMCAwEAAaOCAg8w
-ggILMB0GA1UdDgQWBBQ0cdE41xU2g0dr1zdkQjuOjVKdqzCB8QYDVR0jBIHpMIHm
-gBQ0cdE41xU2g0dr1zdkQjuOjVKdq6GBwqSBvzCBvDELMAkGA1UEBhMCVVMxEDAO
-BgNVBAgTB0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMf
-U29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1h
-c3RlcjEeMBwGA1UEAxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSUwIwYJKoZIhvcN
-AQkBFhZob3N0bWFzdGVyQHNwaS1pbmMub3JnggkA6I62yfgqFCgwDwYDVR0TAQH/
-BAUwAwEB/zARBglghkgBhvhCAQEEBAMCAAcwCQYDVR0SBAIwADAuBglghkgBhvhC
-AQ0EIRYfU29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDAwBglghkgBhvhC
-AQQEIxYhaHR0cHM6Ly9jYS5zcGktaW5jLm9yZy9jYS1jcmwucGVtMDIGCWCGSAGG
-+EIBAwQlFiNodHRwczovL2NhLnNwaS1pbmMub3JnL2NlcnQtY3JsLnBlbTAhBgNV
-HREEGjAYgRZob3N0bWFzdGVyQHNwaS1pbmMub3JnMA4GA1UdDwEB/wQEAwIBBjAN
-BgkqhkiG9w0BAQUFAAOCAgEAtM294LnqsgMrfjLp3nI/yUuCXp3ir1UJogxU6M8Y
-PCggHam7AwIvUjki+RfPrWeQswN/2BXja367m1YBrzXU2rnHZxeb1NUON7MgQS4M
-AcRb+WU+wmHo0vBqlXDDxm/VNaSsWXLhid+hoJ0kvSl56WEq2dMeyUakCHhBknIP
-qxR17QnwovBc78MKYiC3wihmrkwvLo9FYyaW8O4x5otVm6o6+YI5HYg84gd1GuEP
-sTC8cTLSOv76oYnzQyzWcsR5pxVIBcDYLXIC48s9Fmq6ybgREOJJhcyWR2AFJS7v
-dVkz9UcZFu/abF8HyKZQth3LZjQl/GaD68W2MEH4RkRiqMEMVObqTFoo5q7Gt/5/
-O5aoLu7HaD7dAD0prypjq1/uSSotxdz70cbT0ZdWUoa2lOvUYFG3/B6bzAKb1B+P
-+UqPti4oOxfMxaYF49LTtcYDyeFIQpvLP+QX4P4NAZUJurgNceQJcHdC2E3hQqlg
-g9cXiUPS1N2nGLar1CQlh7XU4vwuImm9rWgs/3K1mKoGnOcqarihk3bOsPN/nOHg
-T7jYhkalMwIsJWE3KpLIrIF0aGOHM3a9BX9e1dUCbb2v/ypaqknsmHlHU5H2DjRa
-yaXG67Ljxay2oHA1u8hRadDytaIybrw/oDc5fHE2pgXfDBLkFqfF1stjo5VwP+YE
-o2A=
------END CERTIFICATE-----
diff --git a/misc/certs/ed524cf5.0 b/misc/certs/ed524cf5.0
deleted file mode 100644
index 4b8939cc..00000000
--- a/misc/certs/ed524cf5.0
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
-ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
-KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
-ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
-MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
-ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
-b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
-bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
-U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
-A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
-I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
-wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
-AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
-oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
-BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
-dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
-MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
-b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
-dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
-MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
-E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
-MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
-hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
-95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
-2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
------END CERTIFICATE-----
diff --git a/misc/certs/ed62f4e3.0 b/misc/certs/ed62f4e3.0
deleted file mode 100644
index c2e9d2bc..00000000
--- a/misc/certs/ed62f4e3.0
+++ /dev/null
@@ -1,19 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns
-YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
-MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
-aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe
-Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj
-IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx
-KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
-eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM
-HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw
-DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC
-AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji
-nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX
-rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn
-jBJ7xUS0rg==
------END CERTIFICATE-----
diff --git a/misc/certs/ee1365c0.0 b/misc/certs/ee1365c0.0
deleted file mode 100644
index 3938d872..00000000
--- a/misc/certs/ee1365c0.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4
-nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO
-8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV
-ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb
-PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
-6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr
-n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a
-qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4
-wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
-ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs
-pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4
-E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
------END CERTIFICATE-----
diff --git a/misc/certs/ee64a828.0 b/misc/certs/ee64a828.0
deleted file mode 100644
index 33c71ba9..00000000
--- a/misc/certs/ee64a828.0
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
-YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
-MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
-BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
-GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
-BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
-3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
-YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
-rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
-ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
-oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
-MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
-QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
-b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
-AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
-GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
-Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
-G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
-l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
-smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
------END CERTIFICATE-----
diff --git a/misc/certs/ee7cd6fb.0 b/misc/certs/ee7cd6fb.0
deleted file mode 100644
index b3962515..00000000
--- a/misc/certs/ee7cd6fb.0
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn
-MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
-ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg
-b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa
-MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB
-ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw
-IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B
-AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb
-unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d
-BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq
-7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3
-0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX
-roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG
-A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j
-aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p
-26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA
-BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud
-EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN
-BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
-aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB
-AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd
-p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi
-1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc
-XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0
-eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu
-tGWaIZDgqtCYvDi1czyL+Nw=
------END CERTIFICATE-----
diff --git a/misc/certs/ee90b008.0 b/misc/certs/ee90b008.0
deleted file mode 100644
index 3b1e6e82..00000000
--- a/misc/certs/ee90b008.0
+++ /dev/null
@@ -1,31 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEW
-MBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkgRzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1
-OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoG
-A1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRzIwggIiMA0G
-CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8Oo1XJ
-JZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsD
-vfOpL9HG4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnoo
-D/Uefyf3lLE3PbfHkffiAez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/
-Q0kGi4xDuFby2X8hQxfqp0iVAXV16iulQ5XqFYSdCI0mblWbq9zSOdIxHWDirMxW
-RST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbsO+wmETRIjfaAKxojAuuK
-HDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8HvKTlXcxN
-nw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM
-0D4LnMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/i
-UUjXuG+v+E5+M5iSFGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9
-Ha90OrInwMEePnWjFqmveiJdnxMaz6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHg
-TuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJKoZIhvcNAQEL
-BQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K
-2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfX
-UfEpY9Z1zRbkJ4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl
-6/2o1PXWT6RbdejF0mCy2wl+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK
-9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG/+gyRr61M3Z3qAFdlsHB1b6uJcDJ
-HgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTcnIhT76IxW1hPkWLI
-wpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/XldblhY
-XzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5l
-IxKVCCIcl85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoo
-hdVddLHRDiBYmxOlsGOm7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulr
-so8uBtjRkcfGEvRM/TAXw8HaOFvjqermobp573PYtlNXLfbQ4ddI
------END CERTIFICATE-----
diff --git a/misc/certs/eed8c118.0 b/misc/certs/eed8c118.0
deleted file mode 100644
index 546c95e3..00000000
--- a/misc/certs/eed8c118.0
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL
-MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
-BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT
-IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw
-MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy
-ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N
-T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR
-FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J
-cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW
-BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm
-fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv
-GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
------END CERTIFICATE-----
diff --git a/misc/certs/ef2f636c.0 b/misc/certs/ef2f636c.0
deleted file mode 100644
index 03cb8458..00000000
--- a/misc/certs/ef2f636c.0
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
-ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
-MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
-dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
-c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
-UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
-58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
-o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
-MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
-aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
-A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
-Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
-8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
------END CERTIFICATE-----
diff --git a/misc/certs/f060240e.0 b/misc/certs/f060240e.0
deleted file mode 100644
index 6d0133d3..00000000
--- a/misc/certs/f060240e.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw
-PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz
-cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9
-MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz
-IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ
-ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR
-VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL
-kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd
-EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas
-H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0
-HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud
-DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4
-QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu
-Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/
-AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8
-yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR
-FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA
-ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB
-kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
-l7+ijrRU
------END CERTIFICATE-----
diff --git a/misc/certs/f081611a.0 b/misc/certs/f081611a.0
deleted file mode 100644
index 42e8d1ee..00000000
--- a/misc/certs/f081611a.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
-MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
-YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
-MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
-ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
-MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
-ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
-PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
-wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
-EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
-avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
-YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
-sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
-/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
-IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
-ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
-OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
-TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
-HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
-dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
-ReYNnyicsbkqWletNw+vHX/bvZ8=
------END CERTIFICATE-----
diff --git a/misc/certs/f3377b1b.0 b/misc/certs/f3377b1b.0
deleted file mode 100644
index ad1424ac..00000000
--- a/misc/certs/f3377b1b.0
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY
-MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t
-dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5
-WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD
-VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8
-9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ
-DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9
-Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N
-QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ
-xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G
-A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T
-AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG
-kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr
-Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5
-Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU
-JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot
-RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw==
------END CERTIFICATE-----
diff --git a/misc/certs/f387163d.0 b/misc/certs/f387163d.0
deleted file mode 100644
index d552e65d..00000000
--- a/misc/certs/f387163d.0
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
-MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
-U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
-NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
-ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
-ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
-DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
-8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
-+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
-X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
-K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
-1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
-A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
-zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
-YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
-bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
-DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
-L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
-eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
-xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
-VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
-WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
------END CERTIFICATE-----
diff --git a/misc/certs/f39fc864.0 b/misc/certs/f39fc864.0
deleted file mode 100644
index 37400921..00000000
--- a/misc/certs/f39fc864.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
-FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz
-MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv
-cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz
-Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO
-0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao
-wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj
-7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS
-8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT
-BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
-/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg
-JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC
-NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3
-6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/
-3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm
-D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS
-CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
-3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
------END CERTIFICATE-----
diff --git a/misc/certs/f4996e82.0 b/misc/certs/f4996e82.0
deleted file mode 100644
index 3997ac24..00000000
--- a/misc/certs/f4996e82.0
+++ /dev/null
@@ -1,18 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy
-NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y
-LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+
-TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y
-TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0
-LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW
-I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw
-nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI
------END CERTIFICATE-----
diff --git a/misc/certs/f559733c.0 b/misc/certs/f559733c.0
deleted file mode 100644
index c0328d0c..00000000
--- a/misc/certs/f559733c.0
+++ /dev/null
@@ -1,26 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCB
-rjELMAkGA1UEBhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcp
-MRIwEAYDVQQHEwlTdHV0dGdhcnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fz
-c2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVTLVRSVVNUIEF1dGhlbnRpY2F0aW9u
-IGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0wNTA2MjIwMDAwMDBa
-Fw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFkZW4t
-V3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMg
-RGV1dHNjaGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJV
-U1QgQXV0aGVudGljYXRpb24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBO
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1
-toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob4QSwI7+Vio5bG0F/WsPo
-TUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXLg3KSwlOy
-ggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1
-XgqfeN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteF
-hy+S8dF2g08LOlk3KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm
-7QIDAQABo4GSMIGPMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEG
-MCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJvbmxpbmUxLTIwNDgtNTAdBgNV
-HQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAUD8oeXHngovMp
-ttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD
-pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFo
-LtU96G7m1R08P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersF
-iXOMy6ZNwPv2AtawB6MDwidAnwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0y
-h9WUUpY6RsZxlj33mA6ykaqP2vROJAA5VeitF7nTNCtKqUDMFypVZUF0Qn71wK/I
-k63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8bHz2eBIPdltkdOpQ=
------END CERTIFICATE-----
diff --git a/misc/certs/f58a60fe.0 b/misc/certs/f58a60fe.0
deleted file mode 100644
index 8d80b192..00000000
--- a/misc/certs/f58a60fe.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAw
-PDEbMBkGA1UEAxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWdu
-MQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwx
-GzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBDQTEQMA4GA1UEChMHQ29tU2lnbjEL
-MAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGtWhf
-HZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs49oh
-gHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sW
-v+bznkqH7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ue
-Mv5WJDmyVIRD9YTC2LxBkMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr
-9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d19guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt
-6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUwAwEB/zBEBgNVHR8EPTA7
-MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29tU2lnblNl
-Y3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58
-ADsAj8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkq
-hkiG9w0BAQUFAAOCAQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7p
-iL1DRYHjZiM/EoZNGeQFsOY3wo3aBijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtC
-dsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtpFhpFfTMDZflScZAmlaxMDPWL
-kz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP51qJThRv4zdL
-hfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
-OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
------END CERTIFICATE-----
diff --git a/misc/certs/f61bff45.0 b/misc/certs/f61bff45.0
deleted file mode 100644
index 01bb0be0..00000000
--- a/misc/certs/f61bff45.0
+++ /dev/null
@@ -1,43 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAw
-cjELMAkGA1UEBhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNy
-b3NlYyBMdGQuMRQwEgYDVQQLEwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9z
-ZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0MDYxMjI4NDRaFw0xNzA0MDYxMjI4
-NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEWMBQGA1UEChMN
-TWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMTGU1p
-Y3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2u
-uO/TEdyB5s87lozWbxXGd36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+
-LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/NoqdNAoI/gqyFxuEPkEeZlApxcpMqyabA
-vjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjcQR/Ji3HWVBTji1R4P770
-Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJPqW+jqpx
-62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcB
-AQRbMFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3Aw
-LQYIKwYBBQUHMAKGIWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAP
-BgNVHRMBAf8EBTADAQH/MIIBcwYDVR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIB
-AQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3LmUtc3ppZ25vLmh1L1NaU1ov
-MIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0AdAB2AOEAbgB5
-ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
-AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABT
-AHoAbwBsAGcA4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABh
-ACAAcwB6AGUAcgBpAG4AdAAgAGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABo
-AHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMAegBpAGcAbgBvAC4AaAB1AC8AUwBa
-AFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6Ly93d3cuZS1zemln
-bm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NOPU1p
-Y3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxP
-PU1pY3Jvc2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZv
-Y2F0aW9uTGlzdDtiaW5hcnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuB
-EGluZm9AZS1zemlnbm8uaHWkdzB1MSMwIQYDVQQDDBpNaWNyb3NlYyBlLVN6aWdu
-w7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhTWjEWMBQGA1UEChMNTWlj
-cm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhVMIGsBgNV
-HSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJI
-VTERMA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDAS
-BgNVBAsTC2UtU3ppZ25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBS
-b290IENBghEAzLjnv04pGv2i3GalHCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS
-8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMTnGZjWS7KXHAM/IO8VbH0jgds
-ZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FEaGAHQzAxQmHl
-7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
-86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfR
-hUZLphK3dehKyVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/
-MPMMNz7UwiiAc7EBt51alhQBS6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
------END CERTIFICATE-----
diff --git a/misc/certs/f80cc7f6.0 b/misc/certs/f80cc7f6.0
deleted file mode 100644
index a684013b..00000000
--- a/misc/certs/f80cc7f6.0
+++ /dev/null
@@ -1,34 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNV
-BAMML0VCRyBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMTcwNQYDVQQKDC5FQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXpt
-ZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAeFw0wNjA4MTcwMDIxMDlaFw0xNjA4
-MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25payBTZXJ0aWZpa2Eg
-SGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2ltIFRl
-a25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIi
-MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h
-4fuXd7hxlugTlkaDT7byX3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAk
-tiHq6yOU/im/+4mRDGSaBUorzAzu8T2bgmmkTPiab+ci2hC6X5L8GCcKqKpE+i4s
-tPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfreYteIAbTdgtsApWjluTL
-dlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZTqNGFav4
-c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8Um
-TDGyY5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z
-+kI2sSXFCjEmN1ZnuqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0O
-Lna9XvNRiYuoP1Vzv9s6xiQFlpJIqkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMW
-OeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vmExH8nYQKE3vwO9D8owrXieqW
-fo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0Nokb+Clsi7n2
-l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
-/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgw
-FoAU587GT/wWZ5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+
-8ygjdsZs93/mQJ7ANtyVDR2tFcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI
-6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgmzJNSroIBk5DKd8pNSe/iWtkqvTDO
-TLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64kXPBfrAowzIpAoHME
-wfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqTbCmY
-Iai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJn
-xk1Gj7sURT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4Q
-DgZxGhBM/nV+/x5XOULK1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9q
-Kd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11t
-hie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQY9iJSrSq3RZj9W6+YKH4
-7ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9AahH3eU7
-QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
------END CERTIFICATE-----
diff --git a/misc/certs/f90208f7.0 b/misc/certs/f90208f7.0
deleted file mode 100644
index b3962515..00000000
--- a/misc/certs/f90208f7.0
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn
-MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
-ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg
-b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa
-MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB
-ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw
-IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B
-AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb
-unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d
-BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq
-7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3
-0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX
-roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG
-A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j
-aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p
-26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA
-BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud
-EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN
-BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
-aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB
-AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd
-p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi
-1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc
-XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0
-eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu
-tGWaIZDgqtCYvDi1czyL+Nw=
------END CERTIFICATE-----
diff --git a/misc/certs/fac084d7.0 b/misc/certs/fac084d7.0
deleted file mode 100644
index c28e86d7..00000000
--- a/misc/certs/fac084d7.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEc
-MBoGA1UEChMTSmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRp
-b25DQTAeFw0wNzEyMTIxNTAwMDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYT
-AkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zlcm5tZW50MRYwFAYDVQQLEw1BcHBs
-aWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp23gdE6H
-j6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4fl+K
-f5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55
-IrmTwcrNwVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cw
-FO5cjFW6WY2H/CPek9AEjP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDiht
-QWEjdnjDuGWk81quzMKq2edY3rZ+nYVunyoKb58DKTCXKB28t89UKU5RMfkntigm
-/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRUWssmP3HMlEYNllPqa0jQ
-k/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNVBAYTAkpQ
-MRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOC
-seODvOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
-ggEBADlqRHZ3ODrso2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJ
-hyzjVOGjprIIC8CFqMjSnHH2HZ9g/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+
-eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYDio+nEhEMy/0/ecGc/WLuo89U
-DNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmWdupwX3kSa+Sj
-B1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
-rosot4LKGAfmt1t06SAZf7IbiVQ=
------END CERTIFICATE-----
diff --git a/misc/certs/facacbc6.0 b/misc/certs/facacbc6.0
deleted file mode 100644
index 707ff085..00000000
--- a/misc/certs/facacbc6.0
+++ /dev/null
@@ -1,28 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
-yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
-ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
-U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
-ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
-ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
-U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
-nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
-t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
-SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
-BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
-rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
-NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
-BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
-BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
-aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
-MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
-p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
-5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
-WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
-4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
-hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
------END CERTIFICATE-----
diff --git a/misc/certs/fb126c6d.0 b/misc/certs/fb126c6d.0
deleted file mode 100644
index f001356e..00000000
--- a/misc/certs/fb126c6d.0
+++ /dev/null
@@ -1,37 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJF
-UzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJ
-R1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcN
-MDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3WjBoMQswCQYDVQQGEwJFUzEfMB0G
-A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScw
-JQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+
-WmmmO3I2F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKj
-SgbwJ/BXufjpTjJ3Cj9BZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGl
-u6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQD0EbtFpKd71ng+CT516nDOeB0/RSrFOy
-A8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXteJajCq+TA81yc477OMUxk
-Hl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMBAAGjggM7
-MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBr
-aS5ndmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIIC
-IwYKKwYBBAG/VQIBADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8A
-cgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIA
-YQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIAYQBsAGkAdABhAHQAIABWAGEA
-bABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQByAGEAYwBpAPMA
-bgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
-aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMA
-aQBvAG4AYQBtAGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQA
-ZQAgAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEA
-YwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBuAHQAcgBhACAAZQBuACAAbABhACAA
-ZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAAOgAvAC8AdwB3AHcA
-LgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0dHA6
-Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+y
-eAT8MIGVBgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQsw
-CQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0G
-A1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVu
-Y2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRhTvW1yEICKrNcda3Fbcrn
-lD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdzCkj+IHLt
-b8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg
-9J63NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XF
-ducTZnV+ZfsBn5OHiJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmC
-IoaZM3Fa6hlXPZHNqcCjbgcTpsnt+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
------END CERTIFICATE-----
diff --git a/misc/certs/fcac10e3.0 b/misc/certs/fcac10e3.0
deleted file mode 100644
index 269961b5..00000000
--- a/misc/certs/fcac10e3.0
+++ /dev/null
@@ -1,29 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcN
-AQkBFglwa2lAc2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZp
-dHNlZXJpbWlza2Vza3VzMRAwDgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMw
-MVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMQsw
-CQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEQ
-MA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOB
-SvZiF3tfTQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkz
-ABpTpyHhOEvWgxutr2TC+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvH
-LCu3GFH+4Hv2qEivbDtPL+/40UceJlfwUR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMP
-PbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDaTpxt4brNj3pssAki14sL
-2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQFMAMBAf8w
-ggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwIC
-MIHDHoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDk
-AGwAagBhAHMAdABhAHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0
-AHMAZQBlAHIAaQBtAGkAcwBrAGUAcwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABz
-AGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABrAGkAbgBuAGkAdABhAG0AaQBz
-AGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nwcy8wKwYDVR0f
-BCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
-FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcY
-P2/v6X2+MA4GA1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOi
-CfP+JmeaUOTDBS8rNXiRTHyoERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+g
-kcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyLabVAyJRld/JXIWY7zoVAtjNjGr95
-HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678IIbsSt4beDI3poHS
-na9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkhMp6q
-qIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0Z
-TbvGRNs2yyqcjg==
------END CERTIFICATE-----
diff --git a/misc/certs/fde84897.0 b/misc/certs/fde84897.0
deleted file mode 100644
index 220d95f9..00000000
--- a/misc/certs/fde84897.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV
-BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X
-DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ
-BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4
-QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny
-gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw
-zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q
-130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2
-JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw
-DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw
-ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT
-AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj
-AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG
-9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h
-bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc
-fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu
-HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w
-t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
-WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
------END CERTIFICATE-----
diff --git a/misc/certs/ff588423.0 b/misc/certs/ff588423.0
deleted file mode 100644
index 35fb5229..00000000
--- a/misc/certs/ff588423.0
+++ /dev/null
@@ -1,22 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0
-MRMwEQYDVQQDEwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQG
-EwJJTDAeFw0wNDAzMjQxMTMyMThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMT
-CkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNpZ24xCzAJBgNVBAYTAklMMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49qROR+WCf4C9DklBKK
-8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTyP2Q2
-98CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb
-2CEJKHxNGGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxC
-ejVb7Us6eva1jsz/D3zkYDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7Kpi
-Xd3DTKaCQeQzC6zJMw9kglcq/QytNuEMrkvF7zuZ2SOzW120V+x0cAwqTwIDAQAB
-o4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Zl
-ZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0PAQH/BAQD
-AgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRL
-AZs+VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWd
-foPPbrxHbvUanlR2QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0M
-cXS6hMTXcpuEfDhOZAYnKuGntewImbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq
-8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb/627HOkthIDYIb6FUtnUdLlp
-hbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VGzT2ouvDzuFYk
-Res3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U
-AGegcQCCSA==
------END CERTIFICATE-----
diff --git a/misc/certs/ff783690.0 b/misc/certs/ff783690.0
deleted file mode 100644
index 46386b73..00000000
--- a/misc/certs/ff783690.0
+++ /dev/null
@@ -1,26 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
-lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
-SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
-A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
-MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
-d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
-cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
-0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
-M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
-MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
-oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
-DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
-oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
-dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
-bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
-BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
-//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
-CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
-CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
-3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
-KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
------END CERTIFICATE-----
diff --git a/misc/certs/gandi-ca.crt b/misc/certs/gandi-ca.crt
deleted file mode 100644
index 7d83bc84..00000000
--- a/misc/certs/gandi-ca.crt
+++ /dev/null
@@ -1,37 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGYDCCBEigAwIBAgIJAMrXjAsE+ETAMA0GCSqGSIb3DQEBBAUAMGgxCzAJBgNV
-BAYTAkZSMQ4wDAYDVQQKEwVHQU5ESTErMCkGA1UEAxMiR2FuZGkgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgdjEuMTEcMBoGCSqGSIb3DQEJARYNbm9jQGdhbmRpLm5l
-dDAeFw0wNjEwMTMxMzUxMTFaFw0xNjEwMTAxMzUxMTFaMGgxCzAJBgNVBAYTAkZS
-MQ4wDAYDVQQKEwVHQU5ESTErMCkGA1UEAxMiR2FuZGkgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkgdjEuMTEcMBoGCSqGSIb3DQEJARYNbm9jQGdhbmRpLm5ldDCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALKenXL3I12vH0p9w9gVtUAU/H7E
-Lgt3uDuTUIRJOuienetnwJR/e3hXpjrA/Zhr4ukdmSvnydb/InTjb9LctqSJwJbl
-wuHGi3DUtLfAZHNzJpKP/6ZKKYITRLiCBVKwiVD/DTT8gw5uC/wZCSO6t5VzAcZ1
-rjBU5XxaZL6HIpyHYx7zmfcweUZXrwa7Ki94/vTezeHWtb9wxe+EKE0AYKt0wQOA
-G4Z1mEkewXWSf9eqUBm3HHlB1FmippKVwp8GPNadB2mtSJFB9dDBCsd4GCfoDG/i
-ejmf4bSNBDmT7mLUqBrQk0HYrWFq6byG9/3pTBmT+NsAZGqpokXhj7jCznKUNxZe
-1NeR2cGEuGnxPcwRc+SUtqYTlNDbSZ0KrhJfidLcX4c/2aaTyNUsbJkAHHTD7F+L
-Qqra1vhmHYA06nOF6i1jgksacJlrGXSq68NXLWtXFhTY2Xd38ZBnsbVEu0M2BsmD
-kuW29r5fODtthUrHmH/s3zg20NGUCpNVTrwrK70UR0qAfewJ/+uInr/7YLq9kQTO
-OuJgCDdqmb8nTuKPH7dGvsAB/XkxO0a1kbzEEMRLuoOxqaz27+3syyfn9974sfIU
-HKMc+k1gQF3/9yrr3MmKnJMcPXuJ5DTi6WXRwsT/fqSSxxVikiL2LkG+Sx7XsSIy
-AKHyRm3a0RdvXDdrAgMBAAGjggELMIIBBzAdBgNVHQ4EFgQU9hfW5YjchtRUaE00
-1S859peLDzkwgZoGA1UdIwSBkjCBj4AU9hfW5YjchtRUaE001S859peLDzmhbKRq
-MGgxCzAJBgNVBAYTAkZSMQ4wDAYDVQQKEwVHQU5ESTErMCkGA1UEAxMiR2FuZGkg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgdjEuMTEcMBoGCSqGSIb3DQEJARYNbm9j
-QGdhbmRpLm5ldIIJAMrXjAsE+ETAMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQD
-AgEGMBEGCWCGSAGG+EIBAQQEAwIBBjAYBgNVHREEETAPgQ1ub2NAZ2FuZGkubmV0
-MA0GCSqGSIb3DQEBBAUAA4ICAQARq1aB1NhNyCCC5vOWWfoxGQWdPi9YBKUfD0CY
-HTukJI5BIm9RO9NPmVL/0kKE9CEVcVfWotD1tHNLBGsFlKlG8adOg8S24fw+tZa3
-C3HU0fNcSg+6lQJQetrQxKjvORRsTIRI9ikV0FAmlt/OZXfkYU/nh7dUsDroDfps
-608KRpDfcCCz1r/k4G/iv26mM+tLFvRAsNvq+kp+gIApYVQHu0eK+MCmUmq1t2kH
-MB6+zlSN+lOCErVHEAuUAbndbnynadox6HeUk7pwODRukMzzqb2Jmp/Q5l+I/8Oz
-vfeDQK35KAiZaOYr7SG1dB4ys0mV7KFItjGGkGM2tTS/+4tLBcfSHN3rd7mvdAbQ
-4912VpHDo0wzNmieeF5OlIyY8mSq/NMtZzylaU2uJ3wO/V2bvQEugggO0HzKMwLG
-a7e68g045lClPizJ82Q4Z7F2Sc0znEnvs+u7UeDk+UARRs/SUUlOUI93mQdHlek9
-/SEDuf7x0ZhDhVfQEhAGMuLQESS/+BevxlnRraHCrRre64qLnlehvjlHzS6fyV9u
-b2X4PoCxX6yUPOHXHsmjibrmra8H+q063zXYhJE4dWJM8E2Zqjn1nS143WF2j3LS
-StdCCa7zMsGb8oH3LvVfoSzl2lAOkUsjblz9P9SYmyLfmI1xT1nu/sfgIbEabx+b
-5vReDA==
------END CERTIFICATE-----
diff --git a/misc/certs/spi-ca-2003.pem b/misc/certs/spi-ca-2003.pem
deleted file mode 100644
index 5a324a35..00000000
--- a/misc/certs/spi-ca-2003.pem
+++ /dev/null
@@ -1,24 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEFTCCA36gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBvjELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UE
-ChMfU29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9z
-dG1hc3RlcjEgMB4GA1UEAxMXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJTAjBgkq
-hkiG9w0BCQEWFmhvc3RtYXN0ZXJAc3BpLWluYy5vcmcwHhcNMDMwMTE1MTYyOTE3
-WhcNMDcwMTE0MTYyOTE3WjCBvjELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0luZGlh
-bmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMfU29mdHdhcmUgaW4g
-dGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1hc3RlcjEgMB4GA1UE
-AxMXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJTAjBgkqhkiG9w0BCQEWFmhvc3Rt
-YXN0ZXJAc3BpLWluYy5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAPB6
-rdoiLR3RodtM22LMcfwfqb5OrJNl7fwmvskgF7yP6sdD2bOfDIXhg9852jhY8/kL
-VOFe1ELAL2OyN4RAxk0rliZQVgeTgqvgkOVIBbNwgnjN6mqtuWzFiPL+NXQExq40
-I3whM+4lEiwSHaV+MYxWanMdhc+kImT50LKfkxcdAgMBAAGjggEfMIIBGzAdBgNV
-HQ4EFgQUB63oQR1/vda/G4F6P4xLiN4E0vowgesGA1UdIwSB4zCB4IAUB63oQR1/
-vda/G4F6P4xLiN4E0vqhgcSkgcEwgb4xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdJ
-bmRpYW5hMRUwEwYDVQQHEwxJbmRpYW5hcG9saXMxKDAmBgNVBAoTH1NvZnR3YXJl
-IGluIHRoZSBQdWJsaWMgSW50ZXJlc3QxEzARBgNVBAsTCmhvc3RtYXN0ZXIxIDAe
-BgNVBAMTF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MSUwIwYJKoZIhvcNAQkBFhZo
-b3N0bWFzdGVyQHNwaS1pbmMub3JnggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcN
-AQEEBQADgYEAm/Abn8c2y1nO3fgpAIslxvi9iNBZDhQtJ0VQZY6wgSfANyDOR4DW
-iexO/AlorB49KnkFS7TjCAoLOZhcg5FaNiKnlstMI5krQmau1Qnb/vGSNsE/UGms
-1ts+QYPUs0KmGEAFUri2XzLy+aQo9Kw74VBvqnxvaaMeY5yMcKNOieY=
------END CERTIFICATE-----
diff --git a/misc/certs/spi-cacert-2008.pem b/misc/certs/spi-cacert-2008.pem
deleted file mode 100644
index b735d1c3..00000000
--- a/misc/certs/spi-cacert-2008.pem
+++ /dev/null
@@ -1,46 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIIDjCCBfagAwIBAgIJAOiOtsn4KhQoMA0GCSqGSIb3DQEBBQUAMIG8MQswCQYD
-VQQGEwJVUzEQMA4GA1UECBMHSW5kaWFuYTEVMBMGA1UEBxMMSW5kaWFuYXBvbGlz
-MSgwJgYDVQQKEx9Tb2Z0d2FyZSBpbiB0aGUgUHVibGljIEludGVyZXN0MRMwEQYD
-VQQLEwpob3N0bWFzdGVyMR4wHAYDVQQDExVDZXJ0aWZpY2F0ZSBBdXRob3JpdHkx
-JTAjBgkqhkiG9w0BCQEWFmhvc3RtYXN0ZXJAc3BpLWluYy5vcmcwHhcNMDgwNTEz
-MDgwNzU2WhcNMTgwNTExMDgwNzU2WjCBvDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMfU29mdHdh
-cmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1hc3RlcjEe
-MBwGA1UEAxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSUwIwYJKoZIhvcNAQkBFhZo
-b3N0bWFzdGVyQHNwaS1pbmMub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEA3DbmR0LCxFF1KYdAw9iOIQbSGE7r7yC9kDyFEBOMKVuUY/b0LfEGQpG5
-GcRCaQi/izZF6igFM0lIoCdDkzWKQdh4s/Dvs24t3dHLfer0dSbTPpA67tfnLAS1
-fOH1fMVO73e9XKKTM5LOfYFIz2u1IiwIg/3T1c87Lf21SZBb9q1NE8re06adU1Fx
-Y0b4ShZcmO4tbZoWoXaQ4mBDmdaJ1mwuepiyCwMs43pPx93jzONKao15Uvr0wa8u
-jyoIyxspgpJyQ7zOiKmqp4pRQ1WFmjcDeJPI8L20QcgHQprLNZd6ioFl3h1UCAHx
-ZFy3FxpRvB7DWYd2GBaY7r/2Z4GLBjXFS21ZGcfSxki+bhQog0oQnBv1b7ypjvVp
-/rLBVcznFMn5WxRTUQfqzj3kTygfPGEJ1zPSbqdu1McTCW9rXRTunYkbpWry9vjQ
-co7qch8vNGopCsUK7BxAhRL3pqXTT63AhYxMfHMgzFMY8bJYTAH1v+pk1Vw5xc5s
-zFNaVrpBDyXfa1C2x4qgvQLCxTtVpbJkIoRRKFauMe5e+wsWTUYFkYBE7axt8Feo
-+uthSKDLG7Mfjs3FIXcDhB78rKNDCGOM7fkn77SwXWfWT+3Qiz5dW8mRvZYChD3F
-TbxCP3T9PF2sXEg2XocxLxhsxGjuoYvJWdAY4wCAs1QnLpnwFVMCAwEAAaOCAg8w
-ggILMB0GA1UdDgQWBBQ0cdE41xU2g0dr1zdkQjuOjVKdqzCB8QYDVR0jBIHpMIHm
-gBQ0cdE41xU2g0dr1zdkQjuOjVKdq6GBwqSBvzCBvDELMAkGA1UEBhMCVVMxEDAO
-BgNVBAgTB0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMf
-U29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1h
-c3RlcjEeMBwGA1UEAxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSUwIwYJKoZIhvcN
-AQkBFhZob3N0bWFzdGVyQHNwaS1pbmMub3JnggkA6I62yfgqFCgwDwYDVR0TAQH/
-BAUwAwEB/zARBglghkgBhvhCAQEEBAMCAAcwCQYDVR0SBAIwADAuBglghkgBhvhC
-AQ0EIRYfU29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDAwBglghkgBhvhC
-AQQEIxYhaHR0cHM6Ly9jYS5zcGktaW5jLm9yZy9jYS1jcmwucGVtMDIGCWCGSAGG
-+EIBAwQlFiNodHRwczovL2NhLnNwaS1pbmMub3JnL2NlcnQtY3JsLnBlbTAhBgNV
-HREEGjAYgRZob3N0bWFzdGVyQHNwaS1pbmMub3JnMA4GA1UdDwEB/wQEAwIBBjAN
-BgkqhkiG9w0BAQUFAAOCAgEAtM294LnqsgMrfjLp3nI/yUuCXp3ir1UJogxU6M8Y
-PCggHam7AwIvUjki+RfPrWeQswN/2BXja367m1YBrzXU2rnHZxeb1NUON7MgQS4M
-AcRb+WU+wmHo0vBqlXDDxm/VNaSsWXLhid+hoJ0kvSl56WEq2dMeyUakCHhBknIP
-qxR17QnwovBc78MKYiC3wihmrkwvLo9FYyaW8O4x5otVm6o6+YI5HYg84gd1GuEP
-sTC8cTLSOv76oYnzQyzWcsR5pxVIBcDYLXIC48s9Fmq6ybgREOJJhcyWR2AFJS7v
-dVkz9UcZFu/abF8HyKZQth3LZjQl/GaD68W2MEH4RkRiqMEMVObqTFoo5q7Gt/5/
-O5aoLu7HaD7dAD0prypjq1/uSSotxdz70cbT0ZdWUoa2lOvUYFG3/B6bzAKb1B+P
-+UqPti4oOxfMxaYF49LTtcYDyeFIQpvLP+QX4P4NAZUJurgNceQJcHdC2E3hQqlg
-g9cXiUPS1N2nGLar1CQlh7XU4vwuImm9rWgs/3K1mKoGnOcqarihk3bOsPN/nOHg
-T7jYhkalMwIsJWE3KpLIrIF0aGOHM3a9BX9e1dUCbb2v/ypaqknsmHlHU5H2DjRa
-yaXG67Ljxay2oHA1u8hRadDytaIybrw/oDc5fHE2pgXfDBLkFqfF1stjo5VwP+YE
-o2A=
------END CERTIFICATE-----
diff --git a/misc/certs/thawte_Primary_Root_CA.pem b/misc/certs/thawte_Primary_Root_CA.pem
deleted file mode 100644
index 998460f1..00000000
--- a/misc/certs/thawte_Primary_Root_CA.pem
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
-qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
-Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
-MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
-BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
-NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
-LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
-A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
-W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
-3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
-6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
-Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
-NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
-MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
-r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
-DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
-YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
-xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
-/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
-LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
-jVaMaA==
------END CERTIFICATE-----
diff --git a/misc/certs/thawte_Primary_Root_CA_-_G2.pem b/misc/certs/thawte_Primary_Root_CA_-_G2.pem
deleted file mode 100644
index 447ee3d8..00000000
--- a/misc/certs/thawte_Primary_Root_CA_-_G2.pem
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL
-MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp
-IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi
-BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw
-MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
-d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig
-YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v
-dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/
-BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6
-papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K
-DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3
-KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox
-XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
------END CERTIFICATE-----
diff --git a/misc/certs/thawte_Primary_Root_CA_-_G3.pem b/misc/certs/thawte_Primary_Root_CA_-_G3.pem
deleted file mode 100644
index acfed9d2..00000000
--- a/misc/certs/thawte_Primary_Root_CA_-_G3.pem
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB
-rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
-Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
-MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV
-BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa
-Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl
-LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u
-MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl
-ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm
-gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8
-YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf
-b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9
-9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S
-zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk
-OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV
-HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA
-2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW
-oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
-t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c
-KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM
-m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu
-MdRAGmI0Nj81Aa6sY6A=
------END CERTIFICATE-----
diff --git a/package.json b/package.json
deleted file mode 100644
index 20f530ba..00000000
--- a/package.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "jappix",
- "description": "Jappix, a full-featured XMPP web-client (Jappix Desktop, Jappix Mobile & Jappix Mini).",
- "version": "1.1.7-dev",
- "homepage": "https://jappix.org/",
-
- "repository": {
- "type": "git",
- "url": "https://github.com/jappix/jappix.git"
- },
-
- "author": {
- "name": "Valérian Saliou",
- "url": "https://valeriansaliou.name/"
- },
-
- "main": "Gruntfile.js",
-
- "engines": {
- "node": ">=0.8.0"
- },
-
- "scripts": {
- "test": "npm install; grunt test"
- },
-
- "devDependencies": {
- "grunt": "0.4.5",
- "grunt-contrib-csslint": "0.2.0",
- "grunt-contrib-jshint": "0.10.0",
- "grunt-phplint": "0.0.5"
- }
-}
diff --git a/server/analytics.php b/server/analytics.php
deleted file mode 100644
index 74045f35..00000000
--- a/server/analytics.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the Jappix analytics tracking code
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-if((ANALYTICS_TRACK == 'on') && ANALYTICS_URL && ANALYTICS_ID && is_numeric(ANALYTICS_ID)) { ?>
- <!-- BEGIN ANALYTICS -->
- <script type="text/javascript">
- document.write(unescape("%3Cscript src='<?php echo ANALYTICS_URL; ?>piwik.js' type='text/javascript'%3E%3C/script%3E"));
- </script>
-
- <script type="text/javascript">
- try {
- Piwik.getTracker("<?php echo ANALYTICS_URL; ?>piwik.php", <?php echo ANALYTICS_ID; ?>).trackPageView();
- } catch(err) {}
- </script>
- <!-- END ANALYTICS -->
-<?php } ?>
diff --git a/server/avatar-upload.php b/server/avatar-upload.php
deleted file mode 100644
index fa6113a3..00000000
--- a/server/avatar-upload.php
+++ /dev/null
@@ -1,107 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the avatar upload PHP script for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// PHP base
-define('JAPPIX_BASE', '..');
-
-// Get the needed files
-require_once('./functions.php');
-require_once('./read-main.php');
-require_once('./read-hosts.php');
-
-// Prepare application
-enableErrorSink();
-hideErrors();
-compressThis();
-
-// Not allowed for a special node
-if(isStatic() || isUpload()) {
- exit;
-}
-
-// Initialize response vars
-$response_type = null;
-$response_binval = null;
-$response_error = null;
-$response_id = '0';
-
-// Set a special XML header
-header('Content-Type: text/xml; charset=utf-8');
-
-// No file uploaded?
-if((!isset($_FILES['file']) || empty($_FILES['file'])) || (!isset($_POST['id']) || empty($_POST['id']))) {
- $response_error = 'bad-request';
- $response_id = '0';
-} else {
- // Get the POST vars
- $response_id = $_POST['id'];
- $tmp_filename = $_FILES['file']['tmp_name'];
- $old_filename = $_FILES['file']['name'];
-
- // Security sanitization
- if(isAllowedExt($old_filename)) {
- // Get the file extension
- $ext = getFileExt($old_filename);
-
- // Hash it!
- $filename = md5($old_filename.time()).'.'.$ext;
-
- // Define some vars
- $path = JAPPIX_BASE.'/tmp/avatar/'.$filename;
-
- // Define MIME type
- if($ext == 'jpg') {
- $ext = 'jpeg';
- }
-
- $response_type = 'image/'.$ext;
-
- if(!preg_match('/^(jpeg|png|gif)$/i', $ext)) {
- // Unsupported file extension
- $response_error = 'forbidden-type';
- } else if(!is_uploaded_file($tmp_filename) || !move_uploaded_file($tmp_filename, $path)) {
- // File upload error
- $response_error = 'move-error';
- } else if(!function_exists('gd_info') || resizeImage($path, $ext, 96, 96, 'square')) {
- // Resize the image
- try {
- // Encode the file
- $response_binval = base64_encode(file_get_contents($path));
- } catch(Exception $e) {
- $response_error = 'server-error';
- }
- }
-
- // Remove the file
- unlink($path);
- }
-}
-
-// Exit with response
-if($response_type && $response_binval && !$response_error) {
- exit(
- '<jappix xmlns=\'jappix:file:post\' id=\''.$response_id.'\'>'.
- ' <type>'.$response_type.'</type>'.
- ' <binval>'.$response_binval.'</binval>'.
- '</jappix>'
- );
-} else {
- exit(
- '<jappix xmlns=\'jappix:file:post\' id=\''.$response_id.'\'>'.
- ' <error>'.($response_error || 'unexpected-error').'</error>'.
- '</jappix>'
- );
-}
-
-?>
diff --git a/server/bosh.php b/server/bosh.php
deleted file mode 100644
index ac8ccb0d..00000000
--- a/server/bosh.php
+++ /dev/null
@@ -1,171 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the PHP BOSH proxy
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// PHP base
-define('JAPPIX_BASE', '..');
-
-// Get the configuration
-require_once('./functions.php');
-require_once('./read-main.php');
-require_once('./read-hosts.php');
-
-// Prepare application
-enableErrorSink();
-hideErrors();
-compressThis();
-
-// Not allowed?
-if(!BOSHProxy()) {
- header('Status: 403 Forbidden', true, 403);
- exit('HTTP/1.1 403 Forbidden');
-}
-
-// OPTIONS method?
-if($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
- // CORS headers
- header('Access-Control-Allow-Origin: *');
- header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
- header('Access-Control-Allow-Headers: Content-Type');
- header('Access-Control-Max-Age: 31536000');
-
- exit;
-}
-
-// Read POST content
-$data = file_get_contents('php://input');
-
-// POST method?
-if($data) {
- // CORS headers
- header('Access-Control-Allow-Origin: *');
- header('Access-Control-Allow-Headers: Content-Type');
-
- $method = 'POST';
-}
-
-// GET method?
-else if(isset($_GET['data']) && $_GET['data'] && isset($_GET['callback']) && $_GET['callback']) {
- $method = 'GET';
- $data = $_GET['data'];
- $callback = $_GET['callback'];
-}
-
-// Invalid method?
-else {
- header('Status: 400 Bad Request', true, 400);
- exit('HTTP/1.1 400 Bad Request');
-}
-
-// HTTP headers
-$headers = array('User-Agent: Jappix (BOSH PHP Proxy)', 'Connection: close', 'Content-Type: text/xml; charset=utf-8', 'Content-Length: '.strlen($data));
-
-// CURL is better if available
-if(function_exists('curl_init')) {
- $use_curl = true;
-} else {
- $use_curl = false;
-}
-
-// CURL stream functions
-if($use_curl) {
- // Initialize CURL
- $connection = curl_init(HOST_BOSH);
-
- // Set the CURL settings
- curl_setopt($connection, CURLOPT_HEADER, 0);
- curl_setopt($connection, CURLOPT_POST, 1);
- curl_setopt($connection, CURLOPT_POSTFIELDS, $data);
- curl_setopt($connection, CURLOPT_FOLLOWLOCATION, true);
- curl_setopt($connection, CURLOPT_HTTPHEADER, $headers);
- curl_setopt($connection, CURLOPT_VERBOSE, 0);
- curl_setopt($connection, CURLOPT_CONNECTTIMEOUT, 30);
- curl_setopt($connection, CURLOPT_TIMEOUT, 30);
- curl_setopt($connection, CURLOPT_SSL_VERIFYHOST, 0);
- curl_setopt($connection, CURLOPT_SSL_VERIFYPEER, 0);
- curl_setopt($connection, CURLOPT_RETURNTRANSFER, 1);
-
- // Get the CURL output
- $output = curl_exec($connection);
-}
-
-// Built-in stream functions
-else {
- // HTTP parameters
- $parameters = array('http' => array(
- 'method' => 'POST',
- 'content' => $data
- )
- );
-
- $parameters['http']['header'] = $headers;
-
- // Change default timeout
- ini_set('default_socket_timeout', 120);
-
- // Create the connection
- $stream = @stream_context_create($parameters);
- $connection = @fopen(HOST_BOSH, 'rb', false, $stream);
-
- // Failed to connect!
- if($connection == false) {
- header('Status: 502 Proxy Error', true, 502);
- exit('HTTP/1.1 502 Proxy Error');
- }
-
- // Allow stream blocking to handle incoming BOSH data
- @stream_set_blocking($connection, true);
-
- // Get the output content
- $output = @stream_get_contents($connection);
-}
-
-// Cache headers
-header('Cache-Control: no-cache, must-revalidate');
-header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
-
-// POST output
-if($method == 'POST') {
- // XML header
- header('Content-Type: text/xml; charset=utf-8');
-
- if(!$output) {
- echo('<body xmlns=\'http://jabber.org/protocol/httpbind\' type=\'terminate\'/>');
- } else {
- echo($output);
- }
-}
-
-// GET output
-if($method == 'GET') {
- // JSON header
- header('Content-type: application/json');
-
- // Encode output to JSON
- $json_output = json_encode($output);
-
- if(($output == false) || ($output == '') || ($json_output == 'null')) {
- echo($callback.'({"reply":"<body xmlns=\'http:\/\/jabber.org\/protocol\/httpbind\' type=\'terminate\'\/>"});');
- } else {
- echo($callback.'({"reply":'.$json_output.'});');
- }
-}
-
-// Close the connection
-if($use_curl) {
- curl_close($connection);
-} else {
- @fclose($connection);
-}
-
-?>
diff --git a/server/captcha.php b/server/captcha.php
deleted file mode 100644
index 207ba00b..00000000
--- a/server/captcha.php
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-Simple CAPTCHA generator
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-Note: Thanks to Daniel Correa for his great help on security concerns
-
-*/
-
-// Process a totally random security code
-function security_code() {
- // Import secure random bytes function
- require_once('./srand.php');
-
- // Let's generate a totally random string using SHA-1
- $sha1_hash = sha1(secure_random_bytes(100));
-
- // Start the session so we can store what the security code actually is
- session_start();
-
- // We don't need a 32 character long string so we trim it down to 6
- $security_code = substr($sha1_hash, 15, 6);
-
- // Set the session to store the security code
- $_SESSION['captcha'] = $security_code;
-
- // Close the session
- session_write_close();
-
- return $security_code;
-}
-
-// Creates the CAPTCHA image
-function captcha($security_code) {
- // CAPTCHA configuration
- $circles = 10;
- $h_lines = 1;
- $v_lines = 2;
- $width = 64;
- $height = 22;
- $font = 4;
- $offset_x = 8;
- $offset_y = 3;
-
- // Create image
- $im = @imagecreate($width, $height);
- $background_color = imagecolorallocate($im, 10, 102, 174);
- $text_color = imagecolorallocate($im, rand(150, 255), rand(150, 255), rand(150, 255));
-
- // Create the circles
- $r = 0.01; $g = 0.51; $b = 0.87;
-
- for($i = 1; $i <= $circles; $i++) {
- $value = rand(200, 255);
- $randomcolor = imagecolorallocate($im, $value * $r, $value * $g, $value * $b);
- imagefilledellipse($im, rand(0, $width - 10), rand(0, $height - 3), rand(20, 70), rand(20, 70), $randomcolor);
- }
-
- // Create the text
- imagerectangle($im, 0, 0, $width - 1, $height - 1, $text_color);
- imagestring($im, $font, $offset_x, $offset_y, $security_code, $text_color);
-
- // Create the lines (horizontal)
- for($i = 0; $i < $h_lines; $i++) {
- $y = rand($offset_x, $height);
- $randomcolor = imagecolorallocate($im, 0, 0, rand(100, 255));
- imageline($im, 0, $y, $width, $y, $randomcolor);
- }
-
- // Create the lines (vertical)
- for($i = 0; $i < $v_lines; $i++) {
- $x = rand($offset_y, $width);
- $randomcolor = imagecolorallocate($im, 0, 0, rand(100, 255));
- imageline($im, $x, 0, $x, $height, $randomcolor);
- }
-
- // Tell the browser what kind of file is come in
- header('Content-Type: image/png');
-
- // Output the newly created image in jpeg format
- imagepng($im);
-
- // Free up resources
- imagedestroy($im);
-}
-
-// Create CAPTCHA image
-captcha(security_code());
-
-?>
diff --git a/server/desktop.php b/server/desktop.php
deleted file mode 100644
index 162c9362..00000000
--- a/server/desktop.php
+++ /dev/null
@@ -1,264 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the Jappix Desktop PHP/HTML code
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou, Maranda
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-?>
-<!DOCTYPE html>
-<?php htmlTag($locale); ?>
-
-<head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-
- <?php
- // Enable compatibility mode for IE 10
- if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/MSIE 10\.0/", $_SERVER['HTTP_USER_AGENT'])) {
- echo '<meta http-equiv="X-UA-Compatible" content="IE=9" />';
- echo "\n\t";
- }
- ?>
-
- <title><?php echo htmlspecialchars(SERVICE_NAME); ?> &bull; <?php echo htmlspecialchars(SERVICE_DESC); ?></title>
- <link rel="shortcut icon" href="./favicon.ico" />
-
- <?php echoGetFiles($hash, '', 'css', 'desktop.xml', ''); echo "\n"; ?>
- <!--[if lt IE 9]><?php echoGetFiles($hash, '', 'css', '', 'ie.css'); ?><![endif]-->
-
- <?php echoGetFiles($hash, $locale, 'js', 'desktop.xml', ''); echo "\n";
-
- if(anonymousMode()) {
- echo "\n\t";
- echoGetFiles($hash, '', 'css', 'anonymous.xml', '');
- echo "\n\t";
- echoGetFiles($hash, $locale, 'js', 'anonymous.xml', '');
- echo "\n";
- }
-
- if(httpAuthEnabled()) {
- echo "\n\t";
- echoGetFiles($hash, '', 'js', 'httpauth.xml', '');
- echo "\n\t";
- httpAuthentication();
- echo "\n";
- } ?>
-</head>
-
-<body class="body-images">
-
-<?php
-
-// Homepage?
-if(!anonymousMode() && !httpAuthEnabled()) { ?>
- <!-- BEGIN HOMEPAGE -->
- <div id="home">
- <div class="home-images plane"></div>
-
- <div class="main">
- <div class="mainview">
- <div class="left">
- <div class="home-images logo"></div>
- <p class="upper"><?php _e("Communicate with the entire world!"); ?></p>
- <p class="secondary"><?php _e("Jappix is an open social platform, that let's you easily get or keep in touch with everyone."); ?></p>
- <p class="secondary"><?php _e("Join the millions of users who are currently using the XMPP Network (Google Talk, etc), don't stay out!"); ?></p>
- </div>
-
- <div class="right">
- <h1 class="top default"><?php _e("Hi there!"); ?></h1>
-
- <div class="default homediv">
- <p><?php printf(T_("Welcome to %1s, “%2s”."), htmlspecialchars(SERVICE_NAME), htmlspecialchars(SERVICE_DESC)); ?></p>
-
- <p><?php _e("Login to your existing XMPP account or create a new one for free!"); ?></p>
-
- <button class="login buttons-images">
- <span class="home-images"></span>
- <span class="text"><?php _e("Login"); ?></span>
- </button>
-
- <button class="register buttons-images">
- <span class="home-images"></span>
- <span class="text"><?php _e("Register"); ?></span>
- </button>
-
- <p class="notice"><?php _e("For your account safety, when you login or register, make sure your password remains secret."); ?></p>
- </div>
-
- <div class="navigation">
- <?php
-
- // Keep get var
- $keep_get = keepGet('m', false);
-
- ?>
- <a class="home-images mobile" href="./?m=mobile<?php echo $keep_get; ?>"><span class="vert_center"><?php _e("Mobile"); ?></span></a>
- <?php if(showManagerLink()) { ?>
- <a class="home-images manager" href="./?m=manager<?php echo $keep_get; ?>"><span class="vert_center"><?php _e("Manager"); ?></span></a>
- <?php } if(sslCheck() && !httpsForce()) echo sslLink(); ?>
- </div>
- </div>
- </div>
-
- <?php if((ADS_ENABLE == 'on') && ADS_STANDARD) { ?>
- <?php require_once('./server/functions-advertising.php'); ?>
- <?php $advertise_link = 'http://www.backlinks.com/?aff=58769'; ?>
-
- <div class="friendsview">
- <div class="friends">
- <div class="group content">
- <a href="https://www.digitalocean.com/?refcode=b1009ddd4c62" target="_blank">
- <img src="<?php echo getFiles($hash, '', 'images', '', 'banners/digitalocean.png'); ?>" alt="" />
- </a>
- </div>
-
- <div class="group standard">
- <div class="separator">
- <span class="sep_top"></span>
- <span class="sep_bottom"></span>
- </div>
-
- <?php displayAdverts($advertise_link); ?>
- </div>
-
- <a class="group refer" href="<?php echo $advertise_link; ?>" target="_blank">
- <div class="separator">
- <span class="sep_top"></span>
- <span class="sep_bottom"></span>
- </div>
-
- <span class="home-images icon"></span>
- <span class="label"><?php _e("Advertise here"); ?></span>
- </a>
- </div>
- </div>
- <?php } ?>
- </div>
-
- <div class="home-images corporation">
- <div class="corp_network">
- <h2 class="nomargin">Jappix.com</h2>
- <div class="tabulate">
- <a href="https://jappix.com/">
- <span class="name">Jappix</span>
- <span class="desc"><?php _e("Social channel, chat and more."); ?></span>
- </a>
- <a href="https://me.jappix.com/">
- <span class="name">Jappix Me</span>
- <span class="desc"><?php _e("Create your public profile."); ?></span>
- </a>
- <a href="https://mini.jappix.com/">
- <span class="name">Jappix Mini</span>
- <span class="desc"><?php _e("A mini-chat for your website."); ?></span>
- </a>
- <a href="https://project.jappix.com/">
- <span class="name">Jappix Project</span>
- <span class="desc"><?php _e("Get Jappix, get support."); ?></span>
- </a>
- <a href="https://stats.jappix.com/">
- <span class="name">Jappix Stats</span>
- <span class="desc"><?php _e("Statistics around Jappix."); ?></span>
- </a>
- <a href="https://legal.jappix.com/">
- <span class="name">Jappix Legal</span>
- <span class="desc"><?php _e("Legal disclaimer for Jappix."); ?></span>
- </a>
- </div>
-
- <h2>Jappix.org</h2>
- <div class="tabulate">
- <a href="https://jappix.org/">
- <span class="name">Jappix Download</span>
- <span class="desc"><?php _e("Get Jappix, get support."); ?></span>
- </a>
- <a href="https://github.com/jappix/jappix">
- <span class="name">Jappix (GitHub)</span>
- <span class="desc"><?php _e("Contribute to the Jappix code."); ?></span>
- </a>
- </div>
- </div>
- </div>
-
- <div class="home-images aboutus">
- <div class="aboutus_org">
- <span class="version"><b>Jappix</b> <?php echo htmlspecialchars($version); ?></span>
-
- <h2><?php _e("Credits"); ?></h2>
- <span class="one">
- <a class="name" href="https://jappix.com/">Jappix</a>
- <a class="desc" href="https://jappix.com/"><?php _e("Company"); ?></a>
- </span>
-
- <?php if(hasLegal()) { ?>
- <h2><?php _e("Legal"); ?></h2>
- <span class="one">
- <a class="name" href="<?php echo htmlspecialchars(LEGAL); ?>"><?php _e("Legal disclaimer"); ?></a>
- <a class="desc" href="<?php echo htmlspecialchars(LEGAL); ?>"><?php _e("Terms of use and legal"); ?></a>
- </span>
- <?php } ?>
-
- <?php if(hasOwner()) { ?>
- <h2><?php _e("Owner"); ?></h2>
- <span class="one">
- <a class="name" href="<?php echo htmlspecialchars(OWNER_WEBSITE); ?>"><?php echo htmlspecialchars(OWNER_NAME); ?></a>
- <a class="desc" href="<?php echo htmlspecialchars(OWNER_WEBSITE); ?>"><?php _e("Node owner"); ?></a>
- </span>
- <?php } ?>
- </div>
- </div>
-
- <?php if(!LANGUAGE || LANGUAGE == 'all') { ?>
- <div class="locale" data-keepget="<?php echo(keepGet('l', false)); ?>">
- <div class="current">
- <div class="current_align"><?php echo(getLanguageName($locale)); ?></div>
- </div>
- </div>
- <?php } ?>
-
- <?php
-
- // Add the notice
- $conf_notice = readNotice();
- $type_notice = $conf_notice['type'];
- $text_notice = $conf_notice['notice'];
-
- // Simple notice
- if(($type_notice == 'simple') || ($type_notice == 'advanced')) {
- // We must encode special HTML characters
- if($type_notice == 'simple')
- $text_notice = '<span class="title home-images">'.T_("Notice").'</span><span class="text">'.htmlentities($text_notice).'</span>';
-
- // Echo the notice
- echo('<div class="notice '.$type_notice.'">'.$text_notice.'</div>');
- }
-
- ?>
- </div>
- <!-- END HOMEPAGE -->
-<?php } ?>
-
-<!-- BEGIN BOARD -->
-<div id="board">
- <noscript class="one-board info visible"><?php _e("JavaScript is missing in your web browser, so that you will not be able to launch Jappix! Please fix this."); ?></noscript>
-</div>
-<!-- END BOARD -->
-
-<?php include(JAPPIX_BASE.'/server/analytics.php'); ?>
-
-</body>
-
-</html>
-
-<!-- Jappix <?php echo $version; ?> - An open social platform -->
diff --git a/server/download-chat.php b/server/download-chat.php
deleted file mode 100644
index 60b9cdf6..00000000
--- a/server/download-chat.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the PHP script used to download a chat log
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// PHP base
-define('JAPPIX_BASE', '..');
-
-// Get the needed files
-require_once('./functions.php');
-require_once('./read-main.php');
-require_once('./read-hosts.php');
-
-// Prepare application
-enableErrorSink();
-hideErrors();
-compressThis();
-
-// Not allowed for a special node
-if(isStatic() || isUpload()) {
- exit;
-}
-
-// Send the HTML file to be downloaded
-if(isset($_GET['id']) && !empty($_GET['id']) && isSafe($_GET['id'])) {
- // We define the variables
- $filename = $_GET['id'];
- $content_dir = '../tmp/archives/';
- $filepath = $content_dir.$filename.'.html';
-
- // We set special headers
- header("Content-disposition: attachment; filename=\"$filename.html\"");
- header("Content-Type: application/force-download");
- header("Content-Transfer-Encoding: text/html\n");
- header("Content-Length: ".filesize($filepath));
- header("Pragma: no-cache");
- header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
- header("Expires: 0");
- readfile($filepath);
-
- // We delete the stored log file
- unlink($filepath);
-}
-
-?>
diff --git a/server/download.php b/server/download.php
deleted file mode 100644
index 611af182..00000000
--- a/server/download.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the PHP script used to download a chat log
-
-WARNING: THIS FILE IS DEPRECATED!
-(ONLY THERE FOR BACKWARD COMPATIBILITY, SINCE FILE-SHARE.PHP NO LONGER REQUIRE IT)
-
--------------------------------------------------
-
-License: AGPL
-Author: Cyril "Kyriog" Glapa
-
-*/
-
-// Check submitted vars
-if(!isset($_GET['file'])) {
- exit(T_("You haven't provided any file to download"));
-}
-if(!isset($_GET['key'])) {
- exit(T_("You cannot download a file if you don't provide a key"));
-}
-
-// Initialize
-$file_path = JAPPIX_BASE.'/store/share/'.$_GET['file'];
-$xml_path = $file_path.'.xml';
-
-if(!is_file($xml_path) || !is_file($file_path)) {
- exit(T_("Woah this file isn't found, please double check"));
-}
-
-// Load XML information for this file
-$xml = new SimpleXMLElement($xml_path, 0, true);
-$keys = $xml->keys->key;
-$key_found = false;
-
-foreach($keys as $key) {
- if($key == $_GET['key']) {
- $key_found = true;
-
- break;
- }
-}
-
-// Not allowed?
-if(!$key_found) {
- exit(T_("The key you provided does not have the permission to download this file"));
-}
-
-// Generate header data
-$expires = 31536000;
-$filename = $xml->name;
-$mimetype = $xml->type;
-
-// Cache headers
-header('Pragma: public');
-header('Cache-Control: maxage='.$expires);
-header('Expires: '.gmdate('D, d M Y H:i:s', (time() + $expires)).' GMT');
-
-// Content headers
-header('Content-Type: '.$mimetype);
-header('Content-Disposition: attachment; filename="'.htmlspecialchars($filename).'"');
-header('Content-Length: '.filesize($file_path));
-
-// Output data
-exit(file_get_contents($file_path));
-
-?>
diff --git a/server/drawsvgchart.php b/server/drawsvgchart.php
deleted file mode 100644
index 852e8f22..00000000
--- a/server/drawsvgchart.php
+++ /dev/null
@@ -1,495 +0,0 @@
-<?php
-
-// Extracted from CodingTeam for the Jappix project.
-
-// This file is a part of CodingTeam. Take a look at <http://codingteam.org>.
-// Copyright © 2007-2010 Erwan Briand <erwan@codingteam.net>
-//
-// This program is free software: you can redistribute it and/or modify it
-// under the terms of the GNU Affero General Public License as published by
-// the Free Software Foundation, version 3 only.
-//
-// 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 Affero General Public
-// License for more details.
-//
-// You should have received a copy of the GNU Affero General Public License
-// along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-/**
- * @file
- * This file contains the DrawSVGChart class.
- */
-
-/**
- * DrawSVGChart class
- */
-class DrawSVGChart {
- private $datas, $legend, $link, $xml_object, $svg,
- $xml_elements, $evolution;
- public $has_errors;
-
- function createChart($datas=array(), $legend=array(), $link,
- $evolution=FALSE, $type='others')
- {
- $this->has_errors = FALSE;
- $max = 0;
-
- // One or two data arrays
- if (isset($datas[0]) && is_array($datas[0]))
- {
- $datas_number = count($datas[0]);
-
- if ($datas_number >= 1)
- $max = max($datas[0]);
- else
- $this->has_errors = TRUE;
- }
- else
- {
- $datas_number = count($datas);
-
- if ($datas_number >= 1)
- $max = max($datas);
- else
- $this->has_errors = TRUE;
- }
-
- // Set the width of the chart
- if ($datas_number * 55 > 400)
- $width = $datas_number * 55;
- else
- $width = 400;
-
- $height = 250;
- $this->datas = $datas;
- $this->legend = $legend;
- $this->link = $link;
- $this->evolution = $evolution;
- $this->type = $type;
- $this->xml_elements = array();
-
- // Scale
- if ($max <= 20)
- {
- $scale[4] = 20;
- $scale[3] = 15;
- $scale[2] = 10;
- $scale[1] = 5;
- }
- else
- {
- $scale[4] = ceil($max / 20) * 20;
- $scale[3] = $scale[4] * 3/4;
- $scale[2] = $scale[4] * 2/4;
- $scale[1] = $scale[4] * 1/4;
- }
-
- if ($scale[4] == 0 || $max == 0)
- $this->has_errors = TRUE;
-
- if ($this->has_errors)
- return TRUE;
-
- $this->xml_object = new DOMDocument('1.0', 'utf-8');
-
- // Process the static file host prefix
- $static_prefix = '.';
-
- if(hasStatic())
- $static_prefix = HOST_STATIC.'/php';
-
- // Add the stylesheet
- $style = $this->xml_object->createProcessingInstruction("xml-stylesheet",
- "type='text/css' href='".getFiles(genHash(getVersion()), '', 'css', '', 'stats-svg.css')."'");
- $this->xml_object->appendChild($style);
-
- // Create the root SVG element
- $this->svg = $this->xml_object->createElement('svg');
- $this->svg->setAttribute('xmlns:svg', 'http://www.w3.org/2000/svg');
- $this->svg->setAttribute('xmlns', 'http://www.w3.org/2000/svg');
- $this->svg->setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');
- $this->svg->setAttribute('version', '1.1');
- $this->svg->setAttribute('width', $width);
- $this->svg->setAttribute('height', $height);
- $this->svg->setAttribute('id', 'svg');
- $this->xml_object->appendChild($this->svg);
-
- // Create a definition
- $this->xml_elements['basic_defs'] = $this->xml_object->createElement('defs');
- $path = $this->xml_object->createElement('path');
- $path->setAttribute('id', 'mark');
- $path->setAttribute('d', 'M 0,234 v 4 ');
- $path->setAttribute('stroke', '#596171');
- $path->setAttribute('stroke-width', '2px');
- $this->xml_elements['basic_defs']->appendChild($path);
-
- // Create the static background
- $this->xml_elements['static_background'] = $this->xml_object->createElement('g');
- $this->xml_elements['static_background']->setAttribute('class', 'static-background');
-
- // Draw the legend
- $this->drawLegend();
-
- // Draw the table
- $this->drawTable($scale, $width);
-
- // Draw the chart
- $this->drawChart($scale, $width);
- }
-
- function drawLegend()
- {
- $pstart = 3;
- $tstart = 7;
-
- foreach ($this->legend as $item)
- {
- $val_path = $pstart + 11;
- $val_text = $tstart + 10;
-
- // Create the legend line
- $path = $this->xml_object->createElement('path');
- $path->setAttribute('d', 'M 40, '.$val_path.' L 55, '.$val_path);
- $path->setAttribute('id', 'legendline');
- $path->setAttribute('stroke', $item[0]);
- $path->setAttribute('stroke-width', '2px');
-
- // Create the legend text
- $text = $this->xml_object->createElement('text', $item[1]);
- $text->setAttribute('x', 57);
- $text->setAttribute('y', $val_text);
- $text->setAttribute('text-anchor', 'start');
- $text->setAttribute('id', 'reftext');
- $text->setAttribute('fill', $item[0]);
- $text->setAttribute('font-size', '11px');
- $text->setAttribute('font-family', "'DejaVu sans', Verdana, sans-serif");
-
- // Append elemets
- $this->xml_elements['static_background']->appendChild($path);
- $this->xml_elements['static_background']->appendChild($text);
-
- $pstart = $val_path;
- $tstart = $val_text;
- }
- }
-
- function drawTable($scale, $width)
- {
- // Create left scale
- $top = TRUE;
- $start = -17;
-
- foreach ($scale as $level)
- {
- $type = $this->type;
-
- if(($type == 'share') || ($type == 'others'))
- $level = formatBytes($level);
-
- if ($top)
- $color = '#CED0D5';
- else
- $color = '#EAEAEA';
-
- $m = $start + 50;
-
- $path = $this->xml_object->createElement('path');
- $path->setAttribute('d', 'M 38, '.$m.' L '.$width.', '.$m);
- $path->setAttribute('stroke', $color);
- $path->setAttribute('stroke-width', '1px');
-
- $text = $this->xml_object->createElement('text', $level);
- $text->setAttribute('x', 34);
- $text->setAttribute('y', ($m + 3));
- $text->setAttribute('text-anchor', 'end');
- $text->setAttribute('class', 'refleft');
-
- $this->xml_elements['static_background']->appendChild($path);
- $this->xml_elements['static_background']->appendChild($text);
-
- $top = FALSE;
- $start = $m;
- }
-
- // Add zero
- $text = $this->xml_object->createElement('text', 0);
- $text->setAttribute('x', 34);
- $text->setAttribute('y', 236);
- $text->setAttribute('text-anchor', 'end');
- $text->setAttribute('class', 'refleft');
-
- $this->xml_elements['static_background']->appendChild($text);
- }
-
- function drawChart($scale, $width)
- {
- if (isset($this->datas[0]) && is_array($this->datas[0]))
- {
- $foreached_datas = $this->datas[0];
- $onlykeys_datas = array_keys($this->datas[0]);
- $secondary_datas = array_keys($this->datas[1]);
- }
- else
- {
- $foreached_datas = $this->datas;
- $onlykeys_datas = array_keys($this->datas);
- $secondary_datas = FALSE;
- }
-
- // Create graphics data
- $defs = $this->xml_object->createElement('defs');
-
- $rect = $this->xml_object->createElement('rect');
- $rect->setAttribute('id', 'focusbar');
- $rect->setAttribute('width', 14);
- $rect->setAttribute('height', 211);
- $rect->setAttribute('x', -20);
- $rect->setAttribute('y', 34);
- $rect->setAttribute('style', 'fill: black; opacity: 0;');
- $defs->appendChild($rect);
-
- $path = $this->xml_object->createElement('path');
- $path->setAttribute('id', 'bubble');
-
- if ($this->evolution)
- $path->setAttribute('d', 'M 4.7871575,0.5 L 39.084404,0.5 C 41.459488,0.5 43.371561,2.73 43.371561,5.5 L 43.371561,25.49999 L 43.30,31.05 L 4.7871575,30.49999 C 2.412072,30.49999 0.5,28.26999 0.5,25.49999 L 0.5,5.5 C 0.5,2.73 2.412072,0.5 4.7871575,0.5 z');
- elseif ($secondary_datas)
- $path->setAttribute('d', 'M 1,0 v 8 l -6,-10 c -1.5,-2 -1.5,-2 -6,-2 h -36 c -3,0 -6,-3 -6,-6 v -28 c 0,-3 3,-6 6,-6 h 43 c 3,0 6,3 6,6 z');
- else
- $path->setAttribute('d', 'M 4.7871575,0.5 L 39.084404,0.5 C 41.459488,0.5 43.371561,2.73 43.371561,5.5 L 43.371561,25.49999 C 43.371561,27.07677 43.83887,41.00777 42.990767,40.95796 C 42.137828,40.90787 37.97451,30.49999 36.951406,30.49999 L 4.7871575,30.49999 C 2.412072,30.49999 0.5,28.26999 0.5,25.49999 L 0.5,5.5 C 0.5,2.73 2.412072,0.5 4.7871575,0.5 z');
-
- $path->setAttribute('fill', 'none');
- $path->setAttribute('fill-opacity', '0.85');
- $path->setAttribute('pointer-events', 'none');
- $path->setAttribute('stroke-linejoin', 'round');
- $path->setAttribute('stroke', 'none');
- $path->setAttribute('stroke-opacity', '0.8');
- $path->setAttribute('stroke-width', '1px');
- $defs->appendChild($path);
-
- $rect = $this->xml_object->createElement('rect');
- $rect->setAttribute('id', 'graphicbar');
- $rect->setAttribute('width', '12');
- $rect->setAttribute('height', '200');
- $rect->setAttribute('rx', '2');
- $rect->setAttribute('ry', '1');
- $rect->setAttribute('fill', '#6C84C0');
- $rect->setAttribute('fill-opacity', '0.6');
- $rect->setAttribute('stroke', '#5276A9');
- $rect->setAttribute('stroke-width', '1px');
- $defs->appendChild($rect);
-
- $rect = $this->xml_object->createElement('rect');
- $rect->setAttribute('style', 'fill:#8B2323');
- $rect->setAttribute('id', 'rectpoint');
- $rect->setAttribute('width', 4);
- $rect->setAttribute('height', 4);
- $defs->appendChild($rect);
-
- $this->xml_elements['chart_defs'] = $defs;
- $global_g = $this->xml_object->createElement('g');
-
- // Calc
- $x_base = 35;
- $y_base = 20;
- $start = 18;
- $element = 0;
-
- $chart_defs = '';
- $xprevious = 38;
- $tprevious = 233;
-
- foreach ($foreached_datas as $key => $data)
- {
- $x = 27 + $x_base;
- $y = 107 + $y_base;
-
- $top = 233 - ceil($data / ($scale[4] / 100) * 2);
-
- if ($top <= 50)
- $bubble_top = 55;
- elseif (!$secondary_datas)
- $bubble_top = ($top - 42);
- elseif ($secondary_datas)
- $bubble_top = ($top - 10);
-
- $type = $this->type;
-
- if(($type == 'share') || ($type == 'others'))
- $value = formatBytes($data);
- else
- $value = $data;
-
- // Create the chart with datas
- $g = $this->xml_object->createElement('g');
- $g->setAttribute('transform', 'translate('.$x.')');
-
- $duse = $this->xml_object->createElement('use');
- $duse->setAttribute('xlink:href', '#mark');
- $duse->setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');
- $g->appendChild($duse);
-
- $data_g = $this->xml_object->createElement('g');
- $data_g->setAttribute('class', 'gbar');
-
- if ($this->link)
- {
- $text = $this->xml_object->createElement('text');
-
- $link = $this->xml_object->createElement('a', mb_substr(filterSpecialXML($onlykeys_datas[$element]), 0, 7));
- $link->setAttribute('xlink:href', str_replace('{data}', filterSpecialXML($onlykeys_datas[$element]), $this->link));
- $link->setAttribute('target', '_main');
- $text->appendChild($link);
- }
- else
- $text = $this->xml_object->createElement('text', mb_substr(filterSpecialXML($onlykeys_datas[$element]), 0, 7));
-
- $text->setAttribute('class', 'reftext');
- $text->setAttribute('y', 248);
- $text->setAttribute('text-anchor', 'middle');
-
- $data_g->appendChild($text);
-
- $uselink = $this->xml_object->createElement('use');
- $uselink->setAttribute('xlink:href', '#focusbar');
- $uselink->setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');
- $data_g->appendChild($uselink);
-
- if (!$this->evolution)
- {
- $rect = $this->xml_object->createElement('rect');
- $rect->setAttribute('class', 'bluebar');
- $rect->setAttribute('height', (233 - $top));
- $rect->setAttribute('width', 13);
- $rect->setAttribute('x', -6);
- $rect->setAttribute('y', $top);
- $rect->setAttribute('fill', $this->legend[0][0]);
- $rect->setAttribute('fill-opacity', '0.6');
- $data_g->appendChild($rect);
- }
- else
- {
- $use = $this->xml_object->createElement('use');
- $use->setAttribute('xlink:href', '#rectpoint');
- $use->setAttribute('y', ($top - 1));
- $use->setAttribute('x', -2);
- $data_g->appendChild($use);
-
- if ($x != (35 + 27))
- $chart_defs .= 'L '.$x.' '.$top.' ';
- else
- $chart_defs .= 'M '.$xprevious.' '.$tprevious.' L '.$x.' '.$top.' ';
-
- $xprevious = $x;
- $tprevious = $top;
- }
-
- if ($secondary_datas && isset($secondary_datas[$element]))
- {
- $datalink = $secondary_datas[$element];
- $dataval = $this->datas[1][$datalink];
- $stop = 233 - ceil($dataval / ($scale[4] / 100) * 2);
-
- $rect = $this->xml_object->createElement('rect');
- $rect->setAttribute('class', 'redbar');
- $rect->setAttribute('height', (233 - $stop));
- $rect->setAttribute('width', 13);
- $rect->setAttribute('x', -6);
- $rect->setAttribute('y', $stop);
- $rect->setAttribute('fill', $this->legend[1][0]);
- $rect->setAttribute('fill-opacity', '0.7');
- $data_g->appendChild($rect);
- }
-
- if (!$this->evolution)
- {
- $path = $this->xml_object->createElement('path');
- $path->setAttribute('stroke', '#5276A9');
- $path->setAttribute('stroke-width', '2px');
- $path->setAttribute('fill', 'none');
- $path->setAttribute('d', 'M -7,233 v -'.(232 - $top).' c 0,-1 1,-1 1,-1 h 12 c 1,0 2,0 2,1 v '.(232 - $top).' z');
- $data_g->appendChild($path);
- }
-
- $uselink = $this->xml_object->createElement('use');
- $uselink->setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');
- $uselink->setAttribute('xlink:href', '#bubble');
- $uselink->setAttribute('y', $bubble_top);
-
- if (!$secondary_datas)
- $uselink->setAttribute('x', -42);
-
- $data_g->appendChild($uselink);
-
- $text = $this->xml_object->createElement('text', $value);
- $text->setAttribute('class', 'bubbletextblue');
- $text->setAttribute('x', -10);
-
- if (!$secondary_datas)
- $text->setAttribute('y', ($bubble_top + 20));
- else
- $text->setAttribute('y', ($bubble_top - 27));
-
- $text->setAttribute('fill', 'none');
- $data_g->appendChild($text);
-
- if ($secondary_datas && isset($secondary_datas[$element]))
- {
- $text = $this->xml_object->createElement('text', $dataval);
- $text->setAttribute('class', 'bubbletextred');
- $text->setAttribute('x', -10);
- $text->setAttribute('y', ($bubble_top - 11));
- $text->setAttribute('fill', 'none');
- $data_g->appendChild($text);
- }
-
- $g->appendChild($data_g);
- $global_g->appendChild($g);
-
- $x_base = $x_base + 50;
- $y_base = $y_base + 20;
- $element ++;
- }
-
- if ($this->evolution)
- {
- $path = $this->xml_object->createElement('path');
- $path->setAttribute('d', $chart_defs);
- $path->setAttribute('stroke', $this->legend[0][0]);
- $path->setAttribute('stroke-width', '1px');
- $path->setAttribute('fill', 'none');
- $this->xml_elements['evolution_path'] = $path;
- }
-
- $this->xml_elements['global_g'] = $global_g;
-
- $path = $this->xml_object->createElement('path');
- $path->setAttribute('d', 'M 38,233 h '.$width);
- $path->setAttribute('stroke', '#2F4F77');
- $path->setAttribute('stroke-width', '2px');
- $path->setAttribute('pointer-events', 'none');
- $this->xml_elements['final_path'] = $path;
- }
-
- function has_errors()
- {
- return $this->has_errors;
- }
-
- function getXMLOutput()
- {
- if (isset($this->xml_object))
- {
- // Add SVG elements to the DOM object
- foreach($this->xml_elements as $element)
- $this->svg->appendChild($element);
-
- // Return the XML
- $this->xml_object->formatOutput = true;
- return $this->xml_object->saveXML();
- }
- }
-}
-?>
diff --git a/server/file-share.php b/server/file-share.php
deleted file mode 100644
index 1f34e35a..00000000
--- a/server/file-share.php
+++ /dev/null
@@ -1,137 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the Jappix file share script
-
--------------------------------------------------
-
-License: AGPL
-Authors: Valérian Saliou, regilero
-
-*/
-
-// PHP base
-define('JAPPIX_BASE', '..');
-
-// Get the needed files
-require_once('./functions.php');
-require_once('./read-main.php');
-require_once('./read-hosts.php');
-
-// Prepare application
-enableErrorSink();
-hideErrors();
-compressThis();
-
-// Not allowed for a special node
-if(isStatic() || isUpload()) {
- exit;
-}
-
-// Set a special XML header
-header('Content-Type: text/xml; charset=utf-8');
-
-// Everything is okay
-if((isset($_FILES['file']) && !empty($_FILES['file'])) && (isset($_POST['user']) && !empty($_POST['user'])) && (isset($_POST['location']) && !empty($_POST['location']))) {
- // Get the user name
- $user = $_POST['user'];
-
- // Get the file name
- $tmp_filename = $_FILES['file']['tmp_name'];
- $filename = $_FILES['file']['name'];
-
- // Get the location
- if(HOST_UPLOAD) {
- $location = HOST_UPLOAD.'/';
- } else {
- $location = $_POST['location'];
- }
-
- // Get the file new name
- $ext = getFileExt($filename);
- $new_name = preg_replace('/(^)(.+)(\.)(.+)($)/i', '$2', $filename);
-
- // Define some vars
- $content_dir = JAPPIX_BASE.'/store/share/'.$user;
- $security_file = $content_dir.'/index.html';
- $name = sha1_file($tmp_filename);
- $path = $content_dir.'/'.$name.'.'.$ext;
- $thumb_xml = '';
-
- // Forbidden file?
- if(!isSafe($user) || !isSafeAllowed($filename) || !isSafeAllowed($name.'.'.$ext)) {
- exit(
-'<jappix xmlns=\'jappix:file:post\'>
- <error>forbidden-type</error>
-</jappix>'
- );
- }
-
- // Create the user directory
- if(!is_dir($content_dir)) {
- mkdir($content_dir, 0777, true);
- chmod($content_dir, 0777);
- }
-
- // Create (or re-create) the security file
- if(!file_exists($security_file)) {
- file_put_contents($security_file, securityHTML(), LOCK_EX);
- }
-
- // Not already there? (sometimes users upload same file twice, no need to compute it 2 times)
- $file_first_upload = !file_exists($path);
-
- if($file_first_upload) {
- // File upload error?
- if(!is_uploaded_file($tmp_filename) || !move_uploaded_file($tmp_filename, $path)) {
- exit(
- '<jappix xmlns=\'jappix:file:post\'>
- <error>move-error</error>
- </jappix>'
- );
- }
- }
-
- // Resize and compress if this is a JPEG file
- if(preg_match('/^(jpg|jpeg|png|gif)$/i', $ext)) {
- // Image thumbnail path
- $thumb = $content_dir.'/'.$name.'_thumb.'.$ext;
- $thumb_first_upload = !file_exists($thumb);
-
- // Resize only if first time file is uploaded
- if($file_first_upload) {
- // Resize the image
- resizeImage($path, $ext, 1024, 1024);
-
- // Copy the image
- copy($path, $thumb);
- }
-
- // Create the thumbnail (only once)
- if(!$thumb_first_upload || resizeImage($thumb, $ext, 140, 105, 'square')) {
- $thumb_xml = '<thumb>'.htmlspecialchars($location.'store/share/'.$user.'/'.$name.'_thumb.'.$ext).'</thumb>';
- }
- }
-
- // Return the path to the file
- exit(
-'<jappix xmlns=\'jappix:file:post\'>
- <href>'.htmlspecialchars($location.'store/share/'.$user.'/'.$name.'.'.$ext).'</href>
- <title>'.htmlspecialchars($new_name).'</title>
- <type>'.htmlspecialchars(getFileMIME($path)).'</type>
- <length>'.htmlspecialchars(filesize($path)).'</length>
- '.$thumb_xml.'
-</jappix>'
- );
-}
-
-// Bad request error!
-exit(
-'<jappix xmlns=\'jappix:file:post\'>
- <error>bad-request</error>
-</jappix>'
-);
-
-?>
diff --git a/server/form-hosts.php b/server/form-hosts.php
deleted file mode 100644
index e688c696..00000000
--- a/server/form-hosts.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the hosts configuration form (install & manager)
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-// Checks the checkboxes which are set "on"
-$checked = ' checked=""';
-
-// BOSH proxy
-if($bosh_proxy == 'on') {
- $check_bosh_proxy = $checked;
-} else {
- $check_bosh_proxy = '';
-}
-
-?>
-<a class="info smallspace neutral" href="https://github.com/jappix/jappix/wiki/JappixApp" target="_blank"><?php _e("Need help? You'd better read our documentation page about how to fill this form!"); ?></a>
-
-<fieldset>
- <legend><?php _e("General"); ?></legend>
-
- <label for="host_main"><?php _e("Main host"); ?></label><input id="host_main" type="text" name="host_main" value="<?php echo $host_main; ?>" pattern="[^@/]+" />
-
- <label for="host_muc"><?php _e("Groupchat host"); ?></label><input id="host_muc" type="text" name="host_muc" value="<?php echo $host_muc; ?>" pattern="[^@/]+" />
-
- <label for="host_pubsub"><?php _e("Pubsub host"); ?></label><input id="host_pubsub" type="text" name="host_pubsub" value="<?php echo $host_pubsub; ?>" pattern="[^@/]+" />
-</fieldset>
-
-<fieldset>
- <legend><?php _e("Advanced"); ?></legend>
-
- <label for="host_anonymous"><?php _e("Anonymous host"); ?></label><input id="host_anonymous" type="text" name="host_anonymous" value="<?php echo $host_anonymous; ?>" pattern="[^@/]+" />
-
- <label for="host_vjud"><?php _e("Directory host"); ?></label><input id="host_vjud" type="text" name="host_vjud" value="<?php echo $host_vjud; ?>" pattern="[^@/]+" />
-
- <?php if($host_websocket) { ?>
- <label for="host_websocket"><?php _e("WebSocket host"); ?></label><input id="host_websocket" type="text" name="host_websocket" value="<?php echo $host_websocket; ?>" />
- <?php } else { ?>
- <input type="hidden" name="host_websocket" value="<?php echo $host_websocket; ?>" />
- <?php } ?>
-
- <label for="host_bosh"><?php _e("BOSH host"); ?></label><input id="host_bosh" type="text" name="host_bosh" value="<?php echo $host_bosh; ?>" />
-
- <label for="bosh_proxy"><?php _e("Use the built-in BOSH proxy"); ?></label><input id="bosh_proxy" type="checkbox" name="bosh_proxy"<?php echo $check_bosh_proxy; ?> />
-
- <input type="hidden" name="host_bosh_main" value="<?php echo $host_bosh_main; ?>" />
-
- <input type="hidden" name="host_bosh_mini" value="<?php echo $host_bosh_mini; ?>" />
-
- <input type="hidden" name="host_static" value="<?php echo $host_static; ?>" />
-
- <input type="hidden" name="host_upload" value="<?php echo $host_upload; ?>" />
-
- <input type="hidden" name="host_stun" value="<?php echo $host_stun; ?>" />
-
- <input type="hidden" name="host_turn" value="<?php echo $host_turn; ?>" />
- <input type="hidden" name="host_turn_username" value="<?php echo $host_turn_username; ?>" />
- <input type="hidden" name="host_turn_password" value="<?php echo $host_turn_password; ?>" />
-</fieldset>
diff --git a/server/form-main.php b/server/form-main.php
deleted file mode 100644
index f1e2a34f..00000000
--- a/server/form-main.php
+++ /dev/null
@@ -1,230 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the main configuration form (install & manager)
-
--------------------------------------------------
-
-License: AGPL
-Authors: Valérian Saliou, LinkMauve, Maranda
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-// Checks the checkboxes which are set "on"
-$checked = ' checked=""';
-
-// Host locking
-if($lock_host == 'on') {
- $check_lock_host = $checked;
-} else {
- $check_lock_host = '';
-}
-
-// Anonymous mode
-if($anonymous_mode == 'on') {
- $check_anonymous_mode = $checked;
-} else {
- $check_anonymous_mode = '';
-}
-
-// HTTP Authentication
-if($http_auth == 'on') {
- $check_http_auth = $checked;
-} else {
- $check_http_auth = '';
-}
-
-// Registration
-if($registration == 'on') {
- $check_registration = $checked;
-} else {
- $check_registration = '';
-}
-
-// Suggest groupchats
-if($groupchats_suggest == 'on') {
- $check_groupchats_suggest = $checked;
-} else {
- $check_groupchats_suggest = '';
-}
-
-// Manager link
-if($manager_link == 'on') {
- $check_manager_link = $checked;
-} else {
- $check_manager_link = '';
-}
-
-// Encryption
-if($encryption == 'on') {
- $check_encryption = $checked;
-} else {
- $check_encryption = '';
-}
-
-// HTTPS storage
-if($https_storage == 'on') {
- $check_https_storage = $checked;
-} else {
- $check_https_storage = '';
-}
-
-// Force HTTPS
-if($https_force == 'on') {
- $check_https_force = $checked;
-} else {
- $check_https_force = '';
-}
-
-// Compression
-if($compression == 'on') {
- $check_compression = $checked;
-} else {
- $check_compression = '';
-}
-
-// Caching
-if($caching == 'on') {
- $check_caching = $checked;
-} else {
- $check_caching = '';
-}
-
-// Statistics
-if($statistics == 'on') {
- $check_statistics = $checked;
-} else {
- $check_statistics = '';
-}
-
-// Analytics tracking
-if($analytics_track == 'on') {
- $check_analytics_track = $checked;
-} else {
- $check_analytics_track = '';
-}
-
-// Advertising
-if($ads_enable == 'on') {
- $check_ads_enable = $checked;
-} else {
- $check_ads_enable = '';
-}
-
-?>
-
-<a class="info smallspace neutral" href="https://github.com/jappix/jappix/wiki/JappixApp" target="_blank"><?php _e("Need help? You'd better read our documentation page about how to fill this form!"); ?></a>
-
-<fieldset>
- <legend><?php _e("Service"); ?></legend>
-
- <label for="service_name"><?php _e("Service name"); ?></label><input id="service_name" type="text" name="service_name" value="<?php echo $service_name; ?>" maxlength="14" />
-
- <label for="service_desc"><?php _e("Service description"); ?></label><input id="service_desc" type="text" name="service_desc" value="<?php echo $service_desc; ?>" maxlength="30" />
-
- <label for="owner_name"><?php _e("Owner name"); ?></label><input id="owner_name" type="text" name="owner_name" value="<?php echo $owner_name; ?>" maxlength="50" placeholder="PostPro" />
-
- <label for="owner_website"><?php _e("Owner website"); ?></label><input id="owner_website" type="text" name="owner_website" value="<?php echo $owner_website; ?>" placeholder="http://www.post-pro.fr/" />
-
- <label for="legal"><?php _e("Legal disclaimer"); ?></label><input id="legal" type="text" name="legal" value="<?php echo $legal; ?>" placeholder="https://legal.jappix.com/" />
-
- <label for="language"><?php _e("Language"); ?></label>
- <select id="language" name="language">
- <option value="all" <?php if($language == 'all') echo('selected=""'); ?>>All languages available</option>
-
- <?php
-
- // Available languages
- foreach(availableLocales(null, true) as $current_lng => $current_name) {
- if($current_lng == $language)
- echo('<option value="'.$current_lng.'" selected="">'.$current_name.'</option>');
- else
- echo('<option value="'.$current_lng.'">'.$current_name.'</option>');
- }
-
- ?>
- </select>
-</fieldset>
-
-<fieldset>
- <legend><?php _e("Connection"); ?></legend>
-
- <label for="jappix_resource"><?php _e("Resource"); ?></label><input id="jappix_resource" type="text" name="jappix_resource" value="<?php echo $jappix_resource; ?>" maxlength="1023" />
-
- <label for="lock_host"><?php _e("Lock the host"); ?></label><input id="lock_host" type="checkbox" name="lock_host"<?php echo $check_lock_host; ?> />
-
- <label for="anonymous_mode"><?php _e("Anonymous mode"); ?></label><input id="anonymous_mode" type="checkbox" name="anonymous_mode"<?php echo $check_anonymous_mode; ?> />
-
- <label for="registration"><?php _e("Registration allowed"); ?></label><input id="registration" type="checkbox" name="registration"<?php echo $check_registration; ?> />
-
- <label for="http_auth"><?php _e("HTTP authentication"); ?></label><input id="http_auth" type="checkbox" name="http_auth"<?php echo $check_http_auth; ?> />
-</fieldset>
-
-<fieldset>
- <legend><?php _e("Others"); ?></legend>
-
- <label for="manager_link"><?php _e("Manager link"); ?></label><input id="manager_link" type="checkbox" name="manager_link"<?php echo $check_manager_link; ?> />
-
- <label for="groupchats_join"><?php _e("Groupchats to join"); ?></label><input id="groupchats_join" type="text" name="groupchats_join" value="<?php echo $groupchats_join; ?>" placeholder="postpro@muc.jappix.com, mini@muc.jappix.com" />
-
- <label for="groupchats_suggest"><?php _e("Suggest groupchats"); ?></label><input id="groupchats_suggest" type="checkbox" name="groupchats_suggest"<?php echo $check_groupchats_suggest; ?> />
-</fieldset>
-
-<fieldset>
- <legend><?php _e("Advanced"); ?></legend>
-
- <label for="encryption"><?php _e("Encryption"); ?></label><input id="encryption" type="checkbox" name="encryption"<?php echo $check_encryption; ?> />
-
- <label for="https_storage"><?php _e("HTTPS storage"); ?></label><input id="https_storage" type="checkbox" name="https_storage"<?php echo $check_https_storage; ?> />
-
- <label for="https_force"><?php _e("Force HTTPS"); ?></label><input id="https_force" type="checkbox" name="https_force"<?php echo $check_https_force; ?> />
-
- <label for="compression"><?php _e("Compression"); ?></label><input id="compression" type="checkbox" name="compression"<?php echo $check_compression; ?> />
-
- <label for="caching"><?php _e("Cache assets"); ?></label><input id="caching" type="checkbox" name="caching"<?php echo $check_caching; ?> />
-
- <label for="statistics"><?php _e("Statistics"); ?></label><input id="statistics" type="checkbox" name="statistics"<?php echo $check_statistics; ?> />
-
- <label for="analytics_track"><?php _e("Track visits"); ?></label><input id="analytics_track" type="checkbox" name="analytics_track"<?php echo $check_analytics_track; ?> />
-
- <label for="ads_enable"><?php _e("Enable ads"); ?></label><input id="ads_enable" type="checkbox" name="ads_enable"<?php echo $check_ads_enable; ?> />
-
- <input type="hidden" name="multi_files" value="<?php echo $multi_files; ?>" />
-
- <input type="hidden" name="developer" value="<?php echo $developer; ?>" />
-
- <input type="hidden" name="register_api" value="<?php echo $register_api; ?>" />
-
- <input type="hidden" name="xmppd_ctl" value="<?php echo $xmppd_ctl; ?>" />
-
- <input type="hidden" name="xmppd" value="<?php echo $xmppd; ?>" />
-</fieldset>
-
-<?php if(($analytics_track == 'on') || $analytics_url || $analytics_id) { ?><fieldset><?php } else { ?><fieldset style="display: none;"><?php } ?>
- <legend><?php printf(T_("Analytics (%s)"), 'Piwik'); ?></legend>
-
- <label for="analytics_url"><?php _e("Piwik URL"); ?></label><input id="analytics_url" type="url" name="analytics_url" value="<?php echo $analytics_url; ?>" placeholder="http://analytics.jappix.tld/" />
-
- <label for="analytics_id"><?php _e("Piwik tracking ID"); ?></label><input id="analytics_id" type="number" name="analytics_id" value="<?php echo $analytics_id; ?>" placeholder="1" min="1" />
-</fieldset>
-
-<?php if(($ads_enable == 'on') || $ads_standard) { ?><fieldset><?php } else { ?><fieldset style="display: none;"><?php } ?>
- <legend><?php printf(T_("Advertising (%s)"), 'BackLinks.com'); ?></legend>
-
- <label for="ads_standard"><?php _e("Standard ads key"); ?></label><input id="ads_standard" type="text" name="ads_standard" value="<?php echo $ads_standard; ?>" placeholder="XXXX-XXXX-XXXX" />
-</fieldset>
-
-<?php if(($ads_enable == 'on') || $gads_client || $gads_slot) { ?><fieldset><?php } else { ?><fieldset style="display: none;"><?php } ?>
- <legend><?php printf(T_("Advertising (%s)"), 'AdSense'); ?></legend>
-
- <label for="gads_client"><?php _e("AdSense client ID"); ?></label><input id="gads_client" type="text" name="gads_client" value="<?php echo $gads_client; ?>" placeholder="ca-pub-XXXXXXXXXXXXXXXX" />
-
- <label for="gads_slot"><?php _e("AdSense slot"); ?></label><input id="gads_slot" type="text" name="gads_slot" value="<?php echo $gads_slot; ?>" placeholder="XXXXXXXXXX" />
-</fieldset>
diff --git a/server/form-users.php b/server/form-users.php
deleted file mode 100644
index 85d287d9..00000000
--- a/server/form-users.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the user add form (install & manager)
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-?>
-
-<fieldset>
- <legend><?php _e("New"); ?></legend>
-
- <label for="user_name"><?php _e("User"); ?></label><input id="user_name" class="icon <?php echo($form_parent); ?>-images" type="text" name="user_name" value="<?php echo(htmlspecialchars($user_name)); ?>" maxlength="30" />
-
- <label for="user_password"><?php _e("Password"); ?></label><input id="user_password" class="icon <?php echo($form_parent); ?>-images" type="password" name="user_password" maxlength="40" />
-
- <label for="user_repassword"><?php _e("Confirm"); ?></label><input id="user_repassword" class="icon <?php echo($form_parent); ?>-images" type="password" name="user_repassword" maxlength="40" />
-</fieldset>
diff --git a/server/functions-advertising.php b/server/functions-advertising.php
deleted file mode 100644
index a06c4cc4..00000000
--- a/server/functions-advertising.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-These are the Jappix advertising functions
-
-NOTICE: THIS SCRIPT USES THE THIRD-PARTY SERVICE BACKLINKS.COM
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Get the adverts
-function getAdverts() {
- // Available pages
- $script = 'engine.php';
- $key = ADS_STANDARD;
-
- // Not available?
- if(!$key) {
- return '';
- }
-
- $cache_file = JAPPIX_BASE.'/tmp/cache/ads_'.md5($key).'.cache';
-
- // Must get from server?
- if(!file_exists($cache_file) || (isset($_SERVER['HTTP_USER_AGENT']) && ($_SERVER['HTTP_USER_AGENT'] == 'BackLinks.com'))) {
- // Get the cache data
- if(strlen($_SERVER['SCRIPT_URI']))
- $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_URI'].((strlen($_SERVER['QUERY_STRING'])) ? '?'.$_SERVER['QUERY_STRING'] : '');
- if(!strlen($_SERVER['REQUEST_URI']))
- $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'].((strlen($_SERVER['QUERY_STRING'])) ? '?'.$_SERVER['QUERY_STRING'] : '');
-
- $query = 'LinkUrl='.urlencode((($_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
- $query .= '&Key='.urlencode($key);
- $query .= '&OpenInNewWindow=1';
- $code = @file_get_contents('http://www.backlinks.com/'.$script.'?'.$query);
-
- // Write code to cache
- @file_put_contents($cache_file, $code);
- } else {
- $code = @file_get_contents($cache_file);
- }
-
- if(!$code) {
- $code = '';
- }
-
- return $code;
-}
-
-// Display the adverts
-function displayAdverts($refer) {
- // Get content ads
- $ads_content = getAdverts();
-
- if(strpos(strtolower($ads_content), '</a>')) {
- echo($ads_content);
- } else {
- echo $ads_content;
-
- echo '<a class="available_space" href="'.$refer.'" target="_blank">';
- echo '<span class="home-images icon"></span>';
- echo '<span class="label">'.T_("Advertising space available!").'</span>';
- echo '</a>';
- }
-}
-
-?>
diff --git a/server/functions-get.php b/server/functions-get.php
deleted file mode 100644
index 94e2a879..00000000
--- a/server/functions-get.php
+++ /dev/null
@@ -1,320 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-These are the PHP functions for Jappix Get API
-
--------------------------------------------------
-
-License: AGPL
-Authors: Valérian Saliou, Mathieui, olivierm, regilero, Maranda
-
-*/
-
-// The function to get the cache path
-function pathCache($hash) {
- return JAPPIX_BASE.'/tmp/cache/'.$hash.'.cache';
-}
-
-// The function to get the cached content
-function readCache($hash) {
- return file_get_contents(pathCache($hash));
-}
-
-// The function to generate a cached file
-function genCache($string, $mode, $cache) {
- if(!$mode) {
- $cache_dir = JAPPIX_BASE.'/tmp/cache';
- $file_put = $cache_dir.'/'.$cache.'.cache';
-
- // Cache not yet wrote
- if(is_dir($cache_dir) && !file_exists($file_put)) {
- file_put_contents($file_put, $string, LOCK_EX);
- }
- }
-}
-
-// The function to remove the BOM from a string
-function rmBOM($string) {
- if(substr($string, 0, 3) == pack('CCC', 0xef, 0xbb, 0xbf)) {
- $string = substr($string, 3);
- }
-
- return $string;
-}
-
-// The function to compress the CSS
-function compressCSS($buffer) {
- // We remove the comments
- $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
-
- // We remove the useless spaces
- $buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer);
-
- // We remove the last useless spaces
- $buffer = str_replace(array(' { ',' {','{ '), '{', $buffer);
- $buffer = str_replace(array(' } ',' }','} '), '}', $buffer);
- $buffer = str_replace(array(' : ',' :',': '), ':', $buffer);
-
- return $buffer;
-}
-
-// The function to replace classical path to get.php paths
-function setPath($string, $hash, $host, $type, $locale) {
- // Initialize the static server path
- $static = '.';
-
- // Replace the JS strings
- if($type == 'javascripts') {
- // Static host defined
- if($host && ($host != '.')) {
- $static = $host;
- }
-
- // Links to JS (must have a lang parameter)
- $string = preg_replace('/((\")|(\'))(\.\/)(js)(\/)(\S+)(js)((\")|(\'))/', '$1'.$static.'/server/get.php?h='.$hash.'&amp;l='.$locale.'&amp;t=$5&amp;f=$7$8$9', $string);
-
- // Other "normal" links (no lang parameter)
- $string = preg_replace('/((\")|(\'))(\.\/)(stylesheets|images|store|sounds|fonts)(\/)(\S+)(css|png|jpg|jpeg|gif|bmp|ogg|oga|mp3|svg|ttf|woff|eot)((\")|(\'))/', '$1'.$static.'/server/get.php?h='.$hash.'&amp;t=$5&amp;f=$7$8$9', $string);
-
- // Links to JS that are prefixed with JAPPIX_STATIC (must have a lang parameter)
- $string = preg_replace('/(\WJAPPIX_STATIC\s*\+\s*)((\")|(\'))(js)(\/)(\S+)(js)((\")|(\'))/', '$1$2'.'server/get.php?h='.$hash.'&amp;l='.$locale.'&amp;t=$5&amp;f=$7$8$9', $string);
-
- // Other "normal" links prefixed with JAPPIX_STATIC (no lang parameter) (used by mini)
- $string = preg_replace('/(\WJAPPIX_STATIC\s*\+\s*)((\")|(\'))(stylesheets|images|store|sounds|fonts)(\/)(\S+)(css|png|jpg|jpeg|gif|bmp|ogg|oga|mp3|svg|ttf|woff|eot)((\")|(\'))/', '$1$2'.'server/get.php?h='.$hash.'&amp;t=$5&amp;f=$7$8$9', $string);
- }
-
- // Replace the CSS strings
- else if($type == 'stylesheets') {
- // Static host defined
- if($host && ($host != '.')) {
- $static = $host.'/server';
- }
-
- $string = preg_replace('/(\(((\")|(\'))?\.\.\/)(images|store|sounds|fonts)(\/)(\S+)(png|jpg|jpeg|gif|bmp|ogg|oga|mp3|svg|ttf|woff|eot)(\?)?(#\w+)?((\")|(\'))?(\))/', '('.$static.'/get.php?h='.$hash.'&t=$5&f=$7$8$10)', $string);
- }
-
- return $string;
-}
-
-// The function to set the good translation to a JS file
-function setTranslation($string) {
- return preg_replace_callback(
- '/_e\("([^\"\"]+)"\)/',
-
- function($m) {
- return '_e("'.addslashes(removeNewLines(T_gettext(stripslashes($m[1])))).'")';
- },
-
- $string
- );
-}
-
-// The function to set the good locales
-function setLocales($string, $locale) {
- // Generate the two JS array list
- $available_list = availableLocales($locale);
- $available_id = '';
- $available_names = '';
-
- // Add the values to the arrays
- foreach($available_list as $current_id => $current_name) {
- $available_id .= '\''.$current_id.'\', ';
- $available_names .= '\''.addslashes($current_name).'\', ';
- }
-
- // Remove the last comma
- $regex = '/(.+), $/';
- $available_id = preg_replace($regex, '$1', $available_id);
- $available_names = preg_replace($regex, '$1', $available_names);
-
- // Locales array
- $array = array(
- 'LOCALES_AVAILABLE_ID' => $available_id,
- 'LOCALES_AVAILABLE_NAMES' => $available_names
- );
-
- // Apply it!
- foreach($array as $array_key => $array_value) {
- $string = preg_replace('/(var '.$array_key.'(( )?=( )?)\[)(\];)/', '$1'.$array_value.'$5', $string);
- }
-
- return $string;
-}
-
-// The function to set the good configuration to a JS file
-function setConfiguration($string, $hash, $locale, $version, $max_upload) {
- // Special BOSH URL if BOSH proxy enabled
- if(BOSHProxy()) {
- $bosh_special = staticLocation().'server/bosh.php';
- } else {
- $bosh_special = HOST_BOSH;
- }
-
- // Configuration array
- $array = array(
- // xml:lang
- 'XML_LANG' => $locale,
-
- // Jappix parameters
- 'JAPPIX_STATIC' => staticLocation(),
- 'JAPPIX_VERSION' => $version,
- 'JAPPIX_MAX_FILE_SIZE' => $max_upload,
- 'JAPPIX_MAX_UPLOAD' => formatBytes($max_upload),
- 'JAPPIX_MINI_CSS' => getFiles($hash, '', 'css', 'mini.xml', ''),
-
- // Main configuration
- 'SERVICE_NAME' => SERVICE_NAME,
- 'SERVICE_DESC' => SERVICE_DESC,
- 'OWNER_NAME' => OWNER_NAME,
- 'OWNER_WEBSITE' => OWNER_WEBSITE,
- 'LEGAL' => LEGAL,
- 'JAPPIX_RESOURCE' => JAPPIX_RESOURCE,
- 'LOCK_HOST' => LOCK_HOST,
- 'ANONYMOUS' => ANONYMOUS,
- 'REGISTRATION' => REGISTRATION,
- 'MANAGER_LINK' => MANAGER_LINK,
- 'GROUPCHATS_JOIN' => GROUPCHATS_JOIN,
- 'GROUPCHATS_SUGGEST' => GROUPCHATS_SUGGEST,
- 'ENCRYPTION' => ENCRYPTION,
- 'HTTPS_STORAGE' => HTTPS_STORAGE,
- 'HTTPS_FORCE' => HTTPS_FORCE,
- 'COMPRESSION' => COMPRESSION,
- 'ADS_ENABLE' => ADS_ENABLE,
- 'GADS_CLIENT' => GADS_CLIENT,
- 'GADS_SLOT' => GADS_SLOT,
- 'MULTI_FILES' => MULTI_FILES,
- 'DEVELOPER' => DEVELOPER,
- 'REGISTER_API' => REGISTER_API,
-
- // Hosts configuration
- 'HOST_MAIN' => HOST_MAIN,
- 'HOST_MUC' => HOST_MUC,
- 'HOST_PUBSUB' => HOST_PUBSUB,
- 'HOST_VJUD' => HOST_VJUD,
- 'HOST_ANONYMOUS' => HOST_ANONYMOUS,
- 'HOST_STUN' => HOST_STUN,
- 'HOST_TURN' => HOST_TURN,
- 'HOST_TURN_USERNAME' => HOST_TURN_USERNAME,
- 'HOST_TURN_PASSWORD' => HOST_TURN_PASSWORD,
- 'HOST_BOSH' => $bosh_special,
- 'HOST_BOSH_MAIN' => HOST_BOSH_MAIN,
- 'HOST_BOSH_MINI' => HOST_BOSH_MINI,
- 'HOST_WEBSOCKET' => HOST_WEBSOCKET,
- 'HOST_STATIC' => HOST_STATIC,
- 'HOST_UPLOAD' => HOST_UPLOAD
- );
-
- // Apply it!
- foreach($array as $array_key => $array_value) {
- $string = preg_replace('/var '.$array_key.'(( )?=( )?)null;/', 'var '.$array_key.'$1\''.addslashes($array_value).'\';', $string);
- }
-
- return $string;
-}
-
-// The function to set the logos
-function setLogos($string, $files) {
- // Jappix Desktop home logo?
- if(in_array('home.css', $files) && file_exists(JAPPIX_BASE.'/store/logos/desktop_home.png')) {
- $string .=
-'#home .left .logo {
- background-image: url(../store/logos/desktop_home.png) !important;
- background-position: center center !important;
-}';
- }
-
- // Jappix Desktop app logo?
- if(in_array('tools.css', $files) && file_exists(JAPPIX_BASE.'/store/logos/desktop_app.png')) {
- $string .=
-'#top-content .tools-logo {
- background-image: url(../store/logos/desktop_app.png) !important;
- background-position: center center !important;
-}';
- }
-
- // Jappix Mobile logo?
- if(in_array('mobile.css', $files) && file_exists(JAPPIX_BASE.'/store/logos/mobile.png')) {
- $string .=
-'.header div {
- background-image: url(../store/logos/mobile.png) !important;
- background-position: center center !important;
-}';
- }
-
- // Jappix Mini logo?
- if(in_array('mini.css', $files) && file_exists(JAPPIX_BASE.'/store/logos/mini.png')) {
- $string .=
-'#jappix_mini div.jm_actions a.jm_logo {
- background-image: url(../store/logos/mini.png) !important;
- background-position: center center !important;
-}';
- }
-
- return $string;
-}
-
-// The function to set the background
-function setBackground($string) {
- // Get the default values
- $array = defaultBackground();
-
- // Read the background configuration
- $xml = readXML('conf', 'background');
-
- if($xml) {
- $read = new SimpleXMLElement($xml);
-
- foreach($read->children() as $child) {
- $current_child = (string)$child;
-
- // Any value?
- if($current_child)
- $array[$child->getName()] = $current_child;
- }
- }
-
- $css = '';
-
- // Generate the CSS code
- switch($array['type']) {
- // Image
- case 'image':
- $css .=
- "\n".' background-image: url(../store/backgrounds/'.urlencode($array['image_file']).');
- background-repeat: '.$array['image_repeat'].';
- background-position: '.$array['image_horizontal'].' '.$array['image_vertical'].';
- background-color: '.$array['image_color'].';'
- ;
-
- // Add CSS code to adapt the image?
- if($array['image_adapt'] == 'on')
- $css .=
- ' background-attachment: fixed;
- background-size: cover;
- -moz-background-size: cover;
- -webkit-background-size: cover;';
-
- $css .= "\n";
-
- break;
-
- // Color
- case 'color':
- $css .= "\n".' background-color: '.$array['color_color'].';'."\n";
-
- break;
-
- // Default: use the filtering regex
- default:
- $css .= '$3';
-
- break;
- }
-
- // Apply the replacement!
- return preg_replace('/(\.body-images( )?\{)([^\{\}]+)(\})/i', '$1'.$css.'$4', $string);
-}
-
-?>
diff --git a/server/functions-manager.php b/server/functions-manager.php
deleted file mode 100644
index ee4689c7..00000000
--- a/server/functions-manager.php
+++ /dev/null
@@ -1,810 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-These are the PHP functions for Jappix manager
-
--------------------------------------------------
-
-License: AGPL
-Authors: Valérian Saliou, Mathieui, olivierm, Vinilox, regilero, Cyril "Kyriog" Glapa
-
-*/
-
-// The function to check an user is admin
-function isAdmin($user, $password) {
- // Read the users.xml file
- $array = getUsers();
-
- // No data?
- if(empty($array)) {
- return false;
- }
-
- // Our user is set and valid?
- if(isset($array[$user]) && ($array[$user] == $password)) {
- return true;
- }
-
- // Not authorized
- return false;
-}
-
-// Checks if a file is a valid image
-function isImage($file) {
- // This is an image
- if(preg_match('/^(.+)(\.)(png|jpg|jpeg|gif|bmp)$/i', $file)) {
- return true;
- }
-
- return false;
-}
-
-// Puts a marker on the current opened manager tab
-function currentTab($current, $page) {
- if($current == $page) {
- echo ' class="tab-active"';
- }
-}
-
-// Checks all the storage folders are writable
-function storageWritable() {
- // Read the directory content
- $dir = JAPPIX_BASE.'/store/';
- $scan = scandir($dir);
-
- // Writable marker
- $writable = true;
-
- // Check that each folder is writable
- foreach($scan as $current) {
- // Current folder
- $folder = $dir.$current;
-
- // A folder is not writable?
- if(!preg_match('/^\.(.+)/', $current) && !is_writable($folder)) {
- // Try to change the folder rights
- chmod($folder, 0777);
-
- // Check it again!
- if(!is_writable($folder)) {
- $writable = false;
- }
- }
- }
-
- return $writable;
-}
-
-// Removes a given directory (with all sub-elements)
-function removeDir($dir) {
- // Can't open the dir
- if(!$dh = @opendir($dir)) {
- return;
- }
-
- // Loop the current dir to remove its content
- while(false !== ($obj = readdir($dh))) {
- // Not a "real" directory
- if(($obj == '.') || ($obj == '..')) {
- continue;
- }
-
- // Not a file, remove this dir
- if(!@unlink($dir.'/'.$obj)) {
- removeDir($dir.'/'.$obj);
- }
- }
-
- // Close the dir and remove it!
- closedir($dh);
- @rmdir($dir);
-}
-
-// Copies a given directory (with all sub-elements)
-function copyDir($source, $destination) {
- // This is a directory
- if(is_dir($source)) {
- // Create the target directory
- @mkdir($destination);
- $directory = dir($source);
-
- // Append the source directory content into the target one
- while(FALSE !== ($readdirectory = $directory->read())) {
- if(($readdirectory == '.') || ($readdirectory == '..')) {
- continue;
- }
-
- $PathDir = $source.'/'.$readdirectory;
-
- // Recursive copy
- if(is_dir($PathDir)) {
- copyDir($PathDir, $destination.'/'.$readdirectory);
- continue;
- }
-
- copy($PathDir, $destination.'/'.$readdirectory);
- }
-
- // Close the source directory
- $directory->close();
- }
-
- // This is a file
- else
- copy($source, $destination);
-}
-
-// Gets the total size of a directory
-function sizeDir($dir) {
- $size = 0;
-
- foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir)) as $file) {
- $size += $file->getSize();
- }
-
- return $size;
-}
-
-// Set the good unity for a size in bytes
-function numericToMonth($id) {
- $array = array(
- 1 => T_("January"),
- 2 => T_("February"),
- 3 => T_("March"),
- 4 => T_("April"),
- 5 => T_("May"),
- 6 => T_("June"),
- 7 => T_("July"),
- 8 => T_("August"),
- 9 => T_("September"),
- 10 => T_("October"),
- 11 => T_("November"),
- 12 =>T_( "December")
- );
-
- return $array[$id];
-}
-
-// Extracts the version number with a version ID
-function versionNumber($id) {
- // First, extract the number string from the [X]
- $extract = preg_replace('/^(.+)\[(\S+)\]$/', '$2', $id);
- $dev = false;
-
- // Second extract: ~ (when this is a special version, like ~dev)
- if(strrpos($extract, '~') !== false) {
- $dev = true;
- $extract = preg_replace('/^([^~])~(.+)$/', '$1', $extract);
- }
-
- // Convert [X.X.X] into a full number
- $extract = preg_replace('/[^0-9]/', '', $extract);
-
- // Add missing items to [X.X.X]
- $missing = 3 - strlen($extract.'');
- if($missing > 0) {
- $extract = $extract.(str_repeat('0', $missing));
- }
-
- // Allows updates for dev versions
- if($dev) {
- $extract = $extract - 1;
- }
-
- return intval($extract);
-}
-
-// Checks for new Jappix updates
-function newUpdates($force) {
- // No need to check if developer mode
- if(isDeveloper()) {
- return false;
- }
-
- $cache_path = JAPPIX_BASE.'/tmp/cache/version.xml';
-
- // No cache, obsolete one or refresh forced
- if(!file_exists($cache_path) || (file_exists($cache_path) && (time() - (filemtime($cache_path)) >= 86400)) || $force) {
- // Get the content
- $last_version = readUrl('https://jappix.org/xml/version.xml');
-
- // Write the content
- file_put_contents($cache_path, $last_version, LOCK_EX);
- } else {
- // Read from cache
- $last_version = file_get_contents($cache_path);
- }
-
- // Parse the XML
- $xml = @simplexml_load_string($last_version);
-
- // No data?
- if($xml === FALSE) {
- return false;
- }
-
- // Get the version numbers
- $current_version = getVersion();
- $last_version = $xml->id;
-
- // Check if we have the latest version
- $current_version = versionNumber($current_version);
- $last_version = versionNumber($last_version);
-
- if($current_version < $last_version) {
- return true;
- }
-
- return false;
-}
-
-// Gets the Jappix update informations
-function updateInformations() {
- // Get the XML file content
- $data = file_get_contents(JAPPIX_BASE.'/tmp/cache/version.xml');
-
- // Transform the XML content into an array
- $array = array();
-
- // No XML?
- if(!$data) {
- return $array;
- }
-
- $xml = new SimpleXMLElement($data);
-
- // Parse the XML to add it to the array
- foreach($xml->children() as $this_child) {
- // Get the node name
- $current_name = $this_child->getName();
-
- // Push it to the array, with a basic HTML encoding
- $array[$current_name] = str_replace('\n', '<br />', (string)$this_child);
- }
-
- // Return this array
- return $array;
-}
-
-// Processes the Jappix update from an external package
-function processUpdate($url) {
- // Archive path
- $name = md5($url).'.zip';
- $update_dir = JAPPIX_BASE.'/store/update/';
- $path = $update_dir.$name;
- $extract_to = $update_dir.'jappix/';
- $store_tree = JAPPIX_BASE.'/server/store-tree.php';
-
- // We must get the archive from the server
- if(!file_exists($path)) {
- echo('<p>» '.T_("Downloading package...").'</p>');
-
- // Create SSL request context
- $ssl_context = requestContext($url);
-
- // Open the packages
- $local = fopen($path, 'w');
- $remote = fopen($url, 'r', false, $ssl_context);
-
- // Could not open a socket?!
- if(!$remote) {
- echo('<p>» '.T_("Aborted: socket error!").'</p>');
-
- // Remove the broken local archive
- unlink($path);
-
- return false;
- }
-
- // Read the file
- while(!feof($remote)) {
- // Get the buffer
- $buffer = fread($remote, 1024);
-
- // Any error?
- if($buffer == 'Error.') {
- echo('<p>» '.T_("Aborted: buffer error!").'</p>');
-
- // Remove the broken local archive
- unlink($path);
-
- return false;
- }
-
- // Write the buffer to the file
- fwrite($local, $buffer);
-
- // Flush the current buffer
- flush();
- }
-
- // Close the files
- fclose($local);
- fclose($remote);
- }
-
- // Then, we extract the archive
- echo('<p>» '.T_("Extracting package...").'</p>');
-
- try {
- $zip = new ZipArchive;
- $zip_open = $zip->open($path);
-
- if($zip_open === TRUE) {
- $zip->extractTo($update_dir);
- $zip->close();
- } else {
- echo('<p>» '.T_("Aborted: could not extract the package!").'</p>');
-
- // Remove the broken source folder
- removeDir($to_remove);
-
- return false;
- }
- }
-
- // PHP does not provide Zip archives support
- catch(Exception $e) {
- echo('<p>» '.T_("Aborted: could not extract the package!").'</p>');
-
- // Remove the broken source folder
- removeDir($to_remove);
-
- return false;
- }
-
- // Remove the ./store dir from the source directory
- removeDir($extract_to.'store/');
-
- // Then, we remove the Jappix system files
- echo('<p>» '.T_("Removing current Jappix system files...").'</p>');
-
- // Open the general directory
- $dir_base = JAPPIX_BASE.'/';
- $scan = scandir($dir_base);
-
- // Filter the scan array
- $scan = array_diff($scan, array('.', '..', '.git', 'store'));
-
- // Check all the files are writable
- foreach($scan as $scanned) {
- // Element path
- $scanned_current = $dir_base.$scanned;
-
- // Element not writable
- if(!is_writable($scanned_current)) {
- // Try to change the element rights
- chmod($scanned_current, 0777);
-
- // Check it again!
- if(!is_writable($scanned_current)) {
- echo('<p>» '.T_("Aborted: everything is not writable!").'</p>');
-
- return false;
- }
- }
- }
-
- // Process the files deletion
- foreach($scan as $current) {
- $to_remove = $dir_base.$current;
-
- // Remove folders
- if(is_dir($to_remove)) {
- removeDir($to_remove);
- } else {
- // Remove files
- unlink($to_remove);
- }
- }
-
- // Move the extracted files to the base
- copyDir($extract_to, $dir_base);
-
- // Remove the source directory
- removeDir($extract_to);
-
- // Regenerates the store tree
- if(file_exists($store_tree)) {
- echo('<p>» '.T_("Regenerating storage folder tree...").'</p>');
-
- // Call the special regeneration script
- include($store_tree);
- }
-
- // Remove the version package
- unlink($path);
-
- // The new version is now installed!
- echo('<p>» '.T_("Jappix is now up to date!").'</p>');
-
- return true;
-}
-
-// Returns an array with the biggest share folders
-function shareStats() {
- // Define some stuffs
- $path = JAPPIX_BASE.'/store/share/';
- $array = array();
-
- // Open the directory
- $scan = scandir($path);
-
- // Loop the share files
- foreach($scan as $current) {
- if(is_dir($path.$current) && !preg_match('/^(\.(.+)?)$/i', $current)) {
- array_push($array, $current);
- }
- }
-
- return $array;
-}
-
-// Returns the largest share folders
-function largestShare($array, $number) {
- // Define some stuffs
- $path = JAPPIX_BASE.'/store/share/';
- $size_array = array();
-
- // Push the results in an array
- foreach($array as $current) {
- $size_array[$current] = sizeDir($path.$current);
- }
-
- // Sort this array
- arsort($size_array);
-
- // Select the first biggest values
- $size_array = array_slice($size_array, 0, $number);
-
- return $size_array;
-}
-
-// Returns the others statistics array
-function otherStats() {
- // Fill the array with the values
- $others_stats = array(
- T_("Backgrounds") => sizeDir(JAPPIX_BASE.'/store/backgrounds/'),
- T_("Archives") => sizeDir(JAPPIX_BASE.'/tmp/archives/'),
- T_("Music") => sizeDir(JAPPIX_BASE.'/store/music/'),
- T_("Share") => sizeDir(JAPPIX_BASE.'/store/share/'),
- T_("Send") => sizeDir(JAPPIX_BASE.'/tmp/send/'),
- );
-
- // Sort this array
- arsort($others_stats);
-
- return $others_stats;
-}
-
-// Gets the array of the visits stats
-function getVisits() {
- // New array
- $array = array(
- 'total' => 0,
- 'daily' => 0,
- 'weekly' => 0,
- 'monthly' => 0,
- 'yearly' => 0
- );
-
- // Read the data
- $data = readXML('access', 'total');
-
- // Any data?
- if($data) {
- // Initialize the visits reading
- $xml = new SimpleXMLElement($data);
-
- // Get the XML values
- $array['total'] = intval($xml->total);
- $array['stamp'] = intval($xml->stamp);
-
- // Get the age of the stats
- $age = time() - $array['stamp'];
-
- // Generate the time-dependant values
- $timed = array(
- 'daily' => 86400,
- 'weekly' => 604800,
- 'monthly' => 2678400,
- 'yearly' => 31536000
- );
-
- foreach($timed as $timed_key => $timed_value) {
- if($age >= $timed_value) {
- $array[$timed_key] = intval($array['total'] / ($age / $timed[$timed_key])).'';
- } else {
- $array[$timed_key] = $array['total'].'';
- }
- }
- }
-
- return $array;
-}
-
-// Gets the array of the monthly visits
-function getMonthlyVisits() {
- // New array
- $array = array();
-
- // Read the data
- $data = readXML('access', 'months');
-
- // Get the XML file values
- if($data) {
- // Initialize the visits reading
- $xml = new SimpleXMLElement($data);
-
- // Loop the visit elements
- foreach($xml->children() as $child) {
- // Get the current month ID
- $current_id = intval(preg_replace('/month_([0-9]+)/i', '$1', $child->getName()));
-
- // Get the current month name
- $current_name = numericToMonth($current_id);
-
- // Push it!
- $array[$current_name] = intval((string)$child);
- }
- }
-
- return $array;
-}
-
-// Returns the folder path
-function pathFolder($folder) {
- if($folder == 'archives' || $folder == 'avatar' ||
- $folder == 'cache' || $folder == 'jingle' ||
- $folder == 'send') {
- return JAPPIX_BASE.'/tmp/'.$folder.'/';
- }
-
- return JAPPIX_BASE.'/store/'.$folder.'/';
-}
-
-// Purges the target folder content
-function purgeFolder($folder) {
- // Array of the folders to purge
- $array = array();
-
- // We must purge all the folders?
- if($folder == 'everything') {
- array_push($array, 'archives', 'send');
- } else {
- array_push($array, $folder);
- }
-
- // All right, now we can empty it!
- foreach($array as $current_folder) {
- // Scan the current directory
- $directory = pathFolder($current_folder);
- $scan = scandir($directory);
- $scan = array_diff($scan, array('.', '..', '.svn', 'index.html'));
-
- // Process the files deletion
- foreach($scan as $current) {
- $remove_this = $directory.$current;
-
- if(is_dir($remove_this)) {
- // Remove folders
- removeDir($remove_this);
- } else {
- // Remove files
- unlink($remove_this);
- }
- }
- }
-}
-
-// Returns folder browsing informations
-function browseFolder($folder, $mode) {
- // Scan the target directory
- $directory = pathFolder($folder);
- $scan = scandir($directory);
- $scan = array_diff($scan, array('.', '..', '.git', 'index.html'));
- $keep_get = keepGet('(s|b|k)', false);
-
- // Odd/even marker
- $marker = 'odd';
-
- // Not in the root folder: show previous link
- if(strpos($folder, '/') != false) {
- // Filter the folder name
- $previous_folder = substr($folder, 0, strrpos($folder, '/'));
-
- echo('<div class="one-browse previous manager-images"><a href="./?b='.$mode.'&s='.urlencode($previous_folder).$keep_get.'">'.T_("Previous").'</a></div>');
- }
-
- // Empty or non-existing directory?
- if(!count($scan) || !is_dir($directory)) {
- echo('<div class="one-browse '.$marker.' alert manager-images">'.T_("The folder is empty.").'</div>');
-
- return false;
- }
-
- // Echo the browsing HTML code
- foreach($scan as $current) {
- // Generate the item path$directory
- $path = $directory.'/'.$current;
- $file = $folder.'/'.$current;
-
- if(is_dir($path)) {
- // Directory
- $type = 'folder';
- $href = './?b='.$mode.'&s='.urlencode($file).$keep_get;
- $target = '';
- } else {
- // File
- $type = getFileType(getFileExt($path));
- $href = $path;
- $target = ' target="_blank"';
- }
-
- echo('<div class="one-browse '.$marker.' '.$type.' manager-images"><a href="'.$href.'"'.$target.'>'.htmlspecialchars($current).'</a><input type="checkbox" name="element_'.md5($file).'" value="'.htmlspecialchars($file).'" /></div>');
-
- // Change the marker
- if($marker == 'odd') {
- $marker = 'even';
- } else {
- $marker = 'odd';
- }
- }
-
- return true;
-}
-
-// Removes selected elements (files/folders)
-function removeElements() {
- // Initialize the match
- $elements_removed = false;
- $elements_remove = array();
-
- // Try to get the elements to remove
- foreach($_POST as $post_key => $post_value) {
- // Is a safe file?
- if(preg_match('/^element_(.+)$/i', $post_key) && isSafe($post_value)) {
- // Update the marker
- $elements_removed = true;
-
- // Get the real path
- $post_element = JAPPIX_BASE.'/store/'.$post_value;
-
- // Remove the current element
- if(is_dir($post_element)) {
- removeDir($post_element);
- } else if(file_exists($post_element)) {
- if(substr($post_value,-4) == '.xml') {
- $content_file = substr($post_element,0,-4);
- unlink($content_file);
-
- if(file_exists($content_file.'_thumb.jpg')) {
- unlink($content_file.'_thumb.jpg');
- }
- }
- unlink($post_element);
- }
- }
- }
-
- // Show a notification message
- if($elements_removed) {
- echo('<p class="info smallspace success">'.T_("The selected elements have been removed.").'</p>');
- } else {
- echo('<p class="info smallspace fail">'.T_("You must select elements to remove!").'</p>');
- }
-}
-
-// Returns users browsing informations
-function browseUsers() {
- // Get the users
- $array = getUsers();
-
- // Odd/even marker
- $marker = 'odd';
-
- // Echo the browsing HTML code
- foreach($array as $user => $password) {
- // Filter the username
- $user = htmlspecialchars($user);
-
- // Output the code
- echo('<div class="one-browse '.$marker.' user manager-images"><span>'.$user.'</span><input type="checkbox" name="admin_'.md5($user).'" value="'.$user.'" /><div class="clear"></div></div>');
-
- // Change the marker
- if($marker == 'odd') {
- $marker = 'even';
- } else {
- $marker = 'odd';
- }
- }
-}
-
-// Generates the logo form field
-function logoFormField($id, $name) {
- if(file_exists(JAPPIX_BASE.'/store/logos/'.$name.'.png')) {
- echo '<span class="logo_links"><a class="remove manager-images" href="./?k='.urlencode($name).keepGet('k', false).'" title="'.T_("Remove this logo").'"></a><a class="view manager-images" href="./store/logos/'.$name.'.png" target="_blank" title="'.T_("View this logo").'"></a></span>';
- } else {
- echo '<input id="logo_own_'.$id.'_location" type="file" name="logo_own_'.$id.'_location" accept="image/*" />';
- }
-
- echo "\n";
-}
-
-// Reads the background configuration
-function readBackground() {
- // Read the background configuration XML
- $background_data = readXML('conf', 'background');
-
- // Get the default values
- $background_default = defaultBackground();
-
- // Stored data array
- $background_conf = array();
-
- // Read the stored values
- if($background_data) {
- // Initialize the background configuration XML data
- $background_xml = new SimpleXMLElement($background_data);
-
- // Loop the notice configuration elements
- foreach($background_xml->children() as $background_child) {
- $background_conf[$background_child->getName()] = (string)$background_child;
- }
- }
-
- // Checks no value is missing in the stored configuration
- foreach($background_default as $background_name => $background_value) {
- if(!isset($background_conf[$background_name]) || empty($background_conf[$background_name])) {
- $background_conf[$background_name] = $background_default[$background_name];
- }
- }
-
- return $background_conf;
-}
-
-// Writes the background configuration
-function writeBackground($array) {
- // Generate the XML data
- $xml = '';
-
- foreach($array as $key => $value) {
- $xml .= "\n".' <'.$key.'>'.stripslashes(htmlspecialchars($value)).'</'.$key.'>';
- }
-
- // Write this data
- writeXML('conf', 'background', $xml);
-}
-
-// Generates a list of the available background images
-function getBackgrounds() {
- // Initialize the result array
- $array = array();
-
- // Scan the background directory
- $scan = scandir(JAPPIX_BASE.'/store/backgrounds/');
-
- foreach($scan as $current) {
- if(isImage($current)) {
- array_push($array, $current);
- }
- }
-
- return $array;
-}
-
-// Writes the notice configuration
-function writeNotice($type, $simple) {
- // Generate the XML data
- $xml =
- '<type>'.$type.'</type>
- <notice>'.stripslashes(htmlspecialchars($simple)).'</notice>'
- ;
-
- // Write this data
- writeXML('conf', 'notice', $xml);
-}
-
-?>
diff --git a/server/functions.php b/server/functions.php
deleted file mode 100644
index 7939f2ff..00000000
--- a/server/functions.php
+++ /dev/null
@@ -1,1713 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-These are the PHP functions for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Authors: Valérian Saliou, LinkMauve, Mathieui, olivierm, regilero, Maranda
-
-*/
-
-// The function to check if Jappix is already installed
-function isInstalled() {
- return file_exists(JAPPIX_BASE.'/store/conf/installed.xml');
-}
-
-// The function to check if statistics are enabled
-function hasStatistics() {
- return !(STATISTICS && (STATISTICS == 'off'));
-}
-
-// The function to check if a static host is defined
-function hasStatic() {
- return (HOST_STATIC && (HOST_STATIC != '.'));
-}
-
-// The function to check if this is a static server
-function isStatic() {
- return (hasStatic() && (parse_url(HOST_STATIC, PHP_URL_HOST) == $_SERVER['HTTP_HOST']));
-}
-
-// The function to check if this is an upload server
-function isUpload() {
- return (HOST_UPLOAD && (parse_url(HOST_UPLOAD, PHP_URL_HOST) == $_SERVER['HTTP_HOST']));
-}
-
-// The function to check if any legal disclaimer is defined
-function hasLegal() {
- return (LEGAL && true);
-}
-
-// The function to check if owner information are defined
-function hasOwner() {
- return (OWNER_NAME && OWNER_WEBSITE);
-}
-
-// The function to get the users.xml file hashed name
-function usersConfName() {
- $conf_dir = JAPPIX_BASE.'/store/conf';
-
- // No conf folder?
- if(!is_dir($conf_dir)) {
- return '';
- }
-
- // Read the conf folder
- $conf_scan = scandir($conf_dir.'/');
- $conf_name = '';
-
- // Loop the XML files
- foreach($conf_scan as $current) {
- if(preg_match('/(.+)(\.users\.xml)($)/', $current)) {
- $conf_name = $current;
- break;
- }
- }
-
- // Return the users file name
- return $conf_name;
-}
-
-// Remove new lines from a given string
-function removeNewLines($string) {
- if($string) {
- return trim(preg_replace('/\s+/', ' ', $string));
- }
-
- return $string;
-}
-
-// The function to write a XML file
-function writeXML($type, $xmlns, $xml) {
- // Generate the file path
- $conf_path = JAPPIX_BASE.'/store/'.$type.'/';
- $conf_name = $xmlns.'.xml';
-
- // Secured stored file?
- if(($type == 'conf') && ($xmlns == 'users')) {
- // Get the secured file name
- $conf_secured = usersConfName();
-
- // Does this file exist?
- if($conf_secured) {
- $conf_name = $conf_secured;
- } else {
- $conf_name = hash('sha256', rand(1, 99999999).time()).'.users.xml';
- }
- }
-
- // Generate the file complete path
- $conf_file = $conf_path.$conf_name;
-
- // Write the installed marker
- $gen_xml = '<?xml version="1.0" encoding="utf-8" ?>
-<jappix xmlns="jappix:'.$type.':'.$xmlns.'">
- '.trim($xml).'
-</jappix>';
-
- file_put_contents($conf_file, $gen_xml, LOCK_EX);
-
- return true;
-}
-
-// The function to read a XML file
-function readXML($type, $xmlns) {
- // Generate the file path
- $conf_path = JAPPIX_BASE.'/store/'.$type.'/';
- $conf_name = $xmlns.'.xml';
-
- // Secured stored file?
- if(($type == 'conf') && ($xmlns == 'users')) {
- // Get the secured file name
- $conf_secured = usersConfName();
-
- // Does this file exist?
- if($conf_secured) {
- $conf_name = $conf_secured;
- }
- }
-
- // Generate the file complete path
- $conf_file = $conf_path.$conf_name;
-
- if(file_exists($conf_file)) {
- return file_get_contents($conf_file);
- }
-
- return false;
-}
-
-// Creates a secure download context (StartSSL provider, used on Jappix.org which is the update source)
-function requestContext($remote_url, $type = 'default', $opt = null) {
- $options = array();
- $url_parse = parse_url($remote_url);
-
- $ca_path = JAPPIX_BASE.'/misc/certs/';
-
- // Official update host?
- if($url_parse['scheme'] === 'https' && $url_parse['host'] === 'jappix.org') {
- if($type === 'curl') {
- curl_setopt($opt, CURLOPT_SSL_VERIFYPEER, TRUE);
- curl_setopt($opt, CURLOPT_CAPATH, $ca_path);
- } else {
- $options['ssl'] = array(
- 'verify_peer' => TRUE,
- 'capath' => $ca_path,
- 'verify_depth' => 10,
- 'SNI_enabled' => TRUE,
- 'SNI_server_name' => $url_parse['host']
- );
- }
- }
-
- if($type === 'curl') {
- return true;
- } else {
- $ssl_context = stream_context_create($options);
-
- return $ssl_context;
- }
-}
-
-// The function to read remote URLs
-function readUrl($url) {
- // Any cURL?
- if(function_exists('curl_init')) {
- $ch = curl_init();
-
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
-
- // Set dynamic request context
- requestContext($url, 'curl', $ch);
-
- $data = curl_exec($ch);
- curl_close($ch);
- } else {
- $context = requestContext($url);
-
- // Fallback on default method
- $data = @file_get_contents($url, false, $context);
- }
-
- return $data;
-}
-
-// The function to get the Jappix app. current version
-function getVersion() {
- $file = file_get_contents(JAPPIX_BASE.'/VERSION');
- $version = trim($file);
-
- return $version;
-}
-
-// The function to detect the user's language
-function checkLanguage() {
- // System-forced language?
- if(LANGUAGE && LANGUAGE != 'all') {
- return LANGUAGE;
- }
-
- // If the user defined a language
- if(isset($_GET['l']) && !empty($_GET['l'])) {
- // We define some stuffs
- $defined_lang = strtolower($_GET['l']);
- $lang_file = JAPPIX_BASE.'/i18n/'.$defined_lang.'/LC_MESSAGES/main.mo';
-
- if($defined_lang == 'en') {
- $lang_found = true;
- } else {
- $lang_found = file_exists($lang_file);
- }
-
- // We check if the asked translation exists
- if($lang_found) {
- $lang = $defined_lang;
-
- // Write a cookie
- setcookie('jappix_locale', $lang, (time() + 31536000));
-
- return $lang;
- }
- }
-
- // No language has been defined, but a cookie is stored
- if(isset($_COOKIE['jappix_locale'])) {
- $check_cookie = $_COOKIE['jappix_locale'];
-
- // The cookie has a value, check this value
- if($check_cookie && (file_exists(JAPPIX_BASE.'/i18n/'.$check_cookie.'/LC_MESSAGES/main.mo') || ($check_cookie == 'en'))) {
- return $check_cookie;
- }
- }
-
- // No cookie defined (or an unsupported value), naturally, we check the browser language
- if(!isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
- return 'en';
- }
-
- // We get the language of the browser
- $nav_langs = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
- $check_en = strtolower($nav_langs[0]);
-
- // We check if this is not english
- if($check_en == 'en') {
- return 'en';
- }
-
- $order = array();
-
- foreach($nav_langs as $entry) {
- $index = explode('=', $entry);
- $lang = strtolower(substr(trim($index[0]), 0, 2));
-
- if(!isset($index[1]) || !$index[1]) {
- $index = 1;
- } else {
- $index = $index[1];
- }
-
- $order[$lang] = $index;
- }
-
- arsort($order);
-
- foreach($order as $nav_lang => $val) {
- $lang_found = file_exists(JAPPIX_BASE.'/i18n/'.$nav_lang.'/LC_MESSAGES/main.mo');
-
- if($lang_found) {
- return $nav_lang;
- }
- }
-
- // If Jappix doen't know that language, we include the english translation
- return 'en';
-}
-
-// The function to convert a ISO language code to its full name
-function getLanguageName($code) {
- $code = strtolower($code);
-
- $known = array(
- 'aa' => 'Afaraf',
- 'ab' => 'Аҧсуа',
- 'ae' => 'Avesta',
- 'af' => 'Afrikaans',
- 'ak' => 'Akan',
- 'am' => 'አማርኛ',
- 'an' => 'Aragonés',
- 'ar' => 'العربية',
- 'as' => 'অসমীয়া',
- 'av' => 'авар мацӀ',
- 'ay' => 'Aymar aru',
- 'az' => 'Azərbaycan dili',
- 'ba' => 'башҡорт теле',
- 'be' => 'Беларуская',
- 'bg' => 'български',
- 'bh' => 'भोजपुरी',
- 'bi' => 'Bislama',
- 'bm' => 'Bamanankan',
- 'bn' => 'বাংলা',
- 'bo' => 'བོད་ཡིག',
- 'br' => 'Brezhoneg',
- 'bs' => 'Bosanski jezik',
- 'ca' => 'Català',
- 'ce' => 'нохчийн мотт',
- 'ch' => 'Chamoru',
- 'co' => 'Corsu',
- 'cr' => 'ᓀᐦᐃᔭᐍᐏᐣ',
- 'cs' => 'Česky',
- 'cu' => 'Словѣньскъ',
- 'cv' => 'чӑваш чӗлхи',
- 'cy' => 'Cymraeg',
- 'da' => 'Dansk',
- 'de' => 'Deutsch',
- 'dv' => 'ދިވެހި',
- 'dz' => 'རྫོང་ཁ',
- 'ee' => 'Ɛʋɛgbɛ',
- 'el' => 'Ελληνικά',
- 'en' => 'English',
- 'eo' => 'Esperanto',
- 'es' => 'Español',
- 'et' => 'Eesti keel',
- 'eu' => 'Euskara',
- 'fa' => 'فارسی',
- 'ff' => 'Fulfulde',
- 'fi' => 'Suomen kieli',
- 'fj' => 'Vosa Vakaviti',
- 'fo' => 'Føroyskt',
- 'fr' => 'Français',
- 'fy' => 'Frysk',
- 'ga' => 'Gaeilge',
- 'gd' => 'Gàidhlig',
- 'gl' => 'Galego',
- 'gn' => 'Avañe\'ẽ',
- 'gu' => 'ગુજરાતી',
- 'gv' => 'Ghaelg',
- 'ha' => 'هَوُسَ',
- 'he' => 'עברית',
- 'hi' => 'हिन्दी',
- 'ho' => 'Hiri Motu',
- 'hr' => 'Hrvatski',
- 'ht' => 'Kreyòl ayisyen',
- 'hu' => 'Magyar',
- 'hy' => 'Հայերեն',
- 'hz' => 'Otjiherero',
- 'ia' => 'Interlingua',
- 'id' => 'Bahasa',
- 'ie' => 'Interlingue',
- 'ig' => 'Igbo',
- 'ii' => 'ꆇꉙ',
- 'ik' => 'Iñupiaq',
- 'io' => 'Ido',
- 'is' => 'Íslenska',
- 'it' => 'Italiano',
- 'iu' => 'ᐃᓄᒃᑎᑐᑦ',
- 'ja' => '日本語',
- 'jv' => 'Basa Jawa',
- 'ka' => 'ქართული',
- 'kg' => 'KiKongo',
- 'ki' => 'Gĩkũyũ',
- 'kj' => 'Kuanyama',
- 'kk' => 'Қазақ тілі',
- 'kl' => 'Kalaallisut',
- 'km' => 'ភាសាខ្មែរ',
- 'kn' => 'ಕನ್ನಡ',
- 'ko' => '한 국어',
- 'kr' => 'Kanuri',
- 'ks' => 'कश्मीरी',
- 'ku' => 'Kurdî',
- 'kv' => 'коми кыв',
- 'kw' => 'Kernewek',
- 'ky' => 'кыргыз тили',
- 'la' => 'Latine',
- 'lb' => 'Lëtzebuergesch',
- 'lg' => 'Luganda',
- 'li' => 'Limburgs',
- 'ln' => 'Lingála',
- 'lo' => 'ພາສາລາວ',
- 'lt' => 'Lietuvių kalba',
- 'lu' => 'cilubà',
- 'lv' => 'Latviešu valoda',
- 'mg' => 'Fiteny malagasy',
- 'mh' => 'Kajin M̧ajeļ',
- 'mi' => 'Te reo Māori',
- 'mk' => 'македонски јазик',
- 'ml' => 'മലയാളം',
- 'mn' => 'Монгол',
- 'mo' => 'лимба молдовеняскэ',
- 'mr' => 'मराठी',
- 'ms' => 'Bahasa Melayu',
- 'mt' => 'Malti',
- 'my' => 'ဗမာစာ',
- 'na' => 'Ekakairũ Naoero',
- 'nb' => 'Norsk bokmål',
- 'nd' => 'isiNdebele',
- 'ne' => 'नेपाली',
- 'ng' => 'Owambo',
- 'nl' => 'Nederlands',
- 'nn' => 'Norsk nynorsk',
- 'no' => 'Norsk',
- 'nr' => 'Ndébélé',
- 'nv' => 'Diné bizaad',
- 'ny' => 'ChiCheŵa',
- 'oc' => 'Occitan',
- 'oj' => 'ᐊᓂᔑᓈᐯᒧᐎᓐ',
- 'om' => 'Afaan Oromoo',
- 'or' => 'ଓଡ଼ିଆ',
- 'os' => 'Ирон æвзаг',
- 'pa' => 'ਪੰਜਾਬੀ',
- 'pi' => 'पािऴ',
- 'pl' => 'Polski',
- 'ps' => 'پښتو',
- 'pt' => 'Português',
- 'pt-br' => 'Brasileiro',
- 'qu' => 'Runa Simi',
- 'rm' => 'Rumantsch grischun',
- 'rn' => 'kiRundi',
- 'ro' => 'Română',
- 'ru' => 'Русский',
- 'rw' => 'Kinyarwanda',
- 'sa' => 'संस्कृतम्',
- 'sc' => 'sardu',
- 'sd' => 'सिन्धी',
- 'se' => 'Davvisámegiella',
- 'sg' => 'Yângâ tî sängö',
- 'sh' => 'Српскохрватски',
- 'si' => 'සිංහල',
- 'sk' => 'Slovenčina',
- 'sl' => 'Slovenščina',
- 'sm' => 'Gagana fa\'a Samoa',
- 'sn' => 'chiShona',
- 'so' => 'Soomaaliga',
- 'sq' => 'Shqip',
- 'sr' => 'српски језик',
- 'ss' => 'SiSwati',
- 'st' => 'seSotho',
- 'su' => 'Basa Sunda',
- 'sv' => 'Svenska',
- 'sw' => 'Kiswahili',
- 'ta' => 'தமிழ்',
- 'te' => 'తెలుగు',
- 'tg' => 'тоҷикӣ',
- 'th' => 'ไทย',
- 'ti' => 'ትግርኛ',
- 'tk' => 'Türkmen',
- 'tl' => 'Tagalog',
- 'tn' => 'seTswana',
- 'to' => 'faka Tonga',
- 'tr' => 'Türkçe',
- 'ts' => 'xiTsonga',
- 'tt' => 'татарча',
- 'tw' => 'Twi',
- 'ty' => 'Reo Mā`ohi',
- 'ug' => 'Uyƣurqə',
- 'uk' => 'українська',
- 'ur' => 'اردو',
- 'uz' => 'O\'zbek',
- 've' => 'tshiVenḓa',
- 'vi' => 'Tiếng Việt',
- 'vo' => 'Volapük',
- 'wa' => 'Walon',
- 'wo' => 'Wollof',
- 'xh' => 'isiXhosa',
- 'yi' => 'ייִדיש',
- 'yo' => 'Yorùbá',
- 'za' => 'Saɯ cueŋƅ',
- 'zh' => '中文',
- 'zh-cn' => '中文简体',
- 'zh-tw' => '中文繁體',
- 'zu' => 'isiZulu'
- );
-
- if(isset($known[$code])) {
- return $known[$code];
- }
-
- return null;
-}
-
-// The function to know if a language is right-to-left
-function isRTL($code) {
- return (T_("default:LTR") == 'default:RTL');
-}
-
-// The function to set the good localized <html /> tag
-function htmlTag($locale) {
- // Initialize the tag
- $html = '<html xml:lang="'.$locale.'" lang="'.$locale.'" dir="';
-
- // Set the good text direction
- $html .= isRTL($locale) ? 'rtl' : 'ltr';
-
- // Close the tag
- $html .= '">';
-
- echo($html);
-}
-
-// The function which generates the available locales list
-function availableLocales($active_locale=null, $bypass_settings=false) {
- // Initialize
- $scan = scandir(JAPPIX_BASE.'/i18n/');
- $list = array();
-
- // Loop the available languages
- foreach($scan as $current_id) {
- // Pass?
- if(!$bypass_settings && LANGUAGE && LANGUAGE != 'all' && $current_id != LANGUAGE) {
- continue;
- }
-
- // Get the current language name
- $current_name = getLanguageName($current_id);
-
- // Not valid?
- if((strtolower($current_id) == $active_locale) || ($current_name == null)) {
- continue;
- }
-
- // Add this to the list
- $list[$current_id] = $current_name;
- }
-
- return $list;
-}
-
-// The function which generates the language switcher hidden part
-function languageSwitcher($active_locale) {
- // Initialize
- $keep_get = keepGet('l', false);
- $list = availableLocales($active_locale);
- $html = '';
-
- // Generate the HTML code
- foreach($list as $current_id => $current_name) {
- $html .= '<a href="./?l='.$current_id.$keep_get.'">'.htmlspecialchars($current_name).'</a>, ';
- }
-
- // Output the HTML code
- return $html;
-}
-
-// The function to generate a strong hash
-function genStrongHash($string) {
- // Initialize
- $i = 0;
-
- // Loop to generate a incredibly strong hash (can be a bit slow)
- while($i++ < 10) {
- $string = hash('sha256', $string);
- }
-
- return $string;
-}
-
-// The function to generate the version hash
-function genHash($version) {
- // Get the configuration files path
- $conf_path = JAPPIX_BASE.'/store/conf/';
- $conf_main = $conf_path.'main.xml';
- $conf_hosts = $conf_path.'hosts.xml';
- $conf_background = $conf_path.'background.xml';
- $logos_dir = JAPPIX_BASE.'/store/logos/';
-
- // Get the hash of the configuration files
- $hash_main = file_exists($conf_main) ? md5_file($conf_main) : '0';
- $hash_hosts = file_exists($conf_hosts) ? md5_file($conf_hosts) : '0';
- $hash_background = file_exists($conf_background) ? md5_file($conf_background) : '0';
-
- // Get the hash of the logos folder
- $hash_logos = '';
-
- if(is_dir($logos_dir)) {
- $logos_scan = scandir($logos_dir.'/');
-
- foreach($logos_scan as $logos_current) {
- if(getFileExt($logos_current) == 'png') {
- $hash_logos .= md5_file($logos_dir.$logos_current);
- }
- }
- }
-
- return md5($version.$hash_main.$hash_hosts.$hash_background.$hash_logos);
-}
-
-// The function to check BOSH proxy is enabled
-function BOSHProxy() {
- return (BOSH_PROXY == 'on');
-}
-
-// The function to check compression is enabled
-function hasCompression() {
- return (COMPRESSION != 'off');
-}
-
-// The function to check caching is enabled
-function hasCaching() {
- return (CACHING != 'off');
-}
-
-// The function to check compression is available with the current client
-function canCompress() {
- // Compression allowed by admin & browser?
- return (hasCompression() && (isset($_SERVER['HTTP_ACCEPT_ENCODING']) && substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')));
-}
-
-// The function to check whether to show manager link or not
-function showManagerLink() {
- return (MANAGER_LINK != 'off');
-}
-
-// The function to check HTTPS storage is allowed
-function httpsStorage() {
- return (HTTPS_STORAGE == 'on');
-}
-
-// The function to check HTTPS storage must be forced
-function httpsForce() {
- return ((HTTPS_FORCE == 'on') && sslCheck());
-}
-
-// The function to check we use HTTPS
-function useHttps() {
- return (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on'));
-}
-
-// The function to compress the output pages
-function compressThis() {
- if(canCompress() && !isDeveloper()) {
- ob_start('ob_gzhandler');
- }
-}
-
-// The function to choose one file get with get.php or a liste of resources
-function multiFiles() {
- return (MULTI_FILES == 'on');
-}
-
-// Normalizes file type into internal storage representation
-function normalizeFileType($type) {
- $map = array(
- 'css' => 'stylesheets',
- 'js' => 'javascripts',
- 'img' => 'images',
- 'snd' => 'sounds',
- 'fonts' => 'fonts'
- );
-
- if(isset($map[$type])) {
- return $map[$type];
- }
-
- return $type;
-}
-
-function getFiles($h, $l, $t, $g, $f) {
- // Define the good path to the Get API
- if(isStaticURL()) {
- $path_to = staticLocation();
- } else {
- $path_to = hasStatic() ? HOST_STATIC.'/' : JAPPIX_BASE.'/';
- }
-
- if(!multiFiles()) {
- $values = array();
-
- if($h) {
- $values[] = 'h='.$h;
- }
-
- if($l) {
- $values[] = 'l='.$l;
- }
-
- if($t) {
- $values[] = 't='.$t;
- }
-
- if($g) {
- $values[] = 'g='.$g;
- }
-
- if($f) {
- $values[] = 'f='.$f;
- }
-
- return $path_to.'server/get.php?'.implode('&amp;', $values);
- }
-
- if($g && !empty($g) && preg_match('/^(\S+)\.xml$/', $g) && preg_match('/^(css|js)$/', $t) && isSafe($g) && file_exists('bundles/'.$g)) {
- $xml_data = file_get_contents('bundles/'.$g);
-
- // Any data?
- if($xml_data) {
- $xml_read = new SimpleXMLElement($xml_data);
- $xml_parse = $xml_read->$t;
-
- // Files were added to the list before (with file var)?
- if($f) {
- $f .= '~'.$xml_parse;
- } else {
- $f = $xml_parse;
- }
- }
- }
-
- // Explode the f string
- if(strpos($f, '~') !== false) {
- $array = explode('~', $f);
- } else {
- $array = array($f);
- }
-
- $a = array();
- foreach($array as $file) {
- $a[] = $path_to.$t.'/'.$file;
- }
-
- if(count($a) === 1) {
- return $a[0];
- }
-
- return $a;
-}
-
-function echoGetFiles($h, $l, $t, $g, $f) {
- if($t == 'css') {
- $pattern = '<link rel="stylesheet" href="%s" type="text/css" media="all" />';
- } else if($t == 'js') {
- $pattern = '<script type="text/javascript" src="%s"></script>';
- }
-
- $files = getFiles($h, $l, $t, $g, $f);
-
- if(is_string($files)) {
- printf($pattern, $files);
- } else {
- $c = count($files)-1;
- for($i=0; $i<=$c; $i++) {
- if ($i)
- echo ' ';
- printf($pattern, $files[$i]);
- if ($i != $c)
- echo "\n";
- }
- }
-}
-
-// The function to check if anonymous mode is authorized
-function anonymousMode() {
- return (isset($_GET['r']) && !empty($_GET['r']) && HOST_ANONYMOUS && (ANONYMOUS == 'on'));
-}
-
-// Returns the authentication headers
-function authHeaders() {
- $auth = array(
- 'user' => null,
- 'password' => null
- );
-
- if(isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
- $auth['user'] = $_SERVER['PHP_AUTH_USER'];
- $auth['password'] = $_SERVER['PHP_AUTH_PW'];
- } else if(isset($_SERVER['HTTP_AUTH_USER']) && isset($_SERVER['HTTP_AUTH_PASSWORD'])) {
- $auth['user'] = $_SERVER['HTTP_AUTH_USER'];
- $auth['password'] = $_SERVER['HTTP_AUTH_PASSWORD'];
- }
-
- return $auth;
-}
-
-// The function to check if HTTP authentication is authorized and possible
-function httpAuthEnabled() {
- $auth = authHeaders();
- return (($auth['user'] !== null) && ($auth['password'] !== null) && (HTTP_AUTH == 'on'));
-}
-
-// The function to authenticate with HTTP
-function httpAuthCredentials() {
- $auth = authHeaders();
-
- if(isset($_SERVER['HTTP_EMAIL'])) {
- $user = strstr($_SERVER['HTTP_EMAIL'], "@", true);
- $host = substr(strrchr($_SERVER['HTTP_EMAIL'], "@"), 1);
- } else {
- $user = $auth['user'];
- $host = HOST_MAIN;
- }
-
- return array(
- 'user' => $user,
- 'password' => $auth['password'],
- 'host' => $host
- );
-}
-
-// The function to authenticate with HTTP
-function httpAuthentication() {
- $auth = httpAuthCredentials();
-
- echo '<script type="text/javascript">
- jQuery(document).ready(function() {
- HTTPAuth.go('.json_encode($auth['user']).', '.json_encode($auth['password']).', '.json_encode($auth['host']).', 10);
- });
- </script>';
-}
-
-// The function to quickly translate a string
-function _e($string) {
- echo T_gettext($string);
-}
-
-// The function to check the encrypted mode
-function sslCheck() {
- return (ENCRYPTION == 'on');
-}
-
-// The function to return the encrypted link
-function sslLink() {
- if(isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on')) {
- // Using HTTPS
- $link = '<a class="home-images unencrypted" href="http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'"><span class="vert_center">'.T_('Unencrypted').'</span></a>';
- } else {
- // Using HTTP
- $link = '<a class="home-images encrypted" href="https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'"><span class="vert_center">'.T_('Encrypted').'</span></a>';
- }
-
- return $link;
-}
-
-// The function to get the Jappix static URL
-function isStaticURL() {
- return preg_match('/((.+)\/)(server|php)\/get\.php(\S)+$/', staticURL()) && true;
-}
-
-// The function to get the Jappix static URL
-function staticURL() {
- if(hasStatic()) {
- // Static URL in hosts.xml
- $url = HOST_STATIC.$_SERVER['REQUEST_URI'];
- } else {
- // Check for HTTPS
- $protocol = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on') ? 'https' : 'http';
-
- // Check for port
- $port_section = null;
- $port_value = isset($_SERVER['SERVER_PORT']) && is_numeric($_SERVER['SERVER_PORT']) ? intval($_SERVER['SERVER_PORT']) : null;
-
- if(($port_value != null) && (($protocol == 'http') && ($port_value != 80)) || (($protocol == 'https') && ($port_value != 443))) {
- $port_section = ':'.$port_value;
- }
-
- // Full URL
- $url = $protocol.'://'.$_SERVER['HTTP_HOST'].$port_section.$_SERVER['REQUEST_URI'];
- }
-
- return $url;
-}
-
-// The function to get the Jappix location (only from Get API!)
-function staticLocation() {
- // Filter the URL
- return preg_replace('/((.+)\/)(server|php)\/get\.php(\S)+$/', '$1', staticURL());
-}
-
-// The function to include a translation file
-function includeTranslation($locale, $domain) {
- T_setlocale(LC_MESSAGES, $locale);
- T_bindtextdomain($domain, JAPPIX_BASE.'/i18n');
- T_bind_textdomain_codeset($domain, 'UTF-8');
- T_textdomain($domain);
-}
-
-// The function to check the cache presence
-function hasCache($hash) {
- return (file_exists(JAPPIX_BASE.'/tmp/cache/'.$hash.'.cache'));
-}
-
-// The function to check if developer mode is enabled
-function isDeveloper() {
- return (DEVELOPER == 'on');
-}
-
-// The function to get a file extension
-function getFileExt($name) {
- return strtolower(preg_replace('/^(.+)(\.)([^\.]+)$/i', '$3', $name));
-}
-
-// The function to get a file type
-function getFileType($ext) {
- switch($ext) {
- // Images
- case 'jpg':
- case 'jpeg':
- case 'png':
- case 'bmp':
- case 'gif':
- case 'tif':
- case 'tiff':
- case 'svg':
- case 'ico':
- case 'psp':
- case 'psd':
- case 'psb':
- case 'xcf':
- $file_type = 'image';
-
- break;
-
- // Videos
- case 'ogv':
- case 'mkv':
- case 'avi':
- case 'mov':
- case 'mp4':
- case 'm4v':
- case 'wmv':
- case 'asf':
- case 'mpg':
- case 'mpeg':
- case 'ogm':
- case 'rmvb':
- case 'rmv':
- case 'qt':
- case 'flv':
- case 'ram':
- case '3gp':
- case 'avc':
- $file_type = 'video';
-
- break;
-
- // Sounds
- case 'oga':
- case 'ogg':
- case 'mka':
- case 'flac':
- case 'mp3':
- case 'wav':
- case 'm4a':
- case 'wma':
- case 'rmab':
- case 'rma':
- case 'bwf':
- case 'aiff':
- case 'caf':
- case 'cda':
- case 'atrac':
- case 'vqf':
- case 'au':
- case 'aac':
- case 'm3u':
- case 'mid':
- case 'mp2':
- case 'snd':
- case 'voc':
- $file_type = 'audio';
-
- break;
-
- // Documents
- case 'pdf':
- case 'odt':
- case 'ott':
- case 'sxw':
- case 'stw':
- case 'ots':
- case 'sxc':
- case 'stc':
- case 'sxi':
- case 'sti':
- case 'pot':
- case 'odp':
- case 'ods':
- case 'doc':
- case 'docx':
- case 'docm':
- case 'xls':
- case 'xlsx':
- case 'xlsm':
- case 'xlt':
- case 'ppt':
- case 'pptx':
- case 'pptm':
- case 'pps':
- case 'odg':
- case 'otp':
- case 'sxd':
- case 'std':
- case 'std':
- case 'rtf':
- case 'txt':
- case 'htm':
- case 'html':
- case 'shtml':
- case 'dhtml':
- case 'mshtml':
- $file_type = 'document';
-
- break;
-
- // Packages
- case 'tgz':
- case 'gz':
- case 'tar':
- case 'ar':
- case 'cbz':
- case 'jar':
- case 'tar.7z':
- case 'tar.bz2':
- case 'tar.gz':
- case 'tar.lzma':
- case 'tar.xz':
- case 'zip':
- case 'xz':
- case 'rar':
- case 'bz':
- case 'deb':
- case 'rpm':
- case '7z':
- case 'ace':
- case 'cab':
- case 'arj':
- case 'msi':
- $file_type = 'package';
-
- break;
-
- // Others
- default:
- $file_type = 'other';
-
- break;
- }
-
- return $file_type;
-}
-
-// The function to get the MIME type of a file
-function getFileMIME($path) {
- $finfo = finfo_open(FILEINFO_MIME_TYPE);
- $cmime = finfo_file($finfo, $path);
- finfo_close($finfo);
-
- return $cmime;
-}
-
-// The function to keep the current GET vars
-function keepGet($current, $no_get) {
- // Get the HTTP GET vars
- $request = $_SERVER['REQUEST_URI'];
-
- if(strrpos($request, '?') === false) {
- $get = '';
- } else {
- $uri = explode('?', $request);
- $get = $uri[1];
- }
-
- // We now sanitize get variables
- $sanitized = preg_split('/[&]/', preg_replace("/(^&)/", "", $get));
- foreach($sanitized as &$get_var) {
- $get_var = preg_replace_callback(
- '/^(.*=)(.+)$/',
- function($m) { $data = htmlentities(urldecode($m[2])); return '&' . htmlentities($m[1]) . urlencode($data); },
- $get_var
- );
- }
-
- // Merge the sanitized array
- $proper = '';
- foreach($sanitized as &$get_var) {
- $proper = $proper.$get_var;
- }
-
- // Remove the items we don't want here
- $proper = str_replace('&', '&amp;', $proper);
- $proper = preg_replace('/((^)|(&amp;))(('.$current.'=)([^&]+))/i', '', $proper);
-
- // Nothing at the end?
- if(!$proper) {
- return '';
- }
-
- // We have no defined GET var
- if($no_get) {
- // Remove the first "&" if it appears
- if(preg_match('/^(&(amp;)?)/i', $proper)) {
- $proper = preg_replace('/^(&(amp;)?)/i', '', $proper);
- }
-
- // Add the first "?"
- $proper = '?'.$proper;
- }
-
- // Add a first "&" if there is no one and no defined GET var
- else if(!$no_get && (substr($proper, 0, 1) != '&') && (substr($proper, 0, 5) != '&amp;')) {
- $proper = '&amp;'.$proper;
- }
-
- return $proper;
-}
-
-// Escapes regex special characters for in-regex usage
-function escapeRegex($string) {
- return preg_replace('/[-[\]{}()*+?.,\\^$|#]/', '\\$&', $string);
-}
-
-// Generates the security HTML code
-function securityHTML() {
- return '<!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <title>Jappix - Forbidden</title>
-</head>
-
-<body>
- <h1>Forbidden</h1>
- <h4>This is a private folder</h4>
-</body>
-
-</html>';
-}
-
-// Checks if a relative server path is safe
-function isSafe($path) {
- return !preg_match('/^\//', $path) && # Absolute path (forbidden)
- !preg_match('/\.\.\//', $path) && # Previous directory (forbidden)
- !preg_match('/[[:cntrl:]]/', $path); # Control characters (forbidden)
-}
-
-// Checks if a relative server path is safe
-function isAllowedExt($path) {
- $safe_files = array(
- 'txt', 'md', # Text
- 'zip', 'tar', 'tar.gz', 'tar.bz2', 'tar.xz', 'tar.7z', # Archive
- 'tgz', 'gz', 'bz2', 'xz', 'rar', '7z', # Archive
- 'jpg', 'jpeg', 'png', 'bmp', 'gif', 'tiff', 'tif', 'ico', # Image
- 'psd', 'psp', 'psb', 'xcf', # Image (layered)
- 'mp3', 'mp4', 'ogg', 'oga', 'ogv', 'mov', 'mpeg', 'm4a', # Audio
- 'flv', 'avi', 'asf', 'wav', 'cda', 'midi', 'aac', 'wma', 'wmv', 'mkv', 'webm', 'm3u', # Video
- 'odt', 'ods', 'odp', # Document (open)
- 'doc', 'xls', 'xlt', 'csv', 'pps', 'ppt', # Document (closed)
- 'docx', 'xlsx', 'ppsx', 'pptx', 'pot', 'potx', 'xml', 'pdf', 'dotx', # Document (closed)
- 'dot', 'rtf', # Document (closed)
- 'htm', 'html', # Web
- 'ai', 'svg', # Vectors
- 'ttf', 'otf', 'woff', 'eot', # Fonts
- 'deb', 'rpm' # Packages
- );
-
- // Check file is allowed
- foreach($safe_files as $c_ext) {
- if(preg_match('/\.'.$c_ext.'$/', $path)) {
- return true;
- }
- }
-
- return false;
-}
-
-// Check if file path is safe and its ext is allowed
-function isSafeAllowed($path) {
- return isSafe($path) && isAllowedExt($path);
-}
-
-// Set the good unity for a size in bytes
-function formatBytes($bytes, $precision = 2) {
- $units = array('B', 'KB', 'MB', 'GB', 'TB');
-
- $bytes = max($bytes, 0);
- $pow = floor(($bytes ? log($bytes) : 0) / log(1024));
- $pow = min($pow, count($units) - 1);
-
- $bytes /= pow(1024, $pow);
-
- return round($bytes, $precision) . ' ' . $units[$pow];
-}
-
-// Converts a human-readable bytes value to a computer one
-function humanToBytes($string) {
- // Values array
- $values = array(
- 'K' => '000',
- 'M' => '000000',
- 'G' => '000000000',
- 'T' => '000000000000',
- 'P' => '000000000000000',
- 'E' => '000000000000000000',
- 'Z' => '000000000000000000000',
- 'Y' => '000000000000000000000000'
- );
-
- // Filter the string
- foreach($values as $key => $zero) {
- $string = str_replace($key, $zero, $string);
- }
-
- // Converts the string into an integer
- $string = intval($string);
-
- return $string;
-}
-
-// Get the maximum file upload size
-function uploadMaxSize() {
- // Not allowed to upload files?
- if(ini_get('file_uploads') != 1) {
- return 0;
- }
-
- // Upload maximum file size
- $upload = humanToBytes(ini_get('upload_max_filesize'));
-
- // POST maximum size
- $post = humanToBytes(ini_get('post_max_size'));
-
- // Return the lowest value
- if($upload <= $post) {
- return $upload;
- }
-
- return $post;
-}
-
-// Normalizes special chars
-function normalizeChars($string) {
- $table = array(
- 'Š'=>'S', 'š'=>'s', 'Đ'=>'Dj', 'đ'=>'dj', 'Ž'=>'Z', 'ž'=>'z', 'Č'=>'C', 'č'=>'c', 'Ć'=>'C', 'ć'=>'c',
- 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
- 'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O',
- 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss',
- 'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e',
- 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o',
- 'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b',
- 'ÿ'=>'y', 'Ŕ'=>'R', 'ŕ'=>'r'
- );
-
- return strtr($string, $table);
-}
-
-// Filters the XML special chars for the SVG drawer
-function filterSpecialXML($string) {
- // Strange thing: when $string = 'Mises à jour' -> bug! but 'Mise à jour' -> ok!
- $string = normalizeChars($string);
-
- // Encodes with HTML special chars
- $string = htmlspecialchars($string);
-
- return $string;
-}
-
-// Writes the current visit in the total file
-function writeTotalVisit() {
- // Get the current time stamp
- $stamp = time();
-
- // Initialize the defaults
- $array = array(
- 'total' => 0,
- 'stamp' => $stamp
- );
-
- // Try to read the saved data
- $total_data = readXML('access', 'total');
-
- // Get the XML file values
- if($total_data) {
- // Initialize the visits reading
- $read_xml = new SimpleXMLElement($total_data);
-
- // Loop the visit elements
- foreach($read_xml->children() as $current_child) {
- $array[$current_child->getName()] = intval((string)$current_child);
- }
- }
-
- // Increment the total number of visits
- $array['total']++;
-
- // Generate the new XML data
- $total_xml =
- '<total>'.$array['total'].'</total>
- <stamp>'.$array['stamp'].'</stamp>'
- ;
-
- // Re-write the new values
- writeXML('access', 'total', $total_xml);
-}
-
-// Writes the current visit in the months file
-function writeMonthsVisit() {
- // Get the current month
- $month = intval(date('m'));
-
- // Define the stats array
- $array = array();
-
- if($month <= 8) {
- // January to August period
- for($i = 1; $i <= 8; $i++) {
- $array['month_'.$i] = 0;
- }
- } else {
- // August to September period
- $i = 8;
- $j = 1;
-
- while($j <= 3) {
- if(($i >= 8) && ($i <= 12)) {
- // Last year months
- $array['month_'.$i++] = 0;
- } else {
- // First year months
- $array['month_'.$j++] = 0;
- }
- }
- }
-
- // Try to read the saved data
- $months_data = readXML('access', 'months');
-
- // Get the XML file values
- if($months_data) {
- // Initialize the visits reading
- $read_xml = new SimpleXMLElement($months_data);
-
- // Loop the visit elements
- foreach($read_xml->children() as $current_child) {
- $current_month = $current_child->getName();
-
- // Parse the current month id
- $current_id = intval(preg_replace('/month_([0-9]+)/i', '$1', $current_month));
-
- // Is this month still valid?
- if((($month <= 8) && ($current_id <= $month)) || (($month >= 8) && ($current_id >= 8) && ($current_id <= $month))) {
- $array[$current_month] = intval((string)$current_child);
- }
- }
- }
-
- // Increment the current month value
- $array['month_'.$month]++;
-
- // Generate the new XML data
- $months_xml = '';
-
- foreach($array as $array_key => $array_value) {
- $months_xml .= "\n".' <'.$array_key.'>'.$array_value.'</'.$array_key.'>';
- }
-
- // Re-write the new values
- writeXML('access', 'months', $months_xml);
-}
-
-// Writes the current visit to the storage file
-function writeVisit() {
- // Write total visits
- writeTotalVisit();
-
- // Write months visits
- writeMonthsVisit();
-}
-
-// Returns the default background array
-function defaultBackground() {
- // Define the default values
- $background_default = array(
- 'type' => 'default',
- 'image_file' => '',
- 'image_repeat' => 'repeat-x',
- 'image_horizontal' => 'center',
- 'image_vertical' => 'top',
- 'image_adapt' => 'off',
- 'image_color' => '#cae1e9',
- 'color_color' => '#cae1e9'
- );
-
- return $background_default;
-}
-
-// Reads the notice configuration
-function readNotice() {
- // Read the notice configuration XML
- $notice_data = readXML('conf', 'notice');
-
- // Define the default values
- $notice_default = array(
- 'type' => 'none',
- 'notice' => ''
- );
-
- // Stored data array
- $notice_conf = array();
-
- // Read the stored values
- if($notice_data) {
- // Initialize the notice configuration XML data
- $notice_xml = new SimpleXMLElement($notice_data);
-
- // Loop the notice configuration elements
- foreach($notice_xml->children() as $notice_child) {
- $notice_conf[$notice_child->getName()] = utf8_decode((string)$notice_child);
- }
- }
-
- // Checks no value is missing in the stored configuration
- foreach($notice_default as $notice_name => $notice_value) {
- if(!isset($notice_conf[$notice_name]) || empty($notice_conf[$notice_name])) {
- $notice_conf[$notice_name] = $notice_default[$notice_name];
- }
- }
-
- return $notice_conf;
-}
-
-// The function to get the admin users
-function getUsers() {
- // Try to read the XML file
- $data = readXML('conf', 'users');
- $array = array();
-
- // Any data?
- if($data) {
- $read = new SimpleXMLElement($data);
-
- // Check the submitted user exists
- foreach($read->children() as $child) {
- // Get the node attributes
- $attributes = $child->attributes();
-
- // Push the attributes to the global array (converted into strings)
- $array[$attributes['name'].''] = $attributes['password'].'';
- }
- }
-
- return $array;
-}
-
-// Manages users
-function manageUsers($action, $array) {
- // Try to read the old XML file
- $users_array = getUsers();
-
- // What must we do?
- switch($action) {
- // Add some users
- case 'add':
- foreach($array as $array_user => $array_password) {
- $users_array[$array_user] = genStrongHash($array_password);
- }
-
- break;
-
- // Remove some users
- case 'remove':
- foreach($array as $array_user) {
- // Not the last user?
- if(count($users_array) > 1) {
- unset($users_array[$array_user]);
- }
- }
-
- break;
- }
-
- // Regenerate the XML
- $users_xml = '';
-
- foreach($users_array as $users_name => $users_password) {
- $users_xml .= "\n".' <user name="'.stripslashes(htmlspecialchars($users_name)).'" password="'.stripslashes($users_password).'" />';
- }
-
- // Write the main configuration
- writeXML('conf', 'users', $users_xml);
-}
-
-// Resize an image with GD
-function resizeImage($path, $ext, $width, $height, $mode = 'default') {
- // No GD?
- if(!function_exists('gd_info')) {
- return false;
- }
-
- try {
- // Initialize GD
- switch($ext) {
- case 'png':
- $img_resize = imagecreatefrompng($path); break;
- case 'gif':
- $img_resize = imagecreatefromgif($path); break;
- default:
- $img_resize = imagecreatefromjpeg($path);
- }
-
- // Get the image size
- $img_size = getimagesize($path);
- $img_width = $img_size[0];
- $img_height = $img_size[1];
- $new_x = 0;
- $new_y = 0;
-
- // Check if we need to generate a square
- if(($mode == 'square') && ($img_width != $img_height) && ($width == $height)) {
- $square = true;
- } else {
- $square = false;
- }
-
- // Necessary to change the image width
- if(($img_width > $width) && ($img_width > $img_height)) {
- // Process the new sizes
- $new_width = $width;
- $img_process = (($new_width * 100) / $img_width);
- $new_height = (($img_height * $img_process) / 100);
-
- // Process square size
- if($square) {
- $new_x = ceil(($img_width - $img_height) / 2);
- $square_width = $img_height;
- $square_height = $img_height;
- }
- }
-
- // Necessary to change the image height
- else if(($img_height > $height) && ($img_width < $img_height)) {
- // Process the new sizes
- $new_height = $height;
- $img_process = (($new_height * 100) / $img_height);
- $new_width = (($img_width * $img_process) / 100);
-
- // Process square size
- if($square) {
- $square_width = $img_width;
- $square_height = $img_width;
- }
- }
-
- // Else, just use the old sizes
- else {
- $new_width = $img_width;
- $new_height = $img_height;
-
- // Process square size
- if($square) {
- if($img_height < $img_width) {
- $new_x = ceil(($img_width - $img_height) / 2);
- $square_width = $img_height;
- $square_height = $img_height;
- } else {
- $square_width = $img_width;
- $square_height = $img_width;
- }
- }
- }
-
- // Re-create image in case of square
- if($square) {
- // Select a square of the full image
- $square_img = imagecreatetruecolor($square_width, $square_height);
- imagecopy($square_img, $img_resize, 0, 0, $new_x, $new_y, $square_width, $square_height);
-
- // Re-set image width & height with square ones
- $img_width = $square_width;
- $img_height = $square_height;
-
- $new_width = $width;
- $new_height = $height;
-
- // Re-set resized image
- unset($img_resize);
- $img_resize = $square_img;
- }
-
- // Create the new image
- $new_img = imagecreatetruecolor($new_width, $new_height);
-
- // Must keep alpha pixels?
- if(($ext == 'png') || ($ext == 'gif')) {
- $current_transparent = imagecolortransparent($img_resize);
-
- if($current_transparent != -1) {
- $transparent_color = imagecolorsforindex($img_resize, $current_transparent);
-
- $current_transparent = imagecolorallocate(
- $new_img,
- $transparent_color['red'],
- $transparent_color['green'],
- $transparent_color['blue']
- );
-
- imagefill($new_img, 0, 0, $current_transparent);
- imagecolortransparent($new_img, $current_transparent);
- } elseif($ext == 'png') {
- imagealphablending($new_img, false);
- $color = imagecolorallocatealpha($new_img, 0, 0, 0, 127);
-
- imagefill($new_img, 0, 0, $color);
- imagesavealpha($new_img, true);
- }
- }
-
- // Copy the new image
- imagecopyresampled($new_img, $img_resize, 0, 0, 0, 0, $new_width, $new_height, $img_width, $img_height);
-
- // Destroy the old data
- imagedestroy($img_resize);
- unlink($path);
-
- // Write the new image
- switch($ext) {
- case 'png':
- imagepng($new_img, $path);
- break;
-
- case 'gif':
- imagegif($new_img, $path);
- break;
-
- default:
- imagejpeg($new_img, $path, 85);
- }
-
- return true;
- }
-
- catch(Exception $e) {
- return false;
- }
-}
-
-// Hides error messages
-function hideErrors() {
- // Hide errors if not developer
- if(!isDeveloper()) {
- ini_set('display_errors', 0);
- ini_set('error_reporting', E_WARNING);
- } else {
- ini_set('display_errors', 1);
- ini_set('error_reporting', E_ALL);
- }
-
- // Force timezone (avoids getting warnings on some PHP setups)
- date_default_timezone_set(@date_default_timezone_get());
-}
-
-// Handles errors (to be appended in log file)
-function handleError($errno, $errstr, $errfile, $errline) {
- // Error code is not included in error_reporting?
- if(!(error_reporting() & $errno)) {
- return;
- }
-
- // Generate error message
- $error_ns = 'INFO';
- $error_date = date('Y-m-d H:i:s');
-
- switch($errno) {
- case E_ERROR:
- $error_ns = 'ERROR';
- break;
-
- case E_WARNING:
- $error_ns = 'WARNING';
- break;
-
- case E_NOTICE:
- $error_ns = 'NOTICE';
- break;
- }
-
- $error_message = '['.$error_ns.' @ '.$errfile.':'.$errline.'] '.$error_date.' >> '.$errstr.PHP_EOL;
-
- // Write message to log file
- $log_path = JAPPIX_BASE.'/log/server.log';
- file_put_contents($log_path, $error_message, FILE_APPEND);
-
- return false;
-}
-
-// Handles fatal errors
-function handleFatal() {
- $error = error_get_last();
-
- if($error['type'] == E_ERROR) {
- handleError($error['type'], $error['message'], $error['file'], $error['line']);
- }
-}
-
-// Enables the error sink
-function enableErrorSink() {
- set_error_handler('handleError');
- register_shutdown_function('handleFatal');
-}
-
-?>
diff --git a/server/generate-chat.php b/server/generate-chat.php
deleted file mode 100644
index 1a070af0..00000000
--- a/server/generate-chat.php
+++ /dev/null
@@ -1,259 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the PHP script used to generate a chat log
-
--------------------------------------------------
-
-License: AGPL
-Authors: Valérian Saliou, regilero
-
-*/
-
-// PHP base
-define('JAPPIX_BASE', '..');
-
-// Get the needed files
-require_once('./functions.php');
-require_once('./read-main.php');
-require_once('./read-hosts.php');
-
-// Prepare application
-enableErrorSink();
-hideErrors();
-compressThis();
-
-// Not allowed for a special node
-if(isStatic() || isUpload()) {
- exit;
-}
-
-// Create the HTML file to be downloaded
-if(isset($_POST['content']) && isset($_POST['xid']) && !empty($_POST['xid']) && isset($_POST['nick']) && !empty($_POST['nick']) && isset($_POST['avatar']) && !empty($_POST['avatar']) && isset($_POST['date']) && !empty($_POST['date']) && isset($_POST['type']) && !empty($_POST['type'])) {
- // Get the POST vars
- $original = $_POST['content'];
- $xid = $_POST['xid'];
- $nick = $_POST['nick'];
- $avatar = $_POST['avatar'];
- $date = $_POST['date'];
- $type = $_POST['type'];
- $direction = $_POST['direction'];
-
- // Generate the XID link
- $xid_link = 'xmpp:'.$xid;
-
- if($type == 'groupchat') {
- $xid_link .= '?join';
- }
-
- // Generates the avatar code
- if($avatar != 'none') {
- $avatar = '<div class="avatar-container">'.$avatar.'</div>';
- } else {
- $avatar = '';
- }
-
- // Filter direction
- if($direction != 'rtl') {
- $direction = 'ltr';
- }
-
- // Generates an human-readable date
- $date = explode('T', $date);
- $date = explode('-', $date[0]);
- $date = $date[2].'/'.$date[1].'/'.$date[0];
-
- // Generate some values
- $content_dir = '../tmp/archives/';
- $filename = 'jappix-chat-'.md5($xid.time());
- $filepath = $content_dir.$filename.'.html';
-
- // Generate Jappix logo Base64 code
- $logo = base64_encode(file_get_contents(JAPPIX_BASE.'/app/images/sprites/archives.png'));
-
- // Create the HTML code
- $new_text_inter =
-'<!DOCTYPE html>
-<html dir="'.$direction.'">
-
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <title>'.$nick.' ('.$xid.')</title>
- <style type="text/css">
- * {
- margin: 0;
- padding: 0;
- }
-
- body {
- background-color: #424242;
- font-family : Verdana, Arial, Helvetica, sans-serif;
- font-size: 0.8em;
- text-shadow: 0 0 5px white;
- color: white;
- margin: 8px;
- padding: 8px 12px;
- }
-
- a {
- color: white;
- }
-
- #head {
-
- }
-
- #head .avatar-container {
- text-align: center;
- height: 70px;
- width: 70px;
- margin-right: 18px;
- float: left;
- }
-
- html[dir="rtl"] #head .avatar-container {
- margin-left: 18px;
- margin-right: 0;
- float: right;
- }
-
- #head .avatar {
- max-height: 70px;
- max-width: 70px;
- }
-
- #head h1 {
- font-size: 2.2em;
- margin: 0;
- text-shadow: 1px 1px 1px black;
- }
-
- #head h3 {
- font-size: 0.95em;
- margin: 0;
- }
-
- #head h5 {
- font-size: 0.9em;
- margin: 8px 0 16px 0;
- }
-
- #head h3,
- #head h5 {
- text-shadow: 0 0 1px black;
- }
-
- #head a.logo {
- position: absolute;
- top: 16px;
- right: 20px;
- }
-
- html[dir="rtl"] #head a.logo {
- left: 20px;
- right: auto;
- }
-
- #content {
- background-color: #e8f1f3;
- color: black;
- padding: 14px 18px;
- border-radius: 4px;
- clear: both;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- box-shadow: 0 0 20px #202020;
- -moz-box-shadow: 0 0 20px #202020;
- -webkit-box-shadow: 0 0 20px #202020;
- }
-
- #content a {
- color: black;
- }
-
- #content .one-group {
- border-bottom: 1px dotted #d0d0d0;
- padding-bottom: 8px;
- margin-bottom: 10px;
- }
-
- #content .one-group b.name {
- display: block;
- margin-bottom: 4px;
- }
-
- #content .one-group b.name.me {
- color: #123a5c;
- }
-
- #content .one-group b.name.him {
- color: #801e1e;
- }
-
- #content .one-group span.date {
- font-size: 0.9em;
- float: right;
- }
-
- html[dir="rtl"] #content .one-group span.date {
- float: left;
- }
-
- #content .user-message {
- margin-bottom: 3px;
- }
-
- #content .system-message {
- color: #053805;
- margin-bottom: 3px;
- padding-left: 0 !important;
- }
-
- #content .system-message a {
- color: #053805;
- }
-
- .hidden {
- display: none !important;
- }
- </style>
-</head>
-
-<body>
- <div id="head">
- '.$avatar.'
-
- <h1>'.$nick.'</h1>
- <h3><a href="'.$xid_link.'">'.$xid.'</a></h3>
- <h5>'.$date.'</h5>
-
- <a class="logo" href="https://jappix.org/" target="_blank">
- <img src="data:image/png;base64,'.$logo.'" alt="" />
- </a>
- </div>
-
- <div id="content">
- '.$original.'
- </div>
-</body>
-</html>'
-;
-
- $new_text = stripslashes($new_text_inter);
-
- // Write the code into a file
- file_put_contents($filepath, $new_text, LOCK_EX);
-
- // Security: remove the file and stop the script if too bit (+6MiB)
- if(filesize($filepath) > 6000000) {
- unlink($filepath);
- exit;
- }
-
- // Return to the user the generated file ID
- exit($filename);
-}
-
-?>
diff --git a/server/geolocation.php b/server/geolocation.php
deleted file mode 100644
index 2597dd9a..00000000
--- a/server/geolocation.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the Jappix geolocation script
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// PHP base
-define('JAPPIX_BASE', '..');
-
-// Get the needed files
-require_once('./functions.php');
-require_once('./read-main.php');
-require_once('./read-hosts.php');
-
-// Prepare application
-enableErrorSink();
-hideErrors();
-compressThis();
-
-// Not allowed for a special node
-if(isStatic() || isUpload()) {
- exit;
-}
-
-// If valid data was sent
-if((isset($_GET['latitude']) && !empty($_GET['latitude'])) && (isset($_GET['longitude']) && !empty($_GET['longitude'])) && (isset($_GET['language']) && !empty($_GET['language']))) {
- // Set a XML header
- header('Content-Type: text/xml; charset=utf-8');
-
- // Get the XML content
- $xml = readUrl('http://maps.googleapis.com/maps/api/geocode/xml?latlng='.urlencode($_GET['latitude']).','.urlencode($_GET['longitude']).'&language='.urlencode($_GET['language']).'&sensor=true');
-
- exit($xml);
-}
-
-?>
diff --git a/server/get-store.php b/server/get-store.php
deleted file mode 100644
index d71e28cb..00000000
--- a/server/get-store.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the store configuration GET handler (manager)
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-// Purge requested
-if(isset($_GET['p']) && preg_match('/^((everything)|(cache)|(archives)|(send)|(updates))$/', $_GET['p'])) {
- purgeFolder($_GET['p']);
-?>
-
- <p class="info smallspace success"><?php _e("The storage folder you wanted to clean is now empty!"); ?></p>
-
-<?php }
-
-// Folder view?
-if(isset($_GET['b']) && isset($_GET['s'])) {
- if($_GET['b'] == 'share') {
- $share_folder = urldecode($_GET['s']);
- } else if($_GET['b'] == 'music') {
- $music_folder = urldecode($_GET['s']);
- }
-}
-
-?>
diff --git a/server/get.php b/server/get.php
deleted file mode 100644
index ed51041e..00000000
--- a/server/get.php
+++ /dev/null
@@ -1,422 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the file get script
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// PHP base
-define('JAPPIX_BASE', '..');
-
-// We get the needed files
-require_once('./functions.php');
-require_once('./functions-get.php');
-require_once('./read-main.php');
-require_once('./read-hosts.php');
-
-// Prepare application
-enableErrorSink();
-hideErrors();
-
-// Get some parameters
-$is_developer = isDeveloper();
-$has_compression = hasCompression();
-
-// Cache control (for development & production)
-if($is_developer) {
- header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
-} else if(hasCaching()) {
- $expires = 31536000;
-
- header('Cache-Control: maxage='.$expires);
- header('Expires: '.gmdate('D, d M Y H:i:s', (time() + $expires)).' GMT');
-}
-
-// Initialize the vars
-$type = '';
-$file = '';
-
-// Read the type var
-if(isset($_GET['t']) && !empty($_GET['t']) && preg_match('/^(css|stylesheets|js|javascripts|img|images|snd|sounds|fonts|store)$/', $_GET['t'])) {
- $type = $_GET['t'];
-}
-
-// Read the files var
-if(isset($_GET['f']) && !empty($_GET['f']) && isSafe($_GET['f'])) {
- $file = $_GET['f'];
-}
-
-// Read the group var (only for text files)
-if(isset($_GET['g']) && !empty($_GET['g']) && preg_match('/^(\S+)\.xml$/', $_GET['g']) && preg_match('/^(css|stylesheets|js|javascripts)$/', $type) && isSafe($_GET['g']) && file_exists(JAPPIX_BASE.'/app/bundles/'.$_GET['g'])) {
- $xml_data = file_get_contents(JAPPIX_BASE.'/app/bundles/'.$_GET['g']);
-
- // Any data?
- if($xml_data) {
- $xml_read = new SimpleXMLElement($xml_data);
- $xml_parse = $xml_read->$type;
-
- // Files were added to the list before (with file var)?
- if($file) {
- $file .= '~'.$xml_parse;
- } else {
- $file = $xml_parse;
- }
- }
-}
-
-// We check if the data was submitted
-if($file && $type) {
- // We define some stuffs
- $type = normalizeFileType($type);
- $dir = JAPPIX_BASE.'/app/'.$type.'/';
- $path = $dir.$file;
-
- // Read request headers
- $if_modified_since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? trim($_SERVER['HTTP_IF_MODIFIED_SINCE']) : null;
- $if_modified_since = $if_modified_since ? strtotime($if_modified_since) : null;
-
- // Define the real type if this is a "store" file
- if($type == 'store') {
- // Rewrite path
- $dir = JAPPIX_BASE.'/store/';
- $path = $dir.$file;
-
- // Extract the file extension
- switch(getFileExt($file)) {
- // CSS file
- case 'css':
- $type = 'stylesheets'; break;
-
- // JS file
- case 'js':
- $type = 'javascripts'; break;
-
- // Audio file
- case 'ogg':
- case 'oga':
- case 'mp3':
- $type = 'sounds'; break;
-
- // Image file
- case 'png':
- case 'jpg':
- case 'jpeg':
- case 'gif':
- case 'bmp':
- $type = 'images'; break;
-
- // Image file
- case 'woff':
- case 'ttf':
- case 'eot':
- case 'svg':
- $type = 'fonts'; break;
- }
- }
-
- // JS and CSS special stuffs
- if(($type == 'stylesheets') || ($type == 'javascripts')) {
- // Compression var
- if($has_compression) {
- $cache_encoding = 'deflate';
- } else {
- $cache_encoding = 'plain';
- }
-
- // Get the vars
- $version = getVersion();
- $hash = genHash($version);
- $cache_hash = md5($path.$hash.staticLocation()).'_'.$cache_encoding;
-
- // Check if the browser supports DEFLATE
- $deflate_support = false;
-
- if(isset($_SERVER['HTTP_ACCEPT_ENCODING']) && substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'deflate') && hasCompression() && !$is_developer) {
- $deflate_support = true;
- }
-
- // Internationalization
- if($type == 'javascripts') {
- if(isset($_GET['l']) && !empty($_GET['l']) && !preg_match('/\.\.\//', $_GET['l']) && is_dir(JAPPIX_BASE.'/i18n/'.$_GET['l'])) {
- $locale = $_GET['l'];
- } else {
- $locale = 'en';
- }
- } else {
- $locale = '';
- }
-
- // Define the cache lang name
- if($locale) {
- $cache_lang = $cache_hash.'_'.$locale;
- } else {
- $cache_lang = $cache_hash;
- }
- }
-
- // Explode the file string
- if(strpos($file, '~') !== false) {
- $array = explode('~', $file);
- } else {
- $array = array($file);
- }
-
- // Define the reading vars
- $continue = true;
- $loop_files = true;
-
- // Check the cache exists for text files (avoid the heavy file_exists loop!)
- if(!$is_developer && (($type == 'stylesheets') || ($type == 'javascripts')) && hasCache($cache_lang)) {
- $loop_files = false;
- }
-
- // Check if the all the file(s) exist(s)
- if($loop_files) {
- foreach($array as $current) {
- // Stop the loop if a file is missing
- if(!file_exists($dir.$current)) {
- $continue = false;
- break;
- }
- }
- }
-
- // We can read the file(s)
- if($continue) {
- // We get the file MIME type
- $mime = strtolower(preg_replace('/(^)(.+)(\.)(.+)($)/i', '$4', $file));
-
- // We set up a known MIME type (and some other headers)
- if(($type == 'stylesheets') || ($type == 'javascripts')) {
- // DEFLATE header
- if($deflate_support) {
- header('Content-Encoding: deflate');
- }
-
- // MIME header
- if($type == 'stylesheets') {
- header('Content-Type: text/css; charset=utf-8');
- } else if($type == 'javascripts') {
- header('Content-Type: application/javascript; charset=utf-8');
- }
- } else {
- switch($mime) {
- case 'png':
- header('Content-Type: image/png'); break;
- case 'gif':
- header('Content-Type: image/gif'); break;
- case 'jpg':
- header('Content-Type: image/jpeg'); break;
- case 'bmp':
- header('Content-Type: image/bmp'); break;
- case 'oga':
- case 'ogg':
- header('Content-Type: audio/ogg'); break;
- case 'mp3':
- header('Content-Type: audio/mpeg'); break;
- case 'woff':
- header('Content-Type: application/font-woff'); break;
- case 'ttf':
- header('Content-Type: application/x-font-ttf'); break;
- case 'eot':
- header('Content-Type: application/vnd.ms-fontobject'); break;
- case 'svg':
- header('Content-Type: image/svg+xml'); break;
- default:
- header('Content-Type: '.getFileMIME($path));
- }
- }
-
- // Read the text file(s) (CSS & JS)
- if(($type == 'stylesheets') || ($type == 'javascripts')) {
- // Storage vars
- $last_modified = $output_data = null;
-
- // If there's a cache file, read it
- if(hasCache($cache_lang) && !$is_developer) {
- $last_modified = filemtime(pathCache($cache_lang));
- $cache_read = readCache($cache_lang);
-
- if($deflate_support || !$has_compression) {
- $output_data = $cache_read;
- } else {
- $output_data = gzinflate($cache_read);
- }
- }
-
- // Else, we generate the cache
- else {
- // First try to read the cache reference
- if(hasCache($cache_hash) && !$is_developer) {
- // Read the reference
- $last_modified = filemtime(pathCache($cache_hash));
- $cache_reference = readCache($cache_hash);
-
- // Filter the cache reference
- if($has_compression) {
- $output = gzinflate($cache_reference);
- } else {
- $output = $cache_reference;
- }
- }
-
- // No cache reference, we should generate it
- else {
- // Last modified date is now
- $last_modified = time();
-
- // Initialize the loop
- $looped = '';
-
- // Add the content of the current file
- foreach($array as $current) {
- $looped .= rmBOM(file_get_contents($dir.$current))."\n";
- }
-
- // Filter the CSS
- if($type == 'stylesheets') {
- // Apply the CSS logos
- $looped = setLogos($looped, $array);
-
- // Apply the CSS background
- $looped = setBackground($looped);
-
- // Set the Get API paths
- $looped = setPath($looped, $hash, HOST_STATIC, $type, '');
- }
-
- // Optimize the code rendering
- if($type == 'stylesheets') {
- // Can minify the CSS
- if($has_compression && !$is_developer) {
- $output = compressCSS($looped);
- } else {
- $output = $looped;
- }
- } else {
- // Can minify the JS (sloooooow!)
- if($has_compression && !$is_developer) {
- require_once('./jsmin.php');
- $output = JSMin::minify($looped);
- } else {
- $output = $looped;
- }
- }
-
- // Generate the reference cache
- if($has_compression) {
- $final = gzdeflate($output, 9);
- } else {
- $final = $output;
- }
-
- // Write it!
- genCache($final, $is_developer, $cache_hash);
- }
-
- // Filter the JS
- if($type == 'javascripts') {
- // Set the JS locales
- $output = setLocales($output, $locale);
-
- // Set the JS configuration
- $output = setConfiguration($output, $hash, $locale, $version, uploadMaxSize());
-
- // Set the Get API paths
- $output = setPath($output, $hash, HOST_STATIC, $type, $locale);
-
- // Translate the JS script
- require_once('./gettext.php');
- includeTranslation($locale, 'main');
- $output = setTranslation($output);
-
- // Generate the cache
- if($has_compression) {
- $final = gzdeflate($output, 9);
- } else {
- $final = $output;
- }
-
- // Write it!
- genCache($final, $is_developer, $cache_lang);
- }
-
- // Output a well-encoded string
- if($deflate_support || !$has_compression) {
- $output_data = $final;
- } else {
- $output_data = gzinflate($final);
- }
- }
-
- // Any data to output?
- if($output_data) {
- // Last-Modified HTTP header
- if(!$is_developer && hasCaching()) {
- header('Last-Modified: '.gmdate('D, d M Y H:i:s', $last_modified).' GMT');
- }
-
- // Check browser cache
- if(!$is_developer && hasCaching() &&
- ($if_modified_since && ($last_modified <= $if_modified_since))) {
- // Use browser cache
- header('Status: 304 Not Modified', true, 304);
- exit;
- } else {
- // More file HTTP headers
- header('Content-Length: '.strlen($output_data));
-
- // Output data
- echo($output_data);
- }
- }
-
- // Free up memory (prevents leaks)
- unset($output_data);
- }
-
- // Read the binary file (PNG, OGA and others)
- else {
- // Process re-usable HTTP headers values
- $last_modified = filemtime($path);
-
- // Last-Modified HTTP header
- if(!$is_developer && hasCaching()) {
- header('Last-Modified: '.gmdate('D, d M Y H:i:s', $last_modified).' GMT');
- }
-
- // Check browser cache
- if(!$is_developer && hasCaching() &&
- ($if_modified_since && ($last_modified <= $if_modified_since))) {
- // Use browser cache
- header('Status: 304 Not Modified', true, 304);
- exit;
- } else {
- // More file HTTP headers
- header('Content-Length: '.filesize($path));
-
- // Simple binary read (no packing needed)
- readfile($path);
- }
- }
-
- exit;
- }
-
- // The file was not found
- header('Status: 404 Not Found', true, 404);
- exit('HTTP/1.1 404 Not Found');
-}
-
-// The request is not correct
-header('Status: 400 Bad Request', true, 400);
-exit('HTTP/1.1 400 Bad Request');
-
-?>
diff --git a/server/gettext.php b/server/gettext.php
deleted file mode 100644
index b1d82b3d..00000000
--- a/server/gettext.php
+++ /dev/null
@@ -1,948 +0,0 @@
-<?php
-
-/*
- Copyright (c) 2003, 2005, 2006, 2009 Danilo Segan <danilo@kvota.net>.
-
- This file is part of PHP-gettext.
-
- PHP-gettext 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 2 of the License, or
- (at your option) any later version.
-
- PHP-gettext 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 PHP-gettext; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-/**
- * MODIFIED FOR THE JAPPIX PROJECT
- */
-
- // Simple class to wrap file streams, string streams, etc.
- // seek is essential, and it should be byte stream
-class StreamReader {
- // should return a string [FIXME: perhaps return array of bytes?]
- function read($bytes) {
- return false;
- }
-
- // should return new position
- function seekto($position) {
- return false;
- }
-
- // returns current position
- function currentpos() {
- return false;
- }
-
- // returns length of entire stream (limit for seekto()s)
- function length() {
- return false;
- }
-};
-
-class StringReader {
- var $_pos;
- var $_str;
-
- function StringReader($str='') {
- $this->_str = $str;
- $this->_pos = 0;
- }
-
- function read($bytes) {
- $data = substr($this->_str, $this->_pos, $bytes);
- $this->_pos += $bytes;
- if (strlen($this->_str)<$this->_pos)
- $this->_pos = strlen($this->_str);
-
- return $data;
- }
-
- function seekto($pos) {
- $this->_pos = $pos;
- if (strlen($this->_str)<$this->_pos)
- $this->_pos = strlen($this->_str);
- return $this->_pos;
- }
-
- function currentpos() {
- return $this->_pos;
- }
-
- function length() {
- return strlen($this->_str);
- }
-
-};
-
-
-class FileReader {
- var $_pos;
- var $_fd;
- var $_length;
-
- function FileReader($filename) {
- if (file_exists($filename)) {
-
- $this->_length=filesize($filename);
- $this->_pos = 0;
- $this->_fd = fopen($filename,'rb');
- if (!$this->_fd) {
- $this->error = 3; // Cannot read file, probably permissions
- return false;
- }
- } else {
- $this->error = 2; // File doesn't exist
- return false;
- }
- }
-
- function read($bytes) {
- if ($bytes) {
- fseek($this->_fd, $this->_pos);
-
- // PHP 5.1.1 does not read more than 8192 bytes in one fread()
- // the discussions at PHP Bugs suggest it's the intended behaviour
- $data = '';
- while ($bytes > 0) {
- $chunk = fread($this->_fd, $bytes);
- $data .= $chunk;
- $bytes -= strlen($chunk);
- }
- $this->_pos = ftell($this->_fd);
-
- return $data;
- } else return '';
- }
-
- function seekto($pos) {
- fseek($this->_fd, $pos);
- $this->_pos = ftell($this->_fd);
- return $this->_pos;
- }
-
- function currentpos() {
- return $this->_pos;
- }
-
- function length() {
- return $this->_length;
- }
-
- function close() {
- fclose($this->_fd);
- }
-
-};
-
-// Preloads entire file in memory first, then creates a StringReader
-// over it (it assumes knowledge of StringReader internals)
-class CachedFileReader extends StringReader {
- function CachedFileReader($filename) {
- if (file_exists($filename)) {
-
- $length=filesize($filename);
- $fd = fopen($filename,'rb');
-
- if (!$fd) {
- $this->error = 3; // Cannot read file, probably permissions
- return false;
- }
- $this->_str = fread($fd, $length);
- fclose($fd);
-
- } else {
- $this->error = 2; // File doesn't exist
- return false;
- }
- }
-};
-
-/*
- Copyright (c) 2003, 2009 Danilo Segan <danilo@kvota.net>.
- Copyright (c) 2005 Nico Kaiser <nico@siriux.net>
-
- This file is part of PHP-gettext.
-
- PHP-gettext 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 2 of the License, or
- (at your option) any later version.
-
- PHP-gettext 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 PHP-gettext; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-
-/**
- * Provides a simple gettext replacement that works independently from
- * the system's gettext abilities.
- * It can read MO files and use them for translating strings.
- * The files are passed to gettext_reader as a Stream (see streams.php)
- *
- * This version has the ability to cache all strings and translations to
- * speed up the string lookup.
- * While the cache is enabled by default, it can be switched off with the
- * second parameter in the constructor (e.g. whenusing very large MO files
- * that you don't want to keep in memory)
- */
-class gettext_reader {
- //public:
- var $error = 0; // public variable that holds error code (0 if no error)
-
- //private:
- var $BYTEORDER = 0; // 0: low endian, 1: big endian
- var $STREAM = NULL;
- var $short_circuit = false;
- var $enable_cache = false;
- var $originals = NULL; // offset of original table
- var $translations = NULL; // offset of translation table
- var $pluralheader = NULL; // cache header field for plural forms
- var $total = 0; // total string count
- var $table_originals = NULL; // table for original strings (offsets)
- var $table_translations = NULL; // table for translated strings (offsets)
- var $cache_translations = NULL; // original -> translation mapping
-
-
- /* Methods */
-
-
- /**
- * Reads a 32bit Integer from the Stream
- *
- * @access private
- * @return Integer from the Stream
- */
- function readint() {
- if ($this->BYTEORDER == 0) {
- // low endian
- $input=unpack('V', $this->STREAM->read(4));
- return array_shift($input);
- } else {
- // big endian
- $input=unpack('N', $this->STREAM->read(4));
- return array_shift($input);
- }
- }
-
- function read($bytes) {
- return $this->STREAM->read($bytes);
- }
-
- /**
- * Reads an array of Integers from the Stream
- *
- * @param int count How many elements should be read
- * @return Array of Integers
- */
- function readintarray($count) {
- if ($this->BYTEORDER == 0) {
- // low endian
- return unpack('V'.$count, $this->STREAM->read(4 * $count));
- } else {
- // big endian
- return unpack('N'.$count, $this->STREAM->read(4 * $count));
- }
- }
-
- /**
- * Constructor
- *
- * @param object Reader the StreamReader object
- * @param boolean enable_cache Enable or disable caching of strings (default on)
- */
- function gettext_reader($Reader, $enable_cache = true) {
- // If there isn't a StreamReader, turn on short circuit mode.
- if (! $Reader || isset($Reader->error) ) {
- $this->short_circuit = true;
- return;
- }
-
- // Caching can be turned off
- $this->enable_cache = $enable_cache;
-
- $MAGIC1 = "\x95\x04\x12\xde";
- $MAGIC2 = "\xde\x12\x04\x95";
-
- $this->STREAM = $Reader;
- $magic = $this->read(4);
- if ($magic == $MAGIC1) {
- $this->BYTEORDER = 1;
- } elseif ($magic == $MAGIC2) {
- $this->BYTEORDER = 0;
- } else {
- $this->error = 1; // not MO file
- return false;
- }
-
- // FIXME: Do we care about revision? We should.
- $revision = $this->readint();
-
- $this->total = $this->readint();
- $this->originals = $this->readint();
- $this->translations = $this->readint();
- }
-
- /**
- * Loads the translation tables from the MO file into the cache
- * If caching is enabled, also loads all strings into a cache
- * to speed up translation lookups
- *
- * @access private
- */
- function load_tables() {
- if (is_array($this->cache_translations) &&
- is_array($this->table_originals) &&
- is_array($this->table_translations))
- return;
-
- /* get original and translations tables */
- $this->STREAM->seekto($this->originals);
- $this->table_originals = $this->readintarray($this->total * 2);
- $this->STREAM->seekto($this->translations);
- $this->table_translations = $this->readintarray($this->total * 2);
-
- if ($this->enable_cache) {
- $this->cache_translations = array ();
- /* read all strings in the cache */
- for ($i = 0; $i < $this->total; $i++) {
- $this->STREAM->seekto($this->table_originals[$i * 2 + 2]);
- $original = $this->STREAM->read($this->table_originals[$i * 2 + 1]);
- $this->STREAM->seekto($this->table_translations[$i * 2 + 2]);
- $translation = $this->STREAM->read($this->table_translations[$i * 2 + 1]);
- $this->cache_translations[$original] = $translation;
- }
- }
- }
-
- /**
- * Returns a string from the "originals" table
- *
- * @access private
- * @param int num Offset number of original string
- * @return string Requested string if found, otherwise ''
- */
- function get_original_string($num) {
- $length = $this->table_originals[$num * 2 + 1];
- $offset = $this->table_originals[$num * 2 + 2];
- if (! $length)
- return '';
- $this->STREAM->seekto($offset);
- $data = $this->STREAM->read($length);
- return (string)$data;
- }
-
- /**
- * Returns a string from the "translations" table
- *
- * @access private
- * @param int num Offset number of original string
- * @return string Requested string if found, otherwise ''
- */
- function get_translation_string($num) {
- $length = $this->table_translations[$num * 2 + 1];
- $offset = $this->table_translations[$num * 2 + 2];
- if (! $length)
- return '';
- $this->STREAM->seekto($offset);
- $data = $this->STREAM->read($length);
- return (string)$data;
- }
-
- /**
- * Binary search for string
- *
- * @access private
- * @param string string
- * @param int start (internally used in recursive function)
- * @param int end (internally used in recursive function)
- * @return int string number (offset in originals table)
- */
- function find_string($string, $start = -1, $end = -1) {
- if (($start == -1) or ($end == -1)) {
- // find_string is called with only one parameter, set start end end
- $start = 0;
- $end = $this->total;
- }
- if (abs($start - $end) <= 1) {
- // We're done, now we either found the string, or it doesn't exist
- $txt = $this->get_original_string($start);
- if ($string == $txt)
- return $start;
- else
- return -1;
- } else if ($start > $end) {
- // start > end -> turn around and start over
- return $this->find_string($string, $end, $start);
- } else {
- // Divide table in two parts
- $half = (int)(($start + $end) / 2);
- $cmp = strcmp($string, $this->get_original_string($half));
- if ($cmp == 0)
- // string is exactly in the middle => return it
- return $half;
- else if ($cmp < 0)
- // The string is in the upper half
- return $this->find_string($string, $start, $half);
- else
- // The string is in the lower half
- return $this->find_string($string, $half, $end);
- }
- }
-
- /**
- * Translates a string
- *
- * @access public
- * @param string string to be translated
- * @return string translated string (or original, if not found)
- */
- function translate($string) {
- if ($this->short_circuit)
- return $string;
- $this->load_tables();
-
- if ($this->enable_cache) {
- // Caching enabled, get translated string from cache
- if (array_key_exists($string, $this->cache_translations))
- return $this->cache_translations[$string];
- else
- return $string;
- } else {
- // Caching not enabled, try to find string
- $num = $this->find_string($string);
- if ($num == -1)
- return $string;
- else
- return $this->get_translation_string($num);
- }
- }
-
- /**
- * Sanitize plural form expression for use in PHP eval call.
- *
- * @access private
- * @return string sanitized plural form expression
- */
- function sanitize_plural_expression($expr) {
- // Get rid of disallowed characters.
- $expr = preg_replace('@[^a-zA-Z0-9_:;\(\)\?\|\&=!<>+*/\%-]@', '', $expr);
-
- // Add parenthesis for tertiary '?' operator.
- $expr .= ';';
- $res = '';
- $p = 0;
- for ($i = 0; $i < strlen($expr); $i++) {
- $ch = $expr[$i];
- switch ($ch) {
- case '?':
- $res .= ' ? (';
- $p++;
- break;
- case ':':
- $res .= ') : (';
- break;
- case ';':
- $res .= str_repeat( ')', $p) . ';';
- $p = 0;
- break;
- default:
- $res .= $ch;
- }
- }
- return $res;
- }
-
- /**
- * Get possible plural forms from MO header
- *
- * @access private
- * @return string plural form header
- */
- function get_plural_forms() {
- // lets assume message number 0 is header
- // this is true, right?
- $this->load_tables();
-
- // cache header field for plural forms
- if (! is_string($this->pluralheader)) {
- if ($this->enable_cache) {
- $header = $this->cache_translations[""];
- } else {
- $header = $this->get_translation_string(0);
- }
- if (eregi("plural-forms: ([^\n]*)\n", $header, $regs))
- $expr = $regs[1];
- else
- $expr = "nplurals=2; plural=n == 1 ? 0 : 1;";
-
- $this->pluralheader = $this->sanitize_plural_expression($expr);
- }
- return $this->pluralheader;
- }
-
- /**
- * Detects which plural form to take
- *
- * @access private
- * @param n count
- * @return int array index of the right plural form
- */
- function select_string($n) {
- $string = $this->get_plural_forms();
- $string = str_replace('nplurals',"\$total",$string);
- $string = str_replace("n",$n,$string);
- $string = str_replace('plural',"\$plural",$string);
-
- $total = 0;
- $plural = 0;
-
- eval("$string");
- if ($plural >= $total) $plural = $total - 1;
- return $plural;
- }
-
- /**
- * Plural version of gettext
- *
- * @access public
- * @param string single
- * @param string plural
- * @param string number
- * @return translated plural form
- */
- function ngettext($single, $plural, $number) {
- if ($this->short_circuit) {
- if ($number != 1)
- return $plural;
- else
- return $single;
- }
-
- // find out the appropriate form
- $select = $this->select_string($number);
-
- // this should contains all strings separated by NULLs
- $key = $single.chr(0).$plural;
-
-
- if ($this->enable_cache) {
- if (! array_key_exists($key, $this->cache_translations)) {
- return ($number != 1) ? $plural : $single;
- } else {
- $result = $this->cache_translations[$key];
- $list = explode(chr(0), $result);
- return $list[$select];
- }
- } else {
- $num = $this->find_string($key);
- if ($num == -1) {
- return ($number != 1) ? $plural : $single;
- } else {
- $result = $this->get_translation_string($num);
- $list = explode(chr(0), $result);
- return $list[$select];
- }
- }
- }
-
-}
-
-/*
- Copyright (c) 2005 Steven Armstrong <sa at c-area dot ch>
- Copyright (c) 2009 Danilo Segan <danilo@kvota.net>
-
- Drop in replacement for native gettext.
-
- This file is part of PHP-gettext.
-
- PHP-gettext 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 2 of the License, or
- (at your option) any later version.
-
- PHP-gettext 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 PHP-gettext; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*/
-/*
-LC_CTYPE 0
-LC_NUMERIC 1
-LC_TIME 2
-LC_COLLATE 3
-LC_MONETARY 4
-LC_MESSAGES 5
-LC_ALL 6
-*/
-
-
-// LC_MESSAGES is not available if php-gettext is not loaded
-// while the other constants are already available from session extension.
-if (!defined('LC_MESSAGES')) {
- define('LC_MESSAGES', 5);
-}
-
-// Variables
-
-global $text_domains, $default_domain, $LC_CATEGORIES, $EMULATEGETTEXT, $CURRENTLOCALE;
-$text_domains = array();
-$default_domain = 'messages';
-$LC_CATEGORIES = array('LC_CTYPE', 'LC_NUMERIC', 'LC_TIME', 'LC_COLLATE', 'LC_MONETARY', 'LC_MESSAGES', 'LC_ALL');
-$EMULATEGETTEXT = 0;
-$CURRENTLOCALE = '';
-
-/* Class to hold a single domain included in $text_domains. */
-class domain {
- var $l10n;
- var $path;
- var $codeset;
-}
-
-// Utility functions
-
-/**
- * Utility function to get a StreamReader for the given text domain.
- */
-function _get_reader($domain=null, $category=5, $enable_cache=true) {
- global $text_domains, $default_domain, $LC_CATEGORIES;
- if (!isset($domain)) $domain = $default_domain;
- if (!isset($text_domains[$domain]->l10n)) {
- // get the current locale
- $locale = _setlocale(LC_MESSAGES, 0);
- $bound_path = isset($text_domains[$domain]->path) ?
- $text_domains[$domain]->path : './';
- $subpath = $LC_CATEGORIES[$category] ."/$domain.mo";
- /* Figure out all possible locale names and start with the most
- specific ones. I.e. for sr_CS.UTF-8@latin, look through all of
- sr_CS.UTF-8@latin, sr_CS@latin, sr@latin, sr_CS.UTF-8, sr_CS, sr.
- */
- $locale_names = array();
- if (preg_match("/([a-z]{2,3})" // language code
- ."(_([A-Z]{2}))?" // country code
- ."(\.([-A-Za-z0-9_]))?" // charset
- ."(@([-A-Za-z0-9_]+))?/", // @ modifier
- $locale, $matches)) {
-
- $lang = '';
- $country = '';
- $charset = '';
- $modifier = '';
-
- if(isset($matches[1]))
- $lang = $matches[1];
- if(isset($matches[3]))
- $country = $matches[3];
- if(isset($matches[5]))
- $charset = $matches[5];
- if(isset($matches[7]))
- $modifier = $matches[7];
-
- if ($modifier) {
- $locale_names = array("${lang}_$country.$charset@$modifier",
- "${lang}_$country@$modifier",
- "$lang@$modifier");
- }
- array_push($locale_names,
- "${lang}_$country.$charset", "${lang}_$country", "$lang");
- }
- array_push($locale_names, $locale);
-
- $input = null;
- foreach ($locale_names as $locale) {
- $full_path = $bound_path . $locale . "/" . $subpath;
- if (file_exists($full_path)) {
- $input = new FileReader($full_path);
- break;
- }
- }
-
- if (!array_key_exists($domain, $text_domains)) {
- // Initialize an empty domain object.
- $text_domains[$domain] = new domain();
- }
- $text_domains[$domain]->l10n = new gettext_reader($input,
- $enable_cache);
- }
- return $text_domains[$domain]->l10n;
-}
-
-/**
- * Returns whether we are using our emulated gettext API or PHP built-in one.
- */
-function locale_emulation() {
- global $EMULATEGETTEXT;
- return $EMULATEGETTEXT;
-}
-
-/**
- * Checks if the current locale is supported on this system.
- */
-function _check_locale() {
- global $EMULATEGETTEXT;
- return !$EMULATEGETTEXT;
-}
-
-/**
- * Get the codeset for the given domain.
- */
-function _get_codeset($domain=null) {
- global $text_domains, $default_domain, $LC_CATEGORIES;
- if (!isset($domain)) $domain = $default_domain;
- return (isset($text_domains[$domain]->codeset))? $text_domains[$domain]->codeset : ini_get('mbstring.internal_encoding');
-}
-
-/**
- * Convert the given string to the encoding set by bind_textdomain_codeset.
- */
-function _encode($text) {
- $source_encoding = mb_detect_encoding($text);
- $target_encoding = _get_codeset();
- if ($source_encoding != $target_encoding) {
- return mb_convert_encoding($text, $target_encoding, $source_encoding);
- }
- else {
- return $text;
- }
-}
-
-
-
-
-// Custom implementation of the standard gettext related functions
-
-/**
- * Sets a requested locale, if needed emulates it.
- */
-function _setlocale($category, $locale) {
- global $CURRENTLOCALE, $EMULATEGETTEXT;
- if ($locale === 0) { // use === to differentiate between string "0"
- if ($CURRENTLOCALE != '')
- return $CURRENTLOCALE;
- else
- // obey LANG variable, maybe extend to support all of LC_* vars
- // even if we tried to read locale without setting it first
- return _setlocale($category, $CURRENTLOCALE);
- } else {
- $ret = 0;
- if (function_exists('setlocale')) // I don't know if this ever happens ;)
- $ret = setlocale($category, $locale);
- if (($ret and $locale == '') or ($ret == $locale)) {
- $EMULATEGETTEXT = 0;
- $CURRENTLOCALE = $ret;
- } else {
- if ($locale == '') // emulate variable support
- $CURRENTLOCALE = getenv('LANG');
- else
- $CURRENTLOCALE = $locale;
- $EMULATEGETTEXT = 1;
- }
- // Allow locale to be changed on the go for one translation domain.
- global $text_domains, $default_domain;
- unset($text_domains[$default_domain]->l10n);
- return $CURRENTLOCALE;
- }
-}
-
-/**
- * Sets the path for a domain.
- */
-function _bindtextdomain($domain, $path) {
- global $text_domains;
- // ensure $path ends with a slash ('/' should work for both, but lets still play nice)
- if (substr(php_uname(), 0, 7) == "Windows") {
- if ($path[strlen($path)-1] != '\\' and $path[strlen($path)-1] != '/')
- $path .= '\\';
- } else {
- if ($path[strlen($path)-1] != '/')
- $path .= '/';
- }
- if (!array_key_exists($domain, $text_domains)) {
- // Initialize an empty domain object.
- $text_domains[$domain] = new domain();
- }
- $text_domains[$domain]->path = $path;
-}
-
-/**
- * Specify the character encoding in which the messages from the DOMAIN message catalog will be returned.
- */
-function _bind_textdomain_codeset($domain, $codeset) {
- global $text_domains;
- $text_domains[$domain]->codeset = $codeset;
-}
-
-/**
- * Sets the default domain.
- */
-function _textdomain($domain) {
- global $default_domain;
- $default_domain = $domain;
-}
-
-/**
- * Lookup a message in the current domain.
- */
-function _gettext($msgid) {
- $l10n = _get_reader();
- //return $l10n->translate($msgid);
- return _encode($l10n->translate($msgid));
-}
-/**
- * Alias for gettext.
- */
-function __($msgid) {
- return _gettext($msgid);
-}
-/**
- * Plural version of gettext.
- */
-function _ngettext($single, $plural, $number) {
- $l10n = _get_reader();
- //return $l10n->ngettext($single, $plural, $number);
- return _encode($l10n->ngettext($single, $plural, $number));
-}
-
-/**
- * Override the current domain.
- */
-function _dgettext($domain, $msgid) {
- $l10n = _get_reader($domain);
- //return $l10n->translate($msgid);
- return _encode($l10n->translate($msgid));
-}
-/**
- * Plural version of dgettext.
- */
-function _dngettext($domain, $single, $plural, $number) {
- $l10n = _get_reader($domain);
- //return $l10n->ngettext($single, $plural, $number);
- return _encode($l10n->ngettext($single, $plural, $number));
-}
-
-/**
- * Overrides the domain and category for a single lookup.
- */
-function _dcgettext($domain, $msgid, $category) {
- $l10n = _get_reader($domain, $category);
- //return $l10n->translate($msgid);
- return _encode($l10n->translate($msgid));
-}
-/**
- * Plural version of dcgettext.
- */
-function _dcngettext($domain, $single, $plural, $number, $category) {
- $l10n = _get_reader($domain, $category);
- //return $l10n->ngettext($single, $plural, $number);
- return _encode($l10n->ngettext($single, $plural, $number));
-}
-
-
-
-// Wrappers to use if the standard gettext functions are available, but the current locale is not supported by the system.
-// Use the standard impl if the current locale is supported, use the custom impl otherwise.
-
-function T_setlocale($category, $locale) {
- return _setlocale($category, $locale);
-}
-
-function T_bindtextdomain($domain, $path) {
- if (_check_locale()) return bindtextdomain($domain, $path);
- else return _bindtextdomain($domain, $path);
-}
-function T_bind_textdomain_codeset($domain, $codeset) {
- // bind_textdomain_codeset is available only in PHP 4.2.0+
- if (_check_locale() and function_exists('bind_textdomain_codeset')) return bind_textdomain_codeset($domain, $codeset);
- else return _bind_textdomain_codeset($domain, $codeset);
-}
-function T_textdomain($domain) {
- if (_check_locale()) return textdomain($domain);
- else return _textdomain($domain);
-}
-function T_gettext($msgid) {
- if (_check_locale()) return gettext($msgid);
- else return _gettext($msgid);
-}
-function T_($msgid) {
- if (_check_locale()) return _($msgid);
- return __($msgid);
-}
-function T_ngettext($single, $plural, $number) {
- if (_check_locale()) return ngettext($single, $plural, $number);
- else return _ngettext($single, $plural, $number);
-}
-function T_dgettext($domain, $msgid) {
- if (_check_locale()) return dgettext($domain, $msgid);
- else return _dgettext($domain, $msgid);
-}
-function T_dngettext($domain, $single, $plural, $number) {
- if (_check_locale()) return dngettext($domain, $single, $plural, $number);
- else return _dngettext($domain, $single, $plural, $number);
-}
-function T_dcgettext($domain, $msgid, $category) {
- if (_check_locale()) return dcgettext($domain, $msgid, $category);
- else return _dcgettext($domain, $msgid, $category);
-}
-function T_dcngettext($domain, $single, $plural, $number, $category) {
- if (_check_locale()) return dcngettext($domain, $single, $plural, $number, $category);
- else return _dcngettext($domain, $single, $plural, $number, $category);
-}
-
-
-
-// Wrappers used as a drop in replacement for the standard gettext functions
-
-if (!function_exists('gettext')) {
- function bindtextdomain($domain, $path) {
- return _bindtextdomain($domain, $path);
- }
- function bind_textdomain_codeset($domain, $codeset) {
- return _bind_textdomain_codeset($domain, $codeset);
- }
- function textdomain($domain) {
- return _textdomain($domain);
- }
- function gettext($msgid) {
- return _gettext($msgid);
- }
- function _($msgid) {
- return __($msgid);
- }
- function ngettext($single, $plural, $number) {
- return _ngettext($single, $plural, $number);
- }
- function dgettext($domain, $msgid) {
- return _dgettext($domain, $msgid);
- }
- function dngettext($domain, $single, $plural, $number) {
- return _dngettext($domain, $single, $plural, $number);
- }
- function dcgettext($domain, $msgid, $category) {
- return _dcgettext($domain, $msgid, $category);
- }
- function dcngettext($domain, $single, $plural, $number, $category) {
- return _dcngettext($domain, $single, $plural, $number, $category);
- }
-}
-
-?>
diff --git a/server/install.php b/server/install.php
deleted file mode 100644
index 837ab685..00000000
--- a/server/install.php
+++ /dev/null
@@ -1,291 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the Jappix Install PHP/HTML code
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-// Define the configuration folder
-$conf_folder = JAPPIX_BASE.'/store/conf';
-
-// Initialize the step
-$step = 1;
-
-// Initialize some vars
-$form_parent = 'install';
-$user_name = '';
-$user_password = '';
-$valid_user = true;
-
-if(isset($_POST['step']) && !empty($_POST['step'])) {
- $step = intval($_POST['step']);
-
- switch($step) {
- // Administrator account configuration submitted
- case 3:
- include(JAPPIX_BASE.'/server/post-users.php'); break;
-
- // Main configuration submitted
- case 4:
- include(JAPPIX_BASE.'/server/post-main.php'); break;
-
- // Hosts configuration submitted
- case 5:
- include(JAPPIX_BASE.'/server/post-hosts.php'); break;
- }
-}
-
-// Not frozen on the previous step?
-if(!isset($_POST['check']) && (isset($_POST['submit']) || isset($_POST['finish']))) {
- // Checks the current step is valid
- if(($step >= 2) && !is_dir($conf_folder)) {
- $step = 2;
- } else if(($step >= 3) && !usersConfName()) {
- $step = 3;
- } else if(($step >= 4) && !file_exists($conf_folder.'/main.xml')) {
- $step = 4;
- } else if(($step >= 5) && !file_exists($conf_folder.'/hosts.xml')) {
- $step = 5;
- } else {
- $step++;
- }
-}
-
-// These steps are not available
-if(($step > 6) || !is_int($step)) {
- $step = 6;
-}
-
-// Get the current step title
-$names = array(
- T_("Welcome"),
- T_("Storage configuration"),
- T_("Administrator account"),
- T_("Main configuration"),
- T_("Hosts configuration"),
- T_("Services installation")
-);
-
-// Continue marker
-$continue = true;
-
-// Form action
-if($step < 6) {
- $form_action = './?m=install'.keepGet('m', false);
-} else {
- $form_action = './'.keepGet('m', true);
-}
-
-?>
-<!DOCTYPE html>
-<?php htmlTag($locale); ?>
-
-<head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <meta name="robots" content="none" />
- <title><?php _e("Jappix installation"); ?> &bull; <?php echo($names[$step - 1]); ?></title>
- <link rel="shortcut icon" href="./favicon.ico" />
- <?php echoGetFiles($hash, '', 'css', 'install.xml', ''); echo "\n"; ?>
- <!--[if lt IE 9]><?php echoGetFiles($hash, '', 'css', '', 'ie.css'); ?><![endif]-->
-</head>
-
-<body class="body-images">
- <form id="install" method="post" action="<?php echo $form_action; ?>">
- <div id="install-top">
- <div class="logo install-images"><?php _e("Installation"); ?></div>
- <div class="step"><?php echo $step; ?> <span>/ 6</span></div>
- <div class="clear"></div>
-
- <input type="hidden" name="step" value="<?php echo($step); ?>" />
- </div>
-
- <div id="install-content">
- <?php
-
- // First step: welcome
- if($step == 1) { ?>
- <h3 class="start install-images"><?php _e("Welcome to the Jappix installation!"); ?></h3>
-
- <p><?php _e("This tool will help you installing Jappix, the first full-featured XMPP-based social platform, on your server with ease."); ?></p>
- <p><?php _e("Installation Steps:"); ?></p>
-
- <ol>
- <li><?php _e("Welcome"); ?></li>
- <li><?php _e("Storage configuration"); ?></li>
- <li><?php _e("Administrator account"); ?></li>
- <li><?php _e("Main configuration"); ?></li>
- <li><?php _e("Hosts configuration"); ?></li>
- <li><?php _e("Services installation"); ?></li>
- </ol>
-
- <p><?php printf(T_("If the current language does not match yours (%1s), you can make Jappix speak %2s it will be saved."), getLanguageName($locale), languageSwitcher($locale)); ?></p>
-
- <p><?php _e("If you want to get some help about the Jappix installation and configuration, you can use our whole documentation, available at:"); ?> <a href="https://github.com/jappix/jappix/wiki" target="_blank">https://github.com/jappix/jappix/wiki</a></p>
-
- <p><?php _e("It's time to build your own social cloud: just go to the next step!"); ?></p>
- <?php }
-
- // Second step: storage configuration
- else if($step == 2) { ?>
- <h3 class="storage install-images"><?php _e("Storage configuration"); ?></h3>
-
- <p><?php _e("Jappix stores persistent data (such as shared files, chat logs, your own music and its configuration) into multiple storage folders."); ?></p>
-
- <p><?php printf(T_("Jappix must be able to write in this folder to create its sub-directories. If not, you must set the rights of %1s to %2s or change the folder owner to %3s (depending of your configuration)."), '<em>./store, ./log, ./tmp</em>', '<em>777</em>', '<em>www-data</em>'); ?></p>
-
- <?php if(is_writable(JAPPIX_BASE.'/store') && is_writable(JAPPIX_BASE.'/tmp') && is_writable(JAPPIX_BASE.'/log')) {
- // Create the store tree
- include(JAPPIX_BASE.'/server/store-tree.php');
- ?>
- <p class="info bigspace success"><?php _e("The folder is writable, you can continue!"); ?></p>
- <?php }
-
- else {
- $continue = false;
- ?>
- <p class="info bigspace fail"><?php printf(T_("The folder is not writable, set the right permissions to the %s directory."), "<em>./store</em>"); ?></p>
- <?php } ?>
- <?php }
-
- // Third step: administrator account
- else if($step == 3) { ?>
- <h3 class="account install-images"><?php _e("Administrator account"); ?></h3>
-
- <p><?php _e("Jappix offers you the possibility to manage your configuration, install new plugins or search for updates. That's why you must create an administrator account to access the manager."); ?></p>
-
- <p><?php _e("When Jappix will be installed, just click on the manager link on the home page to access it."); ?></p>
-
- <?php
-
- // Include the user add form
- include(JAPPIX_BASE.'/server/form-users.php');
-
- if(!$valid_user) { ?>
- <p class="info bigspace fail"><?php _e("Oops, you missed something or the two passwords do not match!"); ?></p>
- <?php }
- }
-
- // Fourth step: main configuration
- else if($step == 4) { ?>
- <h3 class="main install-images"><?php _e("Main configuration"); ?></h3>
-
- <p><?php _e("Jappix needs that you specify some values to work. Please correct the following inputs (or keep the default values, which are sufficient for most people)."); ?></p>
-
- <p><?php _e("Note that if you don't specify a value which is compulsory, it will be automatically completed with the default one."); ?></p>
-
- <?php
-
- // Define the main configuration variables
- include(JAPPIX_BASE.'/server/vars-main.php');
-
- // Are we using developer mode?
- if(preg_match('/~dev/i', $version)) {
- $developer = 'on';
- }
-
- // Include the main configuration form
- include(JAPPIX_BASE.'/server/form-main.php');
- }
-
- // Fifth step: hosts configuration
- else if($step == 5) { ?>
- <h3 class="hosts install-images"><?php _e("Hosts configuration"); ?></h3>
-
- <p><?php _e("This page helps you specify the default hosts Jappix will connect to. You can leave it as it is and continue if you want to use the official service hosts."); ?></p>
-
- <p><?php _e("Maybe you don't know what a BOSH server is? In fact, this is a relay between a Jappix client and a XMPP server, which is necessary because of technical limitations."); ?></p>
-
- <p><?php _e("Note that if you don't specify a value which is compulsory, it will be automatically completed with the default one."); ?></p>
-
- <?php
-
- // Define the hosts configuration variables
- include(JAPPIX_BASE.'/server/vars-hosts.php');
-
- // Include the hosts configuration form
- include(JAPPIX_BASE.'/server/form-hosts.php');
- }
-
- // Last step: services installation
- else if($step == 6) { ?>
- <h3 class="services install-images"><?php _e("Services installation"); ?></h3>
-
- <p><?php _e("You can install some extra softwares on your server, to extend your Jappix features. Some others might be modified, because of security restrictions which are set by default."); ?></p>
- <p><?php _e("To perform this, you must be able to access your server's shell and be logged in as root. Remember this is facultative, Jappix will work without these modules, but some of its features will be unavailable."); ?></p>
-
- <?php
-
- // Write the installed marker
- writeXML('conf', 'installed', '<installed>true</installed>');
-
- // Checks some services are installed
- $services_functions = array('gd_info', 'curl_init');
- $services_names = array('GD', 'cURL');
- $services_packages = array('php5-gd', 'php5-curl');
-
- for($i = 0; $i < count($services_names); $i++) {
- $service_class = 'info smallspace';
-
- // First info?
- if($i == 0) {
- $service_class .= ' first';
- }
-
- // Service installed?
- if(function_exists($services_functions[$i])) { ?>
- <p class="<?php echo($service_class) ?> success"><?php printf(T_("%s is installed on your system."), $services_names[$i]); ?></p>
- <?php }
-
- // Missing service!
- else { ?>
- <p class="<?php echo($service_class) ?> fail"><?php printf(T_("%1s is not installed on your system, you should install %2s."), $services_names[$i], '<em>'.$services_packages[$i].'</em>'); ?></p>
- <?php }
- }
-
- // Checks the upload size limit
- $upload_max = uploadMaxSize();
- $upload_human = formatBytes($upload_max);
-
- if($upload_max >= 7000000) { ?>
- <p class="info smallspace last success"><?php printf(T_("PHP maximum upload size is sufficient (%s)."), $upload_human); ?></p>
- <?php }
-
- else { ?>
- <p class="info smallspace last fail"><?php printf(T_("PHP maximum upload size is not sufficient (%1s), you should define it to %2s in %3s."), $upload_human, '8M', '<em>php.ini</em>'); ?></p>
- <?php } ?>
-
- <p><?php _e("After you finished the setup, Jappix will generate the cache files. It might be slow, just wait until the application is displayed and do not press any button."); ?></p>
-
- <p><?php _e("Thanks for using Jappix!"); ?></p>
- <?php } ?>
- </div>
-
- <div id="install-buttons">
- <?php if($continue && ($step < 6)) { ?>
- <input type="submit" name="submit" value="<?php _e("Next"); ?> »" />
- <?php } if($step == 6) { ?>
- <input type="submit" name="finish" value="<?php _e("Finish"); ?> »" />
- <?php } if(!$continue) { ?>
- <input type="submit" name="check" value="<?php _e("Check again"); ?>" />
- <?php } ?>
-
- <div class="clear"></div>
- </div>
- </form>
-</body>
-
-</html>
-
-<!-- Jappix Install <?php echo $version; ?> - An open social platform -->
diff --git a/server/jingle.php b/server/jingle.php
deleted file mode 100644
index 1df0d424..00000000
--- a/server/jingle.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the Jappix Jingle services API script
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// PHP base
-define('JAPPIX_BASE', '..');
-
-// Get the needed files
-require_once('./functions.php');
-require_once('./read-main.php');
-require_once('./read-hosts.php');
-
-// Prepare application
-enableErrorSink();
-hideErrors();
-compressThis();
-
-// Not allowed for a special node
-if(isStatic() || isUpload()) {
- exit;
-}
-
-// Set a JSON header
-header('Content-Type: application/json');
-
-// If valid data was sent
-if(isset($_GET['username']) && !empty($_GET['username'])) {
- // Read remote IP (secures passwords that are passed there)
- $remote_ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : null;
-
- // Generate cache values
- $cache_hash = md5($_GET['username'].'@'.$remote_ip);
- $cache_path = JAPPIX_BASE.'/tmp/jingle/'.$cache_hash.'.cache';
- $cache_life = $remote_ip ? 3600 : 0;
-
- // Cache missing or obsolete?
- $filemtime = @filemtime($cache_path);
-
- if(!$filemtime or (time() - $filemtime >= $cache_life)) {
- // Note: we use a Google API there, so fallback TURNs will be using Google's TURN server through an encrypted channel
- // we know this won't satisfy everyone, but this is the best compromise we could find for the end-user
- // if you are concerned about privacy, rather setup your TURN and add it to Jappix hosts configuration
-
- // Get the JSON content
- $json = readUrl('https://computeengineondemand.appspot.com/turn?username='.urlencode($_GET['username']));
-
- if($json && strpos($json, 'uris') !== false) {
- file_put_contents($cache_path, $json);
- }
- } else {
- $json = file_get_contents($cache_path);
- }
-
- exit($json);
-}
-
-?>
diff --git a/server/jsmin.php b/server/jsmin.php
deleted file mode 100644
index 5c3f8814..00000000
--- a/server/jsmin.php
+++ /dev/null
@@ -1,375 +0,0 @@
-<?php
-/**
- * jsmin.php - PHP implementation of Douglas Crockford's JSMin.
- *
- * This is pretty much a direct port of jsmin.c to PHP with just a few
- * PHP-specific performance tweaks. Also, whereas jsmin.c reads from stdin and
- * outputs to stdout, this library accepts a string as input and returns another
- * string as output.
- *
- * PHP 5 or higher is required.
- *
- * Permission is hereby granted to use this version of the library under the
- * same terms as jsmin.c, which has the following license:
- *
- * --
- * Copyright (c) 2002 Douglas Crockford (www.crockford.com)
- *
- * 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 shall be used for Good, not Evil.
- *
- * 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.
- * --
- *
- * @package JSMin
- * @author Ryan Grove <ryan@wonko.com>
- * @copyright 2002 Douglas Crockford <douglas@crockford.com> (jsmin.c)
- * @copyright 2008 Ryan Grove <ryan@wonko.com> (PHP port)
- * @license http://opensource.org/licenses/mit-license.php MIT License
- * @version 1.1.1 (2008-03-02)
- * @link https://github.com/rgrove/jsmin-php/
- */
-
-class JSMin {
- const ORD_LF = 10;
- const ORD_SPACE = 32;
- const ACTION_KEEP_A = 1;
- const ACTION_DELETE_A = 2;
- const ACTION_DELETE_A_B = 3;
-
- protected $a = '';
- protected $b = '';
- protected $input = '';
- protected $inputIndex = 0;
- protected $inputLength = 0;
- protected $lookAhead = null;
- protected $output = '';
-
- // -- Public Static Methods --------------------------------------------------
-
- /**
- * Minify Javascript
- *
- * @uses __construct()
- * @uses min()
- * @param string $js Javascript to be minified
- * @return string
- */
- public static function minify($js) {
- $jsmin = new JSMin($js);
- return $jsmin->min();
- }
-
- // -- Public Instance Methods ------------------------------------------------
-
- /**
- * Constructor
- *
- * @param string $input Javascript to be minified
- */
- public function __construct($input) {
- $this->input = str_replace("\r\n", "\n", $input);
- $this->inputLength = strlen($this->input);
- }
-
- // -- Protected Instance Methods ---------------------------------------------
-
- /**
- * Action -- do something! What to do is determined by the $command argument.
- *
- * action treats a string as a single character. Wow!
- * action recognizes a regular expression if it is preceded by ( or , or =.
- *
- * @uses next()
- * @uses get()
- * @throws JSMinException If parser errors are found:
- * - Unterminated string literal
- * - Unterminated regular expression set in regex literal
- * - Unterminated regular expression literal
- * @param int $command One of class constants:
- * ACTION_KEEP_A Output A. Copy B to A. Get the next B.
- * ACTION_DELETE_A Copy B to A. Get the next B. (Delete A).
- * ACTION_DELETE_A_B Get the next B. (Delete B).
- */
- protected function action($command) {
- switch($command) {
- case self::ACTION_KEEP_A:
- $this->output .= $this->a;
-
- case self::ACTION_DELETE_A:
- $this->a = $this->b;
-
- if ($this->a === "'" || $this->a === '"') {
- for (;;) {
- $this->output .= $this->a;
- $this->a = $this->get();
-
- if ($this->a === $this->b) {
- break;
- }
-
- if (ord($this->a) <= self::ORD_LF) {
- throw new JSMinException('Unterminated string literal.');
- }
-
- if ($this->a === '\\') {
- $this->output .= $this->a;
- $this->a = $this->get();
- }
- }
- }
-
- case self::ACTION_DELETE_A_B:
- $this->b = $this->next();
-
- if ($this->b === '/' && (
- $this->a === '(' || $this->a === ',' || $this->a === '=' ||
- $this->a === ':' || $this->a === '[' || $this->a === '!' ||
- $this->a === '&' || $this->a === '|' || $this->a === '?' ||
- $this->a === '{' || $this->a === '}' || $this->a === ';' ||
- $this->a === "\n" )) {
-
- $this->output .= $this->a . $this->b;
-
- for (;;) {
- $this->a = $this->get();
-
- if ($this->a === '[') {
- /*
- inside a regex [...] set, which MAY contain a '/' itself. Example: mootools Form.Validator near line 460:
- return Form.Validator.getValidator('IsEmpty').test(element) || (/^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]\.?){0,63}[a-z0-9!#$%&'*+/=?^_`{|}~-]@(?:(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\])$/i).test(element.get('value'));
- */
- for (;;) {
- $this->output .= $this->a;
- $this->a = $this->get();
-
- if ($this->a === ']') {
- break;
- } elseif ($this->a === '\\') {
- $this->output .= $this->a;
- $this->a = $this->get();
- } elseif (ord($this->a) <= self::ORD_LF) {
- throw new JSMinException('Unterminated regular expression set in regex literal.');
- }
- }
- } elseif ($this->a === '/') {
- break;
- } elseif ($this->a === '\\') {
- $this->output .= $this->a;
- $this->a = $this->get();
- } elseif (ord($this->a) <= self::ORD_LF) {
- throw new JSMinException('Unterminated regular expression literal.');
- }
-
- $this->output .= $this->a;
- }
-
- $this->b = $this->next();
- }
- }
- }
-
- /**
- * Get next char. Convert ctrl char to space.
- *
- * @return string|null
- */
- protected function get() {
- $c = $this->lookAhead;
- $this->lookAhead = null;
-
- if ($c === null) {
- if ($this->inputIndex < $this->inputLength) {
- $c = substr($this->input, $this->inputIndex, 1);
- $this->inputIndex += 1;
- } else {
- $c = null;
- }
- }
-
- if ($c === "\r") {
- return "\n";
- }
-
- if ($c === null || $c === "\n" || ord($c) >= self::ORD_SPACE) {
- return $c;
- }
-
- return ' ';
- }
-
- /**
- * Is $c a letter, digit, underscore, dollar sign, or non-ASCII character.
- *
- * @return bool
- */
- protected function isAlphaNum($c) {
- return ord($c) > 126 || $c === '\\' || preg_match('/^[\w\$]$/', $c) === 1;
- }
-
- /**
- * Perform minification, return result
- *
- * @uses action()
- * @uses isAlphaNum()
- * @return string
- */
- protected function min() {
- $this->a = "\n";
- $this->action(self::ACTION_DELETE_A_B);
-
- while ($this->a !== null) {
- switch ($this->a) {
- case ' ':
- if ($this->isAlphaNum($this->b)) {
- $this->action(self::ACTION_KEEP_A);
- } else {
- $this->action(self::ACTION_DELETE_A);
- }
- break;
-
- case "\n":
- switch ($this->b) {
- case '{':
- case '[':
- case '(':
- case '+':
- case '-':
- $this->action(self::ACTION_KEEP_A);
- break;
-
- case ' ':
- $this->action(self::ACTION_DELETE_A_B);
- break;
-
- default:
- if ($this->isAlphaNum($this->b)) {
- $this->action(self::ACTION_KEEP_A);
- }
- else {
- $this->action(self::ACTION_DELETE_A);
- }
- }
- break;
-
- default:
- switch ($this->b) {
- case ' ':
- if ($this->isAlphaNum($this->a)) {
- $this->action(self::ACTION_KEEP_A);
- break;
- }
-
- $this->action(self::ACTION_DELETE_A_B);
- break;
-
- case "\n":
- switch ($this->a) {
- case '}':
- case ']':
- case ')':
- case '+':
- case '-':
- case '"':
- case "'":
- $this->action(self::ACTION_KEEP_A);
- break;
-
- default:
- if ($this->isAlphaNum($this->a)) {
- $this->action(self::ACTION_KEEP_A);
- }
- else {
- $this->action(self::ACTION_DELETE_A_B);
- }
- }
- break;
-
- default:
- $this->action(self::ACTION_KEEP_A);
- break;
- }
- }
- }
-
- return $this->output;
- }
-
- /**
- * Get the next character, skipping over comments. peek() is used to see
- * if a '/' is followed by a '/' or '*'.
- *
- * @uses get()
- * @uses peek()
- * @throws JSMinException On unterminated comment.
- * @return string
- */
- protected function next() {
- $c = $this->get();
-
- if ($c === '/') {
- switch($this->peek()) {
- case '/':
- for (;;) {
- $c = $this->get();
-
- if (ord($c) <= self::ORD_LF) {
- return $c;
- }
- }
-
- case '*':
- $this->get();
-
- for (;;) {
- switch($this->get()) {
- case '*':
- if ($this->peek() === '/') {
- $this->get();
- return ' ';
- }
- break;
-
- case null:
- throw new JSMinException('Unterminated comment.');
- }
- }
-
- default:
- return $c;
- }
- }
-
- return $c;
- }
-
- /**
- * Get next char. If is ctrl character, translate to a space or newline.
- *
- * @uses get()
- * @return string|null
- */
- protected function peek() {
- $this->lookAhead = $this->get();
- return $this->lookAhead;
- }
-}
-
-// -- Exceptions ---------------------------------------------------------------
-class JSMinException extends Exception {}
-?> \ No newline at end of file
diff --git a/server/manager.php b/server/manager.php
deleted file mode 100644
index 9559c563..00000000
--- a/server/manager.php
+++ /dev/null
@@ -1,847 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the Jappix Manager PHP/HTML code
-
--------------------------------------------------
-
-License: AGPL
-Authors: Valérian Saliou, Cyril "Kyriog" Glapa
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-// Get the manager functions
-require_once(JAPPIX_BASE.'/server/functions-manager.php');
-
-// Session manager
-$id = 0;
-$login_fired = false;
-$logout_fired = false;
-$form_parent = 'manager';
-$user_password = '';
-$user_remember = '';
-$user = '';
-$password = '';
-$user_meta = T_("unknown");
-$user_name = '';
-$add_button = false;
-$remove_button = false;
-$save_button = false;
-$check_updates = false;
-
-// Start the session
-session_start();
-
-// Force the updates check?
-if(isset($_GET['p']) && ($_GET['p'] == 'check')) {
- $check_updates = true;
-}
-
-// Login form is sent
-if(isset($_POST['login'])) {
- // Form sent pointer
- $login_fired = true;
-
- // Extract the user name
- if(isset($_POST['admin_name']) && !empty($_POST['admin_name'])) {
- $user = trim($_POST['admin_name']);
- }
-
- if($user && (isset($_POST['admin_password']) && !empty($_POST['admin_password']))) {
- // Get the password values
- $password = genStrongHash(trim($_POST['admin_password']));
-
- // Write the session
- $_SESSION['jappix_user'] = $user;
- $_SESSION['jappix_password'] = $password;
- }
-}
-
-// Session is set
-else if((isset($_SESSION['jappix_user']) && !empty($_SESSION['jappix_user'])) && (isset($_SESSION['jappix_password']) && !empty($_SESSION['jappix_password']))) {
- // Form sent pointer
- $login_fired = true;
-
- // Get the session values
- $user = $_SESSION['jappix_user'];
- $password = $_SESSION['jappix_password'];
-}
-
-// Validate the current session
-if($login_fired && isAdmin($user, $password)) {
- $id = 1;
-}
-
-// Any special page requested (and authorized)?
-if(($id != 0) && isset($_GET['a']) && !empty($_GET['a'])) {
- // Extract the page name
- $page_requested = $_GET['a'];
-
- switch($page_requested) {
- // Logout request
- case 'logout':
- // Remove the session
- unset($_SESSION['jappix_user']);
- unset($_SESSION['jappix_password']);
-
- // Set a logout marker
- $logout_fired = true;
-
- // Page ID
- $id = 0;
-
- break;
-
- // Configuration request
- case 'configuration':
- // Allowed buttons
- $save_button = true;
-
- // Page ID
- $id = 2;
-
- break;
-
- // Hosts request
- case 'hosts':
- // Allowed buttons
- $save_button = true;
-
- // Page ID
- $id = 3;
-
- break;
-
- // Storage request
- case 'storage':
- // Allowed buttons
- $remove_button = true;
-
- // Page ID
- $id = 4;
-
- break;
-
- // Design request
- case 'design':
- // Allowed buttons
- $save_button = true;
- $remove_button = true;
-
- // Page ID
- $id = 5;
-
- break;
-
- // Users request
- case 'users':
- // Allowed buttons
- $add_button = true;
- $remove_button = true;
-
- // Page ID
- $id = 6;
-
- break;
-
- // Updates request
- case 'updates':
- // Page ID
- $id = 7;
-
- break;
-
- // Default page when authorized (statistics)
- default:
- // Page ID
- $id = 1;
- }
-}
-
-// Page server-readable names
-$identifiers = array(
- 'login',
- 'statistics',
- 'configuration',
- 'hosts',
- 'storage',
- 'design',
- 'users',
- 'updates'
-);
-
-// Page human-readable names
-$names = array(
- T_("Manager access"),
- T_("Statistics"),
- T_("Configuration"),
- T_("Hosts"),
- T_("Storage"),
- T_("Design"),
- T_("Users"),
- T_("Updates")
-);
-
-// Any user for the meta?
-if($user && ($id != 0)) {
- $user_meta = $user;
-}
-
-// Define current page identifier & name
-$page_identifier = $identifiers[$id];
-$page_name = $names[$id];
-
-// Define the current page form action
-if($id == 0) {
- $form_action = keepGet('(m|a|p|k)', false);
-} else {
- $form_action = keepGet('(m|p|k)', false);
-}
-
-?>
-<!DOCTYPE html>
-<?php htmlTag($locale); ?>
-
-<head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <meta name="robots" content="noindex, follow" />
- <title><?php _e("Jappix manager"); ?> &bull; <?php echo($page_name); ?></title>
- <link rel="shortcut icon" href="./favicon.ico" />
- <?php echoGetFiles($hash, '', 'css', 'manager.xml', ''); echo "\n"; ?>
- <!--[if lt IE 9]><?php echoGetFiles($hash, '', 'css', '', 'ie.css'); ?><![endif]-->
-</head>
-
-<body class="body-images">
- <form id="manager" enctype="multipart/form-data" method="post" action="./?m=manager<?php echo $form_action; ?>">
- <div id="manager-top">
- <div class="logo manager-images"><?php _e("Manager"); ?></div>
-
- <div class="meta">
- <span><?php echo(htmlspecialchars($user_meta)); ?></span>
-
- <?php if($id != 0) {
-
- // Keep get
- $keep_get = keepGet('(a|p|b|s|k)', false);
-
- ?>
- <a class="logout manager-images" href="./?a=logout<?php echo $keep_get; ?>"><?php _e("Disconnect"); ?></a>
- <?php } ?>
-
- <a class="close manager-images" href="./<?php echo keepGet('(m|a|p|b|s|k)', true); ?>"><?php _e("Close"); ?></a>
- </div>
-
- <div class="clear"></div>
- </div>
-
- <?php if($id != 0) { ?>
- <div id="manager-tabs">
- <a<?php currentTab('statistics', $page_identifier); ?> href="./?a=statistics<?php echo $keep_get; ?>"><?php _e("Statistics"); ?></a>
- <a<?php currentTab('configuration', $page_identifier); ?> href="./?a=configuration<?php echo $keep_get; ?>"><?php _e("Configuration"); ?></a>
- <a<?php currentTab('hosts', $page_identifier); ?> href="./?a=hosts<?php echo $keep_get; ?>"><?php _e("Hosts"); ?></a>
- <a<?php currentTab('storage', $page_identifier); ?> href="./?a=storage<?php echo $keep_get; ?>"><?php _e("Storage"); ?></a>
- <a<?php currentTab('design', $page_identifier); ?> href="./?a=design<?php echo $keep_get; ?>"><?php _e("Design"); ?></a>
- <a<?php currentTab('users', $page_identifier); ?> href="./?a=users<?php echo $keep_get; ?>"><?php _e("Users"); ?></a>
- <a<?php currentTab('updates', $page_identifier); ?> class="last" href="./?a=updates<?php echo $keep_get; ?>"><?php _e("Updates"); ?></a>
- </div>
- <?php } ?>
-
- <div id="manager-content">
- <?php
-
- if($id != 0) {
- if(!storageWritable()) { ?>
- <p class="info bottomspace fail"><?php _e("Your storage folders are not writable, please apply the good rights!"); ?></p>
- <?php }
-
- if(BOSHProxy() && extension_loaded('suhosin') && (ini_get('suhosin.get.max_value_length') < 1000000)) { ?>
- <p class="info bottomspace neutral"><?php printf(T_("%1s may cause problems to the proxy, please increase %2s value up to %3s!"), 'Suhosin', '<em>suhosin.get.max_value_length</em>', '1000000'); ?></p>
- <?php }
-
- if(newUpdates($check_updates)) { ?>
- <a class="info bottomspace neutral" href="./?a=updates<?php echo $keep_get; ?>"><?php _e("A new Jappix version is available! Check what is new and launch the update!"); ?></a>
- <?php }
- }
-
- // Authorized and statistics page requested
- if($id == 1) { ?>
- <h3 class="statistics manager-images"><?php _e("Statistics"); ?></h3>
-
- <p><?php _e("Basic statistics are processed by Jappix about some important things, you can find them below."); ?></p>
- <?php if(!hasStatistics()): ?>
- <p><?php _e("Statistics are currently disabled in the settings."); ?></p>
- <?php else: ?>
- <h4><?php _e("Access statistics"); ?></h4>
-
- <?php
-
- // Read the visits values
- $visits = getVisits();
-
- ?>
-
- <ul class="stats">
- <li class="total"><b><?php _e("Total"); ?></b><span><?php echo $visits['total']; ?></span></li>
- <li><b><?php _e("Daily"); ?></b><span><?php echo $visits['daily']; ?></span></li>
- <li><b><?php _e("Weekly"); ?></b><span><?php echo $visits['weekly']; ?></span></li>
- <li><b><?php _e("Monthly"); ?></b><span><?php echo $visits['monthly']; ?></span></li>
- <li><b><?php _e("Yearly"); ?></b><span><?php echo $visits['yearly']; ?></span></li>
- </ul>
-
- <object class="stats" type="image/svg+xml" data="./server/stats-svg.php?l=<?php echo $locale; ?>&amp;g=access"></object>
-
- <?php
-
- // Get the share stats
- $share_stats = shareStats();
-
- // Any share stats to display?
- if(count($share_stats)) { ?>
- <h4><?php _e("Share statistics"); ?></h4>
-
- <ol class="stats">
- <?php
-
- // Display the users who have the largest share folder
- $share_users = largestShare($share_stats, 8);
-
- foreach($share_users as $current_user => $current_value)
- echo('<li><b><a href="xmpp:'.$current_user.'">'.$current_user.'</a></b><span>'.formatBytes($current_value).'</span></li>');
-
- ?>
- </ol>
-
- <object class="stats" type="image/svg+xml" data="./server/stats-svg.php?l=<?php echo $locale; ?>&amp;g=share"></object>
- <?php } ?>
-
- <h4><?php _e("Other statistics"); ?></h4>
-
- <ul class="stats">
- <li class="total"><b><?php _e("Total"); ?></b><span><?php echo formatBytes(sizeDir(JAPPIX_BASE.'/store/')); ?></span></li>
-
- <?php
-
- // Append the human-readable array values
- $others_stats = otherStats();
-
- foreach($others_stats as $others_name => $others_value)
- echo('<li><b>'.$others_name.'</b><span>'.formatBytes($others_value).'</span></li>');
-
- ?>
- </ul>
-
- <object class="stats" type="image/svg+xml" data="./server/stats-svg.php?l=<?php echo $locale; ?>&amp;g=others"></object>
- <?php endif ?>
- <?php }
-
- // Authorized and configuration page requested
- else if($id == 2) { ?>
- <h3 class="configuration manager-images"><?php _e("Configuration"); ?></h3>
-
- <p><?php _e("Change your Jappix node configuration with this tool."); ?></p>
-
- <p><?php _e("Note that if you don't specify a value which is compulsory, it will be automatically completed with the default one."); ?></p>
-
- <?php
-
- // Define the main configuration variables
- include(JAPPIX_BASE.'/server/vars-main.php');
-
- // Read the main configuration POST
- if(isset($_POST['save'])) {
- include(JAPPIX_BASE.'/server/post-main.php');
-
- // Show a success alert
- ?>
- <p class="info smallspace success"><?php _e("Changes saved!"); ?></p>
- <?php
- }
-
- // Include the main configuration form
- include(JAPPIX_BASE.'/server/form-main.php');
- }
-
- // Authorized and hosts page requested
- else if($id == 3) { ?>
- <h3 class="hosts manager-images"><?php _e("Hosts"); ?></h3>
-
- <p><?php _e("Change the XMPP hosts that this Jappix node serves with this tool."); ?></p>
-
- <p><?php _e("Maybe you don't know what a BOSH server is? In fact, this is a relay between a Jappix client and a XMPP server, which is necessary because of technical limitations."); ?></p>
-
- <p><?php _e("Note that if you don't specify a value which is compulsory, it will be automatically completed with the default one."); ?></p>
-
- <?php
-
- // Define the hosts configuration variables
- include(JAPPIX_BASE.'/server/vars-hosts.php');
-
- // Read the hosts configuration POST
- if(isset($_POST['save'])) {
- include(JAPPIX_BASE.'/server/post-hosts.php');
-
- // Show a success alert
- ?>
- <p class="info smallspace success"><?php _e("Changes saved!"); ?></p>
- <?php
- }
-
- // Include the hosts configuration form
- include(JAPPIX_BASE.'/server/form-hosts.php');
- }
-
- // Authorized and storage page requested
- else if($id == 4) { ?>
- <h3 class="storage manager-images"><?php _e("Storage"); ?></h3>
-
- <p><?php _e("All this Jappix node stored files can be managed with this tool: please select a sub-folder and start editing its content!"); ?></p>
-
- <?php
-
- // Include the store configuration vars
- include(JAPPIX_BASE.'/server/vars-store.php');
-
- // Include the store configuration POST handler
- include(JAPPIX_BASE.'/server/post-store.php');
-
- // Include the store configuration GET handler
- include(JAPPIX_BASE.'/server/get-store.php');
-
- ?>
-
- <h4><?php _e("Maintenance"); ?></h4>
-
- <p><?php _e("Keep your Jappix node fresh and fast, clean the storage folders regularly!"); ?></p>
-
- <?php
-
- // Keep get
- $keep_get = keepGet('p', false);
-
- ?>
-
- <ul>
- <li class="total"><a href="./?p=everything<?php echo $keep_get; ?>"><?php _e("Clean everything"); ?></a></li>
- <li><a href="./?p=cache<?php echo $keep_get; ?>"><?php _e("Purge cache"); ?></a></li>
- <li><a href="./?p=archives<?php echo $keep_get; ?>"><?php _e("Purge logs"); ?></a></li>
- <li><a href="./?p=send<?php echo $keep_get; ?>"><?php _e("Purge sent files"); ?></a></li>
- <li><a href="./?p=updates<?php echo $keep_get; ?>"><?php _e("Purge updates"); ?></a></li>
- </ul>
-
- <h4><?php _e("Share"); ?></h4>
-
- <p><?php _e("Stay tuned in what your users store on your server and remove undesired content with this tool."); ?></p>
-
- <fieldset>
- <legend><?php _e("Browse"); ?></legend>
-
- <div class="browse">
- <?php
-
- // List the share files
- browseFolder($share_folder, 'share');
-
- ?>
- </div>
- </fieldset>
-
- <h4><?php _e("Music"); ?></h4>
-
- <p><?php _e("Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in Jappix!"); ?></p>
-
- <p><?php printf(T_("The file you want to upload must be smaller than %s."), formatBytes(uploadMaxSize()).''); ?></p>
-
- <fieldset>
- <legend><?php _e("New"); ?></legend>
-
- <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo(uploadMaxSize().''); ?>">
-
- <label for="music_title"><?php _e("Title"); ?></label><input id="music_title" class="icon manager-images" type="text" name="music_title" value="<?php echo(htmlspecialchars($music_title)); ?>" />
-
- <label for="music_artist"><?php _e("Artist"); ?></label><input id="music_artist" class="icon manager-images" type="text" name="music_artist" value="<?php echo(htmlspecialchars($music_artist)); ?>" />
-
- <label for="music_album"><?php _e("Album"); ?></label><input id="music_album" class="icon manager-images" type="text" name="music_album" value="<?php echo(htmlspecialchars($music_album)); ?>" />
-
- <label for="music_file"><?php _e("File"); ?></label><input id="music_file" type="file" name="music_file" accept="audio/*" />
- <label for="music_upload"><?php _e("Upload"); ?></label><input id="music_upload" type="submit" name="upload" value="<?php _e("Upload"); ?>" />
- </fieldset>
-
- <fieldset>
- <legend><?php _e("Browse"); ?></legend>
-
- <div class="browse">
- <?php
-
- // List the music files
- browseFolder($music_folder, 'music');
-
- ?>
- </div>
- </fieldset>
- <?php }
-
- // Authorized and design page requested
- else if($id == 5) { ?>
- <h3 class="design manager-images"><?php _e("Design"); ?></h3>
-
- <p><?php _e("Jappix is fully customisable: you can change its design right here."); ?></p>
-
- <?php
-
- // Include the design configuration vars
- include(JAPPIX_BASE.'/server/vars-design.php');
-
- // Include the design configuration POST handler
- include(JAPPIX_BASE.'/server/post-design.php');
-
- // Include the design configuration reader
- include(JAPPIX_BASE.'/server/read-design.php');
-
- // Folder view?
- if(isset($_GET['b']) && isset($_GET['s']) && ($_GET['b'] == 'backgrounds'))
- $backgrounds_folder = urldecode($_GET['s']);
-
- ?>
-
- <h4><?php _e("Logo"); ?></h4>
-
- <p><?php _e("You can set your own service logo to replace the default one. Take care of the size and the main color of each logo!"); ?></p>
-
- <div class="sub">
- <p><?php _e("Upload each logo with the recommended maximum pixel size."); ?></p>
- <p><?php _e("Your logo format must be PNG. Leave a field empty and the logo will not be changed."); ?></p>
-
- <label for="logo_own_1_location">Jappix Desktop, <em>311×113</em></label><?php logoFormField('1', 'desktop_home'); ?>
- <label for="logo_own_2_location">Jappix Desktop, <em>90×25</em></label><?php logoFormField('2', 'desktop_app'); ?>
- <label for="logo_own_3_location">Jappix Mobile, <em>83×30</em></label><?php logoFormField('3', 'mobile'); ?>
- <label for="logo_own_4_location">Jappix Mini, <em>81×22</em></label><?php logoFormField('4', 'mini'); ?>
-
- <label for="logo_own_upload"><?php _e("Upload"); ?></label><input id="logo_own_upload" type="submit" name="logo_upload" value="<?php _e("Upload"); ?>" />
-
- <div class="clear"></div>
- </div>
-
- <h4><?php _e("Background"); ?></h4>
-
- <p><?php _e("Change your Jappix node background with this tool. You can either set a custom color or an uploaded image. Let your creativity flow!"); ?></p>
-
- <label class="master" for="background_default"><input id="background_default" type="radio" name="background_type" value="default"<?php echo($background_default); ?> /><?php _e("Use default background"); ?></label>
-
- <?php if($backgrounds_number) { ?>
- <label class="master" for="background_image"><input id="background_image" type="radio" name="background_type" value="image"<?php echo($background_image); ?> /><?php _e("Use your own image"); ?></label>
-
- <div class="sub">
- <p><?php _e("Select a background to use and change the display options."); ?></p>
-
- <label for="background_image_file"><?php _e("Image"); ?></label><select id="background_image_file" name="background_image_file">
- <?php
-
- // List the background files
- foreach($backgrounds as $backgrounds_current) {
- // Check this is the selected background
- if($backgrounds_current == $background['image_file'])
- $backgrounds_selected = ' selected=""';
- else
- $backgrounds_selected = '';
-
- // Encode the current background name
- $backgrounds_current = htmlspecialchars($backgrounds_current);
-
- echo('<option value="'.$backgrounds_current.'"'.$backgrounds_selected.'>'.$backgrounds_current.'</option>');
- }
-
- ?>
- </select>
-
- <label for="background_image_repeat"><?php _e("Repeat"); ?></label><select id="background_image_repeat" name="background_image_repeat">
- <option value="no-repeat"<?php echo($background_image_repeat_no); ?>><?php _e("No"); ?></option>
- <option value="repeat"<?php echo($background_image_repeat_all); ?>><?php _e("All"); ?></option>
- <option value="repeat-x"<?php echo($background_image_repeat_x); ?>><?php _e("Horizontal"); ?></option>
- <option value="repeat-y"<?php echo($background_image_repeat_y); ?>><?php _e("Vertical"); ?></option>
- </select>
-
- <label for="background_image_horizontal"><?php _e("Horizontal"); ?></label><select id="background_image_horizontal" name="background_image_horizontal">
- <option value="center"<?php echo($background_image_horizontal_center); ?>><?php _e("Center"); ?></option>
- <option value="left"<?php echo($background_image_horizontal_left); ?>><?php _e("Left"); ?></option>
- <option value="right"<?php echo($background_image_horizontal_right); ?>><?php _e("Right"); ?></option>
- </select>
-
- <label for="background_image_vertical"><?php _e("Vertical"); ?></label><select id="background_image_vertical" name="background_image_vertical">
- <option value="center"<?php echo($background_image_vertical_center); ?>><?php _e("Center"); ?></option>
- <option value="top"<?php echo($background_image_vertical_top); ?>><?php _e("Top"); ?></option>
- <option value="bottom"<?php echo($background_image_vertical_bottom); ?>><?php _e("Bottom"); ?></option>
- </select>
-
- <label for="background_image_adapt"><?php _e("Adapt"); ?></label><input id="background_image_adapt" type="checkbox" name="background_image_adapt"<?php echo($background_image_adapt); ?> />
-
- <label for="background_image_color"><?php _e("Color"); ?></label><input id="background_image_color" class="icon manager-images" type="color" name="background_image_color" value="<?php echo(htmlspecialchars($background['image_color'])); ?>" />
-
- <div class="clear"></div>
- </div>
- <?php } ?>
-
- <label class="master" for="background_color"><input id="background_color" type="radio" name="background_type" value="color"<?php echo($background_color); ?> /><?php _e("Use your own color"); ?></label>
-
- <div class="sub">
- <p><?php _e("Type the hexadecimal color value you want to use as a background."); ?></p>
-
- <label for="background_color_color"><?php _e("Color"); ?></label><input id="background_color_color" class="icon manager-images" type="color" name="background_color_color" value="<?php echo(htmlspecialchars($background['color_color'])); ?>" />
-
- <div class="clear"></div>
- </div>
-
- <h4><?php _e("Manage backgrounds"); ?></h4>
-
- <p><?php _e("You can add a new background to the list with this tool. Please send a valid image."); ?></p>
-
- <div class="sub">
- <p><?php printf(T_("The file you want to upload must be smaller than %s."), formatBytes(uploadMaxSize()).''); ?></p>
-
- <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo(uploadMaxSize().''); ?>">
-
- <label for="background_image_location"><?php _e("File"); ?></label><input id="background_image_location" type="file" name="background_image_upload" accept="image/*" />
- <label for="background_image_upload"><?php _e("Upload"); ?></label><input id="background_image_upload" type="submit" name="background_upload" value="<?php _e("Upload"); ?>" />
-
- <div class="clear"></div>
- </div>
-
- <p><?php _e("If you want to remove some backgrounds, use the browser below."); ?></p>
-
- <fieldset>
- <legend><?php _e("List"); ?></legend>
-
- <div class="browse">
- <?php
-
- // List the background files
- browseFolder($backgrounds_folder, 'backgrounds');
-
- ?>
- </div>
- </fieldset>
-
- <h4><?php _e("Notice"); ?></h4>
-
- <p><?php _e("Define a homepage notice for all your users, such as a warn, an important message or an advert with this tool."); ?></p>
-
- <label class="master" for="notice_none"><input id="notice_none" type="radio" name="notice_type" value="none"<?php echo($notice_none); ?> /><?php _e("None"); ?></label>
-
- <label class="master" for="notice_simple"><input id="notice_simple" type="radio" name="notice_type" value="simple"<?php echo($notice_simple); ?> /><?php _e("Simple notice"); ?></label>
-
- <div class="sub">
- <p><?php _e("This notice only needs simple text to be displayed, but no code is allowed!"); ?></p>
- </div>
-
- <label class="master" for="notice_advanced"><input id="notice_advanced" type="radio" name="notice_type" value="advanced"<?php echo($notice_advanced); ?> /><?php _e("Advanced notice"); ?></label>
-
- <div class="sub">
- <p><?php _e("You can customize your notice with embedded HTML, CSS and JavaScript, but you need to code the style."); ?></p>
- </div>
-
- <div class="clear"></div>
-
- <textarea class="notice-text" name="notice_text" rows="8" cols="60"><?php echo(htmlspecialchars($notice_text)); ?></textarea>
- <?php }
-
- // Authorized and users page requested
- else if($id == 6) { ?>
- <h3 class="users manager-images"><?php _e("Users"); ?></h3>
-
- <p><?php _e("You can define more than one administrator for this Jappix node. You can also change a password with this tool."); ?></p>
-
- <?php
-
- // Add an user?
- if(isset($_POST['add'])) {
- // Include the users POST handler
- include(JAPPIX_BASE.'/server/post-users.php');
-
- if($valid_user) { ?>
- <p class="info smallspace success"><?php _e("The user has been added!"); ?></p>
- <?php }
-
- else { ?>
- <p class="info smallspace fail"><?php _e("Oops, you missed something or the two passwords do not match!"); ?></p>
- <?php }
- }
-
- // Remove an user?
- else if(isset($_POST['remove'])) {
- // Initialize the match
- $users_removed = false;
- $users_remove = array();
-
- // Try to get the users to remove
- foreach($_POST as $post_key => $post_value) {
- // Is it an admin user?
- if(preg_match('/^admin_(.+)$/i', $post_key)) {
- // Update the marker
- $users_removed = true;
-
- // Push the value to the global array
- array_push($users_remove, $post_value);
- }
- }
-
- // Somebody has been removed
- if($users_removed) {
-
- // Remove the users!
- manageUsers('remove', $users_remove);
-
- ?>
- <p class="info smallspace success"><?php _e("The chosen users have been removed."); ?></p>
- <?php }
-
- // Nobody has been removed
- else { ?>
- <p class="info smallspace fail"><?php _e("You must select one or more users to be removed!"); ?></p>
- <?php }
- } ?>
-
- <h4><?php _e("Add"); ?></h4>
-
- <p><?php _e("Add a new user with this tool, or change a password (type an existing username). Please submit a strong password!"); ?></p>
-
- <?php
-
- // Include the user add form
- include(JAPPIX_BASE.'/server/form-users.php');
-
- ?>
-
- <h4><?php _e("Manage"); ?></h4>
-
- <p><?php _e("Remove users with this tool. Note that you cannot remove a user if he is the only one remaining."); ?></p>
-
- <fieldset>
- <legend><?php _e("List"); ?></legend>
-
- <div class="browse">
- <?php
-
- // List the users
- browseUsers();
-
- ?>
- </div>
- </fieldset>
- <?php }
-
- // Authorized and updates page requested
- else if($id == 7) { ?>
- <h3 class="updates manager-images"><?php _e("Updates"); ?></h3>
-
- <p><?php _e("Update your Jappix node with this tool, or check if a new one is available. Informations about the latest version are also displayed (in english)."); ?></p>
-
- <?php
-
- // Using developer mode (no need to update)?
- if(isDeveloper()) { ?>
- <h4><?php _e("Check for updates"); ?></h4>
-
- <p class="info smallspace neutral"><?php printf(T_("You are using a development version of Jappix. Update it through our repository by executing: %s."), '<em>git pull</em>'); ?></p>
- <?php }
-
- // New updates available?
- else if(newUpdates($check_updates)) {
- // Get the update informations
- $update_infos = updateInformations();
-
- // We can launch the update!
- if(isset($_GET['p']) && ($_GET['p'] == 'update')) { ?>
- <h4><?php _e("Update in progress"); ?></h4>
-
- <?php if(processUpdate($update_infos['url'])) { ?>
- <p class="info smallspace success"><?php _e("Jappix has been updated: you are now running the latest version. Have fun!"); ?></p>
- <?php } else { ?>
- <p class="info smallspace fail"><?php _e("The update has failed! Please try again later."); ?></p>
- <?php }
- }
-
- // We just show a notice
- else {
- ?>
- <h4><?php _e("Available updates"); ?></h4>
-
- <a class="info smallspace fail" href="./?p=update<?php echo keepGet('(p|b|s)', false); ?>"><?php printf(T_("Your version is out to date. Update it now to %s by clicking here!"), '<em>'.$update_infos['id'].'</em>'); ?></a>
-
- <h4><?php _e("What's new?"); ?></h4>
-
- <div><?php echo $update_infos['description']; ?></div>
- <?php }
-
- // No new update
- } else { ?>
- <h4><?php _e("Check for updates"); ?></h4>
-
- <a class="info smallspace success" href="./?p=check<?php echo keepGet('(p|b|s)', false); ?>"><?php _e("Your version seems to be up to date, but you can check updates manually by clicking here."); ?></a>
- <?php } ?>
- <?php }
-
- // Not authorized, show the login form
- else { ?>
- <h3 class="login manager-images"><?php _e("Manager access"); ?></h3>
-
- <p><?php _e("This is a restricted area: only the authorized users can manage this Jappix node."); ?></p>
- <p><?php _e("Please use the form below to login to the administration panel."); ?></p>
- <p><?php _e("To improve security, sessions are limited in time and when your browser will be closed, you will be logged out."); ?></p>
-
- <fieldset>
- <legend><?php _e("Credentials"); ?></legend>
-
- <label for="admin_name"><?php _e("User"); ?></label><input id="admin_name" class="icon manager-images" type="text" name="admin_name" value="<?php echo(htmlspecialchars($user)); ?>" required="" />
-
- <label for="admin_password"><?php _e("Password"); ?></label><input id="admin_password" class="icon manager-images" type="password" name="admin_password" required="" />
- </fieldset>
-
- <?php
-
- // Disconnected
- if($logout_fired) { ?>
- <p class="info bigspace success"><?php _e("You have been logged out. Goodbye!"); ?></p>
- <?php }
-
- // Login error
- else if($login_fired) { ?>
- <p class="info bigspace fail"><?php _e("Oops, you could not be recognized as a valid administrator. Check your credentials!"); ?></p>
- <?php
-
- // Remove the session
- unset($_SESSION['jappix_user']);
- unset($_SESSION['jappix_password']);
-
- }
- } ?>
-
- <div class="clear"></div>
- </div>
-
- <div id="manager-buttons">
- <?php if($id == 0) { ?>
- <input type="submit" name="login" value="<?php _e("Here we go!"); ?>" />
- <?php } else { ?>
- <?php } if($add_button) { ?>
- <input type="submit" name="add" value="<?php _e("Add"); ?>" />
- <?php } if($save_button) { ?>
- <input type="submit" name="save" value="<?php _e("Save"); ?>" />
- <?php } if($remove_button) { ?>
- <input type="submit" name="remove" value="<?php _e("Remove"); ?>" />
- <?php } ?>
-
- <div class="clear"></div>
- </div>
-
- </form>
-</body>
-
-</html>
-
-<!-- Jappix Manager <?php echo $version; ?> - An open social platform -->
diff --git a/server/mobile.php b/server/mobile.php
deleted file mode 100644
index 7b208e74..00000000
--- a/server/mobile.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the Jappix Mobile PHP/HTML code
-
--------------------------------------------------
-
-License: AGPL
-Authors: Valérian Saliou, Camaran
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-?>
-
-<!DOCTYPE html>
-<?php htmlTag($locale); ?>
-
-<head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <meta name="apple-mobile-web-app-capable" content="yes" />
- <meta name="apple-mobile-web-app-status-bar-style" content="black" />
- <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0, minimal-ui" name="viewport" />
- <title><?php echo htmlspecialchars(SERVICE_NAME); ?> (<?php _e("Jappix Mobile"); ?>) &bull; <?php echo htmlspecialchars(SERVICE_DESC); ?></title>
- <link rel="shortcut icon" href="./favicon.ico" />
-
- <?php echoGetFiles($hash, '', 'css', 'mobile.xml', ''); echo "\n"; ?>
- <?php echoGetFiles($hash, $locale, 'js', 'mobile.xml', ''); echo "\n"; ?>
-
- <script type="text/javascript">
- var HTTP_AUTH = {};
- </script>
-
- <?php
- if(httpAuthEnabled()) {
- echo "\n\t";
- $auth_credentials = httpAuthCredentials();
- ?>
- <script type="text/javascript">
- HTTP_AUTH = {
- user: <?php echo json_encode($auth_credentials['user']); ?>,
- password: <?php echo json_encode($auth_credentials['password']); ?>,
- host: <?php echo json_encode($auth_credentials['host']); ?>,
- }
- </script>
- <?php
- echo "\n";
- }
- ?>
-</head>
-
-<body>
- <div id="home">
- <div class="header">
- <div class="mobile-images"></div>
- </div>
-
- <noscript>
- <div class="notification" id="noscript">
- <?php _e("Please enable JavaScript"); ?>
- </div>
- </noscript>
-
- <div class="notification" id="error">
- <?php _e("Error"); ?>
- </div>
-
- <div class="notification" id="info">
- <?php _e("Please wait..."); ?>
- </div>
-
- <div class="login">
- <?php _e("Login"); ?>
-
- <form id="login-form" action="#" method="post" onsubmit="return Mobile.doLogin(this);">
- <input class="xid mobile-images" type="text" name="xid" required="" placeholder="<?php _e("jid@domain.tld"); ?>" />
- <input class="password mobile-images" type="password" id="pwd" name="pwd" required="" placeholder="<?php _e("Password"); ?>" />
- <?php if((REGISTRATION != 'off') && (REGISTER_API != 'on')) { ?>
- <label><input class="register" type="checkbox" id="reg" name="reg" /><?php _e("Register"); ?></label>
- <?php } ?>
- <input type="submit" name="ok" value="<?php _e("Here we go!"); ?>" />
- </form>
- </div>
-
- <a href="./?m=desktop<?php echo keepGet('m', false); ?>"><?php _e("Desktop"); ?></a>
- <?php if(hasLegal()) { ?>- <a href="<?php echo htmlspecialchars(LEGAL); ?>"><?php _e("Legal"); ?></a><?php } ?>
- </div>
-
- <?php include(JAPPIX_BASE.'/server/analytics.php'); ?>
-</body>
-
-</html>
-
-<!-- Jappix Mobile <?php echo $version; ?> - An open social platform -->
diff --git a/server/music-search.php b/server/music-search.php
deleted file mode 100644
index b1c7cee7..00000000
--- a/server/music-search.php
+++ /dev/null
@@ -1,109 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the Jappix music search script
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// PHP base
-define('JAPPIX_BASE', '..');
-
-// Get the needed files
-require_once('./functions.php');
-require_once('./read-main.php');
-require_once('./read-hosts.php');
-
-// Prepare application
-enableErrorSink();
-hideErrors();
-compressThis();
-
-// Not allowed for a special node
-if(isStatic() || isUpload()) {
- exit;
-}
-
-// If valid data was sent
-if((isset($_GET['searchquery']) && !empty($_GET['searchquery'])) && (isset($_GET['location']) && !empty($_GET['location']))) {
- // Set a XML header
- header('Content-Type: text/xml; charset=utf-8');
-
- // Get the values
- $searchquery = $_GET['searchquery'];
- $location = $_GET['location'];
-
- // Jamendo search?
- if($location == 'jamendo') {
- exit(readUrl('http://api.jamendo.com/get2/name+id+duration+url/track/xml/?searchquery='.urlencode($searchquery).'&order=searchweight_desc'));
- }
-
- // Local music search
- $xml = '<data>';
- $searchquery = strtolower($searchquery);
-
- // Escape the regex special characters
- $searchquery = escapeRegex($searchquery);
-
- // Search in the directory
- $repertory = '../store/music/';
- $scan = scandir($repertory);
-
- foreach($scan as $current) {
- // This file match our query!
- if(is_file($repertory.$current) && $current && preg_match('/(^|\s|\[)('.$searchquery.')(.+)?(\.(og(g|a)|mp3|wav))$/i', strtolower($current))) {
- // Get the basic informations
- $title = preg_replace('/^(.+)(\.)(og(g|a)|mp3|wav)$/i', '$1', $current);
- $url = $location.'store/music/'.$current;
- $ext = getFileExt($current);
- $id = md5($url);
-
- // Get the MIME type
- if($ext == 'mp3') {
- $type = 'audio/mpeg';
- } else if($ext == 'wav') {
- $type = 'audio/x-wav';
- } else {
- $type = 'audio/ogg';
- }
-
- // Get the advanced informations
- $locked_title = $title;
- $artist = '';
- $source = '';
-
- $title_regex = '/^(([^-]+) - )?([^\[]+)( \[(.+))?$/i';
- $artist_regex = '/^(.+) - (.+)$/i';
- $source_regex = '/^(.+) \[(.+)\]$/i';
-
- if(preg_match($title_regex, $locked_title)) {
- $title = preg_replace($title_regex, '$3', $locked_title);
- }
-
- if(preg_match($artist_regex, $locked_title)) {
- $artist = preg_replace($artist_regex, '$1', $locked_title);
- }
-
- if(preg_match($source_regex, $locked_title)) {
- $source = preg_replace($source_regex, '$2', $locked_title);
- }
-
- // Generate the XML
- $xml .= '<data><track><name>'.htmlspecialchars($title).'</name><artist>'.htmlspecialchars($artist).'</artist><source>'.htmlspecialchars($source).'</source><id>'.htmlspecialchars($id).'</id><url>'.htmlspecialchars($url).'</url><type>'.$type.'</type></track></data>';
- }
- }
-
- // End
- $xml .= '</data>';
-
- // Return the path to the file
- exit($xml);
-}
-
-?>
diff --git a/server/post-design.php b/server/post-design.php
deleted file mode 100644
index 08898292..00000000
--- a/server/post-design.php
+++ /dev/null
@@ -1,228 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the design configuration POST handler (manager)
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-// Handle the remove GET
-if(isset($_GET['k']) && !empty($_GET['k'])) {
- $kill_logo = JAPPIX_BASE.'/store/logos/'.$_GET['k'].'.png';
-
- if(isSafe($kill_logo) && file_exists($kill_logo)) {
- unlink($kill_logo);
-
- echo('<p class="info smallspace success">'.T_("The selected elements have been removed.").'</p>');
- }
-}
-
-// Handle the remove POST
-else if(isset($_POST['remove'])) {
- removeElements();
-}
-
-// Handle the logo upload POST
-else if(isset($_POST['logo_upload'])) {
- // Avoid errors
- $logos_arr_1_name = $logos_arr_1_tmp = $logos_arr_2_name = $logos_arr_2_tmp = $logos_arr_3_name = $logos_arr_3_tmp = $logos_arr_4_name = $logos_arr_4_tmp = '';
-
- if(isset($_FILES['logo_own_1_location'])) {
- $logos_arr_1_name = $_FILES['logo_own_1_location']['name'];
- $logos_arr_1_tmp = $_FILES['logo_own_1_location']['tmp_name'];
- }
-
- if(isset($_FILES['logo_own_2_location'])) {
- $logos_arr_2_name = $_FILES['logo_own_2_location']['name'];
- $logos_arr_2_tmp = $_FILES['logo_own_2_location']['tmp_name'];
- }
-
- if(isset($_FILES['logo_own_3_location'])) {
- $logos_arr_3_name = $_FILES['logo_own_3_location']['name'];
- $logos_arr_3_tmp = $_FILES['logo_own_3_location']['tmp_name'];
- }
-
- if(isset($_FILES['logo_own_4_location'])) {
- $logos_arr_4_name = $_FILES['logo_own_4_location']['name'];
- $logos_arr_4_tmp = $_FILES['logo_own_4_location']['tmp_name'];
- }
-
- // File infos array
- $logos = array(
- array($logos_arr_1_name, $logos_arr_1_tmp, JAPPIX_BASE.'/store/logos/desktop_home.png'),
- array($logos_arr_2_name, $logos_arr_2_tmp, JAPPIX_BASE.'/store/logos/desktop_app.png'),
- array($logos_arr_3_name, $logos_arr_3_tmp, JAPPIX_BASE.'/store/logos/mobile.png'),
- array($logos_arr_4_name, $logos_arr_4_tmp, JAPPIX_BASE.'/store/logos/mini.png')
- );
-
- // Check for errors
- $logo_error = false;
- $logo_not_png = false;
- $logo_anything = false;
-
- foreach($logos as $sub_array) {
- // Nothing?
- if(!$sub_array[0] || !$sub_array[1]) {
- continue;
- }
-
- // Not an image?
- if(getFileExt($sub_array[0]) != 'png') {
- $logo_not_png = true;
-
- continue;
- }
-
- // Upload error?
- if(!move_uploaded_file($sub_array[1], $sub_array[2])) {
- $logo_error = true;
-
- continue;
- }
-
- $logo_anything = true;
- }
-
- // Not an image?
- if($logo_not_png) { ?>
- <p class="info smallspace fail"><?php _e("This is not a valid image, please use the PNG format!"); ?></p>
- <?php }
-
- // Upload error?
- else if($logo_error || !$logo_anything) { ?>
- <p class="info smallspace fail"><?php _e("The image could not be received, would you mind retry?"); ?></p>
- <?php }
-
- // Everything went fine
- else { ?>
- <p class="info smallspace success"><?php _e("Your service logo has been successfully changed!"); ?></p>
- <?php }
-}
-
-// Handle the background upload POST
-else if(isset($_POST['background_upload'])) {
- // Get the file path
- $name_background_image = $_FILES['background_image_upload']['name'];
- $temp_background_image = $_FILES['background_image_upload']['tmp_name'];
- $path_background_image = JAPPIX_BASE.'/store/backgrounds/'.$name_background_image;
-
- // An error occured?
- if(!isSafeAllowed($name_background_image) || $_FILES['background_image_upload']['error'] || !move_uploaded_file($temp_background_image, $path_background_image)) { ?>
-
- <p class="info smallspace fail"><?php _e("The image could not be received, would you mind retry?"); ?></p>
-
- <?php }
-
- // Bad extension?
- else if(!isImage($name_background_image)) {
- // Remove the image file
- if(file_exists($path_background_image))
- unlink($path_background_image);
- ?>
-
- <p class="info smallspace fail"><?php _e("This is not a valid image, please use PNG, GIF or JPG!"); ?></p>
-
- <?php }
-
- // The file has been sent
- else { ?>
-
- <p class="info smallspace success"><?php _e("Your image was added to the list!"); ?></p>
-
- <?php }
-}
-
-// Handle the save POST
-else if(isset($_POST['save'])) {
- // Marker
- $save_marker = true;
-
- // Handle it for background
- $background = array();
-
- if(isset($_POST['background_type'])) {
- $background['type'] = $_POST['background_type'];
- }
-
- if(isset($_POST['background_image_file'])) {
- $background['image_file'] = $_POST['background_image_file'];
- }
-
- if(isset($_POST['background_image_repeat'])) {
- $background['image_repeat'] = $_POST['background_image_repeat'];
- }
-
- if(isset($_POST['background_image_horizontal'])) {
- $background['image_horizontal'] = $_POST['background_image_horizontal'];
- }
-
- if(isset($_POST['background_image_vertical'])) {
- $background['image_vertical'] = $_POST['background_image_vertical'];
- }
-
- if(isset($_POST['background_image_adapt'])) {
- $background['image_adapt'] = 'on';
- }
-
- if(isset($_POST['background_image_color'])) {
- $background['image_color'] = $_POST['background_image_color'];
- }
-
- if(isset($_POST['background_color_color'])) {
- $background['color_color'] = $_POST['background_color_color'];
- }
-
- // Write the configuration file
- writeBackground($background);
-
- // Handle it for notice
- if(isset($_POST['notice_type'])) {
- $notice_type = $_POST['notice_type'];
- } else {
- $notice_type = 'none';
- }
-
- $notice_text = '';
-
- if(isset($_POST['notice_text'])) {
- $notice_text = $_POST['notice_text'];
- }
-
- // Check our values
- if(!$notice_text && ($notice_type != 'none')) {
- $save_marker = false;
- }
-
- // All is okay
- if($save_marker) {
- // Write the notice configuration
- writeNotice($notice_type, $notice_text);
-
- // Show a success notice
- ?>
-
- <p class="info smallspace success"><?php _e("Your design preferences have been saved!"); ?></p>
-
- <?php }
-
- // Something went wrong
- else { ?>
-
- <p class="info smallspace fail"><?php _e("Please check your inputs: something is missing!"); ?></p>
-
- <?php
- }
-}
-
-?>
diff --git a/server/post-hosts.php b/server/post-hosts.php
deleted file mode 100644
index 13f74954..00000000
--- a/server/post-hosts.php
+++ /dev/null
@@ -1,153 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the hosts configuration POST handler (install & manager)
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-// Main host
-if(isset($_POST['host_main']) && !empty($_POST['host_main'])) {
- $host_main = stripslashes(htmlspecialchars($_POST['host_main']));
-} else {
- $host_main = stripslashes(htmlspecialchars($hosts_default['main']));
-}
-
-// Groupchat host
-if(isset($_POST['host_muc']) && !empty($_POST['host_muc'])) {
- $host_muc = stripslashes(htmlspecialchars($_POST['host_muc']));
-} else {
- $host_muc = stripslashes(htmlspecialchars($hosts_default['muc']));
-}
-
-// Pubsub host
-if(isset($_POST['host_pubsub']) && !empty($_POST['host_pubsub'])) {
- $host_pubsub = stripslashes(htmlspecialchars($_POST['host_pubsub']));
-} else {
- $host_pubsub = stripslashes(htmlspecialchars($hosts_default['pubsub']));
-}
-
-// Directory host
-if(isset($_POST['host_vjud']) && !empty($_POST['host_vjud'])) {
- $host_vjud = stripslashes(htmlspecialchars($_POST['host_vjud']));
-} else {
- $host_vjud = stripslashes(htmlspecialchars($hosts_default['vjud']));
-}
-
-// Anonymous host
-if(isset($_POST['host_anonymous']) && !empty($_POST['host_anonymous'])) {
- $host_anonymous = stripslashes(htmlspecialchars($_POST['host_anonymous']));
-} else {
- $host_anonymous = stripslashes(htmlspecialchars($hosts_default['anonymous']));
-}
-
-// STUN host
-if(isset($_POST['host_stun']) && !empty($_POST['host_stun'])) {
- $host_stun = stripslashes(htmlspecialchars($_POST['host_stun']));
-} else {
- $host_stun = stripslashes(htmlspecialchars($hosts_default['stun']));
-}
-
-// TURN host
-if(isset($_POST['host_turn']) && !empty($_POST['host_turn'])) {
- $host_turn = stripslashes(htmlspecialchars($_POST['host_turn']));
-} else {
- $host_turn = stripslashes(htmlspecialchars($hosts_default['turn']));
-}
-
-// TURN host username
-if(isset($_POST['host_turn_username']) && !empty($_POST['host_turn_username'])) {
- $host_turn_username = stripslashes(htmlspecialchars($_POST['host_turn_username']));
-} else {
- $host_turn_username = stripslashes(htmlspecialchars($hosts_default['turn_username']));
-}
-
-// TURN host password
-if(isset($_POST['host_turn_password']) && !empty($_POST['host_turn_password'])) {
- $host_turn_password = stripslashes(htmlspecialchars($_POST['host_turn_password']));
-} else {
- $host_turn_password = stripslashes(htmlspecialchars($hosts_default['turn_password']));
-}
-
-// BOSH host
-if(isset($_POST['host_bosh']) && !empty($_POST['host_bosh'])) {
- $host_bosh = stripslashes(htmlspecialchars($_POST['host_bosh']));
-} else {
- $host_bosh = stripslashes(htmlspecialchars($hosts_default['bosh']));
-}
-
-// Main BOSH host
-if(isset($_POST['host_bosh_main']) && !empty($_POST['host_bosh_main'])) {
- $host_bosh_main = stripslashes(htmlspecialchars($_POST['host_bosh_main']));
-} else {
- $host_bosh_main = stripslashes(htmlspecialchars($hosts_default['bosh_main']));
-}
-
-// Mini BOSH host
-if(isset($_POST['host_bosh_mini']) && !empty($_POST['host_bosh_mini'])) {
- $host_bosh_mini = stripslashes(htmlspecialchars($_POST['host_bosh_mini']));
-} else {
- $host_bosh_mini = stripslashes(htmlspecialchars($hosts_default['bosh_mini']));
-}
-
-// WebSocket host
-if(isset($_POST['host_websocket']) && !empty($_POST['host_websocket'])) {
- $host_websocket = stripslashes(htmlspecialchars($_POST['host_websocket']));
-} else {
- $host_websocket = stripslashes(htmlspecialchars($hosts_default['websocket']));
-}
-
-// Static host
-if(isset($_POST['host_static']) && !empty($_POST['host_static'])) {
- $host_static = stripslashes(htmlspecialchars($_POST['host_static']));
-} else {
- $host_static = stripslashes(htmlspecialchars($hosts_default['static']));
-}
-
-// Upload host
-if(isset($_POST['host_upload']) && !empty($_POST['host_upload'])) {
- $host_upload = stripslashes(htmlspecialchars($_POST['host_upload']));
-} else {
- $host_upload = stripslashes(htmlspecialchars($hosts_default['upload']));
-}
-
-// BOSH proxy
-if(isset($_POST['bosh_proxy']) && !empty($_POST['bosh_proxy'])) {
- $bosh_proxy = 'on';
-} else {
- $bosh_proxy = 'off';
-}
-
-// Generate the hosts XML content
-$hosts_xml =
- '<main>'.$host_main.'</main>
- <muc>'.$host_muc.'</muc>
- <pubsub>'.$host_pubsub.'</pubsub>
- <vjud>'.$host_vjud.'</vjud>
- <anonymous>'.$host_anonymous.'</anonymous>
- <stun>'.$host_stun.'</stun>
- <turn>'.$host_turn.'</turn>
- <turn_username>'.$host_turn_username.'</turn_username>
- <turn_password>'.$host_turn_password.'</turn_password>
- <bosh>'.$host_bosh.'</bosh>
- <bosh_main>'.$host_bosh_main.'</bosh_main>
- <bosh_mini>'.$host_bosh_mini.'</bosh_mini>
- <websocket>'.$host_websocket.'</websocket>
- <static>'.$host_static.'</static>
- <upload>'.$host_upload.'</upload>
- <bosh_proxy>'.$bosh_proxy.'</bosh_proxy>'
-;
-
-// Write the main configuration
-writeXML('conf', 'hosts', $hosts_xml);
diff --git a/server/post-main.php b/server/post-main.php
deleted file mode 100644
index 1f4ced1e..00000000
--- a/server/post-main.php
+++ /dev/null
@@ -1,280 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the main configuration POST handler (install & manager)
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou, Maranda
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE'))
- exit;
-
-// Service name
-if(isset($_POST['service_name']) && !empty($_POST['service_name'])) {
- $service_name = stripslashes(htmlspecialchars($_POST['service_name']));
-} else {
- $service_name = stripslashes(htmlspecialchars($main_default['name']));
-}
-
-// Service description
-if(isset($_POST['service_desc']) && !empty($_POST['service_desc'])) {
- $service_desc = stripslashes(htmlspecialchars($_POST['service_desc']));
-} else {
- $service_desc = stripslashes(htmlspecialchars($main_default['desc']));
-}
-
-// Owner name
-if(isset($_POST['owner_name']) && !empty($_POST['owner_name'])) {
- $owner_name = stripslashes(htmlspecialchars($_POST['owner_name']));
-} else {
- $owner_name = stripslashes(htmlspecialchars($main_default['owner_name']));
-}
-
-// Owner website
-if(isset($_POST['owner_website']) && !empty($_POST['owner_website'])) {
- $owner_website = stripslashes(htmlspecialchars($_POST['owner_website']));
-} else {
- $owner_website = stripslashes(htmlspecialchars($main_default['owner_website']));
-}
-
-// Legal disclaimer
-if(isset($_POST['legal']) && !empty($_POST['legal'])) {
- $legal = stripslashes(htmlspecialchars($_POST['legal']));
-} else {
- $legal = stripslashes(htmlspecialchars($main_default['legal']));
-}
-
-// Language
-if(isset($_POST['language']) && !empty($_POST['language'])) {
- $language = stripslashes(htmlspecialchars($_POST['language']));
-} else {
- $language = stripslashes(htmlspecialchars($main_default['language']));
-}
-
-// Jappix resource
-if(isset($_POST['jappix_resource']) && !empty($_POST['jappix_resource'])) {
- $jappix_resource = stripslashes(htmlspecialchars($_POST['jappix_resource']));
-} else {
- $jappix_resource = stripslashes(htmlspecialchars($main_default['resource']));
-}
-
-// Lock host
-if(isset($_POST['lock_host']) && !empty($_POST['lock_host'])) {
- $lock_host = 'on';
-} else {
- $lock_host = 'off';
-}
-
-// Anonymous mode
-if(isset($_POST['anonymous_mode']) && !empty($_POST['anonymous_mode'])) {
- $anonymous_mode = 'on';
-} else {
- $anonymous_mode = 'off';
-}
-
-// HTTP authentication
-if(isset($_POST['http_auth']) && !empty($_POST['http_auth'])) {
- $http_auth = 'on';
-} else {
- $http_auth = 'off';
-}
-
-// Registration
-if(isset($_POST['registration']) && !empty($_POST['registration'])) {
- $registration = 'on';
-} else {
- $registration = 'off';
-}
-
-// Manager link
-if(isset($_POST['manager_link']) && !empty($_POST['manager_link'])) {
- $manager_link = 'on';
-} else {
- $manager_link = 'off';
-}
-
-// Groupchats to join
-if(isset($_POST['groupchats_join']) && !empty($_POST['groupchats_join'])) {
- $groupchats_join = stripslashes(htmlspecialchars(trim($_POST['groupchats_join'])));
-} else {
- $groupchats_join = stripslashes(htmlspecialchars($main_default['groupchats_join']));
-}
-
-// Suggested groupchats
-if(isset($_POST['groupchats_suggest']) && !empty($_POST['groupchats_suggest'])) {
- $groupchats_suggest = 'on';
-} else {
- $groupchats_suggest = 'off';
-}
-
-// Encryption
-if(isset($_POST['encryption']) && !empty($_POST['encryption'])) {
- $encryption = 'on';
-} else {
- $encryption = 'off';
-}
-
-// HTTPS storage
-if(isset($_POST['https_storage']) && !empty($_POST['https_storage'])) {
- $https_storage = 'on';
-} else {
- $https_storage = 'off';
-}
-
-// Force HTTPS
-if(isset($_POST['https_force']) && !empty($_POST['https_force'])) {
- $https_force = 'on';
-} else {
- $https_force = 'off';
-}
-
-// Compression
-if(isset($_POST['compression']) && !empty($_POST['compression'])) {
- $compression = 'on';
-} else {
- $compression = 'off';
-}
-
-// Caching
-if(isset($_POST['caching']) && !empty($_POST['caching'])) {
- $caching = 'on';
-} else {
- $caching = 'off';
-}
-
-// Statistics
-if(isset($_POST['statistics']) && !empty($_POST['statistics'])) {
- $statistics = 'on';
-} else {
- $statistics = 'off';
-}
-
-// Analytics tracking
-if(isset($_POST['analytics_track']) && !empty($_POST['analytics_track'])) {
- $analytics_track = 'on';
-} else {
- $analytics_track = 'off';
-}
-
-// Analytics Piwik URL
-if(isset($_POST['analytics_url']) && !empty($_POST['analytics_url'])) {
- $analytics_url = stripslashes(htmlspecialchars(trim($_POST['analytics_url'])));
-} else {
- $analytics_url = stripslashes(htmlspecialchars($main_default['analytics_url']));
-}
-
-// Analytics Piwik tracking ID
-if(isset($_POST['analytics_id']) && !empty($_POST['analytics_id'])) {
- $analytics_id = stripslashes(htmlspecialchars(trim($_POST['analytics_id'])));
-} else {
- $analytics_id = stripslashes(htmlspecialchars($main_default['analytics_id']));
-}
-
-// Advertising enable
-if(isset($_POST['ads_enable']) && !empty($_POST['ads_enable'])) {
- $ads_enable = 'on';
-} else {
- $ads_enable = 'off';
-}
-
-// Advertising (standard)
-if(isset($_POST['ads_standard']) && !empty($_POST['ads_standard'])) {
- $ads_standard = stripslashes(htmlspecialchars(trim($_POST['ads_standard'])));
-} else {
- $ads_standard = stripslashes(htmlspecialchars($main_default['ads_standard']));
-}
-
-// Google AdSense Client ID
-if(isset($_POST['gads_client']) && !empty($_POST['gads_client'])) {
- $gads_client = stripslashes(htmlspecialchars(trim($_POST['gads_client'])));
-} else {
- $gads_client = stripslashes(htmlspecialchars($main_default['gads_client']));
-}
-
-// Google AdSense Slot
-if(isset($_POST['gads_slot']) && !empty($_POST['gads_slot'])) {
- $gads_slot = stripslashes(htmlspecialchars(trim($_POST['gads_slot'])));
-} else {
- $gads_slot = stripslashes(htmlspecialchars($main_default['gads_slot']));
-}
-
-// Multiple resources
-if(isset($_POST['multi_files']) && ($_POST['multi_files'] == 'on')) {
- $multi_files = 'on';
-} else {
- $multi_files = 'off';
-}
-
-// Developer mode
-if(isset($_POST['developer']) && ($_POST['developer'] == 'on')) {
- $developer = 'on';
-} else {
- $developer = 'off';
-}
-
-// Register API
-if(isset($_POST['register_api']) && ($_POST['register_api'] == 'on')) {
- $register_api = 'on';
-} else {
- $register_api = 'off';
-}
-
-// XMPP Daemon Control Command
-if(isset($_POST['xmppd_ctl']) && !empty($_POST['xmppd_ctl'])) {
- $xmppd_ctl = stripslashes(htmlspecialchars($_POST['xmppd_ctl']));
-} else {
- $xmppd_ctl = stripslashes(htmlspecialchars($main_default['xmppd_ctl']));
-}
-
-// XMPP Daemon
-if(isset($_POST['xmppd']) && !empty($_POST['xmppd'])) {
- $xmppd = stripslashes(htmlspecialchars($_POST['xmppd']));
-} else {
- $xmppd = stripslashes(htmlspecialchars($main_default['xmppd']));
-}
-
-// Generate the configuration XML content
-$conf_xml =
- '<name>'.$service_name.'</name>
- <desc>'.$service_desc.'</desc>
- <owner_name>'.$owner_name.'</owner_name>
- <owner_website>'.$owner_website.'</owner_website>
- <legal>'.$legal.'</legal>
- <language>'.$language.'</language>
- <resource>'.$jappix_resource.'</resource>
- <lock>'.$lock_host.'</lock>
- <anonymous>'.$anonymous_mode.'</anonymous>
- <http_auth>'.$http_auth.'</http_auth>
- <registration>'.$registration.'</registration>
- <manager_link>'.$manager_link.'</manager_link>
- <groupchats_join>'.$groupchats_join.'</groupchats_join>
- <groupchats_suggest>'.$groupchats_suggest.'</groupchats_suggest>
- <encryption>'.$encryption.'</encryption>
- <https_storage>'.$https_storage.'</https_storage>
- <https_force>'.$https_force.'</https_force>
- <compression>'.$compression.'</compression>
- <caching>'.$caching.'</caching>
- <analytics_track>'.$analytics_track.'</analytics_track>
- <analytics_url>'.$analytics_url.'</analytics_url>
- <analytics_id>'.$analytics_id.'</analytics_id>
- <ads_enable>'.$ads_enable.'</ads_enable>
- <ads_standard>'.$ads_standard.'</ads_standard>
- <gads_client>'.$gads_client.'</gads_client>
- <gads_slot>'.$gads_slot.'</gads_slot>
- <multi_files>'.$multi_files.'</multi_files>
- <developer>'.$developer.'</developer>
- <statistics>'.$statistics.'</statistics>
- <register_api>'.$register_api.'</register_api>
- <xmppd_ctl>'.$xmppd_ctl.'</xmppd_ctl>
- <xmppd>'.$xmppd.'</xmppd>'
-;
-
-// Write the main configuration
-writeXML('conf', 'main', $conf_xml);
diff --git a/server/post-store.php b/server/post-store.php
deleted file mode 100644
index eb1c75a7..00000000
--- a/server/post-store.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the store configuration POST handler (manager)
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-// Music upload?
-if(isset($_POST['upload'])) {
- // Get the file path
- $name_music = $_FILES['music_file']['name'];
- $temp_music = $_FILES['music_file']['tmp_name'];
-
- // Any special name submitted?
- if(isset($_POST['music_title']) && !empty($_POST['music_title'])) {
- // Add a form var
- $music_title = $_POST['music_title'];
-
- // Get the file extension
- $ext_music = getFileExt($name_music);
-
- // New name
- $name_music = '';
-
- // Add the artist name?
- if(isset($_POST['music_artist']) && !empty($_POST['music_artist'])) {
- // Add a form var
- $music_artist = $_POST['music_artist'];
-
- // Add the current POST var to the global string
- $name_music .= $_POST['music_artist'].' - ';
- }
-
- // Add the music title
- $name_music .= $_POST['music_title'];
-
- // Add the album name?
- if(isset($_POST['music_album']) && !empty($_POST['music_album'])) {
- // Add a form var
- $music_album = $_POST['music_album'];
-
- // Add the current POST var to the global string
- $name_music .= ' ['.$_POST['music_album'].']';
- }
-
- // Add the extension
- $name_music .= '.'.$ext_music;
- }
-
- // Music path with new name
- $path_music = JAPPIX_BASE.'/store/music/'.$name_music;
-
- // An error occured?
- if(!isSafeAllowed($name_music) || $_FILES['music_file']['error'] || !move_uploaded_file($temp_music, $path_music)) { ?>
-
- <p class="info smallspace fail"><?php _e("The music could not be received, please retry!"); ?></p>
-
- <?php }
-
- // Bad extension?
- else if(!preg_match('/^(.+)(\.(og(g|a)|mp3|wav))$/i', $name_music)) {
- // Remove the image file
- if(file_exists($path_music)) {
- unlink($path_music);
- }
- ?>
-
- <p class="info smallspace fail"><?php _e("This is not a valid music file, please encode in Ogg Vorbis, MP3 or WAV!"); ?></p>
-
- <?php }
-
- // The file has been sent
- else { ?>
-
- <p class="info smallspace success"><?php _e("Your music has been added!"); ?></p>
-
- <?php
- // Reset the form vars
- $music_title = '';
- $music_artist = '';
- $music_album = '';
- }
-}
-
-// File deletion?
-else if(isset($_POST['remove'])) {
- removeElements();
-}
-
-?>
diff --git a/server/post-users.php b/server/post-users.php
deleted file mode 100644
index 737edf06..00000000
--- a/server/post-users.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the user add POST handler (install & manager)
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-// Marker
-$valid_user = true;
-
-// Administrator name
-if(isset($_POST['user_name']) && !empty($_POST['user_name'])) {
- $user_name = trim($_POST['user_name']);
-} else {
- $valid_user = false;
-}
-
-// Administrator password (first)
-if(isset($_POST['user_password']) && !empty($_POST['user_password'])) {
- $user_password = trim($_POST['user_password']);
-} else {
- $valid_user = false;
-}
-
-// Administrator password (second)
-if(isset($_POST['user_repassword']) && ($user_password != $_POST['user_repassword'])) {
- $valid_user = false;
-}
-
-// Generate the users XML content
-if($valid_user) {
- // Add our user
- manageUsers('add', array($user_name => $user_password));
-
- // Reset the user name
- $user_name = '';
-}
-
-?>
diff --git a/server/read-design.php b/server/read-design.php
deleted file mode 100644
index a7c97387..00000000
--- a/server/read-design.php
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the design configuration reader
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-// Get the available backgrounds
-$backgrounds = getBackgrounds();
-$backgrounds_number = count($backgrounds);
-
-// Read the background configuration
-$background = readBackground();
-
-// Backgrounds are missing?
-if(!$backgrounds_number && ($background['type'] == 'image')) {
- $background['type'] = 'default';
-}
-
-switch($background['type']) {
- // Simple notice input
- case 'image':
- $background_image = ' checked=""';
- $background_default = '';
-
- break;
-
- // Advanced notice input
- case 'color':
- $background_color = ' checked=""';
- $background_default = '';
-
- break;
-}
-
-switch($background['image_repeat']) {
- // No repeat
- case 'no-repeat':
- $background_image_repeat_no = ' selected=""';
- $background_image_repeat_x = '';
-
- break;
-
- // Repeat
- case 'repeat':
- $background_image_repeat_all = ' selected=""';
- $background_image_repeat_x = '';
-
- break;
-
- // Y repeat
- case 'repeat-y':
- $background_image_repeat_y = ' selected=""';
- $background_image_repeat_x = '';
-
- break;
-}
-
-switch($background['image_horizontal']) {
- // Left position
- case 'left':
- $background_image_horizontal_left = ' selected=""';
- $background_image_horizontal_center = '';
-
- break;
-
- // Right position
- case 'right':
- $background_image_horizontal_right = ' selected=""';
- $background_image_horizontal_center = '';
-
- break;
-}
-
-switch($background['image_vertical']) {
- // Left position
- case 'top':
- $background_image_vertical_top = ' selected=""';
- $background_image_vertical_center = '';
-
- break;
-
- // Right position
- case 'bottom':
- $background_image_vertical_bottom = ' selected=""';
- $background_image_vertical_center = '';
-
- break;
-}
-
-if($background['image_adapt'] == 'on') {
- $background_image_adapt = ' checked=""';
-}
-
-// Read the notice configuration
-$notice_conf = readNotice();
-$notice_text = $notice_conf['notice'];
-
-switch($notice_conf['type']) {
- // Simple notice input
- case 'simple':
- $notice_simple = ' checked=""';
- $notice_none = '';
-
- break;
-
- // Advanced notice input
- case 'advanced':
- $notice_advanced = ' checked=""';
- $notice_none = '';
-
- break;
-}
-
-?>
diff --git a/server/read-hosts.php b/server/read-hosts.php
deleted file mode 100644
index e6f85c17..00000000
--- a/server/read-hosts.php
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the hosts configuration reader
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-// Get the protocol we use
-if(isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on')) {
- $protocol = 'https';
-} else {
- $protocol = 'http';
-}
-
-// Get the HTTP host
-$default_host = 'jappix.com';
-$http_host = $default_host;
-
-if($_SERVER['HTTP_HOST']) {
- $http_host_split = str_replace('www.', '', $_SERVER['HTTP_HOST']);
- $http_host_split = preg_replace('/:[0-9]+$/i', '', $http_host_split);
-
- if($http_host_split) {
- $http_host = $http_host_split;
- }
-}
-
-// Define the default hosts configuration values
-$hosts_conf = array(
- 'main' => $http_host,
- 'muc' => 'muc.'.$http_host,
- 'pubsub' => 'pubsub.'.$http_host,
- 'vjud' => 'vjud.'.$http_host,
- 'anonymous' => 'anonymous.'.$http_host,
- 'stun' => 'stun.'.$default_host,
- 'turn' => '',
- 'turn_username' => '',
- 'turn_password' => '',
- 'bosh' => 'http://'.$http_host.':5280/http-bind',
- 'bosh_main' => '',
- 'bosh_mini' => '',
- 'websocket' => '',
- 'static' => '',
- 'upload' => '',
- 'bosh_proxy' => 'off'
-);
-
-// Define a default values array
-$hosts_default = $hosts_conf;
-
-// Read the hosts configuration file
-$hosts_data = readXML('conf', 'hosts');
-
-// Read the hosts configuration file
-if($hosts_data) {
- // Initialize the hosts configuration XML data
- $hosts_xml = new SimpleXMLElement($hosts_data);
-
- // Loop the hosts configuration elements
- foreach($hosts_xml->children() as $hosts_child) {
- $hosts_value = $hosts_child->getName();
-
- // Only push this to the array if it exists
- if(isset($hosts_conf[$hosts_value]) && (string)$hosts_child) {
- $hosts_conf[$hosts_value] = str_replace('{PROTOCOL}', $protocol, (string)$hosts_child);
- }
- }
-}
-
-// Filter hosts (remove multiple '/' at the end)
-$filter_host_regex = '/(\/+)?$/';
-
-if($hosts_conf['upload']) {
- $hosts_conf['upload'] = preg_replace($filter_host_regex, '', $hosts_conf['upload']);
-}
-
-if($hosts_conf['static']) {
- $hosts_conf['static'] = preg_replace($filter_host_regex, '', $hosts_conf['static']);
-}
-
-// Finally, define the hosts configuration globals
-define('HOST_MAIN', $hosts_conf['main']);
-define('HOST_MUC', $hosts_conf['muc']);
-define('HOST_PUBSUB', $hosts_conf['pubsub']);
-define('HOST_VJUD', $hosts_conf['vjud']);
-define('HOST_ANONYMOUS', $hosts_conf['anonymous']);
-define('HOST_STUN', $hosts_conf['stun']);
-define('HOST_TURN', $hosts_conf['turn']);
-define('HOST_TURN_USERNAME', $hosts_conf['turn_username']);
-define('HOST_TURN_PASSWORD', $hosts_conf['turn_password']);
-define('HOST_BOSH', $hosts_conf['bosh']);
-define('HOST_BOSH_MAIN', $hosts_conf['bosh_main']);
-define('HOST_BOSH_MINI', $hosts_conf['bosh_mini']);
-define('HOST_WEBSOCKET', $hosts_conf['websocket']);
-define('HOST_STATIC', $hosts_conf['static']);
-define('HOST_UPLOAD', $hosts_conf['upload']);
-define('BOSH_PROXY', $hosts_conf['bosh_proxy']);
-
-?>
diff --git a/server/read-main.php b/server/read-main.php
deleted file mode 100644
index 4c728e56..00000000
--- a/server/read-main.php
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the main configuration reader
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou, Maranda
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-// Define the default main configuration values
-$main_conf = array(
- 'name' => 'Jappix',
- 'desc' => 'a free social network',
- 'owner_name' => '',
- 'owner_website' => '',
- 'legal' => '',
- 'language' => 'all',
- 'resource' => 'Jappix',
- 'lock' => 'on',
- 'anonymous' => 'on',
- 'http_auth' => 'off',
- 'registration' => 'on',
- 'manager_link' => 'on',
- 'groupchats_join' => '',
- 'groupchats_suggest' => 'on',
- 'encryption' => 'on',
- 'https_storage' => 'off',
- 'https_force' => 'off',
- 'compression' => 'off',
- 'caching' => 'on',
- 'analytics_track' => 'off',
- 'analytics_url' => '',
- 'analytics_id' => '',
- 'ads_enable' => 'off',
- 'ads_standard' => '',
- 'gads_client' => '',
- 'gads_slot' => '',
- 'multi_files' => 'off',
- 'developer' => 'off',
- 'statistics' => 'on',
- 'register_api' => 'off',
- 'xmppd_ctl' => '/usr/sbin/ejabberdctl',
- 'xmppd' => 'ejabberd'
-);
-
-// Define a default values array
-$main_default = $main_conf;
-
-// Read the main configuration file
-$main_data = readXML('conf', 'main');
-
-// Read the main configuration file
-if($main_data) {
- // Initialize the main configuration XML data
- $main_xml = new SimpleXMLElement($main_data);
-
- // Loop the main configuration elements
- foreach($main_xml->children() as $main_child) {
- $main_value = $main_child->getName();
-
- // Only push this to the array if it exists
- if(isset($main_conf[$main_value]) && (string)$main_child) {
- $main_conf[$main_value] = (string)$main_child;
- }
- }
-}
-
-// Finally, define the main configuration globals
-define('SERVICE_NAME', $main_conf['name']);
-define('SERVICE_DESC', $main_conf['desc']);
-define('OWNER_NAME', $main_conf['owner_name']);
-define('OWNER_WEBSITE', $main_conf['owner_website']);
-define('LEGAL', $main_conf['legal']);
-define('LANGUAGE', $main_conf['language']);
-define('JAPPIX_RESOURCE', $main_conf['resource']);
-define('LOCK_HOST', $main_conf['lock']);
-define('ANONYMOUS', $main_conf['anonymous']);
-define('HTTP_AUTH', $main_conf['http_auth']);
-define('REGISTRATION', $main_conf['registration']);
-define('MANAGER_LINK', $main_conf['manager_link']);
-define('GROUPCHATS_JOIN', $main_conf['groupchats_join']);
-define('GROUPCHATS_SUGGEST', $main_conf['groupchats_suggest']);
-define('ENCRYPTION', $main_conf['encryption']);
-define('HTTPS_STORAGE', $main_conf['https_storage']);
-define('HTTPS_FORCE', $main_conf['https_force']);
-define('COMPRESSION', $main_conf['compression']);
-define('CACHING', $main_conf['caching']);
-define('ANALYTICS_TRACK', $main_conf['analytics_track']);
-define('ANALYTICS_URL', $main_conf['analytics_url']);
-define('ANALYTICS_ID', $main_conf['analytics_id']);
-define('ADS_ENABLE', $main_conf['ads_enable']);
-define('ADS_STANDARD', $main_conf['ads_standard']);
-define('GADS_CLIENT', $main_conf['gads_client']);
-define('GADS_SLOT', $main_conf['gads_slot']);
-define('MULTI_FILES', $main_conf['multi_files']);
-define('DEVELOPER', $main_conf['developer']);
-define('STATISTICS', $main_conf['statistics']);
-define('REGISTER_API', $main_conf['register_api']);
-define('XMPPD_CTL', $main_conf['xmppd_ctl']);
-define('XMPPD', $main_conf['xmppd']);
-
-?>
diff --git a/server/register.php b/server/register.php
deleted file mode 100644
index 2ad29b51..00000000
--- a/server/register.php
+++ /dev/null
@@ -1,179 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the Register API
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// PHP base
-define('JAPPIX_BASE', '..');
-
-// Start PHP session (for CAPTCHA check)
-session_start();
-
-// Get captcha
-$session_captcha = isset($_SESSION['captcha']) ? $_SESSION['captcha'] : null;
-
-// Remove CAPTCHA
-if(isset($_SESSION['captcha'])) {
- unset($_SESSION['captcha']);
-}
-
-// Close the session
-session_write_close();
-
-// Get the configuration
-require_once('./functions.php');
-require_once('./read-main.php');
-require_once('./read-hosts.php');
-
-// Prepare application
-enableErrorSink();
-hideErrors();
-compressThis();
-
-// Headers
-header('Content-Type: text/xml');
-
-// API vars
-$xml_output = null;
-$error = false;
-$error_reason = '';
-
-// Get POST data
-$query_id = isset($_POST['id']) ? trim($_POST['id']) : 'none';
-
-// Not enabled?
-if(REGISTER_API == 'on') {
- // Get POST data
- $username = isset($_POST['username']) ? trim($_POST['username']) : null;
- $password = isset($_POST['password']) ? trim($_POST['password']) : null;
- $domain = isset($_POST['domain']) ? trim($_POST['domain']) : null;
- $captcha = isset($_POST['captcha']) ? trim($_POST['captcha']) : null;
-
- // Enough data?
- if(!$username || !$password || !$domain || !$captcha) {
- $error = true;
-
- if(!$username) {
- $error_reason = 'Username POST Field Missing';
- } else if(!$password) {
- $error_reason = 'Password POST Field Missing';
- } else if(!$domain) {
- $error_reason = 'Domain POST Field Missing';
- } else if(!$captcha) {
- $error_reason = 'CAPTCHA POST Field Missing';
- } else {
- $error_reason = 'POST Field Missing';
- }
- } else if($domain != HOST_MAIN) {
- $error = true;
- $error_reason = 'Domain Not Allowed';
- } else if($session_captcha == null) {
- $error = true;
- $error_reason = 'CAPTCHA Session Missing';
- } else if(strtolower(trim($captcha)) != strtolower(trim($session_captcha))) {
- $error = true;
- $error_reason = 'CAPTCHA Not Matching';
- } else {
- // Fixes escapeshellarg() with UTF-8 chars
- setlocale(LC_CTYPE, 'en_US.UTF-8');
-
- // Which command to execute?
- $command_str = null;
-
- if(XMPPD == 'metronome') {
- $xmppd_ctl = XMPPD_CTL ? XMPPD_CTL : 'metronomectl';
-
- // Command string
- $command_str = 'sudo '.$xmppd_ctl.' adduser '.escapeshellarg($username.'@'.$domain).' '.escapeshellarg($password);
- } else if(XMPPD == 'ejabberd') {
- $xmppd_ctl = XMPPD_CTL ? XMPPD_CTL : 'ejabberdctl';
-
- // Command string
- $command_str = 'sudo '.$xmppd_ctl.' register '.escapeshellarg($username).' '.escapeshellarg($domain).' '.escapeshellarg($password);
- } else {
- $error = true;
- $error_reason = 'Unsupported XMPP Daemon';
- }
-
- // Execute command
- if($command_str) {
- // Here we go!
- $command_output = array();
-
- exec($command_str, $command_output);
-
- // Check if user could be registered
- $command_return = 0;
-
- foreach($command_output as $command_line) {
- if(((XMPPD == 'metronome') && preg_match('/User successfully added/i', $command_line)) || ((XMPPD == 'ejabberd') && preg_match('/User (.+) successfully registered/i', $command_line))) {
- $command_return = 1;
-
- break;
- }
-
- if(((XMPPD == 'metronome') && preg_match('/User already exists/i', $command_line)) || ((XMPPD == 'ejabberd') && preg_match('/User (.+) already registered/i', $command_line))) {
- $command_return = 2;
-
- break;
- }
- }
-
- // Check for errors
- if($command_return != 1) {
- $error = true;
-
- if($command_return == 2) {
- $error_reason = 'Username Unavailable';
- } else {
- $error_reason = 'Server Error';
- }
- }
- } else {
- $error = true;
- $error_reason = 'No Command To Execute';
- }
- }
-} else {
- $error = true;
- $error_reason = 'API Disabled';
-}
-
-// Generate the response
-$status_code = '1';
-$status_message = 'Success';
-
-if($error) {
- $status_code = '0';
- $status_message = 'Server error';
-
- if($error_reason) {
- $status_message = $error_reason;
- }
-}
-
-$api_response = '<jappix xmlns="jappix:account:register">';
- $api_response .= '<query id="'.htmlEntities($query_id, ENT_QUOTES).'">';
- $api_response .= '<status>'.htmlspecialchars($status_code).'</status>';
- $api_response .= '<message>'.htmlspecialchars($status_message).'</message>';
- $api_response .= '</query>';
-
- if($xml_output) {
- $api_response .= '<data>';
- $api_response .= $xml_output;
- $api_response .= '</data>';
- }
-$api_response .= '</jappix>';
-
-exit($api_response);
-
-?> \ No newline at end of file
diff --git a/server/send.php b/server/send.php
deleted file mode 100644
index 2f5b657c..00000000
--- a/server/send.php
+++ /dev/null
@@ -1,138 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the Jappix Out of Band file send script
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// PHP base
-define('JAPPIX_BASE', '..');
-
-// Get the needed files
-require_once('./functions.php');
-require_once('./read-main.php');
-require_once('./read-hosts.php');
-
-// Prepare application
-enableErrorSink();
-hideErrors();
-compressThis();
-
-// Not allowed for a special node
-if(isStatic()) {
- exit;
-}
-
-// Action on an existing file
-if(isset($_GET['id']) && !empty($_GET['id'])) {
- $file_id = $_GET['id'];
- $file_path = JAPPIX_BASE.'/tmp/send/'.$file_id;
-
- // Get file name
- if(isset($_GET['name']) && !empty($_GET['name'])) {
- $file_name = $_GET['name'];
- } else {
- $file_name = $file_id;
- }
-
- // Hack?
- if(!isSafe($file_id)) {
- header('Status: 406 Not Acceptable', true, 406);
- exit('HTTP/1.1 406 Not Acceptable');
- }
-
- // File does not exist
- if(!file_exists($file_path)) {
- header('Status: 404 Not Found', true, 404);
- exit('HTTP/1.1 404 Not Found');
- }
-
- // Remove a file
- if(isset($_GET['action']) && ($_GET['action'] == 'remove')) {
- header('Status: 204 No Content', true, 204);
-
- unlink($file_path);
-
- exit('File Removed.');
- }
-
- // Receive a file
- header("Content-disposition: attachment; filename=\"$file_name\"");
- header("Content-Type: application/force-download");
- header("Content-Length: ".filesize($file_path));
- header("Pragma: no-cache");
- header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
- header("Expires: 0");
-
- readfile($file_path);
-
- unlink($file_path);
-}
-
-// Send a file
-else if((isset($_FILES['file']) && !empty($_FILES['file'])) && (isset($_POST['id']) && !empty($_POST['id'])) && (isset($_POST['location']) && !empty($_POST['location']))) {
- header('Content-Type: text/xml; charset=utf-8');
-
- // Get the file name
- $tmp_filename = $_FILES['file']['tmp_name'];
- $filename = $_FILES['file']['name'];
-
- // Get the location
- if(HOST_UPLOAD) {
- $location = HOST_UPLOAD.'/';
- } else {
- $location = $_POST['location'];
- }
-
- // Get the file new name
- $ext = getFileExt($filename);
- $new_name = preg_replace('/(^)(.+)(\.)(.+)($)/i', '$2', $filename);
-
- // Define some vars
- $name = sha1(time().$filename);
- $path = JAPPIX_BASE.'/tmp/send/'.$name.'.'.$ext;
-
- // Forbidden file?
- if(!isSafeAllowed($filename) || !isSafeAllowed($name.'.'.$ext)) {
- exit(
-'<jappix xmlns=\'jappix:file:send\'>
- <error>forbidden-type</error>
- <id>'.htmlspecialchars($_POST['id']).'</id>
-</jappix>'
- );
- }
-
- // File upload error?
- if(!is_uploaded_file($tmp_filename) || !move_uploaded_file($tmp_filename, $path)) {
- exit(
-'<jappix xmlns=\'jappix:file:send\'>
- <error>move-error</error>
- <id>'.htmlspecialchars($_POST['id']).'</id>
-</jappix>'
- );
- }
-
- // Return the path to the file
- exit(
-'<jappix xmlns=\'jappix:file:send\'>
- <url>'.htmlspecialchars($location.'server/send.php?id='.urlencode($name).'.'.urlencode($ext).'&name='.urlencode($filename)).'</url>
- <desc>'.htmlspecialchars($new_name).'</desc>
- <id>'.htmlspecialchars($_POST['id']).'</id>
-</jappix>'
- );
-}
-
-// Error?
-else {
- header('Status: 400 Bad Request', true, 400);
- exit('HTTP/1.1 400 Bad Request');
-}
-
-?> \ No newline at end of file
diff --git a/server/srand.php b/server/srand.php
deleted file mode 100644
index 44e41a53..00000000
--- a/server/srand.php
+++ /dev/null
@@ -1,151 +0,0 @@
-<?php
-
-/*
- * Author:
- * George Argyros <argyros.george@gmail.com>
- *
- * Copyright (c) 2012, George Argyros
- * 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 <organization> 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 GEORGE ARGYROS 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.
- *
- *
- *
- * The function is providing, at least at the systems tested :),
- * $len bytes of entropy under any PHP installation or operating system.
- * The execution time should be at most 10-20 ms in any system.
- */
-function secure_random_bytes($len = 10)
-{
-
- /*
- * Our primary choice for a cryptographic strong randomness function is
- * openssl_random_pseudo_bytes.
- */
- $SSLstr = '4'; // http://xkcd.com/221/
- if (function_exists('openssl_random_pseudo_bytes') &&
- (version_compare(PHP_VERSION, '5.3.4') >= 0 ||
- substr(PHP_OS, 0, 3) !== 'WIN'))
- {
- $SSLstr = openssl_random_pseudo_bytes($len, $strong);
- if ($strong) {
- return $SSLstr;
- }
- }
-
- /*
- * If mcrypt extension is available then we use it to gather entropy from
- * the operating system's PRNG. This is better than reading /dev/urandom
- * directly since it avoids reading larger blocks of data than needed.
- * Older versions of mcrypt_create_iv may be broken or take too much time
- * to finish so we only use this function with PHP 5.3.7 and above.
- * @see https://bugs.php.net/bug.php?id=55169
- */
- if (function_exists('mcrypt_create_iv') &&
- (version_compare(PHP_VERSION, '5.3.7') >= 0 ||
- substr(PHP_OS, 0, 3) !== 'WIN')) {
- $str = mcrypt_create_iv($len, MCRYPT_DEV_URANDOM);
- if ($str !== false) {
- return $str;
- }
- }
-
-
- /*
- * No build-in crypto randomness function found. We collect any entropy
- * available in the PHP core PRNGs along with some filesystem info and memory
- * stats. To make this data cryptographically strong we add data either from
- * /dev/urandom or if its unavailable, we gather entropy by measuring the
- * time needed to compute a number of SHA-1 hashes.
- */
- $str = '';
- $bits_per_round = 2; // bits of entropy collected in each clock drift round
- $msec_per_round = 400; // expected running time of each round in microseconds
- $hash_len = 20; // SHA-1 Hash length
- $total = $len; // total bytes of entropy to collect
-
- $handle = @fopen('/dev/urandom', 'rb');
- if ($handle && function_exists('stream_set_read_buffer')) {
- @stream_set_read_buffer($handle, 0);
- }
-
- do
- {
- $bytes = ($total > $hash_len)? $hash_len : $total;
- $total -= $bytes;
-
- //collect any entropy available from the PHP system and filesystem
- $entropy = rand() . uniqid(mt_rand(), true) . $SSLstr;
- $entropy .= implode('', @fstat(@fopen( __FILE__, 'r')));
- $entropy .= memory_get_usage() . getmypid();
- $entropy .= serialize($_ENV) . serialize($_SERVER);
- if (function_exists('posix_times')) {
- $entropy .= serialize(posix_times());
- }
- if (function_exists('zend_thread_id')) {
- $entropy .= zend_thread_id();
- }
- if ($handle) {
- $entropy .= @fread($handle, $bytes);
- } else {
- // Measure the time that the operations will take on average
- for ($i = 0; $i < 3; $i++)
- {
- $c1 = microtime(true);
- $var = sha1(mt_rand());
- for ($j = 0; $j < 50; $j++) {
- $var = sha1($var);
- }
- $c2 = microtime(true);
- $entropy .= $c1 . $c2;
- }
-
- // Based on the above measurement determine the total rounds
- // in order to bound the total running time.
- $rounds = (int) ($msec_per_round * 50 / (int) (($c2 - $c1) * 1000000));
-
- // Take the additional measurements. On average we can expect
- // at least $bits_per_round bits of entropy from each measurement.
- $iter = $bytes * (int) (ceil(8 / $bits_per_round));
- for ($i = 0; $i < $iter; $i++) {
- $c1 = microtime();
- $var = sha1(mt_rand());
- for ($j = 0; $j < $rounds; $j++) {
- $var = sha1($var);
- }
- $c2 = microtime();
- $entropy .= $c1 . $c2;
- }
-
- }
- // We assume sha1 is a deterministic extractor for the $entropy variable.
- $str .= sha1($entropy, true);
- } while ($len > strlen($str));
-
- if ($handle) {
- @fclose($handle);
- }
- return substr($str, 0, $len);
-}
-
-?> \ No newline at end of file
diff --git a/server/static.php b/server/static.php
deleted file mode 100644
index e16187d5..00000000
--- a/server/static.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the Jappix Static PHP/HTML code
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-?>
-<!DOCTYPE html>
-<?php htmlTag($locale); ?>
-
-<head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <title><?php echo htmlspecialchars(SERVICE_NAME); ?> &bull; <?php _e("Static content server"); ?></title>
- <link rel="shortcut icon" href="./favicon.ico" />
- <meta name="robots" content="noindex, follow" />
-</head>
-
-<body>
- <h1><?php echo htmlspecialchars(SERVICE_NAME); ?> - <?php _e("Static content server"); ?></h1>
- <p><?php printf(T_("This is the static content server for %1s, “%2s”."), htmlspecialchars(SERVICE_NAME), htmlspecialchars(SERVICE_DESC)); ?></p>
- <?php if(showManagerLink()) { ?>
- <p><a href="./?m=manager<?php echo keepGet('m', false); ?>"><?php _e("Manager"); ?></a></p>
- <?php } ?>
-</body>
-
-</html>
-
-<!-- Jappix Static <?php echo $version; ?> - An open social platform -->
diff --git a/server/stats-svg.php b/server/stats-svg.php
deleted file mode 100644
index d57960d7..00000000
--- a/server/stats-svg.php
+++ /dev/null
@@ -1,103 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-The SVG loader for Jappix statistics
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// PHP base
-define('JAPPIX_BASE', '..');
-
-// Get the functions
-require_once('./functions.php');
-require_once('./functions-manager.php');
-
-// Get the configuration
-require_once('./read-main.php');
-require_once('./read-hosts.php');
-
-// Get the libs
-require_once('./drawsvgchart.php');
-require_once('./gettext.php');
-
-// Prepare application
-enableErrorSink();
-hideErrors();
-compressThis();
-
-// Start the session
-session_start();
-
-// Check if the user is authorized
-$is_admin = false;
-
-if((isset($_SESSION['jappix_user']) && !empty($_SESSION['jappix_user'])) && (isset($_SESSION['jappix_password']) && !empty($_SESSION['jappix_password']))) {
- // Get the session values
- $user = $_SESSION['jappix_user'];
- $password = $_SESSION['jappix_password'];
-
- // Checks the user is admin
- $is_admin = isAdmin($user, $password);
-}
-
-// Not admin? Stop the script!
-if(!$is_admin) {
- exit;
-}
-
-// Get the graph type
-if((isset($_GET['g']) && !empty($_GET['g']))) {
- $graph = $_GET['g'];
-} else {
- $graph = 'others';
-}
-
-// Get the locale
-if((isset($_GET['l']) && !empty($_GET['l']))) {
- $locale = $_GET['l'];
-} else {
- $locale = 'en';
-}
-
-// Include the translations
-includeTranslation($locale, 'main');
-
-$drawsvgchart = new DrawSVGChart;
-
-// Generation vars
-$link = FALSE;
-$evolution = FALSE;
-
-// Access graph?
-if($graph == 'access') {
- // Access graph
- $elements = getMonthlyVisits();
- $legend = array(array('#5276A9', T_("Visits")));
- $evolution = TRUE;
-} else if($graph == 'share') {
- // Share graph
- $elements = largestShare(shareStats(), 8);
- $legend = array(array('#5276A9', T_("Size")));
-} else if($graph == 'others') {
- // Others graph
- $elements = otherStats();
- $legend = array(array('#5276A9', T_("Size")));
-}
-
-// Generate the chart
-$svgchart = $drawsvgchart->createChart($elements, $legend, $link, $evolution, $graph);
-
-// No error?
-if(!$drawsvgchart->has_errors()) {
- header('Content-Type: image/svg+xml; charset=utf-8');
- echo $drawsvgchart->getXMLOutput();
-}
-
-?>
diff --git a/server/store-tree.php b/server/store-tree.php
deleted file mode 100644
index be307635..00000000
--- a/server/store-tree.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This script (re)generates the store sub-folders (after an update)
-
--------------------------------------------------
-
-License: AGPL
-Authors: Valérian Saliou, regilero
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-// Array of the sub-folders to create
-$store_folders = array(
- 'access',
- 'backgrounds',
- 'conf',
- 'logos',
- 'music',
- 'share',
- 'update'
-);
-
-// Creates the store sub-folders
-for($i = 0; $i < count($store_folders); $i++) {
- $current = JAPPIX_BASE.'/store/'.$store_folders[$i];
-
- // Create the folder itself
- if(!is_dir($current)) {
- mkdir($current, 0777, true);
- }
-
- chmod($current, 0777);
-
- // Create the security file inside the folder
- $security_html = securityHTML();
-
- file_put_contents($current.'/index.html', $security_html, LOCK_EX);
-}
-
-// Apply 777 rights on other writable folders
-chmod(JAPPIX_BASE.'/log', 0777);
-chmod(JAPPIX_BASE.'/tmp', 0777);
-
-?>
diff --git a/server/upload.php b/server/upload.php
deleted file mode 100644
index 6de5f204..00000000
--- a/server/upload.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-This is the Jappix Static PHP/HTML code
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-?>
-<!DOCTYPE html>
-<?php htmlTag($locale); ?>
-
-<head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <title><?php echo htmlspecialchars(SERVICE_NAME); ?> &bull; <?php _e("User uploads server"); ?></title>
- <link rel="shortcut icon" href="./favicon.ico" />
- <meta name="robots" content="noindex, follow" />
-</head>
-
-<body>
- <h1><?php echo htmlspecialchars(SERVICE_NAME); ?> - <?php _e("User uploads server"); ?></h1>
- <p><?php printf(T_("This is the user uploads server for %1s, “%2s”."), htmlspecialchars(SERVICE_NAME), htmlspecialchars(SERVICE_DESC)); ?></p>
- <?php if(showManagerLink()) { ?>
- <p><a href="./?m=manager<?php echo keepGet('m', false); ?>"><?php _e("Manager"); ?></a></p>
- <?php } ?>
-</body>
-
-</html>
-
-<!-- Jappix Upload <?php echo $version; ?> - An open social platform -->
diff --git a/server/vars-design.php b/server/vars-design.php
deleted file mode 100644
index 4d7c7765..00000000
--- a/server/vars-design.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-These are the design configuration variables
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-// Define initial logo form values
-$logo_default = ' checked=""';
-$logo_own = '';
-
-// Define initial background form values
-$background_default = ' checked=""';
-$background_image = '';
-$background_color = '';
-$background_image_repeat_no = '';
-$background_image_repeat_all = '';
-$background_image_repeat_x = ' selected=""';
-$background_image_repeat_y = '';
-$background_image_horizontal_center = ' selected=""';
-$background_image_horizontal_left = '';
-$background_image_horizontal_right = '';
-$background_image_vertical_center = ' selected=""';
-$background_image_vertical_top = '';
-$background_image_vertical_bottom = '';
-$background_image_adapt = '';
-
-// Define initial notice form values
-$notice_none = ' checked=""';
-$notice_simple = '';
-$notice_advanced = '';
-$notice_text = '';
-
-// Current background folder
-$backgrounds_folder = 'backgrounds';
-
-?>
diff --git a/server/vars-hosts.php b/server/vars-hosts.php
deleted file mode 100644
index db8736ec..00000000
--- a/server/vars-hosts.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-These are the hosts configuration variables
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-// Define the vars with the hosts configuration constants
-$host_main = htmlspecialchars(HOST_MAIN);
-$host_muc = htmlspecialchars(HOST_MUC);
-$host_pubsub = htmlspecialchars(HOST_PUBSUB);
-$host_vjud = htmlspecialchars(HOST_VJUD);
-$host_anonymous = htmlspecialchars(HOST_ANONYMOUS);
-$host_stun = htmlspecialchars(HOST_STUN);
-$host_turn = htmlspecialchars(HOST_TURN);
-$host_turn_username = htmlspecialchars(HOST_TURN_USERNAME);
-$host_turn_password = htmlspecialchars(HOST_TURN_PASSWORD);
-$host_bosh = htmlspecialchars(HOST_BOSH);
-$host_bosh_main = htmlspecialchars(HOST_BOSH_MAIN);
-$host_bosh_mini = htmlspecialchars(HOST_BOSH_MINI);
-$host_websocket = htmlspecialchars(HOST_WEBSOCKET);
-$host_static = htmlspecialchars(HOST_STATIC);
-$host_upload = htmlspecialchars(HOST_UPLOAD);
-$bosh_proxy = htmlspecialchars(BOSH_PROXY);
-
-?>
diff --git a/server/vars-main.php b/server/vars-main.php
deleted file mode 100644
index 425e045e..00000000
--- a/server/vars-main.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-These are the main configuration variables
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou, Maranda
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-// Define the vars with the main configuration constants
-$service_name = htmlspecialchars(SERVICE_NAME);
-$service_desc = htmlspecialchars(SERVICE_DESC);
-$owner_name = htmlspecialchars(OWNER_NAME);
-$owner_website = htmlspecialchars(OWNER_WEBSITE);
-$legal = htmlspecialchars(LEGAL);
-$language = htmlspecialchars(LANGUAGE);
-$jappix_resource = htmlspecialchars(JAPPIX_RESOURCE);
-$lock_host = htmlspecialchars(LOCK_HOST);
-$anonymous_mode = htmlspecialchars(ANONYMOUS);
-$http_auth = htmlspecialchars(HTTP_AUTH);
-$registration = htmlspecialchars(REGISTRATION);
-$manager_link = htmlspecialchars(MANAGER_LINK);
-$groupchats_join = htmlspecialchars(GROUPCHATS_JOIN);
-$groupchats_suggest = htmlspecialchars(GROUPCHATS_SUGGEST);
-$encryption = htmlspecialchars(ENCRYPTION);
-$https_storage = htmlspecialchars(HTTPS_STORAGE);
-$https_force = htmlspecialchars(HTTPS_FORCE);
-$compression = htmlspecialchars(COMPRESSION);
-$caching = htmlspecialchars(CACHING);
-$analytics_track = htmlspecialchars(ANALYTICS_TRACK);
-$analytics_url = htmlspecialchars(ANALYTICS_URL);
-$analytics_id = htmlspecialchars(ANALYTICS_ID);
-$ads_enable = htmlspecialchars(ADS_ENABLE);
-$ads_standard = htmlspecialchars(ADS_STANDARD);
-$gads_client = htmlspecialchars(GADS_CLIENT);
-$gads_slot = htmlspecialchars(GADS_SLOT);
-$multi_files = htmlspecialchars(MULTI_FILES);
-$developer = htmlspecialchars(DEVELOPER);
-$statistics = htmlspecialchars(STATISTICS);
-$register_api = htmlspecialchars(REGISTER_API);
-$xmppd_ctl = htmlspecialchars(XMPPD_CTL);
-$xmppd = htmlspecialchars(XMPPD);
-
-?>
diff --git a/server/vars-store.php b/server/vars-store.php
deleted file mode 100644
index d07eaa4c..00000000
--- a/server/vars-store.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-/*
-
-Jappix - An open social platform
-These are the store configuration variables
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Someone is trying to hack us?
-if(!defined('JAPPIX_BASE')) {
- exit;
-}
-
-// Define the initial music form values
-$music_title = '';
-$music_artist = '';
-$music_album = '';
-
-// Current store folders
-$share_folder = 'share';
-$music_folder = 'music';
-
-?>
diff --git a/store/index.html b/store/index.html
deleted file mode 100755
index a62f8a21..00000000
--- a/store/index.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <title>Jappix - Forbidden</title>
-</head>
-
-<body>
- <h1>Forbidden</h1>
- <h4>This is a private folder</h4>
-</body>
-
-</html> \ No newline at end of file
diff --git a/test/.htaccess b/test/.htaccess
deleted file mode 100644
index a6e0b168..00000000
--- a/test/.htaccess
+++ /dev/null
@@ -1,2 +0,0 @@
-# Security rule
-deny from all \ No newline at end of file
diff --git a/test/README.md b/test/README.md
deleted file mode 100644
index 55f7655c..00000000
--- a/test/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Jappix Test
-===========
-
-Test tools used by our CI (Continuous Integration) system to run tests on our code once a commit is made.
-
-If you need to run tests manually, run (on base directory):
-
-> npm test
diff --git a/tmp/.htaccess b/tmp/.htaccess
deleted file mode 100644
index a6e0b168..00000000
--- a/tmp/.htaccess
+++ /dev/null
@@ -1,2 +0,0 @@
-# Security rule
-deny from all \ No newline at end of file
diff --git a/tmp/archives/.gitkeep b/tmp/archives/.gitkeep
deleted file mode 100644
index e69de29b..00000000
--- a/tmp/archives/.gitkeep
+++ /dev/null
diff --git a/tmp/avatar/.gitkeep b/tmp/avatar/.gitkeep
deleted file mode 100644
index e69de29b..00000000
--- a/tmp/avatar/.gitkeep
+++ /dev/null
diff --git a/tmp/cache/.gitkeep b/tmp/cache/.gitkeep
deleted file mode 100644
index e69de29b..00000000
--- a/tmp/cache/.gitkeep
+++ /dev/null
diff --git a/tmp/send/.gitkeep b/tmp/send/.gitkeep
deleted file mode 100644
index e69de29b..00000000
--- a/tmp/send/.gitkeep
+++ /dev/null
diff --git a/tools/.htaccess b/tools/.htaccess
deleted file mode 100644
index a6e0b168..00000000
--- a/tools/.htaccess
+++ /dev/null
@@ -1,2 +0,0 @@
-# Security rule
-deny from all \ No newline at end of file
diff --git a/tools/extract_mini.sh b/tools/extract_mini.sh
deleted file mode 100755
index f8d88871..00000000
--- a/tools/extract_mini.sh
+++ /dev/null
@@ -1,236 +0,0 @@
-#!/bin/bash
-#
-# Jappix - An open social platform
-#
-# This script extracts a PHP-independent version of
-# Jappix Mini under the AGPL or the MPLv2.
-#
-# -------------------------------------------------
-#
-# License: WTFPL
-# Authors: Leberwurscht, Valérian Saliou
-#
-
-#
-# Usage example:
-# --------------
-#
-# - $ ./extract_mini.sh
-# - move the newly created mini/ directory onto your webserver
-# - Create index.html:
-# <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
-# <script type="text/javascript" src="/mini/javascripts/mini.js"></script>
-# <script type="text/javascript">
-# jQuery(document).ready(function() {
-# JAPPIX_STATIC = "/mini/";
-# HOST_BOSH = "https://bind.jappix.com/"
-#
-# JappixMini.launch({
-# connection: {
-# user: 'username',
-# password: 'password',
-# domain: 'server.tld'
-# },
-# application: {
-# network: {
-# autoconnect: true
-# },
-# interface: {
-# showpane: false
-# }
-# }
-# });
-# });
-# </script>
-#
-
-# absolute path to script
-ABSPATH=$(cd "$(dirname "$0")"; pwd)
-
-# standard settings
-BASE_DIR="$ABSPATH/.."
-SOURCE_DIR="$BASE_DIR/app"
-TARGET_DIR="$BASE_DIR/mini"
-LICENSE=MPL
-
-# parse command line options
-while getopts "t:l:h" opt; do
- case $opt in
- t) # target directory
- TARGET_DIR="$OPTARG"
- ;;
- l) # license setting
- case $OPTARG in
- MPL)
- LICENSE=MPL
- ;;
- AGPL)
- LICENSE=AGPL
- ;;
- *)
- echo "Invalid license '$OPTARG' - need MPL or AGPL" >&2
- exit 1
- ;;
- esac
- ;;
- h) # help
- echo "Usage: $0 [-h] [-t TARGET_DIR] [-l MPL|AGPL]" >&2
- exit 1
- ;;
- esac
-done
-
-# set compatible licenses and file header
-if [ "$LICENSE" == "MPL" ]; then
- COMPATIBLE_LICENSES="PD MPL MIT WTFPL"
- LICENSE_HEADER='/*
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *'
-fi
-if [ "$LICENSE" == "AGPL" ]; then
- COMPATIBLE_LICENSES="PD MPL MIT WTFPL AGPL GPL"
- LICENSE_HEADER='/*
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero 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 Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *'
-fi
-
-LICENSE_HEADER="$LICENSE_HEADER"'
- *
- * This compound file may be composed of several subfiles by different authors.
- * The particular authors, copyright information, disclaimers and alternative
- * licenses for the subfiles are indicated in separate headers.
- *
- */'
-
-# create directory
-if [ -e "$TARGET_DIR" ]; then
- echo "Target directory '$TARGET_DIR' already exists. Doing nothing." >&2
- exit 1
-else
- echo "Extracting Jappix Mini into directory '$TARGET_DIR'" >&2
- mkdir "$TARGET_DIR"
-fi
-
-mkdir "$TARGET_DIR/stylesheets/"
-mkdir "$TARGET_DIR/javascripts/"
-mkdir "$TARGET_DIR/images/"
-
-# define license check function
-check_license()
-{
- filename=$1
- allowed_licenses=$2
-
- # find licenses line of this file
- LICENSES="`head $filename | grep -i 'Licenses\?:\|Licensed under'`"
-
- # make sure this line contains a compatible license
- match=0
- matching_license=""
- for license in $allowed_licenses; do
- if [ `echo $LICENSES | grep -c "\(\W\|\<\)$license\(\W\|\>\)"` -gt 0 ]; then
- match=1
- matching_license="$license"
- fi
- if [ $license == "MPL" -a `echo $LICENSES | grep -c "\(\W\|\<\)\(Mozilla Public License version 1.1\|MPLv2\)\(\W\|\>\)"` -gt 0 ]; then
- match=1
- matching_license="$license"
- fi
- done
- if [ $match -eq 0 ]; then
- echo >&2
- echo "ERROR: Could not detect a $LICENSE-compatible license for file '$filename'!" >&2
- rm -r -- "$TARGET_DIR"
- exit 1
- else
- echo "$filename detected to be licensed under the $LICENSE-compatible license $matching_license:"
- echo -en "\t"
- echo "$LICENSES"
- fi
-}
-
-# create compound javascript file
-echo "$LICENSE_HEADER" > "$TARGET_DIR/javascripts/mini.js"
-
-JS_FILES="`cat $SOURCE_DIR/bundles/mini.xml | sed -n "s/.*<js>\(.*\)<\/js>.*/\1/p" | sed "s/~/ /g"`"
-for js_file in $JS_FILES; do
- check_license "$SOURCE_DIR/javascripts/$js_file" "$COMPATIBLE_LICENSES"
-
- # add to compound file removing UTF-8 byte order mark
- cat "$SOURCE_DIR/javascripts/$js_file" | sed s/^\\xef\\xbb\\xbf// >> "$TARGET_DIR/javascripts/mini.js"
-done
-
-# simple configuraton
-cat >> "$TARGET_DIR/javascripts/mini.js" << EOF
-
-// Configuration
-XML_LANG = 'en';
-JAPPIX_VERSION = jQuery.trim('`cat $BASE_DIR/VERSION`');
-JAPPIX_STATIC = '/mini/';
-EOF
-
-# create compound style sheet file
-echo "$LICENSE_HEADER" > "$TARGET_DIR/stylesheets/mini.css"
-
-CSS_FILES="`cat $SOURCE_DIR/bundles/mini.xml | sed -n "s/.*<css>\(.*\)<\/css>.*/\1/p" | sed "s/~/ /g"`"
-for css_file in $CSS_FILES; do
- check_license "$SOURCE_DIR/stylesheets/$css_file" "$COMPATIBLE_LICENSES"
-
- # add to compound file removing UTF-8 byte order mark
- cat "$SOURCE_DIR/stylesheets/$css_file" | sed s/^\\xef\\xbb\\xbf// >> "$TARGET_DIR/stylesheets/mini.css"
-done
-
-# copy artwork
-# mini.png, mini.gif, animate.png and animate.gif are licensed under CC-BY
-mkdir -p "$TARGET_DIR/images/sprites/"
-cp "$SOURCE_DIR/images/sprites/mini.gif" "$TARGET_DIR/images/sprites/mini.gif"
-cp "$SOURCE_DIR/images/sprites/mini.png" "$TARGET_DIR/images/sprites/mini.png"
-cp "$SOURCE_DIR/images/sprites/animate.png" "$TARGET_DIR/images/sprites/animate.png"
-cp "$SOURCE_DIR/images/sprites/animate.gif" "$TARGET_DIR/images/sprites/animate.gif"
-
-# copy wait-typing.gif
-mkdir -p "$TARGET_DIR/images/wait/"
-cp "$SOURCE_DIR/images/wait/wait-typing.gif" "$TARGET_DIR/images/wait/wait-typing.gif"
-
-# copy blank.gif
-mkdir -p "$TARGET_DIR/images/others/"
-cp "$SOURCE_DIR/images/others/blank.gif" "$TARGET_DIR/images/others/blank.gif"
-
-# copy sounds
-# receive-message.mp3, receive-message.oga are licensed under CC-BY
-mkdir -p "$TARGET_DIR/sounds/"
-cp "$SOURCE_DIR/sounds/receive-message.mp3" "$TARGET_DIR/sounds/receive-message.mp3"
-cp "$SOURCE_DIR/sounds/receive-message.oga" "$TARGET_DIR/sounds/receive-message.oga"
-
-# license information
-cat > "$TARGET_DIR/COPYING" << EOF
-Code
-----
-
-The code is licensed under the $LICENSE, as indicated in the source files.
-
-Artwork
--------
-
-The files ./app/images/sprites/mini.png, ./app/images/sprites/mini.gif, ./app/images/sprites/animate.png, ./app/images/sprites/animate.gif and ./app/images/wait/wait-typing.gif were created by
-Valérian Saliou and are dual-licensed under the Creative Commons Attribution 2.5
-License and the Creative Commons Attribution 3.0 License.
-They contain work from the FamFamFam Silk icon set by Mark James.
-
- * http://famfamfam.com/lab/icons/silk/
- * http://creativecommons.org/licenses/by/2.5/
- * http://creativecommons.org/licenses/by/3.0/
-EOF