From 7396a7681610459ec9feb79e7ae779fd167d3699 Mon Sep 17 00:00:00 2001 From: Wruczek Date: Thu, 27 Dec 2018 11:48:58 +0100 Subject: [PATCH] Remove all files from ts-website 1.0 --- .gitattributes | 17 - .gitignore | 138 +- .htaccess | 39 - LICENSE.md | 21 - README.md | 45 - api/i18n.php | 5 - api/status.php | 76 - bans.php | 111 - cache/.htaccess | 3 - composer.json | 6 - config/config.template.php | 77 - config/languages/lang.bg.php | 104 - config/languages/lang.br.php | 105 - config/languages/lang.bs.php | 92 - config/languages/lang.by.php | 103 - config/languages/lang.cz.php | 102 - config/languages/lang.da.php | 104 - config/languages/lang.de.php | 104 - config/languages/lang.en.php | 104 - config/languages/lang.es.php | 104 - config/languages/lang.fr.php | 104 - config/languages/lang.gr.php | 104 - config/languages/lang.hu.php | 104 - config/languages/lang.it.php | 104 - config/languages/lang.nl.php | 104 - config/languages/lang.pl.php | 104 - config/languages/lang.ru.php | 104 - config/languages/lang.se.php | 104 - config/languages/lang.tr.php | 104 - config/languages/lang.ua.php | 104 - config/news/README.txt | 1 - config/news/news1.md | 36 - config/news/news2.md | 884 ------ config/rules.md | 43 - css/christmas-theme.css | 148 - css/flags/famfamfam-flags.min.css | 1 - css/flags/famfamfam-flags.png | Bin 78508 -> 0 bytes css/navbar.css | 66 - css/style.css | 138 - css/theme.css | 384 --- errorpages/403.html | 47 - errorpages/404.html | 47 - errorpages/500.html | 47 - img/bg.png | Bin 798090 -> 0 bytes img/christmas-bg.jpg | Bin 144955 -> 0 bytes img/icon/icon-16.png | Bin 1238 -> 0 bytes img/icon/icon-32.png | Bin 2176 -> 0 bytes img/icon/icon-512.png | Bin 56244 -> 0 bytes img/icon/icon-64.png | Bin 4664 -> 0 bytes include/adminlist.php | 112 - include/cacheutils.class.php | 61 - include/footer.php | 73 - include/header.php | 185 -- include/language.php | 49 - include/modulecheck.php | 117 - include/tsutils.php | 38 - index.php | 75 - js/bans.js | 8 - js/christmas.js | 74 - js/script.js | 17 - js/status.js | 62 - lib/parsedown/parsedown.php | 1552 ---------- lib/phpfastcache/LICENCE | 20 - .../bin/legacy/Psr/Cache/LICENSE.txt | 19 - .../bin/legacy/Psr/Cache/README.md | 9 - .../bin/legacy/Psr/Cache/composer.json | 25 - .../legacy/Psr/Cache/src/CacheException.php | 10 - .../Psr/Cache/src/CacheItemInterface.php | 106 - .../Psr/Cache/src/CacheItemPoolInterface.php | 139 - .../Cache/src/InvalidArgumentException.php | 13 - lib/phpfastcache/src/autoload.php | 51 - lib/phpfastcache/src/phpFastCache/.htaccess | 3 - lib/phpfastcache/src/phpFastCache/Api.php | 72 - .../phpFastCache/Cache/DriverBaseTrait.php | 334 --- .../Cache/ExtendedCacheItemInterface.php | 170 -- .../Cache/ExtendedCacheItemPoolInterface.php | 357 --- .../src/phpFastCache/Cache/ItemBaseTrait.php | 447 --- .../src/phpFastCache/CacheManager.php | 270 -- .../Core/ClassNamespaceResolverTrait.php | 36 - .../src/phpFastCache/Core/DriverAbstract.php | 67 - .../Core/ExtendedCacheItemPoolTrait.php | 370 --- .../MemcacheDriverCollisionDetectorTrait.php | 40 - .../src/phpFastCache/Core/PathSeekerTrait.php | 242 -- .../Core/StandardPsr6StructureTrait.php | 247 -- .../src/phpFastCache/Drivers/Apc/Driver.php | 143 - .../src/phpFastCache/Drivers/Apc/Item.php | 63 - .../src/phpFastCache/Drivers/Apcu/Driver.php | 142 - .../src/phpFastCache/Drivers/Apcu/Item.php | 63 - .../phpFastCache/Drivers/Cookie/Driver.php | 197 -- .../src/phpFastCache/Drivers/Cookie/Item.php | 65 - .../phpFastCache/Drivers/Couchbase/Driver.php | 199 -- .../phpFastCache/Drivers/Couchbase/Item.php | 63 - .../phpFastCache/Drivers/Devfalse/Driver.php | 136 - .../phpFastCache/Drivers/Devfalse/Item.php | 63 - .../phpFastCache/Drivers/Devnull/Driver.php | 138 - .../src/phpFastCache/Drivers/Devnull/Item.php | 63 - .../phpFastCache/Drivers/Devtrue/Driver.php | 138 - .../src/phpFastCache/Drivers/Devtrue/Item.php | 63 - .../src/phpFastCache/Drivers/Files/Driver.php | 239 -- .../src/phpFastCache/Drivers/Files/Item.php | 63 - .../phpFastCache/Drivers/Leveldb/Driver.php | 177 -- .../src/phpFastCache/Drivers/Leveldb/Item.php | 63 - .../phpFastCache/Drivers/Memcache/Driver.php | 176 -- .../phpFastCache/Drivers/Memcache/Item.php | 63 - .../phpFastCache/Drivers/Memcached/Driver.php | 175 -- .../phpFastCache/Drivers/Memcached/Item.php | 63 - .../phpFastCache/Drivers/Mongodb/Driver.php | 223 -- .../src/phpFastCache/Drivers/Mongodb/Item.php | 63 - .../phpFastCache/Drivers/Predis/Driver.php | 161 -- .../src/phpFastCache/Drivers/Predis/Item.php | 63 - .../src/phpFastCache/Drivers/Redis/Driver.php | 165 -- .../src/phpFastCache/Drivers/Redis/Item.php | 63 - .../phpFastCache/Drivers/Sqlite/Driver.php | 431 --- .../src/phpFastCache/Drivers/Sqlite/Item.php | 63 - .../src/phpFastCache/Drivers/Ssdb/Driver.php | 181 -- .../src/phpFastCache/Drivers/Ssdb/Item.php | 63 - .../phpFastCache/Drivers/Wincache/Driver.php | 138 - .../phpFastCache/Drivers/Wincache/Item.php | 63 - .../phpFastCache/Drivers/Xcache/Driver.php | 148 - .../src/phpFastCache/Drivers/Xcache/Item.php | 63 - .../phpFastCache/Drivers/Zenddisk/Driver.php | 141 - .../phpFastCache/Drivers/Zenddisk/Item.php | 62 - .../phpFastCache/Drivers/Zendshm/Driver.php | 149 - .../src/phpFastCache/Drivers/Zendshm/Item.php | 62 - .../phpFastCache/Entities/driverStatistic.php | 227 -- .../Exceptions/phpFastCacheCoreException.php | 26 - .../phpFastCacheDriverCheckException.php | 24 - .../phpFastCacheDriverException.php | 26 - .../Proxy/phpFastCacheAbstractProxy.php | 83 - .../src/phpFastCache/Util/Directory.php | 143 - .../src/phpFastCache/Util/Languages.php | 47 - lib/phpfastcache/src/phpFastCache/index.html | 1 - lib/ts3phpframework/LICENSE | 674 ----- lib/ts3phpframework/images/flags/ad.png | Bin 643 -> 0 bytes lib/ts3phpframework/images/flags/ae.png | Bin 408 -> 0 bytes lib/ts3phpframework/images/flags/af.png | Bin 604 -> 0 bytes lib/ts3phpframework/images/flags/ag.png | Bin 591 -> 0 bytes lib/ts3phpframework/images/flags/ai.png | Bin 643 -> 0 bytes lib/ts3phpframework/images/flags/al.png | Bin 600 -> 0 bytes lib/ts3phpframework/images/flags/am.png | Bin 497 -> 0 bytes lib/ts3phpframework/images/flags/an.png | Bin 488 -> 0 bytes lib/ts3phpframework/images/flags/ao.png | Bin 428 -> 0 bytes lib/ts3phpframework/images/flags/ar.png | Bin 506 -> 0 bytes lib/ts3phpframework/images/flags/as.png | Bin 647 -> 0 bytes lib/ts3phpframework/images/flags/at.png | Bin 403 -> 0 bytes lib/ts3phpframework/images/flags/au.png | Bin 673 -> 0 bytes lib/ts3phpframework/images/flags/aw.png | Bin 524 -> 0 bytes lib/ts3phpframework/images/flags/ax.png | Bin 663 -> 0 bytes lib/ts3phpframework/images/flags/az.png | Bin 589 -> 0 bytes lib/ts3phpframework/images/flags/ba.png | Bin 593 -> 0 bytes lib/ts3phpframework/images/flags/bb.png | Bin 585 -> 0 bytes lib/ts3phpframework/images/flags/bd.png | Bin 504 -> 0 bytes lib/ts3phpframework/images/flags/be.png | Bin 449 -> 0 bytes lib/ts3phpframework/images/flags/bf.png | Bin 497 -> 0 bytes lib/ts3phpframework/images/flags/bg.png | Bin 462 -> 0 bytes lib/ts3phpframework/images/flags/bh.png | Bin 457 -> 0 bytes lib/ts3phpframework/images/flags/bi.png | Bin 675 -> 0 bytes lib/ts3phpframework/images/flags/bj.png | Bin 486 -> 0 bytes lib/ts3phpframework/images/flags/bl.png | Bin 545 -> 0 bytes lib/ts3phpframework/images/flags/bm.png | Bin 611 -> 0 bytes lib/ts3phpframework/images/flags/bn.png | Bin 639 -> 0 bytes lib/ts3phpframework/images/flags/bo.png | Bin 500 -> 0 bytes lib/ts3phpframework/images/flags/br.png | Bin 593 -> 0 bytes lib/ts3phpframework/images/flags/bs.png | Bin 526 -> 0 bytes lib/ts3phpframework/images/flags/bt.png | Bin 631 -> 0 bytes lib/ts3phpframework/images/flags/bv.png | Bin 512 -> 0 bytes lib/ts3phpframework/images/flags/bw.png | Bin 443 -> 0 bytes lib/ts3phpframework/images/flags/by.png | Bin 514 -> 0 bytes lib/ts3phpframework/images/flags/bz.png | Bin 600 -> 0 bytes lib/ts3phpframework/images/flags/ca.png | Bin 628 -> 0 bytes lib/ts3phpframework/images/flags/cc.png | Bin 625 -> 0 bytes lib/ts3phpframework/images/flags/cd.png | Bin 528 -> 0 bytes lib/ts3phpframework/images/flags/cf.png | Bin 614 -> 0 bytes lib/ts3phpframework/images/flags/cg.png | Bin 521 -> 0 bytes lib/ts3phpframework/images/flags/ch.png | Bin 367 -> 0 bytes lib/ts3phpframework/images/flags/ci.png | Bin 453 -> 0 bytes lib/ts3phpframework/images/flags/ck.png | Bin 586 -> 0 bytes lib/ts3phpframework/images/flags/cl.png | Bin 450 -> 0 bytes lib/ts3phpframework/images/flags/cm.png | Bin 525 -> 0 bytes lib/ts3phpframework/images/flags/cn.png | Bin 472 -> 0 bytes lib/ts3phpframework/images/flags/co.png | Bin 483 -> 0 bytes lib/ts3phpframework/images/flags/cr.png | Bin 477 -> 0 bytes lib/ts3phpframework/images/flags/cs.png | Bin 439 -> 0 bytes lib/ts3phpframework/images/flags/cu.png | Bin 563 -> 0 bytes lib/ts3phpframework/images/flags/cv.png | Bin 529 -> 0 bytes lib/ts3phpframework/images/flags/cw.png | Bin 205 -> 0 bytes lib/ts3phpframework/images/flags/cx.png | Bin 608 -> 0 bytes lib/ts3phpframework/images/flags/cy.png | Bin 428 -> 0 bytes lib/ts3phpframework/images/flags/cz.png | Bin 476 -> 0 bytes lib/ts3phpframework/images/flags/de.png | Bin 545 -> 0 bytes lib/ts3phpframework/images/flags/dj.png | Bin 572 -> 0 bytes lib/ts3phpframework/images/flags/dk.png | Bin 495 -> 0 bytes lib/ts3phpframework/images/flags/dm.png | Bin 620 -> 0 bytes lib/ts3phpframework/images/flags/do.png | Bin 508 -> 0 bytes lib/ts3phpframework/images/flags/dz.png | Bin 582 -> 0 bytes lib/ts3phpframework/images/flags/ec.png | Bin 500 -> 0 bytes lib/ts3phpframework/images/flags/ee.png | Bin 429 -> 0 bytes lib/ts3phpframework/images/flags/eg.png | Bin 465 -> 0 bytes lib/ts3phpframework/images/flags/eh.png | Bin 508 -> 0 bytes lib/ts3phpframework/images/flags/er.png | Bin 653 -> 0 bytes lib/ts3phpframework/images/flags/es.png | Bin 469 -> 0 bytes lib/ts3phpframework/images/flags/et.png | Bin 592 -> 0 bytes lib/ts3phpframework/images/flags/fi.png | Bin 489 -> 0 bytes lib/ts3phpframework/images/flags/fj.png | Bin 610 -> 0 bytes lib/ts3phpframework/images/flags/fk.png | Bin 648 -> 0 bytes lib/ts3phpframework/images/flags/fm.png | Bin 552 -> 0 bytes lib/ts3phpframework/images/flags/fo.png | Bin 474 -> 0 bytes lib/ts3phpframework/images/flags/fr.png | Bin 545 -> 0 bytes lib/ts3phpframework/images/flags/ga.png | Bin 489 -> 0 bytes lib/ts3phpframework/images/flags/gb.png | Bin 599 -> 0 bytes lib/ts3phpframework/images/flags/gd.png | Bin 637 -> 0 bytes lib/ts3phpframework/images/flags/ge.png | Bin 594 -> 0 bytes lib/ts3phpframework/images/flags/gf.png | Bin 545 -> 0 bytes lib/ts3phpframework/images/flags/gg.png | Bin 362 -> 0 bytes lib/ts3phpframework/images/flags/gh.png | Bin 490 -> 0 bytes lib/ts3phpframework/images/flags/gi.png | Bin 463 -> 0 bytes lib/ts3phpframework/images/flags/gl.png | Bin 470 -> 0 bytes lib/ts3phpframework/images/flags/gm.png | Bin 493 -> 0 bytes lib/ts3phpframework/images/flags/gn.png | Bin 480 -> 0 bytes lib/ts3phpframework/images/flags/gp.png | Bin 488 -> 0 bytes lib/ts3phpframework/images/flags/gq.png | Bin 537 -> 0 bytes lib/ts3phpframework/images/flags/gr.png | Bin 487 -> 0 bytes lib/ts3phpframework/images/flags/gs.png | Bin 630 -> 0 bytes lib/ts3phpframework/images/flags/gt.png | Bin 493 -> 0 bytes lib/ts3phpframework/images/flags/gu.png | Bin 509 -> 0 bytes lib/ts3phpframework/images/flags/gw.png | Bin 516 -> 0 bytes lib/ts3phpframework/images/flags/gy.png | Bin 645 -> 0 bytes lib/ts3phpframework/images/flags/hk.png | Bin 527 -> 0 bytes lib/ts3phpframework/images/flags/hm.png | Bin 673 -> 0 bytes lib/ts3phpframework/images/flags/hn.png | Bin 537 -> 0 bytes lib/ts3phpframework/images/flags/hr.png | Bin 524 -> 0 bytes lib/ts3phpframework/images/flags/ht.png | Bin 487 -> 0 bytes lib/ts3phpframework/images/flags/hu.png | Bin 432 -> 0 bytes lib/ts3phpframework/images/flags/id.png | Bin 430 -> 0 bytes lib/ts3phpframework/images/flags/ie.png | Bin 481 -> 0 bytes lib/ts3phpframework/images/flags/il.png | Bin 431 -> 0 bytes lib/ts3phpframework/images/flags/im.png | Bin 372 -> 0 bytes lib/ts3phpframework/images/flags/in.png | Bin 503 -> 0 bytes lib/ts3phpframework/images/flags/io.png | Bin 658 -> 0 bytes lib/ts3phpframework/images/flags/iq.png | Bin 515 -> 0 bytes lib/ts3phpframework/images/flags/ir.png | Bin 512 -> 0 bytes lib/ts3phpframework/images/flags/is.png | Bin 532 -> 0 bytes lib/ts3phpframework/images/flags/it.png | Bin 420 -> 0 bytes lib/ts3phpframework/images/flags/je.png | Bin 471 -> 0 bytes lib/ts3phpframework/images/flags/jm.png | Bin 637 -> 0 bytes lib/ts3phpframework/images/flags/jo.png | Bin 473 -> 0 bytes lib/ts3phpframework/images/flags/jp.png | Bin 420 -> 0 bytes lib/ts3phpframework/images/flags/ke.png | Bin 569 -> 0 bytes lib/ts3phpframework/images/flags/kg.png | Bin 510 -> 0 bytes lib/ts3phpframework/images/flags/kh.png | Bin 549 -> 0 bytes lib/ts3phpframework/images/flags/ki.png | Bin 656 -> 0 bytes lib/ts3phpframework/images/flags/km.png | Bin 577 -> 0 bytes lib/ts3phpframework/images/flags/kn.png | Bin 604 -> 0 bytes lib/ts3phpframework/images/flags/kp.png | Bin 561 -> 0 bytes lib/ts3phpframework/images/flags/kr.png | Bin 592 -> 0 bytes lib/ts3phpframework/images/flags/kw.png | Bin 486 -> 0 bytes lib/ts3phpframework/images/flags/ky.png | Bin 643 -> 0 bytes lib/ts3phpframework/images/flags/kz.png | Bin 616 -> 0 bytes lib/ts3phpframework/images/flags/la.png | Bin 563 -> 0 bytes lib/ts3phpframework/images/flags/lb.png | Bin 517 -> 0 bytes lib/ts3phpframework/images/flags/lc.png | Bin 520 -> 0 bytes lib/ts3phpframework/images/flags/li.png | Bin 537 -> 0 bytes lib/ts3phpframework/images/flags/lk.png | Bin 627 -> 0 bytes lib/ts3phpframework/images/flags/lr.png | Bin 466 -> 0 bytes lib/ts3phpframework/images/flags/ls.png | Bin 628 -> 0 bytes lib/ts3phpframework/images/flags/lt.png | Bin 508 -> 0 bytes lib/ts3phpframework/images/flags/lu.png | Bin 481 -> 0 bytes lib/ts3phpframework/images/flags/lv.png | Bin 465 -> 0 bytes lib/ts3phpframework/images/flags/ly.png | Bin 258 -> 0 bytes lib/ts3phpframework/images/flags/ma.png | Bin 432 -> 0 bytes lib/ts3phpframework/images/flags/mc.png | Bin 380 -> 0 bytes lib/ts3phpframework/images/flags/md.png | Bin 566 -> 0 bytes lib/ts3phpframework/images/flags/me.png | Bin 448 -> 0 bytes lib/ts3phpframework/images/flags/mg.png | Bin 453 -> 0 bytes lib/ts3phpframework/images/flags/mh.png | Bin 628 -> 0 bytes lib/ts3phpframework/images/flags/mk.png | Bin 664 -> 0 bytes lib/ts3phpframework/images/flags/ml.png | Bin 474 -> 0 bytes lib/ts3phpframework/images/flags/mm.png | Bin 483 -> 0 bytes lib/ts3phpframework/images/flags/mn.png | Bin 492 -> 0 bytes lib/ts3phpframework/images/flags/mo.png | Bin 588 -> 0 bytes lib/ts3phpframework/images/flags/mp.png | Bin 597 -> 0 bytes lib/ts3phpframework/images/flags/mq.png | Bin 655 -> 0 bytes lib/ts3phpframework/images/flags/mr.png | Bin 569 -> 0 bytes lib/ts3phpframework/images/flags/ms.png | Bin 614 -> 0 bytes lib/ts3phpframework/images/flags/mt.png | Bin 420 -> 0 bytes lib/ts3phpframework/images/flags/mu.png | Bin 496 -> 0 bytes lib/ts3phpframework/images/flags/mv.png | Bin 542 -> 0 bytes lib/ts3phpframework/images/flags/mw.png | Bin 529 -> 0 bytes lib/ts3phpframework/images/flags/mx.png | Bin 574 -> 0 bytes lib/ts3phpframework/images/flags/my.png | Bin 571 -> 0 bytes lib/ts3phpframework/images/flags/mz.png | Bin 584 -> 0 bytes lib/ts3phpframework/images/flags/na.png | Bin 647 -> 0 bytes lib/ts3phpframework/images/flags/nc.png | Bin 591 -> 0 bytes lib/ts3phpframework/images/flags/ne.png | Bin 537 -> 0 bytes lib/ts3phpframework/images/flags/nf.png | Bin 602 -> 0 bytes lib/ts3phpframework/images/flags/ng.png | Bin 482 -> 0 bytes lib/ts3phpframework/images/flags/ni.png | Bin 508 -> 0 bytes lib/ts3phpframework/images/flags/nl.png | Bin 453 -> 0 bytes lib/ts3phpframework/images/flags/no.png | Bin 512 -> 0 bytes lib/ts3phpframework/images/flags/np.png | Bin 443 -> 0 bytes lib/ts3phpframework/images/flags/nr.png | Bin 527 -> 0 bytes lib/ts3phpframework/images/flags/nu.png | Bin 572 -> 0 bytes lib/ts3phpframework/images/flags/nz.png | Bin 639 -> 0 bytes lib/ts3phpframework/images/flags/om.png | Bin 478 -> 0 bytes lib/ts3phpframework/images/flags/pa.png | Bin 519 -> 0 bytes lib/ts3phpframework/images/flags/pe.png | Bin 397 -> 0 bytes lib/ts3phpframework/images/flags/pf.png | Bin 498 -> 0 bytes lib/ts3phpframework/images/flags/pg.png | Bin 593 -> 0 bytes lib/ts3phpframework/images/flags/ph.png | Bin 538 -> 0 bytes lib/ts3phpframework/images/flags/pk.png | Bin 569 -> 0 bytes lib/ts3phpframework/images/flags/pl.png | Bin 374 -> 0 bytes lib/ts3phpframework/images/flags/pm.png | Bin 689 -> 0 bytes lib/ts3phpframework/images/flags/pn.png | Bin 657 -> 0 bytes lib/ts3phpframework/images/flags/pr.png | Bin 556 -> 0 bytes lib/ts3phpframework/images/flags/ps.png | Bin 472 -> 0 bytes lib/ts3phpframework/images/flags/pt.png | Bin 554 -> 0 bytes lib/ts3phpframework/images/flags/pw.png | Bin 550 -> 0 bytes lib/ts3phpframework/images/flags/py.png | Bin 473 -> 0 bytes lib/ts3phpframework/images/flags/qa.png | Bin 450 -> 0 bytes lib/ts3phpframework/images/flags/re.png | Bin 545 -> 0 bytes lib/ts3phpframework/images/flags/ro.png | Bin 495 -> 0 bytes lib/ts3phpframework/images/flags/rs.png | Bin 423 -> 0 bytes lib/ts3phpframework/images/flags/ru.png | Bin 420 -> 0 bytes lib/ts3phpframework/images/flags/rw.png | Bin 533 -> 0 bytes lib/ts3phpframework/images/flags/sa.png | Bin 551 -> 0 bytes lib/ts3phpframework/images/flags/sb.png | Bin 624 -> 0 bytes lib/ts3phpframework/images/flags/sc.png | Bin 608 -> 0 bytes lib/ts3phpframework/images/flags/sd.png | Bin 492 -> 0 bytes lib/ts3phpframework/images/flags/se.png | Bin 542 -> 0 bytes lib/ts3phpframework/images/flags/sg.png | Bin 468 -> 0 bytes lib/ts3phpframework/images/flags/sh.png | Bin 645 -> 0 bytes lib/ts3phpframework/images/flags/si.png | Bin 510 -> 0 bytes lib/ts3phpframework/images/flags/sj.png | Bin 512 -> 0 bytes lib/ts3phpframework/images/flags/sk.png | Bin 562 -> 0 bytes lib/ts3phpframework/images/flags/sl.png | Bin 436 -> 0 bytes lib/ts3phpframework/images/flags/sm.png | Bin 502 -> 0 bytes lib/ts3phpframework/images/flags/sn.png | Bin 532 -> 0 bytes lib/ts3phpframework/images/flags/so.png | Bin 527 -> 0 bytes lib/ts3phpframework/images/flags/sr.png | Bin 513 -> 0 bytes lib/ts3phpframework/images/flags/st.png | Bin 584 -> 0 bytes lib/ts3phpframework/images/flags/sv.png | Bin 501 -> 0 bytes lib/ts3phpframework/images/flags/sy.png | Bin 422 -> 0 bytes lib/ts3phpframework/images/flags/sz.png | Bin 643 -> 0 bytes lib/ts3phpframework/images/flags/tc.png | Bin 624 -> 0 bytes lib/ts3phpframework/images/flags/td.png | Bin 570 -> 0 bytes lib/ts3phpframework/images/flags/tf.png | Bin 527 -> 0 bytes lib/ts3phpframework/images/flags/tg.png | Bin 562 -> 0 bytes lib/ts3phpframework/images/flags/th.png | Bin 452 -> 0 bytes lib/ts3phpframework/images/flags/tj.png | Bin 496 -> 0 bytes lib/ts3phpframework/images/flags/tk.png | Bin 638 -> 0 bytes lib/ts3phpframework/images/flags/tl.png | Bin 514 -> 0 bytes lib/ts3phpframework/images/flags/tm.png | Bin 593 -> 0 bytes lib/ts3phpframework/images/flags/tn.png | Bin 495 -> 0 bytes lib/ts3phpframework/images/flags/to.png | Bin 426 -> 0 bytes lib/ts3phpframework/images/flags/tr.png | Bin 492 -> 0 bytes lib/ts3phpframework/images/flags/tt.png | Bin 617 -> 0 bytes lib/ts3phpframework/images/flags/tv.png | Bin 536 -> 0 bytes lib/ts3phpframework/images/flags/tw.png | Bin 465 -> 0 bytes lib/ts3phpframework/images/flags/tz.png | Bin 642 -> 0 bytes lib/ts3phpframework/images/flags/ua.png | Bin 446 -> 0 bytes lib/ts3phpframework/images/flags/ug.png | Bin 531 -> 0 bytes lib/ts3phpframework/images/flags/uk.png | Bin 599 -> 0 bytes lib/ts3phpframework/images/flags/um.png | Bin 571 -> 0 bytes lib/ts3phpframework/images/flags/us.png | Bin 609 -> 0 bytes lib/ts3phpframework/images/flags/uy.png | Bin 532 -> 0 bytes lib/ts3phpframework/images/flags/uz.png | Bin 515 -> 0 bytes lib/ts3phpframework/images/flags/va.png | Bin 553 -> 0 bytes lib/ts3phpframework/images/flags/vc.png | Bin 577 -> 0 bytes lib/ts3phpframework/images/flags/ve.png | Bin 528 -> 0 bytes lib/ts3phpframework/images/flags/vg.png | Bin 630 -> 0 bytes lib/ts3phpframework/images/flags/vi.png | Bin 616 -> 0 bytes lib/ts3phpframework/images/flags/vn.png | Bin 474 -> 0 bytes lib/ts3phpframework/images/flags/vu.png | Bin 604 -> 0 bytes lib/ts3phpframework/images/flags/wf.png | Bin 554 -> 0 bytes lib/ts3phpframework/images/flags/ws.png | Bin 476 -> 0 bytes lib/ts3phpframework/images/flags/ye.png | Bin 413 -> 0 bytes lib/ts3phpframework/images/flags/yt.png | Bin 593 -> 0 bytes lib/ts3phpframework/images/flags/za.png | Bin 642 -> 0 bytes lib/ts3phpframework/images/flags/zm.png | Bin 500 -> 0 bytes lib/ts3phpframework/images/flags/zw.png | Bin 574 -> 0 bytes .../images/icons/ts3client.ico | Bin 70333 -> 0 bytes .../images/icons/ts3server.ico | Bin 69372 -> 0 bytes .../images/viewer/channel_flag_default.png | Bin 696 -> 0 bytes .../images/viewer/channel_flag_moderated.png | Bin 945 -> 0 bytes .../images/viewer/channel_flag_music.png | Bin 716 -> 0 bytes .../images/viewer/channel_flag_password.png | Bin 589 -> 0 bytes .../images/viewer/channel_full.png | Bin 822 -> 0 bytes .../images/viewer/channel_open.png | Bin 847 -> 0 bytes .../images/viewer/channel_pass.png | Bin 827 -> 0 bytes .../images/viewer/client_away.png | Bin 821 -> 0 bytes .../images/viewer/client_cc.png | Bin 3558 -> 0 bytes .../images/viewer/client_cc_idle.png | Bin 867 -> 0 bytes .../images/viewer/client_cc_talk.png | Bin 868 -> 0 bytes .../images/viewer/client_idle.png | Bin 829 -> 0 bytes .../images/viewer/client_mic_disabled.png | Bin 977 -> 0 bytes .../images/viewer/client_mic_muted.png | Bin 906 -> 0 bytes .../images/viewer/client_priority.png | Bin 1215 -> 0 bytes .../images/viewer/client_query.png | Bin 901 -> 0 bytes .../images/viewer/client_snd_disabled.png | Bin 929 -> 0 bytes .../images/viewer/client_snd_muted.png | Bin 908 -> 0 bytes .../images/viewer/client_talk.png | Bin 860 -> 0 bytes .../images/viewer/client_talker.png | Bin 978 -> 0 bytes .../images/viewer/client_talker_request.png | Bin 1065 -> 0 bytes .../images/viewer/group_channel.png | Bin 1309 -> 0 bytes .../images/viewer/group_icon_0.png | Bin 354 -> 0 bytes .../images/viewer/group_icon_100.png | Bin 809 -> 0 bytes .../images/viewer/group_icon_200.png | Bin 781 -> 0 bytes .../images/viewer/group_icon_300.png | Bin 820 -> 0 bytes .../images/viewer/group_icon_400.png | Bin 1160 -> 0 bytes .../images/viewer/group_icon_500.png | Bin 803 -> 0 bytes .../images/viewer/group_icon_600.png | Bin 757 -> 0 bytes .../images/viewer/group_server.png | Bin 1301 -> 0 bytes lib/ts3phpframework/images/viewer/host.png | Bin 1067 -> 0 bytes .../images/viewer/server_full.png | Bin 774 -> 0 bytes .../images/viewer/server_open.png | Bin 827 -> 0 bytes .../images/viewer/server_pass.png | Bin 773 -> 0 bytes .../images/viewer/spacer_dashdotdotline.gif | Bin 58 -> 0 bytes .../images/viewer/spacer_dashdotline.gif | Bin 54 -> 0 bytes .../images/viewer/spacer_dashline.gif | Bin 51 -> 0 bytes .../images/viewer/spacer_dotline.gif | Bin 46 -> 0 bytes .../images/viewer/spacer_solidline.gif | Bin 45 -> 0 bytes lib/ts3phpframework/images/viewer/tree.png | Bin 548 -> 0 bytes .../images/viewer/tree_blank.png | Bin 125 -> 0 bytes .../images/viewer/tree_end.gif | Bin 61 -> 0 bytes .../images/viewer/tree_line.gif | Bin 63 -> 0 bytes .../images/viewer/tree_mid.gif | Bin 64 -> 0 bytes .../libraries/TeamSpeak3/Adapter/Abstract.php | 160 -- .../TeamSpeak3/Adapter/Blacklist.php | 119 - .../Adapter/Blacklist/Exception.php | 32 - .../TeamSpeak3/Adapter/Exception.php | 32 - .../TeamSpeak3/Adapter/FileTransfer.php | 190 -- .../Adapter/FileTransfer/Exception.php | 32 - .../TeamSpeak3/Adapter/ServerQuery.php | 261 -- .../TeamSpeak3/Adapter/ServerQuery/Event.php | 170 -- .../Adapter/ServerQuery/Exception.php | 32 - .../TeamSpeak3/Adapter/ServerQuery/Reply.php | 346 --- .../libraries/TeamSpeak3/Adapter/TSDNS.php | 95 - .../TeamSpeak3/Adapter/TSDNS/Exception.php | 32 - .../libraries/TeamSpeak3/Adapter/Update.php | 217 -- .../TeamSpeak3/Adapter/Update/Exception.php | 32 - .../libraries/TeamSpeak3/Exception.php | 129 - .../libraries/TeamSpeak3/Helper/Char.php | 269 -- .../libraries/TeamSpeak3/Helper/Convert.php | 349 --- .../libraries/TeamSpeak3/Helper/Crypt.php | 482 ---- .../libraries/TeamSpeak3/Helper/Exception.php | 32 - .../libraries/TeamSpeak3/Helper/Profiler.php | 101 - .../TeamSpeak3/Helper/Profiler/Exception.php | 32 - .../TeamSpeak3/Helper/Profiler/Timer.php | 154 - .../libraries/TeamSpeak3/Helper/Signal.php | 213 -- .../TeamSpeak3/Helper/Signal/Exception.php | 32 - .../TeamSpeak3/Helper/Signal/Handler.php | 78 - .../TeamSpeak3/Helper/Signal/Interface.php | 353 --- .../libraries/TeamSpeak3/Helper/String.php | 939 ------ .../libraries/TeamSpeak3/Helper/Uri.php | 717 ----- .../libraries/TeamSpeak3/Node/Abstract.php | 624 ---- .../libraries/TeamSpeak3/Node/Channel.php | 586 ---- .../TeamSpeak3/Node/Channelgroup.php | 274 -- .../libraries/TeamSpeak3/Node/Client.php | 441 --- .../libraries/TeamSpeak3/Node/Exception.php | 32 - .../libraries/TeamSpeak3/Node/Host.php | 1202 -------- .../libraries/TeamSpeak3/Node/Server.php | 2536 ----------------- .../libraries/TeamSpeak3/Node/Servergroup.php | 298 -- .../libraries/TeamSpeak3/TeamSpeak3.php | 974 ------- .../TeamSpeak3/Transport/Abstract.php | 270 -- .../TeamSpeak3/Transport/Exception.php | 32 - .../libraries/TeamSpeak3/Transport/TCP.php | 179 -- .../libraries/TeamSpeak3/Transport/UDP.php | 113 - .../libraries/TeamSpeak3/Viewer/Html.php | 686 ----- .../libraries/TeamSpeak3/Viewer/Interface.php | 42 - .../libraries/TeamSpeak3/Viewer/Text.php | 107 - rules.php | 43 - viewer.php | 44 - 472 files changed, 28 insertions(+), 30005 deletions(-) delete mode 100644 .gitattributes delete mode 100644 .htaccess delete mode 100644 LICENSE.md delete mode 100644 README.md delete mode 100644 api/i18n.php delete mode 100644 api/status.php delete mode 100644 bans.php delete mode 100644 cache/.htaccess delete mode 100644 composer.json delete mode 100644 config/config.template.php delete mode 100644 config/languages/lang.bg.php delete mode 100644 config/languages/lang.br.php delete mode 100644 config/languages/lang.bs.php delete mode 100644 config/languages/lang.by.php delete mode 100644 config/languages/lang.cz.php delete mode 100644 config/languages/lang.da.php delete mode 100644 config/languages/lang.de.php delete mode 100644 config/languages/lang.en.php delete mode 100644 config/languages/lang.es.php delete mode 100644 config/languages/lang.fr.php delete mode 100644 config/languages/lang.gr.php delete mode 100644 config/languages/lang.hu.php delete mode 100644 config/languages/lang.it.php delete mode 100644 config/languages/lang.nl.php delete mode 100644 config/languages/lang.pl.php delete mode 100644 config/languages/lang.ru.php delete mode 100644 config/languages/lang.se.php delete mode 100644 config/languages/lang.tr.php delete mode 100644 config/languages/lang.ua.php delete mode 100644 config/news/README.txt delete mode 100644 config/news/news1.md delete mode 100644 config/news/news2.md delete mode 100644 config/rules.md delete mode 100644 css/christmas-theme.css delete mode 100644 css/flags/famfamfam-flags.min.css delete mode 100644 css/flags/famfamfam-flags.png delete mode 100644 css/navbar.css delete mode 100644 css/style.css delete mode 100644 css/theme.css delete mode 100644 errorpages/403.html delete mode 100644 errorpages/404.html delete mode 100644 errorpages/500.html delete mode 100644 img/bg.png delete mode 100644 img/christmas-bg.jpg delete mode 100644 img/icon/icon-16.png delete mode 100644 img/icon/icon-32.png delete mode 100644 img/icon/icon-512.png delete mode 100644 img/icon/icon-64.png delete mode 100644 include/adminlist.php delete mode 100644 include/cacheutils.class.php delete mode 100644 include/footer.php delete mode 100644 include/header.php delete mode 100644 include/language.php delete mode 100644 include/modulecheck.php delete mode 100644 include/tsutils.php delete mode 100644 index.php delete mode 100644 js/bans.js delete mode 100644 js/christmas.js delete mode 100644 js/script.js delete mode 100644 js/status.js delete mode 100644 lib/parsedown/parsedown.php delete mode 100644 lib/phpfastcache/LICENCE delete mode 100644 lib/phpfastcache/bin/legacy/Psr/Cache/LICENSE.txt delete mode 100644 lib/phpfastcache/bin/legacy/Psr/Cache/README.md delete mode 100644 lib/phpfastcache/bin/legacy/Psr/Cache/composer.json delete mode 100644 lib/phpfastcache/bin/legacy/Psr/Cache/src/CacheException.php delete mode 100644 lib/phpfastcache/bin/legacy/Psr/Cache/src/CacheItemInterface.php delete mode 100644 lib/phpfastcache/bin/legacy/Psr/Cache/src/CacheItemPoolInterface.php delete mode 100644 lib/phpfastcache/bin/legacy/Psr/Cache/src/InvalidArgumentException.php delete mode 100644 lib/phpfastcache/src/autoload.php delete mode 100644 lib/phpfastcache/src/phpFastCache/.htaccess delete mode 100644 lib/phpfastcache/src/phpFastCache/Api.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Cache/DriverBaseTrait.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Cache/ExtendedCacheItemInterface.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Cache/ExtendedCacheItemPoolInterface.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Cache/ItemBaseTrait.php delete mode 100644 lib/phpfastcache/src/phpFastCache/CacheManager.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Core/ClassNamespaceResolverTrait.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Core/DriverAbstract.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Core/ExtendedCacheItemPoolTrait.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Core/MemcacheDriverCollisionDetectorTrait.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Core/PathSeekerTrait.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Core/StandardPsr6StructureTrait.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Apc/Driver.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Apc/Item.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Apcu/Driver.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Apcu/Item.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Cookie/Driver.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Cookie/Item.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Couchbase/Driver.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Couchbase/Item.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Devfalse/Driver.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Devfalse/Item.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Devnull/Driver.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Devnull/Item.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Devtrue/Driver.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Devtrue/Item.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Files/Driver.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Files/Item.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Leveldb/Driver.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Leveldb/Item.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Memcache/Driver.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Memcache/Item.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Memcached/Driver.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Memcached/Item.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Mongodb/Driver.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Mongodb/Item.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Predis/Driver.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Predis/Item.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Redis/Driver.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Redis/Item.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Sqlite/Driver.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Sqlite/Item.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Ssdb/Driver.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Ssdb/Item.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Wincache/Driver.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Wincache/Item.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Xcache/Driver.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Xcache/Item.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Zenddisk/Driver.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Zenddisk/Item.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Zendshm/Driver.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Drivers/Zendshm/Item.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Entities/driverStatistic.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Exceptions/phpFastCacheCoreException.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Exceptions/phpFastCacheDriverCheckException.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Exceptions/phpFastCacheDriverException.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Proxy/phpFastCacheAbstractProxy.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Util/Directory.php delete mode 100644 lib/phpfastcache/src/phpFastCache/Util/Languages.php delete mode 100644 lib/phpfastcache/src/phpFastCache/index.html delete mode 100644 lib/ts3phpframework/LICENSE delete mode 100644 lib/ts3phpframework/images/flags/ad.png delete mode 100644 lib/ts3phpframework/images/flags/ae.png delete mode 100644 lib/ts3phpframework/images/flags/af.png delete mode 100644 lib/ts3phpframework/images/flags/ag.png delete mode 100644 lib/ts3phpframework/images/flags/ai.png delete mode 100644 lib/ts3phpframework/images/flags/al.png delete mode 100644 lib/ts3phpframework/images/flags/am.png delete mode 100644 lib/ts3phpframework/images/flags/an.png delete mode 100644 lib/ts3phpframework/images/flags/ao.png delete mode 100644 lib/ts3phpframework/images/flags/ar.png delete mode 100644 lib/ts3phpframework/images/flags/as.png delete mode 100644 lib/ts3phpframework/images/flags/at.png delete mode 100644 lib/ts3phpframework/images/flags/au.png delete mode 100644 lib/ts3phpframework/images/flags/aw.png delete mode 100644 lib/ts3phpframework/images/flags/ax.png delete mode 100644 lib/ts3phpframework/images/flags/az.png delete mode 100644 lib/ts3phpframework/images/flags/ba.png delete mode 100644 lib/ts3phpframework/images/flags/bb.png delete mode 100644 lib/ts3phpframework/images/flags/bd.png delete mode 100644 lib/ts3phpframework/images/flags/be.png delete mode 100644 lib/ts3phpframework/images/flags/bf.png delete mode 100644 lib/ts3phpframework/images/flags/bg.png delete mode 100644 lib/ts3phpframework/images/flags/bh.png delete mode 100644 lib/ts3phpframework/images/flags/bi.png delete mode 100644 lib/ts3phpframework/images/flags/bj.png delete mode 100644 lib/ts3phpframework/images/flags/bl.png delete mode 100644 lib/ts3phpframework/images/flags/bm.png delete mode 100644 lib/ts3phpframework/images/flags/bn.png delete mode 100644 lib/ts3phpframework/images/flags/bo.png delete mode 100644 lib/ts3phpframework/images/flags/br.png delete mode 100644 lib/ts3phpframework/images/flags/bs.png delete mode 100644 lib/ts3phpframework/images/flags/bt.png delete mode 100644 lib/ts3phpframework/images/flags/bv.png delete mode 100644 lib/ts3phpframework/images/flags/bw.png delete mode 100644 lib/ts3phpframework/images/flags/by.png delete mode 100644 lib/ts3phpframework/images/flags/bz.png delete mode 100644 lib/ts3phpframework/images/flags/ca.png delete mode 100644 lib/ts3phpframework/images/flags/cc.png delete mode 100644 lib/ts3phpframework/images/flags/cd.png delete mode 100644 lib/ts3phpframework/images/flags/cf.png delete mode 100644 lib/ts3phpframework/images/flags/cg.png delete mode 100644 lib/ts3phpframework/images/flags/ch.png delete mode 100644 lib/ts3phpframework/images/flags/ci.png delete mode 100644 lib/ts3phpframework/images/flags/ck.png delete mode 100644 lib/ts3phpframework/images/flags/cl.png delete mode 100644 lib/ts3phpframework/images/flags/cm.png delete mode 100644 lib/ts3phpframework/images/flags/cn.png delete mode 100644 lib/ts3phpframework/images/flags/co.png delete mode 100644 lib/ts3phpframework/images/flags/cr.png delete mode 100644 lib/ts3phpframework/images/flags/cs.png delete mode 100644 lib/ts3phpframework/images/flags/cu.png delete mode 100644 lib/ts3phpframework/images/flags/cv.png delete mode 100644 lib/ts3phpframework/images/flags/cw.png delete mode 100644 lib/ts3phpframework/images/flags/cx.png delete mode 100644 lib/ts3phpframework/images/flags/cy.png delete mode 100644 lib/ts3phpframework/images/flags/cz.png delete mode 100644 lib/ts3phpframework/images/flags/de.png delete mode 100644 lib/ts3phpframework/images/flags/dj.png delete mode 100644 lib/ts3phpframework/images/flags/dk.png delete mode 100644 lib/ts3phpframework/images/flags/dm.png delete mode 100644 lib/ts3phpframework/images/flags/do.png delete mode 100644 lib/ts3phpframework/images/flags/dz.png delete mode 100644 lib/ts3phpframework/images/flags/ec.png delete mode 100644 lib/ts3phpframework/images/flags/ee.png delete mode 100644 lib/ts3phpframework/images/flags/eg.png delete mode 100644 lib/ts3phpframework/images/flags/eh.png delete mode 100644 lib/ts3phpframework/images/flags/er.png delete mode 100644 lib/ts3phpframework/images/flags/es.png delete mode 100644 lib/ts3phpframework/images/flags/et.png delete mode 100644 lib/ts3phpframework/images/flags/fi.png delete mode 100644 lib/ts3phpframework/images/flags/fj.png delete mode 100644 lib/ts3phpframework/images/flags/fk.png delete mode 100644 lib/ts3phpframework/images/flags/fm.png delete mode 100644 lib/ts3phpframework/images/flags/fo.png delete mode 100644 lib/ts3phpframework/images/flags/fr.png delete mode 100644 lib/ts3phpframework/images/flags/ga.png delete mode 100644 lib/ts3phpframework/images/flags/gb.png delete mode 100644 lib/ts3phpframework/images/flags/gd.png delete mode 100644 lib/ts3phpframework/images/flags/ge.png delete mode 100644 lib/ts3phpframework/images/flags/gf.png delete mode 100644 lib/ts3phpframework/images/flags/gg.png delete mode 100644 lib/ts3phpframework/images/flags/gh.png delete mode 100644 lib/ts3phpframework/images/flags/gi.png delete mode 100644 lib/ts3phpframework/images/flags/gl.png delete mode 100644 lib/ts3phpframework/images/flags/gm.png delete mode 100644 lib/ts3phpframework/images/flags/gn.png delete mode 100644 lib/ts3phpframework/images/flags/gp.png delete mode 100644 lib/ts3phpframework/images/flags/gq.png delete mode 100644 lib/ts3phpframework/images/flags/gr.png delete mode 100644 lib/ts3phpframework/images/flags/gs.png delete mode 100644 lib/ts3phpframework/images/flags/gt.png delete mode 100644 lib/ts3phpframework/images/flags/gu.png delete mode 100644 lib/ts3phpframework/images/flags/gw.png delete mode 100644 lib/ts3phpframework/images/flags/gy.png delete mode 100644 lib/ts3phpframework/images/flags/hk.png delete mode 100644 lib/ts3phpframework/images/flags/hm.png delete mode 100644 lib/ts3phpframework/images/flags/hn.png delete mode 100644 lib/ts3phpframework/images/flags/hr.png delete mode 100644 lib/ts3phpframework/images/flags/ht.png delete mode 100644 lib/ts3phpframework/images/flags/hu.png delete mode 100644 lib/ts3phpframework/images/flags/id.png delete mode 100644 lib/ts3phpframework/images/flags/ie.png delete mode 100644 lib/ts3phpframework/images/flags/il.png delete mode 100644 lib/ts3phpframework/images/flags/im.png delete mode 100644 lib/ts3phpframework/images/flags/in.png delete mode 100644 lib/ts3phpframework/images/flags/io.png delete mode 100644 lib/ts3phpframework/images/flags/iq.png delete mode 100644 lib/ts3phpframework/images/flags/ir.png delete mode 100644 lib/ts3phpframework/images/flags/is.png delete mode 100644 lib/ts3phpframework/images/flags/it.png delete mode 100644 lib/ts3phpframework/images/flags/je.png delete mode 100644 lib/ts3phpframework/images/flags/jm.png delete mode 100644 lib/ts3phpframework/images/flags/jo.png delete mode 100644 lib/ts3phpframework/images/flags/jp.png delete mode 100644 lib/ts3phpframework/images/flags/ke.png delete mode 100644 lib/ts3phpframework/images/flags/kg.png delete mode 100644 lib/ts3phpframework/images/flags/kh.png delete mode 100644 lib/ts3phpframework/images/flags/ki.png delete mode 100644 lib/ts3phpframework/images/flags/km.png delete mode 100644 lib/ts3phpframework/images/flags/kn.png delete mode 100644 lib/ts3phpframework/images/flags/kp.png delete mode 100644 lib/ts3phpframework/images/flags/kr.png delete mode 100644 lib/ts3phpframework/images/flags/kw.png delete mode 100644 lib/ts3phpframework/images/flags/ky.png delete mode 100644 lib/ts3phpframework/images/flags/kz.png delete mode 100644 lib/ts3phpframework/images/flags/la.png delete mode 100644 lib/ts3phpframework/images/flags/lb.png delete mode 100644 lib/ts3phpframework/images/flags/lc.png delete mode 100644 lib/ts3phpframework/images/flags/li.png delete mode 100644 lib/ts3phpframework/images/flags/lk.png delete mode 100644 lib/ts3phpframework/images/flags/lr.png delete mode 100644 lib/ts3phpframework/images/flags/ls.png delete mode 100644 lib/ts3phpframework/images/flags/lt.png delete mode 100644 lib/ts3phpframework/images/flags/lu.png delete mode 100644 lib/ts3phpframework/images/flags/lv.png delete mode 100644 lib/ts3phpframework/images/flags/ly.png delete mode 100644 lib/ts3phpframework/images/flags/ma.png delete mode 100644 lib/ts3phpframework/images/flags/mc.png delete mode 100644 lib/ts3phpframework/images/flags/md.png delete mode 100644 lib/ts3phpframework/images/flags/me.png delete mode 100644 lib/ts3phpframework/images/flags/mg.png delete mode 100644 lib/ts3phpframework/images/flags/mh.png delete mode 100644 lib/ts3phpframework/images/flags/mk.png delete mode 100644 lib/ts3phpframework/images/flags/ml.png delete mode 100644 lib/ts3phpframework/images/flags/mm.png delete mode 100644 lib/ts3phpframework/images/flags/mn.png delete mode 100644 lib/ts3phpframework/images/flags/mo.png delete mode 100644 lib/ts3phpframework/images/flags/mp.png delete mode 100644 lib/ts3phpframework/images/flags/mq.png delete mode 100644 lib/ts3phpframework/images/flags/mr.png delete mode 100644 lib/ts3phpframework/images/flags/ms.png delete mode 100644 lib/ts3phpframework/images/flags/mt.png delete mode 100644 lib/ts3phpframework/images/flags/mu.png delete mode 100644 lib/ts3phpframework/images/flags/mv.png delete mode 100644 lib/ts3phpframework/images/flags/mw.png delete mode 100644 lib/ts3phpframework/images/flags/mx.png delete mode 100644 lib/ts3phpframework/images/flags/my.png delete mode 100644 lib/ts3phpframework/images/flags/mz.png delete mode 100644 lib/ts3phpframework/images/flags/na.png delete mode 100644 lib/ts3phpframework/images/flags/nc.png delete mode 100644 lib/ts3phpframework/images/flags/ne.png delete mode 100644 lib/ts3phpframework/images/flags/nf.png delete mode 100644 lib/ts3phpframework/images/flags/ng.png delete mode 100644 lib/ts3phpframework/images/flags/ni.png delete mode 100644 lib/ts3phpframework/images/flags/nl.png delete mode 100644 lib/ts3phpframework/images/flags/no.png delete mode 100644 lib/ts3phpframework/images/flags/np.png delete mode 100644 lib/ts3phpframework/images/flags/nr.png delete mode 100644 lib/ts3phpframework/images/flags/nu.png delete mode 100644 lib/ts3phpframework/images/flags/nz.png delete mode 100644 lib/ts3phpframework/images/flags/om.png delete mode 100644 lib/ts3phpframework/images/flags/pa.png delete mode 100644 lib/ts3phpframework/images/flags/pe.png delete mode 100644 lib/ts3phpframework/images/flags/pf.png delete mode 100644 lib/ts3phpframework/images/flags/pg.png delete mode 100644 lib/ts3phpframework/images/flags/ph.png delete mode 100644 lib/ts3phpframework/images/flags/pk.png delete mode 100644 lib/ts3phpframework/images/flags/pl.png delete mode 100644 lib/ts3phpframework/images/flags/pm.png delete mode 100644 lib/ts3phpframework/images/flags/pn.png delete mode 100644 lib/ts3phpframework/images/flags/pr.png delete mode 100644 lib/ts3phpframework/images/flags/ps.png delete mode 100644 lib/ts3phpframework/images/flags/pt.png delete mode 100644 lib/ts3phpframework/images/flags/pw.png delete mode 100644 lib/ts3phpframework/images/flags/py.png delete mode 100644 lib/ts3phpframework/images/flags/qa.png delete mode 100644 lib/ts3phpframework/images/flags/re.png delete mode 100644 lib/ts3phpframework/images/flags/ro.png delete mode 100644 lib/ts3phpframework/images/flags/rs.png delete mode 100644 lib/ts3phpframework/images/flags/ru.png delete mode 100644 lib/ts3phpframework/images/flags/rw.png delete mode 100644 lib/ts3phpframework/images/flags/sa.png delete mode 100644 lib/ts3phpframework/images/flags/sb.png delete mode 100644 lib/ts3phpframework/images/flags/sc.png delete mode 100644 lib/ts3phpframework/images/flags/sd.png delete mode 100644 lib/ts3phpframework/images/flags/se.png delete mode 100644 lib/ts3phpframework/images/flags/sg.png delete mode 100644 lib/ts3phpframework/images/flags/sh.png delete mode 100644 lib/ts3phpframework/images/flags/si.png delete mode 100644 lib/ts3phpframework/images/flags/sj.png delete mode 100644 lib/ts3phpframework/images/flags/sk.png delete mode 100644 lib/ts3phpframework/images/flags/sl.png delete mode 100644 lib/ts3phpframework/images/flags/sm.png delete mode 100644 lib/ts3phpframework/images/flags/sn.png delete mode 100644 lib/ts3phpframework/images/flags/so.png delete mode 100644 lib/ts3phpframework/images/flags/sr.png delete mode 100644 lib/ts3phpframework/images/flags/st.png delete mode 100644 lib/ts3phpframework/images/flags/sv.png delete mode 100644 lib/ts3phpframework/images/flags/sy.png delete mode 100644 lib/ts3phpframework/images/flags/sz.png delete mode 100644 lib/ts3phpframework/images/flags/tc.png delete mode 100644 lib/ts3phpframework/images/flags/td.png delete mode 100644 lib/ts3phpframework/images/flags/tf.png delete mode 100644 lib/ts3phpframework/images/flags/tg.png delete mode 100644 lib/ts3phpframework/images/flags/th.png delete mode 100644 lib/ts3phpframework/images/flags/tj.png delete mode 100644 lib/ts3phpframework/images/flags/tk.png delete mode 100644 lib/ts3phpframework/images/flags/tl.png delete mode 100644 lib/ts3phpframework/images/flags/tm.png delete mode 100644 lib/ts3phpframework/images/flags/tn.png delete mode 100644 lib/ts3phpframework/images/flags/to.png delete mode 100644 lib/ts3phpframework/images/flags/tr.png delete mode 100644 lib/ts3phpframework/images/flags/tt.png delete mode 100644 lib/ts3phpframework/images/flags/tv.png delete mode 100644 lib/ts3phpframework/images/flags/tw.png delete mode 100644 lib/ts3phpframework/images/flags/tz.png delete mode 100644 lib/ts3phpframework/images/flags/ua.png delete mode 100644 lib/ts3phpframework/images/flags/ug.png delete mode 100644 lib/ts3phpframework/images/flags/uk.png delete mode 100644 lib/ts3phpframework/images/flags/um.png delete mode 100644 lib/ts3phpframework/images/flags/us.png delete mode 100644 lib/ts3phpframework/images/flags/uy.png delete mode 100644 lib/ts3phpframework/images/flags/uz.png delete mode 100644 lib/ts3phpframework/images/flags/va.png delete mode 100644 lib/ts3phpframework/images/flags/vc.png delete mode 100644 lib/ts3phpframework/images/flags/ve.png delete mode 100644 lib/ts3phpframework/images/flags/vg.png delete mode 100644 lib/ts3phpframework/images/flags/vi.png delete mode 100644 lib/ts3phpframework/images/flags/vn.png delete mode 100644 lib/ts3phpframework/images/flags/vu.png delete mode 100644 lib/ts3phpframework/images/flags/wf.png delete mode 100644 lib/ts3phpframework/images/flags/ws.png delete mode 100644 lib/ts3phpframework/images/flags/ye.png delete mode 100644 lib/ts3phpframework/images/flags/yt.png delete mode 100644 lib/ts3phpframework/images/flags/za.png delete mode 100644 lib/ts3phpframework/images/flags/zm.png delete mode 100644 lib/ts3phpframework/images/flags/zw.png delete mode 100644 lib/ts3phpframework/images/icons/ts3client.ico delete mode 100644 lib/ts3phpframework/images/icons/ts3server.ico delete mode 100644 lib/ts3phpframework/images/viewer/channel_flag_default.png delete mode 100644 lib/ts3phpframework/images/viewer/channel_flag_moderated.png delete mode 100644 lib/ts3phpframework/images/viewer/channel_flag_music.png delete mode 100644 lib/ts3phpframework/images/viewer/channel_flag_password.png delete mode 100644 lib/ts3phpframework/images/viewer/channel_full.png delete mode 100644 lib/ts3phpframework/images/viewer/channel_open.png delete mode 100644 lib/ts3phpframework/images/viewer/channel_pass.png delete mode 100644 lib/ts3phpframework/images/viewer/client_away.png delete mode 100644 lib/ts3phpframework/images/viewer/client_cc.png delete mode 100644 lib/ts3phpframework/images/viewer/client_cc_idle.png delete mode 100644 lib/ts3phpframework/images/viewer/client_cc_talk.png delete mode 100644 lib/ts3phpframework/images/viewer/client_idle.png delete mode 100644 lib/ts3phpframework/images/viewer/client_mic_disabled.png delete mode 100644 lib/ts3phpframework/images/viewer/client_mic_muted.png delete mode 100644 lib/ts3phpframework/images/viewer/client_priority.png delete mode 100644 lib/ts3phpframework/images/viewer/client_query.png delete mode 100644 lib/ts3phpframework/images/viewer/client_snd_disabled.png delete mode 100644 lib/ts3phpframework/images/viewer/client_snd_muted.png delete mode 100644 lib/ts3phpframework/images/viewer/client_talk.png delete mode 100644 lib/ts3phpframework/images/viewer/client_talker.png delete mode 100644 lib/ts3phpframework/images/viewer/client_talker_request.png delete mode 100644 lib/ts3phpframework/images/viewer/group_channel.png delete mode 100644 lib/ts3phpframework/images/viewer/group_icon_0.png delete mode 100644 lib/ts3phpframework/images/viewer/group_icon_100.png delete mode 100644 lib/ts3phpframework/images/viewer/group_icon_200.png delete mode 100644 lib/ts3phpframework/images/viewer/group_icon_300.png delete mode 100644 lib/ts3phpframework/images/viewer/group_icon_400.png delete mode 100644 lib/ts3phpframework/images/viewer/group_icon_500.png delete mode 100644 lib/ts3phpframework/images/viewer/group_icon_600.png delete mode 100644 lib/ts3phpframework/images/viewer/group_server.png delete mode 100644 lib/ts3phpframework/images/viewer/host.png delete mode 100644 lib/ts3phpframework/images/viewer/server_full.png delete mode 100644 lib/ts3phpframework/images/viewer/server_open.png delete mode 100644 lib/ts3phpframework/images/viewer/server_pass.png delete mode 100644 lib/ts3phpframework/images/viewer/spacer_dashdotdotline.gif delete mode 100644 lib/ts3phpframework/images/viewer/spacer_dashdotline.gif delete mode 100644 lib/ts3phpframework/images/viewer/spacer_dashline.gif delete mode 100644 lib/ts3phpframework/images/viewer/spacer_dotline.gif delete mode 100644 lib/ts3phpframework/images/viewer/spacer_solidline.gif delete mode 100644 lib/ts3phpframework/images/viewer/tree.png delete mode 100644 lib/ts3phpframework/images/viewer/tree_blank.png delete mode 100644 lib/ts3phpframework/images/viewer/tree_end.gif delete mode 100644 lib/ts3phpframework/images/viewer/tree_line.gif delete mode 100644 lib/ts3phpframework/images/viewer/tree_mid.gif delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Abstract.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Blacklist.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Blacklist/Exception.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Exception.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Adapter/FileTransfer.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Adapter/FileTransfer/Exception.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Adapter/ServerQuery.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Adapter/ServerQuery/Event.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Adapter/ServerQuery/Exception.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Adapter/ServerQuery/Reply.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Adapter/TSDNS.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Adapter/TSDNS/Exception.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Update.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Update/Exception.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Exception.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Helper/Char.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Helper/Convert.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Helper/Crypt.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Helper/Exception.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Helper/Profiler.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Helper/Profiler/Exception.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Helper/Profiler/Timer.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Helper/Signal.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Helper/Signal/Exception.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Helper/Signal/Handler.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Helper/Signal/Interface.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Helper/String.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Helper/Uri.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Node/Abstract.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Node/Channel.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Node/Channelgroup.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Node/Client.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Node/Exception.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Node/Host.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Node/Server.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Node/Servergroup.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/TeamSpeak3.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Transport/Abstract.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Transport/Exception.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Transport/TCP.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Transport/UDP.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Viewer/Html.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Viewer/Interface.php delete mode 100644 lib/ts3phpframework/libraries/TeamSpeak3/Viewer/Text.php delete mode 100644 rules.php delete mode 100644 viewer.php diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index bdb0cab..0000000 --- a/.gitattributes +++ /dev/null @@ -1,17 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto - -# Custom for Visual Studio -*.cs diff=csharp - -# Standard to msysgit -*.doc diff=astextplain -*.DOC diff=astextplain -*.docx diff=astextplain -*.DOCX diff=astextplain -*.dot diff=astextplain -*.DOT diff=astextplain -*.pdf diff=astextplain -*.PDF diff=astextplain -*.rtf diff=astextplain -*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore index 43a33a9..fc917f9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,16 +1,17 @@ -config/config.php -prototypes/ -admin/ -.idea/ +.idea +PROTOTYPING +src/installer/cache +src/private/cache +src/private/vendor +src/composer.lock +src/private/dbconfig.php +src/private/dev_mode +src/private/INSTALLER_LOCK -cache/ -!/cache/.htaccess -# Heroku specific entries -vendor/ -.env -# Created by https://www.gitignore.io/api/osx,linux,windows,phpstorm,sublimetext +# Platform and IDE things +# Created by https://www.gitignore.io/api/linux,macos,windows,visualstudiocode ### Linux ### *~ @@ -27,8 +28,9 @@ vendor/ # .nfs files are created when an open file is removed but is still being accessed .nfs* -### OSX ### -*.DS_Store +### macOS ### +# General +.DS_Store .AppleDouble .LSOverride @@ -54,102 +56,16 @@ Network Trash Folder Temporary Items .apdisk -### PhpStorm ### -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json -# User-specific stuff: -.idea/**/workspace.xml -.idea/**/tasks.xml -.idea/dictionaries - -# Sensitive or high-churn files: -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.xml -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml - -# Gradle: -.idea/**/gradle.xml -.idea/**/libraries - -# CMake -cmake-build-debug/ - -# Mongo Explorer plugin: -.idea/**/mongoSettings.xml - -## File-based project format: -*.iws - -## Plugin-specific files: - -# IntelliJ -/out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Cursive Clojure plugin -.idea/replstate.xml - -# Ruby plugin and RubyMine -/.rakeTasks - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties - -### PhpStorm Patch ### -# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 - -# *.iml -# modules.xml -# .idea/misc.xml -# *.ipr - -# Sonarlint plugin -.idea/sonarlint - -### SublimeText ### -# cache files for sublime text -*.tmlanguage.cache -*.tmPreferences.cache -*.stTheme.cache - -# workspace files are user-specific -*.sublime-workspace - -# project files should be checked into the repository, unless a significant -# proportion of contributors will probably not be using SublimeText -# *.sublime-project - -# sftp configuration file -sftp-config.json - -# Package control specific files -Package Control.last-run -Package Control.ca-list -Package Control.ca-bundle -Package Control.system-ca-bundle -Package Control.cache/ -Package Control.ca-certs/ -Package Control.merged-ca-bundle -Package Control.user-ca-bundle -oscrypto-ca-bundle.crt -bh_unicode_properties.cache - -# Sublime-github package stores a github token in this file -# https://packagecontrol.io/packages/sublime-github -GitHub.sublime-settings +### VisualStudioCode Patch ### +# Ignore all local history of files +.history ### Windows ### # Windows thumbnail cache files @@ -157,8 +73,11 @@ Thumbs.db ehthumbs.db ehthumbs_vista.db +# Dump file +*.stackdump + # Folder config file -Desktop.ini +[Dd]esktop.ini # Recycle Bin used on file shares $RECYCLE.BIN/ @@ -166,10 +85,9 @@ $RECYCLE.BIN/ # Windows Installer files *.cab *.msi +*.msix *.msm *.msp # Windows shortcuts *.lnk - -# End of https://www.gitignore.io/api/osx,linux,windows,phpstorm,sublimetext diff --git a/.htaccess b/.htaccess deleted file mode 100644 index d8d96a1..0000000 --- a/.htaccess +++ /dev/null @@ -1,39 +0,0 @@ -# (c) 2015 - 2018 Wruczek and contributors - -AddDefaultCharset UTF-8 - -# DISABLE DIRECTORY LISTING -Options -Indexes - -SetEnv HTACCESS on - -ErrorDocument 403 " 403 - Forbidden

403 Forbidden

Access to this page is forbidden.


←   Go back
" - -ErrorDocument 404 " 404 - Not found

404 page not found

We couldn't find what you were looking for.


←   Go back
" - -ErrorDocument 500 " 500 - server error

500 server error

Something went wrong. Try again later.


←   Go back
" - - - - -#RewriteEngine On - -# PAGES WITHOUT .PHP AT THE END -RewriteCond %{REQUEST_FILENAME} !-d -RewriteCond %{REQUEST_FILENAME}\.php -f -RewriteRule ^(.*)$ $1.php - -# PAGES WITHOUT .HTML AT THE END -RewriteCond %{REQUEST_FILENAME} !-d -RewriteCond %{REQUEST_FILENAME}\.html -f -RewriteRule ^(.*)$ $1.html - - - -# Enable GZIP - -AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript -BrowserMatch ^Mozilla/4 gzip-only-text/html -BrowserMatch ^Mozilla/4\.0[678] no-gzip -BrowserMatch \bMSIE !no-gzip !gzip-only-text/html - diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index 2546294..0000000 --- a/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 - 2018 Wruczek and contributors - -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. diff --git a/README.md b/README.md deleted file mode 100644 index aff8400..0000000 --- a/README.md +++ /dev/null @@ -1,45 +0,0 @@ -

- - - -

-


- -[![Website screenshot](http://i.imgur.com/9UZV6NG.png)](http://imgur.com/a/RUSi2) - -

More screenshots | :de: Für ein Deutsches Readme klicke hier - -

-Need help? Join our telegram group for news, announcements, help and general chat about ts-website. -

- -
- -**ts-website** - free website for your TeamSpeak 3 server
- -
- -#### Useful links -- [Demo](https://ts.wruczek.tech/) -- [Installation instructions](https://github.com/Wruczek/ts-website/wiki/%5BEN%5D-Website-Installation) -- [Wiki](https://github.com/Wruczek/ts-website/wiki) -- [Report Issues / Suggestions](https://github.com/Wruczek/ts-website/issues/new) -- **[ts-website Telegram group](https://t.me/tswebsite) - help, announcements, and general chat** - -#### Main Features -- News page, dynamic server status, admin list with status, server viewer, ban list and rules page -- Multiple languages with auto-detection for default language -- Supports for PHP 5 and 7, Apache 2 and nginx -- Modern and responsive design -- Caching -- Free and Open source, under MIT license - -### Other stuff -I am happy to take any programming-related requests, add additional features or modify the code to suit your needs for a small donation :) I am experienced at Java, PHP, HTML, CSS, Javascript, SQL, server configurations ect. - -For business enquiries only: **wruczekk** at **gmail.com**, for anything else please join our [Telegram group](https://t.me/ts-website). - - diff --git a/api/i18n.php b/api/i18n.php deleted file mode 100644 index 46cc445..0000000 --- a/api/i18n.php +++ /dev/null @@ -1,5 +0,0 @@ - -var textShowMore = "", textShowLess = "", statusOnline = "", statusOffline = "", statusUptime = "", statusVersion = "", statusAvgping = "", statusAvgpl = ""; diff --git a/api/status.php b/api/status.php deleted file mode 100644 index 783012d..0000000 --- a/api/status.php +++ /dev/null @@ -1,76 +0,0 @@ -isExpired()) { - $cacheutils->setValue(getResult(), 60); -} - -die ($cacheutils->getValue()); - -// ********* -// METHODS -// ********* - -function getResult() { - try { - $start = microtime(true); - - $tsstatus = getTeamspeakServerStatus(); - - $stop = microtime(true); - - return json_encode(array( - "tsstatus" => $tsstatus, - "generated" => date('d-m-Y H:i:s') - )); - } catch (Exception $e) { - scriptFail($e); - } -} - -function scriptFail($error) { - die(json_encode(array( - "success" => false, - "id" => "script_error", - "message" => "There has been an error while retrieving the server status", - "error" => $error - ))); -} - -function exception_error_handler($errno, $errstr, $errfile, $errline) { - scriptFail("[$errfile @ $errline] " . $errstr); -} - -function getTeamspeakServerStatus() { - - $response = pingTeamspeakServerFromConfig(); - - if ($response) { - return array( - "success" => $response["virtualserver_status"]->toString() == "online", - "name" => $response["virtualserver_name"]->toString(), - "clientsonline" => $response["virtualserver_clientsonline"] - $response["virtualserver_queryclientsonline"], - "maxclients" => $response["virtualserver_maxclients"], - "version" => TeamSpeak3_Helper_Convert::versionShort($response["virtualserver_version"]->toString())->toString(), - "platform" => $response["virtualserver_platform"]->toString(), - "uptime" => TeamSpeak3_Helper_Convert::seconds($response["virtualserver_uptime"], false, "%dd %02dh %02dm"), - "averagePacketloss" => $response["virtualserver_total_packetloss_total"]->toString(), - "averagePing" => $response["virtualserver_total_ping"]->toString() - ); - } else { - return array( - "success" => false, - "id" => "not_responding", - "message" => "Server is not responding" - ); - } -} diff --git a/bans.php b/bans.php deleted file mode 100644 index c662096..0000000 --- a/bans.php +++ /dev/null @@ -1,111 +0,0 @@ -isExpired()) { - $cacheutils->setValue([getBanlist(), date('d.m.Y H:i:s')], 300); -} - -$banlist = $cacheutils->getValue(); -?> - -
-
-

-
-
- - -
-

-
- -
- - - - - - - - - - - - - -
-
- - -
- -
- -banList(); - - $output = ""; - - foreach ($bans as $ban) { - - $user = null; - - if (!empty($ban['ip'])) - $user = censorIP((string)$ban['ip']); - - if (!empty($ban['lastnickname'])) - $user = htmlspecialchars((string)$ban['lastnickname']); - - if (empty($user)) - $user = "Unknown"; - - - $reason = htmlspecialchars((string)$ban['reason']); - $invokername = htmlspecialchars((string)$ban['invokername']); - $duration = $ban['duration']; - $createdepoch = $ban['created']; - $expiresepoch = $ban['created'] + $duration; - $created = date('d-m-Y H:i:s', $createdepoch); - - if (empty($reason)) - $reason = "" . translate($lang["banlist"]["table"]["emptyreason"]) . ""; - - if ($duration == 0) - $expires = translate($lang["banlist"]["table"]["permaban"]); - else - $expires = date('d.m.Y H:i:s', $expiresepoch); - - $output .= "$user$reason$invokername$created$expires"; - } - - return $output; - } catch (TeamSpeak3_Exception $e) { - if ($e->getCode() == 1281) { - return ''; - } else { - return '

' . translate($lang["general"]["scripterror"], [$e->getCode(), $e->getMessage()]) . '

'; - } - } - -} - -function censorIP($ip) { - return preg_replace("/(\d+\.\d+\.)\d+\.\d+/", "$1***.***", $ip); -} - -require_once __DIR__ . "/include/footer.php"; -?> diff --git a/cache/.htaccess b/cache/.htaccess deleted file mode 100644 index ec3ea62..0000000 --- a/cache/.htaccess +++ /dev/null @@ -1,3 +0,0 @@ -order deny,allow -deny from all -allow from 127.0.0.1 diff --git a/composer.json b/composer.json deleted file mode 100644 index d95217d..0000000 --- a/composer.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "require" : { - "php" : "^5.5", - "ext-mbstring": "*" - } -} diff --git a/config/config.template.php b/config/config.template.php deleted file mode 100644 index a0f359c..0000000 --- a/config/config.template.php +++ /dev/null @@ -1,77 +0,0 @@ - - */ - -$lang = array(); - -/************* General *************/ - -$lang["general"]["langcode"] = "bg_BG"; -$lang["general"]["languageflag"] = "bg"; -$lang["general"]["scripterror"] = "Възникна грешка! {0}: {1}"; - -/************* Navbar *************/ - -$lang["navbar"]["navigation"] = "навигация"; - -$lang["navbar"]["viewer"] = "Преглед на сървъра"; -$lang["navbar"]["bans"] = "банове"; -$lang["navbar"]["rules"] = "правилник"; - -$lang["navbar"]["connect"] = "Се свърже със сървъра"; -$lang["navbar"]["connecttooltip"] = "Кликнете, за да се свържете със сървъра {0}"; - - -/************* Footer *************/ - -$lang["footer"]["css"] = "CSS учтивост"; -$lang["footer"]["background"] = "фон"; - - -/************* Server status *************/ - -$lang["serverstatus"]["title"] = "сървъра Status"; -$lang["serverstatus"]["address"] = "адрес"; -$lang["serverstatus"]["loading"] = "товарене..."; - -$lang["serverstatus"]["online"] = "онлайн"; -$lang["serverstatus"]["offline"] = "на линия"; -$lang["serverstatus"]["uptime"] = "Uptime"; -$lang["serverstatus"]["version"] = "версия"; -$lang["serverstatus"]["avgping"] = "Средната пинг"; -$lang["serverstatus"]["avgpl"] = "Средната загуба на пакет"; - - -/************* Admin list *************/ - -$lang["adminlist"]["title"] = "Статус администрация"; -$lang["adminlist"]["emptygroup"] = "Тази група е празна"; -$lang["adminlist"]["status"]["online"] = "онлайн"; -$lang["adminlist"]["status"]["away"] = "далеч"; -$lang["adminlist"]["status"]["offline"] = "на линия"; -$lang["adminlist"]["lastupdate"] = "към {0}"; - - -/************* Server viewer promo box (under adminlist and contact) *************/ - -$lang["svpb"]["title"] = "Преглед на сървъра"; -$lang["svpb"]["takealook"] = "изглед »"; - - -/************************************/ -/************* SUBPAGES *************/ -/************************************/ - - -/************* News - index.php *************/ - -$lang["index"]["title"] = "Публикации"; -$lang["index"]["showmore"] = "Покажи още"; -$lang["index"]["showless"] = "Покажи по-малко"; - -$lang["index"]["errortitle"] = "Грешка: папката на новини не е намерен."; -$lang["index"]["errorsubtitle"] = "Уверете се, местоположението, зададено във файла config/config.php Това е правилно."; - - -/************* Server viewer - viewer.php *************/ - -$lang["viewer"]["title"] = "Преглед на сървъра"; -$lang["viewer"]["lastupdate"] = "към {0}"; - - -/************* Ban List - bans.php *************/ - -$lang["banlist"]["title"] = "банове"; -$lang["banlist"]["datatablesurl"] = "//cdn.datatables.net/plug-ins/1.10.12/i18n/Bulgarian.json"; -$lang["banlist"]["emptylist"] = "NO забранени потребители"; -$lang["banlist"]["lastupdate"] = "към {0}"; - -$lang["banlist"]["table"]["emptyreason"] = "(Няма причина)"; -$lang["banlist"]["table"]["permaban"] = "някога"; - -$lang["banlist"]["table"]["nickname"] = "Nick"; -$lang["banlist"]["table"]["reason"] = "причина"; -$lang["banlist"]["table"]["bannedby"] = "забранена от"; -$lang["banlist"]["table"]["bandate"] = "Дата на забрана"; -$lang["banlist"]["table"]["expires"] = "изтича"; - -/************* Rules - rules.php *************/ - -$lang["rules"]["title"] = "правила за сървъри"; -$lang["rules"]["filenotfound"] = "Грешка: файл config/rules.md Той не е намерен!"; -$lang["rules"]["readerror"] = "Грешка: не може да чете файл config/rules.md!"; diff --git a/config/languages/lang.br.php b/config/languages/lang.br.php deleted file mode 100644 index e8bc83f..0000000 --- a/config/languages/lang.br.php +++ /dev/null @@ -1,105 +0,0 @@ - - */ - -$lang = array(); - -/************* General *************/ - -$lang["general"]["langcode"] = "br_GB"; -$lang["general"]["languageflag"] = "br"; -$lang["general"]["scripterror"] = "Erro Ocorrido! {0}: {1}"; - -/************* Menu *************/ - -$lang["navbar"]["navigation"] = "Navegação"; - -$lang["navbar"]["viewer"] = "Ver Servidor"; -$lang["navbar"]["bans"] = "Lista de Ban"; -$lang["navbar"]["rules"] = "Regras do Servidor"; -$lang["navbar"]["menu"] = "Menu"; - -$lang["navbar"]["connect"] = "Conectar ao Servidor"; -$lang["navbar"]["connecttooltip"] = "Click para se conectar {0}"; - - -/************* Rodapé *************/ - -$lang["footer"]["css"] = "CSS por"; -$lang["footer"]["background"] = "background"; - - -/************* Status do Servidor *************/ - -$lang["serverstatus"]["title"] = "Status do Servidor"; -$lang["serverstatus"]["address"] = "Endereço"; -$lang["serverstatus"]["loading"] = "Carregando..."; - -$lang["serverstatus"]["online"] = "Online"; -$lang["serverstatus"]["offline"] = "Offline"; -$lang["serverstatus"]["uptime"] = "Uptime"; -$lang["serverstatus"]["version"] = "Versão"; -$lang["serverstatus"]["avgping"] = "Ping"; -$lang["serverstatus"]["avgpl"] = "Perda de pacotes"; - - -/************* Lista de Admins *************/ - -$lang["adminlist"]["title"] = "Lista de Admin's"; -$lang["adminlist"]["emptygroup"] = "Este grupo esta vazio"; -$lang["adminlist"]["status"]["online"] = "Online"; -$lang["adminlist"]["status"]["away"] = "Away"; -$lang["adminlist"]["status"]["offline"] = "Offline"; -$lang["adminlist"]["lastupdate"] = "Ultima atualização: {0}"; - - -/************* Server viewer ( embaixo da lista de adm e ebaixo da aba contato) *************/ - -$lang["svpb"]["title"] = "Servidor Online"; -$lang["svpb"]["takealook"] = "Dê uma olhada »"; - - -/************************************/ -/************* SUB-PAGINAS **********/ -/************************************/ - - -/************* Noticias - index.php *************/ - -$lang["index"]["title"] = "Noticias"; -$lang["index"]["showmore"] = "Ler Mais"; -$lang["index"]["showless"] = "Mostrar Menos"; - -$lang["index"]["errortitle"] = "Error: Diretório de Noticias não encontrado!"; -$lang["index"]["errorsubtitle"] = "Porfavor tenha a certeza que o arquivo no diretório config/config.php está valido."; - - -/************* Server viewer - viewer.php *************/ - -$lang["viewer"]["title"] = "Servidor Online"; -$lang["viewer"]["lastupdate"] = "Ultima Atualização: {0}"; - - -/************* Lista de Bans - bans.php *************/ - -$lang["banlist"]["title"] = "Lista de Ban"; -$lang["banlist"]["datatablesurl"] = "//cdn.datatables.net/plug-ins/1.10.12/i18n/Portuguese.json"; -$lang["banlist"]["emptylist"] = "Lista de Ban está vazia"; -$lang["banlist"]["lastupdate"] = "Ultima Atualização: {0}"; - -$lang["banlist"]["table"]["emptyreason"] = "(sem reação)"; -$lang["banlist"]["table"]["permaban"] = "Nunca"; - -$lang["banlist"]["table"]["nickname"] = "Nick"; -$lang["banlist"]["table"]["reason"] = "Reação"; -$lang["banlist"]["table"]["bannedby"] = "Banido por"; -$lang["banlist"]["table"]["bandate"] = "Data do Ban"; -$lang["banlist"]["table"]["expires"] = "Expira"; - -/************* Regras do Servidor - rules.php *************/ - -$lang["rules"]["title"] = "Regras do servidor"; -$lang["rules"]["filenotfound"] = "Error: Arquivo config/rules.md não foi encontrado!"; -$lang["rules"]["readerror"] = "Error: Não foi possível acessar o arquivo config/rules.md!"; diff --git a/config/languages/lang.bs.php b/config/languages/lang.bs.php deleted file mode 100644 index e4be6ab..0000000 --- a/config/languages/lang.bs.php +++ /dev/null @@ -1,92 +0,0 @@ - - */ - -$lang = array(); - -/************* Generalno *************/ - -$lang["general"]["langcode"] = "bs"; -$lang["general"]["languageflag"] = "ba"; -$lang["general"]["scripterror"] = "Greška se pojavila! {0}: {1}"; - -/************* Navigacija *************/ - -$lang["navbar"]["navigation"] = "Navigacija"; -$lang["navbar"]["viewer"] = "Pregled Servera"; -$lang["navbar"]["bans"] = "Ban Lista"; -$lang["navbar"]["rules"] = "Pravila Servera"; -$lang["navbar"]["connect"] = "Poveži se na server"; -$lang["navbar"]["connecttooltip"] = "Klikni da se spojiš na {0}"; - -/************* Footer *************/ - -$lang["footer"]["css"] = "CSS by"; -$lang["footer"]["background"] = "pozadina"; - -/************* Server status *************/ - -$lang["serverstatus"]["title"] = "Server status"; -$lang["serverstatus"]["address"] = "Adresa"; -$lang["serverstatus"]["loading"] = "Učitavanje..."; -$lang["serverstatus"]["online"] = "Online"; -$lang["serverstatus"]["offline"] = "Offline"; -$lang["serverstatus"]["uptime"] = "Uptime"; -$lang["serverstatus"]["version"] = "Verzija"; -$lang["serverstatus"]["avgping"] = "Prosječni ping"; -$lang["serverstatus"]["avgpl"] = "Prosječni packet loss"; - -/************* Admin lista *************/ - -$lang["adminlist"]["title"] = "Admin lista"; -$lang["adminlist"]["emptygroup"] = "Ova grupa je prazna"; -$lang["adminlist"]["status"]["online"] = "Online"; -$lang["adminlist"]["status"]["away"] = "Odsutan"; -$lang["adminlist"]["status"]["offline"] = "Offline"; -$lang["adminlist"]["lastupdate"] = "Zadnji update: {0}"; - -/************* Pregled servera u promotivnom boxu (ispod admin liste i kontakata) *************/ - -$lang["svpb"]["title"] = "Pregled servera"; -$lang["svpb"]["takealook"] = "Baci pogled »"; - - -/************************************/ -/************* SUBSTRANICE *************/ -/************************************/ - - -/************* Vijesti - index.php *************/ - -$lang["index"]["title"] = "Vijesti"; -$lang["index"]["showmore"] = "Pročitaj više"; -$lang["index"]["showless"] = "Prikaži manje"; -$lang["index"]["errortitle"] = "Pogreška: direktorij sa vijestima nije pronađen!"; -$lang["index"]["errorsubtitle"] = "Molimo postavite direktorij lokaciju u config/config.php da bude validna."; - -/************* Server pregled - viewer.php *************/ - -$lang["viewer"]["title"] = "Pregled Servera"; -$lang["viewer"]["lastupdate"] = "Zadnji update: {0}"; - -/************* Ban Lista - bans.php *************/ - -$lang["banlist"]["title"] = "Ban Lista"; -$lang["banlist"]["datatablesurl"] = "//cdn.datatables.net/plug-ins/1.10.12/i18n/English.json"; -$lang["banlist"]["emptylist"] = "BAN LISTA JE PRAZNA"; -$lang["banlist"]["lastupdate"] = "Zadnji update: {0}"; -$lang["banlist"]["table"]["emptyreason"] = "(nema razloga)"; -$lang["banlist"]["table"]["permaban"] = "Nikad"; -$lang["banlist"]["table"]["nickname"] = "Nick"; -$lang["banlist"]["table"]["reason"] = "Razlog"; -$lang["banlist"]["table"]["bannedby"] = "Banned od strane"; -$lang["banlist"]["table"]["bandate"] = "Vrijeme bana"; -$lang["banlist"]["table"]["expires"] = "Ističe"; - -/************* Pravila - rules.php *************/ - -$lang["rules"]["title"] = "Pravila Servera"; -$lang["rules"]["filenotfound"] = "Pogreška: fajl config/rules.md nije pronađen!"; -$lang["rules"]["readerror"] = "Pogreška: ne možemo pristupiti fajlu config/rules.md!"; diff --git a/config/languages/lang.by.php b/config/languages/lang.by.php deleted file mode 100644 index 7c484e6..0000000 --- a/config/languages/lang.by.php +++ /dev/null @@ -1,103 +0,0 @@ - - */ - -$lang = array(); - -/************* General *************/ - -$lang["general"]["langcode"] = "be_BY"; -$lang["general"]["languageflag"] = "by"; -$lang["general"]["scripterror"] = "Адбылася памылка! {0}: {1}"; - -/************* Navbar *************/ - -$lang["navbar"]["navigation"] = "Навігацыя"; - -$lang["navbar"]["viewer"] = "Агляд сервера"; -$lang["navbar"]["bans"] = "Спіс забаненых"; -$lang["navbar"]["rules"] = "Правілы сервера"; - -$lang["navbar"]["connect"] = "Падклучыцца"; -$lang["navbar"]["connecttooltip"] = "Націсніце, што б падключыцца да {0}"; - -/************* Footer *************/ - -$lang["footer"]["css"] = "CSS дзякуючы ласкі"; -$lang["footer"]["background"] = "фон"; - - -/************* Server status *************/ - -$lang["serverstatus"]["title"] = "Статус сервера"; -$lang["serverstatus"]["address"] = "Адрас"; -$lang["serverstatus"]["loading"] = "Загрузка..."; - -$lang["serverstatus"]["online"] = "Працуе"; -$lang["serverstatus"]["offline"] = "Не працуе"; -$lang["serverstatus"]["uptime"] = "Аптайм"; -$lang["serverstatus"]["version"] = "Версія"; -$lang["serverstatus"]["avgping"] = "Сярэдні пінг"; -$lang["serverstatus"]["avgpl"] = "Сяр. страта пакетаў"; - - -/************* Admin list *************/ - -$lang["adminlist"]["title"] = "Статус адміністрацыі"; -$lang["adminlist"]["emptygroup"] = "Эта группа пуста"; -$lang["adminlist"]["status"]["online"] = "У анлайне"; -$lang["adminlist"]["status"]["away"] = "Няма на месцы"; -$lang["adminlist"]["status"]["offline"] = "У афлайне"; -$lang["adminlist"]["lastupdate"] = "Апошнее абнаўленне: {0}"; - - -/************* Server viewer promo box (under adminlist and contact) *************/ - -$lang["svpb"]["title"] = "Агляд сервера"; -$lang["svpb"]["takealook"] = "Зірнуць на »"; - - -/************************************/ -/************* SUBPAGES *************/ -/************************************/ - - -/************* News - index.php *************/ - -$lang["index"]["title"] = "Навіны"; -$lang["index"]["showmore"] = "Чытаць далей"; -$lang["index"]["showless"] = "Паказаць менш"; - -$lang["index"]["errortitle"] = "Памылка: каталог навін не знойдзены!"; -$lang["index"]["errorsubtitle"] = "Калі ласка, ўпэўніцеся, што месцазнаходжанне тэчкі у config/config.php ўстаноўлена карэктна."; - - -/************* Server viewer - viewer.php *************/ - -$lang["viewer"]["title"] = "Агляд сервера"; -$lang["viewer"]["lastupdate"] = "Апошнее абнаўленне: {0}"; - - -/************* Ban List - bans.php *************/ - -$lang["banlist"]["title"] = "Спіс забаненых"; -$lang["banlist"]["datatablesurl"] = "//cdn.datatables.net/plug-ins/1.10.12/i18n/Belarusian.json"; -$lang["banlist"]["emptylist"] = "Спіс забаненых пусты"; -$lang["banlist"]["lastupdate"] = "Апошнее абнаўленне: {0}"; - -$lang["banlist"]["table"]["emptyreason"] = "(прычына адсутнічае)"; -$lang["banlist"]["table"]["permaban"] = "Ніколі"; - -$lang["banlist"]["table"]["nickname"] = "Нік"; -$lang["banlist"]["table"]["reason"] = "Прычына"; -$lang["banlist"]["table"]["bannedby"] = "Забанены"; -$lang["banlist"]["table"]["bandate"] = "Дата бана"; -$lang["banlist"]["table"]["expires"] = "Заканчваецца"; - -/************* Rules - rules.php *************/ - -$lang["rules"]["title"] = "Правілы сервера"; -$lang["rules"]["filenotfound"] = "Памылка: файл config/rules.md не знойдзены!"; -$lang["rules"]["readerror"] = "Памылка: няма доступу да файла config/rules.md!"; diff --git a/config/languages/lang.cz.php b/config/languages/lang.cz.php deleted file mode 100644 index ce369d6..0000000 --- a/config/languages/lang.cz.php +++ /dev/null @@ -1,102 +0,0 @@ - - */ - -$lang = array(); - -/************* General *************/ - -$lang["general"]["langcode"] = "cs_CZ"; -$lang["general"]["languageflag"] = "cz"; -$lang["general"]["scripterror"] = "Nastala chyba! {0}: {1}"; - -/************* Navbar *************/ - -$lang["navbar"]["navigation"] = "Navigace"; - -$lang["navbar"]["viewer"] = "Prohlížeč serveru"; -$lang["navbar"]["bans"] = "Banlist"; -$lang["navbar"]["rules"] = "Pravidla"; - -$lang["navbar"]["connect"] = "Připojit"; -$lang["navbar"]["connecttooltip"] = "Klikněte pro připojení na {0}"; - - -/************* Footer *************/ - -$lang["footer"]["css"] = "CSS od"; -$lang["footer"]["background"] = "pozadí"; - - -/************* Server status *************/ - -$lang["serverstatus"]["title"] = "Status"; -$lang["serverstatus"]["address"] = "Adresa"; -$lang["serverstatus"]["loading"] = "Načítání..."; - -$lang["serverstatus"]["online"] = "Online"; -$lang["serverstatus"]["offline"] = "Offline"; -$lang["serverstatus"]["uptime"] = "Doba zapnutí"; -$lang["serverstatus"]["version"] = "Verze"; -$lang["serverstatus"]["avgping"] = "Průměrný ping"; -$lang["serverstatus"]["avgpl"] = "Průměrná ztrátovost paketů"; - - -/************* Admin list *************/ - -$lang["adminlist"]["title"] = "Seznam adminů"; -$lang["adminlist"]["emptygroup"] = "Tato skupina je prázdná"; -$lang["adminlist"]["status"]["online"] = "Online"; -$lang["adminlist"]["status"]["away"] = "Pryč"; -$lang["adminlist"]["status"]["offline"] = "Offline"; -$lang["adminlist"]["lastupdate"] = "Poslední aktualizace: {0}"; - - -/************* Server viewer promo box (under adminlist and contact) *************/ - -$lang["svpb"]["title"] = "Prohlížeč serveru"; -$lang["svpb"]["takealook"] = "Otevřít »"; - - -/************************************/ -/************* SUBPAGES *************/ -/************************************/ - - -/************* News - index.php *************/ - -$lang["index"]["title"] = "Novinky"; -$lang["index"]["showmore"] = "Zobrazit více"; -$lang["index"]["showless"] = "Zobrazit méně"; - -$lang["index"]["errortitle"] = "Error: stránka s novinkami nenalezena!"; -$lang["index"]["errorsubtitle"] = "Ujistěte se, že cesta zadaná v config/config.php je správná."; - - -/************* Server viewer - viewer.php *************/ - -$lang["viewer"]["title"] = "Prohlížeč serveru"; -$lang["viewer"]["lastupdate"] = "Poslední aktualizace: {0}"; - - -/************* Ban List - bans.php *************/ - -$lang["banlist"]["title"] = "Banlist"; -$lang["banlist"]["datatablesurl"] = "//cdn.datatables.net/plug-ins/1.10.12/i18n/Czech.json"; -$lang["banlist"]["emptylist"] = "Banlist je prázdný"; -$lang["banlist"]["lastupdate"] = "Poslední aktualizace: {0}"; -$lang["banlist"]["table"]["emptyreason"] = "(bez důvodu)"; -$lang["banlist"]["table"]["permaban"] = "Až naprší a uschne"; -$lang["banlist"]["table"]["nickname"] = "Nick"; -$lang["banlist"]["table"]["reason"] = "Důvod"; -$lang["banlist"]["table"]["bannedby"] = "Zabanován od"; -$lang["banlist"]["table"]["bandate"] = "Datum"; -$lang["banlist"]["table"]["expires"] = "Vyprší"; - -/************* Rules - rules.php *************/ - -$lang["rules"]["title"] = "Pravidla serveru"; -$lang["rules"]["filenotfound"] = "Error: soubor config/rules.md nebyl nalezen!"; -$lang["rules"]["readerror"] = "Error: nemám přístup k config/rules.md!"; diff --git a/config/languages/lang.da.php b/config/languages/lang.da.php deleted file mode 100644 index fa9f968..0000000 --- a/config/languages/lang.da.php +++ /dev/null @@ -1,104 +0,0 @@ -config/config.php findes."; - - -/************* Server viewer - viewer.php *************/ - -$lang["viewer"]["title"] = "Server Fremvisning"; -$lang["viewer"]["lastupdate"] = "Sidst opdateret: {0}"; - - -/************* Ban List - bans.php *************/ - -$lang["banlist"]["title"] = "Ban Liste"; -$lang["banlist"]["datatablesurl"] = "//cdn.datatables.net/plug-ins/1.10.12/i18n/Danish.json"; -$lang["banlist"]["emptylist"] = "BAN LISTEN ER TOM"; -$lang["banlist"]["lastupdate"] = "Sidst opdateret: {0}"; - -$lang["banlist"]["table"]["emptyreason"] = "(ingen grund givet)"; -$lang["banlist"]["table"]["permaban"] = "Aldrig"; - -$lang["banlist"]["table"]["nickname"] = "Navn"; -$lang["banlist"]["table"]["reason"] = "Grund"; -$lang["banlist"]["table"]["bannedby"] = "Banlyst af"; -$lang["banlist"]["table"]["bandate"] = "Dato for ban"; -$lang["banlist"]["table"]["expires"] = "Udløber"; - -/************* Rules - rules.php *************/ - -$lang["rules"]["title"] = "Server Regler"; -$lang["rules"]["filenotfound"] = "Fejl: filen config/rules.md kunne ikke findes!"; -$lang["rules"]["readerror"] = "Fejl: adgang til filen config/rules.md nægtet!"; diff --git a/config/languages/lang.de.php b/config/languages/lang.de.php deleted file mode 100644 index 088d07c..0000000 --- a/config/languages/lang.de.php +++ /dev/null @@ -1,104 +0,0 @@ - - */ - -$lang = array(); - -/************* General *************/ - -$lang["general"]["langcode"] = "de_DE"; -$lang["general"]["languageflag"] = "de"; -$lang["general"]["scripterror"] = "Es ist ein Fehler aufgetreten! {0}: {1}"; - -/************* Navbar *************/ - -$lang["navbar"]["navigation"] = "Navigation"; - -$lang["navbar"]["viewer"] = "Server Viewer"; -$lang["navbar"]["bans"] = "Bann Liste"; -$lang["navbar"]["rules"] = "Server Regeln"; - -$lang["navbar"]["connect"] = "Mit Server verbinden"; -$lang["navbar"]["connecttooltip"] = "Klicken um mit {0} zu verbinden"; - - -/************* Footer *************/ - -$lang["footer"]["css"] = "CSS bereitgestellt von"; -$lang["footer"]["background"] = "Hintergrund"; - - -/************* Server status *************/ - -$lang["serverstatus"]["title"] = "Server Status"; -$lang["serverstatus"]["address"] = "Adresse"; -$lang["serverstatus"]["loading"] = "Laden..."; - -$lang["serverstatus"]["online"] = "Online"; -$lang["serverstatus"]["offline"] = "Offline"; -$lang["serverstatus"]["uptime"] = "Uptime"; -$lang["serverstatus"]["version"] = "Server Version"; -$lang["serverstatus"]["avgping"] = "Ø Ping"; -$lang["serverstatus"]["avgpl"] = "Ø Paketverlust"; - - -/************* Admin list *************/ - -$lang["adminlist"]["title"] = "Admin Liste"; -$lang["adminlist"]["emptygroup"] = "Diese Gruppe ist leer"; -$lang["adminlist"]["status"]["online"] = "Online"; -$lang["adminlist"]["status"]["away"] = "Abwesend"; -$lang["adminlist"]["status"]["offline"] = "Offline"; -$lang["adminlist"]["lastupdate"] = "Letzte Aktualisierung: {0}"; - - -/************* Server viewer promo box (under adminlist and contact) *************/ - -$lang["svpb"]["title"] = "Server Viewer"; -$lang["svpb"]["takealook"] = "Riskier 'n Blick »"; - - -/************************************/ -/************* SUBPAGES *************/ -/************************************/ - - -/************* News - index.php *************/ - -$lang["index"]["title"] = "Neuigkeiten"; -$lang["index"]["showmore"] = "Mehr anzeigen"; -$lang["index"]["showless"] = "Weniger anzeigen"; - -$lang["index"]["errortitle"] = "Fehler: Neuigkeiten Ordner konnte nicht gefunden werden!"; -$lang["index"]["errorsubtitle"] = "Bitte stelle sicher, dass der Ordner Pfad in config/config.php richtig angegeben wurde."; - - -/************* Server viewer - viewer.php *************/ - -$lang["viewer"]["title"] = "Server Viewer"; -$lang["viewer"]["lastupdate"] = "Letzte Aktualisierung: {0}"; - - -/************* Ban List - bans.php *************/ - -$lang["banlist"]["title"] = "Bann Liste"; -$lang["banlist"]["datatablesurl"] = "//cdn.datatables.net/plug-ins/1.10.12/i18n/German.json"; -$lang["banlist"]["emptylist"] = "Es gibt derzeit keine Gebannten User"; -$lang["banlist"]["lastupdate"] = "Letzte Aktualisierung: {0}"; - -$lang["banlist"]["table"]["emptyreason"] = "(kein Grund angegeben)"; -$lang["banlist"]["table"]["permaban"] = "Niemals"; - -$lang["banlist"]["table"]["nickname"] = "Benutzername"; -$lang["banlist"]["table"]["reason"] = "Grund"; -$lang["banlist"]["table"]["bannedby"] = "Gebannt von"; -$lang["banlist"]["table"]["bandate"] = "Bann Zeitpunkt"; -$lang["banlist"]["table"]["expires"] = "Läuft ab am"; - -/************* Rules - rules.php *************/ - -$lang["rules"]["title"] = "Server Regeln"; -$lang["rules"]["filenotfound"] = "Fehler: Die Datei config/rules.md wurde nicht gefunden!"; -$lang["rules"]["readerror"] = "Fehler: Nicht genügend Rechte um auf config/rules.md zuzugreifen!"; diff --git a/config/languages/lang.en.php b/config/languages/lang.en.php deleted file mode 100644 index 1698c49..0000000 --- a/config/languages/lang.en.php +++ /dev/null @@ -1,104 +0,0 @@ - - */ - -$lang = array(); - -/************* General *************/ - -$lang["general"]["langcode"] = "en_GB"; -$lang["general"]["languageflag"] = "gb"; -$lang["general"]["scripterror"] = "An error occured! {0}: {1}"; - -/************* Navbar *************/ - -$lang["navbar"]["navigation"] = "Navigation"; - -$lang["navbar"]["viewer"] = "Server Viewer"; -$lang["navbar"]["bans"] = "Ban List"; -$lang["navbar"]["rules"] = "Server Rules"; - -$lang["navbar"]["connect"] = "Connect to server"; -$lang["navbar"]["connecttooltip"] = "Click to connect to {0}"; - - -/************* Footer *************/ - -$lang["footer"]["css"] = "CSS by"; -$lang["footer"]["background"] = "background"; - - -/************* Server status *************/ - -$lang["serverstatus"]["title"] = "Server status"; -$lang["serverstatus"]["address"] = "Address"; -$lang["serverstatus"]["loading"] = "Loading..."; - -$lang["serverstatus"]["online"] = "Online"; -$lang["serverstatus"]["offline"] = "Offline"; -$lang["serverstatus"]["uptime"] = "Uptime"; -$lang["serverstatus"]["version"] = "Version"; -$lang["serverstatus"]["avgping"] = "Average ping"; -$lang["serverstatus"]["avgpl"] = "Average packet loss"; - - -/************* Admin list *************/ - -$lang["adminlist"]["title"] = "Adminlist"; -$lang["adminlist"]["emptygroup"] = "This group is empty"; -$lang["adminlist"]["status"]["online"] = "Online"; -$lang["adminlist"]["status"]["away"] = "Away"; -$lang["adminlist"]["status"]["offline"] = "Offline"; -$lang["adminlist"]["lastupdate"] = "Last update: {0}"; - - -/************* Server viewer promo box (under adminlist and contact) *************/ - -$lang["svpb"]["title"] = "Server Viewer"; -$lang["svpb"]["takealook"] = "Take a look »"; - - -/************************************/ -/************* SUBPAGES *************/ -/************************************/ - - -/************* News - index.php *************/ - -$lang["index"]["title"] = "News"; -$lang["index"]["showmore"] = "Read more"; -$lang["index"]["showless"] = "Show less"; - -$lang["index"]["errortitle"] = "Error: news directory has not been found!"; -$lang["index"]["errorsubtitle"] = "Please make sure that directory location set in config/config.php is valid."; - - -/************* Server viewer - viewer.php *************/ - -$lang["viewer"]["title"] = "Server Viewer"; -$lang["viewer"]["lastupdate"] = "Last update: {0}"; - - -/************* Ban List - bans.php *************/ - -$lang["banlist"]["title"] = "Ban List"; -$lang["banlist"]["datatablesurl"] = "//cdn.datatables.net/plug-ins/1.10.12/i18n/English.json"; -$lang["banlist"]["emptylist"] = "BAN LIST IS EMPTY"; -$lang["banlist"]["lastupdate"] = "Last update: {0}"; - -$lang["banlist"]["table"]["emptyreason"] = "(no reason set)"; -$lang["banlist"]["table"]["permaban"] = "Never"; - -$lang["banlist"]["table"]["nickname"] = "Nick"; -$lang["banlist"]["table"]["reason"] = "Reason"; -$lang["banlist"]["table"]["bannedby"] = "Banned by"; -$lang["banlist"]["table"]["bandate"] = "Ban date"; -$lang["banlist"]["table"]["expires"] = "Expires"; - -/************* Rules - rules.php *************/ - -$lang["rules"]["title"] = "Server Rules"; -$lang["rules"]["filenotfound"] = "Error: file config/rules.md has not been found!"; -$lang["rules"]["readerror"] = "Error: cannot access the file config/rules.md!"; diff --git a/config/languages/lang.es.php b/config/languages/lang.es.php deleted file mode 100644 index 5e4aa9e..0000000 --- a/config/languages/lang.es.php +++ /dev/null @@ -1,104 +0,0 @@ - - */ - -$lang = array(); - -/************* General *************/ - -$lang["general"]["langcode"] = "es-ES"; -$lang["general"]["languageflag"] = "es"; -$lang["general"]["scripterror"] = "Ha ocurrido un error {0}: {1}"; - -/************* Navbar *************/ - -$lang["navbar"]["navigation"] = "Navegación"; - -$lang["navbar"]["viewer"] = "Server Viewer"; -$lang["navbar"]["bans"] = "Lista de baneados"; -$lang["navbar"]["rules"] = "Reglas del servidor"; - -$lang["navbar"]["connect"] = "Conectar al ts3"; -$lang["navbar"]["connecttooltip"] = "Click para conectar a {0}"; - - -/************* Footer *************/ - -$lang["footer"]["css"] = "CSS por"; -$lang["footer"]["background"] = "fondo"; - - -/************* Server status *************/ - -$lang["serverstatus"]["title"] = "Estado del servidor"; -$lang["serverstatus"]["address"] = "Direción"; -$lang["serverstatus"]["loading"] = "Cargando..."; - -$lang["serverstatus"]["online"] = "En linea"; -$lang["serverstatus"]["offline"] = "Desconectado"; -$lang["serverstatus"]["uptime"] = "Tiempo activo"; -$lang["serverstatus"]["version"] = "Versión"; -$lang["serverstatus"]["avgping"] = "Ping promedio"; -$lang["serverstatus"]["avgpl"] = "Pérdida de paquetes"; - - -/************* Admin list *************/ - -$lang["adminlist"]["title"] = "Lista de ADM/MOD"; -$lang["adminlist"]["emptygroup"] = "Grupo vacio"; -$lang["adminlist"]["status"]["online"] = "En linea"; -$lang["adminlist"]["status"]["away"] = "AFK"; -$lang["adminlist"]["status"]["offline"] = "Desconectado"; -$lang["adminlist"]["lastupdate"] = "Última actualización: {0}"; - - -/************* Server viewer promo box (under adminlist and contact) *************/ - -$lang["svpb"]["title"] = "Ver servidor"; -$lang["svpb"]["takealook"] = "Echar un vistazo »"; - - -/************************************/ -/************* SUBPAGES *************/ -/************************************/ - - -/************* News - index.php *************/ - -$lang["index"]["title"] = "Noticias"; -$lang["index"]["showmore"] = "Leer más"; -$lang["index"]["showless"] = "Mostar menos"; - -$lang["index"]["errortitle"] = "Error: El directorio de noticias no fue encontrado"; -$lang["index"]["errorsubtitle"] = "Por favor asegurate que el directorio que está en config/config.php es válido."; - - -/************* Server viewer - viewer.php *************/ - -$lang["viewer"]["title"] = "Ver servidor"; -$lang["viewer"]["lastupdate"] = "Última actualización: {0}"; - - -/************* Ban List - bans.php *************/ - -$lang["banlist"]["title"] = "Lista de baneados"; -$lang["banlist"]["datatablesurl"] = "//cdn.datatables.net/plug-ins/1.10.12/i18n/Spanish.json"; -$lang["banlist"]["emptylist"] = "La lista de baneados está vacia"; -$lang["banlist"]["lastupdate"] = "Última actualización: {0}"; - -$lang["banlist"]["table"]["emptyreason"] = "(sin razón)"; -$lang["banlist"]["table"]["permaban"] = "Nunca"; - -$lang["banlist"]["table"]["nickname"] = "Usuario"; -$lang["banlist"]["table"]["reason"] = "Razón"; -$lang["banlist"]["table"]["bannedby"] = "Baneado por"; -$lang["banlist"]["table"]["bandate"] = "Fecha de baneo"; -$lang["banlist"]["table"]["expires"] = "Expiración"; - -/************* Rules - rules.php *************/ - -$lang["rules"]["title"] = "Reglas del servidor"; -$lang["rules"]["filenotfound"] = "Error: archivo config/rules.md no ha sido encontrado"; -$lang["rules"]["readerror"] = "Error: no se puede acceder al archivo config/rules.md"; diff --git a/config/languages/lang.fr.php b/config/languages/lang.fr.php deleted file mode 100644 index 43f88fc..0000000 --- a/config/languages/lang.fr.php +++ /dev/null @@ -1,104 +0,0 @@ - - */ - -$lang = array(); - -/************* General *************/ - -$lang["general"]["langcode"] = "fr_FR"; -$lang["general"]["languageflag"] = "fr"; -$lang["general"]["scripterror"] = "Une erreur s'est produite ! {0} : {1}"; - -/************* Navbar *************/ - -$lang["navbar"]["navigation"] = "Navigation"; - -$lang["navbar"]["viewer"] = "Affichage du Serveur"; -$lang["navbar"]["bans"] = "Liste des Bans"; -$lang["navbar"]["rules"] = "Règles du Serveur"; - -$lang["navbar"]["connect"] = "Se connecter au Serveur"; -$lang["navbar"]["connecttooltip"] = "Cliquez pour vous connecter à {0}"; - - -/************* Footer *************/ - -$lang["footer"]["css"] = "CSS par"; -$lang["footer"]["background"] = "arrière-plan"; - - -/************* Server status *************/ - -$lang["serverstatus"]["title"] = "Statut du Serveur"; -$lang["serverstatus"]["address"] = "Adresse"; -$lang["serverstatus"]["loading"] = "Chargement ..."; - -$lang["serverstatus"]["online"] = "En ligne"; -$lang["serverstatus"]["offline"] = "Hors ligne"; -$lang["serverstatus"]["uptime"] = "Tps de fonction."; -$lang["serverstatus"]["version"] = "Version"; -$lang["serverstatus"]["avgping"] = "Moyenne du Ping"; -$lang["serverstatus"]["avgpl"] = "Perte moyenne de paquets"; - - -/************* Admin list *************/ - -$lang["adminlist"]["title"] = "Liste d'Admin"; -$lang["adminlist"]["emptygroup"] = "Ce groupe est vide"; -$lang["adminlist"]["status"]["online"] = "En ligne"; -$lang["adminlist"]["status"]["away"] = "Away"; -$lang["adminlist"]["status"]["offline"] = "Hors ligne"; -$lang["adminlist"]["lastupdate"] = "Dernière mise à jour : {0}"; - - -/************* Server viewer promo box (under adminlist and contact) *************/ - -$lang["svpb"]["title"] = "Affichage du Serveur"; -$lang["svpb"]["takealook"] = "Regarder »"; - - -/************************************/ -/************* SUBPAGES *************/ -/************************************/ - - -/************* News - index.php *************/ - -$lang["index"]["title"] = "News"; -$lang["index"]["showmore"] = "Lire la suite"; -$lang["index"]["showless"] = "Moins montrer"; - -$lang["index"]["errortitle"] = "Erreur : le dossier des news n'a pas été trouvé !"; -$lang["index"]["errorsubtitle"] = "Assurez-vous que l'emplacement du répertoire défini dans config/config.php est valide."; - - -/************* Server viewer - viewer.php *************/ - -$lang["viewer"]["title"] = "Affichage du Serveur"; -$lang["viewer"]["lastupdate"] = "Dernière mise à jour : {0}"; - - -/************* Ban List - bans.php *************/ - -$lang["banlist"]["title"] = "Liste des Bans"; -$lang["banlist"]["datatablesurl"] = "//cdn.datatables.net/plug-ins/1.10.12/i18n/French.json"; -$lang["banlist"]["emptylist"] = "LA LISTE DES BANS EST VIDE"; -$lang["banlist"]["lastupdate"] = "Dernière mise à jour : {0}"; - -$lang["banlist"]["table"]["emptyreason"] = "(pas de raison)"; -$lang["banlist"]["table"]["permaban"] = "Jamais"; - -$lang["banlist"]["table"]["nickname"] = "Surnom"; -$lang["banlist"]["table"]["reason"] = "Raison"; -$lang["banlist"]["table"]["bannedby"] = "Banni par"; -$lang["banlist"]["table"]["bandate"] = "Date du Ban"; -$lang["banlist"]["table"]["expires"] = "Expire"; - -/************* Rules - rules.php *************/ - -$lang["rules"]["title"] = "Règles du Serveur"; -$lang["rules"]["filenotfound"] = "Erreur : Le fichier config/rules.md n'a pas été trouvé !"; -$lang["rules"]["readerror"] = "Erreur : Impossible d'accéder au fichier config/rules.md !"; diff --git a/config/languages/lang.gr.php b/config/languages/lang.gr.php deleted file mode 100644 index 476c859..0000000 --- a/config/languages/lang.gr.php +++ /dev/null @@ -1,104 +0,0 @@ -config/config.php είναι σωστή."; - - -/************* Server viewer - viewer.php *************/ - -$lang["viewer"]["title"] = "Προβολή TS3"; -$lang["viewer"]["lastupdate"] = "Τελευταία Ενημέρωση: {0}"; - - -/************* Ban List - bans.php *************/ - -$lang["banlist"]["title"] = "Λίστα Αποκλεισμών"; -$lang["banlist"]["datatablesurl"] = "//cdn.datatables.net/plug-ins/1.10.12/i18n/Greek.json"; -$lang["banlist"]["emptylist"] = "Η λίστα αποκλεισμών είναι άδεια!"; -$lang["banlist"]["lastupdate"] = "Τελευταία Ενημέρωση: {0}"; - -$lang["banlist"]["table"]["emptyreason"] = "(Χωρίς Λόγο)"; -$lang["banlist"]["table"]["permaban"] = "Ποτέ"; - -$lang["banlist"]["table"]["nickname"] = "Όνομα"; -$lang["banlist"]["table"]["reason"] = "Αιτία"; -$lang["banlist"]["table"]["bannedby"] = "Αποκλείστηκε από"; -$lang["banlist"]["table"]["bandate"] = "Ημερομηνία Αποκλεισμού"; -$lang["banlist"]["table"]["expires"] = "Λήγει"; - -/************* Rules - rules.php *************/ - -$lang["rules"]["title"] = "Κανόνες"; -$lang["rules"]["filenotfound"] = "Σημαντικό Σφάλμα: Το αρχείο config/rules.md δεν βρέθηκε!"; -$lang["rules"]["readerror"] = "Σημαντικό Σφάλμα: Δεν υπάρχει πρόσβαση στο αρχείο config/rules.md!"; diff --git a/config/languages/lang.hu.php b/config/languages/lang.hu.php deleted file mode 100644 index 6cf2687..0000000 --- a/config/languages/lang.hu.php +++ /dev/null @@ -1,104 +0,0 @@ - - */ - -$lang = array(); - -/************* Általános *************/ - -$lang["general"]["langcode"] = "hu_HU"; -$lang["general"]["languageflag"] = "hu"; -$lang["general"]["scripterror"] = "Hiba történt! {0}: {1}"; - -/************* Navbár *************/ - -$lang["navbar"]["navigation"] = "Navigáció"; - -$lang["navbar"]["viewer"] = "Szerver Státusz"; -$lang["navbar"]["bans"] = "Banlista"; -$lang["navbar"]["rules"] = "Szabályzat"; - -$lang["navbar"]["connect"] = "CSATLAKOZÁS"; -$lang["navbar"]["connecttooltip"] = "Csatlakozáshoz katt.. {0}"; - - -/************* Lábrész *************/ - -$lang["footer"]["css"] = "CSS by "; -$lang["footer"]["background"] = "background"; - - -/************* Server Státusz *************/ - -$lang["serverstatus"]["title"] = "Státusz"; -$lang["serverstatus"]["address"] = "IP Cím"; -$lang["serverstatus"]["loading"] = "Betöltés..."; - -$lang["serverstatus"]["online"] = "Online"; -$lang["serverstatus"]["offline"] = "Offline"; -$lang["serverstatus"]["uptime"] = "Üzemidő"; -$lang["serverstatus"]["version"] = "Verzió"; -$lang["serverstatus"]["avgping"] = "Átlagos ping"; -$lang["serverstatus"]["avgpl"] = "Csomagveszteség"; - - -/************* Admin lista *************/ - -$lang["adminlist"]["title"] = "Staff"; -$lang["adminlist"]["emptygroup"] = "A csoport üres."; -$lang["adminlist"]["status"]["online"] = "Online"; -$lang["adminlist"]["status"]["away"] = "Távol"; -$lang["adminlist"]["status"]["offline"] = "Offline"; -$lang["adminlist"]["lastupdate"] = "Utoljára frissítve: {0}"; - - -/************* Adminlista és Kapcsolat alatt megjelenő szövegek *************/ - -$lang["svpb"]["title"] = "Státusz"; -$lang["svpb"]["takealook"] = "Megnéz"; - - -/************************************/ -/************* ALOLDALAK *************/ -/************************************/ - - -/************* Hírek - index.php *************/ - -$lang["index"]["title"] = "Hírek"; -$lang["index"]["showmore"] = "olvass tovább"; -$lang["index"]["showless"] = "kevesebb"; - -$lang["index"]["errortitle"] = "Hiba: hírek mappa nem található!"; -$lang["index"]["errorsubtitle"] = "Kérlek állítsd be a fájlt megfelelően config/config.php."; - - -/************* Szerver Státusz - viewer.php *************/ - -$lang["viewer"]["title"] = "Szerver Státusz"; -$lang["viewer"]["lastupdate"] = "Utoljára frissítve: {0}"; - - -/************* BanLista - bans.php *************/ - -$lang["banlist"]["title"] = "Banlista"; -$lang["banlist"]["datatablesurl"] = "//cdn.datatables.net/plug-ins/1.10.12/i18n/Hungarian.json"; -$lang["banlist"]["emptylist"] = "A banlista üres."; -$lang["banlist"]["lastupdate"] = "Utoljára frissítve: {0}"; - -$lang["banlist"]["table"]["emptyreason"] = "(nincs indok)"; -$lang["banlist"]["table"]["permaban"] = "Soha"; - -$lang["banlist"]["table"]["nickname"] = "Név"; -$lang["banlist"]["table"]["reason"] = "Indok"; -$lang["banlist"]["table"]["bannedby"] = "Admin"; -$lang["banlist"]["table"]["bandate"] = "Dátum"; -$lang["banlist"]["table"]["expires"] = "Lejár"; - -/************* Szabályok - rules.php *************/ - -$lang["rules"]["title"] = "Szabályzat"; -$lang["rules"]["filenotfound"] = "Hiba: fájl config/rules.md nem található!"; -$lang["rules"]["readerror"] = "Hiba: nincs megfelelő joga config/rules.md!"; diff --git a/config/languages/lang.it.php b/config/languages/lang.it.php deleted file mode 100644 index 95716b9..0000000 --- a/config/languages/lang.it.php +++ /dev/null @@ -1,104 +0,0 @@ - - */ - -$lang = array(); - -/************* General *************/ - -$lang["general"]["langcode"] = "it"; -$lang["general"]["languageflag"] = "it"; -$lang["general"]["scripterror"] = "Un errore si è verificato! {0}: {1}"; - -/************* Navbar *************/ - -$lang["navbar"]["navigation"] = "Navigazione"; - -$lang["navbar"]["viewer"] = "Visualizza Server"; -$lang["navbar"]["bans"] = "Lista Ban"; -$lang["navbar"]["rules"] = "Regolamento"; - -$lang["navbar"]["connect"] = "Unisciti a noi!"; -$lang["navbar"]["connecttooltip"] = "Clicca per connetterti a {0}"; - - -/************* Footer *************/ - -$lang["footer"]["css"] = "CSS di"; -$lang["footer"]["background"] = "sfondo"; - - -/************* Server status *************/ - -$lang["serverstatus"]["title"] = "Stato Server"; -$lang["serverstatus"]["address"] = "Indirizzo"; -$lang["serverstatus"]["loading"] = "In caricamento..."; - -$lang["serverstatus"]["online"] = "Online"; -$lang["serverstatus"]["offline"] = "Offline"; -$lang["serverstatus"]["uptime"] = "Uptime"; -$lang["serverstatus"]["version"] = "Versione"; -$lang["serverstatus"]["avgping"] = "Ping medio"; -$lang["serverstatus"]["avgpl"] = "Perdita media dei pacchetti"; - - -/************* Admin list *************/ - -$lang["adminlist"]["title"] = "Lista admin"; -$lang["adminlist"]["emptygroup"] = "Questo gruppo è vuoto"; -$lang["adminlist"]["status"]["online"] = "Online"; -$lang["adminlist"]["status"]["away"] = "Assente"; -$lang["adminlist"]["status"]["offline"] = "Offline"; -$lang["adminlist"]["lastupdate"] = "Ultimo aggiornamento: {0}"; - - -/************* Server viewer promo box (under adminlist and contact) *************/ - -$lang["svpb"]["title"] = "Visualizza server"; -$lang["svpb"]["takealook"] = "Guarda »"; - - -/************************************/ -/************* SUBPAGES *************/ -/************************************/ - - -/************* News - index.php *************/ - -$lang["index"]["title"] = "News"; -$lang["index"]["showmore"] = "Leggi di più"; -$lang["index"]["showless"] = "VIsualizza meno"; - -$lang["index"]["errortitle"] = "Errore: la directory news non è stata trovata!"; -$lang["index"]["errorsubtitle"] = "Si prega di assicurarsi che la posizione della cartella impostata in config/config.php sia valida."; - - -/************* Server viewer - viewer.php *************/ - -$lang["viewer"]["title"] = "Visualizza Server"; -$lang["viewer"]["lastupdate"] = "Ultimo aggiornamento: {0}"; - - -/************* Ban List - bans.php *************/ - -$lang["banlist"]["title"] = "Lista Ban"; -$lang["banlist"]["datatablesurl"] = "//cdn.datatables.net/plug-ins/1.10.12/i18n/Italian.json"; -$lang["banlist"]["emptylist"] = "LA LISTA BAN E' VUOTA"; -$lang["banlist"]["lastupdate"] = "Ultimo aggiornamento: {0}"; - -$lang["banlist"]["table"]["emptyreason"] = "(nessun motivo)"; -$lang["banlist"]["table"]["permaban"] = "Permanente"; - -$lang["banlist"]["table"]["nickname"] = "Nick"; -$lang["banlist"]["table"]["reason"] = "Motivo"; -$lang["banlist"]["table"]["bannedby"] = "Bananto da"; -$lang["banlist"]["table"]["bandate"] = "Data del Ban"; -$lang["banlist"]["table"]["expires"] = "Scade"; - -/************* Rules - rules.php *************/ - -$lang["rules"]["title"] = "Regolamento"; -$lang["rules"]["filenotfound"] = "Errore: il file config/rules.md non è stato trovato!"; -$lang["rules"]["readerror"] = "Errore: impossibile accede al file config/rules.md!"; diff --git a/config/languages/lang.nl.php b/config/languages/lang.nl.php deleted file mode 100644 index 36e769f..0000000 --- a/config/languages/lang.nl.php +++ /dev/null @@ -1,104 +0,0 @@ - - */ - -$lang = array(); - -/************* General *************/ - -$lang["general"]["langcode"] = "nl_NL"; -$lang["general"]["languageflag"] = "nl"; -$lang["general"]["scripterror"] = "Er is een fout opgetreden! {0}: {1}"; - -/************* Navbar *************/ - -$lang["navbar"]["navigation"] = "Navigatie"; - -$lang["navbar"]["viewer"] = "Server Bekijken"; -$lang["navbar"]["bans"] = "Ban Lijst"; -$lang["navbar"]["rules"] = "Server Regels"; - -$lang["navbar"]["connect"] = "Verbinden met server"; -$lang["navbar"]["connecttooltip"] = "Klik om verbinding te maken met {0}"; - - -/************* Footer *************/ - -$lang["footer"]["css"] = "CSS mogelijk gemaakt door"; -$lang["footer"]["background"] = "achtergrond"; - - -/************* Server status *************/ - -$lang["serverstatus"]["title"] = "Server status"; -$lang["serverstatus"]["address"] = "Adres"; -$lang["serverstatus"]["loading"] = "Laden..."; - -$lang["serverstatus"]["online"] = "Online"; -$lang["serverstatus"]["offline"] = "Offline"; -$lang["serverstatus"]["uptime"] = "Uptijd"; -$lang["serverstatus"]["version"] = "Versie"; -$lang["serverstatus"]["avgping"] = "Gemiddelde ping"; -$lang["serverstatus"]["avgpl"] = "Gemiddelde pakketverlies"; - - -/************* Admin list *************/ - -$lang["adminlist"]["title"] = "Adminlijst"; -$lang["adminlist"]["emptygroup"] = "Deze groep is leeg"; -$lang["adminlist"]["status"]["online"] = "Online"; -$lang["adminlist"]["status"]["away"] = "Afwezig"; -$lang["adminlist"]["status"]["offline"] = "Offline"; -$lang["adminlist"]["lastupdate"] = "Laaste update: {0}"; - - -/************* Server viewer promo box (under adminlist and contact) *************/ - -$lang["svpb"]["title"] = "Server Bekijken"; -$lang["svpb"]["takealook"] = "Neem een kijkje »"; - - -/************************************/ -/************* SUBPAGES *************/ -/************************************/ - - -/************* News - index.php *************/ - -$lang["index"]["title"] = "Niews"; -$lang["index"]["showmore"] = "Lees meer"; -$lang["index"]["showless"] = "Minimaliseer"; - -$lang["index"]["errortitle"] = "Fout: niews map is niet gevonden!"; -$lang["index"]["errorsubtitle"] = "Controleer A.U.B of de map locatie in config/config.php correct is."; - - -/************* Server viewer - viewer.php *************/ - -$lang["viewer"]["title"] = "Server Bekijken"; -$lang["viewer"]["lastupdate"] = "Laaste update: {0}"; - - -/************* Ban List - bans.php *************/ - -$lang["banlist"]["title"] = "Ban Lijst"; -$lang["banlist"]["datatablesurl"] = "//cdn.datatables.net/plug-ins/1.10.12/i18n/Dutch.json"; -$lang["banlist"]["emptylist"] = "BAN LIJST IS LEEG"; -$lang["banlist"]["lastupdate"] = "Laaste update: {0}"; - -$lang["banlist"]["table"]["emptyreason"] = "(Geen reden)"; -$lang["banlist"]["table"]["permaban"] = "Nooit"; - -$lang["banlist"]["table"]["nickname"] = "Bijnaam"; -$lang["banlist"]["table"]["reason"] = "Reden"; -$lang["banlist"]["table"]["bannedby"] = "Gebanned door"; -$lang["banlist"]["table"]["bandate"] = "Ban datum"; -$lang["banlist"]["table"]["expires"] = "Verloopt op"; - -/************* Rules - rules.php *************/ - -$lang["rules"]["title"] = "Server Regels"; -$lang["rules"]["filenotfound"] = "Fout: kan het bestand config/rules.md niet vinden!"; -$lang["rules"]["readerror"] = "Fout: Geen toegang tot het bestand config/rules.md!"; diff --git a/config/languages/lang.pl.php b/config/languages/lang.pl.php deleted file mode 100644 index 82a81e3..0000000 --- a/config/languages/lang.pl.php +++ /dev/null @@ -1,104 +0,0 @@ - - */ - -$lang = array(); - -/************* General *************/ - -$lang["general"]["langcode"] = "pl_PL"; -$lang["general"]["languageflag"] = "pl"; -$lang["general"]["scripterror"] = "Wystąpił błąd! {0}: {1}"; - -/************* Navbar *************/ - -$lang["navbar"]["navigation"] = "Nawigacja"; - -$lang["navbar"]["viewer"] = "Podgląd serwera"; -$lang["navbar"]["bans"] = "Lista banów"; -$lang["navbar"]["rules"] = "Regulamin"; - -$lang["navbar"]["connect"] = "Połącz z serwerem"; -$lang["navbar"]["connecttooltip"] = "Kliknij, by połączyć się z serwerem {0}"; - - -/************* Footer *************/ - -$lang["footer"]["css"] = "CSS dzięki uprzejmości"; -$lang["footer"]["background"] = "tło"; - - -/************* Server status *************/ - -$lang["serverstatus"]["title"] = "Status serwera"; -$lang["serverstatus"]["address"] = "Adres"; -$lang["serverstatus"]["loading"] = "Ładowanie..."; - -$lang["serverstatus"]["online"] = "Online"; -$lang["serverstatus"]["offline"] = "Offline"; -$lang["serverstatus"]["uptime"] = "Uptime"; -$lang["serverstatus"]["version"] = "Wersja"; -$lang["serverstatus"]["avgping"] = "Średni ping"; -$lang["serverstatus"]["avgpl"] = "Średni packet loss"; - - -/************* Admin list *************/ - -$lang["adminlist"]["title"] = "Status administracji"; -$lang["adminlist"]["emptygroup"] = "Ta grupa jest pusta"; -$lang["adminlist"]["status"]["online"] = "Online"; -$lang["adminlist"]["status"]["away"] = "Away"; -$lang["adminlist"]["status"]["offline"] = "Offline"; -$lang["adminlist"]["lastupdate"] = "Stan na {0}"; - - -/************* Server viewer promo box (under adminlist and contact) *************/ - -$lang["svpb"]["title"] = "Podgląd serwera"; -$lang["svpb"]["takealook"] = "Zobacz »"; - - -/************************************/ -/************* SUBPAGES *************/ -/************************************/ - - -/************* News - index.php *************/ - -$lang["index"]["title"] = "Wiadomości"; -$lang["index"]["showmore"] = "Pokaż wiecej"; -$lang["index"]["showless"] = "Pokaż mniej"; - -$lang["index"]["errortitle"] = "Wystąpił błąd: folder z newsami nie został odnaleziony."; -$lang["index"]["errorsubtitle"] = "Sprawdź, czy lokalizacja ustawiona w pliku config/config.php jest poprawna."; - - -/************* Server viewer - viewer.php *************/ - -$lang["viewer"]["title"] = "Podgląd serwera"; -$lang["viewer"]["lastupdate"] = "Stan na {0}"; - - -/************* Ban List - bans.php *************/ - -$lang["banlist"]["title"] = "Lista banów"; -$lang["banlist"]["datatablesurl"] = "//cdn.datatables.net/plug-ins/1.10.12/i18n/Polish.json"; -$lang["banlist"]["emptylist"] = "BRAK ZBANOWANYCH UŻYTKOWNIKÓW"; -$lang["banlist"]["lastupdate"] = "Stan na {0}"; - -$lang["banlist"]["table"]["emptyreason"] = "(brak powodu)"; -$lang["banlist"]["table"]["permaban"] = "Nigdy"; - -$lang["banlist"]["table"]["nickname"] = "Nick"; -$lang["banlist"]["table"]["reason"] = "Powód"; -$lang["banlist"]["table"]["bannedby"] = "Zbanowany przez"; -$lang["banlist"]["table"]["bandate"] = "Data zbanowania"; -$lang["banlist"]["table"]["expires"] = "Wygasa"; - -/************* Rules - rules.php *************/ - -$lang["rules"]["title"] = "Regulamin serwera"; -$lang["rules"]["filenotfound"] = "Wystąpił błąd: plik config/rules.md nie został odnaleziony!"; -$lang["rules"]["readerror"] = "Wystąpił błąd: nie można odczytać pliku config/rules.md!"; diff --git a/config/languages/lang.ru.php b/config/languages/lang.ru.php deleted file mode 100644 index 100fd9b..0000000 --- a/config/languages/lang.ru.php +++ /dev/null @@ -1,104 +0,0 @@ - - */ - -$lang = array(); - -/************* General *************/ - -$lang["general"]["langcode"] = "ru_RU"; -$lang["general"]["languageflag"] = "ru"; -$lang["general"]["scripterror"] = "Произошла ошибка! {0}: {1}"; - -/************* Navbar *************/ - -$lang["navbar"]["navigation"] = "Навигация"; - -$lang["navbar"]["viewer"] = "Обзор сервера"; -$lang["navbar"]["bans"] = "Список забаненных"; -$lang["navbar"]["rules"] = "Правила сервера"; - -$lang["navbar"]["connect"] = "Подключиться"; -$lang["navbar"]["connecttooltip"] = "Нажмите, чтобы подключиться к {0}"; - - -/************* Footer *************/ - -$lang["footer"]["css"] = "CSS благодаря любезности"; -$lang["footer"]["background"] = "фон"; - - -/************* Server status *************/ - -$lang["serverstatus"]["title"] = "Статус сервера"; -$lang["serverstatus"]["address"] = "Адрес"; -$lang["serverstatus"]["loading"] = "Загрузка..."; - -$lang["serverstatus"]["online"] = "В сети"; -$lang["serverstatus"]["offline"] = "Не в сети"; -$lang["serverstatus"]["uptime"] = "Аптайм"; -$lang["serverstatus"]["version"] = "Версия"; -$lang["serverstatus"]["avgping"] = "Средний пинг"; -$lang["serverstatus"]["avgpl"] = "Ср. потеря пакетов"; - - -/************* Admin list *************/ - -$lang["adminlist"]["title"] = "Статус администрации"; -$lang["adminlist"]["emptygroup"] = "Эта группа пуста"; -$lang["adminlist"]["status"]["online"] = "В сети"; -$lang["adminlist"]["status"]["away"] = "Нет на месте"; -$lang["adminlist"]["status"]["offline"] = "Не в сети"; -$lang["adminlist"]["lastupdate"] = "Последнее обновление: {0}"; - - -/************* Server viewer promo box (under adminlist and contact) *************/ - -$lang["svpb"]["title"] = "Обзор сервера"; -$lang["svpb"]["takealook"] = "Взглянуть »"; - - -/************************************/ -/************* SUBPAGES *************/ -/************************************/ - - -/************* News - index.php *************/ - -$lang["index"]["title"] = "Новости"; -$lang["index"]["showmore"] = "Читать дальше"; -$lang["index"]["showless"] = "Показать меньше"; - -$lang["index"]["errortitle"] = "Ошибка: каталог новостей не найден!"; -$lang["index"]["errorsubtitle"] = "Пожалуйста, убедитесь, что местоположение папки в config/config.php установлено корректно."; - - -/************* Server viewer - viewer.php *************/ - -$lang["viewer"]["title"] = "Обзор сервера"; -$lang["viewer"]["lastupdate"] = "Последнее обновление: {0}"; - - -/************* Ban List - bans.php *************/ - -$lang["banlist"]["title"] = "Список забаненных"; -$lang["banlist"]["datatablesurl"] = "//cdn.datatables.net/plug-ins/1.10.12/i18n/Russian.json"; -$lang["banlist"]["emptylist"] = "Список забаненных пуст"; -$lang["banlist"]["lastupdate"] = "Последнее обновление: {0}"; - -$lang["banlist"]["table"]["emptyreason"] = "(причина не указана)"; -$lang["banlist"]["table"]["permaban"] = "Никогда"; - -$lang["banlist"]["table"]["nickname"] = "Ник"; -$lang["banlist"]["table"]["reason"] = "Причина"; -$lang["banlist"]["table"]["bannedby"] = "Забанен"; -$lang["banlist"]["table"]["bandate"] = "Дата бана"; -$lang["banlist"]["table"]["expires"] = "Истекает"; - -/************* Rules - rules.php *************/ - -$lang["rules"]["title"] = "Правила сервера"; -$lang["rules"]["filenotfound"] = "Ошибка: файл config/rules.md не найден!"; -$lang["rules"]["readerror"] = "Ошибка: нет доступа к файлу config/rules.md!"; diff --git a/config/languages/lang.se.php b/config/languages/lang.se.php deleted file mode 100644 index 647a6a7..0000000 --- a/config/languages/lang.se.php +++ /dev/null @@ -1,104 +0,0 @@ - - */ - -$lang = array(); - -/************* General *************/ - -$lang["general"]["langcode"] = "se_SV"; -$lang["general"]["languageflag"] = "se"; -$lang["general"]["scripterror"] = "Ett fel inträffade! {0}: {1}"; - -/************* Navbar *************/ - -$lang["navbar"]["navigation"] = "Navigering"; - -$lang["navbar"]["viewer"] = "Server överblick"; -$lang["navbar"]["bans"] = "Ban Lista"; -$lang["navbar"]["rules"] = "Server Regler"; - -$lang["navbar"]["connect"] = "Anslut till servern"; -$lang["navbar"]["connecttooltip"] = "Klicka för att ansluta till {0}"; - - -/************* Footer *************/ - -$lang["footer"]["css"] = "CSS av"; -$lang["footer"]["background"] = "bakgrund"; - - -/************* Server status *************/ - -$lang["serverstatus"]["title"] = "Serverstatus"; -$lang["serverstatus"]["address"] = "Adress"; -$lang["serverstatus"]["loading"] = "Laddar..."; - -$lang["serverstatus"]["online"] = "Uppkopplad"; -$lang["serverstatus"]["offline"] = "Nerkopplad"; -$lang["serverstatus"]["uptime"] = "Upp tid"; -$lang["serverstatus"]["version"] = "Version"; -$lang["serverstatus"]["avgping"] = "Genomsnittlig ping"; -$lang["serverstatus"]["avgpl"] = "Genomsnittlig paketförlust"; - - -/************* Admin list *************/ - -$lang["adminlist"]["title"] = "Admin lista"; -$lang["adminlist"]["emptygroup"] = "Den här gruppen är tom"; -$lang["adminlist"]["status"]["online"] = "Uppkopplad"; -$lang["adminlist"]["status"]["away"] = "Bort"; -$lang["adminlist"]["status"]["offline"] = "Nerkopplad"; -$lang["adminlist"]["lastupdate"] = "Senaste uppdateringen: {0}"; - - -/************* Server viewer promo box (under adminlist and contact) *************/ - -$lang["svpb"]["title"] = "Server överblick"; -$lang["svpb"]["takealook"] = "Ta en titt »"; - - -/************************************/ -/************* SUBPAGES *************/ -/************************************/ - - -/************* News - index.php *************/ - -$lang["index"]["title"] = "Nyheter"; -$lang["index"]["showmore"] = "Läs mer"; -$lang["index"]["showless"] = "Visa mindre"; - -$lang["index"]["errortitle"] = "Fel: Nyhetskatalog har inte hittats!"; -$lang["index"]["errorsubtitle"] = "Se till att katalogplatsen som anges i config/config.php är giltig. "; - - -/************* Server viewer - viewer.php *************/ - -$lang["viewer"]["title"] = "Server överblick"; -$lang["viewer"]["lastupdate"] = "Senaste uppdateringen: {0}"; - - -/************* Ban List - bans.php *************/ - -$lang["banlist"]["title"] = "Ban ListA"; -$lang["banlist"]["datatablesurl"] = "/cdn.datatables.net/plug-ins/1.10.12/i18n/Swedish.json"; -$lang["banlist"]["emptylist"] = "BANLISTAN ÄR TOM"; -$lang["banlist"]["lastupdate"] = "Senaste uppdateringen: {0}"; - -$lang["banlist"]["table"]["emptyreason"] = "(Ingen anledning inställd)"; -$lang["banlist"]["table"]["permaban"] = "Aldrig"; - -$lang["banlist"]["table"]["nickname"] = "Nick"; -$lang["banlist"]["table"]["reason"] = "Anledning"; -$lang["banlist"]["table"]["bannedby"] = "Banned av"; -$lang["banlist"]["table"]["bandate"] = "Ban tid"; -$lang["banlist"]["table"]["expires"] = "Löper ut"; - -/************* Rules - rules.php *************/ - -$lang["rules"]["title"] = "Server Regler"; -$lang["rules"]["filenotfound"] = "Fel: filen config/rules.md har inte hittats!"; -$lang["rules"]["readerror"] = "Fel: kan inte komma åt filen config/rules.md!"; diff --git a/config/languages/lang.tr.php b/config/languages/lang.tr.php deleted file mode 100644 index 824e0d7..0000000 --- a/config/languages/lang.tr.php +++ /dev/null @@ -1,104 +0,0 @@ - - */ - -$lang = array(); - -/************* General *************/ - -$lang["general"]["langcode"] = "tr_TR"; -$lang["general"]["languageflag"] = "tr"; -$lang["general"]["scripterror"] = "Bir hata olmustur! {0}: {1}"; - -/************* Navbar *************/ - -$lang["navbar"]["navigation"] = "Navigasyon"; - -$lang["navbar"]["viewer"] = "Sunucu Görüntüleyici"; -$lang["navbar"]["bans"] = "Ban listesi"; -$lang["navbar"]["rules"] = "Sunucu kurallari"; - -$lang["navbar"]["connect"] = "Sunucuya Baglan"; -$lang["navbar"]["connecttooltip"] = "Baglanmak için {0} tiklayin"; - - -/************* Footer *************/ - -$lang["footer"]["css"] = "CSS tarafindan saglanan"; -$lang["footer"]["background"] = "Arka plân"; - - -/************* Server status *************/ - -$lang["serverstatus"]["title"] = "Sunucu durumu"; -$lang["serverstatus"]["address"] = "Adres"; -$lang["serverstatus"]["loading"] = "Yükleme..."; - -$lang["serverstatus"]["online"] = "Online"; -$lang["serverstatus"]["offline"] = "Offline"; -$lang["serverstatus"]["uptime"] = "Çalisma süresi"; -$lang["serverstatus"]["version"] = "Sunucu sürümü"; -$lang["serverstatus"]["avgping"] = "Ø Ping"; -$lang["serverstatus"]["avgpl"] = "Ø Paket kaybi"; - - -/************* Admin list *************/ - -$lang["adminlist"]["title"] = "Yönetici listesi"; -$lang["adminlist"]["emptygroup"] = "Bu grup bos"; -$lang["adminlist"]["status"]["online"] = "Online"; -$lang["adminlist"]["status"]["away"] = "Yok"; -$lang["adminlist"]["status"]["offline"] = "Offline"; -$lang["adminlist"]["lastupdate"] = "Son güncelleme: {0}"; - - -/************* Server viewer promo box (under adminlist and contact) *************/ - -$lang["svpb"]["title"] = "Sunucu Görüntüleyici"; -$lang["svpb"]["takealook"] = "Görüntüle »"; - - -/************************************/ -/************* SUBPAGES *************/ -/************************************/ - - -/************* News - index.php *************/ - -$lang["index"]["title"] = "Haber"; -$lang["index"]["showmore"] = "Daha görüntüle"; -$lang["index"]["showless"] = "Daha az"; - -$lang["index"]["errortitle"] = "Hata: Haber klasörü bulunamadi!"; -$lang["index"]["errorsubtitle"] = "Klasör yolu config / config.php dogru belirtilen emin olun."; - - -/************* Server viewer - viewer.php *************/ - -$lang["viewer"]["title"] = "Sunucu Görüntüleyici"; -$lang["viewer"]["lastupdate"] = "Son güncelleme: {0}"; - - -/************* Ban List - bans.php *************/ - -$lang["banlist"]["title"] = "Ban listesi"; -$lang["banlist"]["datatablesurl"] = "//cdn.datatables.net/plug-ins/1.10.12/i18n/Turkish.json"; -$lang["banlist"]["emptylist"] = "Hiçbir lanetli Kullanici su anda yok"; -$lang["banlist"]["lastupdate"] = "Son güncelleme: {0}"; - -$lang["banlist"]["table"]["emptyreason"] = "(Verilen hiçbir neden)"; -$lang["banlist"]["table"]["permaban"] = "Asla"; - -$lang["banlist"]["table"]["nickname"] = "Kullanici adi"; -$lang["banlist"]["table"]["reason"] = "Neden"; -$lang["banlist"]["table"]["bannedby"] = "Banlayan kisi"; -$lang["banlist"]["table"]["bandate"] = "Ban zaman"; -$lang["banlist"]["table"]["expires"] = "Sona eriyor"; - -/************* Rules - rules.php *************/ - -$lang["rules"]["title"] = "Sunucu kurallari"; -$lang["rules"]["filenotfound"] = "Hata: Dosya config / rules.md bulunamadi!"; -$lang["rules"]["readerror"] = "Hata: erisim için yeterli haklar config / rules.md!"; diff --git a/config/languages/lang.ua.php b/config/languages/lang.ua.php deleted file mode 100644 index c791662..0000000 --- a/config/languages/lang.ua.php +++ /dev/null @@ -1,104 +0,0 @@ - - */ - -$lang = array(); - -/************* General *************/ - -$lang["general"]["langcode"] = "uk_UA"; -$lang["general"]["languageflag"] = "ua"; -$lang["general"]["scripterror"] = "Виникла помилка! {0}: {1}"; - -/************* Navbar *************/ - -$lang["navbar"]["navigation"] = "Навігація"; - -$lang["navbar"]["viewer"] = "Огляд сервера"; -$lang["navbar"]["bans"] = "Перелік заблокованих"; -$lang["navbar"]["rules"] = "Правила сервера"; - -$lang["navbar"]["connect"] = "Підключитися"; -$lang["navbar"]["connecttooltip"] = "Натисніть, щоб підключитися до {0}"; - - -/************* Footer *************/ - -$lang["footer"]["css"] = "CSS завдяки люб'язності"; -$lang["footer"]["background"] = "фон"; - - -/************* Server status *************/ - -$lang["serverstatus"]["title"] = "Статус сервера"; -$lang["serverstatus"]["address"] = "Адрес"; -$lang["serverstatus"]["loading"] = "Завантаження..."; - -$lang["serverstatus"]["online"] = "В мережі"; -$lang["serverstatus"]["offline"] = "Не в мережі"; -$lang["serverstatus"]["uptime"] = "Аптайм"; -$lang["serverstatus"]["version"] = "Версія"; -$lang["serverstatus"]["avgping"] = "Сер. пінг"; -$lang["serverstatus"]["avgpl"] = "Сер. втрата пакетів"; - - -/************* Admin list *************/ - -$lang["adminlist"]["title"] = "Статус адміністрації"; -$lang["adminlist"]["emptygroup"] = "Ця група порожня"; -$lang["adminlist"]["status"]["online"] = "В мережі"; -$lang["adminlist"]["status"]["away"] = "Немає на місці"; -$lang["adminlist"]["status"]["offline"] = "Не в мережі"; -$lang["adminlist"]["lastupdate"] = "Останнє оновлення: {0}"; - - -/************* Server viewer promo box (under adminlist and contact) *************/ - -$lang["svpb"]["title"] = "Огляд сервера"; -$lang["svpb"]["takealook"] = "Поглянути »"; - - -/************************************/ -/************* SUBPAGES *************/ -/************************************/ - - -/************* News - index.php *************/ - -$lang["index"]["title"] = "Новини"; -$lang["index"]["showmore"] = "Читати далі"; -$lang["index"]["showless"] = "Показати менше"; - -$lang["index"]["errortitle"] = "Помилка: каталога новин не знайдено!"; -$lang["index"]["errorsubtitle"] = "Будь ласка, переконайтеся, що місце розташування папки в config/config.php встановлено коректно."; - - -/************* Server viewer - viewer.php *************/ - -$lang["viewer"]["title"] = "Огляд сервера"; -$lang["viewer"]["lastupdate"] = "Останнє оновлення: {0}"; - - -/************* Ban List - bans.php *************/ - -$lang["banlist"]["title"] = "Перелік заблокованих"; -$lang["banlist"]["datatablesurl"] = "//cdn.datatables.net/plug-ins/1.10.12/i18n/Russian.json"; -$lang["banlist"]["emptylist"] = "Перелік заблокованих порожній"; -$lang["banlist"]["lastupdate"] = "Останнє оновлення: {0}"; - -$lang["banlist"]["table"]["emptyreason"] = "(не вказано причини)"; -$lang["banlist"]["table"]["permaban"] = "Ніколи"; - -$lang["banlist"]["table"]["nickname"] = "Нік"; -$lang["banlist"]["table"]["reason"] = "Причина"; -$lang["banlist"]["table"]["bannedby"] = "Забанен"; -$lang["banlist"]["table"]["bandate"] = "Дата бана"; -$lang["banlist"]["table"]["expires"] = "Завершується"; - -/************* Rules - rules.php *************/ - -$lang["rules"]["title"] = "Правила сервера"; -$lang["rules"]["filenotfound"] = "Помилка: файл config/rules.md не знайден!"; -$lang["rules"]["readerror"] = "Помилка: немає доступу до файлу config/rules.md!"; \ No newline at end of file diff --git a/config/news/README.txt b/config/news/README.txt deleted file mode 100644 index ded7825..0000000 --- a/config/news/README.txt +++ /dev/null @@ -1 +0,0 @@ -Visit your freshly installed ts-website to see instructions about news system diff --git a/config/news/news1.md b/config/news/news1.md deleted file mode 100644 index 96e3928..0000000 --- a/config/news/news1.md +++ /dev/null @@ -1,36 +0,0 @@ -About the news system -Wruczek, 2016-10-26, 21:00 - -You can add, change and remove news as a separate Markdown files located in `config/news` folder with extension `.md`. - -I recommend following John Gruber's excellent markdown guide, found right under this text . It's really worth reading. To view the code that makes up the guide, go to `config/news/news2.md`. - -I can also recommend GitHub's ["Mastering Markdown"](https://guides.github.com/features/mastering-markdown/) guide. - -**PS**: You can mix Markdown with HTML to add cool stuff like icons , or even a full YouTube player with video! - - - -#### Informations: -- News are read from the `config/news` folder, alphabetically sorted by file name. (news A.md will be at top of the page while Z.md at the bottom) -- Every news file need to have `.md` (Markdown) extension -- News file syntax: - - First line: News title - - Second line: author and date - - Third line: empty (seperator) - - The rest of the file is Markdown code and HTML - - - -#### Example news file: - - News system test - Wruczek, 26-10-2016 - - Hello **world**! - - I am the *news file*, you can save me in **config/news** folder with an **.md** extension to see me on the page! - - - -*Good luck and Happy writing! -Wruczek* diff --git a/config/news/news2.md b/config/news/news2.md deleted file mode 100644 index 2e1901d..0000000 --- a/config/news/news2.md +++ /dev/null @@ -1,884 +0,0 @@ -Markdown Syntax - example Markdown test file -John Gruber, daringfireball.net - -Markdown: Syntax -================ - -* [Overview](#overview) - * [Philosophy](#philosophy) - * [Inline HTML](#html) - * [Automatic Escaping for Special Characters](#autoescape) -* [Block Elements](#block) - * [Paragraphs and Line Breaks](#p) - * [Headers](#header) - * [Blockquotes](#blockquote) - * [Lists](#list) - * [Code Blocks](#precode) - * [Horizontal Rules](#hr) -* [Span Elements](#span) - * [Links](#link) - * [Emphasis](#em) - * [Code](#code) - * [Images](#img) -* [Miscellaneous](#misc) - * [Backslash Escapes](#backslash) - * [Automatic Links](#autolink) - -* * * - -

Overview

- -

Philosophy

- -Markdown is intended to be as easy-to-read and easy-to-write as is feasible. - -Readability, however, is emphasized above all else. A Markdown-formatted -document should be publishable as-is, as plain text, without looking -like it's been marked up with tags or formatting instructions. While -Markdown's syntax has been influenced by several existing text-to-HTML -filters -- including [Setext] [1], [atx] [2], [Textile] [3], [reStructuredText] [4], -[Grutatext] [5], and [EtText] [6] -- the single biggest source of -inspiration for Markdown's syntax is the format of plain text email. - - [1]: http://docutils.sourceforge.net/mirror/setext.html - [2]: http://www.aaronsw.com/2002/atx/ - [3]: http://textism.com/tools/textile/ - [4]: http://docutils.sourceforge.net/rst.html - [5]: http://www.triptico.com/software/grutatxt.html - [6]: http://ettext.taint.org/doc/ - -To this end, Markdown's syntax is comprised entirely of punctuation -characters, which punctuation characters have been carefully chosen so -as to look like what they mean. E.g., asterisks around a word actually -look like \*emphasis\*. Markdown lists look like, well, lists. Even -blockquotes look like quoted passages of text, assuming you've ever -used email. - - - -

Inline HTML

- -Markdown's syntax is intended for one purpose: to be used as a -format for *writing* for the web. - -Markdown is not a replacement for HTML, or even close to it. Its -syntax is very small, corresponding only to a very small subset of -HTML tags. The idea is *not* to create a syntax that makes it easier -to insert HTML tags. In my opinion, HTML tags are already easy to -insert. The idea for Markdown is to make it easy to read, write, and -edit prose. HTML is a *publishing* format; Markdown is a *writing* -format. Thus, Markdown's formatting syntax only addresses issues that -can be conveyed in plain text. - -For any markup that is not covered by Markdown's syntax, you simply -use HTML itself. There's no need to preface it or delimit it to -indicate that you're switching from Markdown to HTML; you just use -the tags. - -The only restrictions are that block-level HTML elements -- e.g. `
`, -``, `
`, `

`, etc. -- must be separated from surrounding -content by blank lines, and the start and end tags of the block should -not be indented with tabs or spaces. Markdown is smart enough not -to add extra (unwanted) `

` tags around HTML block-level tags. - -For example, to add an HTML table to a Markdown article: - - This is a regular paragraph. - -

- - - -
Foo
- - This is another regular paragraph. - -Note that Markdown formatting syntax is not processed within block-level -HTML tags. E.g., you can't use Markdown-style `*emphasis*` inside an -HTML block. - -Span-level HTML tags -- e.g. ``, ``, or `` -- can be -used anywhere in a Markdown paragraph, list item, or header. If you -want, you can even use HTML tags instead of Markdown formatting; e.g. if -you'd prefer to use HTML `` or `` tags instead of Markdown's -link or image syntax, go right ahead. - -Unlike block-level HTML tags, Markdown syntax *is* processed within -span-level tags. - - -

Automatic Escaping for Special Characters

- -In HTML, there are two characters that demand special treatment: `<` -and `&`. Left angle brackets are used to start tags; ampersands are -used to denote HTML entities. If you want to use them as literal -characters, you must escape them as entities, e.g. `<`, and -`&`. - -Ampersands in particular are bedeviling for web writers. If you want to -write about 'AT&T', you need to write '`AT&T`'. You even need to -escape ampersands within URLs. Thus, if you want to link to: - - http://images.google.com/images?num=30&q=larry+bird - -you need to encode the URL as: - - http://images.google.com/images?num=30&q=larry+bird - -in your anchor tag `href` attribute. Needless to say, this is easy to -forget, and is probably the single most common source of HTML validation -errors in otherwise well-marked-up web sites. - -Markdown allows you to use these characters naturally, taking care of -all the necessary escaping for you. If you use an ampersand as part of -an HTML entity, it remains unchanged; otherwise it will be translated -into `&`. - -So, if you want to include a copyright symbol in your article, you can write: - - © - -and Markdown will leave it alone. But if you write: - - AT&T - -Markdown will translate it to: - - AT&T - -Similarly, because Markdown supports [inline HTML](#html), if you use -angle brackets as delimiters for HTML tags, Markdown will treat them as -such. But if you write: - - 4 < 5 - -Markdown will translate it to: - - 4 < 5 - -However, inside Markdown code spans and blocks, angle brackets and -ampersands are *always* encoded automatically. This makes it easy to use -Markdown to write about HTML code. (As opposed to raw HTML, which is a -terrible format for writing about HTML syntax, because every single `<` -and `&` in your example code needs to be escaped.) - - -* * * - - -

Block Elements

- - -

Paragraphs and Line Breaks

- -A paragraph is simply one or more consecutive lines of text, separated -by one or more blank lines. (A blank line is any line that looks like a -blank line -- a line containing nothing but spaces or tabs is considered -blank.) Normal paragraphs should not be indented with spaces or tabs. - -The implication of the "one or more consecutive lines of text" rule is -that Markdown supports "hard-wrapped" text paragraphs. This differs -significantly from most other text-to-HTML formatters (including Movable -Type's "Convert Line Breaks" option) which translate every line break -character in a paragraph into a `
` tag. - -When you *do* want to insert a `
` break tag using Markdown, you -end a line with two or more spaces, then type return. - -Yes, this takes a tad more effort to create a `
`, but a simplistic -"every line break is a `
`" rule wouldn't work for Markdown. -Markdown's email-style [blockquoting][bq] and multi-paragraph [list items][l] -work best -- and look better -- when you format them with hard breaks. - - [bq]: #blockquote - [l]: #list - - - - - -Markdown supports two styles of headers, [Setext] [1] and [atx] [2]. - -Setext-style headers are "underlined" using equal signs (for first-level -headers) and dashes (for second-level headers). For example: - - This is an H1 - ============= - - This is an H2 - ------------- - -Any number of underlining `=`'s or `-`'s will work. - -Atx-style headers use 1-6 hash characters at the start of the line, -corresponding to header levels 1-6. For example: - - # This is an H1 - - ## This is an H2 - - ###### This is an H6 - -Optionally, you may "close" atx-style headers. This is purely -cosmetic -- you can use this if you think it looks better. The -closing hashes don't even need to match the number of hashes -used to open the header. (The number of opening hashes -determines the header level.) : - - # This is an H1 # - - ## This is an H2 ## - - ### This is an H3 ###### - - -

Blockquotes

- -Markdown uses email-style `>` characters for blockquoting. If you're -familiar with quoting passages of text in an email message, then you -know how to create a blockquote in Markdown. It looks best if you hard -wrap the text and put a `>` before every line: - - > This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, - > consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. - > Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. - > - > Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse - > id sem consectetuer libero luctus adipiscing. - -Markdown allows you to be lazy and only put the `>` before the first -line of a hard-wrapped paragraph: - - > This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, - consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. - Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. - - > Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse - id sem consectetuer libero luctus adipiscing. - -Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by -adding additional levels of `>`: - - > This is the first level of quoting. - > - > > This is nested blockquote. - > - > Back to the first level. - -Blockquotes can contain other Markdown elements, including headers, lists, -and code blocks: - - > ## This is a header. - > - > 1. This is the first list item. - > 2. This is the second list item. - > - > Here's some example code: - > - > return shell_exec("echo $input | $markdown_script"); - -Any decent text editor should make email-style quoting easy. For -example, with BBEdit, you can make a selection and choose Increase -Quote Level from the Text menu. - - -

Lists

- -Markdown supports ordered (numbered) and unordered (bulleted) lists. - -Unordered lists use asterisks, pluses, and hyphens -- interchangably --- as list markers: - - * Red - * Green - * Blue - -is equivalent to: - - + Red - + Green - + Blue - -and: - - - Red - - Green - - Blue - -Ordered lists use numbers followed by periods: - - 1. Bird - 2. McHale - 3. Parish - -It's important to note that the actual numbers you use to mark the -list have no effect on the HTML output Markdown produces. The HTML -Markdown produces from the above list is: - -
    -
  1. Bird
  2. -
  3. McHale
  4. -
  5. Parish
  6. -
- -If you instead wrote the list in Markdown like this: - - 1. Bird - 1. McHale - 1. Parish - -or even: - - 3. Bird - 1. McHale - 8. Parish - -you'd get the exact same HTML output. The point is, if you want to, -you can use ordinal numbers in your ordered Markdown lists, so that -the numbers in your source match the numbers in your published HTML. -But if you want to be lazy, you don't have to. - -If you do use lazy list numbering, however, you should still start the -list with the number 1. At some point in the future, Markdown may support -starting ordered lists at an arbitrary number. - -List markers typically start at the left margin, but may be indented by -up to three spaces. List markers must be followed by one or more spaces -or a tab. - -To make lists look nice, you can wrap items with hanging indents: - - * Lorem ipsum dolor sit amet, consectetuer adipiscing elit. - Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, - viverra nec, fringilla in, laoreet vitae, risus. - * Donec sit amet nisl. Aliquam semper ipsum sit amet velit. - Suspendisse id sem consectetuer libero luctus adipiscing. - -But if you want to be lazy, you don't have to: - - * Lorem ipsum dolor sit amet, consectetuer adipiscing elit. - Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, - viverra nec, fringilla in, laoreet vitae, risus. - * Donec sit amet nisl. Aliquam semper ipsum sit amet velit. - Suspendisse id sem consectetuer libero luctus adipiscing. - -If list items are separated by blank lines, Markdown will wrap the -items in `

` tags in the HTML output. For example, this input: - - * Bird - * Magic - -will turn into: - -

    -
  • Bird
  • -
  • Magic
  • -
- -But this: - - * Bird - - * Magic - -will turn into: - -
    -
  • Bird

  • -
  • Magic

  • -
- -List items may consist of multiple paragraphs. Each subsequent -paragraph in a list item must be indented by either 4 spaces -or one tab: - - 1. This is a list item with two paragraphs. Lorem ipsum dolor - sit amet, consectetuer adipiscing elit. Aliquam hendrerit - mi posuere lectus. - - Vestibulum enim wisi, viverra nec, fringilla in, laoreet - vitae, risus. Donec sit amet nisl. Aliquam semper ipsum - sit amet velit. - - 2. Suspendisse id sem consectetuer libero luctus adipiscing. - -It looks nice if you indent every line of the subsequent -paragraphs, but here again, Markdown will allow you to be -lazy: - - * This is a list item with two paragraphs. - - This is the second paragraph in the list item. You're - only required to indent the first line. Lorem ipsum dolor - sit amet, consectetuer adipiscing elit. - - * Another item in the same list. - -To put a blockquote within a list item, the blockquote's `>` -delimiters need to be indented: - - * A list item with a blockquote: - - > This is a blockquote - > inside a list item. - -To put a code block within a list item, the code block needs -to be indented *twice* -- 8 spaces or two tabs: - - * A list item with a code block: - - - - -It's worth noting that it's possible to trigger an ordered list by -accident, by writing something like this: - - 1986. What a great season. - -In other words, a *number-period-space* sequence at the beginning of a -line. To avoid this, you can backslash-escape the period: - - 1986\. What a great season. - - - -

Code Blocks

- -Pre-formatted code blocks are used for writing about programming or -markup source code. Rather than forming normal paragraphs, the lines -of a code block are interpreted literally. Markdown wraps a code block -in both `
` and `` tags.
-
-To produce a code block in Markdown, simply indent every line of the
-block by at least 4 spaces or 1 tab. For example, given this input:
-
-    This is a normal paragraph:
-
-        This is a code block.
-
-Markdown will generate:
-
-    

This is a normal paragraph:

- -
This is a code block.
-    
- -One level of indentation -- 4 spaces or 1 tab -- is removed from each -line of the code block. For example, this: - - Here is an example of AppleScript: - - tell application "Foo" - beep - end tell - -will turn into: - -

Here is an example of AppleScript:

- -
tell application "Foo"
-        beep
-    end tell
-    
- -A code block continues until it reaches a line that is not indented -(or the end of the article). - -Within a code block, ampersands (`&`) and angle brackets (`<` and `>`) -are automatically converted into HTML entities. This makes it very -easy to include example HTML source code using Markdown -- just paste -it and indent it, and Markdown will handle the hassle of encoding the -ampersands and angle brackets. For example, this: - - - -will turn into: - -
<div class="footer">
-        &copy; 2004 Foo Corporation
-    </div>
-    
- -Regular Markdown syntax is not processed within code blocks. E.g., -asterisks are just literal asterisks within a code block. This means -it's also easy to use Markdown to write about Markdown's own syntax. - - - -

Horizontal Rules

- -You can produce a horizontal rule tag (`
`) by placing three or -more hyphens, asterisks, or underscores on a line by themselves. If you -wish, you may use spaces between the hyphens or asterisks. Each of the -following lines will produce a horizontal rule: - - * * * - - *** - - ***** - - - - - - - --------------------------------------- - - -* * * - -

Span Elements

- - - -Markdown supports two style of links: *inline* and *reference*. - -In both styles, the link text is delimited by [square brackets]. - -To create an inline link, use a set of regular parentheses immediately -after the link text's closing square bracket. Inside the parentheses, -put the URL where you want the link to point, along with an *optional* -title for the link, surrounded in quotes. For example: - - This is [an example](http://example.com/ "Title") inline link. - - [This link](http://example.net/) has no title attribute. - -Will produce: - -

This is - an example inline link.

- -

This link has no - title attribute.

- -If you're referring to a local resource on the same server, you can -use relative paths: - - See my [About](/about/) page for details. - -Reference-style links use a second set of square brackets, inside -which you place a label of your choosing to identify the link: - - This is [an example][id] reference-style link. - -You can optionally use a space to separate the sets of brackets: - - This is [an example] [id] reference-style link. - -Then, anywhere in the document, you define your link label like this, -on a line by itself: - - [id]: http://example.com/ "Optional Title Here" - -That is: - -* Square brackets containing the link identifier (optionally - indented from the left margin using up to three spaces); -* followed by a colon; -* followed by one or more spaces (or tabs); -* followed by the URL for the link; -* optionally followed by a title attribute for the link, enclosed - in double or single quotes, or enclosed in parentheses. - -The following three link definitions are equivalent: - - [foo]: http://example.com/ "Optional Title Here" - [foo]: http://example.com/ 'Optional Title Here' - [foo]: http://example.com/ (Optional Title Here) - -**Note:** There is a known bug in Markdown.pl 1.0.1 which prevents -single quotes from being used to delimit link titles. - -The link URL may, optionally, be surrounded by angle brackets: - - [id]: "Optional Title Here" - -You can put the title attribute on the next line and use extra spaces -or tabs for padding, which tends to look better with longer URLs: - - [id]: http://example.com/longish/path/to/resource/here - "Optional Title Here" - -Link definitions are only used for creating links during Markdown -processing, and are stripped from your document in the HTML output. - -Link definition names may consist of letters, numbers, spaces, and -punctuation -- but they are *not* case sensitive. E.g. these two -links: - - [link text][a] - [link text][A] - -are equivalent. - -The *implicit link name* shortcut allows you to omit the name of the -link, in which case the link text itself is used as the name. -Just use an empty set of square brackets -- e.g., to link the word -"Google" to the google.com web site, you could simply write: - - [Google][] - -And then define the link: - - [Google]: http://google.com/ - -Because link names may contain spaces, this shortcut even works for -multiple words in the link text: - - Visit [Daring Fireball][] for more information. - -And then define the link: - - [Daring Fireball]: http://daringfireball.net/ - -Link definitions can be placed anywhere in your Markdown document. I -tend to put them immediately after each paragraph in which they're -used, but if you want, you can put them all at the end of your -document, sort of like footnotes. - -Here's an example of reference links in action: - - I get 10 times more traffic from [Google] [1] than from - [Yahoo] [2] or [MSN] [3]. - - [1]: http://google.com/ "Google" - [2]: http://search.yahoo.com/ "Yahoo Search" - [3]: http://search.msn.com/ "MSN Search" - -Using the implicit link name shortcut, you could instead write: - - I get 10 times more traffic from [Google][] than from - [Yahoo][] or [MSN][]. - - [google]: http://google.com/ "Google" - [yahoo]: http://search.yahoo.com/ "Yahoo Search" - [msn]: http://search.msn.com/ "MSN Search" - -Both of the above examples will produce the following HTML output: - -

I get 10 times more traffic from Google than from - Yahoo - or MSN.

- -For comparison, here is the same paragraph written using -Markdown's inline link style: - - I get 10 times more traffic from [Google](http://google.com/ "Google") - than from [Yahoo](http://search.yahoo.com/ "Yahoo Search") or - [MSN](http://search.msn.com/ "MSN Search"). - -The point of reference-style links is not that they're easier to -write. The point is that with reference-style links, your document -source is vastly more readable. Compare the above examples: using -reference-style links, the paragraph itself is only 81 characters -long; with inline-style links, it's 176 characters; and as raw HTML, -it's 234 characters. In the raw HTML, there's more markup than there -is text. - -With Markdown's reference-style links, a source document much more -closely resembles the final output, as rendered in a browser. By -allowing you to move the markup-related metadata out of the paragraph, -you can add links without interrupting the narrative flow of your -prose. - - -

Emphasis

- -Markdown treats asterisks (`*`) and underscores (`_`) as indicators of -emphasis. Text wrapped with one `*` or `_` will be wrapped with an -HTML `` tag; double `*`'s or `_`'s will be wrapped with an HTML -`` tag. E.g., this input: - - *single asterisks* - - _single underscores_ - - **double asterisks** - - __double underscores__ - -will produce: - - single asterisks - - single underscores - - double asterisks - - double underscores - -You can use whichever style you prefer; the lone restriction is that -the same character must be used to open and close an emphasis span. - -Emphasis can be used in the middle of a word: - - un*frigging*believable - -But if you surround an `*` or `_` with spaces, it'll be treated as a -literal asterisk or underscore. - -To produce a literal asterisk or underscore at a position where it -would otherwise be used as an emphasis delimiter, you can backslash -escape it: - - \*this text is surrounded by literal asterisks\* - - - -

Code

- -To indicate a span of code, wrap it with backtick quotes (`` ` ``). -Unlike a pre-formatted code block, a code span indicates code within a -normal paragraph. For example: - - Use the `printf()` function. - -will produce: - -

Use the printf() function.

- -To include a literal backtick character within a code span, you can use -multiple backticks as the opening and closing delimiters: - - ``There is a literal backtick (`) here.`` - -which will produce this: - -

There is a literal backtick (`) here.

- -The backtick delimiters surrounding a code span may include spaces -- -one after the opening, one before the closing. This allows you to place -literal backtick characters at the beginning or end of a code span: - - A single backtick in a code span: `` ` `` - - A backtick-delimited string in a code span: `` `foo` `` - -will produce: - -

A single backtick in a code span: `

- -

A backtick-delimited string in a code span: `foo`

- -With a code span, ampersands and angle brackets are encoded as HTML -entities automatically, which makes it easy to include example HTML -tags. Markdown will turn this: - - Please don't use any `` tags. - -into: - -

Please don't use any <blink> tags.

- -You can write this: - - `—` is the decimal-encoded equivalent of `—`. - -to produce: - -

&#8212; is the decimal-encoded - equivalent of &mdash;.

- - - -

Images

- -Admittedly, it's fairly difficult to devise a "natural" syntax for -placing images into a plain text document format. - -Markdown uses an image syntax that is intended to resemble the syntax -for links, allowing for two styles: *inline* and *reference*. - -Inline image syntax looks like this: - - ![Alt text](/path/to/img.jpg) - - ![Alt text](/path/to/img.jpg "Optional title") - -That is: - -* An exclamation mark: `!`; -* followed by a set of square brackets, containing the `alt` - attribute text for the image; -* followed by a set of parentheses, containing the URL or path to - the image, and an optional `title` attribute enclosed in double - or single quotes. - -Reference-style image syntax looks like this: - - ![Alt text][id] - -Where "id" is the name of a defined image reference. Image references -are defined using syntax identical to link references: - - [id]: url/to/image "Optional title attribute" - -As of this writing, Markdown has no syntax for specifying the -dimensions of an image; if this is important to you, you can simply -use regular HTML `` tags. - - -* * * - - -

Miscellaneous

- - - -Markdown supports a shortcut style for creating "automatic" links for URLs and email addresses: simply surround the URL or email address with angle brackets. What this means is that if you want to show the actual text of a URL or email address, and also have it be a clickable link, you can do this: - - - -Markdown will turn this into: - - http://example.com/ - -Automatic links for email addresses work similarly, except that -Markdown will also perform a bit of randomized decimal and hex -entity-encoding to help obscure your address from address-harvesting -spambots. For example, Markdown will turn this: - - - -into something like this: - - address@exa - mple.com - -which will render in a browser as a clickable link to "address@example.com". - -(This sort of entity-encoding trick will indeed fool many, if not -most, address-harvesting bots, but it definitely won't fool all of -them. It's better than nothing, but an address published in this way -will probably eventually start receiving spam.) - - - -

Backslash Escapes

- -Markdown allows you to use backslash escapes to generate literal -characters which would otherwise have special meaning in Markdown's -formatting syntax. For example, if you wanted to surround a word -with literal asterisks (instead of an HTML `` tag), you can use -backslashes before the asterisks, like this: - - \*literal asterisks\* - -Markdown provides backslash escapes for the following characters: - - \ backslash - ` backtick - * asterisk - _ underscore - {} curly braces - [] square brackets - () parentheses - # hash mark - + plus sign - - minus sign (hyphen) - . dot - ! exclamation mark diff --git a/config/rules.md b/config/rules.md deleted file mode 100644 index 15b855e..0000000 --- a/config/rules.md +++ /dev/null @@ -1,43 +0,0 @@ -### Server Rules - -In dieser Datei werden die Server Regeln eingetragen welche dann auf der Seite "rules.php" angezeigt werden. Zum Ändern muss einfach die Datei rules.md im Verzeichnis config verändert werden. - -
- -This is a dedicated file to keep your server rules. Its loaded and displayed on "rules.php" page. To change it, go to the config directory and edit file rules.md - -
- -Oto dedykowany plik na regulamin twojego Teamspeaka wyświetlany na podstronie "regulamin". Plik z regulaminem znajdziesz w folderze config pod nazwą rules.md. Edytuje się go podobnie jak newsy. - -
- -### 1. Definicje -1. Teamspeak - oprogramowanie służące do komunikacji... -2. ... - - -### 2. Postanowienia ogólne -1. Serwer Teamspeak pod adresem "127.0.0.1" jest... -2. ... - -### 3. Tytuł -1. Lista - - Sublista - - Sublista - - Sublista -2. Lista -3. Lista - -### 4. Tytuł -- Lista -- Lista -- Lista - -### 5. Tabela kar -Przewinienie | Kara ------------- | ------------- -Wulgarny nick | Kick z serwera -Wulgarna nazwa kanału | Usunięcie z kanału -Wyzywanie użytkowników | Ban do 7 dni -Zniewaga administracji | Ban permanentny diff --git a/css/christmas-theme.css b/css/christmas-theme.css deleted file mode 100644 index 253e14c..0000000 --- a/css/christmas-theme.css +++ /dev/null @@ -1,148 +0,0 @@ -/*! - * Christmas theme for ts-website - * https://github.com/Wruczek/ts-website - * (c) Wruczek 2016 - 2018 - * The MIT License -*/ - -body { - background-image: url(../img/christmas-bg.jpg); -} - -.panel { - background-color: #410b13; -} - -.table-hover > tbody > tr:hover { - background-color: #b41320 -} - -.table > thead > tr > td.active, -.table > tbody > tr > td.active, -.table > tfoot > tr > td.active, -.table > thead > tr > th.active, -.table > tbody > tr > th.active, -.table > tfoot > tr > th.active, -.table > thead > tr.active > td, -.table > tbody > tr.active > td, -.table > tfoot > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr.active > th, -.table > tfoot > tr.active > th { - background-color: #a51321 -} - -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - background-color: #a51321 -} - -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - background-color: #a51321 -} - -@media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - background-color: #a51321 - } - - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - background-color: #a51321 - } -} - -.pagination > li > a:hover, -.pagination > li > span:hover, -.pagination > li > a:focus, -.pagination > li > span:focus { - background-color: #a51321; -} - -.pager li > a:hover, -.pager li > a:focus { - background-color: #a51321 -} - -a.list-group-item:hover, -button.list-group-item:hover, -a.list-group-item:focus, -button.list-group-item:focus { - background-color: #a51321 -} - -.panel-footer { - background-color: #a51321; -} - -.popover-title { - background-color: #a51321; -} - -.btn-default:hover { - background-color: #a51321 -} - -.panel-default > .panel-heading { - background-color: #a51321; -} - -.modal-header, -.modal-footer { - background-color: #a51321 -} - -.table-bordered { - border-color: #871522; -} - -.table > thead > tr > th { - background-color: #871522; - border-color: #871522; -} - -.table-striped > tbody > tr:nth-of-type(odd) { - background-color: #871522; -} - -.navbar-default { - background-color: #b91524 !important; -} - -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-nav > li > a:focus { - background-color: #9b131f -} - -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - background-color: #9b131f -} - -.dropdown-menu { - background-color: #410b13; -} - -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .open > a:hover, -.navbar-default .navbar-nav > .open > a:focus { - background-color: #9b131f; -} - -@media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - background-color: #9b131f - } - - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - background-color: #9b131f - } -} diff --git a/css/flags/famfamfam-flags.min.css b/css/flags/famfamfam-flags.min.css deleted file mode 100644 index 516c3d3..0000000 --- a/css/flags/famfamfam-flags.min.css +++ /dev/null @@ -1 +0,0 @@ -.famfamfam-flags{background:url(famfamfam-flags.png) no-repeat;display: inline-block;background-size:224px 199px}.famfamfam-flags.me{width:16px;height:12px;background-position:0 0}.famfamfam-flags.ky{width:16px;height:11px;background-position:-16px 0}.famfamfam-flags.af{width:16px;height:11px;background-position:0 -12px}.famfamfam-flags.ag{width:16px;height:11px;background-position:-16px -12px}.famfamfam-flags.ai{width:16px;height:11px;background-position:-32px 0}.famfamfam-flags.al{width:16px;height:11px;background-position:-32px -11px}.famfamfam-flags.am{width:16px;height:11px;background-position:0 -23px}.famfamfam-flags.an{width:16px;height:11px;background-position:-16px -23px}.famfamfam-flags.ao{width:16px;height:11px;background-position:-32px -23px}.famfamfam-flags.ar{width:16px;height:11px;background-position:0 -34px}.famfamfam-flags.as{width:16px;height:11px;background-position:-16px -34px}.famfamfam-flags.at{width:16px;height:11px;background-position:-32px -34px}.famfamfam-flags.au{width:16px;height:11px;background-position:-48px 0}.famfamfam-flags.aw{width:16px;height:11px;background-position:-48px -11px}.famfamfam-flags.ax{width:16px;height:11px;background-position:-48px -22px}.famfamfam-flags.az{width:16px;height:11px;background-position:-48px -33px}.famfamfam-flags.ba{width:16px;height:11px;background-position:0 -45px}.famfamfam-flags.bb{width:16px;height:11px;background-position:-16px -45px}.famfamfam-flags.bd{width:16px;height:11px;background-position:-32px -45px}.famfamfam-flags.be{width:16px;height:11px;background-position:-48px -45px}.famfamfam-flags.bf{width:16px;height:11px;background-position:-64px 0}.famfamfam-flags.bg{width:16px;height:11px;background-position:-64px -11px}.famfamfam-flags.bh{width:16px;height:11px;background-position:-64px -22px}.famfamfam-flags.bi{width:16px;height:11px;background-position:-64px -33px}.famfamfam-flags.bj{width:16px;height:11px;background-position:-64px -44px}.famfamfam-flags.bm{width:16px;height:11px;background-position:0 -56px}.famfamfam-flags.bn{width:16px;height:11px;background-position:-16px -56px}.famfamfam-flags.bo{width:16px;height:11px;background-position:-32px -56px}.famfamfam-flags.br{width:16px;height:11px;background-position:-48px -56px}.famfamfam-flags.bs{width:16px;height:11px;background-position:-64px -56px}.famfamfam-flags.bt{width:16px;height:11px;background-position:0 -67px}.famfamfam-flags.bv{width:16px;height:11px;background-position:-16px -67px}.famfamfam-flags.bw{width:16px;height:11px;background-position:-32px -67px}.famfamfam-flags.by{width:16px;height:11px;background-position:-48px -67px}.famfamfam-flags.bz{width:16px;height:11px;background-position:-64px -67px}.famfamfam-flags.ca{width:16px;height:11px;background-position:-80px 0}.famfamfam-flags.catalonia{width:16px;height:11px;background-position:-80px -11px}.famfamfam-flags.cc{width:16px;height:11px;background-position:-80px -22px}.famfamfam-flags.cd{width:16px;height:11px;background-position:-80px -33px}.famfamfam-flags.cf{width:16px;height:11px;background-position:-80px -44px}.famfamfam-flags.cg{width:16px;height:11px;background-position:-80px -55px}.famfamfam-flags.zm{width:16px;height:11px;background-position:-80px -66px}.famfamfam-flags.ci{width:16px;height:11px;background-position:0 -78px}.famfamfam-flags.ck{width:16px;height:11px;background-position:-16px -78px}.famfamfam-flags.cl{width:16px;height:11px;background-position:-32px -78px}.famfamfam-flags.cm{width:16px;height:11px;background-position:-48px -78px}.famfamfam-flags.cn{width:16px;height:11px;background-position:-64px -78px}.famfamfam-flags.co{width:16px;height:11px;background-position:-80px -78px}.famfamfam-flags.cr{width:16px;height:11px;background-position:-96px 0}.famfamfam-flags.cs{width:16px;height:11px;background-position:-96px -11px}.famfamfam-flags.cu{width:16px;height:11px;background-position:-96px -22px}.famfamfam-flags.cv{width:16px;height:11px;background-position:-96px -33px}.famfamfam-flags.cx{width:16px;height:11px;background-position:-96px -44px}.famfamfam-flags.cy{width:16px;height:11px;background-position:-96px -55px}.famfamfam-flags.cz{width:16px;height:11px;background-position:-96px -66px}.famfamfam-flags.de{width:16px;height:11px;background-position:-96px -77px}.famfamfam-flags.dj{width:16px;height:11px;background-position:0 -89px}.famfamfam-flags.dk{width:16px;height:11px;background-position:-16px -89px}.famfamfam-flags.dm{width:16px;height:11px;background-position:-32px -89px}.famfamfam-flags.do{width:16px;height:11px;background-position:-48px -89px}.famfamfam-flags.dz{width:16px;height:11px;background-position:-64px -89px}.famfamfam-flags.ec{width:16px;height:11px;background-position:-80px -89px}.famfamfam-flags.ee{width:16px;height:11px;background-position:-96px -89px}.famfamfam-flags.eg{width:16px;height:11px;background-position:0 -100px}.famfamfam-flags.eh{width:16px;height:11px;background-position:-16px -100px}.famfamfam-flags.england{width:16px;height:11px;background-position:-32px -100px}.famfamfam-flags.er{width:16px;height:11px;background-position:-48px -100px}.famfamfam-flags.es{width:16px;height:11px;background-position:-64px -100px}.famfamfam-flags.et{width:16px;height:11px;background-position:-80px -100px}.famfamfam-flags.europeanunion{width:16px;height:11px;background-position:-96px -100px}.famfamfam-flags.fam{width:16px;height:11px;background-position:-112px 0}.famfamfam-flags.fi{width:16px;height:11px;background-position:-112px -11px}.famfamfam-flags.fj{width:16px;height:11px;background-position:-112px -22px}.famfamfam-flags.fk{width:16px;height:11px;background-position:-112px -33px}.famfamfam-flags.fm{width:16px;height:11px;background-position:-112px -44px}.famfamfam-flags.fo{width:16px;height:11px;background-position:-112px -55px}.famfamfam-flags.fr,.famfamfam-flags.gp,.famfamfam-flags.mf,.famfamfam-flags.re,.famfamfam-flags.yt{width:16px;height:11px;background-position:-112px -66px}.famfamfam-flags.ga{width:16px;height:11px;background-position:-112px -77px}.famfamfam-flags.gb{width:16px;height:11px;background-position:-112px -88px}.famfamfam-flags.gd{width:16px;height:11px;background-position:-112px -99px}.famfamfam-flags.ge{width:16px;height:11px;background-position:0 -111px}.famfamfam-flags.gf{width:16px;height:11px;background-position:-16px -111px}.famfamfam-flags.gg{width:16px;height:11px;background-position:-32px -111px}.famfamfam-flags.gh{width:16px;height:11px;background-position:-48px -111px}.famfamfam-flags.gi{width:16px;height:11px;background-position:-64px -111px}.famfamfam-flags.gl{width:16px;height:11px;background-position:-80px -111px}.famfamfam-flags.gm{width:16px;height:11px;background-position:-96px -111px}.famfamfam-flags.gn{width:16px;height:11px;background-position:-112px -111px}.famfamfam-flags.gp{width:16px;height:11px;background-position:-128px 0}.famfamfam-flags.gq{width:16px;height:11px;background-position:-128px -11px}.famfamfam-flags.gr{width:16px;height:11px;background-position:-128px -22px}.famfamfam-flags.gs{width:16px;height:11px;background-position:-128px -33px}.famfamfam-flags.gt{width:16px;height:11px;background-position:-128px -44px}.famfamfam-flags.gu{width:16px;height:11px;background-position:-128px -55px}.famfamfam-flags.gw{width:16px;height:11px;background-position:-128px -66px}.famfamfam-flags.gy{width:16px;height:11px;background-position:-128px -77px}.famfamfam-flags.hk{width:16px;height:11px;background-position:-128px -88px}.famfamfam-flags.hm{width:16px;height:11px;background-position:-128px -99px}.famfamfam-flags.hn{width:16px;height:11px;background-position:-128px -110px}.famfamfam-flags.hr{width:16px;height:11px;background-position:0 -122px}.famfamfam-flags.ht{width:16px;height:11px;background-position:-16px -122px}.famfamfam-flags.hu{width:16px;height:11px;background-position:-32px -122px}.famfamfam-flags.id{width:16px;height:11px;background-position:-48px -122px}.famfamfam-flags.ie{width:16px;height:11px;background-position:-64px -122px}.famfamfam-flags.il{width:16px;height:11px;background-position:-80px -122px}.famfamfam-flags.in{width:16px;height:11px;background-position:-96px -122px}.famfamfam-flags.io{width:16px;height:11px;background-position:-112px -122px}.famfamfam-flags.iq{width:16px;height:11px;background-position:-128px -122px}.famfamfam-flags.ir{width:16px;height:11px;background-position:0 -133px}.famfamfam-flags.is{width:16px;height:11px;background-position:-16px -133px}.famfamfam-flags.it{width:16px;height:11px;background-position:-32px -133px}.famfamfam-flags.je{width:16px;height:11px;background-position:-48px -133px}.famfamfam-flags.jm{width:16px;height:11px;background-position:-64px -133px}.famfamfam-flags.jo{width:16px;height:11px;background-position:-80px -133px}.famfamfam-flags.jp{width:16px;height:11px;background-position:-96px -133px}.famfamfam-flags.ke{width:16px;height:11px;background-position:-112px -133px}.famfamfam-flags.kg{width:16px;height:11px;background-position:-128px -133px}.famfamfam-flags.kh{width:16px;height:11px;background-position:-144px 0}.famfamfam-flags.ki{width:16px;height:11px;background-position:-144px -11px}.famfamfam-flags.km{width:16px;height:11px;background-position:-144px -22px}.famfamfam-flags.kn{width:16px;height:11px;background-position:-144px -33px}.famfamfam-flags.kp{width:16px;height:11px;background-position:-144px -44px}.famfamfam-flags.kr{width:16px;height:11px;background-position:-144px -55px}.famfamfam-flags.kw{width:16px;height:11px;background-position:-144px -66px}.famfamfam-flags.ae{width:16px;height:11px;background-position:-144px -77px}.famfamfam-flags.kz{width:16px;height:11px;background-position:-144px -88px}.famfamfam-flags.la{width:16px;height:11px;background-position:-144px -99px}.famfamfam-flags.lb{width:16px;height:11px;background-position:-144px -110px}.famfamfam-flags.lc{width:16px;height:11px;background-position:-144px -121px}.famfamfam-flags.li{width:16px;height:11px;background-position:-144px -132px}.famfamfam-flags.lk{width:16px;height:11px;background-position:0 -144px}.famfamfam-flags.lr{width:16px;height:11px;background-position:-16px -144px}.famfamfam-flags.ls{width:16px;height:11px;background-position:-32px -144px}.famfamfam-flags.lt{width:16px;height:11px;background-position:-48px -144px}.famfamfam-flags.lu{width:16px;height:11px;background-position:-64px -144px}.famfamfam-flags.lv{width:16px;height:11px;background-position:-80px -144px}.famfamfam-flags.ly{width:16px;height:11px;background-position:-96px -144px}.famfamfam-flags.ma{width:16px;height:11px;background-position:-112px -144px}.famfamfam-flags.mc{width:16px;height:11px;background-position:-128px -144px}.famfamfam-flags.md{width:16px;height:11px;background-position:-144px -144px}.famfamfam-flags.ad{width:16px;height:11px;background-position:-160px 0}.famfamfam-flags.mg{width:16px;height:11px;background-position:-160px -11px}.famfamfam-flags.mh{width:16px;height:11px;background-position:-160px -22px}.famfamfam-flags.mk{width:16px;height:11px;background-position:-160px -33px}.famfamfam-flags.ml{width:16px;height:11px;background-position:-160px -44px}.famfamfam-flags.mm{width:16px;height:11px;background-position:-160px -55px}.famfamfam-flags.mn{width:16px;height:11px;background-position:-160px -66px}.famfamfam-flags.mo{width:16px;height:11px;background-position:-160px -77px}.famfamfam-flags.mp{width:16px;height:11px;background-position:-160px -88px}.famfamfam-flags.mq{width:16px;height:11px;background-position:-160px -99px}.famfamfam-flags.mr{width:16px;height:11px;background-position:-160px -110px}.famfamfam-flags.ms{width:16px;height:11px;background-position:-160px -121px}.famfamfam-flags.mt{width:16px;height:11px;background-position:-160px -132px}.famfamfam-flags.mu{width:16px;height:11px;background-position:-160px -143px}.famfamfam-flags.mv{width:16px;height:11px;background-position:0 -155px}.famfamfam-flags.mw{width:16px;height:11px;background-position:-16px -155px}.famfamfam-flags.mx{width:16px;height:11px;background-position:-32px -155px}.famfamfam-flags.my{width:16px;height:11px;background-position:-48px -155px}.famfamfam-flags.mz{width:16px;height:11px;background-position:-64px -155px}.famfamfam-flags.na{width:16px;height:11px;background-position:-80px -155px}.famfamfam-flags.nc{width:16px;height:11px;background-position:-96px -155px}.famfamfam-flags.ne{width:16px;height:11px;background-position:-112px -155px}.famfamfam-flags.nf{width:16px;height:11px;background-position:-128px -155px}.famfamfam-flags.ng{width:16px;height:11px;background-position:-144px -155px}.famfamfam-flags.ni{width:16px;height:11px;background-position:-160px -155px}.famfamfam-flags.bq,.famfamfam-flags.nl{width:16px;height:11px;background-position:-176px 0}.famfamfam-flags.no{width:16px;height:11px;background-position:-176px -11px}.famfamfam-flags.za{width:16px;height:11px;background-position:-176px -22px}.famfamfam-flags.nr{width:16px;height:11px;background-position:-176px -33px}.famfamfam-flags.nu{width:16px;height:11px;background-position:-176px -44px}.famfamfam-flags.nz{width:16px;height:11px;background-position:-176px -55px}.famfamfam-flags.om{width:16px;height:11px;background-position:-176px -66px}.famfamfam-flags.pa{width:16px;height:11px;background-position:-176px -77px}.famfamfam-flags.pe{width:16px;height:11px;background-position:-176px -88px}.famfamfam-flags.pf{width:16px;height:11px;background-position:-176px -99px}.famfamfam-flags.pg{width:16px;height:11px;background-position:-176px -110px}.famfamfam-flags.ph{width:16px;height:11px;background-position:-176px -121px}.famfamfam-flags.pk{width:16px;height:11px;background-position:-176px -132px}.famfamfam-flags.pl{width:16px;height:11px;background-position:-176px -143px}.famfamfam-flags.pm{width:16px;height:11px;background-position:-176px -154px}.famfamfam-flags.pn{width:16px;height:11px;background-position:0 -166px}.famfamfam-flags.pr{width:16px;height:11px;background-position:-16px -166px}.famfamfam-flags.ps{width:16px;height:11px;background-position:-32px -166px}.famfamfam-flags.pt{width:16px;height:11px;background-position:-48px -166px}.famfamfam-flags.pw{width:16px;height:11px;background-position:-64px -166px}.famfamfam-flags.py{width:16px;height:11px;background-position:-80px -166px}.famfamfam-flags.qa{width:16px;height:11px;background-position:-96px -166px}.famfamfam-flags.re{width:16px;height:11px;background-position:-112px -166px}.famfamfam-flags.ro{width:16px;height:11px;background-position:-128px -166px}.famfamfam-flags.rs{width:16px;height:11px;background-position:-144px -166px}.famfamfam-flags.ru{width:16px;height:11px;background-position:-160px -166px}.famfamfam-flags.rw{width:16px;height:11px;background-position:-176px -166px}.famfamfam-flags.sa{width:16px;height:11px;background-position:0 -177px}.famfamfam-flags.sb{width:16px;height:11px;background-position:-16px -177px}.famfamfam-flags.sc{width:16px;height:11px;background-position:-32px -177px}.famfamfam-flags.scotland{width:16px;height:11px;background-position:-48px -177px}.famfamfam-flags.sd{width:16px;height:11px;background-position:-64px -177px}.famfamfam-flags.se{width:16px;height:11px;background-position:-80px -177px}.famfamfam-flags.sg{width:16px;height:11px;background-position:-96px -177px}.famfamfam-flags.sh{width:16px;height:11px;background-position:-112px -177px}.famfamfam-flags.si{width:16px;height:11px;background-position:-128px -177px}.famfamfam-flags.sj{width:16px;height:11px;background-position:-144px -177px}.famfamfam-flags.sk{width:16px;height:11px;background-position:-160px -177px}.famfamfam-flags.sl{width:16px;height:11px;background-position:-176px -177px}.famfamfam-flags.sm{width:16px;height:11px;background-position:-192px 0}.famfamfam-flags.sn{width:16px;height:11px;background-position:-192px -11px}.famfamfam-flags.so{width:16px;height:11px;background-position:-192px -22px}.famfamfam-flags.sr{width:16px;height:11px;background-position:-192px -33px}.famfamfam-flags.st{width:16px;height:11px;background-position:-192px -44px}.famfamfam-flags.sv{width:16px;height:11px;background-position:-192px -55px}.famfamfam-flags.sy{width:16px;height:11px;background-position:-192px -66px}.famfamfam-flags.sz{width:16px;height:11px;background-position:-192px -77px}.famfamfam-flags.tc{width:16px;height:11px;background-position:-192px -88px}.famfamfam-flags.td{width:16px;height:11px;background-position:-192px -99px}.famfamfam-flags.tf{width:16px;height:11px;background-position:-192px -110px}.famfamfam-flags.tg{width:16px;height:11px;background-position:-192px -121px}.famfamfam-flags.th{width:16px;height:11px;background-position:-192px -132px}.famfamfam-flags.tj{width:16px;height:11px;background-position:-192px -143px}.famfamfam-flags.tk{width:16px;height:11px;background-position:-192px -154px}.famfamfam-flags.tl{width:16px;height:11px;background-position:-192px -165px}.famfamfam-flags.tm{width:16px;height:11px;background-position:-192px -176px}.famfamfam-flags.tn{width:16px;height:11px;background-position:0 -188px}.famfamfam-flags.to{width:16px;height:11px;background-position:-16px -188px}.famfamfam-flags.tr{width:16px;height:11px;background-position:-32px -188px}.famfamfam-flags.tt{width:16px;height:11px;background-position:-48px -188px}.famfamfam-flags.tv{width:16px;height:11px;background-position:-64px -188px}.famfamfam-flags.tw{width:16px;height:11px;background-position:-80px -188px}.famfamfam-flags.tz{width:16px;height:11px;background-position:-96px -188px}.famfamfam-flags.ua{width:16px;height:11px;background-position:-112px -188px}.famfamfam-flags.ug{width:16px;height:11px;background-position:-128px -188px}.famfamfam-flags.um{width:16px;height:11px;background-position:-144px -188px}.famfamfam-flags.us{width:16px;height:11px;background-position:-160px -188px}.famfamfam-flags.uy{width:16px;height:11px;background-position:-176px -188px}.famfamfam-flags.uz{width:16px;height:11px;background-position:-192px -188px}.famfamfam-flags.va{width:16px;height:11px;background-position:-208px 0}.famfamfam-flags.vc{width:16px;height:11px;background-position:-208px -11px}.famfamfam-flags.ve{width:16px;height:11px;background-position:-208px -22px}.famfamfam-flags.vg{width:16px;height:11px;background-position:-208px -33px}.famfamfam-flags.vi{width:16px;height:11px;background-position:-208px -44px}.famfamfam-flags.vn{width:16px;height:11px;background-position:-208px -55px}.famfamfam-flags.vu{width:16px;height:11px;background-position:-208px -66px}.famfamfam-flags.wales{width:16px;height:11px;background-position:-208px -77px}.famfamfam-flags.wf{width:16px;height:11px;background-position:-208px -88px}.famfamfam-flags.ws{width:16px;height:11px;background-position:-208px -99px}.famfamfam-flags.ye{width:16px;height:11px;background-position:-208px -110px}.famfamfam-flags.yt{width:16px;height:11px;background-position:-208px -121px}.famfamfam-flags.zw{width:16px;height:11px;background-position:-208px -132px}.famfamfam-flags.ch{width:11px;height:11px;background-position:-208px -143px}.famfamfam-flags.np{width:9px;height:11px;background-position:-208px -154px} \ No newline at end of file diff --git a/css/flags/famfamfam-flags.png b/css/flags/famfamfam-flags.png deleted file mode 100644 index c820e3bd869f03abf63022fc2b93cf3bafbcc796..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78508 zcmV)EK)}C=P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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

wACxqb>Q>sqgcCID$#{&Em?M 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 S#OFZ(0000 li > a { - padding-top: 14.5px; - padding-bottom: 14.5px; - } -} - -.navbar-form { - margin-top: 3.5px; - margin-bottom: 3.5px; -} - -.navbar-btn { - margin-top: 3.5px; - margin-bottom: 3.5px; -} - -.navbar-btn.btn-sm { - margin-top: 9.5px; - margin-bottom: 9.5px; -} - -.navbar-btn.btn-xs { - margin-top: 14px; - margin-bottom: 14px; -} - -.navbar-text { - margin-top: 14.5px; - margin-bottom: 14.5px; -} - -.navbar .dropdown-menu > li > a { - font-size: 14px; -} diff --git a/css/style.css b/css/style.css deleted file mode 100644 index b1bf810..0000000 --- a/css/style.css +++ /dev/null @@ -1,138 +0,0 @@ -.fa { - margin-right: 5px -} - -.icon-smaller { - font-size: 0.7em -} - -a { - transition: color 500ms ease-out -} - -.news-header { - font-size: 1.4em; - text-align: center -} - -.news-author { - font-size: 0.7em; - text-align: right -} - -.pull-right .fa { - margin-right: 0 -} - -p, a { - overflow-wrap: break-word; - word-wrap: break-word -} - -/* Force 16px icon size after TeamSpeak update 3.1.5 */ -.ts3_viewer img, .adminlist img { - max-height: 16px; - max-width: 16px -} - -/* ****** */ -/* STATUS */ -/* ****** */ - -.serverstatus p, .serverstatus .label .fa { - margin: 0 -} - -.serverstatus a, .serverstatus span { - float: right -} - -/* ********* */ -/* ADMINLIST */ -/* ********* */ - -.adminlist > .groupname ~ .groupname { - margin-top: 15px -} - -.adminlist .groupname { - text-align: center; - font-size: 1.2em; - border-bottom: 1px solid #677481; - margin-bottom: 5px -} - -.adminlist .label-primary { - background-color: #375a7f -} - -.adminlist p { - margin: 0 -} - -.adminlist img { - margin-right: 3px -} - -.adminlist .iconspacer { - margin-left: 19px -} - -/* ****** */ -/* NAVBAR */ -/* ****** */ - -body { - padding-top: 80px -} - -.navbar { - font-size: 14px -} - -.nav > li > a { - padding-left: 10px; - padding-right: 10px -} - -.navbar-brand { - padding: 0 10px 0 0; - display: flex; - align-items: center -} - -.navbar-brand > img { - height: 100%; - padding: 5px 5px 5px 15px -} - -/* ****** */ -/* FOOTER */ -/* ****** */ - -body { - position: relative; - margin: 0; - padding-bottom: 120px; - min-height: 100vh -} - -@media (max-width: 380px) { - body { - padding-bottom: 150px - } -} - -.footer { - position: absolute; - right: 0; - bottom: 0; - left: 0; - padding: 10px -} - -.footer .pull-right p { - margin: 0 0 0 0; - font-size: 0.8em; - text-align: right -} diff --git a/css/theme.css b/css/theme.css deleted file mode 100644 index 2a97d1e..0000000 --- a/css/theme.css +++ /dev/null @@ -1,384 +0,0 @@ -/*! - * Stylesheet kindly donated by NothingTV from https://flamespersecond.de/ - * Edited by Wruczek - * The MIT License -*/ - -body { - background: url(../img/bg.png) no-repeat fixed center; - background-size: cover; -} - -.navbar-default { - background-color: #055157 !important; -} - -.btn-dark { - background-color: #4e5d6c; -} - -.text-muted { - color: #00343f -} - -abbr[data-original-title] { - border-bottom: 1px dotted #00343f -} - -blockquote { - border-left: 5px solid #00343f -} - -blockquote.pull-right { - border-right: 5px solid #00343f; -} - -caption { - color: #00343f; -} - -.table > tfoot > tr > td { - border-top: 1px solid #00343f -} - -.table > thead > tr > th { - border-bottom: 2px solid #00343f -} - -.table > tbody + tbody { - border-top: 2px solid #00343f -} - -.table-bordered { - border: 1px solid #00343f -} - -.table-bordered > tfoot > tr > td { - border: 1px solid #00343f -} - -.table-striped > tbody > tr:nth-of-type(odd) { - background-color: #00343f -} - -.table-hover > tbody > tr:hover { - background-color: #004449 -} - -.table > thead > tr > td.active, -.table > tbody > tr > td.active, -.table > tfoot > tr > td.active, -.table > thead > tr > th.active, -.table > tbody > tr > th.active, -.table > tfoot > tr > th.active, -.table > thead > tr.active > td, -.table > tbody > tr.active > td, -.table > tfoot > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr.active > th, -.table > tfoot > tr.active > th { - background-color: #004449 -} - -@media screen and (max-width: 767px) { - .table-responsive { - border: 1px solid #00343f - } -} - -legend { - border-bottom: 1px solid #00343f -} - -.btn-default { - background-color: #00343f; -} - -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled.focus, -.btn-default[disabled].focus, -fieldset[disabled] .btn-default.focus { - background-color: #00343f; -} - -.btn-default .badge { - color: #00343f; -} - -fieldset[disabled] .btn-link:focus { - color: #00343f; -} - -.dropdown-menu { - background-color: #00343f; -} - -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - background-color: #004449 -} - -.input-group-addon { - background-color: #00343f; -} - -.nav > li > a:focus { - background-color: #00343f -} - -.nav > li.disabled > a { - color: #00343f -} - -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #00343f; -} - -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #00343f; -} - -.nav-tabs > li > a:hover { - border-color: #00343f #00343f transparent -} - -.nav-tabs > li.active > a:focus { - border: 1px solid #00343f; -} - -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - border: 1px solid #00343f; -} - -@media (min-width: 768px) { - .nav-tabs.nav-justified > li > a { - border-bottom: 1px solid #00343f; - } - - .nav-tabs.nav-justified > .active > a, - .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:focus { - border-bottom-color: #00343f - } -} - -.nav-tabs-justified > .active > a, -.nav-tabs-justified > .active > a:hover, -.nav-tabs-justified > .active > a:focus { - border: 1px solid #00343f -} - -@media (min-width: 768px) { - .nav-tabs-justified > li > a { - border-bottom: 1px solid #00343f; - } - - .nav-tabs-justified > .active > a, - .nav-tabs-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus { - border-bottom-color: #00343f - } -} - -.navbar-default { - background-color: #00343f; -} - -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-nav > li > a:focus { - background-color: #083d48 -} - -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - background-color: #004449 -} - -@media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - background-color: #004449 - } - - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - background-color: #004449 - } -} - -.breadcrumb { - background-color: #00343f; -} - -.pagination > li > a, -.pagination > li > span { - background-color: #00343f; -} - -.pagination > li > a:hover, -.pagination > li > span:hover, -.pagination > li > a:focus, -.pagination > li > span:focus { - background-color: #004449; -} - -.pagination > .disabled > a:focus { - background-color: #00343f; -} - -.pager li > a, -.pager li > span { - background-color: #00343f; -} - -.pager li > a:hover, -.pager li > a:focus { - background-color: #004449 -} - -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - background-color: #00343f; -} - -.label-default { - background-color: #00343f -} - -.badge { - background-color: #00343f; -} - -.jumbotron { - background-color: #00343f -} - -.progress { - background-color: #00343f; -} - -.list-group-item { - background-color: #00343f; -} - -a.list-group-item:hover, -button.list-group-item:hover, -a.list-group-item:focus, -button.list-group-item:focus { - background-color: #004449 -} - -.list-group-item.disabled, -.list-group-item.disabled:hover, -.list-group-item.disabled:focus { - color: #00343f; -} - -.list-group-item.disabled .list-group-item-text, -.list-group-item.disabled:hover .list-group-item-text, -.list-group-item.disabled:focus .list-group-item-text { - color: #00343f -} - -.panel { - background-color: #00343f; -} - -.panel-footer { - background-color: #004449; -} - -.panel > .panel-body + .table, -.panel > .panel-body + .table-responsive, -.panel > .table + .panel-body, -.panel > .table-responsive + .panel-body { - border-top: 1px solid #00343f -} - -.panel-success > .panel-heading { - color: #13ddcd; -} - -.panel-info > .panel-heading { - color: #13ddcd; -} - -.panel-warning > .panel-heading { - color: #13ddcd; -} - -.well { - background-color: #00343f; -} - -.modal-content { - background-color: #00343f; -} - -.popover { - background-color: #00343f; -} - -.popover-title { - background-color: #004449; -} - -.popover.top > .arrow:after { - border-top-color: #00343f -} - -.popover.right > .arrow:after { - border-right-color: #00343f -} - -.popover.bottom > .arrow:after { - border-bottom-color: #00343f -} - -.popover.left > .arrow:after { - border-left-color: #00343f; -} - -.navbar-default .badge { - color: #00343f -} - -.btn-default:hover { - background-color: #004449 -} - -.page-header { - border-bottom-color: #00343f -} - -table .text-muted, -.table .text-muted { - color: #00343f -} - -.panel-default > .panel-heading { - background-color: #004449; -} - -.thumbnail { - background-color: #00343f -} - -.modal-header, -.modal-footer { - background-color: #004449 -} diff --git a/errorpages/403.html b/errorpages/403.html deleted file mode 100644 index 3553de1..0000000 --- a/errorpages/403.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - 403 - Forbidden - - - - - - - - - - - - -

-
-

403 forbidden

-

Access to this page is forbidden.

-
- ←   Go back -
-
- - - - diff --git a/errorpages/404.html b/errorpages/404.html deleted file mode 100644 index 7873889..0000000 --- a/errorpages/404.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - 404 - Not found - - - - - - - - - - - - -
-
-

404 page not found

-

We couldn't find what you were looking for.

-
- ←   Go back -
-
- - - - diff --git a/errorpages/500.html b/errorpages/500.html deleted file mode 100644 index 1f22d6b..0000000 --- a/errorpages/500.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - 500 - Server Error - - - - - - - - - - - - -
-
-

500 server error

-

Something went wrong. Try again later.

-
- ←   Go back -
-
- - - - diff --git a/img/bg.png b/img/bg.png deleted file mode 100644 index 17932415071bb69c0fc0a1310996a10968125f1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 798090 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 +1?ffNQq$%}%zF*QnU%huwLjx(h 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

TiyQq3?Jg6}%i0B;!5%3! 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

1cC_89#0ow#}Di@KZIHunN(Pq0a32Y}N^i*(^ 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 z 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

Yy2dFM3-w-Id9*<$TQIXnw6c<@p+1%aj^ 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ЊPO=k8$6Yok>&*^E9&mXb-z} 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�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

JkMNqOa zk&G|Udp;=-9~@|}h@ZCp5U>KN zn4U>w24d_$Mok)RBc}J=`R+#S3jcib@$~J@4@V@mHApEY!pTt5fGD|}CaCuAH7MO$S}lJa zPe*p0w5>Wv!QP38F5i*>M1K7#dO+Er)Lkflef&UB-QFGpf&i}zl1T5*u)+G}?+A`6 zuNxD3q7D&k=;@URj~(`8CLxmT+RQs~T(D4?NJ%(Jx3utk^l>7w!AIpJNJoWIkWA+b z+H^owcjd-2l?yOgU{hC}2Z{ka^G`t|%1+%G2@}$Y0$m}@vk%`LcKvGK38UpF*$Z-V z7gXY7Q|tpXa)~VCY0}gYN6Ft}!bmN0s13%}_ucv3zPUti+C|0QWF+ueZdb)cznCk0 z@!B)4b%a|#e^XGK5QNUwbx$n-1RBxO@eAbEOM@-fxJIR07!@$_Be?Ac8z_L_F~(&I zE)4iD6%7RzYPq11uSBm`!qa(QW#@=))6SR68Ya%V?^>6ycYPR}4-nHMfg=7+8C#{a zpU{HuT;o-8@ZBib^V+Q->AS?Ah#S>}Byb81Eg_Roc1_|mJeU*l*190~<%7U`3}REq zT5DTi?-@2g5c_u2&?AmW*7by#)Df(92ydIz8cl+Hhjc++7==G9RpG z;(O71#Px;f{IpP2PFt}-(|4Gmp_ee>-K!T>tZSzP8vm}ZQHfu>x!Ml*T%p*G@T-2s zeGRcAI`(;V*Dn(lT|?=3zLPFr%WJw2ojxeRubmG#u7I=D-R{eXB?LTMafa%GGL5`?+R4t*DN3D-hG#r z8(kI-Sl4*|rM;4RS%@qNoSN>Ja@QNR*)tJmI*Qtx)fpn`g0uv8N>%?%IxkpHa(hK^ z&@3G$OBY?3>M0b&ZJnVl<24pkA>OHcSF#^qK~dLQgE}Bn;Y8A#C+Sb+E~wgiZ!e+s z7Ox4?x$_ssPFEC@b|u^z=?*I=fn$j0ct7LrDMV)m39E5!U`6v1@{*R`EEo5 zY6@tf$C-q+M%0}UveU&KMQU&vP;N#`useslj*`H_UT-0yoxa8|pg`x%RCSIT&p02}MI7#z)%w=r496zT;UU}5 z1~oqaIBju2=6v*T^y_@zc-qqadwI^h>7922V?=k=i1(B(#(N}wGe$yfERNr5J4Xed zrDP);=5=(}Z|+*)!dZP-`C4ALXQI=`RF?pR)0ud>WWzWX)-_A7f&|QDVFY{o z4&VcmzlSCXah&R|8WRi2q0#^vx`ClVfw3_lX5BZukqqW^R^?p^S3J8R9~N}&2^1U} zpQmRv_9gAY#vgBuGrH!xzx>YD;&5*4wUm1eSX-f^&R}n8cF& zojK>?enb!nU4i~iq_bvaXl$_Ka%DlHA+0ub4uz)_dA0aurNj*kHnOEOJk~E$ z(Z>#V9*F3)TuKx9RiMA* zYkDSfPlUok+{68# zp&~e5Jy7UF@sgrDTPowBj?3?#ka|tEe#H8eq($!XWne(=y;9|ULC*N9bU#P|Bo~Dm zNYtf?gAHU-kGUySSV2PfcHCL#L-m(2T!`$@d-b{$CjU(15oYt5Lt$274*^pgi1%SV z`+U?=d89Hrly-)_^SjG>P-OsGK&8Lm)D=i7szd%+T0#>A@o7YV8ent5fq1$Qffb)6 zOj)M=?LH4>JZh_*rX}V4u3l?QnC5ezdP7v<%sI4`D>CfX}9A-H9|9^$9Ec zGA)TRM}*TN3ls4Y59Mq`Vl6oFD1eyk`VSE@S**X6CgQpV>amGRc!S7AW&-Hmq|-dJ zm!Q3>h6U}H6!SRmY-qF)ktB>x-c~%X8ydQDxFx?-dS7sJ`bEy%n-44L@1@&(x)7Zn z=Dp>cUXYRK#lF}562Mpty34Ea1AnI^@R2;fHGd~MCh;pgpSgZ0M`ym62e%Vdbk)LQ zkoF{hnVLG{0xn;oU#iR3vftBXNo+@sdw`A#fsd6mB&@tE(MXY*d+uPJfu%%#NZ+&(M#)fP}xY zhxZPtENmU&T-0T8XKfn5r6l=i4h)&}h0rOIIRzY*^4K}I6-NXX-zl~9KowBdBLXtp zH^qHb97*>&vRk-2kb-_AY%^A59NGRi2`ZPp&d9QAQo4N5Vz+5BA}4V2knnt+a<`--i>b7HiA*M$1*3E!I578y$?u&;?cI~E?7cbY7$xo=g9CZ^Ql2Nq~X z|4hhfdP=&okplov$_7I)b*S2fHEIB!40_stXTlAUb_KQ`N|D>jVaXgqKI`!ls)(OR zP{j~YdTgDTe4HLSs#{p%*!GgbzTc87Z1hoW61$x%P|B+2nXb1iN9a$0xKlJnFA+Jt zMpTssIf#xXK8tt z?|h?Va4G7cLJC`RJEHMhP9m;zlPt0ZYx7tOYj6V7vL?CcS($XEV)cM}mpl-lDeEP7 z-9}1b!W|R9ONYvIsSG@>fr?-8^_Gd>8UvY+IElK#wV>tkuePri1))_}_86H{-MI0v z!2kUMT)soL>PDc`QUQfTC(Xv1epPE1DJb8Q6hn1s)vK+{bN7+$fgG|J#RpY?e(st} zM@@pd#9e6&L~}t8ZAsub1=@qpe^j6jouAVjAvpw|3(+Ov79hjZmvO*E9UGgS@Su;h z{Vjya;~f9XYh$pk)-FK9q08GM`3@-@a6WCHll8a6X14qkbWg@(Z{_>dYFQDjn|3Cq zImqFjq98}hTFJqMHI&L?>N|!S-8odDp68ryWc9qq^NDwgf?b2qxgFM6bE_U3atU#T zY#Y9hIVui{`7~v1lLXPL=N2dL4R;Tq@{8v5cbKHF87I2*B1{0{!uO$+Jd+ccT5^Lk zW18P{n^zUBA)?wfP0u=KS0!NB4w6B|9Ioj9^qfOvtaM)o52$QLYvB`iU(;JZj^!pu z{`v_?mwX1xXCTf=3vp`&O6<)|r&hS@D}j^F_b{`U4$J|7ODGqSb>PVgqEbUPdY@dD zOQv=@nAdMak6*T=2ArGCStV{zVzSqLTLc|A%)B72$hW*Lzzy^o#pAMsd<(1h*H_ zz6zm>%kx`#KAW_66CWuGnnUjt4v?w%wwx5V>EE?GIEmyg~F6)zr53_ zJRq=lv|hnM<9zG2wFJHj@8QZV0TB`U){ZBFUqL%889bUBnwLsnPEtE8hUn#ROJM4Y z?Y|aS$awv&oL_Nb7;@6ixur{EnmK?cCc1tfbZ@s50JJ1q*l4S0@OQ_aSXqCk!CH;a ztZtmH;hf~42nAbsrAQd+xN#H`kQm59dr0pA(QaTW1hiQU$gnpy&3TssihEcQM$S&; z1A2{dz`8dZ_mpqjTF!wdF4{QZ?^`&DxuAEYUS60r1trka9r^+GHHEpjO7e-=U=OU_ zvSDIFmQ@PYj)gQ7=qhmB9(YfC!7!Q3Kw(r*;3-=Zsz=yx7Ag#52nqw7V;FqV=`}jj zdrEWVO@^8pkmgb9>eXU0_xE(d&KzIv;=VXaxQ}xd2n%}yvG@ehZ*sR$ZmlI*(7ejU zZgr&c2BzK0%N%$jzP=EjJSb=fqMKCuCZ7z+ch2hXZ5cSYlVZC|f@cnXE7-6Jba|ny zE9cYaEMiT!!2{!+dDqLQ8zpOqSwS9C<_UjHJKt{!XGje+iyW1{tk*|Se2NZjCzx4@ zpGa1mlo-~gg0z_9ErT*6yM=`g;W$}YlsA7>(Fv6*CW9?DTUu~sN`xf5zuqhpM2t`# z_c2x`f|s#1X>WLU6SoxXgYw0|lBQd&g2_7*Cn7p6vT_j$d(-dOmTXI&xlAa`(;wMH z8w+Ya}%EJz=2@dxp$-O2t-U zo5)hMl%E>}eNnT7r`b-sO``o|h%lD-$cHq4`1HSzzuMr4PA8(v&rTt;CUjln=X#yT zd-42QgRWYje{8_7{1$GH8w}4Sp)mo>gZCT8xivt?;T(4P9vIVk->=Y_;L}GE;cI!? z_<(cu)V7)|H1|=2Il6mo$VkZNjJ%__v$I`j-$w_qb&4(t+oU_`Tb96Zqg(dFy1Z`Siuk;Km4NAQg0 zBaV(`JQ#B>E9}0YPc7-h)Pcw4@54dsHp$=Z9#j0+&b11Y3%Y#@Xt%6zHkz*xWCJeY zH@mc#8`f^l_O4&Rss~4P7PDY8rkygHPDG8YLhA-ZHjts&>5@FZMVt62R?=Ul{u5;iX5Y>n_mtaEvn<%32HTDvTZ1D6VO$Jy~39 zEcPSwRbKgp5~qKyH3XrYtuYApE6WFtNcXd0_cVz`MMJFy&)nk=akB0(uBNZQWjJe& z?AGNS55FY|4NQ}&v2rrRMtKLYbWjPm2Fo$=z3VDp*i~hHGv#$xh66L~{*B`UB5<*~ zDyp}|FB_!tX0>?sx35=2{lF#WoUBC_`!m5DxjlkHLn0`wbYOBbJSqrTc+R)Y5-a{@ zl|2X#n!D^NYQ-^Q##3`8ps*y~h}}sEt=tNYF~W)r*za|0Rr;H`bMXvCVyq|OIVkLy zh!UGZD3)O%W&x@khfRZ5Z42`lIgMov2K~)ebTcVg&F1;BwPcdH_TUZILsiLOZr`K4 zXMp?-qaykZSQDIyPLD*>HKC_8-Fk-ac>MBl`}sZ{z|Q3%f$a~Xax&L7e(va7YDD5! z`@6Lp<}D$XIx5yi=d01Xx4rwFD-F^Bj|zc&7jgOiM|Js@*Pe+9)63lP6jymKl|3Qn zkJgK#oiG&L{vy2e-FbfxPX7MK!#>x}GvjIlH1jo<9e0}!wDJN=)yGr8Sgn;Q9J3#Q z*qJZ?OM&r$6XpeP4>G}OE_H!fsyek1dSR-Eh|lQdd2!0t&QDi9ujW$sOdrg)R&T)% zor46g$YJE17?^vI+M?2Db5^-I<`kZBucQxF-Nq(4_8bmSc+$kHX6{t zsv(>S_*|1AZ)C!s8LcY^Avs3?Q<`&AQqrVx>$#AUCaRUJ1XP4=?T!5d0YhJ7BnF*S$*@1!G+V;cGizUXEm(Fw_QMr#L4ep&k)-mt4Cyj)1K5AVlV^+3%4dMMj zSxg%uxV?~w2m4QaCBg?H=LpkYoKUirT0NZOJAeVA)0ybvJvyjU>EJq3z~r3x@*)ZytyB?@?* zBtHLMt(Omn2O#eu0HeEpOXDd&_t#1QYwO9%cl0EIB^cGh_?LSdUSgHp$41$>19Yzk zbD{$xu?Q{}C-vk`H>INkie5*_n6LSJG?UYr$a$z16BE7sTk~?2@0u$2MbTghx8EBb zpWwk7i(Kw*MZNyca(}}(dE8;mB;B%k1GGa=arGeNbT?P5mGG3N#7nw|8aH9;R3SR| z78lZcl4)bmv4iJfr3!s!x}o25Eb#2^|#4tisbJ|XCapm-XT=2{Y|w|1_|2QDtR3L;`Bsx z`VhYHdLt^J53qn%Q1X+_VUVOaC}Hs{hRto(H%BIu)MX#13-d73$m|h}r-=zf(@(*E zaq6AH6Px!xiJxq5aLJt6aOTV%P0S4u6ibJ3`EM*G*$wfYDogRLx`j;zzEVLtf^(qj zD$ed&A7`Z{siY|i7bF^kuHcRLw>921n7g^aFWa`a1LzBBFZj`sHE81ymb-)F@ka6m zL$NyBHMqT5n#b&2^m#`4ehz${ngV>*O0I?T%W;`oZY;hv z+}uu2^Ep_kDfciUo9x}v9dq9f;8pPs??{ZhdR@b3dV^>qB=R0Szwar#*HE=Hq#&i2 zYj<$sH=Fb&*=hXmF5l*T+o7W_M0^rZbRqHqBNGBcpqA^x0sO8`=X>J&&5Z~DA#z*_ z^(;YnObyE)l_tiOtiugDA#r{5enRIN(58F?I(gfpFV;Jvuf%i?dwKwY$Fim9E5`sSBdEmA zxv!sbn7$ZjeLxE#pm=v_D;;#x=cG31fLi_I8kj?E1w6??8USX)sX{9%l*Zq8NQZCb z`gA4|<4)7Cb34T#kt_-S8NkYGs7Z=DbUrql#?#Q-xsE#~5pflVew{VSfaFYQo}LxK z#x4&sH4qaC-IF2Wzc;+G=-vu#8ZVDuy2X2Mnd5E3;_ecsCJM&UZoMe{}lMnC$ zlb)`tXn$*kZ8gbhl^0o%x+wX(um7C-MO0Lvgm-TKjaV;1@~EA>oaRq%!+cO!~$_#i+}d zr}10&w|L3!kP2xuJrkck1&VYtL~sfc>pCP8il;IMIX0|=d5){xCvMzZWQ^5L4pJ1(TM~SLkao(sTAVSv)*m^ucUriME7ui7=X3b) zmmdYY2FiD%^6s<1JLWqDkL~&;!y1GRQy3iO0s1?3SiPVM+PdI@k@^=qnO^X^5>3;> z3mo$*bGDl$$JSJ(mp~0qh@pwgnnr@IOt~;~BzcbNYV;d)=HP=;ECXRC!fm!a7jEl* zk6V!ll-VM;4$=_`@P;+b<4BMaeBv-T1DEAgi@UKoD4o#4Utww?cyH1f>-MuPju*}A zhwLs#(jz9{3^G(*JYv(6Kuw{?LFZFg6E+3~f^qq(-(=;io>2HpTP2$f=3Dh)^D*fyy zb8-7laKG)k$YCxPV>!{A^3Uo$hPje;;Tq(WJ(le#s>*v9C}yjaz6sH2G4InPC`p#t51T(MF^U%W7GF($yB0p zO3>3->)4nB-Id2XzNU)Haa7lDYbQt#&+pNR3O?p@BVnIW;%Pge>(`v{r9Ds+cljP_0Mg&! zmFIxb%oq?6oj#EWj>We?@k&o&gX3iRJ^pU6&&|OkbdU4?6v{YWuFWuq(;!G_C%i+r zCr_Un6?AREl6CJ_J{lVbn06-nAOSttoH$_tOUTO#X9l9viE#3&V{ccY*T2T=(4yRz zIRE4X!`mf*OP}MYD_l0T%lbRR4H!UWeFENCkAxMhIeJ$g{%eMT)iFHdj~7O%iG&`e-+L9h}>ul1Dc1xK^omy4cAwK>@< zpUU?vO7PSi^{M2bhgm7o(h9e7fA^EO!S}i+qKA)RciQb1yeHR5T(rM4_W(EEqvNb^ zCa?@^t;t3Do%-j~PG?=Fw!30_NfM*j{5W1ZzS8-ZJ8@%l6PWttE!Ij7X1OMQqFEl< zb>q>&#yIiJ)eNOYI8X1{_Y19YW~EWMrPf5xR1Lvy>k78gkSINFd?N}d-wGO>Yiy3A z(A3hiV>ttIQ2`eutp*(|o(~lLE%|DTeau(+JGH_|I1&-qjPa9TEv$RMt)vY5+nHsG z0!=4xPvr_3+hW(H4u4i4kh%CxJP0CtgzUGQ^PY6FHGSTzw~T9n6Vdr;MkJLAt2jn} zkv+dedo$k=0@}IzURd=5q%tJ*z2KgYNc?Kb@V&e;<^Xqm*0No&1q`b9oMUIUG>wO2 zyL|t)FP(=BLV{K_?WUKx(<|8}sS6w%LhQW*#$HV_U*bx59I9ebN`g!@>>(`30 zm-e#=&}Otnv~J_~X^HG1weVj_4-Qb%pXFan%KGHb+R(&r^03vBp3?D8FJTgx(ykCc z`LpdVba&r2Hmm%xse>ro&Hedl7dMw(zbqm{mEl>jNA35a2DU6pV9>>JTY@Y~k3mH@ zx}W?m^>w7(*rVmW_NJ1^1frjj17a>i1xn#O6d-QNv_9+p-6)URP-iLl$>06#hj6#y zG%LFKyZ2m{*Kn=)aQV?b?(_~vTi zn{elkVy21jlWE4zWEHE!q% zmd0c621G&g76GRzSJ;Rp$tv;6hDC0R--(mwLHgan%1y9!22B%2(%(aM%bRrrb9kq(F#_i5d2-MCNW!?vw?dyQ zAt}YwAC}(!<2rx=qSKk^^85=VwWh{6%X{Ma?Hxm}6FBf0Tss%843Z!U!q?8FhcF&X z((z7RzHcQGhrVgHBOO;^4$KpYh#ED-UPn%v8bZGYy-B{*jV4(zq)*#hNJP#qXx zp?*#s+uwf@@#}!KU<$Q6FsavAb?wnfeSF%U1cLf|4@#qY|48?ka-7=w%Hhd#6Ts=1 z=jvJz5l=r9>O&!rw$W(^YiMENZX$D8I;VEeEQBW&j&nUqEPK#+2+K8*kASY%D-95Q z7knfHP`~APU&Alm6lxI@c8r$nx zVdfA5KBRk2Nv2pyEsqP&xrdVkBML-&H40x`gu8&~_FMRV4-&V*$3K4KkQ_y&w7xcq z><$*GZ|`BFfo^`Sw4)T?Zk16whyvyN(VtHZs`UFyMX3(A-&}r> zSX09@G0VZTV3<(;-NU$wADI08qJ171SUbROpjriu)#qFF>?G^0>1RVA2IuViHPHcb z0~IOqCf5Kck`Fkz)uQM{!-;~fUGVa4LH{nlyIzUj|L?$kXQ17>Wq+A{Q(o}+Jqa}E zZz%!X(<3t0UpALTJVjGQFp;W5T*;O;X>S z%h{Bpnu<3^aU4(jj_@5}_3*<1T(6B{~;siu!C_hqirNEnYyHw=-Pfb09E zg@@BOqL+VB#&V+uE4{S8W-BPG_Y_IsM^^7^3AEQ@95ZD!@5xwo`wgP)>BmoejU1)= zZHb>~iPH2vqg0+{(IAmc%gU|{V5n?q)=1Oo$$XytiO*;#01eBir-PBBf~SkT+Vh(| zAMDMvQjTZFTJU%s!>nr6YVNp~n~>e}UJXYTr8WW&%ct11GiQN*{-$R%PPAz_bp{wLmj#<|N-uYJP?;cv{Z~t?b_uzNg ziTQ$Pqkv}S6DgnpqW3p?-j7hp;%?HpEILMoMaC;@b{6STFbxeCAnBv$zt2E$oWb7Y+{Ot_dwd>D+f_xwC zNrZ$F8jkzUy2TC!J;ZY`2!j*kMZ!$k##bJO%ab24ztyvTJ`tIDEzhzBn~*1eiHY7@ zsh?Z-HVkd%&j&=*s~1i^N|Wn<&!Srr_4j%fxF~50<=l#ZW+V6@-J1{Zv9;e}m8#&^ zdm-Cel}%)j)H*a`Ac`lqSv}R7t8+s#!zb&phzxsaT(~>dO^(CblLa;6bfbH>ptWU= z(KQejnvBnz&j$K_s1n8Y9HT*hF7(-;xsby>9jMWA?lh{&-++eJ*z37`4W0{J6dk3> zDtV2^tkF?_8qU&>C|VTsRP`f-6nWm$*P25d=?xAnNw?bx$zLvFBV5txOJ{+UeoXBE z6mutQs3~j{YlSaS)UkBJY8K~??yeEGRw79oiQELjN9~rQ*Tzv&vv0{>kSl*MZCJV| zQ|9k`vITVid7cd)G!jB}yIDR*SF>S!mj5LeSSqw>|B+dZXBapN9Rx*iqp z?cZ<_sBOtl{+7N8N9^sjxH%aKAE1P`=9Syqb;KT#G$-Jh?9S+xUB-s(yqqT$f`7l> z-gonEIZxj=`+!&5$F$>JoaV7OmbgYa&GP8ug$a$ zc8P5X9X%lL^17kF4>&W$b6l(*b*BD11q~c%xY3$7;+O_sUp~SpK@@0n5Sx9WlXLG9+Viu}KDQ+W z{=PCkI{CW<12G4db5g!PFNoh2nGtcAAFxO$@xA-}v8WxOgzltJoo8%ua*2a@RG%4f z+1Dj}x!YCi`E+|H;$OOBLqs;}7XjIOwA~S~f6yssfH@2Cgkhu@YzmA~k`+F%$IE-o zh8$b{bklC1vw#GCBhZC-`ew+I;0ATkn{wvpTC-(#rb7EOPt{|gxzOFrRZmCBX)$6e z@@+%4*5iRp7h0^MUHsO|{L}MFtmwy7&$QQZi%vdr+A(>jBzp`%9W zv5N^Zdgkpvld*#^P*X~?D(u(mFQS+KNkStRqTB52Pe3TlM0M`h^PLcD7i}Rd3$3KJ zFAH$oez#RWbW2L?Q#=$m$e4h%C(K1Kxg(Lc`E|z-imo-od@OzvuyG{4P@eGOb1-Ed zDFIHH78|wn8+K~? ztzA@WY&oX}bR<9?uO4SO5cl9Xvf7ime$=>j;yI^bfzpP62DYOoAO`QcoM|agUK4ij zfj9LL-YW{UdCMN|+?426W;Ig8<=MoMxa~Se9Nz0JG=@?2chWwpTi0d!qKEAaow`h! zY3yCzqNVyRtv>XdT!)|4=cr+mt-3K0C^Qa!M?9#b(ah11A z_fkq7dAkS3rtePAte*Em-g}s0m}d_i9F{4>ld^FUx6n$h=i=T^bWhmSy(fLtuSQj7 z6-U1B2yn0@=`tfII~6aXV*~S1vTpmP%F5Tsc6{))PBF-)U(zQ%F7P zq*1y`DCm5%nLE_)e2lGE)0IawIQLWUK|xg}$?zQ6o(9o5O_>`q2O}^Sn2;*@%ZfcQ zi~0?Ve3nHJp581AYhrvF5qaP&h*|e2Wp#{R0*RBvOPa3B*SP+@)GK$_w`^Kn*7=ba zDYIEz0n_dr>6dZ6e<~XS)p>Rg@Xkc@jqvhvcM|}@3lZPu>J8-Gn$wF*6!@xb#{2qK zY$cg4E+q+3>)R|tzoQOO75I4AGs!|P&w;!byWH1#-G@vmdu^hhLX@{tm$lTRS3QfB zi$1XIL^$H<3!S<{|7eo)bmR@gmK&LN2+cOuRFwxRwXK-w5vZtp-5I~%i7rzW6yv3`5KBK`CLPDeA2MHG{eC~UjGvkOEsd$U|8cAZ4o*H}D%29h zC)QN&Tsasq^V$g`tR<%)H>}XsJ*A}D1kt6SbbI}iMJrIzKs3@C>>>g%-mkw^QGmy)Jq^YGYx0(gF zCok%K7{rHHmSdXWXR$;B#%W4Me`ILwq=UM!!=5t(Dx9zm#1OF}!t(YP(dFM;5{76Z zU@d;pQL-G+-nQkuCYd4hQC}s8tAs+t3u~cFU30)z09fl%lez^e`iShc^?ZV+QAI(>&x%sVu>Hp)8G-8Z$L6w zNIt72@M$3gw;*LXd>t2sj;2Nsb;r@Tab&Nx#*HGj)?R3kPOn*jNC$HSd|QCElOjh7 zD!2$$N}qEO!0)e56a;K=tYW5K(79cIp6LtmJHS2&O^sJ=#QyJbSpr;3vX|!r3hL`~ zY~Sj?kA)l%dP3RvhijiiHTGocm_2MdZ!Brqqr>RVnzZeu1dOppde?IP4opOJH3CmgD66-f2ckGE?Pqq*5UZ(+ zltgVDz9740vRChcd_eP{$M#+Wmjb&>f$%PoTwLjp{i$jPKUnsS7bB5T*vN^a-C1PC zQ{!Z8Vt?^MUs`>wwE`9<$`Yd*@;H5>M9qpr-e6C`VnM-3B&5$#kS#++TUtnx?3BFz zMfClD_J2QOKLKVvXDzW0HNY5&Z z*t2)!nNXD(=(Yi8RF;#V1&{-xO!YOsuWi(?5Kl~{KdeW?DF^23Byg?^BnAP_moEtotsFp7jB6N361qOQxou%ME0p&T7N3-h395!OMe z^eBA@wU~p7SXt9P%D^GI?SVA5!g9+7FGklD^fA%EP<0)1Lpwu`##-c}L<7vjY z&F^=atypI{q-V6x*aR@9d;gCLCHbh&=)`a7WX0$P^Pi_+F#Id=+iD~DYab*=n10ZX z@?9IrTWj@|_&tB`+IzyLWrE$?F;kODxPSglH2owh34nxtz~)#^?fd%y$={|x;TQ6E z%o)`aTn$A(4`xm*9K2`#p=;Kpt^fvU&Hn$`5o?+zXxB%Pgoc*aT7%b#@LLZkxE18WDWWC3L_==&5HWtWzPByF2nURi9Z@H9k^t+!Tb zQ_c6Y5q2j^HsC)xdFt#gdYPf&iK%%cu!Xi53L_isICu&9e0FTSDh2XOBzu)0RFS&epl5`4kXJ>1FTTn$iHmqbN!FQ`9D$0QR=Z}J zugnDli>$wEh7Rdw`PkQ@dOd+s&U2ZlfpAWHNoX;M2d~?2G>wSE`wyywl_^Ff*Te0- z8tKit`^>j{f#S=z-R7P^m`OoV=LIM*`pEm1w!}0siL+9p_3MNms^8}gW+IIy>@h1b zL6)RQlT)rx{rQMx8-WSMe%ph`oKRy+c1Ef@Q#8A2Lw`_`n1y6ks?oIdDOo(q(7JVg zRC57E(wI%E`D~6!PYNIDCv44`ZhuS3i$W`OXEO!8=~iVF$hhs=dCx-#h&??jk(5Ur zO{i8>&m2kc@(0+h%m(9I;_Me@oV*5ca}EhFWs~H$m>$ z@aL%pf}gt3a3gYY<`e7o9xXfa{l#KQg$UkY=C1d9OguTt3sNuu@d5kWTc`Pr=;eQQ zsuB0Sxt3Ak)y5`(r-|tL_5o3nGZViSbyYM_gaPCD`pDX!g&=}cfPiV~4?qjbw}sXj zpKGo@#fQ80h3uTd49}E_U)B9)CYs*})3;oy14L98xwP~S8aH1Uw9sF)&(C{KwVq8) z2ln#S2qm;2(L8U#M|B)q#k?`}h#*R}U$$A_F;SU-bErs^MAa=vY!h z?v8W8jKaT(@PnEI+R#IzQs|mvnyEABB(ED<5Qe~sdjn!%5 zr=v#a0fBOsW%_ctsGxn z6|AX-`rLxEkov{45J-~?xAeq}G)8|tOEfRSMI$X_e?mzz_V2RsWD7;Re-8yJw9N_$ z6*q|+6V2mzrA*E4xuwR2vU%XXfk9~b>5V;?elUr=k(%W zp@(^b`jvyuDdD-U4<&tR*&yqfG$j6+AyBX9utY6gSbi0GcuHulu?T1_1X695(zM=1 zhD8*xHvd`j81=Jy(b*8_T4VNiBDc*Hw4P36#WutOI1_F$zmbl(g-I(ew#Dgz>Q<;i zg!Eo&a|}%eb9-^HY<(j?o71=qd%ApbY#!F*NK~7GG3}iri}$@z>hkr*0y@~6p`Pw% z2a~}yZMMPa5`LBinTmXe#lo^vf<6uN*N+C)sNEr)2yOOvrFS%{?6i6X(@qI3j*-o{ zWI3L331DDJ0RMVmBh21_Iv*59GzKH3=3k$4 z_ixN8*J)p2RxOt9lUswtHzK|){eKhXjp=S;^Xw2qoH=J-$={Q_#&g$g813`1<(Df*zI~BkNd%ldI8lYBD5qk&`9yh_rfMeb*l55ICCs z=-Fh;)B>x99`0Di1R`!NKio4+oy};bQHu9R)Y#k7v zj_mEGEYZut9ZDoGx?&ubywu^obstC^226Ew8sYxAsIZz|?^}q=+FD>!$j$qo8x`~x zd%4}t_dnMFsfk+m>~Al2rxjPS@Hkfd7Y`23v%wi?e$_C_yY!|H>VtJ$nlzB;hkXmjwGkl`a=e5=9fJg)cZ(@fAs$ zl!ZAm;=HH-r=)X>n88|nUM4tiza5*M)py%>CRcsrqjO>(5fIwtXzz)PE$Wf|f~Dl5 zR0PSD&zQtvIdWcFX9`sBqwM)kst<|6#zP{PEX1Rz@NE}XTY>@>OTNo_%ZSH@E#<-u zQJ1H{3TDHipf)sc!s5Zql~{+(l2SVWN>(gxHtF;w{JZ>o872$U4T=TEw z@A-SU{n#ws)L8Fbn03L`cjh<3<)_fteky2ur10Nab2j2BXDR2g`v~|u%KAqmf2DJ2 zsa~hKVR$zp`mP5IS@9G%gL3`F92&AjMpgzNxo}8pS~v`rb<245gMqm-nm}?cCH3>4 zgT~3_qz1pkj!pBtAJy=NL>wESZ$t!1&SZBW(;QuHc8FV)s9ziv)g49BZ+pg-h+p)| z{N!3I!H9yUu-xlEy)i~n$#*6S(5&JqvO7&6M0;DIr_iBgF9qx&9No8) zJ&^JPu@cxlhAg%v#tQ)@W1l9%{7#HH``e!Qg{{Bgg-E@QdS$R3LHtsk^dO?DkEKQ5 zEcak8?YsNXh#;&1{) z)1sV7LbLT$BYpDh(^C%r*s(;7f!UhoC=`;b?{oR1c4C+-R34fGXgvqd(Z%iJ209>Y z{bPN20(kfXdGMYbll+C5uu$}8Y3u?-m;dp{5sII27Pu^f=`5t_SPWB0PSb%o11ZLp zm)P;nALwIzx#V*A`~Q;L)*$>|MPLi9G=+`5Mq9>)^Y*Nmh6OtJaNbYP*RODfiQwdL zm!6X7VfAaL;5o70aV9w_ej%E^$$CUdCRk2V-`a7vT%pxJz`;Ts_(>fJu{QENORKW& zlwFRXxL^Dux$;(wdL8*ByuMc;K}85*lx`5D3o-jpx&~^nJ?|d4-^5A*8SgnQ$#%X~ zXF?TZ0RmfDs`^K}PCT+d!|TP)QnJIy17RO|r1C=O3X%2FkcLKbYSq14|%Un@H-p2&#!tWm5LMAg4}(RCJ(5a!5wZp;|vZL0a03XE_cv1$H{xvfv>9CKt)t zlHgjKBk6r1te3@*5DDaJD^0;`i_iCeCxKbIquKe04tQ3lQCYEQaG5n-!^Vk2M7Lk{ z^{YJevL?8?F#1YXTF`nL%z_Y2XFMVdDL#PNeJ^vos=edvShgvr<2rWGyfLe~&uWST zLuS=@%Z z9?gE2SP8N{)WX)oB@@YakA@@h{f*V^1Z~je~e&&G&fOzQ# zeBN$0VU&Z`;7pFZG-Pr?KpH?fYa@hg&7xsv}VF`CWu5|K+xUfVlRJ$-N@Yu=N(lFvy4EZwf9MXA?Ui6Gfb=dFO$hr zj!p)M=T~7gAg0NDC%?eluziqH#O8ZJ3h-754U{M}Nq`w}?`Ng_4DX`zfW zbXRfjBfW7|c?D`NDz*z4>)TdU8RGp)gde(Xp}xO-UW`cqPZQDmYulW42M@X9J4XYa?y_}`6B_sYcAr~fGG+@~nXMj#qsBm^DGkg3<{QFVEliRU+>>07SuvGRM?izVn;UC&y8rFiKZWoQd*HFG;B%KnC~dyIDLNnY_Q6W%D^9IMXDque|e)< zFDa{|y-SsAQ72aY;2?{yEzz7(f^tQ+IvSd<9=}=wuC{MDF2hU~SuhhTIuhbJrdvi@ z|6zpAEUl0PsOL zH6e+Qm4ldS{ls1bg->~bwD)&;-ltT>ny!%S7wvjBSh%({<)H*X{<|`XAyYuZ>7ndf z`_hh2mlcd~%Mg~>a)$H{E>}g0(FyOUB~fu9kt%q8kJCaG_50MHgOtxy6Owrtzy0oZcz`VflmxUA--!4^yi_3WhTdg4GF;6t+fM!t z*Iz(zF1c{S_rzXbIf_OPtJU)-l+fut=HEn@KbAgfasVYyabk$p>N!Hh+jj z#3+W?=cVYXOvEMg$5*1F$KJZ0;R22iOZrCJ4U|FONla@=fxT3JtcZ@s8=#VH#K{^# z(8n_oUj@u22)Iy;b%aPPDgadEnVgsu$UH$s8ds*(&flJM*(E!n1Hr#*rs9vD^ne&( z^DMpe^pf>A3&kTkD8JwK=k_>RSgwz<0VLm_--!78j@p~1I|`U>Tk~ULRvei7j`k)Vcd(3H=GJwr5z-zfQu_V%czrYuC@OXVLPOU*CRzUL6XD3&W21w!g$*Zz zkJ;&aaSi17iM#d+8kl`~P7~58Z;RGro0|5^7#Z&G3#{1RMOj3pzhQgFm8ExkBYOFR z+_rFmbsUfYo``POKHn&0ggp}RYZ=_pdv$YY(DNsO2PCW6tMy1xzOz8>!JTsOg;ad} zhllKsl77n~FG`JQBAeVueuguK`HgV-DfnJ5RX^b4^Y*Ni&tLl~KHq%eJU{CDD<$-R zN3!ncq&A9F5tq8=61i1Qw`XDfBb2)lSa57XZqQ+=lU|@d*EyVj->HiTBHEOM z^BS$|HZ=2&6ZTjcR3Kx0*56HJlXpk(pYndv3gSYDQuXC-303h#dNNuL_P{LZ5Y_{p zPa-9~=j^<&FgaN`3k`b_=`%T?U+Yn9!C+kO|K{uF^w%_y5tPE1#BVp6RwaWJ>|KGH zTMrs1DB2VI$hX}qe^*f13pY)A&RH9oeQhV96h;f17q$)Z`LWgnRiW&XK!JSzh{&^S zHPhgpzTPE57MKDaPeg_#n$~zXL9f6-(h*2{Qnr$X+rdQZF6DckX^-^8iWYgi{z>%h z-+6rJb{nw2NR-=b%nKV33=Kq?O#~s9fRvQM<=v>{htKfC%XOa`VtjrCMK1nJpCg=S ze181Wqn2J1oH+`S#cQoz!!;r{>DkTJ{Ko7=={;7outcG6Jpua86GdXv->mmrPLu0h zD%g<4tPKORsr~k;o^tBv^$+uV>}u+lJ=@hbMDX^X`r)B_q^-LXLaPkL zwD8;^A|kpih^DH?>*W9~gXa8yC4W!yB+r-o!vPr_oLd|S)>a4o;((Qj;Q221Es-_l z2-@}}3WrJ4h0T}L*Xg|aE< zLO)%_U{$ZI4p!Rh*mK+n8{sc3{=%Xwkz!$6{p~dIE2qb$P*v3;2QoW}6l&J>cd6ew zdybdHX+M`Kn?H|awJb7{?F6NFWfLO#NRhqp-l7dR`jq63u`2c_l2%=}w~Y!K1mcMa z%!=m885$)0B=?UMdaUxS7L$-5x7xh+fOs>R0Yv0ugz8sr2r?%qsg_s)DBf+>`i|7k z9Kkr?145cq_Z%j&`w3eK;Z&FJXwKsO`B<@_*6%w_5^A|u4r-!onVGeU7Y&HW2zJXHCGz}uPo8pIT zKUtoUF(l?Ivz*!3eE?>sxUB&VT*`u+Wh!Z*^S!Vm;uD?FL<_Cy*q!AROa6oTS|s(j zNCqc5pCfU0VGm5mqidY<1k@Wx-hg&cY)YNWuOQ&q5kwc0G=6UJM)A7g&nNL%u12n`Mt2=~)XS!l@K&ohOaUz+zD#9<9e4KCp z5$+*Vw#ItCSu&|1j92IJSq_-{9B>vQ&(k)Xb%o?YURscXdf4qTy`=k;XYRbE0e`6v z@JRiX?z?$$8mDDF<~+T}??iZ6{;u5dp@)HI*Q0Tt!TdS)%`<%f8F`Fi55*{pte?Ij9#8)s2r_ZGTmF-6}r~IQYb-6(pU3ZB%in}W+;(v`95Rg zJv8PdA|GR7YK$WVCC>iUifdS5Z5`JiijnFNA4fGngjgg$g=FVeJySu3eq7tKW)?Byg$!>jYN%gwk&E`mTDKRGZJ0vWq$kF6C{B7F-pBvKtOCaWSKC#@Bf zO!w^h)ku;pksi+JcS6ZvB=g9YEyrhUqyu{uivBK&cp$Ytwjeu}FP^XqH4eS*A%3P` zI`7YzUUpx4p7Zq-hti;Hpxgb?_;+l5tw?)4pndiEVV>|gF<>aZe_@$UvMh%6H|9Gt z)U?V-pZ$C+0X$7a@2>|Y%d|=Y#z;?K#|zZ7+~@2d4WBEdD7{GToI_5OQ!C0hYF@X@ z{TJ%@;}qbyJpzIl9;^=~n8vMTe8F&MtPn7GCYs-gr$U9|;uJqb9P_80B* zxO3r1(EC)}-12T~UtlS)ADkkgpmh!EVsk8QdK7feb)c%3IcVT&uC+(~x!O=g;^6I9 zU{0snX^`duM|!yhsjDCH0aT|k?-x7gSSL``u~45cYn`AAvHRV}Yau-h0Hc7859&N3 zsSJyS6dd!FK$oR(B;UznXu6MFx+3YO!#dqUGgkiv;;wenJ0o;L?YbA8YcGv$O#+v6 z&}E7_fT}}-PXsxkD^t2o8CqUm4=2$GBgnz_nJy(#Kuo;IAJ+YX&ctsh2zR7yk#L}k zdPPU6S@^Q*H0n*@4ov(?`&!bY+B@BKV!Ea*obAF)6tvEqY1;JXNesWGwBde8PCwZ+ zJuN+>UFHzdWhju%+UdL}^k!WbLn?W(@R&!K$>0=6P|)6rrscJ{l)DxqE1#o+jJBLp zDcx?2_4X&x^nZ38Jza=yvyg0piZYjWmxTLHgZJPyIa-c3@6cyyFKvd=up(Ic0fWi3 zO5@raVgY=8Kja86pF?csq{dna-#Z2u zNOrEuQjK9Ko)uvSYMyxq32QiB#!S(ogg&s9u51T5sg$M;_F?7mU{^+6?AL= z@@GZi1-YuMHaR zlKS~}Td1F-pEOuJ2j4x4P>v!a4+eJ*?!0{TQ|6@Eweit+gWwWz;YhZ07(9P|BwPlX zu9n8*ggv3PUda3X?7_%8)fMoqpw{c|K6}zxr}c93&uWkAG5;Gk2BnT^wswg%5b!V* zH{OZp8?8xTwCFWN5-_=}Le;{S_LdN+5jF|0AVgR@7&N1l_Cj6H*SFYt4rhOFzMWUN z)XF{&$DUOXV@cqNmGGVvglRG^hWGU?X^qP=FSdxwm*5qM_)S@-vfp>wJ1oCjp1{)i zEm)bq$Y~hS{%I05KHGNDQJP>c{k;7ST**xS?~)y4-v_aCvBjr_qYE{Oh#=*>-tKb8 zVmVp9S)`ebw4-EYd#Ox;C0*zoO;X&6nfUsP=;e>ifCrY}7nt=_w%7BvM)2miArfrA zZRae5FZYUM-Dy@42Ukq8VoLIAX%E8iI;3I~sTkhs{8*#6QLL-*K25aFXZf9vMGnho z;hLB{Zc#654#@hKI}($MzKzgD!`Zj8eoriV&XJK?A{d4AGtxw5tk4m-WbXz7(d{)7 zpvYu+rx%{v=UVe~n8V-q5=mN13wD_~lie>axO`qAv8_L*M=%IHi-k52`bF2Y(7nBZ zS)E16Kaym;q>A2|aOuQk@G`3Dg|=c^o|n7|=e?^@oI)WMANdUH_d+Mfca-xz>FFpX zf;Ip3`98vljJ9}`tH0+r!sTCiL03Tj(m6hm0G^1hZ~cLCjWUW`qQ@J+}zb zqaFw2RoPZ_m=;tA43ux9T!jDjm8ANZ4-eiaPy?vwTvyLIh4V96A+7n9=<-LQ=$BxQ z+Yk6F`TJN^dUn68kEDHm#9Aoj5)JWL09)^iwE7aDimJ`px9F|_^}fPFHo67T-_U)w zq<((?&w=-ul%QbbOf9exp~TBjAmWlpU`SYN@i8kML4=zFF;8CDq;0T)Gr6z zZd*RsT<0*|KF{}-0W{IQSNt59$GJ=2cqJb)MQpkBL4@B{;jZk7q_s}jx3@;0B{uGq z*n#{$z)xhVDGZ^A{b*maSOGvJq#8ummJ7Q?c z=tWV;oOT*pC!fU}rrnEiM_Wa^eAm_)LMK5TKk4jEOBQu-nNSxBdLGjI_gv&KP+GaE zyU4C4VJ$gX*^JuQV?IThXteY8?M3d{#M^ zaaNLi_kTCh-)?^T8nirwCp#}S-Xu`VaOPhnrQ=F0!hB*no#L+ZeMY#yo_-Q)a9zQsc2xU zkQ{lUTGB?F-HQbcOq8>UB`ZF%H*gb*J;WcL`(5zc>@c_4-+R1nYHB-~-lsnSe7O+4 z{ce0*zzA-pghtRvk6iyuiQkBG|AiF~;Qg6O-emi?rmekL$zsBrics*An&B~4M`T!a1Pz?4rCMN_EP279IfyR*?P=FDV z^5c}s`mO^k`b`Pfdbbm+F0=ejgzv%mpObs_NJdK^#CG~a7O`j%d4UnUIVK+xF4dP2 zG{}jEh`AEckHschibJ)+P@wJo1C+K_M^1Ri*(z8Rl$|xW1>RhzG!>&EMEAhzEhyG7 ztXN6E=knXd7J@dtxEFUxp>k_~Ji>^S5YSrTQ2n;qI=W~%4f&fReQSAzE7#gwM0SzY z&sXagjL^I)VJp!_i7<{y$Vn8orKUf6lCTl^veKX2C68;*T?*>&a`)v3-x`gFgu=NF z$M)IZ_489ie39h1{g>$S?@jh`neOa2l;e)2#BQ3%GkNj zqKA^)h*;S$^ow}jxXH=XLQaxtkk&JcpWqAm6Lc3L4R^kEMT9I;XI*wp&|wY--s6zO@i zv-hytLacwTLE-9>4ZQ9}HZ7(I zGF_aVHTSUO8M5{?>|6eQ31CdY#=|{9a&Cxyw4i>UtA2C#7Vf`ITt;kv~!F2V9P5 zI%zGAI!a%AYwWq!a*jP4^0#9Q$_8c110Q*SfXzyJ6i&*Rd60S(_1*)UK@K=}M@jw6 zzXz^`NAt{;eFRuxU@}6GjyxO)&iCl=COHkgbA1n(iI<2@I8G65^_A_Lo9L`d5>W;f ziL{h3FAgfIcX}tH@8nau#uB9nB`Br-NG(c0MgwReRW|pU;t*nL5D&Omb$Nb9o{O3- z@kT^H_qpO|gAOwFS*?vEjHw&;3RsNX5FotMny&8(u7gGuHE@BdQGF_SJHJI^HfjeK zDW0?7=qH74KgH#egY7n={w1jhUy0T=MInU7Dkk)&Ef6gbkd`CH|@qEtvYjXXR+Bd4(0&p04 zZP&lARxHpA9Jd$+g8#%iDu`5x~=h==!U{816uXn&;%GKEIzK@p~*l7grp)^366z zh4Q`iKB!@izv!Ny^K%~Mvmf>YapR7NR=|5T@Ld(Mf_45(g#DTR$ zlpO&oJrnn!2A{;+|%-mlt>&L(JhD=MtrT5k&si|279 zrE$bYUX$)qg-V8i0?e06N(w1&$nz4EEB)#{$X#|VRcH5LF_k0@7;=^hu^W-X>RF1XOF)f)n;g_tKj z6Rp7SMEq^1u%sxBp^>~FVkTQ!i;eTbvj0dv-(~K0)3Vu;#Gra#6z$vWGSG4@q55F$ z@sk=!t;J8&rGR2to|PCr2`!u!`(=BAxuHNUxlTH}4xy;IjBY zI2nMYNVMosJ--?DT0K)hKG&pQnVnPZ3L|2l`$y+ULU&mBn7jkDk=1XX4-+ad#hZSJOPI_swSL zFH}}-DPzV5N)s&=i%`$Q%gpxHQz@hIfX# z!;h6-kP&j?{(JD-LidfNIIhjdF_9?MDDytb{`rxj!nGc11y&Pzr>abg@QO8=isUm> z)+;!be@kvf=h&hW&x2}xXMd0)5xz~oPi>?a!AeL+JKXyAEQ%mgyFH|wQhX&~EpvhJ zTolPQWfuU=UVz0hAkxe>Cw_%wmVx5czPrx3-v2q$t=OYGm-h9DI7&_%o}Y<%H$zV7 zkacServCP@Y2~vOO^~2yQdC~9Bar>S(z~v~ZV-QW{gde1P6bU9h~~(8Omr*>JUjlk zRTLU6w24;4a)$^yOgsQ-`~b*&t-3cn7d_eg<0ov!ZCX5woI2Z1Hw;G(A4Qg_HeQ~5 zjaptcv3YSm983ml^Jhu9muiDxn&f^z68z+)+UuBK6T%p)E4M6VDCS4&QJxl~)imXe zl+dNkz;Qk%RETfg*3}b@7KwLp4zi_Bm_~?KUtGZ|oaI8-&_)f-ti>EU<5@}DGOBDv zE{aTZ+G5lV5I!h$x#n;dziTZ(<=YNW;+oOQN4wVce~7`M5-L5#oEHS-`?Xr*LAo${ z4{?6r-513>Q)Q1JEl@O>8bHK1V){X4jxK^!?nnSnMDMRo_=!WCI=m@Tex@dKp(SYf zIT*zw0TN#k2!{b)ma6=tC|_@0zfixQ?{hBdcigq@-$FoBHPw>MuSAzW@^2%pa2^qo z<&*RYJ!Fr4&c452w9g@f*=tWz7%1^lpi#+RA$T~{t8vcdY1*%w-xKO*rei4^w5^lm z9FKf&L{Jpc_}fs57@~Zlo!la8;}JC?U>9p+WT)Kd>vODI>huVK zT)q;~WvN;|Dvz!B74Dj)@n^Z@U$v8Y$0($^VT!EebtKU^-`5x4mdf-OogQ}$SU7U+ zr=?q{-a#=m*Z%bEU&zmsv>T>OdYP#DLXhB2XEa8=l7_0^T%DaX5%XXyUM5ISfh8(Vtck~SN{eUG1RR(wy8 z*4yeYFFGH$;A5x#Jn1@i=fK&hb>oftZo%>lwE7^kaW+}cWm#7xG9*!1>-4x@{6tFy z`^5~6UZ<$ja)!2pmfB&2u&$}0P*Pj^oV6J+>5L<<*^vBb@Pg$&^((q^IoB$C|IQS^ zS?_pjY@Wa6QKV*=V}W|xvl@(9snECW>%q+CE%fAd?`{%Gdy(*U@WFl5fCeVk3vpyQ z^SDlqd3P+F*OG*-MFpD$(3}`;myOtc=Y3wLm;D{)TQSbPNHu@nas6#;6`MauDjj)> zxF~w|++^HrR;}2ya1wmo@^>xUvONKOdAS>HA%jl~iZQhyA8b4QDBbgCOZ;{?FD#)@ z1eEWvq;JnWeWo3s?Y8B;?$-ThZmvhXY?NG zHO9X7S9<_#KRj7XVFzfGhZag)p@z9-y`f#BBMab256XERzDIf`?|P@eU+F(l(tpmok8)7* zcM8Ud+~kC54{@~wEZC^vG&!^E4?xCGMluT!HHRx|??2kSUUO6g5ST4SaXkK7th=}i_( zJ!h0-j9_J7heD3$ccROWZLe1+f2P0oJG3Q$F%ezgg#gRk5m52E19^MO zF>FG~jnAC?wG49>8cwg39_!{lJK;;QV8U18_enqJQ$9UD<)~m}fweqH=2JnA z==&?!3p{EMIgTHYB!7wM{VyZ9)MF<_0zuNfKjJ)*s@B=j-%K$iZOb_9q);93df!G_*{5F~63EfKQVlf3liYB0DnH`3=$7vkL-Jav$RoNsLcN8m zATTe5e{;RYS@QRGz~06I(+5q7)||0}-Cf9sr-s}eUpu}U$GX`Q3&dqif%kib{d2neJ1a{Be~MEYatUC$lm-KyQU@hFL>@2^UC~-=<;pX_m_!yo|U3-QR&-e94-c%h-A^V zC4i@i==v)dyom--8dEH5AeYMkUQ4jtz zva{Rd#NSDC!H?QYlu$nt(e0gxUmM>Ciu2guY;Nc3Niv0=1<*qSToee%gimOc?NsB> zoiFxLbVD+33xJXo6sT)~z(z>zue7I;L}JTMprB>8BtL@hdj&s;nsq_3KbZTHLP@et z!3Xr&tS!kAz+@{y^Tr${)9`<<(kH$V;b(H)MLZ$Aq+|70l~z`e4K?9t1Oc7>m~2c( zo@gm>n5n(nIod_Zz1WrkF2WAddT`PcwNI8>sDJD4r%8G%HCctr3-n}o3=3+P7rIJ0 zOerO&ON*!`_T*~z_4Q8^zkRkV6p@nys&)8D@|CQj98%AVdRVybKHnf3%`u_J0u<1Eo)lOn-q*&b0>Z+FaglH#1kOOFm;Irnh%M_bBA2wC} zrn7(FUWqT?E0CGB(}M}%NZ=$|S>^<3LIOJNTw6_!^WP=$YbcEjD zEmuSLO{{`;?_8umF+v~2jw>RWT&x~32j_5pzfL^QL zgk3*#fsE~?&DN8Z!}s5bijRlsB3aj^=teoE#znuk{dZfc6b&;75YdIQ)(P9A@+2^z z1v8{}C+n{;YR4;yo-=Lzgf6eJXD~$8P$XMy>k1h3&fB`C_q#1}kUlrk*u&CWQV~QX zd98=dxSEr)=Ps5Cs1o^`Zi-t_-_&$`4{84Z3r8xoqv)`kFdZBsgwAWa)x}5mOF@Bm zk1M_#Iw4Prv(PVAJ`ZawYED*(t;gJ9yA*9P6BgA6gg5{c4^EJ2oMCH_SUeMBb+B-C zq!wMFBEc=C^8Vc&scoIduqAK>bd6fMxB!LywVTEC4_Vstb18VUK zHGj2|z#-JpQ!N49H{S@MQa$}0N1}Qh*e z#mfF>0T~>Tu;iN5o^GV+*3j719Ep91+Y88T)~x->=Ou$t*;MPbxusN`#fgo=E|s^Y zZEVd`bA!b6_gHhMH{t4>C}mN_7T03Jiq>DQ;iiJh7F$(c6Oh#ddSEPv*}dIn>$BA! zqh0rw1ve<{JR!8y+fqo{y6B z1q77uZG0dzY*MuJu8NNDEAjg<`5Lx&8Yl#X{v`;6{k#xai!@r4(*5%{-TS3qeilaN z<&F+M#icyDHeY*fJneJu90w{^AN>K`UKrbttQ(t_;c%P6xtH|pS0c>eEr`@Mmr(RDHEVv{->_o)Bsjcw& zfDZ1WVQ!HZ4R5RH7B>ms7E?gwQLsXXh=%aEjbguFb<6s0RU<-5nx7ZbSntFcs#SMixn%-|mbiJcmfnU&88RdbuYv z+zrA9W-+C42_iD?To%WIv`_m{lD<aQWE%f$W`oHn(6Pm*M=lU`Q&wYGUV^bWO7PR#>L)2 zT?@&Id48U5!#E=_s+}t8=eLG6=HPl+2}q(CcLEuj()bQK=OwJa+0nrW+$>5K7fnjQ za4e(p7^h+$zsI5Oj~%5}BA+;ZLV?t?z4|5^df#FqqAL+z%8*VEFbYcIbq2DbjG`9P{ra~?? zpD692IwcG+Z`9t44E|<)4^@!dtFC@Z z{g*P~tIMKDg6Q}aR=U(F{wP>6S$IyZy(F*rNtjBme-eHB-({o|VVaBZmsTvE?x0Cu zCo)P^Kt<77zAIUIwl|aPoQhR2Jn09_89_OWm_N+-Y~fCMS8Fv-PV}cDa2IXTI4Q zPjh?gwQzi{_Itkfd7n4tpx!WJd_%m18qdBYxnjFRWaRK zY{9*~fvq**Z5UkG5H@SnIfeFNc|a-yjbq>?7X{q?q10}kZ=2rFZONnHhp?BD%xmEX zwhCrx$A!53|W7Dg5``}76{XxXD%OeOtN&rhn=0tRTbyVw-#IJ_(Egc2d z`W@m}e(Wdh=bI?O5X!ePKssuy-R3_68~p2Y?)n{e*}CK{b*);6mReI7z0MCe2N(^x zWg?p2h^Fs_u_E;Y{s`1BeeE@I?s@Rs|BYy$ooTF#FLZ*I`t6x`_?(QbNDWb-n$*un zdL3HxA}4V7ey%-9%BVdSab)1WT@_3V_pQ|u;aZh)^mMU;vO=I25t-vg88}NPM9^sE z49mer?i#B^8|wUx-&lga#t=CZTKB;Epo) zh=jp~;1=D8c-jlpF!_b8W$S_AdcREDB`EArAsu$dK1~YpI~}2U3FNGMf}F9ZdCw_XRT-lAk$n6k!1rQVZILW@1bvZaLNtg)4AtHiQP zY&2=lNgb6t1TD+^@8^5#r0H974%|9Q1oY&k+8luQWQeR^m?EWZt&C*^)boWku!}4y z4F##qRdbHEyew z)2#R=Jyfw&)2Xwo)m!!^D_&w@107@-w`C5Z&9T65EONyxQG+5V zjnf?L3!KV8A8SFQt&oi;DU_HlyA{m0gw2Y#bIxOPiLJe7p``Xy&zaVHDop_^>L?V`tOxM)LUjFWV4%sHQLjgx^1TTKxBX}Mj6(SimDon5Ps7Frd?kKA=chHu z1GB3{1m|`{)94Q9k=i6fc6q)ZeyQP$sju2<_}ZMa-|)4K>F<~PwL>4GLkYX@2@BU^ z=$yonP=Rm_MHvpVz5f2+$J-RA-ZR=iIB}hq0C|e+m9#O2y)!6^*7cJbnlr>5PE%^A zPr-NMHrohM6f0PUdDGBPN zsL|E{(|Fx36&q+?UK`pxN?Yw)^(A5;Qc}#7FKPR%0D>c(i1;-_#_l8A5xOP$@V<*- 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 z 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 E1HmFk-2eap diff --git a/img/icon/icon-16.png b/img/icon/icon-16.png deleted file mode 100644 index 79e670f0ab5dc4db062c0a8cf43eb154c25f4927..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1238 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 diff --git a/img/icon/icon-512.png b/img/icon/icon-512.png deleted file mode 100644 index 18d66561bafe8e08005c72eb585a34de2e31ce95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56244 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 UZBU+241s@l)bv!#lu^O|2cOn-TL1t6 diff --git a/img/icon/icon-64.png b/img/icon/icon-64.png deleted file mode 100644 index aa0a456645fb0760a57c973c14755adec73aaff6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4664 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 diff --git a/include/adminlist.php b/include/adminlist.php deleted file mode 100644 index e7599d8..0000000 --- a/include/adminlist.php +++ /dev/null @@ -1,112 +0,0 @@ -isExpired()) { - $cacheutils->setValue([getAdminList(), date('d.m.Y H:i:s')], 120); -} - -$adminlist = $cacheutils->getValue(); - -// FUNCTIONS - -function getAdminList() { - global $config; - global $lang; - - $admingroups = $config["adminlist"]; - $localIcons = array(100, 200, 300, 400, 500, 600); - - try { - $tsAdmin = getTeamspeakConnection(); - - $output = ""; - - foreach ($admingroups as $group) { - - if (!array_key_exists((string)$group, $tsAdmin->serverGroupList())) - continue; - - $group = $tsAdmin->serverGroupGetById($group); - - $icon = ''; - - if ($group["iconid"]) { - if (!$group->iconIsLocal("iconid")) { - $groupicon = getGroupIcon($tsAdmin, $group); - - if ($groupicon) { - $icon = 'Group icon '; - } - } elseif (in_array($group["iconid"], $localIcons)) { - $icon = 'Group icon '; - } - } - - $output .= "

$icon$group

"; - - $clients = $group->clientList(); - - if (empty($clients)) { - $output .= '

' . translate($lang["adminlist"]["emptygroup"]) . '

'; - continue; - } - - $onlineClients = []; - $offlineClients = []; - - foreach ($clients as $userInfo) { - $user = getClientByDbid($tsAdmin, $userInfo['cldbid']); - - if($user["client_type"]) continue; - - if (!$user) { - $offlineClients[] = '

' . htmlspecialchars($userInfo['client_nickname']) . '' . translate($lang["adminlist"]["status"]["offline"]) . '

'; - continue; - } - - $userAwayTitle = ''; - - if(!$user["client_away_message"]) { - $userAway = translate($lang["adminlist"]["status"]["away"]); - } else { - $userAway = htmlspecialchars($user["client_away_message"]); - if (mb_strlen($userAway) > 23) { - $userAwayTitle = 'title="' . $userAway . '"'; - $userAway = mb_substr($userAway, 0, 23) . "..."; - } - } - - $onlineClients[] = '

User status' . '' . htmlspecialchars($user) . '' . ($user['client_away'] ? '' . $userAway . '' : '' . translate($lang["adminlist"]["status"]["online"]) . '') . '

'; - } - - foreach (array_merge($onlineClients, $offlineClients) as $str) - $output .= $str; - } - - return $output; - } catch (TeamSpeak3_Exception $e) { - return '

' . translate($lang["general"]["scripterror"], [$e->getCode(), $e->getMessage()]) . '

'; - } - -} - -function getClientByDbid($tsAdmin, $cldbid) { - try { - return $tsAdmin->clientGetByDbid($cldbid); - } catch (TeamSpeak3_Exception $e) { - return false; - } -} - -function getGroupIcon($tsAdmin, $group) { - try { - return $group->iconDownload(); - } catch (TeamSpeak3_Exception $e) { - return false; - } -} - -// echo getAdminList(); diff --git a/include/cacheutils.class.php b/include/cacheutils.class.php deleted file mode 100644 index 690f0bc..0000000 --- a/include/cacheutils.class.php +++ /dev/null @@ -1,61 +0,0 @@ -devMode = defined("DEV_MODE") || getenv("DEV_MODE") || file_exists(__DIR__ . "/dev_mode"); - - if(!is_string($key)) - throw new InvalidArgumentException("Key must be a string"); - - global $config; - if(isset($config["general"]["timezone"])) { - date_default_timezone_set($config["general"]["timezone"]); - } - - $this->cacheInstance = CacheManager::getInstance('Files', ["path" => __DIR__ . '/../cache']); - Languages::setEncoding(); - $this->cacheItem = $this->cacheInstance->getItem($key); - $this->key = $key; - } - - public function getCacheInstance() { - return $this->cacheInstance; - } - - public function getCacheItem() { - return $this->cacheItem; - } - - public function getValue() { - return $this->cacheItem->get(); - } - - public function setValue($value, $expireTime) { - if($this->devMode) - $expireTime = 1; - - $this->cacheItem = $this->cacheItem->set($value)->expiresAfter($expireTime); - $this->cacheInstance->save($this->cacheItem); - } - - public function isExpired() { - return $this->devMode || !$this->cacheItem->isHit(); - } - - public function remove() { - $this->cacheInstance->deleteItem($this->key); - } - -} diff --git a/include/footer.php b/include/footer.php deleted file mode 100644 index 8356ea1..0000000 --- a/include/footer.php +++ /dev/null @@ -1,73 +0,0 @@ -

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%0DrH}R52Qf`060BA)yprt zzZbH1H3chGp5e3p2yGCm_MNR@8WzhOc3-%?vxDp2*a`$oCs+*uc1aaw>@)&B)gu9I zzGfUiPZ@b%TS!ZLH+aUShnCm{g4DMpNl*X=gNvOYfKv~cFJ0JsRLU51sq1{yXdvn? z6}R1Wj{$*ARQnWyTDK{D0W%w3c=!W`E*cYcf3;b~=zOWR)=8>vk~apVe@+N|6K(ZK zJp_rij9>Tj1k=P4jG|7qao_EYeNY3Ky!={z)e{NRupI6a3N_61qvgKZ=`53 zR<<5G7lx`>5UZ89GSVXIb%N@ELH={eM)ap^7O=Ho?N#4)0}YwKna=`nnOaRL3>v!D zEH-O~aTr}oIQ=+iunO?y_PN%m!6k}Odw;>nGg3{tC{5`Y(0%~W2ucAxGgT>ANK-T= zo>N58q#dcmp$(xO{Dmn3`%zpxMkz6W3 zK}a`sqKVDT0n=`~^Lxh;t}kz&An@HCr1oe>=LnG;2>kZ5{*~2WEbjNd+!+lG?rJ+q`9`|m%h5Nrg5D3hb`ceNF|K~scHG#ix z?*P~9G41DQ%dso1*IZ(#lP&b}H(dYz8wN9#;@HOVL1pUEKw!*+cM-NrJvrkyICj0jYD_8<(Q%^79=%eTx@n0)7 zxMH3d`fTY2viO)Fusc$xtmsgVq#V-$TCS1gMkTgJio3=+Wt6Gr z@=r@lBsqG6Lb-WmWvsqNK_1LRy~az~kVHyv(0te<3-Qu{$;Pl%w?34Qos@d-uHxiCp{OIFpeV( z|M{N)&rdL3uE(yiJ=QE9uv~KQ>9Qm@*cXr0%7?Ak=V5@?aqQ^RJy?HIcorey!(67I zG{XdJkUP4*JyP~7_&uyXfn@`U2T2KK`lgw^5)xZv$19!(nt#X2oM#lqlQO*quje4H z-l=tT6D!;|fi2MW-9M|`+@{gX3%2Nx98T(~y?%ij-AIN8;CXVCnnS_zmnSMeQGMzk^r%h^4n$ipklO0$igMz85&-3#SBr) zf-Q_lmcZYN>|Z>f?(fl&=;W+!1O-{z0sw!4zx!V3I4GW;U;u#Y-+u$Vzjm-f9gT<` zHzqD9(2fAZdH?acUg7$N69|m|0{Hp0pAgVTs)2d$8A^7?z6pC6;slnFW#nW5fq#$f zqfWL&)x50CG@?hOvJIxu;7OcUx}Wi_EHea|xDze?T-XRM$mIr(jV1F}dIVeJ8b6pW z>#P%T=QVrp*8={&Uk(I+d)sGp?A|?IVEpzK%zynioX#h>UdJgg<54e7oc>WDaO2uD z!P)<#Sy>1Z8`b;kYwW+N9{(C!CI#M>v_ljATmtljj!eqDGkkXV3{2ct8ot*j5vGm; zmZIV3JZ~+Ty2v}_qu;3l1Wu_b$^d)`;?m)= zC9p|Z?P_ULW(|pJY{~+r>jmg^2Ap>jO38PtmLw+71H;GaPFCp3Y!tLH^$*$g+XDO& zWTPu9qe0O=bnDS}N#Hn_C2^d$t<<)jm^U_U)4SySIKI0E6&63w z=6}zH*WQxzrGNF#I+jQB!p;#|`S`YMU{Xp)NhbJ#^D~Y>ONqfC*i$#s_W=S+a)piU z#p0EN$s<%KkGM-|6y+K_C|I*)3!q?y#hUvF`Fl(d_(VNLD98k5<(7I;;y852Jq-61 z9K$rFnsybfw6qv3bo7#@7dmL7(v``q9F9&J&GsNfMq!igAQZmSb=Z1yfb52v?pp|4 zQ@hF_2jC0a#yF{}BykVL==DEe&zjavc_!+(yu)z*EgoJ8{B70JLXB`tnw(1F8T6mz zoOBCvbW?_2Iy#UVhAHmfHh7v0;9P|mY&LiEn^p+JlIkE*Slfn8PcQ9JA?!{yv)OVy zqW06xTr=$H`S~U#{*E#L2?z|JBDV?q&}r{IP>-JIWDJ~6!&I{7+gH9uURObInM$ay zG}3{BeYwCDQ2>GObmbONa?|l^?Owc6yJy*EK;X;I83e}8j?x@d2R8qKF5W{lTd%)+rYOn5SW_=O+wWDg1`j! z>SX^4`(b{R?hgcx+s^p<6h}2GT1{9o@(nAs=;5Cput>xtKd_~qz5Ev@0+q!`W zvuL%3Z|*+#xooyz1~j9@GtuAt!`#BPl&<6`lkf|J9{n}BeK3_7(wK2Btl5;rjtLR1 zpu)PiEp?jx8RVt}1vD~RRH}!(j;Dd*sugShkWC0K&L3s5uAVh@b>OepZlam89D(cz zmUGf0rm$H3dI_4yXUpgF2T^*56Iih3lG8@@3}At%Pc zM0m=OJr+JK1zV%waKS>s%$c4Vz`11x546cw$DCF1@8Fn@i8%iBAg5dqKV+XmbmvFx>pn7x-jk$BPt zrgkS~8r!PnZ<)yn0PuV|O+HQP6(C3*Mxxbo(rf=M^^++|PZ{|=+M+tQsV_?%)&M1b zFuJ2w?f5K%)G+&~oCmy{*|OK`cJ5!wc?bha#qxhYn~SKIsb*alblJ#Xv{eD{WvNl5 zS^#vDk}YmNJ|}YP+E(CJbeR0@{SI@FPZP`zY;X!tW<$-`O`m+^ywz()w;o&YoYfpL3cLs*l)-ABR7Vn{Y zycnB@_UK55>vEmsPLx;kskT0^vg^x#!|7=Te_vm2*A5z$3z+(>r@evTzrVxf=gUOT zdp`Y|An@KnVno5&#c!-WsJfq)zU3?<0GywmZU!23F&Ly$Y`YxlQhw|{S%t9&D}O&J zH6G_%qlRT%0@P69r!6q9?=?>A|Fp%89oFtqE1ZC?Z}aO0m7qK(2)t#CM;->eReSiA zn;+>8^@7MR`D z4Q!4SrP=t4u+jkh%{oG)dbLtN4f_9ee~e3e%m9g$DEy5~8?4($?ZIaTBA4uAV%p#W zsU+0>HG*tlW)Ty~V@TKv0mp4E;XM&`y$)z3=^>UTXCV=QwP43<{sGmP772Q^0sLJ> zFa!fF09q(RtjlwKll$Ll{7XM=#wy(aEz-iK$wPzDI!j6-8haJfZr$j+ER;G&M!41t zPLb6&mXThgsrlTEpl8);Erwf0DF4+8KRK1W<{ zuW-HEPZ0Qig&yL-RoeM|CASa4QH=mDua$Kk@d4(frRfFxKed_>_JDE5GP9~g_iC@p z1>h;O<$#?nv~=NWQD+K;I<9{&GM!SiZTt zHZ4q%R;B{8uBLx6fLsp(r-0yl0fFu1onhb1qrQ&|0{e5M>r7p;3TciGvz%k|3PZj3 zgzjzL`a0X_u)geVfS5aaN;sfl-)o$;C>&ICKyT?g)=b$+!I8okUvO@3F_F*UJKdwC zyjIJT3;r_3E~1|WoIAH5rVVH3--H5vE2e6KT7VH|YH1gYp8so|-&1oh?&OJ#<^`mr z&`2P;29&n+U2n^19TQ9*3Q5(LnF{*)9@J^>WW6n!;8FWJfWO}1lqSk&)WG$=X;xda zSDxA)bTu`=e)@CDL^+m;EG7=BEyh5Kigk|-Qt*sct=SvX1#m?I$EfYrUt92(e&s|^cb|~{Q_`(6V6Qo z>;`n-?K3~G=F0_tUw+=UE!4u(bWipWb6wux`t=(S0h~_*z%V?v+}zB@7T8BD!3e~j zSTO7R*gp9P;O}xhAp)LG9jTyujL01w&bZ_WqQ(d1jE3!V>@Xcvy=?1h+-g%msNfql zVLc@va9cL;?Z~@{EYNsyvVTL*On`s{o&5+Pa7i<(OVFFd%cw*a^sQ@4fV(dcxUH1p zqfv+ zPEh25hC-SEiKZ-R8+>P_dZz7nN<>AHa8Tm_q^PFxW>MoJKPxs=3;qfbjjasBl;|r8 zvgz%=)~Po=tW@R`6*R;^zb1P?>XYTNf3ZmoPB^b)SRi>>zd7(%N6exz=JG?pMI2I4 zC8Tz%x?RL&;c~zpJII02v{W-{J3*f6;v93`-{)sIKKHl(49PkCzJAlh{?IrcI|$m0 zf=32_je*no1PB1v?>_)ucXY_^;^5ep1KYdc_0p~M-1Et_GQT5K_#{*VJFGWe+SHQ;sf!ofXroCfM zs=QYl7yHdUOOd<)uoZ^7n@w8<{`$$9-gAvy^@9bl)f+yRMTM_f!cu)^2TVqq`oq;U z2K4)u0pU@KVsQa|@^u{+u6Zv5EH!>8{E;%?3~ns z+3QMI4%paka@raO3^bX0=*Ys7@oSYv997Y|=(jQ|HYlk{*|kJf*0%*YeV)_zwSq*< z$>*-@K-#ZCh1Ab@I>FN&)a~lkf>H5g^bC`@B*O^gFiKQ7YVOhi@jwp0A$8+x7~p&w zfC%9F^&7zDZ6`s(gPf|116R^NH@seceuBUcbg-{m=z9b=Eb2|5+C`W^y2~XY?>*gv zH`29Ka#IKD$Rd4ZD`i1zb6|rWtH@Cx0C;}`7~h3k45X@DCjX9j-1@;!fcmbk8T=gq z0Dk^`CuYBe+c-FPvX{I7ezWQf`uZnaMhj;|Fz53JUK&^&E) z{217I1a3V8=jUhGO47A%SM)K(v~<=?V1F_Gaa9Sg_{5|hah9}0eJvX?p#c%Qn! zkoj)!Rbj^~09_p$FK7QVDLAy*sB$^Id(cwch?ZwwQ{nx51~4Z#Tvcq!++Dc~+#UV1 z#%!Ywy5ZLafla>-HL4*LDh^`l_e$P}^)2TN8iV|n8fK@K$cF^H<{Tdy=jUqk8lkQ( zRmiQAHH^Se9K<{k6pceViw{Moh#-nwLI5QS7qI-^o!7Qo`#2hqdE-Q9bN6;puA{g; zbBW5ga~+3XmXs~)xQgP07SOjO>sQ+B@&;~8-4E?{B1bN^IlW5Szen;2w(cSl_`7$c z?cp1BBTK+cv3`rXzk8Z21TF~78__7}j#d3!M`g>kj-3v`@uT`B5CG06I1dJ{1TcR4 zbDu2P!+>9|gCRH79Zc5CPq+eng210wnZ_m8UKcVi?c0>Gxra8-G9XaDvs!a=Q=qD* zXju>}TctM44xL4R+fqNaVnE;D0IWnUZa|l5O?9&JP|lanOMT7YuLS_Qhs@tq9><3D zySMl%>?ec(@Ra~i0{H7ITrO7_0AP5;y1=6DOM$#QwZVOzwE*w$VCSHFX5^Xk5bbt+ zxCgB_)dPMiuLpcD=c*%o6D6*6v#%_))W2xsFns7}aKT?J5oyf7ht2j4SB77AnT6)irS3(*`Pr1K zqv(Lc$m+jB-ginDZAS{S)k7x)TR1fUX|b~oB49T{TI6eKBc)V0@=;pGOyf%DO(hFcgnd8iw_G+r%AxcDt~mqbj0l&}0)73{v5|rj z5H0r1-DH@|nvd*#H0S5vFv2GYe6MSx?GSeWnIi`DyPn_a9bj?dV2l1Lbk5|~dJoVK zwKpUVH>7xmS5AhiOE>rLE9u^$b%IKB^7bNtzbV@1f_l@RS-HR7<$%BT<>!3_W32|} z_5Nivw5L29&44~C1Oa~h1((-1Kma(MhN*Pa-S5kg0e*LQmo}EvwJR@Iu@Xg0%FV%gpF`6b zQ3j*lR}r3TSjV(7jZma^UYx_^|E`@%N;p!YYy$^W4(b_`tInJaQ#L~|xYvE<7NI}Y zbD(k&!tnJ38)I`@#M*XfvXBNpe@$a=7L)j|8SKIg#UJM^@u?H>cf`2+(1TrO9DzrF^C z*5GGh2+`UicLV$~3hCB$fZe9N`~(Z1An@az{BL;3qi~%WURT+RkO|ytFRQGFQUdy5 zEoF7V_o50aVdgJYJgB4GV2Lr2V!0?7_qP`r5EFr-y{TMU*4HQ4+-LDO{QUl3aC&;4 z0I+)lf2F|cyWO6oEZ@R4@$wU{e@|K1=aT^#PIua0*dO?9IZv>%Je}pH+P<{z5M$)= zsO)-=;XCkpTIvDUtoskh{G8pUikvl=J-OBn?cPIQ#*!DZIprUIJ1XhAOyImFw_ieB^E>pM0hDeQdpBli_eGKm5Jl-?!9h6Y}BaENf;m%aUyF_*e zi=fv5Aq2-}!?_uRA=`gqDd0IaPyzlr3j>8r>JU&RK^IZMvYVa5+gCeOCq*X%+4;dW zgBb(bZDuHppi3!p#?|^%yn4K;c(D}lJC7H-G|oAMOkqqr5nT3isneGhyv#5S_?wo{ zdEgfC7gJI}kua7-<8|8}sQo5VuiZMsoGRZ-N#g|z4ig0ioZ?s0ibJf?D&+YpK;Bw8|1*H-Dd$?2{0SGn&oK6EE09;<*0Dk~0eTST2vd0KC06wC705W~IvQwXa(tTXl^> z!uSkQdXz5Kg_JSQP%mBxx&Xznjc+egkPNHahxm;8dEJRlD*SPSoyjVGsQ%~o|AzDP zZ<9^;@^WY3udtr(GDCd_gZBLmuHS!v1%UH_0QXiGm}Q0QFb2KO2PtY}#KdtI>xV)8 z9lvw8oK*t=r`meJ(O&pLvw*`%ijrZlP%^M+Xls2)weB2hQwB;ho;^S!?LFlnaBDr_ z7E$%e1y=c>uxc;~?$0EUyP^z0$n2q*W7l3yeVZLw*)zTe_AOy8<1Q{aX3{g6SsbCxmcC#?k*T#nh0sum1j7eLoFyoZ+=3<&~8n1bU8IIZ7 z=Iu{);IHd+uukT0YROaehC@Ab5BR;g<}F+I z_T?uK%pmaZ{{_w2R=-Tj#4QeIcbFaQ(LslH_q7oORyLh>o`#}8_>%OQAXt_InVU-* zRkpd9ZM-r=csX~z{p1-Ekf8&_4g!GKZ>(&*nHf2A) zzT8g+Ah z0l?JO1CCVx2eWarJ`yb4Ke4$P+P{~l`p`{=^~h(o+=Cfir}4oSyPw7pz%I6*Y0wf_ zKA29q;QKxk2HF$rZHmnd(o!7XIbHTG&gFJbo$+gcz^1vO9DW7@C)c;d z9yI!zHU6Omb9-Qm1A(*WvB#(}hqimcL~+XOI1iHszJC7>@cst)PRu$E$1i;LLl`4S}#Wv zeAM-f25=ZUfxx#p;ve$-P-czdTmx?1-~Qd~S9-0bVk*Kt2y&f2k_yJDz8)}CfWY?J zn*G~2DO7kgxcBp)3co?cu(UBt(q8?$gR}LX1meF62yB`g7}Xzbh|a~GqT^l4=N|7M zFD0^lLPHv6gZ<^A7JNyS)QX$|A0qdDXd^_8P8 zem4OGzNx*8V9qBvBfv-i`RG(vrM}fHDIEA?9bIR7UsCMfn!dW^3CzUtIR=)LEfMUs(Ooy1QkH z<>Rw}zuX*#;O`^bXKuNk4;{yHCwuPi8~A&Ddv&sl?(pK;hDX}JcVa6M0et-mm+J@! z0H@OcFbp?3gxoRk>+K2LOXgB#fy+oVLxpfz!{h*Q?`W?xpYRXE%xsxw)OT2NNr*9${AsXzV=7 ztvc=YAn@K5q-l2};;6AS6`yDuW;=Jh7a@F5V|5<^p*|BC0?M^n)Z$0j5|krK&L&4ieZm~I^Fpc3g2f0Cr7a4BK^2FLFuI8p158XONT?A;nU|Mj0lT!%3W7hdVf|9UPTe2;RT%8yx;BaRackb|dwTC|>EbZJ^9>!X zDTf3$KTCgisB4Vq(GkiQ^c)cE{E%DN%f`Uze1ZW0E<|9z{dofl##;lz92j<|nMl^c z`1-nK0`Cq2-)wQj_KW(bW5!+;5`@s8;u7B{{dnbGC>59@3-JC@7qDAQ`HTA~K04qz zRU&Tu|Kc8(kA-ATlRnJ!s>Wcef5pJQ&#V+ljown+# z=u&e7>eX9OKi9r@sr!4rUG8r#8vW=hRqjy*S6z&<6z=In?hOPV>GK-~IGqMS0JvO7 zfUjTg#AZL(`N`Q4cb<)OeY;l>_=5o{p6M543Eu0Tqy^kipd;o$V9k6N8)Vc+ZmQ0H z4OSE0!lr0&>(?f5TRUg|a)G)7lxHww;+*h#{W7{b0)MafJxs)%ka|18?;P;uHpRdH zg3HgjECnLq(|NzFXza0195lQk_$y7V!RTC*moQx?R74=kPj6Ze`25sf&WAo=7O=Y> zOzDYT*YthpoT>QPZN1Tf!1rQ-P*aP_D8IuME`h*wxoqv(B?$q$jh(ks-;%)vGaux- zY_KSYoz`5`9m)$nT=p+G@_bBt=+J)e4Fa3!FZGS6qG1%w7sQ5V@-s%RfzZ=-Bw@9#j?#u+u1Q?MBH6Py}?cFwP-A{|1RPi_tVLZNT;s11>J zzCUGGWg|0l0UN(Wv~Kyq^&aZ}?rvcoi3iEoTH&#aOY0xafIvJn^P0`kGs?jANRuhe5a~eZXl!K>jKjZ{#n|w3qrt7 ztvwqYCwAMIS%x3YOYJ@~l*3eO&Z2e%c>A00tS2v6*r>uWN4&ur{M2K+T`u_h{(k@9 z?{35PNPw@qeytD4z5ayj_a8t2Z~}ngeCiJZ_X2;r*`kWMM8OAyW;(AJ0|qDidr0g? zvh|BiEiN6jo7Dpz%tSH%h#>GSlu(k%5!C<@RqWWgN_ErkefYx4>KK=l``A}|w%$jT zy(=3dr{oq{pmmQHScC4+4vA#(NH7>%`l!&@>v9Z~phVs9|cfx;L+BO0+zXRIK}Hc0e-*+5_GTZQCC zge{rgwD3b)0JIr%uRd$z9!z;ET59#wP1xL~zL~>qk(S0W zZ{dtKIwJTxIfig_b$HGva|8(7$Lj*Sg1~d8#u=xuoXgJ_fWQBO$0>HW7a+_;4cxoa zXuNJ9@Nc&Ufqyj$)q7hL(jKRbR71nBf%h2%Ze0tc{Ues|ow&0Ya`t_wE^EdI_h?^X zXe8H$ahx-MHF81)ufxs*@tHaNP`dlezc%pq@(!@lO5XWpZOYkDXtx-6JkXb%fNtiN z%Ntz3egjK0b?^DK(i``&qZ@3!Zb6x-ut8~MY=YAOa6W@MpJ6zkVK|-Up8b{ znj7b-gY%P@6l@xXQm@2a)B~mmTRL~3$Faj%sRTdM5Yl4d5Mr;f!ABB_o>b5P8ZNgm zsmH!w0^4uTLF^w8MXkbIBgJ&EjYWKmQiT%tuZ(+pe^RMGyze_d4hU?jUs!x7R%DM6 zL&ID84ySHucPAe@*{q1ZVc0{m3|7v2f=+t@6p5;LED9s2iWB=V26$PzZ|wmp0|H~C zO38w$;5p8GYKkD^92J8VMUsLu7D0VtME<-&+VwH7k?{hwP+^9}77%?p5Ci~20670N ztoYIhxWjGlA_~ZoD8=3mGJY&-qdN6H&eX+_GJ!uDhR_K9!Z1t`&^Nkz5IvWf^q6(A zxN^AUAsHvCehEnNWGs3}4n*v95VN~nJ=SBKF!qo{3epKBv zUg7%weq#{$6a2j!_mQfeu(baQw)OkZ%DoH~DmBGQRG8t>TMVT>Q|&%)z%PT+CmW_K z)696C=36ZvrS+=uKppa_m+oe){^MWp^!qcQ0k~c+0GG=Hjg1xjJevB7F6fJW?aSTw zng#q-=r?pjSQM4?+cvfk~0H^Z2+R1X;T!~9JnMsee8<8@5Hwn`qb4x>soCl?Uo&=a~(!P%d0-N#| z(U$$Irs2+jzwWcDvw)q&!GUhwBC@f+-Qj_TwF^2dJloe$inCg`_iaOrdIjUoQB~lq zP-Bz@O0j~e996pvh4eKGK(S^J2f%XpESLHkm%(5X^FaW9HRqi5oN55fu=dS*2lb#< z1WjNsqTPUBXFPM+zh&SrmCNDHeJR-GF+HJXs?!veJ(h|wa5|qR z2!a5vU%vrd-embB3y+f(oSR3Tp&K6{>|=EMdV%Z30fE2#>t>qbV_&`KXtDDUc3PuR zfTi=_x0fk1^iW5_-Xf@>LhgT{7WGZ-{Pr5#>vgLA%#9Ncbpx%=NT;r6(c*zY1E1GU zy8J)>1y8?C0M7emd_3A`Ycob2N{4CX0sQU`AinLVZ6;ZOum6V2IE~kNFaYP%ZO+ft zj_Xp;7r~qcI1K{~h*ja<+H?lPoPkQmsUE_)EeL!9065K|tG_Z8G$v+}2?T3lkn>M} zZU)Kp@7(Dy2V$0G0VBu-`U*id!7W@$Y;sGBJx>K)e^#M+cBk6Eix0vaeD=d##ysoM zP`Ny?-_k98i@@?p^Fal7Js>>Rl@3$c*Y^5IAh0QZfdx66bfHLT?Epd@?Q_ln(nZUV zZULf(wig9L`%c1wfnkK0kY=khu7rqm^5!8ET_1p^6pd4DW~JOuEOEATkwZb2F3ms5 zc@AYIiA~_lJMU$WM*R#^#Pa~Rxyqdj*!7JD;>dSyIyDZIl~xT6 z45!ls2oFPLFww23=&gFxC4dfbr{}0QRbrMY<0*WGy0G@t-2KbME9j+-pFSVz<^Zryi50pM{h?&5zg&=UQAg?f9cO_P|gFZKv^Q&cO zst7Q+TmUYwf^Hn@jVshn?u|2m$==vtyeA#j@e0A;#i{&AfID3kW8|LkYcl(9sr0y$ zU1c+g0KWYRm-lJR&U48TwQmhOjR$JRyD%f${n~(Fh5=4EWynycSW`RlbcA z-atalX{Ht@dMqHfdsB5;oPF{&DWC}e07au z1j~007i*nsD^g0Hy}o9G0K7wGiYhuVvQp`zES+@VJYTbb5$JjaLh?5;q^Zs?mK0h~ zA6NE>irY(+DSLn|J5Z5e!nbc@`R(4%({}|2MUk(o1&quekD`@1()MTpe+l3;(e&Qp zsyR@#g>!9()g`01l;ppZWM@Ex(=dQJ4FE$8eQ4#Or-wmZ`r7kp%ESPeGBdvZJ8*Vu zx>>`MbhOmw4yZx7gy?(BGpv0qy)#}XCp*C8bl(*O{>8!HCIABuTo;vRE)Vo`*8Jsl z$`q}6e^q^A?W?fjah;qXh<7FeRM!5>JHYi#AqO30Ogqqs#|+|U25|pzb-~}O^=Y4T zf$w)^%M&9jOJ)?xC6~I|F?;C=DxZH%Gk<)8%gYXAtXp0wX8nLor+Bl z?`nb4ZVgF{I$0o(rNgv6?~c!z><);zvyq1WxhXuMq8~b_@fh&;_C5lt^ic1&#vd01 zF0*r-x~KW}C>rd7zg3$##`RaL4(y79DA7JEDwUmEWa1(7OyzizuAQWub8mrC<`9Ao z5T@bRH&Sz*ag-9BYw53X2c3z~FCx}^CI|ew+u<@!!wLY<^)k(^0Waeh)vLM<{5`7X zNRyt$x`*&}PW6W@to)QCXy*+7Ml)M6`@y$*?qd%_{XFlR#(+7UZqjUQa1qo-l)KUF z=D;bX`F$re6A)~$fsmJlhPH_bb4+KXvysfx)G6>Nssd zL1{$~L{+)$mW{*vb;>9#510qw1sVkZdDyRL5lmn+CdbYrJlQXjfAv`~TP zXzw+IN);Fc+NH9D-`@eQ@A2Q!1mN$D)_l{M`d7~6y|Iq};())So#af~v+mt44-G>^ zHL=Jsc1?|frS`_>n)&hru0Q_XZ0+-$!70A3L)I_uXtN9kPJ77doA0^!j^>2 znF{w^-EgZ+U<3qsep2iW_iH-#)yw&S22`BlV)nN<5rBt}$dlkSz=Tb{Bntcn{F2AY zalG9Trv(JAp@Po&Y`wC7I5f!S1&G_^_0V*;xoG245%T-K;g^#h%inW!U`0cJ^jE_E8SkZL!qdmI3ssZ3AqZ@IBltFuHj zzBU?Hs^^UUO{5sDY=lNQKiIkqaI4L1GIEEgpYFZf3{h5Y%`*}i&!Q8Y`2qsacmV(_ zWc}``MCm@8d%DI;9ct>3p0_ zvs2Ml-=w4(mG8JX-s~Yq^iF8N3_)wK_U#Fsjh$vI6Qw$wrz~;;fXmApz>jarJ*Tv< zbR%iSwy$}tEK;4L2ceq7pzW8-lyL=nfWV)$&(koN9c8=Mxwl6))ex5x0RR}^rp!@s zS!#Ggu-nou-+&184xQX#rc_7R1A^Rg=UW1Je*+lbdD%wOuk27uUysTZB@3Tdr^Wc? zUsD+Z0C*n>;O$+0zQG3?hl=xfYw3@!N}|+O!}dPDzryv~Uts53&Zl82!4kb@FUsde zFnuLN8{pKj4led@=^8{!2Q!Qu@iy{Y1-R7%wv}FzTiEr~QD}_w2kdu>C+~kU_(t>pjX2w=wsjr6!6aKFK(eO@J3=UZz4ONFedqCGr}4Hy8-x1OvY(g@&p@{9S2go4g#`%TTx4W zO&#Vmq&B4bMUR3qA|D}>6^>8?n8)Xxw+q=Cj8BXqotj5L!X~IR(!6Jlzk*Flyw9w%J`LBSyKLOX%xO|=$r-vFql0Q zMrV6i0D+Bx)A_X4CAQ|1-SAn=!e z?I+KlSKBz=y@(lJ#>RJm%iGq09u&;!`YE8IU!jh&tUecM*M{|u)%zGUl<4mK+1o3? zc!`H%0e_=SwT6lr`^*Q`2ApD{jKg;3!rV`RVe!%QRqBes-?zH`>uzjw+pyMqm@cgX z)oPb@0K3Nvj9>qRac;(WFaYOMz;M>uL~Lt2e^3E{xm--}=hiLTWPB*Ks$>bOrOZhZ zJL`tSGl5U1d7sh*X$szyhogeV=5N$wIZ7Ht)-1FeX)&oSo&xSX%$0OIXsgM7MwRo9 zS)b49*1ukSo9M32iMapj!annrKO$iIcp%6r_jUpR>%fcq7Fv7||AD2uY$J8C>5lD( z0Xs)pEkDHkSd!_Q$=z_VY;|dB;6^~4P&?BFR4Ma$$pEKls!5@`k#RHn7_rpE@nQZv6MOtA?2SZTjj16{t*(QEmM|3_DH{V(buLQ+JR4 zZt;t{ou>Hh87mG`HC0t8GNUOop5$c&Z?U1RhY==vwP#J6Ti7{N5foszy1#~r$UM#@ z+ZX)Z?!)G+-;S;xcBeeeb-w!8YI|k_2O#h;!1*))&fDkp+g||huT@Q}Z|q*Y7}$OI z<##-gC*LI6`Sw0J;Q=P6d^HICAyJJ+U2k_1ZE9NsyZK%?5Euc*>y`{b8LEuo&w=zE*1_bxC!LYrl)`I=|Z@A2Q@{9=Pe1;y`xpEk2;}9E!(_o@M z(+;bu_cMp}v~`4;a12Fj^v37&cJ3y+i+1kjmq2~cJT^71oaL>TrYYTZ^V+c!2z)PF zQDPRT!^qQk4HCKV4s`8%;FReq>L;_r*09K`6~g^)moGTRVmGQw)TZ$Z6MY7r5%KrYiEfO zB7xkPGm-t;Bo-_XkzbpcETm{n^7Dl9IW0q@O@%{?yRKOcJ#)=7C2tWqS?co-xEbqP zTWGEq#zh((nf-g~n!jIP)Jv%7lhO0?<&(xrr8j5dkjUey`0)ACMN&<)h7mP9Rp)SPyZtiA>x}S~L zDbR!{y#Sj`}IH%?TYWNeq5_0kF)zfJ5hukJ8B9nhfBMr+~YrfL0>F zy93RFP6YJ8-;0GQ!@S6bxzivcy6&Spb_0U{-SUYL^#f5O&Ri}{3bO? zWhSb%c0JvN@MuaLEY#2E3aY02GRATV@}{$cfDSO95N1kfWAYB8B2QC5Uft-UG3PU! z=e2Sn0{ivf0M=&DGsnpXRceYOsTL)#$(;fNC0SE%Z&OAVl!Cyx@8VMbbjqY_PNT!d z&h9+sxYtCv$_9C$(2i40SxPYNuxqJTkZVa6VSzr`E4{q{(8$c` z(0Cp!=?m^BoA+r5KG0QBL<14v9~=04wE*-6@UbOD0*VqNL9c0-@w zUti%e*M&AP*9A64{~YW@^}voj&fqV0(v~s-ZDlc-M#R(1j*f`i{p&xhF={Q$Zk)f^W<4XO!1h?Y7>x52zD^WCX2N}z7 zJm$!OD7E$|@QGoiMQ}X#VE^?)ci%>Tr0*L9HmaUzNc2NmXJTwu4V{O;VyXgvsYTX9 z+Gi@{8Yj7JZgws8o@i1UNQwi|@;D3*Nm!Q6M5|+E8bfj&E*2z2Hq#FjhL2Q-I86Q$ zoML7QZR|0w-m6SMg%Ad2L|MKC?RFxfIzh;C<@y;6nzw0%GC*wPG=Tu}&y}eGE zS>S@exy&)x50tI0)O{~r8ryF@QOD(Vi1;CIr`mC%ecdgqCIcw$Au8Iwr~_85qJOy^7G;yz<{9}5~juZrtG{(z@B3vaXlwhH_W_qAW}D&Fdj0)2O| z&kz89euvA?m(`W@G#G%>P;lPH&P#r7pg}kzvQ`Kwx~H*TS}QY_hLf3Qe@xkV@9?E_ zK5s!)R63IIm|4JU^LvzDOV|A^NfZbZe$r_{^;y7mr`BI@Z_#B`Tc@-iZob}!0D-ad zbChLP!tbhM3@VAvQFD}V*A=xYg*%bXnr_hDw=o{_`vrkb1k{q&{w$z%3hVQx5Cm^$ znn6FhLG+`htSl7@rbH*LTBMkMt_{YWDi7+IsCk??s$eQh8$;^ultf}uA!AbBYRvP{ zU<}Tz&7c+KWvoWE;5=6ViY#Bvyl+lFk1nJ_+3XkPc265vnSs(q{ap5RDw+@OU_e=Y z_UpOSl$D~E^*#(!1oKVC4i9)@vrY}kaEW3t$|>*|8Q|M*u082ecdxNRNbe#@*WiL>+! zAk>ScaiV{vBNs0oVL&Ms7!@?PQ$`kByTkhP`udXzSitgNQ!2>lp%S9TT);OTupmBl zTJaTtzhe{l>&*4NfWT}Z-Og=Gszh=fIX6CG)!J*04e|B@m+wDTKlT$M;Q5qTnz(O2 z46NX9PR+JhL)bQg#pk4r4to0S5j9k& zwFSbk@~K!QWA`NQy|aMr7>9Zn81#@KU=+8;@YOxK9w+sGsTW5Q-=Yx2|w*FJb}b08k8{m(q@5(8v1yz=)s# z>~txgy}HN1km{3KaYxTY-7{4aD^YIO9I!C}L8(UgxH`xXXFx}_YYPZ+O=?#p=TTU% z_yIfBf-BriG-eu+qY0^#-q@%?XdKm%HXqZqQb#F+jpI~r*ltl_T7z8|1&SREXza%{ zdow2y7TiBk@ZBgw@BRs+HSTCX2d$CAx)iV_g?k=l^F}4 zS-ZEp9Prm#fbs3EpAB>`^?+|#{=pjpb;iZ58(Oa1ukUdE`fV*?cm{xhtqa_ndOOxn zC!yvqcOKZ&bFjxONSVNoa=y&(s3rA)kC>5O+ZQ&;SRSy&s%GcupXEKhAIlx?ICA%V z!ocL`B{AScqqEO(pa^_O5E!*K2KLf#iEo)qA2>IYm1n+fkGe&WH+Eh(^bqaj*X;d) zz@|JI;J8kZW~Y*T^jvD2TYH#-FIlI4u~)NI(e<^yt#GK;Wd4c{2?h9@0*_0h-)Ny* zff&F~v}elzW+H3nXOL6m97yV+1}t4b;4mP7grVb%76F(dinKCnGX8SAH6ql5VUEz! z2n>&QyT17Uv-f9PlH)j+C=5_C^N6gfuUFOiSNHor-Z>XtRhbdtZYGiVFEo)9NP-kK zn1?HuXSkbbpg4d4Hn4%{IQ&f46$zME&;Bi~wXqfa-6RVGZ6~3EpJxul@1N`)JIeLS zlyD^3SiJKs>Sx?)8(#L1gTGtV&49^Lr0$|%-nt<0c6B=`5&VR~TMPGbO&9>^e*7G2 zJKAkQ+}M+6NK|2F%ihi8N?BYbJD^5(6b+eLUm);BjKM7I3(tR7&M(h_z+lFjvlMAQ zWo&!`tz@_Q<~7&9f~vI$L-Np!nZKMn5F0oo^_-5V4P3Lf-&Yo}=odH~?uZPC!h+PA#u8-GfXUM|676`01-*`)q zAo2@w9%dBpbng8^m>>rNJK!+oC9Ti`8na@XXd}&F2KZ|`5R0PQ)d2odSxw<&uHcBP zlE}Xv2Z84rmttQFTEa8JzaOb}jVVFTM&j3~TshJ^ucEp3kP}wlkO3l{1#Fgrr>`FC zkB6L*nkNV;8fe=1cC?FHjk4Ff=*YSb9XPG-Z*9XoBta#)MSG}}wX4B|K;V{>*}G5| zx`7bQt%WIPToXY5pZ@}Mj|&@QThw4r8l8$yn+xh{Kfot$)*X6+#=hjCSmu9m7V0M+2`X z<+3FBoIOr)*263gsVgqCd@eY;?5Mdb11rt-_&HqNW4zp4pi0+q3~h$Ab*7TBF1$ot z;K-Umfd_20g)JYD=uviE;Kb8Z=`JH3qm2D9Exp z?2KQ-)Htqf$Jt2KwaCBb1z< zs)ZE!Nb3Oj>(g~p#kox2-xY3&Dj>41b1 zsFMKx^KW?ei(Y$gaLMZ2BvLS_>fI1mt=ntj0paOQolT4kg z!NSYDM$C^yMeV_Y-94VAC-v4Rt5rKU1%$G%Fi}?uqVH(zDZ3_e=*}SuwE0?$ zI9_li*~w8qy!yQHf(n2{{MF{`be75JEZtk5V_ zaJT5`oW4)SO$PzND-f$cS=8(_W<=0Gzd+#qjXxC3wb~T8RKDCw zPe$-)?;{9|2laW4XPD8}F|un#r~&TRY~5SnFS@qe?BL6RHn4oM5FJ3Ni8Uwl z*AYAZ_D{Iq24IC|@Yn1=zGqTF$@V={?p+rp#cqz}7zk5wZqdn^9nEktJx9kl9V;<$R#2&+h#1*kbCuSt( z_n+}#L)@|GpgbwG_U@HhF9b*KZu_tO^Fd%Gx`9MW=S~<$H^y~|S^IuLU^?TS5#vz~ zHO6Af*0gESLN-8f6ILE2H7%g8A*+-gtqt-}wlP_o0V*bgdOX3-Sk4$vcQP{+(!`8~ zn5Nom$M~K|5&>g%@JJoQh8a+#Mu<1>5F_0G1nYOtS`cQOLuMagB({PUu|U1vq^K;@ z?}{pzv=t@Wyo{=2opYSC=HkB>DVe+amNVt<)gpFR=UT$`?S4vBbS*y10HnM|cCd}}!t$5q;@jhg#rfycuzgb#><0vmNRz42^x^C## zmHpZjf@hf7x46^%uF+3lpzfx_0)L08)(te{hlH!;X3RM81S(@h;)k}6?&j|4N zfbOp!FwM3G0B(&6&xP0=nX8yBdt<}YgCxdMK0DlND;ONJbB=M5pA__L*8_fqEZ`vB zYu+A5o1Y!&t1J*W{`-DAd^reAyRE`X(_+IaoLzVJ{*5Z#$%hbBU~Qqp#&NSJB5r7A zW{|&c_n?3`Xnm7W!&bo12(|8NMsqad(N5fsmyYTIVMF9E>w*E_(k9|tP5SDHB} zTPZbxU~WQ~6ILT0NY-ZzbX_;77zPHX{}%{cL84LG_Niqh68pzS35i*+v$pG)eed~U zfxwjSXsKjQ+j`Ljl?T~r-E-(q^fX3npbmNB1vHhU&07lu{sN1g!vlYxXMn$soIG%R zd|SIzP7_q7L;uWklzF$lgZ@ANg`O7G`rasjCWE$A@%L{|=wUo@6!F9vwFLyGEzcCy z1E!Z*4ylvnU_q)cD4<;C*jco52gE#Mdt?HiCxfZN)d(XM1MJY#uy2KoC%he*Z>j|R=Dswd;42A3cvS4v~t1_hJItWda)|8%H zH2yD}y)3}nAkL;{YHkq8myAydg`VO?A;A0q@Rw5WZc#y7S-`dU>(5cm!(mJkD&|_? zZ)p#1rhX>L;w&2+%6`LuQhF)sX9_4|`E`G z-aq#l3IUW_+Xv5&fwow@&(^A2%jpx9>nQIsKulYnkKxDvS~ai>b$r!q-ke}+tTgUl z0I&G)!QZ|=5B#0R@5p+<)Nh+V*)-2*>?v2+8wHv^8PNaz4?HdR$QvTyTo)MQ`ww$} z70CWQLld9_M_vf`e41mZ2Yg%hube&XG#>+IjUaBF38E~3{O+RF|4X_x{EoO`wcu{6 z`FOj6gkwVBX8&TW8aQUIhpT{nn3_e_50>0q${d=hGjRJ+rX57arGP#~!1;K{f%Afn znV_dV<17$Z1z!>+lL6e#SF{OR;IC7V11tBYm-SoC7!53j)&7mVA3_5DuF{k+UI*Dv zosu{hsZcewGlAzHE7LgSpmnIOm(OUv-&ossYP(+p*?um10$4;}?Spdy`fK7ygP7?= zIo!Fatlx@4APf9uOonNWBLWf4S->*&( zNvuWMM=${B-P0Wtga!P~vfl&_XDYZpnsG%H?o-miUm$Su@WEfL!@(Ly%iSaP#b~f~ zA^?3?;P*4lW6T~C`p>`Np_hKW!&DbI(A|-MfyQe|ja)oA8KhX{Ykum*N8%nInGc)meIi&3Jdzyr2uL*Utw6D;~rHVf|7_(-Ax8 zFqyx#cpZJG1PU^1b2P72&0w|&up6mhgTNuc&96bc0&^2>Q|Q)iRm!b->{DM$D6joY zX1{ME%AXynva+pg0LtEX3^@iCn(@V_EM-G$R%c`eZUqu2RC(XQ5*>S7+JupcpP`at zcEkhe$htWY{Ka&@2O^&ZED_7Jn#iwUlx_!qC5F+~O`KM0L8$^xLIVjm^mvAOe5veT zMlQ~Ee{b1!e_zpsgN3VT>nhw?I;KUV^{)z*ut;XE44DjXRs?8A0Q$fG5rB@u42qYW zRTW382nhBmunu&9tCPo5>mlQ7Jib8S9p|$s7^6ZDuwa9kbnqcq(M9)JD^9^ImwEOmi79V$GQs$e^lYTgp5mqRjF zTQi8Y^{OE7*5h`&Eo<1k7!`EUzD*my9}kmv?b^?@IVE9NiMX8w;7VlfvC%d_+PM4Z zd@Ef44w28V1_Gn+jS1W**HyBj$d)t{Gt|ljd%&;;f` z|1LBDezUBQ+!3>bze;8z9k46mMZo;NADsW=@dX0!Io^^TAXnn%5KdCwrCWrw@@v!5 z05EkQf{m|qZTJzU0#KB^dRE-p$Gv1%B-rlp&agsw8P=GpHDAh?Q48G8d~dAT&d52x zdvdT3{u*;F@b{=aas?2nh>z)L(DyS;+Kp}g@fSQk9&@kHb%7@xJ3$rRf(yXrhDzZJ z_vR~dB-B`43IN)-w?zlIIu&%m$oM{=YRyh%0|(nN`SZhmJ<5D{i6_mH`;4gnwe)&W@%YKWIwsT-6?pqFt zfG)OPKL-e`ioxF;$Hy4iNmUF$!6dXP{-%g&8?>f~G0FkK4p@q5*-5ef3f&*Vnavd2 zD6qUAG37|`?vH#sa1wY@%54tKGH(4*blQhOUjU;(T))oxzPP3&HvxL`i2?!>Q7lAk zmrOviYc%3&6Ii~y68Iab7=zyLcE+yj2v`q-{t+n*ojbwkd9a9S7X4U%zfFZNt&;P*h zdEkNTHkK8?rmA>oM3sN;kOtuxwqpHWv_Ic@qLpnDf| z8_CuYYX`+jSm0VlgifW<=9O^1;D)+fL<9Ki*I`u*z4pq6!SZ=Pv8dNl80CmP;EU=x z>-d8Kf1l6m>I%Eo12&QMWBUo{I{oo7`dy{AzW;*f&tDD*{0$LQqmuTj5=bqqXrml4 zO87!E>a;9i08qCZIQ~EJ{(F(7jJ0lt%sUYy{s^LMB+=*AX7xky>?r|(@v9YM0;%l)iU5>>L%20i zst}e03;0>Ulv%m1Mm3(j1$1t1ZCWu1udK4Vzr-j6EW3il4`S+AKmJBV)yL&zjoXs3 z?b}-wGQlfC;8=Oot{6?9!v$cEQ7h7>28aC{qT`5qd^`Yt{B?2H&Fd-2$q{sbV2rE2 zW@r5rFF1BxH-G`-@dW}yMJHShgBW>XRBiVN*-fPY2rVG6|L(m8c*a2BQitM3@PVX{ z@b%XkwTs4EeoWx6)d!(~5yS%~zWuH{%PraxO!@@`Cyzh=33n@C@kw-H@b`fI(l1dp z14iaz!0)T*eYj5>yC*#V`r-J*?*Py?Y5M1wSg*+xbXD6$GIOr*-cFPrBOM*G5+w$Gr7jh;4BpCtn3 z#&mmP;4TTG!cw$EB)A`7*&^|M4hnY&rVa^ANk*^DNKct5T6T@%;YG>LxVGq}oorwc z!9xUc|0oEQNEc zD7!t^e^Aq!_zl5g4*Y#QUZd@}7YJ+?TbAf>tMs*Xsh!8#r?=M{y8r$Oz10IZ0JsNy zDKYT3R+g{y=Zsl^mzk+$!RwIkJ!}GjsZ!UX za7N>4E8zUqrdKwrs{d|BfWVS+l%i*bGKxWl153eY6}Wli8C0RujFkb5RXcx={k-Np zygK9P>w>^)zjsR1Dac*)VuNyziHijT=5=$3TAI5kl%<-Y5X8bhM4>SBYds@cv~ONc zC`J~pPZ!PAWsdrLA~f0(14HbiNT~JJSIC0D6ftTKpnQ&jzsY&d{l0u=NEb9|Z_{X- z2`0}$!ED14tH=>o1-FeHie^}cfZl+A#Lor}aF^cBbMg1IPDZx!ML>NQ;$mJ`# zmT==Ld-b4#kRPZ!)B^^qj`wf2 z7f?wr2eJ#3PW(OOC~i3WXb|`udT0Uw(t7z^sqi*h)ZGVwzy;lhCH{FyBP8Ij0x!cl zWID%O5^@LaZ ziehAu2wp z0<~l>VXjUxMJcn_5r@d)qnZ(rvsYhbduII}6@Aa$gDl4r2Lj&_=ge>ffF1z4KmQtO zJv{>>wl{s6fTmBkt^ppu zK;~pDcy{i%&gFEVEGarGdjSW!`S+g;_}lCtFEBkuC3A^=jgc#BKzV@hNUL_HUKYnli{1e_SnWF&U8w{*F_7ye2-&(c=!TvVURc8|J zPRScShI+tl{$54D)AE(nAx)@i(v5NXoE&WYxU7xRSW6%!o zqUsN%2mbC-`xp1=YoZL{m=fa12vBc6l0YWdQLsc6oFE$ns9h_0a-I@Ju1RI`CMG+2 z4jTV@^!i63pke@bWIiKI?-B|}%5C3)uPiWlsna%0nFRP-OD^pU{)VT&O$Dvt-1y3) z4fos%zLSuneX@+TM_-^ZsKM6@`k{kp%ODSr4>qRDfs*ld*ye%z(A(njHk zi13Cu0K?<)Ab|eAfAV_IE@0r*GD7ghWL8kJ;#@ERHwU5Wc$+Y=BLEws$0I|+< zXiFP+0NxPu>^jBNvo&U@eOo1iB-i`occ+ncFIAAa#tgL2e*dxHFUo=TP4g2g&TZUz z41f2-4qjq@z7OE-A=oaKciv z&E(Dt%-D0d|MCge_pyT|(uyS0{31Hj5g>5A=cu|b&Sd`PIt!#7OndfyN%8Q^g+P@S z4q_eZGL{}W9$7N~e;i)}lqffgkxXskKS2NjGgf$sjEM!vA}}?d{r8)@#Eqj_QBwQa z!0f7AqKUX9;Vf%nvy90Be@g->mWC3Hk!Zp_j$j8laDsA^Fz8C95WECbKZ%-{P`!d=in}i@wJW@ zq*6q0gsCE<#jAn8)A9HiGRDSZ0fB!P3e`%qvPrw=f>qb0LoBi9{P&+Ip`H7fu|7KG z*@zh8XoxE5;rA@^R${&!Cj$8R5dnW0y*<@0TlSDGc6s*Preo&tr#NCDZ=@^#_$S=o z-sWEH0l+*TuP?f5?WL=-MR>4AyOSRCYGa9lpd>{8nqNQR{n0s7`UWEioGC@Hpr^SW z#|w-aCT8?`npF60Y3FCpEC_TFAIDk#4U^gVToy3x*SysHDTFHpa(<6lM^HEXe5DnD z(LGEVN61~P)+;dR)F^3Bj_QY@25_M>c2;gd;1{N55nr!2dP9Xtce@R<78N=%vQ8yy zVPYiQK@L@;;JULxV6R8NK;Wt%u-YW4JqIV{OoHk(URY^@ZfqkafG*s7!Q?$K8YP0^ zND&SWBQOI^1FCpaOe~W*5V3_`Rw{bNfo&w`P)FHd_e?VpmOtV7yk!1Pl-OwBJljO9xA3YpT&|{6 z@6lEtkgDY6cyWqvdVWApOK;upcYyEz2H^e28slx6ICD}-KUZe+dZP+pOpoCv|Py{Mjy}3rh;CdSKp#a)`Q~?B;CVT9ft92?xLUuIH|dq^Ey?k-*TjeXq&~mb z&I5rd*k4zdzpnuTmv<$(hBWOk_@WM_owEuNa#FPt&KT(qwjcPr7RLxI=#8=n6STlq zax!Sp3(RNosW4T87@c7ru9_;btFd$+pFM!K!C>E)tqTmRNS^3?@Y{-!72wo74v_{4 zH>xb33+76aK!P=t^+jRq9#Qq*==ak6QpIBb)%>{n-Kh{2AV7BvhL(2^zk-lhhCP(siEm z>Y3dHV4feKtzNpnz43I=4h9?ph(GaOvAbR3&($4(TguMG0xmU&EjJiMZ8h)^}x6pJ4CtKl<& zzm@h?DqSb9Sk~gz?(IDTV@z+;B=6zl*E?wMtER$Rl-Lkkt9juCMrwc03hwg!*s8t* z0^VASo0y<54RT{g9I$@qyz}=+EAZ!zu<%)AKAn{xU)EYSoU`w({=f~xRzXTo%mb4l z)gr)e9=R!>u!AMyz z)<*gPiZz=mED)kZ*SPc#;ez4Yx*9F2GKzwr_WO;0bKot};s|o;3mdoVaGbu1nZ-VZ zv+tk`b(iAe%u+?)$D5i;Lr7z`B7(t{ zw@pWgf4-IaIo1zHJCAmj@uKYC<@e^>J?Tu?`lfVJU(_HcI*LA;Hr~6Y!)MAeurm)n zJ{|y%hqbSjus&>MMmc&8eUj{$728L@{aNZosh^pJrymdKtzHa*z^Mg%d2o0qhalAk zYWE0nA$Oc=8u3wGyK(O~(IXoJWfM%;7ex7EK^vxq)-L!v*(R!y^)uC=U@QrquAQHS zJDh)Z?%P2CZ|q>e-~Q8qzl>eK*#Ibo`CeGxIa7~BsRfM!y?FfH7q3TJmJaE_y~h%FXd+XCwr1vU&=?A(@@Liop2iym zF)-u2U?Ws8&_O8!m6&@V2U;q3LqbMWp|^2y_6DXvKcG{ zRJg;@s?wI4yroW>EfNPAr;-MMk6-TqeIMADe47t<9MvOb=O?B`oE-O?44Y3>$C3#2 z;~~ogE)~BaaQHBQ827vO5}Dv6Un3}dHz~M;38&0d`_|4He*6N^rm*XUG}uuMF4B!$ zOla&KwI1Hb?-QjmWy+R0_R1Of6~n`*;e=2l7TT#`3!Sx6OOzk3fYfm`!_W}#@}FTQ*a|3Vr5ar_lQHp@TW1q>$mC*5ZRw8B{N4ND!J$Q zI%ZD*{jYZbzvKbXdjE9xQhVd0jQ#ft>+3VpAR^O8g)$C50rhi0&+H!$fVa0f2;%H_iDM3}o zUQQ-(-vK;7!g4|)-=!4LCHn zfpd==t(|W$09qC=H9TfsZ(0mEzIUYNF~&-YG~oWr>6%30IeD3YUKfhZ?@_;Qao*}d z=C}Q}0Kxqg0GJvp?sfM(H#1!R3{|=~N$T(_uDb#|-8=A{nYM|lG?QX;7b^)Ck4_k2 zBlwG4>vmqvVS&Ds3ZIbeXE7uYN}G*Xoo0 zxnm~q7TF%l&?|BMQf>pXJQ3GeCYM{bOjhjk9iZ0*{hJD0HHphgY$kt`c&@=;#6mz@ zxCXNOJtedJU`)K=WX1fxf{SJGmK=ZlYX$yx&u0OB`l}w8pTXnMuBC4fND}6N6BM`F(EtKi!xOmsSb9;6i;0{N8Q+) z>_Ah3O}m<5*NC&k=qI^rA(i=C3rM6@oED{TmI8kdEE}>K`zwVe+jW26_N)7QjXm!* z91zkqN44jrC*J(FYZx*O76u7)BfUa59B3$DW}P5GR)()Xea*>ZW@t%Yt4~J#%pHcH ze?9^4_jzp`mI=Jc8Vc#9ew;V?8|SvUmu2(pCB;f#B|)-R`@L|mEx{Of{dMmE@CMM{ zGG2hf?T%)98dxg4Z|KwRF#y1hd{AZbJe6TfQUjA}PL4uZd3My`C&`Tc<6rRhc6Vm& z?*;zaGAJVh-Sj)_H=jKtct@QKBRPPftY8G!2R44)5r9E}JGd}_O6&}!Z&d0(qjP)w z0;(BRzMrfQ-r5#EY&~Pv(-8J$P)XezD?X<{XPo4^GOwm;iyXR8m>q(~+qYRc87PE;9fN0v6*0 z+|#~8a=Dcq_{7;;yr+vCh_CM4M2B!Z-S2fWfl*q1XKmOoe9tnUE2T7P?O$)7Fpt@_u(IMq*KBL)6sVM?^!!+GUKCbqChS zX(%J&NYCPG)X%x=E+mu93!9m#>|Z-jq>0!4-EYUiL)OU|k>Gnr*w-LDz<^TZ1He51 zJPF*=2J9Xl_#FjCRB);uITF8FM$5`Wp);>n@ae(dc`q=~J)dC3qF*BuxO8vuvxTYh znmRn|BT?1@a~p|e{hGA%Le{8SXZCfEflgV}HjeT+w+8Npwfy`@gTGjrj{0AzB>?EU?)L+KowX#D!*r02^BMG~v+^|)CBA0gj#`1gw)8gy@C3e;3tnV2 zuaFUY^fRyU&IkZEryekPC3>#0*V3*77JyqRQ8I(82h1k9M7>p6zAwyJp*8$^XVnJ| zJ;B(Szq5A&3+6$JtUhyoRjLV$BjAgz0&I{0e=+PC@>p!JI@_6hZv+GdDuSM%uuwM& z$7r3&Ou~J>;ss~Y{e_m8UVdsUKXl(##b}C_m4y=^ z+$x6}n};GXve_|I)lmv%6dGB`HsASEVe&nF3QQ+r?Q|oT|D>LhxG(sd6y(vmzX4@| zN*#Hhp`IwM`v4K%+Gf+(mAB@z*KEsMQ(JgKO6?K*I?lZ6V5s}+>JpY5#=yQF+T#(* z1Fa4>L9aSfcG@FM#@>aWocfv7!`2}1+uIw!AOHF!FGzLI%f%my?VVCUx*%IC+Lnzk zt9*J_96(hcSdBiHa~$N1E9Lji^L-6e``~Y_X-QIfNM&PuDLrm)8uu4D81VPmbpTq! z?|URDAw#kg)iG`R^!n7+(oHDK{zVAr+n(-i)rB?$@L*h0DG)dZ*EpC^`%@ifis%*w zwy!KDjjlR^=(P{G@1LvhIN#E?PNC}E?B+yn4I2x=fJd%vf}yOQt$Qy%=$IT2B<}?3 zrw4^!iF;XWMp*RDD)f-R{!%UW8&@zU_W)$CW3UvFjfVM?!`km?MFNe2=aklmOi@E4 zv-)bUfI>O?5|q$KfxwvAP2|ST(Pa3GCV8ghEpmqLr0B-pOEI;Wf7-tM0S1jdT@p`D*!F=$JSj|!=+x2z52*90bj{yAg=7Y`K*6fn+- zhUs^FyaV__kE+=&ABZ+;QCMc{2Cv1P*G#4Ldc|gLIau(w|INYQoPC&19Q;=*rGa(F z0yCb6f$ZNo=-tw{+57YR?Ss~=keDgmaz~mz$;^1AEa2ST@s0@CaP@#cp?qXJDi9n- z6u4Gi!hwWib0!F!BN5$uVfA$pdSA2J-*MA|!J^FJ%3HNUP^}OAqWt}^#?FOBRMG1( zo082cC(j6zd9g|w6K3^RY~oY_fl<<9Um$S4Y{A?v8YTzTZV8tqT3cgsG9{;HP&{K} zD-)Ve3pr5*6Rr1K+O|+IxJh#Y0t*C!j7q>33j|gzjVTRZ0pI626yWI14~y;!BLX-M z|JkrOZm(q(EqK4~(<$;vsezihs{MwM;S7Ss0i%u0{$*~$WdUnln_Mtk36wrdT19PZ zB;YoMS8#O{{4E)Yz zmMG=1a`gQ`vz)yn?B(1gfX6QY&4Is1POAcUC*t+zed+V)Y|W(N!GXVhzn*iy^O4e{ z92(6t0=Hgi-c>5Afg3O8e0V|DHC(u#nd8ZTz;>CJtzNRNIn-N&YVieUpp-*o&vw7H zt@{MpI}7+~o`4VtoR~RcD(G@elQs$;+hhKI^ z0T*Wy3Abnj)ii*ruw>FE;Met+Yzac)Er~Jl3{{-bLb|a;PT7YsP{tg(I|xiUQs4^& z&hJ)ax@VODu@rbG-=HUQe-HgYh5#y{`CfslMEv(PI#&tT4B@(F@``$>piSsXcBFJ? zp;*jq+rrSV|BC?)&XK$ytS%sjS?@c5^opyPnbp&9ID8Mto-(>Cw6^u27gl$NP|AfR-PTk)I?uaL? zv}4qO&k$uEBeL8|q^tr;{)3qF4bu|z_iBuno51y+E^aWMN!NGP*-_(AdBPQcbMSXM zw1#Kbe;yDRcf8>ig=Y)vk}s<$^4(dxM(F(z#!O&z=G+1TOKWN6>@=ZBWhRLA@$P0} zA^=I#z%NnoLk_?f}3rJA#t8_7W^nxow~qoH-@CSt&op&6BU&bgd)wxxGd_#)8B+ zc8%oGXMw;&oA-hbEWy;*$ZlXOOH#HsVgBMDvVxnD7GqDr5}_)UMvie=ZHiemWQIt# zoy4X6LmrG@iyVUh0(By`tK`LsubBEd=77!>NLMgYHs0C`3>qSUkJ-}c_?|dLRmqK{ z-@5Kgj4!|5FM1L_SZ&f!K>jf@)y`nR)EnbIopp*L`x*-IO4qVGI#9k~J_oJn z@ucp<1Bd5Ko(MW%)wBSh?lzE-9M{sMtn5Lgx4g^2MVb`z=iqA6A{$~3mARO>*#T}1Bd&uEg0 zQ&FQtnr{JrGj`rY-#HY}IR7ueR_A4i=OjU^h7mjb1R#m93QTZ}ZH`F!Yq=x{Mk!Ej zGf+cg2<`|eAff0iM)WgN3IkDN;hE*#Q%wsu0?%-U(?|IRwL zFl>-jsSEs-T~g101tw$2I!}FN|E`X{hiC7)R(}sV=nRS~+%Wesw@eA{yN+s8C8EF! zqC8X8m;fC#MGU(f1UO&^5CJ^jy}ba}?ThvQ;Za{$(C=4}aaea*zDnRu5d3|9?KP?S zf*79*s9tkUe>T0$W`sk8B&`}Nj*&5i88@dj2lS}pQ^H+ymX`OWS-Slo-72?isc)zN zRYpBvdbMSllbt7Fj7ekyCpzosOyFaSQekc{uika`nc~7wiIdYpaCbfnIMx6xe^usZ zpnF#GWF|46zQp&Psp3OU3i0`o2(icVoU-zEqiYfA=(C z>3}vIq2inY{+591A=)<$Lxw;!HkL|iEl%glGQjR$SSwF9~)5ZLYqLy4NewO`AO;4ithgi-}_AlF7cKw&7J zSNOWi_-Y3S{u=rMf5l_(?a}m#B)BiMN8*NiV5nS54Dby-f4oMovw&As#YSD90=B`~ zHFa~Jk1sg$ax5u2pxyUd%h-C?ksXx#jmen_0gow>3?jtv4UdoBm@Rq_|Egg%(Oby7hwClc%&O#5PgPxtgu zAfn{LiH_I&`r|K(p*0S@V`wUn^?oaM>HK)30i>l7s73J@tzt+JT*?X}08)@$W7irV z#AckHl#m56N@#{JpW@D{bW8IhkD`~Qx?!Twut5VXyH~W|FeW4=u{=x`utkF!$^w>c zGl_M#o4DQQS$T?Yf?7uc{$g2A!-iVW*Rqhj^{pCs!}_3p>|8wAxc!~oUYIa1CTEZi z3?9x)E#drTDe?o^e26=C%vXj<*`rl_p?}r=O&{I!wL#!oAnO6{tm5T$MLa}m3nC*w z=ZxH)Wy<^OGRUJs(C`8)WbZ&~1pw{an>^TxuH2(o zp@(B@(*uEhKNQvMu%#p=Rp}SLpc@`A1}SZi0KjPN_z(uOG~no6eZ;Xm#u9sQeQBXz z+0FWmrU$P}F0l?2z5%(!z$ly#6QV)Zf3?@}oDEF=^VfQ82(dw@7t%!7IkeAL0)eU6 zj`#wBrQQp&yMhIO&!|g)!j}8bA#$^eIndWvI*qqsiPE-ko4qTkuWQ%&CA*DlD!3Bx zcL08cqQRza_S-%h0?Ux#(xrl!CwV_(=x*4b}|L zpoBJ|b8;(V9DS^1?JClDr)~SQ)%M-nS+RGU6@w6=?m1+vS;y}|2fgE*&ZdCg+8(-gmnt6w27t~6fkVNyCgZhj znnMHd{OOK?Qe(|und7Q>T=pCas^#IPfcAqGrW#e8<`$X?~^-&Nk_$X5a>-CnCsue_gAhPstaJSUuPhOa_pp;BY(*HU3DsvVCTog%vt#SaRtJvU=8bOTiE6{ zi)9Hr$Tw5-*A?E%&IZoi>w;Dd#+8;-gjom#Q7#x_v=+rw;Q>OB+xly%7iq1!suRl4#%FHt+knd0+T?y_tO1+{oD@;+=C<)Cv5JnLy4~W_0=qC4tw< zt`S@qC?^Oay7qB_wquB)<*V**_VIiSnQPYZdxF4J@0uFxdqpK(siZ@!y%ONMFOQ&qsm3^!j2V0RGbB1HO(8@(1za z0Pq#tv&Z`>CTkeOwyFe7j=3!+77`5Sm)XB-#)?k5ORHj%h>=q5-d*5!0X?OuveKj(nJSh)Zk!9l^!Um&no131UlvVqkg z$cl;kP+Gc^#ZMjNYq2&kXX6eW#?NGpI7}piK(-X13U(^GATMDANR>^RMTp>v(t84L zU0P>G*iUtUM*(J2Q-`BZhCW%>Ft#IE)B^qn{3x~5Fq%PSN$gkNQ>$z*(Tx)Um0}`@ za+Q!!Yz~TqA`0sOIkg~gjBv{qc>AbgtM{&0OPFi5Jlc`c@-hYfI`S(68mrBKnL2ij ze)a19wl}z4)O7m}5hqEIMO7UQmuR;BWT@{#F`p1h8$+%WmVZpkrY9d!bZ;ElCz( zt|ucBFX-v`rovm(1$zBT?RZ70e81gXY%>M|(|&I+4kX9DLEwz`?*IaGy}z~FNzk+V zNM#-bcFW}9m{A+MJO^QQOZ2U8RYGSB08>H|?z@mBZz(I?SW9BMGm?sC9S;Jd_uEqW zc=??zZMmU$^FZL76s^+M)k>ieg1~C;*?HYvQb}~GDhI3;pg~Sz1(5EtWw;+ z^NBV@P6yr{Gr`|5=|iOUZ>-%beZdl4j)O!c#m|a5nF^;u^{s{uU*>Fce46ZLjJ!%j zXeBFMWNrMIx4!2Om+>cKyjq$VdCq=>AA1-|CA2kEa;6yk4Sh#dWZJboDt_Hx1#gXl zGnVhG99VHpo!#zO)V>Y=VnXGa@Y^9W7ZajTQZqYn5A<0e6#O2bzYe(+ zetf(j2z=4`O(leRAR~wP8qr-ZL1Bp0)Y|6jNMouU7+5#{r*NuOR7JG!gHbKycKBLlrxb&@eu%j%@^(SPDYu!c!RGN3>Vl3l5A`>bl4F6b0`SY zMIp2yn5uV4-I)e>`slN59sKOevcmh<+$j_QsJAyyH=q-Hpx_FX&?|C#nhM*R0RmG( zo8mxVI$(v>PiA%Rs6ktxUW)cPvp62smneu+BGUeHPY!S6hLI~PcM{D>6b#0&ODg6) z+#RbV4>%8c4O2hM;of>#z-v*vGYDKoHGEAFSY^-qRSjMWI1n-%8d3 zVbu~wQbR3br!S|BZ^{@Jp(v0fDjd`BbkBn}YR( zZA4+ar>tF~YmAe^b#2M+W2oJmWA09`V|sw@;nqe{O+m15BseeSwZn*Mlhy5%<7wHj zJMTx<_$dzt{Ot+AJRe{ER&Dd47t@Qb)W(Dyql74s&AAcaRc=7`|4Ouc*QAj7%w+y2&~+?=yP%MhW*ciN}dXn7(!rngYdE=Jnq% zo}=&A0FKoM2Fa|6e3mz&`J^6HygoPW9={<7tfKZ@2`hvT=-I!AvVbj6(ES_o>m~Uh za1I;T>YasktY}^P*KQ+C?_@R%ZnAcltllpguU4->Fd{G@uupewMo`&_RI!zbA=iG1 z4{i7skQJ$Bymujf`iO+N@xQ0QIFeicF91~Lz@vN0f_jlym^U3mZ_8bymQ9(A0S%^b z%de?G)S-M1`Q~B~jk(}20WjcisZJw_^2ALWBNg{%4UO73w^SAC{+6^d&jtVa9DZlk zJ`RDuIfUrbexvOa0y}$7nvsB8dLzT2Ne0Q`Z$2{$)Zs5be3ipI9xns}pRi|%9+gAO zo8zL`upTkuM&Heu83D+f#(nMnBT#0-gpCAkgTLeRR8trXLK~(IhHd65J0c|BDR;l2 zx0 z(hhI1htyO}vjmn=La(Be$GIw#CFV7Z1RZiR2#l5AyVkl}e4!Kgs{#+hedpDb=!M9; z9&kxI3Nu7t=Ff7CO>r!$JzT}FL83FLvZUo;HDthFXI{*ox(iMM>#m<4yFyz3cMDXE zWv1>CJLPW%0;_E8CVEbdh6zPEMm8S@1SSU913@rifQs3snGV+cMekAz7BaFfKq3GW zsgD)P+-1bZ^gSO~Vb|$p{v+?ZnO4VowqbO8TIve>Qx2gC&nXIkv=OP`49y&;QJ7etz~ZrUiTOQ)D&Et`2(T^)K!srKm`< zFx*|{mG zMp-!isAizVZ`wQ=iNdII6!rr~ZeWOy{}I{&{e^6wy7_G9&aidRJYKH7vkGv(d2AfC zPbXC0h4Gldi$3aj5ICkO$(ZSmNg+W1FhF3m#Yv`^5`8GIyNcOo!~z2uETDQBH4gZN z|g0i;?*_RRmV63|{+6+@beTnBcaJ3K}a2nFDvx-v|U&(J`>?%jD|A z^f^>4Yq!6&)J}FXf9-Z#)Wkk@a_Tu~gO9XCr4v&Rb@fcwU=Jc&)! z2YIptnA zgTT>XD>upu_Y_Vm5ZDzpS`-Pfhg8_E*c}f38phE_xi4NZ`txiYIRyUN0WnGq5xhq{ zdgILfa{E>APX)f~H^`Dcs;g80Sc8R!V;3-)7WE^HE~~Ka+eD@g@YhjEa1!X}V~M92 zkJko)OG9Tc|C($HXxujU6JwctZ#uZIXZv9UZSC{>CxF)R>vcDrX9tQZwNY$Uka&EQuY-hHmbRGhV9}QCPd~o0|e1X6F?K%3T)Q?N*Oo$`sYbRcy3r|$AP~t zR!~2AN&*67!R{OT90Pr`w~YD%fw#S;t^CbDD(ygs&U)satCf$b{eovEK&WSRz?nd@Y&3Mx1+(a z4QO%QbK^;FACL=v=jlyLo!?bN4^cYaY=b{vnh)#(!Ii{8qbw*IU0@oeqB;JzyowL5 z=c-yVfz6l&ymfQWtK5Miu_P_~z0FM}4NVTHt%sIeD;puIequrX}$p9 zx^_1~e`yd{?KhuDqDhpjl}wE!#wb+P)gs*05Vy+@&X!YNpp1SFnZVq|{S%@=6CrqV66FyOPR%(d<{H}s}s9=zevzv z3eKnj{>IXnw)cAZgOPzqYDXV*2{pv<p!-^vzA={ID zo{mz?sUt%Ghhq@isThk@CMs;6Plf+>zcl1T`{v$%`a|Lf(Hr}sFYaBDB9(t%9QBX6 z9;Fw2=de697pixMuRFO&!`D$;_>Ca2_wnbagO;v~7(iQLec^eom%R59z8{6&4_y$L z5TNe?v~d;Qz8k2Y?dOFue`(8D?^&y?uwi%>HCru0(-+xWzW)>M4EWnUpI<>nhnX=< zK=P;2cz1fForIt;LbuHHbM@C}^k-ybEaT5Ku%?2}ZQ)fw;4ka$ob{sG#syR<;K#|C zBy?#BP~3JAp>qZZjDkx`6EpIFwS2C@kQ%9d+Y+TM;A+Db`X~ed*H-YiRP)^j_?3`4 zmw~?Vd7N9J*9PYN`oFRo>bYRMJGa7jFRc$O%?+kQb^gx+0+&BWt*)hrv51MKEuC?; zLZ?C$1?VcF()ah3MXrV(3B?qG3sC!Dbx;uvsgQ|&<@&;@^-Fs%fo5Ao{bNc%O5qv|K1?5?A0(42Y{*QyuhUrhbiVt z41~Ouh7k!C$sT62o-v62EM;-MS}L(NQEGc~X(P~E_p883B7PCtpz?IB!r{lhuMLEU zB2Q3(y@qF~5MhYI5ADztB8EwTX2jixtIteJpId-BO))2CKQ;f1jZnOKtDIJb)N~XJ zcwd%i>Z4?cdu&)aQGcb;hTFkkn#YDp8hIIGu43D{3~91FYYK-*-HU9l=P3fe=i!6D zC8J^pR@sTc;4p<;O|6NI{jE6@I;S4-LvliK7P2A&~tzd@y)=KhHcN`rCd_fT=9-& z_V;HwCh*r9OG5z9#~1i}#Qu_;i(f!+SiUzZ0T|TWBevB1wNHx+OAU#V>Oyh6L27=>dufBO8FjbP{=BOD_**4t`1h!WivZoT%p@arlC!6dwuMAAtzqX@32rfXV zzOS@UUv_QanWa%dI5i1@V}Q)vnZkFhFL5ZETe{WfpOb6u_5emlG0ffRpC=0mKuCG% z(^yGIi?59p>K|4+bjfew?>(qBv%?-)T~KN|o3_V$TD;Ij-q{6z2L zxrxXEcPD_?)@x_w4P8?g6#y6j{QxlC@Ix@t>MM5^;!a(OSZ8<-cRZBB9=Jh?cwyP= zgTG*9{_6f~U)fzDG@ky1vi<+19AVdmda*{b*-#L!(ZkXKqR_3{Dtyl2sFQZ$VhP?5yL2-F_(M&{E@A8$j% z?|-gFEChko&d)e_M^_?6ZO)v`P$HAQiC8A8gq}E}a4N~UkthQcTL0+LSYu@3fxEdZ7Zt>T&nlcW=+mgvyRBvV;X5PmBR`ka85RG3ZLi7&xLa% zWh-3+fw4LU1>W49XL3MvEB4*tv%8tKF_^H72a*B`tAC0)ThlPjo+I0()!f`XF#hGGYC`+EbECWevj~BDm2H=&UotwU&&haySr=vj&*q!VHOFuLkp#QblCICa`FabdS;8R2BWL@i2 zM@XvdQ*I;i{JuQm`2Mef#@_3luIt@;)03m(3k2S0(NJF|Bk`4)6EZD;nc?l|THIKE zSrqh@ADZftXC0jp{28SNZkR7eg1`s>;IoZ!ATVW)o=J~xo)7h4IkzJSyoEI_93n~C z>l&dPtXnf3<^jK{T&Hxxj)Z|!RghOX^w5~OPSe2_5@tsNSi!?Fz!$vhGPT}({d)D; z{{BtrnWX?RC7wx_(8G=Zf%h8E{AVcHCgIji4gSOi5UnR73KvD>MSP%BNpFeq35HlO z0TbXi`M+#*>iTU=^PpH+yKdwfP7aZ*OkBSoQP#(?paJy96c+)#qPtd02JkG9m#hGS z!B@lz@`<(@(WCk16$BZD0~aqA+Wyvmb5L&hTA3N>vSO>_6l3wqc4NQ{7%*8p#28hg zB)~5TzAvva@@n8ON1s(bH{!2Yfp*2J`-^RR_~!Y_nZK{#gpe2^wQ6zc+<>vk0YwzA zPkimnrAPo2mFoM5*7Z{rn1pdN-_Y}JsILRpDJjP}uA7S(-xZj8SE5K8KjRlc z1_EQ;IX%@8W>2!{q36Ge+!qSfJq~10EyHZAu5jyCuOfS9y62Jdc|M1V6nptu67u92 z&GQD;IaLeN>t6}|vm`1l{+)7qES&`$k0Zm(5sAV3r4fe7m7eRsGY1$Hl_Ez)s+q|& zyL{kyl_qxIsbY7yDOzorBT-e_gK z?$X?KeQA$hXXlK>odCTnq$O!1#d5DWP+cH2m9A=DLcV z7p~wte4@cHux~!B5vvkRSv~+}niQ;y7zsA*GO_Y}^!(?Ui>u;`q;q;Pf)X63lk7nQ zT~F({4u$fogTN{n!Vsc$j?q6;qTUcz?f@r}T-XUA-h?f{Z%87pHea)S_^_bhIwz&) z?BC2{_GCM{(E$$8t|fyt=BS_fyZlXnW5l0D2S;Z7@y9rnL5?dAPi(`W6BaYpybq?T zI+TG{CHeeZ{xiW4DJR`b5XykxQY9}PK}eZ5rm&*S{r$T~lls)pZ+FrDo2OW8&HVk` zm7j1&{W!PI@0RBp7{K3ZGInQ2)jqpMj#Kc(=k=B#moLA3U72noVH|xoWXyTT{q25H z5cnX?4zbStsb;YOi)LpAeAP&;Y=ghBl<~DQd1?Gi2O__xdmDSY;5dIQz1_A+=4{IG zyzb|C0}K3ho~7Kr=|5Z$nO=L^h-|r28}$i!y-Pc>7!#{2ClI5wHn8+O-#6I@R<0cUwF~@lUeE2e0Tu*<+sJ{eX7X0& z%6e+>-%tW7W-g}4kA!x5Q+b{eCXS zbFzM!4~@5x90mR+SPM#IV-V*y)*sUPzYuUJG|do!d-P_%(>*>*WH%M|TJDH~J1UkVATXuVGID(dRIpxirIi5!<2m!fzEYbUdhPp6c~fKQJD5=GF<7?nTE)&N z>T4o_e_pzn_KN7QQ(c)(ReJXr*OI~pM**jT=e#Hgtk`*vijSN`jMo504>XR_1>-g; zpmvB{*h=4sl7`oC99WJPNmg|*>$z~&l1s5X1HLI`B31)9xUje>n#!a$i{r=mvK-xi z6SYZ~Qz)oxP_YUj7e7AhcPR*rq1xP=qR5sOa&T}C2n;Yp%;l&dTO;>MJ`bIR$tBO+ z^(^rBFtw&&bEiO`jZR;@$?N{s%G{@o_xS9Fey++~BbXysdTA)}uco3qW7&3Foz%2l zKgpro#C>9T&l60A^p6g4i-E6Wt8lP`A_Qa7J%&wKqN!2#j8n9iSGs8J{HClr}o$F#koJ#ZOF|)J8Fj=(dyiHqf498j{S? z(zFF7G{~;!#m$%09Ev#x5qX7%q|Yz_XxC>91SC*e%W$_MUN@oZh@!y6m}t7=yLb$` z&5J~Hf#J2H!#~A<87n%c_whY|U%3)VnX-`58^@7YLr(VZE(V??3YJ*vXFOpweW_&f zx0X;O*WYQ{CS2XUg^^v>10LJ)dCaFsSXeXNA+M#8b zc?#_``6<7hM;T#3@D~6c9~H*a%836uGIbu>AUA8u;1d*btQ5FMQ11UT!o8jX{-10* zArvv?NC5)dUf{y02nw4iuyINQ`;QcTuVaNCcMsJlfJS)}gEkJ(dQxx7M!!N9FhG%y z3!{rCLlk{w|8Jk8%9k7sge+E3FBfse;6J3IS%ro@W+>8+kJ^7?C)*T zaSMmtxuzsmyHo5e+WCDp8OPVzYhD5bUY?`Y3;g06w%YL-Td4vuC9ZLsfZ?*TSv zI`^;V{@&u;2<}R_c7T*RLW*npkas<~iW-ra`HaLQ(6wP+|qXq6x*~B|9xh+ebI6ez<+bS`*%Do@@htiA}d!Y3p)nED9XhCPDVf zFt69bEp5ZYpLjX@UHY6C0)bWa2O_vez601{oqmbl4iD;YEc&{5nrCe2wAq!O@oILx zXv7R>gM=;`0)RIaHkK9#(#C#~M2^)_N<&dql1Qu=I2?}i3aJJqHGbt$Zs^pZ7!;^7 zC_N{#FLi(Z^8if^*)f`#>+EQj(Tdr>E`b1UlQ9%A=o>Xe+McAK9Ys&i9zaPWYGp}t4Z-ZCnXQEzKYRUdZJIi;>&gyBcXV_&~rh94Q z>gv`rU-|B%9tp04mq? za{Ko;GJlSvo?BZBFgAq^3a9ceC}O|(aZjNg7old>*BRFHE3~LWea=;2P=wMrHt9`Z zVp@Kdm(BtP5c<3#eH2Z!$N_=#M32P3*sn;5G1}}LDV~$AQv+Nt|= z;_Z^r3}0N{FqaOJ%nnZDivz(`ofuXYA*e6>H`fkuY6w;sm&f~%Vdow7K;SD)YRsJ5 z5P^AGnJ+>Zn+j;{!C!24dU8TcKUwG%Js`L*dVaIW||2IHp}@__OPZ!wkUL; zLsl(eWx2ua?sz@``Ukk#%^1+#QUshp(4bVN+@o{y{XUiV($G_lh zbnx4^=?Q>7-goZvFA!LC7<2u3RO8twAqg#+Ysl~C+6(}%F$)s}ndS3f&0wlPeNTm= zg0jE0chV4BkPZA!_D0XxBsNg2#~%~0U#4?nK=2Ov?8mEyyY4dQ+x1R8V2ap`a)UE+ z7S@$fXMw)_HoYx~ON-l1cL;qBWU;EyY20%JXOZq=t&U0-NiX=hW-`?5w^%sM_jJ)nCH2QnBh^A`hI z#sEW2Je+8nN8qy=84Y?fW(9ltlEUFt46St%E~BsO089rig>#A92$}0V8K55keZOt| zvNC{cSZ62EBv*0nV7-_XvmE4gN&?bO ztH=KfVK3_Eus4=O*YS6voK-4j2&LI^ME?9T-tT5_*+Jsna2h+c;-|ps&#WVn)71JD z8_S~SU#y(%W)OJ4cTv0DnJQ4fiGv(3Li_AHX%OqG7k=$5@q(hr{mR=ze!EaE?yDMD zQbho{UB#rwG{gBz!ngOE5#Q)&r^S!V%#H!PSVdGx-9ZFX7BFp^N1S>gqimwMqQP8= zIl%9gz~932Nlay#QP0JvelDo{yPsK!yIl3EK0OpVCkU1Zc+TFP93MTzf!!W>067FA zW1^315%R20FBnlLb221%tV|3$8^esBYm>+*uBl8ax7^2RlkkA&8v|cQs*ecvCMu+l zcZW@Q8v3`ljUX@{klnbY2CySxmCQJr>WBJ@rVaioTry_uOs%=zFJs5W9RFzb=Ol;h zI>9q_GcK8Bh=aqlQKL>|)fS%hb_;Nr#_IVPX`jdZDum^CXSYe|WGLwK@zBqKZn|`S zA!xkww@K|4NZFJB1*{sIi(ukIcP?SB>s{8bk?GG+Q>^#bWS-ZD359ZMx- z)fxRAGNSkMTZErW;X1%Z=0i{s`y>=oMG;#h2K1Up_f0z(3B}wiNCWyL&k!xysUEOx z52oq??*YYQ;QO7apo`wbR5&jQ0uN4LcdgQTkF~BF{^LrCtXI1R0z>kYo*WRkG;xUY zeb(o%BUT0y$jc$hlX)n7v9P^UygdcvIG7rqcV2qSOGnxjoDtLr{D#;&(fco!IT>#Q z)mqUf%k0kr0`K=O%2A%GcMKlzz7;wKvGTiMLRN(r7;*Q(9Xb!gPnF-BMsegifr~io zsj@5HuP+AZBpVWV(mr`V5=EGW41=8AiZ*VKc{2rtFz`N#;rj1&v|MkE58n$ETuXdh z8Aeo?#B7Vz9jT$fo^>cJkR#~TCZhFvHZcu{;@~epmAb!FZT{kcSM7W6no>jp{OZV3 zhylYA0N0ML4>@&G_W-G(VrOzy>utXTfrK)T+-wYzW(HB^nK$Z2wKIanloAK6t}g&M zKBW!-f9IhXL12IAw}HTWNYYq-Vkq!VeW&B?rH4BHy>f$Yx1l|^rhpd>@O%fL$8sVz0g1i^{GEPP?)}Yk$UNS( zW+>ebQT#B$;o#3EFl*;ENtN#z0e}1F!wRT4*x9s+Quh;YM07%>)SO_BtYVM3RL^*7 z*DrIjMn(?`*KOI8&J>$fZw#5&Vj=2 zCv`kVwBhQV+3Jqe%To%*#ok3_jR)c}4HbvCU1)GK`iGM0Tz+#XDOSQ+z+n&=ng95+ z)cAvuC#NG{>Sj!nl`$QQ&LorZoZxOHBe{@50nzBBia>D4y(cB{s2RaVL0xZ%tfQbx zgWi3RQ7c^4XWh@f@|Q8hIoZ6KI6~E}F^l>+1?cSHFlU?xrFDPzSJYnf8MWIf0e)jq z?nWqPrIGfb8e81d5B9eSWDyV@Ja7qM_p}KU3Kmh@fnc``{JD+_`~K9!*AbA}#370M zj*ICYL+M!W*qjMmJYhKym+K2VlgkEp8(3xc+L>Rd0*eEK&V%4OHOBH}lbb25J)~l$ zc@F4C#QaTG%3C}3gEj*gYzyuwc%`v{;BhV~0KkbB+LQXvcL1^gSO@%->L@W#C18L$ zAaDopd{&%46wrsH8hlMXZO;uSCwJ{+jVKEKKE36JL#^$@7e~g=8%76@v@`1%vQ|jQks;s0M!-BY9+v5$H%|7uC&QLM4n%5 z0DV<}J{+t*%uU~O@fj7(kwrj)n613j_`wZFB>mjrD^{u9q;1P6{$z zWKg%fueS-MKZ|{ya|QsSt3Kl9-WvZy03rj1-8>UQp?KcKrp#2&D|7-aAh5zjHD-)- zuq?jHj!8wxubmtM%W>ljC$BwgNR-%lQd)mE{I}<9Bmj*X6f_WafZB>#$T^0v4oD!G zBP|5_ze-{l?vtJut^MnN5FK<{-{afcOGg3kt$Lghxt)qSk2ykokQN1d6((#$-)^43 zUe2MT1Wp>(Oe@`w2xPLw`92`=>14xPJaZ=CD6{WUsotkJD12S^glxMjA8Z!d0igV- z`}fZW!2NBNwEFgThX?!%;Mf1%Q6l=FZ%B$@Kq-&7Z4m>pZRqL9F`|3Qur`s=U#&eG z)hK-}P&fz#TiK9C13)uk-D&}RZTe||CB>>$0FC8Y=dxhBk0AqiewGsKQWfVYHp}y= z2Y3>|{jJbOjI^_w4YbpJib@?|KweP9*2)BYu+l4k=fPhygTH}?D0L89gyn=baLu}o zXY5A^+bNf~>`f%d@WX)U#ad7v!miFS1YSOiUK|771!O;3J`?)Erv4A;hyHD8*rD7C z3FGgY!k!&p{LP=EyR+x`J#5>F3-_9U;3;%0W{c6aW=!!;bVR%MJXF(w(FUBfLoxxq zB{sjwom>`ZDeAFMM=A^hW0ife;=_bg*T72{7=r}CUEKnAEJc2c`GGmDTa)Kq7{^PR zbz5RxlGi55`{AZFDbEKDr_<0j=@Ci5B5rPoo=IuDEIB_VHs!Kz{cn{8$A+$%+G&8G zhkj1JgP9)M_Rz~Q9hV0bogSt6`CN{me6ZMK44)rnGi z`NcASoe7y991>)U`sKn1%QlB4;sdM}P7Wq4epi?)Bk)E&f`Vo|$BY6iM+nfq@*^VL zM<7v!dd35RH%>>gZc;J|b^}UQ=LG4JHL7-7xTlb)BCyQp2`LD!jY&hfI3#ESrVa_r zExWJ78N$*zw+4Tc{c#pp90N@=Y5jX>Z@IPA3e;aID!8^meWZ^I6LLgH zMB?;4Zg>|R85kez)z;LuSxG0|D@glnB8CPfxGendQ;sqUtdH2rBBqCZkJcr0BCmV} zk?fY20e_jsec`{3o^)u|@4Q#JfNKAI0^IMFKw!yy@R0>2kd!gTA6h#gh}nZz9u?x- zgn{{MXK4kUkGR$W=J0u2@3nvy6$r#7vqa(;7&3sTwcA)PGRa#-17IA)0}0^y0Z#Z3 z<^bGOZ=Pba^a<&q7V+&(;NkO%S5ri=tiG?UJZyvr=07Eyj`e;kr!o~fIYL>}67NeQ z4D9>A;Qn?Wrny)8x{HCo^CQ$j6wNjWOe0nK@4P1&Yl)xK5s2ya#Rc|M*J*Gc*+I4L znPCY~!1&+*V_(Ki@&>J7Bg^Jh5GHh`z$0U7tKU>vK42UO=EBQ*;7jk60>NKA0{is^ z-fuvU2R}Cfm|zF*_XOay-U%_Ha}uvt$Fd{O0)khqk9f`}wNNoDu~79Rfux$g*I>MH zN(Zc@%t;bFd-^LZPw0@9Au+1lJ_C!21f8QWwW zij2T!MX8By3I+i)#RdVGQG_e*PToCM8%S9!7X=7iWcl9dxhr?I@F1@ZpN68CYOEDE zR&5z?O$HQV5CWDzlL{JZY3Zgwh`kK>3nK70sALjn&ZgwAkEAP5P4n`GWNE<8)!LN< z{BjNv4biy&;QON!25G+TcR-9Ggot(mp%w zQ3W1t_lv~MS?djx;E=5}3|!Dt}> z0;_FOWa-iP`|eRjpQ9&~j6ZoY`H1;ZW&LloQpn!RQdte5EMY+#BD&giwF-Q07+WC) ztom3TWk{)5&CaQe&Qv7AKBn)c;t@47g7-M+fEj#6AR7UI-tGX8r`u8|>z@QxvNQ`g z){snjUwt*Kb%mL4fq7exiCMTYszU_4*RA{e72RAWAyUBaRJRHP!>CUCIhzM$n0ZOW?;{EQHLp(m1Q-`O!nusWs)}sI`(U8zJPG94 zS?-%@FE{3(I*%6?9DcCQQIyZob`f;XC)_*`mcV8uoflg5-Xlc$)ek=3ZdHP~y@LdSsMFFW|WLji(mS^(Yi`W*y}`Fa7lLUKs9m{p&{<1 z0S$Vf&R|Xu}NVl^Ji11)>c7n!xDMPv;mM zlu~JYia9fEjHXdZdf*~(IQHQdA$@fAFP5?-$U&t1>|X{zBgVP#cDp2tT?t|0-p|-m zZ3(@@6qO#D(y{MShK_%(4cwZ-^=-hdhUr(x)ROy=Fp`l{Zk>?sR>{DkEwiuIESBEa z0)iUo9hf`@2TE;M?PZHhcy*n8Iy7-Z zBiCJ{1y3}9!QIE035*5u6hT6Jw>^6n68hnhl^3@>r=*>McMgER1OVORIntA3nNF?n zfV#k5^x5xL7nn|9rO4UGPH&fVtt6uuH?H*zw3i^wq#8UYTnl&tf040WIKVd~Z6zeu zfpAAiTFPsm{NUW59rP~PJJCYJsG)K|aHuVxNzz{#o>XlE#`yJsX({)Bl8kr09w46~ zS-BptuNOweaRs&{5A??3dnADN4N}Yi4U9IJJDba;B!xY2to}$A_~-*rZ?Vt`;;2?Mf-WC(hAj(ZIaYk967 zq@ZbU^Sdnc(ipI;7hGw|cAlyjPsxA-3S?kQ>C`U}xa?h8N2ssx$CR)~-gqaW!HJo| zvNZZAR#&QUdm+|A#&cQ;BiLrQx9`-9{~0jQgAQhc=CF-XXnaEo37Ld5Wb6|!6FBw! zb(?9R8< zH`M(VZ8xIqU&a(|T2Nm_HqV_t5C?v_9E%wgCdTLG*{jk_VE^a~SljKH7UJb-CdY|k z_6<(opiFx6L%kI#fQ~X}!a=hQ1KEI=pt7{}IsJPI1w)X-K~l$C=2I?XdirXBC-rc< z-&d`>zkP!z{r>{G!a~XKtCwv@){wp5thnve)g}bHrsehwMJ9ugvI} zv>B9EuQy8GP+j5}^MN6N?w4yNpCS)X;IdLnswmRIrXHrgE1s7zMHK?>% zRm&nGxvh^4M5&Qu;P10rsD-y=*B(+Am;r$if0MevbiDdfsz;pK21)4T&W_QE2?0ad zd4fW}&c2s$|619Ls!>7PW-?$%xjwKITTx0QCIDInJ+CY=iFkI|N_VPgNtNZm0REt8a7sgkE2ZH(mE3vKt!iz z?{qw&10u4vMq~;#@+8@M^xCO$H}K~L0*=d>fDAbs5qbVDG8+2FkT>jZSP0GS2C5l~ zf-06;+Mb3A8W=F38{DkEu>M0mWDAo#_~#1*&O3MtXp+?DV1VCH7H}2tcjp0`CNkm% zp(mS!1M|C@MFXT@53B!tuJtK`LhBC5ScIH7)&Yh^7};gSrl^gzTaQLxnhE4GjGK?; zFr(41?XVjbv-J!E2A=|}2G8DFc_3%Op_|jZ%3=oKvw`FE-?HVK5MY*oBr|0JV;%9p%@I>3f}`_g zZ-WGJy#_c1Kg&NM1b?~gUrwo`fb$U*sP?*be~*C9=-~I^90S~W#&RlfjuY*bb)73J za5^!h>i`3YNL7R1hd^Kq+_wQ>!;h9dL{i5()wm;3VJ>P6517Fl^e?o)pi9*-^k(Pp zRtNYL@Yl*D^|RV-&=MKelHNdPI=FqiuZmaPzkM4rfma~#UJ@8VltsGg)0_g?W~B6+ zPD43Bg_a&a(*i12=dzuW{@!g1c-t8neO+$n@v^my88d$u-QYNx#ARno09AA;p}PPG zj8X4bWZwvt$3ZB{r^t5V;@X)=1&#-*wGU#V-;_mN9%*9$`~?8$y56JgoNNOsD+O>! zU0@Fcp6%LCzGs<>X8&FeiH=asi(L-6uGWN%2xUJ?AM0F7>vcBCI@Pe!)EKf17Ic7M zj{Z5ddV2!6Bda||&1Mo1K=?aRPlK2_ej9_ibuL0a40Ck zN<>lN1+bo@nN-k|k7!pAxNIhDmZSk7xD@v@Q}Ph&U|1FZ^?G2PI1>wdaj%4^{C0AK zZU18{ ziUxYx^2p;OUHZd}K(LeaXR`?zxBrNU^>a~R{Pgny8XnNmWS36!u7T!u2h}t%!NVNx zwQ$2WPJa_FNZ0fmk*T7YTn+>l&F^~e(x&ZmWI)~{bmBzafml7I6f2waJ=PO(Bj8Ag zBU_Z6_^;T=j+h80pb-q!(1QVEH0b{6IUSb8vp8Xtr3+i$cLQq&&8S?^n7gZ^vk$%6 zx^{#J4duFUqJy>^X~4*HZkxSZ~33$p*`FF=CI|GlQ!aTu0?tt3q09z^2`%6jlO$lM3e%8Buk0}wCBOBI!YHf-aPYP#bIdy!I$-y68sh^RRlam|DLqq6JUcF zUQWcUJH&;_1pvVG(7glP-fpXsyZ3K*c)~vcKK`%!02~3M>78c-6B!)@Gv)#n%p2xh zRJ=^##>9jiY#~}q^d#+4D{;>9buzZBdcG^0t;l7vv`rg;{@t^R@oGXKK8Ir#gG0qLTf`H<>YFx)bqu&~f2>AQ#dVs!*==SDCKwyZ{;eMLqascp^``Ql@ z*xOhNW${7*#d9DFIQaYczov1jB}{iQhK9Aw(eRG;LP)ZP4x36EW3~w;{*Kx;uDz|z z;NDkCu|O~Yz|GrDeL&c37~QMv#M{fq?f*8>dcc#B%w_@0sh~x@b}9&*p`T2k_vS1) z&o8IQ5*PV6fa&}7o?0VgIpNP>XDtV&nstBEnX8yKJl9b9GlMaJv7kzj&&zo^C}_vz zzTlhz1084}J9B*8V-zZAy=x!TjpajdrZXoReQsz&{fo^;$(>^af*a-Tb*p)TE<+TT zRUTp|vd!ME2mKs4UOP{I;Qa>bej95JH!GZM7`ll%dx0wni3NqpBf`$p)pqB9kUe9Q zoXdNcHY&i`Y=_88P$2EzE{uwp@e+}Hr!EWi16qzG!o<7EL>1yVZO8O|g$*E~1KlVd?rj8r1=+vrv82e{p>X)}3)TI-h)c7&dkG<&7dnBvU0{Z40??B(ZpnvGo*N4S zd$uko-5g3Y%IlkzdTJRDWDN9x&?sb{J2D`Iz+aNoXB4)IHpqmc*<+XZz#V4Q9?sJ% zRmG;o5N$rYAfh-0aJ4?Qq>!W6qNjr}dyEYRlV0vOQJ$iKjttzJb&Tu%`x`vf{{!&r z|E}lR%$lQ?x~{7bl)|72hZZ50862>GvbsN1GbS{ST&gcH%t#4)v2>0g0%$#ergJmZ z#blBc1a8JTIo2?4zr*a67wr#$xxfZQznJDEb{c2we>i%Flb1-rUmXX3XIZoX1jY?c z&64@Lg}(YF_AH%e5ACkIT;0;30`;nfUgm?eAqQ4qFI%O`rTlh7=I@~U6M$L*R*g1H zZEke;JBAiosBNzpk>>9bnZD_8Qd-;F);k#(ocpb3+CRs(gn(cLhY)~&9Wd1c)&Zu> zP!_PI11taYb(uDKJ>Uok42gZJIG`zt%pG$WZ{lZ&?wR`8kw2KHjtftrh{PcZNRMoP z=GJi_(MMS}R2GHW8ORtyK$=oFM{wJV8I610-!<*D6r=JE+@$ z1T{0Qw3;gp``N++M!wD#1~Lb&fr`&Kh!VO@&KaV-tY3j0D^{Qp>-hmu(3r^LANbeR z0`^W6&NN0VI8HMJpRs?LmOW_GgXub;XU|i8O?87;(O`Bv*A+@=&ek-R#8dMQN8>8S z*$_8_5=_H0DWT}Q(|{acbx0Bz1%)y2z$e_*VqiC*=6;xt-gMAI2dEmj0aO2z09qV? zV2xv)VA8UQJ{i0uS!p_K=j3b#wnDC?nIU*clFeF)z_iftBjqe33%0zfsXn0+W?&&ETB6zom6oGSt;WT|cF+b`@xA2>6}8 z>j}U(&JuKL68XIw4B{u(W~IP1^y>@fj?etJ;eb~HZHBC0=UfE-&YbX;Bq2>y)#;Hu!SM@<~svrx%_3Hv+^3;3%ThgsLblK}2F1_XY) z4|LGK{>@lixU_4kAIbv35Rs;mU4nBQ1vp_48E1E);uyS-Cx4I_FG^qoqKz`7*H-55 z2%?_97|Q4VoCyr$dwm0FROYjhp99Hj1eDc94%;iqX`3y;_Y)-A5d(jF1K_Z1rEEUq z)ho}CjS3k6YENg=XzzSR5ZLhx;0bdwL>qspPJ%Mv*OxC?w@H}zLR!g$%K}zj?RW!& z^Sswf=C6Ie^RM+lV|h>%CU<`Wk;;sbe1sJEOEG}Qvc*a3fdaZ|pg|Wei~+$Iw$!Wa zqV8g+EE8IB?00>*E}clP1(RJ+l!*fQ^e^1WO^VCfNEmF0+%6oV$>l6VGig3 zlSnf8E-;L}0n@)PEQGcx_I9)C4YxBEhjXs*I$M}#NLYgb?IwC0zPnrp1a9L7B3epN ziV`tmTq5Mv6%O5t7-ff}i;H=aIVwgrSRO6<<^~i7B0O-J`!rSLB@G%hn63xYJqKDd zPzk3Eu5al3W(+LOM>`{6r7NQqJ&!{nZG(VBbCwh7evU+*@nRJ-nwaPfKjUx8IyS?& zJn`w!LATIAhhXuy5BDUa;Q@M}hsJhAg8)R(;4m5nn}H6SETI~zJsnbz(OzK`o-0_v zA(T{Hn0qGudRsY~GOx9Oo~3rc@b{WJWr=ahsbnWUiCkHvwT7n2bQY533^~^XDA$-a z0lxq_;4eaq`We;+X*B!Sldg+wyscJ{Q zk&dd(FMSwGQqTr{fxXW2;!caZ+2Bwn1IhZ9eFslKxZl?M%m4!aa|D57ya+ZRNeM7G zWPk`WeVu%qh^z_j(3DVQQ#EBtHilAvlEm)QJwX4ltTk*dDtB_619m1b4DUy80But) z#)vZ3TcW*DFc~3HH>upQLDEcxfDMXDp!xmU=pF@flNOe)Y$vCR1l{a0 zhex{y@$*zNa9D*f5bVEa|6x?)2)vtYvf7*I^99fg=w2b8uP_TZ^a-W( zKvQd#3j2#n`&nX#rV+!e9mNNMSC5eO4=RLa%=ir@$xPY4#%PZPcAcdU3ZeBP$~)@7 z^cEwlh4s+r|6a0zr}b&glX<^eO&orYpe1MsKm)2F(UI(cBAXSZQxBP=}p4i+9oIKaU)pmjryWIC!+{WU<~HaLh_;QXP) z!t)ihq%#C8x@Msqkpj$?;)j5sumy!fN;zV+5p?hvl;@^}mImP6ZH;% zCL%{DBy(2=vS&D1ATSXDwv8nd#_t+6P?E0p4wBojA}3Al8At^SgDj`oRlUN#Tk6Q? z+Wn>Ba~&gqszU|oRKiDBcuf5H>r;NGg$_cI9m_$8FWHb7|t zb&|JAbPSJEP=|yO3eGi}~@K*t#x~S|alsh&EtRDdI1|SJo zq_plUyD-9#RAL`gg#(1=+7!>Zx0{?+`qwZHxBmr(c)|eap5;?yOP$@r>jIM{Ge09G zG}hCPlKM!kwXl=bLmO)+?)omC#o&Xxel1_Gyji&aN7`q9ZW9eU{S5wEb?trdmji<5 zX@p68-v9wMD9%OS4F0Burt61Hs#`k)!PAcR7`42+r|sDqx4GC%4?T}|y?gybA%ba| z#n!ZKR%C+jR$0JdyPOAs6Yqu_LEvoLbVZgP9f$o!Mplx~kg)}o^!~8k8))utpqggP8Xf@QA@jPOVPQg;0pa0aJtR=>qMM%&0=Ke`CtjK2 z3>SMcAmeECYiz^>s3bBr1&GY=j&oM;P<2+#|IR1QO-C>|X7hpuO#@}Kd3K{`++Q>) zYB(u}4Z4fhSB8UiA>7F5DbIKAXEH;<`U$ifqm^;0gRG{g;IZDT6Xn0qMw36j1XdJ@ zH)+N!VA2}8+d^>w0MI}Ky#j!dMuUrb(z*jp9bnTy+qBS7<7Jy7+^_{8f*#FSU)YG) z&t^J8r1g+w?I^TlT!%G=Wo(sH%4LR*Vyz4^N-Hv4blWrs(5{oSw25jo!FcP$;`P^E z5AE$HyeGo0=x-MID-hfma2Ca_inOz-NNo>+1c`n(T;1RMSKZ$Y#;e5jlmdPYBl>zG zfUbAvo`j}trli3v5ZILzjNf9cRX+jD>9yt=(Lw!W`quz;nZdTP?6WE*Y92b*LV&s%H;hGL%^s4TAIVDX zyAc$H3xU5_-zn^az*8o0%%&}Rmek=w5l3$gfVYC1b_!(1f&lc1vQEDP7|Ru;ZUCx* z-q1=8AOOJq4dC&JHi7eftly9d? zWUp=83F)Cr54B#WDe*Fab25Kg>34RSx{$vCvcO-=UjR_A_9oZ%t$wlPzS$sfw0Z6c zs%hXh(hIZm0n7l}KD)3R3T-H7X>Eh8b7Bt~%;V|ItAX~JOI)0QV1}PDl*Jla(-iPo z>9OQyqX1Ro)|;MyU_Z!=Ql_PJ{d!EeTZQ_g2mR;+S;J$kVI1lWD^SqF4baIJrkOr^ zLI&lvg)8WzJAuG$c*pjm781h7=lf2UKqbpq3w$r;74aN$h=4Rey$B67r~sjHQ|iZ8 z)YK1^d1*-5*WDAK8#m*WLm~$LvJ^I{K~Hqtw6G^YrI{k5kyWwCm@!j=+zq1{>om}! z2RmbqTm*^dC?w;}e-9WQoniz4`uPO7!wdo=Ahe*MM>A#(lY8AHIDvq42T$Drs0P~h zHh{iP&8LAvp~YsPUO>GRPG>hms(Jw0$8W(o?f-_Qel zfN|cA6N(&`z;LIMNYN0~EFl6zW|b{o&F0_WHjHQBY%ZA2E9f!BUicQ#F0&PeSoZHI zC)Ra;n?vgUR_jyPKss^4o2bA!1_s(M!?=pHrXd>(g`L6B+H3)V0eFTUV<^L5@R>qV zb$h3MXQX~je*D zf)8hJo)+{$&OVjO9>hh*AjXlw1)8p;RiZ6q_|rZfK;PdyYAqaO3=u&0UjS?Ynm^{i z$+i13@J?uD=u#vz7^S)$6Um6FwEzM7Q-4n$+lZm@3uRk+*;uQ6K(afHc@G7o_MKI}K#y+xV68?=_K!7H=@1dhGi+ zSidGNgbas7wlFFS{GIk29DAQd!|VMTGeS;`R#vAVzt*K#-I zkeK}gz+@}>?-B-q>yLv5hDVN6ISvUzPApec9yCWd+ z^p(~_J>o_U{xIj<$w#(kblqa2)R((~x!fBt{l`*k*gpN8D>gBgG(W31AF0wn*Ts7;R;~B1|cnWg-d%0ngxo z2-qH7Lla@|3Tri0l+w7-9N>3WJhfSOcb-W?u=udS26&0T_MDb@;V%7PqNZ7t7vm_gH@w}9kDuSR+cph*AOxGOaBBg z-O?wQq@egK${_#@SA zP)7nn4ZXQ!gTk%c?-dF{=gw!La{52@MKR2DD^ z_BO^phGSU?@_aenbJ@S0TBlQn<>XJW*a<^^$;SCXx?mY^4%#(G2?^r(@2hgQ}Um}rd8|Nw|_RT2U ztGN!`-;cVR1nm*rMj^D=tZMRt)i)jJA)$>(Fx1OhC0u;qP1`yNFd7W#_YZ3y^zgTF zKbnbbxl*Ri;Lv)XOi4OPG*Umpq^jW=^QOgZbf&{@`>EA+uxQpWj#}wD``_W&|1lzB87?E$j9EwenoPrj`b`(yp04GTLd;O&ALMiq#Ec! zgEo2*tmLKp5*3wbmS_&^O*0Zn%L2kRsGU(PR4F;P1I`UYu%@_nl~GE9z>&j*oQmWa zK)Uat5rK=CDG#!HS)e8{pQ}PqQC#mg-16XDAb}Yhs{wI8n)>@}Gr4V1JHd3(+ELZcZ&E~z7d;1Wk}2@ouNj;;UJ0D#F;kX6Au+gY^!Vp3C(B?A~4@^s2s z$zuZhB%p6-IB>bIU3o!y_cX$6^_Al_qd}bqBb8 zbM)D?(?!kC9?mmf25_nKD4|OttYsZAZAOgfEGRR`C60T0O7)M0me(pI?F+@0I_s{JxpiQ$XLq22yR{+_! z(kt&?7nt!?P%QiZ!p9Woy{V=#r;*~$eZKj{%hu}wj97W^&eZ~D{EzJ46KLyY{!Tha z*I5o}TxSvc{vU)eU$Fxo3$_lU2faclVS|CMCeV*T@HZ4>N?}>mbwFJQebWNmS{4X? z^HzqfZNDft&PnSwuHVDiFa)$_&lkbAeGeTXG`Bank#dA9qJkSC+*Aua8t6^$4ege!-#h~`+a+!MF$!mB zV$>z*M@ONoJrwu=LqPBp3}6Gnb`Zism7Ui+l6oQII~ffGZ5r?NGoBQ)KupbSvWOC@ zaui}u@iw#z_#0Okgw)R*yTbhr$L9KA6;*QwqV8g!3^7JH2mC%^P421*1}YcbuN?rG zK{d~U!dB}nW0V7d0c16yI=?QG#OWIQY(@P{>-jrn`Z}4wv<87$g;_X@cFF#&;Ne5b z1ULc+-Wu?P0_P}}x2c#S6xUg-Q>|$%Fytqr(Rg)<6^4ztV0}?sKwJM5h1+TgDzzR9 zL@zUz!t1vN2=eyEj<}wfa#S-&PIVu%Q+=WOT(UFN8$kQE>~k2(e6^HK8xWRIbOCb? zV$@|kuojK_ms6gG688}R9u)W<1#4=WJKY0-Ch)hpa2@SffKw$9c%};PhZOYoo-VnR z1SWT+jjr;TQPu^4X^hAwHLOehgCC!m>8#oTBvfzi+BXIorPkB={%v~}@N5&2CI51} z>u3;o+S~ATYTVNvs( z+wpGi-GREOHkjjsH{>=c6rLDmJTif?58538@K?G{`VOFbf^KgB_nQL*|AI6SYaZla6?{aD7T(7aZ&RD%R^c)a32E&SHPV^s8amUQo9o zfe~g|X+Zyc_rQF+ECH_l0@l2M(}L;yA=8-cXNs_r66nVVXaj)v z8{Aa8isosdfmSu3Q9}=UsE?d6f46|Y={sWhS)3A}FeyvJOPRL4hfSXiz$>N>5NsJ; z)5gZGJCYTRC(e<%&_n93hxXQHsvnq8WYd;1a*Ey_wYBW~RjT(J_6Gz^RTJsi5Xhh! zP=`8|K4<1HLKyfZ7&3lWz%Rhy4C(uI6l=;+Gb^D4YkE*01m)6?}r=;^& ztTWXn$0aV{02Q_kJ@ryWs1t+0H3p_11)Q51y6YC1ZzQ=T0#hGxo&8H=_AeM~I=5pV z8Ai9aW!nSb`GA=wy16eIzLNIMU@*Bgw^>Q=$&{7j$!e#qlg;f3fYXQpX)I@q2~wVM z*9#peFE$%@M6_GPF9rqh# z6heaCp|+fk?Mb05VBmv|5Es4NzR%>icfeaFzS9<#r`00UOnI# z2n=j+_BIe0+;VcUa~1B>Zwh6=hsqdEjLTEg_v>{J7G1ok4>J4}jtroL|A5k6iyK#- zffHAA`TC@QmvgA^t5`-#0|XuPU_Ks<%YgHN#e~n|BT~1UgGmq&=pVma+|5q3oc1ST zY`fK5T)VPlrPCrlDj$T1Wd@U3&Ca0i^<=s8jGS7-*p9N=jOA;mY+=L8 zI8)v}{QiIbH@Wptg#uHmcaM`4L5Atj|u%wfb2 z+)G^J2-nUt2TNA#46fkqJ3HR?3hI=BwKc)RbkxT&g8X6XXb2f(8(92Zu>7jv`E~^Ta$$g1^KWr^L`u z(b{p32zV&6@5e)1twSr=%(jO||T&2uRXk&r=CAA^Zx^Bu+Hda6)My^|B z+DpeZaMQQ%aA$O*XK$8%Lj-vK0MNfi;OWUo-k7sU0W{x+TBB?PFG7?FWOAF5iLV3n zgH64f%4Fx_r0$cb1I(I3xmmyjpr6BgIpFVAk5ty#4svPIU$I$0U>%tMM0s+K0#3lv zOkxtAiz=*(5{3I%O`z|u1k-}hHb9G_?%O}tl&pwwYu7m-PfY;NkGeyxHX3Ng>^ScO zevhkzz*-N%C9|_pm92R!TMql{CA8Chg_mJ%y$qASLf5W{*d>SqQ;#9{+L`tl`FB8O zpJRixFks_k^a&z-d%MkB>618a8cO&ZBH(W-`>+aJg;aW{Hm66K*qYA)erc_DG`KNiu;w@(5dz{3wNlVv1Gm7y^kAUx z2O9k7-UO5w`}Ovqnid+XWRw8_{o`j~PxC%Qp`L=C?QSyC!lHHL4Z}7;OqoBMsTHl{ z3G(hmd@buxdv-tQy3c6FTEq9D*08cX!xIy-nS2d}Yr9=3Mlo(ij(?KYhMyYw)Q6(T z0}x|SLk}JF`UA|P1JYf@xge!vmS!`i&}}L3%Wa=q3e_`_=5}O0c>+QABR!p3Z}@(8 zfL#N4-Y}5qW{PZB3l$E97!^ZxgQu)t1#T9ZMKRdFe?a@UKLE$c+YkV>H!xiX4#f{6 zdmU$?uLLUq=rr`*JM;*kzP-T>ZVtP(0)#ib0U<#@1|Wn0L$LusaknFG_S@%$S}f;4jw) z#48S5*4D}3@2jW?vE4=mjO?dpTqBIY@8fAv*9aaIjkphF0^27#*#g!$*mFiL*}$wg zw|?*Zd#7T`Lyl>OvWDX4`1jFc?f9uC@B|t@(`#vQMWjbQs(oV|+6VJm-tXbD+ zlFlQcOrEEvV!AuyT?~yNa3!01$`n(6DFY$+JJ;#8uVJE)Q-`t~B!(6M*w@)OBR2~E z%F996pWm2r&3byz$uUASWC&_tq^*F$4a@*q>2Xdp-$yW5nk{bC3kC{Mb#s4vbd^A| zU4?|NwP_u{8u;sX&fZzdQ-FnX>7bi?;B?A=1?O)PURYo%Pis2`z;WQOQp1|pKLL7E zSL?!NS%a!!+oKIY>t_KsST_q8V9W&Gz?w0Yp`fE`qm7QGk^rEij%2bxN;fEQ)9l{w zH7t*fWkAT68wX4PjtV+d{}*ux<}l>8)1iG1Q9i?(656JEp5LFC_qRGo(j|u0mC(2` zHaR|-h;u)t<5I*pNy!wg0e-!M@qplN{JFyb2HU;VK%5qO&uO&3k73`Z1nU7$dNVhN zk=gVehOWg%i)R80-*G-Ar#~u0+Nh1=Ce}d-jA3g32KNn2w=D_&W(1Sx%t3RdRkio} zS?;gKY+tUvFO5lH`teK$*KzAhLO#{B(9A)Hga1qa`C}N6DM->Tuef5{_5JJqXUy=} ziFha(#y~KE9e_yzpPGNusqN3_@cZo!ZjdVu8-t1MIY(v+ADjuCb7%td{s8kn)*80O z(7ge5djr*uC2|{_XV^?5Em-sT{r~(QO13kQIjWQb1uY;o^Mo+agQgx#*A3a6M(S;l zI(1T+zp1Dr31}>-1rw_=$0^?`9!+UyOZZV;y0;dP?=bQZd3&>8QFbt!6~|`1%Ho=+ z3R97aw$l;ZC^UcAXffW}zx{2Ht)p_Ubq_{s2vYE1fTnKFo}hI)91Qf(ZF7Ux?z+)I5-;L>&kA#@7Jb;mIu zH@N_oOywNlcM!V~;MbO$h~YIF{5zHf9GZ)mFy7pZ;JdXYeLS9-Yck*{p^&0U>1g`t z?GjaI+923FSyfvAu_)w%H@cIj;O4k$t*fX^R~_=%bBW^ zBeSuBhp6yo2HZ?mgr!D&3j9USpd)}d^(}_8{U=&$@@kbLQ<8-H-Zwh4*9org|Mng3 z&HBo&H*Pr#f`Rt%@o($Iel4`3ba9IF8UQqZEOkhwne#ZJ@pJt#iQ`Iaye00H@m)yX z6Ae_^vjhJXz+cSh*V>0Q&Y*_i0mQUCkL`g7yt5EtTP@*L(!E-Pgee;9$+_)h`cg)J zr|OE4oBfLj@VEaRlrOhib4(WSETcE9h222lNZ;c{>jFO?9>6aseS`aSQN5eeapNkv z?DQ;P-{u%=4$f;Cm$_iH8|cAZo7%fj*hY}J90}U*-)Cl{o@`r^Wb~?zEEi_}a&ovd z`3a@`$Ll`V(!h^|4M#ThAGJ3g+$vkAd zO&i{inR^XOvMcS+Fc{H`XOTQH0>}2+ht~a4D$vn&0?$c;zsLunOTk~tt?51KTB?A3 zED*J<@roCBKG(rE@&n2h>Va=2i+Mh7w>$Q@f zau_^g->-mQX5aBk7sUwd5QhC48T;N)e2+Tpc#-*@5~ym-8g5&F21f}zfx`wsyKP8& zuoM8|K;MjDqs#`h?xE}6fu4O>Xsv4U?%{Am-mx+J-Vwrewj%cuw~yrQpt?Zm2*v26`|+4v=zX@R#+<93;TJ z2wIBNPn!&g-GuBl~ z=i9hu(W@MdD0{Y3TEmDW<1%SIW|A#!CmKA03YQ~cjETlktN$~gV!^#8(GcY~*ATVagolS{_ zf?9wu((UHd7go&>oTlGB293<;OXs_t{fqbLb%$jE`}S|?-mzO<;K1IuwavS!IXd9D z;MUi^U9??S+dC_&;29kC<=$%R{J20p;I_50e8-C(Rv-Y&G-mk-R&{|re}$6~%qQd&;f^D30L740%9^A7GhAqdC? zf7v|*g}y)x1l{ck{%)O{7tV|f-VLE?6tvK=!`_WF&k&+{F7;_J9}VDd>&&PA$4@t- zfAS+KwX9EnZO`2l@b9Cr?t5ze`o56lT%*fu-YP5u~K1aJZrEGye7sZrDPD>yr%-^kBef zy|XyN0|lJmFeaZ`3u95Xfxp>IV1bj%gbW_zmEBer{l@6%0g{a+St)^bzpaa7L*oS7{9x;M)<@&+;d{72aFJL@0oR$wUbw#U5%U1c1lbnRaAI zL2p`jh6dml7x2~?JvctJ4rk?s)~PfL7-O~M1DU`pe^I1OYFat2)XrYwmH^;nkxbsF>gJFO z+}*wx_;_gzgxXF?g<+2jG5U?2T|3{`ME0HBh>F1eZR^^o*5JEu%T2nXAwFAB3~Xh9 zU~k{x?q#S9wx|x=Qvv+?|J*vf)I&G}n5^$O89#l`$YWUb&jTR=?f;0dW5oz2l)-z_ZQ0F~G{~olnQCk*m}NCIWcATkUE#+Da9>DNiXl zqw`MoQAq6+Ti+Wqe~ocJe?G>28a;g^!c-LWO=RqK;v^7+x4(U#V>X^fAOmBy)?@Yx z_jxQcn3ys+qCLv{$OD3Ho4aLts)sd$Rn3`I$jwub0SvpZVWZ6$Fhz_U=GKWfKZBXT zSTLLA@7YMDMkt;D?Jy*J*SXt` zU~d6F>o?0xvQD_&-Di`f&(e`|?=|OqQnm@@;IL1U0Wt*UqX#n9Mng(4;c~KEN+vmgGwDo z&r6n*aXepvN3~3A%Ai2juj4Quf$#q3PiX%>&_NH;JS}L1ArlwVQ8(^*TaML`FBlQ% z@qj0N0NfjB+nZA)UID@#8la|u9yDler10U1hE?rn2(Ps>b)4UUslQ`KDEgVe-W+2U z8gMhyof_K9Tq9$E8Y&{9ac^CNxj?`{lZ=wYDjC1)p3Mb+z4JJw^kU#|^qOG&j&C4g z{(2BN(h&ymlQWb%0C*}}ekw3zMylt2$y%S+Tq4TMt}!xY0sD1=?7#gCJg3e##rxBb zNM^0u;d`{4ioG`3QTEY6CE@2u0Jk5*+buG2Gi3r3t0ki@N^kXAf zH~yw>1yT0zgC`W5A(#M>2ZJ5M+j4Tl7(Fd2@P#sQ86Ag2^gE3;f2Y8hnT~yuNv{M1 zQ^K>jVV`{Q&5nJ2*rr{Smfq{cV*d1?>&M?WinZ zU-p%bk3uH+Y_D}NIqBdUAaJORK$fjk(F~#7`Aa8u9-iEWL^6nD&rIG*D_Cl-`TMYf z@+=uhxb{0h#22wr6FvFQ#zK&AsFymxLz#30GO4mO%zTM~!X@Bu@whRE)&TGCV3Y!Q zdjr*|p_I?qoi`Y=g3iq}^)pJrU)JYwAo#nB4seZUs4?5OiPAhjcM=o_^ z>@dHaCqmdqPN`%Flj);ibe3!aD(|H3x$NnvmNrfD%n-vS`ZedXa!87uwHg9}Ri06{Dum6UjcTFzTSaUUz(k?FniGK$WGQSg zV)*zpyrB&%M470DT6L_D@#t)(`!r0{x*g>a+87%J?e{;xj$Z5g&UK8j{$=8`fw^QL z3@P)2<4S$I!#z;Jq6Y&#>3{-XL-X0o(91aH4B*Ub5#@h}XwW$WK9`902mlRYDhN2s{+&+ImBu?B-5J>IgW#{V){I%-qrI&nfzO@S!?|ySMfdJu zA>Yj2oD=;p8NytI^uwMe+JG@;pi)`Y_$803jXbJUW>3PzdW>cQXV%n8=??&KS2#1^ zK7PJKUPh_FA)EvJuC`v|$`xz?-rn5xpwvQhv!a)!yy(a(7D~r-OG=2wjCjPduAGcVzdr+kETVnfZ>M7PN);)wVAo)_ z)o|lEH2jR{?6w82yMLEu|IYn4-ba4`bU(uK0(}>mgdWodX)*9GEWx48_lVNrq*S}$ z>m0lw$ofW%=r}?<&3<(=(mqf20)#U5uYQCAQ;v2*c$vU>6WXMKAf%jqVh&tWiF3)d z5di@D$2bot?O2Kn%KZI}ytdfKAO8>kxv!74&8nMs%>s7%d&_h=qb{&IcTHY_SAGwFh_MoOwWBJDQ)jb&KyXQbrzxR7EKJ4axw{Qc3{{3S}*2r~N z`q{ua`;=jHL233gCG3Yif`1gpw0PR&eEAaeY(5u#Gz1O9<1^$vMFh4;d2GIt0rUPCA{W2i2YP7h!WI;? zs6aOaJ?Md+rTVI^>C8ItTJmZRa`pSTEa6GehoZ`zHQ_A~e?2?&n!~^wAW%#7o!HG~ z-B2U?5RVz_v@%~A{8i1hz+YM@I-?>WAs=cFR|`vxB)bXE(Fk=SQndzn{}|HOSWwJ& zwsW$dc$pkpkI_tE;ti=)1U&;XaFLS==cIq~vt?1B*^uCz)c(c(J)7R{-=-hX`TN^) zjWz>4os;o|PzU_Qgp-LXttAXN=OmGsl(=__f)x3&iDh0yvvqTnZ!Y6?((U}uah-XD zf$!K?V*=xFBS03ai%S(Hm)%7Q(qIZ37($j4#9LER5SU_tmdkNd>p+)2nz=T~u-22K zQx>o-?sC8dN~~EcNOYQO{mxnwN>Aconv!)(Wno58R{WBW~)7)1b^jwY+e1J zmhpZ9@M~w@PL%G{4H^StVOv9N4AwkUDiRpLMLv$_cOT36$J#-3Oh4ltfV|9)iHbUL z^aOD8og@mO-!m(qMtxmdk2`8TO;q`3W%k=a;WLPiiOuUkvztOX|Zthtw-B;D^V*QeBFM!hj-Vx9TNb~IXya9p^G?w+28!YQcIp8lq|M3{tYo_fp1#}~TQ)0+Zcng`KB%pxK*;{tgEA0)kA2tBh42*iy z-acmp!wDJipFb0L9VnFqe`^b-jY1qHiYr%V6zX*R>VDIPtk#jeI8tN9ijb2%Y8jJ* z7-t(>2RJ4OB9uyg4Ljr8HpI^#r$(r7E$ANlkB>1Ec=)1eZ=ky;zcEtgbi+V4v$xsP z#}l6L1ZW#*Z+B<&X#k;t7N~(?^U0!zzB>3@Q5vm4U~oYtd#*Vkus45KAh0#?%2u#k z8fX9j)Ayj-n?MOHl?i93wv>RsCA80Wz=vUA?7%^7QSw3n>`)NSUNnLAYp-vnE<3RvD`^}hvrg)xj7&lIK2Z3>;VO)s?1tXawLEup* zI)f70XmElhF5%Dv*yf-(`-sWATEaWyKJ9G?ezF0s?qjU^3&64z_z4m7zC+Aj8T#A~ zBFF8j@bd{U0>CP%lTks|Z|F1TZ;CM{CG@~tUz;9*;4vc@ZbP2sW3+egumHi$_%qc9 zKARw&PP#gDC;%{RJJQKU0!gJH@Jb&GQ$mL&Lrh+93^Y`!kFc`D8xjNt8v$KkiWYO#mTFpWdA{>#`?Y-8z(`hJAh}m=@~WlGWB-1&;f$}@dWsI zY}-CUPIr%LyrjR+Z}Gu%)%Z4 ztUAF4bdnzWGlReO+=*ll5{B8~jcwC;O6qFg4ryN2TpAT9O$HhafgZT2@Am3#Dtvl= z*01%82>c~RVZa0G{tB2RC`@}9)xWT^{_H(WjfQUHozjiQua=N$93g=p|nw7 zL+?)p7ofbpu1~{Efow0M1_5U4Q}cV{+Nohj?V3;^0x|l0P917r|5VU23>3YzpXXYk zR=d=FpoR|4Jx6I_+KGbCfC<2{_3sD3V+7pP9iV+1Wq2ae8`ZMu7>mlDwye`>%=Him zGdn1Rffc)gz_o9FSlV*JhOt55n-K7d%!vsUjqMw@{7?-*_ZZhfp+jR&$IUEO?yv%Y z)mzqt*JfQZxNQ*n?f_?yF&pU`$3UGULEy9M0%L~XhTAuGn}^v2@-BGn9rz-UtM~iD zd@-HgJqEpdzLeX0i2=53KbQ~*_Qw;qDQ_AqTHH`6i>w;JAP0nFGMFTDHFrMHTCRP3 z06Y-r?G0cI6rX_LH&{v`wPQa`8Nu|j>t_cLxKUsX@^xhW%ykT8!Ot;?*1AC6&Ww4B zspx%C;HipzPF1xr`(D}(G_f5w0C9H0*g7)Y+6)A0q_ToP@w{Ho^C8=}@qF@w&&+^+ zJkqw$-tRK{x(4uf*@OD78yNd)niFKKYZY%J%x0@el$wHgSw;4v8snaE{R{-Ffgaih zf(dsnd2+^_KL-TH+duw6YhiSoKt; zE8pKysIcEKuCyYz%LN7)tvbsTplY0c$53<%rZ@T7pJu)HAK##z9qa&xG#I-UhGfkc zFN+9cDvfYcx!>T{w9qobxCa{R1e=ZXeXB}ScxY2exW?*;LIh~?6)sFDT#PeA%xMnKYiM!#wj48i^6uM4Hgk@ z3LUDA3HW`2mm|>iLtQJwP|<2DTQ^u66_T}f9a*PoS!+spQLo@q$fhzEC#B2*ls@8Ar{S*$)DnOxJ&dn6&jO1E@M_ZkL zxnZuc{X^>DjWMRw;N~aWQ?NYG(oL!>?NNOumZ>3-!yF4r#OX3*&@tCar?o@ZP0YTZ znGNl;&`<4u`wsUOSKZZfHKA6jHVr!a&;NH_^P6;}qD=`15ePa&40wVJ?}}?iFqllB zeHb>dW6KXyRM|H8+vKe$gab2yOXL_9$f}BaR`4sk_A>_pM}oAcz+|Puflv;m-6(te z4xoPzw9Dkb2TAG?Q(-?@wLk6kd;gz7PG{IOZQHDTzR#Za%>s6eiVC{)Zceg9$*Utw zU7}IH8s~L!Km=9nl7lGDPdR8OUq;|w_xqSYV6EfMtNDwZC2sqy8li72k=0k}eeoZE zhr4A{nqJH2dep9oFc_s|0p-q5l4qBt%Ds(1ux%kt)X;XT`T`sLR^s-8HPIGTT{rbs z;!+RT-{Ubpzx@D9VO?OkRz%jV5!5b{h>Gh)W8|LTFa+UZ$7iXR0$&=pXRws+mF5m2 zKy}~TKKohIG;jmuP$>^<(?CZW=;OJ=vp3}Wf4f6t?K6Gf0sQz?-%XOdhsDNcj8M;( zenscc7gPf~m(Ajn!!CQ_IbZ!58Lq}*_cb1sTTJ;mmG-%!BX9PzY((B|aCCOuk91S| z2@Z#Qwr7jWlE{4bRb57os+rdO^4xo}G%~af9uQ4ziudVs|6dR25ut7GW6us$GD9YC zMt7J{(+cO}vx5#g=#+xy?d}w%ZvmmjcB~U@Hq;3|YF+Ip%zO%2e_CVUTr*|gco+K1 zg9|iJ_C1!5wbp=5_T3u7cbTfZzo6}4Kww0@3LW1c(~ ziUH6@%K$H@U>DW|roi`A0t3yM3H%M9dxqOtH2D~3eHGwW zB9o}#9+_juI==|^uQiDBb|M~U5BNtC{1u{Wlrs;}t$jP~9jS~j8w^-ESFAC`4a4P> zlR#({tdhvJ2{>#Fxg|^p0F>b~e(?@K4+w`@WpjHmeU5=OXTs0b&(Y3+LH@KiHxMW2 zX=#^tCgbT!skze+Sy%uG@Hfymhl0ObG(D+|-J|Ux8*I!3HXVR!t^QBcg+}4Cn`WSx z?0%-}h=Bqg1TLuooHJg5@9+&)*}nh)%`MwW)Ej{NSy{j^I`I^4TPVBL1&-)3bi`hL z(0UWAV^m>Izd}DzB>|r3^ZR|tXq>jP-lly<;Om%L*}z1J5;PFb2wrW=rAZj>GwJ;U z==-;*s}dYW?lk1;((yiXz(8@;#1Z%KNE!C3S_9ZPAR5tpbc^L0>{R`GjAqCEzde zNdT)1KLUBM#<}x)sPC)b25M!fbwC5C+I5#(qj-10U#)vN_*=^kB75(Hb%`L_;LfQw z))nRnnZcK41Hsc8I4mRh6J!GWuB_WX{)ZNY$-mmK2Uw!mg(?YDIFt%JQ}_&H*CSIh z=f}#pwgfJ!!FYBIXSHD>*v=w?a=Ih`V~QB`%&te}Ca2ddu9C1p0k^}zQ=LZZ)+?D!SEt@=A^F`+qWKT7QqMcSD z1Na62Edd~nAc;cg5YxbK%vdI`jSee=-F89vmw`oTLd)1eSTavAQYK)=KYiL;aKUS( zlA=kqYUnEfcp?G)^;gAGV-(PQGJ@L3c>6hp*Aq5FHl97>6b|(gt4bVX-iZno$*nb4 zYwbV8=pw1TB(;zw6R99u*;xB{`&RDkw)LD8m`acU_6UL{EQ0Thmd+16tv{;^W=>UY zQP~s2E~7Rq1G}#9?fU@QSaQ%1K;P-L>@Y=J08;X29&S_*o zV5K}t?pXOI8iE0I577N$_Bx4{D(owgg1VI7FN7{{v;7`_|KCOS44(yTmdw*5j;$c@ ztn(e23GDd{_Bgaz0$;GH_^g~#BedWBFMZTd(2>8_l=*81f_Lv0_{-=pE0L|Nc_Gx9->s;0)HHSazXrw~MADW!h7f&Yk4N{SI)yIov2yjbOWl5+L{n z`L6UHvcj28U-w390G8Q?DW#J7dtNpnCLYXO3dH1b);oGZf67y?Xt7b$%E`g_LjvnA z=u1n1!HJr`QxKm@y;TG>ZbsY7Tqt|CQP6@~v1k$yJi&meLi4=OyWsr>O|$U&Y25?; zwSm2^YSkLEgSerSujg#s+esP0pC=Qz<(&bs_H3bU-h(=3Lv)^>)r!Izz`hd<)sW#} zCKaMqXa_=hL_kJSODD67tLbYyuwp5gSZAK2y%CQ0{P7O@9|(;arfh=^==&Y$`K-7) zwnPIH(8mLw006fev~4>_G$A0|p#f;r00fgs)CoRw_ZZ(FJ;2RY4E;zmqJ%+gM;9{D ziCm3pCwdV^mI4^-miV=MU`@e3WrwN>1h(onMzU5)X29OQ%%x2jeI7{`S26e-=#*W- zUprH5nu~S>CWUFmNl+V{J8y&NZY{%eIyyt}n6?=lV`IAx;PJ4YEqEXW=Dnot=#8WO z-e?&HI3g-aF@5Vt5qtB3tFvxQfRf6#IdKsq9}la22r^JJ76qbWogtto2{Q%*b%=%&beKwih?=$FZJ-WyLRSTWv2^a#zoFH!teB%3pVmkm8;{~|ik z@3VhQ1p>#Ak&*2k;HlR02yX!N!DLEE*I7tk4!yVyI4k)arirTdV>Fb%51E}N5h$X@ zVirW}NOFL|z99`|;P273bVJqasNmW&viDLoyv8btrXOpNv=;Eo+3eo^)M&Hz9{|tN zyef0h-XJ(sAp3W+&nZ9nwl@U##+^fLqmIi023Wu_+?a8>OI_edKTI-Yue!hvMgI|g zCB}ZbjP7*wQ6)MPR!lm#`!YwTF6ti)_zSQq`Qhxz)}9&5@?F`wwvG_+YtfeXT@o&F zlEF5>5o2W`>F1DU>|)=g;+!mTz!MEN@$)%k1mAC91`TFaBlr$WMzG$tnh#vD^_fIe z(+uo_M7*y6edata6WD5-0k=*K1Aj>a{qyGtmVId$Y7X(lfd(c#z2eF zO`$v*XM0WQ(STgBnR;t;x-YJ0GynkFZRwtnW(z5#zm5U7q4QS`^w>QnnKe4q+do`( zkoz5A6|Ce3Rtcm5m+i*NYthhT$oel9|nY zXtuQ$42}XuVOnLi|DMZ4_;W?WI`Ckcb1GwACk$Jh6rBoA8loYyvm5P|+xH<;(s2NV zvb>w6c5~kqfWMqx1_#hT$EZprQ3e_1YR)<)5Lnr5Owe&ppl|oSjO8xxb~MO^5QG9y z4RJRmw>1WgaE#5d3T0-6kMdjlXLc>nXp?imTfayx#&$h_qg3KIqF)MB9|m!1+RCw9t~3 zLY1V*mTL`H$_6=xuoU>4LC;Q!HI8Zw=Bqcq2x#^}BLYC92A`BUYEMIG8pYK29oRAZ zuH&=WueLth7TVSZe+|%oe+1Uu1~)?uH^uL8tbkxM^xbY5?-ITDLVHDGI<~Tc!L)IP z;Xw;`hyJzcHf;eN1b!<6-K)l8fh52kClTd!E(zNla4OPYKSBS`-)HXqMzzr2Kwcw2 zVPb?HgIXFWCIwV9}Nr{zqUl_X{cf3xK|&~1^iP!djy6JZ9{IY zbq)lc@rMY=VaWa6?jbwFWCCk748RHD5;eSv3mMN-o?M+NZDF0YY-b7M;E-Glv8^kM zJKt<@c=$j9xbFfHs!Y-V`T>C7mOj&CW?}yf80ayj(gS~EoAW9$6a&=0S3G2=Ewq5sTrplw=<4 zU2B;3n$N#82<+)&x7)fay2nuGTr3Ylb%8y=%keG5_HAP90p=VrBkTCb`#Zqj|29ic z9lP)<;BTp{+IkNU2-YwF!7U8nZ)5%RFaW_@s#McqtF>bNQ~;p28^ELErN~utHJ#$1_Dn!9 z0KlzXhTsq&cyADRV?RdbQoFzMi#v75UiWu}S6;^Ns~&<$9F=Jp5rVW~{_@To`f~z- zM=-T%p(h&ZFK?cU`$TpO^w2nOA`?Bd0)#hcfF^oqZ3@((^7)Opu2)>=xl`SV$$4xn zrN^da@|94AW;Ud#PRf|#Ks0p0Ch`?l8p*lyM|-O>D(zK@d@HAWwtk6%zad&&{>|`y z+i|l?$%Juy6<9zWla)>$O*E%iQ=k>&93qyscmRHF_}d14r)N^vjli#)fzAT9c6*Fr z_TEH|V1I1=00_>3NC9JUrgf*qVQAM1p0oR`V2sAfRGtAco5I^?ogl!eMi&9}#sCWn z1?NWyP_ZxfsRM+2jRU%yzT~T$56$F5^gC>uk9w&?oHc# z)Y?xuo-o4pk!zR=Scm37;&!3nI10%S zCi^#3gNG!*8Wl{LfjV+1H@*ZA49p8g_6RR~TNyKC53}`fZ4$@QayY5?3<1I_;~9b4 z!1E~vpno5{rpl&?_MY8$%d>5IavEhLZD`LScFh*qMFq01mNv))0ijy6piCMGj`f>$ zKLi?)88Urm(3cA4X=MjZm1lAN8`;~Nd%~tkEky%bHPEnGz)yHh5Lj3yrKUbG$f{Y=mDVz7YJ_0e>DuuTi0K0^;)9K?eDaUju5eKv`KiR1L=2uV!AAG>1OjQtgsPEgXG7Nh# z&}lua=V+y-i-EvR1I_JjO#r1pTE7Vb^Pj&U9Y|UU2;OUrz6u>-%G+ce!ZRuV_cbHO=j_hjhh>os{I$oh2LELVE}j0{Zg@nE&;6P*X;2dxPF7 z`WAS<7)9z4{o8BkdksAz;J1MuS~+!sn}HI8bU;{PmHF)hzq_q9w18mEfGNHb3Km@~ z2l{gRsSdF0z|2dR{KN54js z1^!^bD5aIMpDteH*lk-GyptktUfn6jkHkQ6HX9rqYes*6^h9$blm{OLr`~5vU4k(%H63sc*ueb(xxw^}V zzzFAYrXME81OiWe)80p5#eTU2WpT)!$SM!Cm!i5=Pr=|mzkDyfzp*lcQ;xX}{bARd zwfCMF-K9^}P8RLj#AY!CN<^EMs7vM78kW3ENGCGjg1QqBthha9Mv9rqnKFn=bxVS_ zwKH^Kto=)FKmfNv6XS@PE>m{^{T^uQw=oM?8e9-X{=NAf3IMF&917KSH#SXlGt@9w zY7A7Ff`B-hymrjGPJzK!WgI}EOvsTFR8f{%ps$~mziQ&>{_cMP^nb!qF>%kfnhOl! zTihxvd0S{rCucl`}nz$Z8=Yl6U{I_?!6Rki8@Q>f;B1wCfBjNdbzhZj9sDfm0F zWaRj$Xt4`1pogrmUv3|$5SZx8lhJ%y>HzCF=*vEW3D}m-UFnn~i0he09u5$E1GwKD zAo$y;Ax%KAfoq4m*1n@^8!#qT4>&OYk+E?(wms$f)Pz9rUTk?=??u5m9r2lgU_GSj z`f>oVQu~xiNR~sf)d2<6(Ar0vI}b;iXXPaobwHq>Pd7+`b8ub}1Xc=~``w`pH~;xF zLx@%!+aw@N6>om_eKsBw5ZqdQUJ=c+NvqN9{iU_-AH;qnI`t<=10D!kU z+?od3(aCoM1vgYoo!|q&U)pIsOR!<)uY?oL*d7LP@OPB==$||G=N)h{+R+1krxW{b zpnJ}77E|tw!1OvpE>MD_5cYzc?C%x0zz~v4J3E)J_3G04AaKM%gJk9Au=JFEJygHl zrK{3JmXeqK%hD&u00YmM_Cet3yY^;*z%_KP%JV3DvoF1;WGtzmPrQuuO?r`FZ_72{ z(R0ceYi`m;S&5#^LrlvHZt6|z*hFa1oS+&XoWQsa6zboc47K|kD34xP8!HeHtuhfY zT-s9m2nj&F4K(iTVKUdNbe>I&10gzlRe6mwIu~hx?k9kG44LiC_W@j7Wm8*Ytklpp znwVY)su9T)8_78i{E(vz3!Yoau2oI^`Di_}e*nef}sF=vmGrW4a!iDLbiAjK39de6?y!FaXrk?Hb_Rk&%u``q_bLU52Gho@Z5f5(Y~PT7 zE%X_;9$0^x+BqQ!mp!*hojGJ7Q!WUs0Gg5J+2vd#c!CCckNCu{4g#YB_2z-U|NW8K zro95zpmN2UPpXIXM*+dF2LiY9$#WD1mb4RU-p-1&o}A~W1HaW)b%qj6`Pcc1BG#fj zkZGyrzkkgjFakhxyMv~OMP-L4FJ_E)F#^Ez2^|1*O#{vS4!1EQcwHxWW5j(kZO}PX zN0rxFqXwaC%vym$+aL>2)^ZA`12);bVgzL%ps#$#mJw&bA#)E2SnGA1 z=?9MR_RV!TH8%kLl(ips6)Fel7O_1RcYFyi6Ep-$VopGm2NG>f&crdpCCN^b0CI`e zb-KyRg0b7Gyv%o7?mK$`0!#PI$sf#k=aAo$s zfZGOohsone{cl`jN^Ku6g<J<+=BltGd2<{Q# zCoDj)t>PJh1$mx#yUtw|0GRu20LQuh!cbZR695-1xdyI%PZ(Jzybe_(D;NQ@N;|AL zc-WxUfG;dGLxR9BcMs;g-N9dXe#tc2k&0U4YgPy?s#Sg8f#$g%>Qa|d9bN$hMg;Zk zKEv7s0Orr1d}*O9yJW91Ke^1y)%BOYAKKX7b_9Z73j}WKj@{AV@5X0M4lrXDC-t+3 z{Al|`FIQV!Sh@c)zNeBcn+i_Nb;1ysKYsxH&);VdSl#bn9?w86y77OA8~drCuTzGF z)}Y_tK?4GQzr!7dY|Eui@IVi(NoRXCaCVd?-plOa++x-pDxMO0wZv&nojE(qd_&%M zC``3)eL%*F_#*>^>JlV{;b1P3uNxyU8Uf=`!y!jd^}4^c19@y`GrAPM>^yUW4baMl zQ!s$OQ^14)fDZuZ?X10LH~f%>ZGk2^veK`29Fj9!HoR~1;Zo1h!L(wIIWt~2flIJ} z#>$E|wM%8PS$@m@Y9_^O)BF%*kP-w8UgrFjV^BIiflync0s7}a|7?$Wa|6&_`rQaC z2a)b&h)5iCBp8Dnxgl}s_(31S>>-TQm#1-p8v>_DWQj8?>HHIB{%Y_*H*fB1YY)~j z2L`yHGPf^GvZJ&d?p*4D0SUQ1->;?I+=lF5TI9Gk*7-ioJtA*HaE>e02(_&(=ODiThV1C(zV281*$N?=6?|4%V6puwv1Kb{U~&}CAsN&^ z0nB@P@2ds^m)P?MIX?)7y2sH|E9&*hEa0R3AHH5;DuBSSQ(fQ$u#{xz2wkeTufNLx zzeoGePCl9t_}i85Tata+p{`A31$&=YPXg9+>lXkx$9|zixrLlkIRI6_-%}`}N8R!H z7_!H2ccA+XIvl8>@8geMvB+F@g;fH9QCbg}u`dDEff59K@WkvQ_v+_j-t0;7j}%np zPCw7?8v>V2g}pJweQvSOL*TDc2M2qixcngk0!2Vz9BG~#j^_FCaIY&N;bE^kesA=_ zU;Woli%n)rd#;iT|2yh0xajLmyCex!1%h7(1a4RJk+w8w_a#}UV|}V;gQIg}Qpwas zCvOd}3B{G&=yL>A2DvqMlN6hhdl)c({sjD=zmFq`0B;NkoZWqHeCDS0kd;_VK<|%% z9{PTRThl^2Zbf$(vIM%uKu<;_umq^BPs|X`M-bq$UBET^t+#)K54>e@`&UItDZiqZ4 zn=iT4EQtZ1l-G}v2wb#`HEugqm;gvD18@$^w`%=PK(GlIL8GyyrYvKCAtFB6H&k(P zg`9ts*e4;eC)%CB95WsC9h|I&BnWH`g2W=u!ZC6;MQKTjJvd-7GT$*RBWtKpTo$a> zE;5kQm5w8t22fUcS;d5WJM2Br5RD9)3{`LUlRB&)%{=WXm0CqcEI15Eam2r zQ0|hM3hweggQ&h#Y`jO0-T>T`RR>t>@B>7^Z^<&G#Q8#5Mi;2l$pFC*M0f(g8vsmU z2NMvip>kIqAuFYKX&WG}t~ABiq&#*U|Fe}Z4cx>E#rWT%!4|TmRlT2ytCNhbP8#%$ zMeNDo=YbM8>e}ER0s<-Jux+TOf!mmnH0wk_@FWfJ{@CtfxDW`8KKT3N7l7_7uUBIB zd@R2YU4g~nML=MnVLUbL1O&eZ2;A1o{N4MgVBq}!+56V@#&KNR1?u9YdV2Qk{r=B* zrn{>uiEW8EKPXBR#j8ZgauR)CW~vigqDT+~uz-aH@HQ1s}<7 znkHiRyaZK%<31)};q41V3n7~oB)cj)iW5!vKo^hGmPPX;)6aZ)x9FfXHE-hxgxTw8 zIoHYYboSpfdSI_5OY^Nit<;brlU;V7LjeOAJS4ZUhxLI>U3T7job&{i)Oi+0wQu0I zLZ}S&`x}ao7n9fs0{e8cd|coob;|3uaC=)uCxJRx1^l2On3NNv*;d=UcwgWI5ID7` zF|Q;L<=r5K(+2lWbyc;c``7{gt~|S1%5f> zPyC5Q&`O}Y4b;%B0)jt?aD}3Uu7^+8*aifj83ZN(+_oA0fMZ*V9kDcPpV~cwbv%If zi!bt;S<`XSAR9a<{?79Yj_j}MK?P=+OjSgx61X1P5t`q;L!#?C6%$KYfF}Zh>7_+A zBpEY+{`b3O-<2MZFLOWjtc#7|Xhr@+ATZzug5}n>DCY-(>-A3XL57m=899}vUf>rQ zL7dzL*(1IEDDHTVq8aG`Hyq?MT2}VVTaM9S{9g9xf4!ml*N?Fhm@h3@8$z>0n~cCs zRv@Mz_-h$1{oA|Bd4Ij2r3w{j_^BW(fjbz|bR>kxt5D^m_OrD&*;gIF2^onAzt_KH z*LMuVaHV0!8~+~thRX<*nV*mK*7o-ORT-sc*J0#;sUZkT?stR23W%pZDR%%@cq)D= zN?P_rBJ^3zsa|!62Aigez>181xRh{s@ls)G8)NMKnt900fM0Uh->zy# z%)si}aVGV45}ba|o+q%|d@mk;Cor$5CQ^?PFF^l}aHZzO08d?eu5#=Fvol@6ewOQ^ zLQ^ke+8CHJ!QkpeReZ5WuMnonU@5T=5WXegNSQj(Q|Y1m`i5Su8UTR%o3SrS%7vKL zdG|_SPS7J;U#CH|`WH~i2!*TDWZ#3uJXv&E1^l2Om~`m5wdc0b)#FD6s)ocTLFwW} zxq$Jr1Sg+ytfBo{Prc#wP^fWaw&n;Z&i$Mx|B9spnxMn6;A zAKD81ZuvYX$RP8H_KM{vT0rpo!0vUy1O%HE!ROg++eebt4>(d)?~4`8{?peZ*ofaP zwoiFqGikQE&cisF7<&i-znnOds(Pqo<>0V22$fM3C!v5}`Ei{W?NDOaE9c?Ckk5WB z8Pqm&@b~RQ6@6q4xP%n5Cyv4^C-@r#j*d|S!J<+=nHWB^2?#zn2wZPd8%NVVX9j^y zs)Ysc>zcr`(lRji0haB1`7}8>6p|}orvvE1(>pJANapqhbj(BFq5u7c>W?2FB2=P6 z-?re7>-=?hVbt3R{9QN?SKI)gX;9ZS8i=7!u*%r#Akl&I>51io6m}(muJ=zy4Df|z zj4o(s3|aSzp)~3eAEnZBf!|!?G$&9pTy0xWD;^2{&ewLNTr`-7D-4xhgD7>9@G-gK z%6YuqtZHKGsV>#XCFX$UI@MV@M)CDcDoV4ef!T2sEWNv>L&;W^G>cmo+BAR(+&VI66dHl)=qf# z0^qLx_4U);)2%ST-_mDu|Dk?}fa+CcS4$75sm}u*#`JJd909)v;XS6`ha7bEY`wGW zf$kl+%N@pTjBBJnT>}F1gXi3Jqza?}z@ifKgxFG|om2(9Z=f=2$CuC}8ni10@}z*k z>}S2uIxA-$o;Eo7jAM0f!a=|1fWIlR#{@l`7WA0M8eRUKcMos#N7(Q~JJTLyWWI0i z#}Z_Ux9+jC>=y$FZW_o-y8wbsj=X!us_wfpx1Sw?2-3x{Hv?}IsMTXYu#4*14i!Yr zs67&pZCf`tIn5VC%Pg!Q<2-#d#1JW*t3aqhGw-Dbvr^AYLv55DY~RJsjMf322=t%(JvSDo-CAV{{zp?Ymf8 z4+XT-kRzod>iVF$N}+2i4g7kHY+q2NXy4yQTfPGtNrZ}NVn1c&d|v@b0R_-#s%PJO zP^z!CwpVJ%nzrb!f|S6N!3-1X59AA)41pc80vBZT(Ws1lJ5*4UuCN1uk2h@Z7wbC1 zLjALSXO|@_-Z8kchwWyg35iT&C9np8r3wcT08RygGu}OUe{Mana=~BUyKDur4Iv-# z)Q|&A^Rqt|L^tV^wR145z_N6)WW@VVvtjpc>=GaqiK*pYs96yJA6Zu03Q83FnD9PrIP zd-}?FhI#fnfr=Adg-NB~A#pBmH}rx~Ulh$wB`S262DskmA|xW< zZ}dca5ctdULtVao;7R~qT3iNt=z92(!(rZ^naamRv zTHs?c@_}UfT=->|JsHPB6zcm+yNgZg=Nd3-@Bl#4NcAkW{OgKeuiQ}l$OwYKRQ@ef zd-}M14-P!TWJvHHVY-r$mehkYdxvLLn3ehM1+8{SZaIICvF|=>Xw$r<(TQVnux7~n z1OjW&LsO#$LEuopD;E%61J;H>aoS<;Z?GZk3Su)+A$X2kf%H%xK^?R`{CZe&%JG8}z>Ic+@526eMXmgh}$mqoD7SEIQ-IRlv;RS1si-(F&AH!vJ5H2Q2y zsq&T(Rb?E(k%SIrfa-*~G%LG#oj%`uW=MeV^Szq&+?Dh>%tLQmC>yJO9V%hva_pn* z4q!0n_6shpdtAR3#y<1tC;fi+j|_cYVw{mE>sSeV5C}}P-N#^kHYUs?RlB}fCxONY zKL~=Va__ry1j0&#z=Y%b0=veqL9!sj*qMTId+hHg7_Vlt*$n<-!#i(n@8(NB5-Wz| zxYx%!@W&tO-@yd<74yNFe{gQcX9Rx}rtNkI?sst0fDItHg#v-~|KAc$nq##3`lk>8 zz6AOKkGeG4eAW04xnpl$AUM$`+p7(CCmj!<40(1GTey;HLyJHrE9T=tF`Z_tLEv;5sPhL*8wQnfWds)VVI*im=ZS!h2S;p8Wzinoz-#ZB z(+K>i4U%e1=X}=qj+d5m#XEmo(Gj6)S`Y}esL{0y+!6yZvz~F}s33g+_{)JmGJua8 zu5|^}6&k8WI*%3_^zs0~@&pQ62&2DXX#Ns_U~lEGqq@@k^SuXJLOH(f5?{#yelr?v zus@TDn!1qAc>J-hvwO8Rx`S~Yj9mZ&@Y^}YO<{K5&Ffi^dXpnoww>X^i?(nU!`+20}al?*WnIUD+(vWwIAY zxo6?3fYkG~L{I9R!>Po*0u)nOw`7NtZ#(qlH?;^8Kt+Kya3wN~(=MkVx(hew!5wE_ zt5BA9iwpcTgBIj@ce?_&XXBhmOeD~KhB=`P0b7*MCfN$}V(sfn%)Y}+OPW`6uFd@{ zY5w;}ClZ2bi*jK9N!2fyZvmIe)+PPQXh@DCBeyflUHEJ}Bwk^I!7m0FY#mU#mo5); z&3xd%$st?95j3@eWz4G5S9UAbZAV+nO#a}z>O22XJ1ygVMS~>p7XYf4U5Uh54!wX) zVuPke-^UWppA-a!*3Aclzzlz1U`C<&d^VcplLNsdR5C;{@OSH4m5!Me(k!>P5dbC< ziEp)b%`*UFLVzy!Nw!98tPUXfN`xDxir@<-Ah;e{0YKKZrx?nPMR58AJ7aH{ zGxg0F);9vei*Ki}8?rmGV(d|zc!rwyOTfvO&!b}NSwfQ9fi04TS?s~ML4xm{fBfDY z%!5H-=XY1mXH}tUn(*3hx+3_Qvbyfa4dJNjZ`%X9c+7p~h`9cEl%PITAQ;F!4@k@!mzjTDeL=U&t&}_HiM`0mD z#qa&Tq%CF4^@9&7RO?YK^ z3-xhoC2?=O8^d2koO8Z;CRX-JI-83@RXkKsungR1P1Wumsn$DJ{jR~tOxowDo#K%L zU!sRuUCTTG_4V{SvwB`oSbu2739Wm!1h&02w8nm%RR^;>vt1_$$x!7oFV9nf^?(C= zk}Jl_-D-^6=#P!b{k~_KK(`p4(X$^^7{@^%-H*~~%R8#HSq}ZqLuc?K``bzd{?ZAk z=w``Dasq=zrNCgKCD=qm$Heh`kpYV6H3_Ibok;G!zP9ZO3_!>21c4IIee69J1%V5V zr$qIysM4#b>vs3Jm|X>25zq&#fFBSDi-D-QG9|)^qvhqDC#EholDVk#96lq>@(IUG zLbXw1!+z>MRwTlFjjNX`C$x8pSW1`xOskTTQ{*!7G=+i4+t9${QCtn-G2OT0$vXRDTe8^W^Hu>nKKl$Hun?$P1N`kf;Mea{?ALr>>RId+e*Q5U zKrq!6SQxPtKGR&ppHZg?mq1==qsu^uYRQcEGHJJlD9}uSgAnzbzOk};IWmz6%_ERHNB>K9)aKMP4xouRn5+N+6qe-9He8jZ_RYY6VAcZXYReg=VY&XPd6qtXAPh$ z+zXQm%cHBA>(=`^z;@RCN)yHq1%KBh4|w`-&&GU)!< z0o*RmN@*lUkw4~VvIn@@IOO;#5*GM9H-M_Po{dN05Pkl0Gzd(-=pv8i9;z3h|3H|| zeV8wCF{qWzePBjHbcu6_a>{47Y+)zrCYtio^nP{hA=v}BAqXSt0Sty445mt*_AHIc z;n_lOdsh-hwXfq|Vpz}n2hiVec$=HeK_Q)(b)V+);lU*j@F1G0ay?~Cb-Vk>S@w{k znz>w69jgL|qs*)Dy7IX-@ACd1K=^7jb2{|sZcz+Yeo@OSOr;ezcI3hvCl zQ|BC@5?uN|`?cb~3)vcL&yF4S7?I~V+#2`f@KJle1NRPG*Wil+f^V28p@zD>8+TBG%Iu1A{kex||^P*0Cm? z;DP6+^iD8nb}2R-&X|u}5cmzmD&bvc)nf;E%C`z;hSo(f)%t{7g zLWXdTVY=QT5BL48MA`K`Mry`Wq{S4*TmZki;x~1;G>G{zXy3P*`v3Nv@~&%a55{)Gir@xsw$L~w+ETIu?hG^r@F5zYzwa3Q zEKwzA&)XjQ(gcD-ha_j(6FHypRM(OLfXY-}jZoEU29WB@FlR?_$39!fJWAv5y(7@( z#AFAX+|)nj^HRs(!vNGhi~v-lvU>M+Ii||k!#LnPYkbxqe@4{~05Byuvy~NOrbHXs zVFMMtx`~E-Yd`s<$Xg-jS9ZW{2+D{?^+|W>1sY1IV1q2HZY&a^U&E z?`sgaA6~b5aPYLOk*L8~eoJi5wX4#3HFw_koaE^Pv1q3Dq{t6BLvIPJ9eY*X6 zjIZ!WTjlH^aN_(jgYPQwo0=M2@f7pqGt7hk8FiUS*wS~8(mpZ+emfP=&#JEVRlV5v z$<;hW1%iv`>ebyW-aoJfw`LjJ-rD{u%i6Tqzx% zs}eo5%D%m!X<`K;m4EiLj0!_J{P&DnUyOg}zALwn7N6%7Me1>abvBR)2#K$ma!5I4 zth4M@@T`5As1Jn>DnF7!Hg%tGv7b`7*4OZ{?-g7!==5cev`p!Oy3z!H?P^?CfM)>+ zV+!U20g5k=$|8%JQ<5VY%X75N0E958UtOBnyegb8HCUS9j0tiRyELuh{!7wP5)kcB z1?*x?awUj5{1-0}D>8ixh5~;%4*upvmkQ~jjD!(+SAi=)f%5f0l@E)eTvz4t00eVt zB`g`>m|g8LfWqBPRkZDPd0l{YmfrI^kopxubq~6T4wO+7g}^q|rxHI09g$mS8pb3rD6}!f@U{aAN>%gSxI!gKz0G3DjFFcRF4nySxbq*iAC-#5g| zlDE!D&cMCOblpDNx;JF6D$LrKX-!0}fRM6Y1j@9gaP>&enS;_zwkcse^ z)0&Sx)Y+Z*Hc~u$WKRgiyl{U{*vlo)uATH0N6x$v1ZE_4hbr>i1fP`Z^xnTf&}QG` z>LjBz6jXW@@PmS2Qu^BktdUtUFenxCS3EsVcc*`T;NE=NF_TJ?GLz`{1b>M(0H2&@ z@=~HXT1X6g3DjaZZj$3?rO#JhFJ5CjFN3kBw3zcA`$o(2&?C5R&|ee~tlLcK_``kp zIaaH$1c811fCrm*Nm;y?zU91i2!&i{VQQ%WVA~(l3GlRHN<);;Auuva);G|54>Zp@ z!qNe_a}Ru6{kPPuxpMVyZo8z#oZvwqFo9k#sGQ)h!=FFNe*N6nX9Ix;L9~Hj$$sX| z!{%Z6jCv6qN(snd3p$aI^Z4^Tl)Lu5P{ecsO09j8#N|x z5b)eyWjXU5%M9E4Zp(Y}&!6c3{1+;!AVA=k3;6x&rUV>~TjMc3hTtjZ*++YUzcWK4 zr_#)D+HZGsw>vr^AYLwLK;Ac@GPSPD8g z76@zuCbolM0ti8To1dxD{Y2X&s)z~(-DV*0@Vly2phPji z!Bvr%yT7@BZsWrGhXU`Lk|dbv6tfP3R|r=DQ~0P`^ym$>z!1v{UQ_&pN5p4T&Dy5P zJlokmQ`o)s!jVNZ{HE@21)ckovN z%bkK4uHL^U_?vkD>S83J98m=_I$+maHxhEndG@gAJ< z(5_R|&~=0E(xM-L;0q=&_%_5Nj??NZ>7c#+fPr)tquq_z_$}UNjEGd7+Hy?nxnGE9 zIq;0pX#-|iuAHjB9eq2;-o2PA=7}P@irtB1!}rASjy?NUmm+6zXnRqnn37}MAz&lo zG0ybW4j^!InPjPM6&-2OUXiYdSZZ<_7u10z`Zw=sv-qBARYCQx06T@J(CO58u*>kSW>=>(JKQ{fd*s71tI5}z;pW3>fx-bl9SSPjZLUSOS4eEN$T)+vkr$JyI zzGt>25oQHqOolYTsH=cCL^*gv5Ke=?I71L`$GD*Vdh!a~1~9mK1*&?gXd&B%Gby46 z(6|3M39Z^A$6$cKy88C8aoc{ZRMotk2`JUAVU`~gTyjyqVMC@<#Q!7 z?h$Z16MgJg1%i(Pe_cr^0=`;Vw+$PyQDga>dxOC5Z$SG$gW{;>^tDCz%>m*{R7Ssq zLYi6aTsZxsN%KTOAXw8w>$t>OLEyZ8z|UkG^0KmdWaG)$w`)M)g@3eV4g&)a0yPOV z!{;OzACTbp74~ax74WL}G2SJmYgVpq^?~ok2k50mHQ4_Wh=9NLSp)0?1aAd_Ka-31 zSwUd!Aar9qBMbx|3j)_mX<~=rLjI`(gJv9l~GuG zDz}~?5U^X{-{ZjF8Y;_{2FL0OAMi^%zJj$;$vnS?%GyzmQVm<Btp!RW5`qCTvs4{&+caYEoA|O|Ey)ePxqTbUrmOAZ;v~%{}Ea1 zw*bO7Ub-i6^)l)1VjyrxI8&0!xUlZXY1sj5jp#8tY?i#ibNfKImhgGmoHLgLh-K2U zubzHVawOTJXihmNdD$An`DNNX?^QKFpCo9YcQbCGr&dt9*w{e{n0~%xa8xfq_d8~C9Nt@VLj)uC_5K6s2a4zB6{wmy7)Le0H=w(!-?QAH zCr@SU6M z!0ojC?w*m>akKHTKlp1`{T6%Q1iig?J%laG{dKZn$3DOg3e~OppAR@Uw%QYv$YizJ zzK_Lt6U?+_j0__2Tv*tNtT;})MW(NMse}1j7C-$I)UTHg+ z@!W3^__@ZY^;1==EK!Za9PO_R�#}V=a$uO172lty@%FI_o|P{HCVjrBv)%4yTt| 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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -", $creationtime); -?> diff --git a/include/header.php b/include/header.php deleted file mode 100644 index 85c6d03..0000000 --- a/include/header.php +++ /dev/null @@ -1,185 +0,0 @@ - - - - - - - - - - "> - - - <?php echo $config["general"]["title"] . $config["general"]["subtitle"]; ?> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
-
-
-
-

:

-
-
- - -
-
-
-
-
- - -
-
-
- -
-
- - -
-
-
- -
-
- - -
-
-
- -
-
-
- -
diff --git a/include/language.php b/include/language.php deleted file mode 100644 index 2c2d3ff..0000000 --- a/include/language.php +++ /dev/null @@ -1,49 +0,0 @@ -You are using old, unsupported PHP version.

' . - '

Your PHP version: ' . PHP_VERSION . ', required PHP version: 5.5.0.

' . - '

Please update your PHP installation and try again.

'; - - showError($title, $text); - exit; -} - -if (!function_exists("utf8_encode")) { - showExtensionMissingError("xml"); - exit; -} - -if (!extension_loaded("json")) { - showExtensionMissingError("json"); - exit; -} - -if (!extension_loaded("mbstring")) { - showExtensionMissingError("mbstring"); - exit; -} - -if((fileperms(__DIR__ . '/../cache') & 0777) !== 0777) { - $title = 'Cache directory is not writable'; - - $text = - '

Please make sure that the cache directory is fully readable, writable and executable.

' . - '

Running: sudo chmod 777 -R ' . realpath(__DIR__ . '/../cache') . ' should fix the problem.

'; - - showError($title, $text); - exit; -} - -if (!file_exists(__DIR__ . "/../config/config.php")) { - $title = 'config.php does not exists'; - - $text = - '

Please go into the directory config and rename config.template.php to config.php.

' . - '

Edit the new file and tweak it to suite your needs.

'; - - showError($title, $text); - exit; -} - - - -// FUNCTION - -function showExtensionMissingError($extension_name) { - $title = 'Required extension "' . $extension_name . '" is missing'; - - $text = - '

Required PHP extension ' . $extension_name . ' is missing or is not loaded.

' . - '

Install it and restart your server. Usually running sudo apt-get install php-' . $extension_name . ' should be enough.

' . - '

If you still get this error, try restarting your web server and php-fpm service or just reboot your machine

' . - '

If you are using Web Hosting service, please contact their support for instructions on enabling ' . $extension_name . ' extension

'; - - showError($title, $text); -} - -function showError($title, $text) { ?> - - - - - - - - - - - <?php echo $title ?> - - - - - - - - - - - - - -
- -
-
-

Error

-
-
- -
- -
- -
- - - - -isOffline()) - throw new Exception("Server is offline"); - - return $tsAdmin->getInfo(); - } catch (TeamSpeak3_Exception $e) { - return false; - } -} - -function getTeamspeakConnection($arguments = '') { - try { - global $config; - $host = $config['teamspeak']['host']; - $login = $config['teamspeak']['login']; - $passwd = $config['teamspeak']['password']; - $sport = $config['teamspeak']['server_port']; - $qport = $config['teamspeak']['query_port']; - - $tsNodeHost = TeamSpeak3::factory("serverquery://$host:$qport/$arguments"); - $tsNodeHost->login($login, $passwd); - return $tsNodeHost->serverGetByPort($sport); - } catch (Exception $e) { - throw $e; - } -} diff --git a/index.php b/index.php deleted file mode 100644 index 3ed10d2..0000000 --- a/index.php +++ /dev/null @@ -1,75 +0,0 @@ - - -
-
-

-
-
- - - -

' . translate($lang["index"]["errortitle"]) . '

' . translate($lang["index"]["errorsubtitle"]) . '

'; - -// ******* -// METHODS -// ******* - -function showNews($path) { - global $parsedown; - - $files = array_diff(scandir($path), array('..', '.')); - foreach ($files as $newsFile) { - - if (!endsWith($newsFile, ".md")) - continue; - - $file = readFileContent($path . "/" . $newsFile); - $lines = explode("\n", $file); - - $title = $lines[0]; - $author = $lines[1]; - $text = implode("\n", array_slice($lines, 3)); - - generateNewsBox($title, $author, $parsedown->text($text)); - } -} - -function generateNewsBox($title, $author, $text) { ?> -
-
-

-
-
- -
-
-= 0 && strpos($haystack, $needle, $temp) !== false); -} - - -require_once __DIR__ . "/include/footer.php"; -?> diff --git a/js/bans.js b/js/bans.js deleted file mode 100644 index ac695ba..0000000 --- a/js/bans.js +++ /dev/null @@ -1,8 +0,0 @@ -$(document).ready(function () { - $('#banlist').dataTable({ - "order": [[3, "desc"]], - "language": { - "url": datatablesUrl - } - }); -}); diff --git a/js/christmas.js b/js/christmas.js deleted file mode 100644 index 922e531..0000000 --- a/js/christmas.js +++ /dev/null @@ -1,74 +0,0 @@ -// Remember: This file is loaded before jQuery! - -// Check if the current month on user device is December... -if (new Date().getMonth() === 11) { - // Enable the christmas functions! Happy holidays from Wruczek! :D - - // Load and enable the christmas theme - var stylesheet = document.createElement('link'); - stylesheet.href = 'css/christmas-theme.css'; - stylesheet.rel = 'stylesheet'; - document.head.appendChild(stylesheet); - - // Load and enable the snow - var script = document.createElement('script'); - script.src = 'https://cdnjs.cloudflare.com/ajax/libs/JQuery-Snowfall/1.7.4/snowfall.min.js'; - document.head.appendChild(script); - - window.addEventListener('load', function () { - // Change background artist in the footer - document.getElementById('background-artist').innerHTML = 'Debi Geroux - Public Domain'; - - if(getCookie('snoweffect') === 'false') { - document.getElementById('website-copyright').innerHTML += ' — Enable snow effect'; - return; - } - - // Add a link to disable the effect - document.getElementById('website-copyright').innerHTML += ' — Disable snow effect'; - - // Add the snow effect - snowFall.snow(document.body, { - flakeCount: (document.body.clientWidth > 992 ? 500 : 100), - flakeIndex: -1, - minSize: 4, - maxSize: 5, - minSpeed: 1, - maxSpeed: 2, - round: true, - shadow: true - }); - }); -} - -function disableSnowEffect() { - setCookie('snoweffect', 'false', 30); - location.reload(); -} - -function enableSnowEffect() { - setCookie('snoweffect', 'true', 30); - location.reload(); -} - -function setCookie(cname,cvalue,exdays) { - var d = new Date(); - d.setTime(d.getTime() + (exdays*24*60*60*1000)); - var expires = "expires=" + d.toGMTString(); - document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; -} - -function getCookie(cname) { - var name = cname + "="; - var ca = document.cookie.split(';'); - for(var i = 0; i < ca.length; i++) { - var c = ca[i]; - while (c.charAt(0) == ' ') { - c = c.substring(1); - } - if (c.indexOf(name) == 0) { - return c.substring(name.length, c.length); - } - } - return ""; -} diff --git a/js/script.js b/js/script.js deleted file mode 100644 index 71b5bb9..0000000 --- a/js/script.js +++ /dev/null @@ -1,17 +0,0 @@ -$(document).ready(function () { - "use strict"; - - // Bootstrap tooltips initialization - $('[data-toggle="tooltip"]').tooltip({ - "html": true - }); - - // Add "Show more" button to news panels - $('.news-body').readmore({ - speed: 500, - collapsedHeight: 300, - moreLink: '', - lessLink: '' - }); - -}); diff --git a/js/status.js b/js/status.js deleted file mode 100644 index da01d02..0000000 --- a/js/status.js +++ /dev/null @@ -1,62 +0,0 @@ -$(document).ready(function () { - checkStatus(); - - var intervalid = setInterval(function () { - checkStatus(); - }, 10 * 1000); -}); - -function checkStatus() { - - $.ajax({ - url: apiurl, - success: function (json) { - - json = json.tsstatus; - - var result = ""; - - if (json.success) { - var clientsonline = json.clientsonline; - var maxclients = json.maxclients; - var clientsprecent = Math.round(json.clientsonline * 100 / json.maxclients); - var version = json.version; - var platform = json.platform; - var uptime = json.uptime; - var averagePacketloss = Math.round(json.averagePacketloss * 10000) / 100; - var averagePing = Math.round(json.averagePing * 100) / 100; - - var platformIcon = ''; - - switch (platform.toLowerCase()) { - case "windows": - platformIcon = platformIcon.replace(/%s/, 'fa-windows'); - break; - case "linux": - platformIcon = platformIcon.replace(/%s/, 'fa-linux'); - break; - case "os x": - case "macos": - platformIcon = platformIcon.replace(/%s/, 'fa-apple'); - break; - default: - platformIcon = platform; - } - - result = - '

' + statusOnline + ': ' + clientsonline + ' / ' + maxclients + ' (' + clientsprecent + '%)

' + - '

' + statusUptime + ': ' + uptime + '

' + - '

' + statusVersion + ': ' + version + ' on ' + platformIcon + '

' + - '

' + statusAvgping + ': ' + averagePing + ' ms

' + - '

' + statusAvgpl + ': ' + averagePacketloss + '%

'; - } else { - result = '

Online: ' + statusOffline + '

'; - } - - $("#serverstatus").html(result); - }, - error: function (result) { - $("#serverstatus").html('

' + statusOnline + ': ERROR

'); - } - }) -} diff --git a/lib/parsedown/parsedown.php b/lib/parsedown/parsedown.php deleted file mode 100644 index 6b55b41..0000000 --- a/lib/parsedown/parsedown.php +++ /dev/null @@ -1,1552 +0,0 @@ -DefinitionData = array(); - - # standardize line breaks - $text = str_replace(array("\r\n", "\r"), "\n", $text); - - # remove surrounding line breaks - $text = trim($text, "\n"); - - # split text into lines - $lines = explode("\n", $text); - - # iterate through lines to identify blocks - $markup = $this->lines($lines); - - # trim line breaks - $markup = trim($markup, "\n"); - - return $markup; - } - - # - # Setters - # - - function setBreaksEnabled($breaksEnabled) - { - $this->breaksEnabled = $breaksEnabled; - - return $this; - } - - protected $breaksEnabled; - - function setMarkupEscaped($markupEscaped) - { - $this->markupEscaped = $markupEscaped; - - return $this; - } - - protected $markupEscaped; - - function setUrlsLinked($urlsLinked) - { - $this->urlsLinked = $urlsLinked; - - return $this; - } - - protected $urlsLinked = true; - - # - # Lines - # - - protected $BlockTypes = array( - '#' => array('Header'), - '*' => array('Rule', 'List'), - '+' => array('List'), - '-' => array('SetextHeader', 'Table', 'Rule', 'List'), - '0' => array('List'), - '1' => array('List'), - '2' => array('List'), - '3' => array('List'), - '4' => array('List'), - '5' => array('List'), - '6' => array('List'), - '7' => array('List'), - '8' => array('List'), - '9' => array('List'), - ':' => array('Table'), - '<' => array('Comment', 'Markup'), - '=' => array('SetextHeader'), - '>' => array('Quote'), - '[' => array('Reference'), - '_' => array('Rule'), - '`' => array('FencedCode'), - '|' => array('Table'), - '~' => array('FencedCode'), - ); - - # ~ - - protected $unmarkedBlockTypes = array( - 'Code', - ); - - # - # Blocks - # - - protected function lines(array $lines) - { - $CurrentBlock = null; - - foreach ($lines as $line) - { - if (chop($line) === '') - { - if (isset($CurrentBlock)) - { - $CurrentBlock['interrupted'] = true; - } - - continue; - } - - if (strpos($line, "\t") !== false) - { - $parts = explode("\t", $line); - - $line = $parts[0]; - - unset($parts[0]); - - foreach ($parts as $part) - { - $shortage = 4 - mb_strlen($line, 'utf-8') % 4; - - $line .= str_repeat(' ', $shortage); - $line .= $part; - } - } - - $indent = 0; - - while (isset($line[$indent]) and $line[$indent] === ' ') - { - $indent ++; - } - - $text = $indent > 0 ? substr($line, $indent) : $line; - - # ~ - - $Line = array('body' => $line, 'indent' => $indent, 'text' => $text); - - # ~ - - if (isset($CurrentBlock['continuable'])) - { - $Block = $this->{'block'.$CurrentBlock['type'].'Continue'}($Line, $CurrentBlock); - - if (isset($Block)) - { - $CurrentBlock = $Block; - - continue; - } - else - { - if ($this->isBlockCompletable($CurrentBlock['type'])) - { - $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock); - } - } - } - - # ~ - - $marker = $text[0]; - - # ~ - - $blockTypes = $this->unmarkedBlockTypes; - - if (isset($this->BlockTypes[$marker])) - { - foreach ($this->BlockTypes[$marker] as $blockType) - { - $blockTypes []= $blockType; - } - } - - # - # ~ - - foreach ($blockTypes as $blockType) - { - $Block = $this->{'block'.$blockType}($Line, $CurrentBlock); - - if (isset($Block)) - { - $Block['type'] = $blockType; - - if ( ! isset($Block['identified'])) - { - $Blocks []= $CurrentBlock; - - $Block['identified'] = true; - } - - if ($this->isBlockContinuable($blockType)) - { - $Block['continuable'] = true; - } - - $CurrentBlock = $Block; - - continue 2; - } - } - - # ~ - - if (isset($CurrentBlock) and ! isset($CurrentBlock['type']) and ! isset($CurrentBlock['interrupted'])) - { - $CurrentBlock['element']['text'] .= "\n".$text; - } - else - { - $Blocks []= $CurrentBlock; - - $CurrentBlock = $this->paragraph($Line); - - $CurrentBlock['identified'] = true; - } - } - - # ~ - - if (isset($CurrentBlock['continuable']) and $this->isBlockCompletable($CurrentBlock['type'])) - { - $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock); - } - - # ~ - - $Blocks []= $CurrentBlock; - - unset($Blocks[0]); - - # ~ - - $markup = ''; - - foreach ($Blocks as $Block) - { - if (isset($Block['hidden'])) - { - continue; - } - - $markup .= "\n"; - $markup .= isset($Block['markup']) ? $Block['markup'] : $this->element($Block['element']); - } - - $markup .= "\n"; - - # ~ - - return $markup; - } - - protected function isBlockContinuable($Type) - { - return method_exists($this, 'block'.$Type.'Continue'); - } - - protected function isBlockCompletable($Type) - { - return method_exists($this, 'block'.$Type.'Complete'); - } - - # - # Code - - protected function blockCode($Line, $Block = null) - { - if (isset($Block) and ! isset($Block['type']) and ! isset($Block['interrupted'])) - { - return; - } - - if ($Line['indent'] >= 4) - { - $text = substr($Line['body'], 4); - - $Block = array( - 'element' => array( - 'name' => 'pre', - 'handler' => 'element', - 'text' => array( - 'name' => 'code', - 'text' => $text, - ), - ), - ); - - return $Block; - } - } - - protected function blockCodeContinue($Line, $Block) - { - if ($Line['indent'] >= 4) - { - if (isset($Block['interrupted'])) - { - $Block['element']['text']['text'] .= "\n"; - - unset($Block['interrupted']); - } - - $Block['element']['text']['text'] .= "\n"; - - $text = substr($Line['body'], 4); - - $Block['element']['text']['text'] .= $text; - - return $Block; - } - } - - protected function blockCodeComplete($Block) - { - $text = $Block['element']['text']['text']; - - $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8'); - - $Block['element']['text']['text'] = $text; - - return $Block; - } - - # - # Comment - - protected function blockComment($Line) - { - if ($this->markupEscaped) - { - return; - } - - if (isset($Line['text'][3]) and $Line['text'][3] === '-' and $Line['text'][2] === '-' and $Line['text'][1] === '!') - { - $Block = array( - 'markup' => $Line['body'], - ); - - if (preg_match('/-->$/', $Line['text'])) - { - $Block['closed'] = true; - } - - return $Block; - } - } - - protected function blockCommentContinue($Line, array $Block) - { - if (isset($Block['closed'])) - { - return; - } - - $Block['markup'] .= "\n" . $Line['body']; - - if (preg_match('/-->$/', $Line['text'])) - { - $Block['closed'] = true; - } - - return $Block; - } - - # - # Fenced Code - - protected function blockFencedCode($Line) - { - if (preg_match('/^['.$Line['text'][0].']{3,}[ ]*([\w-]+)?[ ]*$/', $Line['text'], $matches)) - { - $Element = array( - 'name' => 'code', - 'text' => '', - ); - - if (isset($matches[1])) - { - $class = 'language-'.$matches[1]; - - $Element['attributes'] = array( - 'class' => $class, - ); - } - - $Block = array( - 'char' => $Line['text'][0], - 'element' => array( - 'name' => 'pre', - 'handler' => 'element', - 'text' => $Element, - ), - ); - - return $Block; - } - } - - protected function blockFencedCodeContinue($Line, $Block) - { - if (isset($Block['complete'])) - { - return; - } - - if (isset($Block['interrupted'])) - { - $Block['element']['text']['text'] .= "\n"; - - unset($Block['interrupted']); - } - - if (preg_match('/^'.$Block['char'].'{3,}[ ]*$/', $Line['text'])) - { - $Block['element']['text']['text'] = substr($Block['element']['text']['text'], 1); - - $Block['complete'] = true; - - return $Block; - } - - $Block['element']['text']['text'] .= "\n".$Line['body'];; - - return $Block; - } - - protected function blockFencedCodeComplete($Block) - { - $text = $Block['element']['text']['text']; - - $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8'); - - $Block['element']['text']['text'] = $text; - - return $Block; - } - - # - # Header - - protected function blockHeader($Line) - { - if (isset($Line['text'][1])) - { - $level = 1; - - while (isset($Line['text'][$level]) and $Line['text'][$level] === '#') - { - $level ++; - } - - if ($level > 6) - { - return; - } - - $text = trim($Line['text'], '# '); - - $Block = array( - 'element' => array( - 'name' => 'h' . min(6, $level), - 'text' => $text, - 'handler' => 'line', - ), - ); - - return $Block; - } - } - - # - # List - - protected function blockList($Line) - { - list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]+[.]'); - - if (preg_match('/^('.$pattern.'[ ]+)(.*)/', $Line['text'], $matches)) - { - $Block = array( - 'indent' => $Line['indent'], - 'pattern' => $pattern, - 'element' => array( - 'name' => $name, - 'handler' => 'elements', - ), - ); - - if($name === 'ol') - { - $listStart = stristr($matches[0], '.', true); - - if($listStart !== '1') - { - $Block['element']['attributes'] = array('start' => $listStart); - } - } - - $Block['li'] = array( - 'name' => 'li', - 'handler' => 'li', - 'text' => array( - $matches[2], - ), - ); - - $Block['element']['text'] []= & $Block['li']; - - return $Block; - } - } - - protected function blockListContinue($Line, array $Block) - { - if ($Block['indent'] === $Line['indent'] and preg_match('/^'.$Block['pattern'].'(?:[ ]+(.*)|$)/', $Line['text'], $matches)) - { - if (isset($Block['interrupted'])) - { - $Block['li']['text'] []= ''; - - unset($Block['interrupted']); - } - - unset($Block['li']); - - $text = isset($matches[1]) ? $matches[1] : ''; - - $Block['li'] = array( - 'name' => 'li', - 'handler' => 'li', - 'text' => array( - $text, - ), - ); - - $Block['element']['text'] []= & $Block['li']; - - return $Block; - } - - if ($Line['text'][0] === '[' and $this->blockReference($Line)) - { - return $Block; - } - - if ( ! isset($Block['interrupted'])) - { - $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); - - $Block['li']['text'] []= $text; - - return $Block; - } - - if ($Line['indent'] > 0) - { - $Block['li']['text'] []= ''; - - $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); - - $Block['li']['text'] []= $text; - - unset($Block['interrupted']); - - return $Block; - } - } - - # - # Quote - - protected function blockQuote($Line) - { - if (preg_match('/^>[ ]?(.*)/', $Line['text'], $matches)) - { - $Block = array( - 'element' => array( - 'name' => 'blockquote', - 'handler' => 'lines', - 'text' => (array) $matches[1], - ), - ); - - return $Block; - } - } - - protected function blockQuoteContinue($Line, array $Block) - { - if ($Line['text'][0] === '>' and preg_match('/^>[ ]?(.*)/', $Line['text'], $matches)) - { - if (isset($Block['interrupted'])) - { - $Block['element']['text'] []= ''; - - unset($Block['interrupted']); - } - - $Block['element']['text'] []= $matches[1]; - - return $Block; - } - - if ( ! isset($Block['interrupted'])) - { - $Block['element']['text'] []= $Line['text']; - - return $Block; - } - } - - # - # Rule - - protected function blockRule($Line) - { - if (preg_match('/^(['.$Line['text'][0].'])([ ]*\1){2,}[ ]*$/', $Line['text'])) - { - $Block = array( - 'element' => array( - 'name' => 'hr' - ), - ); - - return $Block; - } - } - - # - # Setext - - protected function blockSetextHeader($Line, array $Block = null) - { - if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted'])) - { - return; - } - - if (chop($Line['text'], $Line['text'][0]) === '') - { - $Block['element']['name'] = $Line['text'][0] === '=' ? 'h1' : 'h2'; - - return $Block; - } - } - - # - # Markup - - protected function blockMarkup($Line) - { - if ($this->markupEscaped) - { - return; - } - - if (preg_match('/^<(\w*)(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*(\/)?>/', $Line['text'], $matches)) - { - $element = strtolower($matches[1]); - - if (in_array($element, $this->textLevelElements)) - { - return; - } - - $Block = array( - 'name' => $matches[1], - 'depth' => 0, - 'markup' => $Line['text'], - ); - - $length = strlen($matches[0]); - - $remainder = substr($Line['text'], $length); - - if (trim($remainder) === '') - { - if (isset($matches[2]) or in_array($matches[1], $this->voidElements)) - { - $Block['closed'] = true; - - $Block['void'] = true; - } - } - else - { - if (isset($matches[2]) or in_array($matches[1], $this->voidElements)) - { - return; - } - - if (preg_match('/<\/'.$matches[1].'>[ ]*$/i', $remainder)) - { - $Block['closed'] = true; - } - } - - return $Block; - } - } - - protected function blockMarkupContinue($Line, array $Block) - { - if (isset($Block['closed'])) - { - return; - } - - if (preg_match('/^<'.$Block['name'].'(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*>/i', $Line['text'])) # open - { - $Block['depth'] ++; - } - - if (preg_match('/(.*?)<\/'.$Block['name'].'>[ ]*$/i', $Line['text'], $matches)) # close - { - if ($Block['depth'] > 0) - { - $Block['depth'] --; - } - else - { - $Block['closed'] = true; - } - } - - if (isset($Block['interrupted'])) - { - $Block['markup'] .= "\n"; - - unset($Block['interrupted']); - } - - $Block['markup'] .= "\n".$Line['body']; - - return $Block; - } - - # - # Reference - - protected function blockReference($Line) - { - if (preg_match('/^\[(.+?)\]:[ ]*?(?:[ ]+["\'(](.+)["\')])?[ ]*$/', $Line['text'], $matches)) - { - $id = strtolower($matches[1]); - - $Data = array( - 'url' => $matches[2], - 'title' => null, - ); - - if (isset($matches[3])) - { - $Data['title'] = $matches[3]; - } - - $this->DefinitionData['Reference'][$id] = $Data; - - $Block = array( - 'hidden' => true, - ); - - return $Block; - } - } - - # - # Table - - protected function blockTable($Line, array $Block = null) - { - if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted'])) - { - return; - } - - if (strpos($Block['element']['text'], '|') !== false and chop($Line['text'], ' -:|') === '') - { - $alignments = array(); - - $divider = $Line['text']; - - $divider = trim($divider); - $divider = trim($divider, '|'); - - $dividerCells = explode('|', $divider); - - foreach ($dividerCells as $dividerCell) - { - $dividerCell = trim($dividerCell); - - if ($dividerCell === '') - { - continue; - } - - $alignment = null; - - if ($dividerCell[0] === ':') - { - $alignment = 'left'; - } - - if (substr($dividerCell, - 1) === ':') - { - $alignment = $alignment === 'left' ? 'center' : 'right'; - } - - $alignments []= $alignment; - } - - # ~ - - $HeaderElements = array(); - - $header = $Block['element']['text']; - - $header = trim($header); - $header = trim($header, '|'); - - $headerCells = explode('|', $header); - - foreach ($headerCells as $index => $headerCell) - { - $headerCell = trim($headerCell); - - $HeaderElement = array( - 'name' => 'th', - 'text' => $headerCell, - 'handler' => 'line', - ); - - if (isset($alignments[$index])) - { - $alignment = $alignments[$index]; - - $HeaderElement['attributes'] = array( - 'style' => 'text-align: '.$alignment.';', - ); - } - - $HeaderElements []= $HeaderElement; - } - - # ~ - - $Block = array( - 'alignments' => $alignments, - 'identified' => true, - 'element' => array( - 'name' => 'table', - 'handler' => 'elements', - 'attributes' => array( - 'class' => 'table table-bordered table-hover table-responsive' - ), - ), - ); - - $Block['element']['text'] []= array( - 'name' => 'thead', - 'handler' => 'elements', - ); - - $Block['element']['text'] []= array( - 'name' => 'tbody', - 'handler' => 'elements', - 'text' => array(), - ); - - $Block['element']['text'][0]['text'] []= array( - 'name' => 'tr', - 'handler' => 'elements', - 'text' => $HeaderElements, - ); - - return $Block; - } - } - - protected function blockTableContinue($Line, array $Block) - { - if (isset($Block['interrupted'])) - { - return; - } - - if ($Line['text'][0] === '|' or strpos($Line['text'], '|')) - { - $Elements = array(); - - $row = $Line['text']; - - $row = trim($row); - $row = trim($row, '|'); - - preg_match_all('/(?:(\\\\[|])|[^|`]|`[^`]+`|`)+/', $row, $matches); - - foreach ($matches[0] as $index => $cell) - { - $cell = trim($cell); - - $Element = array( - 'name' => 'td', - 'handler' => 'line', - 'text' => $cell, - ); - - if (isset($Block['alignments'][$index])) - { - $Element['attributes'] = array( - 'style' => 'text-align: '.$Block['alignments'][$index].';', - ); - } - - $Elements []= $Element; - } - - $Element = array( - 'name' => 'tr', - 'handler' => 'elements', - 'text' => $Elements, - ); - - $Block['element']['text'][1]['text'] []= $Element; - - return $Block; - } - } - - # - # ~ - # - - protected function paragraph($Line) - { - $Block = array( - 'element' => array( - 'name' => 'p', - 'text' => $Line['text'], - 'handler' => 'line', - ), - ); - - return $Block; - } - - # - # Inline Elements - # - - protected $InlineTypes = array( - '"' => array('SpecialCharacter'), - '!' => array('Image'), - '&' => array('SpecialCharacter'), - '*' => array('Emphasis'), - ':' => array('Url'), - '<' => array('UrlTag', 'EmailTag', 'Markup', 'SpecialCharacter'), - '>' => array('SpecialCharacter'), - '[' => array('Link'), - '_' => array('Emphasis'), - '`' => array('Code'), - '~' => array('Strikethrough'), - '\\' => array('EscapeSequence'), - ); - - # ~ - - protected $inlineMarkerList = '!"*_&[:<>`~\\'; - - # - # ~ - # - - public function line($text) - { - $markup = ''; - - # $excerpt is based on the first occurrence of a marker - - while ($excerpt = strpbrk($text, $this->inlineMarkerList)) - { - $marker = $excerpt[0]; - - $markerPosition = strpos($text, $marker); - - $Excerpt = array('text' => $excerpt, 'context' => $text); - - foreach ($this->InlineTypes[$marker] as $inlineType) - { - $Inline = $this->{'inline'.$inlineType}($Excerpt); - - if ( ! isset($Inline)) - { - continue; - } - - # makes sure that the inline belongs to "our" marker - - if (isset($Inline['position']) and $Inline['position'] > $markerPosition) - { - continue; - } - - # sets a default inline position - - if ( ! isset($Inline['position'])) - { - $Inline['position'] = $markerPosition; - } - - # the text that comes before the inline - $unmarkedText = substr($text, 0, $Inline['position']); - - # compile the unmarked text - $markup .= $this->unmarkedText($unmarkedText); - - # compile the inline - $markup .= isset($Inline['markup']) ? $Inline['markup'] : $this->element($Inline['element']); - - # remove the examined text - $text = substr($text, $Inline['position'] + $Inline['extent']); - - continue 2; - } - - # the marker does not belong to an inline - - $unmarkedText = substr($text, 0, $markerPosition + 1); - - $markup .= $this->unmarkedText($unmarkedText); - - $text = substr($text, $markerPosition + 1); - } - - $markup .= $this->unmarkedText($text); - - return $markup; - } - - # - # ~ - # - - protected function inlineCode($Excerpt) - { - $marker = $Excerpt['text'][0]; - - if (preg_match('/^('.$marker.'+)[ ]*(.+?)[ ]*(? strlen($matches[0]), - 'element' => array( - 'name' => 'code', - 'text' => $text, - ), - ); - } - } - - protected function inlineEmailTag($Excerpt) - { - if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<((mailto:)?\S+?@\S+?)>/i', $Excerpt['text'], $matches)) - { - $url = $matches[1]; - - if ( ! isset($matches[2])) - { - $url = 'mailto:' . $url; - } - - return array( - 'extent' => strlen($matches[0]), - 'element' => array( - 'name' => 'a', - 'text' => $matches[1], - 'attributes' => array( - 'href' => $url, - ), - ), - ); - } - } - - protected function inlineEmphasis($Excerpt) - { - if ( ! isset($Excerpt['text'][1])) - { - return; - } - - $marker = $Excerpt['text'][0]; - - if ($Excerpt['text'][1] === $marker and preg_match($this->StrongRegex[$marker], $Excerpt['text'], $matches)) - { - $emphasis = 'strong'; - } - elseif (preg_match($this->EmRegex[$marker], $Excerpt['text'], $matches)) - { - $emphasis = 'em'; - } - else - { - return; - } - - return array( - 'extent' => strlen($matches[0]), - 'element' => array( - 'name' => $emphasis, - 'handler' => 'line', - 'text' => $matches[1], - ), - ); - } - - protected function inlineEscapeSequence($Excerpt) - { - if (isset($Excerpt['text'][1]) and in_array($Excerpt['text'][1], $this->specialCharacters)) - { - return array( - 'markup' => $Excerpt['text'][1], - 'extent' => 2, - ); - } - } - - protected function inlineImage($Excerpt) - { - if ( ! isset($Excerpt['text'][1]) or $Excerpt['text'][1] !== '[') - { - return; - } - - $Excerpt['text']= substr($Excerpt['text'], 1); - - $Link = $this->inlineLink($Excerpt); - - if ($Link === null) - { - return; - } - - $Inline = array( - 'extent' => $Link['extent'] + 1, - 'element' => array( - 'name' => 'img', - 'attributes' => array( - 'src' => $Link['element']['attributes']['href'], - 'alt' => $Link['element']['text'], - 'class' => 'img-responsive' - ), - ), - ); - - $Inline['element']['attributes'] += $Link['element']['attributes']; - - unset($Inline['element']['attributes']['href']); - - return $Inline; - } - - protected function inlineLink($Excerpt) - { - $Element = array( - 'name' => 'a', - 'handler' => 'line', - 'text' => null, - 'attributes' => array( - 'href' => null, - 'title' => null, - ), - ); - - $extent = 0; - - $remainder = $Excerpt['text']; - - if (preg_match('/\[((?:[^][]++|(?R))*+)\]/', $remainder, $matches)) - { - $Element['text'] = $matches[1]; - - $extent += strlen($matches[0]); - - $remainder = substr($remainder, $extent); - } - else - { - return; - } - - if (preg_match('/^[(]\s*+((?:[^ ()]++|[(][^ )]+[)])++)(?:[ ]+("[^"]*"|\'[^\']*\'))?\s*[)]/', $remainder, $matches)) - { - $Element['attributes']['href'] = $matches[1]; - - if (isset($matches[2])) - { - $Element['attributes']['title'] = substr($matches[2], 1, - 1); - } - - $extent += strlen($matches[0]); - } - else - { - if (preg_match('/^\s*\[(.*?)\]/', $remainder, $matches)) - { - $definition = strlen($matches[1]) ? $matches[1] : $Element['text']; - $definition = strtolower($definition); - - $extent += strlen($matches[0]); - } - else - { - $definition = strtolower($Element['text']); - } - - if ( ! isset($this->DefinitionData['Reference'][$definition])) - { - return; - } - - $Definition = $this->DefinitionData['Reference'][$definition]; - - $Element['attributes']['href'] = $Definition['url']; - $Element['attributes']['title'] = $Definition['title']; - } - - $Element['attributes']['href'] = str_replace(array('&', '<'), array('&', '<'), $Element['attributes']['href']); - - return array( - 'extent' => $extent, - 'element' => $Element, - ); - } - - protected function inlineMarkup($Excerpt) - { - if ($this->markupEscaped or strpos($Excerpt['text'], '>') === false) - { - return; - } - - if ($Excerpt['text'][1] === '/' and preg_match('/^<\/\w*[ ]*>/s', $Excerpt['text'], $matches)) - { - return array( - 'markup' => $matches[0], - 'extent' => strlen($matches[0]), - ); - } - - if ($Excerpt['text'][1] === '!' and preg_match('/^/s', $Excerpt['text'], $matches)) - { - return array( - 'markup' => $matches[0], - 'extent' => strlen($matches[0]), - ); - } - - if ($Excerpt['text'][1] !== ' ' and preg_match('/^<\w*(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*\/?>/s', $Excerpt['text'], $matches)) - { - return array( - 'markup' => $matches[0], - 'extent' => strlen($matches[0]), - ); - } - } - - protected function inlineSpecialCharacter($Excerpt) - { - if ($Excerpt['text'][0] === '&' and ! preg_match('/^&#?\w+;/', $Excerpt['text'])) - { - return array( - 'markup' => '&', - 'extent' => 1, - ); - } - - $SpecialCharacter = array('>' => 'gt', '<' => 'lt', '"' => 'quot'); - - if (isset($SpecialCharacter[$Excerpt['text'][0]])) - { - return array( - 'markup' => '&'.$SpecialCharacter[$Excerpt['text'][0]].';', - 'extent' => 1, - ); - } - } - - protected function inlineStrikethrough($Excerpt) - { - if ( ! isset($Excerpt['text'][1])) - { - return; - } - - if ($Excerpt['text'][1] === '~' and preg_match('/^~~(?=\S)(.+?)(?<=\S)~~/', $Excerpt['text'], $matches)) - { - return array( - 'extent' => strlen($matches[0]), - 'element' => array( - 'name' => 'del', - 'text' => $matches[1], - 'handler' => 'line', - ), - ); - } - } - - protected function inlineUrl($Excerpt) - { - if ($this->urlsLinked !== true or ! isset($Excerpt['text'][2]) or $Excerpt['text'][2] !== '/') - { - return; - } - - if (preg_match('/\bhttps?:[\/]{2}[^\s<]+\b\/*/ui', $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE)) - { - $Inline = array( - 'extent' => strlen($matches[0][0]), - 'position' => $matches[0][1], - 'element' => array( - 'name' => 'a', - 'text' => $matches[0][0], - 'attributes' => array( - 'href' => $matches[0][0], - ), - ), - ); - - return $Inline; - } - } - - protected function inlineUrlTag($Excerpt) - { - if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<(\w+:\/{2}[^ >]+)>/i', $Excerpt['text'], $matches)) - { - $url = str_replace(array('&', '<'), array('&', '<'), $matches[1]); - - return array( - 'extent' => strlen($matches[0]), - 'element' => array( - 'name' => 'a', - 'text' => $url, - 'attributes' => array( - 'href' => $url, - ), - ), - ); - } - } - - # ~ - - protected function unmarkedText($text) - { - if ($this->breaksEnabled) - { - $text = preg_replace('/[ ]*\n/', "
\n", $text); - } - else - { - $text = preg_replace('/(?:[ ][ ]+|[ ]*\\\\)\n/', "
\n", $text); - $text = str_replace(" \n", "\n", $text); - } - - return $text; - } - - # - # Handlers - # - - protected function element(array $Element) - { - $markup = '<'.$Element['name']; - - if (isset($Element['attributes'])) - { - foreach ($Element['attributes'] as $name => $value) - { - if ($value === null) - { - continue; - } - - $markup .= ' '.$name.'="'.$value.'"'; - } - } - - if (isset($Element['text'])) - { - $markup .= '>'; - - if (isset($Element['handler'])) - { - $markup .= $this->{$Element['handler']}($Element['text']); - } - else - { - $markup .= $Element['text']; - } - - $markup .= ''; - } - else - { - $markup .= ' />'; - } - - return $markup; - } - - protected function elements(array $Elements) - { - $markup = ''; - - foreach ($Elements as $Element) - { - $markup .= "\n" . $this->element($Element); - } - - $markup .= "\n"; - - return $markup; - } - - # ~ - - protected function li($lines) - { - $markup = $this->lines($lines); - - $trimmedMarkup = trim($markup); - - if ( ! in_array('', $lines) and substr($trimmedMarkup, 0, 3) === '

') - { - $markup = $trimmedMarkup; - $markup = substr($markup, 3); - - $position = strpos($markup, "

"); - - $markup = substr_replace($markup, '', $position, 4); - } - - return $markup; - } - - # - # Deprecated Methods - # - - function parse($text) - { - $markup = $this->text($text); - - return $markup; - } - - # - # Static Methods - # - - static function instance($name = 'default') - { - if (isset(self::$instances[$name])) - { - return self::$instances[$name]; - } - - $instance = new static(); - - self::$instances[$name] = $instance; - - return $instance; - } - - private static $instances = array(); - - # - # Fields - # - - protected $DefinitionData; - - # - # Read-Only - - protected $specialCharacters = array( - '\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!', '|', - ); - - protected $StrongRegex = array( - '*' => '/^[*]{2}((?:\\\\\*|[^*]|[*][^*]*[*])+?)[*]{2}(?![*])/s', - '_' => '/^__((?:\\\\_|[^_]|_[^_]*_)+?)__(?!_)/us', - ); - - protected $EmRegex = array( - '*' => '/^[*]((?:\\\\\*|[^*]|[*][*][^*]+?[*][*])+?)[*](?![*])/s', - '_' => '/^_((?:\\\\_|[^_]|__[^_]*__)+?)_(?!_)\b/us', - ); - - protected $regexHtmlAttribute = '[a-zA-Z_:][\w:.-]*(?:\s*=\s*(?:[^"\'=<>`\s]+|"[^"]*"|\'[^\']*\'))?'; - - protected $voidElements = array( - 'area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', - ); - - protected $textLevelElements = array( - 'a', 'br', 'bdo', 'abbr', 'blink', 'nextid', 'acronym', 'basefont', - 'b', 'em', 'big', 'cite', 'small', 'spacer', 'listing', - 'i', 'rp', 'del', 'code', 'strike', 'marquee', - 'q', 'rt', 'ins', 'font', 'strong', - 's', 'tt', 'sub', 'mark', - 'u', 'xm', 'sup', 'nobr', - 'var', 'ruby', - 'wbr', 'span', - 'time', - ); -} diff --git a/lib/phpfastcache/LICENCE b/lib/phpfastcache/LICENCE deleted file mode 100644 index 59c1b7e..0000000 --- a/lib/phpfastcache/LICENCE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2016 phpFastCache - -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. \ No newline at end of file diff --git a/lib/phpfastcache/bin/legacy/Psr/Cache/LICENSE.txt b/lib/phpfastcache/bin/legacy/Psr/Cache/LICENSE.txt deleted file mode 100644 index b1c2c97..0000000 --- a/lib/phpfastcache/bin/legacy/Psr/Cache/LICENSE.txt +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2015 PHP Framework Interoperability Group - -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. diff --git a/lib/phpfastcache/bin/legacy/Psr/Cache/README.md b/lib/phpfastcache/bin/legacy/Psr/Cache/README.md deleted file mode 100644 index c8706ce..0000000 --- a/lib/phpfastcache/bin/legacy/Psr/Cache/README.md +++ /dev/null @@ -1,9 +0,0 @@ -PSR Cache -========= - -This repository holds all interfaces defined by -[PSR-6](http://www.php-fig.org/psr/psr-6/). - -Note that this is not a Cache implementation of its own. It is merely an -interface that describes a Cache implementation. See the specification for more -details. diff --git a/lib/phpfastcache/bin/legacy/Psr/Cache/composer.json b/lib/phpfastcache/bin/legacy/Psr/Cache/composer.json deleted file mode 100644 index e828fec..0000000 --- a/lib/phpfastcache/bin/legacy/Psr/Cache/composer.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "psr/cache", - "description": "Common interface for caching libraries", - "keywords": ["psr", "psr-6", "cache"], - "license": "MIT", - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "require": { - "php": ">=5.3.0" - }, - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - } -} diff --git a/lib/phpfastcache/bin/legacy/Psr/Cache/src/CacheException.php b/lib/phpfastcache/bin/legacy/Psr/Cache/src/CacheException.php deleted file mode 100644 index e27f22f..0000000 --- a/lib/phpfastcache/bin/legacy/Psr/Cache/src/CacheException.php +++ /dev/null @@ -1,10 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -define('PFC_PHP_EXT', 'php'); -define('PFC_BIN_DIR', __DIR__ . '/../bin/'); - -/** - * Register Autoload - */ -spl_autoload_register(function ($entity) { - $module = explode('\\', $entity, 2); - if (!in_array($module[ 0 ], ['phpFastCache', 'Psr'])) { - /** - * Not a part of phpFastCache file - * then we return here. - */ - return; - } else if (strpos($entity, 'Psr\Cache') === 0) { - $path = PFC_BIN_DIR . 'legacy/Psr/Cache/src/' . substr(strrchr($entity, '\\'), 1) . '.' . PFC_PHP_EXT; - - if (is_readable($path)) { - require_once $path; - }else{ - trigger_error('Cannot locate the Psr/Cache files', E_USER_ERROR); - } - return; - } - - $entity = str_replace('\\', '/', $entity); - $path = __DIR__ . '/' . $entity . '.' . PFC_PHP_EXT; - - if (is_readable($path)) { - require_once $path; - } -}); - -if ((!defined('PFC_IGNORE_COMPOSER_WARNING') || !PFC_IGNORE_COMPOSER_WARNING) && class_exists('Composer\Autoload\ClassLoader')) { - trigger_error('Your project already makes use of Composer. You SHOULD use the composer dependency "phpfastcache/phpfastcache" instead of hard-autoloading.', - E_USER_WARNING); -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/.htaccess b/lib/phpfastcache/src/phpFastCache/.htaccess deleted file mode 100644 index 608da1a..0000000 --- a/lib/phpfastcache/src/phpFastCache/.htaccess +++ /dev/null @@ -1,3 +0,0 @@ -order deny,allow -deny from all -allow from 127.0.0.1 \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Api.php b/lib/phpfastcache/src/phpFastCache/Api.php deleted file mode 100644 index 5b4db10..0000000 --- a/lib/phpfastcache/src/phpFastCache/Api.php +++ /dev/null @@ -1,72 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache; - -/** - * Class Api - * @package phpFastCache - */ -class Api -{ - protected static $version = '1.1.3'; - - /** - * This method will returns the current - * API version, the API version will be - * updated by following the semantic versioning - * based on changes of: - * - ExtendedCacheItemPoolInterface - * - ExtendedCacheItemInterface - * - * @see http://semver.org/ - * @return string - */ - public static function getVersion() - { - return self::$version; - } - - /** - * Return the API changelog, as a string. - * @return string - */ - public static function getChangelog() - { - return << http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ -namespace phpFastCache\Cache; - -use phpFastCache\Core\ExtendedCacheItemPoolTrait; -use phpFastCache\Exceptions\phpFastCacheDriverException; - -/** - * Class DriverBaseTrait - * @package phpFastCache\Cache - */ -trait DriverBaseTrait -{ - use ExtendedCacheItemPoolTrait; - - /** - * @var array default options, this will be merge to Driver's Options - */ - protected $config = []; - - /** - * @var bool - */ - protected $fallback = false; - - /** - * @var mixed Instance of driver service - */ - protected $instance; - - /** - * @param $config_name - * @param string $value - */ - public function setup($config_name, $value = '') - { - /** - * Config for class - */ - if (is_array($config_name)) { - $this->config = array_merge($this->config, $config_name); - } else { - $this->config[ $config_name ] = $value; - } - } - - /** - * @return array - */ - public function getConfig() - { - return $this->config; - } - - /** - * @param $file - * @return string - * @throws \Exception - */ - protected function readfile($file) - { - if (function_exists('file_get_contents')) { - return file_get_contents($file); - } else { - $string = ''; - - $file_handle = @fopen($file, 'r'); - if (!$file_handle) { - throw new phpFastCacheDriverException("Can't Read File", 96); - - } - while (!feof($file_handle)) { - $line = fgets($file_handle); - $string .= $line; - } - fclose($file_handle); - - return $string; - } - } - - /** - * Encode data types such as object/array - * for driver that does not support - * non-scalar value - * @param $data - * @return string - */ - protected function encode($data) - { - return serialize($data); - } - - /** - * Decode data types such as object/array - * for driver that does not support - * non-scalar value - * @param $value - * @return mixed - */ - protected function decode($value) - { - return @unserialize($value); - } - - /** - * Check phpModules or CGI - * @return bool - */ - protected function isPHPModule() - { - if (PHP_SAPI === 'apache2handler') { - return true; - } else { - if (strpos(PHP_SAPI, 'handler') !== false) { - return true; - } - } - - return false; - } - - - /** - * @param $class - * @return bool - */ - protected function isExistingDriver($class) - { - return class_exists("\\phpFastCache\\Drivers\\{$class}"); - } - - - /** - * @param $tag - * @return string - */ - protected function _getTagName($tag) - { - return "__tag__" . $tag; - } - - /** - * @param \phpFastCache\Cache\ExtendedCacheItemInterface $item - * @return array - */ - public function driverPreWrap(ExtendedCacheItemInterface $item) - { - return [ - self::DRIVER_DATA_WRAPPER_INDEX => $item->get(), - self::DRIVER_TIME_WRAPPER_INDEX => $item->getExpirationDate(), - self::DRIVER_TAGS_WRAPPER_INDEX => $item->getTags(), - ]; - } - - /** - * @param array $wrapper - * @return mixed - */ - public function driverUnwrapData(array $wrapper) - { - return $wrapper[ self::DRIVER_DATA_WRAPPER_INDEX ]; - } - - /** - * @param array $wrapper - * @return mixed - */ - public function driverUnwrapTags(array $wrapper) - { - return $wrapper[ self::DRIVER_TAGS_WRAPPER_INDEX ]; - } - - - /** - * @param array $wrapper - * @return \DateTime - */ - public function driverUnwrapTime(array $wrapper) - { - return $wrapper[ self::DRIVER_TIME_WRAPPER_INDEX ]; - } - - /** - * @return string - */ - public function getDriverName() - { - static $driverName; - - return ($driverName ?: $driverName = ucfirst(substr(strrchr((new \ReflectionObject($this))->getNamespaceName(), '\\'), 1))); - } - - /** - * @param \phpFastCache\Cache\ExtendedCacheItemInterface $item - * @return bool - * @throws \LogicException - */ - public function driverWriteTags(ExtendedCacheItemInterface $item) - { - /** - * Do not attempt to write tags - * on tags item, it can leads - * to an infinite recursive calls - */ - if(strpos($item->getKey(), self::DRIVER_TAGS_KEY_PREFIX ) === 0){ - throw new \LogicException('Trying to set tag(s) to an Tag item index: ' . $item->getKey()); - } - - /** - * @var $tagsItems ExtendedCacheItemInterface[] - */ - $tagsItems = $this->getItems($this->getTagKeys($item->getTags())); - - foreach ($tagsItems as $tagsItem) { - $data = $tagsItem->get(); - $expTimestamp = $item->getExpirationDate()->getTimestamp(); - - /** - * Using the key will - * avoid to use array_unique - * that has slow performances - */ - - $tagsItem->set(array_merge((array) $data, [$item->getKey() => $expTimestamp])); - - /** - * Set the expiration date - * of the $tagsItem based - * on the older $item - * expiration date - */ - if ($expTimestamp > $tagsItem->getExpirationDate()->getTimestamp()) { - $tagsItem->expiresAt($item->getExpirationDate()); - } - $this->driverWrite($tagsItem); - $tagsItem->setHit(true); - } - - /** - * Also update removed tags to - * keep the index up to date - */ - $tagsItems = $this->getItems($this->getTagKeys($item->getRemovedTags())); - - foreach ($tagsItems as $tagsItem) { - $data = (array) $tagsItem->get(); - - unset($data[ $item->getKey() ]); - $tagsItem->set($data); - - /** - * Recalculate the expiration date - * - * If the $tagsItem does not have - * any cache item references left - * then remove it from tagsItems index - */ - if (count($data)) { - $tagsItem->expiresAt(max($data)); - $this->driverWrite($tagsItem); - $tagsItem->setHit(true); - } else { - $this->deleteItem($tagsItem->getKey()); - } - } - - return true; - } - - /** - * @param $key - * @return string - */ - public function getTagKey($key) - { - return self::DRIVER_TAGS_KEY_PREFIX . $key; - } - - /** - * @param $key - * @return string - */ - public function getTagKeys(array $keys) - { - foreach ($keys as &$key) { - $key = $this->getTagKey($key); - } - - return $keys; - } - - /** - * @param string $optionName - * @param mixed $optionValue - * @return bool - * @throws \InvalidArgumentException - */ - public static function isValidOption($optionName, $optionValue) - { - if (!is_string($optionName)) { - throw new \InvalidArgumentException('$optionName must be a string'); - } - - return true; - } - - /** - * @return array - */ - public static function getRequiredOptions() - { - return []; - } - - /** - * @return array - */ - public static function getValidOptions() - { - return []; - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Cache/ExtendedCacheItemInterface.php b/lib/phpfastcache/src/phpFastCache/Cache/ExtendedCacheItemInterface.php deleted file mode 100644 index 2ad73ee..0000000 --- a/lib/phpfastcache/src/phpFastCache/Cache/ExtendedCacheItemInterface.php +++ /dev/null @@ -1,170 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Cache; - -use Psr\Cache\CacheItemInterface; - -/** - * Interface ExtendedCacheItemInterface - * @package phpFastCache\Cache - */ -interface ExtendedCacheItemInterface extends CacheItemInterface, \JsonSerializable -{ - /** - * Returns the encoded key for the current cache item. - * Usually as a MD5 hash - * - * @return string - * The encoded key string for this cache item. - */ - public function getEncodedKey(); - - /** - * @return mixed - */ - public function getUncommittedData(); - - /** - * @return \DateTimeInterface - */ - public function getExpirationDate(); - - /** - * @return int - */ - public function getTtl(); - - /** - * @return bool - */ - public function isExpired(); - - /** - * @param \phpFastCache\Cache\ExtendedCacheItemPoolInterface $driver - * @return mixed - */ - public function setDriver(ExtendedCacheItemPoolInterface $driver); - - /** - * @param bool $isHit - * @return $this - * @throws \InvalidArgumentException - */ - public function setHit($isHit); - - /** - * @param int $step - * @return $this - * @throws \InvalidArgumentException - */ - public function increment($step = 1); - - /** - * @param int $step - * @return $this - * @throws \InvalidArgumentException - */ - public function decrement($step = 1); - - /** - * @param array|string $data - * @return $this - * @throws \InvalidArgumentException - */ - public function append($data); - - /** - * @param array|string $data - * @return $this - * @throws \InvalidArgumentException - */ - public function prepend($data); - - - /** - * Sets the expiration time for this cache item. - * - * @param int|\DateInterval $time - * The period of time from the present after which the item MUST be considered - * expired. An integer parameter is understood to be the time in seconds until - * expiration. If null is passed explicitly, a default value MAY be used. - * If none is set, the value should be stored permanently or for as long as the - * implementation allows. - * - * @return static - * The called object. - * - * @deprecated Use CacheItemInterface::expiresAfter() instead - */ - public function touch($time); - - /** - * @param string $tagName - * @return $this - * @throws \InvalidArgumentException - */ - public function addTag($tagName); - - /** - * @param array $tagNames - * @return $this - */ - public function addTags(array $tagNames); - - - /** - * @param array $tags - * @return $this - * @throws \InvalidArgumentException - */ - public function setTags(array $tags); - - /** - * @return array - */ - public function getTags(); - - /** - * @param string $separator - * @return mixed - */ - public function getTagsAsString($separator = ', '); - - /** - * @param array $tagName - * @return $this - */ - public function removeTag($tagName); - - /** - * @param array $tagNames - * @return $this - */ - public function removeTags(array $tagNames); - - /** - * @return array - */ - public function getRemovedTags(); - - /** - * Return the data as a well-formatted string. - * Any scalar value will be casted to an array - * @param int $option json_encode() options - * @param int $depth json_encode() depth - * @return string - */ - public function getDataAsJsonString($option = 0, $depth = 512); -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Cache/ExtendedCacheItemPoolInterface.php b/lib/phpfastcache/src/phpFastCache/Cache/ExtendedCacheItemPoolInterface.php deleted file mode 100644 index 1208918..0000000 --- a/lib/phpfastcache/src/phpFastCache/Cache/ExtendedCacheItemPoolInterface.php +++ /dev/null @@ -1,357 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Cache; - -use InvalidArgumentException; -use phpFastCache\Entities\driverStatistic; -use Psr\Cache\CacheItemInterface; -use Psr\Cache\CacheItemPoolInterface; - -/** - * Interface ExtendedCacheItemPoolInterface - * @package phpFastCache\Cache - */ -interface ExtendedCacheItemPoolInterface extends CacheItemPoolInterface -{ - /** - * @return array - */ - public function getConfig(); - - /** - * @return string - */ - public function getDriverName(); - - - /** - * [phpFastCache phpDoc Override] - * Returns a Cache Item representing the specified key. - * - * This method must always return a CacheItemInterface object, even in case of - * a cache miss. It MUST NOT return null. - * - * @param string $key - * The key for which to return the corresponding Cache Item. - * - * @throws InvalidArgumentException - * If the $key string is not a legal value a \Psr\Cache\InvalidArgumentException - * MUST be thrown. - * - * @return ExtendedCacheItemInterface - * The corresponding Cache Item. - */ - public function getItem($key); - - /** - * [phpFastCache phpDoc Override] - * Returns a traversable set of cache items. - * - * @param array $keys - * An indexed array of keys of items to retrieve. - * - * @throws InvalidArgumentException - * If any of the keys in $keys are not a legal value a \Psr\Cache\InvalidArgumentException - * MUST be thrown. - * - * @return ExtendedCacheItemInterface[] - * A traversable collection of Cache Items keyed by the cache keys of - * each item. A Cache item will be returned for each key, even if that - * key is not found. However, if no keys are specified then an empty - * traversable MUST be returned instead. - */ - public function getItems(array $keys = []); - - /** - * Returns A json string that represents an array of items. - * - * @param array $keys - * An indexed array of keys of items to retrieve. - * @param int $option json_encode() options - * @param int $depth json_encode() depth - * - * @throws InvalidArgumentException - * If any of the keys in $keys are not a legal value a \Psr\Cache\InvalidArgumentException - * MUST be thrown. - * - * @return string - */ - public function getItemsAsJsonString(array $keys = [], $option = 0, $depth = 512); - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - */ - public function setItem(CacheItemInterface $item); - - /** - * Deletes all items in the pool. - * @deprecated Use clear() instead - * Will be removed in 5.1 - * - * @return bool - * True if the pool was successfully cleared. False if there was an error. - */ - public function clean(); - - /** - * @return driverStatistic - */ - public function getStats(); - - /** - * Returns a traversable set of cache items by a tag name. - * - * @param string $tagName - * An indexed array of keys of items to retrieve. - * - * @throws InvalidArgumentException - * If any of the keys in $keys are not a legal value a \Psr\Cache\InvalidArgumentException - * MUST be thrown. - * - * @return ExtendedCacheItemInterface[] - * A traversable collection of Cache Items keyed by the cache keys of - * each item. A Cache item will be returned for each key, even if that - * key is not found. However, if no keys are specified then an empty - * traversable MUST be returned instead. - */ - public function getItemsByTag($tagName); - - /** - * Returns a traversable set of cache items by a tag name. - * - * @param array $tagNames - * An indexed array of keys of items to retrieve. - * - * @throws InvalidArgumentException - * If any of the keys in $keys are not a legal value a \Psr\Cache\InvalidArgumentException - * MUST be thrown. - * - * @return ExtendedCacheItemInterface[] - * A traversable collection of Cache Items keyed by the cache keys of - * each item. A Cache item will be returned for each key, even if that - * key is not found. However, if no keys are specified then an empty - * traversable MUST be returned instead. - */ - public function getItemsByTags(array $tagNames); - - /** - * Returns A json string that represents an array of items by tags-based. - * - * @param array $tagNames - * An indexed array of keys of items to retrieve. - * @param int $option json_encode() options - * @param int $depth json_encode() depth - * - * @throws InvalidArgumentException - * If any of the keys in $keys are not a legal value a \Psr\Cache\InvalidArgumentException - * MUST be thrown. - * - * @return string - */ - public function getItemsByTagsAsJsonString(array $tagNames, $option = 0, $depth = 512); - - /** - * Removes the item from the pool by tag. - * - * @param string $tagName - * The tag for which to delete - * - * @throws InvalidArgumentException - * If the $key string is not a legal value a \Psr\Cache\InvalidArgumentException - * MUST be thrown. - * - * @return bool - * True if the item was successfully removed. False if there was an error. - */ - public function deleteItemsByTag($tagName); - - /** - * Removes the item from the pool by tag. - * - * @param array $tagNames - * The tag for which to delete - * - * @throws InvalidArgumentException - * If the $key string is not a legal value a \Psr\Cache\InvalidArgumentException - * MUST be thrown. - * - * @return bool - * True if the item was successfully removed. False if there was an error. - */ - public function deleteItemsByTags(array $tagNames); - - /** - * Increment the items from the pool by tag. - * - * @param string $tagName - * The tag for which to increment - * @param int $step - * - * @throws InvalidArgumentException - * If the $key string is not a legal value a \Psr\Cache\InvalidArgumentException - * MUST be thrown. - * - * @return bool - * True if the item was successfully incremented. False if there was an error. - */ - public function incrementItemsByTag($tagName, $step = 1); - - /** - * Increment the items from the pool by tag. - * - * @param array $tagNames - * The tag for which to increment - * @param int $step - * - * @throws InvalidArgumentException - * If the $key string is not a legal value a \Psr\Cache\InvalidArgumentException - * MUST be thrown. - * - * @return bool - * True if the item was successfully incremented. False if there was an error. - */ - public function incrementItemsByTags(array $tagNames, $step = 1); - - - /** - * Decrement the items from the pool by tag. - * - * @param string $tagName - * The tag for which to decrement - * @param int $step - * - * @throws InvalidArgumentException - * If the $key string is not a legal value a \Psr\Cache\InvalidArgumentException - * MUST be thrown. - * - * @return bool - * True if the item was successfully decremented. False if there was an error. - */ - public function decrementItemsByTag($tagName, $step = 1); - - /** - * Decrement the items from the pool by tag. - * - * @param array $tagNames - * The tag for which to decrement - * @param int $step - * - * @throws InvalidArgumentException - * If the $key string is not a legal value a \Psr\Cache\InvalidArgumentException - * MUST be thrown. - * - * @return bool - * True if the item was successfully decremented. False if there was an error. - */ - public function decrementItemsByTags(array $tagNames, $step = 1); - - /** - * Decrement the items from the pool by tag. - * - * @param string $tagName - * The tag for which to append - * - * @param array|string $data - * - * @throws InvalidArgumentException - * If the $key string is not a legal value a \Psr\Cache\InvalidArgumentException - * MUST be thrown. - * - * @return bool - * True if the item was successfully appended. False if there was an error. - */ - public function appendItemsByTag($tagName, $data); - - /** - * Decrement the items from the pool by tag. - * - * @param array $tagNames - * The tag for which to append - * - * @param array|string $data - * - * @throws InvalidArgumentException - * If the $key string is not a legal value a \Psr\Cache\InvalidArgumentException - * MUST be thrown. - * - * @return bool - * True if the item was successfully appended. False if there was an error. - */ - public function appendItemsByTags(array $tagNames, $data); - - /** - * Prepend the items from the pool by tag. - * - * @param string $tagName - * The tag for which to prepend - * - * @param array|string $data - * - * @throws InvalidArgumentException - * If the $key string is not a legal value a \Psr\Cache\InvalidArgumentException - * MUST be thrown. - * - * @return bool - * True if the item was successfully prepended. False if there was an error. - */ - public function prependItemsByTag($tagName, $data); - - /** - * Prepend the items from the pool by tag. - * - * @param array $tagNames - * The tag for which to prepend - * - * @param array|string $data - * - * @throws InvalidArgumentException - * If the $key string is not a legal value a \Psr\Cache\InvalidArgumentException - * MUST be thrown. - * - * @return bool - * True if the item was successfully prepended. False if there was an error. - */ - public function prependItemsByTags(array $tagNames, $data); - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return void - */ - public function detachItem(CacheItemInterface $item); - - /** - * @return void - */ - public function detachAllItems(); - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return void - * @throws \LogicException - */ - public function attachItem(CacheItemInterface $item); - - /** - * Returns true if the item exists, is attached and the Spl Hash matches - * Returns false if the item exists, is attached and the Spl Hash mismatches - * Returns null if the item does not exists - * - * @param \Psr\Cache\CacheItemInterface $item - * @return bool|null - * @throws \LogicException - */ - public function isAttached(CacheItemInterface $item); -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Cache/ItemBaseTrait.php b/lib/phpfastcache/src/phpFastCache/Cache/ItemBaseTrait.php deleted file mode 100644 index 75deef6..0000000 --- a/lib/phpfastcache/src/phpFastCache/Cache/ItemBaseTrait.php +++ /dev/null @@ -1,447 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Cache; - -use phpFastCache\Core\DriverAbstract; - -trait ItemBaseTrait -{ - /** - * @var bool - */ - protected $fetched = false; - - /** - * @var DriverAbstract - */ - protected $driver; - - /** - * @var string - */ - protected $key; - - /** - * @var mixed - */ - protected $data; - - /** - * @var \DateTime - */ - protected $expirationDate; - - /** - * @var array - */ - protected $tags = []; - - /** - * @var array - */ - protected $removedTags = []; - - /** - * @var bool - */ - protected $isHit = false; - - /******************** - * - * PSR-6 Methods - * - *******************/ - - /** - * @return string - */ - public function getKey() - { - return $this->key; - } - - /** - * @return mixed - */ - public function get() - { - return $this->data; - } - - /** - * @param mixed $value - * @return $this - */ - public function set($value) - { - /** - * The user set a value, - * therefore there is no need to - * fetch from source anymore - */ - $this->fetched = true; - $this->data = $value; - - return $this; - } - - /** - * @return bool - * @throws \InvalidArgumentException - */ - public function isHit() - { - return $this->isHit; - } - - /** - * @param bool $isHit - * @return $this - * @throws \InvalidArgumentException - */ - public function setHit($isHit) - { - if (is_bool($isHit)) { - $this->isHit = $isHit; - - return $this; - } else { - throw new \InvalidArgumentException('$isHit must be a boolean'); - } - } - - /** - * @param \DateTimeInterface $expiration - * @return $this - */ - public function expiresAt($expiration) - { - if ($expiration instanceof \DateTimeInterface) { - $this->expirationDate = $expiration; - } else { - throw new \InvalidArgumentException('$expiration must be an object implementing the DateTimeInterface'); - } - - return $this; - } - - /** - * Sets the expiration time for this cache item. - * - * @param int|\DateInterval $time - * The period of time from the present after which the item MUST be considered - * expired. An integer parameter is understood to be the time in seconds until - * expiration. If null is passed explicitly, a default value MAY be used. - * If none is set, the value should be stored permanently or for as long as the - * implementation allows. - * - * @return static - * The called object. - * - * @deprecated Use CacheItemInterface::expiresAfter() instead - */ - public function touch($time) - { - trigger_error('touch() is deprecated and will be removed in the next major release, use CacheItemInterface::expiresAfter() instead'); - - return $this->expiresAfter($time); - } - - /** - * @param \DateInterval|int $time - * @return $this - * @throws \InvalidArgumentException - */ - public function expiresAfter($time) - { - if (is_numeric($time)) { - if ($time <= 0) { - /** - * 5 years, however memcached or memory cached will gone when u restart it - * just recommended for sqlite. files - */ - $time = 30 * 24 * 3600 * 5; - } - $this->expirationDate = (new \DateTime())->add(new \DateInterval(sprintf('PT%dS', $time))); - } else if ($time instanceof \DateInterval) { - $this->expirationDate = (new \DateTime())->add($time); - } else { - throw new \InvalidArgumentException('Invalid date format'); - } - - return $this; - } - - /******************** - * - * PSR-6 Extended Methods - * - *******************/ - - /** - * @return string - */ - public function getEncodedKey() - { - return md5($this->getKey()); - } - - /** - * @return mixed - */ - public function getUncommittedData() - { - return $this->data; - } - - /** - * @return \DateTimeInterface - */ - public function getExpirationDate() - { - return $this->expirationDate; - } - - /** - * @return int - */ - public function getTtl() - { - $ttl = $this->expirationDate->getTimestamp() - time(); - if ($ttl > 2592000) { - $ttl = time() + $ttl; - } - - return $ttl; - } - - /** - * @return bool - */ - public function isExpired() - { - return $this->expirationDate->getTimestamp() < (new \DateTime())->getTimestamp(); - } - - /** - * @param int $step - * @return $this - * @throws \InvalidArgumentException - */ - public function increment($step = 1) - { - if (is_int($step)) { - $this->fetched = true; - $this->data += $step; - } else { - throw new \InvalidArgumentException('$step must be numeric.'); - } - - return $this; - } - - /** - * @param int $step - * @return $this - * @throws \InvalidArgumentException - */ - public function decrement($step = 1) - { - if (is_int($step)) { - $this->fetched = true; - $this->data -= $step; - } else { - throw new \InvalidArgumentException('$step must be numeric.'); - } - - return $this; - } - - /** - * @param array|string $data - * @return $this - * @throws \InvalidArgumentException - */ - public function append($data) - { - if (is_array($this->data)) { - array_push($this->data, $data); - } else if (is_string($data)) { - $this->data .= (string) $data; - } else { - throw new \InvalidArgumentException('$data must be either array nor string.'); - } - - return $this; - } - - - /** - * @param array|string $data - * @return $this - * @throws \InvalidArgumentException - */ - public function prepend($data) - { - if (is_array($this->data)) { - array_unshift($this->data, $data); - } else if (is_string($data)) { - $this->data = (string) $data . $this->data; - } else { - throw new \InvalidArgumentException('$data must be either array nor string.'); - } - - return $this; - } - - /** - * @param $tagName - * @return $this - * @throws \InvalidArgumentException - */ - public function addTag($tagName) - { - if (is_string($tagName)) { - $this->tags = array_unique(array_merge($this->tags, [$tagName])); - - return $this; - } else { - throw new \InvalidArgumentException('$tagName must be a string'); - } - } - - /** - * @param array $tagNames - * @return $this - */ - public function addTags(array $tagNames) - { - foreach ($tagNames as $tagName) { - $this->addTag($tagName); - } - - return $this; - } - - /** - * @param array $tags - * @return $this - * @throws \InvalidArgumentException - */ - public function setTags(array $tags) - { - if (count($tags)) { - if (array_filter($tags, 'is_string')) { - $this->tags = $tags; - } else { - throw new \InvalidArgumentException('$tagName must be an array of string'); - } - } - - return $this; - } - - /** - * @return array - */ - public function getTags() - { - return $this->tags; - } - - /** - * @return string - */ - public function getTagsAsString($separator = ', ') - { - return implode($separator, $this->tags); - } - - /** - * @param $tagName - * @return $this - */ - public function removeTag($tagName) - { - if (($key = array_search($tagName, $this->tags)) !== false) { - unset($this->tags[ $key ]); - $this->removedTags[] = $tagName; - } - - return $this; - } - - /** - * @param array $tagNames - * @return $this - */ - public function removeTags(array $tagNames) - { - foreach ($tagNames as $tagName) { - $this->removeTag($tagName); - } - - return $this; - } - - /** - * @return array - */ - public function getRemovedTags() - { - return array_diff($this->removedTags, $this->tags); - } - - /** - * Return the data as a well-formatted string. - * Any scalar value will be casted to an array - * @param int $option json_encode() options - * @param int $depth json_encode() depth - * @return string - */ - public function getDataAsJsonString($option = 0, $depth = 512) - { - $data = $this->get(); - - if (is_object($data) || is_array($data)) { - $data = json_encode($data, $option, $depth); - } else { - $data = json_encode([$data], $option, $depth); - } - - return json_encode($data, $option, $depth); - } - - /** - * Implements \JsonSerializable interface - * @return mixed - */ - public function jsonSerialize() - { - return $this->get(); - } - - /** - * Prevent recursions for Debug (php 5.6+) - * @return array - */ - final public function __debugInfo() - { - $info = get_object_vars($this); - $info[ 'driver' ] = 'object(' . get_class($info[ 'driver' ]) . ')'; - - return (array) $info; - } -} diff --git a/lib/phpfastcache/src/phpFastCache/CacheManager.php b/lib/phpfastcache/src/phpFastCache/CacheManager.php deleted file mode 100644 index f9198da..0000000 --- a/lib/phpfastcache/src/phpFastCache/CacheManager.php +++ /dev/null @@ -1,270 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache; - -use phpFastCache\Cache\ExtendedCacheItemPoolInterface; -use phpFastCache\Core\DriverAbstract; -use phpFastCache\Exceptions\phpFastCacheDriverCheckException; - -/** - * Class CacheManager - * @package phpFastCache - * - * @method static ExtendedCacheItemPoolInterface Apc() Apc($config = []) Return a driver "apc" instance - * @method static ExtendedCacheItemPoolInterface Apcu() Apcu($config = []) Return a driver "apcu" instance - * @method static ExtendedCacheItemPoolInterface Cookie() Cookie($config = []) Return a driver "cookie" instance - * @method static ExtendedCacheItemPoolInterface Couchbase() Couchbase($config = []) Return a driver "couchbase" instance - * @method static ExtendedCacheItemPoolInterface Files() Files($config = []) Return a driver "files" instance - * @method static ExtendedCacheItemPoolInterface Leveldb() Leveldb($config = []) Return a driver "leveldb" instance - * @method static ExtendedCacheItemPoolInterface Memcache() Memcache($config = []) Return a driver "memcache" instance - * @method static ExtendedCacheItemPoolInterface Memcached() Memcached($config = []) Return a driver "memcached" instance - * @method static ExtendedCacheItemPoolInterface Mongodb() Mongodb($config = []) Return a driver "mongodb" instance - * @method static ExtendedCacheItemPoolInterface Predis() Predis($config = []) Return a driver "predis" instance - * @method static ExtendedCacheItemPoolInterface Redis() Redis($config = []) Return a driver "redis" instance - * @method static ExtendedCacheItemPoolInterface Sqlite() Sqlite($config = []) Return a driver "sqlite" instance - * @method static ExtendedCacheItemPoolInterface Ssdb() Ssdb($config = []) Return a driver "ssdb" instance - * @method static ExtendedCacheItemPoolInterface Wincache() Wincache($config = []) Return a driver "wincache" instance - * @method static ExtendedCacheItemPoolInterface Xcache() Xcache($config = []) Return a driver "xcache" instance - * @method static ExtendedCacheItemPoolInterface Zenddisk() Zenddisk($config = []) Return a driver "zend disk cache" instance - * @method static ExtendedCacheItemPoolInterface Zendshm() Zendshm($config = []) Return a driver "zend memory cache" instance - * - */ -class CacheManager -{ - /** - * @var int - */ - public static $ReadHits = 0; - - /** - * @var int - */ - public static $WriteHits = 0; - - /** - * @var array - */ - protected static $config = [ - 'securityKey' => 'auto', // The securityKey that will be used to create the sub-directory - 'ignoreSymfonyNotice' => false, // Ignore Symfony notices for Symfony projects that do not makes use of PhpFastCache's Symfony Bundle - 'defaultTtl' => 900, // Default time-to-live in seconds - 'htaccess' => true, // Auto-generate .htaccess if it is missing - 'default_chmod' => 0777, // 0777 is recommended - 'path' => '', // If not set will be the value of sys_get_temp_dir() - 'fallback' => false, // Fall back when old driver is not supported - 'limited_memory_each_object' => 4096, // Maximum size (bytes) of object store in memory - 'compress_data' => false, // Compress stored data if the backend supports it - ]; - - /** - * @var string - */ - protected static $namespacePath; - - /** - * @var array - */ - protected static $instances = []; - - /** - * @param string $driver - * @param array $config - * @return ExtendedCacheItemPoolInterface - */ - public static function getInstance($driver = 'auto', $config = []) - { - static $badPracticeOmeter = []; - - /** - * @todo: Standardize a method for driver name - */ - $driver = self::standardizeDriverName($driver); - $config = array_merge(self::$config, $config); - if (!$driver || $driver === 'Auto') { - $driver = self::getAutoClass($config); - } - - $instance = crc32($driver . serialize($config)); - if (!isset(self::$instances[ $instance ])) { - $badPracticeOmeter[$driver] = 1; - if(!$config['ignoreSymfonyNotice'] && interface_exists('Symfony\Component\HttpKernel\KernelInterface') && !class_exists('phpFastCache\Bundle\phpFastCacheBundle')){ - trigger_error('A Symfony Bundle to make the PhpFastCache integration more easier is now available here: https://github.com/PHPSocialNetwork/phpfastcache-bundle', E_USER_NOTICE); - } - $class = self::getNamespacePath() . $driver . '\Driver'; - try{ - self::$instances[ $instance ] = new $class($config); - }catch(phpFastCacheDriverCheckException $e){ - $fallback = self::standardizeDriverName($config['fallback']); - if($fallback && $fallback !== $driver){ - $class = self::getNamespacePath() . $fallback . '\Driver'; - self::$instances[ $instance ] = new $class($config); - trigger_error(sprintf('The "%s" driver is unavailable at the moment, the fallback driver "%s" has been used instead.', $driver, $fallback), E_USER_WARNING); - }else{ - throw new phpFastCacheDriverCheckException($e->getMessage(), $e->getCode(), $e); - } - } - } else if(++$badPracticeOmeter[$driver] >= 5){ - trigger_error('[' . $driver . '] Calling many times CacheManager::getInstance() for already instanced drivers is a bad practice and have a significant impact on performances. - See https://github.com/PHPSocialNetwork/phpfastcache/wiki/[V5]-Why-calling-getInstance%28%29-each-time-is-a-bad-practice-%3F'); - } - - return self::$instances[ $instance ]; - } - - /** - * @param $config - * @return string - * @throws phpFastCacheDriverCheckException - */ - public static function getAutoClass($config = []) - { - static $autoDriver; - - if ($autoDriver === null) { - foreach (self::getStaticSystemDrivers() as $driver) { - try { - self::getInstance($driver, $config); - $autoDriver = $driver; - } catch (phpFastCacheDriverCheckException $e) { - continue; - } - } - } - - return $autoDriver; - } - - /** - * @param string $name - * @param array $arguments - * @return \Psr\Cache\CacheItemPoolInterface - */ - public static function __callStatic($name, $arguments) - { - $options = (array_key_exists(0, $arguments) && is_array($arguments) ? $arguments[ 0 ] : []); - - return self::getInstance($name, $options); - } - - /** - * @return bool - */ - public static function clearInstances() - { - self::$instances = []; - - gc_collect_cycles(); - return !count(self::$instances); - } - - /** - * @return string - */ - public static function getNamespacePath() - { - return self::$namespacePath ?: __NAMESPACE__ . '\Drivers\\'; - } - - /** - * @param string $path - */ - public static function setNamespacePath($path) - { - self::$namespacePath = $path; - } - - /** - * @param $name - * @param string $value - * @deprecated Method "setup" is deprecated and will be removed in V6. Use method "setDefaultConfig" instead. - * @throws \InvalidArgumentException - */ - public static function setup($name, $value = '') - { - trigger_error('Method "setup" is deprecated and will be removed in V6 Use method "setDefaultConfig" instead.', E_USER_DEPRECATED); - self::setDefaultConfig($name, $value); - } - - /** - * @param $name string|array - * @param mixed $value - * @throws \InvalidArgumentException - */ - public static function setDefaultConfig($name, $value = null) - { - if (is_array($name)) { - self::$config = array_merge(self::$config, $name); - } else if (is_string($name)){ - self::$config[ $name ] = $value; - }else{ - throw new \InvalidArgumentException('Invalid variable type: $name'); - } - } - - /** - * @return array - */ - public static function getDefaultConfig() - { - return self::$config; - } - - /** - * @return array - */ - public static function getStaticSystemDrivers() - { - return [ - 'Sqlite', - 'Files', - 'Apc', - 'Apcu', - 'Memcache', - 'Memcached', - 'Couchbase', - 'Mongodb', - 'Predis', - 'Redis', - 'Ssdb', - 'Leveldb', - 'Wincache', - 'Xcache', - 'Zenddisk', - 'Zendshm', - 'Devnull', - ]; - } - - /** - * @return array - */ - public static function getStaticAllDrivers() - { - return array_merge(self::getStaticSystemDrivers(), [ - 'Devtrue', - 'Devfalse', - 'Cookie', - ]); - } - - /** - * @param string $driverName - * @return string - */ - public static function standardizeDriverName($driverName) - { - return ucfirst(strtolower(trim($driverName))); - } -} diff --git a/lib/phpfastcache/src/phpFastCache/Core/ClassNamespaceResolverTrait.php b/lib/phpfastcache/src/phpFastCache/Core/ClassNamespaceResolverTrait.php deleted file mode 100644 index 07a72c0..0000000 --- a/lib/phpfastcache/src/phpFastCache/Core/ClassNamespaceResolverTrait.php +++ /dev/null @@ -1,36 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Core; - -/** - * Trait ClassNamespaceResolverTrait - * @package phpFastCache\Core - */ -trait ClassNamespaceResolverTrait -{ - /** - * @return string - */ - protected function getClassNamespace() - { - static $namespace; - - if (!$namespace) { - $namespace = (new \ReflectionObject($this))->getNamespaceName(); - } - - return $namespace; - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Core/DriverAbstract.php b/lib/phpfastcache/src/phpFastCache/Core/DriverAbstract.php deleted file mode 100644 index 1f8e898..0000000 --- a/lib/phpfastcache/src/phpFastCache/Core/DriverAbstract.php +++ /dev/null @@ -1,67 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Core; - -use phpFastCache\Cache\DriverBaseTrait; -use phpFastCache\Cache\ExtendedCacheItemPoolInterface; -use Psr\Cache\CacheItemInterface; - -/** - * Class DriverAbstract - * @package phpFastCache\Core - */ -abstract class DriverAbstract implements ExtendedCacheItemPoolInterface -{ - use DriverBaseTrait; - - const DRIVER_CHECK_FAILURE = '%s is not installed or is misconfigured, cannot continue.'; - const DRIVER_TAGS_KEY_PREFIX = '_TAG_'; - const DRIVER_DATA_WRAPPER_INDEX = 'd'; - const DRIVER_TIME_WRAPPER_INDEX = 't'; - const DRIVER_TAGS_WRAPPER_INDEX = 'g'; - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return array [ - * 'd' => 'THE ITEM DATA' - * 't' => 'THE ITEM DATE EXPIRATION' - * 'g' => 'THE ITEM TAGS' - * ] - * - */ - abstract protected function driverRead(CacheItemInterface $item); - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - */ - abstract protected function driverWrite(CacheItemInterface $item); - - /** - * @return bool - */ - abstract protected function driverClear(); - - /** - * @return bool - */ - abstract protected function driverConnect(); - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return bool - */ - abstract protected function driverDelete(CacheItemInterface $item); -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Core/ExtendedCacheItemPoolTrait.php b/lib/phpfastcache/src/phpFastCache/Core/ExtendedCacheItemPoolTrait.php deleted file mode 100644 index 0d0ad9f..0000000 --- a/lib/phpfastcache/src/phpFastCache/Core/ExtendedCacheItemPoolTrait.php +++ /dev/null @@ -1,370 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Core; - -use InvalidArgumentException; -use phpFastCache\Cache\ExtendedCacheItemInterface; -use Psr\Cache\CacheItemInterface; - -trait ExtendedCacheItemPoolTrait -{ - use StandardPsr6StructureTrait; - - /** - * Deletes all items in the pool. - * @deprecated Use clear() instead - * Will be removed in 5.1 - * - * @return bool - * True if the pool was successfully cleared. False if there was an error. - */ - public function clean() - { - trigger_error('Cache clean() method is deprecated, use clear() method instead', E_USER_DEPRECATED); - return $this->clear(); - } - - /** - * @param array $keys - * An indexed array of keys of items to retrieve. - * @param int $option json_encode() options - * @param int $depth json_encode() depth - * @return string - * @throws \InvalidArgumentException - */ - public function getItemsAsJsonString(array $keys = [], $option = 0, $depth = 512) - { - $callback = function(CacheItemInterface $item){ - return $item->get(); - }; - return json_encode(array_map($callback, array_values($this->getItems($keys))), $option, $depth); - } - - /** - * @param string $tagName - * @return \phpFastCache\Cache\ExtendedCacheItemInterface[] - * @throws InvalidArgumentException - */ - public function getItemsByTag($tagName) - { - if (is_string($tagName)) { - $driverResponse = $this->getItem($this->getTagKey($tagName)); - if ($driverResponse->isHit()) { - $items = (array) $driverResponse->get(); - - /** - * getItems() may provides expired item(s) - * themselves provided by a cache of item - * keys based stored the tag item. - * Therefore we pass a filter callback - * to remove the expired Item(s) provided by - * the item keys passed through getItems() - * - * #headache - */ - return array_filter($this->getItems(array_unique(array_keys($items))), function(ExtendedCacheItemInterface $item){ - return $item->isHit(); - }); - } else { - return []; - } - } else { - throw new InvalidArgumentException('$tagName must be a string'); - } - } - - /** - * @param array $tagNames - * @return \phpFastCache\Cache\ExtendedCacheItemInterface[] - * @throws InvalidArgumentException - */ - public function getItemsByTags(array $tagNames) - { - $items = []; - foreach (array_unique($tagNames) as $tagName) { - $items = array_merge($items, $this->getItemsByTag($tagName)); - } - - return $items; - } - - /** - * Returns A json string that represents an array of items by tags-based. - * - * @param array $tagNames - * An indexed array of keys of items to retrieve. - * @param int $option json_encode() options - * @param int $depth json_encode() depth - * - * @throws InvalidArgumentException - * If any of the keys in $keys are not a legal value a \Psr\Cache\InvalidArgumentException - * MUST be thrown. - * - * @return string - */ - public function getItemsByTagsAsJsonString(array $tagNames, $option = 0, $depth = 512) - { - $callback = function(CacheItemInterface $item){ - return $item->get(); - }; - - return json_encode(array_map($callback, array_values($this->getItemsByTags($tagNames))), $option, $depth); - } - - /** - * @param string $tagName - * @return bool|null - * @throws InvalidArgumentException - */ - public function deleteItemsByTag($tagName) - { - if (is_string($tagName)) { - $return = null; - foreach ($this->getItemsByTag($tagName) as $item) { - $result = $this->deleteItem($item->getKey()); - if ($return !== false) { - $return = $result; - } - } - - return $return; - } else { - throw new InvalidArgumentException('$tagName must be a string'); - } - } - - /** - * @param array $tagNames - * @return bool|null - * @throws InvalidArgumentException - */ - public function deleteItemsByTags(array $tagNames) - { - $return = null; - foreach ($tagNames as $tagName) { - $result = $this->deleteItemsByTag($tagName); - if ($return !== false) { - $return = $result; - } - } - - return $return; - } - - /** - * @inheritdoc - */ - public function incrementItemsByTag($tagName, $step = 1) - { - if (is_string($tagName) && is_int($step)) { - foreach ($this->getItemsByTag($tagName) as $item) { - $item->increment($step); - $this->saveDeferred($item); - } - - return $this->commit(); - } else { - throw new InvalidArgumentException('$tagName must be a string and $step an integer'); - } - } - - /** - * @inheritdoc - */ - public function incrementItemsByTags(array $tagNames, $step = 1) - { - $return = null; - foreach ($tagNames as $tagName) { - $result = $this->incrementItemsByTag($tagName, $step); - if ($return !== false) { - $return = $result; - } - } - - return $return; - } - - /** - * @inheritdoc - */ - public function decrementItemsByTag($tagName, $step = 1) - { - if (is_string($tagName) && is_int($step)) { - foreach ($this->getItemsByTag($tagName) as $item) { - $item->decrement($step); - $this->saveDeferred($item); - } - - return $this->commit(); - } else { - throw new InvalidArgumentException('$tagName must be a string and $step an integer'); - } - } - - /** - * @inheritdoc - */ - public function decrementItemsByTags(array $tagNames, $step = 1) - { - $return = null; - foreach ($tagNames as $tagName) { - $result = $this->decrementItemsByTag($tagName, $step); - if ($return !== false) { - $return = $result; - } - } - - return $return; - } - - /** - * @inheritdoc - */ - public function appendItemsByTag($tagName, $data) - { - if (is_string($tagName)) { - foreach ($this->getItemsByTag($tagName) as $item) { - $item->append($data); - $this->saveDeferred($item); - } - - return $this->commit(); - } else { - throw new InvalidArgumentException('$tagName must be a string'); - } - } - - /** - * @inheritdoc - */ - public function appendItemsByTags(array $tagNames, $data) - { - $return = null; - foreach ($tagNames as $tagName) { - $result = $this->appendItemsByTag($tagName, $data); - if ($return !== false) { - $return = $result; - } - } - - return $return; - } - - /** - * @inheritdoc - */ - public function prependItemsByTag($tagName, $data) - { - if (is_string($tagName)) { - foreach ($this->getItemsByTag($tagName) as $item) { - $item->prepend($data); - $this->saveDeferred($item); - } - - return $this->commit(); - } else { - throw new InvalidArgumentException('$tagName must be a string'); - } - } - - /** - * @inheritdoc - */ - public function prependItemsByTags(array $tagNames, $data) - { - $return = null; - foreach ($tagNames as $tagName) { - $result = $this->prependItemsByTag($tagName, $data); - if ($return !== false) { - $return = $result; - } - } - - return $return; - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return void - */ - public function detachItem(CacheItemInterface $item) - { - if(isset($this->itemInstances[$item->getKey()])){ - $this->deregisterItem($item); - } - } - - /** - * @return void - */ - public function detachAllItems() - { - foreach ($this->itemInstances as $item) { - $this->detachItem($item); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return void - * @throws \LogicException - */ - public function attachItem(CacheItemInterface $item) - { - if(isset($this->itemInstances[$item->getKey()]) && spl_object_hash($item) !== spl_object_hash($this->itemInstances[ $item->getKey() ])){ - throw new \LogicException('The item already exists and cannot be overwritten because the Spl object hash mismatches ! You probably tried to re-attach a detached item which has been already retrieved from cache.'); - }else{ - $this->itemInstances[$item->getKey()] = $item; - } - } - - - /** - * @internal This method de-register an item from $this->itemInstances - * @param CacheItemInterface|string $item - * @throws \InvalidArgumentException - */ - protected function deregisterItem($item) - { - if($item instanceof CacheItemInterface){ - unset($this->itemInstances[ $item->getKey() ]); - - }else if(is_string($item)){ - unset($this->itemInstances[ $item ]); - }else{ - throw new \InvalidArgumentException('Invalid type for $item variable'); - } - if(gc_enabled()){ - gc_collect_cycles(); - } - } - - /** - * Returns true if the item exists, is attached and the Spl Hash matches - * Returns false if the item exists, is attached and the Spl Hash mismatches - * Returns null if the item does not exists - * - * @param \Psr\Cache\CacheItemInterface $item - * @return bool|null - * @throws \LogicException - */ - public function isAttached(CacheItemInterface $item) - { - if(isset($this->itemInstances[$item->getKey()])){ - return spl_object_hash($item) === spl_object_hash($this->itemInstances[ $item->getKey() ]); - } - return null; - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Core/MemcacheDriverCollisionDetectorTrait.php b/lib/phpfastcache/src/phpFastCache/Core/MemcacheDriverCollisionDetectorTrait.php deleted file mode 100644 index a5477b9..0000000 --- a/lib/phpfastcache/src/phpFastCache/Core/MemcacheDriverCollisionDetectorTrait.php +++ /dev/null @@ -1,40 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Core; - -use phpFastCache\Exceptions\phpFastCacheCoreException; -use phpFastCache\Exceptions\phpFastCacheDriverException; -use phpFastCache\Util\Directory; - -/** - * Trait PathSeekerTrait - * @package phpFastCache\Core\Pool\IO - * @property array $config The configuration array passed via DriverBaseTrait - */ -trait PathSeekerTrait -{ - /** - * @var array - */ - public $tmp = []; - - /** - * @param bool $readonly - * @return string - * @throws phpFastCacheDriverException - */ - public function getPath($readonly = false) - { - /** - * Get the base system temporary directory - */ - $tmp_dir = rtrim(ini_get('upload_tmp_dir') ?: sys_get_temp_dir(), '\\/') . DIRECTORY_SEPARATOR . 'phpfastcache'; - /** - * Calculate the security key - */ - { - $securityKey = array_key_exists('securityKey', $this->config) ? $this->config[ 'securityKey' ] : ''; - if (!$securityKey || $securityKey === 'auto') { - if (isset($_SERVER[ 'HTTP_HOST' ])) { - $securityKey = preg_replace('/^www./', '', strtolower(str_replace(':', '_', $_SERVER[ 'HTTP_HOST' ]))); - } else { - $securityKey = ($this->isPHPModule() ? 'web' : 'cli'); - } - } - if ($securityKey !== '') { - $securityKey .= '/'; - } - $securityKey = static::cleanFileName($securityKey); - } - /** - * Extends the temporary directory - * with the security key and the driver name - */ - $tmp_dir = rtrim($tmp_dir, '/') . DIRECTORY_SEPARATOR; - if (empty($this->config[ 'path' ]) || !is_string($this->config[ 'path' ])) { - $path = $tmp_dir; - } else { - $path = rtrim($this->config[ 'path' ], '/') . DIRECTORY_SEPARATOR; - } - $path_suffix = $securityKey . DIRECTORY_SEPARATOR . $this->getDriverName(); - $full_path = Directory::getAbsolutePath($path . $path_suffix); - $full_path_tmp = Directory::getAbsolutePath($tmp_dir . $path_suffix); - $full_path_hash = md5($full_path); - /** - * In readonly mode we only attempt - * to verify if the directory exists - * or not, if it does not then we - * return the temp dir - */ - if ($readonly === true) { - if(!@file_exists($full_path) || !@is_writable($full_path)){ - return $full_path_tmp; - } - return $full_path; - }else{ - if (!isset($this->tmp[ $full_path_hash ]) || (!@file_exists($full_path) || !@is_writable($full_path))) { - if (!@file_exists($full_path)) { - @mkdir($full_path, $this->setChmodAuto(), true); - }elseif (!@is_writable($full_path)) { - if (!@chmod($full_path, $this->setChmodAuto())) - { - /** - * Switch back to tmp dir - * again if the path is not writable - */ - $full_path = $full_path_tmp; - if (!@file_exists($full_path)) { - @mkdir($full_path, $this->setChmodAuto(), true); - } - } - } - - /** - * In case there is no directory - * writable including tye temporary - * one, we must throw an exception - */ - if (!@file_exists($full_path) || !@is_writable($full_path)) { - throw new phpFastCacheDriverException('PLEASE CREATE OR CHMOD ' . $full_path . ' - 0777 OR ANY WRITABLE PERMISSION!'); - } - $this->tmp[ $full_path_hash ] = $full_path; - $this->htaccessGen($full_path, array_key_exists('htaccess', $this->config) ? $this->config[ 'htaccess' ] : false); - } - } - return realpath($full_path); - } - - - /** - * @param $keyword - * @return string - */ - protected function encodeFilename($keyword) - { - return md5($keyword); - } - - /** - * @return bool - */ - public function isExpired() - { - trigger_error(__FUNCTION__ . '() is deprecated, use ExtendedCacheItemInterface::isExpired() instead.', E_USER_DEPRECATED); - - return true; - } - - - /** - * @return string - * @throws \phpFastCache\Exceptions\phpFastCacheCoreException - */ - public function getFileDir() - { - return $this->getPath() . DIRECTORY_SEPARATOR . self::FILE_DIR; - } - - /** - * @param $keyword - * @param bool $skip - * @return string - * @throws phpFastCacheDriverException - */ - private function getFilePath($keyword, $skip = false) - { - $path = $this->getFileDir(); - - if ($keyword === false) { - return $path; - } - - $filename = $this->encodeFilename($keyword); - $folder = substr($filename, 0, 2); - $path = rtrim($path, '/') . '/' . $folder; - /** - * Skip Create Sub Folders; - */ - if ($skip == false) { - if (!file_exists($path)) { - if (@!mkdir($path, $this->setChmodAuto(), true)) { - throw new phpFastCacheDriverException('PLEASE CHMOD ' . $this->getPath() . ' - ' . $this->setChmodAuto() . ' OR ANY WRITABLE PERMISSION!'); - } - } - } - - return $path . '/' . $filename . '.txt'; - } - - - /** - * @param $this ->config - * @return int - */ - public function setChmodAuto() - { - if (!isset($this->config[ 'default_chmod' ]) || $this->config[ 'default_chmod' ] == '' || is_null($this->config[ 'default_chmod' ])) { - return 0777; - } else { - return $this->config[ 'default_chmod' ]; - } - } - - /** - * @param $filename - * @return mixed - */ - protected static function cleanFileName($filename) - { - $regex = [ - '/[\?\[\]\/\\\=\<\>\:\;\,\'\"\&\$\#\*\(\)\|\~\`\!\{\}]/', - '/\.$/', - '/^\./', - ]; - $replace = ['-', '', '']; - - return trim(preg_replace($regex, $replace, trim($filename)), '-'); - } - - /** - * @param $path - * @param bool $create - * @throws \Exception - */ - protected function htaccessGen($path, $create = true) - { - if ($create === true) { - if (!is_writable($path)) { - try { - if(!chmod($path, 0777)){ - throw new phpFastCacheDriverException('Chmod failed on : ' . $path); - } - } catch (phpFastCacheDriverException $e) { - throw new phpFastCacheDriverException('PLEASE CHMOD ' . $path . ' - 0777 OR ANY WRITABLE PERMISSION!', 0, $e); - } - } - - if (!file_exists($path . "/.htaccess")) { - $html = "order deny, allow \r\n -deny from all \r\n -allow from 127.0.0.1"; - - $file = @fopen($path . '/.htaccess', 'w+'); - if (!$file) { - throw new phpFastCacheDriverException('PLEASE CHMOD ' . $path . ' - 0777 OR ANY WRITABLE PERMISSION!'); - } - fwrite($file, $html); - fclose($file); - } - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Core/StandardPsr6StructureTrait.php b/lib/phpfastcache/src/phpFastCache/Core/StandardPsr6StructureTrait.php deleted file mode 100644 index e57a744..0000000 --- a/lib/phpfastcache/src/phpFastCache/Core/StandardPsr6StructureTrait.php +++ /dev/null @@ -1,247 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Core; - -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\CacheManager; -use phpFastCache\Exceptions\phpFastCacheCoreException; -use Psr\Cache\CacheItemInterface; - -/** - * Trait StandardPsr6StructureTrait - * @package phpFastCache\Core - */ -trait StandardPsr6StructureTrait -{ - use ClassNamespaceResolverTrait; - - /** - * @var array - */ - protected $deferredList = []; - - /** - * @var ExtendedCacheItemInterface[] - */ - protected $itemInstances = []; - - /** - * @param string $key - * @return \phpFastCache\Cache\ExtendedCacheItemInterface - * @throws \InvalidArgumentException - * @throws phpFastCacheCoreException - */ - public function getItem($key) - { - if (is_string($key)) { - if (!array_key_exists($key, $this->itemInstances)) { - - /** - * @var $item ExtendedCacheItemInterface - */ - CacheManager::$ReadHits++; - $class = new \ReflectionClass((new \ReflectionObject($this))->getNamespaceName() . '\Item'); - $item = $class->newInstanceArgs([$this, $key]); - $driverArray = $this->driverRead($item); - - if ($driverArray) { - if(!is_array($driverArray)){ - throw new phpFastCacheCoreException(sprintf('The driverRead method returned an unexpected variable type: %s', gettype($driverArray))); - } - $item->set($this->driverUnwrapData($driverArray)); - $item->expiresAt($this->driverUnwrapTime($driverArray)); - $item->setTags($this->driverUnwrapTags($driverArray)); - if ($item->isExpired()) { - /** - * Using driverDelete() instead of delete() - * to avoid infinite loop caused by - * getItem() call in delete() method - * As we MUST return an item in any - * way, we do not de-register here - */ - $this->driverDelete($item); - - } else { - $item->setHit(true); - } - } else { - $item->expiresAfter(abs((int) $this->getConfig()[ 'defaultTtl' ])); - } - - } - } else { - throw new \InvalidArgumentException(sprintf('$key must be a string, got type "%s" instead.', gettype($key))); - } - - return $this->itemInstances[ $key ]; - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return $this - * @throws \InvalidArgumentException - */ - public function setItem(CacheItemInterface $item) - { - if ($this->getClassNamespace() . '\\Item' === get_class($item)) { - $this->itemInstances[ $item->getKey() ] = $item; - - return $this; - } else { - throw new \InvalidArgumentException(sprintf('Invalid Item Class "%s" for this driver.', get_class($item))); - } - } - - /** - * @param array $keys - * @return CacheItemInterface[] - * @throws \InvalidArgumentException - */ - public function getItems(array $keys = []) - { - $collection = []; - foreach ($keys as $key) { - $collection[ $key ] = $this->getItem($key); - } - - return $collection; - } - - /** - * @param string $key - * @return bool - * @throws \InvalidArgumentException - */ - public function hasItem($key) - { - CacheManager::$ReadHits++; - - return $this->getItem($key)->isHit(); - } - - /** - * @return bool - */ - public function clear() - { - CacheManager::$WriteHits++; - $this->itemInstances = []; - - return $this->driverClear(); - } - - /** - * @param string $key - * @return bool - * @throws \InvalidArgumentException - */ - public function deleteItem($key) - { - $item = $this->getItem($key); - if ($this->hasItem($key) && $this->driverDelete($item)) { - $item->setHit(false); - CacheManager::$WriteHits++; - /** - * De-register the item instance - * then collect gc cycles - */ - $this->deregisterItem($key); - - return true; - } - - return false; - } - - /** - * @param array $keys - * @return bool - * @throws \InvalidArgumentException - */ - public function deleteItems(array $keys) - { - $return = null; - foreach ($keys as $key) { - $result = $this->deleteItem($key); - if ($result !== false) { - $return = $result; - } - } - - return (bool) $return; - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - * @throws \InvalidArgumentException - * @throws \RuntimeException - */ - public function save(CacheItemInterface $item) - { - /** - * @var ExtendedCacheItemInterface $item - */ - if (!array_key_exists($item->getKey(), $this->itemInstances)) { - $this->itemInstances[ $item->getKey() ] = $item; - } else if(spl_object_hash($item) !== spl_object_hash($this->itemInstances[ $item->getKey() ])){ - throw new \RuntimeException('Spl object hash mismatches ! You probably tried to save a detached item which has been already retrieved from cache.'); - } - - - if ($this->driverWrite($item) && $this->driverWriteTags($item)) { - $item->setHit(true); - CacheManager::$WriteHits++; - - return true; - } - - return false; - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return \Psr\Cache\CacheItemInterface - * @throws \RuntimeException - */ - public function saveDeferred(CacheItemInterface $item) - { - if (!array_key_exists($item->getKey(), $this->itemInstances)) { - $this->itemInstances[ $item->getKey() ] = $item; - }else if(spl_object_hash($item) !== spl_object_hash($this->itemInstances[ $item->getKey() ])){ - throw new \RuntimeException('Spl object hash mismatches ! You probably tried to save a detached item which has been already retrieved from cache.'); - } - - return $this->deferredList[ $item->getKey() ] = $item; - } - - /** - * @return mixed|null - * @throws \InvalidArgumentException - */ - public function commit() - { - $return = null; - foreach ($this->deferredList as $key => $item) { - $result = $this->save($item); - if ($return !== false) { - unset($this->deferredList[ $key ]); - $return = $result; - } - } - - return (bool) $return; - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Apc/Driver.php b/lib/phpfastcache/src/phpFastCache/Drivers/Apc/Driver.php deleted file mode 100644 index d7013ac..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Apc/Driver.php +++ /dev/null @@ -1,143 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Apc; - -use phpFastCache\Core\DriverAbstract; -use phpFastCache\Core\StandardPsr6StructureTrait; -use phpFastCache\Entities\driverStatistic; -use phpFastCache\Exceptions\phpFastCacheDriverCheckException; -use phpFastCache\Exceptions\phpFastCacheDriverException; -use Psr\Cache\CacheItemInterface; - -/** - * Class Driver - * @package phpFastCache\Drivers - */ -class Driver extends DriverAbstract -{ - /** - * Driver constructor. - * @param array $config - * @throws phpFastCacheDriverException - */ - public function __construct(array $config = []) - { - $this->setup($config); - - if (!$this->driverCheck()) { - throw new phpFastCacheDriverCheckException(sprintf(self::DRIVER_CHECK_FAILURE, $this->getDriverName())); - } - } - - /** - * @return bool - */ - public function driverCheck() - { - if (extension_loaded('apc') && ini_get('apc.enabled')) { - return true; - } else { - return false; - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - * @throws \InvalidArgumentException - */ - protected function driverWrite(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - $ttl = $item->getExpirationDate()->getTimestamp() - time(); - - return apc_store($item->getKey(), $this->driverPreWrap($item), ($ttl > 0 ? $ttl : 0)); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - */ - protected function driverRead(CacheItemInterface $item) - { - $data = apc_fetch($item->getKey(), $success); - if ($success === false) { - return null; - } - - return $data; - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return bool - * @throws \InvalidArgumentException - */ - protected function driverDelete(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return apc_delete($item->getKey()); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @return bool - */ - protected function driverClear() - { - return @apc_clear_cache() && @apc_clear_cache('user'); - } - - /** - * @return bool - */ - protected function driverConnect() - { - return true; - } - - /******************** - * - * PSR-6 Extended Methods - * - *******************/ - - /** - * @return driverStatistic - */ - public function getStats() - { - $stats = (array) apc_cache_info('user'); - $date = (new \DateTime())->setTimestamp($stats[ 'start_time' ]); - - return (new driverStatistic()) - ->setData(implode(', ', array_keys($this->itemInstances))) - ->setInfo(sprintf("The APC cache is up since %s, and have %d item(s) in cache.\n For more information see RawData.", $date->format(DATE_RFC2822), - $stats[ 'num_entries' ])) - ->setRawData($stats) - ->setSize($stats[ 'mem_size' ]); - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Apc/Item.php b/lib/phpfastcache/src/phpFastCache/Drivers/Apc/Item.php deleted file mode 100644 index fa37b14..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Apc/Item.php +++ /dev/null @@ -1,63 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Apc; - -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\Cache\ExtendedCacheItemPoolInterface; -use phpFastCache\Cache\ItemBaseTrait; -use phpFastCache\Drivers\Apc\Driver as ApcDriver; - -/** - * Class Item - * @package phpFastCache\Drivers\Apc - */ -class Item implements ExtendedCacheItemInterface -{ - use ItemBaseTrait; - - /** - * Item constructor. - * @param \phpFastCache\Drivers\Apc\Driver $driver - * @param $key - * @throws \InvalidArgumentException - */ - public function __construct(ApcDriver $driver, $key) - { - if (is_string($key)) { - $this->key = $key; - $this->driver = $driver; - $this->driver->setItem($this); - $this->expirationDate = new \DateTime(); - } else { - throw new \InvalidArgumentException(sprintf('$key must be a string, got type "%s" instead.', gettype($key))); - } - } - - /** - * @param ExtendedCacheItemPoolInterface $driver - * @throws \InvalidArgumentException - * @return static - */ - public function setDriver(ExtendedCacheItemPoolInterface $driver) - { - if ($driver instanceof ApcDriver) { - $this->driver = $driver; - - return $this; - } else { - throw new \InvalidArgumentException('Invalid driver instance'); - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Apcu/Driver.php b/lib/phpfastcache/src/phpFastCache/Drivers/Apcu/Driver.php deleted file mode 100644 index 428cef4..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Apcu/Driver.php +++ /dev/null @@ -1,142 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Apcu; - -use phpFastCache\Core\DriverAbstract; -use phpFastCache\Core\StandardPsr6StructureTrait; -use phpFastCache\Entities\driverStatistic; -use phpFastCache\Exceptions\phpFastCacheDriverCheckException; -use phpFastCache\Exceptions\phpFastCacheDriverException; -use Psr\Cache\CacheItemInterface; - -/** - * Class Driver - * @package phpFastCache\Drivers - */ -class Driver extends DriverAbstract -{ - /** - * Driver constructor. - * @param array $config - * @throws phpFastCacheDriverException - */ - public function __construct(array $config = []) - { - $this->setup($config); - - if (!$this->driverCheck()) { - throw new phpFastCacheDriverCheckException(sprintf(self::DRIVER_CHECK_FAILURE, $this->getDriverName())); - } - } - - /** - * @return bool - */ - public function driverCheck() - { - if (extension_loaded('apcu') && ini_get('apc.enabled')) { - return true; - } else { - return false; - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - * @throws \InvalidArgumentException - */ - protected function driverWrite(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - $ttl = $item->getExpirationDate()->getTimestamp() - time(); - - return apcu_store($item->getKey(), $this->driverPreWrap($item), ($ttl > 0 ? $ttl : 0)); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - */ - protected function driverRead(CacheItemInterface $item) - { - $data = apcu_fetch($item->getKey(), $success); - if ($success === false) { - return null; - } - - return $data; - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return bool - * @throws \InvalidArgumentException - */ - protected function driverDelete(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return apcu_delete($item->getKey()); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @return bool - */ - protected function driverClear() - { - return @apcu_clear_cache() && @apcu_clear_cache('user'); - } - - /** - * @return bool - */ - protected function driverConnect() - { - return true; - } - - /******************** - * - * PSR-6 Extended Methods - * - *******************/ - - /** - * @return driverStatistic - */ - public function getStats() - { - $stats = (array) apcu_cache_info('user'); - $date = (new \DateTime())->setTimestamp($stats[ 'start_time' ]); - - return (new driverStatistic()) - ->setData(implode(', ', array_keys($this->itemInstances))) - ->setInfo(sprintf("The APCU cache is up since %s, and have %d item(s) in cache.\n For more information see RawData.", $date->format(DATE_RFC2822), $stats[ 'num_entries' ])) - ->setRawData($stats) - ->setSize($stats[ 'mem_size' ]); - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Apcu/Item.php b/lib/phpfastcache/src/phpFastCache/Drivers/Apcu/Item.php deleted file mode 100644 index 34b6b9c..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Apcu/Item.php +++ /dev/null @@ -1,63 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Apcu; - -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\Cache\ExtendedCacheItemPoolInterface; -use phpFastCache\Cache\ItemBaseTrait; -use phpFastCache\Drivers\Apcu\Driver as ApcuDriver; - -/** - * Class Item - * @package phpFastCache\Drivers\Apcu - */ -class Item implements ExtendedCacheItemInterface -{ - use ItemBaseTrait; - - /** - * Item constructor. - * @param \phpFastCache\Drivers\Apcu\Driver $driver - * @param $key - * @throws \InvalidArgumentException - */ - public function __construct(ApcuDriver $driver, $key) - { - if (is_string($key)) { - $this->key = $key; - $this->driver = $driver; - $this->driver->setItem($this); - $this->expirationDate = new \DateTime(); - } else { - throw new \InvalidArgumentException(sprintf('$key must be a string, got type "%s" instead.', gettype($key))); - } - } - - /** - * @param ExtendedCacheItemPoolInterface $driver - * @throws \InvalidArgumentException - * @return static - */ - public function setDriver(ExtendedCacheItemPoolInterface $driver) - { - if ($driver instanceof ApcuDriver) { - $this->driver = $driver; - - return $this; - } else { - throw new \InvalidArgumentException('Invalid driver instance'); - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Cookie/Driver.php b/lib/phpfastcache/src/phpFastCache/Drivers/Cookie/Driver.php deleted file mode 100644 index 9d006c5..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Cookie/Driver.php +++ /dev/null @@ -1,197 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Cookie; - -use phpFastCache\Core\DriverAbstract; -use phpFastCache\Core\StandardPsr6StructureTrait; -use phpFastCache\Entities\driverStatistic; -use phpFastCache\Exceptions\phpFastCacheDriverCheckException; -use phpFastCache\Exceptions\phpFastCacheDriverException; -use Psr\Cache\CacheItemInterface; - -/** - * Class Driver - * @package phpFastCache\Drivers - */ -class Driver extends DriverAbstract -{ - const PREFIX = 'PFC_'; - - /** - * Driver constructor. - * @param array $config - * @throws phpFastCacheDriverException - */ - public function __construct(array $config = []) - { - $this->setup($config); - - if (!$this->driverCheck()) { - throw new phpFastCacheDriverCheckException(sprintf(self::DRIVER_CHECK_FAILURE, $this->getDriverName())); - } - } - - /** - * @return bool - */ - public function driverCheck() - { - if (function_exists('setcookie')) { - return true; - } else { - return false; - } - } - - /** - * @return bool - */ - protected function driverConnect() - { - return !(!array_key_exists('phpFastCache', $_COOKIE) && !@setcookie('phpFastCache', 1, 10)); - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - * @throws \InvalidArgumentException - */ - protected function driverWrite(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - $this->driverConnect(); - $keyword = self::PREFIX . $item->getKey(); - $v = json_encode($this->driverPreWrap($item)); - - if (isset($this->config[ 'limited_memory_each_object' ]) && strlen($v) > $this->config[ 'limited_memory_each_object' ]) { - return false; - } - - return setcookie($keyword, $v, $item->getExpirationDate()->getTimestamp(), '/'); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - * @throws \phpFastCache\Exceptions\phpFastCacheDriverException - */ - protected function driverRead(CacheItemInterface $item) - { - $this->driverConnect(); - // return null if no caching - // return value if in caching - $keyword = self::PREFIX . $item->getKey(); - $x = isset($_COOKIE[ $keyword ]) ? json_decode($_COOKIE[ $keyword ], true) : false; - - if ($x == false) { - return null; - } else { - if (!is_scalar($this->driverUnwrapData($x)) && !is_null($this->driverUnwrapData($x))) { - throw new phpFastCacheDriverException('Hacking attempt: The decoding returned a non-scalar value, Cookie driver does not allow this.'); - } - - return $x; - } - } - - /** - * @param $key - * @return int - */ - protected function driverReadExpirationDate($key) - { - $this->driverConnect(); - $keyword = self::PREFIX . $key; - $x = isset($_COOKIE[ $keyword ]) ? $this->decode(json_decode($_COOKIE[ $keyword ])->t) : false; - - return $x ? $x - time() : $x; - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return bool - * @throws \InvalidArgumentException - */ - protected function driverDelete(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - $this->driverConnect(); - $keyword = self::PREFIX . $item->getKey(); - $_COOKIE[ $keyword ] = null; - - return @setcookie($keyword, null, -10); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @return bool - */ - protected function driverClear() - { - $return = null; - $this->driverConnect(); - foreach ($_COOKIE as $keyword => $value) { - if (strpos($keyword, self::PREFIX) !== false) { - $_COOKIE[ $keyword ] = null; - $result = @setcookie($keyword, null, -10); - if ($return !== false) { - $return = $result; - } - } - } - - return $return; - } - - /******************** - * - * PSR-6 Extended Methods - * - *******************/ - - /** - * @return driverStatistic - */ - public function getStats() - { - $size = 0; - $stat = new driverStatistic(); - $stat->setData($_COOKIE); - - /** - * Only count PFC Cookie - */ - foreach ($_COOKIE as $key => $value) { - if (strpos($key, self::PREFIX) === 0) { - $size += strlen($value); - } - } - - $stat->setSize($size); - - return $stat; - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Cookie/Item.php b/lib/phpfastcache/src/phpFastCache/Drivers/Cookie/Item.php deleted file mode 100644 index 8a07492..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Cookie/Item.php +++ /dev/null @@ -1,65 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Cookie; - -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\Cache\ExtendedCacheItemPoolInterface; -use phpFastCache\Cache\ItemBaseTrait; -use phpFastCache\Drivers\Cookie\Driver as CookieDriver; - -/** - * Class Item - * @package phpFastCache\Drivers\Apc - */ -class Item implements ExtendedCacheItemInterface -{ - use ItemBaseTrait; - - /** - * Item constructor. - * @param \phpFastCache\Drivers\Cookie\Driver $driver - * @param $key - * @throws \InvalidArgumentException - */ - public function __construct(CookieDriver $driver, $key) - { - if (is_string($key)) { - $this->expirationDate = new \DateTime(); - $this->key = $key; - $this->driver = $driver; - $this->driver->setItem($this); - } else { - throw new \InvalidArgumentException(sprintf('$key must be a string, got type "%s" instead.', - gettype($key))); - } - } - - - /** - * @param ExtendedCacheItemPoolInterface $driver - * @throws \InvalidArgumentException - * @return static - */ - public function setDriver(ExtendedCacheItemPoolInterface $driver) - { - if ($driver instanceof CookieDriver) { - $this->driver = $driver; - - return $this; - } else { - throw new \InvalidArgumentException('Invalid driver instance'); - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Couchbase/Driver.php b/lib/phpfastcache/src/phpFastCache/Drivers/Couchbase/Driver.php deleted file mode 100644 index 109127a..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Couchbase/Driver.php +++ /dev/null @@ -1,199 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Couchbase; - -use CouchbaseCluster as CouchbaseClient; -use phpFastCache\Core\DriverAbstract; -use phpFastCache\Core\StandardPsr6StructureTrait; -use phpFastCache\Entities\driverStatistic; -use phpFastCache\Exceptions\phpFastCacheDriverCheckException; -use phpFastCache\Exceptions\phpFastCacheDriverException; -use Psr\Cache\CacheItemInterface; - -/** - * Class Driver - * @package phpFastCache\Drivers - */ -class Driver extends DriverAbstract -{ - /** - * @var CouchbaseClient - */ - public $instance; - - /** - * @var \CouchbaseBucket[] - */ - protected $bucketInstances = []; - - /** - * @var string - */ - protected $bucketCurrent = ''; - - /** - * Driver constructor. - * @param array $config - * @throws phpFastCacheDriverException - */ - public function __construct(array $config = []) - { - $this->setup($config); - - if (!$this->driverCheck()) { - throw new phpFastCacheDriverCheckException(sprintf(self::DRIVER_CHECK_FAILURE, $this->getDriverName())); - } else { - $this->driverConnect(); - } - } - - /** - * @return bool - */ - public function driverCheck() - { - return extension_loaded('Couchbase'); - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - * @throws \InvalidArgumentException - */ - protected function driverWrite(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return $this->getBucket()->upsert($item->getKey(), $this->encode($this->driverPreWrap($item)), ['expiry' => $item->getTtl()]); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - */ - protected function driverRead(CacheItemInterface $item) - { - try { - /** - * CouchbaseBucket::get() returns a CouchbaseMetaDoc object - */ - return $this->decode($this->getBucket()->get($item->getKey())->value); - } catch (\CouchbaseException $e) { - return null; - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return bool - * @throws \InvalidArgumentException - */ - protected function driverDelete(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return $this->getBucket()->remove($item->getKey()); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @return bool - */ - protected function driverClear() - { - return $this->getBucket()->manager()->flush(); - } - - /** - * @return bool - */ - protected function driverConnect() - { - if ($this->instance instanceof CouchbaseClient) { - throw new \LogicException('Already connected to Couchbase server'); - } else { - - - $host = isset($this->config[ 'host' ]) ? $this->config[ 'host' ] : '127.0.0.1'; - //$port = isset($server[ 'port' ]) ? $server[ 'port' ] : '11211'; - $password = isset($this->config[ 'password' ]) ? $this->config[ 'password' ] : ''; - $username = isset($this->config[ 'username' ]) ? $this->config[ 'username' ] : ''; - $buckets = isset($this->config[ 'buckets' ]) ? $this->config[ 'buckets' ] : [ - [ - 'bucket' => 'default', - 'password' => '', - ], - ]; - - $this->instance = $this->instance ?: new CouchbaseClient("couchbase://{$host}", $username, $password); - - foreach ($buckets as $bucket) { - $this->bucketCurrent = $this->bucketCurrent ?: $bucket[ 'bucket' ]; - $this->setBucket($bucket[ 'bucket' ], $this->instance->openBucket($bucket[ 'bucket' ], $bucket[ 'password' ])); - } - } - } - - /** - * @return \CouchbaseBucket - */ - protected function getBucket() - { - return $this->bucketInstances[ $this->bucketCurrent ]; - } - - /** - * @param $bucketName - * @param \CouchbaseBucket $CouchbaseBucket - * @throws \LogicException - */ - protected function setBucket($bucketName, \CouchbaseBucket $CouchbaseBucket) - { - if (!array_key_exists($bucketName, $this->bucketInstances)) { - $this->bucketInstances[ $bucketName ] = $CouchbaseBucket; - } else { - throw new \LogicException('A bucket instance with this name already exists.'); - } - } - - /******************** - * - * PSR-6 Extended Methods - * - *******************/ - - /** - * @return driverStatistic - */ - public function getStats() - { - $info = $this->getBucket()->manager()->info(); - - return (new driverStatistic()) - ->setSize($info[ 'basicStats' ][ 'diskUsed' ]) - ->setRawData($info) - ->setData(implode(', ', array_keys($this->itemInstances))) - ->setInfo('CouchBase version ' . $info[ 'nodes' ][ 0 ][ 'version' ] . ', Uptime (in days): ' . round($info[ 'nodes' ][ 0 ][ 'uptime' ] / 86400, 1) . "\n For more information see RawData."); - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Couchbase/Item.php b/lib/phpfastcache/src/phpFastCache/Drivers/Couchbase/Item.php deleted file mode 100644 index 032ab81..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Couchbase/Item.php +++ /dev/null @@ -1,63 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Couchbase; - -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\Cache\ExtendedCacheItemPoolInterface; -use phpFastCache\Cache\ItemBaseTrait; -use phpFastCache\Drivers\Couchbase\Driver as CouchbaseDriver; - -/** - * Class Item - * @package phpFastCache\Drivers\Apc - */ -class Item implements ExtendedCacheItemInterface -{ - use ItemBaseTrait; - - /** - * Item constructor. - * @param \phpFastCache\Drivers\Couchbase\Driver $driver - * @param $key - * @throws \InvalidArgumentException - */ - public function __construct(CouchbaseDriver $driver, $key) - { - if (is_string($key)) { - $this->key = $key; - $this->driver = $driver; - $this->driver->setItem($this); - $this->expirationDate = new \DateTime(); - } else { - throw new \InvalidArgumentException(sprintf('$key must be a string, got type "%s" instead.', gettype($key))); - } - } - - /** - * @param ExtendedCacheItemPoolInterface $driver - * @throws \InvalidArgumentException - * @return static - */ - public function setDriver(ExtendedCacheItemPoolInterface $driver) - { - if ($driver instanceof CouchbaseDriver) { - $this->driver = $driver; - - return $this; - } else { - throw new \InvalidArgumentException('Invalid driver instance'); - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Devfalse/Driver.php b/lib/phpfastcache/src/phpFastCache/Drivers/Devfalse/Driver.php deleted file mode 100644 index 44a701a..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Devfalse/Driver.php +++ /dev/null @@ -1,136 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Devfalse; - -use phpFastCache\Core\DriverAbstract; -use phpFastCache\Entities\driverStatistic; -use phpFastCache\Exceptions\phpFastCacheDriverCheckException; -use phpFastCache\Exceptions\phpFastCacheDriverException; -use Psr\Cache\CacheItemInterface; - -/** - * Class Driver - * @package phpFastCache\Drivers - */ -class Driver extends DriverAbstract -{ - /** - * Driver constructor. - * @param array $config - * @throws phpFastCacheDriverException - */ - public function __construct(array $config = []) - { - $this->setup($config); - - if (!$this->driverCheck()) { - throw new phpFastCacheDriverCheckException(sprintf(self::DRIVER_CHECK_FAILURE, $this->getDriverName())); - } - } - - /** - * @return bool - */ - public function driverCheck() - { - return true; - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - * @throws \InvalidArgumentException - */ - protected function driverWrite(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return true; - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return array [ - * 'd' => 'THE ITEM DATA' - * 't' => 'THE ITEM DATE EXPIRATION' - * 'g' => 'THE ITEM TAGS' - * ] - */ - protected function driverRead(CacheItemInterface $item) - { - return [ - self::DRIVER_DATA_WRAPPER_INDEX => false, - self::DRIVER_TAGS_WRAPPER_INDEX => [], - self::DRIVER_TIME_WRAPPER_INDEX => new \DateTime(), - ]; - } - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return bool - * @throws \InvalidArgumentException - */ - protected function driverDelete(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return true; - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @return bool - */ - protected function driverClear() - { - return true; - } - - /** - * @return bool - */ - protected function driverConnect() - { - return true; - } - - /******************** - * - * PSR-6 Extended Methods - * - *******************/ - - /** - * @return driverStatistic - */ - public function getStats() - { - $stat = new driverStatistic(); - $stat->setInfo('[Devfalse] A void info string') - ->setSize(0) - ->setData(implode(', ', array_keys($this->itemInstances))) - ->setRawData(false); - - return $stat; - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Devfalse/Item.php b/lib/phpfastcache/src/phpFastCache/Drivers/Devfalse/Item.php deleted file mode 100644 index e3c7ffb..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Devfalse/Item.php +++ /dev/null @@ -1,63 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Devfalse; - -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\Cache\ExtendedCacheItemPoolInterface; -use phpFastCache\Cache\ItemBaseTrait; -use phpFastCache\Drivers\Devnull\Driver as DevnullDriver; - -/** - * Class Item - * @package phpFastCache\Drivers\Devnull - */ -class Item implements ExtendedCacheItemInterface -{ - use ItemBaseTrait; - - /** - * Item constructor. - * @param \phpFastCache\Drivers\Devnull\Driver $driver - * @param $key - * @throws \InvalidArgumentException - */ - public function __construct(DevnullDriver $driver, $key) - { - if (is_string($key)) { - $this->key = $key; - $this->driver = $driver; - $this->driver->setItem($this); - $this->expirationDate = new \DateTime(); - } else { - throw new \InvalidArgumentException(sprintf('$key must be a string, got type "%s" instead.', gettype($key))); - } - } - - /** - * @param ExtendedCacheItemPoolInterface $driver - * @throws \InvalidArgumentException - * @return static - */ - public function setDriver(ExtendedCacheItemPoolInterface $driver) - { - if ($driver instanceof DevnullDriver) { - $this->driver = $driver; - - return $this; - } else { - throw new \InvalidArgumentException('Invalid driver instance'); - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Devnull/Driver.php b/lib/phpfastcache/src/phpFastCache/Drivers/Devnull/Driver.php deleted file mode 100644 index 6a038de..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Devnull/Driver.php +++ /dev/null @@ -1,138 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Devnull; - -use phpFastCache\Core\DriverAbstract; -use phpFastCache\Core\StandardPsr6StructureTrait; -use phpFastCache\Entities\driverStatistic; -use phpFastCache\Exceptions\phpFastCacheDriverCheckException; -use phpFastCache\Exceptions\phpFastCacheDriverException; -use Psr\Cache\CacheItemInterface; - -/** - * Class Driver - * @package phpFastCache\Drivers - */ -class Driver extends DriverAbstract -{ - /** - * Driver constructor. - * @param array $config - * @throws phpFastCacheDriverException - */ - public function __construct(array $config = []) - { - $this->setup($config); - - if (!$this->driverCheck()) { - throw new phpFastCacheDriverCheckException(sprintf(self::DRIVER_CHECK_FAILURE, $this->getDriverName())); - } - } - - /** - * @return bool - */ - public function driverCheck() - { - return true; - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - * @throws \InvalidArgumentException - */ - protected function driverWrite(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return true; - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return array [ - * 'd' => 'THE ITEM DATA' - * 't' => 'THE ITEM DATE EXPIRATION' - * 'g' => 'THE ITEM TAGS' - * ] - */ - protected function driverRead(CacheItemInterface $item) - { - return [ - self::DRIVER_DATA_WRAPPER_INDEX => null, - self::DRIVER_TAGS_WRAPPER_INDEX => [], - self::DRIVER_TIME_WRAPPER_INDEX => new \DateTime(), - ]; - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return bool - * @throws \InvalidArgumentException - */ - protected function driverDelete(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return true; - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @return bool - */ - protected function driverClear() - { - return true; - } - - /** - * @return bool - */ - protected function driverConnect() - { - return true; - } - - /******************** - * - * PSR-6 Extended Methods - * - *******************/ - - /** - * @return driverStatistic - */ - public function getStats() - { - $stat = new driverStatistic(); - $stat->setInfo('[Devnull] A void info string') - ->setSize(0) - ->setData(implode(', ', array_keys($this->itemInstances))) - ->setRawData(null); - - return $stat; - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Devnull/Item.php b/lib/phpfastcache/src/phpFastCache/Drivers/Devnull/Item.php deleted file mode 100644 index 3a6581b..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Devnull/Item.php +++ /dev/null @@ -1,63 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Devnull; - -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\Cache\ExtendedCacheItemPoolInterface; -use phpFastCache\Cache\ItemBaseTrait; -use phpFastCache\Drivers\Devnull\Driver as DevnullDriver; - -/** - * Class Item - * @package phpFastCache\Drivers\Devnull - */ -class Item implements ExtendedCacheItemInterface -{ - use ItemBaseTrait; - - /** - * Item constructor. - * @param \phpFastCache\Drivers\Devnull\Driver $driver - * @param $key - * @throws \InvalidArgumentException - */ - public function __construct(DevnullDriver $driver, $key) - { - if (is_string($key)) { - $this->key = $key; - $this->driver = $driver; - $this->driver->setItem($this); - $this->expirationDate = new \DateTime(); - } else { - throw new \InvalidArgumentException(sprintf('$key must be a string, got type "%s" instead.', gettype($key))); - } - } - - /** - * @param ExtendedCacheItemPoolInterface $driver - * @throws \InvalidArgumentException - * @return static - */ - public function setDriver(ExtendedCacheItemPoolInterface $driver) - { - if ($driver instanceof DevnullDriver) { - $this->driver = $driver; - - return $this; - } else { - throw new \InvalidArgumentException('Invalid driver instance'); - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Devtrue/Driver.php b/lib/phpfastcache/src/phpFastCache/Drivers/Devtrue/Driver.php deleted file mode 100644 index 2d6385b..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Devtrue/Driver.php +++ /dev/null @@ -1,138 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Devtrue; - -use phpFastCache\Core\DriverAbstract; -use phpFastCache\Core\StandardPsr6StructureTrait; -use phpFastCache\Entities\driverStatistic; -use phpFastCache\Exceptions\phpFastCacheDriverCheckException; -use phpFastCache\Exceptions\phpFastCacheDriverException; -use Psr\Cache\CacheItemInterface; - -/** - * Class Driver - * @package phpFastCache\Drivers - */ -class Driver extends DriverAbstract -{ - /** - * Driver constructor. - * @param array $config - * @throws phpFastCacheDriverException - */ - public function __construct(array $config = []) - { - $this->setup($config); - - if (!$this->driverCheck()) { - throw new phpFastCacheDriverCheckException(sprintf(self::DRIVER_CHECK_FAILURE, $this->getDriverName())); - } - } - - /** - * @return bool - */ - public function driverCheck() - { - return true; - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - * @throws \InvalidArgumentException - */ - protected function driverWrite(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return false; - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return array [ - * 'd' => 'THE ITEM DATA' - * 't' => 'THE ITEM DATE EXPIRATION' - * 'g' => 'THE ITEM TAGS' - * ] - */ - protected function driverRead(CacheItemInterface $item) - { - return [ - self::DRIVER_DATA_WRAPPER_INDEX => true, - self::DRIVER_TAGS_WRAPPER_INDEX => [], - self::DRIVER_TIME_WRAPPER_INDEX => new \DateTime(), - ]; - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return bool - * @throws \InvalidArgumentException - */ - protected function driverDelete(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return false; - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @return bool - */ - protected function driverClear() - { - return false; - } - - /** - * @return bool - */ - protected function driverConnect() - { - return false; - } - - /******************** - * - * PSR-6 Extended Methods - * - *******************/ - - /** - * @return driverStatistic - */ - public function getStats() - { - $stat = new driverStatistic(); - $stat->setInfo('[Devtrue] A void info string') - ->setSize(0) - ->setData(implode(', ', array_keys($this->itemInstances))) - ->setRawData(true); - - return $stat; - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Devtrue/Item.php b/lib/phpfastcache/src/phpFastCache/Drivers/Devtrue/Item.php deleted file mode 100644 index 936fab0..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Devtrue/Item.php +++ /dev/null @@ -1,63 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Devtrue; - -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\Cache\ExtendedCacheItemPoolInterface; -use phpFastCache\Cache\ItemBaseTrait; -use phpFastCache\Drivers\Devtrue\Driver as DevtrueDriver; - -/** - * Class Item - * @package phpFastCache\Drivers\Devtrue - */ -class Item implements ExtendedCacheItemInterface -{ - use ItemBaseTrait; - - /** - * Item constructor. - * @param \phpFastCache\Drivers\Devtrue\Driver $driver - * @param $key - * @throws \InvalidArgumentException - */ - public function __construct(DevtrueDriver $driver, $key) - { - if (is_string($key)) { - $this->key = $key; - $this->driver = $driver; - $this->driver->setItem($this); - $this->expirationDate = new \DateTime(); - } else { - throw new \InvalidArgumentException(sprintf('$key must be a string, got type "%s" instead.', gettype($key))); - } - } - - /** - * @param ExtendedCacheItemPoolInterface $driver - * @throws \InvalidArgumentException - * @return static - */ - public function setDriver(ExtendedCacheItemPoolInterface $driver) - { - if ($driver instanceof DevtrueDriver) { - $this->driver = $driver; - - return $this; - } else { - throw new \InvalidArgumentException('Invalid driver instance'); - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Files/Driver.php b/lib/phpfastcache/src/phpFastCache/Drivers/Files/Driver.php deleted file mode 100644 index 521185e..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Files/Driver.php +++ /dev/null @@ -1,239 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Files; - -use phpFastCache\Core\DriverAbstract; -use phpFastCache\Core\PathSeekerTrait; -use phpFastCache\Core\StandardPsr6StructureTrait; -use phpFastCache\Entities\driverStatistic; -use phpFastCache\Exceptions\phpFastCacheDriverCheckException; -use phpFastCache\Exceptions\phpFastCacheDriverException; -use phpFastCache\Util\Directory; -use Psr\Cache\CacheItemInterface; - -/** - * Class Driver - * @package phpFastCache\Drivers - */ -class Driver extends DriverAbstract -{ - use PathSeekerTrait; - - /** - * - */ - const FILE_DIR = 'files'; - - /** - * Driver constructor. - * @param array $config - * @throws phpFastCacheDriverException - */ - public function __construct(array $config = []) - { - $this->setup($config); - - if (!$this->driverCheck()) { - throw new phpFastCacheDriverCheckException(sprintf(self::DRIVER_CHECK_FAILURE, $this->getDriverName())); - } - } - - /** - * @return bool - */ - public function driverCheck() - { - return is_writable($this->getFileDir()) || @mkdir($this->getFileDir(), $this->setChmodAuto(), true); - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - * @throws \InvalidArgumentException - */ - protected function driverWrite(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - $file_path = $this->getFilePath($item->getKey()); - $data = $this->encode($this->driverPreWrap($item)); - - $toWrite = true; - - /** - * Skip if Existing Caching in Options - */ - if (isset($this->config[ 'skipExisting' ]) && $this->config[ 'skipExisting' ] == true && file_exists($file_path)) { - $content = $this->readfile($file_path); - $old = $this->decode($content); - $toWrite = false; - if ($old->isExpired()) { - $toWrite = true; - } - } - - /** - * Force write - */ - try { - if ($toWrite == true) { - $f = fopen($file_path, 'w+'); - fwrite($f, $data); - fclose($f); - - return true; - } - } catch (\Exception $e) { - return false; - } - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - */ - protected function driverRead(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - $file_path = $this->getFilePath($item->getKey()); - if (!file_exists($file_path)) { - return null; - } - - $content = $this->readfile($file_path); - - return $this->decode($content); - - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return bool - * @throws \InvalidArgumentException - */ - protected function driverDelete(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - $file_path = $this->getFilePath($item->getKey(), true); - if (file_exists($file_path) && @unlink($file_path)) { - return true; - } else { - return false; - } - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @return bool - */ - protected function driverClear() - { - return (bool) Directory::rrmdir($this->getPath(true)); - } - - /** - * @return bool - */ - protected function driverConnect() - { - return true; - } - - /** - * @param string $optionName - * @param mixed $optionValue - * @return bool - * @throws \InvalidArgumentException - */ - public static function isValidOption($optionName, $optionValue) - { - parent::isValidOption($optionName, $optionValue); - switch ($optionName) { - case 'path': - return is_string($optionValue); - break; - - case 'default_chmod': - return is_numeric($optionValue); - break; - - case 'securityKey': - return is_string($optionValue); - break; - case 'htaccess': - return is_bool($optionValue); - break; - default: - return false; - break; - } - } - - /** - * @return array - */ - public static function getValidOptions() - { - return ['path', 'default_chmod', 'securityKey', 'htaccess']; - } - - /** - * @return array - */ - public static function getRequiredOptions() - { - return ['path']; - } - - /******************** - * - * PSR-6 Extended Methods - * - *******************/ - - /** - * @return driverStatistic - * @throws \phpFastCache\Exceptions\phpFastCacheCoreException - * @throws \phpFastCache\Exceptions\phpFastCacheDriverException - */ - public function getStats() - { - $stat = new driverStatistic(); - $path = $this->getFilePath(false); - - if (!is_dir($path)) { - throw new phpFastCacheDriverException("Can't read PATH:" . $path, 94); - } - - $stat->setData(implode(', ', array_keys($this->itemInstances))) - ->setRawData([]) - ->setSize(Directory::dirSize($path)) - ->setInfo('Number of files used to build the cache: ' . Directory::getFileCount($path)); - - return $stat; - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Files/Item.php b/lib/phpfastcache/src/phpFastCache/Drivers/Files/Item.php deleted file mode 100644 index 7ee6b6b..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Files/Item.php +++ /dev/null @@ -1,63 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Files; - -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\Cache\ExtendedCacheItemPoolInterface; -use phpFastCache\Cache\ItemBaseTrait; -use phpFastCache\Drivers\Files\Driver as FilesDriver; - -/** - * Class Item - * @package phpFastCache\Drivers\Apc - */ -class Item implements ExtendedCacheItemInterface -{ - use ItemBaseTrait; - - /** - * Item constructor. - * @param \phpFastCache\Drivers\Files\Driver $driver - * @param $key - * @throws \InvalidArgumentException - */ - public function __construct(FilesDriver $driver, $key) - { - if (is_string($key)) { - $this->expirationDate = new \DateTime(); - $this->key = $key; - $this->driver = $driver; - $this->driver->setItem($this); - } else { - throw new \InvalidArgumentException(sprintf('$key must be a string, got type "%s" instead.', get_class($key))); - } - } - - /** - * @param ExtendedCacheItemPoolInterface $driver - * @throws \InvalidArgumentException - * @return static - */ - public function setDriver(ExtendedCacheItemPoolInterface $driver) - { - if ($driver instanceof FilesDriver) { - $this->driver = $driver; - - return $this; - } else { - throw new \InvalidArgumentException('Invalid driver instance'); - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Leveldb/Driver.php b/lib/phpfastcache/src/phpFastCache/Drivers/Leveldb/Driver.php deleted file mode 100644 index 56afb58..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Leveldb/Driver.php +++ /dev/null @@ -1,177 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Leveldb; - -use LevelDB as LeveldbClient; -use phpFastCache\Core\DriverAbstract; -use phpFastCache\Core\PathSeekerTrait; -use phpFastCache\Core\StandardPsr6StructureTrait; -use phpFastCache\Entities\driverStatistic; -use phpFastCache\Exceptions\phpFastCacheDriverCheckException; -use phpFastCache\Exceptions\phpFastCacheDriverException; -use phpFastCache\Util\Directory; -use Psr\Cache\CacheItemInterface; - -/** - * Class Driver - * @package phpFastCache\Drivers - */ -class Driver extends DriverAbstract -{ - use PathSeekerTrait; - - const LEVELDB_FILENAME = '.database'; - - /** - * @var LeveldbClient Instance of driver service - */ - public $instance; - - /** - * Driver constructor. - * @param array $config - * @throws phpFastCacheDriverException - */ - public function __construct(array $config = []) - { - $this->setup($config); - - if (!$this->driverCheck()) { - throw new phpFastCacheDriverCheckException(sprintf(self::DRIVER_CHECK_FAILURE, $this->getDriverName())); - } else { - $this->driverConnect(); - } - } - - /** - * @return string - * @throws \phpFastCache\Exceptions\phpFastCacheCoreException - */ - public function getLeveldbFile() - { - return $this->getPath() . '/' . self::LEVELDB_FILENAME; - } - - /** - * @return bool - */ - public function driverCheck() - { - return extension_loaded('Leveldb'); - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - * @throws \InvalidArgumentException - */ - protected function driverWrite(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return $this->instance->set($item->getKey(), $this->encode($this->driverPreWrap($item))); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - */ - protected function driverRead(CacheItemInterface $item) - { - $val = $this->instance->get($item->getKey()); - if ($val == false) { - return null; - } else { - return $this->decode($val); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return bool - * @throws \InvalidArgumentException - */ - protected function driverDelete(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return $this->instance->delete($item->getKey()); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @return bool - */ - protected function driverClear() - { - if ($this->instance instanceof LeveldbClient) { - $this->instance->close(); - $this->instance = null; - } - $result = LeveldbClient::destroy($this->getLeveldbFile()); - $this->driverConnect(); - - return $result; - } - - /** - * @return bool - */ - protected function driverConnect() - { - if ($this->instance instanceof LeveldbClient) { - throw new \LogicException('Already connected to Leveldb database'); - } else { - $this->instance = $this->instance ?: new LeveldbClient($this->getLeveldbFile()); - } - } - - /******************** - * - * PSR-6 Extended Methods - * - *******************/ - - /** - * @return driverStatistic - */ - public function getStats() - { - return (new driverStatistic()) - ->setData(implode(', ', array_keys($this->itemInstances))) - ->setInfo('Number of files used to build the cache: ' . Directory::getFileCount($this->getLeveldbFile())) - ->setSize(Directory::dirSize($this->getLeveldbFile())); - } - - /** - * Close connection on destruct - */ - public function __destruct() - { - if ($this->instance instanceof LeveldbClient) { - $this->instance->close(); - $this->instance = null; - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Leveldb/Item.php b/lib/phpfastcache/src/phpFastCache/Drivers/Leveldb/Item.php deleted file mode 100644 index 479da7a..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Leveldb/Item.php +++ /dev/null @@ -1,63 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Leveldb; - -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\Cache\ExtendedCacheItemPoolInterface; -use phpFastCache\Cache\ItemBaseTrait; -use phpFastCache\Drivers\Leveldb\Driver as LeveldbDriver; - -/** - * Class Item - * @package phpFastCache\Drivers\Leveldb - */ -class Item implements ExtendedCacheItemInterface -{ - use ItemBaseTrait; - - /** - * Item constructor. - * @param \phpFastCache\Drivers\Leveldb\Driver $driver - * @param $key - * @throws \InvalidArgumentException - */ - public function __construct(LeveldbDriver $driver, $key) - { - if (is_string($key)) { - $this->key = $key; - $this->driver = $driver; - $this->driver->setItem($this); - $this->expirationDate = new \DateTime(); - } else { - throw new \InvalidArgumentException(sprintf('$key must be a string, got type "%s" instead.', gettype($key))); - } - } - - /** - * @param ExtendedCacheItemPoolInterface $driver - * @throws \InvalidArgumentException - * @return static - */ - public function setDriver(ExtendedCacheItemPoolInterface $driver) - { - if ($driver instanceof LeveldbDriver) { - $this->driver = $driver; - - return $this; - } else { - throw new \InvalidArgumentException('Invalid driver instance'); - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Memcache/Driver.php b/lib/phpfastcache/src/phpFastCache/Drivers/Memcache/Driver.php deleted file mode 100644 index 5511a7f..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Memcache/Driver.php +++ /dev/null @@ -1,176 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Memcache; - -use Memcache as MemcacheSoftware; -use phpFastCache\Core\DriverAbstract; -use phpFastCache\Core\MemcacheDriverCollisionDetectorTrait; -use phpFastCache\Core\StandardPsr6StructureTrait; -use phpFastCache\Entities\driverStatistic; -use phpFastCache\Exceptions\phpFastCacheDriverCheckException; -use phpFastCache\Exceptions\phpFastCacheDriverException; -use Psr\Cache\CacheItemInterface; - -/** - * Class Driver - * @package phpFastCache\Drivers - */ -class Driver extends DriverAbstract -{ - use MemcacheDriverCollisionDetectorTrait; - - /** - * @var int - */ - protected $memcacheFlags = 0; - - /** - * Driver constructor. - * @param array $config - * @throws phpFastCacheDriverException - */ - public function __construct(array $config = []) - { - self::checkCollision('Memcache'); - $this->setup($config); - - if (!$this->driverCheck()) { - throw new phpFastCacheDriverCheckException(sprintf(self::DRIVER_CHECK_FAILURE, $this->getDriverName())); - } else { - $this->instance = new MemcacheSoftware(); - $this->driverConnect(); - - if (array_key_exists('compress_data', $config) && $config[ 'compress_data' ] === true) { - $this->memcacheFlags = MEMCACHE_COMPRESSED; - } - } - } - - /** - * @return bool - */ - public function driverCheck() - { - return class_exists('Memcache'); - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - * @throws \InvalidArgumentException - */ - protected function driverWrite(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return $this->instance->set($item->getKey(), $this->driverPreWrap($item), $this->memcacheFlags, $item->getTtl()); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - */ - protected function driverRead(CacheItemInterface $item) - { - $val = $this->instance->get($item->getKey()); - - if ($val === false) { - return null; - } else { - return $val; - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return bool - * @throws \InvalidArgumentException - */ - protected function driverDelete(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return $this->instance->delete($item->getKey()); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @return bool - */ - protected function driverClear() - { - return $this->instance->flush(); - } - - /** - * @return bool - */ - protected function driverConnect() - { - $servers = (!empty($this->config[ 'memcache' ]) && is_array($this->config[ 'memcache' ]) ? $this->config[ 'memcache' ] : []); - if (count($servers) < 1) { - $servers = [ - ['127.0.0.1', 11211], - ]; - } - - foreach ($servers as $server) { - try { - if (!$this->instance->addserver($server[ 0 ], $server[ 1 ])) { - $this->fallback = true; - } - if(!empty($server[ 'sasl_user' ]) && !empty($server[ 'sasl_password'])){ - $this->instance->setSaslAuthData($server[ 'sasl_user' ], $server[ 'sasl_password']); - } - } catch (\Exception $e) { - $this->fallback = true; - } - } - } - - /******************** - * - * PSR-6 Extended Methods - * - *******************/ - - /** - * @return driverStatistic - */ - public function getStats() - { - $stats = (array) $this->instance->getstats(); - $stats[ 'uptime' ] = (isset($stats[ 'uptime' ]) ? $stats[ 'uptime' ] : 0); - $stats[ 'version' ] = (isset($stats[ 'version' ]) ? $stats[ 'version' ] : 'UnknownVersion'); - $stats[ 'bytes' ] = (isset($stats[ 'bytes' ]) ? $stats[ 'version' ] : 0); - - $date = (new \DateTime())->setTimestamp(time() - $stats[ 'uptime' ]); - - return (new driverStatistic()) - ->setData(implode(', ', array_keys($this->itemInstances))) - ->setInfo(sprintf("The memcache daemon v%s is up since %s.\n For more information see RawData.", $stats[ 'version' ], $date->format(DATE_RFC2822))) - ->setRawData($stats) - ->setSize($stats[ 'bytes' ]); - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Memcache/Item.php b/lib/phpfastcache/src/phpFastCache/Drivers/Memcache/Item.php deleted file mode 100644 index 6b595b6..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Memcache/Item.php +++ /dev/null @@ -1,63 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Memcache; - -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\Cache\ExtendedCacheItemPoolInterface; -use phpFastCache\Cache\ItemBaseTrait; -use phpFastCache\Drivers\Memcache\Driver as MemcacheDriver; - -/** - * Class Item - * @package phpFastCache\Drivers\Apc - */ -class Item implements ExtendedCacheItemInterface -{ - use ItemBaseTrait; - - /** - * Item constructor. - * @param \phpFastCache\Drivers\Memcache\Driver $driver - * @param $key - * @throws \InvalidArgumentException - */ - public function __construct(MemcacheDriver $driver, $key) - { - if (is_string($key)) { - $this->key = $key; - $this->driver = $driver; - $this->driver->setItem($this); - $this->expirationDate = new \DateTime(); - } else { - throw new \InvalidArgumentException(sprintf('$key must be a string, got type "%s" instead.', gettype($key))); - } - } - - /** - * @param ExtendedCacheItemPoolInterface $driver - * @throws \InvalidArgumentException - * @return static - */ - public function setDriver(ExtendedCacheItemPoolInterface $driver) - { - if ($driver instanceof MemcacheDriver) { - $this->driver = $driver; - - return $this; - } else { - throw new \InvalidArgumentException('Invalid driver instance'); - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Memcached/Driver.php b/lib/phpfastcache/src/phpFastCache/Drivers/Memcached/Driver.php deleted file mode 100644 index 61cb639..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Memcached/Driver.php +++ /dev/null @@ -1,175 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Memcached; - -use Memcached as MemcachedSoftware; -use phpFastCache\Core\DriverAbstract; -use phpFastCache\Core\MemcacheDriverCollisionDetectorTrait; -use phpFastCache\Core\StandardPsr6StructureTrait; -use phpFastCache\Entities\driverStatistic; -use phpFastCache\Exceptions\phpFastCacheDriverCheckException; -use phpFastCache\Exceptions\phpFastCacheDriverException; -use Psr\Cache\CacheItemInterface; - -/** - * Class Driver - * @package phpFastCache\Drivers - */ -class Driver extends DriverAbstract -{ - use MemcacheDriverCollisionDetectorTrait; - - /** - * Driver constructor. - * @param array $config - * @throws phpFastCacheDriverException - */ - public function __construct(array $config = []) - { - self::checkCollision('Memcached'); - $this->setup($config); - - if (!$this->driverCheck()) { - throw new phpFastCacheDriverCheckException(sprintf(self::DRIVER_CHECK_FAILURE, $this->getDriverName())); - } else { - $this->instance = new MemcachedSoftware(); - $this->driverConnect(); - } - } - - /** - * @return bool - */ - public function driverCheck() - { - return class_exists('Memcached'); - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - * @throws \InvalidArgumentException - */ - protected function driverWrite(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - $ttl = $item->getExpirationDate()->getTimestamp() - time(); - - // Memcache will only allow a expiration timer less than 2592000 seconds, - // otherwise, it will assume you're giving it a UNIX timestamp. - if ($ttl > 2592000) { - $ttl = time() + $ttl; - } - - return $this->instance->set($item->getKey(), $this->driverPreWrap($item), $ttl); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - */ - protected function driverRead(CacheItemInterface $item) - { - $val = $this->instance->get($item->getKey()); - - if ($val === false) { - return null; - } else { - return $val; - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return bool - * @throws \InvalidArgumentException - */ - protected function driverDelete(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return $this->instance->delete($item->getKey()); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @return bool - */ - protected function driverClear() - { - return $this->instance->flush(); - } - - /** - * @return bool - */ - protected function driverConnect() - { - $servers = (!empty($this->config[ 'memcache' ]) && is_array($this->config[ 'memcache' ]) ? $this->config[ 'memcache' ] : []); - if (count($servers) < 1) { - $servers = [ - ['127.0.0.1', 11211], - ]; - } - - foreach ($servers as $server) { - try { - if (!$this->instance->addServer($server[ 0 ], $server[ 1 ])) { - $this->fallback = true; - } - if(!empty($server[ 'sasl_user' ]) && !empty($server[ 'sasl_password'])){ - $this->instance->setSaslAuthData($server[ 'sasl_user' ], $server[ 'sasl_password']); - } - } catch (\Exception $e) { - $this->fallback = true; - } - } - } - - /******************** - * - * PSR-6 Extended Methods - * - *******************/ - - /** - * @return driverStatistic - */ - public function getStats() - { - $stats = (array) $this->instance->getStats(); - $stats[ 'uptime' ] = (isset($stats[ 'uptime' ]) ? $stats[ 'uptime' ] : 0); - $stats[ 'version' ] = (isset($stats[ 'version' ]) ? $stats[ 'version' ] : 'UnknownVersion'); - $stats[ 'bytes' ] = (isset($stats[ 'bytes' ]) ? $stats[ 'version' ] : 0); - - $date = (new \DateTime())->setTimestamp(time() - $stats[ 'uptime' ]); - - return (new driverStatistic()) - ->setData(implode(', ', array_keys($this->itemInstances))) - ->setInfo(sprintf("The memcache daemon v%s is up since %s.\n For more information see RawData.", $stats[ 'version' ], $date->format(DATE_RFC2822))) - ->setRawData($stats) - ->setSize($stats[ 'bytes' ]); - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Memcached/Item.php b/lib/phpfastcache/src/phpFastCache/Drivers/Memcached/Item.php deleted file mode 100644 index b479454..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Memcached/Item.php +++ /dev/null @@ -1,63 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Memcached; - -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\Cache\ExtendedCacheItemPoolInterface; -use phpFastCache\Cache\ItemBaseTrait; -use phpFastCache\Drivers\Memcached\Driver as MemcachedDriver; - -/** - * Class Item - * @package phpFastCache\Drivers\Apc - */ -class Item implements ExtendedCacheItemInterface -{ - use ItemBaseTrait; - - /** - * Item constructor. - * @param \phpFastCache\Drivers\Memcache\Driver $driver - * @param $key - * @throws \InvalidArgumentException - */ - public function __construct(MemcachedDriver $driver, $key) - { - if (is_string($key)) { - $this->key = $key; - $this->driver = $driver; - $this->driver->setItem($this); - $this->expirationDate = new \DateTime(); - } else { - throw new \InvalidArgumentException(sprintf('$key must be a string, got type "%s" instead.', gettype($key))); - } - } - - /** - * @param ExtendedCacheItemPoolInterface $driver - * @throws \InvalidArgumentException - * @return static - */ - public function setDriver(ExtendedCacheItemPoolInterface $driver) - { - if ($driver instanceof MemcachedDriver) { - $this->driver = $driver; - - return $this; - } else { - throw new \InvalidArgumentException('Invalid driver instance'); - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Mongodb/Driver.php b/lib/phpfastcache/src/phpFastCache/Drivers/Mongodb/Driver.php deleted file mode 100644 index 3884003..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Mongodb/Driver.php +++ /dev/null @@ -1,223 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Mongodb; - -use LogicException; -use MongoBinData; -use MongoClient as MongodbClient; -use MongoCollection; -use MongoConnectionException; -use MongoCursorException; -use MongoDate; -use phpFastCache\Core\DriverAbstract; -use phpFastCache\Entities\driverStatistic; -use phpFastCache\Exceptions\phpFastCacheDriverCheckException; -use phpFastCache\Exceptions\phpFastCacheDriverException; -use Psr\Cache\CacheItemInterface; - -/** - * Class Driver - * @package phpFastCache\Drivers - */ -class Driver extends DriverAbstract -{ - /** - * @var MongodbClient - */ - public $instance; - - /** - * Driver constructor. - * @param array $config - * @throws phpFastCacheDriverException - */ - public function __construct(array $config = []) - { - $this->setup($config); - - if (!$this->driverCheck()) { - throw new phpFastCacheDriverCheckException(sprintf(self::DRIVER_CHECK_FAILURE, $this->getDriverName())); - } else { - $this->driverConnect(); - } - } - - /** - * @return bool - */ - public function driverCheck() - { - if(class_exists('MongoDB\Driver\Manager')){ - trigger_error('PhpFastCache currently only support the pecl Mongo extension.
- The Support for the MongoDB extension will be added coming soon.', E_USER_ERROR); - } - - return extension_loaded('Mongodb') && class_exists('MongoClient'); - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - * @throws \InvalidArgumentException - */ - protected function driverWrite(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - try { - $result = (array) $this->getCollection()->update( - ['_id' => $item->getKey()], - [ - '$set' => [ - self::DRIVER_TIME_WRAPPER_INDEX => ($item->getTtl() > 0 ? new MongoDate(time() + $item->getTtl()) : new MongoDate(time())), - self::DRIVER_DATA_WRAPPER_INDEX => new MongoBinData($this->encode($item->get()), MongoBinData::BYTE_ARRAY), - self::DRIVER_TAGS_WRAPPER_INDEX => new MongoBinData($this->encode($item->getTags()), MongoBinData::BYTE_ARRAY), - ], - ], - ['upsert' => true, 'multiple' => false] - ); - } catch (MongoCursorException $e) { - return false; - } - - return isset($result[ 'ok' ]) ? $result[ 'ok' ] == 1 : true; - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - */ - protected function driverRead(CacheItemInterface $item) - { - $document = $this->getCollection() - ->findOne(['_id' => $item->getKey()], - [self::DRIVER_DATA_WRAPPER_INDEX, self::DRIVER_TIME_WRAPPER_INDEX, self::DRIVER_TAGS_WRAPPER_INDEX /*'d', 'e'*/]); - - if ($document) { - return [ - self::DRIVER_DATA_WRAPPER_INDEX => $this->decode($document[ self::DRIVER_DATA_WRAPPER_INDEX ]->bin), - self::DRIVER_TIME_WRAPPER_INDEX => (new \DateTime())->setTimestamp($document[ self::DRIVER_TIME_WRAPPER_INDEX ]->sec), - self::DRIVER_TAGS_WRAPPER_INDEX => $this->decode($document[ self::DRIVER_TAGS_WRAPPER_INDEX ]->bin), - ]; - } else { - return null; - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return bool - * @throws \InvalidArgumentException - */ - protected function driverDelete(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - $deletionResult = (array) $this->getCollection()->remove(['_id' => $item->getKey()], ["w" => 1]); - - return (int) $deletionResult[ 'ok' ] === 1 && !$deletionResult[ 'err' ]; - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @return bool - */ - protected function driverClear() - { - return (bool) $this->getCollection()->drop()['ok']; - } - - /** - * @return bool - * @throws MongoConnectionException - * @throws LogicException - */ - protected function driverConnect() - { - if ($this->instance instanceof MongodbClient) { - throw new LogicException('Already connected to Mongodb server'); - } else { - $host = isset($this->config[ 'host' ]) ? $this->config[ 'host' ] : '127.0.0.1'; - $port = isset($this->config[ 'port' ]) ? $this->config[ 'port' ] : '27017'; - $timeout = isset($this->config[ 'timeout' ]) ? $this->config[ 'timeout' ] : 3; - $password = isset($this->config[ 'password' ]) ? $this->config[ 'password' ] : ''; - $username = isset($this->config[ 'username' ]) ? $this->config[ 'username' ] : ''; - - - /** - * @todo make an url builder - */ - $this->instance = $this->instance ?: (new MongodbClient('mongodb://' . - ($username ?: '') . - ($password ? ":{$password}" : '') . - ($username ? '@' : '') . "{$host}" . - ($port != '27017' ? ":{$port}" : ''), ['connectTimeoutMS' => $timeout * 1000]))->phpFastCache; - // $this->instance->Cache->createIndex([self::DRIVER_TIME_WRAPPER_INDEX => 1], ['expireAfterSeconds' => 0]); - } - } - - - /** - * @return \MongoCollection - */ - protected function getCollection() - { - return $this->instance->Cache; - } - - /******************** - * - * PSR-6 Extended Methods - * - *******************/ - - /** - * @return driverStatistic - */ - public function getStats() - { - $serverStatus = $this->getCollection()->db->command([ - 'serverStatus' => 1, - 'recordStats' => 0, - 'repl' => 0, - 'metrics' => 0, - ]); - - $collStats = $this->getCollection()->db->command([ - 'collStats' => 'Cache', - 'verbose' => true, - ]); - - $stats = (new driverStatistic()) - ->setInfo('MongoDB version ' . $serverStatus[ 'version' ] . ', Uptime (in days): ' . round($serverStatus[ 'uptime' ] / 86400, 1) . "\n For more information see RawData.") - ->setSize((int) @$collStats[ 'size' ]) - ->setData(implode(', ', array_keys($this->itemInstances))) - ->setRawData([ - 'serverStatus' => $serverStatus, - 'collStats' => $collStats, - ]); - - return $stats; - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Mongodb/Item.php b/lib/phpfastcache/src/phpFastCache/Drivers/Mongodb/Item.php deleted file mode 100644 index b5fdd48..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Mongodb/Item.php +++ /dev/null @@ -1,63 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Mongodb; - -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\Cache\ExtendedCacheItemPoolInterface; -use phpFastCache\Cache\ItemBaseTrait; -use phpFastCache\Drivers\Mongodb\Driver as MongodbDriver; - -/** - * Class Item - * @package phpFastCache\Drivers\Apc - */ -class Item implements ExtendedCacheItemInterface -{ - use ItemBaseTrait; - - /** - * Item constructor. - * @param \phpFastCache\Drivers\Mongodb\Driver $driver - * @param $key - * @throws \InvalidArgumentException - */ - public function __construct(MongodbDriver $driver, $key) - { - if (is_string($key)) { - $this->key = $key; - $this->driver = $driver; - $this->driver->setItem($this); - $this->expirationDate = new \DateTime(); - } else { - throw new \InvalidArgumentException(sprintf('$key must be a string, got type "%s" instead.', gettype($key))); - } - } - - /** - * @param ExtendedCacheItemPoolInterface $driver - * @throws \InvalidArgumentException - * @return static - */ - public function setDriver(ExtendedCacheItemPoolInterface $driver) - { - if ($driver instanceof MongodbDriver) { - $this->driver = $driver; - - return $this; - } else { - throw new \InvalidArgumentException('Invalid driver instance'); - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Predis/Driver.php b/lib/phpfastcache/src/phpFastCache/Drivers/Predis/Driver.php deleted file mode 100644 index 1ab5a0e..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Predis/Driver.php +++ /dev/null @@ -1,161 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Predis; - -use phpFastCache\Core\DriverAbstract; -use phpFastCache\Core\StandardPsr6StructureTrait; -use phpFastCache\Entities\driverStatistic; -use phpFastCache\Exceptions\phpFastCacheDriverCheckException; -use phpFastCache\Exceptions\phpFastCacheDriverException; -use Predis\Client as PredisClient; -use Psr\Cache\CacheItemInterface; - -/** - * Class Driver - * @package phpFastCache\Drivers - */ -class Driver extends DriverAbstract -{ - /** - * @var PredisClient Instance of driver service - */ - public $instance; - - /** - * Driver constructor. - * @param array $config - * @throws phpFastCacheDriverException - */ - public function __construct(array $config = []) - { - $this->setup($config); - - if (!$this->driverCheck()) { - throw new phpFastCacheDriverCheckException(sprintf(self::DRIVER_CHECK_FAILURE, $this->getDriverName())); - } else { - $this->driverConnect(); - } - } - - /** - * @return bool - */ - public function driverCheck() - { - if (extension_loaded('Redis')) { - trigger_error('The native Redis extension is installed, you should use Redis instead of Predis to increase performances', E_USER_NOTICE); - } - - return class_exists('Predis\Client'); - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - * @throws \InvalidArgumentException - */ - protected function driverWrite(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - $ttl = $item->getExpirationDate()->getTimestamp() - time(); - - return $this->instance->setex($item->getKey(), $ttl, $this->encode($this->driverPreWrap($item))); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - */ - protected function driverRead(CacheItemInterface $item) - { - $val = $this->instance->get($item->getKey()); - if ($val == false) { - return null; - } else { - return $this->decode($val); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return bool - * @throws \InvalidArgumentException - */ - protected function driverDelete(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return $this->instance->del($item->getKey()); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @return bool - */ - protected function driverClear() - { - return $this->instance->flushDB(); - } - - /** - * @return bool - */ - protected function driverConnect() - { - $config = isset($this->config[ 'predis' ]) ? $this->config[ 'predis' ] : []; - - $this->instance = new PredisClient(array_merge([ - 'host' => '127.0.0.1', - 'port' => 6379, - 'password' => null, - 'database' => null, - ], $config)); - - return true; - } - - /******************** - * - * PSR-6 Extended Methods - * - *******************/ - - /** - * @return driverStatistic - */ - public function getStats() - { - $info = $this->instance->info(); - $size = (isset($info['Memory']['used_memory']) ? $info['Memory']['used_memory'] : 0); - $version = (isset($info['Server']['redis_version']) ? $info['Server']['redis_version'] : 0); - $date = (isset($info['Server'][ 'uptime_in_seconds' ]) ? (new \DateTime())->setTimestamp(time() - $info['Server'][ 'uptime_in_seconds' ]) : 'unknown date'); - - return (new driverStatistic()) - ->setData(implode(', ', array_keys($this->itemInstances))) - ->setRawData($this->instance->info()) - ->setSize($size) - ->setInfo(sprintf("The Redis daemon v%s is up since %s.\n For more information see RawData. \n Driver size includes the memory allocation size.", $version, $date->format(DATE_RFC2822))); - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Predis/Item.php b/lib/phpfastcache/src/phpFastCache/Drivers/Predis/Item.php deleted file mode 100644 index 2c20070..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Predis/Item.php +++ /dev/null @@ -1,63 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Predis; - -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\Cache\ExtendedCacheItemPoolInterface; -use phpFastCache\Cache\ItemBaseTrait; -use phpFastCache\Drivers\Predis\Driver as PredisDriver; - -/** - * Class Item - * @package phpFastCache\Drivers\Apc - */ -class Item implements ExtendedCacheItemInterface -{ - use ItemBaseTrait; - - /** - * Item constructor. - * @param \phpFastCache\Drivers\Apc\Driver $driver - * @param $key - * @throws \InvalidArgumentException - */ - public function __construct(PredisDriver $driver, $key) - { - if (is_string($key)) { - $this->key = $key; - $this->driver = $driver; - $this->driver->setItem($this); - $this->expirationDate = new \DateTime(); - } else { - throw new \InvalidArgumentException(sprintf('$key must be a string, got type "%s" instead.', gettype($key))); - } - } - - /** - * @param ExtendedCacheItemPoolInterface $driver - * @throws \InvalidArgumentException - * @return static - */ - public function setDriver(ExtendedCacheItemPoolInterface $driver) - { - if ($driver instanceof PredisDriver) { - $this->driver = $driver; - - return $this; - } else { - throw new \InvalidArgumentException('Invalid driver instance'); - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Redis/Driver.php b/lib/phpfastcache/src/phpFastCache/Drivers/Redis/Driver.php deleted file mode 100644 index adeede2..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Redis/Driver.php +++ /dev/null @@ -1,165 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Redis; - -use phpFastCache\Core\DriverAbstract; -use phpFastCache\Core\StandardPsr6StructureTrait; -use phpFastCache\Entities\driverStatistic; -use phpFastCache\Exceptions\phpFastCacheDriverCheckException; -use phpFastCache\Exceptions\phpFastCacheDriverException; -use Psr\Cache\CacheItemInterface; -use Redis as RedisClient; - -/** - * Class Driver - * @package phpFastCache\Drivers - */ -class Driver extends DriverAbstract -{ - /** - * Driver constructor. - * @param array $config - * @throws phpFastCacheDriverException - */ - public function __construct(array $config = []) - { - $this->setup($config); - - if (!$this->driverCheck()) { - throw new phpFastCacheDriverCheckException(sprintf(self::DRIVER_CHECK_FAILURE, $this->getDriverName())); - } else { - $this->driverConnect(); - } - } - - /** - * @return bool - */ - public function driverCheck() - { - return extension_loaded('Redis'); - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - * @throws \InvalidArgumentException - */ - protected function driverWrite(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - $ttl = $item->getExpirationDate()->getTimestamp() - time(); - - return $this->instance->setex($item->getKey(), $ttl, $this->encode($this->driverPreWrap($item))); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - */ - protected function driverRead(CacheItemInterface $item) - { - $val = $this->instance->get($item->getKey()); - if ($val == false) { - return null; - } else { - return $this->decode($val); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return bool - * @throws \InvalidArgumentException - */ - protected function driverDelete(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return $this->instance->del($item->getKey()); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @return bool - */ - protected function driverClear() - { - return $this->instance->flushDB(); - } - - /** - * @return bool - */ - protected function driverConnect() - { - if ($this->instance instanceof RedisClient) { - throw new \LogicException('Already connected to Redis server'); - } else { - $this->instance = $this->instance ?: new RedisClient(); - - $host = isset($this->config[ 'host' ]) ? $this->config[ 'host' ] : '127.0.0.1'; - $port = isset($this->config[ 'port' ]) ? (int) $this->config[ 'port' ] : '6379'; - $password = isset($this->config[ 'password' ]) ? $this->config[ 'password' ] : ''; - $database = isset($this->config[ 'database' ]) ? $this->config[ 'database' ] : ''; - $timeout = isset($this->config[ 'timeout' ]) ? $this->config[ 'timeout' ] : ''; - - if (!$this->instance->connect($host, (int) $port, (int) $timeout)) { - return false; - } else { - if ($password && !$this->instance->auth($password)) { - return false; - } - if ($database) { - $this->instance->select((int) $database); - } - - return true; - } - } - } - - /******************** - * - * PSR-6 Extended Methods - * - *******************/ - - /** - * @return driverStatistic - */ - public function getStats() - { - // used_memory - $info = $this->instance->info(); - $date = (new \DateTime())->setTimestamp(time() - $info[ 'uptime_in_seconds' ]); - - return (new driverStatistic()) - ->setData(implode(', ', array_keys($this->itemInstances))) - ->setRawData($info) - ->setSize($info[ 'used_memory' ]) - ->setInfo(sprintf("The Redis daemon v%s is up since %s.\n For more information see RawData. \n Driver size includes the memory allocation size.", $info[ 'redis_version' ], $date->format(DATE_RFC2822))); - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Redis/Item.php b/lib/phpfastcache/src/phpFastCache/Drivers/Redis/Item.php deleted file mode 100644 index e20355c..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Redis/Item.php +++ /dev/null @@ -1,63 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Redis; - -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\Cache\ExtendedCacheItemPoolInterface; -use phpFastCache\Cache\ItemBaseTrait; -use phpFastCache\Drivers\Redis\Driver as RedisDriver; - -/** - * Class Item - * @package phpFastCache\Drivers\Redis - */ -class Item implements ExtendedCacheItemInterface -{ - use ItemBaseTrait; - - /** - * Item constructor. - * @param \phpFastCache\Drivers\Redis\Driver $driver - * @param $key - * @throws \InvalidArgumentException - */ - public function __construct(RedisDriver $driver, $key) - { - if (is_string($key)) { - $this->key = $key; - $this->driver = $driver; - $this->driver->setItem($this); - $this->expirationDate = new \DateTime(); - } else { - throw new \InvalidArgumentException(sprintf('$key must be a string, got type "%s" instead.', gettype($key))); - } - } - - /** - * @param ExtendedCacheItemPoolInterface $driver - * @throws \InvalidArgumentException - * @return static - */ - public function setDriver(ExtendedCacheItemPoolInterface $driver) - { - if ($driver instanceof RedisDriver) { - $this->driver = $driver; - - return $this; - } else { - throw new \InvalidArgumentException('Invalid driver instance'); - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Sqlite/Driver.php b/lib/phpfastcache/src/phpFastCache/Drivers/Sqlite/Driver.php deleted file mode 100644 index 520d637..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Sqlite/Driver.php +++ /dev/null @@ -1,431 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Sqlite; - -use PDO; -use PDOException; -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\Core\DriverAbstract; -use phpFastCache\Core\PathSeekerTrait; -use phpFastCache\Core\StandardPsr6StructureTrait; -use phpFastCache\Entities\driverStatistic; -use phpFastCache\Exceptions\phpFastCacheDriverCheckException; -use phpFastCache\Exceptions\phpFastCacheDriverException; -use phpFastCache\Util\Directory; -use Psr\Cache\CacheItemInterface; - -/** - * Class Driver - * @package phpFastCache\Drivers - */ -class Driver extends DriverAbstract -{ - use PathSeekerTrait; - - /** - * - */ - const FILE_DIR = 'sqlite'; - /** - * - */ - const INDEXING_FILE = 'indexing'; - - /** - * @var int - */ - protected $maxSize = 10; // 10 mb - - /** - * @var int - */ - protected $currentDB = 1; - - /** - * @var string - */ - protected $SqliteDir = ''; - - /** - * @var \PDO - */ - protected $indexing; - - /** - * Driver constructor. - * @param array $config - * @throws phpFastCacheDriverException - */ - public function __construct(array $config = []) - { - $this->setup($config); - - if (!$this->driverCheck()) { - throw new phpFastCacheDriverCheckException(sprintf(self::DRIVER_CHECK_FAILURE, $this->getDriverName())); - } else { - if (!file_exists($this->getSqliteDir()) && !@mkdir($this->getSqliteDir(), $this->setChmodAuto(), true)) { - throw new phpFastCacheDriverException(sprintf('Sqlite cannot write in "%s", aborting...', $this->getPath())); - } else { - $this->driverConnect(); - } - } - } - - /** - * @return string - * @throws \phpFastCache\Exceptions\phpFastCacheCoreException - */ - public function getSqliteDir() - { - return $this->SqliteDir ?: $this->getPath() . DIRECTORY_SEPARATOR . self::FILE_DIR; - } - - /** - * @return bool - */ - public function driverCheck() - { - return extension_loaded('pdo_sqlite') && (is_writable($this->getSqliteDir()) || @mkdir($this->getSqliteDir(), $this->setChmodAuto(), true)); - } - - /** - * INIT NEW DB - * @param \PDO $db - */ - public function initDB(\PDO $db) - { - $db->exec('drop table if exists "caching"'); - $db->exec('CREATE TABLE "caching" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "keyword" VARCHAR UNIQUE, "object" BLOB, "exp" INTEGER)'); - $db->exec('CREATE UNIQUE INDEX "cleanup" ON "caching" ("keyword","exp")'); - $db->exec('CREATE INDEX "exp" ON "caching" ("exp")'); - $db->exec('CREATE UNIQUE INDEX "keyword" ON "caching" ("keyword")'); - } - - /** - * INIT Indexing DB - * @param \PDO $db - */ - public function initIndexing(\PDO $db) - { - - // delete everything before reset indexing - $dir = opendir($this->SqliteDir); - while ($file = readdir($dir)) { - if ($file != '.' && $file != '..' && $file != 'indexing' && $file != 'dbfastcache') { - unlink($this->SqliteDir . '/' . $file); - } - } - - $db->exec('drop table if exists "balancing"'); - $db->exec('CREATE TABLE "balancing" ("keyword" VARCHAR PRIMARY KEY NOT NULL UNIQUE, "db" INTEGER)'); - $db->exec('CREATE INDEX "db" ON "balancing" ("db")'); - $db->exec('CREATE UNIQUE INDEX "lookup" ON "balancing" ("keyword")'); - - } - - /** - * INIT Instant DB - * Return Database of Keyword - * @param $keyword - * @return int - */ - public function indexing($keyword) - { - if ($this->indexing == null) { - $createTable = false; - if (!file_exists($this->SqliteDir . '/indexing')) { - $createTable = true; - } - - $PDO = new PDO("sqlite:" . $this->SqliteDir . '/' . self::INDEXING_FILE); - $PDO->setAttribute(PDO::ATTR_ERRMODE, - PDO::ERRMODE_EXCEPTION); - - if ($createTable == true) { - $this->initIndexing($PDO); - } - $this->indexing = $PDO; - unset($PDO); - - $stm = $this->indexing->prepare("SELECT MAX(`db`) as `db` FROM `balancing`"); - $stm->execute(); - $row = $stm->fetch(PDO::FETCH_ASSOC); - if (!isset($row[ 'db' ])) { - $db = 1; - } elseif ($row[ 'db' ] <= 1) { - $db = 1; - } else { - $db = $row[ 'db' ]; - } - - // check file size - - $size = file_exists($this->SqliteDir . '/db' . $db) ? filesize($this->SqliteDir . '/db' . $db) : 1; - $size = round($size / 1024 / 1024, 1); - - - if ($size > $this->maxSize) { - $db++; - } - $this->currentDB = $db; - - } - - // look for keyword - $stm = $this->indexing->prepare("SELECT * FROM `balancing` WHERE `keyword`=:keyword LIMIT 1"); - $stm->execute([ - ':keyword' => $keyword, - ]); - $row = $stm->fetch(PDO::FETCH_ASSOC); - if (isset($row[ 'db' ]) && $row[ 'db' ] != '') { - $db = $row[ 'db' ]; - } else { - /* - * Insert new to Indexing - */ - $db = $this->currentDB; - $stm = $this->indexing->prepare("INSERT INTO `balancing` (`keyword`,`db`) VALUES(:keyword, :db)"); - $stm->execute([ - ':keyword' => $keyword, - ':db' => $db, - ]); - } - - return $db; - } - - /** - * @param $keyword - * @param bool $reset - * @return PDO - */ - public function getDb($keyword, $reset = false) - { - /** - * Default is fastcache - */ - $instant = $this->indexing($keyword); - - /** - * init instant - */ - if (!isset($this->instance[ $instant ])) { - // check DB Files ready or not - $createTable = false; - if (!file_exists($this->SqliteDir . '/db' . $instant) || $reset == true) { - $createTable = true; - } - $PDO = new PDO('sqlite:' . $this->SqliteDir . '/db' . $instant); - $PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - - if ($createTable == true) { - $this->initDB($PDO); - } - - $this->instance[ $instant ] = $PDO; - unset($PDO); - - } - - return $this->instance[ $instant ]; - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - * @throws \InvalidArgumentException - */ - protected function driverWrite(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - $skipExisting = isset($this->config[ 'skipExisting' ]) ? $this->config[ 'skipExisting' ] : false; - $toWrite = true; - - // check in cache first - $in_cache = $this->driverRead($item); - - if ($skipExisting == true) { - if ($in_cache == null) { - $toWrite = true; - } else { - $toWrite = false; - } - } - - if ($toWrite == true) { - try { - $stm = $this->getDb($item->getKey()) - ->prepare("INSERT OR REPLACE INTO `caching` (`keyword`,`object`,`exp`) values(:keyword,:object,:exp)"); - $stm->execute([ - ':keyword' => $item->getKey(), - ':object' => $this->encode($this->driverPreWrap($item)), - ':exp' => time() + $item->getTtl(), - ]); - - return true; - } catch (\PDOException $e) { - - try { - $stm = $this->getDb($item->getKey(), true) - ->prepare("INSERT OR REPLACE INTO `caching` (`keyword`,`object`,`exp`) values(:keyword,:object,:exp)"); - $stm->execute([ - ':keyword' => $item->getKey(), - ':object' => $this->encode($this->driverPreWrap($item)), - ':exp' => time() + $item->getTtl(), - ]); - } catch (PDOException $e) { - return false; - } - } - } - - return false; - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - */ - protected function driverRead(CacheItemInterface $item) - { - try { - $stm = $this->getDb($item->getKey()) - ->prepare("SELECT * FROM `caching` WHERE `keyword`=:keyword LIMIT 1"); - $stm->execute([ - ':keyword' => $item->getKey(), - ]); - $row = $stm->fetch(PDO::FETCH_ASSOC); - - } catch (PDOException $e) { - try { - $stm = $this->getDb($item->getKey(), true) - ->prepare("SELECT * FROM `caching` WHERE `keyword`=:keyword LIMIT 1"); - $stm->execute([ - ':keyword' => $item->getKey(), - ]); - $row = $stm->fetch(PDO::FETCH_ASSOC); - } catch (PDOException $e) { - return null; - } - } - - if (isset($row[ 'object' ])) { - return $this->decode($row[ 'object' ]); - } - - return null; - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return bool - * @throws \InvalidArgumentException - */ - protected function driverDelete(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - try { - $stm = $this->getDb($item->getKey()) - ->prepare("DELETE FROM `caching` WHERE (`exp` <= :U) OR (`keyword`=:keyword) "); - - return $stm->execute([ - ':keyword' => $item->getKey(), - ':U' => time(), - ]); - } catch (PDOException $e) { - return false; - } - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @return bool - */ - protected function driverClear() - { - $this->instance = []; - $this->indexing = null; - - // delete everything before reset indexing - $dir = opendir($this->getSqliteDir()); - while ($file = readdir($dir)) { - if ($file != '.' && $file != '..') { - unlink($this->getSqliteDir() . '/' . $file); - } - } - - return true; - } - - /** - * @return bool - */ - protected function driverConnect() - { - if (!file_exists($this->getPath() . '/' . self::FILE_DIR)) { - if (!mkdir($this->getPath() . '/' . self::FILE_DIR, $this->setChmodAuto(), true) - ) { - $this->fallback = true; - } - } - $this->SqliteDir = $this->getPath() . '/' . self::FILE_DIR; - } - - /******************** - * - * PSR-6 Extended Methods - * - *******************/ - - /** - * @return driverStatistic - * @throws PDOException - */ - public function getStats() - { - $stat = new driverStatistic(); - $path = $this->getFilePath(false); - - if (!is_dir($path)) { - throw new phpFastCacheDriverException("Can't read PATH:" . $path, 94); - } - - $stat->setData(implode(', ', array_keys($this->itemInstances))) - ->setRawData([]) - ->setSize(Directory::dirSize($path)) - ->setInfo('Number of files used to build the cache: ' . Directory::getFileCount($path)); - - return $stat; - } - - /** - * @return array - */ - public function __sleep() - { - return array_diff(array_keys(get_object_vars($this)), ['indexing', 'instance']); - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Sqlite/Item.php b/lib/phpfastcache/src/phpFastCache/Drivers/Sqlite/Item.php deleted file mode 100644 index bc4a31b..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Sqlite/Item.php +++ /dev/null @@ -1,63 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Sqlite; - -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\Cache\ExtendedCacheItemPoolInterface; -use phpFastCache\Cache\ItemBaseTrait; -use phpFastCache\Drivers\Sqlite\Driver as SqliteDriver; - -/** - * Class Item - * @package phpFastCache\Drivers\Sqlite - */ -class Item implements ExtendedCacheItemInterface -{ - use ItemBaseTrait; - - /** - * Item constructor. - * @param \phpFastCache\Drivers\Sqlite\Driver $driver - * @param $key - * @throws \InvalidArgumentException - */ - public function __construct(SqliteDriver $driver, $key) - { - if (is_string($key)) { - $this->key = $key; - $this->driver = $driver; - $this->driver->setItem($this); - $this->expirationDate = new \DateTime(); - } else { - throw new \InvalidArgumentException(sprintf('$key must be a string, got type "%s" instead.', gettype($key))); - } - } - - /** - * @param ExtendedCacheItemPoolInterface $driver - * @throws \InvalidArgumentException - * @return static - */ - public function setDriver(ExtendedCacheItemPoolInterface $driver) - { - if ($driver instanceof SqliteDriver) { - $this->driver = $driver; - - return $this; - } else { - throw new \InvalidArgumentException('Invalid driver instance'); - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Ssdb/Driver.php b/lib/phpfastcache/src/phpFastCache/Drivers/Ssdb/Driver.php deleted file mode 100644 index 5651fad..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Ssdb/Driver.php +++ /dev/null @@ -1,181 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Ssdb; - -use phpFastCache\Core\DriverAbstract; -use phpFastCache\Core\StandardPsr6StructureTrait; -use phpFastCache\Entities\driverStatistic; -use phpFastCache\Exceptions\phpFastCacheDriverCheckException; -use phpFastCache\Exceptions\phpFastCacheDriverException; -use phpssdb\Core\SimpleSSDB; -use phpssdb\Core\SSDB; -use phpssdb\Core\SSDBException; -use Psr\Cache\CacheItemInterface; - -/** - * Class Driver - * @package phpFastCache\Drivers - */ -class Driver extends DriverAbstract -{ - /** - * @var SimpleSSDB - */ - public $instance; - - /** - * Driver constructor. - * @param array $config - * @throws phpFastCacheDriverException - */ - public function __construct(array $config = []) - { - $this->setup($config); - - if (!$this->driverCheck()) { - throw new phpFastCacheDriverCheckException(sprintf(self::DRIVER_CHECK_FAILURE, $this->getDriverName())); - } elseif (!$this->driverConnect()) { - throw new phpFastCacheDriverException('Ssdb is not connected, cannot continue.'); - } - } - - /** - * @return bool - */ - public function driverCheck() - { - static $driverCheck; - if ($driverCheck === null) { - return ($driverCheck = class_exists('phpssdb\Core\SSDB')); - } - - return $driverCheck; - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - * @throws \InvalidArgumentException - */ - protected function driverWrite(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return $this->instance->setx($item->getEncodedKey(), $this->encode($this->driverPreWrap($item)), $item->getTtl()); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - */ - protected function driverRead(CacheItemInterface $item) - { - $val = $this->instance->get($item->getEncodedKey()); - if ($val == false) { - return null; - } else { - return $this->decode($val); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return bool - * @throws \InvalidArgumentException - */ - protected function driverDelete(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return $this->instance->del($item->getEncodedKey()); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @return bool - */ - protected function driverClear() - { - return $this->instance->flushdb('kv'); - } - - /** - * @return bool - * @throws phpFastCacheDriverException - */ - protected function driverConnect() - { - try { - $server = isset($this->config[ 'ssdb' ]) ? $this->config[ 'ssdb' ] : [ - 'host' => "127.0.0.1", - 'port' => 8888, - 'password' => '', - 'timeout' => 2000, - ]; - - $host = $server[ 'host' ]; - $port = isset($server[ 'port' ]) ? (int) $server[ 'port' ] : 8888; - $password = isset($server[ 'password' ]) ? $server[ 'password' ] : ''; - $timeout = !empty($server[ 'timeout' ]) ? (int) $server[ 'timeout' ] : 2000; - $this->instance = new SimpleSSDB($host, $port, $timeout); - if (!empty($password)) { - $this->instance->auth($password); - } - - if (!$this->instance) { - return false; - } else { - return true; - } - } catch (SSDBException $e) { - throw new phpFastCacheDriverCheckException('Ssdb failed to connect with error: ' . $e->getMessage(), 0, $e); - } - } - - /******************** - * - * PSR-6 Extended Methods - * - *******************/ - - /** - * @return driverStatistic - */ - public function getStats() - { - $stat = new driverStatistic(); - $info = $this->instance->info(); - - /** - * Data returned by Ssdb are very poorly formatted - * using hardcoded offset of pair key-value :-( - */ - $stat->setInfo(sprintf("Ssdb-server v%s with a total of %s call(s).\n For more information see RawData.", $info[ 2 ], $info[ 6 ])) - ->setRawData($info) - ->setData(implode(', ', array_keys($this->itemInstances))) - ->setSize($this->instance->dbsize()); - - return $stat; - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Ssdb/Item.php b/lib/phpfastcache/src/phpFastCache/Drivers/Ssdb/Item.php deleted file mode 100644 index e665061..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Ssdb/Item.php +++ /dev/null @@ -1,63 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Ssdb; - -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\Cache\ExtendedCacheItemPoolInterface; -use phpFastCache\Cache\ItemBaseTrait; -use phpFastCache\Drivers\Ssdb\Driver as SsdbDriver; - -/** - * Class Item - * @package phpFastCache\Drivers\Ssdb - */ -class Item implements ExtendedCacheItemInterface -{ - use ItemBaseTrait; - - /** - * Item constructor. - * @param \phpFastCache\Drivers\Ssdb\Driver $driver - * @param $key - * @throws \InvalidArgumentException - */ - public function __construct(SsdbDriver $driver, $key) - { - if (is_string($key)) { - $this->key = $key; - $this->driver = $driver; - $this->driver->setItem($this); - $this->expirationDate = new \DateTime(); - } else { - throw new \InvalidArgumentException(sprintf('$key must be a string, got type "%s" instead.', gettype($key))); - } - } - - /** - * @param ExtendedCacheItemPoolInterface $driver - * @throws \InvalidArgumentException - * @return static - */ - public function setDriver(ExtendedCacheItemPoolInterface $driver) - { - if ($driver instanceof SsdbDriver) { - $this->driver = $driver; - - return $this; - } else { - throw new \InvalidArgumentException('Invalid driver instance'); - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Wincache/Driver.php b/lib/phpfastcache/src/phpFastCache/Drivers/Wincache/Driver.php deleted file mode 100644 index 16b05bc..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Wincache/Driver.php +++ /dev/null @@ -1,138 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Wincache; - -use phpFastCache\Core\DriverAbstract; -use phpFastCache\Core\StandardPsr6StructureTrait; -use phpFastCache\Entities\driverStatistic; -use phpFastCache\Exceptions\phpFastCacheDriverCheckException; -use phpFastCache\Exceptions\phpFastCacheDriverException; -use Psr\Cache\CacheItemInterface; - -/** - * Class Driver - * @package phpFastCache\Drivers - */ -class Driver extends DriverAbstract -{ - /** - * Driver constructor. - * @param array $config - * @throws phpFastCacheDriverException - */ - public function __construct(array $config = []) - { - $this->setup($config); - - if (!$this->driverCheck()) { - throw new phpFastCacheDriverCheckException(sprintf(self::DRIVER_CHECK_FAILURE, $this->getDriverName())); - } - } - - /** - * @return bool - */ - public function driverCheck() - { - return extension_loaded('wincache') && function_exists('wincache_ucache_set'); - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - * @throws \InvalidArgumentException - */ - protected function driverWrite(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return wincache_ucache_set($item->getKey(), $this->driverPreWrap($item), $item->getTtl()); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - */ - protected function driverRead(CacheItemInterface $item) - { - $val = wincache_ucache_get($item->getKey(), $suc); - - if ($suc === false) { - return null; - } else { - return $val; - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return bool - * @throws \InvalidArgumentException - */ - protected function driverDelete(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return wincache_ucache_delete($item->getKey()); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @return bool - */ - protected function driverClear() - { - return wincache_ucache_clear(); - } - - /** - * @return bool - */ - protected function driverConnect() - { - return true; - } - - /******************** - * - * PSR-6 Extended Methods - * - *******************/ - - /** - * @return driverStatistic - */ - public function getStats() - { - $memInfo = wincache_ucache_meminfo(); - $info = wincache_ucache_info(); - $date = (new \DateTime())->setTimestamp(time() - $info[ 'total_cache_uptime' ]); - - return (new driverStatistic()) - ->setInfo(sprintf("The Wincache daemon is up since %s.\n For more information see RawData.", $date->format(DATE_RFC2822))) - ->setSize($memInfo[ 'memory_free' ] - $memInfo[ 'memory_total' ]) - ->setData(implode(', ', array_keys($this->itemInstances))) - ->setRawData($memInfo); - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Wincache/Item.php b/lib/phpfastcache/src/phpFastCache/Drivers/Wincache/Item.php deleted file mode 100644 index eb51d62..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Wincache/Item.php +++ /dev/null @@ -1,63 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Wincache; - -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\Cache\ExtendedCacheItemPoolInterface; -use phpFastCache\Cache\ItemBaseTrait; -use phpFastCache\Drivers\Wincache\Driver as WincacheDriver; - -/** - * Class Item - * @package phpFastCache\Drivers\Wincache - */ -class Item implements ExtendedCacheItemInterface -{ - use ItemBaseTrait; - - /** - * Item constructor. - * @param \phpFastCache\Drivers\Wincache\Driver $driver - * @param $key - * @throws \InvalidArgumentException - */ - public function __construct(WincacheDriver $driver, $key) - { - if (is_string($key)) { - $this->key = $key; - $this->driver = $driver; - $this->driver->setItem($this); - $this->expirationDate = new \DateTime(); - } else { - throw new \InvalidArgumentException(sprintf('$key must be a string, got type "%s" instead.', gettype($key))); - } - } - - /** - * @param ExtendedCacheItemPoolInterface $driver - * @throws \InvalidArgumentException - * @return static - */ - public function setDriver(ExtendedCacheItemPoolInterface $driver) - { - if ($driver instanceof WincacheDriver) { - $this->driver = $driver; - - return $this; - } else { - throw new \InvalidArgumentException('Invalid driver instance'); - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Xcache/Driver.php b/lib/phpfastcache/src/phpFastCache/Drivers/Xcache/Driver.php deleted file mode 100644 index fc0d134..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Xcache/Driver.php +++ /dev/null @@ -1,148 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Xcache; - -use phpFastCache\Core\DriverAbstract; -use phpFastCache\Core\StandardPsr6StructureTrait; -use phpFastCache\Entities\driverStatistic; -use phpFastCache\Exceptions\phpFastCacheDriverCheckException; -use phpFastCache\Exceptions\phpFastCacheDriverException; -use Psr\Cache\CacheItemInterface; - -/** - * Class Driver - * @package phpFastCache\Drivers - */ -class Driver extends DriverAbstract -{ - /** - * Driver constructor. - * @param array $config - * @throws phpFastCacheDriverException - */ - public function __construct(array $config = []) - { - $this->setup($config); - - if (!$this->driverCheck()) { - throw new phpFastCacheDriverCheckException(sprintf(self::DRIVER_CHECK_FAILURE, $this->getDriverName())); - } - } - - /** - * @return bool - */ - public function driverCheck() - { - return extension_loaded('xcache') && function_exists('xcache_get'); - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - * @throws \InvalidArgumentException - */ - protected function driverWrite(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return xcache_set($item->getKey(), $this->encode($this->driverPreWrap($item)), $item->getTtl()); - - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - */ - protected function driverRead(CacheItemInterface $item) - { - $data = $this->decode(xcache_get($item->getKey())); - if ($data === false || $data === '') { - return null; - } - - return $data; - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return bool - * @throws \InvalidArgumentException - */ - protected function driverDelete(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return xcache_unset($item->getKey()); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @return bool - */ - protected function driverClear() - { - $cnt = xcache_count(XC_TYPE_VAR); - for ($i = 0; $i < $cnt; $i++) { - xcache_clear_cache(XC_TYPE_VAR, $i); - } - - return true; - } - - /** - * @return bool - */ - protected function driverConnect() - { - return true; - } - - /******************** - * - * PSR-6 Extended Methods - * - *******************/ - - /** - * @return driverStatistic - */ - public function getStats() - { - if (!ini_get('xcache.admin.enable_auth')) { - $info = xcache_info(XC_TYPE_VAR, 0); - - return (new driverStatistic()) - ->setSize(abs($info[ 'size' ] - $info[ 'avail' ])) - ->setData(implode(', ', array_keys($this->itemInstances))) - ->setInfo(sprintf("Xcache v%s with following modules loaded:\n %s", XCACHE_VERSION, str_replace(' ', ', ', XCACHE_MODULES))) - ->setRawData($info); - } else { - throw new \RuntimeException("PhpFastCache is not able to read Xcache configuration. Please put this to your php.ini:\n - [xcache.admin] - xcache.admin.enable_auth = Off\n - Then reboot your webserver and make sure that the native Xcache ini configuration file does not override your setting."); - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Xcache/Item.php b/lib/phpfastcache/src/phpFastCache/Drivers/Xcache/Item.php deleted file mode 100644 index 7749fb8..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Xcache/Item.php +++ /dev/null @@ -1,63 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Drivers\Xcache; - -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\Cache\ExtendedCacheItemPoolInterface; -use phpFastCache\Cache\ItemBaseTrait; -use phpFastCache\Drivers\Xcache\Driver as XcacheDriver; - -/** - * Class Item - * @package phpFastCache\Drivers\Apc - */ -class Item implements ExtendedCacheItemInterface -{ - use ItemBaseTrait; - - /** - * Item constructor. - * @param \phpFastCache\Drivers\Xcache\Driver $driver - * @param $key - * @throws \InvalidArgumentException - */ - public function __construct(XcacheDriver $driver, $key) - { - if (is_string($key)) { - $this->key = $key; - $this->driver = $driver; - $this->driver->setItem($this); - $this->expirationDate = new \DateTime(); - } else { - throw new \InvalidArgumentException(sprintf('$key must be a string, got type "%s" instead.', gettype($key))); - } - } - - /** - * @param ExtendedCacheItemPoolInterface $driver - * @throws \InvalidArgumentException - * @return static - */ - public function setDriver(ExtendedCacheItemPoolInterface $driver) - { - if ($driver instanceof XcacheDriver) { - $this->driver = $driver; - - return $this; - } else { - throw new \InvalidArgumentException('Invalid driver instance'); - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Zenddisk/Driver.php b/lib/phpfastcache/src/phpFastCache/Drivers/Zenddisk/Driver.php deleted file mode 100644 index 69b8210..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Zenddisk/Driver.php +++ /dev/null @@ -1,141 +0,0 @@ - - * - */ - -namespace phpFastCache\Drivers\Zenddisk; - -use phpFastCache\Core\DriverAbstract; -use phpFastCache\Core\StandardPsr6StructureTrait; -use phpFastCache\Entities\driverStatistic; -use phpFastCache\Exceptions\phpFastCacheDriverCheckException; -use phpFastCache\Exceptions\phpFastCacheDriverException; -use Psr\Cache\CacheItemInterface; - -/** - * Class Driver (zend disk cache) - * Requires Zend Data Cache Functions from ZendServer - * @package phpFastCache\Drivers - */ -class Driver extends DriverAbstract -{ - /** - * Driver constructor. - * @param array $config - * @throws phpFastCacheDriverException - */ - public function __construct(array $config = []) - { - $this->setup($config); - - if (!$this->driverCheck()) { - throw new phpFastCacheDriverCheckException(sprintf(self::DRIVER_CHECK_FAILURE, $this->getDriverName())); - } - } - - /** - * @return bool - */ - public function driverCheck() - { - if (extension_loaded('Zend Data Cache') && function_exists('zend_disk_cache_store')) { - return true; - } else { - return false; - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - * @throws \InvalidArgumentException - */ - protected function driverWrite(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - $ttl = $item->getExpirationDate()->getTimestamp() - time(); - - return zend_disk_cache_store($item->getKey(), $this->driverPreWrap($item), ($ttl > 0 ? $ttl : 0)); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - */ - protected function driverRead(CacheItemInterface $item) - { - $data = zend_disk_cache_fetch($item->getKey()); - if ($data === false) { - return null; - } - - return $data; - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return bool - * @throws \InvalidArgumentException - */ - protected function driverDelete(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return zend_disk_cache_delete($item->getKey()); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @return bool - */ - protected function driverClear() - { - return @zend_disk_cache_clear(); - } - - /** - * @return bool - */ - protected function driverConnect() - { - return true; - } - - /******************** - * - * PSR-6 Extended Methods - * - *******************/ - - /** - * @return driverStatistic - */ - public function getStats() - { - $stat = new driverStatistic(); - $stat->setInfo('[ZendDisk] A void info string') - ->setSize(0) - ->setData(implode(', ', array_keys($this->itemInstances))) - ->setRawData(false); - - return $stat; - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Zenddisk/Item.php b/lib/phpfastcache/src/phpFastCache/Drivers/Zenddisk/Item.php deleted file mode 100644 index 74efb59..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Zenddisk/Item.php +++ /dev/null @@ -1,62 +0,0 @@ - - * - */ - -namespace phpFastCache\Drivers\Zenddisk; - -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\Cache\ExtendedCacheItemPoolInterface; -use phpFastCache\Cache\ItemBaseTrait; -use phpFastCache\Drivers\Zenddisk\Driver as ZendDiskDriver; - -/** - * Class Item - * @package phpFastCache\Drivers\Zenddisk - */ -class Item implements ExtendedCacheItemInterface -{ - use ItemBaseTrait; - - /** - * Item constructor. - * @param \phpFastCache\Drivers\Zenddisk\Driver $driver - * @param $key - * @throws \InvalidArgumentException - */ - public function __construct(ZendDiskDriver $driver, $key) - { - if (is_string($key)) { - $this->key = $key; - $this->driver = $driver; - $this->driver->setItem($this); - $this->expirationDate = new \DateTime(); - } else { - throw new \InvalidArgumentException(sprintf('$key must be a string, got type "%s" instead.', gettype($key))); - } - } - - /** - * @param ExtendedCacheItemPoolInterface $driver - * @throws \InvalidArgumentException - * @return static - */ - public function setDriver(ExtendedCacheItemPoolInterface $driver) - { - if ($driver instanceof ZendDiskDriver) { - $this->driver = $driver; - - return $this; - } else { - throw new \InvalidArgumentException('Invalid driver instance'); - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Zendshm/Driver.php b/lib/phpfastcache/src/phpFastCache/Drivers/Zendshm/Driver.php deleted file mode 100644 index 1b1b2f3..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Zendshm/Driver.php +++ /dev/null @@ -1,149 +0,0 @@ - - * - */ - -namespace phpFastCache\Drivers\Zendshm; - -use phpFastCache\Core\DriverAbstract; -use phpFastCache\Core\StandardPsr6StructureTrait; -use phpFastCache\Entities\driverStatistic; -use phpFastCache\Exceptions\phpFastCacheDriverCheckException; -use phpFastCache\Exceptions\phpFastCacheDriverException; -use Psr\Cache\CacheItemInterface; - -/** - * Class Driver (zend memory cache) - * Requires Zend Data Cache Functions from ZendServer - * @package phpFastCache\Drivers - */ -class Driver extends DriverAbstract -{ - /** - * Driver constructor. - * @param array $config - * @throws phpFastCacheDriverException - */ - public function __construct(array $config = []) - { - $this->setup($config); - - if (!$this->driverCheck()) { - throw new phpFastCacheDriverCheckException(sprintf(self::DRIVER_CHECK_FAILURE, $this->getDriverName())); - } - } - - /** - * @return bool - */ - public function driverCheck() - { - if (extension_loaded('Zend Data Cache') && function_exists('zend_shm_cache_store')) { - return true; - } else { - return false; - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - * @throws \InvalidArgumentException - */ - protected function driverWrite(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - $ttl = $item->getExpirationDate()->getTimestamp() - time(); - - return zend_shm_cache_store($item->getKey(), $this->driverPreWrap($item), ($ttl > 0 ? $ttl : 0)); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return mixed - */ - protected function driverRead(CacheItemInterface $item) - { - $data = zend_shm_cache_fetch($item->getKey()); - if ($data === false) { - return null; - } - - return $data; - } - - /** - * @param \Psr\Cache\CacheItemInterface $item - * @return bool - * @throws \InvalidArgumentException - */ - protected function driverDelete(CacheItemInterface $item) - { - /** - * Check for Cross-Driver type confusion - */ - if ($item instanceof Item) { - return zend_shm_cache_delete($item->getKey()); - } else { - throw new \InvalidArgumentException('Cross-Driver type confusion detected'); - } - } - - /** - * @return bool - */ - protected function driverClear() - { - return @zend_shm_cache_clear(); - } - - /** - * @return bool - */ - protected function driverConnect() - { - return true; - } - - /******************** - * - * PSR-6 Extended Methods - * - *******************/ - - /** - * @return driverStatistic - */ - public function getStats() - { - if(function_exists('zend_shm_cache_info')) { - $stats = (array)zend_shm_cache_info(); - return (new driverStatistic()) - ->setData(implode(', ', array_keys($this->itemInstances))) - ->setInfo(sprintf("The Zend memory have %d item(s) in cache.\n For more information see RawData.", $stats['items_total'])) - ->setRawData($stats) - ->setSize($stats['memory_total']); - } else { - /** zend_shm_cache_info supported V8 or higher */ - return (new driverStatistic()) - ->setData(implode(', ', array_keys($this->itemInstances))) - ->setInfo("The Zend memory statistics is only supported by ZendServer V8 or higher") - ->setRawData(null) - ->setSize(0); - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Drivers/Zendshm/Item.php b/lib/phpfastcache/src/phpFastCache/Drivers/Zendshm/Item.php deleted file mode 100644 index 44c3118..0000000 --- a/lib/phpfastcache/src/phpFastCache/Drivers/Zendshm/Item.php +++ /dev/null @@ -1,62 +0,0 @@ - - * - */ - -namespace phpFastCache\Drivers\Zendshm; - -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\Cache\ExtendedCacheItemPoolInterface; -use phpFastCache\Cache\ItemBaseTrait; -use phpFastCache\Drivers\Zendshm\Driver as ZendSHMDriver; - -/** - * Class Item - * @package phpFastCache\Drivers\Zendshm - */ -class Item implements ExtendedCacheItemInterface -{ - use ItemBaseTrait; - - /** - * Item constructor. - * @param \phpFastCache\Drivers\Zendshm\Driver $driver - * @param $key - * @throws \InvalidArgumentException - */ - public function __construct(ZendSHMDriver $driver, $key) - { - if (is_string($key)) { - $this->key = $key; - $this->driver = $driver; - $this->driver->setItem($this); - $this->expirationDate = new \DateTime(); - } else { - throw new \InvalidArgumentException(sprintf('$key must be a string, got type "%s" instead.', gettype($key))); - } - } - - /** - * @param ExtendedCacheItemPoolInterface $driver - * @throws \InvalidArgumentException - * @return static - */ - public function setDriver(ExtendedCacheItemPoolInterface $driver) - { - if ($driver instanceof ZendSHMDriver) { - $this->driver = $driver; - - return $this; - } else { - throw new \InvalidArgumentException('Invalid driver instance'); - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Entities/driverStatistic.php b/lib/phpfastcache/src/phpFastCache/Entities/driverStatistic.php deleted file mode 100644 index c08afac..0000000 --- a/lib/phpfastcache/src/phpFastCache/Entities/driverStatistic.php +++ /dev/null @@ -1,227 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ -namespace phpFastCache\Entities; - -use ArrayAccess; -use InvalidArgumentException; -use LogicException; - -/** - * Class driverStatistic - * @package phpFastCache\Entities - */ -class driverStatistic implements ArrayAccess -{ - /** - * @var string - */ - protected $info = ''; - - /** - * @var string - */ - protected $size = 0; - - /** - * @var string - */ - protected $data = ''; - - /** - * @var mixed - */ - protected $rawData; - - /** - * @return string|bool Return infos or false if no information available - */ - public function getInfo() - { - return $this->info; - } - - /** - * @return int|bool Return size in octet or false if no information available - */ - public function getSize() - { - return $this->size; - } - - /** - * @return mixed - */ - public function getData() - { - return $this->data; - } - - /** - * @param $info - * @return $this - */ - public function setInfo($info) - { - $this->info = ($info ?: ''); - - return $this; - } - - - /** - * @param int $size - * @return $this - */ - public function setSize($size) - { - $this->size = ($size ?: 0); - - return $this; - } - - /** - * @param mixed $data - * @return $this - */ - public function setData($data) - { - $this->data = ($data ?: ''); - - return $this; - } - - /** - * @return mixed - */ - public function getRawData() - { - return $this->rawData; - } - - /** - * @param mixed $raw - * @return $this - */ - public function setRawData($raw) - { - $this->rawData = $raw; - - return $this; - } - - /** - * @return array - */ - public function getPublicDesc() - { - return[ - 'Info' => 'Cache Information', - 'Size' => 'Cache Size', - 'Data' => 'Cache items keys', - 'RawData' => 'Cache raw data', - ]; - } - - /***************** - * ArrayAccess - *****************/ - - /** - * @param string $offset - * @param string $value - * @throws InvalidArgumentException - * @throws LogicException - */ - public function offsetSet($offset, $value) - { - trigger_error($this->getDeprecatedMsg(), E_USER_DEPRECATED); - if (!is_string($offset)) { - throw new InvalidArgumentException('$offset must be a string'); - } else { - if (property_exists($this, $offset)) { - $this->{$offset} = $value; - } else { - throw new LogicException("Property {$offset} does not exists"); - } - } - } - - /** - * @param string $offset - * @return bool - * @throws InvalidArgumentException - * @throws LogicException - */ - public function offsetExists($offset) - { - trigger_error($this->getDeprecatedMsg(), E_USER_DEPRECATED); - if (!is_string($offset)) { - throw new InvalidArgumentException('$offset must be a string'); - } else { - if (property_exists($this, $offset)) { - return isset($this->{$offset}); - } else { - throw new LogicException("Property {$offset} does not exists"); - } - } - } - - /** - * @param string $offset - * @throws InvalidArgumentException - * @throws LogicException - */ - public function offsetUnset($offset) - { - trigger_error($this->getDeprecatedMsg(), E_USER_DEPRECATED); - if (!is_string($offset)) { - throw new InvalidArgumentException('$offset must be a string'); - } else { - if (property_exists($this, $offset)) { - unset($this->{$offset}); - } else { - throw new LogicException("Property {$offset} does not exists"); - } - } - } - - /** - * @param string $offset - * @return string - * @throws InvalidArgumentException - * @throws LogicException - */ - public function offsetGet($offset) - { - trigger_error($this->getDeprecatedMsg(), E_USER_DEPRECATED); - if (!is_string($offset)) { - throw new InvalidArgumentException('$offset must be a string'); - } else { - if (property_exists($this, $offset)) { - return isset($this->{$offset}) ? $this->{$offset} : null; - } else { - throw new LogicException("Property {$offset} does not exists"); - } - } - } - - /** - * @return string - */ - private function getDeprecatedMsg() - { - return 'You should consider upgrading your code and treat the statistic array as an object. - The arrayAccess compatibility will be removed in the next major release'; - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Exceptions/phpFastCacheCoreException.php b/lib/phpfastcache/src/phpFastCache/Exceptions/phpFastCacheCoreException.php deleted file mode 100644 index 6314b6e..0000000 --- a/lib/phpfastcache/src/phpFastCache/Exceptions/phpFastCacheCoreException.php +++ /dev/null @@ -1,26 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Exceptions; - -use \Exception; - -/** - * Class phpFastCacheCoreException - * @package phpFastCache\Exceptions - */ -class phpFastCacheCoreException extends Exception -{ - -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Exceptions/phpFastCacheDriverCheckException.php b/lib/phpfastcache/src/phpFastCache/Exceptions/phpFastCacheDriverCheckException.php deleted file mode 100644 index d66306f..0000000 --- a/lib/phpfastcache/src/phpFastCache/Exceptions/phpFastCacheDriverCheckException.php +++ /dev/null @@ -1,24 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Exceptions; - -/** - * Class phpFastCacheDriverCheckException - * @package phpFastCache\Exceptions - */ -class phpFastCacheDriverCheckException extends phpFastCacheDriverException -{ - -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Exceptions/phpFastCacheDriverException.php b/lib/phpfastcache/src/phpFastCache/Exceptions/phpFastCacheDriverException.php deleted file mode 100644 index 5f44b4a..0000000 --- a/lib/phpfastcache/src/phpFastCache/Exceptions/phpFastCacheDriverException.php +++ /dev/null @@ -1,26 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Exceptions; - -use \Exception; - -/** - * Class phpFastCacheDriverException - * @package phpFastCache\Exceptions - */ -class phpFastCacheDriverException extends Exception -{ - -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Proxy/phpFastCacheAbstractProxy.php b/lib/phpfastcache/src/phpFastCache/Proxy/phpFastCacheAbstractProxy.php deleted file mode 100644 index 77b0823..0000000 --- a/lib/phpfastcache/src/phpFastCache/Proxy/phpFastCacheAbstractProxy.php +++ /dev/null @@ -1,83 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ -namespace phpFastCache\Proxy; - -use phpFastCache\Cache\ExtendedCacheItemInterface; -use phpFastCache\CacheManager; -use phpFastCache\Entities\driverStatistic; -use Psr\Cache\CacheItemInterface; - -/** - * Class phpFastCache - * - * Handle methods using annotations for IDE - * because they're handled by __call() - * Check out ExtendedCacheItemInterface to see all - * the drivers methods magically implemented - * - * @method ExtendedCacheItemInterface getItem($key) Retrieve an item and returns an empty item if not found - * @method ExtendedCacheItemInterface[] getItems(array $keys) Retrieve an item and returns an empty item if not found - * @method bool hasItem() hasItem($key) Tests if an item exists - * @method bool deleteItem(string $key) Delete an item - * @method bool deleteItems(array $keys) Delete some items - * @method bool save(CacheItemInterface $item) Save an item - * @method bool saveDeferred(CacheItemInterface $item) Sets a cache item to be persisted later - * @method bool commit() Persists any deferred cache items - * @method bool clear() Allow you to completely empty the cache and restart from the beginning - * @method driverStatistic stats() Returns a driverStatistic object - * @method ExtendedCacheItemInterface getItemsByTag($tagName) Return items by a tag - * @method ExtendedCacheItemInterface[] getItemsByTags(array $tagNames) Return items by some tags - * @method bool deleteItemsByTag($tagName) Delete items by a tag - * @method bool deleteItemsByTags(array $tagNames) // Delete items by some tags - * @method void incrementItemsByTag($tagName, $step = 1) // Increment items by a tag - * @method void incrementItemsByTags(array $tagNames, $step = 1) // Increment items by some tags - * @method void decrementItemsByTag($tagName, $step = 1) // Decrement items by a tag - * @method void decrementItemsByTags(array $tagNames, $step = 1) // Decrement items by some tags - * @method void appendItemsByTag($tagName, $data) // Append items by a tag - * @method void appendItemsByTags(array $tagNames, $data) // Append items by a tags - * @method void prependItemsByTag($tagName, $data) // Prepend items by a tag - * @method void prependItemsByTags(array $tagNames, $data) // Prepend items by a tags - */ -abstract class phpFastCacheAbstractProxy -{ - /** - * @var \phpFastCache\Cache\ExtendedCacheItemPoolInterface - */ - protected $instance; - - /** - * phpFastCache constructor. - * @param string $driver - * @param array $config - */ - public function __construct($driver = 'auto', array $config = []) - { - $this->instance = CacheManager::getInstance($driver, $config); - } - - /** - * @param $name - * @param $args - * @return mixed - * @throws \BadMethodCallException - */ - public function __call($name, $args) - { - if(method_exists($this->instance, $name)){ - return call_user_func_array([$this->instance, $name], $args); - }else{ - throw new \BadMethodCallException(sprintf('Method %s does not exists', $name)); - } - } -} diff --git a/lib/phpfastcache/src/phpFastCache/Util/Directory.php b/lib/phpfastcache/src/phpFastCache/Util/Directory.php deleted file mode 100644 index fe30c1d..0000000 --- a/lib/phpfastcache/src/phpFastCache/Util/Directory.php +++ /dev/null @@ -1,143 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ -namespace phpFastCache\Util; - -use RecursiveDirectoryIterator; -use RecursiveIteratorIterator; -use SplFileInfo; - -/** - * Class Directory - * @package phpFastCache\Util - */ -class Directory -{ - /** - * Get the directory size - * @param string $directory - * @param bool $includeDirAllocSize - * @return integer - */ - public static function dirSize($directory, $includeDirAllocSize = false) - { - $size = 0; - foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory)) as $file) { - /** - * @var \SplFileInfo $file - */ - if ($file->isFile()) { - $size += filesize($file->getRealPath()); - } else if ($includeDirAllocSize) { - $size += $file->getSize(); - } - } - - return $size; - } - - /** - * @param string $path - * @return int - */ - public static function getFileCount($path) - { - $count = 0; - $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), \RecursiveIteratorIterator::SELF_FIRST); - foreach ($objects as $object) { - /** - * @var \SplFileInfo $object - */ - if ($object->isFile()) { - $count++; - } - } - - return $count; - } - - /** - * Recursively delete a directory and all of it's contents - e.g.the equivalent of `rm -r` on the command-line. - * Consistent with `rmdir()` and `unlink()`, an E_WARNING level error will be generated on failure. - * - * @param string $source absolute path to directory or file to delete. - * @param bool $removeOnlyChildren set to true will only remove content inside directory. - * - * @return bool true on success; false on failure - */ - public static function rrmdir($source, $removeOnlyChildren = false) - { - if (empty($source) || file_exists($source) === false) { - return false; - } - - if (is_file($source) || is_link($source)) { - return unlink($source); - } - - $files = new RecursiveIteratorIterator - ( - new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS), - RecursiveIteratorIterator::CHILD_FIRST - ); - - foreach ($files as $fileinfo) { - /** - * @var SplFileInfo $fileinfo - */ - if ($fileinfo->isDir()) { - if (self::rrmdir($fileinfo->getRealPath()) === false) { - return false; - } - } else if(unlink($fileinfo->getRealPath()) === false) { - return false; - } - } - - if ($removeOnlyChildren === false) { - return rmdir($source); - } - - return true; - } - - /** - * Alias of realpath() but work - * on non-existing files - * - * @param $path - * @return string - */ - public static function getAbsolutePath($path) - { - $parts = preg_split('~[/\\\\]+~', $path, 0, PREG_SPLIT_NO_EMPTY); - $absolutes = []; - foreach ($parts as $part) { - if ('.' === $part) { - continue; - } - if ('..' === $part) { - array_pop($absolutes); - } else { - $absolutes[] = $part; - } - } - - /** - * Allows to dereference char - */ - $__FILE__ = preg_replace('~^(([a-z0-9\-]+)://)~', '', __FILE__);// remove file protocols such as "phar://" etc. - $prefix = $__FILE__[0] === DIRECTORY_SEPARATOR ? DIRECTORY_SEPARATOR : ''; - return $prefix . implode(DIRECTORY_SEPARATOR, $absolutes); - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/Util/Languages.php b/lib/phpfastcache/src/phpFastCache/Util/Languages.php deleted file mode 100644 index 071d62d..0000000 --- a/lib/phpfastcache/src/phpFastCache/Util/Languages.php +++ /dev/null @@ -1,47 +0,0 @@ - http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ - -namespace phpFastCache\Util; - -use phpFastCache\Exceptions\phpFastCacheCoreException; - - -/** - * Class Languages - * @author Khoa Bui (khoaofgod) http://www.phpfastcache.com - * @author Georges.L (Geolim4) - * - */ -class Languages -{ - public static function setEncoding($encoding = 'UTF-8', $language = null) - { - if ($language === null || !in_array($language, ['uni', 'Japanese', 'ja', 'English', 'en'], true)) { - $language = 'uni'; - } - switch (strtoupper($encoding)) { - case 'UTF-8': - if (extension_loaded("mbstring")) { - mb_internal_encoding($encoding); - mb_http_output($encoding); - mb_http_input($encoding); - mb_language($language); - mb_regex_encoding($encoding); - } else { - throw new phpFastCacheCoreException("MB String need to be installed for Unicode Encoding"); - } - break; - } - } -} \ No newline at end of file diff --git a/lib/phpfastcache/src/phpFastCache/index.html b/lib/phpfastcache/src/phpFastCache/index.html deleted file mode 100644 index 4304a89..0000000 --- a/lib/phpfastcache/src/phpFastCache/index.html +++ /dev/null @@ -1 +0,0 @@ -Visit www.phpfastcache.com \ No newline at end of file diff --git a/lib/ts3phpframework/LICENSE b/lib/ts3phpframework/LICENSE deleted file mode 100644 index 70566f2..0000000 --- a/lib/ts3phpframework/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - {one line to give the program's name and a brief idea of what it does.} - Copyright (C) {year} {name of author} - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - {project} Copyright (C) {year} {fullname} - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file diff --git a/lib/ts3phpframework/images/flags/ad.png b/lib/ts3phpframework/images/flags/ad.png deleted file mode 100644 index 625ca84f9ec596848d4b967b5556fda897ca7183..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 643 zcmV-}0(||6P)S}{rU-#^xW|9%5S{`_G8k=zVG=|5luWB>#JF#yj01oZa& zTu&JQ008~}|NQ&{0055x0sR95`v3p?1_t~7{`v!N`v3d-{`&g=`T6amqXIBA$0h)T zKokWRkpoMx|Go@O4FvhR>O1p+i7`B6t^3)y2dJ<#?4I?d4x-E}Az98Z`2`TmzkmP! z{`(J9{pauh-+zJD{JOYLhW+QSzkh#x`Y&wke*WLjpZ~u9`2XuCr@{^OJ|MkZb_UGR@Z=V>fB*iaq<8P{*B}2u-uMnu#J~U$KrBDL0bT$1_irEqiZcM6WEF7g<|*+% zzkjHi-TwRc=f7_t9|K*?`1?07lmG&V<)V$@{}>pUYZ(~+fDw@M3(WY1!T<=sp}f-o0K!lJ3<>Jc!&VtMslE3ph2^H3FGe(F z4|^}slF1@l1Nxc}^5hjjU=0la|37)k@b@neJ^1|l@87?_{{z(l6@kcKe}Db@_Y267 z<&g#201!YdV6*>2R0EZ*bYA%%2Vi7me5m>mAb?naPGtnD20MY__n-f`0mzg8{s9CK z*hzmtW)s%H$oS{aAAkS?JLxaT`2W9u;n%DD1Q-B%#%TuGpFSS|0000&5HW|5#c7{r(N){s9YCi84$~U|{$Glm>AD0*K|^yLU}ZO+eP) ze;~;4`#0mCzs$dX{r~-&?f370zkUTM{{OB1_1E8DKmYz*JbN)f0I>i8Q1#1Kum1f0 z{pZggpt}FRe*ORX>;JEx|9}4c_w(m__W!pfKK=atLxM{ZXbC_7vHbh@@9*EgK-ECy zzkh)Y{?EYhFEQc&-#`EN9{7Lq7*OE*@9)2U|NQmmC(vO40VtezBLF}U2%?OI(TG)& zJC>!~;SYmN-)zb6gc(7A-^Q(#z0vHb9!CJ#T#ii{@&pjek8j`pfX)5|H00+GpnLvt za{MtfWBC4qk%R63j~{=2{QLgr`wyTb*amx2hce{;{QL3a|BhWh#6A5bKmf5of*%NgdVm^$Zuo!gI_LQd|G=96g51yWl0Agf71rLE? q3XWqq@&Lw?Iyk0*94-cc00RK~MQKxxUU$F%0000= z`}|7!`YQYT5C8xIh~*yx1DgQ1_jkSr_QgN{Gn)!7=zkRT=l(yS{y%^Jd$>%yrP!)vVq~xpZ~xA{{HjZ>hB|)Z~OQoBLBm{yCqA0{k;C`&+mV~|1$jj15^wU zKukakbkF}kzkmk({q_6zmUTZaUWBOraqa5!?(V-pgMR}R{04?0&`AIR#PSE^hrdi> z;*7t4gLVFSJ$J5DTibsorq@%ai5h7B2l^1G@*gM=fUW@uAjYc<48V{DX@ijvE(11_ dg@FMezyQzuBHsGv+i3s*002ovPDHLkV1jTADB=JB diff --git a/lib/ts3phpframework/images/flags/ai.png b/lib/ts3phpframework/images/flags/ai.png deleted file mode 100644 index 74ed29d92616c86757d3c0ec04378301c8f591b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 643 zcmV-}0(||6P)ocPy#thD++(+#W%SS0Qvp^`1%0+_yGC)0QUL-|M&m^ z`T_tk0M7pe&iDc7fh@K74M*k&0{8f*88BG;;GY6ve?;&4{{Q>_{{8&^`u+g@|Ns5} z|C?Nv0*Gb#mu+n4z6ZW~#qjy_|6ji&ZeIEMk16oyzH)i@Pk$MNxLARR?a#kwpMS72 zF)}cG2M8dRUN*~81wCz%$A2$f`_IL|A|w6j^RHtc7{2`lYG-KkQ{(*knSqh%3kzr7 zs%s1kKL7#%F#yj00-^B^D;pD^^AqC)4C(?1m>@q26ceiU4*2{4`u_d~@vQ*ykp&A1 z3h$o${r~^~`vQo?Pm-bY@cm79zVQG5%l!B6)Riap%L`bGemnT<@2|iAfl64!%YWS~ z`p0YY_dig_cYpw5WYAmG*lPLk!;jy8|NZ#~MF0Q%{rCG1ko^Di`(Fhkd3F{?py0c9Vg{{gA~^#>F<|Nj5KapBR^@Bf~CXSi|t;lF=C z8-4)<5DUX^V9+rDCI3RuUy#}V{s46X!}R~}@4ug&fA|+@;n!b(1zCZ900KKMX({{sIILBZE*UQbc|SngJt$+`m9Kz!<;5 dBm+Qz0RWL%NC2%sdjkLf002ovPDHLkV1lARHI@JX diff --git a/lib/ts3phpframework/images/flags/al.png b/lib/ts3phpframework/images/flags/al.png deleted file mode 100644 index 92354cb6e257be2cade71cb825027ce8d9efc06d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 600 zcmV-e0;m0nP)PbXFRCwBA zyv)hK@{fUmi2(>${xJOc&A`II@PmN?BKC`c;SU)710$d~Kmf4-r6niy16BY3`}g0! ze=L9h&Uybegp-Ns@87v^zGQMU|NZla@z1Y+zkdVKmFbHB0*HkH4F0@)&iwE1;&GRLuzkX(OGXMMa``@o$|Ni_2x(y(Jn3#TnHT?el|IhC;U%pHK`}6Df z@2@|9J^lXU=Z~KvfBzi*^!4A*U;lv`e*Fge3Lt=(82$q_`~m9z|ND;$!(WEqze~6o ze}X|JFO$H(U+VvX#{c{avi3L7@c;n?3L&6l7=Hix`}emN<6i~#|7+iUWBL8-&##}m zKKx5zXJr5LA80nvkwCM6egFs{po9Y?& zL6B;olm7ns#=rm&Kp-3b{RIXY(1{??Ha=$NKfkS+|9@us$Mfg+93j@fzkY#y2y!;i z&kO(o1PWH5>zPHwn7|>;0Mz;WPl13iP!Y(WKYy4&4hBXMSPugOKmaiw2gk!dq!|4J mj$lZE0R~eis zC&uN{cDQ8`!@ZNLOqwtoG6nhzPx}SV-d6yzFfcIz75{(rngJyDkKrFw8iaoThHCr$ zo8k9wMhS^O3=9AP!~%5B|9}4(ASQtkLN$m1CV&5705X362095KfLKJhW;OjWdGY7l zzrX*$DuLu*pcFC#NdEr)SL!$SY=)lz0mSm_*B_u)|AM4JP)(}33zy1Lc&_o7? zKL7y)bkd){fBym<_v`mxpbeRs`+WRVot-5A{r$IX$CJFg13u{3eX_{0R++j zR}GCkSy{&4zk!krKoTg(2n-k?g31B}5JW!NMq0d0000q< zM7LZb@rX?|r)2RP-+aO3(7q?c3+$-Vv0E)PxM3SDV%@s`#GkZvw_x^WBa~uq3^l}t zWdf(j(=(>^SgETc#5#EZT(4ObRkfxbzP9G;yza0;Ygc8-_*?EP(ca#`l6-Z6D0{tL zQ4|~MCSi!9Q9YkW=V$ix#EqZ!rc?eWA0TwdVID+3aqrYUXUhCI)Ad5!(cP!BhhW$Ayb2&r8kK!bz*2`~UE W(Ndrek0Jg50000NL7TW{{R0! zJP>i}(MpzaSkj z=eqvqa`^|6{{QbQRQ11q3~Vg_kG}Z}5I`(hw}ncX8D4$|h64jUK>or*=^r$dfI%n0 z$3MKz;!F0w91GjkkV%_X`@4 wKR^hm`X5LwD9*v?4;TUC6Bz$&3;+QJ0QLcJ=WT{TU;qFB07*qoM6N<$f>3bX%K!iX diff --git a/lib/ts3phpframework/images/flags/as.png b/lib/ts3phpframework/images/flags/as.png deleted file mode 100644 index 32f30e4ce4eedd22d4f09c4f3a46c52dd064f113..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 647 zcmV;20(kw2P);Rmc0RI30 z|Nj5|{Q>>`0R8>{{QLs@`vM01^D6+%Ap+Y10Qw3Sr3ED)s=c}b05Jg0{{#dC0RR60 z)z$y}`~dv>0Q&p?0Q>ne0Khr|#}EMN1`-ttJvaFq6VTDg`OMJS*4F}vg#m0fQ1$QM z42u6QTCg3Kt8+Li1J#Y_zUd>4Lw{URe1tEjLbKmY(S0M7pd(g2qsJ0|z;{R`~d z`n<6E*3bb41p*Zr{{R344LkeqyaMyV01O!W0PZ0+TjlEQ0st`p&i?@b0Q{Gi0m{n% z`T6-B``1JQx+4kM0{rp_FfRy7P6Qq%_1|&<`|JPx`Uew8u)+%h2+ zdiAI7xt}_}e|$CmbI9$2>u h*D)|iF)#oG7yty8`q2#I8zBGy002ovPDHLkV1j5VEF}N{ diff --git a/lib/ts3phpframework/images/flags/at.png b/lib/ts3phpframework/images/flags/at.png deleted file mode 100644 index 0f15f34f2883c4b4360fc871d7105309f1533282..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 403 zcmV;E0c`$>P)@|4`Xj5kLT%`al?B=W5I`&prl$WjwHQRjfmQ&G0jUOA z@&|Dug_Rm`2Y251|$~)1M2@@6mI}!8O6olw6y^Q z5X--d7nzS8`+x5q12kBmVFD!~j6c5_fMKno0(1^Q0I>i=is|LjXX40RRttS6cG0UZ?;7002ovPDHLkV1fxUnjZiF diff --git a/lib/ts3phpframework/images/flags/au.png b/lib/ts3phpframework/images/flags/au.png deleted file mode 100644 index a01389a745d51e16b01a9dc0a707572564a17625..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 673 zcmV;S0$%-zP)>fJ3En$GhGS>sbE%%m3$AD)q?8M9y>88-}kR7#RKlk!P~Y_PLuF7~U~3`~nC7 zF#yj00ZUDdpLsm{7ajP|&HwoK0Usg|6%f4L_{`Mi{rvv-`ukf=Ed&Gs-sA7L!Q7*a zj{*QO0M7pb%?Sw^g@yy{>ihEY{`vU@3=8@G0rvO$i3mOL`~mv-`W+b$Mmr&io5dg< z5v!7q0*L95jt`TzK8Kd(Utv)OSp_aLv){6ccV+Z`{Q2+asKUU&aO3`Kpz6wW8wp`< z28M3{0mSqnB#A*-c*8%1=RD#sSOwMznKA3=e&iEzwo{cA=PgXK`2OQ}gqId83!|%* zA_Kz@fB*n70M7pdECCwp4H&@R`1|(w-}M5x*74i)0}%fAt;XafA{48))#>Z>?CD#}*e}Ret0tl$#*RMZ7}Jl7Z|M45`5*URzH9L z{rmSnPy;{!u>dsyO%meg+00000NkvXX Hu0mjfN{&}S diff --git a/lib/ts3phpframework/images/flags/aw.png b/lib/ts3phpframework/images/flags/aw.png deleted file mode 100644 index a3579c2d621069c8128d7cf16440d5e45a3ab3cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmV+n0`vWeP)^}0h@W9fA9JOn#opKkr#VO<{LPm{QLg}EdH3Vb1Zzpp zqiZ+XNBm%5{`ViKi{bCTe}Dh~2a+HyfB%6Q|9}7eKVjxEfB<6Q<6r}-{{7;G=hB{; zLB+p+|Ni^;|DXT={s75;AoBO$f4@PDf8sps4FCQC1Q64wUw^h*hy4HZXO3U)@85qw zD*pci8U|DWQu_BVi2MUWKoOv;00M{w=;|*lY_o%kegGx^{`&*A{SSok_usF-P)oof z|A86+0*K|;FQAM6fB*FtoEI&bZG5mq328#as{}<$F zWDQ{Ffz1MH001phxCBNdC_2H6U$AI~GQbEJqg*Ti0R{kQ(yH?TRrCY^ O0000^@RCwBA zRL|V|7QjV)*ul;Rlceqc6W0{`~_8AeMg& z|LUXE8U8c=`}dziv6P|mEu%JjM}pqh@65md|Ni~w->=_)fBgZXe?Nc!ot?WGAOHX{ z0M7pe`uG9>{{ZXo`u+d?{`u+u=j#9V2j%Sc^797z|N8p+{rLO+`TP9&`u!FW2mk>3 z0#G;xDFDDQ2vg|)-@5Zw?JVTrAxNs~5&|AZ;5uWfQ`vUsMGm`>aGWoI7=P|oW>%~E z|Kk8dq@aG@HzdsB>fj@shYzX-a%=q<(frSYmfLIv5{HbzQ${~M_P_y6C&m>3uU0*DFd0+8#0#Gk)^|NLQBRAyCBeB9H+Wn{=Mr@*PJ_ZKV< zB>w@GFfafF5Ks>TBP0ZV{bBt5_ve*sKkwd`OiO#eX6=u=cfX!E#rX3NBT(umNC7Yu z0Ro8S7X#4ce?Xr63$phg)Bk64X8r&5``_O`AFf^jc>p5y?+^38KVKLa00M}`wU!~x z=I_1Fe}Df4D*yZI@1I|PfBgnRptt`0`2{iqMpRNPo|?TW>MPOFW(r1_!xlT-yep5|G*@e%^SFxf#DC32@n7=0M7pe00011 zNe=7o{FIuhzQ(sjF~t7>`T+s_0sj00{`>*}`~Uy^|Ni?^Z7Tcx|FW0O0tlpm;s5{T z+df{s^E1rDZN;v4VP>0|8GkY`{`&t1s2YfV{r~st=KUYCl59Xr00M{!Xv@F<41fPH zoWA^R$>xvtF5yd$xc~X{7o-}f=ig7DY9RXc``_>1K-c{N2q2&ahQEIq{`~z1RCDs; zw*~7zIJ!sAKj8J}&!7K)enC|K{|nUc|Mwq|27mwp*#K1f8;Jh=2byv8+}GKw-@AGz z%-rMu^XK3HKtBLA{Qvdq*I%FsKn(x^1k&&qY(LP_Uw?q)|3jz0PF?=a(?4bU?qHzN z5I+E=z&88?2q2IKpz*){`~&I%+VJc5-=Dw#?LYB#!lHLRL7BZ8-NZ5x*TXaKmf6TZ20qEQj`^F;~x-W z05U+*fBxNj@_W(7kJ(ujGnWgh$g%(Z2hso#K#U9wI~hQ+`3Dk_7z`j1tL#*2FTcgW f@C+EF009O7>dRn2w6d?H00000NkvXXu0mjfueTzu diff --git a/lib/ts3phpframework/images/flags/bb.png b/lib/ts3phpframework/images/flags/bb.png deleted file mode 100644 index 0df19c71d20d7fdc06e1cba01028983439b2bdae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 585 zcmV-P0=E5$P) zj51&U|NhG$_=oZTA7 z0mJ{l|Ns2{|Nr-Y#^3*c{=WU_!>_-;fvROCxPdkR1P~M0Xa=C_KR`47{sXG+pY!Yf zqu=)*{%)W0>;M0szkdJy_507SKYxDz`3KYh5I`&-cY{^``2$3Z|NsB`^ZWO@y}$qd z{r%_nFQBC$4Is{6hz5WF0@(mI8^j0N`~Tl>LzQ1Ye}a&q>MtPo*RQ`|OMu4x1!@2Y zAfSdne}TsT{`c$8-(P?J0c~)w`~?J`zx?#Dg*yp^z&88=2q2IKpt(TRKniTbum8-y z1bBWi0e#F0wgIH{FVJ|Pxj-8L0tgsNfByUdJMs7b-@h3^8h-!E3i%CU{QCW$1*GB6 ze~`2PfHeF82q2&aU>N+96yg32bmdP5238q{|Gydk0=52OVEN6!@<&OA7Z~7wL16>b z@DCt>7#SFn85mf=5eY;LZ#OUe_l@D-2Zn#Y82<4v{9|E|jkRQ8_`$&N0jL_N03g5s XX0T^_9W~6o00000NkvXXu0mjfXpthO diff --git a/lib/ts3phpframework/images/flags/bd.png b/lib/ts3phpframework/images/flags/bd.png deleted file mode 100644 index 076a8bf87c0cedcce47099c6b74b59f2c9d1dbce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 504 zcmVCcfPV}OzZe+)fYC1)`hmpw%>WR9L@~Dk00x0r!@5ksR;+hV0>ZLfIcBS@orh;x zv}95za5W)x_7^}bV3YqpdH?h;NZnuSC%?V#{+0gl`~RQckJx{&l>NO~;@7XgzkdJz zEh{VwR0LSuiyWGR{aKQ z00-R5+27mwp+3@G@Um)kt zzdstU{yWl9SIB_0ft3II3)BD*KrA2|{``^Tm;4PDy`=a1tTre>fEI#8 u{{2z<2NVVaum*qtVq}m+iAaI~Aiw~?reC_kVQV=60000gsB+3J~Dn`pdxgmx19A{hgns>oXkhsL8>j&wfIu2Rsv+R_ zAB5T1GyoL?1Q1BWpFe+p|Nf1n;TJ-~Kd@?uhChFRHUI<=#0HS!U%!8$YJib28yLY( z0tg_G2B7i3e*FSj@aq@44gY_`jRywQ69xu=0D?FP=vyd&x*M*V6|CV8P{Uu4OBfgc z0tjNmA4y3`us8lPG6H?}8%zRafgb(Cp!5f*6oP{xAq} rF#LPR@IoIX4%E%Yz;K6w0U*EtuUcjA`-_J300000NkvXXu0mjf+>pV; diff --git a/lib/ts3phpframework/images/flags/bf.png b/lib/ts3phpframework/images/flags/bf.png deleted file mode 100644 index ab5ce8fe1237a18d6809a5570024eb108cb14a3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 497 zcmV@|4`Xj5kLT%`al?B=W5I`(ov;U*021-Lr1*!W5(gW7O z@cTDV13&<=05Ky_HBiN$KMcQt819e>gHP`g_|Np;&&;0(C^$RHS>olZ*Q41X9v27}ar6#W9}0h{^{OajIK0?h(y z_zOe~zZd`lhy{p$|NA4!EeST}?;nUxkP49VfMx;1;V%&U|N9rH;SU2q05LM8GXV8K n(H~UyA0);fa6B_H00bBSQ>$p&WfB*UmB!B(-`wPhZ^#?@C^U5EbbPyl_g=3Hc01Sh${{P9=HB%4| z34*<3-m=C?^;L%miR{xQv2*hU;8+Y&0Dxf-W~KjsusWFAC4@j0#9_j;X5z6SjRhH> zd}sd(7FPhVFdSi!*Zj@;_Sc`kfByUdk|3A-`STmZ_yb~qxIp9o{E-p)bLt=iKmf7) z+|Ix(`{&<1pm88mK&}8g1WG~}e||Ik`OB#Cw~m1UAb?na(Zlrn4}+v6P!1@{@CT$5 z&-#|8y{IY2iKmf5omHz(^qAp)ym^JhN+jk7Vet{H$(Z8=>|AV=V zva&!M00M{!p&AHub^kXuF^G#pRQ&(-8^nMkpk@XJfB<6o_wOIv5C1P;X6Wwu|KUB< zc%X*g2-OTg#J~U$KumBafq;(A|A`a+OH08N{X($;=pP0KfB<5Fs|GR7oM!0i{{QYB zSm|$=!=N@Wf}I2qKuka<{f7YtBjf)QCj1u{`~UM7nrdKh0c`*VF+c!8{Q&j%sZ;-Z zd;dRshENS5{{S`og~Sg)05QIL^-54s5b7kL(8GuS8yfz9{>%Ui`+q-vfW*P*^_43C z0mK4S`s2qBh&}(NP5W0_$$%QQ@R)`GfB*vkck5Jby^kNv00000NkvXXu0mjfy0pt~ diff --git a/lib/ts3phpframework/images/flags/bi.png b/lib/ts3phpframework/images/flags/bi.png deleted file mode 100644 index 5cc2e30cfc47452d5bef949628e955a522d59e50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 675 zcmV;U0$lxxP)$wbBBJ zMTk#;k4<3e#ePFE;{?TciOx=-NpIdg`t|#dcz^$YFqm+of7AU<7UGr+0t^5F#PsJM z(2)${Jd)SmT+KY5@!|h>po)L5-!r~>3uJux|0`&Jz~QGy6a*CiGyVtq1|Wc#zWw|0 z_y6C2|NnAvaR2)A>-NX%|3Ci{R?!hvH~jzU``ypCK7Rkq&&~h)FDNvCApj5nF#yj0 z0_X_*{{Q{_|NQXv@Av-qBMmR$teo!O*6-%u-J+8r3n~2s`s?uP{Qmp>{`~+900M{! zNC9;}eE(3IS9-C{62AZc<>Jx>%af}0@?r&05Jg0 z{{#T;0Os`NWh`ko4>SM%|Kw(60099Kad7|t0qcf^`tR-^sIP`Fhru7lkI#w#>Hq?W zkzqQ+@08y_|9v}t;{CEE%)%nTc=-MC@P)7S@!~g$((Ud|+28Q224FCZIGXF0FQ1zcbfB*dX_lJRr z;s3wCNa|2D02KoSAbE^!0Dxf-mZ69ApkCb5fP^9ydGO$cm6w`kGj(t#`M{tFlLo%j z*4%mm2&CaJSn02SzkrtfWBLcO;r%bLy5Gnoqrh)qC;lgG%);U`26kn-@hOg zU%!6+4+cOs(0HIde9xZz`}Onxub&LUB0x(30+2WcIRJn#2ut|?gWYu1Cf+!-K%B8# zdf?1WA}#uZ8oj7u>$I1i0Al&`=O0k%-@icgAIJnM0xA6maSq6BK-ECw|NZ*S`0Lj% z1_pot6puj;05Ax`F!=umqj7^frO?t|3^&I1kxUq9yECc+jQpY84SWH_0#pxl$?v~F z@*hy-KN0|X07U)z`4{NpU%#2aHUI<=%a31wK(7Du52Oc(|3O^?R1IN+RRjI-n*kVB z3=9AP#PZ|EACPLGJ%9cJNh|>9B%spYzZw7h1%?tp0I_@ndg9MNE>313@6R75NcceF zkr51-#U+7;F#`Sf7i0rK0I_`g_NQ&ZVKmZT`F#yj00W%wG zw4zx17##T6*Z=hN0Tvey7!|wG?K;V)0{r{_`}_X<{Qmp<|NQ*_`}@YSvI2-@&cAgG z*R?p0?_>V(@&EVlEP?{x|1esA`||VNU68t8zyJRJ_3zg&hTp&0WMzR?0R#}s1|E|% zRV}tRkH6o2#3;(nsVMXI-pgBmh17ms`TzTu!pfBl%*_9R;OEbWDJei#0R#}sGpDd$ z96Spi@~bn7G5z{~^_!ZLy2#s;5B~o8&G`G*|6f0Ap0WS=_rFd2C(ubi4FCZEF#yj0 z1a!1=2e0}MwgDi3SU@2S4mePl{012eQ4J-3 z|Mm`933BS6zyJRJ1;ztF0D(08|NVzmQWB*4&)@%$um=Y`lmy1W-@hDx{{qQh3=9AP x#JH7#;TJ3-|G=X54_FW_j)5c_0|P*S0RT0dOSD~(4;cUe002ovPDHLkV1hfJDkcB` diff --git a/lib/ts3phpframework/images/flags/bn.png b/lib/ts3phpframework/images/flags/bn.png deleted file mode 100644 index 8fb09849e9b5712e9cdd8a2c25035da201535cf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639 zcmV-_0)YLAP)8n_8%|dG+hlCr-g% z|9<~wU<9iE{r}%DMphZ1Jpcj3%*DZBWo-@72DFWlk(-gj@!ngb-$#D&C_i9e{QvLY zw|{?r|NHlgiHY~?^IHG`05Jg0{{(k=dF}7->+9=cXlNG}79t%T{rC3_t(pA#`tSX# z4jKOh|NsB|;rr`({{a5__y7Wk5omBxQSrlv5B>nb??0VZ8qCZrpS+?}gatn>o%-+B zPl=+||6st##PspQ2Y>)#{Cu5(QJ~_^?faD-pMV;E|7MwLubjQ@B-gLso$mVYgECpU zxpfp2fEt*XnBKpC4-fz`0M7pb@zVeZ8g>5r-~k2r`Sbhd;{WmN02I(80QmHEv)Ik{ z>H7Nm`}_MdF)?FhWi>T50*LYBMFw`s0-y$le?J(QfB$Fr_2c8e-`_!j`0PG|ckZ*_ zzkY$-`sc5Tips@{7Xbo@1sGC5IYwrQfB%2{|MTZR!ygX*-%McG4cZmTY ZzyK0(F$K@T-Dv;-002ovPDHLkV1la=J3;^e diff --git a/lib/ts3phpframework/images/flags/bo.png b/lib/ts3phpframework/images/flags/bo.png deleted file mode 100644 index ce7ba522aa7e948d581478432643c230eed1a658..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 500 zcmV^3LvnC{|x`%yaFl$ss8ha0V@6XKS=c-5cwO(_{}IL0ki=i zfLOjo{AE-9^-mn=h(G`Tfz|!{{r?|W+uz?{^yeR#!Nm9NlRN`J0I_^YV&Ikj@%Q)F z|Ns9m{0FN3^Z!3k!*8HnFvf4N5xas50L!z?-wXsAPk7$ ze<1l+iQ((fPYeJ7#KQ200VpKFA^{3Nph^G!{9^b86oDW}(Ek1R7ZiL9e}Ret0*H}e qBRB&8AR!3%7c6cef(%d+Aiw~vBYd|xMihYn0000j-HAXl7XJGjM{~r+i{r~sxzrQwG-&h#_Y&p;L z=ieV7_s^f-zyJOD{rC5(+EoAn1k&)I;s3Kw&;LT?{{2}P{Pq8T&j0^^J4?LvUd;UK z&+k8ffB*XXONL(tXahh1fi?X94^$0Q>Z$uRRO)Y4)uapmB!2(-ul(c1=C+V!kAF`) z$PCo;`_FHns{jIs3Fu;wy-Z(c2YwAz{&V4aXk?bejFO*Op&u`@i~PecqBpL@DIoojb8mb+WHGK%fG2>)a3=iVf_~v+`s?*1;!`?Kmai^I3i*ZIYtpN f{g(k500bBS@Ns{bTs^2gCr95H^s6Fo1}O2_S$Nfl}4;<}o-r{^R8Q_xtzX z|Nnu?|Ni^;2gm@D3=F@4EC#P1& zzuV{ie)#0qf2Lnh)j(~3VeG$ufPMl9Aczeh3x56n#l!R`HRQLfpFjVwfkN;%I39k( zVgne^e?jDThF>oL0*Hk{T6(^^8pGqq44*zhqZ1OZzkZ>_F(mFeH~<0+0A4S6=>Lb* QN&o-=07*qoM6N<$f&=*Yr2qf` diff --git a/lib/ts3phpframework/images/flags/bt.png b/lib/ts3phpframework/images/flags/bt.png deleted file mode 100644 index 1d512dfff42db1ea3e7c59fa7dd69319e789ee12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 631 zcmV--0*L*IP)?&DC3JV7l?ccjcgB=Qq4l4w|Q;eOZ4z|IjsEI`#PYSloM|AFHF zfy)2>XZQ=$@t;lU|F1tRzpnmg{PUOLH{-8A|F{4CvUU?d0I>k|0TuuM^_1cNUy$nm zzZn?*{^!*ACzSEy$NyhHzB0Wn`TXRU=!%=n%Ci4h82|!^32gR%glZtk^6USnb00o@ z{`LDW>%U)&BK_|-y-75RkKVi&O=|xC<=6keK+72b0*D2q;Xlai|Ns9mF#h@fM(h;aV>^!x1-zNu02XV-n@ zm3imZ@&EI0hChG)|NZlafdL?Zn1I0yH26P<=DUx29QQsc%}izF;QV-S-hYOl|1V4z zX|a-<=Kf#g*Z)7i{{y|szyJ_HEKEEM|C#>$KmJzoZa)M2-~Wm-e7Cl+vi)L|kY`}} z&A$F20RV*|BkB*O Rz6SsR002ovPDHLkV1m;fPLlut diff --git a/lib/ts3phpframework/images/flags/bv.png b/lib/ts3phpframework/images/flags/bv.png deleted file mode 100644 index 160b6b5b79db15e623fa55e5774e5d160b933180..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmV+b0{{JqP)O=a{vExMP2%`MCSoB^FIcLe_%lf;|~%E5I`(IQNh}3Ao>6Q|DFUXMn*>AqQd`w z|1kXd^B;tM|Njjl{{hM0zwd6?1Q0+hV1xeud-4=Wy?p-%sO`^#2S61Jzk!N?s)6X& zzhA%p|N6}=D+{y%Ab`Lc{sL9~1=0UN4*CD*7s%9KAf+JHKs~=eB-8KTKvw|-5R1&; zzd&a|ob(5%^Z$Q=wHy9p13+aOpFRNu5F>N&`Tk_-7w>=n{RejQzkfh&Kn{rf10?_b z{tFTZibx5v&dxav5I~H7|Ney-|DWN1$%1FyagzUW0464;_wU~W1Q5$TW@eGxtUvee z3vAf*8|igK9~@*rr66bh|NrkNM8z+V zAV?>O@ek;bKfu6d00k6 zPW&$KB`I@TtA?2x@Q~7pdcWi#1>DDZ2>MuG0I@IumHuaV^&7|soAMvT0IK){RtF@1 zgH;3B;_Qq-34j1%{P^)BFE1~|NkA(gBv!!4$aw$$eSiRB1ga=2D|__l(H|iA4T2Ex z>lc`SQ9x2&UjE?0g8%`<0`lvhzd$}*14J4{IhY2@0~G@V5J82%q9;EBlXu0U&@_82I`BfBC|Yn~P8llm?myQ3_K18=`^X_ivyEfB<6p_xd%%#*GZ! z-C&_V5IGPDK|g;X*gypg3;+Sd!XPTj0Q7fK5>&$Y{sHB| zjK9DB00sa3QR4q|tc?L6fSCSm+3>HW`NxbYpP7GsX8sK%KS9yYPfWi)GJ)AFzdp14 z{>t>1fsFwmfLQ*Ci!yxq#8guv=_mQ;-(Rp{AoSPbXFRCwBA z{KboB21 z`ppP*BG3|`!vO*asNvt=e_;3gWsp&PA@E<2jYs6ilRy6-zmSku5?~OOP=5aV@4sI_ zSN#QP00zQ!JD>SpAKYgR_QStF|9~F;2M|Ck zz%U1e+FyoWe;B_0VVclq;}vp_kNy3hKMWrj7*{kqJbMcaQ;_Pve;I)x1Q0+h46j}> zeiN4E1lkA+>|e|*mzJsW^M3)l^W_^hf&c&c`Mv->`48yHFF-%s0|+3-*GLfwiRNz% m3}3(u4lrUsie?}H2rvLBbQv(L;??y40000e`b1WGV} ze#gbd^&bp=ef-GykAYc$@BhDltSqdeSy?RXJpcawy+5fJAb?mHcsPJ&{d@EF@4HtJ z)qno||1xd*zaM|Ot4f#|8A1AQ-~Pubz$7IBv;-i4SQvovfB*ge{fFVtAE4aNE7yPi z`^Eg=5yP(^Ur(Q5`TLjM%#`8#_rHuB|9}1hItd_vSpNO`#qjs<|KGp=|NIHm@MXqK z79K7}ZvOwQ9Df%s{`~lX*xI%KzW-!k{Lc96Cr|@G0I@Lq`0?-epMSr9|NHeD?&umBG}6iH(DSogJte zDERNk_kV0Zng09%Itd_vSb&=T{rt@+B*66dJ0my{fpNkvBm!jpV_;xnVgd@XDk?Dx zh=IJyzyJ_HjJJUrz)|>#fr0nRl^;KTz#|yK`2G9$BS%LzureS32rvK^u`=B;c)+&+ O0000Vbu`-)NXk-Y`p?2$B#e1 z{(buQ`}e;;zyJNd_UF(2w_nb@VUiUP2igD-Kuin_BL6vl`zgIQV*mR8|8G|2U!T7I zn`-)Ow$bxne}9LGfB5z5*XcJ*K(;aeSD>o^0st`p&i@1e@&c~g4N@7~{}B9V!5sbp z`j|K8<@Nq-&kt=P>@pAZ`T7Q#;RiPl^j;kSgdzX}05Jg0{{#R8=f>y-z~LG0`u_d< z{QLg=2?6_k)DH^)`=sFo8YTUi-v;{r`o8J{6Wj>^)c^vB2^cJY|Nnmc_5b@He}DY@ z_51JdufKoSslWR1>-W9)3`r;XfsXn0`_Fc($H!lT!V@5Xn1Igu{qOIuf50&L{qg7D z?|*(LofMGa_%_k-*{}b_0g?9mMSwvE)Bq4bEIr*1})*zF_+U)&LMdEMOb{Nb-vOh6FrNC(tkd{&4;N%g_D$&)>g> z0^hO}m?z%iIsOJ1mka;_#K>R{i_RZNQ42x8VJSe8f#Ern2@qfa%&RHCyvg>Q00000 LNkvXXu0mjf=TkSf diff --git a/lib/ts3phpframework/images/flags/cd.png b/lib/ts3phpframework/images/flags/cd.png deleted file mode 100644 index 5e489424884d2ec9e429f70d69af00edf242a077..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 zcmV+r0`L8aP)JkPqeYl28iLgD=0{><0$P44T5yOrT$dE?(KkwMFdoG^-J zGv9P)Kk|i5`lcNgUUAbboca5{hI)v&h!9!~`Yg)Ld}$VwYqqXn@gVLi>3LSVGm1W? z3qnDJAk6chH(u7f~FohUBCxfQDx8?5BQsCcprAnfVhO SHC~zk0000@|NZ~|iEi8i zh~?j3h8^dV0y&$fY|i?}`2XK;hJSzm|G$6#|L@;V)&KqZ3sU;$?>`_ZF38C6g#jRd z7@s_ODJ3Nev=9gw8UKSQhX4P)z5oCE{eQ>y|1j|H-+x9%#`EXT0R#{W1H*5i5@u$g zs{agN2m-%;fixfipeaCQpFe*F2q2cU!)f`}`5%6M06O*WzrTN({{8*;CkCkD_wPBk z=llWket~@P=ieVecEOTuB>(}$vTge|RYlbYUmpDW_v_E!KfnL|{{8n?G|>28zowm@ z_UrGj-+zAtrGTUoztWctUjPD#h2amw@BhDn5OHz(52cFPg zot=T34qlT?57Mzkg5?0ssOG0Ftp>paW8OyZ`_I07*qoM6N<$f+2k} AjsO4v diff --git a/lib/ts3phpframework/images/flags/cg.png b/lib/ts3phpframework/images/flags/cg.png deleted file mode 100644 index a859792ef32a02b41503b5ab5f216191af397e02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 521 zcmV+k0`~ohP)i@P`2b{=v9^Ktp0uZ001fLMSM)r!?%mH+B91 z=ii?+(ckX8zrd=&8g~5t-|*}I50LQ;KzRlRfB=Hn08;wv->)Q*Kc0LLgTdsU-~VfV z{r~#=|1XdRMzE6r0tlo5X#B6gzhXrG`18Y*0!g6iieLY~Kvgqz}`W zLWO>Z3Lv@r7+CdZpiy8Ae}EeP0z(_<2Y>)#Vfe-1#`njMUlORAfdMG=o8iiD#%aG9 z#Q!h|feZ$rzkeYJ=p=vuV)VVru?7U|?FE@Zm|i>fBlzF zc~M_qKf%h=bAcoS;}NE7f8|yFe%B9?;;8%o@BeG_!|(4qhyo=(h-XBmKHXpc{~y!A z`THH3fsDVeudko)ARzm9UL&JI!+~uEM*rBES1=kd6zV%LH0J*N$gIQAc0y}k9qTFv z4h1oVG?rB#zNY^8{QUp5wE>>R#S4NZQd1i@F)*?OF@6y}@zmk^!Gr7L9asuAf!ae1 z{{CbBBH^Az=(+fAb?mHzA!MjRs*H~|NF=I z{~td;@BjZG-hUVsqZ#w(|L@=b|NQ>{d(*K^00G3pzycQk`jp|{UxvSb;p*Vv_V?Sr z{{Q;@@3$6WKrBG#F*5vR z`2XiW&+Xo6{KsbP_-SF+DJF`pL$*;0gaz z7NKVhyo`U;4*0+SK#>rfFFfafF5DUYXKh;r+@n*scPQUy6`!63S zGXn!71H*qtMn-04W+o=4|487=moEST#KiEAA;m(3;Xgy1iO{3BKc9a12~-UM7^Z`) z1qdLZI~bN-c=z}J|D88K{QmR*&tHcBxB*ZDKmf5Ya0q<-!`is-{h$8~f7m(x{QZSX zH3Jv`1P}|uy*o^wIGI2G`1kie)4zYe_&EQ6|NftW0ohon1}3I|Z{7d|5aVBMp0ssVo0Ek~;W>Z#0SJsA+2j`G% zv|UVeYYs-#Sn6_J90h1VosR?LBU7{U1rQ6+R0f9sPrg3=`~UA>#=n0a|7Q67_y6zT zP{j57|G!`V{{zu)Mn+knB>(|98e;E17s>tTLaMG-~Y>h{r`!g0jL-tfS4HmF#P%V_xIo5zyJLP zk|2W%e*G8w^1X|KC618W{eAoCFX+EI diff --git a/lib/ts3phpframework/images/flags/cn.png b/lib/ts3phpframework/images/flags/cn.png deleted file mode 100644 index 89144146219e6fbec7eaa89e1bf4b073d299569e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 472 zcmV;}0Vn>6P)$bmtfBa_T{rmsVufH!rO2O)W0!b+P{TrwO zAb?mv&i(NBbu;G`sX*)cv$d*%>MiL-(QdhpkjakVmyu%k;sfcNRj;yhJaxT5MTg0u5&QfH8#Bf O0000XbC_7v4G9~kE;3? z$h?1GrT>4y7{3|*{r>Zd0U&@_82$jY{AFPH^Plk#hy=QU5o|Ds0oDLyFn~2M0QE2c z1P~*G;PKK9g@-SH{rUU<_aC4k|G@~v`1Kn|{`&=C|M{yZ!G37cNq_)iVfexD=MNA8 zh5p0Hf4_c1v;p<}|Ak}_F!%rh2&CcXZ-(!`82&@8$XA^gF6?xq}zd#y5N`WeVBbyB+frxZH0- diff --git a/lib/ts3phpframework/images/flags/cs.png b/lib/ts3phpframework/images/flags/cs.png deleted file mode 100644 index 8254790ca72f98d9e79d94bdfcb8839b1fd434ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 439 zcmV;o0Z9IdP)|s3jQ%L{DG0k=ogG+0SLgMnA-pV!aytqt1(q3VU5g2cTadE%W~lnu`}m; z-504zOD10s2K8+~RqF^K7O;8$o;>*sR0>r0`!|sM`x~eNg#P~i_4n8BzrTI~MgGdl z@-i@d0|+1%Q&SyHO(9WHu7Cgk{{@--A8b6x2B1zb1BygNIks=N00WJ{7y^0)%zz1kWJN^&bany+5X-;o*O`wU`+x5q12BMq=+`e0f-vAB ze||Ik`OBc90(3J#0I>iAmFf2%21!Yv97q%>_xm>^i2a8FLV}HlAfRG^0AlbRVNjfdgKH->)<41fMG{Q1Z53yA)}NHF>VM86o=*Z=~EMTLRklg;&|8vY-+ zh5rBh|L@=bKM?ZoKOp1JpMQV<{rmmr|L=eQfFkpA_5cJB<7Wm2?&_*f&z|!oCH%Iq zVPN&@1^xa7gnxhi`TP6#zh6KNfByZH;9_972M|CY z4S#m*VEXjw_teQhfB)LctFzlGTKpda#8eRa1F`|=V+j!s1_l{`0AhU0z`&K2_5c3; z?|=UACdB;@3Hy%?Ffai9!1(6P8-M@;JL%7#4}bn}Wu*W1^8Nqk|9@zxfJk8Yg2Rge z5=!5G`~e6c79IwMkAMHSMfCl8%kXF6O^EHl82Alg`~}6s-@pI={`>#;Kf}J}IRF8~ zc$$I1RCFdZQi0L={}0epF!T#d{sWT?V3G+SzyRi{Q|!NXWpDrh002ovPDHLkV1m+z B7Bv6> diff --git a/lib/ts3phpframework/images/flags/cv.png b/lib/ts3phpframework/images/flags/cv.png deleted file mode 100644 index a63f7eaf63c028615b2ded5878b5e14a7dbe962f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 529 zcmV+s0`C2ZP)*82p^=00=`tlmIeOf&y&dk@6oT z&CV8YCOfMzZ7b-;WHc4ffO0*K`UGc#9pHKW{n=1`s=Y4`sB0UGuD|F2(+4xFrs{6A+r|Fh*S$P>SRGs(%l z+O-QHfEa)O{tdAK=ovi517(5A-n@AO5I`)f0sl(Vm><0RZzq2;(QtLuuFT6X6;y@p zb-8u)9gSFj-3}5^z@SqUX4qfA01!aT3<}j|#!Osn3@^V(zxysO&hx#~ZN`f)vS*$d zpLlA?$HBnM&cM&k$j1o^^oKjY0t65vgZ)>ehy*ei5K#*ZyWju7F%Ll?01#jRixNU5 T4U6zw00000NkvXXu0mjf>cZT~ diff --git a/lib/ts3phpframework/images/flags/cw.png b/lib/ts3phpframework/images/flags/cw.png deleted file mode 100644 index 2a0a66c6ca1309a6c038e8ae7b5298436e724545..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jit;^O978H@C8bk__DKk=Al2=8m8y(7udqSgz=nZdngE8~((i;}=uD!e{CDohOw%nTuSm3}-ZQa1ux&EVUz~~Q*L}q{yKmai^Fs!d`Rbj9@@=xl~KZbvQ|NZ^*|L@=bfBpc` zKOp-38^rz{DEepVv)`L`Yyt=%76t}3hHqR?<~aN{I`!9n&u`}MKs~?z|Ni|Cihlk3 z1w?Q7fI4M?HUI<=3&<7!82Y{{Q;@?^mDN?|=V) z{r~^ll=rtu5CcE}F#**BRkyY(adR>Mc_H{~T5^XRV~oVFSgBv#s=t2z{grn0SJIVV z|Ni~D^5u8)5(a<(0%_pmV<{@S{pr)+Nt0E6|KyV7{&xHKulY}Z0S*2Ic2cIyuhSoY z&3*a@=p=vu0%~ALNs$10lZEA9e*W!WzkWV{%9A7hYlh}ewm<)V{rd@2{rBIm&Idr} z{RV0P2mmnv&i?}d08{q%2kh+oUtbt0DGA2L@2{yn^Xv%Q%_4hjZ2Q{KfBuh*0fWjOcoPYi>{Qk`ejtlm`TPy!Q@c0|K1n4Ay00P>u ul!4(JQe+}W>@P40kp+Sq42=5$0t^6?P(4CrvcmZQ0000s1`2Y9I{~ve$KWO@Yukru?KTxgz{s9CK3*7Y} zZC_6Qf4TJkuQ&gHzW)Di+kXz$|9k=eg(Cm|XMz~|=g%L20Ahjo4`KiVr|y5|U;qEV z`p@?NKb!P_9;^R?@o<+hfSm*oKp+h;f&YIQ*bg)L>I;A4WVP82*P-nR{;Wu@%{Vvyu7@~4txIf`R>OD+-01E zIfRil07L2S-Mat*#Q65@TRuKMWMi;}EJy%|ff@h;2;_%%@7_UT@edf{0+7H22rvMY Ws9gjvbyTka0000? z0048MLcfb{@Lpld*gfdL?Z zSQvhRtN^J#x6%GQNHxSfxHgc;AD{-1tAIKH0tl!9q}uD*5!1Kl8Kk6va!f$;fJ%WL z`2Cv^NdEc54D$xi27mx!VfgXqT8ME7!~2)OPy-`SXu#NiAkhzFFflLy1Q-A_8F>@M S6G{sJ0000h<6BFn%a z@b8~2SoNP@zd$;E{sbbRuHQd?{QCI=sNwhbA3*&Qe}GP900=;09NYi^fU@pUdVa9*13;+Sd!tjgXKhXQEMobL97(p6<{RLvMGBN!7 j!N9=G@a-1^K!5=NcXWu!7_DDe00000NkvXXu0mjfeQx^H diff --git a/lib/ts3phpframework/images/flags/dj.png b/lib/ts3phpframework/images/flags/dj.png deleted file mode 100644 index 582af364f8a9cb680628beae33cc9a2dbe0559f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 572 zcmV-C0>k}@P);we;9uK`S<6~zaM{qBL9B<0yBR7V`E_e2q4D) z|Nnpa!Ep64!{fLA8NdLj;oraifB*mg`;Xx-kn#6Fhzn-q&in!pKrBENJRA&WD*ySo z7*5@0`26EP69WTC_22)0z>5C-g{l_hVFa245I`UeKudt6h7^Mc@BgDW81BCO4-x~L z`sXhc{R3+I%fRsKA3y*x{R6rHsA1>M|6jifb2E4w{z{xB{`~z5CPC;Y7bk|9<`c2PXgjR$^CT@Hzz$KrBEfF#?VC z^aSdB^z+g5SJMxCJOGqNsQwQkfr0#&=?~CJ009Kjz|71H^!MIRd#Ajb^76;aUyQ$y z%m(TN#spBq-#`C>zGeUjAdrR+|30kwu=eoBL!3-pGMq9%bs!`E|ACMovw

4;Zk2 z8GbPU1Q5%#7t@Nb6*GKbU;u{yA29j{CVzn$|6qa)V3LCYAiw~8(_SNKujRx50000< KMNUMnLSTY(1rd4x diff --git a/lib/ts3phpframework/images/flags/dk.png b/lib/ts3phpframework/images/flags/dk.png deleted file mode 100644 index e2993d3c59ae78855f777c158a6aae6c1fb5c843..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 495 zcmVh!ZNvLM`<}kPiIA3?K?Zl!VJuS0ABN12uI2v;s z000mK68GQM4oDR3?|C6;zBc4LR82Q1eETXSa+3nD0Ad8%4|Ml`Fn}2U{~ypshW{9V zk%{T!hYtV&#KHiVV*o?2zW>+&Bgm+K00G4EikX==E9>w5`yf~S`o*<00G4K6dZ++hy)_Bw{QPEdi2K7 l5H1Kw2asrHVqgFWFaQRwS@oh;XP^K8002ovPDHLkV1foV*8Tth diff --git a/lib/ts3phpframework/images/flags/dm.png b/lib/ts3phpframework/images/flags/dm.png deleted file mode 100644 index 5fbffcba3cb0f20016c9717614127b89db4c9664..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 620 zcmV-y0+aoTP)yt}{r~U(pZ|aU z{rk@#!dhJXj+vP`D&$&!2yPR?Jud5I`&tqo00z_V3?cpb$_)%#~li z5Bw?p&G@T5&5h~tB<;UIJ-`3_mgbQL+5iwhOdtm^{QZlh+Tg>NcGo{qR#UR9ewx4g zlzHy^uRp(j{rmOj?;oHBfB*n70M7pb{ow!s5r+W$=Kufw0RQ~_o$a1N^GPoTT-yiw z&XGVBSbe$r0&xrf|M~#~9P-zx0st`p&i?@b004Y@cH`sX`~3X;`}>j`1PlZ1WGkKd zF1~FN+w&9T}cJeJULy4V8r?0tNHM6WN&<2126ppbC05A-~q$vMCOd&N)3^rn&3WaiZo>@dB zxpL5=L>h@#UjVT%{Q39iA58Ths0J3s|NohoLF&Lt!8(8c18V>XAjZFc|1vT%{s#lF z^Kb%2CZ>-cJ^%y|<6Q;@;r#qR4;}z*|Nr|B$h_ab1b6QI%fu2>dIV_O?>~RRu82tM4=f|&Ke}8;oX5+eBw}y?G6)5=s|Nnnr@aNATAPEpaEN{Mj=m^OD z&%p5S|G&Tg{{H#<7bL;LEGj9<&cFmz{_j5mJbLs9Ab?m{m{|TZ{D1lB9Z2clKfnI{ z`ThHs^2c9)q;CF`l>Eoa3N#g>nv07INCE^93jWH3lKe}28-VENu!{qxMpm&svFOiawo%#4hT5U&FS z5Yzu(KY%Xz`RDh~-yl6N|NT~b@qz9A2lm1$Hf43G`D-AmnZXVNY5)izCWas1fbRMA z8?52ykLBVV-&q+tkKFpbbOC=r`2SzOfQo=l0_p*hfB*gk2q2IKpzD7Eo%H+Hk6%A8 za57|Q3rv;f;d1r)FDv_xg9F*eKs^8f#KQ37)2~0jMR){${rwHH2k3S7pO3`Z{#jf7 z{|`16Y&=9YkOT-IMh0&|hF9+yelRe6V}O#tcxPkSx96}BCoe=1&?OKCkOT-Y05IoG U$(*n^qyPW_07*qoM6N<$f?|9Y@c;k- diff --git a/lib/ts3phpframework/images/flags/ec.png b/lib/ts3phpframework/images/flags/ec.png deleted file mode 100644 index 0caa0b1e785295d003869330fc4e073dce07e7f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 500 zcmV1sCzZm}g`N!}J$oTi?|G$4gL7*^D3`7C}Kmf5Y{CmeN)&f@km*M|^ zrvE_l-~a!AA&BAspa1{=fXIJ9!9O2vbOQts3j+fX{b%^|8m0my0Yd-4N`WN9@BjaR z=no^SIM8~400P%s(0a|A0FHhM?*o#se9Q zEZ;b|7ytr@MWm#zEz$bb`!9d~{{Q>$@1MW_!07MqKOpw+zkh)g(B$8L|49h*Ov!x= z5I`*NZ%IAX?Fbu$UUAQCA3`wxix_2=I& zAouq_SzðCcuS!~%52Kai0?gF&VORsRAR2~rJG2PFT1^!)w@)C_d-AAkU2Vc75Z z*R<@y`9z1vevIh)-p7{p`5C+7f|6l;f1_&?! X)GmJPc-xs)00000NkvXXu0mjfGFPrC diff --git a/lib/ts3phpframework/images/flags/eg.png b/lib/ts3phpframework/images/flags/eg.png deleted file mode 100644 index 8a3f7a10b5757b006948ea4436fb242d02dc9a4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 465 zcmV;?0WSWDP)LAHVtk{r`=k{y)(2e*gi*sIRYISXlV_^=qKp{(!;n-+xj9 zUjemETFMXP0$m6sfwJP_;%#kh009JYeOg-Dy?gh5gTXH_fG|KLm<2Qhs6|CZ<>JMQ z009IFR-loRl9E6vpeV=!FaTTi8)D~Q7yv2;2q2OXK!5=N{?|@pNV(X=00000NkvXX Hu0mjfG@sA` diff --git a/lib/ts3phpframework/images/flags/eh.png b/lib/ts3phpframework/images/flags/eh.png deleted file mode 100644 index 90a1195b47a6f12c70d06cb0bd0e4ea88d7bfb03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 zcmV`hKmn*~pz%QT=MPXRKmaj;?1ifa0xhloNlE|L zuK&--1mwx?-uoV+`qwW8u#*4+i1F_GyFwg7fByafIr{%Uh)$p>Ae%w(|Nq~=m~|`# z{`_H7QhIal96$iEC^sml1*F~kc<(nb4FCQ91q_kDz!3TkBLDsd`Sky<|4qNomi`s~ z`xoeVfB<3v8uI)9A4wibp!A=AfB%5B0nwj-e?TNKsQ>@@`|oeijK3Q@{{o!^5I~F! y*$fQd7#Mzm(H|HCnf(WhfND7yc3x%x2rvM-AWsdQI)rrq0000&(jx%j7OGE_~DVuFcQkgj@33fJv($pjj zgoNxWFM>pG#K4X+%S_Ys!f>f$mib36%ekHNec$;y5njB{!+Y`YzVGwA&4mTVh%ikU z03gD2Hn&LPeNu%hDG7PUvzrphs|^(-as$IIo1LmPya%Hc0Qn*6qc4XX3oKoa+Z)_XBQk8 znPA)XelBh#6J<)fj|w>7X+~Yun^@Bp4$+N z6L8rb{%QnJN{fql*fJH1L*2YjUlB~CXS&&LY)1V3h&68|x1_5-(4l3HUgs~3JvLXI z$_D=zL{dTnq9RK`-w~w|sCYqqA;@OoAE0!{9Gi+cF%zA>5*8OAiXWs z!A~!@Tb_6WJ;mn(q~>CYJ~Oq(|Mc`miY)G1d$)?S_lf*=dz3nd-8+hwz5w#U=!7L- z+Ve0W8Werm#o=KvYxRVVNtM9!poHk%m;Y{gxKdXC|Y{ fc0^aUlspXz7vm>S7OoCUZUIwXLGJ6E%Z+~lY(hhH diff --git a/lib/ts3phpframework/images/flags/es.png b/lib/ts3phpframework/images/flags/es.png deleted file mode 100644 index c2de2d7111e3cb59cf6511dd2ab045e824bdb43e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 469 zcmV;`0V@89P)@|4`Xj5kLT%`al?B=W5I`&pe;NKW0^Ri&h`xRJ_x;0v zUa?=y?0^3M|NZ~}FE9c#{{3cP{Qd6}13&;Vf!z&M{pZWqKYu4MFm$tgedF}w=P#IQ z7-9gT-$11R0mKA$(qEu4%ok$*y!^wMRm*x;`R7|k6yu?K{s8?55I{^|9{?Tjhec2I zv+6&FhFWG_BbNVc|Ns94tNRJp!0`V!Py;{!F#$2enB#XZaohg-5%Tlk#oa&nzQW9g zl0Y{D4gK?n0U&@Fe=;yIr=|V7caH%YEYL84k`Tt9-wc2LGODP&y?7BIfLMT@X8Qey zK~fSFpuiXa$^kk7RCwBA zWQbH``0|MX0{;DB`1Ob3-!Fz=zZw28fY1*HhF@R=VQ?@21P}|ur+3w` z_wT=dfByab`{x&s{PXYspTB>919^Y{{Qd`I{N9v10U&@_7=ExZ{APUe{`KE~Al1MB z{rb!Jhml3<_uqeCzux)%bv7|NkFAvw@aK@N+YWG5`bsF#yj00sZ{|0ReUZ0OJ4u`~d&_lgxzd z_7grGtKje;)ax=32IqJ>VE_O6|Nr{|0Uz@6!2*a0?AgCSJ_s@V{`!jztXlEUzkg2h zOW%AK0ILQg2A~)NKmdU>0L=y=29PKt(~s@sMWK)O87MU|4G0ImPt*+y7s`{{I1L_{;G9FVHyv z0R+;(^!pEkq$JpwzYKqVGyVRp{reTr#sB4{{{Q&{G@Ah!GGGK$3=lw!Ux87Egcwk{ eXi`7`5MTfy3O%OUuKb?>0000FP2AE)Ir2{}>qlLBSs|`Qg(SfB<4)VqlOE;Q=cD|Nnn$ zna02W|Nj1E&`=Tpav_4q;M$#E00G4E4{SI@`q`VGKvVzz{r4XmU}R+c_2(Zz0I~c7 zs`v*r?Dty(;z&PFFXX zRA5t=4x{1SIibD)Vqy6A2V^D4P_SySA|L?j2ip1XFA)9%V~_%1r~w2J3=}{2Oiu1 f7(RXZ0uW#T>&I!FfdIJb00000NkvXXu0mjfj-u42 diff --git a/lib/ts3phpframework/images/flags/fj.png b/lib/ts3phpframework/images/flags/fj.png deleted file mode 100644 index cee998892eb316c3293ef2d52afec9218bdbbc03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcmV-o0-gPdP)2C05Lr?a%1G+Sb3M_ z-f!*)-&mJ@lxC7weD@!u;s2li|9<}wjr{Zf&o8mqKR`Cn4*&rGF#yj01QaSLwCD}R z0w(ww8v*|PzTN}jB`Pj8{QK|!{{8;|gOCLd|L9jy6{oELG6Dcq@B)aDq496GGsCmb z5T7wXTnzN$?|=Wl{r{i6vr6{G)xV#={AXc)t!L+QBoiQjSb+Zc`=1dU2n>I~p8E|B z6OfY_{`1$ji1Pn`9_T5yZrhJfj0}g~00a;V(9A!7nZZWFG{8az7^c++|9dI@cmDl* z!Nvb)UorrL86bdIfbsI1fk}{;;V;BV|AE?oY(}v2K-{x07*6Kx`SfB<4-V2A|A=r2_C101z~ iU~vp#0R6xN5MThlzdwv9U#bcK0000}CO1*!he@c;k+ zfB*mg{rg{#hxPwIh8G{d0|o#7{Raep|AEAFCm#U_AQp((@4x;AD*Xo({rB(3@4q1y z(m>63@(hzyJPYWMEi%>@iRTXyxzU zAo>qT2S^W413&<={Q1WKlmMyz`(Hzv@8AD_R~~+N^7b200Z@m&0zc4{Q@7rNwftxJ z^$Q??fEu9g1Db8CAq;fMkDq@pJa`8*&sI~^TtyHla^%`8uswf)HUI<=3()%@Pl0^! zf8Ui?K|l%XeRX{Qd(n@juAHz(D*15I`UefB!>$cK-hRUqIf!|Kj}Y zKt+#Ue>r^ZHOMRf{y`i940V72V*2%m0pg)Q5O4ka4>U8*PAAEH2(%ZZ;ol#C0AiF(UW*)& q3=s4Oj6m#vP&UxAe?ZIt5MTgFMVEBke8_SD0000BE0lK=nzFYgc)d0A2*B+AFf z2joHok-@WP&j1351!6Wt`q9fjf1W;g`1ALFY=DuG5oiNI0I|ST{|2JJ|Ni~?`|A$_ zRt*pr0t5gt0M7pe4IJopi4@}M{rvp?{Qds``}+I+|3-D|`uqR;{Qmm<|NHy?`uqO- z{Qn;q1i_Qs0*LV@1A}N|@t-FT{{IC^{`vn0sPGp^)o&2vABgb_!eEtCyu9%!Kmf6* zGhfda5_|CT&#%8A#S0%rhKer*8VNG{57cZ3sU*g7is3Rq0I|G(Bf-nd3vr@r@vHy8 ze*OIQ@9-oMOb-A(eJ@7=Ab?mP;SCW2x*O<#U%#>Y7zqCS`2!F@APw*!ml9!S{vjhP z$_zA&0R;fLP(1(v#Q5^%OL#2G%0Af7VC%@R_vTF*lgG%);U`26kn-@hOg zU%!6+4+cOs(0HIde9xZz`}Onxub&LUB0x(30+2WcIRJn#2ut|?gWYu1Cf+!-K%B8# zdf?1WA}#uZ8oj7u>$I1i0Al&`=O0k%-@icgAIJnM0xA6maSq6BK-ECw|NZ*S`0Lj% z1_pot6puj;05Ax`F!=umqj7^frO?t|3^&I1kxUq9yECc+jQpY84SWH_0#pxl$?v~F z@*hy-KN0|X07U)z`4{NpU%#2aHUI<=%a31wK(7Du52Oc(|3O^?R1IN+RRjI-n*kVB z3=9AP#PZ|EACPLGJ%9cJNh|>9B%spYzZw7h1%?tp0I_@ndg9MNE>313@6R75NcceF zkr51-#U+7;F#`Sf7i0rK0I_`g_NQ&Zk)EZ(2O=d>QH$KN3zEi7S9u{+2K>GX4ds`2QcM z=+A$K-~a!^(JwH9Fn%*K{{Cdb01!YdV9)*qi~a#?`wdg{8%Z^Y!NB>w;@|&31~6!UgVU(k2*|8J(R-+sudaynhucHbwAMTnor{mwqO^w7JHzaBsT z{O^B8RYf5+LvDs&KmRKVd78=o{`1#HTiEo_OolaGleS)G+IQ#sUI`b*pv<`1zCJ=H0jd{{2S>p`ri%{LsXJ%FbMS z$#S`6f|?OG!^Jxczkf6Q`UNF{l0Sd`ad7zm>({^EzyAS6{{CgrkluOb3l1A>ZU2~A zK+FZ=zkmP!`TOVhpFbzBzFaPmD2$N3;+$pK?>zdet`f0002ovPDHLkV1gy;I?Vt8 diff --git a/lib/ts3phpframework/images/flags/gd.png b/lib/ts3phpframework/images/flags/gd.png deleted file mode 100644 index 9ab57f5489bb9ebb6450cb27f4efe0cfb466144e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 637 zcmV-@0)qXCP)@|2i2MUNJEAGBA`g{QJZ3ub1IpEW7h{~Z4K zJ3#Qa=Q1XS-;5h0el2+U>(Te$zyAID&HDTIKad810Ad2W{jW5`@9y)AKr^5J{4Kqa z;cw*UKQW)B)-pW&@%z{RUqB7N{{H&&_Ycr?fB*vd;rG8kGw%JlqX`uK!_D~nn&&T_ z*-Q+-7;nUX=6mt$`7e;3-;BTi{QC{m01!YRC;j>JdmqEEKMa4Icz%Tm{+4F_^}h({ z_1{sye%WyRp84|E^4Gur0Kxx1e;6150*D2Oe>41%=Kmef^V^IA7&yOx!2%AYU;o*D z%dq`!;`!w)_PhDb-(PS30!;@9Adn3rpZ_$9NHVegX88Y?;V;N+#{WPzFy?-P;*ar< zJ?CFrnZE^h{{CWM00h;Fvzl@K2fHp9I6dqaaxb00=Mu XLcuQ~?TP?t00000NkvXXu0mjf`7udf diff --git a/lib/ts3phpframework/images/flags/ge.png b/lib/ts3phpframework/images/flags/ge.png deleted file mode 100644 index 728d97078df1d07241ae605dff2f2cac463be72e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 594 zcmV-Y0^8x|9^h-OG^F+g7@$L?BC01YQ`Wbb?43;K=s|G$6#bNnb!1Cx>Qe>QfY2m>?Izi&U8 z1o&Rm*8l_%%a6%3nS?}u4*37)&;Q?l7=Q-<`}?1Z>;KQLY|KmGQ@ZWEch0Jnt zUmm{%2p|@g=ujpTGX@n^21dqzKYxO4`1a@2NuYivJ4XgKw*UYBFf%g!{qd7YP>5~& zE`R_4F#yj00OjT7{QUg;`}^~|xBB|}`T6Q!vcs262Lz;t$n|1+qbnVARhhy8{z5C(*C%JTg?tEV3%;s64O@&5h$(1-*>2%Ak`A87BFlP7^( gh&l)WvH=1N0MfQja}g1cO8@`>07*qoM6N<$g4hNuZ2$lO diff --git a/lib/ts3phpframework/images/flags/gf.png b/lib/ts3phpframework/images/flags/gf.png deleted file mode 100644 index 8332c4ec23c853944c29b02d7b32a88033f48a71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 545 zcmV++0^a?JP)lgG%);U`26kn-@hOg zU%!6+4+cOs(0HIde9xZz`}Onxub&LUB0x(30+2WcIRJn#2ut|?gWYu1Cf+!-K%B8# zdf?1WA}#uZ8oj7u>$I1i0Al&`=O0k%-@icgAIJnM0xA6maSq6BK-ECw|NZ*S`0Lj% z1_pot6puj;05Ax`F!=umqj7^frO?t|3^&I1kxUq9yECc+jQpY84SWH_0#pxl$?v~F z@*hy-KN0|X07U)z`4{NpU%#2aHUI<=%a31wK(7Du52Oc(|3O^?R1IN+RRjI-n*kVB z3=9AP#PZ|EACPLGJ%9cJNh|>9B%spYzZw7h1%?tp0I_@ndg9MNE>313@6R75NcceF zkr51-#U+7;F#`Sf7i0rK0I_`g_NQ&Z{Ouh|k{s>tFQ`m@LnIf;Cf*`&?P1`-3%bT6cx$WEgd9G6kVgR==LoAR6di2*BPGS}KaKtENp#5NN9@rPcFv`RCwBA z{Lg>@|4`Xj5kLT%`al?B=W5I`(ov;U*021*0XgD3^5{teN< z@cTDV13&-@;@|`T5QYI@3O)ok?1DO<2trehc#kXh!0Z4iC6of!=I9L4Jz5Qk(jP`l zJOKo8(qFLXAF#IH8`u5XwDI@PAHNy@|4L4RsD^0x1N0+605O4m05bkR14QCiMDQ;; z>0h$aKjWi;+@CNFzZm}i25JBZAQt8_hOB_!_dovn^Y72^zrTL{{r&6TuiuWpfB*e$ zwD}j1{Ph<^0%eu?|D0`P00`k|9}4iHT+`$2p~p=WCoxfpgkZGj{YEt g{DC2GLI4Ob02tU}a;hkw5&!@I07*qoM6N<$g4!w08~^|S diff --git a/lib/ts3phpframework/images/flags/gi.png b/lib/ts3phpframework/images/flags/gi.png deleted file mode 100644 index e76797f62fedcbfca8c83c51951680d6a6e9081f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 463 zcmV;=0WkiFP)VoB37QQ+R{;bN6GSUi z+kb{HA3p-oUOth}-@kwP{0U71P%%INK{Y@H82)oDp3V0Dt?T`39Pi$;RTl%zL?{P4 z2_S%&kW~Z0x6qjPzkeV9`s>}VU!Q7P|1&Wm)PrpR2q2b!5Hle5FfeebsWZ)5spT9vc*+3O2}Iw&|Nr{sqx*C2&8&?7c>c4n{QvVC zD9-TjFQbI?+i42`0*K|`>)%Y*uQL4o{r~rGhChE9{`~$Pz`@Ka$@uLpb; diff --git a/lib/ts3phpframework/images/flags/gl.png b/lib/ts3phpframework/images/flags/gl.png deleted file mode 100644 index ef12a73bf9628ff5a67b81bd980d9c5d2b2c0f05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 470 zcmV;{0V)28P)J{teTOL@z0+>00G1VRSiT77W_YWkm2*^|KGm- zfAHXcOY8ruSJ7+$Itd_vn4oTd_U!+mLkz$F{Qvdq|L@-*^6S_C%a&nk00990)`(*=-xesBS%qG0|gf?f~#iu^9N|j9|i`10Ac}ZUz>% diff --git a/lib/ts3phpframework/images/flags/gm.png b/lib/ts3phpframework/images/flags/gm.png deleted file mode 100644 index 0720b667aff506d7892c5c301af04e6bbf932751..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 493 zcmVwRhhvIeu00_fCKU~B)yH$s9sXS^B!W{?M(W&}hPbMwO z;*cg65E@7haJ!!XVgYOW|Le(9kkY?@fpY);{sqc`6amR!K*q2CzkUI^Y_hUI(*XjA zMdSH%VNp?r|Ns620Z1T|}fB<6Q zlw#oF`Oo_sVk+2%KTsoq3?TP6gz@)3Ki_`_=6?VI#CZSdeQ9y&f57m8xf%uh13`xW zAjrhTbmsgSfB<4-$Y)3kNW1sx-tWJ^f#}!YUqA$5fJva>FJQR-`S({vK;>fVMSuWe z0mcW=Ig;FxKxv@ppTFP`1*!N0BL9M&0|dYz`1hCL7Xv^5F*2kxF#KQuvOqEU3km&! jiTr^fV1zR<00bBS-TrJ5MX@2w00000NkvXXu0mjfGz`_@ diff --git a/lib/ts3phpframework/images/flags/gn.png b/lib/ts3phpframework/images/flags/gn.png deleted file mode 100644 index ea660b01faefde01ad2527a6abcf7d1a5c1b0526..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 480 zcmV<60U!Q}P)@|A6>41A`El{SSoRd}EL3@|NdrR`1}9=ZwUJP z@AvHwzkdDu1yn7|BMY<#Ab?oFX8(t({tZ$6>;L~hU=2XVuU~(E|N0Bk07O6y00G1T zbT=bV^`Afg|NLS2{ReI~M8m&-NE-fuGynt;*hzmtW+Q3%1=j#1fvO=I{`~y|)Bq4b zU?=?r84r{KY4``%041R|`~%zYhXEjfz)k`h|LYgXRlk0r+3@c_)IERx{rUUv4^RU@ z0D&|xgN*;p0Mzyy>QQ8EKn=iP{qyfH5CNS85I`UeOuzpyNJ@hA{P_#yFfjaPWc&?| zr{By>f0X$D{QV0G@4r9|{}=!Qi18~pg5ikaD#Jf9Xfy-Svu_Nh0nj)GNi#731Q-A_ W8E1tdJ(&;y0000P)fLk0D%}*I7ff3uKv?i+N*~ULWZ>4 zW5%k%a3T{@*`z6pma6eF$JtK+F@C*&o=d^t|Ns9GOCXH@*Z?CVuP#7nB5Y|1kmu|NQ^=?>FP0zrYX%2q2aZH;)P`n*#-K1r9WbfYOYN z??RUX1P~*`M}`*mir*mb{sxCVG>rbhqT(MY2L1y54rHu+wi6(L7#SX-$0bVa{(;3h egu%oB5MTiLH(5{VMZMqv0000u-`~Ig{`~p> z=MRwl_xtx>F!}G#@4vq{&D;bKKrBFA+{}CzK0Nsg1pog2{{I_D14*DX1pWH^3y6RW zSzcL&Zwvqd#Pa7K10w^wlkmIISh(4kI3GTJhN2$mzJLD! z0*D0|DC|s(0(}1j8UFtJ4HA_S5@P=M@9)2VV#30}-~k05FvNkXnV5ck`2-L^EDTKl zn1259n3DG7^QXUm{{H**3#f!E|`n6Mz6>fhdBj29g(UfB*aM-=Dw#|NaG$fByXc1LXhxFC@THKjjKQ05P&# zA9gbr+SsEBRPB^?1!&T?30hEBFhHFGv5AR^>DH}B00G4E=NHV45I6k$@0N4rAH*g9 z{zDN+_&*OP%Y{RC0Ro8e#fvv0A_7PTA~XKMG0?q08}8kE2oOLl>koag&}IJi^WT4% zN&g{c!yE%t3}J9_Fdy0V1t5S}4xV|TB*XjR%dfvcU;YDm6wdeu;Q~GU4JP)J`S$qz^!f=A3G?{>83*rF;63vB|NHv-`~3j>`uzF%_#GV;x3_Tu z05Jg0{{&$2KZ#9J4f5RdzRdzC6Ae5p=(o+T{uB7y^ZNSwN=h$cVmJ#62-nx+ob%l!TKAE1V~I16T$|E1+i#l`u&y!03t z7ytqQF#yj01Tv_Ick58z;rzG}_y7F-%)*RRAv1X@1^f8;`}+eA4+yBm#PKA>w6y_L zQ&a!|00ICp0M7peY0>I$KneW(?7rp&{QCm?`vUdU)NRiG`uYI-`}gbY@;Dai8vP{| z4h7uY=>Px#0*Hx$0pxvffc*LW3+PFp{}_J#0ty11^n2!vLjod>mX_Jy|Cz2{eHy3% zAb?mH7=HZ$2N_TWSP@V&gaITO7A`uvc=2f<_uIFxDk_pd4FCZI)bI_+mz3lOl7E0f z{^u`PGlT&Y`3GeD{rm6lUtS;y)Bq4bz=+dkVE6#Ehk@Y-82x6z3jhKP0OI&0DF;s+ Q-T(jq07*qoM6N<$f)`^cRsaA1 diff --git a/lib/ts3phpframework/images/flags/gt.png b/lib/ts3phpframework/images/flags/gt.png deleted file mode 100644 index c43a70d36424b66f1627216ad988cd23a4be9285..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 493 zcmV|9}7f|M~m>&%ghRD!%{(5DNnfNcHoNKp}=7 ze;EG#|IZ9j4hBF)cVB@t{Qmo2T96TF4?qC109^ty;2+Qi2B0xObN{1)Uw^{8{`KJ4gZ0H zP(J{D2s9NSfWR7{27t^!x8NVhN&g{E`Ueb#e*ggla?+pwj3Cv27=VUhwE^V&zaVoN z82$hR5DUYve}Dck14V%vK+Z)23?LgAK*7ZT@-zbjKmf4-BkT7+CNVw+pd~+kF)%WM zL>VCz0|PT7gS-eZm>Gd?16jcE4PH%g~!@=<9&!2x_@aEGW jS9>vVD)6R*AQp(xFW-Wt{{mJ2|NHk};Jc-)O#kPzME?5A`1{ZQ-#|To{!0im{$XGM z2p}eq*?*y`{{RjC%V7Pj<(}hvo^Z>=hrJ-xK=d0#0&M^~2_S%&fR6tAp8=>2$p8C? z0q7F5H=q9h`}OesIT^OczkdG%sRkpU6i@>|0I@Lq1-k@j0La}yZU2}V|JX_T{{Q!% z>EEtDfBydd!vuBJUq+w?fB<6o2X+#W53~WS;s2M<|9d72Yseq)`11cZJHs!aS-+wF z1}X*!ASNLG{ST%Ze}QTk7ytqY@{}>p)on&BOV)*xm;om>72$%sP!HhqD7ytr@1teTu4J7{m`^Wh2AGglm{~UiA z82u;s5_9PZ|FH1)~3de={)r1*?FgUtsi`kx>?C4?qC1 zfX)8@|LZe*d2K>lZN0{{I4*^b@QIr~;(tA5`a`e}Ddhy$ldQAPvkwr9kh3`~WiS7Zcc2 zh-#qDKOj^7{QC<;3||-k0tlpm>GvN7NlB2NKYyjTe{-?^h8PLd@aHekus?tQg2Ee! zfN=^CK#X6(5e!Gd)(i|h;JEn(j5jcXFhHq*fkB7?Aiw}&uW^ngBcx#f0000J&k9ol;AaCAG*Vvs6lsG2f+AJUecp&K4&zS7@MzJZZ+RCHJO2~-cn~)8*ZB# z%#~(Seaqctb3On>xdArM!+zLfe2=iS%3k1HK82I)yo62#|&;D2*%o~N(LQ$HrxFU=@<#wgQDty7s|5?>qxBTrc>UoBZ!}1le z#)a`Pq~$aEPO=D0fO80I7h5SSMqU=q48*j9Qb*%7#+Pi|ervSf?0bSFwKsAPn1FO| zKH_&kh#AJmvOUSnl~!1AmcaNJM5awz`0DF46>zWZuCh$z(7uBp0to4w2iu-uj zV9oc#M;CkJ!OT_8;~(;r&Cw`0K3r=(%@VWyiIA#;S}+n)^}q>|)QZ|IaYyyY!;frq z6mATysX~aM!z!n$rJ$=27fpoIr3iB{q|Gr32uDRa3PcNj==OQGHve|07^1DbtUgzuEQ=j%rDF diff --git a/lib/ts3phpframework/images/flags/hk.png b/lib/ts3phpframework/images/flags/hk.png deleted file mode 100644 index d5c380ca9d84d30674f05b95c2f645b500626c07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 527 zcmV+q0`UEbP)00;JD`K-EmLvOuK( z0R&e6?>|)a-@i;iz|8zVIqAQ;I)|_@BNM~FU%wy-s0ZjAfB<3vx(uZH&mV?Ae;64V zIcsYEzkmP#{)7J;N}0Ju0muUq%~ z^Jl0Zz)k`PASO^y0(FCg{s2v4J zf4+RlSW)rg;lp2_Kl2?q^5yYkpazCNzyJOD%k=jzP%%INf#Tuc?>~%^l1w0DfWH6z z1E^V4lvz;l%d1x`a&jQQ{ROE8h7C|LKmaj5WMKG(8n4KVKd5of#=rm&U;y%qJ?5>3 RVzdAN002ovPDHLkV1mTk^F06n diff --git a/lib/ts3phpframework/images/flags/hm.png b/lib/ts3phpframework/images/flags/hm.png deleted file mode 100644 index a01389a745d51e16b01a9dc0a707572564a17625..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 673 zcmV;S0$%-zP)>fJ3En$GhGS>sbE%%m3$AD)q?8M9y>88-}kR7#RKlk!P~Y_PLuF7~U~3`~nC7 zF#yj00ZUDdpLsm{7ajP|&HwoK0Usg|6%f4L_{`Mi{rvv-`ukf=Ed&Gs-sA7L!Q7*a zj{*QO0M7pb%?Sw^g@yy{>ihEY{`vU@3=8@G0rvO$i3mOL`~mv-`W+b$Mmr&io5dg< z5v!7q0*L95jt`TzK8Kd(Utv)OSp_aLv){6ccV+Z`{Q2+asKUU&aO3`Kpz6wW8wp`< z28M3{0mSqnB#A*-c*8%1=RD#sSOwMznKA3=e&iEzwo{cA=PgXK`2OQ}gqId83!|%* zA_Kz@fB*n70M7pdECCwp4H&@R`1|(w-}M5x*74i)0}%fAt;XafA{48))#>Z>?CD#}*e}Ret0tl$#*RMZ7}Jl7Z|M45`5*URzH9L z{rmSnPy;{!u>dsyO%meg+00000NkvXX Hu0mjfN{&}S diff --git a/lib/ts3phpframework/images/flags/hn.png b/lib/ts3phpframework/images/flags/hn.png deleted file mode 100644 index 96f838859fd2aed975f5f4134050fdbc0486ce1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 537 zcmV+!0_OdRP)yNpn^YtfB*U? zE6K^g@B<)#SlTBTcsfda`|@_0R#{e$UZ3l|Ic6l=B#}T zWCl5lg}RFY8S^$g{qgfJOdc2ve*glAv3c@IFK6|y-~NDH^$#cn3{a5k!L9^_5>O@B z$^W^zSlTD;0tg^R28Q0WdbfK|zW)9V43odV{`~*->+kR1AO=tbO#T4}-G3E1?u#4x z0Ro5x7#++k42m+GppXWk{}2W^;6Y*k7i(1vOT1`b$6{=&w9#5#oJ b00=Mu*}Zhb7k&Za00000NkvXXu0mjfKokPk diff --git a/lib/ts3phpframework/images/flags/hr.png b/lib/ts3phpframework/images/flags/hr.png deleted file mode 100644 index 696b515460ddb670acb7e9de4438aaf21fc5fb77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmV+n0`vWeP)@|4`Xj5kLU3fF!G{fyDoR{}_Q36Vv~H|Ns5{^Z)NZrr*Dqe*gae=g)r_`DNuw zfB*t(VEF(4$y0{Ee}M=nS{mB(NB;kxJOBSE{F_{n`2Y8>|G$0##TjK~fi?gH5EIz! z|8Uj6|NiY-l-<0|OxA@1MWlzkmOI;leLR z$De1;{4g{7^y$;LZ{NOt{rct07a;lk`E!5(f@%OM1_PkhC8`eE9egqWbga z&p;hdpFRZ$Adm)#>fe8W4*Ct02B|hR1*-n0rS<;(dx&bFRY1n$$BzL5h>;=uaC^Mc z(+@v?|NZ~x@4w%F|9yUZW7+yTpo@LH>e(bUfFghX{rmIxzpNnpimU?w0mQ=a>kp9s z8>AGffmuv7DrFgv!3yU7{`2q8f1ngFoPlxn4AoS-S!;e2821p2q{((sbfB+=MK@k8U5Cg$|VB~~? z2XKWZk_lAZtGhi{|56nPieMKY$Bq=4KgZ0muK;2JYWn}5;nka8K-GUCa!{rJenZIL z|9<}gF~mh#ftCOS5DU<%|Ns8~1)2?0{RgZLWF&|Ls)lL+iU2hL1Q5&LKMX(>AUTM^ zNU9+S#0FXN@8@rz^Zx+^5DWL07wmsTIe-5EX@IBzTJ`52%kO`z5F362$-h7b*KaNc zh6exv#P}EJiR%3Sk01R1^NZmZ(C**=fB*Xb3rzn04HN{CU^bJS()(Sf00M~R4FdxY z(0f3MKYtkh0!g5OAQFsz{e$TF`x|H}%fCO*7#IKo2o$W~FaxWA8VofRr202h8w1#j zz=!|{Ah3qte;CCj89_$={rBfLBSbS$5J>(7`GW}-*g)q41Q6q6a2)=FMdm+9l%onl dL?8elzyJ+{hsuy4pm6{I002ovPDHLkV1hP90PyYjz{{0J*12TXlP$`i71!VmC|LYf!%PK1iv=Z0I@Lq zVgLrRB#$I8Q2qeT`3KSlX8!?(3s3+U9e@9T1Mx3N13&;VGFUSJ^?=Y13Wr{r~&-|6d^ahvDC! z|G)qK`}^nrA0Ybu|2K$nd)6X=0AgWa1{?O`IRi-PU$8V7{r&w9sOb0ae<0Pr|Nr{M zEF}%J0U&@_82&N|Y=e#y>zg27mx!0Xgp5*S}vr z{r~fq0csvl>92pk!P<5VDfB!NI2#TFQ3lKnzfB%Al=06ZHfFW+c#KiRe{d<4_V)^&)A0s0pNIe5S)eu>r zF8~6F38(?TQZ#J<0R*xEXct5e0}KG|WIzExE=U%r7$AT^8h-rv@ecwRzz_$3Xaxu` Y0RLik?wUgPu>b%707*qoM6N<$f;0ZTz5oCK diff --git a/lib/ts3phpframework/images/flags/ie.png b/lib/ts3phpframework/images/flags/ie.png deleted file mode 100644 index 26baa31e182ddd14106e67de1ac092a7da8e4899..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 481 zcmV<70UrK|P)1Ab?mHSU}=WzCQi??=KL1`SXRBmG?g! zeExSVgb4YXfjasA0Ybs`#&c5^XvcLUqDM3{{9AP00d^^H2e48-+%sM)d02u=%hct8G!N( z3;+QH((o5-_OE}xfO;@2_y=+i*h!3FCjkTyNW*WSt$#tPfB*dj3@CIxKqoQ$2DuvO z1O^6x00KJ+r1UogVe!Ksu!etsL5P6?Ab?navG)7lA4zUWkT?GPWdcP410y3N0|YR! zFo-FE!v&-P=p=vuVq_>~VE6=zV^DnmVAx)=U5ZNz6vaS)0m(NHWW2-wfs+9Q00bBS XO2cxg3=*#z00000NkvXXu0mjf|9Z^l diff --git a/lib/ts3phpframework/images/flags/il.png b/lib/ts3phpframework/images/flags/il.png deleted file mode 100644 index 2ca772d0b79b255872cde2fb29060bbbbad950f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 431 zcmV;g0Z{&lP)WlqUuh`uiUU82D1+EBLb>EWz|Nj3k zj6%@>aVJ0ku|Ql5RsEk~{?`9D9{=ZO{V&1vKX2lHHJSgJ0SFC1p8y096I?Y|?05b{XcgblKTHZ zfByjpAQrd=h&?HOAa>`R|6Hv9XB30N3RxDY7$AV4en1PH(j<7uAT&Tc4G=&q@-F{c z8i9e$01Rv(35=ybe;NM%WdxES!M~uG0dj%y@b5pvikg1_0mOLw_HE>d#AF}?ph|!M Z0{|%qc@l5wel7q2002ovPDHLkV1m6PxaI%= diff --git a/lib/ts3phpframework/images/flags/im.png b/lib/ts3phpframework/images/flags/im.png deleted file mode 100644 index 7c028b64301d951ec084bb9d10ae4073af46b9fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!3HGD9`RZNDYhhUcNd2LAh=-f^2tCE&H|6f zVxTHv5N2eUHAey{$X?><>&kwIU5Z;q*vsHuEdv81qo<2wh{pNkJ4X+EnBT~BpvC)< zy|D1%cs{-+whao!`({ZQ6>x4c<~WgI_@~q~Jt6J)xetmYqZpxp(-_Pydm=e|h4MQ>V`!SheQBflqIx9~wOPaq_^2aF-Ux00G_5J(nH1W}^IvYRf()C%fvmO1KYTc8*w%maE{{%zpPH7~zuY^=Kcs(hW1H8- z)h6F{=85a$^Rm_w|Ke?reTcp}=SPMMyZpI(DGzMxIoC7xOj+i_aIwWJ!H?Od8W=td Mp00i_>zopr08{CeCjbBd diff --git a/lib/ts3phpframework/images/flags/in.png b/lib/ts3phpframework/images/flags/in.png deleted file mode 100644 index e4d7e81a98d705da8d7054e77e7d311805659678..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 503 zcmVl^KlW*80IEmzVa(K3*_6 zG7fg0I9Zj&0woGah`r_&Kwu3FK=xChQigwjfh>?7kc!_h@)sEWW@MKI+5iwhEdRtz z89B8WSj7JS|MwrL=l|b3uZ7Osk^B4auaUxSRgtG4v;Y11_x}$gi|9Y8?EnG9`1|i) zCPv2p|ADsrhuF4k`@Nr^zUpfTpS$xp!A}Wj4A3Yb2~_s}<0pUsVqyY2p8>1`g1&zJ zsVvR4Yya)fUw{4wtNss>0tLxGfB<5GmnRH!zxweH8<(Mq0N7e&^ba6_ z7#WHgIs!VLeti1p-=9B!fB*jb=l8$ge}LrQ-#`%%`S%Y9{re-sFSERHIY0ohF#KVF z2*K4Ml>Ykz*ZJq)UtlmW{9*tIAQm77@e!0?Mfa}mS!7%=x2KmY(S z0M7pbTSu9imq`K?75n7n_u%3MB_szB3#hl|A07@E6$<6-<>30S5egmg@cSkZL+Ix9 z0st`p&i@3O7{&wE8wU3C1oia^`T7CwI=ckcau@Q71iA1L?!*;{7^Nm*&$?GLJd|NjPb3=0E0KfCb4 z#nAu(05Jg0{{-+tQ26`)!^rI-{P_e371QGlF%9qW_x;Sb;QRdk{r*xJJ*zy?_rWgu z&$=$1lYjzR(%pFe+p|Ni$IOoG{eTR0XemVUia$~;LXXZeDO z0096o0M7peXKyl1N+90g@dyY5ARP|N&gc{s2^<#+#>?j*9u48*^A9U5-*(6(kqBPq zC^|QM0*Gbi#3NFYyicBf1{wyk;Wx-spzFb0kX0fvuWZ`CzyHEKd)}3G%ew&r05Jg0 z{{dZPvvzMc=Kqyj=IHYZ2nGGUe(f)J7ZwZK+v5TV s=!a5B6v9X#`iH^&14cjw13-WQ0BQ>oQ(TIK+W-In07*qoM6N<$f`&OQ@|4`Xj5kLT%`al?B=W5P+gNxB&nJfgpGfTOih;e`=>T z5jZ8;?_>v5xi(~iU^udv!6f5$jpNVh2O?$m1OPDr&i?@Y{r&#_{`vm=wBfh>{Qda+ z{Pz3$!R5rm=Ee2+`0e-d?)LGV)1LD5^!4@i=jZ1F2;wA$U5|F$_;B;f&rf1p(qbG! zCte(9VPa-y5lGpbZn4ZFhzcT9$vfdqmuG z@j$ZG>u9())mkwqmYHSd7eFi*FJ3%$?AX0~_kM%HFED^GKqQ#;=g)7T_f%9=fX)F3 zAdr)QMoCIaf{X{6{|BNG$o>N%f#5F;02KoS5XlH2zyJ$0KZ{``H1_}i002ovPDHLk FV1nFR>VE(L diff --git a/lib/ts3phpframework/images/flags/ir.png b/lib/ts3phpframework/images/flags/ir.png deleted file mode 100644 index c5fd136aee534ecb59914e336cad18d18ead2a4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmV+b0{{JqP)r;gUH{1e{Y(x2_S%2fSMQ?7@vH7`tSc=xS~J*|Ni>>`_JFszyAFKs{8d9NdA)L zm1AIH00;mv0M7pew_3Ln1`-ek5ajjb8VVZW^Whu|9pCfc910uY_2L}~8{YEX9t$4Z z@!Kj9D)d(L0*LYN-@lBEj6f&-|Nox>4F7-s`Ty{t|Ns8~x3>Pz!S){pfXY67`UDU_ zOc38f#US*GW&hv2{?Eqpf6;>f$N=n5fB<4bR}BO)G5?=F{eR-b|HMQT_5c3^H2?$< zb1geNgNn-kGiMln{`!CM;{TsNL8PAke-;*?JV+Z*eYOvhv$==KunT1sF?AKYlWZiGf7_{AKv_o8k9wMiBcC z1B3*kzkfmK*Ds)AfB<6r3XWMgVnF4hNdW;sfB^vU;z%SnI0)(h00004s{hykP}!$Xp8x`g@iqg4NJaUd z$B+Mm%>4cD_iu*Zzrl=O|9^qF|9<`Y547mdFIIVlOMCYL1Q5sui18rvfj0Ph3vJwt z)dnUeruXmP0|XEYv&@95W{1bGfWG{@sKWZ+FOVO6s`df7U=M&0& zKrFzJ{`2=AL>j0Rra@ocD)4hB}-f* zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrIztFq(O~IEGZ*N=lh=;=qSyMwWku z27eMOW_|f0uQeek^e_9g7KH|eq{JVG0^UaP2Jy4}|L^JL_3uCblfVD@mnS9t`~UCn z|MT(+KT|KOfz%~1cG~~^_2vEk{SFNQ?Cjg~|NsBWy<%2im{vp^YdeS=hk-Cyo6U`Hgs{l4FR(w#{P`G0;a3G2@YSmzI~fu(ZE1> L{an^LB{Ts58L6#6 diff --git a/lib/ts3phpframework/images/flags/je.png b/lib/ts3phpframework/images/flags/je.png deleted file mode 100644 index 5849880b2e24b41f0c2493fa056966a89221c3ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 471 zcmV;|0Vw{7P)&`<4h|q`rIrjv$UM3d({qX7E|Nqxg&2GgR|NsC0@5j%tl1lCgXua>7 z4N(cz@c;k+pBJt^G539>ZukA*=||mJPg>HxA3Xg?!{M=+&yRCg;K~^P|NqYb1OI>j z`OrG))4Y|OZng{zjNf-1;!Ow@tSw+KQG^SViWjK+4}4D{Sc9FI}SWlv3_D5 z@bl6QxH4EMO<8bXQ0rxE{@=Inksa{&-G`TP1@{EBK1`Yi)$se_ljq*?52TDfFW-pi zVhH%WV$%aD<7Zy6zaKnid}IdH(8MNz3m?&j7vpMhv*zs?-1g N002ovPDHLkV1hlX?SudT diff --git a/lib/ts3phpframework/images/flags/jm.png b/lib/ts3phpframework/images/flags/jm.png deleted file mode 100644 index 7be119e03d203695325568174b72522124bb2f12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 637 zcmV-@0)qXCP){QLU}0{l%6`#}@@_VD{9F|q;xF#yj01gpgWJ+A*m zGUYZW{T>4SpXmF{^Zon(`}_X;`}_MY3j1pm`Wy}V&B*(tydCWT00ICp0M7pd0000m zGd#J&@cQ@tG$8vu6a54J`qTCN{{H)06Z&u*`VIU0o2UAMn)~_v4c^|~0*D2u;qTwS zKYspMz5CDEtAAp>e+Mf5)@1$t_wR2Fu3uNK{_0!&`}CDxK-+|V{{|`s2p}dP{`2SW zZ!oxe=XdSY-}fK=Qse!l!T0O_!(X}WAk`4?=MOLh7ytr@32Xz9{pZ*3U(#Z~DiVIl zOa8j^;n%JAKjo!$j^Xni)Y$z6WB&k?3JlvV7}WR}00ImE Xyv9Bjb9W)}00000NkvXXu0mjf@Xt#6 diff --git a/lib/ts3phpframework/images/flags/jo.png b/lib/ts3phpframework/images/flags/jo.png deleted file mode 100644 index 11bd4972b6d5f134045d4e8ce134601ea9b5654f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 473 zcmV;~0Ve*5P)M00|Ni~>`!`VeZ#eh`f&K#;fdS|pfB*tJ>FU-06DIsWc#z@uumAs9{`&>~&q~MQB#;&cfB*tH z31sk|Jq+K!KjiuK-^&B5YLK~LCjkTy3s3{|pFco7yH$Tr@L>D>cm1y|D}MvS>F@7f ze}Db{_vg<)5c|)+zsmedM_Y~p1Q1BWd$vDo!X?isvq}Pk|KA^w>VH5L!1(y{_x~TD z9$-NK{r~sxzrPHB7ytr@v6F$JJdlAwh=Ji34E;f3{DCq4fk_4ifB*vkxQ1J~H9>i| P00000NkvXXu0mjf0T$ba diff --git a/lib/ts3phpframework/images/flags/jp.png b/lib/ts3phpframework/images/flags/jp.png deleted file mode 100644 index 325fbad3ffd3075a4a84d8d898ad26ef7d3e0d56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 420 zcmV;V0bBlwP)9whYk?f=!Q|Ns8||JN@lTD;`{R1ZWk|EGa3dAO8ObDh3E3Cb;oH_5X#1 z|NHy@|M?558b}5Q|Cf`4hZv9q2p|@?lb|{i68>{>{ol0lx`{mi O0000=G`P)0NEt6k^VGA)9E1hT9ocRoN>wSfaWv)?-raRm?)Slj<6Po6w} z{P+i;{`~nD6~!ec29@~tkBNo($fnHz0mS%{fq}QS{_m4#|Ns2?|K~SQUHy-* z`HU>AfB)8feAoK(-@hL}|Nr_0bQ_Dj+^xMk00K}f2RQ&hFc1JYLgN3=lsJ)M+p3uR zWC5ydAM*!ly4H1hsiEFvIU^1)HH_GYz!QMsIYt5i1c4ZMLC4DfztdU-q)WGxxg;|L zi3%uAJ2fm~N8&I2%AdL;`{4^9#;e!&D=C-&Lk8;9|NlO`c*HPy9@C${KeOWnB;`P2 zATRu9VP-jSWFD-S8kh{*zoh2aO#pT8A2W0o(w3 z|5bef!~)j#|KF3RAf-U``!@sYUq;#A42-}3UHtv;%kTfcfBpOQ3nmTE<|1vNq z0ns0zZx{dq2xP;5h!=kY&G_~A;V*`-zy9<8Vi5ZI|I4p`PkusG11$kMn1KNxfWUtE z{TpHc!>?a|&i!W8{>5bQ`~TnHf3N=fz5nHq%!z>% diff --git a/lib/ts3phpframework/images/flags/kh.png b/lib/ts3phpframework/images/flags/kh.png deleted file mode 100644 index 30f6bb1b9b6c5bf355f67a17531fa73beafa6639..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 549 zcmV+=0^0qFP)P;@arD~1pHxO_zPr1&>t9y%wPZrAQpyS3=Ms1K-T|%K*j%o>i_=z2W0&D^Y8ax zhQELQ{rLl7|Ns5_-|C4+00M}Gf#D0s|6k8u{RAokD*W^JKSaeZAp18+HBcQ8{rdA) zTAYJ{;SE3lu^j&CtN66?*W<_k{(=kvTJiVSPc{h&pyuy)ZZrJ(`}gOM|G$0#rP$=; zY#H_d1P~L*>3>1SGXDMzbOE=49-9EaM0J&9T`emwH;=g~P!Ocy*DnU30tNVGcpOKXK;IXGH`G*aB%Pig@_cF{AXeP^XnG~{rU5QfdL?ZSim;?VE{Sy z7c(ax6CWR+s|%BWAkauYPfsQR0VXz9sPSMM00M{!7+@fO0fqklmFn#S3Nf;>{s#gU z7DjgV{|pRrOO`MKef9?wUO?vn1P~(w!@{x_lZQ{f0d@UhVEX<0FF08K{sNMJKnNIa zzrX(mdR{@6d*A9+009Ja65pra?7SkZU^!3-{)PrTC`>`Y0b%_6|LHH#J`sQb0@|>a n0T_AEh(trkF%3aX009O7j5IT?Rho+J00000NkvXXu0mjf2r}#E diff --git a/lib/ts3phpframework/images/flags/ki.png b/lib/ts3phpframework/images/flags/ki.png deleted file mode 100644 index 2dcce4b33ffe1f40d490cb1a2e03efe22ea56155..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 656 zcmV;B0&o3^P)8t@U|NsC0_uv12fBrK4XN%za&+zB_ z{P)aXfBpaa=ii?{|9}7d|NHmt1seeZhy|?e|DWei8UFwK|L5=jKYtkh{P{kK2}m(L z`||tm?|;94|Ns5#-_IY+QnEm+00M{!r2OxHhJR4iK=k+TZ>A77)*#lue}Db^^$Tb= zko*TE|NI8J3LpSOb8Z9x2m%4nC$a{*Gqe90@enzQH`ta%tA$7d{Sv5iP&~x@8dMF~ z(;dfh&fyCHF#yj00oRR-9sTeJMNR(n^YxvS3U`G57YhIQc>VqR{rPSM@(uBDU=5F+ z{|5&5hj_*A{sI6o0M7pbe|x2IYDAmA_)R$v7XIy^!u#*~18PtP{r&xWnDPVw`hiji zey{rM^8J)$5m8%@0*JA9=57`qRaXnayHCFDJ@r1pR}vUfQ&&Fu_xE3Vu+-%{U$!58 zQy3!)avcufO?mzv0@a%gl z1HS+N7!IC&H?5`#AOHX{0M7pb00(zPR4BWp;5AJa{{8^XwcY>#`eSh{`1tyzm&^bF q{8L{tuE6I1;oe7AG|b!z0t^7P6ga05`yJ%~00001r;P)}L!W`0l>rF;|7So3KrTcC!ho;=0*Gbf0S0@;YBwbYEs=i=3_$ev|Np-X41fOr z{{tp}0~v7g%iT=?0mQ<{9!@# z-(SD~{`vL)_wRqdfBpaan?+XX#@15+0mRIp%kY{1qrJR?xs-YLhQhSVzk_f6;`sgh z57Tc3#$ODKzZsZ*F#y?2e^`Y0-&}tV5I|5HD)yDjz7nmS1pU~~aVF#A6wD&YtO00ImETIDprOD_2B P00000NkvXXu0mjfKOhx^ diff --git a/lib/ts3phpframework/images/flags/kn.png b/lib/ts3phpframework/images/flags/kn.png deleted file mode 100644 index febd5b486f3f90056637b23caa26d838fbadd7d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 604 zcmV-i0;BzjP)h(K@ANy8uaQvQ^_nWcs z*Z-GL)eL_?t_B7*Kmf7KbznHW;LqhtK<$TZ9ej=*TGLweOZn#S|EVB#AOzI#2dDw) z)4xDJ00a;t5ND<*{rU5ogY7p9)8EGU->gS|Gwk>cG!LX2Y%nmu8NlfEl`8-N#0ZOI q248)K1w0H4M?n#d6+r+%fB^s&Q!OA|2rzyC0000Cs@aq@DuRlQczuzDZ5@KTj2q4CTH~*`MftCON|DS>3-+w6c z9|(gO{~7-O`v>9vKX&5_Kmaj*WME|P@B8=S6~kYUnG7sU|G#_z>G}QV|KC3#^7rq5 ze}4b}^_xjb^7)+E00G1Tlwy4KiiwGVIVgltUY_yi&tI!o|Jl8p;n#15-@icU*KbCk z6Mz3^`1ON{fdL?ZnEnBs@%JyYzyH5mxBfr4|7*t%=AfYeY;6C2{Q{!DKY#uG1wwy- z+}}Xm3;+QH(!lWNFN3HElfM4XRjZk-tp4-xFo=l!{|(XrbkBdVP9XXJ&!0aG3;+Sd z1adCWtuJ2w-n@w=AmGpT?F`?)|9k%Y-_M^QML&N+RfBB+Dh3E3pdT0*fp#rf!j_o$ zUs8faP3>oG?f*A#7{O)(oeuE;(0C>wVqgFWAQqr4|9E)*J$m%5y#o|bz~KAxm4S=v zKP&4$usU!k0b}RSKS4oYgaHH)%c-;9wWL`3={r0|OreK!5=N4TMk7RCwBA z{P_JV0}}Z6?;n_iu%H+Q{s1vR05Jij`8c?M=-GouSI=K${m;n9!7aeW#m~(x$j!^i z%zXLG*~fS9it_V|2?zl-00a;V#NgMjUvJ&I^~3uQB4T37ii-d5-u?gQ&wmw_XD?o^ zUAsm=P*7M%NJdr`Xazt3fo%By|Nn;%AAbM-ZD?YwEG7BBxA%WR!T-FR|8><0Vxn$d zUT@yKdH&)BP#Mq$fB<3y`hl076R7Rgt5;mSyo`Gea7>-}|M%}Nf0%y${3VbO@hKwm zAWK?W z+TGp#<;$01Vv<1pdP-ancZ!Qkd3bmLHK?nrgX5I}Ab=R3zkQ1wk#LIP517FKVgLC9 eRt>}e0R{ktF&Q^6#MUGL0000@P)xg`upqGzh6Lx zERQVE2><~E((v!!|G%IA{@M07EI*V_ln=0RjjdN{oM|h)7EO z{{7?6U#34`ML_iD4-=RKMg|km5|FijfgS(|AV#2u+YAh13=HqUkqe1m1{eb(!T=Kl c0)PMm0G()MDW>>^I{*Lx07*qoM6N<$g4p`a`Tzg` diff --git a/lib/ts3phpframework/images/flags/ky.png b/lib/ts3phpframework/images/flags/ky.png deleted file mode 100644 index 15c5f8e4775b2b68e0360c1f4ff1f37e61611276..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 643 zcmV-}0(||6P)0{QUt82Kj15^L?rd`uqE`oNxjFF#yj0 z1e^fI2i-9Q(8&Vs@%;Dq2on+Z{QuwM00sm0@b~}!1OzrH#hk+X+Tt}E6bb+U_yPbi z0M7pcvI;2tA|wYPA^Z*x0300&EGqR875n@A_WS?(`uvdQq*oFTSt1&p=b-!h{Qv;{ z0st`p&i?}PGCBeX39IA)-~tZg`v#`;6$Tz2`uqI%`ThF(|NnA-^wR?L!uSAshx_~g z0000205Jg0{{tif814-hz}E2g`1#%M`@GEN)${-9=jr|Z1Nim(?*qH%B39iMC&AR2 z>ggNf+PVUWW##cF5^jI~{P}h24a1+`jKBZ?zJB$|uU|aB82|la`WF`1`0wBUe?VZ- zRnf8uXahh1u`n?Z4sYX?@pO{;x_8g;0tl$# z2T+})81L`j|Nel$KOpz_zrTNegN!(Tli}h6pb7teeq#K~3=Aa(fB<4-V9 d!wLWb3;+YKCC*ol*cJc)002ovPDHLkV1loTFLeL_ diff --git a/lib/ts3phpframework/images/flags/kz.png b/lib/ts3phpframework/images/flags/kz.png deleted file mode 100644 index 45a8c887424cff6eb0471f5a1535139b965e241e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmV-u0+;=XP)g01!ZoKn?Fz`<^k#?O_Q1 z`=8<8e}=z6_5c2{{QvRuAM+0emcRf01JR%V|9}7gKjGLHfB<4)U|@L0AiL;yFw=jq zasNSbGXHKG{NMlfpWxpAK41Q^gEaj6FV4=$@arEy05LIu!2gi{Gync$`1$|;-~a#q z|NCw7f0xa__4fbPn*ZDO{onuJ|3JnA^#F|o2q31v4F4ql-&_7K9cVD)|KCjiesKSP ztM&iLe}uy71TZ z|DRv){|H?Bqoe!x=x?wkfBu3(0w91`fMN3Vzue;gQUCt^|MZVr;{RRU{|DCmOS=6} z@%2BU5C8a_|1a6~&;1YB8$b;J0mKBvKpP_e^#OhS_CN2(f86)~DtrE)Yx94t!v9OT z|MTDe69TJd_zQH>zdry01PrBrQvYt3|7!q-C@@&>{!_XBPnqZ6E6@K61pYml`M2uu ze+NdW22lI}1Q5_kK)3wPV4bt}e=;a?{xkdrMUmL?|7pP3c>kYY0b~&4U$AjN34j1% zWLW#P{SRLy(>r)v0s|Y${(}_LK*N79FfcIy1Q-CnX{(%t#68R664G@6GIJN-*24NrwB3rW+v!ydOp^Ef6{n_)(btIFVjHa=pdp6)} zz^!@$h^2tpKUmc4)64h&|Ni?2LVth#{QKwk-@kwU{{Q=j;qSk{fBpc`pWlD@C4}l3 zHUR_xF#yj01d}3g9TFqw{rUX<|NZ>{`TG464+L38761SLpR(uO=J){s0Q&s>`~3bJ z6bIb^kphT`;m^O{e;I!LWBmP>@yDNkj7*H>@iN-VTtHNrD96Ue^ySz8pMMxZ=pRTg zKmaiT)&Bj@@b3@E4ZnZ>72sjw}n?8s2>T{qV)lKMV{%|NQ?241(YPff@h;hz00Cp!a_N2HF7% zr}y9gR8D)C;wJ_Sx5=xYz5MWpi4mv-=yjk&KmiL7K#aZ&_9^w5@1DH=3l15e)xUl~ z-0=7B?|)4HL4sh3f5LL21siGr0*GY=!$H*K#ZR;BJ~dv8zS`wDeeIR3;>1y|KC3hK=RLTAp0Mf zWcc&@%EC-|_DIyI;S5 zZoa(f#*3@};Q;9GfBygi2&4h78pxV*WHQhn|Nk-k{`>pa-{0-~I{v`b{|EZ(4?qC1 zz%@X;G0|`0)6dV-R;K{9rJ5v|%9;KB_nVP{8R7~c2@pVx*BKb3t8)H6dH@UxP=NgY z{qNULVEFv`^^@@rIK+N~gX`}f7I~!;+fM-m5DPFa{(t+%C?E(7W+q^;{`t)a3di3} zzd^yz010JK%>4cT^&8LzfB<5=h#HaqkRlk)Wq^@D01#jR5K~0vg#SK#00000NkvXX Hu0mjf%Ubyh diff --git a/lib/ts3phpframework/images/flags/lc.png b/lib/ts3phpframework/images/flags/lc.png deleted file mode 100644 index a47d065541b0d998da832e1981b479097a9b36aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 520 zcmV+j0{8uiP)#-NSZgwz{Qh@GSmETWyIzrrS!pkkqDDw`CEYY|A1Dxfxke?UP9EWUlaZ{K@! zXYTRdfWyFioqIm+xW_M=V(hYvbO?~5ZHkEt37xh?rY1@PqM%`P+i2w@_wXJJO#nzA zheNt~+w1B3H|fqGMx=x!lms6SMy;uqQ4R``NH&49%B_cditsDHI6DHXLNubec}E0~ zb8dy|txA`rTkZMN{rCM3FV`MqlfuwZrz$X1)+?ntF|UvTkD3M?FxSaem74ag}Vzy5sA+`s~GjvDl6>(E?=UGu{=w?r5#MJIwhn?GrT#s zeRSo}v&#TUmcjL&mxEF>2%EIxN+SI=O=izlM$T5JH;yv-C%^zTfK|9CLa`qJ0000< KMNUMnLSTZ|5$YcR diff --git a/lib/ts3phpframework/images/flags/li.png b/lib/ts3phpframework/images/flags/li.png deleted file mode 100644 index 6469909c013eb9b752ca001694620a229f5792c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 537 zcmV+!0_OdRP)sI{|q~>>TZ2$qp!tjsj_dmuxH+6SkQv+K1^Dpafp!@&+{r#8W&u@@le*a|z zk$)I|{ss9HAb?mjKkZQc#wYOgBhb-*|NQ;?=l9<~e?U(E{r5MB3DgSYf*4|4g1Z=I z0R#}sfv@v<-|;cLeDMG8um8XQ{Qv#?|LOa4L zz5|hefaLFgf557NB#8Tm`R|`M3=9AP!~zPVKOloaN+E`UP5lQo8*B+s^WVQre?jpA z5I`*dz#16EB$cmd~05Jg0{{#R40Cvt10RRAw z`u+d`{`)-+^5ON`yb$y0|Ni^@{rvm=`~3g>{0I^G8ZGb(2;2e)q~Yi9|KETAVEFqN zi2na)xwe&yo%hS1uZ%yx{Q;WF%<}W+mp@!0-yWP|m)B$h2q2(_|NnsK|6hiGKudoE zUGn9{-`6*oEmQ72y~rUb^YQPmzn@?Idwh=T>wA{p3V#3shzY3p@87?_|NZ&@_cy~| zpmRZP`1kJ@JI^@8AFa{s9OeCZO+ts{j1?4b<=-Nd5zA z`2GL?FD{9%H@9*#{QvEce@o8hC9n7wpg7QIfB<3vS^!iHvfyK-U8V5ZH#le}4S|yXQB^Nt}W|`Q?5-JjKDn&hY;a$Df~n9-WqyG5z}b zHWMS`AAkU20!9tv|KD6JO#c`e|FbePFfi-*z4`Hxjg_16|9{rM|5*PsvHt$a@%k1I zzvO#v;hz8j#Q5o)BT__yf)$AVfxHBa6HpujodJ?%_y>%AV59*A7yy`5b5c`Z!JhyC N002ovPDHLkV1l?nIh6na diff --git a/lib/ts3phpframework/images/flags/lr.png b/lib/ts3phpframework/images/flags/lr.png deleted file mode 100644 index 89a5bc7e70711575c1ee3b83cc2be7f0e1fb29c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 466 zcmV;@0WJQCP)2Y|A4{o z-@kwT`t|eY&mTX2eEM}Kp+i!_T03wQQEla((gZiC0cs^;{c3|jAkj>009Kl@aN){ zC);;k0UG-E&);Xo*&wq)roznr3pD=Ezu&)DC1p;}S_BY4jKAN$W)>8Nm;toyKW@Ot z#Ps&Y4S)b*xg;zq)7SR<*)x!NAa?^@4{|ZkY%l|8FPQu15397y$%U%{0*LYZ>zAxx z8}J(slm+_X#f@tK0mO1iR9wET{^!#tU}GSb{Q3uSG}s1+e?a74b~(9Y%Qpf95aZY9 zPuWDo(ENa58%O|%pI^NU5I`*FB&GkLM&}>Ys6}P~0YHEO0B+J}4VS0Fk^lez07*qo IM6N<$g3a05u>b%7 diff --git a/lib/ts3phpframework/images/flags/ls.png b/lib/ts3phpframework/images/flags/ls.png deleted file mode 100644 index 33fdef101f74e38e2422bb85dc8a31bbf1da326b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 628 zcmV-)0*n2LP)NT^udI6UX~&u_xA`izWBNXkIq%g^6Y%Pu{8|3yZC zlYxl^Ab?nacHcU-^!@XD|Nj5|`r(zVwkHE4BV6^xC+~{3+xxCp=yQ1PA~B|JUd6PoU1p;PCnS`uh0!`Wt}y4#)fi z@&Nb%0tn=Xmv@c{N@*}KFh0M&kIP1>YRmQG4?lbdn);9N*SEXB6{h}Te)Ie9Zy;d! z#Q+chF#yj01pfa18Ye&*C_n-K{_XVnU82h1@caA!0{i;;`V*Y{7}WX#^!xhz{Qms? z{`>&^00Ic4fsvW@|G$6Ruf6C#{P_EiKfi$f`+Dz}{FL7;Z+`vz4fMjFe?Sd?fe5Gp zAb>y`UVr&E@!c&!7K){sO`Ozkh)melY+9 z5KGUl3lpbYV0iHf6xF}JF{n*t;A3C_dhHtn&^!?O1t$N2Nj?UE00RIWZBXJNY9>Gc O0000 zKY#!H`S<7dzuzGA_xCRl`Rmu;Um!M^l;`6=xPSp5fLIuQF#P%V7sv;y25A5(1xW+7 z{Q_w~Xakza@Pz>&fLMUe`uqRSpZ|Y=>VQIE8-4+ehiC(l5cdDyKm=3_5I`(zTN!l! z|Nj0Es0O49Xx6_!5M^MM5b`fj@gGk4KbtNx00a<=83P0Vn?HYFf{Xx4|Nr&tKga?w z11|FC_y0eCSvdcCFfafF5XlYnMRN&=-B{`>{W0U03nA0WvHB!TYz`r< y{$OAL2q4DW;E4VQBmbdt8IZ(*2pDGo0R{jiB6maa(%qQ=0000! diff --git a/lib/ts3phpframework/images/flags/lu.png b/lib/ts3phpframework/images/flags/lu.png deleted file mode 100644 index 4cabba98ae70837922beadc41453b5f848f03854..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 481 zcmV<70UrK|P)?-#?r-wgj45C|ZESQtLMVW?~Zs{a4) zALIXj41fOq2a1uNeOQW%&E= z|DQh$fB%40fEE4z10q3;-;ClCKpOx8h=su~@}N>;ErcnO|V^hXG82+5i4Q+5aFU0|N&GK!5=N X;lz1sunOP500000NkvXXu0mjf*7env diff --git a/lib/ts3phpframework/images/flags/lv.png b/lib/ts3phpframework/images/flags/lv.png deleted file mode 100644 index 49b69981085ff54568907cd51a56a1e5d8b01ada..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 465 zcmV;?0WSWDP)TuF);jrk;v#5jAUY900)zv`N|Ns31p}&9s{rUUv@1OsF{`>=? z-@pHYNg(_0@82^wZ2|}&78a1v|Gz$Y3Q`J0Kshi8lm?N%fQ(=Ne*FS+xn*U6mIDM3 z3(!4({{8=rtQsf{G!?8Agn$gN2Dab7KQS->1Q6rPlP7uPKoY|E^ZWmwzrbJwx)~sVSb)*-|Mwp*NlCCVfB*i0>4ZfB zFhYR-gakS;`Tzomv6O+~6D%TsAw}vh)M$o8KMw-~K!5=Nd?b|fr64Ht`Q}{`DrEPiAAXl z<>lpinR(g8$%zH2dih1^v)|cB0Tm^Ax;Tbt1Si*=Q}{E#k?FvXz98l@;}5~lm=?U& zG-}|S|Gl`lShA(H^<$er9P_@~-^V_DdmG*6-Y@sigk?QrOiWCI_=%GzADT2wykw9t tC3C|94FSnevC4oHhRgr$|4V2bWZ-9WJz&bE{tsvygQu&X%Q~loCIBwYQ&Ru{ diff --git a/lib/ts3phpframework/images/flags/ma.png b/lib/ts3phpframework/images/flags/ma.png deleted file mode 100644 index f386770280b92a96a02b13032e056c3adfebfa18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 432 zcmV;h0Z;ykP)@|4`Xj5kLT%`al?B=W5I`(ov;U*0{`Ko0*gOW1x?dnY zU=0kve*-lD1P}`lGXhluRs8wG@Eb_}{{H{>S-s!?{`@vR^^5K2FR(pO4M5WY0*DFZ zqCZG(`2G8?)UU4`zrJw%x*-cw4MBhY08Ix7Ah47E{sH^x7s!U+ztwL3`tbkv-#@=J zum1jzWCJ7ENdN%^b`n?!@|4`Xj5kLT%`al?B=W5I`(ov;U*021*0XgD3^5{teN< z@cTDV13&<=05Ky_HBiN$KMcQtBo?#b8i1w)1P}`YD=UMn?0*)P|9^oV_=9jUlG7n1 zgOt?2g9iZui1GF7*Fr)<|ABx33~>V{CZ_AxuLA@S%fEmBAbhajaRP`eP%%INfiyrk z1T_G`pFe*90tjjYTn_{=GBPrt03a7C3lKmc4KH52_yY$2zyM+rgbiXafFO_o^aD@| aAix0StzUbk+v2SN0000M*00(~<{@!wBU}0eR!0_)M!#^$%c|o1wA4mpD0t66HlA)zv9Z3HD2a;wKuKxf3 zKLhV?#{Ykr|9@us&njQ==l`GI|Ns8^_xsQFIm-b82&94GKf}}4zyJRI4@Cd}JZ511 zyk#BtzrVk|eZKww|NG~I-~WGu5Q~)bF9rsH0Ad2#1T-6>`p@704FCVWdiqyE_S>%? zzn?t&`v3p0|G$6zgQ7n`R{;bN6VP4%{xkdmsRoGvjXbc2Q*ib#i+$e?>}LD_@7KRy zzyJOE_4n5=pu>QE00u!g^X8F}1){Re7)$pq2>GzRP>hz5WF0{Q`{ z7%1`&WXbP;Kox)fFb41M1d2p!76A1_RfAN3oCFX+Kn)0M$tdvjY9_8yH^9QVjn@nfZP*{rmI(|3?O9b~d@cVAX$tK?&3V z5I~F!3@gDg2t{v?r~d;6^$&1NgV7;ZP#i-L5C8-i0C2iwRaxXp%>V!Z07*qoM6N<$ Eg62#MXaE2J diff --git a/lib/ts3phpframework/images/flags/me.png b/lib/ts3phpframework/images/flags/me.png deleted file mode 100644 index ac7253558ab939481a85cc06dcc4d73503afb9f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmV;x0YCnUP)l$FJ^m&#tWvBA4C(n)b76qu^ z3TjKJi*u=MzAs;^(tHqT@6cZ|8AHxz+0T%zR}I9mkc`8faCz48MN^H2?$<3((yN)j;^`52o304M1f80R+|X9}Iwu*X+N)@cjDs2c+lU z?_dAGBv9wyKfl@e{~Tjr001}1@4rADVDj%Tpgtwu-=}^u z00a=o2DtG+^6#HtKYxRyQB?o^{pa7Gzs!FaUNHa!5W-0i5^f%h1nT_t=O0kRUm#-m z!vGLKP#fTS#5u+P{rv~@0nkXGhChFS;q~V)5d8o97pUPE13&;VK7Rc89~k`k^9M+( vx2Q8b0Y@nl1JFDW`UNKcfk_?)fB*vkB(P&2-J7g<00000NkvXXu0mjfGX%sy diff --git a/lib/ts3phpframework/images/flags/mh.png b/lib/ts3phpframework/images/flags/mh.png deleted file mode 100644 index fb523a8c39d40401b9abcfb144a73cbb2d76b286..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 628 zcmV-)0*n2LP)qpJCu1p{#SASZ=3QjbPhlO05Jg0{{#T~{M_a8tGL(@4F<^6===Qr`uzX+`vVjI z>RSuFND|!tCprH%UjG&-`Tqfgkh}r_F#yj01OWa1_W1j+!`}P+|NQ*@_xS<*{r*D) z#ao8o+xY#_%t@QS?0~yfBW+Wj{_zyJQv%*f2f%)|)v=^uaq0&4j6{l|Ybrbh`TZ`2ITPyN!~wBya;Q+wXO z|N8qsP{n^H7N*~zApZOB??0dhfB*t%@KJoPW~Y4ZyXB%oU++J<@%!g5F#%3te)iws z==lAQ0jwGr+CT&T00a=DyL0x5XB;1||6pKv0FF^K^bd&vjBEyg00RK!=O6aq+V@KU O0000p}y_ZxVsQQo9l8qD!tQ%&&F2zEbEdU-v3mY$p-gb*;wwp?LFG<9EeNpZLj7Q z>zeacpNZ>XJG@0bcmXcALo;Ad(L@#C92p0~G#aM!FfF0T7^YIJVVFaIl|0gRpSyF_ z@0dgJ{oT}qqUk#4;-a-U9Fej5EJ`tIE9)E!qDfL@GEq>vEDI}q@P8EmenIHxu!*Cc zLK?@%1j7u0A`mPlm`kyT;5daWs;EH!+LV0IWO0Zyj4+sHxRqia#e9ki#cu?^6YQn9 zOfZ8&4uw%r9nR_}FG?tJ1sBpnAsdGMh7pA$Mlm3ABvgz9aj&GrxaT8{1^YB+UzPEM zQQ5*0;(QnblJRNh>E*%16wccXl466KPu9Lk=M%$}%9~Z3xs9na6KbZ+^U;AoQ+JVg=BO3kgY$Vuu?iP6r(sQV=EH;Iwf|hcN2Nd zPl_EfW;$kS3zh=H4ojC&X!7Bd!`~OdX{VxLp z5dC3f{KL%rhe`hT|Cm4jfB*jf2Sk3^vlaWpqpU2@27mx!VE|eEAE^2d5dHlPWd8sE>;L~hU=6?i|N8~f1J=Os z`!`SnKmdWv|I6_A575egAcQa*n+Bj_fB<3vdK75(@4vtQ{Do`yh0yRHtQw*LD9^wE z5I`Uef5B$|`u7W{2T22%M6!Vq>?D8y0%`dD|M#!IAl1MB{`!Yz!@u8fUYwuxex*z#9GlH2{4I3~mO10Ac~g+V6jVB)KI)-uUyEi4o|t-;5vX%A}^sE-TCS?;peW@7xO)zGwLT z>;Lb2Aa%cf{|B;v0lB{!Wo3aj00dxJ4sHN|VGstA{YR$4C2D_2_!cBcz(8l;%*ju; z_5-pDt^fjRVEX=(;rPk#zkV}({q}dw+K<0~Gco-B2UY|%8?FIpIzRw{{P+Lo&pY>j zzJB!i)2Bb*-v4F%#qjU=2Y>(qX<+*Ohe1*jY|LMVKOmiqU?UkIBoO`m3qe4|00G4K6*VFmu*EK13J3rK Z3;;9iRuWt9^;rM_002ovPDHLkV1h$@)rkNA diff --git a/lib/ts3phpframework/images/flags/mn.png b/lib/ts3phpframework/images/flags/mn.png deleted file mode 100644 index 9396355db45a8ee040c790782209868acaad4b85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 492 zcmV@{}>pU8D26lh`@M2^zAEy;6E4#hyVhJ1te8n&0xjw|I|OmAOC9q@qGTx`1kMs zKYtki{9$JJ&B6L7=Kt^CKt7QCvS|}Q0D(0y{Qoccl;O=^hIfA-|M~k7Bn3tPfBpOS z`}Y4|zknP@Sy`YB00G1VQttboLEtY##9yH3?>`J++5f+PL6rRiQNLgu1_potVgX{t z{eKx$|NOuHhk@zOpC3@OA=>```VZI207MK7009KDfg$woe}>=xgMa@Q`TZMV99$1f z=+7UZ=>P!)^22||KmS$!{Ac;a@cR$YT8L7JY6c`57{N{g2q3VN{s9Bw7X!l|paf9r z=TC&I7$7zP9Rm!dKY#u(FaQJ)NCWfVKmVWoW?%y` zm}dTA_#*kA1?Z>0QqoLZAnySq0pv->KTM2<4My5DUW>hHBSpkmCRUfavf4zkmMxWn=;={POe9 zpZ~vq|NHajABg<@_xGlmn*aic1*nOE;s2AbPk~B-;NSn>+$?|p{{I~>&N%tu*Drs5 zfBO0B*Z*HY)v`RYKsx~fhzW>+Cjb5S_s>6&>Le+qufKnBv&bF%YWVBlABO)w3uGC7 z{rLq%Ks`WL0R#{e(EPs)fB*akI^_5N|9=)g|N8#t9~WuY61}otf4Tqs`!(tD7m$X( zzkdG%X#fZyCZKPCW&?Et`7z=QS^~DI8Yx-=nhgK{7whGvYgWDg!B8&G1k~{7FHk81 zKmY(S0M7pd06qXVA~x>%?)v`v$?y7WENVL!I|c#<=Jn<;5-<%03=swpg4MkH|N9RH z59P$=0*D2u3CIB%01Ag+CC5rQSvY_G`T70NcNRvLcR${}{{9+hIZ*cRKadRo0R++j zv0Gk5I)>DQ+oULEUYSww-@{VeP#&z`*?j4i%tcfB<3v#u_k;CAlSmszIWE zes6rZ@!!9HKqG(r{Q)GE1e8GG4GeUkhF=T-0mR5q%E0gm7LmVTk@^EErhg$tKMw;y afB^u%K|axUkwLit0000IqP)p`2X)eQ1zd`|Kz0p8A$%R z`bTZnZKVTj3KfeK`2Ky*5B&e@&)?sFfZ#7s13&;VG5q=W=RZg_5SU54z5Mv&imk%` z|FW?#NF2HHZpKX|PKHOnfBpIO`|qDW|9~0*0*DFdzkh#$Hv9ux`j_+Xe->2}ZC)XM zHV0!dKPS0Ur}$Y}|Nr_6wBa96o`K;HKmdVl_zUt7(16dMgtTSeTz>rQ?Z?ko?mjsC zklD%d+V79-zd^=BZ2$-$7GT%`Z2%eY=kMmT9MVkp=Y%mFes6g9+4CZ|=Y~?>`*tz_ z9Sja7kOqJN0yzojravHW{k?SeQ|&okK5=fKkARLe6n%c?uEf?;0ubZ>f;9XA2p|@Q zU%!CHiwJW41sn7GB}e}J|9v$?qW1mmH(Bw2pdk4RbO%twKY##YWMEE2jz}>2 jgG53Y5Cqh~01#jRFwa04;J&RL00000NkvXXu0mjf4K^ZQ diff --git a/lib/ts3phpframework/images/flags/mq.png b/lib/ts3phpframework/images/flags/mq.png deleted file mode 100644 index 010143b3867f21e7791b8254e806b325c13b2895..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 655 zcmV;A0&x9_P)$g8u&g1qF5h0Q6aJN-{1Mbz`Ie0O|k$ z{sM@ZfzzR@(T$Ir&B098+eukMUeMl2+1^x^fq~&CAE%jZ{^O4ipMU-bgNM&P{`mQajg9%ivrm#DT>t+4XJGgP z5I`&pzyAFG^Do#{Ra%^vg_(hwneqG2-w+MozW@IH=Wj)-86P+6=Wo9l8G*Kb0|+3- z*{jc+=}JF+`H7W<>HmKQUT#*P1{)(8poaY?9|3*x^4(W97N$Rc|4EDS&R=&5Ab=SE z{{73y$Ox4F`Rgyx2o@H`|EK_{=f}^#%*+g|tSlctd;ka_mU(L~nd(ak@UpY9GCq0n z(2rN05Jg0{{a96b$W_S@ACL(Rxa}M z`G=gy|Nj54lTiQv|3YG^`}+MH7z}h_G^4TA+~V=RqI&{}iQ&&bpkF?J{dw&CQ*JI+ z5dlsHn4|vw{rBhJzZb8+p1k+fF;B_XE! z42<9q0s8Xa-+!garV_&3Uw`~!Vgv;%KmY+HvKbgYfiyF)F);jMVE6!x-Ip&{0DU4U p=>-f&1_my$6wo1$fFwYG0RX)13*@;vt7rfK002ovPDHLkV1lt{Hh%yB diff --git a/lib/ts3phpframework/images/flags/mr.png b/lib/ts3phpframework/images/flags/mr.png deleted file mode 100644 index 319546b100864f32c26f29b54b87fe1aee73af21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 569 zcmV-90>=G`P)rBb0vs`uywH-=91j zzd+y*NDt6q00G1Vbl+cwzkmM!`SbO+m+YTk|9<^u`R%^_m*bXSzgT|#{QE0P`4>nh zQ2ZZA13&;V0loO=-(MgHX#3gMzn3`u{`KzHucyC$Kl}CT<*&8wzt6n|ss8o%*Pp+C zfTjZk5DUl#p#T2<`NjV0^vyqym4EMy|26&E??3;3WoiC?{O#A4)4zWSfZPMI0U&@t z8bCe+8UPFj-d`E(e|zZv%GLeN@c(z$rC;+8f>rHtN0D&|BIS>OtI{AOC zx$tZGDUcCBkzc|7XAeyp!)#=hy@sHz%Z8Nmi!G71?uGb{rk^vkcEsO8W!D1Ad0T=%Vj%gtVfB*vk>3V2g53(}_00000NkvXX Hu0mjfpCtxQ diff --git a/lib/ts3phpframework/images/flags/ms.png b/lib/ts3phpframework/images/flags/ms.png deleted file mode 100644 index d4cbb433d8f9fe49f06585dc46ee15593e3e621c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 614 zcmV-s0-61ZP)w!6%f1G{My^>{rmp(`~Up={s8&+{Qm#<{R63-jRF8M0M7pe zp74|h+7SfEy9M#{{`U3;5)b(M0y+2j#`QMv`vWF8IQ;$o{QUp?{QmLR&;S7V0*Gk~ zkHv3!H5OU9Kb*Y(q-ELEH9vC;U*%N({+r?VuV26a{F4-VqagC^H&EN}zd$De1Q633 zj~FHafsLPJA96}RV-#A)X~v?X^MOAye@1K9u&05Jg0{{zeC zH7h(V@9+2F_Xpti2mAc}=j!&)<^S{h0sZ;_Q7ob~2($C-{v8Cq(%>lF*}4LV2^e-j zV}AbzqQAd@=ogUu2Vs2v^{02G<;{1(|2aQ(EV23Z2N=G800M{wXv^O}|A7VrH9+)$ z7=NG)mcRcxm)QV402KN07wDuv009Kl@CPU%A;t|Pff9c}I{*Fo2PXf3L>PYm|M&kd z6T{yxzy1Ri0|XEw14AS%MzNxQNDQDd27mwq0OfZ^Ej7^!+W-In07*qoM6N<$g6Gg9 AMF0Q* diff --git a/lib/ts3phpframework/images/flags/mt.png b/lib/ts3phpframework/images/flags/mt.png deleted file mode 100644 index 00af94871de66cd0fbf0ca8e46dc436d66e2f713..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 420 zcmV;V0bBlwP)Io>l+&W2PtRx|M&0z2M_*#`0)SN z@BhDl{r~j~sG3n$7H9)N0I@K!uxMy#e*W?mp&AJO{R1fisrv=e1J=Os`!`SnKmf7) z1AD;K%nYO&458rnZ>;h=xCZfJy-Z2&4h30>ylo1|%C8 z!A=4QAQtS#|N9SD2R9xVP=6R000Ic%Boqz*|DhQF2dLpM!{5I^H2?v`f~*=Iag5B& z3^Fndyu3hzLFn&a2m+c75I`Us-n@D94+enNf~Z%o__l08i(?1?2rvLmwOi|Xk;8TX O0000wT1SlAdCl&Y)$gVg>5qW^#Y{{Qp$|KC6V{`~n5M8AIn z$$wxH$UeVm6F>m5>|$VWV&MJy|4IE<4N06-W9 zfN4+=|Nq*iiwn$Q2C&jbT&$=TD3oCSlHOGFpRx(;BY;>KBo9alsWSh04>T2o{{H<9 zq`@}){__Va_~#GM1}QP2gACgN0*LYNU!Z^U|NnpRpWzq7|3Cl#|Nj5~7gmyqN$LIj zQvdWzhA$B4g=Z%5I`U&fgJtk z_g|1x{{H;?U6oxK=&at?J**6@V8K5Oe}Dh~1#%?NbbtT?*#Hy-y7l+}Kff9N{$pgg z_WK6Ie}+7v0!uEdpa1{-Wc>4s0pu$NunhnK1op#kuysJ&8U8Z;`FH#0jm^LQ>Tv2E z__*)izhD3U{sq|pR0FmFAb=oF`osMFS8?ijP~d>v`s?4X6Tl#928Ghke_*>=zWoA* zI8ZS_0I~c5+3<%^Qj!Z4rNibE_6+kRtZU3J46>yw zfWS`r^B2emYGC;Nhw;yEHn21ZK^Q<1%m5k+3<-b$0%`dF7h*inus>j>Kov-;VIf zD*pWek$*v<0SxiK|NjEzfQkVEh>@X`f#DO--wX`DVCWAL;}4AS4@`0~00bBSj-y@M TF2~k{00000NkvXXu0mjf^ET$> diff --git a/lib/ts3phpframework/images/flags/mx.png b/lib/ts3phpframework/images/flags/mx.png deleted file mode 100644 index 5bc58ab3e3552b74d990d28a0f500e9eb6209dfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 574 zcmV-E0>S->P)LFc1LT4cKmY-iGBrkbGB7ay`}g

Nzrc?B z!}RAj&|v@p#KiFL&)@$*g@6D2{reke@BjagZ=QH_|HA5tt#{7v1Ul>guV4Ru|Ni&u z_rKqNfHnXG5DUYvUm)ZE{sF26>H%tC6A=5t#K$G4Eg-G_A87rbKVS#^0WyF#00a;d z1Ca3#WHt~1jRI=eclPL04k1AU{avRH{sTG*Y{UOQAO!R;KmY+XFaVtnvEdic(+vNe zOr8IIc?-17*~$Z`|L?Eg|G`fB4^+g!01!YxCouq>54Pd=FQ6a({TC7tjr5F#2GXxz z|3N{=01TJ^fBykB00a<7!|#88#Ce2)8ovGh$;ikEv=>5x7)(s8a diff --git a/lib/ts3phpframework/images/flags/my.png b/lib/ts3phpframework/images/flags/my.png deleted file mode 100644 index 9034cbab2c02704b65fba6ecc4a7a1c1d053b6c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 571 zcmV-B0>u4^P)Z-xKO+5@Bcl`=5c~|G$6#Vc^TNX8-{JF#yj01a@w+002>mTdm0Dxpa1{C#)An)W@eTA0)PNwiNI_f1h_u_DTrb&+z}xv;{Wj zFGj0Cgf$G002ov JPDHLkV1gu%1+M@A diff --git a/lib/ts3phpframework/images/flags/mz.png b/lib/ts3phpframework/images/flags/mz.png deleted file mode 100644 index 76405e063d43f2f3b5b9cae4f76d9f1c73cea25b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 584 zcmV-O0=NB%P)d!0?ZO;SY>NM!#Sr3j;s^4&s;y01$=&U~zyG1R{bN8&$-J2AZUB z{O~2s*67}BSLujJh!l{(TM_&V!SLx<0I@JIFetqFAHVYHe9OP56#xDPD){#oDEIpx z82$bI>))?me}4fPvfQ#j8vp_bq~ZU+|9p&pvv&RstuJJil>ZL~|9}umff)b({bONa zxh{1bAb?oDF)-ZV`m5;k=ljw>l6BpeezVN}{rlPPKR~N~|N8X{NCKH4>bI<%?516t z00M{!=o3jd#=5m)yzyNB8Nca#eH--U&Fe3(f#?+keR}os(@P+F`}Hl*IRF8~0t}ng zTmN>%etWlrgX7)b6MtD}{$cp_8-#v?7>pqD50GU3{f7;x0U&@Fe=;yIS7rUbaG!zu z&%cJ+j{>}Z{{3SByBg&1|Nj_3~Dr2e;Gh>zZrofD5`!lF#Z7{ z2B7#~hM#}`y~Cfd!0!j9&~4{}>qlfDw=_GI6Spo7yiaSL1(R34j0qF#yj00RRApetkm@ z3-<^I`04Bn_xS?+{Qmv@{`~y?GBy}bOB@O2-v*J4|MK+z`}_2=vH}QbDjOT??*y+^ z9PHma=D0k1DE9l$Z%$6;=mbqObq>D1hX4By|NHgp|L;GHwRPtz;{gH)sDXiz;U6Qz zZ)V2dKoY20MNK$ASA+NcQ;z)f|Igq2|MmO7w9@DL!aL%O?v>U60R+_W>(dw3rWqbw zY+vs`7YYhj_p}$}TRP+a`c40T|N0L!J1pWwjPJac>kgmX!|;RwAb@}x{`~&)@5xJE z5fO>bZXLnj?>WlS|KEEGbn$;~p|4%Vx0QJ+&gI^Ic|%b^5f~5v0R*z)@87>RPSSB9 z(mdPNGA>^D|K~4|Gn`ysXGCuKcCvq8=a*k!egj?m?>8{m00Ic8fvd1cUx@iTXM5HE z^H)FyGjo2eEq-FG+;YA1)Puvn7=8hj{`vO@7;-=x00M~R?)3!82NxK-n*V?K1yZeJ z{HiGaByR2;1J+usHUNMy48Q{FH!M8N)Pwp9Y)wTFo81A^+}-HTA|tp~ zO4-IyLWKVGUAVv#KrFzpU^vb8&*4vW%&*_Sfp-5+Oa#jR{(FIy5oqwQKVTa`BqPut z3=9AP#KLU;d%N^MnR|>Uj{MoN{TEQv&!4|iQhqnS=35v13ux)DKYxDz{qyJVA7#|2T diff --git a/lib/ts3phpframework/images/flags/ne.png b/lib/ts3phpframework/images/flags/ne.png deleted file mode 100644 index d85f424f38da0678471ef4b3dc697675118bc7e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 537 zcmV+!0_OdRP)pTI(!tjlO;rIXl@1HV&)cpmDGW-GR z`3+L^2aNvy`v2$G|KGnEMPz|W00M~d>&=s#l8OvKbwEpiHvESG2>tK>|GyyO9|$ut zvpzk42q1u17-V!9I61+pfvQ08|BZwH@16Yr=jVTUlmA*S|6zcEk@1g`6+i&7`~&$E zYA%%V^7j8zTmS$3{hyirzos*?2B2bq00L=%yMh7Y5+V8jy0-s+|NJkm_8$o_f}Hjb zAb?n|yt|^zto-ZmuYW+t0)q+&<<KJ>BgrQT zRQ>1Q-#;J~AoS`6pHRCwBA zU~p!DquG0BzkdJv^XJbWKYo1u_VxSs@1MSW+P$@#L70Jomw|zm0SEvBhy{qNbE|>m zzkmO1v}^=;1(+C_zx@3C{m*wPUMbGM98Q`}5v}3B|NZ&>_xGmUO#lG|(!jv*|H=EO zfB*gc{`33)|Nj{n|Mza|{r>BFYe?(AfB!%K_3?Y%L>Z^l>!7{V2qIffI$#e zz5f4~?wt{_jNwA=k=tvV8m;04hxH1ClNsp|jaD0d_yUND;Sa;#|9^ps{`~n3bQJ?5 z!?D}Pp1*tk?A@~oJ0>vvX8@W7)C|%C)&LMdARGSt{R`y$`S<5P0|@TEy!-p_?>~S2 z1lj|1A`hhCuT1`^U1^@yK06yzfAV)~#?EnA(07*qoM6N<$f^cITh5!Hn diff --git a/lib/ts3phpframework/images/flags/ng.png b/lib/ts3phpframework/images/flags/ng.png deleted file mode 100644 index 3eea2e020756c41abf81f765659a864c174f89db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 482 zcmV<80UiE{P)E-@kt#fq(zr{dlL|rVbPb$^K$sU||3VAQpx%4ArjH z5b1ya|A`BUvomopF#HDspdkBi_LzW}KMcQr|NHa%@9#}BHvt3?3s4hK`pMU)fB*dj z0+88E|KR{Ac>Ck+U;lpn{`Xs!M;2%gKmf4-G0FZ zKmdWv|I6_A&;LJv{(%shYM_N64Szv401;3FKmf4-Jp?oxsQb@fum%PU8~*%)I0>i# zs2CuCKpOsn%?64Bg>X9QKhy?*00Lh)xZD#`v33$e!wuw~|G$AI0?h>~ z1_&UqlR!#;Ll9OQ{s1-n2ZahyF+c#Z0Amdp#**BUAaDHn%gD$G3dPzV3};X@Gl13bFaQJ? Y0MmSSAW;3b&Hw-a07*qoM6N<$g7#LQDb&XuwlP!fzJKM z`1`}(|Np-K;|B=>MS!;cWf13KY+LvSAb?md?)rCHn)&`aU^p;VI>1V00D#b-){yc34R8!1Sqb680000@|4`Xj5kLTv#?55wQzKoX38|NjLffBpXj6#2y{D-E;(Ab?mHL=FGT z$TP6>fK>na1GWK({(upf0nrSU5*Gz(00%w4e}91F-@gjtJbOE500a;V!?RECzy5mt@dro_q~YJM-#~SLe}OeX zNT7y4|NilCvNABd0|+1%hF>6clER!2lYo}|1|zVkK=SXOfB*mf{rC6ZKVbL)odgg- vjKFAPVE6?_e~=h|kVO7~qZmRm0R$KTYszPUy89K;00000NkvXXu0mjfB$dbi diff --git a/lib/ts3phpframework/images/flags/no.png b/lib/ts3phpframework/images/flags/no.png deleted file mode 100644 index 160b6b5b79db15e623fa55e5774e5d160b933180..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmV+b0{{JqP)O=a{vExMP2%`MCSoB^FIcLe_%lf;|~%E5I`(IQNh}3Ao>6Q|DFUXMn*>AqQd`w z|1kXd^B;tM|Njjl{{hM0zwd6?1Q0+hV1xeud-4=Wy?p-%sO`^#2S61Jzk!N?s)6X& zzhA%p|N6}=D+{y%Ab`Lc{sL9~1=0UN4*CD*7s%9KAf+JHKs~=eB-8KTKvw|-5R1&; zzd&a|ob(5%^Z$Q=wHy9p13+aOpFRNu5F>N&`Tk_-7w>=n{RejQzkfh&Kn{rf10?_b z{tFTZibx5v&dxav5I~H7|Ney-|DWN1$%1FyagzUW0464;_wU~W1Q5$TW@eGxtUvee z3vAf*8|igK9~@*rr66bh|NrkNM8z+V zAV?>O@ek;bKfu6d00KAO>U2WB)$@6+CBT{3ok>^7H@y{~6FRKmalQ{r8#S z4^Xx6Je&%q%J2@E@iKAb=Rv<(vO+e^|@#56B5{*~0Mg z>UitA{$OPI`~Tk`F#7!u z%=q{3H<BYX7n!%ts-g52=?&#%8AHvnDo=g*(t zU{@(f3Lcro01!Y-3_uV4{%5PNloM>zp5gQNALI8Qf4=|z|KsPsAHV+n`1$wy&wt;4 zfzU5-=mP{0FqD1)U3&iJ)0b~Q-+l7x$B&=CVSxxV`w!S3U{3%6(9;Y60R+_W0~jFx z85t(6Ir{$dcL`zMKcF!E2U7}WK$QOlX#fZyMg|5;)aZo7D4hMD0TloQ7ytwk}@P)zKX@%&%DST%gMqDF&nJ<9}^SM9e)7=i1G97Xij+!pc8>s z0}TKw06GH{9{>J;c@WiqflO8wrXNp!0t65X1H*raF>uuoM}q1_&UQ zzyE+PV}l7nR6|1@Xe}f}K_mmn5Fh~%KtLN9K+(a>4Du5*FzA2|{m;zE0Q4slD+}03 zKxJTefLQ+k0*D1@+|Oq}Kt_TL2e}yHXa<;L{(_vY&wh05Jg0 z{{*4}t^?F62l4F%@9_Wk_yrLV`1}4n_xiEzG57obO$p>A_3H5V5SZl@9UBk;0Q>>~ zF#yj00jE58tx;oDUfVAO7ZA^g)(IQ}Y8G-;ZB^s|2r!a55}@Ef&J{K=uDyPxdE3 z4FCZEF#yj011R$m=m{0X((d>7`QGgNy~*X%==~K4{m|+BO$p;F|LeE!5zX@o6aMwK z|0Cnry8?)1@m-dDW`RF^3@85Z{`vj)H~*iTuYX^D_V?HC|LG63e*OOQ`}ZH9+h%{4 zR^kLX2_S%&fc^l6#;?EsK&pTL{q^hL&)-1T|AVLlN&WsC!*d@f`}fa3pay^dVgYLS z^XKpHUw?lCNw6Z2x?f-t$o}(Zg7`(je_wy{{yg~C5U2qlfPfml0Rvc4oChck)CmlD zkWL^2sNoMV9{$c|wex0wa`2z{-@pGE82$nT5F-OaFayIEq`3SAj@n=l%a5DE9w9oI(Q6o;?Ey zAdrT?A3yTg*!;YE_t&FGSk*xQBO~LVKYsuMhzTgoEGG70+cq{OrGLMF<5CR)KqmnN z5F^kJDrIFqfoA{t^Z)mszkh!J|NR@N^WQHZ-f!>?ZqK&!y&{zFIzP0wn(b{R37FH0BS}Z;-(ZzkW0R z`o;JgO8$qifBy!003d+C8bA*C^$+NzU%!${e*gOW>-S%fvmgwhvw&=%Tb23#oNZ?S z2p~`>{R0^fayL*XP!U2MkOb-c1#;`ZzkmMzW%$Pc5I_(c{;*0)g6#S8SB49$^)FDx zACSQydx0wd{{073{+Hno13&;Vu4Mp{AoLGRCWbOF`~tJSfrb9TxDaUu27mwq0KDvZ UcsT?Vy#N3J07*qoM6N<$f`X&bC;$Ke diff --git a/lib/ts3phpframework/images/flags/pa.png b/lib/ts3phpframework/images/flags/pa.png deleted file mode 100644 index 9b2ee9a780955566cc7dc2f59ce175f32d3731a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 519 zcmV+i0{H!jP)|lVPPN>g8sl5Km-s#EI@faK0YA%?%RKmGG2!N|AD;!zX}Teef|3X z_wWCI{=muCn>GOi5DUcMXP^GBIsf;|&;M~|Oj3M||NsC0d;h_|&!7JP`u*?sum8V( z0aY`}$^xwd2q2IKptK|}gRT_Am!FIf)j$AI2PS_*H2ec11_potVu8EfUYUvEKf`}G z`1lE^`X5*+Sm$r%-@k!200a<=Rv$}~=bu-f|Ns5_|IfewfBrH6Nrpdvs+^pde*a>f6qSrfAZn~Z?Fa+2||AuS*t4lqXH%-ra!^K00G3r z@ax~7e+)2nAoSxWko^y??$?YNza~t8coi7j009Kl08{<<|1U847wF+XP}P60U;n*# z@9*{N{$9Nb{(u|?WHSN*&{SqkP0pSkP;|=6L&63i zfEXEE-vV95@Z%rDuRkCLl>P7efnPxL{(%8d!yj-G00Mvj0{}mHT?%@XEt>!U002ov JPDHLkV1lK4=}rIu diff --git a/lib/ts3phpframework/images/flags/pe.png b/lib/ts3phpframework/images/flags/pe.png deleted file mode 100644 index 62a04977fb2b29b96d01ffef3b88b6bf2ff05862..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 397 zcmV;80doF{P)@|A6@UbB2E)`X3x9D*gjYK@dOyv49j-R|ARv|Nb!om5Pi12buAo@&A8j1_q}8 z|NqCt{Qv#?|DQiV^2?@8009Kn!0`Y7lcx-S{{qo}h;n3b`}Y4|zksS4Wo3aj00a;V z*zEsM)xUqEs|Es~YOn@|-@kzx00M{wh#7&Zfj0j6!|?mhe@uX+0cadR0D+zK=P$&S z1T_5l12i2VfWS`r`v>f&U-&gJf}I2qKwu{UjsNuvF#Z0+ASnqp<}V}$85tQ7(W#^a2}2+PDh3E3#;-`R r2#VqJ=b;e{^dbb<+Crtk03g5s0zF}bJ8sS=00000NkvXXu0mjfKVzU% diff --git a/lib/ts3phpframework/images/flags/pf.png b/lib/ts3phpframework/images/flags/pf.png deleted file mode 100644 index 771a0f652254b4e891fc73910aab38967864da54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 498 zcmV3lobsI zohi_A`bB&J!~)dH$ngL7lczwX3_#UDxxarw>LBRX?|;94{rmL`$Yzn1{l&ll5I~Ht zU%nI;6$RPw9|VBf|1(_vbYnFmA3K-0+yDOt{~_StKSoBzkDopP1Q63dnCt(82%zd$ zpFb}6I_2!oo##J&nDhVtbEpQW0tSEpVuGrMivIupee<8UpWZS`Uj1hH_v_am-&g;K z1CTfW0R#{WvT7jw$rQ2Wy6P|4+kZd)xq2}(*g=aGrk)Yxu73al#Db(Bq?4D0-N;b? z5G()RfB&pB<@s4TkY)e;`2!F@EcYcO{->q=ymt>64xqsK^^5b@FIO-F$h{9?`~e2* zUv?FhqZcm%1P~}#|Nj2NBq_=8`#0mCzd$+0-@loGnqiRuWPl>)F9-k?0|XG`aR!E8 ou!#JF#Q1|6-w+1S#{dBa0Kx%7Vg$%BF8}}l07*qoM6N<$g2}Akn*aa+ diff --git a/lib/ts3phpframework/images/flags/pg.png b/lib/ts3phpframework/images/flags/pg.png deleted file mode 100644 index 10d6233496c10e52ead975c5a504459fad68ffb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 593 zcmV-X0Hv=@BjaQ|F{1AU+wpQ{$Kys{`!CTH>0fVKL!SX0Ad1a`1cQJ=-<7ptZmH9SAnX3 z{Q_yQ`~BbL*ME+m|K)!Dcl`DLKS&U$0U&@t8vg$M`{&P}#F!W*N5{%vzvln`{r&f^ z{||ospYrSf)?fc0{rZ3A*Z(w-2B2bq00L=XVPVP4%$zZO`i8aZ($dmav$E#>{B`Z@ zum6{R{h$5&|A}A!9e(}a_zUO_pbY>4IGm#s06-9cg3a4XeYH!D;D>_*`V5R3;NTtr z%*@^Mq=>M$LXVh`5jChqDeaf800L?F_U+sH_3M8E<^KOyQ&ao$p diff --git a/lib/ts3phpframework/images/flags/ph.png b/lib/ts3phpframework/images/flags/ph.png deleted file mode 100644 index b89e15935d9daf25173f89a36d8111824fda5db5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 538 zcmV+#0_FXQP)N~0_Y@w0Al+04@f;`V3_{@|8#9F=K6XQ9UY*azdwKd1Cc)=8bAo50U&@_7#Kb? zFg*PK|H1$NTnr5Nxw#FRn^&xvtbK0f`#-;cuKxpc)t_H~fDExeq6ZmH0|XFI1NZ;` zGXMXp{AUnj_^>}zDz4B$`$1}#7U0X2MOU=aELU!7sY=Kr&1{QvMCSsj$|2dLpM12Fg)7ytqY zsKMy}yX6c^FZ@4woIyZ63`(G)I*8l(j07*qoM6N<$f~Z~XumAu6 diff --git a/lib/ts3phpframework/images/flags/pk.png b/lib/ts3phpframework/images/flags/pk.png deleted file mode 100644 index e9df70ca4d63a979e6bcea2399263c081ce5eaeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 569 zcmV-90>=G`P)`{xe>ko^7oADI06=l8$gn`UeR2p|@S@&Et-|M&0Ts{jIsi2(+HrUEqpC9EW^)CAOaJl^^9-%lBC8BHP081)#ChQGgo zHUI<=3(zGH+B`^Tu)Z%{q{PpYS&%;j+KluCr=pK*_e;5D)h=t+bKO_wx|Lu6N(?HnJ zN6`lu;-7zgR^V0GaA(7wCwqWF2h;!%KrH_l5Kj8_?>EpHKuhXR);;uSzaAK9KY#yZW@T0p zQ2G1+FVF^n0AhUp{`o&J`0?k5YKbbt8;l4>j(9ExfB*vkhsr>Vq>*li00000NkvXX Hu0mjfu=^7c diff --git a/lib/ts3phpframework/images/flags/pl.png b/lib/ts3phpframework/images/flags/pl.png deleted file mode 100644 index d413d010b5b097c4e0a4604eba86dad79567ed16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 374 zcmV-+0g3*JP)Ab?mv3iQ8Nu5A{|6C_|Nk>HFfjc`0biay0|+1% z2B@O{$c+Ek03##gzdwHf0*Hl3)etG5lK=vU1?W~rxN0!OqXDP`Ab?mH`1u+7`u;zA z_W#cxhChG)!_n{G|9=A+zrl>(AX#bYe+w4^1Q6Is4VEzI_51&? zUm!LT$@u9L&^Z7B1a=Zw2xL66B2?87%l|Mi00a<712fnG3~)u5+Wr7F{AKw27w8;- z00L=X`u&GNQW9*;Uxq&*os3{386YGO{rw9;K*az7#P}5)xp2gQ%0-g`0)PMm0MPYZ UsK>Njp#T5?07*qoM6N<$g4HXSwg3PC diff --git a/lib/ts3phpframework/images/flags/pm.png b/lib/ts3phpframework/images/flags/pm.png deleted file mode 100644 index ba91d2c7a0de26e554979f6351d42a1a4e22de3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 689 zcmV;i0#5yjP)#D@XkmAv!xDMMW8-mEZ&mK%|%B2@pa*J{pUD?(_ahBqlG}*TVt; zF#yj00{;H~{{a8``T70x^5Ww5-{JLFN2dS#-{Io#@$TjE?&8zZ_V@JO>E`A8`2YX_ z`~rx{;oS`3$G61pUY_{!-0$E2{{CbX;QPSJ^3BEStfg-V`n;-q6+;t+Xyw zOy)sS^8$#8OF-b~@87@v{bTs||L?z_Zq~=&zGIaZd&b4_{m<{;|Ns5^`sL5xKflEU zUjXHSP67x3F#yj01nBVe84eEr00I90|NZ{}FelkBB-0BC^O2xB85HWz)f)HsDi#s! zMLEolpK<^Iq5=Rh0M7pb=>Px;h=2d#;^FNBZtPGJ5bKP1n*{>+?(qio_5k|){tF25 z`1Sjqtv%A&PR-7P0st`p&i?}b008M5=kFQg|M&R&{r=?U4x6PnhWa{`B$w z?CApk{rU?E^8f<&008;|hy@rKe}6M^a>=kt2+9et{QJXr>zQ5ua`W#$8JQS={rbi5 z^Ctr{)6XBj7@3%V17i>%fEb@MFnj<<;{gVSbOv{z8Q{qN1r~!u@ISB;HgNQF0R$KT X>6#2<48ze<00000NkvXXu0mjf$fQr4 diff --git a/lib/ts3phpframework/images/flags/pn.png b/lib/ts3phpframework/images/flags/pn.png deleted file mode 100644 index aa9344f575bc92f4c1a5043e6e7d0a8b239daa64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 657 zcmV;C0&e|@P)$VEDzr@CQtS7ytnPF#yj0 z0a0(~eP|Fd7x&oU`XvhO+V>M05dgm54eRCe)!y3s`vCp^_5Az)`uqj_{QRhrlmY-T z0M7pd#W4OILofm6?eh2PFCO>E*7Xbx0@lgN z0st`p&i?}F01o{F1pxvB0QdR->g@pe`}O_>?Enew{R9F2_ajBO3l7@{2K78Gz9u`z z008^~05Jg0{{!Vds4FN77!dx<`5YAi^1B#F4D8&$5I)oT72fOU?&Jm;1k~m5*82ws z?b$fe$;$!&F#yj01PbEP9OVUy$0!>9?*iHF&;9=9{2wXIjNS}D{P+g={1WdM4-6DF z>gCe?_5uI^`T_tk0M7per>)2uHb&;=(#87${QNQl(a`kw{Py}Y1nctu{`UwC>ihis z2n-DS{QU(1_5c9-0*DC|aR2`P{`;Tl?{DV6zkmJy$H?%Xjq&fFKfk|zXRCbma58?r#f z00G1Tv;`<3F2eQa&)+|P|NZ&>@AqGj(m#Ly0)zk56?XydpHmj-@bfY4J_0oTA3y*x rGBBhgM-@1KAF z|M~a-&+mVKfs8*8^zZj?AObQ@tXl^VK#U9w|7)um9zFT5!1JoGnu}M2{r|uJ|AC@F z;y(;9F@d=M{=L6-3m|})KsNsS&&$bh^PO0375Ag3EPt6;7?_!X=sz3*^#j#0Gyh{@ z0SF+Vlm3Z`F-Ar(?BDbM+y#c5od5B%>y$nn=KcNZ|L>nr$AC#T8JS}%RsaMLPy>UR z34^BAe{Qb-hmSD)`~82~jewZHH;sOtVgB{~2T_Lx z^M7~ue_6TzObGu%0nl7VM#g8?t^ouP$PYjMFazDG!uzbThlgL98zlelKgeJZ;~z*Z zSPxJG!?$k$0R+;(`ulr=6P)M00|Ni~>`!`VeZ#eh`fLE8Q){QmQQ=eGY$|NqCtU}^v=1iBd@fS3^8`SJ7r@8ADF ze*C{^(f_{w|JZZ@y#o+HED**2KY#i6{~yEeU;qEJ{Pzp|pOucqNnlF=0*DFdB%s0n ze*I+l{{11(um4^iSXF}z{SS2YKY#!N`GNV*AE2Jys=p_Au>JnK{@0e3zk%WO_xG>A zzkdJw^XDIk{pa6bWqzfjEk^+Y2&CaX+n+VzlIN6JC4s^J?+-}zKcEU=eEj+Q{|`_P zFrfeb|NHmfUxq&n00G3<$-qz^$iN`P!0-!({va{_z!?9)Bm)CLfB^vHpj0t%_B3$- O0000op82)aAGO;3n0AgYI#891D4N?IF|Ns4E{L7&Dm*MXp#y@|U|NLS4 z{rmr)KmTFmmra`h0*Hly38?u0llM=#nEx6H|J4!x{U`A6pVzdvv{Rd?JIrI9L zs`Fos+0`Q4a^C}Q0+k5A1KaQ$>Lf<6lK=vUh2aka(D+|}f9<^YM_B9kC$A?0Z|}3+ z`ptao7t>dSY6f5^0o~2O01!YR8-T_G^}PA>yZ7X8cHUpx=KlJ_{+sC?ST#h$AD{+c zSpNn30U&@_7``$5{_{tYU-I{#-$2g*Lz_YNHw#c5FVJd`!65YaF9ZRd1Q0-s48{x$ s?-&?Px# diff --git a/lib/ts3phpframework/images/flags/pw.png b/lib/ts3phpframework/images/flags/pw.png deleted file mode 100644 index 6178b254a5dd2d91eeaa2a2adf124b6dba0af27f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 550 zcmV+>0@?kEP)~nkZ zGRMDC%7~XK0S0Tx8Wd7-QG59jKr9SQAk|O4{{Q=*0jSzY^rW5C9>)KFc0aM(`^fh9 z|Np=Kfe=u&EDs~YzkdJ$!~!z=-~YcrJO42FE6xsAYGq`2_Mbt_P-yG_e|4Mhx&31J z|LZSE!|%TgKvw|-5ED@OU$BE2n0|Z9O=M(v1mpqrFfl%gR9?uy{Oi{rkOq*RfB%6# z1PCA|pp${Bfd()#{N!P|4fj41<69Aq$E=K>;Tryc4F(7xpbZRv|AD;q^*8I6-->Vz zfB*5n`o{nM2Peo6f5F}W+3*h_fS7<7;^vxc*?8?`g7w0kCk@cHxaHDByoH$n$~K0fYN5BQR!wAqjL2Kmai^lz(OTgcO%Q oK%!9YKcr{|u^AZn7ytqc0H_5zuk@Q*SpWb407*qoM6N<$f;OS^T>t<8 diff --git a/lib/ts3phpframework/images/flags/py.png b/lib/ts3phpframework/images/flags/py.png deleted file mode 100644 index cb8723c06408828ce68a932ff472daabecc64139..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 473 zcmV;~0Ve*5P)@|4`Xj5kLT%`al?B=W5I`&pU%&omV`KRD53KJ$2txq_ zg7fbmh|k3I@68*40Al&@kBy(1nSq%Zss!k?M~{APS@-YvZ#JJG201x|0gQ}qez5@r z5EI0wa6>`h%cteq@9Mue|Ns2{KQdro`19u4 z9*F+^0|+3-w;#WAv9bOIX#?r_2Xj8qX@CF21pWab0}C_Lljko10*H}8@M3d^)Z>@G zf!6*0!vH4#gGo5!|DS*V{{HzdC&9L6!fAj26p=v+03Zy*=I{f8|9_}7o838uP_pBd z=z9{Sra^iHOE|+IC{ z-`~G~{{ZRVfB*dX11A6d`CYbrEkFRVK#Yg0UeQ$d`q2ZhA|Uz&)bIy{egR1#X&Imb zfB<4bR{ihazwp{dkXn!mkfPsU#_wMs1hfID1|Wb~;Esc6TU=EJGWFLlunkbN!Q9_} zL0)432p}e)sSwo=4bd$f5a~a^fBpd(3|0LbOac`E1P}{Q!+)sq|NsB}pI=e{a>g%& z)4?|U{s;0mNCQ9sG5v!Z57O~Jp}QY!5N0Be0)lgG%);U`26kn-@hOg zU%!6+4+cOs(0HIde9xZz`}Onxub&LUB0x(30+2WcIRJn#2ut|?gWYu1Cf+!-K%B8# zdf?1WA}#uZ8oj7u>$I1i0Al&`=O0k%-@icgAIJnM0xA6maSq6BK-ECw|NZ*S`0Lj% z1_pot6puj;05Ax`F!=umqj7^frO?t|3^&I1kxUq9yECc+jQpY84SWH_0#pxl$?v~F z@*hy-KN0|X07U)z`4{NpU%#2aHUI<=%a31wK(7Du52Oc(|3O^?R1IN+RRjI-n*kVB z3=9AP#PZ|EACPLGJ%9cJNh|>9B%spYzZw7h1%?tp0I_@ndg9MNE>313@6R75NcceF zkr51-#U+7;F#`Sf7i0rK0I_`g_NQ&Zji7_t0d_@@ozArL?Su`s;*Q{AKpRQ~TD44PX+*q00taD0I@Lq1k(S2nt`tR{g)9*1H=ZfhCe_Je;NM%1^NLXfPkU&2dGq1gcanC zzsyWb(hLmW7#V^70~+_6f#nZ_(jSmgFakOWAb=Pd7`8Gn`~pjZT=;x%FbfOAzdzu3 l1(F{a{)I#17yR-T)##NTdjqb^wzQ(`1@?t)Ix4MUXz556teM9A7Ic zq_@itH|pv>q+zrjZJ^Hx5bj=fD{5McI3ol<@^-l_@~tZGV7p>1CU&qG~{YccyC-q z$8~P)6sG{nMmQy85K$E6L33rja$x-b9$ diff --git a/lib/ts3phpframework/images/flags/ru.png b/lib/ts3phpframework/images/flags/ru.png deleted file mode 100644 index 47da4214fd9edb383687c1d4f84fe8b42a51ceb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 420 zcmV;V0bBlwP)X|NRSO0LlM<{-BURBqYRGSojej zfLOL~|EH_V_~;P>Nc10*D0|Jxss< zFi1)Q<$$6LU}rIc*dU*QNFV}+9T))>0|XG`SD?F)5CbX~O$rDA0t^5@iDe$xIAIn5 O0000N_~0!B1ZtR02zJmAl3i>|Nr}+@!x-t zvcLa8?7#n*fB$3p|L;$z$Rx)9zm`4EX`B2HAb?mPX21FhQ~^@@2dMNf!=L~E|NQ+A zWdHd6KUK1c=hsc9f8Rnyezh^=0R#{e(Ek5GMIci_s{j0D`2GL?@4p}ozrlKzzsUIh zhw0@n(cNzYfer%*AeP_1{{8vS`0Fp&84w#lmi+$#)ARI~X!Y&+KyeWsW`<9n00M~d z^G^m==F0#79{mS71ZX;t`~_q%fY`tPf!Mzw;*3o4FJA8j2p|?NkT1UdXZrG=;TOYy zh@M|qNhT&CJ~jq`0Ac}pl#vl6#K7 zFA)9u_3syi0VMzY2QmHtx&Qtu@&7&0&HxaAAvs6^7=(cU7?W7&6Z-$piRe`dyDK`^ zN$WO$zWL=wEu!PO?Vu9@iVSM&8cWvf2p~p=WCn&G3_$lI&>tl77dYY}Tp)vm0U*Et X__=7oxWDB`00000NkvXXu0mjfV`BRN diff --git a/lib/ts3phpframework/images/flags/sa.png b/lib/ts3phpframework/images/flags/sa.png deleted file mode 100644 index b4641c7e8b0dd79aafaa73babdb525d3d2dc6a8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(eDP)4!1u&@QJ10&`rk^HbMk8Ee|uIe&H zS+;4$DbWCt7$DsBz5oJg0IGiW@flDZ69W^F_wDDmUw?kFvatRB^XvPsAO9KtfBpI8 z%a6}8Lb5=`00G1TbjJVx|9}4ZVWnuJEUfzZ$EVZx<$*voWzTGcp~$d(=+V{_?X+ z3y#kPS_RYq5I`UeU<=TsD9Bk~@o?qi&=DPd(?v86a{(`&&3I*E&g8|Wo?Sn;v*0j086Wc~d66UYT>00&^E24DBZ$$%)DV9SRUYEY{Wn z85tspN%!Z^Q&_X+!-^Gee*b1;`1hkUW~HJ2(d(c7|`w2)m##KhU^#|s1eh2YzMVW-Z(;)C{QJl7?-Rp6DTaSP8U8UK5I_L2Ffe?nu66~hU^Xzg zV`^IR|NmbGhChsd{xGln!xZ`Z|DQkqe?!SHn>GOi5KsdU{eSZ0I}_6%bMu4$|G#2j z_zP0e_xu0e-~WI8{{Q>e|6jj=B8;-KKpOx8hy`TyKZd`5nT(9?%F2RO|M~TQ@}K{E zz)C@?e?v4d{QeEp01!YxcLP=bXJGj0<#nFn|DXSVfvSK1-v%}nhwkOu|GvKejg0<-0ptJwK&1cy1oE`H<`Z?5M+~$7{9gq& zn~(3mv&(;P@Bi|05T(EW{(k!9>4UEid{_Ab1OPDr&i@1e0Q5gX)c>UW0I2)_6d3&w~i*%}NQ0G05Jg0{{#gAwk6j%|K36Wcrx-Z zDBuV5-R-~I;@8;l*yr}=_xShx{`~y_{Td7!{r>#`1^@zxvDKIVAJ?B1c2ZXvZZlkB uU;qZ}2Vg*eW0eWa_yywvNgf7(00RJ0?>)A@UfIF`0000`tbb&P~tyW8d(D~GxMiUp8x`gh2bB=pZ|ZjUUI!&{yK1G;4d%$ zIuA;MS%3cg{`2Rrii*m`ix&X`h=t(`1IH^)u0vdsLXv;@{sQG7;18Jf2Mqqg05F6A i0*HaZmVqPy5MTgGElxU<64PS<0000a|fPuet^$h(7pHv_{jfB<3vn*8q{15ov!pR5qo|Ns4BVf^v!57RHO zo?l?}`yWs<(7C?=0*LYNK?X*pGKOD3v;Q#s|MUOfZxH$qCjb2cBQWFtZ$@_cPkRpn z1P}|u9|n-AAQdnT|9?TXAyk7H4FCQBl>h_~&`AvcLF)bhMS(&{8jwh^2qVzve;5D) zh>=0RIIAq+{+o}$pxEl(3%2T)`P!1-fBt~{@Pp~sA7J?W`}60ovKZgl)=2;X#KQ37 z&mWM7{{H^+4`$e}UqIEMAo>Rk|KALM|1kdh!vsX^3=B^I0*D0|DL|!?{M^6*VPKPH z00z{*-?BnHps)wJ`QKllIe-8D1EGJQNCgNWMh3}bctpOPvlbWzK!=K^+cJPc;};D5 g19O2S13-WQ0NlBGh$rR(5C8xG07*qoM6N<$f_QiWUjP6A diff --git a/lib/ts3phpframework/images/flags/sg.png b/lib/ts3phpframework/images/flags/sg.png deleted file mode 100644 index dd34d6121073fffcb2fcb5b9402b3e6361cded35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 468 zcmV;_0W1EAP)dtOYis{Le*Dj#JuDs`KNc)tl9OYUmifJZ zA4uJ=-~WIA`uFP>kj*SB3$z3vfIu4l|NYA>FaP8D^M5;ba1<8<4f|GC2UPm+H&ER# zkRGsxe?Y{*01!YRC;dKnkj2`X)zkCW_8s5b+Wvn23^5y|0jv~A0#!5q{{4%A0U&@_ zfL8pya^=_l{r?#l8F+XY{;)G~as30ko(ZTFY%s&0Ka9WsFiJ`S6$1niy`;Hnv5 zfRT}r0R;fL{~@sn5I`&p|Ni}W_wFAQ`~gBVzyJ~jk&qMs5MThRyiZo6SsHx+0000< KMNUMnLSTY6dB!#X diff --git a/lib/ts3phpframework/images/flags/sh.png b/lib/ts3phpframework/images/flags/sh.png deleted file mode 100644 index 4b1d2a29107be96413eb86e64a75ac7a3ba5793d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmYL{Z%9*77>Cd9?woAXO+#E-F%m^1b0Xy*Qky9{B^@hJqB6}jOKKPc70u1CS|Ug( z7>SA^1`5-}4+VvY=3G*k2%(8O!OWTIn!4?td(P>GANugV4?p-l@2B^fCONIbD;IAODX_{rV|BCn_NC>%qlWoHrzH=l|0Y^Rhgkwr%>N3 z(d)FjlCqjgyY4&yRH!;rb)|Z-v~HjxIkvar`*JLyzxBc-B?Ix`3*qGz4q3JAd`#LY+Xw^k(ph!n`d2H7`aI`Eh(LrOLs%9g zj93;8ws%s88WHkIqXqnSf?YSjh=@dF-}4L7dS0HFB@iNj8OY*&4>%Dn8t&*i)aXz6 zSX_wQ?~e=9UcwhrAtAf8XLVoTbE5+<^|-KK=D&>)yX6u!zrPCrbEr|4Yi(XyIGTQI zFEDsraAY{)DhUd*DN;Q?!uSxvkoT|31dF#>2L0DGeRcNZNehm>xm~}-9q?gtV@Qz` zv-lB19|m}3LHcg92}TUOb+%v(0bnUhB(5rQI9?ZY)h~Hw=%2Au&~WB@t;^kVE@F0Y z%=8f1ZN}R1MniiNxkJ!a;3!XFerfimE2A;1XJChGXJ=)MAVRubE8WFo1T(1Cmhdfa ztzC{Qms6asjkstFkFp5L#maeek84Y+NtW^Wf=SRytjpC1=BCX4NH^VxnQ`+YXocAv zR?lKskkKZN7D>{S3>4;4+gPYYq0_5iq@jsB^}M0yMT0|p`lM;R_dwbVrBg^4RRbsq Y$WB%-43-yHbAJTXS^1gPjGK@C0`m$%7XSbN diff --git a/lib/ts3phpframework/images/flags/si.png b/lib/ts3phpframework/images/flags/si.png deleted file mode 100644 index bb1476ff5fe8e0d3af4fc6bd11e513d95fd9cccd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 510 zcmVm9@#;PEzrU@Gx(rNA|FHo^Mn<3|00G3vEO>ZAhtlWIf1*N!=PZ8p<;&lH z{~7-L`S<7dzu$lU0~x=8==VP$LqeQ==EOq)0mSn6{g=m2e$<)X`O9Zpu5&$Np~P9Kn=gZ0kf<1I-4a zUtk1c`~{K>fBu3(0U&^Y8d(1RW7^4V^6LZG89>!QBmXe{`pfY9FT=0Dj8O6)!|#7g zK*az7#L~(TO=a{vExMP2%`MCSoB^FIcLe_%lf;|~%E5I`(IQNh}3Ao>6Q|DFUXMn*>AqQd`w z|1kXd^B;tM|Njjl{{hM0zwd6?1Q0+hV1xeud-4=Wy?p-%sO`^#2S61Jzk!N?s)6X& zzhA%p|N6}=D+{y%Ab`Lc{sL9~1=0UN4*CD*7s%9KAf+JHKs~=eB-8KTKvw|-5R1&; zzd&a|ob(5%^Z$Q=wHy9p13+aOpFRNu5F>N&`Tk_-7w>=n{RejQzkfh&Kn{rf10?_b z{tFTZibx5v&dxav5I~H7|Ney-|DWN1$%1FyagzUW0464;_wU~W1Q5$TW@eGxtUvee z3vAf*8|igK9~@*rr66bh|NrkNM8z+V zAV?>O@ek;bKfu6d002F*|Nr~{=Pyu%qcHbB24G}l{PX7zKmY(S0M7peLS*D^UKK~y z+6(XH|9gD^r>6bY*OZ>+`2GX^{Qmv@{`~#_{QUm>{r(dW1b1xK0st`p&i@3&%J4-( z6Giy=|7vRh4-WrbUHx`??d0*<@CX3>{QLa=`~Cm?`~Ld;{u~zu0R89!i0SVi2B1U! z{r&fU#+3gbKmA|6l!@v8=U+^J{{8>`mjUR&KfnL~{sUtC1qTg400I5L26X!4i0my} zo;{uZo#CfPX{7DT1DwDAf(-fnkMZ|^ra%9I0mS$d6bftr0mQhUfkCOfiE zM%HqlKU{maemr>kAILSo!3gZ8-+$N@WcKe}3J^dnRtyZx@9+FOdynDWy$P0%j62V; zZC)?>`}hA}zy1SB2;@n0006p>>h67sJD!pI8@uK6+#GPW%ce@CEFZM znTD)%K!F4J_qpc@AQp(ZPk%rA2T{TB=kLG2fBygZ4O9eD_xsnsUl6u5yEM=SfB<5# z6|+@gR}o|u1R4pn+XF1YrQf2oylS zAbS3(sBkhcTmc9mV6grHN=r(zLW3F{=D&YK84x>x_WT70A}|U80*H};VI?9O(a}F7 e1_Utx1Q-B;QgQb4eH!Wj0000PEol7!5I{@}e;EG$`~Mq){{FvoV+so& z6Zek;JYV*``O13q$!wq?2!V|I&+z9TKmf4-@!$W9Km&lr1Ie!(IeUNcyZo#F`{&0p z?&{CqnEw9%50U)~((nf$fIu4l{AK07*qoM6N<$g2hARp#T5? diff --git a/lib/ts3phpframework/images/flags/sn.png b/lib/ts3phpframework/images/flags/sn.png deleted file mode 100644 index eabb71db4e8275a5bfb7b1b8f3a8374d50da95db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 532 zcmV+v0_**WP)6{xSen|M~Ox&!2yPfTn)={d@hr-#`EU4p90fz>J~+=oo+i0%`d3@9*!wzk#ZO z2WQUEDXOGe*gO;$t?-?1~^z5 zels!xNuY7SApXOk^arFAjDSu82p~p=WCoxfknArIdOZOgs+`19}IpFa%0{xSUi1L7diFBr+f01$veIX40Tgn<}np4MoMn3N`o$god9 zrkzn;+j{#q5F}xeh49xZuI$05IKi0v3Lq917Le*!UxBJYN`Vr8|1$jj50VD5fvSOw z-(ZF~46zx($8#~-kUKOh9u19TNY0I~dG z`1hBA5y<}g_y4cI3}({*g*gAq^Z#dL_#dnH|JmpNJMaAe2etv|3x;0|00G4G>kr86 zzYquf`+xk=e@^EAQat}9xc>97{@;He<|?3qzo3u+2q2a}APrzwf*tnl_y6c6m z5?7266~G|=0}2mdsDK;{bP_-SF*1~XW%vY(NDyK`u#uw~6h{mUJPZH<1^~BhckWKq{Jk|L6Yw|Nrm*vcLXk{sL#*k)f0!)jRF?KX6FHLLC_7zyJOQ#RJf}AnqSv4E_E0 z_d>^cfB<4-C}v>z1dGUDNRj#r9OZBkNc8hC00bBS^Nnc?6(4BA00000NkvXXu0mjf DM=x{`~^7feaw| z@9%GBrr%pd7ytr@3Fu&;D>$G0;d%9&ckUlP_FsJLznOpkI<);49~%fU|NOOg<1c>p zU%YI;<@gu?0tjRS1JJ?0e*b^_hvDg;|Nnpg`SWY#%HJzjff!!CzZWj}wP?w&U%!5b zMg95nhXEjfKpOu4{R2W=zZm2}8km@V1qJfIu3a z^ZvQT`ny}__wU`%Fad@Sg!~P3A(#OSI%WR9r+OFw0*K`e1H&7RKZ`vj#ee<&!}=E_ z2M*0Ye}N7Llfc;c2aF@2)L(`#3;+SdxR!w-xR`AxVx?>``QKoX4p z{r>$=Qj`^FFF*h>?mzuiS(feBuYdplGyMPm{~rVab^il$89+1;fd$yvm=2wM1rR`t zfB*hvWMl+7=|4yZ16bGpcem@l{$rO?srZisfXY67`UDU_ED+y9gdmKw*T0{<`x@v9 zlkZkl}Tegi}1FC>)y z`~`;fe+5al?K4jS1P}|@5C%z67NEr6KmWj?{{J^f1u*QH|Ne!BH7L;kfnp0FfEXE= rk23safJY>Z`~zeELt=n*00bBSq*!cC{}>3t00000NkvXXu0mjfg_GrH diff --git a/lib/ts3phpframework/images/flags/sy.png b/lib/ts3phpframework/images/flags/sy.png deleted file mode 100644 index f5ce30dcb79b443ebc1615fe4889cc26e2d762b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 422 zcmV;X0a^ZuP)@|4`Xj5kLT%`al?B=W5I`)SK7Qoo3V-qKd5l^# zgv$taFhBq?zJ2?apPwJU>mjm?jEr~g+yMw6Mj$IKE$!aDd%wZp7Z^YoAQH^_^XK=U zKYvwJR4!h;2oOM^VEz63kEEm|Pzoptl!JgjVAdZn_zMF-#Q*_BG6D!N0MDLEDh$KY Qwg3PC07*qoM6N<$f z|Nj36M1Mf!|33`>e*gaqWCO|HKwFtO#a&sZ0t5gt0M7pel4t!zdFAutyc%F2ByLSib7d z-@iY8{9s{WsjaVha_-{UlG^LGvEO)A^**!$6$1ni3ljqaFhGRYPy6$qf&JG{kKey{ z|N8ae_ixs}{}``bdDhkT?#VOp#VvoBm>H#|fo1~)5aY*A1~#Xrf1jTKgW~`H-wePI z{Ri~aZw6pM{r$!84-_k)u=@Ltg1)Cf2{xiF#iKZ95W~`fDE7~ z|1pDN1{?_>vH!pR*Zxoe2p~qo;+=0k{eVOy5dHe~@Bg1a48OqWACLsaJOfY!7)!uZ dz{3I%U;rfUVNTmRI(Yy9002ovPDHLkV1m_xKPvzL diff --git a/lib/ts3phpframework/images/flags/tc.png b/lib/ts3phpframework/images/flags/tc.png deleted file mode 100644 index 8fc1156bec3389e54d3c5bb8339901773a881e68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 624 zcmV-$0+0QPP)Mt z2Fbqp@bUfi_XiXZ_x%As_WHU2H1hfc9TM^w3-JC0{^0Bg`~MgK0Qv%mWs{6kqN+Cc z+b3Uc-enXLWmi^s_2~6APR{Qy8GilxQ)j#p({t5y7`^LQ4&lw9Z0Ra5^`SSP!?%<&3?fU!$2L%N9{QCa@0Qv%mW$D2m zA^~iFet$Uihac>@UpF6ozx?O#ufL4HfBpRUndtzp5U;>@#TUPR{|1KG4}bt-0)`aO z`@jDF|MM3p^6S^{zdwKf{q+mXVfa4fgq7?27ZxvH%|34Sm*EEk!#{ukVgYLS^A{)$ z3^fq>3urc&4I=;kz4MwgW4X`2zkh%J`Om=vauPrQ0X6*k{pY`=2p7%A_P)?P zUwuVdAkKe=-@h3}_C6p$AOxEwQo+UIeHT5%mg3lYGL;@HP(LjqG0$?6F}(Ht8A z0K*^*BsuTDFa|;zm9Mc;PRcq|KMMBO%8|{GkrU*a2x&r-3HS3`xnqW1|R~39RolBu`vAj19S<{HjoWK z4L}tj8-Qm20eTwfuYbROLyY(bwgDi3SQvf*HG+%>>H*pSauQI_zkmNAP67ugNCPlf z{{97O00g6G8FFbZ~XHln?_bqJeH^V)*lb;YTJ&0)m(r7ytqc06HRil3NF`RsaA107*qo IM6N<$g5!7R+W-In diff --git a/lib/ts3phpframework/images/flags/tf.png b/lib/ts3phpframework/images/flags/tf.png deleted file mode 100644 index 80529a4361941e01d1def5d581bf2847cf99fef6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 527 zcmV+q0`UEbP)KfiwinSYl|od6I(APxT+{=azr6>87_{|pZw{QvzM zh#vfW|M&NwU%!FG-`~IfN=xzq?EwhD!Wi2C0Dv&)|Bp?Zs+hPi0R-LQn75%cY-O8s zAPsw;Q!9X27=Hcx_y6DDzyCn0!4P6RP{Xg^fBpb%_yyDhbQs7f8-Qku33L4cS@IvK z8OZ(n2kOgTzyGb@ek0IRW9ouaN6$P0x*s5bfH4)06qlIj4>;1{Yyp4(0|4dQTo>gF RMrQy3002ovPDHLkV1fdR=hFZH diff --git a/lib/ts3phpframework/images/flags/tg.png b/lib/ts3phpframework/images/flags/tg.png deleted file mode 100644 index 3aa00ad4dface0a9c23744ab451cec0443f187bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 562 zcmV-20?qx2P)@|6mN}b_RwI3=Dr@=ogG+VE_mq7La^(HIVqv%*^=nCj$%1|9}7Uoj(8m`RC6+ zAo~61@1NiQe*Xrt|Nh=Ea}z)Sfi-Y&{FjhmFg0aZxaj}$=L~=U)(L)O`TP6-zu*7= z1Ib@N^zYwqCU)6YF9v`BVgi}{>lcH)J%gU!|J)p)>i@rg^Kt&>WCWsLoQyxgk29dnvBpN5vQb0*LYVQ3gi&tp7jnGyMMp z@*mKbe}4Uk_!#8f-w;8De}5R+mEP<>2M|CkH{LKvi2wQh{WmZi827ytqc0C8?ZF&p#S!~g&Q07*qoM6N<$g49|K A6951J diff --git a/lib/ts3phpframework/images/flags/th.png b/lib/ts3phpframework/images/flags/th.png deleted file mode 100644 index dd8ba91719ba641502bc7ffda16c25dc71b2066c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 452 zcmV;#0XzPQP)@|4`Xj5kLTn#2^O%5QJf({+!S7KyMr1NSdb0?wsyYS6cNVdko7wub89?$EL;)x)00Ic8;m6; z*ldXL$Yz5{poPB}7`^}m5DPc2nu@9r4=+1782$pC1a=$HjDKJ@i17#P6G=(#Q>V-T z0*LYF&!5c9%>VxV!xcCX0F(uW(%ZLh0Ro8SA3Hl!NeKhQjeq|#{05SL7=Ql;MhF4{ ujRQ&nZP~jQAb=RZqDCa1IEDa#00RK>mSUL#9?hx%0000(5Af|u+{y|g&!S9Ft%(8imf-XR*|Ns8{XO&`< ztN44b9;zJZ^?&~W0*LYB$B#TbJpUo){|D*(`>^x>w|gKB?9z<#wQ%E^n3(S0zYh>V zEO6uD3`W^f29Wmu3`mZF`w$?27#UO<(rVJ~y}I}N&+p%VfB*XP3y6U1Uw^?QNbuL6 zzrX+d{i`Cbal7Zfib@b53s27mx! mU=U|u;Adc9XCM*)1Q-C-v^a{iiydVE0000+lNu{Qmp=|FW6D0*D1<1Ovm9m%kYQ|7p*Yo3ikU z7~kiESLFZv{{Q#iA0zqwf4<*Xu-*CD8$MYncA&8U0mQ`ckKy0n|9}7f|MB&2MbDkQ z1j{KKBL!IA2(Z7F;(zkuBe#mo9TT;SzkoLU{s(jwKmai@{QdX$=kGt?etVi7(p9*e z(|o73K&5wiaQBkXEB9so{`tH8jIplb^d$ZPi5h|uLD4*o5RnOS|{Qd{@Cr~j!0D)}y0}8T#$FHit{lE#dc*g~k_utsL zxj&Wpto`+k?f2h5mv;mM4gK>M6!-uE1hnA~P_?8O+wWh(`!4wX{Cn2j=z=is`~Uxb zzx=@K_DcEUJ7IZAUZAu8{sn~+Kmai^Fsw$4O9qB73=GeJhA}V*Ffg!yW&gnt6F`6g Y0QOrYft$MNbN~PV07*qoM6N<$f;FEW z@b~ZkKS1)&|37~i{`~p>`}cn&^2?@800G1T)Nta$zvt>t<757@uK4@^{4bCmpb7~3 z1tfp{|Md&VW|Wov$G`v(Kp+kO{{26+>+jbuf7A2+upj>Wf7$Q%RxoV1$N0e}Fas1Q1BW)@@rKJa|xATBWA`D>(WW1JFHv zzy7cP0k+{MTm!^O009K@!>LoJmn~avX#S_9;5YZ-KmTX``u`YaHjD&?*dJiPF#rS* zNW;&cKP?=87yABYZ~OCq-%n(9P{tpi22h9t6$1niNQ1e-pD1xDrvBdy@BT2zfI@>2 zY$OAO1fsuxAqeOsfB<52Wnfst00RHO2+qJn5C9Nh04p0wT74^6IRF3v07*qoM6N<$ Ef~oTCkN^Mx diff --git a/lib/ts3phpframework/images/flags/tm.png b/lib/ts3phpframework/images/flags/tm.png deleted file mode 100644 index 828020ecd0f6fc73348373c9e7a235fdced09de7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 593 zcmV-X0VKiqu&g@GZ_kb&V31Gky(*8`UselaloV1SZ886W^4001!n&i@1e004Y* zk0R&!|NaLC5DIk$@CyeC@AU9ebDYiJ)zswL{Qdm<{`>p<{rmm%TMiuO{1voVt6d+$)WVk%^O){nwx0zkdJv^%rQ#Z=eQ%0Ac}Z`19}Y zkI%oqe*ekA`2WvehFzDBOo*xZ{rB(cQ`_&qdGhP`Z=jyvAOx}jAb?nae){+CFDvWc zZ(siLa{c@D=g;LQw^HX+sY@u`d-M3!$G1SGAWQ!Ifj9{ufLMTG0<_`#=U?|Ye)D|< z8pH7G?=PVA*@stt1I-4xpA0e#40jk9 f${7d%fB*vk3(!F(w2U8u00000NkvXXu0mjf+94t7 diff --git a/lib/ts3phpframework/images/flags/tn.png b/lib/ts3phpframework/images/flags/tn.png deleted file mode 100644 index 183cdd3dc98c6957bde83f375a431e543a3ce9e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 495 zcmV@|4`Xj5kLT%gT|L_r@28Q3iff@h;hzaCwplYy<4FCT9KXmB7 zhQ|Nt)Bg(#gN*m^{Qvt8$Of<_K(zn?!~}BDpT8hi0uj&>pxItt|NHv>A2{&e(C|Mm zFGw7s;m;qS=>P!)((wQ9AF!W(0sZ}7M&|#9_5TYB{zpfHZ20g2t^wjCfB*tH2_nSs z8?4R7=Kq6S{f9wP5^T(0hI#XVIvK%6GC)WrB}fdh6SO{nUiXv3iAlW}aH!uJM5J&?vILH{_iZHeP0c!XQ3PuJ7 zfB*t%VEX-sK~fTI%wL8-Af1e0BN-qh5dHlNK|sX-0mS$fH6j^sMDRaYQUC}r0RA0L U-~OCsp8x;=07*qoM6N<$f)6&Rz5oCK diff --git a/lib/ts3phpframework/images/flags/tr.png b/lib/ts3phpframework/images/flags/tr.png deleted file mode 100644 index be32f77e9910c0896c1ee8e7ed4f0edf815a517e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 492 zcmV@|4`Xj5kLT%yy% zCxE~j7#aURc>+`lQtjr(@bBOM9XtMi`UFz<>-YcPzyAOF1!ObI$^vZw2q2J#|6qeb zs-vSBOie-Rl$HN?bb!_U0_g#3VEFwTr~x2=m_Y6Zss`GqsL0^t^nd#F|4B*zH*EO- z_3QuT%m4H6g6)A?0#pkSKujPf{rCwIb#eU5`( z{s2t}2q2J#|9}60{Pg58FvR|AYlEDjruP5RC6KEgJ^H_IA4CJhNdN)F0>q49OBog~ z{?Etvzo-c07$As@{Qu?4|3!FoS~(Xu$ujuK&Ki|5;f$7pYF;Nfxh(xqFs zZUMDjzjMbfEbRY>5C0Dx`v3aP|JSeozj_5kj66I)?%V+g05Jg0{{w&k0RJ5w0P^!X zSy|WJ-R9=z(aMV97z{4myy=pj4$^bx3|zy{hYtY)h`Ao9!QA5iyLbPuTmkB_PfP?Vee~$j z!-o&gUAyj)n+wu&>J&%=KmU)%j{yP*q=CWA45Z=rFNTYkfO?!$Q_o+&{s0WlT)E;? zRQUhj|NkdWF!J+%fBF<4fS7B68jOwqzkLe|6QI@S&;S4b-#s()-1Y1C!Qjl5tA6F> zpisYc>&x@!00G2Y!@$5~Xb92(47=Z8{{bD%z~Ggi4>bPny?b}>+&OjWQc!g@0~6Et z-Maw-h`Ac5K~JB7o9jOp7XvpB0}lu>-nqlT$mpA&|LpDCZ{NOs`t<42?c44-IbZwx z0Rjj;B7x{N1H(%OhUW|nPgz+XA3Vr_1a9x%4G>@ep<^{rq?UTJ00000NkvXXu0mjf Doa;3l diff --git a/lib/ts3phpframework/images/flags/tv.png b/lib/ts3phpframework/images/flags/tv.png deleted file mode 100644 index 28274c5fb40e5d3bacd7c05d9a1b8017eeaffa6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 536 zcmV+z0_XjSP)mzpv3Mmw05Sgm{~xFtLc$sUu>nR##!sI<0R#{WMEdpj-yJ7j ze)|0V&%b{_!~X#7`1>EofS_N0|E)GoUH&SsFy}2m05O4F@}ffYb$qvjbfSUipMQUU zgY^9U_4m&&5D8KZ)HC5u^uad<48Q&W1P~L@hOIAb7eDp_T4W)^*Xg48{r4ZBJ-_}k z{QCPJq~Q-pPnz693xQJ%zkUG(5aZwHtqd&u|9`*u&+TyOvq{_Ghd=&6oB?#w{~Yv(xYPgr|NRH*haKioowt*& z{dC`3v>70P7=Ql!$;`|Q@(GT>fdHT^FqGcDeG3pkjNS|k>E&sEfzAeo{ckY&=g(gd z`CCrwmxA8!XLtTy-uM6CzrVnM%iVPzAb=R%ks=j>et^j`MFs;Wh8c4i)_^1XKP)u> a1Q-A&>r+tW$-Nl>0000<~s!0-E7R}a|Ns2?4|9|}gs%Dgx1=;`*KrBFO{{8#+``2Fv2B6@-@8AFY{`(K80jdYk13&NH4;SYnOGgJvc0I@K9VW@Vk1}Xmk4~YK$|NH0P z-@pI<0D+Rop8&DnA}oIvEc_iD{O9-Y-=|4+U?1uFgf@9*z_zyJRJ z%fS3QR^zuR^Y0tyerNXndi(YlP_?gzto2+5fB<3vIsj-gQ0X6_*?&Q*d^>boB3^zoi8Kq^tbl{qlR!{9jwQ|Nij< z=(=A?F~8j-MSe1{Hl8Yc@zaXo%Ljk}VgUvb(2HJbe?0kqy?_3vsPXrUmq2rWE6M!I zE@4*I;Mw}vw&7&iFGdC>zW)rr{s9CK3xfnhrsi*1wqMhx{@J=6sPgxpU%z6)f4fBr zzxpd#a3tyYE8}0lKnA+|-+zWbe*glA<)R0}-=}{Pnt#7~1q_Mb;=;f3i~oshNgsS> zIr~z~(_bRL|NZ|1LO_>;A_pLVSoBpHQd9nLa7ao@{lMMx#__lBLe9Cjx?EiU z71{s)`Oon8FXP|;z>s7BItd_v7-5mj(Adb}701wVj$!S*>kNN{fN~5FV)t0eYh-DxnQ(+0I@JIfmA>F`X8wD?>`2h#NWRRzyE`zA&Pzh5tt#% z!^rUCA3y+sZ1@LM1hf`pHc0ia|NsB|1uKPX0CRu;1-SztfLMSo`wOxir1}rsY$VlC z667idh7Sw?0mQ-}a!Q0#;n&}vAb0=!_Zy@WNd5!6=O2ju7s{65Vq=gx0uVrqe;+b1 z$mIY3|KLBvF9x7j{{!v#g_UGtQhI;<6hHv607H@yECdWlR7EJN!LomVp$!l~APvkQ z4p0cL2#YobhQA>6hXEjfKpL3-19eKmL_s!=;22W8vpXP)6RGKQPvx1q)UK1Q6rb{|u}Q zRsa7#{m<~1f#L7}|GzNK{&HxZVEKJ4>jAefr9{u_M=MTegAo-i2ynN}MJ5kZm z42KRel$J95{>|{~*Z<$Y8RdVo9Ap3pAeIsa2H!t_KmPs=bot-kKnMR0GBy2s>sC=w zQFmwO;@`jj{`v(%zkl=p`BTQg01!Yd{Xp;j{qx|@pI^U!0X_En_iwRd$6{h)tX8f( zaOhC?&!0e%U%!3phy1#1%V=eK#YHXK~n$!{#(ib5I~GyfqpU(k2*|8J(R-+sudaynhucHbwAMTnor{mwqO^w7JHzaBsT z{O^B8RYf5+LvDs&KmRKVd78=o{`1#HTiEo_OolaGleS)G+IQ#sUI`b*pv<`1zCJ=H0jd{{2S>p`ri%{LsXJ%FbMS z$#S`6f|?OG!^Jxczkf6Q`UNF{l0Sd`ad7zm>({^EzyAS6{{CgrkluOb3l1A>ZU2~A zK+FZ=zkmP!`TOVhpFbzBzFaPmD2$N3;+$pK?>zdet`f0002ovPDHLkV1gy;I?Vt8 diff --git a/lib/ts3phpframework/images/flags/um.png b/lib/ts3phpframework/images/flags/um.png deleted file mode 100644 index c1dd9654b0705371876d3e3d06f950be02de2a73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 571 zcmV-B0>u4^P)1J@ZrOUii!$=0Ad7ci1(2A^!3kwFaT->5i7Ttz54h6XL$JkA3s3o z=g)t?e>01U3h&zo5I`(I-#Hr#t~u}$WXZu-Kyv1Rm&rE5wcB1YFI@@=0EYkn8G$4- z^Xb{M0Ro8S57@^*QJ}#<$Im$M^4iKw z00a=@`Sa(sw6y;I{R{T)e~6KA2AmBHF`#D(ii!XNh(#nN}rF)(}plRy9vU;su%e@J`J?dSji002ov JPDHLkV1n4Y8}|SJ diff --git a/lib/ts3phpframework/images/flags/us.png b/lib/ts3phpframework/images/flags/us.png deleted file mode 100644 index 10f451fe85c41c6c9a06d543a57114ae2f87ecc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 609 zcmV-n0-pVeP){qW|y?pud`Sa)3|NY&vWd%S0u>b>P!2!lUe;6EF*#G_c zFVXVt@6Q{uX@40W{p0iY2Aa+A^Cu7i8KT+YH}2j52q4BskM2rJ$^k9;2Xxc_|Np=M z&VaLlA*IO5FlECMfB<5VUNC{tBZO(|zW*;@GJN;|bTJ71`0*d;`d`2P!x=ymOA`2> z+y@9C##^^8%gd{MW@Y91_2d742B2~OQNf=-zkmD?Vqkdk_wPTUNeuu2#KPTG{_;O4 v7C%8E5*DLB7#Kb?Fnj}}-(W6879hX?8lYRg`Y`<~00000NkvXXu0mjfD6Jtx diff --git a/lib/ts3phpframework/images/flags/uy.png b/lib/ts3phpframework/images/flags/uy.png deleted file mode 100644 index 31d948a067fe02d067a8c2e69f28cca446bc7c57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 532 zcmV+v0_**WP)_vmzq~N}&z08z z0*LYY{pZr+B0$d}2MCnI@DC;m3N;oM#uMkR0R#{ugY)L9Y<*xj0QCR^`!^)W!R$Za z5CobHbl5+T3;%B|S`QFFjQ1Zt|MTw;G#Vi+hCg5i(ELAtfD|ak8UBG;ObiSF0R{lf Wla#5zB1?M!0000JMe1P}`Y1HZufM;3|NZsr4^XwNEI-g5fB<4iWtjhPj`qjL zFGT_P{{Q>;-(R370Ro7T!5$Ws$Po%5A+Zb!3j_cNFaSC{Z(fWD@s$7o002ovPDHLk FV1jsy^u+)G diff --git a/lib/ts3phpframework/images/flags/va.png b/lib/ts3phpframework/images/flags/va.png deleted file mode 100644 index b31eaf225d6fd770e0557c2baf8747c91ce88983..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 553 zcmV+^0@nSBP)|05Jg_ z#sD@3Z1&&(|Ni{{_Zx)%v%Gr!NnLzkb;C z@#QWhJ{xI9$+*)bNX$S?E90e{K^EMkYok78VXhR-hjM0*K`g z$j^Tmm_>oEVgxdn{xJOg$-v0L$jHRN$OsH@P9Y&+^ne@=1^@xXcy~X;zaPM$WdOPj ri2i^{AeYDB@IM9-1r;P))4B5XW#s0WPsWLbObPT z00IbN14#96puqp%TKvBf)PA*{`~CO-uM~~n%6z|m{re4Z55!3T0R+GV5`UO(`=kK4te?c|?1P~}#f$jmC10=!0@{8gBFK@Zu z-~WJALqveC|MTzfA7GIDVE_mqkOrW8BqZ2?K4D^#WMJTBVE7%b47BbKBg1c?EHl#| zW&XdQF#ikE01!Zo3=CVrargu%_x5NZPzVyc@Ms2-@*Gr#1lu5DU{kh6%sopXB}uDxAo`@Bt_a*7F+) z{Q{%kjEu5C8vp``Wse8Lf5q7h438n|z~nEOsZga5l7ZnjPy;{!05Jg0{{a91!FF~d z;^O)I`~dv>{`>s@o}L{E2?GEB|Mm6!N=n`P`~Ld+{`>p?A0G$7!M*~B3FM_eAU;q6 zNCH*w+4I@c^Ny?Q?QPpWZQiU1R1HBuWkA0H1P}`l|NYDG=gP=Ihyj(0CItil0R{kn^jdV2 S*Eqib00003_-&c2+@O*Bba;fM%rBo$$qwJnuekcf#0k*RG7MM`2+5Y7dK4k?R% z*@ue~6f;u_A~T0evP6qS=VxXnGS_mt>CSmS&gmG`kLSL)e_Vf_=c&!fKB7`4C;*C(7s2O*P zOs1$U0urzb3<=a`d9ABG4Q$eK<6~5Cg~V%B8`UqrfRSN8f&?QTVICs^VT=&p*?Eut zt4Ur&-BL_ON(Z|Xfgo93lf|gRkT$Mz-7^OQoD^XMF@}g>R?uoU0094KbXv)l?aF0E zh@GXQVr04m@05R(Rjxq*p|CCIRfv;QJmH1kf!hsqX*sha?_l;f%e5i5I~4YG#H4;6sPG2&U~bv( zNr`eMXGIX9?wP^zPQP(6+&$05Jg0{{;N}{t6CR|M}we`P%>f+X)5&j)Fc04NUj< zI`HZ2Woe@k6UF22`V|Qe2MTi(6bb?WF#yj00*Hv<{QLmnFd+P z9@fS%;@9^E|H1b5`Vk8^2@Yw;#}(}C_yUN9iGkt%y>Cxm>T2lO13mifZBc!n`jhHL z!MK>$6Z_d%|GfHMapIVnqod%T-`{|q1_&S~IR%b4Z+;63vi@iI?>jBz=eJjkjQ{>J z{QUQa@gMhBW_GSe5B=V~`@+h~@c%z3lmG&V@$K8U{QUg?|NjRX|KX9x@@rf{MxIY^ z?fG>3gQ&3ruaE-Yw>fW_PfAH~0~Or8dmA8tSRg?T(ZDLQOiOw%6RWM9%$i>kkAMHu z-oH0qLBYb*loP0ck&zJ?LI42-(g0BnBsn<*tTlsx%zxbLe*S!R<%*E3>|Z7(9Y#iG zpdch>0Ro8e`Sa&!arp;m4%k`<1H=Xjf<=G;Aix0Vb{`Xo7A9K&0000@|4`Xj5kLT%B_22*h{r-RE_y1qN|Ns8=|JN^|IHRmA&<212VgZ}|A4N4# z+WpUe-rxU^{Q|504bi~x`!`SnKmf4-F(Xhl(8fQ1fG+vp^85d{-~aW0|NsB{f9tRR zg1`PJA~XO^2M8drlm7gLxRT-bpa1p0|1bLmQVm3Azy5pw{{IQ;B%q-{(*XjA3FM@| zf53hMJK)W)|CK-uK=ku}!>|93eu7kk5yVLV0R(o^Z;+)RSAk6exg_KF|98LtFaPy_ z#c#OrKtum9FaQJ)NCPuC$bbfbRI>n`@$3IHusZAC|2cmD|MKhqAD{+Mr~sV<5I`Ue zOuzpyNJ@f@0s0=KlTj9AB*>SXe;D}wK*A7+fQkVEi190GMB<5K2mlB$03I1qT8uIj Q5C8xG07*qoM6N<$f}XY6qW}N^ diff --git a/lib/ts3phpframework/images/flags/vu.png b/lib/ts3phpframework/images/flags/vu.png deleted file mode 100644 index b3397bc63d718b344e604266259134e653925c9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 604 zcmV-i0;BzjP)7(YpZ_rO%ce~L0mQ<@*ghnz= zZvXM=_iyVze?clB=ogUu_5ar|Ae&KE_8$WSKmaiTHT?Vg|MaE5OE>+VAUAUr;?j4FCZIvLVX%uQ>mocOU*NTK^}%njy93_oP3+fBpUa=kKpye|`ZO zzyE?r`Mc+5Xcyo_v6>E-#|Nl{r(LkAS94bRQz)6 z1Oq?-fi&zp{`>yDUnV+0)eJF{zWfaN_0t9DjNiZhfxY|}ME?2z=O_CghC>Vh0R+`!~0W%8&aG{{H+4 zRPp!M??1nPG5q=k)Wabw3seITKp+kO{xLwc{r>&$?_UrCGJgGL;^k4Qujka#`tk7L zjnovNAkb9+0R(gvNCCu>f4~1QF);xde}DY=^Xr#I=|`5hhp|NZyp>({@(egUPqbabS$v+tIbNu;L>xVSv%=>ggR z5I`*V_U`A@(fj`3!N1?XfHr^}17rYw{OcFcC69Z0BvMmfELgy8V88%&5l9HrLN(5b9xs8l&q^Gm-@&XkD1Q1BW|346ee?wJ+H2_`p`^l3V z+1Wtu|3AMO{`_T8Q2{Cj2q2bUARGR$NlJo(=nv2bFrDDw2U!bb{QV0-KNuJQ0*G-b s1H(6@xcrC2{sj~H2V-zBFaQJ?0G2^Lae{Q+uK)l507*qoM6N<$f;6K8u>b%7 diff --git a/lib/ts3phpframework/images/flags/ws.png b/lib/ts3phpframework/images/flags/ws.png deleted file mode 100644 index c16950802ea95b40a4e024be6cce870b1991f40e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 476 zcmV<20VDp2P)>E69JA<-5ee*C|6>(%ey48MQ<`3*E1sOaY}WDP*a00a=wNxxYB{9yb2 zOU?HFZD2h;3gJl2w`NO~f5I`Ue%-|qnfGfh(_6MlpFT>xzKtBKk z5J&^l?>`KZl3-*0GW-GQWCR<@03m_s?_UT4Dh3E3#;>Rm$$$~H$WlN65MTgr(_Ikn S3@&c~00004%P)h=Z!r1m*T3JtfNUmdS)dI70mLHE z+xy?%p5eHez0mS(A>sL-rPOy{yGk_s3 zz{tq>=+Ps90Al&~?;k`pNCN|I|RMxbJV00L=%3E(v!XamT}{{RArWx|9$7Z{pWi2U{IKN}lRCnF;x&=P&!(V3Rv&T;|GP6K500a;d#1A^U zy8js%fB*jT=jRXRU*A|5K#2L*r(ZvQ{P_O!=da%umKG4l0|XG%NkAKznV4BvSbj4y zawHV~fBoj~uiyXJSQwZYIoR0QIXM3O{tc7`Dgy{0# diff --git a/lib/ts3phpframework/images/flags/za.png b/lib/ts3phpframework/images/flags/za.png deleted file mode 100644 index 57c58e2119f402072640ca758657798b621f3fb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 642 zcmV-|0)737P)Cfuwe;F7c=r;qyPX>nX3=Cfx7(O#Fd}LsF&%p4OfdL?Z7#j~W z{9>KL@b8bfkaUokt?1q(EJu$q{Qdp^&mV?AfBydlG2rBvO`8A$h{fmzgIW0J+B07s zK74uV#pQB`MAdI!SdN|k|KJ`--LK#OfB*Xb>lcvCC@cGqfdL=@05Jg0{{a910Lj6A zAt&mC*9zzO1pWQ@b1`Tn1`iV6=KuBe|Nj2}{{8>`{{Q~|0SOB6tE&PCq@k>=Oh@B| zgDu0v2b@p;u)h2C^Y4EK4rY$O|Ni{`3qc?^$?%A8m^2X}fLMSU{`~p7aqHLD@0rW| zzIWc|c>Ry-$DePXKfn0(_xG>AzksTL{re5n#{Tyw!wUw000L?F`}dEV6O*(3zu6Di z9{gne@#pKG|NpqSh1vf81DXBz&mW+Me}8zmL>PD&00Ic4!QY)xLzl7RCikV!EWdtz zoorLj&BXoYF88-DfB*gk`{Eza7yo#;S!C4G00M|*elvr*8B6X-zBgb0FtGkEHc8mM zoOScs_b*;Q0~!ksq<=swfJjA!^Ww!_00G4E&x@hvA~zQkvxU59n3VsHd7Nj?ec|R~ zkmuqAx#JHo0{#K*`TG}00$uYDAb=PdGJ(Ek5Vx?d6PS=4{E7kSFNS|$^b5xL14ayB ck_{lh0N_F{UmK66LjV8(07*qoM6N<$f>aVd=Kufz diff --git a/lib/ts3phpframework/images/flags/zm.png b/lib/ts3phpframework/images/flags/zm.png deleted file mode 100644 index c25b07beef894408ae11c3be294d6e0eeb28c0bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 500 zcmVLz(k0+Rp#|Nr~{@4x^5fB>iy$Oe)U zA3pkg`SAPSuU~)vaR2(F*|!oPfLI`Azxw(Lr25~#KmY#x{rl(7|GyyW-|wp|{||Bf z=)Cuc_0O*fYWnY`7ytr@1!(pEfB(To0uBE22c#NA{{8#+_rKq)zyAFG`zKdY6euFW z2yzlY0I`6SGJqWbGV%`;{r&ytA5hcp-u`P`AAdOg`t|1D?}h2=^+y>10tjRS&?yMj zfBygt2HEouXg1LCzyJLD1w#LR1MLR}1V8|>0KE@nffPa916Bvu_V4#Epof105yNkw zzknJ50tl=DS->P)FK#X6%e&u3i|I74$@9uP0*YE!se={)r{r~?r68Z&3 zzZn^2KYiK`5I`&p3=IF7JHD>uaSofgtUAf*-w!6nU;qF7`S<(x|35&+uYZ4j|Njjl zS;T)|pU40ZKrEjoRWbQ1@P?oGFzcPCjLiCzcU8ZC{rmejNW<@6e}U*1kPT$~=Kk_~ z83O}A05QHjx|ikdd7h}_|NsB_wl9j+&d<}^`}fbEzkmP!1q4tEL@O#P9zA*#Ab?m{ zv`qe9Isj6Ah@Z*IdsTw}WYHgB8-D!*lmGvK*?)d>i2vThzyJ_HEdLn(@uk-N0|t-& z`$Yv&?#y3UfPVP*`ya#a|BS!>G5-DsFR)1c1&eHCHYDzO7ytqc0P0;>l>h9)WB>pF M07*qoM6N<$g71PE`~Uy| diff --git a/lib/ts3phpframework/images/icons/ts3client.ico b/lib/ts3phpframework/images/icons/ts3client.ico deleted file mode 100644 index 3b3aef0ef109091c806213a6e332133396965e1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70333 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

lG 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 diff --git a/lib/ts3phpframework/images/icons/ts3server.ico b/lib/ts3phpframework/images/icons/ts3server.ico deleted file mode 100644 index 3d5c2776009e03e7951a6434464909293e5b0a21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69372 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

iaZ#JzG}=BM-Tqo7w6Y24jx8K*3eOr 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 diff --git a/lib/ts3phpframework/images/viewer/channel_flag_default.png b/lib/ts3phpframework/images/viewer/channel_flag_default.png deleted file mode 100644 index 4f90c9e99ee54af244711dc91721baa5cc1adf94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 696 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 diff --git a/lib/ts3phpframework/images/viewer/channel_open.png b/lib/ts3phpframework/images/viewer/channel_open.png deleted file mode 100644 index bed4b522c62f8a6251bd3af67b62d796e7367d0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 847 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 diff --git a/lib/ts3phpframework/images/viewer/client_cc_talk.png b/lib/ts3phpframework/images/viewer/client_cc_talk.png deleted file mode 100644 index a5f7f8e391572b0df4344f4ba2aff3dffe1e7de9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 868 zcmV-q1DpJbP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igV> z3KS!eur!MR00QJmL_t(I%XO1YXk1kk$A9;}J8zyZnVFbOC(&dYjI;@9Dl}vvRnXKH zp}1(F6s$!QSAvS-!c7(~TDmA|mtC}7Rl(3!(WWpUXse+%2DCA$B~r~ylVB&w%w#6X z`Pa z_mvVtB$4*f!~4g~{_X9wq)p0|=}kr(p_Iwar@GmbpW@nB*C4Z%=M*&U=FyJ+p6o2i zrYhd*O~NqRY&ir{BB+u{!Qs8v)bOVr`xLBX1_pjirJKO>YAi2aN1FVvswJ>(=*$37 z^q7KBHY$W|f|Rhh1j<vYQk^Pwuj5PTn8 z7b-4z0T4GGg~7!28w2@+&yF`+7PPfNV*?mQ!}<|!$j9?M7MGw@hPy=|a(`Ajtlko} z#oTm(U47kh$;uC>#x zopM&s+-}rgUQ+t?w=6A0>)G{(1LHnmXlUq8sW> zapgPB2d7_}8^2un==h0uKlELvRwxuu_W_+-x3YiG|9yZX{W#~|%iB>x2<4od#X0Z$KKFf|=e>%(ma=Ln`xKek54nZq#3&X?(+6^YJ@xgQ zah0nj#j$Vfi5YwLvpHst9w!y*L8KYVNlZ?q*5L4w57`=|^q)OzkcEeY z%1@4nRmb)&P;Pqr4j-jhpX70S>rG)rJJ)rX`e266TAO@xFpG&!J0jXi+}a7MO|*#L z-q;bb(>=|xEF~RDtol9-IwDT*j3YeW#VIwYOwbRZwcZ~kzHJS|nB1*HX##o=4>;tR z_-rfO3aM3KJJ8qypp<%pLnbsv&ADYnba~3fBioAvM3bdhUO{-eIJS)~NBwV7zPs}b zlV)g>VnPEZ7W3@Tk@zCoUscKWxN9AuQXQjQ@^BpqseB~fZa1kE$BAJO1Vq78(eJ60 zruRgHWC`}*~7&td#o zy}fcq+<8yFVoU#_jP3m_>i>MGdEl?P&(HGp{kx;O7Xl0bX{J-KN`)Pt00000NkvXX Hu0mjf;GdO) diff --git a/lib/ts3phpframework/images/viewer/client_mic_disabled.png b/lib/ts3phpframework/images/viewer/client_mic_disabled.png deleted file mode 100644 index 107b72536ee89d9dc7b13e462da0bc6752c087ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 977 zcmV;?11|iDP)z@;o?%Qu_W%F@AY({UO#lFTB>(_`g8%^e{{R4h=l}px z2mk>USO5SzmjD14Z`WEMkN^M!M@d9MRCwB?lihDqWdO#X_ne-V)_$*LZeg3u;#f9e zNJ=)N7tY#6U?Pcx=><+RF1(s7F+#bKgqbXH23;1EsBxHV3m15?VZ1OSLdpg*8(9L8 zk9OVJV1s_r(~on``<~Ye&G4S*5BTNxJjp{i=Xjc!0N_nR0&lmsPq%b-ZYGi>2$Y(% zN(EpHb^w`dM!lMp!KjXxYip60Wo>+R_O zd%Fi6W-F?^9#l$YEG@}UOJ%5{097e4v)BD(L`o_AlGHE_94VhYYkTq0qwmt&cS4h8 zSS?lz4u64j6BGDq_)AJk#hgrb+n=}CEoGbW0Kvz{by*`stD5z)7d@EnN{QF3arz)y3)_WSKlr`>Ka!wJsG{c<_4$K$g@ zUhn=_o15#_(rHBF@!}?n#r)3lviV;FLd5-nfWX&Q=kBIcy?_0EXV=wOY^$8jHo-7{ zW%UiAk;TOWzr|v*nRD!}t9wS^Tv|8yxW4}Kv2gg6i>VaG63OyfrTAEaAh42G&Q zGv}0xqS;_fFKC*SRMqJPNz@;o?%Qu_W%F@AY({UO#lFTB>(_`g8%^e{{R4h=l}px z2mk>USO5SzmjD14Z`WEMkN^M!07*naRCwB?kX=ZVdjQ6t_tST7>c(CoG94DqzD~@( zr+q9(pXYEyhSq_)=;nAa>$XtL#2~tevhE@Z@pP14@a@RFs`j&X1VJ z-qyQb_y2bhE&90Yxqp8Ao`<27;&;LWKvPo_7={7MvfwxlU!jyzgu~&rX0tV1W-pVc zr>8Ize|xi{!dWi}0$N&Hzyg5LXoSgRf+R^ur_&Gw0SvDpbID7US zQmGU){S)RB2_%*h&dJHipA85hc=)jAf3NpU@o?l79McmxxpfQdM-IRr8h9BS8_z$# z-d?i$)Txn2Lqlu6GoX|r7z{=KId-DB=gDIfhlAL?V+U*-H{zb#y?n00d;6lmmaK9( z@SwiFY1aM7C|+X?xPwi@LgFs6KKSa%m|HRxAGUc=+Mk+V(t$10RNl zU?Btxic**b#N% zBeI;I{U8(yol#YlpPQSBIGwwq9LL?NtEtKN`+Ng4$B*xmw{OSt(h@SN3R_VT?o3UI znx+8&7)mJ`8ylf0%3F@(EQAo&Vzo|qYHBu>cXl!`o3WfsLVy1rnN$j&78XEkHr=;( zuh`bs_GN-3Nf1TRt!Y}Z%jJ@6MMaxecXTl6++67I-eKy+3oto3P@_@MWD>6f0m0PO zrDi{%lww)etLNtD7w+EeAdh{|KE7GE4$l<@qmc+!cs$YE_V)Fr@^bu_NFc_taCp6) z*$J(!tssPe=Xo#;gYNF`)0s@>-X*u&pJOmsdo^ukVPPSvs;c&nT)5z~?Adc`SXJwr go14D?ekY#?08wX9Feo3M2LJ#707*qoM6N<$f<5A(Y5)KL diff --git a/lib/ts3phpframework/images/viewer/client_priority.png b/lib/ts3phpframework/images/viewer/client_priority.png deleted file mode 100644 index b54b7b096807087a8319307bc40011aaf7646456..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1215 zcmV;w1VHKLZ*U+=)p!fv7f#TG` zAxLl%!EgG`&*5<32cu%worY0{L9A7~=}6b}76Isk~1IN~P)K3@?4 z&zpALY4A7Z!>t0&I7qECf*j`WHIYAjW_h^ivJu4lvb8y9VL`DD`rG0ZKvcZ$L@8 zo)6*!Fng}&gE0q~LGCMnsiR8`P)pL0I_sTkS+y)n+TA3GZ*h1dBmd6 zPPMfiz;QhsdzIzoWuA*aAIRqye>DL_1Y~WSi2PgEdpTYm3RO-`O;c56VcRxyb8{35 ze^V2xX*BuY5PaV|nM}TZKC&~y(9jQr!`tx1=i%~0Ow&XVF*Y3)!M5#pPn_sIAAKfH zCUcM7yBo=7r}=AX39U8a`7Gu0Bbx%)w*7Hm-M<2|L+<@JFw1J`wj5{Hi*x;lE5 z_QM_Y_MRkt_YNH$iJ{5K$#%=KL@D)%Tw{&4y`!e)@k32bO zJkO)EtBdZVN3m^t?e&TXd-l8_fyV+F%d&onMx$5Wdi$M1u~-N%%rE4wUmMM6(@e)= zF?`=gDMdv^1?zH@i17Kqh0ek6zq?pvS@_}`rBVr{M2dx#KwVv(?5vCA;_-M(PcoU= zcmpLOH1BU^;lVt?;1*h2+SvQzUY>4fpt5ocf84l1Ds}to-^a#|{5&#Jxe>qw&{|^{ z#-i35t<7`VG{?0z(OPez@;o?%Qu_W%F@AY({UO#lFTB>(_`g8%^e{{R4h=l}px z2mk>USO5SzmjD14Z`WEMkN^Mz`$y-Xp2L90UdR98&fuL8tuwhNY%}) zO`0uB+PJ1Ur^$KAdGR8Q`~iFZfG?j1o<{^hz>Q28U}R*3wzf6^#>dCi!DpVgI@Yg4 zuiKbTgSzYC1Yr3A4Fo1(I#x;?pExMO0Et9`Y&MIks+gwP*V)s}&gX{68zxIGWL7MS zR)ebJbEVcGU$fYj{<$SE41;7cNj{$k2<8eU&MuT#Sgn(}w#pULVcry!|Nawo@if-J zC~e`USOKtY8(r6l$KwF*a=k&`@i?|r=g6YT>0*tmmkR9I@(pAAHzH=gMBco%C77Bz zI_7z<8~A<@i$+DUTIJL8MK0?$s4B<~ZYh7v?%^HyuH@aJ6vy7L0lS-l;kQQjJlOvb z7fKaQoH@tm-+oO+Hvs_+4>G^;_Nx(WN5KmmdXwAv&L0KFnt_>fv;3!M%;d}bk(x$x zOf+W&Rc)tc7~Io0Npize*q)1Qm;7+}1btiIYprlquXFTdntv}ZvuRz5c(hDz;tL{f zeIb^}m@jK8fu z+If_}HcwY>tzcOeLI`}{Z{2|qf@Cs@A5t`TQT^wa19MN;?Nv;>#^gJhA0zqOGO|Mn zYnq0XlCG{UOw()$G)==W4CZsW3;hrGzjS1Bsyse@_9sP%z+4FL+j?i?loC=DDJ4P( zf*`nlbj?7aP{8v%(&_X^1CI>6dHWqbC*!ex3_~Y!Z{+dZ!aNr*UaIQ4ju3+DY5;Mg b@BIG&6kuZVdV(VA00000NkvXXu0mjfAT6MN diff --git a/lib/ts3phpframework/images/viewer/client_snd_disabled.png b/lib/ts3phpframework/images/viewer/client_snd_disabled.png deleted file mode 100644 index d516d267a017d35f0c444870b13d769bb2e05802..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 929 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 AaR2}S diff --git a/lib/ts3phpframework/images/viewer/client_talker_request.png b/lib/ts3phpframework/images/viewer/client_talker_request.png deleted file mode 100644 index 5c09ada17cbabdfb929d5b159a713c4086140c3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1065 zcmV+^1lIeBP)KLZ*U+=)p!fv7f#TG` zAxLl%!EgG`&*5<32cu%worY0{L9A7~=}6b}76Isk~1IN~P)K3@?4 z&zpALY4A7Z!>t0&I7qECf*j`WHIYAjW_h^ivJu4lvb8y9VL`DD`rG0ZKvcZ$L@8 zo)6*!Fng}&gE0q~LGCMnsiR8`P)pL0I_sTkS+y)n+TA3G-YOx1wr6YglyY(BuP4l zKp>#7|5P9lPy~+S+yLPB`-=g9BuU^n&Mh#;SivY(j4>t@g0%#aB>k1D&`?-wtd~S7 zg)GYuMG-!qZ&l782?_=B`8=AMn&5J|KqjE1H2da zpS{HFjMC04it;A_h z4y3XQoeyqIeg5$FBnLo^#rlqf!{N%SS1v!-4FfHATSgy+9@i&QmXSzNIKFzczV1Tj z$UH3XA?Q{PnVdZhU~c98>pahQG&kQ_E-5V;1Mu}*qW!VvGy|n zD8F`Xs;bJ48{8QD{ j)lmR5@p%07O8?gY8gymP0A9XN00000NkvXXu0mjfoX+6K diff --git a/lib/ts3phpframework/images/viewer/group_channel.png b/lib/ts3phpframework/images/viewer/group_channel.png deleted file mode 100644 index 6696f0791ef24dbd9090da86de83ed5020e58b17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1309 zcmV+&1>*XNP)KLZ*U+=)p!fv7f#TG` zAxLl%!EgG`&*5<32cu%worY0{L9A7~=}6b}76Isk~1IN~P)K3@?4 z&zpALY4A7Z!>t0&I7qECf*j`WHIYAjW_h^ivJu4lvb8y9VL`DD`rG0ZKvcZ$L@8 zo)6*!Fng}&gE0q~LGCMnsiR8`P)pL0I_sTkS+y)n+TA3Gg9hIJy@)-zWoD5r(+P3X{Dl z_{R2y3ahL_U>Qf_3ROuat9?klw3jrw%m40j|MP`V9NX*9%kP(&ot@q8=;#PomgTCd z3Q-gpP1EdKw=#3OUZ0zpnfWsu4*LlqPkAQu?M=U5y2{MY&+9`&Ly{_tyaUx z$OtwzHl2xy@%e>?g|TQf8uWU-Px;o?4lZ06y~Cx`>5mG9f*?r}1_uYBC<-Ex2$IP& ztYz7W&dyFjQ4}T=3LzekBcIPB5{Y1VcnB=Z9p_!wg(OK>US0;raqxJ(5Cj1L(B0hy zhG7^70cJ(M*~6Ny9ularI6l)|=c*p>~~bzzz&48uSok-*f{)H6;9ad}E9 zve_&ul?n(Ua2yB3G(m_7+qOZei)=OvP16qDvhDxevcXe_!Y~Y!%VoslGB}QfVHj{6 z3QAp2>cB7>P*oMO{4#i+N3mE$Z|_TR0gliAmIupnFbo5xX@OyYrrmT`R#vKtqKK`n zL6K)UFdUE7)m4y21A&$Rip9q?mwQm>gTWw@$s`CNc=BWee!m1w)0{7E-1uy-Tz;HN zzjOPww?_R(W3OO+V;2Vxf5zOW*Kq&-igo?^=U?#y0|Ss{8KNknTCJj1t09$on?Dgd zF?;pnPktHw@S51x(}&_e2QaxRu6%G29*-Ai&kT#PSS-b*)9EXPLP7X{=V&yFldmR( z1M!9aJ;P>qnm(-my^B*)1#g}{33a!GyWjtSP+Kr?_`zXkj|Y;^2dn8|uTF429>CXY zzeAz~6YswcwX}_QGxy+aHZUIR4nJ za0`Jjy;nEJ`iUFUl@fa1J(M+jMyWP~9$17sn8b-nEl`xta|`TK20qdA|?j zSLAxcxo7%s8P^XIa!2N_eyOz8u_x>{AIqdOvn!qJe1!HZ++A~K-A>PK<_5yymw!Yt zd*pT3HkIE}i8A0x5OWJWVB_xnn2q7wPrq9J%Pg_ty55U-`wBnnKc2|XprRNca$4!? zR+dS{(dV-Lc$RsdD%L!`r0~vX{pQEU5rNYJLff}w?wzz-{}PXiwcm!g)Z6oZ|50yD pnNb_?=BT2hLSFr{wFkv3n55<|e|Ob~cLmTF44$rjF6*2UngHbWe;WV* diff --git a/lib/ts3phpframework/images/viewer/group_icon_100.png b/lib/ts3phpframework/images/viewer/group_icon_100.png deleted file mode 100644 index 7c948d4845cde7bb80a9e4c60cf0da3cc975d6ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 809 zcmV+^1J?YBP)z@;o?%Qu_W%F@AY({UO#lFTB>(_`g8%^e{{R4h=l}px z2mk>USO5SzmjD14Z`WEMkN^MzpGibPRCwB?lfO?BaTvy*>s?!V2R%p)bbzx0u}l&Q zMMw)K*hxhpF&GE@6Oif&(8w@m>UP7&|}%!}#ARDF|$Z}TJbxo>Ns_5+WfDnSk z#bt2|{0|55 z{KZrF2mA46dK$W3fv#yFgw%R_dk;+jNs^FCr4B)XUq3ex{t$-13-H|YAQD+XIQ$Xa z-CmrYog8*_Najye6a|`Ao+*}!QCg=sI!a>h{TwRB6Mxw4h@6~L1A)M*AP8oFVHjXp7Mq)!6P~*gthNRm zCzCimNy6@M!0#VGVk83-Ha9V~>pI--HcCk8 nT`)MZX0zG;Ya?^pI{zC00DU<`2^Fi$00000NkvXXu0mjfgd$G7 diff --git a/lib/ts3phpframework/images/viewer/group_icon_200.png b/lib/ts3phpframework/images/viewer/group_icon_200.png deleted file mode 100644 index 4acadb5e25e656331049d350fde82d0a708b19f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 781 zcmV+o1M>WdP)PK^VrL?I&zY7gIx6d<%}T`P%%6nr5666E7+4bjWfR zsg#JKdI6Kkgp8bl%Tb^eh$@K7ivm)Yf{isRC>ex&4`T2L3Ys9Yvm%zQgzU^||Zx1qAIU)!mE-s2t zRTc4*6S!R-6pJbhhF?Y#0piga&qs6wsgy8zdKyPsyCX5t-_?asD1?oTO|-YQY3o05 zmOO*eNMUbpXHrMtYxRX=v6$-du*P68h)0hf;auwiq3ZJA!p!sxva(FPQCnJC!a4$$ zWubWxhDQ74^BTrqjKfCTP=CE1qt8b%HT4ROjZHZIb`;jK0v!QKmn>(7gp?306-zic zh+yQ|2y#jRMv4OCsD|A^BfTpPk-a(snx@g+-LrUju%E89X&bdRRyi0j%oQkwb2u0V z9M7fwe*YrLhfaV*)@U?heSN*Z{u&Fjr2>bM2#${;uxgR+=xE2*MyQ{3BA?IeuRw~) z*W25(e9E0XX>M+qV5+MqRcou;?J7x9>ZwM!Y_VAW{u=*v{1jjSH=;nUG5D7B00000 LNkvXXu0mjft88R@ diff --git a/lib/ts3phpframework/images/viewer/group_icon_300.png b/lib/ts3phpframework/images/viewer/group_icon_300.png deleted file mode 100644 index d048e3ef49b75531b02a3a8bbefa000b422057f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 820 zcmV-41Izr0P)z@;o?%Qu_W%F@AY({UO#lFTB>(_`g8%^e{{R4h=l}px z2mk>USO5SzmjD14Z`WEMkN^Mzs!2paRCwB?lg&@l02s!f(yrY)&5R>k30X1G;cmnM z2?-kqgcylL{D{iYa2Dp33jspBXcQ8S7o!nOjD$ZxE<{2i@}+^m#xTo1*au}R-Dn4N z>*_@gq(|PQoF44ua!2Oig`xNKvLtl;pl098GKrfCQUL#VBF;a-mu$>eU;($cd1 zw6E$^h+Q~LPjVS6<$?K zsHx$Q&lm9S?R!*_6dv5a3!BY`jrC1991aAxHU)!&#>S@2L?QuA)3CC#1iSq*`UB74 z^ZW31dIrB1m!NAE2*Mujba!tW0J5S)a{D=yN@d9M30}T>gH$So=4LO(Mu*_>c#zoL z1!JNi2>THO;NT!Pk>1N7o85=SLc?rkF#T-?1N{LkE-s_9vmKIj0D=UzLt7IDfcJ(s zoJ{U&f{=sTeGPqmPf=ZMhttWy?RFz02>(x-*BTlc!Uh1(^N7b|VG~8*)5l4KLP7NQ zK0)AlKeD+ThKGj1^H&gyMZ+!^Z~R126rm_`pdicNOQjOVMqi+!S5PXcP?RE|6L2`H z5s8EXqA0@PfMr?ueE!+LJKF^-djXnO0Y%avNg7&3hm+%w*-IB%TYa-utJMflRTU&j zVs&-3hp(%JiDnRs$B;`8l0000%VDkn diff --git a/lib/ts3phpframework/images/viewer/group_icon_400.png b/lib/ts3phpframework/images/viewer/group_icon_400.png deleted file mode 100644 index 8a44f0e2e943ee7ee64cb84953133679b369f97b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1160 zcmV;31b6$1P)KLZ*U+=)p!fv7f#TG` zAxLl%!EgG`&*5<32cu%worY0{L9A7~=}6b}76Isk~1IN~P)K3@?4 z&zpALY4A7Z!>t0&I7qECf*j`WHIYAjW_h^ivJu4lvb8y9VL`DD`rG0ZKvcZ$L@8 zo)6*!Fng}&gE0q~LGCMnsiR8`P)pL0I_sTkS+y)n+TA3GuzwhmB zzGa-Xev)(e9 zOha0&w!5{pwQ_NB!FPCgWD5p2r>CZ-c6N4lFgZC103c2bj7H;fL&KGt#>U19olalW z+1WuH{C+=3 zl0-6@gkGnI+1#t(IQC*Ry5B5Yfo0jWAjC^No)xexi{abD5YuT;6a|$^g*C4iKkasC zsx@F3M&5xS2#KSkgOa_yU5t*7!sT+o<5>kw)5v5pxc}fD{zdn(`ezL!NuB~u6T>hZ z%knT73?K*s4#y&znwp`l)q)^M_3MB{}%K^2uS~th>g{`e^l$V#GzM&rT^LBJ~T|-O|P_Nfxdpisv zCSd-tNDLLomSilU%at1&n@z}sxLtIaKj&&D=mb2gJDlqxD03jO`k)6;!NK`PE15^>&l a{yzZpPdrNp87Hv-0000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igS& z3ONX$GQ}GJ00N^)L_t(I%cYY~NEBfh#-DFTXZDY>ZvI7d6G==2$wOTP4WqzL3V}o` zCMe=1y$P}?Y?nQB$qsqx;6d09VPKcmPzW@FQgktK-4tm>8{OGlW}QFZeDih5gU!+R z^j_W{&%^sXgmaFoOu@x6F)@Lvsw%8ZPCoJw^4RNgJ?swz+%|yMnM}UO<$8B++iz}7 zO?_4r1(8Su06;DjjFy$j^`cnT>hX}q{(cm7c0vdQz$pbiJcJsLV{2gnS;p)vW0~P} zy5f?8Qb8ykUR)$ZlE6+*V97FURRw1ZYCH~iOAA`->!ELMx_&Gzl{zdOP->c~l$&!7 zy1x&9Z!e7PZ4gO9ML3LKeSIJv4|qP0lxdm|{@uAQ06T^uvuqaD@iC<4X3(P}d>ItJK#$vcG zNobTL6t%a**xd!?9EX&$!qAhX;|sxH5Z^T|d0Ud2K1Cw9#~7+-W>9TeF!%Nl35RjV z>%~`1OV-u~ok>&_1*euZW}TjX)NLCt!eQ6|blXOTF>uatLlm)+&ySTT3LF-^UN0(! zhvRFqoC^p7DCZ~uP)G>5Vy+Q>-U=kqxMrfEVD1iU>v>uxG9hldcXYZ}%y z4Mi>&dIJHx&*i!~=g@WCX+aPK2!ep%z|-aQ!iQ(~i;G{@h$1m<8#mo<{+rU#nt_33 hQ4}w=kzBRTe*v&CLC-*FK^Oo4002ovPDHLkV1fZuQknn& diff --git a/lib/ts3phpframework/images/viewer/group_icon_600.png b/lib/ts3phpframework/images/viewer/group_icon_600.png deleted file mode 100644 index d625f2ae9a51c479565b1ae9b69e9356bf8b016b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 757 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igJ* z6eTpB4_40r00MPML_t(I%dL@1PZMzz#m{tRifsc8_5p1|tBDl}#D!ABLN-8%5iyXs z@l(h*A+R^7_*|5gnn*%~rUaCf2oY?XQmMnEowhTbVIG}-X~$I!QeEj;-FtG+FDJRc zKZ-hUgu}NUFbw<9YGv;Z3=CW_O%u`RirUiB5+Me8ytcj;{Ucy_c!+noyzZ{905vi) zgsa`%u-j}Pgg};LB$7$QVlk+iTGw^G^y2xv7XX+Bz;1WCW@e@-hG8L!WmE}4g#u1b zPf;uu(9z+=wr`nTO3z6o&iM*j}S zagb#hnx?_$>%>tm2SF4tICvXJhes%vCFJ?Md2f7trwO2FYNk{YAP6G1wzlDRyOGUi zp`0k_>+QwMSFb?`0mHCVfiGm50HRo$Jw85!Ae4~FWMLQv{60T|!65WX1)K3rNU{Wm zu~-s`-PuO&*B4e}tErxAJvF~SK^=;`07U@|&7#%mu*eB%>TKq>2C>-c;$Au_+Z=Xing)x722C@l)l9UuwIR>v<>lq& z#lHdoARdoTTnYw2Q8e=TJPHLKG{Ybq?#I{dFB9kQ>GMV|m)q~V-Y0lG7w^~|4$9;4 nA{4q}R;$LNNF?$G|64x+lSwgoDU!|z00000NkvXXu0mjfQ+r5d diff --git a/lib/ts3phpframework/images/viewer/group_server.png b/lib/ts3phpframework/images/viewer/group_server.png deleted file mode 100644 index ee155d63900fa803096cbef1b676fcfdb1e2ba48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1301 zcmV+w1?u{VP)KLZ*U+=)p!fv7f#TG` zAxLl%!EgG`&*5<32cu%worY0{L9A7~=}6b}76Isk~1IN~P)K3@?4 z&zpALY4A7Z!>t0&I7qECf*j`WHIYAjW_h^ivJu4lvb8y9VL`DD`rG0ZKvcZ$L@8 zo)6*!Fng}&gE0q~LGCMnsiR8`P)pL0I_sTkS+y)n+TA3Gs z;m-QHx4OD^)pgx>Pn>wN?0FuZ=W!V0!o`dF)zhab6bb}EKomv9aZIz>WO{mvih&IsnH91~5&5X_`z- zJS}EtXZv0E!Q|%V=Eu2Qj!Y(l_0-rHXXfT`_x5OpA&HbkQN%$IkftedED^$_T&|GI z<*;pA00i#v1s)YxVc{Gc`4Z z@B0KnK(SaP3`2q-KuSrHD3nszc7{04AY}}IQi?QHSh18e8V#z|DpE?a*({FZVB0pa zlt?Kt3@G3r? zot@NbH8DRwzqP%+eRpML|Y;0^&^{c2Pq2^a`TY_q1pN;!28#_ft(lXCK zJC2M(-g)nR^~I%2)0Rq8>h(I~;}hg^?ezBb63Li~U&E~)aAsq@mES07-_74!I$-v+sXie3xA%sb-6F^V0QIk>ZQjU;YZ z!mWdJZYFEKSQFg7@+rC9&~ z1As|HK~y-6b(4Ke6L%cOzxTWA>(T4AR-nLSOcSvoTQ;ID{y~7unkCCjoMvn+ zZko(x0XFu>$if0~$%dPW3F-xErkP7K5ovT?l(NzxeM6{@LM*hj^uTfN z_Wb!I&nMq+@;n%9(AVD?Dki7xO){zIkVqsV!;wgy2{yk_N=y(&EYN0`*$zYKHu;@R>-o?RA{UsTwvbV_x3VLmwr-KQTf}|!JZ2M0C*Ab z!k)dKhr|}M7EENn*S8b6sz%MVP_~3uc0Wa^}}O_mFZaEqbbLOFL& zgVj*@)Pmi33n4@y)8hDno8n>c$lVZqF$8fwxGQb(Su$*DOhIV`xfD~@*H!^S7!(Qu zuq+2WU)XU-2VzpLm_`#r6U;Q@0fq27)T0By1!AsQu*Ni+O-6wzX)|2Dc1bQlDViby zCooWyNP*+n{FPbYX|*bd7Oj8S;@{?4Z|jF|-0QwGB&;M_0RYN2tAZ3o(fy~-Vg!y| zL4*XhXw^W|N(cpmE&$;99J`eO0El`W#;6yJ8ykjjygJ~U|LgWBQwW4pO)@b+-S%o& z3Hageq~#ky5Rm@J7Y)Rd)hsHNN;j@26Fyu@*H9u{Q(3M8mSth=y0Q1nnbTus+Zwu} z(Z~w=ukf8I?-njwXdy7%r{1L8r7cx~XKprWU*U7dYIDjS7_}oiFjA6uKpZ++s?6m#g2TA}SHyVN< zl=KZ4dfxk>!&9SsO<(jMkE!n`rgYi2(kKy$<8`_^-{E)mMa@(9RexJ;b%{h`Pdpai lG4EaQn2hK903ck<{R?$-n^aiy?%@Cc002ovPDHLkV1ljZ^wR(U diff --git a/lib/ts3phpframework/images/viewer/server_full.png b/lib/ts3phpframework/images/viewer/server_full.png deleted file mode 100644 index bfec600d6c90a3f5939c1d78cc42818b99606065..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 774 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 Uqmv#V11e?kboFyt=akR{0M6YbivR!s diff --git a/lib/ts3phpframework/images/viewer/tree_end.gif b/lib/ts3phpframework/images/viewer/tree_end.gif deleted file mode 100644 index b89d56e122324da9072a7061dcf21fe2370e4abf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61 zcmZ?wbhEHb6krfwXkcWR(o_Ba|9{1wER0+Xj0`#qKmd|qU=r!+U&;1*ztkN6OWm{h Oq<{0bJ$fO+U=08Ygc7g- diff --git a/lib/ts3phpframework/images/viewer/tree_line.gif b/lib/ts3phpframework/images/viewer/tree_line.gif deleted file mode 100644 index 324204a9843c6101c09e88fa568aebb2b9826113..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63 zcmZ?wbhEHb6krfwXkcWR(o_Ba|9{1wER0+Xj0`#qKmd|qU=r);U&;1*ztkN6OWiuh QsxH5COnA}b$jD#~06MP}1poj5 diff --git a/lib/ts3phpframework/images/viewer/tree_mid.gif b/lib/ts3phpframework/images/viewer/tree_mid.gif deleted file mode 100644 index 2c8de45ad09863a82478ff340b0d97e2e43cf18a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64 zcmZ?wbhEHb6krfwXkcWR(o_Ba|9{1wER0+Xj0`#qKmd|qU=r`?U&;1*ztkN6OWm{h Rq^)1aCRp^QJQZQE1^__P6G{L8 diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Abstract.php b/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Abstract.php deleted file mode 100644 index 3edb227..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Abstract.php +++ /dev/null @@ -1,160 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Adapter_Abstract - * @brief Provides low-level methods for concrete adapters to communicate with a TeamSpeak 3 Server. - */ -abstract class TeamSpeak3_Adapter_Abstract -{ - /** - * Stores user-provided options. - * - * @var array - */ - protected $options = null; - - /** - * Stores an TeamSpeak3_Transport_Abstract object. - * - * @var TeamSpeak3_Transport_Abstract - */ - protected $transport = null; - - /** - * The TeamSpeak3_Adapter_Abstract constructor. - * - * @param array $options - * @return TeamSpeak3_Adapter_Abstract - */ - public function __construct(array $options) - { - $this->options = $options; - - if($this->transport === null) - { - $this->syn(); - } - } - - /** - * The TeamSpeak3_Adapter_Abstract destructor. - * - * @return void - */ - abstract public function __destruct(); - - /** - * Connects the TeamSpeak3_Transport_Abstract object and performs initial actions on the remote - * server. - * - * @throws TeamSpeak3_Adapter_Exception - * @return void - */ - abstract protected function syn(); - - /** - * Commit pending data. - * - * @return array - */ - public function __sleep() - { - return array("options"); - } - - /** - * Reconnects to the remote server. - * - * @return void - */ - public function __wakeup() - { - $this->syn(); - } - - /** - * Returns the profiler timer used for this connection adapter. - * - * @return TeamSpeak3_Helper_Profiler_Timer - */ - public function getProfiler() - { - return TeamSpeak3_Helper_Profiler::get(spl_object_hash($this)); - } - - /** - * Returns the transport object used for this connection adapter. - * - * @return TeamSpeak3_Transport_Abstract - */ - public function getTransport() - { - return $this->transport; - } - - /** - * Loads the transport object object used for the connection adapter and passes a given set - * of options. - * - * @param array $options - * @param string $transport - * @throws TeamSpeak3_Adapter_Exception - * @return void - */ - protected function initTransport($options, $transport = "TeamSpeak3_Transport_TCP") - { - if(!is_array($options)) - { - throw new TeamSpeak3_Adapter_Exception("transport parameters must provided in an array"); - } - - $this->transport = new $transport($options); - } - - /** - * Returns the hostname or IPv4 address the underlying TeamSpeak3_Transport_Abstract object - * is connected to. - * - * @return string - */ - public function getTransportHost() - { - return $this->getTransport()->getConfig("host", "0.0.0.0"); - } - - /** - * Returns the port number of the server the underlying TeamSpeak3_Transport_Abstract object - * is connected to. - * - * @return string - */ - public function getTransportPort() - { - return $this->getTransport()->getConfig("port", "0"); - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Blacklist.php b/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Blacklist.php deleted file mode 100644 index c303ae4..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Blacklist.php +++ /dev/null @@ -1,119 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Adapter_Blacklist - * @brief Provides methods to check if an IP address is currently blacklisted. - */ -class TeamSpeak3_Adapter_Blacklist extends TeamSpeak3_Adapter_Abstract -{ - /** - * The IPv4 address or FQDN of the TeamSpeak Systems update server. - * - * @var string - */ - protected $default_host = "blacklist.teamspeak.com"; - - /** - * The UDP port number of the TeamSpeak Systems update server. - * - * @var integer - */ - protected $default_port = 17385; - - /** - * Stores an array containing the latest build numbers. - * - * @var array - */ - protected $build_numbers = null; - - /** - * Connects the TeamSpeak3_Transport_Abstract object and performs initial actions on the remote - * server. - * - * @return void - */ - public function syn() - { - if(!isset($this->options["host"]) || empty($this->options["host"])) $this->options["host"] = $this->default_host; - if(!isset($this->options["port"]) || empty($this->options["port"])) $this->options["port"] = $this->default_port; - - $this->initTransport($this->options, "TeamSpeak3_Transport_UDP"); - $this->transport->setAdapter($this); - - TeamSpeak3_Helper_Profiler::init(spl_object_hash($this)); - - TeamSpeak3_Helper_Signal::getInstance()->emit("blacklistConnected", $this); - } - - /** - * The TeamSpeak3_Adapter_Blacklist destructor. - * - * @return void - */ - public function __destruct() - { - if($this->getTransport() instanceof TeamSpeak3_Transport_Abstract && $this->getTransport()->isConnected()) - { - $this->getTransport()->disconnect(); - } - } - - /** - * Returns TRUE if a specified $host IP address is currently blacklisted. - * - * @param string $host - * @throws TeamSpeak3_Adapter_Blacklist_Exception - * @return boolean - */ - public function isBlacklisted($host) - { - if(ip2long($host) === FALSE) - { - $addr = gethostbyname($host); - - if($addr == $host) - { - throw new TeamSpeak3_Adapter_Blacklist_Exception("unable to resolve IPv4 address (" . $host . ")"); - } - - $host = $addr; - } - - $this->getTransport()->send("ip4:" . $host); - $repl = $this->getTransport()->read(1); - $this->getTransport()->disconnect(); - - if(!count($repl)) - { - return FALSE; - } - - return ($repl->toInt()) ? FALSE : TRUE; - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Blacklist/Exception.php b/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Blacklist/Exception.php deleted file mode 100644 index a9e52a7..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Blacklist/Exception.php +++ /dev/null @@ -1,32 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Adapter_Blacklist_Exception - * @brief Enhanced exception class for TeamSpeak3_Adapter_Blacklist objects. - */ -class TeamSpeak3_Adapter_Blacklist_Exception extends TeamSpeak3_Adapter_Exception {} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Exception.php b/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Exception.php deleted file mode 100644 index 342ef40..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Exception.php +++ /dev/null @@ -1,32 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Adapter_Exception - * @brief Enhanced exception class for TeamSpeak3_Adapter_Abstract objects. - */ -class TeamSpeak3_Adapter_Exception extends TeamSpeak3_Exception {} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/FileTransfer.php b/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/FileTransfer.php deleted file mode 100644 index 0a78b96..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/FileTransfer.php +++ /dev/null @@ -1,190 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Adapter_FileTransfer - * @brief Provides low-level methods for file transfer communication with a TeamSpeak 3 Server. - */ -class TeamSpeak3_Adapter_FileTransfer extends TeamSpeak3_Adapter_Abstract -{ - /** - * Connects the TeamSpeak3_Transport_Abstract object and performs initial actions on the remote - * server. - * - * @throws TeamSpeak3_Adapter_Exception - * @return void - */ - public function syn() - { - $this->initTransport($this->options); - $this->transport->setAdapter($this); - - TeamSpeak3_Helper_Profiler::init(spl_object_hash($this)); - - TeamSpeak3_Helper_Signal::getInstance()->emit("filetransferConnected", $this); - } - - /** - * The TeamSpeak3_Adapter_FileTransfer destructor. - * - * @return void - */ - public function __destruct() - { - if($this->getTransport() instanceof TeamSpeak3_Transport_Abstract && $this->getTransport()->isConnected()) - { - $this->getTransport()->disconnect(); - } - } - - /** - * Sends a valid file transfer key to the server to initialize the file transfer. - * - * @param string $ftkey - * @throws TeamSpeak3_Adapter_FileTransfer_Exception - * @return void - */ - protected function init($ftkey) - { - if(strlen($ftkey) != 32) - { - throw new TeamSpeak3_Adapter_FileTransfer_Exception("invalid file transfer key format"); - } - - $this->getProfiler()->start(); - $this->getTransport()->send($ftkey); - - TeamSpeak3_Helper_Signal::getInstance()->emit("filetransferHandshake", $this); - } - - /** - * Sends the content of a file to the server. - * - * @param string $ftkey - * @param integer $seek - * @param string $data - * @throws TeamSpeak3_Adapter_FileTransfer_Exception - * @return void - */ - public function upload($ftkey, $seek, $data) - { - $this->init($ftkey); - - $size = strlen($data); - $seek = intval($seek); - $pack = 4096; - - TeamSpeak3_Helper_Signal::getInstance()->emit("filetransferUploadStarted", $ftkey, $seek, $size); - - for(;$seek < $size;) - { - $rest = $size-$seek; - $pack = $rest < $pack ? $rest : $pack; - $buff = substr($data, $seek, $pack); - $seek = $seek+$pack; - - $this->getTransport()->send($buff); - - TeamSpeak3_Helper_Signal::getInstance()->emit("filetransferUploadProgress", $ftkey, $seek, $size); - } - - $this->getProfiler()->stop(); - - TeamSpeak3_Helper_Signal::getInstance()->emit("filetransferUploadFinished", $ftkey, $seek, $size); - - if($seek < $size) - { - throw new TeamSpeak3_Adapter_FileTransfer_Exception("incomplete file upload (" . $seek . " of " . $size . " bytes)"); - } - } - - /** - * Returns the content of a downloaded file as a TeamSpeak3_Helper_String object. - * - * @param string $ftkey - * @param integer $size - * @param boolean $passthru - * @throws TeamSpeak3_Adapter_FileTransfer_Exception - * @return TeamSpeak3_Helper_String - */ - public function download($ftkey, $size, $passthru = FALSE) - { - $this->init($ftkey); - - if($passthru) - { - return $this->passthru($size); - } - - $buff = new TeamSpeak3_Helper_String(""); - $size = intval($size); - $pack = 4096; - - TeamSpeak3_Helper_Signal::getInstance()->emit("filetransferDownloadStarted", $ftkey, count($buff), $size); - - for($seek = 0;$seek < $size;) - { - $rest = $size-$seek; - $pack = $rest < $pack ? $rest : $pack; - $data = $this->getTransport()->read($rest < $pack ? $rest : $pack); - $seek = $seek+$pack; - - $buff->append($data); - - TeamSpeak3_Helper_Signal::getInstance()->emit("filetransferDownloadProgress", $ftkey, count($buff), $size); - } - - $this->getProfiler()->stop(); - - TeamSpeak3_Helper_Signal::getInstance()->emit("filetransferDownloadFinished", $ftkey, count($buff), $size); - - if(strlen($buff) != $size) - { - throw new TeamSpeak3_Adapter_FileTransfer_Exception("incomplete file download (" . count($buff) . " of " . $size . " bytes)"); - } - - return $buff; - } - - /** - * Outputs all remaining data on a TeamSpeak 3 file transfer stream using PHP's fpassthru() - * function. - * - * @param integer $size - * @throws TeamSpeak3_Adapter_FileTransfer_Exception - * @return void - */ - protected function passthru($size) - { - $buff_size = fpassthru($this->getTransport()->getStream()); - - if($buff_size != $size) - { - throw new TeamSpeak3_Adapter_FileTransfer_Exception("incomplete file download (" . intval($buff_size) . " of " . $size . " bytes)"); - } - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/FileTransfer/Exception.php b/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/FileTransfer/Exception.php deleted file mode 100644 index add2be5..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/FileTransfer/Exception.php +++ /dev/null @@ -1,32 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Adapter_FileTransfer_Exception - * @brief Enhanced exception class for TeamSpeak3_Adapter_FileTransfer objects. - */ -class TeamSpeak3_Adapter_FileTransfer_Exception extends TeamSpeak3_Adapter_Exception {} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/ServerQuery.php b/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/ServerQuery.php deleted file mode 100644 index 38f7db8..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/ServerQuery.php +++ /dev/null @@ -1,261 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Adapter_ServerQuery - * @brief Provides low-level methods for ServerQuery communication with a TeamSpeak 3 Server. - */ -class TeamSpeak3_Adapter_ServerQuery extends TeamSpeak3_Adapter_Abstract -{ - /** - * Stores a singleton instance of the active TeamSpeak3_Node_Host object. - * - * @var TeamSpeak3_Node_Host - */ - protected $host = null; - - /** - * Stores the timestamp of the last command. - * - * @var integer - */ - protected $timer = null; - - /** - * Number of queries executed on the server. - * - * @var integer - */ - protected $count = 0; - - /** - * Stores an array with unsupported commands. - * - * @var array - */ - protected $block = array("help"); - - /** - * Connects the TeamSpeak3_Transport_Abstract object and performs initial actions on the remote - * server. - * - * @throws TeamSpeak3_Adapter_Exception - * @return void - */ - protected function syn() - { - $this->initTransport($this->options); - $this->transport->setAdapter($this); - - TeamSpeak3_Helper_Profiler::init(spl_object_hash($this)); - - if(!$this->getTransport()->readLine()->startsWith(TeamSpeak3::READY)) - { - throw new TeamSpeak3_Adapter_Exception("invalid reply from the server"); - } - - TeamSpeak3_Helper_Signal::getInstance()->emit("serverqueryConnected", $this); - } - - /** - * The TeamSpeak3_Adapter_ServerQuery destructor. - * - * @return void - */ - public function __destruct() - { - if($this->getTransport() instanceof TeamSpeak3_Transport_Abstract && $this->transport->isConnected()) - { - try - { - $this->request("quit"); - } - catch(Exception $e) - { - return; - } - } - } - - /** - * Sends a prepared command to the server and returns the result. - * - * @param string $cmd - * @param boolean $throw - * @throws TeamSpeak3_Adapter_Exception - * @return TeamSpeak3_Adapter_ServerQuery_Reply - */ - public function request($cmd, $throw = TRUE) - { - $query = TeamSpeak3_Helper_String::factory($cmd)->section(TeamSpeak3::SEPARATOR_CELL); - - if(strstr($cmd, "\r") || strstr($cmd, "\n")) - { - throw new TeamSpeak3_Adapter_Exception("illegal characters in command '" . $query . "'"); - } - elseif(in_array($query, $this->block)) - { - throw new TeamSpeak3_Adapter_ServerQuery_Exception("command not found", 0x100); - } - - TeamSpeak3_Helper_Signal::getInstance()->emit("serverqueryCommandStarted", $cmd); - - $this->getProfiler()->start(); - $this->getTransport()->sendLine($cmd); - $this->timer = time(); - $this->count++; - - $rpl = array(); - - do { - $str = $this->getTransport()->readLine(); - $rpl[] = $str; - } while($str instanceof TeamSpeak3_Helper_String && $str->section(TeamSpeak3::SEPARATOR_CELL) != TeamSpeak3::ERROR); - - $this->getProfiler()->stop(); - - $reply = new TeamSpeak3_Adapter_ServerQuery_Reply($rpl, $cmd, $this->getHost(), $throw); - - TeamSpeak3_Helper_Signal::getInstance()->emit("serverqueryCommandFinished", $cmd, $reply); - - return $reply; - } - - /** - * Waits for the server to send a notification message and returns the result. - * - * @throws TeamSpeak3_Adapter_Exception - * @return TeamSpeak3_Adapter_ServerQuery_Event - */ - public function wait() - { - if($this->getTransport()->getConfig("blocking")) - { - throw new TeamSpeak3_Adapter_Exception("only available in non-blocking mode"); - } - - do { - $evt = $this->getTransport()->readLine(); - } while($evt instanceof TeamSpeak3_Helper_String && !$evt->section(TeamSpeak3::SEPARATOR_CELL)->startsWith(TeamSpeak3::EVENT)); - - return new TeamSpeak3_Adapter_ServerQuery_Event($evt, $this->getHost()); - } - - /** - * Uses given parameters and returns a prepared ServerQuery command. - * - * @param string $cmd - * @param array $params - * @return string - */ - public function prepare($cmd, array $params = array()) - { - $args = array(); - $cells = array(); - - foreach($params as $ident => $value) - { - $ident = is_numeric($ident) ? "" : strtolower($ident) . TeamSpeak3::SEPARATOR_PAIR; - - if(is_array($value)) - { - $value = array_values($value); - - for($i = 0; $i < count($value); $i++) - { - if($value[$i] === null) continue; - elseif($value[$i] === FALSE) $value[$i] = 0x00; - elseif($value[$i] === TRUE) $value[$i] = 0x01; - elseif($value[$i] instanceof TeamSpeak3_Node_Abstract) $value[$i] = $value[$i]->getId(); - - $cells[$i][] = $ident . TeamSpeak3_Helper_String::factory($value[$i])->escape()->toUtf8(); - } - } - else - { - if($value === null) continue; - elseif($value === FALSE) $value = 0x00; - elseif($value === TRUE) $value = 0x01; - elseif($value instanceof TeamSpeak3_Node_Abstract) $value = $value->getId(); - - $args[] = $ident . TeamSpeak3_Helper_String::factory($value)->escape()->toUtf8(); - } - } - - foreach(array_keys($cells) as $ident) $cells[$ident] = implode(TeamSpeak3::SEPARATOR_CELL, $cells[$ident]); - - if(count($args)) $cmd .= " " . implode(TeamSpeak3::SEPARATOR_CELL, $args); - if(count($cells)) $cmd .= " " . implode(TeamSpeak3::SEPARATOR_LIST, $cells); - - return trim($cmd); - } - - /** - * Returns the timestamp of the last command. - * - * @return integer - */ - public function getQueryLastTimestamp() - { - return $this->timer; - } - - /** - * Returns the number of queries executed on the server. - * - * @return integer - */ - public function getQueryCount() - { - return $this->count; - } - - /** - * Returns the total runtime of all queries. - * - * @return mixed - */ - public function getQueryRuntime() - { - return $this->getProfiler()->getRuntime(); - } - - /** - * Returns the TeamSpeak3_Node_Host object of the current connection. - * - * @return TeamSpeak3_Node_Host - */ - public function getHost() - { - if($this->host === null) - { - $this->host = new TeamSpeak3_Node_Host($this); - } - - return $this->host; - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/ServerQuery/Event.php b/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/ServerQuery/Event.php deleted file mode 100644 index 5c3c8a7..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/ServerQuery/Event.php +++ /dev/null @@ -1,170 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Adapter_ServerQuery_Event - * @brief Provides methods to analyze and format a ServerQuery event. - */ -class TeamSpeak3_Adapter_ServerQuery_Event implements ArrayAccess -{ - /** - * Stores the event type. - * - * @var TeamSpeak3_Helper_String - */ - protected $type = null; - - /** - * Stores the event data. - * - * @var array - */ - protected $data = null; - - /** - * Stores the event data as an unparsed string. - * - * @var TeamSpeak3_Helper_String - */ - protected $mesg = null; - - /** - * Creates a new TeamSpeak3_Adapter_ServerQuery_Event object. - * - * @param TeamSpeak3_Helper_String $evt - * @param TeamSpeak3_Node_Host $con - * @throws TeamSpeak3_Adapter_Exception - * @return TeamSpeak3_Adapter_ServerQuery_Event - */ - public function __construct(TeamSpeak3_Helper_String $evt, TeamSpeak3_Node_Host $con = null) - { - if(!$evt->startsWith(TeamSpeak3::EVENT)) - { - throw new TeamSpeak3_Adapter_Exception("invalid notification event format"); - } - - list($type, $data) = $evt->split(TeamSpeak3::SEPARATOR_CELL, 2); - - if(empty($data)) - { - throw new TeamSpeak3_Adapter_Exception("invalid notification event data"); - } - - $fake = new TeamSpeak3_Helper_String(TeamSpeak3::ERROR . TeamSpeak3::SEPARATOR_CELL . "id" . TeamSpeak3::SEPARATOR_PAIR . 0 . TeamSpeak3::SEPARATOR_CELL . "msg" . TeamSpeak3::SEPARATOR_PAIR . "ok"); - $repl = new TeamSpeak3_Adapter_ServerQuery_Reply(array($data, $fake), $type); - - $this->type = $type->substr(strlen(TeamSpeak3::EVENT)); - $this->data = $repl->toList(); - $this->mesg = $data; - - TeamSpeak3_Helper_Signal::getInstance()->emit("notifyEvent", $this, $con); - TeamSpeak3_Helper_Signal::getInstance()->emit("notify" . ucfirst($this->type), $this, $con); - } - - /** - * Returns the event type string. - * - * @return TeamSpeak3_Helper_String - */ - public function getType() - { - return $this->type; - } - - /** - * Returns the event data array. - * - * @return array - */ - public function getData() - { - return $this->data; - } - - /** - * Returns the event data as an unparsed string. - * - * @return TeamSpeak3_Helper_String - */ - public function getMessage() - { - return $this->mesg; - } - - /** - * @ignore - */ - public function offsetExists($offset) - { - return array_key_exists($offset, $this->data) ? TRUE : FALSE; - } - - /** - * @ignore - */ - public function offsetGet($offset) - { - if(!$this->offsetExists($offset)) - { - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid parameter", 0x602); - } - - return $this->data[$offset]; - } - - /** - * @ignore - */ - public function offsetSet($offset, $value) - { - throw new TeamSpeak3_Node_Exception("event '" . $this->getType() . "' is read only"); - } - - /** - * @ignore - */ - public function offsetUnset($offset) - { - unset($this->data[$offset]); - } - - /** - * @ignore - */ - public function __get($offset) - { - return $this->offsetGet($offset); - } - - /** - * @ignore - */ - public function __set($offset, $value) - { - $this->offsetSet($offset, $value); - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/ServerQuery/Exception.php b/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/ServerQuery/Exception.php deleted file mode 100644 index 01129a3..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/ServerQuery/Exception.php +++ /dev/null @@ -1,32 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Adapter_ServerQuery_Exception - * @brief Enhanced exception class for TeamSpeak3_Adapter_ServerQuery objects. - */ -class TeamSpeak3_Adapter_ServerQuery_Exception extends TeamSpeak3_Adapter_Exception {} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/ServerQuery/Reply.php b/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/ServerQuery/Reply.php deleted file mode 100644 index 5bf6532..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/ServerQuery/Reply.php +++ /dev/null @@ -1,346 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Adapter_ServerQuery_Reply - * @brief Provides methods to analyze and format a ServerQuery reply. - */ -class TeamSpeak3_Adapter_ServerQuery_Reply -{ - /** - * Stores the command used to get this reply. - * - * @var TeamSpeak3_Helper_String - */ - protected $cmd = null; - - /** - * Stores the servers reply (if available). - * - * @var TeamSpeak3_Helper_String - */ - protected $rpl = null; - - /** - * Stores connected TeamSpeak3_Node_Host object. - * - * @var TeamSpeak3_Node_Host - */ - protected $con = null; - - /** - * Stores an assoc array containing the error info for this reply. - * - * @var array - */ - protected $err = array(); - - /** - * Sotres an array of events that occured before or during this reply. - * - * @var array - */ - protected $evt = array(); - - /** - * Indicates whether exceptions should be thrown or not. - * - * @var boolean - */ - protected $exp = TRUE; - - /** - * Creates a new TeamSpeak3_Adapter_ServerQuery_Reply object. - * - * @param array $rpl - * @param string $cmd - * @param boolean $exp - * @param TeamSpeak3_Node_Host $con - * @return TeamSpeak3_Adapter_ServerQuery_Reply - */ - public function __construct(array $rpl, $cmd = null, TeamSpeak3_Node_Host $con = null, $exp = TRUE) - { - $this->cmd = new TeamSpeak3_Helper_String($cmd); - $this->con = $con; - $this->exp = (bool) $exp; - - $this->fetchError(array_pop($rpl)); - $this->fetchReply($rpl); - } - - /** - * Returns the reply as an TeamSpeak3_Helper_String object. - * - * @return TeamSpeak3_Helper_String - */ - public function toString() - { - return (!func_num_args()) ? $this->rpl->unescape() : $this->rpl; - } - - /** - * Returns the reply as a standard PHP array where each element represents one item. - * - * @return array - */ - public function toLines() - { - if(!count($this->rpl)) return array(); - - $list = $this->toString(0)->split(TeamSpeak3::SEPARATOR_LIST); - - if(!func_num_args()) - { - for($i = 0; $i < count($list); $i++) $list[$i]->unescape(); - } - - return $list; - } - - /** - * Returns the reply as a standard PHP array where each element represents one item in table format. - * - * @return array - */ - public function toTable() - { - $table = array(); - - foreach($this->toLines(0) as $cells) - { - $pairs = $cells->split(TeamSpeak3::SEPARATOR_CELL); - - if(!func_num_args()) - { - for($i = 0; $i < count($pairs); $i++) $pairs[$i]->unescape(); - } - - $table[] = $pairs; - } - - return $table; - } - - /** - * Returns a multi-dimensional array containing the reply splitted in multiple rows and columns. - * - * @return array - */ - public function toArray() - { - $array = array(); - $table = $this->toTable(1); - - for($i = 0; $i < count($table); $i++) - { - foreach($table[$i] as $pair) - { - if(!count($pair)) - { - continue; - } - - if(!$pair->contains(TeamSpeak3::SEPARATOR_PAIR)) - { - $array[$i][$pair->toString()] = null; - } - else - { - list($ident, $value) = $pair->split(TeamSpeak3::SEPARATOR_PAIR, 2); - - $array[$i][$ident->toString()] = $value->isInt() ? $value->toInt() : (!func_num_args() ? $value->unescape() : $value); - } - } - } - - return $array; - } - - /** - * Returns a multi-dimensional assoc array containing the reply splitted in multiple rows and columns. - * The identifier specified by key will be used while indexing the array. - * - * @param $key - * @return array - */ - public function toAssocArray($ident) - { - $nodes = (func_num_args() > 1) ? $this->toArray(1) : $this->toArray(); - $array = array(); - - foreach($nodes as $node) - { - if(isset($node[$ident])) - { - $array[(is_object($node[$ident])) ? $node[$ident]->toString() : $node[$ident]] = $node; - } - else - { - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid parameter", 0x602); - } - } - - return $array; - } - - /** - * Returns an array containing the reply splitted in multiple rows and columns. - * - * @return array - */ - public function toList() - { - $array = func_num_args() ? $this->toArray(1) : $this->toArray(); - - if(count($array) == 1) - { - return array_shift($array); - } - - return $array; - } - - /** - * Returns an array containing stdClass objects. - * - * @return ArrayObject - */ - public function toObjectArray() - { - $array = (func_num_args() > 1) ? $this->toArray(1) : $this->toArray(); - - for($i = 0; $i < count($array); $i++) - { - $array[$i] = (object) $array[$i]; - } - - return $array; - } - - /** - * Returns the command used to get this reply. - * - * @return TeamSpeak3_Helper_String - */ - public function getCommandString() - { - return new TeamSpeak3_Helper_String($this->cmd); - } - - /** - * Returns an array of events that occured before or during this reply. - * - * @return array - */ - public function getNotifyEvents() - { - return $this->evt; - } - - /** - * Returns the value for a specified error property. - * - * @param string $ident - * @param mixed $default - * @return mixed - */ - public function getErrorProperty($ident, $default = null) - { - return (array_key_exists($ident, $this->err)) ? $this->err[$ident] : $default; - } - - /** - * Parses a ServerQuery error and throws a TeamSpeak3_Adapter_ServerQuery_Exception object if - * there's an error. - * - * @param string $err - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return void - */ - protected function fetchError($err) - { - $cells = $err->section(TeamSpeak3::SEPARATOR_CELL, 1, 3); - - foreach($cells->split(TeamSpeak3::SEPARATOR_CELL) as $pair) - { - list($ident, $value) = $pair->split(TeamSpeak3::SEPARATOR_PAIR); - - $this->err[$ident->toString()] = $value->isInt() ? $value->toInt() : $value->unescape(); - } - - TeamSpeak3_Helper_Signal::getInstance()->emit("notifyError", $this); - - if($this->getErrorProperty("id", 0x00) != 0x00 && $this->exp) - { - if($permid = $this->getErrorProperty("failed_permid")) - { - if($permsid = key($this->con->request("permget permid=" . $permid, FALSE)->toAssocArray("permsid"))) - { - $suffix = " (failed on " . $permsid . ")"; - } - else - { - $suffix = " (failed on " . $this->cmd->section(TeamSpeak3::SEPARATOR_CELL) . " " . $permid . "/0x" . strtoupper(dechex($permid)) . ")"; - } - } - elseif($details = $this->getErrorProperty("extra_msg")) - { - $suffix = " (" . trim($details) . ")"; - } - else - { - $suffix = ""; - } - - throw new TeamSpeak3_Adapter_ServerQuery_Exception($this->getErrorProperty("msg") . $suffix, $this->getErrorProperty("id")); - } - } - - /** - * Parses a ServerQuery reply and creates a TeamSpeak3_Helper_String object. - * - * @param string $rpl - * @return void - */ - protected function fetchReply($rpl) - { - foreach($rpl as $key => $val) - { - if($val->startsWith(TeamSpeak3::GREET)) - { - unset($rpl[$key]); - } - elseif($val->startsWith(TeamSpeak3::EVENT)) - { - $this->evt[] = new TeamSpeak3_Adapter_ServerQuery_Event($rpl[$key], $this->con); - unset($rpl[$key]); - } - } - - $this->rpl = new TeamSpeak3_Helper_String(implode(TeamSpeak3::SEPARATOR_LIST, $rpl)); - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/TSDNS.php b/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/TSDNS.php deleted file mode 100644 index aba617f..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/TSDNS.php +++ /dev/null @@ -1,95 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Adapter_TSDNS - * @brief Provides methods to query a TSDNS server. - */ -class TeamSpeak3_Adapter_TSDNS extends TeamSpeak3_Adapter_Abstract -{ - /** - * The TCP port number used by any TSDNS server. - * - * @var integer - */ - protected $default_port = 41144; - - /** - * Connects the TeamSpeak3_Transport_Abstract object and performs initial actions on the remote - * server. - * - * @throws TeamSpeak3_Adapter_Exception - * @return void - */ - public function syn() - { - if(!isset($this->options["port"]) || empty($this->options["port"])) $this->options["port"] = $this->default_port; - - $this->initTransport($this->options); - $this->transport->setAdapter($this); - - TeamSpeak3_Helper_Profiler::init(spl_object_hash($this)); - - TeamSpeak3_Helper_Signal::getInstance()->emit("tsdnsConnected", $this); - } - - /** - * The TeamSpeak3_Adapter_FileTransfer destructor. - * - * @return void - */ - public function __destruct() - { - if($this->getTransport() instanceof TeamSpeak3_Transport_Abstract && $this->getTransport()->isConnected()) - { - $this->getTransport()->disconnect(); - } - } - - /** - * Queries the TSDNS server for a specified virtual hostname and returns the result. - * - * @param string $tsdns - * @throws TeamSpeak3_Adapter_TSDNS_Exception - * @return TeamSpeak3_Helper_String - */ - public function resolve($tsdns) - { - $this->getTransport()->sendLine($tsdns); - $repl = $this->getTransport()->readLine(); - $this->getTransport()->disconnect(); - - if($repl->section(":", 0)->toInt() == 404) - { - throw new TeamSpeak3_Adapter_TSDNS_Exception("unable to resolve TSDNS hostname (" . $tsdns . ")"); - } - - TeamSpeak3_Helper_Signal::getInstance()->emit("tsdnsResolved", $tsdns, $repl); - - return $repl; - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/TSDNS/Exception.php b/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/TSDNS/Exception.php deleted file mode 100644 index 1701479..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/TSDNS/Exception.php +++ /dev/null @@ -1,32 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Adapter_TSDNS_Exception - * @brief Enhanced exception class for TeamSpeak3_Adapter_TSDNS objects. - */ -class TeamSpeak3_Adapter_TSDNS_Exception extends TeamSpeak3_Adapter_Exception {} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Update.php b/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Update.php deleted file mode 100644 index 247ee12..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Update.php +++ /dev/null @@ -1,217 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Adapter_Update - * @brief Provides methods to query the latest TeamSpeak 3 build numbers from the master server. - */ -class TeamSpeak3_Adapter_Update extends TeamSpeak3_Adapter_Abstract -{ - /** - * The IPv4 address or FQDN of the TeamSpeak Systems update server. - * - * @var string - */ - protected $default_host = "update.teamspeak.com"; - - /** - * The UDP port number of the TeamSpeak Systems update server. - * - * @var integer - */ - protected $default_port = 17384; - - /** - * Stores an array containing the latest build numbers (integer timestamps). - * - * @var array - */ - protected $build_datetimes = null; - - /** - * Stores an array containing the latest version strings. - * - * @var array - */ - protected $version_strings = null; - - /** - * Connects the TeamSpeak3_Transport_Abstract object and performs initial actions on the remote - * server. - * - * @throws TeamSpeak3_Adapter_Update_Exception - * @return void - */ - public function syn() - { - if(!isset($this->options["host"]) || empty($this->options["host"])) $this->options["host"] = $this->default_host; - if(!isset($this->options["port"]) || empty($this->options["port"])) $this->options["port"] = $this->default_port; - - $this->initTransport($this->options, "TeamSpeak3_Transport_UDP"); - $this->transport->setAdapter($this); - - TeamSpeak3_Helper_Profiler::init(spl_object_hash($this)); - - $this->getTransport()->send(TeamSpeak3_Helper_String::fromHex(33)); - - if(!preg_match_all("/,?(\d+)#([0-9a-zA-Z\._-]+),?/", $this->getTransport()->read(96), $matches) || !isset($matches[1]) || !isset($matches[2])) - { - throw new TeamSpeak3_Adapter_Update_Exception("invalid reply from the server"); - } - - $this->build_datetimes = $matches[1]; - $this->version_strings = $matches[2]; - - TeamSpeak3_Helper_Signal::getInstance()->emit("updateConnected", $this); - } - - /** - * The TeamSpeak3_Adapter_Update destructor. - * - * @return void - */ - public function __destruct() - { - if($this->getTransport() instanceof TeamSpeak3_Transport_Abstract && $this->getTransport()->isConnected()) - { - $this->getTransport()->disconnect(); - } - } - - /** - * Returns the current build number for a specified update channel. Note that since version - * 3.0.0, the build number represents an integer timestamp. $channel must be set to one of - * the following values: - * - * - stable - * - beta - * - alpha - * - server - * - * @param string $channel - * @throws TeamSpeak3_Adapter_Update_Exception - * @return integer - */ - public function getRev($channel = "stable") - { - switch($channel) - { - case "stable": - return isset($this->build_datetimes[0]) ? $this->build_datetimes[0] : null; - - case "beta": - return isset($this->build_datetimes[1]) ? $this->build_datetimes[1] : null; - - case "alpha": - return isset($this->build_datetimes[2]) ? $this->build_datetimes[2] : null; - - case "server": - return isset($this->build_datetimes[3]) ? $this->build_datetimes[3] : null; - - default: - throw new TeamSpeak3_Adapter_Update_Exception("invalid update channel identifier (" . $channel . ")"); - } - } - - /** - * Returns the current version string for a specified update channel. $channel must be set to - * one of the following values: - * - * - stable - * - beta - * - alpha - * - server - * - * @param string $channel - * @throws TeamSpeak3_Adapter_Update_Exception - * @return integer - */ - public function getVersion($channel = "stable") - { - switch($channel) - { - case "stable": - return isset($this->version_strings[0]) ? $this->version_strings[0] : null; - - case "beta": - return isset($this->version_strings[1]) ? $this->version_strings[1] : null; - - case "alpha": - return isset($this->version_strings[2]) ? $this->version_strings[2] : null; - - case "server": - return isset($this->version_strings[3]) ? $this->version_strings[3] : null; - - default: - throw new TeamSpeak3_Adapter_Update_Exception("invalid update channel identifier (" . $channel . ")"); - } - } - - /** - * Alias for getRev() using the 'stable' update channel. - * - * @param string $channel - * @return integer - */ - public function getClientRev() - { - return $this->getRev("stable"); - } - - /** - * Alias for getRev() using the 'server' update channel. - * - * @param string $channel - * @return integer - */ - public function getServerRev() - { - return $this->getRev("server"); - } - - /** - * Alias for getVersion() using the 'stable' update channel. - * - * @param string $channel - * @return integer - */ - public function getClientVersion() - { - return $this->getVersion("stable"); - } - - /** - * Alias for getVersion() using the 'server' update channel. - * - * @param string $channel - * @return integer - */ - public function getServerVersion() - { - return $this->getVersion("server"); - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Update/Exception.php b/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Update/Exception.php deleted file mode 100644 index a68a447..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Adapter/Update/Exception.php +++ /dev/null @@ -1,32 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Adapter_Update_Exception - * @brief Enhanced exception class for TeamSpeak3_Adapter_Update objects. - */ -class TeamSpeak3_Adapter_Update_Exception extends TeamSpeak3_Adapter_Exception {} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Exception.php b/lib/ts3phpframework/libraries/TeamSpeak3/Exception.php deleted file mode 100644 index 8f4c5d3..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Exception.php +++ /dev/null @@ -1,129 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Exception - * @brief Enhanced exception class for TeamSpeak3 objects. - */ -class TeamSpeak3_Exception extends Exception -{ - /** - * Stores custom error messages. - * - * @var array - */ - protected static $messages = array(); - - /** - * The TeamSpeak3_Exception constructor. - * - * @param string $mesg - * @param integer $code - * @return TeamSpeak3_Exception - */ - public function __construct($mesg, $code = 0x00) - { - parent::__construct($mesg, $code); - - if(array_key_exists((int) $code, self::$messages)) - { - $this->message = $this->prepareCustomMessage(self::$messages[intval($code)]); - } - - TeamSpeak3_Helper_Signal::getInstance()->emit("errorException", $this); - } - - /** - * Prepares a custom error message by replacing pre-defined signs with given values. - * - * @param TeamSpeak3_Helper_String $mesg - * @return TeamSpeak3_Helper_String - */ - protected function prepareCustomMessage(TeamSpeak3_Helper_String $mesg) - { - $args = array( - "code" => $this->getCode(), - "mesg" => $this->getMessage(), - "line" => $this->getLine(), - "file" => $this->getFile(), - ); - - return $mesg->arg($args)->toString(); - } - - /** - * Registers a custom error message to $code. - * - * @param integer $code - * @param string $mesg - * @throws TeamSpeak3_Exception - * @return void - */ - public static function registerCustomMessage($code, $mesg) - { - if(array_key_exists((int) $code, self::$messages)) - { - throw new self("custom message for code 0x" . strtoupper(dechex($code)) . " is already registered"); - } - - if(!is_string($mesg)) - { - throw new self("custom message for code 0x" . strtoupper(dechex($code)) . " must be a string"); - } - - self::$messages[(int) $code] = new TeamSpeak3_Helper_String($mesg); - } - - /** - * Unregisters a custom error message from $code. - * - * @param integer $code - * @throws TeamSpeak3_Exception - * @return void - */ - public static function unregisterCustomMessage($code) - { - if(!array_key_exists((int) $code, self::$messages)) - { - throw new self("custom message for code 0x" . strtoupper(dechex($code)) . " is not registered"); - } - - unset(self::$messages[(int) $code]); - } - - /** - * Returns the class from which the exception was thrown. - * - * @return string - */ - public function getSender() - { - $trace = $this->getTrace(); - - return (isset($trace[0]["class"])) ? $trace[0]["class"] : "{main}"; - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Char.php b/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Char.php deleted file mode 100644 index cf9e853..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Char.php +++ /dev/null @@ -1,269 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Helper_Char - * @brief Helper class for char handling. - */ -class TeamSpeak3_Helper_Char -{ - /** - * Stores the original character. - * - * @var string - */ - protected $char = null; - - /** - * The TeamSpeak3_Helper_Char constructor. - * - * @param string $var - * @throws TeamSpeak3_Helper_Exception - * @return TeamSpeak3_Helper_Char - */ - public function __construct($char) - { - if(strlen($char) != 1) - { - throw new TeamSpeak3_Helper_Exception("char parameter may not contain more or less than one character"); - } - - $this->char = strval($char); - } - - /** - * Returns true if the character is a letter. - * - * @return boolean - */ - public function isLetter() - { - return ctype_alpha($this->char); - } - - /** - * Returns true if the character is a decimal digit. - * - * @return boolean - */ - public function isDigit() - { - return ctype_digit($this->char); - } - - /** - * Returns true if the character is a space. - * - * @return boolean - */ - public function isSpace() - { - return ctype_space($this->char); - } - - /** - * Returns true if the character is a mark. - * - * @return boolean - */ - public function isMark() - { - return ctype_punct($this->char); - } - - /** - * Returns true if the character is a control character (i.e. "\t"). - * - * @return boolean - */ - public function isControl() - { - return ctype_cntrl($this->char); - } - - /** - * Returns true if the character is a printable character. - * - * @return boolean - */ - public function isPrintable() - { - return ctype_print($this->char); - } - - /** - * Returns true if the character is the Unicode character 0x0000 ("\0"). - * - * @return boolean - */ - public function isNull() - { - return ($this->char === "\0") ? TRUE : FALSE; - } - - /** - * Returns true if the character is an uppercase letter. - * - * @return boolean - */ - public function isUpper() - { - return ($this->char === strtoupper($this->char)) ? TRUE : FALSE; - } - - /** - * Returns true if the character is a lowercase letter. - * - * @return boolean - */ - public function isLower() - { - return ($this->char === strtolower($this->char)) ? TRUE : FALSE; - } - - /** - * Returns the uppercase equivalent if the character is lowercase. - * - * @return TeamSpeak3_Helper_Char - */ - public function toUpper() - { - return ($this->isUpper()) ? $this : new self(strtoupper($this)); - } - - /** - * Returns the lowercase equivalent if the character is uppercase. - * - * @return TeamSpeak3_Helper_Char - */ - public function toLower() - { - return ($this->isLower()) ? $this : new self(strtolower($this)); - } - - /** - * Returns the ascii value of the character. - * - * @return integer - */ - public function toAscii() - { - return ord($this->char); - } - - /** - * Returns the Unicode value of the character. - * - * @return integer - */ - public function toUnicode() - { - $h = ord($this->char{0}); - - if($h <= 0x7F) - { - return $h; - } - else if($h < 0xC2) - { - return FALSE; - } - else if($h <= 0xDF) - { - return ($h & 0x1F) << 6 | (ord($this->char{1}) & 0x3F); - } - else if($h <= 0xEF) - { - return ($h & 0x0F) << 12 | (ord($this->char{1}) & 0x3F) << 6 | (ord($this->char{2}) & 0x3F); - } - else if($h <= 0xF4) - { - return ($h & 0x0F) << 18 | (ord($this->char{1}) & 0x3F) << 12 | (ord($this->char{2}) & 0x3F) << 6 | (ord($this->char{3}) & 0x3F); - } - else - { - return FALSE; - } - } - - /** - * Returns the hexadecimal value of the char. - * - * @return string - */ - public function toHex() - { - return strtoupper(dechex($this->toAscii())); - } - - /** - * Returns the TeamSpeak3_Helper_Char based on a given hex value. - * - * @param string $hex - * @throws TeamSpeak3_Helper_Exception - * @return TeamSpeak3_Helper_Char - */ - public static function fromHex($hex) - { - if(strlen($hex) != 2) - { - throw new TeamSpeak3_Helper_Exception("given parameter '" . $hex . "' is not a valid hexadecimal number"); - } - - return new self(chr(hexdec($hex))); - } - - /** - * Returns the character as a standard string. - * - * @return string - */ - public function toString() - { - return $this->char; - } - - /** - * Returns the integer value of the character. - * - * @return integer - */ - public function toInt() - { - return intval($this->char); - } - - /** - * Returns the character as a standard string. - * - * @return string - */ - public function __toString() - { - return $this->char; - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Convert.php b/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Convert.php deleted file mode 100644 index 6b8979f..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Convert.php +++ /dev/null @@ -1,349 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Helper_Convert - * @brief Helper class for data conversion. - */ -class TeamSpeak3_Helper_Convert -{ - /** - * Converts bytes to a human readable value. - * - * @param integer $bytes - * @return string - */ - public static function bytes($bytes) - { - $kbytes = sprintf("%.02f", $bytes/1024); - $mbytes = sprintf("%.02f", $kbytes/1024); - $gbytes = sprintf("%.02f", $mbytes/1024); - $tbytes = sprintf("%.02f", $gbytes/1024); - - if($tbytes >= 1) - return $tbytes . " TB"; - if($gbytes >= 1) - return $gbytes . " GB"; - if($mbytes >= 1) - return $mbytes . " MB"; - if($kbytes >= 1) - return $kbytes . " KB"; - - return $bytes . " B"; - } - - /** - * Converts seconds/milliseconds to a human readable value. - * - * @param integer $seconds - * @param boolean $is_ms - * @param string $format - * @return string - */ - public static function seconds($seconds, $is_ms = FALSE, $format = "%dD %02d:%02d:%02d") - { - if($is_ms) $seconds = $seconds/1000; - - return sprintf($format, $seconds/60/60/24, ($seconds/60/60)%24, ($seconds/60)%60, $seconds%60); - } - - /** - * Converts a given codec ID to a human readable name. - * - * @param integer $codec - * @return string - */ - public static function codec($codec) - { - if($codec == TeamSpeak3::CODEC_SPEEX_NARROWBAND) - return "Speex Narrowband"; - if($codec == TeamSpeak3::CODEC_SPEEX_WIDEBAND) - return "Speex Wideband"; - if($codec == TeamSpeak3::CODEC_SPEEX_ULTRAWIDEBAND) - return "Speex Ultra-Wideband"; - if($codec == TeamSpeak3::CODEC_CELT_MONO) - return "CELT Mono"; - if($codec == TeamSpeak3::CODEC_OPUS_VOICE) - return "Opus Voice"; - if($codec == TeamSpeak3::CODEC_OPUS_MUSIC) - return "Opus Music"; - - return "Unknown"; - } - - /** - * Converts a given group type ID to a human readable name. - * - * @param integer $type - * @return string - */ - public static function groupType($type) - { - if($type == TeamSpeak3::GROUP_DBTYPE_TEMPLATE) - return "Template"; - if($type == TeamSpeak3::GROUP_DBTYPE_REGULAR) - return "Regular"; - if($type == TeamSpeak3::GROUP_DBTYPE_SERVERQUERY) - return "ServerQuery"; - - return "Unknown"; - } - - /** - * Converts a given permission type ID to a human readable name. - * - * @param integer $type - * @return string - */ - public static function permissionType($type) - { - if($type == TeamSpeak3::PERM_TYPE_SERVERGROUP) - return "Server Group"; - if($type == TeamSpeak3::PERM_TYPE_CLIENT) - return "Client"; - if($type == TeamSpeak3::PERM_TYPE_CHANNEL) - return "Channel"; - if($type == TeamSpeak3::PERM_TYPE_CHANNELGROUP) - return "Channel Group"; - if($type == TeamSpeak3::PERM_TYPE_CHANNELCLIENT) - return "Channel Client"; - - return "Unknown"; - } - - /** - * Converts a given permission category value to a human readable name. - * - * @param integer $pcat - * @return string - */ - public static function permissionCategory($pcat) - { - if($pcat == TeamSpeak3::PERM_CAT_GLOBAL) - return "Global"; - if($pcat == TeamSpeak3::PERM_CAT_GLOBAL_INFORMATION) - return "Global / Information"; - if($pcat == TeamSpeak3::PERM_CAT_GLOBAL_SERVER_MGMT) - return "Global / Virtual Server Management"; - if($pcat == TeamSpeak3::PERM_CAT_GLOBAL_ADM_ACTIONS) - return "Global / Administration"; - if($pcat == TeamSpeak3::PERM_CAT_GLOBAL_SETTINGS) - return "Global / Settings"; - if($pcat == TeamSpeak3::PERM_CAT_SERVER) - return "Virtual Server"; - if($pcat == TeamSpeak3::PERM_CAT_SERVER_INFORMATION) - return "Virtual Server / Information"; - if($pcat == TeamSpeak3::PERM_CAT_SERVER_ADM_ACTIONS) - return "Virtual Server / Administration"; - if($pcat == TeamSpeak3::PERM_CAT_SERVER_SETTINGS) - return "Virtual Server / Settings"; - if($pcat == TeamSpeak3::PERM_CAT_CHANNEL) - return "Channel"; - if($pcat == TeamSpeak3::PERM_CAT_CHANNEL_INFORMATION) - return "Channel / Information"; - if($pcat == TeamSpeak3::PERM_CAT_CHANNEL_CREATE) - return "Channel / Create"; - if($pcat == TeamSpeak3::PERM_CAT_CHANNEL_MODIFY) - return "Channel / Modify"; - if($pcat == TeamSpeak3::PERM_CAT_CHANNEL_DELETE) - return "Channel / Delete"; - if($pcat == TeamSpeak3::PERM_CAT_CHANNEL_ACCESS) - return "Channel / Access"; - if($pcat == TeamSpeak3::PERM_CAT_GROUP) - return "Group"; - if($pcat == TeamSpeak3::PERM_CAT_GROUP_INFORMATION) - return "Group / Information"; - if($pcat == TeamSpeak3::PERM_CAT_GROUP_CREATE) - return "Group / Create"; - if($pcat == TeamSpeak3::PERM_CAT_GROUP_MODIFY) - return "Group / Modify"; - if($pcat == TeamSpeak3::PERM_CAT_GROUP_DELETE) - return "Group / Delete"; - if($pcat == TeamSpeak3::PERM_CAT_CLIENT) - return "Client"; - if($pcat == TeamSpeak3::PERM_CAT_CLIENT_INFORMATION) - return "Client / Information"; - if($pcat == TeamSpeak3::PERM_CAT_CLIENT_ADM_ACTIONS) - return "Client / Admin"; - if($pcat == TeamSpeak3::PERM_CAT_CLIENT_BASICS) - return "Client / Basics"; - if($pcat == TeamSpeak3::PERM_CAT_CLIENT_MODIFY) - return "Client / Modify"; - if($pcat == TeamSpeak3::PERM_CAT_FILETRANSFER) - return "File Transfer"; - if($pcat == TeamSpeak3::PERM_CAT_NEEDED_MODIFY_POWER) - return "Grant"; - - return "Unknown"; - } - - /** - * Converts a given log level ID to a human readable name and vice versa. - * - * @param mixed $level - * @return string - */ - public static function logLevel($level) - { - if(is_numeric($level)) - { - if($level == TeamSpeak3::LOGLEVEL_CRITICAL) - return "CRITICAL"; - if($level == TeamSpeak3::LOGLEVEL_ERROR) - return "ERROR"; - if($level == TeamSpeak3::LOGLEVEL_DEBUG) - return "DEBUG"; - if($level == TeamSpeak3::LOGLEVEL_WARNING) - return "WARNING"; - if($level == TeamSpeak3::LOGLEVEL_INFO) - return "INFO"; - - return "DEVELOP"; - } - else - { - if(strtoupper($level) == "CRITICAL") - return TeamSpeak3::LOGLEVEL_CRITICAL; - if(strtoupper($level) == "ERROR") - return TeamSpeak3::LOGLEVEL_ERROR; - if(strtoupper($level) == "DEBUG") - return TeamSpeak3::LOGLEVEL_DEBUG; - if(strtoupper($level) == "WARNING") - return TeamSpeak3::LOGLEVEL_WARNING; - if(strtoupper($level) == "INFO") - return TeamSpeak3::LOGLEVEL_INFO; - - return TeamSpeak3::LOGLEVEL_DEVEL; - } - } - - /** - * Converts a specified log entry string into an array containing the data. - * - * @param string $entry - * @return array - */ - public static function logEntry($entry) - { - $parts = explode("|", $entry, 5); - $array = array(); - - if(count($parts) != 5) - { - $array["timestamp"] = 0; - $array["level"] = TeamSpeak3::LOGLEVEL_ERROR; - $array["channel"] = "ParamParser"; - $array["server_id"] = ""; - $array["msg"] = TeamSpeak3_Helper_String::factory("convert error (" . trim($entry) . ")"); - $array["msg_plain"] = $entry; - $array["malformed"] = TRUE; - } - else - { - $array["timestamp"] = strtotime(trim($parts[0])); - $array["level"] = self::logLevel(trim($parts[1])); - $array["channel"] = trim($parts[2]); - $array["server_id"] = trim($parts[3]); - $array["msg"] = TeamSpeak3_Helper_String::factory(trim($parts[4])); - $array["msg_plain"] = $entry; - $array["malformed"] = FALSE; - } - - return $array; - } - - /** - * Converts a given string to a ServerQuery password hash. - * - * @param string $plain - * @return string - */ - public static function password($plain) - { - return base64_encode(sha1($plain, TRUE)); - } - - /** - * Returns a client-like formatted version of the TeamSpeak 3 version string. - * - * @param string $version - * @param string $format - * @return string - */ - public static function version($version, $format = "Y-m-d h:i:s") - { - if(!$version instanceof TeamSpeak3_Helper_String) - { - $version = new TeamSpeak3_Helper_String($version); - } - - $buildno = $version->section("[", 1)->filterDigits()->toInt(); - - return ($buildno <= 15001) ? $version : $version->section("[")->append("(" . date($format, $buildno) . ")"); - } - - /** - * Returns a client-like short-formatted version of the TeamSpeak 3 version string. - * - * @param string $version - * @return string - */ - public static function versionShort($version) - { - if(!$version instanceof TeamSpeak3_Helper_String) - { - $version = new TeamSpeak3_Helper_String($version); - } - - return $version->section(" ", 0); - } - - /** - * Tries to detect the type of an image by a given string and returns it. - * - * @param string $binary - * @return string - */ - public static function imageMimeType($binary) - { - if(!preg_match('/\A(?:(\xff\xd8\xff)|(GIF8[79]a)|(\x89PNG\x0d\x0a)|(BM)|(\x49\x49(\x2a\x00|\x00\x4a))|(FORM.{4}ILBM))/', $binary, $matches)) - { - return "application/octet-stream"; - } - - $type = array( - 1 => "image/jpeg", - 2 => "image/gif", - 3 => "image/png", - 4 => "image/x-windows-bmp", - 5 => "image/tiff", - 6 => "image/x-ilbm", - ); - - return $type[count($matches)-1]; - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Crypt.php b/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Crypt.php deleted file mode 100644 index dff571c..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Crypt.php +++ /dev/null @@ -1,482 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Helper_Crypt - * @brief Helper class for data encryption. - */ -class TeamSpeak3_Helper_Crypt -{ - /** - * Stores the secret passphrase to encrypt or decrypt a given string. - * - * @var string - */ - protected $passphrase = null; - - /** - * Stores an array containing 18 32-bit entries. - * - * @var array - */ - protected $p = array(); - - /** - * Stores an array containing 4 sub-arrays with 256 32-bit entries. - * - * @var array - */ - protected $s = array(); - - /** - * The TeamSpeak3_Helper_Crypt constructor. - * - * @param string $secret - * @return TeamSpeak3_Helper_Crypt - */ - public function __construct($secret) - { - $this->setDefaultKeys(); - $this->setSecretKey($secret); - } - - /** - * Encrypts a given string. - * - * @param string $string - * @return string - */ - public function encrypt($string) - { - $string = trim($string); - $encryp = ""; - $length = strlen($string); - $string .= str_repeat(chr(0), (8-($length%8))%8); - - for($i = 0; $i < $length; $i += 8) - { - list(,$xl,$xr) = unpack("N2", substr($string, $i, 8)); - $this->encipher($xl, $xr); - $encryp .= pack("N2", $xl, $xr); - } - - return base64_encode($encryp); - } - - /** - * Decrypts a given string. - * - * @param string $string - * @return string - */ - public function decrypt($string) - { - $string = base64_decode($string); - $decryp = ""; - $length = strlen($string); - $string .= str_repeat(chr(0), (8-($length%8))%8); - - for($i = 0; $i < $length; $i += 8) - { - list(,$xl,$xr) = unpack("N2", substr($string, $i, 8)); - $this->decipher($xl, $xr); - $decryp .= pack("N2", $xl, $xr); - } - - return trim($decryp); - } - - /** - * Enciphers a single 64-bit block. - * - * @param integer $xl - * @param integer $xr - */ - protected function encipher(&$xl, &$xr) - { - for($i = 0; $i < 16; $i++) - { - $temp = $xl ^ $this->p[$i]; - $xl = ((($this->s[0][($temp>>24) & 255] + $this->s[1][($temp>>16) & 255]) ^ $this->s[2][($temp>>8) & 255]) + $this->s[3][$temp & 255]) ^ $xr; - $xr = $temp; - } - - $xr = $xl ^ $this->p[16]; - $xl = $temp ^ $this->p[17]; - } - - /** - * Deciphers a single 64-bit block - * - * @param integer $xl - * @param integer $xr - * @return void - */ - protected function decipher(&$xl, &$xr) - { - for($i = 17; $i > 1; $i--) - { - $temp = $xl ^ $this->p[$i]; - $xl = ((($this->s[0][($temp>>24) & 255] + $this->s[1][($temp>>16) & 255]) ^ $this->s[2][($temp>>8) & 255]) + $this->s[3][$temp & 255]) ^ $xr; - $xr = $temp; - } - - $xr = $xl ^ $this->p[1]; - $xl = $temp ^ $this->p[0]; - } - - /** - * Sets the secret key using the specified pasphrase. - * - * @param string $passphrase - * @throws Habitat_Exception - * @return void - */ - protected function setSecretKey($passphrase) - { - $length = strlen($passphrase); - - if(strlen($passphrase) < 1 || strlen($passphrase) > 56) - { - throw new TeamSpeak3_Helper_Exception("secret passphrase must contain at least one but less than 56 characters"); - } - - $k = 0; - $data = 0; - $datal = 0; - $datar = 0; - - for($i = 0; $i < 18; $i++) - { - $data = 0; - for($j = 4; $j > 0; $j--) - { - $data = $data << 8 | ord($passphrase{$k}); - $k = ($k+1) % $length; - } - $this->p[$i] ^= $data; - } - - - for($i = 0; $i <= 16; $i += 2) - { - $this->encipher($datal, $datar); - $this->p[$i] = $datal; - $this->p[$i+1] = $datar; - } - - foreach($this->s as $key => $val) - { - for ($i = 0; $i < 256; $i += 2) - { - $this->encipher($datal, $datar); - $this->s[$key][$i] = $datal; - $this->s[$key][$i+1] = $datar; - } - } - } - - /** - * Sets the defult p and s keys. - * - * @return void - */ - protected function setDefaultKeys() - { - $this->p = array( - 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, 0xA4093822, 0x299F31D0, - 0x082EFA98, 0xEC4E6C89, 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C, - 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917, 0x9216D5D9, 0x8979FB1B, - ); - $this->s = array( - array( - 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7, - 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99, - 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16, - 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E, - 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE, - 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013, - 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF, - 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E, - 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60, - 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440, - 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE, - 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A, - 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E, - 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677, - 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193, - 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032, - 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88, - 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239, - 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E, - 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0, - 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3, - 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98, - 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88, - 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE, - 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6, - 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D, - 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B, - 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7, - 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA, - 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463, - 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F, - 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09, - 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3, - 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB, - 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279, - 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8, - 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB, - 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82, - 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB, - 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573, - 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0, - 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B, - 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790, - 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8, - 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4, - 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0, - 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7, - 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C, - 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD, - 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1, - 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299, - 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9, - 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477, - 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF, - 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49, - 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF, - 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA, - 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5, - 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41, - 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915, - 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400, - 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915, - 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664, - 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A - ), - array( - 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623, - 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266, - 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1, - 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E, - 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6, - 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1, - 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E, - 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1, - 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737, - 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8, - 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF, - 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD, - 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701, - 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7, - 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41, - 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331, - 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF, - 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF, - 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E, - 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87, - 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C, - 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2, - 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16, - 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD, - 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B, - 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509, - 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E, - 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3, - 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F, - 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A, - 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4, - 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960, - 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66, - 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28, - 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802, - 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84, - 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510, - 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF, - 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14, - 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E, - 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50, - 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7, - 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8, - 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281, - 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99, - 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696, - 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128, - 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73, - 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0, - 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0, - 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105, - 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250, - 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3, - 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285, - 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00, - 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061, - 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB, - 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E, - 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735, - 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC, - 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9, - 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340, - 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20, - 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 - ), - array( - 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934, - 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068, - 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF, - 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840, - 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45, - 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504, - 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A, - 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB, - 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE, - 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6, - 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42, - 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B, - 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2, - 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB, - 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527, - 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B, - 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33, - 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C, - 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3, - 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC, - 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17, - 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564, - 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B, - 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115, - 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922, - 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728, - 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0, - 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E, - 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37, - 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D, - 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804, - 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B, - 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3, - 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB, - 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D, - 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C, - 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350, - 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9, - 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A, - 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE, - 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D, - 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC, - 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F, - 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61, - 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2, - 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9, - 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2, - 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C, - 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E, - 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633, - 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10, - 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169, - 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52, - 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027, - 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5, - 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62, - 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634, - 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76, - 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24, - 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC, - 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4, - 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C, - 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837, - 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 - ), - array( - 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B, - 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE, - 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B, - 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4, - 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8, - 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6, - 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304, - 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22, - 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4, - 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6, - 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9, - 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59, - 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593, - 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51, - 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28, - 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C, - 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B, - 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28, - 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C, - 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD, - 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A, - 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319, - 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB, - 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F, - 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991, - 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32, - 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680, - 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166, - 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE, - 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB, - 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5, - 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47, - 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370, - 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D, - 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84, - 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048, - 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8, - 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD, - 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9, - 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7, - 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38, - 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F, - 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C, - 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525, - 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1, - 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442, - 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964, - 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E, - 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8, - 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D, - 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F, - 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299, - 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02, - 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC, - 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614, - 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A, - 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6, - 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B, - 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0, - 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060, - 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E, - 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9, - 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F, - 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 - ) - ); - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Exception.php b/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Exception.php deleted file mode 100644 index 23796cd..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Exception.php +++ /dev/null @@ -1,32 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Helper_Exception - * @brief Enhanced exception class for TeamSpeak3_Helper_* objects. - */ -class TeamSpeak3_Helper_Exception extends TeamSpeak3_Exception {} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Profiler.php b/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Profiler.php deleted file mode 100644 index bf9d7f7..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Profiler.php +++ /dev/null @@ -1,101 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Helper_Profiler - * @brief Helper class for profiler handling. - */ -class TeamSpeak3_Helper_Profiler -{ - /** - * Stores various timers for code profiling. - * - * @var array - */ - protected static $timers = array(); - - /** - * Inits a timer. - * - * @param string $name - * @return void - */ - public static function init($name = "default") - { - self::$timers[$name] = new TeamSpeak3_Helper_Profiler_Timer($name); - } - - /** - * Starts a timer. - * - * @param string $name - * @return void - */ - public static function start($name = "default") - { - if(array_key_exists($name, self::$timers)) - { - self::$timers[$name]->start(); - } - else - { - self::$timers[$name] = new TeamSpeak3_Helper_Profiler_Timer($name); - } - } - - /** - * Stops a timer. - * - * @param string $name - * @return void - */ - public static function stop($name = "default") - { - if(!array_key_exists($name, self::$timers)) - { - self::init($name); - } - - self::$timers[$name]->stop(); - } - - /** - * Returns a timer. - * - * @param string $name - * @return TeamSpeak3_Helper_Profiler_Timer - */ - public static function get($name = "default") - { - if(!array_key_exists($name, self::$timers)) - { - self::init($name); - } - - return self::$timers[$name]; - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Profiler/Exception.php b/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Profiler/Exception.php deleted file mode 100644 index ba770bc..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Profiler/Exception.php +++ /dev/null @@ -1,32 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Helper_Profiler_Exception - * @brief Enhanced exception class for TeamSpeak3_Helper_Profiler objects. - */ -class TeamSpeak3_Helper_Profiler_Exception extends TeamSpeak3_Helper_Exception {} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Profiler/Timer.php b/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Profiler/Timer.php deleted file mode 100644 index 3ee87cf..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Profiler/Timer.php +++ /dev/null @@ -1,154 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Helper_Profiler_Timer - * @brief Helper class providing profiler timers. - */ -class TeamSpeak3_Helper_Profiler_Timer -{ - /** - * Indicates wether the timer is running or not. - * - * @var boolean - */ - protected $running = FALSE; - - /** - * Stores the timestamp when the timer was last started. - * - * @var integer - */ - protected $started = 0; - - /** - * Stores the timer name. - * - * @var string - */ - protected $name = null; - - /** - * Stores various information about the server environment. - * - * @var array - */ - protected $data = array(); - - /** - * The TeamSpeak3_Helper_Profiler_Timer constructor. - * - * @param string $name - * @return TeamSpeak3_Helper_Profiler_Timer - */ - public function __construct($name) - { - $this->name = (string) $name; - - $this->data["runtime"] = 0; - $this->data["realmem"] = 0; - $this->data["emalloc"] = 0; - - $this->start(); - } - - /** - * Starts the timer. - * - * @return void - */ - public function start() - { - if($this->isRunning()) return; - - $this->data["realmem_start"] = memory_get_usage(TRUE); - $this->data["emalloc_start"] = memory_get_usage(); - - $this->started = microtime(TRUE); - $this->running = TRUE; - } - - /** - * Stops the timer. - * - * @return void - */ - public function stop() - { - if(!$this->isRunning()) return; - - $this->data["runtime"] += microtime(TRUE) - $this->started; - $this->data["realmem"] += memory_get_usage(TRUE) - $this->data["realmem_start"]; - $this->data["emalloc"] += memory_get_usage() - $this->data["emalloc_start"]; - - $this->started = 0; - $this->running = FALSE; - } - - /** - * Return the timer runtime. - * - * @return mixed - */ - public function getRuntime() - { - if($this->isRunning()) - { - $this->stop(); - $this->start(); - } - - return $this->data["runtime"]; - } - - /** - * Returns the amount of memory allocated to PHP in bytes. - * - * @param boolean $realmem - * @return integer - */ - public function getMemUsage($realmem = FALSE) - { - if($this->isRunning()) - { - $this->stop(); - $this->start(); - } - - return ($realmem !== FALSE) ? $this->data["realmem"] : $this->data["emalloc"]; - } - - /** - * Returns TRUE if the timer is running. - * - * @return boolean - */ - public function isRunning() - { - return $this->running; - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Signal.php b/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Signal.php deleted file mode 100644 index 40010c7..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Signal.php +++ /dev/null @@ -1,213 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Helper_Signal - * @brief Helper class for signal slots. - */ -class TeamSpeak3_Helper_Signal -{ - /** - * Stores the TeamSpeak3_Helper_Signal object. - * - * @var TeamSpeak3_Helper_Signal - */ - protected static $instance = null; - - /** - * Stores subscribed signals and their slots. - * - * @var array - */ - protected $sigslots = array(); - - /** - * Emits a signal with a given set of parameters. - * - * @param string $signal - * @param mixed $params - * @return mixed - */ - public function emit($signal, $params = null) - { - if(!$this->hasHandlers($signal)) - { - return; - } - - if(!is_array($params)) - { - $params = func_get_args(); - $params = array_slice($params, 1); - } - - foreach($this->sigslots[$signal] as $slot) - { - $return = $slot->call($params); - } - - return $return; - } - - /** - * Generates a MD5 hash based on a given callback. - * - * @param mixed $callback - * @param string - * @return void - */ - public function getCallbackHash($callback) - { - if(!is_callable($callback, TRUE, $callable_name)) - { - throw new TeamSpeak3_Helper_Signal_Exception("invalid callback specified"); - } - - return md5($callable_name); - } - - /** - * Subscribes to a signal and returns the signal handler. - * - * @param string $signal - * @param mixed $callback - * @return TeamSpeak3_Helper_Signal_Handler - */ - public function subscribe($signal, $callback) - { - if(empty($this->sigslots[$signal])) - { - $this->sigslots[$signal] = array(); - } - - $index = $this->getCallbackHash($callback); - - if(!array_key_exists($index, $this->sigslots[$signal])) - { - $this->sigslots[$signal][$index] = new TeamSpeak3_Helper_Signal_Handler($signal, $callback); - } - - return $this->sigslots[$signal][$index]; - } - - /** - * Unsubscribes from a signal. - * - * @param string $signal - * @param mixed $callback - * @return void - */ - public function unsubscribe($signal, $callback = null) - { - if(!$this->hasHandlers($signal)) - { - return; - } - - if($callback !== null) - { - $index = $this->getCallbackHash($callback); - - if(!array_key_exists($index, $this->sigslots[$signal])) - { - return; - } - - unset($this->sigslots[$signal][$index]); - } - else - { - unset($this->sigslots[$signal]); - } - } - - /** - * Returns all registered signals. - * - * @return array - */ - public function getSignals() - { - return array_keys($this->sigslots); - } - - /** - * Returns TRUE there are slots subscribed for a specified signal. - * - * @param string $signal - * @return boolean - */ - public function hasHandlers($signal) - { - return empty($this->sigslots[$signal]) ? FALSE : TRUE; - } - - /** - * Returns all slots for a specified signal. - * - * @param string $signal - * @return array - */ - public function getHandlers($signal) - { - if(!$this->hasHandlers($signal)) - { - return $this->sigslots[$signal]; - } - - return array(); - } - - /** - * Clears all slots for a specified signal. - * - * @param string $signal - * @return void - */ - public function clearHandlers($signal) - { - if(!$this->hasHandlers($signal)) - { - unset($this->sigslots[$signal]); - } - } - - /** - * Returns a singleton instance of TeamSpeak3_Helper_Signal. - * - * @return TeamSpeak3_Helper_Signal - */ - public static function getInstance() - { - if(self::$instance === null) - { - self::$instance = new self(); - } - - return self::$instance; - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Signal/Exception.php b/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Signal/Exception.php deleted file mode 100644 index 70c1e7f..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Signal/Exception.php +++ /dev/null @@ -1,32 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Helper_Signal_Exception - * @brief Enhanced exception class for TeamSpeak3_Helper_Signal objects. - */ -class TeamSpeak3_Helper_Signal_Exception extends TeamSpeak3_Helper_Exception {} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Signal/Handler.php b/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Signal/Handler.php deleted file mode 100644 index 0050b21..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Signal/Handler.php +++ /dev/null @@ -1,78 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Helper_Signal_Handler - * @brief Helper class providing handler functions for signals. - */ -class TeamSpeak3_Helper_Signal_Handler -{ - /** - * Stores the name of the subscribed signal. - * - * @var string - */ - protected $signal = null; - - /** - * Stores the callback function for the subscribed signal. - * - * @var mixed - */ - protected $callback = null; - - /** - * The TeamSpeak3_Helper_Signal_Handler constructor. - * - * @param string $signal - * @param mixed $callback - * @throws TeamSpeak3_Helper_Signal_Exception - * @return TeamSpeak3_Helper_Signal_Handler - */ - public function __construct($signal, $callback) - { - $this->signal = (string) $signal; - - if(!is_callable($callback)) - { - throw new TeamSpeak3_Helper_Signal_Exception("invalid callback specified for signal '" . $signal . "'"); - } - - $this->callback = $callback; - } - - /** - * Invoke the signal handler. - * - * @param array $args - * @return mixed - */ - public function call(array $args = array()) - { - return call_user_func_array($this->callback, $args); - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Signal/Interface.php b/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Signal/Interface.php deleted file mode 100644 index 854b7d5..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Signal/Interface.php +++ /dev/null @@ -1,353 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Helper_Signal_Interface - * @brief Interface class describing the layout for TeamSpeak3_Helper_Signal callbacks. - */ -interface TeamSpeak3_Helper_Signal_Interface -{ - /** - * Possible callback for 'Connected' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("serverqueryConnected", array($object, "onConnect")); - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferConnected", array($object, "onConnect")); - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("blacklistConnected", array($object, "onConnect")); - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("updateConnected", array($object, "onConnect")); - * - * @param TeamSpeak3_Adapter_Abstract $adapter - * @return void - */ - public function onConnect(TeamSpeak3_Adapter_Abstract $adapter); - - /** - * Possible callback for 'Disconnected' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("serverqueryDisconnected", array($object, "onDisconnect")); - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferDisconnected", array($object, "onDisconnect")); - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("blacklistDisconnected", array($object, "onDisconnect")); - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("updateDisconnected", array($object, "onDisconnect")); - * - * @return void - */ - public function onDisconnect(); - - /** - * Possible callback for 'serverqueryCommandStarted' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("serverqueryCommandStarted", array($object, "onCommandStarted")); - * - * @param string $cmd - * @return void - */ - public function onCommandStarted($cmd); - - /** - * Possible callback for 'serverqueryCommandFinished' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("serverqueryCommandFinished", array($object, "onCommandFinished")); - * - * @param string $cmd - * @param TeamSpeak3_Adapter_ServerQuery_Reply $reply - * @return void - */ - public function onCommandFinished($cmd, TeamSpeak3_Adapter_ServerQuery_Reply $reply); - - /** - * Possible callback for 'notifyEvent' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyEvent", array($object, "onEvent")); - * - * @param TeamSpeak3_Adapter_ServerQuery_Event $event - * @param TeamSpeak3_Node_Host $host - * @return void - */ - public function onEvent(TeamSpeak3_Adapter_ServerQuery_Event $event, TeamSpeak3_Node_Host $host); - - /** - * Possible callback for 'notifyError' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyError", array($object, "onError")); - * - * @param TeamSpeak3_Adapter_ServerQuery_Reply $reply - * @return void - */ - public function onError(TeamSpeak3_Adapter_ServerQuery_Reply $reply); - - /** - * Possible callback for 'notifyServerselected' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyServerselected", array($object, "onServerselected")); - * - * @param TeamSpeak3_Node_Host $host - * @return void - */ - public function onServerselected(TeamSpeak3_Node_Host $host); - - /** - * Possible callback for 'notifyServercreated' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyServercreated", array($object, "onServercreated")); - * - * @param TeamSpeak3_Node_Host $host - * @param integer $sid - * @return void - */ - public function onServercreated(TeamSpeak3_Node_Host $host, $sid); - - /** - * Possible callback for 'notifyServerdeleted' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyServerdeleted", array($object, "onServerdeleted")); - * - * @param TeamSpeak3_Node_Host $host - * @param integer $sid - * @return void - */ - public function onServerdeleted(TeamSpeak3_Node_Host $host, $sid); - - /** - * Possible callback for 'notifyServerstarted' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyServerstarted", array($object, "onServerstarted")); - * - * @param TeamSpeak3_Node_Host $host - * @param integer $sid - * @return void - */ - public function onServerstarted(TeamSpeak3_Node_Host $host, $sid); - - /** - * Possible callback for 'notifyServerstopped' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyServerstopped", array($object, "onServerstopped")); - * - * @param TeamSpeak3_Node_Host $host - * @param integer $sid - * @return void - */ - public function onServerstopped(TeamSpeak3_Node_Host $host, $sid); - - /** - * Possible callback for 'notifyServershutdown' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyServershutdown", array($object, "onServershutdown")); - * - * @param TeamSpeak3_Node_Host $host - * @return void - */ - public function onServershutdown(TeamSpeak3_Node_Host $host); - - /** - * Possible callback for 'notifyLogin' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyLogin", array($object, "onLogin")); - * - * @param TeamSpeak3_Node_Host $host - * @return void - */ - public function onLogin(TeamSpeak3_Node_Host $host); - - /** - * Possible callback for 'notifyLogout' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyLogout", array($object, "onLogout")); - * - * @param TeamSpeak3_Node_Host $host - * @return void - */ - public function onLogout(TeamSpeak3_Node_Host $host); - - /** - * Possible callback for 'notifyTokencreated' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyTokencreated", array($object, "onTokencreated")); - * - * @param TeamSpeak3_Node_Server $server - * @param string $token - * @return void - */ - public function onTokencreated(TeamSpeak3_Node_Server $server, $token); - - /** - * Possible callback for 'filetransferHandshake' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferHandshake", array($object, "onFtHandshake")); - * - * @param TeamSpeak3_Adapter_FileTransfer $adapter - * @return void - */ - public function onFtHandshake(TeamSpeak3_Adapter_FileTransfer $adapter); - - /** - * Possible callback for 'filetransferUploadStarted' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferUploadStarted", array($object, "onFtUploadStarted")); - * - * @param string $ftkey - * @param integer $seek - * @param integer $size - * @return void - */ - public function onFtUploadStarted($ftkey, $seek, $size); - - /** - * Possible callback for 'filetransferUploadProgress' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferUploadProgress", array($object, "onFtUploadProgress")); - * - * @param string $ftkey - * @param integer $seek - * @param integer $size - * @return void - */ - public function onFtUploadProgress($ftkey, $seek, $size); - - /** - * Possible callback for 'filetransferUploadFinished' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferUploadFinished", array($object, "onFtUploadFinished")); - * - * @param string $ftkey - * @param integer $seek - * @param integer $size - * @return void - */ - public function onFtUploadFinished($ftkey, $seek, $size); - - /** - * Possible callback for 'filetransferDownloadStarted' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferDownloadStarted", array($object, "onFtDownloadStarted")); - * - * @param string $ftkey - * @param integer $buff - * @param integer $size - * @return void - */ - public function onFtDownloadStarted($ftkey, $buff, $size); - - /** - * Possible callback for 'filetransferDownloadProgress' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferDownloadProgress", array($object, "onFtDownloadProgress")); - * - * @param string $ftkey - * @param integer $buff - * @param integer $size - * @return void - */ - public function onFtDownloadProgress($ftkey, $buff, $size); - - /** - * Possible callback for 'filetransferDownloadFinished' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferDownloadFinished", array($object, "onFtDownloadFinished")); - * - * @param string $ftkey - * @param integer $buff - * @param integer $size - * @return void - */ - public function onFtDownloadFinished($ftkey, $buff, $size); - - /** - * Possible callback for 'DataRead' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("serverqueryDataRead", array($object, "onDebugDataRead")); - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferDataRead", array($object, "onDebugDataRead")); - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("blacklistDataRead", array($object, "onDebugDataRead")); - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("updateDataRead", array($object, "onDebugDataRead")); - * - * @param string $data - * @return void - */ - public function onDebugDataRead($data); - - /** - * Possible callback for 'DataSend' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("serverqueryDataSend", array($object, "onDebugDataSend")); - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferDataSend", array($object, "onDebugDataSend")); - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("blacklistDataSend", array($object, "onDebugDataSend")); - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("updateDataSend", array($object, "onDebugDataSend")); - * - * @param string $data - * @return void - */ - public function onDebugDataSend($data); - - /** - * Possible callback for 'WaitTimeout' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("serverqueryWaitTimeout", array($object, "onWaitTimeout")); - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("filetransferWaitTimeout", array($object, "onWaitTimeout")); - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("blacklistWaitTimeout", array($object, "onWaitTimeout")); - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("updateWaitTimeout", array($object, "onWaitTimeout")); - * - * @param integer $time - * @param TeamSpeak3_Adapter_Abstract $adapter - * @return void - */ - public function onWaitTimeout($time, TeamSpeak3_Adapter_Abstract $adapter); - - /** - * Possible callback for 'errorException' signals. - * - * === Examples === - * - TeamSpeak3_Helper_Signal::getInstance()->subscribe("errorException", array($object, "onException")); - * - * @param TeamSpeak3_Exception $e - * @return void - */ - public function onException(TeamSpeak3_Exception $e); -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/String.php b/lib/ts3phpframework/libraries/TeamSpeak3/Helper/String.php deleted file mode 100644 index a1d20bb..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/String.php +++ /dev/null @@ -1,939 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Helper_String - * @brief Helper class for string handling. - */ -class TeamSpeak3_Helper_String implements ArrayAccess, Iterator, Countable -{ - /** - * Stores the original string. - * - * @var string - */ - protected $string; - - /** - * @ignore - */ - protected $position = 0; - - /** - * The TeamSpeak3_Helper_String constructor. - * - * @param string $string - * @return TeamSpeak3_Helper_String - */ - public function __construct($string) - { - $this->string = (string) $string; - } - - /** - * Returns a TeamSpeak3_Helper_String object for thegiven string. - * - * @param string $string - * @return TeamSpeak3_Helper_String - */ - public static function factory($string) - { - return new self($string); - } - - /** - * Replaces every occurrence of the string $search with the string $replace. - * - * @param string $search - * @param string $replace - * @param boolean $caseSensitivity - * @return TeamSpeak3_Helper_String - */ - public function replace($search, $replace, $caseSensitivity = TRUE) - { - if($caseSensitivity) - { - $this->string = str_replace($search, $replace, $this->string); - } - else - { - $this->string = str_ireplace($search, $replace, $this->string); - } - - return $this; - } - - /** - * This function replaces indexed or associative signs with given values. - * - * @param array $args - * @param string $char - * @return TeamSpeak3_Helper_String - */ - public function arg(array $args, $char = "%") - { - $args = array_reverse($args, TRUE); - - foreach($args as $key => $val) - { - $args[$char . $key] = $val; - unset($args[$key]); - } - - $this->string = strtr($this->string, $args); - - return $this; - } - - /** - * Returns true if the string starts with $pattern. - * - * @param string $pattern - * @return boolean - */ - public function startsWith($pattern) - { - return (substr($this->string, 0, strlen($pattern)) == $pattern) ? TRUE : FALSE; - } - - /** - * Returns true if the string ends with $pattern. - * - * @param string $pattern - * @return boolean - */ - public function endsWith($pattern) - { - return (substr($this->string, strlen($pattern)*-1) == $pattern) ? TRUE : FALSE; - } - - /** - * Returns the position of the first occurrence of a char in a string. - * - * @param string $needle - * @return integer - */ - public function findFirst($needle) - { - return strpos($this->string, $needle); - } - - /** - * Returns the position of the last occurrence of a char in a string. - * - * @param string $needle - * @return integer - */ - public function findLast($needle) - { - return strrpos($this->string, $needle); - } - - /** - * Returns the lowercased string. - * - * @return TeamSpeak3_Helper_String - */ - public function toLower() - { - return new self(strtolower($this->string)); - } - - /** - * Returns the uppercased string. - * - * @return TeamSpeak3_Helper_String - */ - public function toUpper() - { - return new self(strtoupper($this->string)); - } - - /** - * Returns true if the string contains $pattern. - * - * @param string $pattern - * @param boolean $regexp - * @return boolean - */ - public function contains($pattern, $regexp = FALSE) - { - if(empty($pattern)) - { - return TRUE; - } - - if($regexp) - { - return (preg_match("/" . $pattern . "/i", $this->string)) ? TRUE : FALSE; - } - else - { - return (stristr($this->string, $pattern) !== FALSE) ? TRUE : FALSE; - } - } - - /** - * Returns part of a string. - * - * @param integer $start - * @param integer $length - * @return TeamSpeak3_Helper_String - */ - public function substr($start, $length = null) - { - $string = ($length !== null) ? substr($this->string, $start, $length) : substr($this->string, $start); - - return new self($string); - } - - /** - * Splits the string into substrings wherever $separator occurs. - * - * @param string $separator - * @param integer $limit - * @return array - */ - public function split($separator, $limit = 0) - { - $parts = explode($separator, $this->string, ($limit) ? intval($limit) : $this->count()); - - foreach($parts as $key => $val) - { - $parts[$key] = new self($val); - } - - return $parts; - } - - /** - * Appends $part to the string. - * - * @param string $part - * @return TeamSpeak3_Helper_String - */ - public function append($part) - { - $this->string = $this->string . strval($part); - - return $this; - } - - /** - * Prepends $part to the string. - * - * @param string $part - * @return TeamSpeak3_Helper_String - */ - public function prepend($part) - { - $this->string = strval($part) . $this->string; - - return $this; - } - - /** - * Returns a section of the string. - * - * @param string $separator - * @param integer $first - * @param integer $last - * @return TeamSpeak3_Helper_String - */ - public function section($separator, $first = 0, $last = 0) - { - $sections = explode($separator, $this->string); - - $total = count($sections); - $first = intval($first); - $last = intval($last); - - if($first > $total) return null; - if($first > $last) $last = $first; - - for($i = 0; $i < $total; $i++) - { - if($i < $first || $i > $last) - { - unset($sections[$i]); - } - } - - $string = implode($separator, $sections); - - return new self($string); - } - - /** - * Sets the size of the string to $size characters. - * - * @param integer $size - * @param string $char - * @return TeamSpeak3_Helper_String - */ - public function resize($size, $char = "\0") - { - $chars = ($size - $this->count()); - - if($chars < 0) - { - $this->string = substr($this->string, 0, $chars); - } - elseif($chars > 0) - { - $this->string = str_pad($this->string, $size, strval($char)); - } - - return $this; - } - - /** - * Strips whitespaces (or other characters) from the beginning and end of the string. - * - * @return TeamSpeak3_Helper_String - */ - public function trim() - { - $this->string = trim($this->string); - - return $this; - } - - /** - * Escapes a string using the TeamSpeak 3 escape patterns. - * - * @return TeamSpeak3_Helper_String - */ - public function escape() - { - foreach(TeamSpeak3::getEscapePatterns() as $search => $replace) - { - $this->string = str_replace($search, $replace, $this->string); - } - - return $this; - } - - /** - * Unescapes a string using the TeamSpeak 3 escape patterns. - * - * @return TeamSpeak3_Helper_String - */ - public function unescape() - { - $this->string = strtr($this->string, array_flip(TeamSpeak3::getEscapePatterns())); - - return $this; - } - - /** - * Removes any non alphanumeric characters from the string. - * - * @return TeamSpeak3_Helper_String - */ - public function filterAlnum() - { - $this->string = preg_replace("/[^[:alnum:]]/", "", $this->string); - - return $this; - } - - /** - * Removes any non alphabetic characters from the string. - * - * @return TeamSpeak3_Helper_String - */ - public function filterAlpha() - { - $this->string = preg_replace("/[^[:alpha:]]/", "", $this->string); - - return $this; - } - - /** - * Removes any non numeric characters from the string. - * - * @return TeamSpeak3_Helper_String - */ - public function filterDigits() - { - $this->string = preg_replace("/[^[:digit:]]/", "", $this->string); - - return $this; - } - - /** - * Returns TRUE if the string is a numeric value. - * - * @return boolean - */ - public function isInt() - { - return (is_numeric($this->string) && !$this->contains(".") && !$this->contains("x")) ? TRUE : FALSE; - } - - /** - * Returns the integer value of the string. - * - * @return float - * @return integer - */ - public function toInt() - { - if($this->string == pow(2, 63) || $this->string == pow(2, 64)) - { - return -1; - } - - return ($this->string > pow(2, 31)) ? floatval($this->string) : intval($this->string); - } - - /** - * Calculates and returns the crc32 polynomial of the string. - * - * @return string - */ - public function toCrc32() - { - return crc32($this->string); - } - - /** - * Calculates and returns the md5 checksum of the string. - * - * @return string - */ - public function toMd5() - { - return md5($this->string); - } - - /** - * Calculates and returns the sha1 checksum of the string. - * - * @return string - */ - public function toSha1() - { - return sha1($this->string); - } - - /** - * Returns TRUE if the string is UTF-8 encoded. This method searches for non-ascii multibyte - * sequences in the UTF-8 range. - * - * @return boolean - */ - public function isUtf8() - { - $pattern = array(); - - $pattern[] = "[\xC2-\xDF][\x80-\xBF]"; // non-overlong 2-byte - $pattern[] = "\xE0[\xA0-\xBF][\x80-\xBF]"; // excluding overlongs - $pattern[] = "[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}"; // straight 3-byte - $pattern[] = "\xED[\x80-\x9F][\x80-\xBF]"; // excluding surrogates - $pattern[] = "\xF0[\x90-\xBF][\x80-\xBF]{2}"; // planes 1-3 - $pattern[] = "[\xF1-\xF3][\x80-\xBF]{3}"; // planes 4-15 - $pattern[] = "\xF4[\x80-\x8F][\x80-\xBF]{2}"; // plane 16 - - return preg_match("%(?:" . implode("|", $pattern) . ")+%xs", $this->string); - } - - /** - * Converts the string to UTF-8. - * - * @return TeamSpeak3_Helper_String - */ - public function toUtf8() - { - if(!$this->isUtf8()) - { - $this->string = utf8_encode($this->string); - } - - return $this; - } - - /** - * Encodes the string with MIME base64 and returns the result. - * - * @return string - */ - public function toBase64() - { - return base64_encode($this->string); - } - - /** - * Decodes the string with MIME base64 and returns the result as an TeamSpeak3_Helper_String - * - * @param string $base64 - * @return TeamSpeak3_Helper_String - */ - public static function fromBase64($base64) - { - return new self(base64_decode($base64)); - } - - /** - * Returns the hexadecimal value of the string. - * - * @return string - */ - public function toHex() - { - $hex = ""; - - foreach($this as $char) - { - $hex .= $char->toHex(); - } - - return $hex; - } - - /** - * Returns the TeamSpeak3_Helper_String based on a given hex value. - * - * @param string $hex - * @throws TeamSpeak3_Helper_Exception - * @return TeamSpeak3_Helper_String - */ - public static function fromHex($hex) - { - $string = ""; - - if(strlen($hex)%2 == 1) - { - throw new TeamSpeak3_Helper_Exception("given parameter '" . $hex . "' is not a valid hexadecimal number"); - } - - foreach(str_split($hex, 2) as $chunk) - { - $string .= chr(hexdec($chunk)); - } - - return new self($string); - } - - /** - * Returns the string transliterated from UTF-8 to Latin. - * - * @return TeamSpeak3_Helper_String - */ - public function transliterate() - { - $utf8_accents = array( - "à" => "a", - "ô" => "o", - "ď" => "d", - "ḟ" => "f", - "ë" => "e", - "š" => "s", - "ơ" => "o", - "ß" => "ss", - "ă" => "a", - "ř" => "r", - "ț" => "t", - "ň" => "n", - "ā" => "a", - "ķ" => "k", - "ŝ" => "s", - "ỳ" => "y", - "ņ" => "n", - "ĺ" => "l", - "ħ" => "h", - "ṗ" => "p", - "ó" => "o", - "ú" => "u", - "ě" => "e", - "é" => "e", - "ç" => "c", - "ẁ" => "w", - "ċ" => "c", - "õ" => "o", - "ṡ" => "s", - "ø" => "o", - "ģ" => "g", - "ŧ" => "t", - "ș" => "s", - "ė" => "e", - "ĉ" => "c", - "ś" => "s", - "î" => "i", - "ű" => "u", - "ć" => "c", - "ę" => "e", - "ŵ" => "w", - "ṫ" => "t", - "ū" => "u", - "č" => "c", - "ö" => "oe", - "è" => "e", - "ŷ" => "y", - "ą" => "a", - "ł" => "l", - "ų" => "u", - "ů" => "u", - "ş" => "s", - "ğ" => "g", - "ļ" => "l", - "ƒ" => "f", - "ž" => "z", - "ẃ" => "w", - "ḃ" => "b", - "å" => "a", - "ì" => "i", - "ï" => "i", - "ḋ" => "d", - "ť" => "t", - "ŗ" => "r", - "ä" => "ae", - "í" => "i", - "ŕ" => "r", - "ê" => "e", - "ü" => "ue", - "ò" => "o", - "ē" => "e", - "ñ" => "n", - "ń" => "n", - "ĥ" => "h", - "ĝ" => "g", - "đ" => "d", - "ĵ" => "j", - "ÿ" => "y", - "ũ" => "u", - "ŭ" => "u", - "ư" => "u", - "ţ" => "t", - "ý" => "y", - "ő" => "o", - "â" => "a", - "ľ" => "l", - "ẅ" => "w", - "ż" => "z", - "ī" => "i", - "ã" => "a", - "ġ" => "g", - "ṁ" => "m", - "ō" => "o", - "ĩ" => "i", - "ù" => "u", - "į" => "i", - "ź" => "z", - "á" => "a", - "û" => "u", - "þ" => "th", - "ð" => "dh", - "æ" => "ae", - "µ" => "u", - "ĕ" => "e", - "œ" => "oe", - "À" => "A", - "Ô" => "O", - "Ď" => "D", - "Ḟ" => "F", - "Ë" => "E", - "Š" => "S", - "Ơ" => "O", - "Ă" => "A", - "Ř" => "R", - "Ț" => "T", - "Ň" => "N", - "Ā" => "A", - "Ķ" => "K", - "Ŝ" => "S", - "Ỳ" => "Y", - "Ņ" => "N", - "Ĺ" => "L", - "Ħ" => "H", - "Ṗ" => "P", - "Ó" => "O", - "Ú" => "U", - "Ě" => "E", - "É" => "E", - "Ç" => "C", - "Ẁ" => "W", - "Ċ" => "C", - "Õ" => "O", - "Ṡ" => "S", - "Ø" => "O", - "Ģ" => "G", - "Ŧ" => "T", - "Ș" => "S", - "Ė" => "E", - "Ĉ" => "C", - "Ś" => "S", - "Î" => "I", - "Ű" => "U", - "Ć" => "C", - "Ę" => "E", - "Ŵ" => "W", - "Ṫ" => "T", - "Ū" => "U", - "Č" => "C", - "Ö" => "Oe", - "È" => "E", - "Ŷ" => "Y", - "Ą" => "A", - "Ł" => "L", - "Ų" => "U", - "Ů" => "U", - "Ş" => "S", - "Ğ" => "G", - "Ļ" => "L", - "Ƒ" => "F", - "Ž" => "Z", - "Ẃ" => "W", - "Ḃ" => "B", - "Å" => "A", - "Ì" => "I", - "Ï" => "I", - "Ḋ" => "D", - "Ť" => "T", - "Ŗ" => "R", - "Ä" => "Ae", - "Í" => "I", - "Ŕ" => "R", - "Ê" => "E", - "Ü" => "Ue", - "Ò" => "O", - "Ē" => "E", - "Ñ" => "N", - "Ń" => "N", - "Ĥ" => "H", - "Ĝ" => "G", - "Đ" => "D", - "Ĵ" => "J", - "Ÿ" => "Y", - "Ũ" => "U", - "Ŭ" => "U", - "Ư" => "U", - "Ţ" => "T", - "Ý" => "Y", - "Ő" => "O", - "Â" => "A", - "Ľ" => "L", - "Ẅ" => "W", - "Ż" => "Z", - "Ī" => "I", - "Ã" => "A", - "Ġ" => "G", - "Ṁ" => "M", - "Ō" => "O", - "Ĩ" => "I", - "Ù" => "U", - "Į" => "I", - "Ź" => "Z", - "Á" => "A", - "Û" => "U", - "Þ" => "Th", - "Ð" => "Dh", - "Æ" => "Ae", - "Ĕ" => "E", - "Œ" => "Oe", - ); - - return new self($this->toUtf8()->replace(array_keys($utf8_accents), array_values($utf8_accents))); - } - - /** - * Processes the string and replaces all accented UTF-8 characters by unaccented ASCII-7 "equivalents", - * whitespaces are replaced by a pre-defined spacer and the string is lowercase. - * - * @param string $spacer - * @return TeamSpeak3_Helper_String - */ - public function uriSafe($spacer = "-") - { - $this->string = str_replace($spacer, " ", $this->string); - $this->string = $this->transliterate(); - $this->string = preg_replace("/(\s|[^A-Za-z0-9\-])+/", $spacer, trim(strtolower($this->string))); - $this->string = trim($this->string, $spacer); - - return new self($this->string); - } - - /** - * Replaces space characters with percent encoded strings. - * - * @return string - */ - public function spaceToPercent() - { - return str_replace(" ", "%20", $this->string); - } - - /** - * Returns the string as a standard string - * - * @return string - */ - public function toString() - { - return $this->string; - } - - /** - * Magical function that allows you to call PHP's built-in string functions on the TeamSpeak3_Helper_String object. - * - * @param string $function - * @param array $args - * @throws TeamSpeak3_Helper_Exception - * @return TeamSpeak3_Helper_String - */ - public function __call($function, $args) - { - if(!function_exists($function)) - { - throw new TeamSpeak3_Helper_Exception("cannot call undefined function '" . $function . "' on this object"); - } - - if(count($args)) - { - if(($key = array_search($this, $args, TRUE)) !== FALSE) - { - $args[$key] = $this->string; - } - else - { - throw new TeamSpeak3_Helper_Exception("cannot call undefined function '" . $function . "' without the " . __CLASS__ . " object parameter"); - } - - $return = call_user_func_array($function, $args); - } - else - { - $return = call_user_func($function, $this->string); - } - - if(is_string($return)) - { - $this->string = $return; - } - else - { - return $return; - } - - return $this; - } - - /** - * Returns the character as a standard string. - * - * @return string - */ - public function __toString() - { - return (string) $this->string; - } - - /** - * @ignore - */ - public function count() - { - return strlen($this->string); - } - - /** - * @ignore - */ - public function rewind() - { - $this->position = 0; - } - - /** - * @ignore - */ - public function valid() - { - return $this->position < $this->count(); - } - - /** - * @ignore - */ - public function key() - { - return $this->position; - } - - /** - * @ignore - */ - public function current() - { - return new TeamSpeak3_Helper_Char($this->string{$this->position}); - } - - /** - * @ignore - */ - public function next() - { - $this->position++; - } - - /** - * @ignore - */ - public function offsetExists($offset) - { - return ($offset < strlen($this->string)) ? TRUE : FALSE; - } - - /** - * @ignore - */ - public function offsetGet($offset) - { - return ($this->offsetExists($offset)) ? new TeamSpeak3_Helper_Char($this->string{$offset}) : null; - } - - /** - * @ignore - */ - public function offsetSet($offset, $value) - { - if(!$this->offsetExists($offset)) return; - - $this->string{$offset} = strval($value); - } - - /** - * @ignore - */ - public function offsetUnset($offset) - { - if(!$this->offsetExists($offset)) return; - - $this->string = substr_replace($this->string, "", $offset, 1); - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Uri.php b/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Uri.php deleted file mode 100644 index 4e89930..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Helper/Uri.php +++ /dev/null @@ -1,717 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Helper_Uri - * @brief Helper class for URI handling. - */ -class TeamSpeak3_Helper_Uri -{ - /** - * Stores the URI scheme. - * - * @var string - */ - protected $scheme = null; - - /** - * Stores the URI username - * - * @var string - */ - protected $user = null; - - /** - * Stores the URI password. - * - * @var string - */ - protected $pass = null; - - /** - * Stores the URI host. - * - * @var string - */ - protected $host = null; - - /** - * Stores the URI port. - * - * @var string - */ - protected $port = null; - - /** - * Stores the URI path. - * - * @var string - */ - protected $path = null; - - /** - * Stores the URI query string. - * - * @var string - */ - protected $query = null; - - /** - * Stores the URI fragment string. - * - * @var string - */ - protected $fragment = null; - - /** - * Stores grammar rules for validation via regex. - * - * @var array - */ - protected $regex = array(); - - /** - * The TeamSpeak3_Helper_Uri constructor. - * - * @param string $uri - * @throws TeamSpeak3_Helper_Exception - * @return TeamSpeak3_Helper_Uri - */ - public function __construct($uri) - { - $uri = explode(":", strval($uri), 2); - - $this->scheme = strtolower($uri[0]); - $uriString = isset($uri[1]) ? $uri[1] : ""; - - if(!ctype_alnum($this->scheme)) - { - throw new TeamSpeak3_Helper_Exception("invalid URI scheme '" . $this->scheme . "' supplied"); - } - - /* grammar rules for validation */ - $this->regex["alphanum"] = "[^\W_]"; - $this->regex["escaped"] = "(?:%[\da-fA-F]{2})"; - $this->regex["mark"] = "[-_.!~*'()\[\]]"; - $this->regex["reserved"] = "[;\/?:@&=+$,]"; - $this->regex["unreserved"] = "(?:" . $this->regex["alphanum"] . "|" . $this->regex["mark"] . ")"; - $this->regex["segment"] = "(?:(?:" . $this->regex["unreserved"] . "|" . $this->regex["escaped"] . "|[:@&=+$,;])*)"; - $this->regex["path"] = "(?:\/" . $this->regex["segment"] . "?)+"; - $this->regex["uric"] = "(?:" . $this->regex["reserved"] . "|" . $this->regex["unreserved"] . "|" . $this->regex["escaped"] . ")"; - - if(strlen($uriString) > 0) - { - $this->parseUri($uriString); - } - - if(!$this->isValid()) - { - throw new TeamSpeak3_Helper_Exception("invalid URI supplied"); - } - } - - /** - * Parses the scheme-specific portion of the URI and place its parts into instance variables. - * - * @throws TeamSpeak3_Helper_Exception - * @return void - */ - protected function parseUri($uriString = '') - { - $status = @preg_match("~^((//)([^/?#]*))([^?#]*)(\?([^#]*))?(#(.*))?$~", $uriString, $matches); - - if($status === FALSE) - { - throw new TeamSpeak3_Helper_Exception("URI scheme-specific decomposition failed"); - } - - if(!$status) return; - - $this->path = (isset($matches[4])) ? $matches[4] : ''; - $this->query = (isset($matches[6])) ? $matches[6] : ''; - $this->fragment = (isset($matches[8])) ? $matches[8] : ''; - - $status = @preg_match("~^(([^:@]*)(:([^@]*))?@)?((?(?=[[])[[][^]]+[]]|[^:]+))(:(.*))?$~", (isset($matches[3])) ? $matches[3] : "", $matches); - - if($status === FALSE) - { - throw new TeamSpeak3_Helper_Exception("URI scheme-specific authority decomposition failed"); - } - - if(!$status) return; - - $this->user = isset($matches[2]) ? $matches[2] : ""; - $this->pass = isset($matches[4]) ? $matches[4] : ""; - $this->host = isset($matches[5]) === TRUE ? preg_replace('~^\[([^]]+)\]$~', '\1', $matches[5]) : ""; - $this->port = isset($matches[7]) ? $matches[7] : ""; - } - - /** - * Validate the current URI from the instance variables. - * - * @return boolean - */ - public function isValid() - { - return ($this->checkUser() && $this->checkPass() && $this->checkHost() && $this->checkPort() && $this->checkPath() && $this->checkQuery() && $this->checkFragment()); - } - - /** - * Returns TRUE if a given URI is valid. - * - * @param string $uri - * @return boolean - */ - public static function check($uri) - { - try - { - $uri = new self(strval($uri)); - } - catch(Exception $e) - { - return FALSE; - } - - return $uri->valid(); - } - - /** - * Returns TRUE if the URI has a scheme. - * - * @return boolean - */ - public function hasScheme() - { - return strlen($this->scheme) ? TRUE : FALSE; - } - - /** - * Returns the scheme. - * - * @param mixed default - * @return TeamSpeak3_Helper_String - */ - public function getScheme($default = null) - { - return ($this->hasScheme()) ? new TeamSpeak3_Helper_String($this->scheme) : $default; - } - - /** - * Returns TRUE if the username is valid. - * - * @param string $username - * @throws TeamSpeak3_Helper_Exception - * @return boolean - */ - public function checkUser($username = null) - { - if($username === null) - { - $username = $this->user; - } - - if(strlen($username) == 0) - { - return TRUE; - } - - $pattern = "/^(" . $this->regex["alphanum"] . "|" . $this->regex["mark"] . "|" . $this->regex["escaped"] . "|[;:&=+$,])+$/"; - $status = @preg_match($pattern, $username); - - if($status === FALSE) - { - throw new TeamSpeak3_Helper_Exception("URI username validation failed"); - } - - return ($status == 1); - } - - /** - * Returns TRUE if the URI has a username. - * - * @return boolean - */ - public function hasUser() - { - return strlen($this->user) ? TRUE : FALSE; - } - - /** - * Returns the username. - * - * @param mixed default - * @return TeamSpeak3_Helper_String - */ - public function getUser($default = null) - { - return ($this->hasUser()) ? new TeamSpeak3_Helper_String($this->user) : $default; - } - - /** - * Returns TRUE if the password is valid. - * - * @param string $password - * @throws TeamSpeak3_Helper_Exception - * @return boolean - */ - public function checkPass($password = null) - { - if($password === null) { - $password = $this->pass; - } - - if(strlen($password) == 0) - { - return TRUE; - } - - $pattern = "/^(" . $this->regex["alphanum"] . "|" . $this->regex["mark"] . "|" . $this->regex["escaped"] . "|[;:&=+$,])+$/"; - $status = @preg_match($pattern, $password); - - if($status === FALSE) - { - throw new TeamSpeak3_Helper_Exception("URI password validation failed"); - } - - return ($status == 1); - } - - /** - * Returns TRUE if the URI has a password. - * - * @return boolean - */ - public function hasPass() - { - return strlen($this->pass) ? TRUE : FALSE; - } - - /** - * Returns the password. - * - * @param mixed default - * @return TeamSpeak3_Helper_String - */ - public function getPass($default = null) - { - return ($this->hasPass()) ? new TeamSpeak3_Helper_String($this->pass) : $default; - } - - /** - * Returns TRUE if the host is valid. - * - * @param string $host - * @return boolean - */ - public function checkHost($host = null) - { - if($host === null) - { - $host = $this->host; - } - - return TRUE; - } - - /** - * Returns TRUE if the URI has a host. - * - * @return boolean - */ - public function hasHost() - { - return strlen($this->host) ? TRUE : FALSE; - } - - /** - * Returns the host. - * - * @param mixed default - * @return TeamSpeak3_Helper_String - */ - public function getHost($default = null) - { - return ($this->hasHost()) ? new TeamSpeak3_Helper_String($this->host) : $default; - } - - /** - * Returns TRUE if the port is valid. - * - * @param integer $port - * @return boolean - */ - public function checkPort($port = null) - { - if($port === null) - { - $port = $this->port; - } - - return TRUE; - } - - /** - * Returns TRUE if the URI has a port. - * - * @return boolean - */ - public function hasPort() - { - return strlen($this->port) ? TRUE : FALSE; - } - - /** - * Returns the port. - * - * @param mixed default - * @return integer - */ - public function getPort($default = null) - { - return ($this->hasPort()) ? intval($this->port) : $default; - } - - /** - * Returns TRUE if the path is valid. - * - * @param string $path - * @throws TeamSpeak3_Helper_Exception - * @return boolean - */ - public function checkPath($path = null) - { - if($path === null) - { - $path = $this->path; - } - - if(strlen($path) == 0) - { - return TRUE; - } - - $pattern = "/^" . $this->regex["path"] . "$/"; - $status = @preg_match($pattern, $path); - - if($status === FALSE) - { - throw new TeamSpeak3_Helper_Exception("URI path validation failed"); - } - - return ($status == 1); - } - - /** - * Returns TRUE if the URI has a path. - * - * @return boolean - */ - public function hasPath() - { - return strlen($this->path) ? TRUE : FALSE; - } - - /** - * Returns the path. - * - * @param mixed default - * @return TeamSpeak3_Helper_String - */ - public function getPath($default = null) - { - return ($this->hasPath()) ? new TeamSpeak3_Helper_String($this->path) : $default; - } - - /** - * Returns TRUE if the query string is valid. - * - * @param string $query - * @throws TeamSpeak3_Helper_Exception - * @return boolean - */ - public function checkQuery($query = null) - { - if($query === null) - { - $query = $this->query; - } - - if(strlen($query) == 0) - { - return TRUE; - } - - $pattern = "/^" . $this->regex["uric"] . "*$/"; - $status = @preg_match($pattern, $query); - - if($status === FALSE) - { - throw new TeamSpeak3_Helper_Exception("URI query string validation failed"); - } - - return ($status == 1); - } - - /** - * Returns TRUE if the URI has a query string. - * - * @return boolean - */ - public function hasQuery() - { - return strlen($this->query) ? TRUE : FALSE; - } - - /** - * Returns an array containing the query string elements. - * - * @param mixed $default - * @return array - */ - public function getQuery($default = array()) - { - if(!$this->hasQuery()) - { - return $default; - } - - parse_str($this->query, $queryArray); - - return $queryArray; - } - - /** - * Returns TRUE if the URI has a query variable. - * - * @return boolean - */ - public function hasQueryVar($key) - { - if(!$this->hasQuery()) return FALSE; - - parse_str($this->query, $queryArray); - - return array_key_exists($key, $queryArray) ? TRUE : FALSE; - } - - /** - * Returns a single variable from the query string. - * - * @param string $key - * @param mixed $default - * @return mixed - */ - public function getQueryVar($key, $default = null) - { - if(!$this->hasQuery()) return $default; - - parse_str($this->query, $queryArray); - - if(array_key_exists($key, $queryArray)) - { - $val = $queryArray[$key]; - - if(ctype_digit($val)) - { - return intval($val); - } - elseif(is_string($val)) - { - return new TeamSpeak3_Helper_String($val); - } - else - { - return $val; - } - } - - return $default; - } - - /** - * Returns TRUE if the fragment string is valid. - * - * @param string $fragment - * @throws TeamSpeak3_Helper_Exception - * @return boolean - */ - public function checkFragment($fragment = null) - { - if($fragment === null) - { - $fragment = $this->fragment; - } - - if(strlen($fragment) == 0) - { - return TRUE; - } - - $pattern = "/^" . $this->regex["uric"] . "*$/"; - $status = @preg_match($pattern, $fragment); - - if($status === FALSE) - { - throw new TeamSpeak3_Helper_Exception("URI fragment validation failed"); - } - - return ($status == 1); - } - - /** - * Returns TRUE if the URI has a fragment string. - * - * @return boolean - */ - public function hasFragment() - { - return strlen($this->fragment) ? TRUE : FALSE; - } - - /** - * Returns the fragment. - * - * @param mixed default - * @return TeamSpeak3_Helper_String - */ - public function getFragment($default = null) - { - return ($this->hasFragment()) ? new TeamSpeak3_Helper_String($this->fragment) : $default; - } - - /** - * Returns a specified instance parameter from the $_REQUEST array. - * - * @param string $key - * @param mixed $default - * @return mixed - */ - public static function getUserParam($key, $default = null) - { - return (array_key_exists($key, $_REQUEST) && !empty($_REQUEST[$key])) ? self::stripslashesRecursive($_REQUEST[$key]) : $default; - } - - /** - * Returns a specified environment parameter from the $_SERVER array. - * - * @param string $key - * @param mixed $default - * @return mixed - */ - public static function getHostParam($key, $default = null) - { - return (array_key_exists($key, $_SERVER) && !empty($_SERVER[$key])) ? $_SERVER[$key] : $default; - } - - /** - * Returns a specified session parameter from the $_SESSION array. - * - * @param string $key - * @param mixed $default - * @return mixed - */ - public static function getSessParam($key, $default = null) - { - return (array_key_exists($key, $_SESSION) && !empty($_SESSION[$key])) ? $_SESSION[$key] : $default; - } - - /** - * Returns an array containing the three main parts of a FQDN (Fully Qualified Domain Name), including the - * top-level domain, the second-level domains or hostname and the third-level domain. - * - * @param string $hostname - * @return array - */ - public static function getFQDNParts($hostname) - { - if(!preg_match("/^([a-z0-9][a-z0-9-]{0,62}\.)*([a-z0-9][a-z0-9-]{0,62}\.)+([a-z]{2,6})$/i", $hostname, $matches)) - { - return array(); - } - - $parts["tld"] = $matches[3]; - $parts["2nd"] = $matches[2]; - $parts["3rd"] = $matches[1]; - - return $parts; - } - - /** - * Returns the applications host address. - * - * @return TeamSpeak3_Helper_String - */ - public static function getHostUri() - { - $sheme = (self::getHostParam("HTTPS") == "on") ? "https" : "http"; - - $serverName = new TeamSpeak3_Helper_String(self::getHostParam("HTTP_HOST")); - $serverPort = self::getHostParam("SERVER_PORT"); - $serverPort = ($serverPort != 80 && $serverPort != 443) ? ":" . $serverPort : ""; - - if($serverName->endsWith($serverPort)) - { - $serverName = $serverName->replace($serverPort, ""); - } - - return new TeamSpeak3_Helper_String($sheme . "://" . $serverName . $serverPort); - } - - /** - * Returns the applications base address. - * - * @return string - */ - public static function getBaseUri() - { - $scriptPath = new TeamSpeak3_Helper_String(dirname(self::getHostParam("SCRIPT_NAME"))); - - return self::getHostUri()->append(($scriptPath == DIRECTORY_SEPARATOR ? "" : $scriptPath) . "/"); - } - - /** - * Strips slashes from each element of an array using stripslashes(). - * - * @param mixed $var - * @return mixed - */ - protected static function stripslashesRecursive($var) - { - if(!is_array($var)) - { - return stripslashes(strval($var)); - } - - foreach($var as $key => $val) - { - $var[$key] = (is_array($val)) ? stripslashesRecursive($val) : stripslashes(strval($val)); - } - - return $var; - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Node/Abstract.php b/lib/ts3phpframework/libraries/TeamSpeak3/Node/Abstract.php deleted file mode 100644 index d6244f8..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Node/Abstract.php +++ /dev/null @@ -1,624 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Node_Abstract - * @brief Abstract class describing a TeamSpeak 3 node and all it's parameters. - */ -abstract class TeamSpeak3_Node_Abstract implements RecursiveIterator, ArrayAccess, Countable -{ - /** - * @ignore - */ - protected $parent = null; - - /** - * @ignore - */ - protected $server = null; - - /** - * @ignore - */ - protected $nodeId = 0x00; - - /** - * @ignore - */ - protected $nodeList = null; - - /** - * @ignore - */ - protected $nodeInfo = array(); - - /** - * @ignore - */ - protected $storage = array(); - - /** - * Sends a prepared command to the server and returns the result. - * - * @param string $cmd - * @param boolean $throw - * @return TeamSpeak3_Adapter_ServerQuery_Reply - */ - public function request($cmd, $throw = TRUE) - { - return $this->getParent()->request($cmd, $throw); - } - - /** - * Uses given parameters and returns a prepared ServerQuery command. - * - * @param string $cmd - * @param array $params - * @return TeamSpeak3_Helper_String - */ - public function prepare($cmd, array $params = array()) - { - return $this->getParent()->prepare($cmd, $params); - } - - /** - * Prepares and executes a ServerQuery command and returns the result. - * - * @param string $cmd - * @param array $params - * @return TeamSpeak3_Adapter_ServerQuery_Reply - */ - public function execute($cmd, array $params = array()) - { - return $this->request($this->prepare($cmd, $params)); - } - - /** - * Returns the parent object of the current node. - * - * @return TeamSpeak3_Adapter_ServerQuery - * @return TeamSpeak3_Node_Abstract - */ - public function getParent() - { - return $this->parent; - } - - /** - * Returns the primary ID of the current node. - * - * @return integer - */ - public function getId() - { - return $this->nodeId; - } - - /** - * Returns TRUE if the node icon has a local source. - * - * @param string $key - * @return boolean - */ - public function iconIsLocal($key) - { - return ($this[$key] > 0 && $this[$key] < 1000) ? TRUE : FALSE; - } - - /** - * Returns the internal path of the node icon. - * - * @param string $key - * @return TeamSpeak3_Helper_String - */ - public function iconGetName($key) - { - $iconid = ($this[$key] < 0) ? (pow(2, 32))-($this[$key]*-1) : $this[$key]; - - return new TeamSpeak3_Helper_String("/icon_" . $iconid); - } - - /** - * Returns a possible classname for the node which can be used as a HTML property. - * - * @param string $prefix - * @return string - */ - public function getClass($prefix = "ts3_") - { - if($this instanceof TeamSpeak3_Node_Channel && $this->isSpacer()) - { - return $prefix . "spacer"; - } - elseif($this instanceof TeamSpeak3_Node_Client && $this["client_type"]) - { - return $prefix . "query"; - } - - return $prefix . TeamSpeak3_Helper_String::factory(get_class($this))->section("_", 2)->toLower(); - } - - /** - * Returns a unique identifier for the node which can be used as a HTML property. - * - * @return string - */ - abstract public function getUniqueId(); - - /** - * Returns the name of a possible icon to display the node object. - * - * @return string - */ - abstract public function getIcon(); - - /** - * Returns a symbol representing the node. - * - * @return string - */ - abstract public function getSymbol(); - - /** - * Returns the HTML code to display a TeamSpeak 3 viewer. - * - * @param TeamSpeak3_Viewer_Interface $viewer - * @return string - */ - public function getViewer(TeamSpeak3_Viewer_Interface $viewer) - { - $html = $viewer->fetchObject($this); - - $iterator = new RecursiveIteratorIterator($this, RecursiveIteratorIterator::SELF_FIRST); - - foreach($iterator as $node) - { - $siblings = array(); - - for($level = 0; $level < $iterator->getDepth(); $level++) - { - $siblings[] = ($iterator->getSubIterator($level)->hasNext()) ? 1 : 0; - } - - $siblings[] = (!$iterator->getSubIterator($level)->hasNext()) ? 1 : 0; - - $html .= $viewer->fetchObject($node, $siblings); - } - - return $html; - } - - /** - * Filters given node list array using specified filter rules. - * - * @param array $nodes - * @param array $rules - * @return array - */ - protected function filterList(array $nodes = array(), array $rules = array()) - { - if(!empty($rules)) - { - foreach($nodes as $node) - { - if(!$node instanceof TeamSpeak3_Node_Abstract) continue; - - $props = $node->getInfo(FALSE); - $props = array_intersect_key($props, $rules); - - foreach($props as $key => $val) - { - if($val instanceof TeamSpeak3_Helper_String) - { - $match = $val->contains($rules[$key], TRUE); - } - else - { - $match = $val == $rules[$key]; - } - - if($match === FALSE) - { - unset($nodes[$node->getId()]); - } - } - } - } - - return $nodes; - } - - /** - * Returns all information available on this node. If $convert is enabled, some property - * values will be converted to human-readable values. - * - * @param boolean $extend - * @param boolean $convert - * @return array - */ - public function getInfo($extend = TRUE, $convert = FALSE) - { - if($extend) - { - $this->fetchNodeInfo(); - } - - if($convert) - { - $info = $this->nodeInfo; - - foreach($info as $key => $val) - { - $key = TeamSpeak3_Helper_String::factory($key); - - if($key->contains("_bytes_")) - { - $info[$key->toString()] = TeamSpeak3_Helper_Convert::bytes($val); - } - elseif($key->contains("_bandwidth_")) - { - $info[$key->toString()] = TeamSpeak3_Helper_Convert::bytes($val) . "/s"; - } - elseif($key->contains("_packets_")) - { - $info[$key->toString()] = number_format($val, null, null, "."); - } - elseif($key->contains("_packetloss_")) - { - $info[$key->toString()] = sprintf("%01.2f", floatval($val->toString())*100) . "%"; - } - elseif($key->endsWith("_uptime")) - { - $info[$key->toString()] = TeamSpeak3_Helper_Convert::seconds($val); - } - elseif($key->endsWith("_version")) - { - $info[$key->toString()] = TeamSpeak3_Helper_Convert::version($val); - } - elseif($key->endsWith("_icon_id")) - { - $info[$key->toString()] = $this->iconGetName($key)->filterDigits(); - } - } - - return $info; - } - - return $this->nodeInfo; - } - - /** - * Returns the specified property or a pre-defined default value from the node info array. - * - * @param string $property - * @param mixed $default - * @return mixed - */ - public function getProperty($property, $default = null) - { - if(!$this->offsetExists($property)) - { - $this->fetchNodeInfo(); - } - - if(!$this->offsetExists($property)) - { - return $default; - } - - return $this->nodeInfo[(string) $property]; - } - - /** - * Returns a string representation of this node. - * - * @return string - */ - public function __toString() - { - return get_class($this); - } - - /** - * Returns a string representation of this node. - * - * @return string - */ - public function toString() - { - return $this->__toString(); - } - - /** - * Returns an assoc array filled with current node info properties. - * - * @return array - */ - public function toArray() - { - return $this->nodeList; - } - - /** - * Called whenever we're using an unknown method. - * - * @param string $name - * @param array $args - * @throws TeamSpeak3_Node_Exception - * @return mixed - */ - public function __call($name, array $args) - { - if($this->getParent() instanceof TeamSpeak3_Node_Abstract) - { - return call_user_func_array(array($this->getParent(), $name), $args); - } - - throw new TeamSpeak3_Node_Exception("node method '" . $name . "()' does not exist"); - } - - /** - * Writes data to the internal storage array. - * - * @param string $key - * @param mixed $val - * @return void - */ - protected function setStorage($key, $val) - { - $this->storage[$key] = $val; - } - - /** - * Returns data from the internal storage array. - * - * @param string $key - * @param mixed $default - * @return mixed - */ - protected function getStorage($key, $default = null) - { - return !empty($this->storage[$key]) ? $this->storage[$key] : $default; - } - - /** - * Deletes data from the internal storage array. - * - * @param string $key - * @return void - */ - protected function delStorage($key) - { - unset($this->storage[$key]); - } - - /** - * Commit pending data. - * - * @return array - */ - public function __sleep() - { - return array("parent", "storage", "nodeId"); - } - - /** - * @ignore - */ - protected function fetchNodeList() - { - $this->nodeList = array(); - } - - /** - * @ignore - */ - protected function fetchNodeInfo() - { - return; - } - - /** - * @ignore - */ - protected function resetNodeInfo() - { - $this->nodeInfo = array(); - } - - /** - * @ignore - */ - protected function verifyNodeList() - { - if($this->nodeList === null) - { - $this->fetchNodeList(); - } - } - - /** - * @ignore - */ - protected function resetNodeList() - { - $this->nodeList = null; - } - - /** - * @ignore - */ - public function count() - { - $this->verifyNodeList(); - - return count($this->nodeList); - } - - /** - * @ignore - */ - public function current() - { - $this->verifyNodeList(); - - return current($this->nodeList); - } - - /** - * @ignore - */ - public function getChildren() - { - $this->verifyNodeList(); - - return $this->current(); - } - - /** - * @ignore - */ - public function hasChildren() - { - $this->verifyNodeList(); - - return $this->current()->count() > 0; - } - - /** - * @ignore - */ - public function hasNext() - { - $this->verifyNodeList(); - - return $this->key()+1 < $this->count(); - } - - /** - * @ignore - */ - public function key() - { - $this->verifyNodeList(); - - return key($this->nodeList); - } - - /** - * @ignore - */ - public function valid() - { - $this->verifyNodeList(); - - return $this->key() !== null; - } - - /** - * @ignore - */ - public function next() - { - $this->verifyNodeList(); - - return next($this->nodeList); - } - - /** - * @ignore - */ - public function rewind() - { - $this->verifyNodeList(); - - return reset($this->nodeList); - } - - /** - * @ignore - */ - public function offsetExists($offset) - { - return array_key_exists((string) $offset, $this->nodeInfo) ? TRUE : FALSE; - } - - /** - * @ignore - */ - public function offsetGet($offset) - { - if(!$this->offsetExists($offset)) - { - $this->fetchNodeInfo(); - } - - if(!$this->offsetExists($offset)) - { - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid parameter", 0x602); - } - - return $this->nodeInfo[(string) $offset]; - } - - /** - * @ignore - */ - public function offsetSet($offset, $value) - { - if(method_exists($this, "modify")) - { - return $this->modify(array((string) $offset => $value)); - } - - throw new TeamSpeak3_Node_Exception("node '" . get_class($this) . "' is read only"); - } - - /** - * @ignore - */ - public function offsetUnset($offset) - { - unset($this->nodeInfo[(string) $offset]); - } - - /** - * @ignore - */ - public function __get($offset) - { - return $this->offsetGet($offset); - } - - /** - * @ignore - */ - public function __set($offset, $value) - { - $this->offsetSet($offset, $value); - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Node/Channel.php b/lib/ts3phpframework/libraries/TeamSpeak3/Node/Channel.php deleted file mode 100644 index 1242ef0..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Node/Channel.php +++ /dev/null @@ -1,586 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Node_Channel - * @brief Class describing a TeamSpeak 3 channel and all it's parameters. - */ -class TeamSpeak3_Node_Channel extends TeamSpeak3_Node_Abstract -{ - /** - * The TeamSpeak3_Node_Channel constructor. - * - * @param TeamSpeak3_Node_Server $server - * @param array $info - * @param string $index - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return TeamSpeak3_Node_Channel - */ - public function __construct(TeamSpeak3_Node_Server $server, array $info, $index = "cid") - { - $this->parent = $server; - $this->nodeInfo = $info; - - if(!array_key_exists($index, $this->nodeInfo)) - { - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid channelID", 0x300); - } - - $this->nodeId = $this->nodeInfo[$index]; - } - - /** - * Returns an array filled with TeamSpeak3_Node_Channel objects. - * - * @param array $filter - * @return array - */ - public function subChannelList(array $filter = array()) - { - $channels = array(); - - foreach($this->getParent()->channelList() as $channel) - { - if($channel["pid"] == $this->getId()) - { - $channels[$channel->getId()] = $channel; - } - } - - return $this->filterList($channels, $filter); - } - - /** - * Returns the TeamSpeak3_Node_Channel object matching the given ID. - * - * @param integer $cid - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return TeamSpeak3_Node_Channel - */ - public function subChannelGetById($cid) - { - if(!array_key_exists((string) $cid, $this->subChannelList())) - { - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid channelID", 0x300); - } - - return $this->channelList[(string) $cid]; - } - - /** - * Returns the TeamSpeak3_Node_Channel object matching the given name. - * - * @param integer $name - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return TeamSpeak3_Node_Channel - */ - public function subChannelGetByName($name) - { - foreach($this->subChannelList() as $channel) - { - if($channel["channel_name"] == $name) return $channel; - } - - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid channelID", 0x300); - } - - /** - * Returns an array filled with TeamSpeak3_Node_Client objects. - * - * @param array $filter - * @return array - */ - public function clientList(array $filter = array()) - { - $clients = array(); - - foreach($this->getParent()->clientList() as $client) - { - if($client["cid"] == $this->getId()) - { - $clients[$client->getId()] = $client; - } - } - - return $this->filterList($clients, $filter); - } - - /** - * Returns the TeamSpeak3_Node_Client object matching the given ID. - * - * @param integer $clid - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return TeamSpeak3_Node_Client - */ - public function clientGetById($clid) - { - if(!array_key_exists($clid, $this->clientList())) - { - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid clientID", 0x200); - } - - return $this->clientList[intval($clid)]; - } - - /** - * Returns the TeamSpeak3_Node_Client object matching the given name. - * - * @param integer $name - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return TeamSpeak3_Node_Client - */ - public function clientGetByName($name) - { - foreach($this->clientList() as $client) - { - if($client["client_nickname"] == $name) return $client; - } - - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid clientID", 0x200); - } - - /** - * Returns a list of permissions defined for a client in the channel. - * - * @param integer $cldbid - * @param boolean $permsid - * @return array - */ - public function clientPermList($cldbid, $permsid = FALSE) - { - return $this->getParent()->channelClientPermList($this->getId(), $cldbid, $permsid); - } - - /** - * Adds a set of specified permissions to a client in a specific channel. Multiple permissions can be added by - * providing the two parameters of each permission. - * - * @param integer $cldbid - * @param integer $permid - * @param integer $permvalue - * @return void - */ - public function clientPermAssign($cldbid, $permid, $permvalue) - { - $this->getParent()->channelClientPermAssign($this->getId(), $cldbid, $permid, $permvalue); - } - - /** - * Alias for clientPermAssign(). - * - * @deprecated - */ - public function clientPermAssignByName($cldbid, $permname, $permvalue) - { - $this->clientPermAssign($cldbid, $permname, $permvalue); - } - - /** - * Removes a set of specified permissions from a client in the channel. Multiple permissions can be removed at once. - * - * @param integer $cldbid - * @param integer $permid - * @return void - */ - public function clientPermRemove($cldbid, $permid) - { - $this->getParent()->channelClientPermRemove($this->getId(), $cldbid, $permid); - } - - /** - * Alias for clientPermRemove(). - * - * @deprecated - */ - public function clientPermRemoveByName($cldbid, $permname) - { - $this->clientPermRemove($cldbid, $permname); - } - - /** - * Returns a list of permissions defined for the channel. - * - * @param boolean $permsid - * @return array - */ - public function permList($permsid = FALSE) - { - return $this->getParent()->channelPermList($this->getId(), $permsid); - } - - /** - * Adds a set of specified permissions to the channel. Multiple permissions can be added by - * providing the two parameters of each permission. - * - * @param integer $permid - * @param integer $permvalue - * @return void - */ - public function permAssign($permid, $permvalue) - { - $this->getParent()->channelPermAssign($this->getId(), $permid, $permvalue); - } - - /** - * Alias for permAssign(). - * - * @deprecated - */ - public function permAssignByName($permname, $permvalue) - { - $this->permAssign($permname, $permvalue); - } - - /** - * Removes a set of specified permissions from the channel. Multiple permissions can be removed at once. - * - * @param integer $permid - * @return void - */ - public function permRemove($permid) - { - $this->getParent()->channelPermRemove($this->getId(), $permid); - } - - /** - * Alias for permRemove(). - * - * @deprecated - */ - public function permRemoveByName($permname) - { - $this->permRemove($permname); - } - - /** - * Returns a list of files and directories stored in the channels file repository. - * - * @param string $cpw - * @param string $path - * @param boolean $recursive - * @return array - */ - public function fileList($cpw = "", $path = "/", $recursive = FALSE) - { - return $this->getParent()->channelFileList($this->getId(), $cpw, $path, $recursive); - } - - /** - * Returns detailed information about the specified file stored in the channels file repository. - * - * @param string $cpw - * @param string $name - * @return array - */ - public function fileInfo($cpw = "", $name = "/") - { - return $this->getParent()->channelFileInfo($this->getId(), $cpw, $name); - } - - /** - * Renames a file in the channels file repository. If the two parameters $tcid and $tcpw are specified, the file - * will be moved into another channels file repository. - * - * @param string $cpw - * @param string $oldname - * @param string $newname - * @param integer $tcid - * @param string $tcpw - * @return void - */ - public function fileRename($cpw = "", $oldname = "/", $newname = "/", $tcid = null, $tcpw = null) - { - $this->getParent()->channelFileRename($this->getId(), $cpw, $oldname, $newname, $tcid, $tcpw); - } - - /** - * Deletes one or more files stored in the channels file repository. - * - * @param string $cpw - * @param string $path - * @return void - */ - public function fileDelete($cpw = "", $name = "/") - { - $this->getParent()->channelFileDelete($this->getId(), $cpw, $name); - } - - /** - * Creates new directory in a channels file repository. - * - * @param string $cpw - * @param string $dirname - * @return void - */ - public function dirCreate($cpw = "", $dirname = "/") - { - $this->getParent()->channelDirCreate($this->getId(), $cpw, $dirname); - } - - /** - * Returns the level of the channel. - * - * @return integer - */ - public function getLevel() - { - return $this->getParent()->channelGetLevel($this->getId()); - } - - /** - * Returns the pathway of the channel which can be used as a clients default channel. - * - * @return string - */ - public function getPathway() - { - return $this->getParent()->channelGetPathway($this->getId()); - } - - /** - * Returns the possible spacer type of the channel. - * - * @return integer - */ - public function spacerGetType() - { - return $this->getParent()->channelSpacerGetType($this->getId()); - } - - /** - * Returns the possible spacer alignment of the channel. - * - * @return integer - */ - public function spacerGetAlign() - { - return $this->getParent()->channelSpacerGetAlign($this->getId()); - } - - /** - * Returns TRUE if the channel is a spacer. - * - * @return boolean - */ - public function isSpacer() - { - return $this->getParent()->channelIsSpacer($this); - } - - /** - * Downloads and returns the channels icon file content. - * - * @return TeamSpeak3_Helper_String - */ - public function iconDownload() - { - if($this->iconIsLocal("channel_icon_id") || $this["channel_icon_id"] == 0) return; - - $download = $this->getParent()->transferInitDownload(rand(0x0000, 0xFFFF), 0, $this->iconGetName("channel_icon_id")); - $transfer = TeamSpeak3::factory("filetransfer://" . (strstr($download["host"], ":") !== FALSE ? "[" . $download["host"] . "]" : $download["host"]) . ":" . $download["port"]); - - return $transfer->download($download["ftkey"], $download["size"]); - } - - /** - * Changes the channel configuration using given properties. - * - * @param array $properties - * @return void - */ - public function modify(array $properties) - { - $properties["cid"] = $this->getId(); - - $this->execute("channeledit", $properties); - $this->resetNodeInfo(); - } - - /** - * Sends a text message to all clients in the channel. - * - * @param string $msg - * @param string $cpw - * @return void - */ - public function message($msg, $cpw = null) - { - if($this->getId() != $this->getParent()->whoamiGet("client_channel_id")) - { - $this->getParent()->clientMove($this->getParent()->whoamiGet("client_id"), $this->getId(), $cpw); - } - - $this->execute("sendtextmessage", array("msg" => $msg, "target" => $this->getId(), "targetmode" => TeamSpeak3::TEXTMSG_CHANNEL)); - } - - /** - * Deletes the channel. - * - * @param boolean $force - * @return void - */ - public function delete($force = FALSE) - { - $this->getParent()->channelDelete($this->getId(), $force); - } - - /** - * Moves the channel to the parent channel specified with $pid. - * - * @param integer $pid - * @param integer $order - * @return void - */ - public function move($pid, $order = null) - { - $this->getParent()->channelMove($this->getId(), $pid, $order); - } - - /** - * Sends a plugin command to all clients in the channel. - * - * @param string $plugin - * @param string $data - * @param string $cpw - * @param boolean $subscribed - * @return void - */ - public function sendPluginCmd($plugin, $data, $cpw = null, $subscribed = FALSE) - { - if($this->getId() != $this->getParent()->whoamiGet("client_channel_id")) - { - $this->getParent()->clientMove($this->getParent()->whoamiGet("client_id"), $this->getId(), $cpw); - } - - $this->execute("plugincmd", array("name" => $plugin, "data" => $data, "targetmode" => $subscribed ? TeamSpeak3::PLUGINCMD_CHANNEL_SUBSCRIBED : TeamSpeak3::PLUGINCMD_CHANNEL)); - } - - /** - * @ignore - */ - protected function fetchNodeList() - { - $this->nodeList = array(); - - if($this->getParent()->getLoadClientlistFirst()) - { - foreach($this->clientList() as $client) - { - if($client["cid"] == $this->getId()) - { - $this->nodeList[] = $client; - } - } - - foreach($this->subChannelList() as $channel) - { - if($channel["pid"] == $this->getId()) - { - $this->nodeList[] = $channel; - } - } - } - else - { - foreach($this->subChannelList() as $channel) - { - if($channel["pid"] == $this->getId()) - { - $this->nodeList[] = $channel; - } - } - - foreach($this->clientList() as $client) - { - if($client["cid"] == $this->getId()) - { - $this->nodeList[] = $client; - } - } - } - } - - /** - * @ignore - */ - protected function fetchNodeInfo() - { - $this->nodeInfo = array_merge($this->nodeInfo, $this->execute("channelinfo", array("cid" => $this->getId()))->toList()); - } - - /** - * Returns a unique identifier for the node which can be used as a HTML property. - * - * @return string - */ - public function getUniqueId() - { - return $this->getParent()->getUniqueId() . "_ch" . $this->getId(); - } - - /** - * Returns the name of a possible icon to display the node object. - * - * @return string - */ - public function getIcon() - { - if($this["channel_maxclients"] != -1 && $this["channel_maxclients"] <= $this["total_clients"]) - { - return "channel_full"; - } - elseif($this["channel_flag_password"]) - { - return "channel_pass"; - } - else - { - return "channel_open"; - } - } - - /** - * Returns a symbol representing the node. - * - * @return string - */ - public function getSymbol() - { - return "#"; - } - - /** - * Returns a string representation of this node. - * - * @return string - */ - public function __toString() - { - return (string) $this["channel_name"]; - } -} - diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Node/Channelgroup.php b/lib/ts3phpframework/libraries/TeamSpeak3/Node/Channelgroup.php deleted file mode 100644 index 7e40e4a..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Node/Channelgroup.php +++ /dev/null @@ -1,274 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Node_Channelgroup - * @brief Class describing a TeamSpeak 3 channel group and all it's parameters. - */ -class TeamSpeak3_Node_Channelgroup extends TeamSpeak3_Node_Abstract -{ - /** - * The TeamSpeak3_Node_Channelgroup constructor. - * - * @param TeamSpeak3_Node_Server $server - * @param array $info - * @param string $index - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return TeamSpeak3_Node_Channelgroup - */ - public function __construct(TeamSpeak3_Node_Server $server, array $info, $index = "cgid") - { - $this->parent = $server; - $this->nodeInfo = $info; - - if(!array_key_exists($index, $this->nodeInfo)) - { - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid groupID", 0xA00); - } - - $this->nodeId = $this->nodeInfo[$index]; - } - - /** - * Renames the channel group specified. - * - * @param string $name - * @return void - */ - public function rename($name) - { - $this->getParent()->channelGroupRename($this->getId(), $name); - } - - /** - * Deletes the channel group. If $force is set to TRUE, the channel group will be - * deleted even if there are clients within. - * - * @param boolean $force - * @return void - */ - public function delete($force = FALSE) - { - $this->getParent()->channelGroupDelete($this->getId(), $force); - } - - /** - * Creates a copy of the channel group and returns the new groups ID. - * - * @param string $name - * @param integer $tcgid - * @param integer $type - * @return integer - */ - public function copy($name = null, $tcgid = 0, $type = TeamSpeak3::GROUP_DBTYPE_REGULAR) - { - return $this->getParent()->channelGroupCopy($this->getId(), $name, $tcgid, $type); - } - - /** - * Returns a list of permissions assigned to the channel group. - * - * @param boolean $permsid - * @return array - */ - public function permList($permsid = FALSE) - { - return $this->getParent()->channelGroupPermList($this->getId(), $permsid); - } - - /** - * Adds a set of specified permissions to the channel group. Multiple permissions - * can be added by providing the two parameters of each permission in separate arrays. - * - * @param integer $permid - * @param integer $permvalue - * @return void - */ - public function permAssign($permid, $permvalue) - { - $this->getParent()->channelGroupPermAssign($this->getId(), $permid, $permvalue); - } - - /** - * Alias for permAssign(). - * - * @deprecated - */ - public function permAssignByName($permname, $permvalue) - { - $this->permAssign($permname, $permvalue); - } - - /** - * Removes a set of specified permissions from the channel group. Multiple - * permissions can be removed at once. - * - * @param integer $permid - * @return void - */ - public function permRemove($permid) - { - $this->getParent()->channelGroupPermRemove($this->getId(), $permid); - } - - /** - * Alias for permAssign(). - * - * @deprecated - */ - public function permRemoveByName($permname) - { - $this->permRemove($permname); - } - - /** - * Returns a list of clients assigned to the server group specified. - * - * @return array - */ - public function clientList() - { - return $this->getParent()->channelGroupClientList($this->getId()); - } - - /** - * Alias for privilegeKeyCreate(). - * - * @deprecated - */ - public function tokenCreate($cid, $description = null, $customset = null) - { - return $this->privilegeKeyCreate($cid, $description, $customset); - } - - /** - * Creates a new privilege key (token) for the channel group and returns the key. - * - * @param integer $cid - * @param string $description - * @param string $customset - * @return TeamSpeak3_Helper_String - */ - public function privilegeKeyCreate($cid, $description = null, $customset = null) - { - return $this->getParent()->privilegeKeyCreate(TeamSpeak3::TOKEN_CHANNELGROUP, $this->getId(), $cid, $description, $customset); - } - - /** - * Sends a text message to all clients residing in the channel group on the virtual server. - * - * @param string $msg - * @return void - */ - public function message($msg) - { - foreach($this as $client) - { - try - { - $this->execute("sendtextmessage", array("msg" => $msg, "target" => $client, "targetmode" => TeamSpeak3::TEXTMSG_CLIENT)); - } - catch(TeamSpeak3_Adapter_ServerQuery_Exception $e) - { - /* ERROR_client_invalid_id */ - if($e->getCode() != 0x0200) throw $e; - } - } - } - - /** - * Downloads and returns the channel groups icon file content. - * - * @return TeamSpeak3_Helper_String - */ - public function iconDownload() - { - if($this->iconIsLocal("iconid") || $this["iconid"] == 0) return; - - $download = $this->getParent()->transferInitDownload(rand(0x0000, 0xFFFF), 0, $this->iconGetName("iconid")); - $transfer = TeamSpeak3::factory("filetransfer://" . (strstr($download["host"], ":") !== FALSE ? "[" . $download["host"] . "]" : $download["host"]) . ":" . $download["port"]); - - return $transfer->download($download["ftkey"], $download["size"]); - } - - /** - * @ignore - */ - protected function fetchNodeList() - { - $this->nodeList = array(); - - foreach($this->getParent()->clientList() as $client) - { - if($client["client_channel_group_id"] == $this->getId()) - { - $this->nodeList[] = $client; - } - } - } - - /** - * Returns a unique identifier for the node which can be used as a HTML property. - * - * @return string - */ - public function getUniqueId() - { - return $this->getParent()->getUniqueId() . "_cg" . $this->getId(); - } - - /** - * Returns the name of a possible icon to display the node object. - * - * @return string - */ - public function getIcon() - { - return "group_channel"; - } - - /** - * Returns a symbol representing the node. - * - * @return string - */ - public function getSymbol() - { - return "%"; - } - - /** - * Returns a string representation of this node. - * - * @return string - */ - public function __toString() - { - return (string) $this["name"]; - } -} - diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Node/Client.php b/lib/ts3phpframework/libraries/TeamSpeak3/Node/Client.php deleted file mode 100644 index 53feaf5..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Node/Client.php +++ /dev/null @@ -1,441 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Node_Client - * @brief Class describing a TeamSpeak 3 client and all it's parameters. - */ -class TeamSpeak3_Node_Client extends TeamSpeak3_Node_Abstract -{ - /** - * The TeamSpeak3_Node_Client constructor. - * - * @param TeamSpeak3_Node_Server $server - * @param array $info - * @param string $index - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return TeamSpeak3_Node_Client - */ - public function __construct(TeamSpeak3_Node_Server $server, array $info, $index = "clid") - { - $this->parent = $server; - $this->nodeInfo = $info; - - if(!array_key_exists($index, $this->nodeInfo)) - { - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid clientID", 0x200); - } - - $this->nodeId = $this->nodeInfo[$index]; - } - - /** - * Changes the clients properties using given properties. - * - * @param array $properties - * @return void - */ - public function modify(array $properties) - { - $properties["clid"] = $this->getId(); - - $this->execute("clientedit", $properties); - $this->resetNodeInfo(); - } - - /** - * Changes the clients properties using given properties. - * - * @param array $properties - * @return void - */ - public function modifyDb(array $properties) - { - $this->getParent()->clientModifyDb($this["client_database_id"], $properties); - } - - /** - * Deletes the clients properties from the database. - * - * @return void - */ - public function deleteDb() - { - $this->getParent()->clientDeleteDb($this["client_database_id"]); - } - - /** - * Returns a list of properties from the database for the client. - * - * @return array - */ - public function infoDb() - { - return $this->getParent()->clientInfoDb($this["client_database_id"]); - } - - /** - * Sends a text message to the client. - * - * @param string $msg - * @return void - */ - public function message($msg) - { - $this->execute("sendtextmessage", array("msg" => $msg, "target" => $this->getId(), "targetmode" => TeamSpeak3::TEXTMSG_CLIENT)); - } - - /** - * Moves the client to another channel. - * - * @param integer $cid - * @param string $cpw - * @return void - */ - public function move($cid, $cpw = null) - { - $this->getParent()->clientMove($this->getId(), $cid, $cpw); - } - - /** - * Kicks the client from his currently joined channel or from the server. - * - * @param integer $reasonid - * @param string $reasonmsg - * @return void - */ - public function kick($reasonid = TeamSpeak3::KICK_CHANNEL, $reasonmsg = null) - { - $this->getParent()->clientKick($this->getId(), $reasonid, $reasonmsg); - } - - /** - * Sends a poke message to the client. - * - * @param string $msg - * @return void - */ - public function poke($msg) - { - $this->getParent()->clientPoke($this->getId(), $msg); - } - - /** - * Bans the client from the server. Please note that this will create two separate - * ban rules for the targeted clients IP address and his unique identifier. - * - * @param integer $timeseconds - * @param string $reason - * @return array - */ - public function ban($timeseconds = null, $reason = null) - { - return $this->getParent()->clientBan($this->getId(), $timeseconds, $reason); - } - - /** - * Returns a list of custom properties for the client. - * - * @return array - */ - public function customInfo() - { - return $this->getParent()->customInfo($this["client_database_id"]); - } - - /** - * Returns an array containing the permission overview of the client. - * - * @param integer $cid - * @return array - */ - public function permOverview($cid) - { - return $this->execute("permoverview", array("cldbid" => $this["client_database_id"], "cid" => $cid, "permid" => 0))->toArray(); - } - - /** - * Returns a list of permissions defined for the client. - * - * @param boolean $permsid - * @return array - */ - public function permList($permsid = FALSE) - { - return $this->getParent()->clientPermList($this["client_database_id"], $permsid); - } - - /** - * Adds a set of specified permissions to the client. Multiple permissions can be added by providing - * the three parameters of each permission. - * - * @param integer $permid - * @param integer $permvalue - * @param integer $permskip - * @return void - */ - public function permAssign($permid, $permvalue, $permskip = FALSE) - { - $this->getParent()->clientPermAssign($this["client_database_id"], $permid, $permvalue, $permskip); - } - - /** - * Alias for permAssign(). - * - * @deprecated - */ - public function permAssignByName($permname, $permvalue, $permskip = FALSE) - { - $this->permAssign($permname, $permvalue, $permskip); - } - - /** - * Removes a set of specified permissions from a client. Multiple permissions can be removed at once. - * - * @param integer $permid - * @return void - */ - public function permRemove($permid) - { - $this->getParent()->clientPermRemove($this["client_database_id"], $permid); - } - - /** - * Alias for permRemove(). - * - * @deprecated - */ - public function permRemoveByName($permname) - { - $this->permRemove($permname); - } - - /** - * Sets the channel group of a client to the ID specified. - * - * @param integer $cid - * @param integer $cgid - * @return void - */ - public function setChannelGroup($cid, $cgid) - { - $this->getParent()->clientSetChannelGroup($this["client_database_id"], $cid, $cgid); - } - - /** - * Adds the client to the server group specified with $sgid. - * - * @param integer $sgid - * @return void - */ - public function addServerGroup($sgid) - { - $this->getParent()->serverGroupClientAdd($sgid, $this["client_database_id"]); - } - - /** - * Removes the client from the server group specified with $sgid. - * - * @param integer $sgid - * @return void - */ - public function remServerGroup($sgid) - { - $this->getParent()->serverGroupClientDel($sgid, $this["client_database_id"]); - } - - /** - * Returns the possible name of the clients avatar. - * - * @return TeamSpeak3_Helper_String - */ - public function avatarGetName() - { - return new TeamSpeak3_Helper_String("/avatar_" . $this["client_base64HashClientUID"]); - } - - /** - * Downloads and returns the clients avatar file content. - * - * @return TeamSpeak3_Helper_String - */ - public function avatarDownload() - { - if($this["client_flag_avatar"] == NULL) return; - - $download = $this->getParent()->transferInitDownload(rand(0x0000, 0xFFFF), 0, $this->avatarGetName()); - $transfer = TeamSpeak3::factory("filetransfer://" . (strstr($download["host"], ":") !== FALSE ? "[" . $download["host"] . "]" : $download["host"]) . ":" . $download["port"]); - - return $transfer->download($download["ftkey"], $download["size"]); - } - - /** - * Returns a list of client connections using the same identity as this client. - * - * @return array - */ - public function getClones() - { - return $this->execute("clientgetids", array("cluid" => $this["client_unique_identifier"]))->toAssocArray("clid"); - } - - /** - * Returns the revision/build number from the clients version string. - * - * @return integer - */ - public function getRev() - { - return $this["client_type"] ? null : $this["client_version"]->section("[", 1)->filterDigits(); - } - - /** - * Returns all server and channel groups the client is currently residing in. - * - * @return array - */ - public function memberOf() - { - $groups = array($this->getParent()->channelGroupGetById($this["client_channel_group_id"])); - - foreach(explode(",", $this["client_servergroups"]) as $sgid) - { - $groups[] = $this->getParent()->serverGroupGetById($sgid); - } - - return $groups; - } - - /** - * Downloads and returns the clients icon file content. - * - * @return TeamSpeak3_Helper_String - */ - public function iconDownload() - { - if($this->iconIsLocal("client_icon_id") || $this["client_icon_id"] == 0) return; - - $download = $this->getParent()->transferInitDownload(rand(0x0000, 0xFFFF), 0, $this->iconGetName("client_icon_id")); - $transfer = TeamSpeak3::factory("filetransfer://" . (strstr($download["host"], ":") !== FALSE ? "[" . $download["host"] . "]" : $download["host"]) . ":" . $download["port"]); - - return $transfer->download($download["ftkey"], $download["size"]); - } - - /** - * Sends a plugin command to the client. - * - * @param string $plugin - * @param string $data - * @return void - */ - public function sendPluginCmd($plugin, $data) - { - $this->execute("plugincmd", array("name" => $plugin, "data" => $data, "targetmode" => TeamSpeak3::PLUGINCMD_CLIENT, "target" => $this->getId())); - } - - /** - * @ignore - */ - protected function fetchNodeInfo() - { - if($this->offsetExists("client_type") && $this["client_type"] == 1) return; - - $this->nodeInfo = array_merge($this->nodeInfo, $this->execute("clientinfo", array("clid" => $this->getId()))->toList()); - } - - /** - * Returns a unique identifier for the node which can be used as a HTML property. - * - * @return string - */ - public function getUniqueId() - { - return $this->getParent()->getUniqueId() . "_cl" . $this->getId(); - } - - /** - * Returns the name of a possible icon to display the node object. - * - * @return string - */ - public function getIcon() - { - if($this["client_type"]) - { - return "client_query"; - } - elseif($this["client_away"]) - { - return "client_away"; - } - elseif(!$this["client_output_hardware"]) - { - return "client_snd_disabled"; - } - elseif($this["client_output_muted"]) - { - return "client_snd_muted"; - } - elseif(!$this["client_input_hardware"]) - { - return "client_mic_disabled"; - } - elseif($this["client_input_muted"]) - { - return "client_mic_muted"; - } - elseif($this["client_is_channel_commander"]) - { - return $this["client_flag_talking"] ? "client_cc_talk" : "client_cc_idle"; - } - else - { - return $this["client_flag_talking"] ? "client_talk" : "client_idle"; - } - } - - /** - * Returns a symbol representing the node. - * - * @return string - */ - public function getSymbol() - { - return "@"; - } - - /** - * Returns a string representation of this node. - * - * @return string - */ - public function __toString() - { - return (string) $this["client_nickname"]; - } -} - diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Node/Exception.php b/lib/ts3phpframework/libraries/TeamSpeak3/Node/Exception.php deleted file mode 100644 index 2d1b769..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Node/Exception.php +++ /dev/null @@ -1,32 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Node_Exception - * @brief Enhanced exception class for TeamSpeak3_Node_Abstract objects. - */ -class TeamSpeak3_Node_Exception extends TeamSpeak3_Exception {} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Node/Host.php b/lib/ts3phpframework/libraries/TeamSpeak3/Node/Host.php deleted file mode 100644 index a6e0913..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Node/Host.php +++ /dev/null @@ -1,1202 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Node_Host - * @brief Class describing a TeamSpeak 3 server instance and all it's parameters. - */ -class TeamSpeak3_Node_Host extends TeamSpeak3_Node_Abstract -{ - /** - * @ignore - */ - protected $whoami = null; - - /** - * @ignore - */ - protected $version = null; - - /** - * @ignore - */ - protected $serverList = null; - - /** - * @ignore - */ - protected $permissionEnds = null; - - /** - * @ignore - */ - protected $permissionList = null; - - /** - * @ignore - */ - protected $permissionCats = null; - - /** - * @ignore - */ - protected $predefined_query_name = null; - - /** - * @ignore - */ - protected $exclude_query_clients = FALSE; - - /** - * @ignore - */ - protected $start_offline_virtual = FALSE; - - /** - * @ignore - */ - protected $sort_clients_channels = FALSE; - - /** - * The TeamSpeak3_Node_Host constructor. - * - * @param TeamSpeak3_Adapter_ServerQuery $squery - * @return TeamSpeak3_Node_Host - */ - public function __construct(TeamSpeak3_Adapter_ServerQuery $squery) - { - $this->parent = $squery; - } - - /** - * Returns the primary ID of the selected virtual server. - * - * @return integer - */ - public function serverSelectedId() - { - return $this->whoamiGet("virtualserver_id", 0); - } - - /** - * Returns the primary UDP port of the selected virtual server. - * - * @return integer - */ - public function serverSelectedPort() - { - return $this->whoamiGet("virtualserver_port", 0); - } - - /** - * Returns the servers version information including platform and build number. - * - * @param string $ident - * @return mixed - */ - public function version($ident = null) - { - if($this->version === null) - { - $this->version = $this->request("version")->toList(); - } - - return ($ident && isset($this->version[$ident])) ? $this->version[$ident] : $this->version; - } - - /** - * Selects a virtual server by ID to allow further interaction. - * - * @param integer $sid - * @param boolean $virtual - * @return void - */ - public function serverSelect($sid, $virtual = null) - { - if($this->whoami !== null && $this->serverSelectedId() == $sid) return; - - $virtual = ($virtual !== null) ? $virtual : $this->start_offline_virtual; - $getargs = func_get_args(); - - $this->execute("use", array("sid" => $sid, $virtual ? "-virtual" : null)); - - if($sid != 0 && $this->predefined_query_name !== null) - { - $this->execute("clientupdate", array("client_nickname" => (string) $this->predefined_query_name)); - } - - $this->whoamiReset(); - - $this->setStorage("_server_use", array(__FUNCTION__, $getargs)); - - TeamSpeak3_Helper_Signal::getInstance()->emit("notifyServerselected", $this); - } - - /** - * Alias for serverSelect(). - * - * @param integer $sid - * @param boolean $virtual - * @return void - */ - public function serverSelectById($sid, $virtual = null) - { - $this->serverSelect($sid, $virtual); - } - - /** - * Selects a virtual server by UDP port to allow further interaction. - * - * @param integer $port - * @param boolean $virtual - * @return void - */ - public function serverSelectByPort($port, $virtual = null) - { - if($this->whoami !== null && $this->serverSelectedPort() == $port) return; - - $virtual = ($virtual !== null) ? $virtual : $this->start_offline_virtual; - $getargs = func_get_args(); - - $this->execute("use", array("port" => $port, $virtual ? "-virtual" : null)); - - if($port != 0 && $this->predefined_query_name !== null) - { - $this->execute("clientupdate", array("client_nickname" => (string) $this->predefined_query_name)); - } - - $this->whoamiReset(); - - $this->setStorage("_server_use", array(__FUNCTION__, $getargs)); - - TeamSpeak3_Helper_Signal::getInstance()->emit("notifyServerselected", $this); - } - - /** - * Deselects the active virtual server. - * - * @return void - */ - public function serverDeselect() - { - $this->serverSelect(0); - - $this->delStorage("_server_use"); - } - - /** - * Returns the ID of a virtual server matching the given port. - * - * @param integer $port - * @return integer - */ - public function serverIdGetByPort($port) - { - $sid = $this->execute("serveridgetbyport", array("virtualserver_port" => $port))->toList(); - - return $sid["server_id"]; - } - - /** - * Returns the port of a virtual server matching the given ID. - * - * @param integer $sid - * @return integer - */ - public function serverGetPortById($sid) - { - if(!array_key_exists((string) $sid, $this->serverList())) - { - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid serverID", 0x400); - } - - return $this->serverList[intval((string) $sid)]["virtualserver_port"]; - } - - /** - * Returns the TeamSpeak3_Node_Server object matching the currently selected ID. - * - * @return TeamSpeak3_Node_Server - */ - public function serverGetSelected() - { - return $this->serverGetById($this->serverSelectedId()); - } - - /** - * Returns the TeamSpeak3_Node_Server object matching the given ID. - * - * @param integer $sid - * @return TeamSpeak3_Node_Server - */ - public function serverGetById($sid) - { - $this->serverSelectById($sid); - - return new TeamSpeak3_Node_Server($this, array("virtualserver_id" => intval($sid))); - } - - /** - * Returns the TeamSpeak3_Node_Server object matching the given port number. - * - * @param integer $port - * @return TeamSpeak3_Node_Server - */ - public function serverGetByPort($port) - { - $this->serverSelectByPort($port); - - return new TeamSpeak3_Node_Server($this, array("virtualserver_id" => $this->serverSelectedId())); - } - - /** - * Returns the first TeamSpeak3_Node_Server object matching the given name. - * - * @param string $name - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return TeamSpeak3_Node_Server - */ - public function serverGetByName($name) - { - foreach($this->serverList() as $server) - { - if($server["virtualserver_name"] == $name) return $server; - } - - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid serverID", 0x400); - } - - /** - * Returns the first TeamSpeak3_Node_Server object matching the given unique identifier. - * - * @param string $uid - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return TeamSpeak3_Node_Server - */ - public function serverGetByUid($uid) - { - foreach($this->serverList() as $server) - { - if($server["virtualserver_unique_identifier"] == $uid) return $server; - } - - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid serverID", 0x400); - } - - /** - * Returns the first TeamSpeak3_Node_Server object matching the given TSDNS hostname. Like the - * TeamSpeak 3 Client, this method will start looking for a TSDNS server on the second-level - * domain including a fallback to the third-level domain of the specified $tsdns parameter. - * - * @param string $tsdns - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return TeamSpeak3_Node_Server - */ - public function serverGetByTSDNS($tsdns) - { - $parts = TeamSpeak3_Helper_Uri::getFQDNParts($tsdns); - $query = TeamSpeak3_Helper_String::factory(array_shift($parts)); - - while($part = array_shift($parts)) - { - $query->prepend($part); - - try - { - $port = TeamSpeak3::factory("tsdns://" . $query . "/?timeout=3")->resolve($tsdns)->section(":", 1); - - return $this->serverGetByPort($port == "" ? 9987 : $port); - } - catch(TeamSpeak3_Transport_Exception $e) - { - /* skip "Connection timed out" and "Connection refused" */ - if($e->getCode() != 10060 && $e->getCode() != 10061) throw $e; - } - } - - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid serverID", 0x400); - } - - /** - * Creates a new virtual server using given properties and returns an assoc - * array containing the new ID and initial admin token. - * - * @param array $properties - * @return array - */ - public function serverCreate(array $properties = array()) - { - $this->serverListReset(); - - $detail = $this->execute("servercreate", $properties)->toList(); - $server = new TeamSpeak3_Node_Server($this, array("virtualserver_id" => intval($detail["sid"]))); - - TeamSpeak3_Helper_Signal::getInstance()->emit("notifyServercreated", $this, $detail["sid"]); - TeamSpeak3_Helper_Signal::getInstance()->emit("notifyTokencreated", $server, $detail["token"]); - - return $detail; - } - - /** - * Deletes the virtual server specified by ID. - * - * @param integer $sid - * @return void - */ - public function serverDelete($sid) - { - $this->serverListReset(); - - $this->execute("serverdelete", array("sid" => $sid)); - - TeamSpeak3_Helper_Signal::getInstance()->emit("notifyServerdeleted", $this, $sid); - } - - /** - * Starts the virtual server specified by ID. - * - * @param integer $sid - * @return void - */ - public function serverStart($sid) - { - if($sid == $this->serverSelectedId()) - { - $this->serverDeselect(); - } - - $this->execute("serverstart", array("sid" => $sid)); - $this->serverListReset(); - - TeamSpeak3_Helper_Signal::getInstance()->emit("notifyServerstarted", $this, $sid); - } - - /** - * Stops the virtual server specified by ID. - * - * @param integer $sid - * @return void - */ - public function serverStop($sid) - { - if($sid == $this->serverSelectedId()) - { - $this->serverDeselect(); - } - - $this->execute("serverstop", array("sid" => $sid)); - $this->serverListReset(); - - TeamSpeak3_Helper_Signal::getInstance()->emit("notifyServerstopped", $this, $sid); - } - - /** - * Stops the entire TeamSpeak 3 Server instance by shutting down the process. - * - * @return void - */ - public function serverStopProcess() - { - TeamSpeak3_Helper_Signal::getInstance()->emit("notifyServershutdown", $this); - - $this->execute("serverprocessstop"); - } - - /** - * Returns an array filled with TeamSpeak3_Node_Server objects. - * - * @param array $filter - * @return array - */ - public function serverList(array $filter = array()) - { - if($this->serverList === null) - { - $servers = $this->request("serverlist -uid")->toAssocArray("virtualserver_id"); - - $this->serverList = array(); - - foreach($servers as $sid => $server) - { - $this->serverList[$sid] = new TeamSpeak3_Node_Server($this, $server); - } - - $this->resetNodeList(); - } - - return $this->filterList($this->serverList, $filter); - } - - /** - * Resets the list of virtual servers. - * - * @return void - */ - public function serverListReset() - { - $this->resetNodeList(); - $this->serverList = null; - } - - /** - * Returns a list of IP addresses used by the server instance on multi-homed machines. - * - * @return array - */ - public function bindingList($subsystem = "voice") - { - return $this->execute("bindinglist", array("subsystem" => $subsystem))->toArray(); - } - - /** - * Returns a list of permissions available on the server instance. - * - * @return array - */ - public function permissionList() - { - if($this->permissionList === null) - { - $this->fetchPermissionList(); - } - - foreach($this->permissionList as $permname => $permdata) - { - if(isset($permdata["permcatid"]) && $permdata["permgrant"]) - { - continue; - } - - $this->permissionList[$permname]["permcatid"] = $this->permissionGetCategoryById($permdata["permid"]); - $this->permissionList[$permname]["permgrant"] = $this->permissionGetGrantById($permdata["permid"]); - - $grantsid = "i_needed_modify_power_" . substr($permname, 2); - - if(!$permdata["permname"]->startsWith("i_needed_modify_power_") && !isset($this->permissionList[$grantsid])) - { - $this->permissionList[$grantsid]["permid"] = $this->permissionList[$permname]["permgrant"]; - $this->permissionList[$grantsid]["permname"] = TeamSpeak3_Helper_String::factory($grantsid); - $this->permissionList[$grantsid]["permdesc"] = null; - $this->permissionList[$grantsid]["permcatid"] = 0xFF; - $this->permissionList[$grantsid]["permgrant"] = $this->permissionList[$permname]["permgrant"]; - } - } - - return $this->permissionList; - } - - /** - * Returns a list of permission categories available on the server instance. - * - * @return array - */ - public function permissionCats() - { - if($this->permissionCats === null) - { - $this->fetchPermissionCats(); - } - - return $this->permissionCats; - } - - /** - * Returns a list of permission category endings available on the server instance. - * - * @return array - */ - public function permissionEnds() - { - if($this->permissionEnds === null) - { - $this->fetchPermissionList(); - } - - return $this->permissionCats; - } - - /** - * Returns an array filled with all permission categories known to the server including - * their ID, name and parent. - * - * @return array - */ - public function permissionTree() - { - $permtree = array(); - - foreach($this->permissionCats() as $key => $val) - { - $permtree[$val]["permcatid"] = $val; - $permtree[$val]["permcathex"] = "0x" . dechex($val); - $permtree[$val]["permcatname"] = TeamSpeak3_Helper_String::factory(TeamSpeak3_Helper_Convert::permissionCategory($val)); - $permtree[$val]["permcatparent"] = $permtree[$val]["permcathex"]{3} == 0 ? 0 : hexdec($permtree[$val]["permcathex"]{2} . 0); - $permtree[$val]["permcatchilren"] = 0; - $permtree[$val]["permcatcount"] = 0; - - if(isset($permtree[$permtree[$val]["permcatparent"]])) - { - $permtree[$permtree[$val]["permcatparent"]]["permcatchilren"]++; - } - - if($permtree[$val]["permcatname"]->contains("/")) - { - $permtree[$val]["permcatname"] = $permtree[$val]["permcatname"]->section("/", 1)->trim(); - } - - foreach($this->permissionList() as $permission) - { - if($permission["permid"]["permcatid"] == $val) - { - $permtree[$val]["permcatcount"]++; - } - } - } - - return $permtree; - } - - /** - * Returns the IDs of all clients, channels or groups using the permission with the - * specified ID. - * - * @param integer $permid - * @return array - */ - public function permissionFind($permid) - { - if(!is_array($permid)) - { - $permident = (is_numeric($permid)) ? "permid" : "permsid"; - } - else - { - $permident = (is_numeric(current($permid))) ? "permid" : "permsid"; - } - - return $this->execute("permfind", array($permident => $permid))->toArray(); - } - - /** - * Returns the ID of the permission matching the given name. - * - * @param string $name - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return integer - */ - public function permissionGetIdByName($name) - { - if(!array_key_exists((string) $name, $this->permissionList())) - { - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid permission ID", 0xA02); - } - - return $this->permissionList[(string) $name]["permid"]; - } - - /** - * Returns the name of the permission matching the given ID. - * - * @param integer $permid - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return TeamSpeak3_Helper_String - */ - public function permissionGetNameById($permid) - { - foreach($this->permissionList() as $name => $perm) - { - if($perm["permid"] == $permid) return new TeamSpeak3_Helper_String($name); - } - - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid permission ID", 0xA02); - } - - /** - * Returns the internal category of the permission matching the given ID. - * - * All pre-3.0.7 permission IDs are are 2 bytes wide. The first byte identifies the category while - * the second byte is the permission count within that group. - * - * @param integer $permid - * @return integer - */ - public function permissionGetCategoryById($permid) - { - if(!is_numeric($permid)) - { - $permid = $this->permissionGetIdByName($permid); - } - - if($permid < 0x1000) - { - if($this->permissionEnds === null) - { - $this->fetchPermissionList(); - } - - if($this->permissionCats === null) - { - $this->fetchPermissionCats(); - } - - $catids = array_values($this->permissionCats()); - - foreach($this->permissionEnds as $key => $val) - { - if($val >= $permid && isset($catids[$key])) - { - return $catids[$key]; - } - } - - return 0; - } - else - { - return (int) $permid >> 8; - } - } - - /** - * Returns the internal ID of the i_needed_modify_power_* or grant permission. - * - * Every permission has an associated i_needed_modify_power_* permission, for example b_client_ban_create has an - * associated permission called i_needed_modify_power_client_ban_create. - * - * @param integer $permid - * @return integer - */ - public function permissionGetGrantById($permid) - { - if(!is_numeric($permid)) - { - $permid = $this->permissionGetIdByName($permid); - } - - if($permid < 0x1000) - { - return (int) $permid+0x8000; - } - else - { - return (int) bindec(substr(decbin($permid), -8))+0xFF00; - } - } - - /** - * Adds a set of specified permissions to all regular server groups on all virtual servers. The target groups will - * be identified by the value of their i_group_auto_update_type permission specified with $sgtype. - * - * @param integer $sgtype - * @param integer $permid - * @param integer $permvalue - * @param integer $permnegated - * @param integer $permskip - * @return void - */ - public function serverGroupPermAutoAssign($sgtype, $permid, $permvalue, $permnegated = FALSE, $permskip = FALSE) - { - if(!is_array($permid)) - { - $permident = (is_numeric($permid)) ? "permid" : "permsid"; - } - else - { - $permident = (is_numeric(current($permid))) ? "permid" : "permsid"; - } - - $this->execute("servergroupautoaddperm", array("sgtype" => $sgtype, $permident => $permid, "permvalue" => $permvalue, "permnegated" => $permnegated, "permskip" => $permskip)); - } - - /** - * Removes a set of specified permissions from all regular server groups on all virtual servers. The target groups - * will be identified by the value of their i_group_auto_update_type permission specified with $sgtype. - * - * @param integer $sgtype - * @param integer $permid - * @return void - */ - public function serverGroupPermAutoRemove($sgtype, $permid) - { - if(!is_array($permid)) - { - $permident = (is_numeric($permid)) ? "permid" : "permsid"; - } - else - { - $permident = (is_numeric(current($permid))) ? "permid" : "permsid"; - } - - $this->execute("servergroupautodelperm", array("sgtype" => $sgtype, $permident => $permid)); - } - - /** - * Returns an array containing the value of a specified permission for your own client. - * - * @param integer $permid - * @return array - */ - public function selfPermCheck($permid) - { - if(!is_array($permid)) - { - $permident = (is_numeric($permid)) ? "permid" : "permsid"; - } - else - { - $permident = (is_numeric(current($permid))) ? "permid" : "permsid"; - } - - return $this->execute("permget", array($permident => $permid))->toAssocArray("permsid"); - } - - /** - * Changes the server instance configuration using given properties. - * - * @param array $properties - * @return void - */ - public function modify(array $properties) - { - $this->execute("instanceedit", $properties); - $this->resetNodeInfo(); - } - - /** - * Sends a text message to all clients on all virtual servers in the TeamSpeak 3 Server instance. - * - * @param string $msg - * @return void - */ - public function message($msg) - { - $this->execute("gm", array("msg" => $msg)); - } - - /** - * Displays a specified number of entries (1-100) from the servers log. - * - * @param integer $lines - * @param integer $begin_pos - * @param boolean $reverse - * @param boolean $instance - * @return array - */ - public function logView($lines = 30, $begin_pos = null, $reverse = null, $instance = TRUE) - { - return $this->execute("logview", array("lines" => $lines, "begin_pos" => $begin_pos, "instance" => $instance, "reverse" => $reverse))->toArray(); - } - - /** - * Writes a custom entry into the server instance log. - * - * @param string $logmsg - * @param integer $loglevel - * @return void - */ - public function logAdd($logmsg, $loglevel = TeamSpeak3::LOGLEVEL_INFO) - { - $sid = $this->serverSelectedId(); - - $this->serverDeselect(); - $this->execute("logadd", array("logmsg" => $logmsg, "loglevel" => $loglevel)); - $this->serverSelect($sid); - } - - /** - * Authenticates with the TeamSpeak 3 Server instance using given ServerQuery login credentials. - * - * @param string $username - * @param string $password - * @return void - */ - public function login($username, $password) - { - $this->execute("login", array("client_login_name" => $username, "client_login_password" => $password)); - $this->whoamiReset(); - - $crypt = new TeamSpeak3_Helper_Crypt($username); - - $this->setStorage("_login_user", $username); - $this->setStorage("_login_pass", $crypt->encrypt($password)); - - TeamSpeak3_Helper_Signal::getInstance()->emit("notifyLogin", $this); - } - - /** - * Deselects the active virtual server and logs out from the server instance. - * - * @return void - */ - public function logout() - { - $this->request("logout"); - $this->whoamiReset(); - - $this->delStorage("_login_user"); - $this->delStorage("_login_pass"); - - TeamSpeak3_Helper_Signal::getInstance()->emit("notifyLogout", $this); - } - - /** - * Returns information about your current ServerQuery connection. - * - * @return array - */ - public function whoami() - { - if($this->whoami === null) - { - $this->whoami = $this->request("whoami")->toList(); - } - - return $this->whoami; - } - - /** - * Returns a single value from the current ServerQuery connection info. - * - * @param string $ident - * @param mixed $default - * @return mixed - */ - public function whoamiGet($ident, $default = null) - { - if(array_key_exists($ident, $this->whoami())) - { - return $this->whoami[$ident]; - } - - return $default; - } - - /** - * Sets a single value in the current ServerQuery connection info. - * - * @param string $ident - * @param mixed $value - * @return mixed - */ - public function whoamiSet($ident, $value = null) - { - $this->whoami(); - - $this->whoami[$ident] = (is_numeric($value)) ? (int) $value : TeamSpeak3_Helper_String::factory($value); - } - - /** - * Resets the current ServerQuery connection info. - * - * @return void - */ - public function whoamiReset() - { - $this->whoami = null; - } - - /** - * Returns the hostname or IPv4 address the adapter is connected to. - * - * @return string - */ - public function getAdapterHost() - { - return $this->getParent()->getTransportHost(); - } - - /** - * Returns the network port the adapter is connected to. - * - * @return string - */ - public function getAdapterPort() - { - return $this->getParent()->getTransportPort(); - } - - /** - * @ignore - */ - protected function fetchNodeList() - { - $servers = $this->serverList(); - - foreach($servers as $server) - { - $this->nodeList[] = $server; - } - } - - /** - * @ignore - */ - protected function fetchNodeInfo() - { - $info1 = $this->request("hostinfo")->toList(); - $info2 = $this->request("instanceinfo")->toList(); - - $this->nodeInfo = array_merge($this->nodeInfo, $info1, $info2); - } - - /** - * @ignore - */ - protected function fetchPermissionList() - { - $reply = $this->request("permissionlist -new")->toArray(); - $start = 1; - - $this->permissionEnds = array(); - $this->permissionList = array(); - - foreach($reply as $line) - { - if(array_key_exists("group_id_end", $line)) - { - $this->permissionEnds[] = $line["group_id_end"]; - } - else - { - $this->permissionList[$line["permname"]->toString()] = array_merge(array("permid" => $start++), $line); - } - } - } - - /** - * @ignore - */ - protected function fetchPermissionCats() - { - $permcats = array(); - $reflects = new ReflectionClass("TeamSpeak3"); - - foreach($reflects->getConstants() as $key => $val) - { - if(!TeamSpeak3_Helper_String::factory($key)->startsWith("PERM_CAT") || $val == 0xFF) - { - continue; - } - - $permcats[$key] = $val; - } - - $this->permissionCats = $permcats; - } - - /** - * Sets a pre-defined nickname for ServerQuery clients which will be used automatically - * after selecting a virtual server. - * - * @param string $name - * @return void - */ - public function setPredefinedQueryName($name = null) - { - $this->setStorage("_query_nick", $name); - - $this->predefined_query_name = $name; - } - - /** - * Returns the pre-defined nickname for ServerQuery clients which will be used automatically - * after selecting a virtual server. - * - * @return string - */ - public function getPredefinedQueryName() - { - return $this->predefined_query_name; - } - - /** - * Sets the option to decide whether ServerQuery clients should be excluded from node - * lists or not. - * - * @param boolean $exclude - * @return void - */ - public function setExcludeQueryClients($exclude = FALSE) - { - $this->setStorage("_query_hide", $exclude); - - $this->exclude_query_clients = $exclude; - } - - /** - * Returns the option to decide whether ServerQuery clients should be excluded from node - * lists or not. - * - * @return boolean - */ - public function getExcludeQueryClients() - { - return $this->exclude_query_clients; - } - - /** - * Sets the option to decide whether offline servers will be started in virtual mode - * by default or not. - * - * @param boolean $virtual - * @return void - */ - public function setUseOfflineAsVirtual($virtual = FALSE) - { - $this->setStorage("_do_virtual", $virtual); - - $this->start_offline_virtual = $virtual; - } - - /** - * Returns the option to decide whether offline servers will be started in virtual mode - * by default or not. - * - * @return boolean - */ - public function getUseOfflineAsVirtual() - { - return $this->start_offline_virtual; - } - - /** - * Sets the option to decide whether clients should be sorted before sub-channels to support - * the new TeamSpeak 3 Client display mode or not. - * - * @param boolean $first - * @return void - */ - public function setLoadClientlistFirst($first = FALSE) - { - $this->setStorage("_client_top", $first); - - $this->sort_clients_channels = $first; - } - - /** - * Returns the option to decide whether offline servers will be started in virtual mode - * by default or not. - * - * @return boolean - */ - public function getLoadClientlistFirst() - { - return $this->sort_clients_channels; - } - - /** - * Returns the underlying TeamSpeak3_Adapter_ServerQuery object. - * - * @return TeamSpeak3_Adapter_ServerQuery - */ - public function getAdapter() - { - return $this->getParent(); - } - - /** - * Returns a unique identifier for the node which can be used as a HTML property. - * - * @return string - */ - public function getUniqueId() - { - return "ts3_h"; - } - - /** - * Returns the name of a possible icon to display the node object. - * - * @return string - */ - public function getIcon() - { - return "host"; - } - - /** - * Returns a symbol representing the node. - * - * @return string - */ - public function getSymbol() - { - return "+"; - } - - /** - * Re-authenticates with the TeamSpeak 3 Server instance using given ServerQuery login - * credentials and re-selects a previously selected virtual server. - * - * @return void - */ - public function __wakeup() - { - $username = $this->getStorage("_login_user"); - $password = $this->getStorage("_login_pass"); - - if($username && $password) - { - $crypt = new TeamSpeak3_Helper_Crypt($username); - - $this->login($username, $crypt->decrypt($password)); - } - - $this->predefined_query_name = $this->getStorage("_query_nick"); - $this->exclude_query_clients = $this->getStorage("_query_hide", FALSE); - $this->start_offline_virtual = $this->getStorage("_do_virtual", FALSE); - $this->sort_clients_channels = $this->getStorage("_client_top", FALSE); - - if($server = $this->getStorage("_server_use")) - { - $func = array_shift($server); - $args = array_shift($server); - - try - { - call_user_func_array(array($this, $func), $args); - } - catch(Exception $e) - { - $class = get_class($e); - - throw new $class($e->getMessage(), $e->getCode()); - } - } - } - - /** - * Returns a string representation of this node. - * - * @return string - */ - public function __toString() - { - return (string) $this->getAdapterHost(); - } -} - diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Node/Server.php b/lib/ts3phpframework/libraries/TeamSpeak3/Node/Server.php deleted file mode 100644 index 5854554..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Node/Server.php +++ /dev/null @@ -1,2536 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Node_Server - * @brief Class describing a TeamSpeak 3 virtual server and all it's parameters. - */ -class TeamSpeak3_Node_Server extends TeamSpeak3_Node_Abstract -{ - /** - * @ignore - */ - protected $channelList = null; - - /** - * @ignore - */ - protected $clientList = null; - - /** - * @ignore - */ - protected $sgroupList = null; - - /** - * @ignore - */ - protected $cgroupList = null; - - /** - * The TeamSpeak3_Node_Server constructor. - * - * @param TeamSpeak3_Node_Host $host - * @param array $info - * @param string $index - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return TeamSpeak3_Node_Server - */ - public function __construct(TeamSpeak3_Node_Host $host, array $info, $index = "virtualserver_id") - { - $this->parent = $host; - $this->nodeInfo = $info; - - if(!array_key_exists($index, $this->nodeInfo)) - { - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid serverID", 0x400); - } - - $this->nodeId = $this->nodeInfo[$index]; - } - - /** - * Sends a prepared command to the server and returns the result. - * - * @param string $cmd - * @param boolean $throw - * @return TeamSpeak3_Adapter_ServerQuery_Reply - */ - public function request($cmd, $throw = TRUE) - { - if($this->getId() != $this->getParent()->serverSelectedId()) - { - $this->getParent()->serverSelect($this->getId()); - } - - return $this->getParent()->request($cmd, $throw); - } - - /** - * Returns an array filled with TeamSpeak3_Node_Channel objects. - * - * @param array $filter - * @return array - */ - public function channelList(array $filter = array()) - { - if($this->channelList === null) - { - $channels = $this->request("channellist -topic -flags -voice -limits -icon")->toAssocArray("cid"); - - $this->channelList = array(); - - foreach($channels as $cid => $channel) - { - $this->channelList[$cid] = new TeamSpeak3_Node_Channel($this, $channel); - } - - $this->resetNodeList(); - } - - return $this->filterList($this->channelList, $filter); - } - - /** - * Resets the list of channels online. - * - * @return void - */ - public function channelListReset() - { - $this->resetNodeList(); - $this->channelList = null; - } - - /** - * Creates a new channel using given properties and returns the new ID. - * - * @param array $properties - * @return integer - */ - public function channelCreate(array $properties) - { - $cid = $this->execute("channelcreate", $properties)->toList(); - $this->channelListReset(); - - if(!isset($properties["channel_flag_permanent"]) && !isset($properties["channel_flag_semi_permanent"])) - { - $this->getParent()->whoamiSet("client_channel_id", $cid["cid"]); - } - - return $cid["cid"]; - } - - /** - * Deletes the channel specified by $cid. - * - * @param integer $cid - * @param boolean $force - * @return void - */ - public function channelDelete($cid, $force = FALSE) - { - $this->execute("channeldelete", array("cid" => $cid, "force" => $force)); - $this->channelListReset(); - - if(($cid instanceof TeamSpeak3_Node_Abstract ? $cid->getId() : $cid) == $this->whoamiGet("client_channel_id")) - { - $this->getParent()->whoamiReset(); - } - } - - /** - * Moves the channel specified by $cid to the parent channel specified with $pid. - * - * @param integer $cid - * @param integer $pid - * @param integer $order - * @return void - */ - public function channelMove($cid, $pid, $order = null) - { - $this->execute("channelmove", array("cid" => $cid, "cpid" => $pid, "order" => $order)); - $this->channelListReset(); - } - - /** - * Returns TRUE if the given TeamSpeak3_Node_Channel object is a spacer. - * - * @param TeamSpeak3_Node_Channel $channel - * @return boolean - */ - public function channelIsSpacer(TeamSpeak3_Node_Channel $channel) - { - return (preg_match("/\[[^\]]*spacer[^\]]*\]/", $channel) && $channel["channel_flag_permanent"] && !$channel["pid"]) ? TRUE : FALSE; - } - - /** - * Creates a new channel spacer and returns the new ID. The first parameter $ident is used to create a - * unique spacer name on the virtual server. - * - * @param string $ident - * @param mixed $type - * @param integer $align - * @param integer $order - * @param integer $maxclients - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return integer - */ - public function channelSpacerCreate($ident, $type = TeamSpeak3::SPACER_SOLIDLINE, $align = TeamSpeak3::SPACER_ALIGN_REPEAT, $order = null, $maxclients = 0) - { - $properties = array( - "channel_name_phonetic" => "channel spacer", - "channel_codec" => TeamSpeak3::CODEC_OPUS_VOICE, - "channel_codec_quality" => 0x00, - "channel_flag_permanent" => TRUE, - "channel_flag_maxclients_unlimited" => FALSE, - "channel_flag_maxfamilyclients_unlimited" => FALSE, - "channel_flag_maxfamilyclients_inherited" => FALSE, - "channel_maxclients" => $maxclients, - "channel_order" => $order, - ); - - switch($align) - { - case TeamSpeak3::SPACER_ALIGN_REPEAT: - $properties["channel_name"] = "[*spacer" . strval($ident) . "]"; - break; - - case TeamSpeak3::SPACER_ALIGN_LEFT: - $properties["channel_name"] = "[lspacer" . strval($ident) . "]"; - break; - - case TeamSpeak3::SPACER_ALIGN_RIGHT: - $properties["channel_name"] = "[rspacer" . strval($ident) . "]"; - break; - - case TeamSpeak3::SPACER_ALIGN_CENTER: - $properties["channel_name"] = "[cspacer" . strval($ident) . "]"; - break; - - default: - throw new TeamSpeak3_Adapter_ServerQuery_Exception("missing required parameter", 0x606); - break; - } - - switch($type) - { - case (string) TeamSpeak3::SPACER_SOLIDLINE: - $properties["channel_name"] .= "___"; - break; - - case (string) TeamSpeak3::SPACER_DASHLINE: - $properties["channel_name"] .= "---"; - break; - - case (string) TeamSpeak3::SPACER_DOTLINE: - $properties["channel_name"] .= "..."; - break; - - case (string) TeamSpeak3::SPACER_DASHDOTLINE: - $properties["channel_name"] .= "-.-"; - break; - - case (string) TeamSpeak3::SPACER_DASHDOTDOTLINE: - $properties["channel_name"] .= "-.."; - break; - - default: - $properties["channel_name"] .= strval($type); - break; - } - - return $this->channelCreate($properties); - } - - /** - * Returns the possible type of a channel spacer. - * - * @param integer $cid - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return integer - */ - public function channelSpacerGetType($cid) - { - $channel = $this->channelGetById($cid); - - if(!$this->channelIsSpacer($channel)) - { - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid channel flags", 0x307); - } - - switch($channel["channel_name"]->section("]", 1)) - { - case "___": - return TeamSpeak3::SPACER_SOLIDLINE; - - case "---": - return TeamSpeak3::SPACER_DASHLINE; - - case "...": - return TeamSpeak3::SPACER_DOTLINE; - - case "-.-": - return TeamSpeak3::SPACER_DASHDOTLINE; - - case "-..": - return TeamSpeak3::SPACER_DASHDOTDOTLINE; - - default: - return TeamSpeak3::SPACER_CUSTOM; - } - } - - /** - * Returns the possible alignment of a channel spacer. - * - * @param integer $cid - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return integer - */ - public function channelSpacerGetAlign($cid) - { - $channel = $this->channelGetById($cid); - - if(!$this->channelIsSpacer($channel) || !preg_match("/\[(.*)spacer.*\]/", $channel, $matches) || !isset($matches[1])) - { - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid channel flags", 0x307); - } - - switch($matches[1]) - { - case "*": - return TeamSpeak3::SPACER_ALIGN_REPEAT; - - case "c": - return TeamSpeak3::SPACER_ALIGN_CENTER; - - case "r": - return TeamSpeak3::SPACER_ALIGN_RIGHT; - - default: - return TeamSpeak3::SPACER_ALIGN_LEFT; - } - } - - /** - * Returns a list of permissions defined for a specific channel. - * - * @param integer $cid - * @param boolean $permsid - * @return array - */ - public function channelPermList($cid, $permsid = FALSE) - { - return $this->execute("channelpermlist", array("cid" => $cid, $permsid ? "-permsid" : null))->toAssocArray($permsid ? "permsid" : "permid"); - } - - /** - * Adds a set of specified permissions to a channel. Multiple permissions can be added by - * providing the two parameters of each permission. - * - * @param integer $cid - * @param integer $permid - * @param integer $permvalue - * @return void - */ - public function channelPermAssign($cid, $permid, $permvalue) - { - if(!is_array($permid)) - { - $permident = (is_numeric($permid)) ? "permid" : "permsid"; - } - else - { - $permident = (is_numeric(current($permid))) ? "permid" : "permsid"; - } - - $this->execute("channeladdperm", array("cid" => $cid, $permident => $permid, "permvalue" => $permvalue)); - } - - /** - * Removes a set of specified permissions from a channel. Multiple permissions can be removed at once. - * - * @param integer $cid - * @param integer $permid - * @return void - */ - public function channelPermRemove($cid, $permid) - { - if(!is_array($permid)) - { - $permident = (is_numeric($permid)) ? "permid" : "permsid"; - } - else - { - $permident = (is_numeric(current($permid))) ? "permid" : "permsid"; - } - - $this->execute("channeldelperm", array("cid" => $cid, $permident => $permid)); - } - - /** - * Returns a list of permissions defined for a client in a specific channel. - * - * @param integer $cid - * @param integer $cldbid - * @param boolean $permsid - * @return array - */ - public function channelClientPermList($cid, $cldbid, $permsid = FALSE) - { - return $this->execute("channelclientpermlist", array("cid" => $cid, "cldbid" => $cldbid, $permsid ? "-permsid" : null))->toAssocArray($permsid ? "permsid" : "permid"); - } - - /** - * Adds a set of specified permissions to a client in a specific channel. Multiple permissions can be added by - * providing the two parameters of each permission. - * - * @param integer $cid - * @param integer $cldbid - * @param integer $permid - * @param integer $permvalue - * @return void - */ - public function channelClientPermAssign($cid, $cldbid, $permid, $permvalue) - { - if(!is_array($permid)) - { - $permident = (is_numeric($permid)) ? "permid" : "permsid"; - } - else - { - $permident = (is_numeric(current($permid))) ? "permid" : "permsid"; - } - - $this->execute("channelclientaddperm", array("cid" => $cid, "cldbid" => $cldbid, $permident => $permid, "permvalue" => $permvalue)); - } - - /** - * Removes a set of specified permissions from a client in a specific channel. Multiple permissions can be removed at once. - * - * @param integer $cid - * @param integer $cldbid - * @param integer $permid - * @return void - */ - public function channelClientPermRemove($cid, $cldbid, $permid) - { - if(!is_array($permid)) - { - $permident = (is_numeric($permid)) ? "permid" : "permsid"; - } - else - { - $permident = (is_numeric(current($permid))) ? "permid" : "permsid"; - } - - $this->execute("channelclientdelperm", array("cid" => $cid, "cldbid" => $cldbid, $permident => $permid)); - } - - /** - * Returns a list of files and directories stored in the specified channels file repository. - * - * @param integer $cid - * @param string $cpw - * @param string $path - * @param boolean $recursive - * @return array - */ - public function channelFileList($cid, $cpw = "", $path = "/", $recursive = FALSE) - { - $files = $this->execute("ftgetfilelist", array("cid" => $cid, "cpw" => $cpw, "path" => $path))->toArray(); - $count = count($files); - - for($i = 0; $i < $count; $i++) - { - $files[$i]["sid"] = $this->getId(); - $files[$i]["cid"] = $files[0]["cid"]; - $files[$i]["path"] = $files[0]["path"]; - $files[$i]["src"] = new TeamSpeak3_Helper_String($cid ? $files[$i]["path"] : "/"); - - if(!$files[$i]["src"]->endsWith("/")) - { - $files[$i]["src"]->append("/"); - } - - $files[$i]["src"]->append($files[$i]["name"]); - - if($recursive && $files[$i]["type"] == TeamSpeak3::FILE_TYPE_DIRECTORY) - { - $files = array_merge($files, $this->channelFileList($cid, $cpw, $path . $files[$i]["name"], $recursive)); - } - } - - uasort($files, array(__CLASS__, "sortFileList")); - - return $files; - } - - /** - * Returns detailed information about the specified file stored in a channels file repository. - * - * @param integer $cid - * @param string $cpw - * @param string $name - * @return array - */ - public function channelFileInfo($cid, $cpw = "", $name = "/") - { - $info = $this->execute("ftgetfileinfo", array("cid" => $cid, "cpw" => $cpw, "name" => $name))->toArray(); - - return array_pop($info); - } - - /** - * Renames a file in a channels file repository. If the two parameters $tcid and $tcpw are specified, the file - * will be moved into another channels file repository. - * - * @param integer $cid - * @param string $cpw - * @param string $oldname - * @param string $newname - * @param integer $tcid - * @param string $tcpw - * @return void - */ - public function channelFileRename($cid, $cpw = "", $oldname = "/", $newname = "/", $tcid = null, $tcpw = null) - { - $this->execute("ftrenamefile", array("cid" => $cid, "cpw" => $cpw, "oldname" => $oldname, "newname" => $newname, "tcid" => $tcid, "tcpw" => $tcpw)); - } - - /** - * Deletes one or more files stored in a channels file repository. - * - * @param integer $cid - * @param string $cpw - * @param string $name - * @return void - */ - public function channelFileDelete($cid, $cpw = "", $name = "/") - { - $this->execute("ftdeletefile", array("cid" => $cid, "cpw" => $cpw, "name" => $name)); - } - - /** - * Creates new directory in a channels file repository. - * - * @param integer $cid - * @param string $cpw - * @param string $dirname - * @return void - */ - public function channelDirCreate($cid, $cpw = "", $dirname = "/") - { - $this->execute("ftcreatedir", array("cid" => $cid, "cpw" => $cpw, "dirname" => $dirname)); - } - - /** - * Returns the level of a channel. - * - * @param integer $cid - * @return integer - */ - public function channelGetLevel($cid) - { - $channel = $this->channelGetById($cid); - $levelno = 0; - - if($channel["pid"]) - { - $levelno = $this->channelGetLevel($channel["pid"])+1; - } - - return $levelno; - } - - /** - * Returns the pathway of a channel which can be used as a clients default channel. - * - * @param integer $cid - * @return string - */ - public function channelGetPathway($cid) - { - $channel = $this->channelGetById($cid); - $pathway = $channel["channel_name"]; - - if($channel["pid"]) - { - $pathway = $this->channelGetPathway($channel["pid"]) . "/" . $channel["channel_name"]; - } - - return $pathway; - } - - /** - * Returns the TeamSpeak3_Node_Channel object matching the given ID. - * - * @param integer $cid - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return TeamSpeak3_Node_Channel - */ - public function channelGetById($cid) - { - if(!array_key_exists((string) $cid, $this->channelList())) - { - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid channelID", 0x300); - } - - return $this->channelList[intval((string) $cid)]; - } - - /** - * Returns the TeamSpeak3_Node_Channel object matching the given name. - * - * @param string $name - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return TeamSpeak3_Node_Channel - */ - public function channelGetByName($name) - { - foreach($this->channelList() as $channel) - { - if($channel["channel_name"] == $name) return $channel; - } - - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid channelID", 0x300); - } - - /** - * Returns an array filled with TeamSpeak3_Node_Client objects. - * - * @param array $filter - * @return array - */ - public function clientList(array $filter = array()) - { - if($this->clientList === null) - { - $clients = $this->request("clientlist -uid -away -badges -voice -info -times -groups -icon -country -ip")->toAssocArray("clid"); - - $this->clientList = array(); - - foreach($clients as $clid => $client) - { - if($this->getParent()->getExcludeQueryClients() && $client["client_type"]) continue; - - $this->clientList[$clid] = new TeamSpeak3_Node_Client($this, $client); - } - - uasort($this->clientList, array(__CLASS__, "sortClientList")); - - $this->resetNodeList(); - } - - return $this->filterList($this->clientList, $filter); - } - - /** - * Resets the list of clients online. - * - * @return void - */ - public function clientListReset() - { - $this->resetNodeList(); - $this->clientList = null; - } - - /** - * Returns a list of clients matching a given name pattern. - * - * @param string $pattern - * @return array - */ - public function clientFind($pattern) - { - return $this->execute("clientfind", array("pattern" => $pattern))->toAssocArray("clid"); - } - - /** - * Returns a list of client identities known by the virtual server. By default, the server spits out 25 entries - * at once. - * - * @param integer $offset - * @param integer $limit - * @return array - */ - public function clientListDb($offset = null, $limit = null) - { - return $this->execute("clientdblist -count", array("start" => $offset, "duration" => $limit))->toAssocArray("cldbid"); - } - - /** - * Returns the number of client identities known by the virtual server. - * - * @return integer - */ - public function clientCountDb() - { - return current($this->execute("clientdblist -count", array("duration" => 1))->toList("count")); - } - - /** - * Returns a list of properties from the database for the client specified by $cldbid. - * - * @param integer $cldbid - * @return array - */ - public function clientInfoDb($cldbid) - { - return $this->execute("clientdbinfo", array("cldbid" => $cldbid))->toList(); - } - - /** - * Returns a list of client database IDs matching a given pattern. You can either search for a clients - * last known nickname or his unique identity by using the $uid option. - * - * @param string $pattern - * @param boolean $uid - * @return array - */ - public function clientFindDb($pattern, $uid = FALSE) - { - return array_keys($this->execute("clientdbfind", array("pattern" => $pattern, ($uid) ? "-uid" : null))->toAssocArray("cldbid")); - } - - /** - * Returns the number of regular clients online. - * - * @return integer - */ - public function clientCount() - { - if($this->isOffline()) return 0; - - return $this["virtualserver_clientsonline"]-$this["virtualserver_queryclientsonline"]; - } - - /** - * Returns the TeamSpeak3_Node_Client object matching the given ID. - * - * @param integer $clid - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return TeamSpeak3_Node_Client - */ - public function clientGetById($clid) - { - if(!array_key_exists((string) $clid, $this->clientList())) - { - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid clientID", 0x200); - } - - return $this->clientList[intval((string) $clid)]; - } - - /** - * Returns the TeamSpeak3_Node_Client object matching the given name. - * - * @param string $name - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return TeamSpeak3_Node_Client - */ - public function clientGetByName($name) - { - foreach($this->clientList() as $client) - { - if($client["client_nickname"] == $name) return $client; - } - - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid clientID", 0x200); - } - - /** - * Returns the TeamSpeak3_Node_Client object matching the given unique identifier. - * - * @param string $uid - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return TeamSpeak3_Node_Client - */ - public function clientGetByUid($uid) - { - foreach($this->clientList() as $client) - { - if($client["client_unique_identifier"] == $uid) return $client; - } - - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid clientID", 0x200); - } - - /** - * Returns the TeamSpeak3_Node_Client object matching the given database ID. - * - * @param integer $dbid - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return TeamSpeak3_Node_Client - */ - public function clientGetByDbid($dbid) - { - foreach($this->clientList() as $client) - { - if($client["client_database_id"] == $dbid) return $client; - } - - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid clientID", 0x200); - } - - /** - * Returns an array containing the last known nickname and the database ID of the client matching - * the unique identifier specified with $cluid. - * - * @param string $cluid - * @return array - */ - public function clientGetNameByUid($cluid) - { - return $this->execute("clientgetnamefromuid", array("cluid" => $cluid))->toList(); - } - - /** - * Returns an array containing a list of active client connections using the unique identifier - * specified with $cluid. - * - * @param string $cluid - * @return array - */ - public function clientGetIdsByUid($cluid) - { - return $this->execute("clientgetids", array("cluid" => $cluid))->toAssocArray("clid"); - } - - /** - * Returns an array containing the last known nickname and the unique identifier of the client - * matching the database ID specified with $cldbid. - * - * @param string $cldbid - * @return array - */ - public function clientGetNameByDbid($cldbid) - { - return $this->execute("clientgetnamefromdbid", array("cldbid" => $cldbid))->toList(); - } - - /** - * Returns an array containing the names and IDs of all server groups the client specified with - * $cldbid is is currently residing in. - * - * @param string $cldbid - * @return array - */ - public function clientGetServerGroupsByDbid($cldbid) - { - return $this->execute("servergroupsbyclientid", array("cldbid" => $cldbid))->toAssocArray("sgid"); - } - - /** - * Moves a client to another channel. - * - * @param integer $clid - * @param integer $cid - * @param string $cpw - * @return void - */ - public function clientMove($clid, $cid, $cpw = null) - { - $this->clientListReset(); - - $this->execute("clientmove", array("clid" => $clid, "cid" => $cid, "cpw" => $cpw)); - - if($clid instanceof TeamSpeak3_Node_Abstract) - { - $clid = $clid->getId(); - } - - if($cid instanceof TeamSpeak3_Node_Abstract) - { - $cid = $cid->getId(); - } - - if(!is_array($clid) && $clid == $this->whoamiGet("client_id")) - { - $this->getParent()->whoamiSet("client_channel_id", $cid); - } - } - - /** - * Kicks one or more clients from their currently joined channel or from the server. - * - * @param integer $clid - * @param integer $reasonid - * @param string $reasonmsg - * @return void - */ - public function clientKick($clid, $reasonid = TeamSpeak3::KICK_CHANNEL, $reasonmsg = null) - { - $this->clientListReset(); - - $this->execute("clientkick", array("clid" => $clid, "reasonid" => $reasonid, "reasonmsg" => $reasonmsg)); - } - - /** - * Sends a poke message to a client. - * - * @param integer $clid - * @param string $msg - * @return void - */ - public function clientPoke($clid, $msg) - { - $this->execute("clientpoke", array("clid" => $clid, "msg" => $msg)); - } - - /** - * Bans the client specified with ID $clid from the server. Please note that this will create two separate - * ban rules for the targeted clients IP address and his unique identifier. - * - * @param integer $clid - * @param integer $timeseconds - * @param string $reason - * @return array - */ - public function clientBan($clid, $timeseconds = null, $reason = null) - { - $this->clientListReset(); - - $bans = $this->execute("banclient", array("clid" => $clid, "time" => $timeseconds, "banreason" => $reason))->toAssocArray("banid"); - - return array_keys($bans); - } - - /** - * Changes the clients properties using given properties. - * - * @param string $cldbid - * @param array $properties - * @return void - */ - public function clientModifyDb($cldbid, array $properties) - { - $properties["cldbid"] = $cldbid; - - $this->execute("clientdbedit", $properties); - } - - /** - * Deletes a clients properties from the database. - * - * @param string $cldbid - * @return void - */ - public function clientDeleteDb($cldbid) - { - $this->execute("clientdbdelete", array("cldbid" => $cldbid)); - } - - /** - * Sets the channel group of a client to the ID specified. - * - * @param integer $cldbid - * @param integer $cid - * @param integer $cgid - * @return void - */ - public function clientSetChannelGroup($cldbid, $cid, $cgid) - { - $this->execute("setclientchannelgroup", array("cldbid" => $cldbid, "cid" => $cid, "cgid" => $cgid)); - } - - /** - * Returns a list of permissions defined for a client. - * - * @param integer $cldbid - * @param boolean $permsid - * @return array - */ - public function clientPermList($cldbid, $permsid = FALSE) - { - $this->clientListReset(); - - return $this->execute("clientpermlist", array("cldbid" => $cldbid, $permsid ? "-permsid" : null))->toAssocArray($permsid ? "permsid" : "permid"); - } - - /** - * Adds a set of specified permissions to a client. Multiple permissions can be added by providing - * the three parameters of each permission. - * - * @param integer $cldbid - * @param integer $permid - * @param integer $permvalue - * @param integer $permskip - * @return void - */ - public function clientPermAssign($cldbid, $permid, $permvalue, $permskip = FALSE) - { - if(!is_array($permid)) - { - $permident = (is_numeric($permid)) ? "permid" : "permsid"; - } - else - { - $permident = (is_numeric(current($permid))) ? "permid" : "permsid"; - } - - $this->execute("clientaddperm", array("cldbid" => $cldbid, $permident => $permid, "permvalue" => $permvalue, "permskip" => $permskip)); - } - - /** - * Removes a set of specified permissions from a client. Multiple permissions can be removed at once. - * - * @param integer $cldbid - * @param integer $permid - * @return void - */ - public function clientPermRemove($cldbid, $permid) - { - if(!is_array($permid)) - { - $permident = (is_numeric($permid)) ? "permid" : "permsid"; - } - else - { - $permident = (is_numeric(current($permid))) ? "permid" : "permsid"; - } - - $this->execute("clientdelperm", array("cldbid" => $cldbid, $permident => $permid)); - } - - /** - * Returns a list of server groups available. - * - * @param filter $filter - * @return array - */ - public function serverGroupList(array $filter = array()) - { - if($this->sgroupList === null) - { - $this->sgroupList = $this->request("servergrouplist")->toAssocArray("sgid"); - - foreach($this->sgroupList as $sgid => $group) - { - $this->sgroupList[$sgid] = new TeamSpeak3_Node_Servergroup($this, $group); - } - - uasort($this->sgroupList, array(__CLASS__, "sortGroupList")); - } - - return $this->filterList($this->sgroupList, $filter); - } - - /** - * Resets the list of server groups. - * - * @return void - */ - public function serverGroupListReset() - { - $this->sgroupList = null; - } - - /** - * Creates a new server group using the name specified with $name and returns its ID. - * - * @param string $name - * @param integer $type - * @return integer - */ - public function serverGroupCreate($name, $type = TeamSpeak3::GROUP_DBTYPE_REGULAR) - { - $this->serverGroupListReset(); - - $sgid = $this->execute("servergroupadd", array("name" => $name, "type" => $type))->toList(); - - return $sgid["sgid"]; - } - - /** - * Creates a copy of an existing server group specified by $ssgid and returns the new groups ID. - * - * @param integer $ssgid - * @param string $name - * @param integer $tsgid - * @param integer $type - * @return integer - */ - public function serverGroupCopy($ssgid, $name = null, $tsgid = 0, $type = TeamSpeak3::GROUP_DBTYPE_REGULAR) - { - $this->serverGroupListReset(); - - $sgid = $this->execute("servergroupcopy", array("ssgid" => $ssgid, "tsgid" => $tsgid, "name" => $name, "type" => $type))->toList(); - - if($tsgid && $name) - { - $this->serverGroupRename($tsgid, $name); - } - - return count($sgid) ? $sgid["sgid"] : intval($tsgid); - } - - /** - * Renames the server group specified with $sgid. - * - * @param integer $sgid - * @param string $name - * @return void - */ - public function serverGroupRename($sgid, $name) - { - $this->serverGroupListReset(); - - $this->execute("servergrouprename", array("sgid" => $sgid, "name" => $name)); - } - - /** - * Deletes the server group specified with $sgid. If $force is set to 1, the server group - * will be deleted even if there are clients within. - * - * @param integer $sgid - * @param boolean $force - * @return void - */ - public function serverGroupDelete($sgid, $force = FALSE) - { - $this->serverGroupListReset(); - - $this->execute("servergroupdel", array("sgid" => $sgid, "force" => $force)); - } - - /** - * Returns the TeamSpeak3_Node_Servergroup object matching the given ID. - * - * @param integer $sgid - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return TeamSpeak3_Node_Servergroup - */ - public function serverGroupGetById($sgid) - { - if(!array_key_exists((string) $sgid, $this->serverGroupList())) - { - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid groupID", 0xA00); - } - - return $this->sgroupList[intval((string) $sgid)]; - } - - /** - * Returns the TeamSpeak3_Node_Servergroup object matching the given name. - * - * @param string $name - * @param integer $type - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return TeamSpeak3_Node_Servergroup - */ - public function serverGroupGetByName($name, $type = TeamSpeak3::GROUP_DBTYPE_REGULAR) - { - foreach($this->serverGroupList() as $group) - { - if($group["name"] == $name && $group["type"] == $type) return $group; - } - - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid groupID", 0xA00); - } - - /** - * Returns a list of permissions assigned to the server group specified. - * - * @param integer $sgid - * @param boolean $permsid - * @return array - */ - public function serverGroupPermList($sgid, $permsid = FALSE) - { - return $this->execute("servergrouppermlist", array("sgid" => $sgid, $permsid ? "-permsid" : null))->toAssocArray($permsid ? "permsid" : "permid"); - } - - /** - * Adds a set of specified permissions to the server group specified. Multiple permissions - * can be added by providing the four parameters of each permission in separate arrays. - * - * @param integer $sgid - * @param integer $permid - * @param integer $permvalue - * @param integer $permnegated - * @param integer $permskip - * @return void - */ - public function serverGroupPermAssign($sgid, $permid, $permvalue, $permnegated = FALSE, $permskip = FALSE) - { - if(!is_array($permid)) - { - $permident = (is_numeric($permid)) ? "permid" : "permsid"; - } - else - { - $permident = (is_numeric(current($permid))) ? "permid" : "permsid"; - } - - $this->execute("servergroupaddperm", array("sgid" => $sgid, $permident => $permid, "permvalue" => $permvalue, "permnegated" => $permnegated, "permskip" => $permskip)); - } - - /** - * Removes a set of specified permissions from the server group specified with $sgid. Multiple - * permissions can be removed at once. - * - * @param integer $sgid - * @param integer $permid - * @return void - */ - public function serverGroupPermRemove($sgid, $permid) - { - if(!is_array($permid)) - { - $permident = (is_numeric($permid)) ? "permid" : "permsid"; - } - else - { - $permident = (is_numeric(current($permid))) ? "permid" : "permsid"; - } - - $this->execute("servergroupdelperm", array("sgid" => $sgid, $permident => $permid)); - } - - /** - * Returns a list of clients assigned to the server group specified. - * - * @param integer $sgid - * @return array - */ - public function serverGroupClientList($sgid) - { - if($this["virtualserver_default_server_group"] == $sgid) - { - return array(); - } - - return $this->execute("servergroupclientlist", array("sgid" => $sgid, "-names"))->toAssocArray("cldbid"); - } - - /** - * Adds a client to the server group specified. Please note that a client cannot be - * added to default groups or template groups. - * - * @param integer $sgid - * @param integer $cldbid - * @return void - */ - public function serverGroupClientAdd($sgid, $cldbid) - { - $this->clientListReset(); - - $this->execute("servergroupaddclient", array("sgid" => $sgid, "cldbid" => $cldbid)); - } - - /** - * Removes a client from the server group specified. - * - * @param integer $sgid - * @param integer $cldbid - * @return void - */ - public function serverGroupClientDel($sgid, $cldbid) - { - $this->execute("servergroupdelclient", array("sgid" => $sgid, "cldbid" => $cldbid)); - } - - /** - * Returns an ordered array of regular server groups available based on a pre-defined - * set of rules. - * - * @return array - */ - public function serverGroupGetProfiles() - { - $profiles = array(); - - foreach($this->serverGroupList() as $sgid => $sgroup) - { - if($sgroup["type"] != TeamSpeak3::GROUP_DBTYPE_REGULAR) continue; - - $profiles[$sgid] = array( - "b_permission_modify_power_ignore" => 0, - "i_group_needed_member_add_power" => 0, - "i_group_member_add_power" => 0, - "i_group_needed_member_remove_power" => 0, - "i_group_member_remove_power" => 0, - "i_needed_modify_power_count" => 0, - "i_needed_modify_power_total" => 0, - "i_permission_modify_power" => 0, - "i_group_needed_modify_power" => 0, - "i_group_modify_power" => 0, - "i_client_needed_modify_power" => 0, - "i_client_modify_power" => 0, - "b_virtualserver_servergroup_create" => 0, - "b_virtualserver_servergroup_delete" => 0, - "b_client_ignore_bans" => 0, - "b_client_ignore_antiflood" => 0, - "b_group_is_permanent" => 0, - "i_client_needed_ban_power" => 0, - "i_client_needed_kick_power" => 0, - "i_client_needed_move_power" => 0, - "i_client_talk_power" => 0, - "__sgid" => $sgid, - "__name" => $sgroup->toString(), - "__node" => $sgroup, - ); - - try - { - $perms = $this->serverGroupPermList($sgid, TRUE); - $grant = isset($perms["i_permission_modify_power"]) ? $perms["i_permission_modify_power"]["permvalue"] : null; - } - catch(TeamSpeak3_Adapter_ServerQuery_Exception $e) - { - /* ERROR_database_empty_result */ - if($e->getCode() != 0x501) throw $e; - - $perms = array(); - $grant = null; - } - - foreach($perms as $permsid => $perm) - { - if(in_array($permsid, array_keys($profiles[$sgid]))) - { - $profiles[$sgid][$permsid] = $perm["permvalue"]; - } - elseif(TeamSpeak3_Helper_String::factory($permsid)->startsWith("i_needed_modify_power_")) - { - if(!$grant || $perm["permvalue"] > $grant) continue; - - $profiles[$sgid]["i_needed_modify_power_total"] = $profiles[$sgid]["i_needed_modify_power_total"]+$perm["permvalue"]; - $profiles[$sgid]["i_needed_modify_power_count"]++; - } - } - } - - array_multisort($profiles, SORT_DESC); - - return $profiles; - } - - /** - * Tries to identify the post powerful/weakest server group on the virtual server and returns - * the ID. - * - * @param integer $mode - * @return TeamSpeak3_Node_Servergroup - */ - public function serverGroupIdentify($mode = TeamSpeak3::GROUP_IDENTIFIY_STRONGEST) - { - $profiles = $this->serverGroupGetProfiles(); - - $best_guess_profile = ($mode == TeamSpeak3::GROUP_IDENTIFIY_STRONGEST) ? array_shift($profiles) : array_pop($profiles); - - return $this->serverGroupGetById($best_guess_profile["__sgid"]); - } - - /** - * Returns a list of channel groups available. - * - * @param array $filter - * @return array - */ - public function channelGroupList(array $filter = array()) - { - if($this->cgroupList === null) - { - $this->cgroupList = $this->request("channelgrouplist")->toAssocArray("cgid"); - - foreach($this->cgroupList as $cgid => $group) - { - $this->cgroupList[$cgid] = new TeamSpeak3_Node_Channelgroup($this, $group); - } - - uasort($this->cgroupList, array(__CLASS__, "sortGroupList")); - } - - return $this->filterList($this->cgroupList, $filter); - } - - /** - * Resets the list of channel groups. - * - * @return void - */ - public function channelGroupListReset() - { - $this->cgroupList = null; - } - - /** - * Creates a new channel group using the name specified with $name and returns its ID. - * - * @param string $name - * @param integer $type - * @return integer - */ - public function channelGroupCreate($name, $type = TeamSpeak3::GROUP_DBTYPE_REGULAR) - { - $this->channelGroupListReset(); - - $cgid = $this->execute("channelgroupadd", array("name" => $name, "type" => $type))->toList(); - - return $cgid["cgid"]; - } - - /** - * Creates a copy of an existing channel group specified by $scgid and returns the new groups ID. - * - * @param integer $scgid - * @param string $name - * @param integer $tcgid - * @param integer $type - * @return integer - */ - public function channelGroupCopy($scgid, $name = null, $tcgid = 0, $type = TeamSpeak3::GROUP_DBTYPE_REGULAR) - { - $this->channelGroupListReset(); - - $cgid = $this->execute("channelgroupcopy", array("scgid" => $scgid, "tcgid" => $tcgid, "name" => $name, "type" => $type))->toList(); - - if($tcgid && $name) - { - $this->channelGroupRename($tcgid, $name); - } - - return count($cgid) ? $cgid["cgid"] : intval($tcgid); - } - - /** - * Renames the channel group specified with $cgid. - * - * @param integer $cgid - * @param string $name - * @return void - */ - public function channelGroupRename($cgid, $name) - { - $this->channelGroupListReset(); - - $this->execute("channelgrouprename", array("cgid" => $cgid, "name" => $name)); - } - - /** - * Deletes the channel group specified with $cgid. If $force is set to 1, the channel group - * will be deleted even if there are clients within. - * - * @param integer $sgid - * @param boolean $force - * @return void - */ - public function channelGroupDelete($cgid, $force = FALSE) - { - $this->channelGroupListReset(); - - $this->execute("channelgroupdel", array("cgid" => $cgid, "force" => $force)); - } - - /** - * Returns the TeamSpeak3_Node_Channelgroup object matching the given ID. - * - * @param integer $cgid - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return TeamSpeak3_Node_Channelgroup - */ - public function channelGroupGetById($cgid) - { - if(!array_key_exists((string) $cgid, $this->channelGroupList())) - { - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid groupID", 0xA00); - } - - return $this->cgroupList[intval((string) $cgid)]; - } - - /** - * Returns the TeamSpeak3_Node_Channelgroup object matching the given name. - * - * @param string $name - * @param integer $type - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return TeamSpeak3_Node_Channelgroup - */ - public function channelGroupGetByName($name, $type = TeamSpeak3::GROUP_DBTYPE_REGULAR) - { - foreach($this->channelGroupList() as $group) - { - if($group["name"] == $name && $group["type"] == $type) return $group; - } - - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid groupID", 0xA00); - } - - /** - * Returns a list of permissions assigned to the channel group specified. - * - * @param integer $cgid - * @param boolean $permsid - * @return array - */ - public function channelGroupPermList($cgid, $permsid = FALSE) - { - return $this->execute("channelgrouppermlist", array("cgid" => $cgid, $permsid ? "-permsid" : null))->toAssocArray($permsid ? "permsid" : "permid"); - } - - /** - * Adds a set of specified permissions to the channel group specified. Multiple permissions - * can be added by providing the two parameters of each permission in separate arrays. - * - * @param integer $cgid - * @param integer $permid - * @param integer $permvalue - * @return void - */ - public function channelGroupPermAssign($cgid, $permid, $permvalue) - { - if(!is_array($permid)) - { - $permident = (is_numeric($permid)) ? "permid" : "permsid"; - } - else - { - $permident = (is_numeric(current($permid))) ? "permid" : "permsid"; - } - - $this->execute("channelgroupaddperm", array("cgid" => $cgid, $permident => $permid, "permvalue" => $permvalue)); - } - - /** - * Removes a set of specified permissions from the channel group specified with $cgid. Multiple - * permissions can be removed at once. - * - * @param integer $cgid - * @param integer $permid - * @return void - */ - public function channelGroupPermRemove($cgid, $permid) - { - if(!is_array($permid)) - { - $permident = (is_numeric($permid)) ? "permid" : "permsid"; - } - else - { - $permident = (is_numeric(current($permid))) ? "permid" : "permsid"; - } - - $this->execute("channelgroupdelperm", array("cgid" => $cgid, $permident => $permid)); - } - - /** - * Returns all the client and/or channel IDs currently assigned to channel groups. All three - * parameters are optional so you're free to choose the most suitable combination for your - * requirements. - * - * @param integer $cgid - * @param integer $cid - * @param integer $cldbid - * @return array - */ - public function channelGroupClientList($cgid = null, $cid = null, $cldbid = null) - { - if($this["virtualserver_default_channel_group"] == $cgid) - { - return array(); - } - - return $this->execute("channelgroupclientlist", array("cgid" => $cgid, "cid" => $cid, "cldbid" => $cldbid))->toArray(); - } - - /** - * Restores the default permission settings on the virtual server and returns a new initial - * administrator privilege key. - * - * @return TeamSpeak3_Helper_String - */ - public function permReset() - { - $token = $this->request("permreset")->toList(); - - TeamSpeak3_Helper_Signal::getInstance()->emit("notifyTokencreated", $this, $token["token"]); - - return $token["token"]; - } - - /** - * Removes any assignment of the permission specified with $permid on the selected virtual server - * and returns the number of removed assignments on success. - * - * @param integer $permid - * @return integer - */ - public function permRemoveAny($permid) - { - $assignments = $this->permissionFind($permid); - - foreach($assignments as $assignment) - { - switch($assignment["t"]) - { - case TeamSpeak3::PERM_TYPE_SERVERGROUP: - $this->serverGroupPermRemove($assignment["id1"], $assignment["p"]); - break; - - case TeamSpeak3::PERM_TYPE_CLIENT: - $this->clientPermRemove($assignment["id2"], $assignment["p"]); - break; - - case TeamSpeak3::PERM_TYPE_CHANNEL: - $this->channelPermRemove($assignment["id2"], $assignment["p"]); - break; - - case TeamSpeak3::PERM_TYPE_CHANNELGROUP: - $this->channelGroupPermRemove($assignment["id1"], $assignment["p"]); - break; - - case TeamSpeak3::PERM_TYPE_CHANNELCLIENT: - $this->channelClientPermRemove($assignment["id2"], $assignment["id1"], $assignment["p"]); - break; - - default: - throw new TeamSpeak3_Adapter_ServerQuery_Exception("convert error", 0x604); - } - } - - return count($assignments); - } - - /** - * Initializes a file transfer upload. $clientftfid is an arbitrary ID to identify the file transfer on client-side. - * - * @param integer $clientftfid - * @param integer $cid - * @param string $name - * @param integer $size - * @param string $cpw - * @param boolean $overwrite - * @param boolean $resume - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return array - */ - public function transferInitUpload($clientftfid, $cid, $name, $size, $cpw = "", $overwrite = FALSE, $resume = FALSE) - { - $upload = $this->execute("ftinitupload", array("clientftfid" => $clientftfid, "cid" => $cid, "name" => $name, "cpw" => $cpw, "size" => $size, "overwrite" => $overwrite, "resume" => $resume))->toList(); - - if(array_key_exists("status", $upload) && $upload["status"] != 0x00) - { - throw new TeamSpeak3_Adapter_ServerQuery_Exception($upload["msg"], $upload["status"]); - } - - $upload["cid"] = $cid; - $upload["file"] = $name; - - if(!array_key_exists("ip", $upload) || $upload["ip"]->startsWith("0.0.0.0")) - { - $upload["ip"] = $this->getParent()->getAdapterHost(); - $upload["host"] = $upload["ip"]; - } - else - { - $upload["ip"] = $upload["ip"]->section(","); - $upload["host"] = $upload["ip"]; - } - - TeamSpeak3_Helper_Signal::getInstance()->emit("filetransferUploadInit", $upload["ftkey"], $upload); - - return $upload; - } - - /** - * Initializes a file transfer download. $clientftfid is an arbitrary ID to identify the file transfer on client-side. - * - * @param integer $clientftfid - * @param integer $cid - * @param string $name - * @param string $cpw - * @param integer $seekpos - * @throws TeamSpeak3_Adapter_ServerQuery_Exception - * @return array - */ - public function transferInitDownload($clientftfid, $cid, $name, $cpw = "", $seekpos = 0) - { - $download = $this->execute("ftinitdownload", array("clientftfid" => $clientftfid, "cid" => $cid, "name" => $name, "cpw" => $cpw, "seekpos" => $seekpos))->toList(); - - if(array_key_exists("status", $download) && $download["status"] != 0x00) - { - throw new TeamSpeak3_Adapter_ServerQuery_Exception($download["msg"], $download["status"]); - } - - $download["cid"] = $cid; - $download["file"] = $name; - - if(!array_key_exists("ip", $download) || $download["ip"]->startsWith("0.0.0.0")) - { - $download["ip"] = $this->getParent()->getAdapterHost(); - $download["host"] = $download["ip"]; - } - else - { - $download["ip"] = $download["ip"]->section(","); - $download["host"] = $download["ip"]; - } - - TeamSpeak3_Helper_Signal::getInstance()->emit("filetransferDownloadInit", $download["ftkey"], $download); - - return $download; - } - - /** - * Displays a list of running file transfers on the selected virtual server. The output contains the path to - * which a file is uploaded to, the current transfer rate in bytes per second, etc. - * - * @return array - */ - public function transferList() - { - return $this->request("ftlist")->toAssocArray("serverftfid"); - } - - /** - * Stops the running file transfer with server-side ID $serverftfid. - * - * @param integer $serverftfid - * @param boolean $delete - * @return void - */ - public function transferStop($serverftfid, $delete = FALSE) - { - $this->execute("ftstop", array("serverftfid" => $serverftfid, "delete" => $delete)); - } - - /** - * Downloads and returns the servers icon file content. - * - * @return TeamSpeak3_Helper_String - */ - public function iconDownload() - { - if($this->iconIsLocal("virtualserver_icon_id") || $this["virtualserver_icon_id"] == 0) return; - - $download = $this->transferInitDownload(rand(0x0000, 0xFFFF), 0, $this->iconGetName("virtualserver_icon_id")); - $transfer = TeamSpeak3::factory("filetransfer://" . (strstr($download["host"], ":") !== FALSE ? "[" . $download["host"] . "]" : $download["host"]) . ":" . $download["port"]); - - return $transfer->download($download["ftkey"], $download["size"]); - } - - /** - * Uploads a given icon file content to the server and returns the ID of the icon. - * - * @param string $data - * @return integer - */ - public function iconUpload($data) - { - $crc = crc32($data); - $size = strlen($data); - - $upload = $this->transferInitUpload(rand(0x0000, 0xFFFF), 0, "/icon_" . $crc, $size); - $transfer = TeamSpeak3::factory("filetransfer://" . (strstr($upload["host"], ":") !== FALSE ? "[" . $upload["host"] . "]" : $upload["host"]) . ":" . $upload["port"]); - - $transfer->upload($upload["ftkey"], $upload["seekpos"], $data); - - return $crc; - } - - /** - * Changes the virtual server configuration using given properties. - * - * @param array $properties - * @return void - */ - public function modify(array $properties) - { - $this->execute("serveredit", $properties); - $this->resetNodeInfo(); - } - - /** - * Sends a text message to all clients on the virtual server. - * - * @param string $msg - * @return void - */ - public function message($msg) - { - $this->execute("sendtextmessage", array("msg" => $msg, "target" => $this->getId(), "targetmode" => TeamSpeak3::TEXTMSG_SERVER)); - } - - /** - * Returns a list of offline messages you've received. The output contains the senders unique identifier, - * the messages subject, etc. - * - * @return array - */ - public function messageList() - { - return $this->request("messagelist")->toAssocArray("msgid"); - } - - /** - * Sends an offline message to the client specified by $cluid. - * - * @param string $cluid - * @param string $subject - * @param string $message - * @return void - */ - public function messageCreate($cluid, $subject, $message) - { - $this->execute("messageadd", array("cluid" => $cluid, "subject" => $subject, "message" => $message)); - } - - /** - * Deletes an existing offline message with ID $msgid from your inbox. - * - * @param integer $msgid - * @return void - */ - public function messageDelete($msgid) - { - $this->execute("messagedel", array("msgid" => $msgid)); - } - - /** - * Returns an existing offline message with ID $msgid from your inbox. - * - * @param integer $msgid - * @param boolean $flag_read - * @return array - */ - public function messageRead($msgid, $flag_read = TRUE) - { - $msg = $this->execute("messageget", array("msgid" => $msgid))->toList(); - - if($flag_read) - { - $this->execute("messageget", array("msgid" => $msgid, "flag" => $flag_read)); - } - - return $msg; - } - - /** - * Creates and returns snapshot data for the selected virtual server. - * - * @param string $mode - * @return string - */ - public function snapshotCreate($mode = TeamSpeak3::SNAPSHOT_STRING) - { - $snapshot = $this->request("serversnapshotcreate")->toString(FALSE); - - switch($mode) - { - case TeamSpeak3::SNAPSHOT_BASE64: - return $snapshot->toBase64(); - break; - - case TeamSpeak3::SNAPSHOT_HEXDEC: - return $snapshot->toHex(); - break; - - default: - return (string) $snapshot; - break; - } - } - - /** - * Deploys snapshot data on the selected virtual server. If no virtual server is selected (ID 0), - * the data will be used to create a new virtual server from scratch. - * - * @param string $data - * @param string $mode - * @return array - */ - public function snapshotDeploy($data, $mode = TeamSpeak3::SNAPSHOT_STRING) - { - switch($mode) - { - case TeamSpeak3::SNAPSHOT_BASE64: - $data = TeamSpeak3_Helper_String::fromBase64($data); - break; - - case TeamSpeak3::SNAPSHOT_HEXDEC: - $data = TeamSpeak3_Helper_String::fromHex($data); - break; - - default: - $data = TeamSpeak3_Helper_String::factory($data); - break; - } - - $detail = $this->request("serversnapshotdeploy " . $data)->toList(); - - if(array_key_exists("sid", $detail)) - { - TeamSpeak3_Helper_Signal::getInstance()->emit("notifyServercreated", $this->getParent(), $detail["sid"]); - } - - return $detail; - } - - /** - * Registers for a specified category of events on a virtual server to receive notification - * messages. Depending on the notifications you've registered for, the server will send you - * a message on every event. - * - * @param string $event - * @param integer $id - * @return void - */ - public function notifyRegister($event, $id = 0) - { - $this->execute("servernotifyregister", array("event" => $event, "id" => $id)); - } - - /** - * Unregisters all events previously registered with servernotifyregister so you will no - * longer receive notification messages. - * - * @return void - */ - public function notifyUnregister() - { - $this->request("servernotifyunregister"); - } - - /** - * Alias for privilegeKeyList(). - * - * @deprecated - */ - public function tokenList($translate = FALSE) - { - return $this->privilegeKeyList(); - } - - /** - * Returns a list of privilege keys (tokens) available. If $resolve is set to TRUE the values - * of token_id1 and token_id2 will be translated into the appropriate group and/or channel - * names. - * - * @param boolean $resolve - * @return array - */ - public function privilegeKeyList($resolve = FALSE) - { - $tokens = $this->request("privilegekeylist")->toAssocArray("token"); - - if($resolve) - { - foreach($tokens as $token => $array) - { - $func = $array["token_type"] ? "channelGroupGetById" : "serverGroupGetById"; - - try - { - $tokens[$token]["token_id1"] = $this->$func($array["token_id1"])->name; - } - catch(Exception $e) - { - /* ERROR_channel_invalid_id */ - if($e->getCode() != 0xA00) throw $e; - } - - try - { - if($array["token_type"]) $tokens[$token]["token_id2"] = $this->channelGetById($array["token_id2"])->getPathway(); - } - catch(Exception $e) - { - /* ERROR_permission_invalid_group_id */ - if($e->getCode() != 0x300) throw $e; - } - } - } - - return $tokens; - } - - /** - * Alias for privilegeKeyCreate(). - * - * @deprecated - */ - public function tokenCreate($type = TeamSpeak3::TOKEN_SERVERGROUP, $id1, $id2 = 0, $description = null, $customset = null) - { - return $this->privilegeKeyCreate($type, $id1, $id2, $description, $customset); - } - - /** - * Creates a new privilege key (token) and returns the key. - * - * @param integer $type - * @param integer $id1 - * @param integer $id2 - * @param string $description - * @param string $customset - * @return TeamSpeak3_Helper_String - */ - public function privilegeKeyCreate($type = TeamSpeak3::TOKEN_SERVERGROUP, $id1, $id2 = 0, $description = null, $customset = null) - { - $token = $this->execute("privilegekeyadd", array("tokentype" => $type, "tokenid1" => $id1, "tokenid2" => $id2, "tokendescription" => $description, "tokencustomset" => $customset))->toList(); - - TeamSpeak3_Helper_Signal::getInstance()->emit("notifyTokencreated", $this, $token["token"]); - - return $token["token"]; - } - - /** - * Alias for privilegeKeyDelete(). - * - * @deprecated - */ - public function tokenDelete($token) - { - $this->privilegeKeyDelete($token); - } - - /** - * Deletes a token specified by key $token. - * - * @param string $token - * @return void - */ - public function privilegeKeyDelete($token) - { - $this->execute("privilegekeydelete", array("token" => $token)); - } - - /** - * Alias for privilegeKeyUse(). - * - * @deprecated - */ - public function tokenUse($token) - { - $this->privilegeKeyUse($token); - } - - /** - * Use a token key gain access to a server or channel group. Please note that the server will - * automatically delete the token after it has been used. - * - * @param string $token - * @return void - */ - public function privilegeKeyUse($token) - { - $this->execute("privilegekeyuse", array("token" => $token)); - } - - /** - * Returns a list of custom client properties specified by $ident. - * - * @param string $ident - * @param string $pattern - * @return array - */ - public function customSearch($ident, $pattern = "%") - { - return $this->execute("customsearch", array("ident" => $ident, "pattern" => $pattern))->toArray(); - } - - /** - * Returns a list of custom properties for the client specified by $cldbid. - * - * @param integer $cldbid - * @return array - */ - public function customInfo($cldbid) - { - return $this->execute("custominfo", array("cldbid" => $cldbid))->toArray(); - } - - /** - * Returns a list of active bans on the selected virtual server. - * - * @return array - */ - public function banList() - { - return $this->request("banlist")->toAssocArray("banid"); - } - - /** - * Deletes all active ban rules from the server. - * - * @return void - */ - public function banListClear() - { - $this->request("bandelall"); - } - - /** - * Adds a new ban rule on the selected virtual server. All parameters are optional but at least one - * of the following rules must be set: ip, name, or uid. - * - * @param array $rules - * @param integer $timeseconds - * @param string $reason - * @return integer - */ - public function banCreate(array $rules, $timeseconds = null, $reason = null) - { - $rules["time"] = $timeseconds; - $rules["banreason"] = $reason; - - $banid = $this->execute("banadd", $rules)->toList(); - - return $banid["banid"]; - } - - /** - * Deletes the specified ban rule from the server. - * - * @param integer $banid - * @return void - */ - public function banDelete($banid) - { - $this->execute("bandel", array("banid" => $banid)); - } - - /** - * Returns a list of complaints on the selected virtual server. If $tcldbid is specified, only - * complaints about the targeted client will be shown. - * - * @param integer $tcldbid - * @return array - */ - public function complaintList($tcldbid = null) - { - return $this->execute("complainlist", array("tcldbid" => $tcldbid))->toArray(); - } - - /** - * Deletes all active complaints about the client with database ID $tcldbid from the server. - * - * @param integer $tcldbid - * @return void - */ - public function complaintListClear($tcldbid) - { - $this->execute("complaindelall", array("tcldbid" => $tcldbid)); - } - - /** - * Submits a complaint about the client with database ID $tcldbid to the server. - * - * @param integer $tcldbid - * @param string $message - * @return void - */ - public function complaintCreate($tcldbid, $message) - { - $this->execute("complainadd", array("tcldbid" => $tcldbid, "message" => $message)); - } - - /** - * Deletes the complaint about the client with ID $tcldbid submitted by the client with ID $fcldbid from the server. - * - * @param integer $tcldbid - * @param integer $fcldbid - * @return void - */ - public function complaintDelete($tcldbid, $fcldbid) - { - $this->execute("complaindel", array("tcldbid" => $tcldbid, "fcldbid" => $fcldbid)); - } - - /** - * Returns a list of temporary server passwords. - * - * @param boolean $resolve - * @return array - */ - public function tempPasswordList($resolve = FALSE) - { - $passwords = $this->request("servertemppasswordlist")->toAssocArray("pw_clear"); - - if($resolve) - { - foreach($passwords as $password => $array) - { - try - { - $channel = $this->channelGetById($array["tcid"]); - - $passwords[$password]["tcname"] = $channel->toString(); - $passwords[$password]["tcpath"] = $channel->getPathway(); - } - catch(Exception $e) - { - /* ERROR_channel_invalid_id */ - if($e->getCode() != 0xA00) throw $e; - } - } - } - - return $passwords; - } - - /** - * Sets a new temporary server password specified with $pw. The temporary password will be - * valid for the number of seconds specified with $duration. The client connecting with this - * password will automatically join the channel specified with $tcid. If tcid is set to 0, - * the client will join the default channel. - * - * @param string $pw - * @param integer $duration - * @param integer $tcid - * @param string $tcpw - * @param string $desc - * @return void - */ - public function tempPasswordCreate($pw, $duration, $tcid = 0, $tcpw = "", $desc = "") - { - $this->execute("servertemppasswordadd", array("pw" => $pw, "duration" => $duration, "tcid" => $tcid, "tcpw" => $tcpw, "desc" => $desc)); - } - - /** - * Deletes the temporary server password specified with $pw. - * - * @param string $pw - * @return void - */ - public function tempPasswordDelete($pw) - { - $this->execute("servertemppassworddel", array("pw" => $pw)); - } - - /** - * Displays a specified number of entries (1-100) from the servers log. - * - * @param integer $lines - * @param integer $begin_pos - * @param boolean $reverse - * @param boolean $instance - * @return array - */ - public function logView($lines = 30, $begin_pos = null, $reverse = null, $instance = null) - { - return $this->execute("logview", array("lines" => $lines, "begin_pos" => $begin_pos, "instance" => $instance, "reverse" => $reverse))->toArray(); - } - - /** - * Writes a custom entry into the virtual server log. - * - * @param string $logmsg - * @param integer $loglevel - * @return void - */ - public function logAdd($logmsg, $loglevel = TeamSpeak3::LOGLEVEL_INFO) - { - $this->execute("logadd", array("logmsg" => $logmsg, "loglevel" => $loglevel)); - } - - /** - * Returns detailed connection information of the virtual server. - * - * @return array - */ - public function connectionInfo() - { - return $this->request("serverrequestconnectioninfo")->toList(); - } - - /** - * Deletes the virtual server. - * - * @return void - */ - public function delete() - { - $this->getParent()->serverDelete($this->getId()); - } - - /** - * Starts the virtual server. - * - * @return void - */ - public function start() - { - $this->getParent()->serverStart($this->getId()); - } - - /** - * Stops the virtual server. - * - * @return void - */ - public function stop() - { - $this->getParent()->serverStop($this->getId()); - } - - /** - * Sends a plugin command to all clients connected to the server. - * - * @param string $plugin - * @param string $data - * @return void - */ - public function sendPluginCmd($plugin, $data) - { - $this->execute("plugincmd", array("name" => $plugin, "data" => $data, "targetmode" => TeamSpeak3::PLUGINCMD_SERVER)); - } - - /** - * Changes the properties of your own client connection. - * - * @param array $properties - * @return void - */ - public function selfUpdate(array $properties) - { - $this->execute("clientupdate", $properties); - - foreach($properties as $ident => $value) - { - $this->whoamiSet($ident, $value); - } - } - - /** - * Updates your own ServerQuery login credentials using a specified username. The password - * will be auto-generated. - * - * @param string $username - * @return TeamSpeak3_Helper_String - */ - public function selfUpdateLogin($username) - { - $password = $this->execute("clientsetserverquerylogin", array("client_login_name" => $username))->toList(); - - return $password["client_login_password"]; - } - - /** - * Returns an array containing the permission overview of your own client. - * - * @return array - */ - public function selfPermOverview() - { - return $this->execute("permoverview", array("cldbid" => $this->whoamiGet("client_database_id"), "cid" => $this->whoamiGet("client_channel_id"), "permid" => 0))->toArray(); - } - - /** - * @ignore - */ - protected function fetchNodeList() - { - $this->nodeList = array(); - - foreach($this->channelList() as $channel) - { - if($channel["pid"] == 0) - { - $this->nodeList[] = $channel; - } - } - } - - /** - * @ignore - */ - protected function fetchNodeInfo() - { - $this->nodeInfo = array_merge($this->nodeInfo, $this->request("serverinfo")->toList()); - } - - /** - * Internal callback funtion for sorting of client objects. - * - * @param TeamSpeak3_Node_Client $a - * @param TeamSpeak3_Node_Client $b - * @return integer - */ - protected static function sortClientList(TeamSpeak3_Node_Client $a, TeamSpeak3_Node_Client $b) - { - if(get_class($a) != get_class($b)) - { - return 0; - - /* workaround for PHP bug #50688 */ - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid parameter", 0x602); - } - - if(!$a instanceof TeamSpeak3_Node_Client) - { - return 0; - - /* workaround for PHP bug #50688 */ - throw new TeamSpeak3_Adapter_ServerQuery_Exception("convert error", 0x604); - } - - if($a->getProperty("client_talk_power", 0) != $b->getProperty("client_talk_power", 0)) - { - return ($a->getProperty("client_talk_power", 0) > $b->getProperty("client_talk_power", 0)) ? -1 : 1; - } - - if($a->getProperty("client_is_talker", 0) != $b->getProperty("client_is_talker", 0)) - { - return ($a->getProperty("client_is_talker", 0) > $b->getProperty("client_is_talker", 0)) ? -1 : 1; - } - - return strcmp(strtolower($a["client_nickname"]), strtolower($b["client_nickname"])); - } - - /** - * Internal callback funtion for sorting of group objects. - * - * @param TeamSpeak3_Node_Abstract $a - * @param TeamSpeak3_Node_Abstract $b - * @return integer - */ - protected static function sortGroupList(TeamSpeak3_Node_Abstract $a, TeamSpeak3_Node_Abstract $b) - { - if(get_class($a) != get_class($b)) - { - return 0; - - /* workaround for PHP bug #50688 */ - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid parameter", 0x602); - } - - if(!$a instanceof TeamSpeak3_Node_Servergroup && !$a instanceof TeamSpeak3_Node_Channelgroup) - { - return 0; - - /* workaround for PHP bug #50688 */ - throw new TeamSpeak3_Adapter_ServerQuery_Exception("convert error", 0x604); - } - - if($a->getProperty("sortid", 0) != $b->getProperty("sortid", 0) && $a->getProperty("sortid", 0) != 0 && $b->getProperty("sortid", 0) != 0) - { - return ($a->getProperty("sortid", 0) < $b->getProperty("sortid", 0)) ? -1 : 1; - } - - return ($a->getId() < $b->getId()) ? -1 : 1; - } - -/** - * Internal callback funtion for sorting of file list items. - * - * @param array $a - * @param array $b - * @return integer - */ - protected static function sortFileList(array $a, array $b) - { - if(!array_key_exists("src", $a) || !array_key_exists("src", $b) || !array_key_exists("type", $a) || !array_key_exists("type", $b)) - { - return 0; - - throw new TeamSpeak3_Adapter_ServerQuery_Exception("invalid parameter", 0x602); - } - - if($a["type"] != $b["type"]) - { - return ($a["type"] < $b["type"]) ? -1 : 1; - } - - return strcmp(strtolower($a["src"]), strtolower($b["src"])); - } - - /** - * Returns TRUE if the virtual server is online. - * - * @return boolean - */ - public function isOnline() - { - return ($this["virtualserver_status"] == "online") ? TRUE : FALSE; - } - - /** - * Returns TRUE if the virtual server is offline. - * - * @return boolean - */ - public function isOffline() - { - return ($this["virtualserver_status"] == "offline") ? TRUE : FALSE; - } - - /** - * Returns a unique identifier for the node which can be used as a HTML property. - * - * @return string - */ - public function getUniqueId() - { - return $this->getParent()->getUniqueId() . "_s" . $this->getId(); - } - - /** - * Returns the name of a possible icon to display the node object. - * - * @return string - */ - public function getIcon() - { - if($this["virtualserver_clientsonline"]-$this["virtualserver_queryclientsonline"] >= $this["virtualserver_maxclients"]) - { - return "server_full"; - } - elseif($this["virtualserver_flag_password"]) - { - return "server_pass"; - } - else - { - return "server_open"; - } - } - - /** - * Returns a symbol representing the node. - * - * @return string - */ - public function getSymbol() - { - return "$"; - } - - /** - * Returns a string representation of this node. - * - * @return string - */ - public function __toString() - { - return (string) $this["virtualserver_name"]; - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Node/Servergroup.php b/lib/ts3phpframework/libraries/TeamSpeak3/Node/Servergroup.php deleted file mode 100644 index 28eb5d1..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Node/Servergroup.php +++ /dev/null @@ -1,298 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Node_Servergroup - * @brief Class describing a TeamSpeak 3 server group and all it's parameters. - */ -class TeamSpeak3_Node_Servergroup extends TeamSpeak3_Node_Abstract -{ - /** - * The TeamSpeak3_Node_Servergroup constructor. - * - * @param TeamSpeak3_Node_Server $server - * @param array $info - * @param string $index - * @throws TeamSpeak3_Node_Exception - * @return TeamSpeak3_Node_Servergroup - */ - public function __construct(TeamSpeak3_Node_Server $server, array $info, $index = "sgid") - { - $this->parent = $server; - $this->nodeInfo = $info; - - if(!array_key_exists($index, $this->nodeInfo)) - { - throw new TeamSpeak3_Node_Exception("invalid groupID", 0xA00); - } - - $this->nodeId = $this->nodeInfo[$index]; - } - - /** - * Renames the server group specified. - * - * @param string $name - * @return void - */ - public function rename($name) - { - $this->getParent()->serverGroupRename($this->getId(), $name); - } - - /** - * Deletes the server group. If $force is set to 1, the server group will be - * deleted even if there are clients within. - * - * @param boolean $force - * @return void - */ - public function delete($force = FALSE) - { - $this->getParent()->serverGroupDelete($this->getId(), $force); - } - - /** - * Creates a copy of the server group and returns the new groups ID. - * - * @param string $name - * @param integer $tsgid - * @param integer $type - * @return integer - */ - public function copy($name = null, $tsgid = 0, $type = TeamSpeak3::GROUP_DBTYPE_REGULAR) - { - return $this->getParent()->serverGroupCopy($this->getId(), $name, $tsgid, $type); - } - - /** - * Returns a list of permissions assigned to the server group. - * - * @param boolean $permsid - * @return array - */ - public function permList($permsid = FALSE) - { - return $this->getParent()->serverGroupPermList($this->getId(), $permsid); - } - - /** - * Adds a set of specified permissions to the server group. Multiple permissions - * can be added by providing the four parameters of each permission in separate arrays. - * - * @param integer $permid - * @param integer $permvalue - * @param integer $permnegated - * @param integer $permskip - * @return void - */ - public function permAssign($permid, $permvalue, $permnegated = FALSE, $permskip = FALSE) - { - $this->getParent()->serverGroupPermAssign($this->getId(), $permid, $permvalue, $permnegated, $permskip); - } - - /** - * Alias for permAssign(). - * - * @deprecated - */ - public function permAssignByName($permname, $permvalue, $permnegated = FALSE, $permskip = FALSE) - { - $this->permAssign($permname, $permvalue, $permnegated, $permskip); - } - - /** - * Removes a set of specified permissions from the server group. Multiple - * permissions can be removed at once. - * - * @param integer $permid - * @return void - */ - public function permRemove($permid) - { - $this->getParent()->serverGroupPermRemove($this->getId(), $permid); - } - - /** - * Alias for permRemove(). - * - * @deprecated - */ - public function permRemoveByName($permname) - { - $this->permRemove($permname); - } - - /** - * Returns a list of clients assigned to the server group specified. - * - * @return array - */ - public function clientList() - { - return $this->getParent()->serverGroupClientList($this->getId()); - } - - /** - * Adds a client to the server group specified. Please note that a client cannot be - * added to default groups or template groups. - * - * @param integer $cldbid - * @return void - */ - public function clientAdd($cldbid) - { - $this->getParent()->serverGroupClientAdd($this->getId(), $cldbid); - } - - /** - * Removes a client from the server group. - * - * @param integer $cldbid - * @return void - */ - public function clientDel($cldbid) - { - $this->getParent()->serverGroupClientDel($this->getId(), $cldbid); - } - - /** - * Alias for privilegeKeyCreate(). - * - * @deprecated - */ - public function tokenCreate($description = null, $customset = null) - { - return $this->privilegeKeyCreate($description, $customset); - } - - /** - * Creates a new privilege key (token) for the server group and returns the key. - * - * @param string $description - * @param string $customset - * @return TeamSpeak3_Helper_String - */ - public function privilegeKeyCreate($description = null, $customset = null) - { - return $this->getParent()->privilegeKeyCreate(TeamSpeak3::TOKEN_SERVERGROUP, $this->getId(), 0, $description, $customset); - } - - /** - * Sends a text message to all clients residing in the server group on the virtual server. - * - * @param string $msg - * @return void - */ - public function message($msg) - { - foreach($this as $client) - { - try - { - $this->execute("sendtextmessage", array("msg" => $msg, "target" => $client, "targetmode" => TeamSpeak3::TEXTMSG_CLIENT)); - } - catch(TeamSpeak3_Adapter_ServerQuery_Exception $e) - { - /* ERROR_client_invalid_id */ - if($e->getCode() != 0x0200) throw $e; - } - } - } - - /** - * Downloads and returns the server groups icon file content. - * - * @return TeamSpeak3_Helper_String - */ - public function iconDownload() - { - if($this->iconIsLocal("iconid") || $this["iconid"] == 0) return; - - $download = $this->getParent()->transferInitDownload(rand(0x0000, 0xFFFF), 0, $this->iconGetName("iconid")); - $transfer = TeamSpeak3::factory("filetransfer://" . (strstr($download["host"], ":") !== FALSE ? "[" . $download["host"] . "]" : $download["host"]) . ":" . $download["port"]); - - return $transfer->download($download["ftkey"], $download["size"]); - } - - /** - * @ignore - */ - protected function fetchNodeList() - { - $this->nodeList = array(); - - foreach($this->getParent()->clientList() as $client) - { - if(in_array($this->getId(), explode(",", $client["client_servergroups"]))) - { - $this->nodeList[] = $client; - } - } - } - - /** - * Returns a unique identifier for the node which can be used as a HTML property. - * - * @return string - */ - public function getUniqueId() - { - return $this->getParent()->getUniqueId() . "_sg" . $this->getId(); - } - - /** - * Returns the name of a possible icon to display the node object. - * - * @return string - */ - public function getIcon() - { - return "group_server"; - } - - /** - * Returns a symbol representing the node. - * - * @return string - */ - public function getSymbol() - { - return "%"; - } - - /** - * Returns a string representation of this node. - * - * @return string - */ - public function __toString() - { - return (string) $this["name"]; - } -} - diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/TeamSpeak3.php b/lib/ts3phpframework/libraries/TeamSpeak3/TeamSpeak3.php deleted file mode 100644 index deed54e..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/TeamSpeak3.php +++ /dev/null @@ -1,974 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3 - * @brief Factory class all for TeamSpeak 3 PHP Framework objects. - */ -class TeamSpeak3 -{ - /** - * TeamSpeak 3 protocol welcome message. - */ - const READY = "TS3"; - - /** - * TeamSpeak 3 protocol greeting message prefix. - */ - const GREET = "Welcome"; - - /** - * TeamSpeak 3 protocol error message prefix. - */ - const ERROR = "error"; - - /** - * TeamSpeak 3 protocol event message prefix. - */ - const EVENT = "notify"; - - /** - * TeamSpeak 3 protocol server connection handler ID prefix. - */ - const SCHID = "selected"; - - /** - * TeamSpeak 3 PHP Framework version. - */ - const LIB_VERSION = "1.1.24"; - - /*@ - * TeamSpeak 3 protocol separators. - */ - const SEPARATOR_LINE = "\n"; //!< protocol line separator - const SEPARATOR_LIST = "|"; //!< protocol list separator - const SEPARATOR_CELL = " "; //!< protocol cell separator - const SEPARATOR_PAIR = "="; //!< protocol pair separator - - /*@ - * TeamSpeak 3 log levels. - */ - const LOGLEVEL_CRITICAL = 0x00; //!< 0: these messages stop the program - const LOGLEVEL_ERROR = 0x01; //!< 1: everything that is really bad - const LOGLEVEL_WARNING = 0x02; //!< 2: everything that might be bad - const LOGLEVEL_DEBUG = 0x03; //!< 3: output that might help find a problem - const LOGLEVEL_INFO = 0x04; //!< 4: informational output - const LOGLEVEL_DEVEL = 0x05; //!< 5: development output - - /*@ - * TeamSpeak 3 token types. - */ - const TOKEN_SERVERGROUP = 0x00; //!< 0: server group token (id1={groupID} id2=0) - const TOKEN_CHANNELGROUP = 0x01; //!< 1: channel group token (id1={groupID} id2={channelID}) - - /*@ - * TeamSpeak 3 codec identifiers. - */ - const CODEC_SPEEX_NARROWBAND = 0x00; //!< 0: speex narrowband (mono, 16bit, 8kHz) - const CODEC_SPEEX_WIDEBAND = 0x01; //!< 1: speex wideband (mono, 16bit, 16kHz) - const CODEC_SPEEX_ULTRAWIDEBAND = 0x02; //!< 2: speex ultra-wideband (mono, 16bit, 32kHz) - const CODEC_CELT_MONO = 0x03; //!< 3: celt mono (mono, 16bit, 48kHz) - const CODEC_OPUS_VOICE = 0x04; //!< 3: opus voice (interactive) - const CODEC_OPUS_MUSIC = 0x05; //!< 3: opus music (interactive) - - /*@ - * TeamSpeak 3 codec encryption modes. - */ - const CODEC_CRYPT_INDIVIDUAL = 0x00; //!< 0: configure per channel - const CODEC_CRYPT_DISABLED = 0x01; //!< 1: globally disabled - const CODEC_CRYPT_ENABLED = 0x02; //!< 2: globally enabled - - /*@ - * TeamSpeak 3 kick reason types. - */ - const KICK_CHANNEL = 0x04; //!< 4: kick client from channel - const KICK_SERVER = 0x05; //!< 5: kick client from server - - /*@ - * TeamSpeak 3 text message target modes. - */ - const TEXTMSG_CLIENT = 0x01; //!< 1: target is a client - const TEXTMSG_CHANNEL = 0x02; //!< 2: target is a channel - const TEXTMSG_SERVER = 0x03; //!< 3: target is a virtual server - - /*@ - * TeamSpeak 3 plugin command target modes. - */ - const PLUGINCMD_CHANNEL = 0x01; //!< 1: send plugincmd to all clients in current channel - const PLUGINCMD_SERVER = 0x02; //!< 2: send plugincmd to all clients on server - const PLUGINCMD_CLIENT = 0x03; //!< 3: send plugincmd to all given client ids - const PLUGINCMD_CHANNEL_SUBSCRIBED = 0x04; //!< 4: send plugincmd to all subscribed clients in current channel - - /*@ - * TeamSpeak 3 host message modes. - */ - const HOSTMSG_NONE = 0x00; //!< 0: display no message - const HOSTMSG_LOG = 0x01; //!< 1: display message in chatlog - const HOSTMSG_MODAL = 0x02; //!< 2: display message in modal dialog - const HOSTMSG_MODALQUIT = 0x03; //!< 3: display message in modal dialog and close connection - - /*@ - * TeamSpeak 3 host banner modes. - */ - const HOSTBANNER_NO_ADJUST = 0x00; //!< 0: do not adjust - const HOSTBANNER_IGNORE_ASPECT = 0x01; //!< 1: adjust but ignore aspect ratio - const HOSTBANNER_KEEP_ASPECT = 0x02; //!< 2: adjust and keep aspect ratio - - /*@ - * TeamSpeak 3 client identification types. - */ - const CLIENT_TYPE_REGULAR = 0x00; //!< 0: regular client - const CLIENT_TYPE_SERVERQUERY = 0x01; //!< 1: query client - - /*@ - * TeamSpeak 3 permission group database types. - */ - const GROUP_DBTYPE_TEMPLATE = 0x00; //!< 0: template group (used for new virtual servers) - const GROUP_DBTYPE_REGULAR = 0x01; //!< 1: regular group (used for regular clients) - const GROUP_DBTYPE_SERVERQUERY = 0x02; //!< 2: global query group (used for ServerQuery clients) - - /*@ - * TeamSpeak 3 permission group name modes. - */ - const GROUP_NAMEMODE_HIDDEN = 0x00; //!< 0: display no name - const GROUP_NAMEMODE_BEFORE = 0x01; //!< 1: display name before client nickname - const GROUP_NAMEMODE_BEHIND = 0x02; //!< 2: display name after client nickname - - /*@ - * TeamSpeak 3 permission group identification types. - */ - const GROUP_IDENTIFIY_STRONGEST = 0x01; //!< 1: identify most powerful group - const GROUP_IDENTIFIY_WEAKEST = 0x02; //!< 2: identify weakest group - - /*@ - * TeamSpeak 3 permission types. - */ - const PERM_TYPE_SERVERGROUP = 0x00; //!< 0: server group permission - const PERM_TYPE_CLIENT = 0x01; //!< 1: client specific permission - const PERM_TYPE_CHANNEL = 0x02; //!< 2: channel specific permission - const PERM_TYPE_CHANNELGROUP = 0x03; //!< 3: channel group permission - const PERM_TYPE_CHANNELCLIENT = 0x04; //!< 4: channel-client specific permission - - /*@ - * TeamSpeak 3 permission categories. - */ - const PERM_CAT_GLOBAL = 0x10; //!< 00010000: global permissions - const PERM_CAT_GLOBAL_INFORMATION = 0x11; //!< 00010001: global permissions -> global information - const PERM_CAT_GLOBAL_SERVER_MGMT = 0x12; //!< 00010010: global permissions -> virtual server management - const PERM_CAT_GLOBAL_ADM_ACTIONS = 0x13; //!< 00010011: global permissions -> global administrative actions - const PERM_CAT_GLOBAL_SETTINGS = 0x14; //!< 00010100: global permissions -> global settings - const PERM_CAT_SERVER = 0x20; //!< 00100000: virtual server permissions - const PERM_CAT_SERVER_INFORMATION = 0x21; //!< 00100001: virtual server permissions -> virtual server information - const PERM_CAT_SERVER_ADM_ACTIONS = 0x22; //!< 00100010: virtual server permissions -> virtual server administrative actions - const PERM_CAT_SERVER_SETTINGS = 0x23; //!< 00100011: virtual server permissions -> virtual server settings - const PERM_CAT_CHANNEL = 0x30; //!< 00110000: channel permissions - const PERM_CAT_CHANNEL_INFORMATION = 0x31; //!< 00110001: channel permissions -> channel information - const PERM_CAT_CHANNEL_CREATE = 0x32; //!< 00110010: channel permissions -> create channels - const PERM_CAT_CHANNEL_MODIFY = 0x33; //!< 00110011: channel permissions -> edit channels - const PERM_CAT_CHANNEL_DELETE = 0x34; //!< 00110100: channel permissions -> delete channels - const PERM_CAT_CHANNEL_ACCESS = 0x35; //!< 00110101: channel permissions -> access channels - const PERM_CAT_GROUP = 0x40; //!< 01000000: group permissions - const PERM_CAT_GROUP_INFORMATION = 0x41; //!< 01000001: group permissions -> group information - const PERM_CAT_GROUP_CREATE = 0x42; //!< 01000010: group permissions -> create groups - const PERM_CAT_GROUP_MODIFY = 0x43; //!< 01000011: group permissions -> edit groups - const PERM_CAT_GROUP_DELETE = 0x44; //!< 01000100: group permissions -> delete groups - const PERM_CAT_CLIENT = 0x50; //!< 01010000: client permissions - const PERM_CAT_CLIENT_INFORMATION = 0x51; //!< 01010001: client permissions -> client information - const PERM_CAT_CLIENT_ADM_ACTIONS = 0x52; //!< 01010010: client permissions -> client administrative actions - const PERM_CAT_CLIENT_BASICS = 0x53; //!< 01010011: client permissions -> client basic communication - const PERM_CAT_CLIENT_MODIFY = 0x54; //!< 01010100: client permissions -> edit clients - const PERM_CAT_FILETRANSFER = 0x60; //!< 01100000: file transfer permissions - const PERM_CAT_NEEDED_MODIFY_POWER = 0xFF; //!< 11111111: needed permission modify power (grant) permissions - - /*@ - * TeamSpeak 3 file types. - */ - const FILE_TYPE_DIRECTORY = 0x00; //!< 0: file is directory - const FILE_TYPE_REGULAR = 0x01; //!< 1: file is regular - - /*@ - * TeamSpeak 3 server snapshot types. - */ - const SNAPSHOT_STRING = 0x00; //!< 0: default string - const SNAPSHOT_BASE64 = 0x01; //!< 1: base64 string - const SNAPSHOT_HEXDEC = 0x02; //!< 2: hexadecimal string - - /*@ - * TeamSpeak 3 channel spacer types. - */ - const SPACER_SOLIDLINE = 0x00; //!< 0: solid line - const SPACER_DASHLINE = 0x01; //!< 1: dash line - const SPACER_DOTLINE = 0x02; //!< 2: dot line - const SPACER_DASHDOTLINE = 0x03; //!< 3: dash dot line - const SPACER_DASHDOTDOTLINE = 0x04; //!< 4: dash dot dot line - const SPACER_CUSTOM = 0x05; //!< 5: custom format - - /*@ - * TeamSpeak 3 channel spacer alignments. - */ - const SPACER_ALIGN_LEFT = 0x00; //!< 0: alignment left - const SPACER_ALIGN_RIGHT = 0x01; //!< 1: alignment right - const SPACER_ALIGN_CENTER = 0x02; //!< 2: alignment center - const SPACER_ALIGN_REPEAT = 0x03; //!< 3: repeat until the whole line is filled - - /*@ - * TeamSpeak 3 reason identifiers. - */ - const REASON_NONE = 0x00; //!< 0: no reason - const REASON_MOVE = 0x01; //!< 1: channel switched or moved - const REASON_SUBSCRIPTION = 0x02; //!< 2: subscription added or removed - const REASON_TIMEOUT = 0x03; //!< 3: client connection timed out - const REASON_CHANNEL_KICK = 0x04; //!< 4: client kicked from channel - const REASON_SERVER_KICK = 0x05; //!< 5: client kicked from server - const REASON_SERVER_BAN = 0x06; //!< 6: client banned from server - const REASON_SERVER_STOP = 0x07; //!< 7: server stopped - const REASON_DISCONNECT = 0x08; //!< 8: client disconnected - const REASON_CHANNEL_UPDATE = 0x09; //!< 9: channel information updated - const REASON_CHANNEL_EDIT = 0x0A; //!< 10: channel information edited - const REASON_DISCONNECT_SHUTDOWN = 0x0B; //!< 11: client disconnected on server shutdown - - /** - * Stores an array containing various chars which need to be escaped while communicating - * with a TeamSpeak 3 Server. - * - * @var array - */ - protected static $escape_patterns = array( - "\\" => "\\\\", // backslash - "/" => "\\/", // slash - " " => "\\s", // whitespace - "|" => "\\p", // pipe - ";" => "\\;", // semicolon - "\a" => "\\a", // bell - "\b" => "\\b", // backspace - "\f" => "\\f", // formfeed - "\n" => "\\n", // newline - "\r" => "\\r", // carriage return - "\t" => "\\t", // horizontal tab - "\v" => "\\v" // vertical tab - ); - - /** - * Factory for TeamSpeak3_Adapter_Abstract classes. $uri must be formatted as - * "://:@:/#". All parameters - * except adapter, host and port are optional. - * - * === Supported Options === - * - timeout - * - blocking - * - nickname - * - no_query_clients - * - use_offline_as_virtual - * - clients_before_channels - * - server_id|server_uid|server_port|server_name|server_tsdns - * - channel_id|channel_name - * - client_id|client_uid|client_name - * - * === Supported Flags (only one per $uri) === - * - no_query_clients - * - use_offline_as_virtual - * - clients_before_channels - * - * === URI Examples === - * - serverquery://127.0.0.1:10011/ - * - serverquery://127.0.0.1:10011/?server_port=9987&channel_id=1 - * - serverquery://127.0.0.1:10011/?server_port=9987&channel_id=1#no_query_clients - * - serverquery://127.0.0.1:10011/?server_port=9987&client_name=ScP - * - filetransfer://127.0.0.1:30011/ - * - blacklist - * - update - * - * @param string $uri - * @return TeamSpeak3_Adapter_Abstract - * @return TeamSpeak3_Node_Abstract - * @return TeamSpeak3_Node_Host - * @return TeamSpeak3_Node_Server - */ - public static function factory($uri) - { - self::init(); - - $uri = new TeamSpeak3_Helper_Uri($uri); - - $adapter = self::getAdapterName($uri->getScheme()); - $options = array("host" => $uri->getHost(), "port" => $uri->getPort(), "timeout" => (int) $uri->getQueryVar("timeout", 10), "blocking" => (int) $uri->getQueryVar("blocking", 1)); - - self::loadClass($adapter); - - $object = new $adapter($options); - - if($object instanceof TeamSpeak3_Adapter_ServerQuery) - { - $node = $object->getHost(); - - if($uri->hasUser() && $uri->hasPass()) - { - $node->login($uri->getUser(), $uri->getPass()); - } - - if($uri->hasQueryVar("nickname")) - { - $node->setPredefinedQueryName($uri->getQueryVar("nickname")); - } - - if($uri->getFragment() == "use_offline_as_virtual") - { - $node->setUseOfflineAsVirtual(TRUE); - } - elseif($uri->hasQueryVar("use_offline_as_virtual")) - { - $node->setUseOfflineAsVirtual($uri->getQueryVar("use_offline_as_virtual") ? TRUE : FALSE); - } - - if($uri->getFragment() == "clients_before_channels") - { - $node->setLoadClientlistFirst(TRUE); - } - elseif($uri->hasQueryVar("clients_before_channels")) - { - $node->setLoadClientlistFirst($uri->getQueryVar("clients_before_channels") ? TRUE : FALSE); - } - - if($uri->getFragment() == "no_query_clients") - { - $node->setExcludeQueryClients(TRUE); - } - elseif($uri->hasQueryVar("no_query_clients")) - { - $node->setExcludeQueryClients($uri->getQueryVar("no_query_clients") ? TRUE : FALSE); - } - - if($uri->hasQueryVar("server_id")) - { - $node = $node->serverGetById($uri->getQueryVar("server_id")); - } - elseif($uri->hasQueryVar("server_uid")) - { - $node = $node->serverGetByUid($uri->getQueryVar("server_uid")); - } - elseif($uri->hasQueryVar("server_port")) - { - $node = $node->serverGetByPort($uri->getQueryVar("server_port")); - } - elseif($uri->hasQueryVar("server_name")) - { - $node = $node->serverGetByName($uri->getQueryVar("server_name")); - } - elseif($uri->hasQueryVar("server_tsdns")) - { - $node = $node->serverGetByTSDNS($uri->getQueryVar("server_tsdns")); - } - - if($node instanceof TeamSpeak3_Node_Server) - { - if($uri->hasQueryVar("channel_id")) - { - $node = $node->channelGetById($uri->getQueryVar("channel_id")); - } - elseif($uri->hasQueryVar("channel_name")) - { - $node = $node->channelGetByName($uri->getQueryVar("channel_name")); - } - - if($uri->hasQueryVar("client_id")) - { - $node = $node->clientGetById($uri->getQueryVar("client_id")); - } - if($uri->hasQueryVar("client_uid")) - { - $node = $node->clientGetByUid($uri->getQueryVar("client_uid")); - } - elseif($uri->hasQueryVar("client_name")) - { - $node = $node->clientGetByName($uri->getQueryVar("client_name")); - } - } - - return $node; - } - - return $object; - } - - /** - * Loads a class from a PHP file. The filename must be formatted as "$class.php". - * - * include() is not prefixed with the @ operator because if the file is loaded and - * contains a parse error, execution will halt silently and this is difficult to debug. - * - * @param string $class - * @throws LogicException - * @return boolean - */ - protected static function loadClass($class) - { - if(class_exists($class, FALSE) || interface_exists($class, FALSE)) - { - return; - } - - if(preg_match("/[^a-z0-9\\/\\\\_.-]/i", $class)) - { - throw new LogicException("illegal characters in classname '" . $class . "'"); - } - - $file = self::getFilePath($class) . ".php"; - - if(!file_exists($file) || !is_readable($file)) - { - throw new LogicException("file '" . $file . "' does not exist or is not readable"); - } - - if(class_exists($class, FALSE) || interface_exists($class, FALSE)) - { - throw new LogicException("class '" . $class . "' does not exist"); - } - - return include_once($file); - } - - /** - * Generates a possible file path for $name. - * - * @param string $name - * @return string - */ - protected static function getFilePath($name) - { - $path = str_replace("_", DIRECTORY_SEPARATOR, $name); - $path = str_replace(__CLASS__, dirname(__FILE__), $path); - - return $path; - } - - /** - * Returns the name of an adapter class by $name. - * - * @param string $name - * @param string $namespace - * @throws TeamSpeak3_Adapter_Exception - * @return string - */ - protected static function getAdapterName($name, $namespace = "TeamSpeak3_Adapter_") - { - $path = self::getFilePath($namespace); - $scan = scandir($path); - - foreach($scan as $node) - { - $file = TeamSpeak3_Helper_String::factory($node)->toLower(); - - if($file->startsWith($name) && $file->endsWith(".php")) - { - return $namespace . str_replace(".php", "", $node); - } - } - - throw new TeamSpeak3_Adapter_Exception("adapter '" . $name . "' does not exist"); - } - - /** - * spl_autoload() suitable implementation for supporting class autoloading. - * - * @param string $class - * @return boolean - */ - public static function autoload($class) - { - if(substr($class, 0, strlen(__CLASS__)) != __CLASS__) return; - - try - { - self::loadClass($class); - - return TRUE; - } - catch(Exception $e) - { - return FALSE; - } - } - - /** - * Checks for required PHP features, enables autoloading and starts a default profiler. - * - * @throws LogicException - * @return void - */ - public static function init() - { - if(version_compare(phpversion(), "5.2.1") == -1) - { - throw new LogicException("this particular software cannot be used with the installed version of PHP"); - } - - if(!function_exists("stream_socket_client")) - { - throw new LogicException("network functions are not available in this PHP installation"); - } - - if(!function_exists("spl_autoload_register")) - { - throw new LogicException("autoload functions are not available in this PHP installation"); - } - - if(!class_exists("TeamSpeak3_Helper_Profiler")) - { - spl_autoload_register(array(__CLASS__, "autoload")); - } - - TeamSpeak3_Helper_Profiler::start(); - } - - /** - * Returns an assoc array containing all escape patterns available on a TeamSpeak 3 - * Server. - * - * @return array - */ - public static function getEscapePatterns() - { - return self::$escape_patterns; - } - - /** - * Debug helper function. This is a wrapper for var_dump() that adds the pre-format tags, - * cleans up newlines and indents, and runs htmlentities() before output. - * - * @param mixed $var - * @param bool $echo - * @return string - */ - public static function dump($var, $echo = TRUE) - { - ob_start(); - var_dump($var); - - $output = preg_replace("/\]\=\>\n(\s+)/m", "] => ", ob_get_clean()); - - if(PHP_SAPI == "cli") - { - $output = PHP_EOL . PHP_EOL . $output . PHP_EOL; - } - else - { - $output = "

" . htmlspecialchars($output, ENT_QUOTES, "utf-8") . "
"; - } - - if($echo) echo($output); - - return $output; - } -} - -/*! - * \mainpage API Documentation - * - * \section welcome_sec Introduction - * - * \subsection welcome1 What is the TS3 PHP Framework? - * Initially released in January 2010, the TS3 PHP Framework is a powerful, open source, object-oriented framework - * implemented in PHP 5 and licensed under the GNU General Public License. It's based on simplicity and a rigorously - * tested agile codebase. Extend the functionality of your servers with scripts or create powerful web applications - * to manage all features of your TeamSpeak 3 Server instances. - * - * Tested. Thoroughly. Enterprise-ready and built with agile methods, the TS3 PHP Framework has been unit-tested from - * the start to ensure that all code remains stable and easy for you to extend, re-test with your extensions, and - * further maintain. - * - * \subsection welcome2 Why should I use the TS3 PHP Framework rather than other PHP libraries? - * The TS3 PHP Framework is a is a modern use-at-will framework that provides individual components to communicate - * with the TeamSpeak 3 Server. - * - * There are lots of arguments for the TS3 PHP Framework in comparison with other PHP based libraries. It is the most - * dynamic and feature-rich piece of software in its class. In addition, it's always up-to-date and 100% compatible to - * almost any TeamSpeak 3 Server version available. - * - * \section sysreqs_sec Requirements - * The TS3 PHP Framework currently supports PHP 5.2.1 or later, but we strongly recommend the most current release of - * PHP for critical security and performance enhancements. If you want to create a web application using the TS3 PHP - * Framework, you need a PHP 5 interpreter with a web server configured to handle PHP scripts correctly. - * - * Note that the majority of TS3 PHP Framework development and deployment is done on nginx, so there is more community - * experience and testing performed on nginx than on other web servers. - * - * \section feature_sec Features - * Features of the TS3 PHP Framework include: - * - * - Fully object-oriented PHP 5 and E_STRICT compliant components - * - Access to all TeamSpeak 3 Server features via ServerQuery - * - Integrated full featured and customizable TSViewer interfaces - * - Full support for file transfers to up- and /or download custom icons and other stuff - * - Powerful error handling capablities using exceptions and customizable error messages - * - Query mechanisms for several official services such as the blacklist and auto-update servers - * - Dynamic signal slots for event based scripting - * - ... - * - * \section example_sec Usage Examples - * - * \subsection example1 1. Kick a single Client from a Virtual Server - * @code - * // load framework files - * require_once("libraries/TeamSpeak3/TeamSpeak3.php"); - * - * // connect to local server, authenticate and spawn an object for the virtual server on port 9987 - * $ts3_VirtualServer = TeamSpeak3::factory("serverquery://username:password@127.0.0.1:10011/?server_port=9987"); - * - * // kick the client with ID 123 from the server - * $ts3_VirtualServer->clientKick(123, TeamSpeak3::KICK_SERVER, "evil kick XD"); - * - * // spawn an object for the client by unique identifier and do the kick - * $ts3_VirtualServer->clientGetByUid("FPMPSC6MXqXq751dX7BKV0JniSo=")->kick(TeamSpeak3::KICK_SERVER, "evil kick XD"); - * - * // spawn an object for the client by current nickname and do the kick - * $ts3_VirtualServer->clientGetByName("ScP")->kick(TeamSpeak3::KICK_SERVER, "evil kick XD"); - * @endcode - * - * \subsection example2 2. Kick all Clients from a Virtual Server - * @code - * // load framework files - * require_once("libraries/TeamSpeak3/TeamSpeak3.php"); - * - * // connect to local server, authenticate and spawn an object for the virtual server on port 9987 - * $ts3_VirtualServer = TeamSpeak3::factory("serverquery://username:password@127.0.0.1:10011/?server_port=9987"); - * - * // query clientlist from virtual server - * $arr_ClientList = $ts3_VirtualServer->clientList(); - * - * // kick all clients online with a single command - * $ts3_VirtualServer->clientKick($arr_ClientList, TeamSpeak3::KICK_SERVER, "evil kick XD"); - * @endcode - * - * \subsection example3 3. Print the Nicknames of connected Android Clients - * @code - * // load framework files - * require_once("libraries/TeamSpeak3/TeamSpeak3.php"); - * - * // connect to local server, authenticate and spawn an object for the virtual server on port 9987 - * $ts3_VirtualServer = TeamSpeak3::factory("serverquery://username:password@127.0.0.1:10011/?server_port=9987"); - * - * // query clientlist from virtual server and filter by platform - * $arr_ClientList = $ts3_VirtualServer->clientList(array("client_platform" => "Android")); - * - * // walk through list of clients - * foreach($arr_ClientList as $ts3_Client) - * { - * echo $ts3_Client . " is using " . $ts3_Client["client_platform"] . "
\n"; - * } - * @endcode - * - * \subsection example4 4. Modify the Settings of each Virtual Server - * @code - * // load framework files - * require_once("libraries/TeamSpeak3/TeamSpeak3.php"); - * - * // connect to local server, authenticate and spawn an object for the server instance - * $ts3_ServerInstance = TeamSpeak3::factory("serverquery://username:password@127.0.0.1:10011/"); - * - * // walk through list of virtual servers - * foreach($ts3_ServerInstance as $ts3_VirtualServer) - * { - * // modify the virtual servers hostbanner URL only using the ArrayAccess interface - * $ts3_VirtualServer["virtualserver_hostbanner_gfx_url"] = "http://www.example.com/banners/banner01_468x60.jpg"; - * - * // modify the virtual servers hostbanner URL only using property overloading - * $ts3_VirtualServer->virtualserver_hostbanner_gfx_url = "http://www.example.com/banners/banner01_468x60.jpg"; - * - * // modify multiple virtual server properties at once - * $ts3_VirtualServer->modify(array( - * "virtualserver_hostbutton_tooltip" => "My Company", - * "virtualserver_hostbutton_url" => "http://www.example.com", - * "virtualserver_hostbutton_gfx_url" => "http://www.example.com/buttons/button01_24x24.jpg", - * )); - * } - * @endcode - * - * \subsection example5 5. Create a Privilege Key for a Server Group - * @code - * // load framework files - * require_once("libraries/TeamSpeak3/TeamSpeak3.php"); - * - * // connect to local server, authenticate and spawn an object for the virtual server on port 9987 - * $ts3_VirtualServer = TeamSpeak3::factory("serverquery://username:password@127.0.0.1:10011/?server_port=9987"); - * - * // spawn an object for the group using a specified name - * $arr_ServerGroup = $ts3_VirtualServer->serverGroupGetByName("Admins"); - * - * // create the privilege key - * $ts3_PrivilegeKey = $arr_ServerGroup->privilegeKeyCreate(); - * @endcode - * - * \subsection example6 6. Modify the Permissions of Admins on each Virtual Server - * @code - * // load framework files - * require_once("libraries/TeamSpeak3/TeamSpeak3.php"); - * - * // connect to local server, authenticate and spawn an object for the server instance - * $ts3_ServerInstance = TeamSpeak3::factory("serverquery://username:password@127.0.0.1:10011/"); - * - * // walk through list of virtual servers - * foreach($ts3_ServerInstance as $ts3_VirtualServer) - * { - * // identify the most powerful group on the virtual server - * $ts3_ServerGroup = $ts3_VirtualServer->serverGroupIdentify(); - * - * // assign a new permission - * $ts3_ServerGroup->permAssign("b_virtualserver_modify_hostbanner", TRUE); - * - * // revoke an existing permission - * $ts3_ServerGroup->permRemove("b_virtualserver_modify_maxclients"); - * } - * @endcode - * - * \subsection example7 7. Create a new Virtual Server - * @code - * // load framework files - * require_once("libraries/TeamSpeak3/TeamSpeak3.php"); - * - * // connect to local server, authenticate and spawn an object for the server instance - * $ts3_ServerInstance = TeamSpeak3::factory("serverquery://username:password@127.0.0.1:10011/"); - * - * // create a virtual server and get its ID - * $new_sid = $ts3_ServerInstance->serverCreate(array( - * "virtualserver_name" => "My TeamSpeak 3 Server", - * "virtualserver_maxclients" => 64, - * "virtualserver_hostbutton_tooltip" => "My Company", - * "virtualserver_hostbutton_url" => "http://www.example.com", - * "virtualserver_hostbutton_gfx_url" => "http://www.example.com/buttons/button01_24x24.jpg", - * )); - * @endcode - * - * \subsection example8 8. Create a hierarchical Channel Stucture - * @code - * // load framework files - * require_once("libraries/TeamSpeak3/TeamSpeak3.php"); - * - * // connect to local server, authenticate and spawn an object for the virtual server on port 9987 - * $ts3_VirtualServer = TeamSpeak3::factory("serverquery://username:password@127.0.0.1:10011/?server_port=9987"); - * - * // create a top-level channel and get its ID - * $top_cid = $ts3_VirtualServer->channelCreate(array( - * "channel_name" => "My Channel", - * "channel_topic" => "This is a top-level channel", - * "channel_codec" => TeamSpeak3::CODEC_SPEEX_WIDEBAND, - * "channel_flag_permanent" => TRUE, - * )); - * - * // create a sub-level channel and get its ID - * $sub_cid = $ts3_VirtualServer->channelCreate(array( - * "channel_name" => "My Sub-Channel", - * "channel_topic" => "This is a sub-level channel", - * "channel_codec" => TeamSpeak3::CODEC_SPEEX_NARROWBAND, - * "channel_flag_permanent" => TRUE, - * "cpid" => $top_cid, - * )); - * @endcode - * - * \subsection example9 9. Send a Text Message to outdated Clients - * @code - * // load framework files - * require_once("libraries/TeamSpeak3/TeamSpeak3.php"); - * - * // connect to local server, authenticate and spawn an object for the virtual server on port 9987 - * $ts3_VirtualServer = TeamSpeak3::factory("serverquery://username:password@127.0.0.1:10011/?server_port=9987"); - * - * // connect to default update server - * $ts3_UpdateServer = TeamSpeak3::factory("update"); - * - * // walk through list of clients on virtual server - * foreach($ts3_VirtualServer->clientList() as $ts3_Client) - * { - * // skip query clients - * if($ts3_Client["client_type"]) continue; - * - * // send test message if client build is outdated - * if($ts3_Client->getRev() < $ts3_UpdateServer->getClientRev()) - * { - * $ts3_Client->message("[COLOR=red]your client is [B]outdated[/B]... update to [U]" . $ts3_UpdateServer->getClientVersion() . "[/U] now![/COLOR]"); - * } - * } - * @endcode - * - * \subsection example10 10. Check if the Server Instance is Outdated or Blacklisted - * @code - * // load framework files - * require_once("libraries/TeamSpeak3/TeamSpeak3.php"); - * - * // connect to local server, authenticate and spawn an object for the server instance - * $ts3_ServerInstance = TeamSpeak3::factory("serverquery://username:password@127.0.0.1:10011/"); - * - * // connect to default update server - * $ts3_UpdateServer = TeamSpeak3::factory("update"); - * - * // send global text message if the server is outdated - * if($ts3_ServerInstance->version("build") < $ts3_UpdateServer->getServerRev()) - * { - * $ts3_ServerInstance->message("[COLOR=red]your server is [B]outdated[/B]... update to [U]" . $ts3_UpdateServer->getServerVersion() . "[/U] now![/COLOR]"); - * } - * - * // connect to default blacklist server - * $ts3_BlacklistServer = TeamSpeak3::factory("blacklist"); - * - * // send global text message if the server is blacklisted - * if($ts3_BlacklistServer->isBlacklisted($ts3_ServerInstance)) - * { - * $ts3_ServerInstance->message("[COLOR=red]your server is [B]blacklisted[/B]... disconnect now![/COLOR]"); - * } - * @endcode - * - * \subsection example11 11. Create a simple TSViewer for your Website - * @code - * // load framework files - * require_once("libraries/TeamSpeak3/TeamSpeak3.php"); - * - * // connect to local server, authenticate and spawn an object for the virtual server on port 9987 - * $ts3_VirtualServer = TeamSpeak3::factory("serverquery://username:password@127.0.0.1:10011/?server_port=9987"); - * - * // build and display HTML treeview using custom image paths (remote icons will be embedded using data URI sheme) - * echo $ts3_VirtualServer->getViewer(new TeamSpeak3_Viewer_Html("images/viewericons/", "images/countryflags/", "data:image")); - * @endcode - * - * \subsection example12 12. Update all outdated Audio Codecs to their Opus equivalent - * @code - * // load framework files - * require_once("libraries/TeamSpeak3/TeamSpeak3.php"); - * - * // connect to local server, authenticate and spawn an object for the virtual server on port 9987 - * $ts3_VirtualServer = TeamSpeak3::factory("serverquery://username:password@127.0.0.1:10011/?server_port=9987"); - * - * // walk through list of chanels - * foreach($ts3_VirtualServer->channelList() as $ts3_Channel) - * { - * if($ts3_Channel["channel_codec"] == TeamSpeak3::CODEC_CELT_MONO) - * { - * $ts3_Channel["channel_codec"] = TeamSpeak3::CODEC_OPUS_MUSIC; - * } - * elseif($ts3_Channel["channel_codec"] != TeamSpeak3::CODEC_OPUS_MUSIC) - * { - * $ts3_Channel["channel_codec"] = TeamSpeak3::CODEC_OPUS_VOICE; - * } - * } - * @endcode - * - * \subsection example13 13. Display the Avatar of a connected User - * @code - * // load framework files - * require_once("libraries/TeamSpeak3/TeamSpeak3.php"); - * - * // connect to local server, authenticate and spawn an object for the virtual server on port 9987 - * $ts3_VirtualServer = TeamSpeak3::factory("serverquery://username:password@127.0.0.1:10011/?server_port=9987"); - * - * // spawn an object for the client using a specified nickname - * $ts3_Client = $ts3_VirtualServer->clientGetByName("John Doe"); - * - * // download the clients avatar file - * $avatar = $ts3_Client->avatarDownload(); - * - * // send header and display image - * header("Content-Type: " . TeamSpeak3_Helper_Convert::imageMimeType($avatar)); - * echo $avatar; - * @endcode - * - * \subsection example14 14. Create a Simple Bot waiting for Events - * @code - * // load framework files - * require_once("libraries/TeamSpeak3/TeamSpeak3.php"); - * - * // connect to local server in non-blocking mode, authenticate and spawn an object for the virtual server on port 9987 - * $ts3_VirtualServer = TeamSpeak3::factory("serverquery://username:password@127.0.0.1:10011/?server_port=9987&blocking=0"); - * - * // get notified on incoming private messages - * $ts3_VirtualServer->notifyRegister("textprivate"); - * - * // register a callback for notifyTextmessage events - * TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyTextmessage", "onTextmessage"); - * - * // wait for events - * while(1) $ts3_VirtualServer->getAdapter()->wait(); - * - * // define a callback function - * function onTextmessage(TeamSpeak3_Adapter_ServerQuery_Event $event, TeamSpeak3_Node_Host $host) - * { - * echo "Client " . $event["invokername"] . " sent textmessage: " . $event["msg"]; - * } - * @endcode - * - * \subsection example15 15. Handle Errors using Exceptions and Custom Error Messages - * @code - * // load framework files - * require_once("libraries/TeamSpeak3/TeamSpeak3.php"); - * - * // register custom error message (supported placeholders are: %file, %line, %code and %mesg) - * TeamSpeak3_Exception::registerCustomMessage(0x300, "The specified channel does not exist; server said: %mesg"); - * - * try - * { - * // connect to local server, authenticate and spawn an object for the virtual server on port 9987 - * $ts3_VirtualServer = TeamSpeak3::factory("serverquery://username:password@127.0.0.1:10011/?server_port=9987"); - * - * // spawn an object for the channel using a specified name - * $ts3_Channel = $ts3_VirtualServer->channelGetByName("I do not exist"); - * } - * catch(TeamSpeak3_Exception $e) - * { - * // print the error message returned by the server - * echo "Error " . $e->getCode() . ": " . $e->getMessage(); - * } - * @endcode - * - * \subsection example16 16. Save Connection State in Persistent Session Variable - * @code - * // load framework files - * require_once("libraries/TeamSpeak3/TeamSpeak3.php"); - * - * // start a PHP session - * session_start(); - * - * // connect to local server, authenticate and spawn an object for the virtual server on port 9987 - * $ts3_VirtualServer = TeamSpeak3::factory("serverquery://username:password@127.0.0.1:10011/?server_port=9987"); - * - * // save connection state (including login and selected virtual server) - * $_SESSION["_TS3"] = serialize($ts3_VirtualServer); - * @endcode - * - * \subsection example17 17. Restore Connection State from Persistent Session Variable - * @code - * // load framework files - * require_once("libraries/TeamSpeak3/TeamSpeak3.php"); - * - * // start a PHP session - * session_start(); - * - * // restore connection state - * $ts3_VirtualServer = unserialize($_SESSION["_TS3"]); - * - * // send a text message to the server - * $ts3_VirtualServer->message("Hello World!"); - * @endcode - * - * Speed up new development and reduce maintenance costs by using the TS3 PHP Framework! - */ diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Transport/Abstract.php b/lib/ts3phpframework/libraries/TeamSpeak3/Transport/Abstract.php deleted file mode 100644 index 3e4e310..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Transport/Abstract.php +++ /dev/null @@ -1,270 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Transport_Abstract - * @brief Abstract class for connecting to a TeamSpeak 3 Server through different ways of transport. - */ -abstract class TeamSpeak3_Transport_Abstract -{ - /** - * Stores user-provided configuration settings. - * - * @var array - */ - protected $config = null; - - /** - * Stores the stream resource of the connection. - * - * @var resource - */ - protected $stream = null; - - /** - * Stores the TeamSpeak3_Adapter_Abstract object using this transport. - * - * @var TeamSpeak3_Adapter_Abstract - */ - protected $adapter = null; - - /** - * The TeamSpeak3_Transport_Abstract constructor. - * - * @param array $config - * @throws TeamSpeak3_Transport_Exception - * @return TeamSpeak3_Transport_Abstract - */ - public function __construct(array $config) - { - if(!array_key_exists("host", $config)) - { - throw new TeamSpeak3_Transport_Exception("config must have a key for 'host' which specifies the server host name"); - } - - if(!array_key_exists("port", $config)) - { - throw new TeamSpeak3_Transport_Exception("config must have a key for 'port' which specifies the server port number"); - } - - if(!array_key_exists("timeout", $config)) - { - $config["timeout"] = 10; - } - - if(!array_key_exists("blocking", $config)) - { - $config["blocking"] = 1; - } - - $this->config = $config; - } - - /** - * Commit pending data. - * - * @return array - */ - public function __sleep() - { - return array("config"); - } - - /** - * Reconnects to the remote server. - * - * @return void - */ - public function __wakeup() - { - $this->connect(); - } - - /** - * The TeamSpeak3_Transport_Abstract destructor. - * - * @return void - */ - public function __destruct() - { - if($this->adapter instanceof TeamSpeak3_Adapter_Abstract) - { - $this->adapter->__destruct(); - } - - $this->disconnect(); - } - - /** - * Connects to a remote server. - * - * @throws TeamSpeak3_Transport_Exception - * @return void - */ - abstract public function connect(); - - /** - * Disconnects from a remote server. - * - * @return void - */ - abstract public function disconnect(); - - /** - * Reads data from the stream. - * - * @param integer $length - * @throws TeamSpeak3_Transport_Exception - * @return TeamSpeak3_Helper_String - */ - abstract public function read($length = 4096); - - /** - * Writes data to the stream. - * - * @param string $data - * @return void - */ - abstract public function send($data); - - /** - * Returns the underlying stream resource. - * - * @return resource - */ - public function getStream() - { - return $this->stream; - } - - /** - * Returns the configuration variables in this adapter. - * - * @param string $key - * @param mixed $default - * @return array - */ - public function getConfig($key = null, $default = null) - { - if($key !== null) - { - return array_key_exists($key, $this->config) ? $this->config[$key] : $default; - } - - return $this->config; - } - - /** - * Sets the TeamSpeak3_Adapter_Abstract object using this transport. - * - * @param TeamSpeak3_Adapter_Abstract $adapter - * @return void - */ - public function setAdapter(TeamSpeak3_Adapter_Abstract $adapter) - { - $this->adapter = get_class($adapter); - } - - /** - * Returns the TeamSpeak3_Adapter_Abstract object using this transport. - * - * @return TeamSpeak3_Adapter_Abstract - */ - public function getAdapter() - { - return $this->adapter; - } - - /** - * Returns the adapter type. - * - * @return string - */ - public function getAdapterType() - { - if($this->adapter instanceof TeamSpeak3_Adapter_Abstract) - { - $string = TeamSpeak3_Helper_String::factory($this->adapter); - - return $string->substr($string->findLast("_"))->replace(array("_", " "), "")->toString(); - } - - return "Unknown"; - } - - /** - * Returns header/meta data from stream pointer. - * - * @throws TeamSpeak3_Transport_Exception - * @return array - */ - public function getMetaData() - { - if($this->stream === null) - { - throw new TeamSpeak3_Transport_Exception("unable to retrieve header/meta data from stream pointer"); - } - - return stream_get_meta_data($this->stream); - } - - /** - * Returns TRUE if the transport is connected. - * - * @return boolean - */ - public function isConnected() - { - return (is_resource($this->stream)) ? TRUE : FALSE; - } - - /** - * Blocks a stream until data is available for reading if the stream is connected - * in non-blocking mode. - * - * @param integer $time - * @return void - */ - protected function waitForReadyRead($time = 0) - { - if(!$this->isConnected() || $this->config["blocking"]) return; - - do - { - $read = array($this->stream); - $null = null; - - if($time) - { - TeamSpeak3_Helper_Signal::getInstance()->emit(strtolower($this->getAdapterType()) . "WaitTimeout", $time, $this->getAdapter()); - } - - $time = $time+$this->config["timeout"]; - } - while(@stream_select($read, $null, $null, $this->config["timeout"]) == 0); - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Transport/Exception.php b/lib/ts3phpframework/libraries/TeamSpeak3/Transport/Exception.php deleted file mode 100644 index c7e68eb..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Transport/Exception.php +++ /dev/null @@ -1,32 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Transport_Exception - * @brief Enhanced exception class for TeamSpeak3_Transport_Abstract objects. - */ -class TeamSpeak3_Transport_Exception extends TeamSpeak3_Exception {} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Transport/TCP.php b/lib/ts3phpframework/libraries/TeamSpeak3/Transport/TCP.php deleted file mode 100644 index 4ee349b..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Transport/TCP.php +++ /dev/null @@ -1,179 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Transport_TCP - * @brief Class for connecting to a remote server through TCP. - */ -class TeamSpeak3_Transport_TCP extends TeamSpeak3_Transport_Abstract -{ - /** - * Connects to a remote server. - * - * @throws TeamSpeak3_Transport_Exception - * @return void - */ - public function connect() - { - if($this->stream !== null) return; - - $host = strval($this->config["host"]); - $port = strval($this->config["port"]); - - $address = "tcp://" . (strstr($host, ":") !== FALSE ? "[" . $host . "]" : $host) . ":" . $port; - $timeout = (int) $this->config["timeout"]; - - $this->stream = @stream_socket_client($address, $errno, $errstr, $timeout); - - if($this->stream === FALSE) - { - throw new TeamSpeak3_Transport_Exception(TeamSpeak3_Helper_String::factory($errstr)->toUtf8()->toString(), $errno); - } - - @stream_set_timeout($this->stream, $timeout); - @stream_set_blocking($this->stream, $this->config["blocking"] ? 1 : 0); - } - - /** - * Disconnects from a remote server. - * - * @return void - */ - public function disconnect() - { - if($this->stream === null) return; - - $this->stream = null; - - TeamSpeak3_Helper_Signal::getInstance()->emit(strtolower($this->getAdapterType()) . "Disconnected"); - } - - /** - * Reads data from the stream. - * - * @param integer $length - * @throws TeamSpeak3_Transport_Exception - * @return TeamSpeak3_Helper_String - */ - public function read($length = 4096) - { - $this->connect(); - $this->waitForReadyRead(); - - $data = @stream_get_contents($this->stream, $length); - - TeamSpeak3_Helper_Signal::getInstance()->emit(strtolower($this->getAdapterType()) . "DataRead", $data); - - if($data === FALSE) - { - throw new TeamSpeak3_Transport_Exception("connection to server '" . $this->config["host"] . ":" . $this->config["port"] . "' lost"); - } - - return new TeamSpeak3_Helper_String($data); - } - - /** - * Reads a single line of data from the stream. - * - * @param string $token - * @throws TeamSpeak3_Transport_Exception - * @return TeamSpeak3_Helper_String - */ - public function readLine($token = "\n") - { - $this->connect(); - - $line = TeamSpeak3_Helper_String::factory(""); - - while(!$line->endsWith($token)) - { - $this->waitForReadyRead(); - - $data = @fgets($this->stream, 4096); - - TeamSpeak3_Helper_Signal::getInstance()->emit(strtolower($this->getAdapterType()) . "DataRead", $data); - - if($data === FALSE) - { - if($line->count()) - { - $line->append($token); - } - else - { - throw new TeamSpeak3_Transport_Exception("connection to server '" . $this->config["host"] . ":" . $this->config["port"] . "' lost"); - } - } - else - { - $line->append($data); - } - } - - return $line->trim(); - } - - /** - * Writes data to the stream. - * - * @param string $data - * @return void - */ - public function send($data) - { - $this->connect(); - - @stream_socket_sendto($this->stream, $data); - - TeamSpeak3_Helper_Signal::getInstance()->emit(strtolower($this->getAdapterType()) . "DataSend", $data); - } - - /** - * Writes a line of data to the stream. - * - * @param string $data - * @param string $separator - * @return void - */ - public function sendLine($data, $separator = "\n") - { - $size = strlen($data); - $pack = 4096; - - for($seek = 0 ;$seek < $size;) - { - $rest = $size-$seek; - $pack = $rest < $pack ? $rest : $pack; - $buff = substr($data, $seek, $pack); - $seek = $seek+$pack; - - if($seek >= $size) $buff .= $separator; - - $this->send($buff); - } - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Transport/UDP.php b/lib/ts3phpframework/libraries/TeamSpeak3/Transport/UDP.php deleted file mode 100644 index e0df880..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Transport/UDP.php +++ /dev/null @@ -1,113 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Transport_UDP - * @brief Class for connecting to a remote server through UDP. - */ -class TeamSpeak3_Transport_UDP extends TeamSpeak3_Transport_Abstract -{ - /** - * Connects to a remote server. - * - * @throws TeamSpeak3_Transport_Exception - * @return void - */ - public function connect() - { - if($this->stream !== null) return; - - $host = strval($this->config["host"]); - $port = strval($this->config["port"]); - - $address = "udp://" . (strstr($host, ":") !== FALSE ? "[" . $host . "]" : $host) . ":" . $port; - $timeout = (int) $this->config["timeout"]; - - $this->stream = @stream_socket_client($address, $errno, $errstr, $timeout); - - if($this->stream === FALSE) - { - throw new TeamSpeak3_Transport_Exception(TeamSpeak3_Helper_String::factory($errstr)->toUtf8()->toString(), $errno); - } - - @stream_set_timeout($this->stream, $timeout); - @stream_set_blocking($this->stream, $this->config["blocking"] ? 1 : 0); - } - - /** - * Disconnects from a remote server. - * - * @return void - */ - public function disconnect() - { - if($this->stream === null) return; - - $this->stream = null; - - TeamSpeak3_Helper_Signal::getInstance()->emit(strtolower($this->getAdapterType()) . "Disconnected"); - } - - /** - * Reads data from the stream. - * - * @param integer $length - * @throws TeamSpeak3_Transport_Exception - * @return TeamSpeak3_Helper_String - */ - public function read($length = 4096) - { - $this->connect(); - $this->waitForReadyRead(); - - $data = @fread($this->stream, $length); - - TeamSpeak3_Helper_Signal::getInstance()->emit(strtolower($this->getAdapterType()) . "DataRead", $data); - - if($data === FALSE) - { - throw new TeamSpeak3_Transport_Exception("connection to server '" . $this->config["host"] . ":" . $this->config["port"] . "' lost"); - } - - return new TeamSpeak3_Helper_String($data); - } - - /** - * Writes data to the stream. - * - * @param string $data - * @return void - */ - public function send($data) - { - $this->connect(); - - @stream_socket_sendto($this->stream, $data); - - TeamSpeak3_Helper_Signal::getInstance()->emit(strtolower($this->getAdapterType()) . "DataSend", $data); - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Viewer/Html.php b/lib/ts3phpframework/libraries/TeamSpeak3/Viewer/Html.php deleted file mode 100644 index 5fdf9cc..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Viewer/Html.php +++ /dev/null @@ -1,686 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Viewer_Html - * @brief Renders nodes used in HTML-based TeamSpeak 3 viewers. - */ -class TeamSpeak3_Viewer_Html implements TeamSpeak3_Viewer_Interface -{ - /** - * A pre-defined pattern used to display a node in a TeamSpeak 3 viewer. - * - * @var string - */ - protected $pattern = "
%5%8 %9%11%12
\n"; - - /** - * The TeamSpeak3_Node_Abstract object which is currently processed. - * - * @var TeamSpeak3_Node_Abstract - */ - protected $currObj = null; - - /** - * An array filled with siblingsfor the TeamSpeak3_Node_Abstract object which is currently - * processed. - * - * @var array - */ - protected $currSib = null; - - /** - * An internal counter indicating the number of fetched TeamSpeak3_Node_Abstract objects. - * - * @var integer - */ - protected $currNum = 0; - - /** - * The relative URI path where the images used by the viewer can be found. - * - * @var string - */ - protected $iconpath = null; - - /** - * The relative URI path where the country flag icons used by the viewer can be found. - * - * @var string - */ - protected $flagpath = null; - - /** - * The relative path of the file transter client script on the server. - * - * @var string - */ - protected $ftclient = null; - - /** - * Stores an array of local icon IDs. - * - * @var array - */ - protected $cachedIcons = array(100, 200, 300, 400, 500, 600); - - /** - * Stores an array of remote icon IDs. - * - * @var array - */ - protected $remoteIcons = array(); - - /** - * The TeamSpeak3_Viewer_Html constructor. - * - * @param string $iconpath - * @param string $flagpath - * @param string $ftclient - * @param string $pattern - * @return void - */ - public function __construct($iconpath = "images/viewer/", $flagpath = null, $ftclient = null, $pattern = null) - { - $this->iconpath = $iconpath; - $this->flagpath = $flagpath; - $this->ftclient = $ftclient; - - if($pattern) - { - $this->pattern = $pattern; - } - } - - /** - * Returns the code needed to display a node in a TeamSpeak 3 viewer. - * - * @param TeamSpeak3_Node_Abstract $node - * @param array $siblings - * @return string - */ - public function fetchObject(TeamSpeak3_Node_Abstract $node, array $siblings = array()) - { - $this->currObj = $node; - $this->currSib = $siblings; - - $args = array( - $this->getContainerIdent(), - $this->getContainerClass(), - $this->getContainerSummary(), - $this->getRowClass(), - $this->getPrefixClass(), - $this->getPrefix(), - $this->getCorpusClass(), - $this->getCorpusTitle(), - $this->getCorpusIcon(), - $this->getCorpusName(), - $this->getSuffixClass(), - $this->getSuffixIcon(), - $this->getSuffixFlag(), - ); - - return TeamSpeak3_Helper_String::factory($this->pattern)->arg($args); - } - - /** - * Returns a unique identifier for the current node which can be used as a HTML id - * property. - * - * @return string - */ - protected function getContainerIdent() - { - return $this->currObj->getUniqueId(); - } - - /** - * Returns a dynamic string for the current container element which can be used as - * a HTML class property. - * - * @return string - */ - protected function getContainerClass() - { - return "ts3_viewer " . $this->currObj->getClass(null); - } - - /** - * Returns the ID of the current node which will be used as a summary element for - * the container element. - * - * @return integer - */ - protected function getContainerSummary() - { - return $this->currObj->getId(); - } - - /** - * Returns a dynamic string for the current row element which can be used as a HTML - * class property. - * - * @return string - */ - protected function getRowClass() - { - return ++$this->currNum%2 ? "row1" : "row2"; - } - - /** - * Returns a string for the current prefix element which can be used as a HTML class - * property. - * - * @return string - */ - protected function getPrefixClass() - { - return "prefix " . $this->currObj->getClass(null); - } - - /** - * Returns the HTML img tags to display the prefix of the current node. - * - * @return string - */ - protected function getPrefix() - { - $prefix = ""; - - if(count($this->currSib)) - { - $last = array_pop($this->currSib); - - foreach($this->currSib as $sibling) - { - $prefix .= ($sibling) ? $this->getImage("tree_line.gif") : $this->getImage("tree_blank.png"); - } - - $prefix .= ($last) ? $this->getImage("tree_end.gif") : $this->getImage("tree_mid.gif"); - } - - return $prefix; - } - - /** - * Returns a string for the current corpus element which can be used as a HTML class - * property. If the current node is a channel spacer the class string will contain - * additional class names to allow further customization of the content via CSS. - * - * @return string - */ - protected function getCorpusClass() - { - $extras = ""; - - if($this->currObj instanceof TeamSpeak3_Node_Channel && $this->currObj->isSpacer()) - { - switch($this->currObj->spacerGetType()) - { - case (string) TeamSpeak3::SPACER_SOLIDLINE: - $extras .= " solidline"; - break; - - case (string) TeamSpeak3::SPACER_DASHLINE: - $extras .= " dashline"; - break; - - case (string) TeamSpeak3::SPACER_DASHDOTLINE: - $extras .= " dashdotline"; - break; - - case (string) TeamSpeak3::SPACER_DASHDOTDOTLINE: - $extras .= " dashdotdotline"; - break; - - case (string) TeamSpeak3::SPACER_DOTLINE: - $extras .= " dotline"; - break; - } - - switch($this->currObj->spacerGetAlign()) - { - case TeamSpeak3::SPACER_ALIGN_CENTER: - $extras .= " center"; - break; - - case TeamSpeak3::SPACER_ALIGN_RIGHT: - $extras .= " right"; - break; - - case TeamSpeak3::SPACER_ALIGN_LEFT: - $extras .= " left"; - break; - } - } - - return "corpus " . $this->currObj->getClass(null) . $extras; - } - - /** - * Returns the HTML img tags which can be used to display the various icons for a - * TeamSpeak_Node_Abstract object. - * - * @return string - */ - protected function getCorpusTitle() - { - if($this->currObj instanceof TeamSpeak3_Node_Server) - { - return "ID: " . $this->currObj->getId() . " | Clients: " . $this->currObj->clientCount() . "/" . $this->currObj["virtualserver_maxclients"] . " | Uptime: " . TeamSpeak3_Helper_Convert::seconds($this->currObj["virtualserver_uptime"]); - } - elseif($this->currObj instanceof TeamSpeak3_Node_Channel && !$this->currObj->isSpacer()) - { - return "ID: " . $this->currObj->getId() . " | Codec: " . TeamSpeak3_Helper_Convert::codec($this->currObj["channel_codec"]) . " | Quality: " . $this->currObj["channel_codec_quality"]; - } - elseif($this->currObj instanceof TeamSpeak3_Node_Client) - { - return "ID: " . $this->currObj->getId() . " | Version: " . TeamSpeak3_Helper_Convert::versionShort($this->currObj["client_version"]) . " | Platform: " . $this->currObj["client_platform"]; - } - elseif($this->currObj instanceof TeamSpeak3_Node_Servergroup || $this->currObj instanceof TeamSpeak3_Node_Channelgroup) - { - return "ID: " . $this->currObj->getId() . " | Type: " . TeamSpeak3_Helper_Convert::groupType($this->currObj["type"]) . " (" . ($this->currObj["savedb"] ? "Permanent" : "Temporary") . ")"; - } - } - - /** - * Returns a HTML img tag which can be used to display the status icon for a - * TeamSpeak_Node_Abstract object. - * - * @return string - */ - protected function getCorpusIcon() - { - if($this->currObj instanceof TeamSpeak3_Node_Channel && $this->currObj->isSpacer()) return; - - return $this->getImage($this->currObj->getIcon() . ".png"); - } - - /** - * Returns a string for the current corpus element which contains the display name - * for the current TeamSpeak_Node_Abstract object. - * - * @return string - */ - protected function getCorpusName() - { - if($this->currObj instanceof TeamSpeak3_Node_Channel && $this->currObj->isSpacer()) - { - if($this->currObj->spacerGetType() != TeamSpeak3::SPACER_CUSTOM) return; - - $string = $this->currObj["channel_name"]->section("]", 1, 99); - - if($this->currObj->spacerGetAlign() == TeamSpeak3::SPACER_ALIGN_REPEAT) - { - $string->resize(30, $string); - } - - return htmlspecialchars($string); - } - - if($this->currObj instanceof TeamSpeak3_Node_Client) - { - $before = array(); - $behind = array(); - - foreach($this->currObj->memberOf() as $group) - { - if($group->getProperty("namemode") == TeamSpeak3::GROUP_NAMEMODE_BEFORE) - { - $before[] = "[" . htmlspecialchars($group["name"]) . "]"; - } - elseif($group->getProperty("namemode") == TeamSpeak3::GROUP_NAMEMODE_BEHIND) - { - $behind[] = "[" . htmlspecialchars($group["name"]) . "]"; - } - } - - return implode("", $before) . " " . htmlspecialchars($this->currObj) . " " . implode("", $behind); - } - - return htmlspecialchars($this->currObj); - } - - /** - * Returns a string for the current suffix element which can be used as a HTML - * class property. - * - * @return string - */ - protected function getSuffixClass() - { - return "suffix " . $this->currObj->getClass(null); - } - - /** - * Returns the HTML img tags which can be used to display the various icons for a - * TeamSpeak_Node_Abstract object. - * - * @return string - */ - protected function getSuffixIcon() - { - if($this->currObj instanceof TeamSpeak3_Node_Server) - { - return $this->getSuffixIconServer(); - } - elseif($this->currObj instanceof TeamSpeak3_Node_Channel) - { - return $this->getSuffixIconChannel(); - } - elseif($this->currObj instanceof TeamSpeak3_Node_Client) - { - return $this->getSuffixIconClient(); - } - } - - /** - * Returns the HTML img tags which can be used to display the various icons for a - * TeamSpeak_Node_Server object. - * - * @return string - */ - protected function getSuffixIconServer() - { - $html = ""; - - if($this->currObj["virtualserver_icon_id"]) - { - if(!$this->currObj->iconIsLocal("virtualserver_icon_id") && $this->ftclient) - { - if(!isset($this->cacheIcon[$this->currObj["virtualserver_icon_id"]])) - { - try { - $download = $this->currObj->transferInitDownload(rand(0x0000, 0xFFFF), 0, $this->currObj->iconGetName("virtualserver_icon_id")); - } catch(TeamSpeak3_Exception $e) { - return; - } - - if($this->ftclient == "data:image") - { - $download = TeamSpeak3::factory("filetransfer://" . (strstr($download["host"], ":") !== FALSE ? "[" . $download["host"] . "]" : $download["host"]) . ":" . $download["port"])->download($download["ftkey"], $download["size"]); - } - - $this->cacheIcon[$this->currObj["virtualserver_icon_id"]] = $download; - } - else - { - $download = $this->cacheIcon[$this->currObj["virtualserver_icon_id"]]; - } - - if($this->ftclient == "data:image") - { - $html .= $this->getImage("data:" . TeamSpeak3_Helper_Convert::imageMimeType($download) . ";base64," . base64_encode($download), "Server Icon", null, FALSE); - } - else - { - $html .= $this->getImage($this->ftclient . "?ftdata=" . base64_encode(serialize($download)), "Server Icon", null, FALSE); - } - } - elseif(in_array($this->currObj["virtualserver_icon_id"], $this->cachedIcons)) - { - $html .= $this->getImage("group_icon_" . $this->currObj["virtualserver_icon_id"] . ".png", "Server Icon"); - } - } - - return $html; - } - - /** - * Returns the HTML img tags which can be used to display the various icons for a - * TeamSpeak_Node_Channel object. - * - * @return string - */ - protected function getSuffixIconChannel() - { - if($this->currObj instanceof TeamSpeak3_Node_Channel && $this->currObj->isSpacer()) return; - - $html = ""; - - if($this->currObj["channel_flag_default"]) - { - $html .= $this->getImage("channel_flag_default.png", "Default Channel"); - } - - if($this->currObj["channel_flag_password"]) - { - $html .= $this->getImage("channel_flag_password.png", "Password-protected"); - } - - if($this->currObj["channel_codec"] == TeamSpeak3::CODEC_CELT_MONO || $this->currObj["channel_codec"] == TeamSpeak3::CODEC_OPUS_MUSIC) - { - $html .= $this->getImage("channel_flag_music.png", "Music Codec"); - } - - if($this->currObj["channel_needed_talk_power"]) - { - $html .= $this->getImage("channel_flag_moderated.png", "Moderated"); - } - - if($this->currObj["channel_icon_id"]) - { - if(!$this->currObj->iconIsLocal("channel_icon_id") && $this->ftclient) - { - if(!isset($this->cacheIcon[$this->currObj["channel_icon_id"]])) - { - try { - $download = $this->currObj->getParent()->transferInitDownload(rand(0x0000, 0xFFFF), 0, $this->currObj->iconGetName("channel_icon_id")); - } catch(TeamSpeak3_Exception $e) { - return; - } - - if($this->ftclient == "data:image") - { - $download = TeamSpeak3::factory("filetransfer://" . (strstr($download["host"], ":") !== FALSE ? "[" . $download["host"] . "]" : $download["host"]) . ":" . $download["port"])->download($download["ftkey"], $download["size"]); - } - - $this->cacheIcon[$this->currObj["channel_icon_id"]] = $download; - } - else - { - $download = $this->cacheIcon[$this->currObj["channel_icon_id"]]; - } - - if($this->ftclient == "data:image") - { - $html .= $this->getImage("data:" . TeamSpeak3_Helper_Convert::imageMimeType($download) . ";base64," . base64_encode($download), "Channel Icon", null, FALSE); - } - else - { - $html .= $this->getImage($this->ftclient . "?ftdata=" . base64_encode(serialize($download)), "Channel Icon", null, FALSE); - } - } - elseif(in_array($this->currObj["channel_icon_id"], $this->cachedIcons)) - { - $html .= $this->getImage("group_icon_" . $this->currObj["channel_icon_id"] . ".png", "Channel Icon"); - } - } - - return $html; - } - - /** - * Returns the HTML img tags which can be used to display the various icons for a - * TeamSpeak_Node_Client object. - * - * @return string - */ - protected function getSuffixIconClient() - { - $html = ""; - - if($this->currObj["client_is_priority_speaker"]) - { - $html .= $this->getImage("client_priority.png", "Priority Speaker"); - } - - if($this->currObj["client_is_channel_commander"]) - { - $html .= $this->getImage("client_cc.png", "Channel Commander"); - } - - if($this->currObj["client_is_talker"]) - { - $html .= $this->getImage("client_talker.png", "Talk Power granted"); - } - elseif($cntp = $this->currObj->getParent()->channelGetById($this->currObj["cid"])->channel_needed_talk_power) - { - if($cntp > $this->currObj["client_talk_power"]) - { - $html .= $this->getImage("client_mic_muted.png", "Insufficient Talk Power"); - } - } - - foreach($this->currObj->memberOf() as $group) - { - if(!$group["iconid"]) continue; - - $type = ($group instanceof TeamSpeak3_Node_Servergroup) ? "Server Group" : "Channel Group"; - - if(!$group->iconIsLocal("iconid") && $this->ftclient) - { - if(!isset($this->cacheIcon[$group["iconid"]])) - { - try { - $download = $group->getParent()->transferInitDownload(rand(0x0000, 0xFFFF), 0, $group->iconGetName("iconid")); - } catch(TeamSpeak3_Exception $e) { - return; - } - - if($this->ftclient == "data:image") - { - $download = TeamSpeak3::factory("filetransfer://" . (strstr($download["host"], ":") !== FALSE ? "[" . $download["host"] . "]" : $download["host"]) . ":" . $download["port"])->download($download["ftkey"], $download["size"]); - } - - $this->cacheIcon[$group["iconid"]] = $download; - } - else - { - $download = $this->cacheIcon[$group["iconid"]]; - } - - if($this->ftclient == "data:image") - { - $html .= $this->getImage("data:" . TeamSpeak3_Helper_Convert::imageMimeType($download) . ";base64," . base64_encode($download), $group . " [" . $type . "]", null, FALSE); - } - else - { - $html .= $this->getImage($this->ftclient . "?ftdata=" . base64_encode(serialize($download)), $group . " [" . $type . "]", null, FALSE); - } - } - elseif(in_array($group["iconid"], $this->cachedIcons)) - { - $html .= $this->getImage("group_icon_" . $group["iconid"] . ".png", $group . " [" . $type . "]"); - } - } - - if($this->currObj["client_icon_id"]) - { - if(!$this->currObj->iconIsLocal("client_icon_id") && $this->ftclient) - { - if(!isset($this->cacheIcon[$this->currObj["client_icon_id"]])) - { - try { - $download = $this->currObj->getParent()->transferInitDownload(rand(0x0000, 0xFFFF), 0, $this->currObj->iconGetName("client_icon_id")); - } catch(TeamSpeak3_Exception $e) { - return; - } - - if($this->ftclient == "data:image") - { - $download = TeamSpeak3::factory("filetransfer://" . (strstr($download["host"], ":") !== FALSE ? "[" . $download["host"] . "]" : $download["host"]) . ":" . $download["port"])->download($download["ftkey"], $download["size"]); - } - - $this->cacheIcon[$this->currObj["client_icon_id"]] = $download; - } - else - { - $download = $this->cacheIcon[$this->currObj["client_icon_id"]]; - } - - if($this->ftclient == "data:image") - { - $html .= $this->getImage("data:" . TeamSpeak3_Helper_Convert::imageMimeType($download) . ";base64," . base64_encode($download), "Client Icon", null, FALSE); - } - else - { - $html .= $this->getImage($this->ftclient . "?ftdata=" . base64_encode(serialize($download)), "Client Icon", null, FALSE); - } - } - elseif(in_array($this->currObj["client_icon_id"], $this->cachedIcons)) - { - $html .= $this->getImage("group_icon_" . $this->currObj["client_icon_id"] . ".png", "Client Icon"); - } - } - - return $html; - } - - /** - * Returns a HTML img tag which can be used to display the country flag for a - * TeamSpeak_Node_Client object. - * - * @return string - */ - protected function getSuffixFlag() - { - if(!$this->currObj instanceof TeamSpeak3_Node_Client) return; - - if($this->flagpath && $this->currObj["client_country"]) - { - return $this->getImage($this->currObj["client_country"]->toLower() . ".png", $this->currObj["client_country"], null, FALSE, TRUE); - } - } - - /** - * Returns the code to display a custom HTML img tag. - * - * @param string $name - * @param string $text - * @param string $class - * @param boolean $iconpath - * @param boolean $flagpath - * @return string - */ - protected function getImage($name, $text = "", $class = null, $iconpath = TRUE, $flagpath = FALSE) - { - $src = ""; - - if($iconpath) - { - $src = $this->iconpath; - } - - if($flagpath) - { - $src = $this->flagpath; - } - - return ""; - } -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Viewer/Interface.php b/lib/ts3phpframework/libraries/TeamSpeak3/Viewer/Interface.php deleted file mode 100644 index 62eed20..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Viewer/Interface.php +++ /dev/null @@ -1,42 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Viewer_Interface - * @brief Interface class describing a TeamSpeak 3 viewer. - */ -interface TeamSpeak3_Viewer_Interface -{ - /** - * Returns the code needed to display a node in a TeamSpeak 3 viewer. - * - * @param TeamSpeak3_Node_Abstract $node - * @param array $siblings - * @return string - */ - public function fetchObject(TeamSpeak3_Node_Abstract $node, array $siblings = array()); -} diff --git a/lib/ts3phpframework/libraries/TeamSpeak3/Viewer/Text.php b/lib/ts3phpframework/libraries/TeamSpeak3/Viewer/Text.php deleted file mode 100644 index eecd5ee..0000000 --- a/lib/ts3phpframework/libraries/TeamSpeak3/Viewer/Text.php +++ /dev/null @@ -1,107 +0,0 @@ -. - * - * @package TeamSpeak3 - * @version 1.1.24 - * @author Sven 'ScP' Paulsen - * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved. - */ - -/** - * @class TeamSpeak3_Viewer_Text - * @brief Renders nodes used in ASCII-based TeamSpeak 3 viewers. - */ -class TeamSpeak3_Viewer_Text implements TeamSpeak3_Viewer_Interface -{ - /** - * A pre-defined pattern used to display a node in a TeamSpeak 3 viewer. - * - * @var string - */ - protected $pattern = "%0%1 %2\n"; - - /** - * Returns the code needed to display a node in a TeamSpeak 3 viewer. - * - * @param TeamSpeak3_Node_Abstract $node - * @param array $siblings - * @return string - */ - public function fetchObject(TeamSpeak3_Node_Abstract $node, array $siblings = array()) - { - $this->currObj = $node; - $this->currSib = $siblings; - - $args = array( - $this->getPrefix(), - $this->getCorpusIcon(), - $this->getCorpusName(), - ); - - return TeamSpeak3_Helper_String::factory($this->pattern)->arg($args); - } - - /** - * Returns the ASCII string to display the prefix of the current node. - * - * @return string - */ - protected function getPrefix() - { - $prefix = ""; - - if(count($this->currSib)) - { - $last = array_pop($this->currSib); - - foreach($this->currSib as $sibling) - { - $prefix .= ($sibling) ? "| " : " "; - } - - $prefix .= ($last) ? "\\-" : "|-"; - } - - return $prefix; - } - - /** - * Returns an ASCII string which can be used to display the status icon for a - * TeamSpeak_Node_Abstract object. - * - * @return string - */ - protected function getCorpusIcon() - { - return $this->currObj->getSymbol(); - } - - /** - * Returns a string for the current corpus element which contains the display name - * for the current TeamSpeak_Node_Abstract object. - * - * @return string - */ - protected function getCorpusName() - { - return $this->currObj; - } -} diff --git a/rules.php b/rules.php deleted file mode 100644 index e026b4f..0000000 --- a/rules.php +++ /dev/null @@ -1,43 +0,0 @@ -

' . translate($lang["rules"]["filenotfound"]) . '

'; -} else { - $file = readFileContent($path); - - if (!$file) { - echo '

' . translate($lang["rules"]["readerror"]) . '

'; - } else { -?> -
-
-

-
-
- text($file); ?> -
-
- diff --git a/viewer.php b/viewer.php deleted file mode 100644 index 72d892c..0000000 --- a/viewer.php +++ /dev/null @@ -1,44 +0,0 @@ -isExpired()) { - $cacheutils->setValue([getViewer(), date('d-m-Y H:i:s')], 300); -} - -$tsviewer = $cacheutils->getValue(); - -// print_r ($tsviewer); - -function getViewer() { - global $lang; - - try { - $tsAdmin = getTeamspeakConnection("#no_query_clients"); - $base = "lib/ts3phpframework/images"; - return $tsAdmin->getViewer(new TeamSpeak3_Viewer_Html("$base/viewer/", "$base/flags/", "data:image")); - } catch (TeamSpeak3_Exception $e) { - return '

' . translate($lang["general"]["scripterror"], [$e->getCode(), $e->getMessage()]) . '

'; - } -} - -?> - -
-
-

-
-
- -
- -
- -