From 698e798b07e7fe4a4ae43ca405e0be5763f96613 Mon Sep 17 00:00:00 2001 From: Justin Beale Date: Thu, 20 Mar 2014 03:01:53 -0400 Subject: [PATCH 1/6] search engine stuff --- .gitignore | 3 +- app/composer.json | 27 ++- app/composer.phar | Bin 962146 -> 1006588 bytes app/config/application.config.php | 3 +- app/module/Search/Module.php | 49 +++++ app/module/Search/autoload_classmap.php | 4 + app/module/Search/config/module.config.php | 32 ++++ .../Search/Controller/SearchController.php | 87 +++++++++ .../src/Search/Model/IndexedDocument.php | 169 ++++++++++++++++++ .../Search/src/Search/Model/LuceneIndex.php | 29 +++ .../Search/view/search/search/index.phtml | 3 + .../Search/view/search/search/indexops.phtml | 3 + .../Search/view/search/search/results.phtml | 0 13 files changed, 406 insertions(+), 3 deletions(-) create mode 100644 app/module/Search/Module.php create mode 100644 app/module/Search/autoload_classmap.php create mode 100644 app/module/Search/config/module.config.php create mode 100644 app/module/Search/src/Search/Controller/SearchController.php create mode 100644 app/module/Search/src/Search/Model/IndexedDocument.php create mode 100644 app/module/Search/src/Search/Model/LuceneIndex.php create mode 100644 app/module/Search/view/search/search/index.phtml create mode 100644 app/module/Search/view/search/search/indexops.phtml create mode 100644 app/module/Search/view/search/search/results.phtml diff --git a/.gitignore b/.gitignore index dce31f0..6816a6f 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ # Icon must ends with two \r. Icon +lucene/ # Thumbnails ._* @@ -35,4 +36,4 @@ Icon out/ # generated by mpeltonen/sbt-idea plugin -.idea_modules/ \ No newline at end of file +.idea_modules/ diff --git a/app/composer.json b/app/composer.json index 4b21080..1cab95f 100644 --- a/app/composer.json +++ b/app/composer.json @@ -7,8 +7,33 @@ "zf2" ], "homepage": "http://framework.zend.com/", + "repositories": [ + { + "type": "composer", + "url": "https://packages.zendframework.com/" + }, + { + "type": "package", + "package": { + "name": "zendframework/zendsearch", + "version": "0.1", + "source": { + "url": "https://github.com/zendframework/ZendSearch.git", + "type": "git", + "reference": "master" + }, + "autoload": { + "psr-0": { + "ZendSearch": "library/" + } + } + } + } + ], + "require": { "php": ">=5.3.3", - "zendframework/zendframework": "2.2.*" + "zendframework/zendframework": "2.2.*", + "zendframework/zendsearch" : ">=0.1" } } diff --git a/app/composer.phar b/app/composer.phar index 8b5328daed0923326b610d5cdd33032c3a026bf1..ae24fa14af34cc5f73d797fed969ff286e39cf94 100755 GIT binary patch delta 42788 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 delta 10985 zcma)id0Alk=wKO|uuEL9SN4Y9J`63jKkbs=845@jP^%n?e^>MIK#rDHv+o z<(*@Se2U_gm2^?Bte}hAl*Qs|At;FOBGCKBy=%~G$wstG%cGx_p_EEgRf_lKP$~k$ z*Bm~LoGK=Hn`)Z)b~eQlnDUx*8inyGNU4sZ=M&ULVwROs5ZK6ncm#c=PC+-Q!$oZ< zMG%<%RrEP@HkOM2t2%}r|3qCLOcWf|2L;`C{n$O2c`BNxiKN&inku>&(^SZ0xtOf^ z)W(lw35nWpF*%G%An=pQ%(ZANluGE<#)zRBiX_lIva~_g{2?vV{IGTgWv=7P=wdcs zLKmBO=FDS!r7ZUaZBUSBdtMGYrZ=NXT{Iq5wGAA`_DY|9P;E-iDIyk^0Wodq>Gio zH8Sb**i9jQ+f$LKq@?G9qh!QW*z3ub=fWlst3txW6ZuqG0>ck2e+O*~p=>-@;u-YC z-KZ(fh`K}r5(O6QETNW4Tp={l#a{&$U@^3s?zD!^ri+I{E5vWos0;#6oR|_oP1w0z zVmL|@8Ot(}I_AEpprB4&_`7IBFrf%V2SgU6SH)8Ctys#3z&p)9pJRMNQB_zRmDU|b z6YQJtprC~N4u3D3O8C4L7Dg#P538e#g77)ASMJAl=3ZD=hSm#aR1&I3&xAA2o(P{y zNpm8ocBd19g6@7G@GaBMfObYOxd$WWPB3fH-`OQ6260+hBuk9W$R^6{vB(;__%V_N zt|p41wnfd5xxByy1r;@CzBD0cSF{?PjM1Tl=wNy_JDMeZAi7>YvP=;aR4BxhqOx!^ zqU6Exj(IL;pUamsGB}d1qplK!BqxhOIqGO3VWHW_|)wpm-oCs|3e0vDZ zG1=(RwI*i5F;k-~VL*i=_Fe2WbT*tgMu+NCER=L*$~?L_nzE2Ctf`seN!DTs3|Tg- z8#!^0UvG^-TT+=}kEBkgE?%FytO2*fY_uXROx(aa0D+Dh-<~699pUjp z8msRUX{^4}&GRXW>R+%_{Ga1NemeoIy&ScW%rjzibrQGwPGV~Zp60)c9rZZm74_N z)R)0>ZgmFBm%nDPVvMzxiOZ(Ya|HSZ{!k!yYKo%Yx!feK(a#O zs+YSw0Y5Qr5B3NVPoRDLgGG!)i*mE*ZFV27>DG5U-;{6ju`C{qWU+3zC5z4r|G-Cs z9XCyqb8svx)Ev&u?T%mPGO4f!yKHqEil0 zJd1k~@eP3)%bKbukcoNp)IuD?`&-%q6NpZR_#Wq!Gx{-|oKs_y^=MZfo7tYqqc_WT zoVYKB|2buXB6l*QsGZDO!IsI>WglIN4+{F&6ZN5dClY2{KC|AG&xViwd^UXS&u5+= z&!-paG29GK)x7g}IY>LF=#XE6&*qU%XI?<}Qp!wtQd2|2tX7TrPXm|*Gvf{>VvLa10m?GX8?6P@z2D8al%@$j#J1D#HYIglJ z*L2F#zsHT>OloW)lWv0=k3k3~y>=V+8L2{)JhO)${>@Bw$-Y0cjqViIG6DD2E}=WR zI_9+DI(F*KI(DrU&0?~5&SEYQX7|fV+>1x6@6w#N;lwCK2WOiotFyBi&&D|(x^s9= zk4)c&A63hXue&hevV*e?Xhl6srrYY7z<<`WG-z+=qYR#JV5rPSmi3z&nZDzV%%=LL z#bPRsG_jq)qpudUqh*V6-ZWX!r6!g)@pBpPb#n(P@4wF-l$8s|UF&Rg-scm_b&22Kv-Pm4}spUDj8tmPvXv+c}%3lyp zsb($clc|bvA{owo^d@>A*UVU_3Ei?#hb}H)la8^4d4JvI#YZhHLUjvi7&vUL)cW#I zsH285=xE{5#f3~vW*PW34WF#@NO} zeq)=D?p$nR()-$3bdR?)PgZrXz>jsXQ^}odXLBbbzSP-I`M4Le*uK7)?G$&hknZea zr$V|1DDlc}CjDIZ5ZzhqTt*jfI+^!vJ?t^Ewud!>qdm2hCa!nBYCl(q~6@za4Yw91o!n!I!z+liS} zHayXbmU(k2`5v#CE?)5_%Zmf!-i`CYUu{T+3IkVmVEp;@Dvi$-81;G3J4d#G>WC)h zK;&O9CBT^s?PTfP2F}bu?L%A)#INK2bfECFr#Vg!&KEU_$oO|7bmwWc2b>pF9GdY( zSU$2YQlGT)+Zc528kN8~u zF5i54pKM)CV(xSM1LOcaafiyBWFbE-)?)oylWWNDa`&4ut~epn@D?h?0?r>)F|f0r zPlfXv6w_d4u_6M_Z0BQPq(rOM%y9cKADDYRMjgCXp@;XbRpi1a|J1}m<4kNp_4SGd z>GA6oMM}7I1I8@ctmu$#xl!=~2d~|y2!Vt=UJss|6*^F=m0^(kK(GNGx>?Z!%U{x1 zAo*rRsPw`n#cC^@-^E*)^U{>Ol=(-+5>C4B8HG8C%YdDqDbl5{-cyKNqIuLeWGXdb zmv{r-Uhj}8$7CLM26_kE9i7EsawyWIM@}ln>ZI4xl>sGG>{qJbL5tE3uf3&=QtQca z_^)i`OlfPT^0_#8q(+$qw_BCb@NSKA@WGYUN)BLSa5x-OD3jp)L43OWVP(7Y`b_2Z zx$xQwWgi- z=ddfo((4@_@%nLJTjKY6EZL@xHup%SuXoVB+*MRmGpDPeaYo%d>2bemU$C@sgKB%c zv}(KRjshw7P1U0!?EOY1z*irsj8gl@s%!<{?zHvWZH1lEO@C8e;Gu0yZG%t&r`Dk- zxdbqs;&Rxhe=;Pr)~`g@msAL9x&=6!4{7T#%JXs(Yn{Pu>B3SK|1(``srrr z4vWU1fSH?g(ePfp(jr+iH5~$kPQu2Ft5hMdXPU+VA!=13Y$?=)L}vKqmTNVcd%gJO z;B&e?0dS~Q2{JnBe?oVHvk}Lotxyy7KOf&!h((+&)Ko}?MVgN}D0m5HWk#7sqmUl0 z&~#0Lf*;k1aOgHonzXuKlc$zG^JwY}@ct)?Fj%-o)9#Q9Y>Bt0-7@0rUFsZg`7NDR z(`tRc*XMHf4&v&&3JHhr(L_SwTFrH#S7TmSs~Ir<$Ai-5b(%yDn*WU5b80D!JibO_!Es4|%||q`F%veJO3QGaF^jU{{v(=u zqq9xF*huhBpU=4}197*;Nef@nTu{L2S2WrGCJzgQRYx^hQq`-PhxsVtuav8OBGnz& zgmeGqkKT7QU&7gUHGNlOr1}$@1qSFe2kYYc-9xTo{fN)K92Xqv2Ojsx=#Vqu^}({A z6*WEBy9Y><+x@vR3U+*<83ukAmk#ycYIM>w zUuu#{q*EE%5T#U~t3z1Ka`JIy?(7 zS;Hdj94-~S2lym)hp)qv3R@2F@o;dFb}4%6!Blj9uL?G_YO~=2D8i-pIT#gn%1t$1&1nK>BUgD(kY`#FD>cD@nCWlY2 zrbCcvxTgz;Z@J4C=yG{_y?uD9%OIJbVX4iOjbJy773cqg<{H~HylGi5eZDQPs@h_e z%5(W83P|oz=^-~xse$ub@h3v9m48wp9e40K3dxYqi=hUS*Jnx{a0gN?R=Foh71Q}X zUOT_n=N<`kfO?c9v!5Raeg%ix1Hx>;Fe)k3f%Z?NCNp8t+ZN;;qbrs2x;4S{;Y;f za?#T6@A*f9HD*#fe%LguN|ot(x?#0Sbt;`*fQzDz7rSce=2XwO=uPYowub9wO*Xqd zy+fmYt{TF@zbX@a$qL z#aU;O)v=Hv2kbFAqY|&~Jg-XxMT{;3>SJ^#jC%clI0T#OmVomuD`ziF-s0zAc^O zst8zQ)Cn;4tU3~|HR>j1d;M-wZhl;-w1?sjWcJ`$;nzEEPoHZgB*!a_@WGHqd*@yq zza9?~@>#h*y92Ia;&NQ=ZV#C?Nad5wc6+C-Y`_(e=Z}A5-Zkv<4Y)FBOT<1O>RRer z<;Rv?b<&@KQ+|RsS$n#Pk`oNuCy<@A=TI%MF|z6||5XH+mH$us*nx1?s7uQ-U#28% zFR$^bt2NB9cEY8#x>(bdh{c`iB3;|6r~R0X7Ira ze<78Nmfi3qPvk_p;^cs<-Z|1P2bNKh-@iomild#KQeCocC|r8lp(_cOvS;WDIjC{! zMAY$0g!E~(?npjtUaeacNqmprGXq`n^^}pidU0wF+_G91r_D(a zxu1C(KNv!6k+u>IFzT>>z2TC8+9pnU8{?MwHtI%oK^a9 zqb|t?+n?6);M}f@kP7$fPU)owp4ROzkn9(9Rjn|uQ6D9})~Np>8ZIp~L`bLl^%||x zZYlxJqmPs>4eJF?GJ5rELg4K#RYK^fpLIBT&BEJj^x0DSTKz%g4Z|Dt((p#Z8wU8> zjfNQMnp+J?TG)1{q1w@|u6XdG9o;n_j~kL9Vt zc6cIN2!%hU3I>B5wZNd;Z!3ejtwMa1tqi}8M(}0kc998Z1h=Vd6U<2yW=p5jg!vq7 zSuF5yhf|1x`bk1Cgl7sCSe7otz?M`YA>K^$Rc>;gURPtkX#ws+{cew|51f^l>Zx=g zB+TrWzvbA~##N+2E{>1NH0XbHogEPU+R$&&u zR=>8S9Dg~1uWJMcR2K+|#0OE*x&q-PE>V8ClC~yKG^8ie6-n;3Qs*>bCI=&ZLOdKU z6bhg+GdOy^1wRE`11_J%RHSFudIsCFGL!HH!&c=cJR`VFMJBhu3ln9~ZCpFOPQS}! z!5@C`N2n_}VKThu^0|AjChhThhg?pNCG!`tn3(KdP3i4f;_3}xrtngckSI_|at9`R zT(J;0mG03u&ab7@y{lPzMu&#T;h|!|7|R%XR$XzDSP7NAA-V8Iv0w*fiIAfGmE-R$ z5e{i+D}={N1&hLJg^PnYkoHnR5094$Gmz*7L#FbS@iDa3+%w(u~VnT@k-SG^D!)@Pw#O2}6M zlJ~2qv=$3ynbRO>VALXnY1!NWwmHIaDXCtV%>m~Y;vgqS&1ZAY7lbegu~x@nuG`9aAvX;W48$N0IopAT*3Y;6Ek7mT&%aaNfimt&c%LnvP=j{-BC}N=V@~UewCFz4%H}PRmz6p1pi!DN`<`*R$QifBA;NUtljzm+Ba61-$ zwoHi18TGiAjk@aaFyWUYbNT5-b}#2JNefzbaJW}!fTA88;`jS->^Bc!QKz!8t19}0 z8+9qTo@55_dY{mymM?G8&5U{`0Dm=u-7X?jKw-D}$5SA$z;lBq2F?6B{nwOI6 zQR;RHDI6$raC(Ff;4ZkoAM4-HFE|vXrLdtN_v8;U1reqW2s^!4uASEMO0=rZAwC!ghJxcW^_Pv2Er@cJBKl3>xxH#Tl- z@(9}Q7B;CTvcLh8mf$Y>;UpoV0{0(!Uwi#>VYQH{g7kiQg2tEnFT2583I1uuA85PqU%kcZ8LakerSmWm$_r0ZUhoDS(< ztAvlZxLgbQ{C2tI@jVl8`8;^bk_+M*q32g+5Dlvz#Zg|eSIEYdDF2bHucDc0+eb6g ztiUgo4f}8e#`Xz4rm4rz(Eabd{3lO&@-25)oo-1yivOt~Xl7M?)&B!20#NJ# diff --git a/app/config/application.config.php b/app/config/application.config.php index 53802ff..cdd9acf 100644 --- a/app/config/application.config.php +++ b/app/config/application.config.php @@ -5,7 +5,8 @@ 'Application', 'Users', 'Fridge', - 'Recipe' + 'Recipe', + 'Search' ), // These are various options for the listeners attached to the ModuleManager diff --git a/app/module/Search/Module.php b/app/module/Search/Module.php new file mode 100644 index 0000000..75bd19c --- /dev/null +++ b/app/module/Search/Module.php @@ -0,0 +1,49 @@ + array( + __DIR__ . '/autoload_classmap.php', + ), + 'Zend\Loader\StandardAutoloader' => array( + 'namespaces' => array( + __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__, + ), + ), + ); + } + + public function getConfig() + { + return include __DIR__ . '/config/module.config.php'; + } + public function getServiceConfig() + { + return array( + 'factories' => array( + 'Recipe\Model\RecipeTable' => function($sm) { + $tableGateway = $sm->get('RecipeTableGateway'); + $table = new RecipeTable($tableGateway); + return $table; + }, + 'RecipeTableGateway' => function ($sm) { + $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter'); + $resultSetPrototype = new ResultSet(); + $resultSetPrototype->setArrayObjectPrototype(new Recipe()); + return new TableGateway('recipe', $dbAdapter, null, $resultSetPrototype); + }, + ), + ); + } +} + diff --git a/app/module/Search/autoload_classmap.php b/app/module/Search/autoload_classmap.php new file mode 100644 index 0000000..d864ec9 --- /dev/null +++ b/app/module/Search/autoload_classmap.php @@ -0,0 +1,4 @@ + array( + 'invokables' => array( + 'Search\Controller\Search' => 'Search\Controller\SearchController', + ), + ), + 'router' => array( + 'routes' => array( + 'search' => array( + 'type' => 'segment', + 'options' => array( + 'route' => '/search[/][:action][/:id]', + 'constraints' => array( + 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', + 'id' => '[0-9]+', + ), + 'defaults' => array( + 'controller' => 'Search\Controller\Search', + 'action' => 'index', + ), + ), + ), + ), + ), + 'view_manager' => array( + 'template_path_stack' => array( + 'search' => __DIR__ . '/../view', + ), + ), +); + diff --git a/app/module/Search/src/Search/Controller/SearchController.php b/app/module/Search/src/Search/Controller/SearchController.php new file mode 100644 index 0000000..de37bd7 --- /dev/null +++ b/app/module/Search/src/Search/Controller/SearchController.php @@ -0,0 +1,87 @@ +luceneIndex = LuceneHelper::GetLuceneIndex(); + } + + public function indexAction() + { + return new ViewModel(array( + 'recipes' => $this->getRecipeTable()->fetchAll(), + )); + } + + public function indexopsAction() + { + + $this->luceneIndex = LuceneHelper::NewLuceneIndex(LuceneHelper::DEFAULT_LUCENE_PATH); + //Running this page will cause the site to be indexed. + //TODO break these out from here because having them here is NOOB TERRITRY + + //Get all Recipes and index them (easy way but if this was a real site we would run out of memory doing it this way) + $recipes = $this->getRecipeTable()->fetchAll(); + + foreach($recipes as $recipe) { + $indexedDoc = new IndexedDocument(); + $indexedDoc->setName($recipe->recName); + $indexedDoc->setAuthor("Test User"); //TODO user integration + $indexedDoc->setUrl("/recipe/permalink?id=".$recipe->recID); + $indexedDoc->setContent($recipe->instruct); + $indexedDoc->setType(IndexedDocumentType::Recipe); + $indexedDoc->setTags("test"); + $this->luceneIndex->addDocument($indexedDoc); + } + return new ViewModel(); + } + + public function resultsAction() { + + + $this->luceneIndex = LuceneHelper::GetLuceneIndex(); + $results = $this->luceneIndex->search($_GET['q']); + $viewmodel = new ViewModel(array( + 'results' => $results + )); + $viewmodel->setTerminal(true); //DO NOT load layout for this page + + $hits = array(); + foreach($results as $hit) { + $hit->document = IndexedDocument::extractDocument($hit); + array_push($hits, $hit); + } + + header("Content-Type: application/json"); + $json = Json::encode($hits); + echo Json::prettyPrint($json, array('indent' =>" ")); + return $viewmodel; + } + + + //TODO THIS SHOULD NOT BE IN HERE + public function getRecipeTable() + { + if (!$this->recipeTable) { + $sm = $this->getServiceLocator(); + $this->recipeTable = $sm->get('Recipe\Model\RecipeTable'); + } + return $this->recipeTable; + } + + +} \ No newline at end of file diff --git a/app/module/Search/src/Search/Model/IndexedDocument.php b/app/module/Search/src/Search/Model/IndexedDocument.php new file mode 100644 index 0000000..e877d1a --- /dev/null +++ b/app/module/Search/src/Search/Model/IndexedDocument.php @@ -0,0 +1,169 @@ +addField(Document\Field::text('name', $this->getName())); + $doc->addField(Document\Field::text('type', $this->getType())); + $doc->addField(Document\Field::unIndexed('lastModified', $this->getLastModified())); + $doc->addField(Document\Field::text('url', $this->getUrl())); + $doc->addField(Document\Field::text('author', $this->getAuthor())); + $doc->addField(Document\Field::keyword('tags', $this->getTags())); + $doc->addField(Document\Field::unStored('content', $this->getContent())); + return $doc; + } + + public static function extractDocument($hit) { + $doc = new IndexedDocument(); + $doc->setName($hit->getDocument()->name); + $doc->setType($hit->getDocument()->type); + $doc->setLastModified($hit->getDocument()->lastModified); + $doc->setUrl($hit->getDocument()->url); + $doc->setAuthor($hit->getDocument()->author); + $doc->setTags($hit->getDocument()->tags); + + return $doc; + } + + public function toArray() { + $ret = array(); + $ret['name'] = $this->getName(); + return $ret; + } + + /** + * @param mixed $content + */ + public function setContent($content) + { + $this->content = $content; + } + + /** + * @return mixed + */ + public function getContent() + { + return $this->content; + } + + /** + * @param mixed $author + */ + public function setAuthor($author) + { + $this->author = $author; + } + + /** + * @return mixed + */ + public function getAuthor() + { + return $this->author; + } + + /** + * @param mixed $lastModified + */ + public function setLastModified($lastModified) + { + $this->lastModified = $lastModified; + } + + /** + * @return mixed + */ + public function getLastModified() + { + return $this->lastModified; + } + + /** + * @param mixed $name + */ + public function setName($name) + { + $this->name = $name; + } + + /** + * @return mixed + */ + public function getName() + { + return $this->name; + } + + /** + * @param mixed $tags + */ + public function setTags($tags) + { + $this->tags = $tags; + } + + /** + * @return mixed + */ + public function getTags() + { + return $this->tags; + } + + /** + * @param mixed $type + */ + public function setType($type) + { + $this->type = $type; + } + + /** + * @return mixed + */ + public function getType() + { + return $this->type; + } + + /** + * @param mixed $url + */ + public function setUrl($url) + { + $this->url = $url; + } + + /** + * @return mixed + */ + public function getUrl() + { + return $this->url; + } + + + + +} \ No newline at end of file diff --git a/app/module/Search/src/Search/Model/LuceneIndex.php b/app/module/Search/src/Search/Model/LuceneIndex.php new file mode 100644 index 0000000..4132b55 --- /dev/null +++ b/app/module/Search/src/Search/Model/LuceneIndex.php @@ -0,0 +1,29 @@ +index = $index; + } + + public function search($query) { + $hits = $this->index->find($query); + return $hits; + } + + public function optimize() { + $this->index->optimize(); + } + + public function addDocument($indexableDocument) { + $luceneDocObject = $indexableDocument->buildLuceneDocument(); + $this->index->addDocument($luceneDocObject); + } +} \ No newline at end of file diff --git a/app/module/Search/view/search/search/index.phtml b/app/module/Search/view/search/search/index.phtml new file mode 100644 index 0000000..b9c3f68 --- /dev/null +++ b/app/module/Search/view/search/search/index.phtml @@ -0,0 +1,3 @@ +

Search Engine Dev Tools

+

Would you like to build a new index?

+ diff --git a/app/module/Search/view/search/search/indexops.phtml b/app/module/Search/view/search/search/indexops.phtml new file mode 100644 index 0000000..b488055 --- /dev/null +++ b/app/module/Search/view/search/search/indexops.phtml @@ -0,0 +1,3 @@ +

Search Engine Indexing... Do not cancel until "OKAY" appears below.

+ +

OKAY

\ No newline at end of file diff --git a/app/module/Search/view/search/search/results.phtml b/app/module/Search/view/search/search/results.phtml new file mode 100644 index 0000000..e69de29 From 346085a65e595b20c028fff99839bdd45cbdd44f Mon Sep 17 00:00:00 2001 From: Justin Beale Date: Thu, 20 Mar 2014 03:02:02 -0400 Subject: [PATCH 2/6] more search engine stuff --- .../Search/src/Search/Helper/LuceneHelper.php | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 app/module/Search/src/Search/Helper/LuceneHelper.php diff --git a/app/module/Search/src/Search/Helper/LuceneHelper.php b/app/module/Search/src/Search/Helper/LuceneHelper.php new file mode 100644 index 0000000..96b1c53 --- /dev/null +++ b/app/module/Search/src/Search/Helper/LuceneHelper.php @@ -0,0 +1,25 @@ + Date: Wed, 16 Apr 2014 11:23:32 -0400 Subject: [PATCH 3/6] massive amounts o stuff --- app/composer.json | 3 +- .../Controller/IndexController.php | 1 + .../view/application/index/index.phtml | 30 +- .../Application/view/layout/genlayout.phtml | 0 .../Application/view/layout/homelayout.phtml | 78 + .../Application/view/layout/layout.phtml | 27 +- .../Fridge/view/fridge/fridge/index.phtml | 2 +- .../Recipe/view/recipe/recipe/index.phtml | 2 +- .../Search/Controller/SearchController.php | 18 + .../Search/view/search/search/result.phtml | 23 + app/module/Users/Module.php | 12 + .../src/Users/Controller/AuthController.php | 4 +- .../Users/Controller/FacebookController.php | 59 + .../Users/src/Users/Model/FacebookTable.php | 33 + .../Util/PasswordCryptographyProvider.php | 4 +- app/module/Users/view/users/auth/login.phtml | 4 +- app/public/css/globalstyle.css | 90 + app/public/css/style.css | 3 +- app/public/img/globalbg.jpg | Bin 0 -> 730633 bytes app/public/js/login.js | 40 + app/vendor/facebook/php-sdk/.gitignore | 6 + app/vendor/facebook/php-sdk/.travis.yml | 6 + app/vendor/facebook/php-sdk/changelog.md | 28 + app/vendor/facebook/php-sdk/composer.json | 25 + .../facebook/php-sdk/examples/example.php | 107 + .../facebook/php-sdk/examples/with_js_sdk.php | 59 + app/vendor/facebook/php-sdk/readme.md | 115 + .../facebook/php-sdk/src/base_facebook.php | 1481 +++++++ app/vendor/facebook/php-sdk/src/facebook.php | 172 + .../php-sdk/src/fb_ca_chain_bundle.crt | 3920 +++++++++++++++++ .../facebook/php-sdk/tests/bootstrap.php | 5 + app/vendor/facebook/php-sdk/tests/tests.php | 2095 +++++++++ 32 files changed, 8406 insertions(+), 46 deletions(-) create mode 100644 app/module/Application/view/layout/genlayout.phtml create mode 100644 app/module/Application/view/layout/homelayout.phtml create mode 100644 app/module/Search/view/search/search/result.phtml create mode 100644 app/module/Users/src/Users/Controller/FacebookController.php create mode 100644 app/module/Users/src/Users/Model/FacebookTable.php create mode 100644 app/public/css/globalstyle.css create mode 100644 app/public/img/globalbg.jpg create mode 100644 app/public/js/login.js create mode 100644 app/vendor/facebook/php-sdk/.gitignore create mode 100644 app/vendor/facebook/php-sdk/.travis.yml create mode 100644 app/vendor/facebook/php-sdk/changelog.md create mode 100644 app/vendor/facebook/php-sdk/composer.json create mode 100644 app/vendor/facebook/php-sdk/examples/example.php create mode 100644 app/vendor/facebook/php-sdk/examples/with_js_sdk.php create mode 100644 app/vendor/facebook/php-sdk/readme.md create mode 100644 app/vendor/facebook/php-sdk/src/base_facebook.php create mode 100644 app/vendor/facebook/php-sdk/src/facebook.php create mode 100644 app/vendor/facebook/php-sdk/src/fb_ca_chain_bundle.crt create mode 100644 app/vendor/facebook/php-sdk/tests/bootstrap.php create mode 100644 app/vendor/facebook/php-sdk/tests/tests.php diff --git a/app/composer.json b/app/composer.json index 1cab95f..41b0603 100644 --- a/app/composer.json +++ b/app/composer.json @@ -34,6 +34,7 @@ "require": { "php": ">=5.3.3", "zendframework/zendframework": "2.2.*", - "zendframework/zendsearch" : ">=0.1" + "zendframework/zendsearch" : ">=0.1", + "facebook/php-sdk" : "*" } } diff --git a/app/module/Application/src/Application/Controller/IndexController.php b/app/module/Application/src/Application/Controller/IndexController.php index f539591..316517c 100644 --- a/app/module/Application/src/Application/Controller/IndexController.php +++ b/app/module/Application/src/Application/Controller/IndexController.php @@ -31,6 +31,7 @@ public function __construct() { public function indexAction() { + $this->layout('layout/homelayout'); //echo $this->vars['userInfo']->username; return $this->buildView(); } diff --git a/app/module/Application/view/application/index/index.phtml b/app/module/Application/view/application/index/index.phtml index 06e3bdd..0602732 100644 --- a/app/module/Application/view/application/index/index.phtml +++ b/app/module/Application/view/application/index/index.phtml @@ -7,42 +7,20 @@

Or, if you're already joined, sign in.

+
-

translate('Follow Development') ?>

-
-
-

translate('Zend Framework 2 is under active development. If you are interested in following the development of ZF2, there is a special ZF2 portal on the official Zend Framework website which provides links to the ZF2 %swiki%s, %sdev blog%s, %sissue tracker%s, and much more. This is a great resource for staying up to date with the latest developments!'), '', '', '', '', '', '') ?>

-

translate('ZF2 Development Portal') ?> »

-
-
-
- -
-
-
-

translate('Discover Modules') ?>

+

translate('Eggs and meat so much to eat') ?>

-

translate('The community is working on developing a community site to serve as a repository and gallery for ZF2 modules. The project is available %son GitHub%s. The site is currently live and currently contains a list of some of the modules already available for ZF2.'), '', '') ?>

-

translate('Explore ZF2 Modules') ?> »

+

SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM EGGS SPAM SPAMSPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM EGGS SPAM SPAMSPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM EGGS SPAM SPAMSPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM EGGS SPAM SPAMSPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM EGGS SPAM SPAMSPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM EGGS SPAM SPAM

+

translate('More features!') ?> »

-
-
-
-

translate('Help & Support') ?>

-
-
-

translate('If you need any help or support while developing with ZF2, you may reach us via IRC: %s#zftalk on Freenode%s. We\'d love to hear any questions or feedback you may have regarding the beta releases. Alternatively, you may subscribe and post questions to the %smailing lists%s.'), '', '', '', '') ?>

-

translate('Ping us on IRC') ?> »

-
-
-
diff --git a/app/module/Application/view/layout/genlayout.phtml b/app/module/Application/view/layout/genlayout.phtml new file mode 100644 index 0000000..e69de29 diff --git a/app/module/Application/view/layout/homelayout.phtml b/app/module/Application/view/layout/homelayout.phtml new file mode 100644 index 0000000..e7303f8 --- /dev/null +++ b/app/module/Application/view/layout/homelayout.phtml @@ -0,0 +1,78 @@ +doctype(); ?> + + + + + headTitle('food280') ?> + + headMeta() + ->appendName('viewport', 'width=device-width, initial-scale=1.0') + ->appendHttpEquiv('X-UA-Compatible', 'IE=edge') + ?> + + + + + + + headLink(array('rel' => 'shortcut icon', 'type' => 'image/vnd.microsoft.icon', 'href' => $this->basePath() . '/img/favicon2.ico')) + ->prependStylesheet($this->basePath() . '/css/style.css') + ->prependStylesheet($this->basePath() . '/css/bootstrap-theme.min.css') + ->prependStylesheet($this->basePath() . '/css/bootstrap.min.css') ?> + + + headScript() + ->prependFile($this->basePath() . '/js/bootstrap.min.js') + ->prependFile($this->basePath() . '/js/jquery.min.js') + ->prependFile($this->basePath() . '/js/respond.min.js', 'text/javascript', array('conditional' => 'lt IE 9',)) + ->prependFile($this->basePath() . '/js/html5shiv.js', 'text/javascript', array('conditional' => 'lt IE 9',)) + ; ?> + + + + + +
+ content; ?> +
+

© by food280 Group. translate('All rights reserved.') ?>

+
+ inlineScript() ?> +
+ + + + diff --git a/app/module/Application/view/layout/layout.phtml b/app/module/Application/view/layout/layout.phtml index e7303f8..6d9d485 100644 --- a/app/module/Application/view/layout/layout.phtml +++ b/app/module/Application/view/layout/layout.phtml @@ -16,7 +16,7 @@ headLink(array('rel' => 'shortcut icon', 'type' => 'image/vnd.microsoft.icon', 'href' => $this->basePath() . '/img/favicon2.ico')) - ->prependStylesheet($this->basePath() . '/css/style.css') + ->prependStylesheet($this->basePath() . '/css/globalstyle.css') ->prependStylesheet($this->basePath() . '/css/bootstrap-theme.min.css') ->prependStylesheet($this->basePath() . '/css/bootstrap.min.css') ?> @@ -31,7 +31,7 @@
diff --git a/app/module/Fridge/view/fridge/fridge/index.phtml b/app/module/Fridge/view/fridge/fridge/index.phtml index e2a49e4..81bbc58 100755 --- a/app/module/Fridge/view/fridge/fridge/index.phtml +++ b/app/module/Fridge/view/fridge/fridge/index.phtml @@ -2,7 +2,7 @@ $title = 'Fridge'; $this->headTitle($title); ?> -

escapeHtml($title); ?>

+

My Fridge

sorting options
diff --git a/app/module/Recipe/view/recipe/recipe/index.phtml b/app/module/Recipe/view/recipe/recipe/index.phtml index faea6c2..175b194 100755 --- a/app/module/Recipe/view/recipe/recipe/index.phtml +++ b/app/module/Recipe/view/recipe/recipe/index.phtml @@ -5,7 +5,7 @@ $title = 'My Recipe'; $this->headTitle($title); ?> - +

Recipes

hySK)l|s+V}nR!{5Z1yf&m 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˔emkRhiM7L31+6t$rRcF|P#xfPK*0S%^IY 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�Ko^B?WO#H0k%SHSCDRrKc~i zE{Nbv9o1KkZKfUvv`K((V53dNFT(FnkN;ml+I_=wh(Fa9zv-JTVyId=LV06}r)N{XC zD+m$6mGxfxQEpn*D@sn*H1)20;}sUn0XJ6doYjbNmDOKrf1}fCTG9%*Z;a-Vg&=lS zZ&IN;w}f1hQ79aD#v;%pK)PU+ zbGwH+N6>l}$^QVR&_C+1k)JZ>XIq!yhuc3~Ga6H*wyh?V;!E#fy5ghHgnRFWtQwHm zWsI`E>2+D#WJ}HU-tUPnUd~Oe=hmWYRTGKh9+?TUXjIR@twQv5ULspE6^aC}no6V^ z-Ck7Z5(VKUxv*=080rx`?jW2J?Vu3}ET!wi+FsI3vq~zhGmoq#+B~J{Ig9g5Zi8O> z=a+;eK((5rQ;792msXUxQo7fFg=3Fw!5h2D9A)y3I<(RyNl#1r^!Jm#m&PB&mH`?I z{{UQ$Tx)XFXj@T*6}RAb&ZXmUWIh%8)y|O_XJyXa1yjGPJ={!r>{iI|y07wHv7_x;!MD|LT_DwVm#OCE(jDB5 z`@69wUE=sRhr!VxNQg1 zyFRgb0u;cm80V6twCNo~GgXQnTZmeMsa(`&uc{&2tZpqb9;$AP(-6!+3#)D>uRskj zkeP9pZa6Cbyx$m$d?H6l={Zlb`*~0q4bJtwDJuvfgUg19;?!P?JGZC4p zR zXm?b0_5GtyW45>T6YtV$wk!jE)$v#+8$V60i#6o_`?LxlGNVHRBV8^vUuaEcuaY(B zzPPOorkZkPbf_1s^5>dFvM$MJbZdZkp4Dr#BUo;@S$Mo_aUS=MG01TXTq>(2xP=9g zp-6yc7eIA0u7ya<%C=^K1}$=~>T`^G_D|aj}^Yh;y9s;&**6 zm)Y9WO|PSLOZ!BzhSmQ74`IXBHp1Jl2OO)>cssNg_}2NB%1_xra{JmpNuNy2+R0D_ zOEs@EoCISuv}3I5?7ocfLt!!$F)?r+iADVZEI(L&DA}K&7oSpv}WC9YHfFvnvi*B_@s}e zKl15SnN;?jA|!9yTl=f8p&GZ?VWRRrQC*>&_}4|Z7vN4bewJF-qzQG#c;UyAG|6au zte(kBK&s>L`F6!rSk5Gw_xrAjxLVw9C%y=wqw)a?LUt%F0`DHE10p_k@4-cn7UNZp zB^+!^F|~wMBX;cJ_KO%Zb#$y&dea*7et6Y&MC&?1lq6gSJHD}J4ZJShUi=jtSj5*_ z=%0dFY+pq3{KSCXN(-Xb8tl9-epQ@SGus{gTc0{Lk{9IP(Ir-sN-^`Ne)u4JYs&;D zK6TkM&T0Is2_vOX`h|Sq#yc7@%R0ZZj6o#b^oMr7ve_G3FOI{XtXIag-*)tNNw}NP zs@B$nX)69B{_m%3SGp-D1COpqrqI@l+y_g&5W?8jyGh%u$P}(FX8u@rL))(VudY9P z)F|3Y95MWbQ9+F**JPx!R#iBh56(DNnDzBUsCF39Flp#(&zhjM>E<$WaL%%- zzHyCphr*9`tl{GjJhaH-jK~rA9>Z9{{VNN zruegEm5svp z7*cm|&VJBl!zY3hqO=TWRqmIrLFecalj9N@4y)-xi)v_{^2cPW%{$rJD>m|z`)a)K z`(xt<0izjL1qLRN4bN&RSb7mQc52$YQhf3tZ?waPF&|kft45Rpa&>p*=W--SYWZr} zD{F@DJGoc7E92=lG!PG#&PtXpmA&7#{C;ohrLy`6(?C_BQOnjTV`)-wK9|?7)dBYR zJ3Fd*d9Bar%SSMT81|q%LlDn;~ zwE^^&T_`K9D}LxFDF&#`>>>A)J;itn$uyL7pz0w#uu~Su;AS+>io6h|d}9 zPfiRk3;zHgio|C(6T{Yii6_}oK^e{v2Ui)3yON{>?xr?-n?Wf)aQ2yRl=k|ijZ4Wb zp0mTqBnsWaB{1M{yUhvJ+Nh|aOV(`2aWxw%_0OylSTv1T`$#XmU_lz3rIh-k%uhSGa63a_*(1Gh@aI~)I?6MCGF|Nl*=UTD14R2 z>yOh2^DQfeX>Z6WW@>1?82|`USxLxHD#3Bz4{Oip* z(ik2Ua*W&7Q!X-~lnf4iAmB>ss-DP?i+P}{=8$ON=@z7;dA^)rZfVC9GU@y%n^HlA zgp*2Lo>0Za=>49xvs7^55#G;_WL6xMe5LjmvO&kIIK&r%4Odk3=)qHh{q@EoyFXRI zxjDY8m>t#PmYjryX&4YYRoHgNwfSsEZ&{__(X;t)%Lk69(;3B2^#^oQ-$#@ zvp8p2q2O_$!;ao6AEj0>mPy$haP5Kz;qTtLqM-}u*;%g`n+?+=h5i20UJ~JK)EJX1 zrhKQ*?IkR+ZCBbUp(2JL+HUFWxJ1#8!qQh;*ac?o)!m%m8LLTj%}%mS)ED-tqAQlL zo|M@pzU~?BhS@CUDXIHq&8DZnp2b&+OBbpb(>8^Yc+L_%y!la9hj1?+7u5l zpQJsJ1FEZfPJ&yO71cu?Y@t*=P+(+*At`NIkiCTiSSy6;y(WT-+7)cBQRa$VDZMxv zVNQ6(HNMQ)j3QIG@2cl6%V=~bgF392LA61x35z-DRGEWHpdWgIo%ctO_?yGbj2=S< zc~u?D*Ze2qXTW?mx#tm{{rf!^UbQ)=4Cxf34LIml+7dCTyl>A4@f&`FiDr!A8ga^N z=&cXp2zIC~X?QnnuRbWPraBDOr6jkK$X3z`s7-fQgdWHu!ZI@zyLk9hZI)z|`1yxT4<~o1F&4?aEHqU^~RQp>*!*dGSZj>gs zeWK_%>fJNCbv5ETZ$X$P(i?XsS9D%iV)UoDdE`Ky8Y6Qn18K9whE2!HzEoC!L?zX< zQqnzRtPr-)B@LU={o9?S$Y>Nsg#Abnr#ijl&&!&{n&wt9#iw=hFW&d&xXW! zvNdyKOi7KV+uGUQ1mjYDF^V-c1c@!XQODygJu4J`<;Y+mpL$ zLQ{1s5Msp>s=ZBRS48<_?5X78O8z3cBunw~=%t42A4u0>$RYG2-5a7i?;UU5Mn#r0toI@fhoY^eX`^FyBM7I9ViUs(too@fkG}3c z)x90Gb4O5(fwOs_HxAg3{@xw^M=ZH6y3|0Z4cF-z4h>+dc~e;iza5P1NPPAe6z+2Z*yV5b@_8qV24F`0{M}5n&J<% z65F(Gd8C6{x}lFhNcq#o+DBFK06S{!%XgwQ8H^a>Cpls(+VmFC{T*aJhYAP84jIl7 zao-+)Yqfq? z<9zndbx!_;dJc!P7KY4h)sK=D+(L*{o6Z}+0)s!K%C=Mrwrsx!HE+LQQhV&Qc+~q^d?FB9SP5D<8 zouf*qMt;|(b>=7Ds`NHk^$g|5Au9M#xrc?Kg#{Xub~(+_m$h14;!N?`$D*=^zy=kC zd0>Y2wTfDMq)KUiAZI)GL}6;UgH?)gV4X=%^eO#?p|u(s(w|)R#Z9yJzs*=#Uo3Yc z(k#SIOQlIo`!%>{IK@oMO;;~lm7Xn_uU<+oYFMSV+#5I0?$6>SLX9Jhaj$Vi69;bE zt>_WPn~+0C`*nylK#X-&N9 zfaAMAh}7tOTf{0WZ>d13iRB>XCxBx zo1Jau7qdbKZ=LW`h%c8etM-pIAb`=J-NHXE^rnP_+dH*dKZ(hD3>#C6#<5TvLSJEO zyNxrR6psh-1&8rPdDWD>#tTzri>w7)YHBp{wr=P3k3Y1#Rr21g;R(yHb+TPl9ozSc zMB5B$eb+R|t;7lagy}ChmXUld98DtF^`2jZ{l~yiyQt-%~jHd#vQt|e00&0stJ zDpAv2(tlMq`E~VfjbDaAFKe$gU6qZZ01U#8@05JeJtJJyqCNaT;hs_NIxf`ca6p`{ z+l6=TvDU~f*EeT1GG^3uFQkQ^h4r#$23_sd) z13l7SPoyjbu5p%UB{vhjA}&@wzj)t5vm=sg-?hn^_f!&VoYojg)#SROGm{i@^Uj&`ikQy*uCBG@rZ8RGEGrbMUS_DrImn4H zB7V61*IntaX6_YR)N0#sDGD8NTcln3o(8@7sdi@mz-;wZr%#Yj!^<2M>ysWq;$3Ek zxJ_-eP9SfWodCJDu1zU=%}me>Qfbm)cwP37pY-OEi3%&k&L*qPdZvo9HSKK0R~5+J zcIm_OikokyB$Ba-in|t&bZ1_A<%M1rnYK2uvz8mYtIczpN*`16PAHoD%8i|v&78UB znprMW?2_1yG=~#g=}da_cdP>2ts^c~)e;+9*8V*{^2Hh~TS8nV08-#H)y6VbzsY_z zH9i<+*L{t(u^9AGB5~%0E+l!3_r`iNTuiF4?26|$MpcQryp{Xa7LPC$EaQk5Y#P!o z^g}})39LG*8+)eGHqX|lhH_V?&b4Ihn>hg`DJg7l7!2e_^Ze*=U|c}CWFlFg5+!o3 z2uGyabRL>hZMjieTzURKF^bZ9PhI9mIbtYN)EQtTk*0 zPYthF^8GoBjz(vC+-S_WDvfMu0%YG^S5JG7XWB5YjjHp1HLPSgfHzk~5u4L?3QBrF zZl*k8!qU0Ww;NlC*;es&c*2J3 z?m>vktdVUKVRDtP%jxvb3rK&*l^*H?hwm!v6=Bxo_eCi*La9V6f8&I6@#`D2s`66V zg;$c}?z%LgQu9+j{{YOhj}N!nHF_ez9$O)^eR;`4wMW!xs^P&?DcvzrrpW0&emwJx zZrh@V;y&T4yW!*GXqtJKt;T}0}vg$eCuWBnr4f7o<(HeABTTUbXpD`GHDkRrWIozzE`dwVR zqs@^nUf2K|) zFEmT2XtylA;9#G$eIKE$46?yvKmgsB1?IM>#xz25n*50W0JMYJaZ~d)ypt34seJ$k zDaP!6vFm;q(dINp8EmS*JXJ-h!JyUrH+H>#TeX#>Zrir3+v{;l+i_~CHN{7Kd;W^E zh)~;i^#Z-V)>_d0Vr$>+1zi+b?~Ma6QI;jksk@XJrz+*=l8+>z02}d%EW?@`iOFhl zK_url!_znUEh>Jy^V{hiOWIX0S+6BKLl3kmbQ9;cONp9i-8tV#NX;_|3YEOVPZ#b; z)($)&Vh-GV=7=3XMIh1pL2{FAkg8E*j~w+yW{`j)LUq%aJ3dtVBwxnyxYl)Y=;oqy z%l`lj+MWJ^@pWhOA3yldM1MC1?Y>op_3M5Z(sC>s+cRA-(936O67C^bgkB9RoYcpH z+h7=PaKjz7#e0^Cwuc5^jJ{Rv)gG1XJ1mtsOVTmjT=)&qQ1PB(tD4QZ+z^q@fOZvQd#Oow!IkQ}~+5Z3|C)9Oa3DBALW?5$Ocu$vHZuD$Myj4-b zVf2ldwaz^K_xYnM5-52IC>X|`6c)Pi@A9(ouAJ(zO?Hit?GC^^JoA$lP+^vxn|f7A zXYHd{I$P?!5cbfrUIkl7yQ@4RRAAEx;p@RvS-&$QTuwJ1Ut~Gb3nc}oHjpcRBhNjt zh0=^*ak}F=tJkXND@093Op|u{t?Ha>PexdInS;@b!uNT09D8FEYhyG3Y(QGkTdQ(1=$^2iv!|FL z;wZG%{$qq#*<)%rSCV#>g$^tS&R2unZ>cV#YG+!FS{7?k?#%p6fkM610{i1u8nUpHxpFu z?u@0YNo!B`+f{aIBx`9iyw%ilnzL38iAdRPqxMly2H~9J6)v@x9DDgHxUrtt!k1{vZlh=ljE&US*F;^H5@G1~(T9-*s}By4u$Y5wuL$ zpsi@XBUAkBbu`t7GZrH~S8< zKusz3hL)EOe;k{u{LTC^&xBgp^aNO^_&WX7QdCx-5&`|N!u$5B$EF_COtKx=pBGmL zG7M_09u$b;Cd15Bs!K6#@iss5PV9|Nxzr6h_N;l%l`YTz08qKly?p&6abWOxx@;X5 zM%&^taCcMd&Vr~qW9<`ZPbuA*#|?I{S?T#D<;<^0Y2_*KCHaYR`gp$y@gK&hB_QKV*+v}du z2_*cLjgeSMEqir7u#;zg7|k!1KJczbIC#M4cXKQgl%a#Pi@1F+hicpg{?a#A)xtnp zl`7+k_d&)A))R$%Or|;`TA!@T5^dEcjjR16=MC_20Gh8nlsJ~a+234i$rUV}4xN}v zD$4sr6hdgnr^R`y_?ktdG1k5jBFWXX)4L?HtLcc(cOJ+^@YpK5s>u3TpnoCDhBeI- ztc_KlcWs^+r_a72#_pV<`M9qSMK$d{NhHDjX zwYlHe-_Pr3q7V56(!AD5O6)2p;KPyd&x8QPCx1^*JO^bW8?}@ZNSJC-wUPk1jPLvN zjzhm4s?rllmDl=qRo_XimKzTHz*4y$zgV__+pigK6l!XFVH&R`S~Qy3L$9nQSevhh zMQp2Tk@(~@P{k}vB!hi;@qoj5Yq8^%bo430>=4&VY#x~_P(^V!4=mIDF{;t_ui_{7 z-`Ap_1@e{t(ynU0Tb3%>TB?I_JFtx#Tpru1YT^sG)q5fI)Vi8cy6795(Mej^RSs~7 z&TmBQWy8xo_bDWjfv0C}@feJaUGj)3S#DB!HEfiguR#qLb?!|4yQe9%jUP_Q-XcQ} zVwyzK3u43zL0VJc+Y&+wkJznDN>3waXnVuYJh;a~V}{E4psmh{w*35p5TK=dfOEnn zFyp*c6e{YSSkU+X0K}VgG-?+pq^9S({Px#HATm;+Rk>g71GFS$r z1SD|b6b@vu^7u@3!j6(Xh$$vLifMSMZ*x((!K^tZIzo5Akg5Z(>pBbOf}^)7|i4CMI4 zYO3Of0GBWS0E)RC)A4E9%6*l4x6tn80()*dDqe~0Ak>hq(ve)dim0Uya$-A1tEE*% zIWlcf--JzLusu>+RPtL*aLznpV-ia2+izieIU9^vLzk7vC)CXC%{OT~->PLw;Q6%*7Y)a?VHAEZc|0O(iF@rkDU4fe~ZFm^DA1 zJW^6=OGzkkAu8WdeLEtG(E}U4>lBen$g~u;MfJKX3^^N;Ni9;Rjl#S0*Pc?~wZ!4F zsCgqaON~`cB9xJuc+s}izzQFy<}WOepD~QKr+`ZNYHH@zw^&jUD&qFR`4n*+W6-o4 zA_p@ZQCkG;JAKe*()Li&8(L*fBF%X1n~y}V{{S5IN3Ll0Kk>G8?vBVOKV;tbu|APF zky|nTf3$pV?2FqxCr)zqQk!NjmEEi6<*r-UhS*A~?VRA^OGiFiu8UFnw}u?oGH$MG4fZIngU66;y3s|B&pUeXB_x=5k4uI%!tMCzN3{hld*+ zk{OKh+sl6S>wX^bDTAojMA`kjF4btff-S2Jr70m>OpJf!^y86^xAAhw0UVit#0m{)uateuWFzg-H{c>%>DeT zxEUy}vC6pa^2I&L>m^dj*h{w#WOzUwVRN?cs`ml0Y!zNfOWJbW@FCR$T=DDW4~J)o z2+w76tk7R$*f`X^RCV>)^Xm7IgS2^PJyCT6*Af^Xv8hhEsLrxFuu@A4SJGC|qirQb z;hUlHwA0~YcGl$`(91rPZklRo$r*J%+`TB8f)m@q>gSWJULw|bYn|U_%Fkj@-6P!s zC2ZM?CVya|LuGwi_h;yI2HeQZp0M7p>`~-J^6OcvpQ>9#Ei5FT>8*VDjz5T^wc<#s z$Aa8w`$WJK*+pF&453Z8QMg53V~V~HCp1WsWu>5Dd>%lG*;%gZo2qFIsK-Q-e6ins z!YeIeK%B4i_Ewfx&Q-o@G~3GCrf58)JrT!P@e1}B5(jdZ*x%+L#Ao7-HDL5r)X@O) z&VLMCM=K#sl%}+VnkPHz`lER^$LPY7h4jvPpbu{Bb|(TtFW7E2HZbtcdZD4BbybQR z-0bTL;dcV{koo{eW^!V5Al=pF$7+KTeafFpOe17r<@Mtd#;-0PC>PPHDOzU0P`}2% zcnkG@Q1-~?lMv1I^q!qUfD#e6)OUX zp>F%mtcgs{t4VmHpb)jx=I)GI6}$-qiy8Z)d^>CGr@4Qz$(y;T4)qWq0TYq*6U-OU4AC39JVWq7LFgOmS0F&q;oS4g>2V;PhHo= zKyh)M^}lu=>tkZG1_s^f@`TQ{G`EdHskP_n5}5r_$Ceybvt%X8t8Pj|A!j|aQVstA zp6H8cw|+2hxO#NHN>f-f0{i~*y?C`GPew-0J_8V$+qU$Z3>~PM)-jll0EX{Udq-4VBwFgR`oBnY(zZDl$6$~K2Qd_M`d4lny<<#4SXxu@(=OY6-jegIHtcA6X+*n2R zU688T(KXqxt!Z!FsW%PP<(|l|jb|e&=Ui5@%W7;^w)^%P-Hz7m1Lzd+A_H%rDX(hyM#DTr>bP9 zIaK=tK~H5_LYYcvE*v>^X816w3x%?-N$$*)tG?=dDG5ACV_EFykD{EjXDJCvskm0` z{v(2_ubShW3X|E+r774~c7FK5K;3=ca{9v*&&NEy5`{~(F!)Fq!^w~(KUQ1romaB` zk$$75PRxF23u7&CwNB2`!nUo6W1%=7P3kjhNsDG!?bLk!rrEKODW4M*Av&03n-CsObg!_rlIEM_FZJrcni~OC&Nx9jA6fe$x zu+gL+4dO)CmKh?5TFt}Ws}%ia&aDL`nDj3X>G-g$eg%UTt3oUT)GuSao^dWq<9yPyiV&!<&;82{{Y**H%hZweG_01 z^=8`Nb<&cp`eA77Ht)U18}Gh8PVpv@FLXj(nXGcbdLEC1Em;ces7|)+wRCeJEZ5%N zbA9pVqA%sNfjsl9daad}k`tC)>jg%aXguw;a*z3*XFiebJ`=NR23oTxG&ci9DR*)T#fdKv=Dz; z(W>vQ^G#Kpvu{&n_ze0BCiH{h2J4N1KP=UbqgdOkYO&e| z%BaXVotvXwqM^=QMcq3r?Y+|0=6ttS#c%XB#_9SsY*yjr9<8ACcjPQOyEotWSFA3P zwCZbat-BSBvaH0*vXiq*xN^^gdYy{G*f7P}14gb`%S3Ybo9LO*NG-=u+b#-#DSSuL z4grRF19wu5WDcD1pOtM?>soe$Ei*7`E(+h*9!=sGwYukzUB4@Rq8LuC+dVPm@VTd~ zeJlMW!`myR6rpj>{;2YsWu{LuJvP-{HNF77KtjK>!u@y3wqmR7&YropuioBqCpq5{ z8)-F_Rw`HF-Q`u4>9A?)%D@hsf2+pml-Pu!m|$c&BUXXw8`F-oc8L`pp0Pg6Nh2JT z7~pxIWol)u9h*2QO8GzgV)7aNcu7<|e)W;t!=1{cYpX~bM6A%;+^i2OeqivOH;yVp zXRFJ->xs%3IK<$Mz`#`9QC~rCJj8BNHLGa%pk*(d;y@ELgRae$`mqM)~`%K?j zgy(#C7M-%{IrnY3Z0xZ$gKDl;yFyq~&NV@eBgu5t!QASl#a`L{70K1+h`(vQE`Zq} zlvluT$=w(Sw7w?$Z$z@o1&%Ek4`K1id2W)mIy1-y z>??*VivHgI(=1rFRjVg2JQ721CV|dG3=aI5^ohS;kdR}15_4v+a6?z?W#Dgd|D3|l;Vl5 z(K+*vPlC-*H+=jmCztXmd>V6h;!#c&jCh_vgu7EdbI*OH9j-FSNfRO=&MET zzh!O7W%Q&E<#lqb)z#6N#7wl=t#GGk!@fNmN5l>Tm%U)T_eij`o3pL*L^RpW%r$ry z=RQ%QhYwf|t1%h(kbLT{QEOXAP*S224s+)Kv_o)haH6|s4c5PJwj#QqZk5=JLS5NT z1A+65Mw5i;n~o&bI~MCjIjz-~FP|(`K-L|Q@on%>X+>e$Gx&^6v5vouR_xcJ=;+M> zrhR_)u665P!F6A#JrS+@v!4v~R*>R$t#z6(yE~Nx(+dscyzuCbCw6n!3~7;8?TFG4 zKGV_VIJ5g$*X4_Q9BakrE}N?5*)`rtJ(Zy9n0Qf>U8><4>l8_WeQvFnp%6!k zAO8RkXG0rEWmKl*o*akQgkG_;6nfmILDJ2E{i?a9glJWy)8K~J?y9&RJy^qC6Y+Ab zy?EfAXwzZrl=)R|Rzp^f+m=e&Y!^~4{;R2v(mVe0Ac8fjwr*HWCk$HLPCCa9HR!E; zoUGNiERWQJs;B0uuYPOcL8Nrkq6bOyQEWCr0pN?TjRt|#3U&M}6y z+aC8D&G%HQOJ!$y)t2GUZeB`3XW3yJAq|1loFc5f?w%)}H7m!GE8a0C;e~NhhU}+Z z6bU=KyuOe~aNjXHs+x-E^3J+VJ=wZDvfxt1FBLqiy6Cin2MN)t%~!{^0iE?!Q5sQl zwtHfwB7={A-_%8eS{qXN`BZj`VR1L}UM6(TUQ`erNT)s=1!6#T+c6TVxYCp+r5 zC>^t`v^JGd@G<$RUS1urfuEVKz13`cTN{b3s7-8ZTVreZo#cF8aA6JZHx7IiC8J5h zWaQ!2xa~sgUt9kG7x6rPeaE*Ll@7}h-}XIyl?A6wG)_(&z3P0>ve?%c0e{8eU!U)c zSVPf|bgn(mrEgRgjW~bpju+Kku?Dn@UTrcQtmqW4^EhM2G>dySg?qoHQTbGHwAnw} ztL;|}FZPUPTs!=5!C%b#=IGGbd@~X9{SH}g7bBOwRnWz`|ZxT-}6^=ui7$tXt)zNqgvpyapQb!tX>y{&?do_OFd}Q zQ5`?r@t>bv{@_bg_E@w>jMsL^ii28N~d^`qunbi_aV} zhv9PIaae~au6fT_TqH}J6Pt4vXF0+W3Are_V!QbA&M=n}V{)#JuB8cb=;BFJN!s0= z@Rt_Nt%JbANM4q*`MWvt;y1!wPH9fqtR$Dfkdxa9aVicHHbxv_A-Vhg6NId~m%BW( z)r=G}duphl7=Toif?CX&aY@-h?yrfY9kAz?$~!9r$J$ykHC~8=V(66g*+}S@eFg{Z zcis*mfsNff_^2^-gIhn?4?>MvH>!E5!h)%F8q?(J-A_1Qk{mq8*4mdu>3Hm}C1;lo$JXU_yrbY60duz+OHdz|1m6Squm`&f>Gmdyw z$I`?4n%=Xvoj3mgm1L$2XpEewpk+6IZ`sp}-sgXAhu>;&YRxx$zmCX)=#Dv^`%uJpKh-?T*%ha|!#VAU?w;S9 ztEUObhS#`*f6SBXHcAo&K)U<$lfDKOq#HBcD~(s$Lun>nU8S0);CKu3-47<}H+8#a z{MFr>!w}2$cSD!jt6IvoIwU+BKh=ji=N>o5VVnANT1zgCi7A%Lm29a6Ni?$Cnp2K} zw@RKjc%MkQgAhxXJk;Z1EEs$sob=Pqyh@6==RMHqgc-`W^ig6$EfT8o-jqqb#v(Xh zKVNzho;N6F>%ME~XLF;nh?{JR3e%UbkJ2Yuqv{cU9fejY@SiHj&z|`qHkD}4y0xXg zJGW;w7i+9mu;3mEn{PO?8Yr_BW}fN$LkICS9+*Bi7l_sIlcnn zh)>v^q@LM1&y+=Qm_-K;)kNPbl(tps(*7CG4ln{aUWh8YDSep!$xd^d;mk5QdsPX9 zs~zfpF4`v>2{+VwXYmrXuIcxD>m(FjB#Dp-Bq$l#fvQf;o+S1L`OoEdU>V08--zYZ6!Fa%t37Xpxp!1^W(uco!D}$ zP^(HTfQ_{T;a$-k?3Go>p!p!&(t0;Y=k@w{LtBb+(zg0UUA`tU_;Biy^C@RKTm%D* zOJrZKl+w^ryIM)XEOvpz@!tg3omX3vb!E%rXP3GQ+N@D)uRP?$xDKiFL{M4gm9$DL z*?*P!F>c3QQ~JZA=;h6Ml>Jb<-i|m-CrchTdHZ3V%137jwLFyUtll>q`osvZ3$B${ zE(wav=oX1ucCc(V!>Zb+%3v+guZZEQ+;?1x(OrA(R)0smoo&l(wnU4{+u+iOzq6ik zi`x%|<3%9;J@`?|uaSc;tgB+PIvebBX}!@GtoJXaN}E4O+Sq(5>!#k{KygyxL!QrR zt6QP|$I{Z_ztu<$*tPW>sT+M8po9|N&}BKRHb4^PUkLkUdnst^O@g@wNfgDj_}%r5 z<&wzOG+n#urk)^Qg>#~oPy07$+`0`c_5}z0B>gyU?ZzzI216>Ys>aU*5(I}zm0*MV zPpNAL&O?PVOs0bGaX!4UfyTHVKI=_mva;{j9o6uwCY9(#mn^43Wt$r{`9Sg+^3Gdg zVnf0j#=)D3wMT@Xn;tD3DwAF zj>V_&_l!&k?PH=yYYcKy4Jxpio?+Cf0Gq+P^YxD((|#Czo$ewX*VbNs!{{9e;&@i5 zESte34EBoZsIIlOW7CO+w7@mmICY-*$G*(y4w1<3s>xbg9}YVSyAL|!=DGQ%y0@E` zdD0nB0H2rb%RA)5jVrKTeWh%zI?@uyk8}vNv|43=x}fjedbnqtCq1s&*ZSH!GjY4+K-^TzZeO*J9PWn^4p&OId>|V#ag=@U z>Q|0)d_aq++&Wx_Y?ByQ1t67}c`8ZTIX#{+6ue<~mRmR1ENxt-WPC;tKSyP{a{VpYPhO5 zK`eIdwaHW+G|&dyoN?w`A02KL-l@K9}3L*R~6i8Ygi*Hi_Rp^)-E?gJ6(J*iB_U>W(?2{{X9-Q=KJF(Kz$%@Ql@$!x1e}fiUqqD}DPF z^`}m<1OfxFZ>OG0M<;K%kdT!gs>ihWTf(ff>Nvw0ALCbMykEthC3H=2B61w@u9t-J z-Lo?BND5bp-S>}Aaff7sAuFz~OT+E4qS~W7JLig#NC%yvH8tbMJL3ln!p;+NWagT-8G@zIyQ@Sx(>(}QLi;A z%rNlEvhz^6y%9rB6?A?S!XsK=_}Xxy)Y?;TnuT>5pp9yfT zeGoF=u$8p3+9-OW#s#`qoIL8~R~jC9Y_2L4B%W8GOFON1Z`oBSK1Zn){ch|;({xQ!;X2ym4?t7_TQg+!9i>Seb&q16XMny$6p4C@bd&)qk( zCkN^aXjR)=k3Jop(e0WB&8*fLWGn4ayvUzg&)lkWrR_~3VZiEC1x;($pDZKLU_sRa ztJh*2@SN_Kl@ZST5a_p4z6+}?&KWN2)lGR*WiZjLzk!|xj>X+^+qzLHI^?T~QdC7R z?#^$5u7VYj)o!)t^m=w#NSazgR-c@V2(J3U80mU$LvumG`PU!4>$bklUem42wQfq9ixUyjblY-~n}oBE6VzLKjGM?Xg3 zORdwac6r5lha;WcD{7kZ4i(u*?OP$D&eA};>73mU)w-x5sGAbS3)$?>Yu5`@)qN-H zRJvD|b1NQQA=K1w;hgS;s&-XWklgNj1kqkr&O_4Tg8ElGqoJn$i;Xk#O!HDkUEg$E zcxRLpZ@Rep`y&Tke*XZv`d1+;{{TvrkZDmJG9@wb2Q1g?=2~j|&U5L=$K-yB()zIg zal3iXI`dwc9?D3nqn0j@DGsu%FpVaViwf0cb|1v~R{g5B6CVmMG(NPY{qjc~=f*q} z#5OP^xU^j|J*QYLeU2~a0XK@xFuV#=OyFY|X>OwpWMr*jx@P*G3O?oQrg4n(-Twe7 zzWIeaO^dzG+FC=o?x%Q(d7T3#b!T=Umub3-rz z6l$+eOisD6OY>OQS+wk5!~BjLO00`!Znf3fN9~D{q^hTNbGtZ3C&U^}@pXxG@z0Oa zv9dvtZWTK9RpU-(2x;0K#+2>GJU>rHE-t=i`ubYS3oyItrO|WeTJs7&sIL`%Gus&( z2`;p^KiYhjt^fhQ{k7X>SSpogBs*-1{{X}v`;XVcK9KNa39=snvvqwc{UGD2LcBTv z$V8JDZXPk~t%Ms1ygF9TC5w)KYOK-P$CnN`j81TaSuFnmmM9X$)qAKhpQ_#H&t+NL zEhSXkGvOYgq4Zd58g+O1UB?2mR=YtiB6!zIy-Tdw!7A!OG@*_5ig>cUxQTM};;C&6 zFr5!y(u$6YbgrE@$>BRk1o?u zBWpOeezbiSy28c~H_L@_L&RHiGE4W$h5PHB(UfMDivi!UIPV^Fpsr1gkp|nRRf^GT zYXuV0>f3ZAgz>)!Eu+NYu#De;mFM36-P53GcRj*Q%~Z`}Yhk^Y&?Y~t=D&P-SBN}K z`Afik+-si2x6xVh8S`t{=o3qu8SnWUdpxGQi@xO0XzBrV{KxI`iiZJrZAN1v7(rz zG=6FKc9PPF$Kmt)2)hpiVyhxOttRnRS)H^B!*X6_lJg`Dq~24{o^F7>taf$L1jZlL zbk9^Pvt`+r3kj_Ueb6t*1(UX_t^9<{<2A~E;=}Nb*ZR-z6zf$|(xr&wZb@QfsV*?T~d&!^GbXxdO zgGa?(SSs;7Xs>NYZ;tqp39db=xFq~crSh`Kap|eFCZ_do>x+mmzg!e3rc;${3hHXY z%MCKitKgHvhjsC11{8{_jOqFFuOwr)^p&eRK}ik-?4XQ!MB;Tqi>WhQ*FUw(rs8Au z2oF?y+xq$E#wA%AUl4uc)9E~k32v>cn_6u0Eh(3_j@4AJzHg6A&}=OYkl9{}hTK8q zeQxZ5md%2cg0MS(9g*m^c!ai7%M9v*&O~g@W|3(6l`T4eD{{c=ik&eGJ{$9{eAJ6E zlf<`TuQscexs=PM^IeWH^Zx*fA%;2s0R7cl*4sytT0FTNIj)v!i$rEE70Yb2Rkg9Y zrk7Xg9t)=(H#wtes>x}g5YP__^Psx*sBKTJ!zkmD$K+LZI=N@ID71c#eX28mT*Y3i zG>y108^*=eJqyu!O&qgZacE0>4W!{r279C3yfL8J0jztQgr_+Tm4fq4DQ+6$aSf>qx&Ye)1fCJ;wsZVpuyC)8mT^-}d1QK_tIp${+3Jht+!QjA?CsXHgD_pi4b^@@XmOEW zq#drw2__Rx@Y@+@=~oEpH!UNN($Mcli*^jNZG_# zZo3d_vQ}0&#vDQERl7cpYClaq*=CgPGKC;hiHQ!L4{A zt9IqlT@SZ5gDwS+l-=2r9u;o07;kWtr8@M>y7ui8Yz3^5#CKPtRJv>Wccs#&X+gE&B;TBtkb$gwNK{S`0P9;g2RRnrj0 zHTiSfzkFsbHUcMi#Fnh{@ z3vbH*0Ax7!kJju!D6YnX%86i-$gL^x@*K0i_|P*aI;jZpiP5kAmmAU{~6b*v(*` zuoqSd($3NJr`~ZQ?jsJ!lMcz59CP~}6iY?EQ<1Coa8FMrPE8d%H$;I5Hml zK7Ms25wvukT2w1#X%y=3f{oYi`1DXC#{(BtWz7t&-D5V=RyuGg{oi~r;o2{WY=-Ao zrEXLHWWc^<9EmL9QlS4sA{WjeYy#`pu!<>3)X|i!W-^GoSC3 zSHb{kM!w}`g8u-G8~*^A!Ri51aqfKM`drqq*Tr{iNL=KQQIsISE z`{#setbP_ZO_>ap4Wms@`)BD`{nni+_J*67E(A_4`rxzm&z7#o;g+&fV7j(>sz};d z#N6)nEaX*x(hY7}6UBeTtk$>fpR8%D`W6%+{71;yu~f&mz5f8%-^B>69W0)lQi`8h z$L2quIJbpkhRI2_>syt3qdmtHeQ;5yXP@8-5%k}Gs1=MY8NdxW*OF5?Le zdZAH-l2VrGNJ%A)5Ru{I^n|!}<3rhfQg+X2@r1cK4!3nFOKdN2>W6BS!u)ddu3Xcr z4LC(8W4eV2(FSI>8tR>8?5T-`3L!_RAI57B5c$^12ye7BXNBCSF6v`u=w$5CMHyZH z0NPG`AisSXbN%^8LsQ%1FexCncaUCNocpd)4cVq-b-_qVnFzOH)o6>Vm}(L%B}X7ob#VF z()56@!=Jt|K@NLOT!a4rBlguwiqg%Po#1{UrIHsZuxzm+5hj%2nMPZ@(>yo89WHfw zSN1&-79k(0I3DZ5=UA8Fbw3|%+~5y4EuN3?)K|!uXP+d)J8!508U&hsX`ZM7bgHX? zTPqiZPwTA1mR)_6R%KSDr&KoEhP(lWm*ci|Uu#Qd@Y@-AVDmNEL2bQNTDHOzr7+>z z2jn~R-3<;qRjAQ0p|=6tUC{uvuTc~22UKO0G5Jr^4-ZK!w99g?wCMJU$W?CTwy(&np8&Z&<%?@tr$nP`HM(kL}``@3_$*I#6{h=6BxblZZqfg681thm=ZX3Jc=imGS@Vqw1V zQ&vrM_^9#~(WrNKKpZbMig>E7%10wJg-&z6{@9M;BUM;ROQFWEuBu}rFg@Jo#sxW5 zave&3y;r2sCc&H=Xaw&AmyU6QvHd+{mLrArc&TQrPKi3v=H3a`n%AdA66+4ta0}rMu)Kh+}PY zRs&ZWIJ-u5f~0%9N!@lamm1cG=63wm`~;Cj*jL5Nq&f>=S+-T4$$2RX*-kXag?#H5 zuq;3_@qDWuC=sGaJ8CrO_xMZG2u)k~sk$mOg_B-jH@C{Dj`tbg(O7FIMr_HMbg3N~ zs2!JbjHGQG>65G3MFj0o{VLIhWm2UfBADDiIqIZDeVb5WFIwb`4D+hwftIbD(c1Sw zyyrEDMW?>3SkPT`u&G7;(Iq~#e zG8k}`-SeqtgSt*@B8b@$+YdSW;sD&>`Azp_O(RqLKn z24$xDt>~cDZBn@ldA)#=p%P)dcD}I6{%LQ@xXW^p%G#)KxnEiRf6LAZ!TZ-$_b~!Vna`t z$Io61oy4nhuQt+aFuj~B<)1j01=&{>)f^H*#oi*?5jFGo)g>>nv}^UNN*ijWL|{Cw zzAPcb*2~(rB1y-l{P^dZwEC^~d$cr`dR~%?P+F7n6IzgbV&2E1jCTR6IoEpLVFkz2 zWcgiyF05x>!17HhRhWcSLsr)o&Zk4@WlUb?5Cp2{{Y zkuJ%0&uXa&#i6(kQRsFb48n#4*gyE!k|RXr_x6qw+MKa0)BxO@Lu7wI-RI%k7wpjx zST11bJJ&@r9o1a9rW<2Kr6dB2Od&MG-4NH=8xH}JwzH7yxLvmD%|M+~a_T547eiR^ z(=C_|^~G6;6BCz|lxo)~TT3F9q3tAGB4BjuEviHqay6AmdaBE;3!8qQ-%lumX>b70 z%h%0m>@ArCgq0@K6zw|j#`R}BV=HZbJXXHW&(^C10Jh~SS9cxR&s1h@2J_!Nro5Gl zTX5}MywHN)kV?|D&~J*@8C6$j{yF7X@U9A&>!(H$GiObnj304(u(~X45p`ZAx7Vtr z(oi*_y6lX)d-4l}y73)8+IbQe5^=5nsyYu_|aiJ{t| zG=4y40K{zh>Zs^v`TTF&qwcTNZNFXPxy%wkoZqdKI!<{j4kU;n#F9$0Lqaop4nVEW3?k$pUR{ z7F#YT^n3H4tT5XS-qo6nZ2P!Y{{S@~7HMSOf+@>}{L&-7(XBpoSAWOdx9bG4EDBe6 z&vZpGZ}uo=%sAG|le~ocvQDLFSroqGni%f3wcRo6H3Bu55N_Iy+Apj(*$8FVm9ucY zULSa^wpm0*k^nVVdIdviu;U@xy`+ia(3ZB_2IZ)ZS?ccR894CbKy}j@=U94PsviKb zn~2MTV4AblB1^5NfEvWx9ks#06T7;RXSDt@FYkY?Z%vESS8U-zq9}W_jBIRi8u?xg zXY3W^Jt9P}!llVRSUS%um_ioz@GW?PtJ-WSvK40**ix)Ur$j1ZK1;xUp)O+ z9|?yc^Txf%QW{3>5)`Yh-}i&I(stEu;-b3D-JH=5$hCS+nyVUb&tyu49(kI^x+?ha zc2_<%dY((#>20y^ZWYgTPHb)e036j@;hFmRChJp6*pX>#Q^^}3o74sSzP_<03*7U! ztxjkW1e#}6-BfLEYuZxImziizBoGyMNIJ9K8Y?Y|Bv39s)2}s0XtlBt#81nOWVwB( z+SXOQXgjd}-qMwVjupGF@!M|;!=@<{X~$)Hs_2?+uz{1d)-|y-=}#@$ zT9S!%S0r9*hI8YV(st1&3F4s$5_GD!_f68)8k{xRx;*npS_|Cl@v8Tn=wGN4s^8Tm zwKR8arBNHHhdhYP+5?=voUyWBqTM@dmDYnj0Vre8Ad)=7+dg6PXtlm@XRCc~btJzuo2%G&wEufp| zJh9IRq_r6vw)C%Fw-6#twNvv`TXw_~a*FpW?wja1LbFD2c;i{A4j{MEuC404+LjTP zn_ummPo8_@d7~`>&29N%UGn0fL=x*&G$GTg3-t^rY*wiwyhowvH_j_B&Q(QMT6fpF z3p1&6q)olEELKQ3C+v9U`1&Wq5W}G}fby=HswcQ>8qe)hZFc)SS{6B&eKJc48%E~H zraZIR8}GnFd)0JGK&l09Xxz<}GUIMEr0l6!gS(G*_=@Jr>hnTymjxMds#H>#;l2ge z5sdENJ)3*UH8s4|FV1|ATsRu8$uF{#Zc8|oB}7o%czvU(%{zH+KF2j;^<}LY?H`<% zT4q*|g{KA6e_R=nbx+Fc*)i?M(+OX}cGua1+JUz}Lnk{t2t68Twf1k$=&*wyZWUA9 zqf1nU+U;N4Ru-Arj5ynjxTji47o^`zKR;NSTG)WrIoEKk?3VKl!erHaFS=2pMo{#U z=(_SKE;;<;5F)_UGrnF`S*~u5lPw1t(RT`edPL96RpMggK&URaLP|ESb%gb`CVAYu^slle?)6xK(mXQqY=x zB9*)jxN&Ufw;HT(TqdfoMN2D2nf)qV*#%oQ@bQMVrgKpq{{U+5$BO+rB&jOpo1^h! z977G$+3#Hf_S=X{(=x4^Zq7L|e+x*v@oE#^xF|6o4SC9|Vr`i~a=rc$nbJ_d$a9TW z-s)Tvt94b%H$2fuH*wB-qXngG#v5Jw-MA~8EA@!u@}lZbzs|mYNX0p`i_KgE`h&SC z_*>3!5j;GGY`ZT0$RO)GpS1kerm9z-A{zr)(GedY-XAIPKI?VP^PX|2hc?3Gs~w3^ zt5IiVU0B9LOU0hOeVmnrnWF8Z9o|t?Nrc05NlCcl>s`=WZI&&a z({00c&xHFtMnn>y8Q(`{-U?TtQ_pm*p=9C!u6~_ysPNUcAd1Gg=lAuG1z)8gH&l`5 zxmsHsh07q^PRNgT(UCRagOsZdJlCDt!4JQ0x=(6LrNBWOq4vfHW1l*$$*>OktWfgN z(ROCS&c}z2ADs^lzC2t1UVV2~Bnp2=^*l|ra#_%#@0j4}S_JQm6W`&un>ikg!`dj<9s5ar*XNiKFA$$P(4yspghQT5fcqXmb6bfzN=7 zQDKcg*@vC{R*D>GU`~%uHCXhkN9LSUpR}r)pM>Xsh9`Zsmd@rJHzg7~2*gW@9Y|{8 zcGjH;66-rk{+=eDHTrVULW%gBc^7T3NvbPtpfnN<-gQ|kX{-MLW=Cx%8*y@E)gtnP z!l!n5LynYdZr0;}tx038nnP9C?asW>4%7B8BoS0^ z;pJG73BqHP(i%+v0NTBH^i$0bvRIUP3Q|C!8O`E755sX`G0h}_esx7xTWyYr2nTPv zu`*WFtdy_;V&spQaPQ6$>{d-R1{5hYi<{`O@nJeEw%^arb;%9%*H0UlVcnN$aruUM zctuu})6-+5?2Xf_m8OocP0g75uT@0#kF4#JFh5bfUpL<(Jd;dmSG~^tj|=M#>(O*( zj|~8p`_*Eoez3Ir^(E>(T9tg=eE#u*wMBeq98CVJmFr_>fEv+suC9Mdq3Jcex7~2< zZB(4+vK5-j=Mi;PO-peN6^&)~hvH#V4*heUc*XP^6s0j(QRJY+i-_ZWRFwY!M%WCx z+p6L_H|LB_Y%NeOHz+TB{K~RcKAcL~5+OY*5<+IZvghz(O1pak>whF8>0@hNgZ#>ik6jl;B&eyMv#Qd zraF&OqJ9TED(Is!8apzH)YY|od%+v?UU3rLq#?wFWJmGaj?Xk$Hg`4HORp8se`nnY zo3!R+&>30UDEUt=!yXOe3rHW5M{QR{tFWCwJ0FepzrWti`jBzP; z^^Xg*!F{ed5}2Q@RqDb$tV3osCD`p;XdI=1Aj;O#QLu!XkT(q9bZ>k)po29Y=1Z0t z{M6PXN@)V}KquFi$2A+*MzyT%4zXsbGTTMAm-7L5PJa>Ukc%KNLuSA(%-5RC5MJWr zg8a67c>7wZ^;)v5T0ilU0$sc2zT+F83}}e9=y67A z8rgX&y<$^T%X={)wO)O5T&|O$(eETnJ1E5* zsiHUX&#m$EZ-{hpgBkw-tgkEGd_SZ_Mzl|6bzQCAg=rGyUS&aa6;5;G7Glguz`x7iKTg7PRiZ`76Dm`cNEgzueqBxa3CC!K4k>{8xUn#oM%O@MuL@duydf z#k-Fv(X!fH+-klSb@mA#O2sCcoJz&?&U~UYXyDF;WRD8YT19P8>rG5J2%x3+?#_6{ zEv4rE2KVk&YDOp7;TcD)JfnDImG>-(M++*~YX8x||_~)cvIv9gkSd;j+C~q}hBM zJ=Hn$i0+9I=2-KW%D01OWH2~UPV#n3r9z1C&3o(1gQ3ECGm*zS^p|p95+pVZs(x7a zQ~NT@N)kFsU5#msU0LAOS5-x8wShTr%{WaeMp3%0NE952iy;N0&ZMa#THUw5k{nxl zV<{)J5aI=|+8{H#>h?+=6;Ztkzl!tiZazFdh}^^TIgT5h5SrcHpZm zI!%y){e|1>kyYDDb-^yzN&H%Fug~|t8{*!}qGCQ@sp(v}ES0~+ENtZQ*Sf75SFZVV zbic+Y1%EJod1Kicixz=k)794F3SW-2EtJEY)Vx&3;Rxr2a4*f0^6i;To$a zhTiR8(B+cJTJ-Ga`<(Nx-&LzhJ)u%MU5Uz@@L%7!MyAK%f8+lEA8O{aww*Ri{{U%K zRu#8Owf_J#_ev2qtM;x6JNtU$S7Pwn87Z)I@>DjBEayxIPn{2SUbKT-mXzw3NtNGU zoc2=t{{RuGvuJ2g<@({e`sAr%+ur{G>`o|UJEjxUWm`|I)SBLWBGw&>8wJf3Ta+hS z9PjPl-mp!btpTAT}Y&N$lzPBOk6PfQ^lVO>0c&L%v1d?p;mV5I`S~bMy zbR@!0QQtlb;>|GZgrDb{)lDGz0)?I>vx#>UV*3( z)z*nP?n{}a)#c@Pj3mQ};#S9LOT0S7B!Q8d(u&rbp(TvxSEp%Y)`aIYJ@A(jwbJ1o zl1tM_T8$DsA;Gm(iesJzY5qdVn0-m3YBfAF=SV1rUBzwXDDfk-3~RPkkRe&R7dbQ& zMpu9K-vkXA)_zK|HMxzS?L*>>;V)$towX&K zsM}4{$2Y|Gmb7uK)Z0FWj~I{X%lzu^he}JOCZB&by+Oi>RqtFqJzlJ=}f4^zMchZKGU}&7)+ijMS2ER`z70 zBy=|^Dyt2#;ihx{#G$QJi27i>P)T zzMU{on)w>LdPk&MFx=w{QdEiOJCKx z?DpNed~Gb2p%tR})lcen@FPqPT({q~S36EgQtqg1(ud2!C#k{HuAEXycghIy<)5*D zIlU_s^(>H_tp$F$&Cwa{^2WVz?vfzP$+Cp(q?9Y5<++7v&#`WBI4)s!!y;`Hujf67kM&N!PsL<%U32_&5#~MEg#^E}u z$sF{K)tIs+Hc(0e6J6ssT^ndxH(8iv-`n9<$1|N7?VS`RZ(R;pQ#($~Q(<4#!kqJT z3MPZr6V<8;0cksGd3*XJ=74)tNxbV)%bXRcP40827|m%75+MWn;p@w147jH1RbY54 zQ!A&kT2msGq0}i$19;vBct#G}3sjov=X!7wtZO9$w;0(gS}#e87|hPM*SdJRn>om^gqKfkS@_;@|v)-DgTyAN#B&QH}b>9`ynj}SGeR5p} z;;Yu1St|;0Xh#zik)e=os`o}7fd_w5?5o==s2f-E^nf+msEw|^%3)?&DP2AB+H;<` zKjfeG^hA&tDT_9VO(=S^yV4^>e?{3RX6=FoKTPKMV_iFn6NIHz-u@{SqiFQaC|3|* ziG=`kxE-adt_1c^B=#Dr>V|DkDVIp+Oy}tlWI{P~$2B&y?Ije7D*LzLpR7q?O-d)< zdFIHeH3!!w3^yc)vvzy0JZOS?ue`+DJ4uyruB)IDp6p!+wCy(%8kccfL<^Enq-boG zXTDMgr=ZK-5wOhF*wnYP<*RAU%BlGmHcFetv&$R4@vYJNDesipWy2+7X0z){eN{`h zp3mOTQWioao|%$BPz{r`*celmddzRMUXE)uX5E=*zG9_v6REz+RO3{pj#&uZSFN3#%3+iNc^sQQ#k28O^$6sV;u8ioeQNGQ#Q zM%2eVl&BgEYs)u7$i+wkNM)olXP!ttW z$@PjD@XH-l&jqEjkl+S>Xmd4a)e1>8rD??d{dvb>KI_!~0K<49y-EY=$>~z(Z(aHD zfm&~Am!%bRVr-?vSIVebRU)pD#cZ5a{{Xn>lx8hrbLYx})>+NKP(bTyMO9tc6S^}N zta|yYSYO7sAhwXpEwa0@C(k*)DjsBclxNwUO~f#1_@ zQLnZ`1%&MjiXPIsCbUdWJJD}&)}3+anjSpb-j$VdUPt09F%Eg(cRJ>|k8VmSiKi1x z6i19~A(@J-SDZ#{oOt=wX2AqOPS$(nrw~EkpBOHtw71LC<#nzj3XxqP_CL2aG_J}@ zm;V5mV1M2WO|!v~2Yr3;y)rY4o7dHT?tO(UCUlQNtkjeT3Z471k0Q{@am76>D2*ZS?8OVr?{i=^6I2&T?QSh6s0?_x^+cn;M=0vBMA~O+l@*~ zmfFCu<}9h1gzP9$MwPml$DeqI!)=NlL_BAg8o;ks@Xw2$&&Jn8!c+ad>pWFl(plxT z(j`NVIpZE3r#vv`Ipi}9%iQ!wi6Pn;z+4Q*+Pf|t5E|ZfiJh>ZFRpXx9&>Hc4~AX( zo|V^P(*FRH4kLA@FT>pew35JLV690=zm|D@<3AqE=FCga4E_9+D34`jT{|ESkm#xb zaD)x`h^>4lXO~qG#kqN)rMF{#ol2s3?xqkOM+^2}UR}6wNamogj*jD>%yUwEs=g+= z=1(fBIHW3fcP`JYJOTw*%7+pR^4@XwTcxI)X~9B8{7!ugKUQOJEPB?(0xS*4`>Xlq zre0~XqM%3@#TJsYw6V?t{);xr(a+Uc+j|$3R}N8#iD>*0dEvIQ`dN69 zHC}kC+oo0nj49F*MK-hc`^KY2X&>W%w=I>4Mr2dAr&Tb5Ms8xwny%4J4-zxnV|!$d zBCrXCKF?_^aJ<}W%2j#yLA3W^G~171L3*?Hy1U?3t2uPY&y8%l^|H~{>FWO7RgbbX zt+|9YL!3AF=jj>P>?|g-0PsK$zxdd;_Bi3-UNWtSuVCAVR?oe|et6*!rWLH_F4&89 zZKQ>zG*G^o&zueBtCDkFzlc)lDc^Y}w^V2E_K1!c);v_WZo{wFuU)EnXU&xW0mhz@ z1~UmBR~_^fj5wRr#?IO*O0SA&&`i$yqO6%|62`0T5-j+vsf;=t+iJ3etP3a{sSPk_V(lFMP}k@2flx?-(M={Xe^3L zZ5nP*e~x)Yb)qX_f-36Zp}FsiJbli^W9(}^B`LeZJ+Yj%T8W+YTX>?wv(EE=RbHs0 zWLW`4G)>oE6ww}BPIXm{ybCt0i5K}IeV<{4AbY#Iu!zPMw;J_VFrHae)q0z=Itr?U zQy7UIp@7!)XAU?xnyyKs^+;&Ys1MG3x5j?kY1G!;Rq2Xz-W`orK1=Ega|*hLG^Anl zjii~(&bWH0>PaZWX-E{|oc*IM7A5AZ*d&xp%C@u{vy4P^h|A8tlU{D>#bkiKnWkUMt!B_1z(K6oJlHJ$*y?OJ(CE2YdgaceE{{TA6LpNV4^FYTe)yvFa zMGvpiospr1Xbx^ZwbP2JaFMDNax&-y!AtG7PVr7yXOu>@35ok<^VhnSXNX1H6{VH4 zgxr`rHL5)@hzz)jtJSMrHf^|9ACw`|tse+=YS^XxIn<2f8m$=|iE^yHR7kk!aC*Lr82_oN7f1Qkqc&HZj>euHPP|{y5YZPVJS?1n4%2)o00Y zL)tIda(=*@opq}{VJTCF=FKTyu2EMW&PD>Nwo15;E123-qLY>^)2%$p)3Bl{Qbbp| zlJ8sh(LyaD4`vZc*Bpol1RCSiA3T#&LxP0%_rua&5h$Be{%B!u#85*kC7jpfS{jChSkdvIBs()=KY2Kk+diwA& zWoNWxPE-_U0@GXmCxY$^$W)T0J!dnw>(O#*Q%RkwK;?d z=eN)5d=##0K!n9zVF5!NF&Opdz7$wD%uhT%I4xb0*w=x6>fECb=xef$)U-to@erQb z8BF@CFhldL-$_flKeo@qRa1m89hX&oq5w7|Qo1_oS45(j&)y`lvp3>#t{8XR$G8mZ z)jcs{Juc#0QcVT^xIwiB#S!sl|+9U8x;kc2z$;kiU~S>;)AlKn5OsvP*{ z`21RlX4P@_UgX!AUG%&v;mh&#h|ilRReEs!xUC?A3=RhwSCV@~lTD(KQhehvr(rb1 zGTx_H-I=eyRTb!}vz+xuo(MCGhI=b@NnGpQQVVj~_i)a5M7O~GcUI)UZ@Z%LF3t7l zhI}FRNFTNxt1jG89{&K=dq-^3i-L%zcg3`S(ij}N*F_b-v$)~eL~Sb2-^S>~X)~=c zhBH>SadUT%geKBiZjq-hx`r@XMjZ9F-+fJ7z%rMv(bI~fI^MGnLo@E~UVI{g%MVu6 zGX000V~W0k5M5P|s-yDqYHr-a2XFrXRDB8I2%4~=&tUZOtR{nO{ei5utD~SUY|AhY z1o>osBhuleE^Mj?&wN?yoi5Onqo(dn-N4!RY#lmr8jI_{Xy7 zNB;oC2H-rF9^TnFo%bacnn)X1UHOYkT;wiMAe=&siJ+Aft2Bz{#*vZXe!5*s$S85+E6k#)9i!=w|7JEz*4qkhD;`w1cz`Aa>oJ_{ix!0cVUHbsIa? z<&Q|khJTUeoqcbqx_PMCJ4igFOC;@A1bw{Y&vb`_;l6T*j=;8d4-v$NDZdG4il;hd z?9jCri*jdw$?Ht_#!A)T$rC7jLe*LPR0zHO{;%MxRlV%XG+j|LcYphTQRNho{50!0 zF4UB|Rc%%S#BF%~do!u6dN=I+#hWyTAC?KCg~cCQ-5z_VV~YrI7faKpU7h0EG^gdj z&#CxV3qv$U%(CU%Z=gUSAX0;de(~p#G|4ZPwbR?_*=DU#T;p5z-?dGrbV|*%(Xr4r zf9VlpXVOLYYa8mgD)z>E4me_?t!mcKlYgZQAvf3H9(0K>wMz1P)n=rdbBj!kSHhpj zSn{&WfQHg2Hw@j`Q4Ie8BsgP!{{SpiWLrzz>`i&C-=zg~pw4rQMf|5*8mh%J@;X!Y zt?3-?okSG`{YP$a#wRi%5-IJ7cGsR=aw0;)b zP*asAyX(K5(8v}ocLOV~t<}X@YX&x@Qc;r0ods2|Z-3S_R&5>{(fZ^#s8OTOI>|Mu zgDUN4MK8lYc$WBKvKb7j zvvod^x0oP+>@mu^sTO!z*pAi1?H^`!JlZ8eOtosA$oobv)2ANSAKpWa_33i8g=Ge| z^V`OI(+!WP*_%SsZ7s>Dg5dsLck!e{iQ-8^AjHa7r<*7j>hr@j*B@nHW_O!%Md##B zEt}ine+=-rN1N&0CH`aF8g|s{j!U896KBS&mc`!9RBGN!M{N0WrVxUL(|*k65?+WufL9bz}I+{-jD8!5;NmfvnG zH1O!Io3HP_r?Gx~y|z89Q!g)SOR;Fu=aX~4^9{$+FEk~FHjuQkO(YT}!oCnAxv-g# zxZhV)!u+FqNb9n9N-b&c;?}UYT=~iQk3M(f;U86aE5l;X3LBjc`3$&j#bLCau#(^j zzI{1+stagZE=)Y7sYKOA^HUzp0?ycN01SmqW}NL}y~;aWbDzW%w`ER;s^Z%-MT@be z(bnCRyX^T%G;~U?e-S7g3Q5XUtmix7#MNQkY}kO~HL_uiv7F}UJ55)R>4dKnpn z%;c#;t4#I5ft`Bi$RYzZ?I0mB)zSgQAb8Z%hJLV;!BjI}n^_v~6D(@R(KF zYl7mKW>BI|ct?0`GT(%PEcVvg-N8341SnT@advZC+g&q{-V*AWXw9a%Nw$_0MHDWt zIH%H9Q5F-foWbi~D#pni!+0ZZ`sLKFjA~a*YMFM_@AQm%x#8;`2jcA!{{W~%cHz#r zVppwrZ%KavJ(<_a=mw11!EH3+RkrGwT%(hlPFiTbmqhU^`=8OQ~9u)0Y&PP+mVL&DBo(_ra{i&2Yz; zFNI?fjdMJx?_D+3{*nHnsd~AHPX2kO5w6kY&eij;j%zEVA%^R7R({2qOU)$h;yC(7 z(#-_84ji`Lv396|hb&KO`cenjDn&xGk>>@CWO)~Is=I294%Er)!xay-n3xr%d$)0n z{jSRt6Cii1%RG2SSMIKeb84nxA$Kb|>x}iH6k&)pC7`pq5s{b(HKfX!*j)mSIpY-e zh*1tktJzwzBsR#*V5_c>%g)R=wCt|(M*aD$QpU4HnYiD^t9qShjM?K`2Tz3%MvTn9 zqE>?ujg99juU)F<9B5)hke$08Y)7)kBFKN@d(@)mNP@*QA`dbQ#oLTwEVtII)3aj~Do~?z;)9 zi%q^1EL<+HwN*6B+A2xDm-yuG{$Tp&lwR39KN>8i!}mJ}^%JY78N9s93U zBTfCLCD0uRo=*P&=2ytZ%SZT4&Xn2Po_|N0^SvkHxz15J19esko@t-7!j`8(C%2!R z-QydJ2ZVr>;hVR0uce5#c!|#@Pa~SF`bn?J$-?H$((l^&`0($IWtYQH*(tNNa#_nx znR~yqvCn6Jo@fzo>r&C1EB+@Z4!HOBGwg#8wJfB0Iq5i?GAQl1r(UHUzjA7sMhRj6I%(b!2r0NN^E;<;!kfL zeQ-<@ar^Q~_UVo{h)JX!w_|=?X0$4+K72PqNFR;4%$_Ul$qeYi|87gqE!R zeaEfd=~72YOz?!1wP(xM)1u${dSrY5}J8O6ORqPtM5m&df_ICfhkn> zB|QNN&U|4mwpZ133&Kf3q$Hd(*p{|};G{ZUL%6AZkSWUa;@pDOf-~KGcTl02fPJTV zTP9^>1fgAnIP)S1AyKRMpgzzBbzM}p&(O*F)h3Lt`fffvyda_&7nyl?P@>zI+230c zYe%(1Jv33ZE~8p}o)}@{9505&S075Xv;DTK2cr6nTDmf+W4jb_#+f|gEK77Ye_*L? z8e@Nc+xrz_bazsXHk1`gjn(%Dg>&my8%s1`?Y|2@XwuFz0o;4^Mk^;((z2l+!i%Z$ zeWI=|lb`qD-^#F5Hk~68+13b)XK0+XwLfJeW}hx@$cQesmw#_9y%jWDOjl3&Rc*Yf zWVD2{8#fH+I7C<437!4xW?v{x{EjCb^hcU_M9i}z<+}KS_`B;gaRKKlqO?72u!@bL zj5c}Co+<6JJm0IGR!ODJBy9?~idQ$`p131iGd`+pEg2dq{aSnHv*m3@nWePQEO+`{ zp9T3tbE@30tezK-7GI(1zPyuk=9SFNRV{5OoGD$|x;QO64P#fWb%(((CA!e%hDi*) zoo-s|qis7ya0km6FXwUF%KNMBZR{Qpg9rlV4xB4uCTQlUZR=5JE0=VI5PlQCo=i0U zM`1el%z3RnpG8>g;C`)`;H?IQ`#Q}z(W&WWZYHTbyL=;`h0e!5eZ3U_0LcOszya@i zv|2N$DLFJCyDW=<#RHc7`N10oM+_>a6j-+5m32jlU0YcedI#|B)C_h8d*I=R4>bw) zvU9H`@@B@6luZ!I1uIL3(l|$L=mse{?5Ur14YZ3*1q1*o!#Kbf1Bu(WI_`#6)1_No zxzFTIHNvV_ou*={xuG4h$4D1-ail`q zSWPjbNY)^2l&gwuvt~L4fNsOj%fkp!ME<(`tR#3&hUsA`*OwxQGVZlB&`F`F-=EAy zWJg1HJUx(^5VX~ELp?OnhNjtcr2vu+?pk@yV5SUzl4e$h?41FvQ!l2lUsAIB_Ofv_uX0s z%C9~bXTB?=#A`vnFLXdBSR?j|Sfw2rmYx+oU2&PWTO~Of^yh**MjW|Ub!c=!#-%zj za3Cag8?%~5I@=k~o;jN7*97NzR(^ZcfU%~7yEHWyed&`K*wdZ+)O*}c`T-vF4VG6n z$4Eu$PCa?Zi54p{i1yuyuW3)BJ6bt=XIPcfJyzMWzu~Q~-1rBVrv9!`=$b0Ssv9x! zw;J_qM{J+RrtH_fWXZMqM|Ms7Cx-zV=rG$UY`eKt@dU}^E!)>L^`|j0D(uHZ;)M#Z zIOlXrFx#qlazND^2GkYN9VNA;ZHCWIC!wM{%N=DPzySw>4%S(|IX|0!xW1BYKC_MFdS#I_F<$qZ99+ zBkRo%En8KmlvLWqc^>XjTM@V2ReJ35o!@-+RxB+#HbV@mw(m_A)r!R1D+&Ob9o_Zk5hB0@8C6t~Hf4Q$gSQ*i zX43r|RI9EnwB1r_F!1}uJZMF;l^jKU$gMtkZI}bzTX93_X{RL}*;PgR;vTbtC`21J zeYcP*v076Y=x()kt-M!L(Q&QD3dm=~q<{7Mm zq$rQ&oCzGLb6ew0qx?S^<+EYSF7??X?xnCZS zqC7MFX33Qyu&=yUd~of8=}v)rE!mnkF3QA$5~Kv5^2X|Kjl3NOAv7IY70p=LqzzWo zYGT7{M}km>!U8T7PYQ4Yx)Y$AIl`w{tsDlm!d0JIy-n;bDiY2mJ9{*x)z4H-vfDLC z6Rnln<;d141?XGL?T#ccUtbEHlrJ9R{UY^h6t}zMmoLjm%<2XeUH+i!?U>OJmS97W!40Nzi$-g-7N5U}A4`ab;tnLp3ZC2DHw$u8QIbM0?PS_Lw0A|-K z`73BYthm>70n&>s9+2$u$j=y~wZq1|vdhV6EU_o5c^^~?wk+XQjhrh>v5c*?neETf zUPCkI=!05AW2M5nBPJ*!wnnp38=ZB_vIl8SjC9OAHa=6kuXHF*k*;Vlo2Ll@kJ(qwq~tGVp2X&G%WvVH1* z6wm(j=N`zmfY57-97jxUs`X#cr~Q^wD73Uz$ZcNrW!M-00LYP?cyfv1-;Pq6q_x4< z2JO99VKuF*_Gj!htS}TyB>Xk`V^yN9deUs@tS*zYmXc+KZXJr^7Qc0W`Z=k}GE?t4 zyX}l=qS>2hhHe*(Hmd6_vG#a^@-M0@nVNf}>TJL6(uG}yxy>WbG~R=T;OQ`J!`iy9 zNYI`pi3eBrG8@h#9%`iN6tv8|!oUi+`qS+mL8i15T3z~%L*aV1kMT~k8#nj#t%nr_ zoZ9Hl(63)qd9}Yp0OKJna^kJVo(}%QuWsmFZlx;Q6yt~5nDu(bb~cQa`m&NUbgr?U zwQuR`h9Mmwv-(}SCywmWDeV?5S(#N_tZer1;wDg%)3MZ&PRYlG{t;0Tx}^20+OFY5 z4wd+dt_m47EVhXR8hFE7^;IN&O<_8!+L5+MRrmvm&x}6q2QjmT`r{TP8H0D1k~V7M z&~9FNjid7pS@G_nio1JDp}U6)t&2INETpvELvJO1tVd<1tb|i#U$x7Je0g?~Yugx^ zV0~vLh&Iy5e4pjNnE{5auzv*;FkkklAsN?Yj?J$D`=G zK^nKuZT-}ca8PMWS^GL*QAANgdE?#Xe`IUfD2%@`x{s#SXJoY&5q(u`KImqcxbbPV zIDTFE-JTT|>m|gBuO+q7x>HvdZa+Y)Q=;~ZuA#LG{JF1oamiW%hVBI2SS^j7+{ga_ zZz?}1*<@O7Aqm<$xbo+8L;SO;dHtzvj>DhM>#FVnPweYuHApJH?cg5F_Cm!=WL^H; zkvhh-+fYxw2)nP04b7ebPGoBG;arLKT>E4v-yQzD;uGNmJB|ENe=M^DnwF-0v?Alf zecl=Bh%q5!b$X9P@fvya#WT*^!JGO`nscS`0q~K|%A0>1rGW24^R%H3&VFEvGC^ro2uT101_?#hH~XHG3C z^8Fohhim3PTe|V%jC;R@83FBw{7m(Jy?L)S(z;#G*8RKQsm#pV^Ap8RD4%|}-@ZML z%K?HA)dLP2@T^M1+HItp&U<&)wAF;w!qSzqT4J8O@`|k}{YIG@u8EMM>(&bQXe`n? zHbABc@)`Av9kMYbg{{f0SY^_PNgdYwILY72Lf&%9QBcvZ;ca zox+*zuNcVMqH9l`b*qt@`H7xFw)RE)IYnp(tI)+HS(DG{5jiV!tI9hs@mw!c6^`)1I+H^njMiB^!BV4wdm@K2rZm3fEY*qvgEsu z*JLBpEfo$n@9kq#@W6FkD!3?7nLd@fI-08bN21D?am5DisW@H6?D30REMhJ-R3xdR zvp%)oszsuRRJEYm5A}h=(>$Wk$?P>(O-6=GU42xA+pf7?eH3e_kU`>`_x)lI<1@Q; z%Gw+5#~yVh4%2A_pgOIc$2sE`_BR$wmz_(h6lV_Hd8&V>7PD4iacfW%CmsOT>mH-w zr)$NB#CNXBrqJuV?@t<^*OixLTCB^tGTMJ}BK3iV(e;;t#;hoO2c*_+(}_7>i3rh^_a>(F&w3=HKVv)MooEIH#bvWHX=*RQj+m!+0$+sw(f z;c>N)LIEb@zMq%`cmn?bYWwP}?D6NHBbNH%a{TXmQF|@T*fTTlu^^z7sl)EKONV4q zM}TkVRhpb+Zyy=mUg2^lOf*t*#G84i8B%sstWtLq5FE*M=%b;N=_yqY6Q4K|VRWb3 zw%U9^RrfxLY(Rw&O}Uu9{^N$G_}(mcyb%CEA$zuO>fv* zVP{H(%(S(*+CFsF@DCjL#Ngolp8G3?Hz`mpE@y7L6@|4dDOvV|(%}l)6{x2B_h-%{ z#e=f1T1zduc$z#^Da{;O6jRah`F(hEh@Xgqo<7wzZY>vMmgJ&WN48c6MTy}OSlqg( zu_8|ODo%+Z>3Zx6(}$jXV4~~3{(Y~&g%!k`)KYgw9A!sj9B>uq1VT6Gx7=sxw_^Px zJgfI-G>^sGQ-dBs%6#{)cz_8NS)_|1n8kEb($j?Mij>yLAX2t`;+8CP4fyagl#cx~RQg&|VyOc_`I2d@QGx-9c_J${&V-KVqd!@gx z#md^xa3A|hfm-bCw!5(gGB(!SO-)(DbhhKNe=4KvUds!Ym^(izkDO4#VG+Uq0LvP# z%HGcJLFIa(lX59y*-;{&xz)c2_KyrcP?^A2wrJ7sZrTdQ=wrbwGeiA1N1zDu9qS71 zLmji9KaQ%v*t671FWtxU_Vc*0+ohdn?y0R1XFIDupP8w=wYaHmk`{j6Ua@}%Ouo)R z4kB9*3EZn+VhKqg}cCBbK4uO2jclTjdVTRk)p)3 z*qYcOLZ+L>c*nKqEiVSw_|CA)J-*Y)W9_zA!`8a$<&rjN`>EJX4-5K@@$7mQBS>tH z!`kJJw>0*u>ZEh5g|vBt+3WX>ELeK%+ji~#%B_yoa6?N`1(m3aqd93|X;zR_NItQJcVsA*{yz2-JiThwCJc>r0R_8D&~t0-4Gm3IM3w(bjw9- z*kXhI-; zq4as3vr)nu5io}Hqfe) zYi4Nzpr})?c5(Z|U|Obe^eQ{y^Sj#m%Ys&kiEwIEn3~wl#$gOJ=PL8+zP&WVi76B} z96KV$6lRekdDoh767;R!su68V^o=-Cz?}I+hYewOAHG`@s6+`*hnC4#Ratb|w_7gK zqaQCE?ueR?YqO$0>ok?33kO~s65J&VI{2&jq zJ|+O}sTCd8){Ny zWwAkzCt+RqRyD;o1l^x$0JhdBx?T?+t{+&|Hqh5XyJgCu%^~9-Nh|TFb``F zKmh;AhYj0|H^F~EyNOuMD{uZy26*PVL8KP@wyfi; zTFSPRaaTUr`d3ES8)k&jAS5<-SbIcmcV27FMO-yK@op|r!>2A6_FkEBNjGkWmV%z0 zSYJtwY4w2+LP=?4Q=WR^%{Q(b3dH+|4!AfICW@9~CW{fFyz1X0TsbXV9rrdB#3=)7mV;itpDt`d;OrbdYmeHK*m3RF$UD8)sr+q8IZgetcsX z`!Sv$Tm0yg>2?cd7uO8eL^V03p^wwm+I%=1_dq`pVV|E5ZOcZ>PO!(ys%xX#39SaC z+G4K@f^k<=Tv)9_9aVBww#a{%SdNO#=>ELq*$7JJQ@9$eWajABSv0E~E5}unwrJNn zcU5oNi?&w0teJq6s%5iZ?i{NZ(6po{fie#;s3Pdd%qCN+tJKYnV_1{Pr|KFt{^8*T zbW1c{oksj;Bp}O7FZ+4(NvAEl8eu2*nySCKK7X7dx;>K4;z-rbxvNV(sylz}aT|QT z5cb>u010&~A;$a0bAKwB`aTSayFHaU3elF>##1Me^7=u`VXGmv6%{p)5#RKRD@}?R zo!8a=YU0gliJ#S8pfmREk0rJ5HQok!{e)J!3^tiv=T*wxmWYlSjs5y;;D`3cu`KCy zEFs3~2I4n%;{tJD!ds|$NfTM;6L$O%OGx#sfw$4P0KV{P-4V<|{ZS?xd9QU^bnjiM zkZI*PG!wEFitxvFaN!edwkWoz2?^g@xu3d=W|D;fAJ|+cDc8Q`&&_E2Qp?F1kefj@ z8&`CleD00Litv<3#1g|T;^l_Yel3Rx89WJZ_Vv!`E`4hQ+Qs*l@>!l$(VwWU3^S*Hza^Bw)Q&odf3K8J%2U#Poas^GJ6w2Vlf*qX-w z0E9B1(uwJ%5?)cS_Y=qK`HN;*A+s&28>5q%za-Qx7gzBtlh%B)AmSTFNCc8n8HbeN z__NL(AQK6YNDX(#S68OZ4|jwljvQ9y(OmAoz7pd^t99ukjhye#j3njZ2)^;Z$BcHW zvrLq*o)_@G;I=r7`NCXo?tcr)8pA)ItZ@-IFg9rkG>YaEfhi+)5Rmmu@Zyt{*8To) zkuc8Tm3*(P{9Ul%CtH^seI?X+`X_MC+HM>()t%AM+OFNu%gD~XPrCNiko(FTEvuCi zU$=BWR8@MQzBm}1yuA6Tt&O4clL}24RrL8!A)Gs*;A2(a(Lj%GV`qN~y0)V&gR0rN zt&OG?OTJQf^;7X3)?-cPxO=LY`c18$?X?@Uds3T41#;M(>D}~z#I{3bYL?NaHae@< zazE(4rRCD5{{V#>zERba+rBC-I$@B({go_TCimduUkc1)jy{MV{$f1j9A>N?fvFjqBW6Wgzm?gXYZ;4Qikc_?04Dp*R@C~J@GU%eM>%}CCK58zi?59OTQ6mRiUC;tGc)!jVN$A;|>7qrWP@{#Hj!Pk=y?O=+4|Ho;e}A`X_EJ?S|#v#-9l>JN@C0AIMa%&!|8i9*Wca4^9e0XX=+p z?F5AhNB!abEBa@YM~kJ{%>66LT3P%#75@O!wQNbPZA0bU(k)@xW&L{j zOLBu6+|hxq8}Ia1M#0pzk7gww!nO)P`3KWHVn_J$A0D&yRnaZP=SL(&m(goJK_E85 z1u3{^xblvOU?`7{U7GVS+f4(ofG&o)vb_Mk$2AeO9W+%SWKZdJt~u>P>rF)McJ)AA ziKAVSMM(}VFr!-M(gNvSD*E+D0A=6h5A8OpPW)m!`CV7+QU)1v!9cAUTJ2qqZ@&nG z6TS6vNOfu1rF(wuZ~DX+O8KX-$e`Aj=zDgQv#BhCN>%dLcccUINaKHcqO2jA zIW@_vMM^GVJ-f9iH%Giu`+v{qh*0i&he9MU-riAV|=c?`T za>+bn_3hPpmY1*=Im8K6lFKI3R?<_oc=8yCj}{cLuQif*)g@0`mHz+|WT$4e96rz} zQOqX^5$wAS#2cqxm68={maWX%99U-%eoW)t#*wSh`dkSD>gTs|xU)nzR{GC1S#6D4 zIMl+wXo@TPe$jk%vkP(gHPvV!OygDaxh}EvH4>y1qYLoHDQ$X7T3{ak06i4;!@8!Y zvg|h~kd%NneKXk^=+T`JoAb)A<=GZMDJ7L?l)8#5co_4|VjJO-Fsk=VduFU2i&}~3 z(50&ZzY(5sTKE%ufI|?$pU=`N*qUzDojT9%fC7d4T;oll>=PiC<`dm@ZJ*D5(!ctu z*8?A+WwS7!fDedp5x%q8gf?6&*Mf-RNUFnPn`wrgH$5ofOQQ50{Ilg)mdT(TS3Y&6 zq>UzWg2+~ZEpp=0{N@du1z^xS6Zyi8VgBr@B$55HcW zZq9*QZZj^*TTvGc=Q+MSgGzqU4Si+khC(_>+B5E=yKAO6@#~EFVWPQr4~zYFq?VqO zyJvrx_^XQsSbL+i%|lqyM({+Mp^t*Uj>sy=GjXx^=?%Q2(| zIAnSmtWU9uBv49g2GxU4S_*HKsaH#Ek&87xMh&9gh+7+ zJpKHTS4}i<>^QU|a<2n`iY*~wxX5tf?z9#QMgZ3OKQ)@un3%IBh&w`uIr>IAFmwo< z4=-S~kXYEP%kQrgLeUK`J4i`$fX58;-YDME(

php-sdk

+ + + Logout + +
+ Check the login status using OAuth 2.0 handled by the PHP SDK: + Check the login status +
+
+ Login using OAuth 2.0 handled by the PHP SDK: + Login with Facebook +
+ + +

PHP Session

+
+ + +

You

+ + +

Your User Object (/me)

+
+ + You are not Connected. + + +

Public profile of Naitik

+ + + + diff --git a/app/vendor/facebook/php-sdk/examples/with_js_sdk.php b/app/vendor/facebook/php-sdk/examples/with_js_sdk.php new file mode 100644 index 0000000..4255a35 --- /dev/null +++ b/app/vendor/facebook/php-sdk/examples/with_js_sdk.php @@ -0,0 +1,59 @@ + '344617158898614', + 'secret' => '6dc8ac871858b34798bc2488200e503d', +)); + +// See if there is a user from a cookie +$user = $facebook->getUser(); + +if ($user) { + try { + // Proceed knowing you have a logged in user who's authenticated. + $user_profile = $facebook->api('/me'); + } catch (FacebookApiException $e) { + echo '
'.htmlspecialchars(print_r($e, true)).'
'; + $user = null; + } +} + +?> + + + + + Your user profile is +
+        
+      
+ + + +
+ + + diff --git a/app/vendor/facebook/php-sdk/readme.md b/app/vendor/facebook/php-sdk/readme.md new file mode 100644 index 0000000..e9b5844 --- /dev/null +++ b/app/vendor/facebook/php-sdk/readme.md @@ -0,0 +1,115 @@ +Facebook PHP SDK (v.3.2.2) + +The [Facebook Platform](http://developers.facebook.com/) is +a set of APIs that make your app more social. + +This repository contains the open source PHP SDK that allows you to +access Facebook Platform from your PHP app. Except as otherwise noted, +the Facebook PHP SDK is licensed under the Apache Licence, Version 2.0 +(http://www.apache.org/licenses/LICENSE-2.0.html). + + +Usage +----- + +The [examples][examples] are a good place to start. The minimal you'll need to +have is: +```php +require 'facebook-php-sdk/src/facebook.php'; + +$facebook = new Facebook(array( + 'appId' => 'YOUR_APP_ID', + 'secret' => 'YOUR_APP_SECRET', +)); + +// Get User ID +$user = $facebook->getUser(); +``` + +To make [API][API] calls: +```php +if ($user) { + try { + // Proceed knowing you have a logged in user who's authenticated. + $user_profile = $facebook->api('/me'); + } catch (FacebookApiException $e) { + error_log($e); + $user = null; + } +} +``` + +You can make api calls by choosing the `HTTP method` and setting optional `parameters`: +```php +$facebook->api('/me/feed/', 'post', array( + 'message' => 'I want to display this message on my wall' +)); +``` + + +Login or logout url will be needed depending on current user state. +```php +if ($user) { + $logoutUrl = $facebook->getLogoutUrl(); +} else { + $loginUrl = $facebook->getLoginUrl(); +} +``` + +With Composer: + +- Add the `"facebook/php-sdk": "@stable"` into the `require` section of your `composer.json`. +- Run `composer install`. +- The example will look like + +```php +if (($loader = require_once __DIR__ . '/vendor/autoload.php') == null) { + die('Vendor directory not found, Please run composer install.'); +} + +$facebook = new Facebook(array( + 'appId' => 'YOUR_APP_ID', + 'secret' => 'YOUR_APP_SECRET', +)); + +// Get User ID +$user = $facebook->getUser(); +``` + +[examples]: /examples/example.php +[API]: http://developers.facebook.com/docs/api + +Tests +----- + +In order to keep us nimble and allow us to bring you new functionality, without +compromising on stability, we have ensured full test coverage of the SDK. +We are including this in the open source repository to assure you of our +commitment to quality, but also with the hopes that you will contribute back to +help keep it stable. The easiest way to do so is to file bugs and include a +test case. + +The tests can be executed by using this command from the base directory: + + phpunit --stderr --bootstrap tests/bootstrap.php tests/tests.php + + +Contributing +=========== +For us to accept contributions you will have to first have signed the +[Contributor License Agreement](https://developers.facebook.com/opensource/cla). + +When commiting, keep all lines to less than 80 characters, and try to +follow the existing style. + +Before creating a pull request, squash your commits into a single commit. + +Add the comments where needed, and provide ample explanation in the +commit message. + + +Report Issues/Bugs +=============== +[Bugs](https://developers.facebook.com/bugs) + +[Questions](http://facebook.stackoverflow.com) diff --git a/app/vendor/facebook/php-sdk/src/base_facebook.php b/app/vendor/facebook/php-sdk/src/base_facebook.php new file mode 100644 index 0000000..8cf2504 --- /dev/null +++ b/app/vendor/facebook/php-sdk/src/base_facebook.php @@ -0,0 +1,1481 @@ + + */ +class FacebookApiException extends Exception +{ + /** + * The result from the API server that represents the exception information. + */ + protected $result; + + /** + * Make a new API Exception with the given result. + * + * @param array $result The result from the API server + */ + public function __construct($result) { + $this->result = $result; + + $code = 0; + if (isset($result['error_code']) && is_int($result['error_code'])) { + $code = $result['error_code']; + } + + if (isset($result['error_description'])) { + // OAuth 2.0 Draft 10 style + $msg = $result['error_description']; + } else if (isset($result['error']) && is_array($result['error'])) { + // OAuth 2.0 Draft 00 style + $msg = $result['error']['message']; + } else if (isset($result['error_msg'])) { + // Rest server style + $msg = $result['error_msg']; + } else { + $msg = 'Unknown Error. Check getResult()'; + } + + parent::__construct($msg, $code); + } + + /** + * Return the associated result object returned by the API server. + * + * @return array The result from the API server + */ + public function getResult() { + return $this->result; + } + + /** + * Returns the associated type for the error. This will default to + * 'Exception' when a type is not available. + * + * @return string + */ + public function getType() { + if (isset($this->result['error'])) { + $error = $this->result['error']; + if (is_string($error)) { + // OAuth 2.0 Draft 10 style + return $error; + } else if (is_array($error)) { + // OAuth 2.0 Draft 00 style + if (isset($error['type'])) { + return $error['type']; + } + } + } + + return 'Exception'; + } + + /** + * To make debugging easier. + * + * @return string The string representation of the error + */ + public function __toString() { + $str = $this->getType() . ': '; + if ($this->code != 0) { + $str .= $this->code . ': '; + } + return $str . $this->message; + } +} + +/** + * Provides access to the Facebook Platform. This class provides + * a majority of the functionality needed, but the class is abstract + * because it is designed to be sub-classed. The subclass must + * implement the four abstract methods listed at the bottom of + * the file. + * + * @author Naitik Shah + */ +abstract class BaseFacebook +{ + /** + * Version. + */ + const VERSION = '3.2.3'; + + /** + * Signed Request Algorithm. + */ + const SIGNED_REQUEST_ALGORITHM = 'HMAC-SHA256'; + + /** + * Default options for curl. + */ + public static $CURL_OPTS = array( + CURLOPT_CONNECTTIMEOUT => 10, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_TIMEOUT => 60, + CURLOPT_USERAGENT => 'facebook-php-3.2', + ); + + /** + * List of query parameters that get automatically dropped when rebuilding + * the current URL. + */ + protected static $DROP_QUERY_PARAMS = array( + 'code', + 'state', + 'signed_request', + ); + + /** + * Maps aliases to Facebook domains. + */ + public static $DOMAIN_MAP = array( + 'api' => 'https://api.facebook.com/', + 'api_video' => 'https://api-video.facebook.com/', + 'api_read' => 'https://api-read.facebook.com/', + 'graph' => 'https://graph.facebook.com/', + 'graph_video' => 'https://graph-video.facebook.com/', + 'www' => 'https://www.facebook.com/', + ); + + /** + * The Application ID. + * + * @var string + */ + protected $appId; + + /** + * The Application App Secret. + * + * @var string + */ + protected $appSecret; + + /** + * The ID of the Facebook user, or 0 if the user is logged out. + * + * @var integer + */ + protected $user; + + /** + * The data from the signed_request token. + */ + protected $signedRequest; + + /** + * A CSRF state variable to assist in the defense against CSRF attacks. + */ + protected $state; + + /** + * The OAuth access token received in exchange for a valid authorization + * code. null means the access token has yet to be determined. + * + * @var string + */ + protected $accessToken = null; + + /** + * Indicates if the CURL based @ syntax for file uploads is enabled. + * + * @var boolean + */ + protected $fileUploadSupport = false; + + /** + * Indicates if we trust HTTP_X_FORWARDED_* headers. + * + * @var boolean + */ + protected $trustForwarded = false; + + /** + * Indicates if signed_request is allowed in query parameters. + * + * @var boolean + */ + protected $allowSignedRequest = true; + + /** + * Initialize a Facebook Application. + * + * The configuration: + * - appId: the application ID + * - secret: the application secret + * - fileUpload: (optional) boolean indicating if file uploads are enabled + * - allowSignedRequest: (optional) boolean indicating if signed_request is + * allowed in query parameters or POST body. Should be + * false for non-canvas apps. Defaults to true. + * + * @param array $config The application configuration + */ + public function __construct($config) { + $this->setAppId($config['appId']); + $this->setAppSecret($config['secret']); + if (isset($config['fileUpload'])) { + $this->setFileUploadSupport($config['fileUpload']); + } + if (isset($config['trustForwarded']) && $config['trustForwarded']) { + $this->trustForwarded = true; + } + if (isset($config['allowSignedRequest']) + && !$config['allowSignedRequest']) { + $this->allowSignedRequest = false; + } + $state = $this->getPersistentData('state'); + if (!empty($state)) { + $this->state = $state; + } + } + + /** + * Set the Application ID. + * + * @param string $appId The Application ID + * @return BaseFacebook + */ + public function setAppId($appId) { + $this->appId = $appId; + return $this; + } + + /** + * Get the Application ID. + * + * @return string the Application ID + */ + public function getAppId() { + return $this->appId; + } + + /** + * Set the App Secret. + * + * @param string $apiSecret The App Secret + * @return BaseFacebook + * @deprecated Use setAppSecret instead. + */ + public function setApiSecret($apiSecret) { + $this->setAppSecret($apiSecret); + return $this; + } + + /** + * Set the App Secret. + * + * @param string $appSecret The App Secret + * @return BaseFacebook + */ + public function setAppSecret($appSecret) { + $this->appSecret = $appSecret; + return $this; + } + + /** + * Get the App Secret. + * + * @return string the App Secret + * @deprecated Use getAppSecret instead. + */ + public function getApiSecret() { + return $this->getAppSecret(); + } + + /** + * Get the App Secret. + * + * @return string the App Secret + */ + public function getAppSecret() { + return $this->appSecret; + } + + /** + * Set the file upload support status. + * + * @param boolean $fileUploadSupport The file upload support status. + * @return BaseFacebook + */ + public function setFileUploadSupport($fileUploadSupport) { + $this->fileUploadSupport = $fileUploadSupport; + return $this; + } + + /** + * Get the file upload support status. + * + * @return boolean true if and only if the server supports file upload. + */ + public function getFileUploadSupport() { + return $this->fileUploadSupport; + } + + /** + * Get the file upload support status. + * + * @return boolean true if and only if the server supports file upload. + * @deprecated Use getFileUploadSupport instead. + */ + public function useFileUploadSupport() { + return $this->getFileUploadSupport(); + } + + /** + * Sets the access token for api calls. Use this if you get + * your access token by other means and just want the SDK + * to use it. + * + * @param string $access_token an access token. + * @return BaseFacebook + */ + public function setAccessToken($access_token) { + $this->accessToken = $access_token; + return $this; + } + + /** + * Extend an access token, while removing the short-lived token that might + * have been generated via client-side flow. Thanks to http://bit.ly/b0Pt0H + * for the workaround. + */ + public function setExtendedAccessToken() { + try { + // need to circumvent json_decode by calling _oauthRequest + // directly, since response isn't JSON format. + $access_token_response = $this->_oauthRequest( + $this->getUrl('graph', '/oauth/access_token'), + $params = array( + 'client_id' => $this->getAppId(), + 'client_secret' => $this->getAppSecret(), + 'grant_type' => 'fb_exchange_token', + 'fb_exchange_token' => $this->getAccessToken(), + ) + ); + } + catch (FacebookApiException $e) { + // most likely that user very recently revoked authorization. + // In any event, we don't have an access token, so say so. + return false; + } + + if (empty($access_token_response)) { + return false; + } + + $response_params = array(); + parse_str($access_token_response, $response_params); + + if (!isset($response_params['access_token'])) { + return false; + } + + $this->destroySession(); + + $this->setPersistentData( + 'access_token', $response_params['access_token'] + ); + } + + /** + * Determines the access token that should be used for API calls. + * The first time this is called, $this->accessToken is set equal + * to either a valid user access token, or it's set to the application + * access token if a valid user access token wasn't available. Subsequent + * calls return whatever the first call returned. + * + * @return string The access token + */ + public function getAccessToken() { + if ($this->accessToken !== null) { + // we've done this already and cached it. Just return. + return $this->accessToken; + } + + // first establish access token to be the application + // access token, in case we navigate to the /oauth/access_token + // endpoint, where SOME access token is required. + $this->setAccessToken($this->getApplicationAccessToken()); + $user_access_token = $this->getUserAccessToken(); + if ($user_access_token) { + $this->setAccessToken($user_access_token); + } + + return $this->accessToken; + } + + /** + * Determines and returns the user access token, first using + * the signed request if present, and then falling back on + * the authorization code if present. The intent is to + * return a valid user access token, or false if one is determined + * to not be available. + * + * @return string A valid user access token, or false if one + * could not be determined. + */ + protected function getUserAccessToken() { + // first, consider a signed request if it's supplied. + // if there is a signed request, then it alone determines + // the access token. + $signed_request = $this->getSignedRequest(); + if ($signed_request) { + // apps.facebook.com hands the access_token in the signed_request + if (array_key_exists('oauth_token', $signed_request)) { + $access_token = $signed_request['oauth_token']; + $this->setPersistentData('access_token', $access_token); + return $access_token; + } + + // the JS SDK puts a code in with the redirect_uri of '' + if (array_key_exists('code', $signed_request)) { + $code = $signed_request['code']; + if ($code && $code == $this->getPersistentData('code')) { + // short-circuit if the code we have is the same as the one presented + return $this->getPersistentData('access_token'); + } + + $access_token = $this->getAccessTokenFromCode($code, ''); + if ($access_token) { + $this->setPersistentData('code', $code); + $this->setPersistentData('access_token', $access_token); + return $access_token; + } + } + + // signed request states there's no access token, so anything + // stored should be cleared. + $this->clearAllPersistentData(); + return false; // respect the signed request's data, even + // if there's an authorization code or something else + } + + $code = $this->getCode(); + if ($code && $code != $this->getPersistentData('code')) { + $access_token = $this->getAccessTokenFromCode($code); + if ($access_token) { + $this->setPersistentData('code', $code); + $this->setPersistentData('access_token', $access_token); + return $access_token; + } + + // code was bogus, so everything based on it should be invalidated. + $this->clearAllPersistentData(); + return false; + } + + // as a fallback, just return whatever is in the persistent + // store, knowing nothing explicit (signed request, authorization + // code, etc.) was present to shadow it (or we saw a code in $_REQUEST, + // but it's the same as what's in the persistent store) + return $this->getPersistentData('access_token'); + } + + /** + * Retrieve the signed request, either from a request parameter or, + * if not present, from a cookie. + * + * @return string the signed request, if available, or null otherwise. + */ + public function getSignedRequest() { + if (!$this->signedRequest) { + if ($this->allowSignedRequest && !empty($_REQUEST['signed_request'])) { + $this->signedRequest = $this->parseSignedRequest( + $_REQUEST['signed_request'] + ); + } else if (!empty($_COOKIE[$this->getSignedRequestCookieName()])) { + $this->signedRequest = $this->parseSignedRequest( + $_COOKIE[$this->getSignedRequestCookieName()]); + } + } + return $this->signedRequest; + } + + /** + * Get the UID of the connected user, or 0 + * if the Facebook user is not connected. + * + * @return string the UID if available. + */ + public function getUser() { + if ($this->user !== null) { + // we've already determined this and cached the value. + return $this->user; + } + + return $this->user = $this->getUserFromAvailableData(); + } + + /** + * Determines the connected user by first examining any signed + * requests, then considering an authorization code, and then + * falling back to any persistent store storing the user. + * + * @return integer The id of the connected Facebook user, + * or 0 if no such user exists. + */ + protected function getUserFromAvailableData() { + // if a signed request is supplied, then it solely determines + // who the user is. + $signed_request = $this->getSignedRequest(); + if ($signed_request) { + if (array_key_exists('user_id', $signed_request)) { + $user = $signed_request['user_id']; + + if($user != $this->getPersistentData('user_id')){ + $this->clearAllPersistentData(); + } + + $this->setPersistentData('user_id', $signed_request['user_id']); + return $user; + } + + // if the signed request didn't present a user id, then invalidate + // all entries in any persistent store. + $this->clearAllPersistentData(); + return 0; + } + + $user = $this->getPersistentData('user_id', $default = 0); + $persisted_access_token = $this->getPersistentData('access_token'); + + // use access_token to fetch user id if we have a user access_token, or if + // the cached access token has changed. + $access_token = $this->getAccessToken(); + if ($access_token && + $access_token != $this->getApplicationAccessToken() && + !($user && $persisted_access_token == $access_token)) { + $user = $this->getUserFromAccessToken(); + if ($user) { + $this->setPersistentData('user_id', $user); + } else { + $this->clearAllPersistentData(); + } + } + + return $user; + } + + /** + * Get a Login URL for use with redirects. By default, full page redirect is + * assumed. If you are using the generated URL with a window.open() call in + * JavaScript, you can pass in display=popup as part of the $params. + * + * The parameters: + * - redirect_uri: the url to go to after a successful login + * - scope: comma separated list of requested extended perms + * + * @param array $params Provide custom parameters + * @return string The URL for the login flow + */ + public function getLoginUrl($params=array()) { + $this->establishCSRFTokenState(); + $currentUrl = $this->getCurrentUrl(); + + // if 'scope' is passed as an array, convert to comma separated list + $scopeParams = isset($params['scope']) ? $params['scope'] : null; + if ($scopeParams && is_array($scopeParams)) { + $params['scope'] = implode(',', $scopeParams); + } + + return $this->getUrl( + 'www', + 'dialog/oauth', + array_merge( + array( + 'client_id' => $this->getAppId(), + 'redirect_uri' => $currentUrl, // possibly overwritten + 'state' => $this->state, + 'sdk' => 'php-sdk-'.self::VERSION + ), + $params + )); + } + + /** + * Get a Logout URL suitable for use with redirects. + * + * The parameters: + * - next: the url to go to after a successful logout + * + * @param array $params Provide custom parameters + * @return string The URL for the logout flow + */ + public function getLogoutUrl($params=array()) { + return $this->getUrl( + 'www', + 'logout.php', + array_merge(array( + 'next' => $this->getCurrentUrl(), + 'access_token' => $this->getUserAccessToken(), + ), $params) + ); + } + + /** + * Get a login status URL to fetch the status from Facebook. + * + * @param array $params Provide custom parameters + * @return string The URL for the logout flow + */ + public function getLoginStatusUrl($params=array()) { + return $this->getLoginUrl( + array_merge(array( + 'response_type' => 'code', + 'display' => 'none', + ), $params) + ); + } + + /** + * Make an API call. + * + * @return mixed The decoded response + */ + public function api(/* polymorphic */) { + $args = func_get_args(); + if (is_array($args[0])) { + return $this->_restserver($args[0]); + } else { + return call_user_func_array(array($this, '_graph'), $args); + } + } + + /** + * Constructs and returns the name of the cookie that + * potentially houses the signed request for the app user. + * The cookie is not set by the BaseFacebook class, but + * it may be set by the JavaScript SDK. + * + * @return string the name of the cookie that would house + * the signed request value. + */ + protected function getSignedRequestCookieName() { + return 'fbsr_'.$this->getAppId(); + } + + /** + * Constructs and returns the name of the coookie that potentially contain + * metadata. The cookie is not set by the BaseFacebook class, but it may be + * set by the JavaScript SDK. + * + * @return string the name of the cookie that would house metadata. + */ + protected function getMetadataCookieName() { + return 'fbm_'.$this->getAppId(); + } + + /** + * Get the authorization code from the query parameters, if it exists, + * and otherwise return false to signal no authorization code was + * discoverable. + * + * @return mixed The authorization code, or false if the authorization + * code could not be determined. + */ + protected function getCode() { + if (isset($_REQUEST['code'])) { + if ($this->state !== null && + isset($_REQUEST['state']) && + $this->state === $_REQUEST['state']) { + + // CSRF state has done its job, so clear it + $this->state = null; + $this->clearPersistentData('state'); + return $_REQUEST['code']; + } else { + self::errorLog('CSRF state token does not match one provided.'); + return false; + } + } + + return false; + } + + /** + * Retrieves the UID with the understanding that + * $this->accessToken has already been set and is + * seemingly legitimate. It relies on Facebook's Graph API + * to retrieve user information and then extract + * the user ID. + * + * @return integer Returns the UID of the Facebook user, or 0 + * if the Facebook user could not be determined. + */ + protected function getUserFromAccessToken() { + try { + $user_info = $this->api('/me'); + return $user_info['id']; + } catch (FacebookApiException $e) { + return 0; + } + } + + /** + * Returns the access token that should be used for logged out + * users when no authorization code is available. + * + * @return string The application access token, useful for gathering + * public information about users and applications. + */ + public function getApplicationAccessToken() { + return $this->appId.'|'.$this->appSecret; + } + + /** + * Lays down a CSRF state token for this process. + * + * @return void + */ + protected function establishCSRFTokenState() { + if ($this->state === null) { + $this->state = md5(uniqid(mt_rand(), true)); + $this->setPersistentData('state', $this->state); + } + } + + /** + * Retrieves an access token for the given authorization code + * (previously generated from www.facebook.com on behalf of + * a specific user). The authorization code is sent to graph.facebook.com + * and a legitimate access token is generated provided the access token + * and the user for which it was generated all match, and the user is + * either logged in to Facebook or has granted an offline access permission. + * + * @param string $code An authorization code. + * @return mixed An access token exchanged for the authorization code, or + * false if an access token could not be generated. + */ + protected function getAccessTokenFromCode($code, $redirect_uri = null) { + if (empty($code)) { + return false; + } + + if ($redirect_uri === null) { + $redirect_uri = $this->getCurrentUrl(); + } + + try { + // need to circumvent json_decode by calling _oauthRequest + // directly, since response isn't JSON format. + $access_token_response = + $this->_oauthRequest( + $this->getUrl('graph', '/oauth/access_token'), + $params = array('client_id' => $this->getAppId(), + 'client_secret' => $this->getAppSecret(), + 'redirect_uri' => $redirect_uri, + 'code' => $code)); + } catch (FacebookApiException $e) { + // most likely that user very recently revoked authorization. + // In any event, we don't have an access token, so say so. + return false; + } + + if (empty($access_token_response)) { + return false; + } + + $response_params = array(); + parse_str($access_token_response, $response_params); + if (!isset($response_params['access_token'])) { + return false; + } + + return $response_params['access_token']; + } + + /** + * Invoke the old restserver.php endpoint. + * + * @param array $params Method call object + * + * @return mixed The decoded response object + * @throws FacebookApiException + */ + protected function _restserver($params) { + // generic application level parameters + $params['api_key'] = $this->getAppId(); + $params['format'] = 'json-strings'; + + $result = json_decode($this->_oauthRequest( + $this->getApiUrl($params['method']), + $params + ), true); + + // results are returned, errors are thrown + if (is_array($result) && isset($result['error_code'])) { + $this->throwAPIException($result); + // @codeCoverageIgnoreStart + } + // @codeCoverageIgnoreEnd + + $method = strtolower($params['method']); + if ($method === 'auth.expiresession' || + $method === 'auth.revokeauthorization') { + $this->destroySession(); + } + + return $result; + } + + /** + * Return true if this is video post. + * + * @param string $path The path + * @param string $method The http method (default 'GET') + * + * @return boolean true if this is video post + */ + protected function isVideoPost($path, $method = 'GET') { + if ($method == 'POST' && preg_match("/^(\/)(.+)(\/)(videos)$/", $path)) { + return true; + } + return false; + } + + /** + * Invoke the Graph API. + * + * @param string $path The path (required) + * @param string $method The http method (default 'GET') + * @param array $params The query/post data + * + * @return mixed The decoded response object + * @throws FacebookApiException + */ + protected function _graph($path, $method = 'GET', $params = array()) { + if (is_array($method) && empty($params)) { + $params = $method; + $method = 'GET'; + } + $params['method'] = $method; // method override as we always do a POST + + if ($this->isVideoPost($path, $method)) { + $domainKey = 'graph_video'; + } else { + $domainKey = 'graph'; + } + + $result = json_decode($this->_oauthRequest( + $this->getUrl($domainKey, $path), + $params + ), true); + + // results are returned, errors are thrown + if (is_array($result) && isset($result['error'])) { + $this->throwAPIException($result); + // @codeCoverageIgnoreStart + } + // @codeCoverageIgnoreEnd + + return $result; + } + + /** + * Make a OAuth Request. + * + * @param string $url The path (required) + * @param array $params The query/post data + * + * @return string The decoded response object + * @throws FacebookApiException + */ + protected function _oauthRequest($url, $params) { + if (!isset($params['access_token'])) { + $params['access_token'] = $this->getAccessToken(); + } + + if (isset($params['access_token'])) { + $params['appsecret_proof'] = $this->getAppSecretProof($params['access_token']); + } + + // json_encode all params values that are not strings + foreach ($params as $key => $value) { + if (!is_string($value) && !($value instanceof CURLFile)) { + $params[$key] = json_encode($value); + } + } + + return $this->makeRequest($url, $params); + } + + /** + * Generate a proof of App Secret + * This is required for all API calls originating from a server + * It is a sha256 hash of the access_token made using the app secret + * + * @param string $access_token The access_token to be hashed (required) + * + * @return string The sha256 hash of the access_token + */ + protected function getAppSecretProof($access_token) { + return hash_hmac('sha256', $access_token, $this->getAppSecret()); + } + + /** + * Makes an HTTP request. This method can be overridden by subclasses if + * developers want to do fancier things or use something other than curl to + * make the request. + * + * @param string $url The URL to make the request to + * @param array $params The parameters to use for the POST body + * @param CurlHandler $ch Initialized curl handle + * + * @return string The response text + */ + protected function makeRequest($url, $params, $ch=null) { + if (!$ch) { + $ch = curl_init(); + } + + $opts = self::$CURL_OPTS; + if ($this->getFileUploadSupport()) { + $opts[CURLOPT_POSTFIELDS] = $params; + } else { + $opts[CURLOPT_POSTFIELDS] = http_build_query($params, null, '&'); + } + $opts[CURLOPT_URL] = $url; + + // disable the 'Expect: 100-continue' behaviour. This causes CURL to wait + // for 2 seconds if the server does not support this header. + if (isset($opts[CURLOPT_HTTPHEADER])) { + $existing_headers = $opts[CURLOPT_HTTPHEADER]; + $existing_headers[] = 'Expect:'; + $opts[CURLOPT_HTTPHEADER] = $existing_headers; + } else { + $opts[CURLOPT_HTTPHEADER] = array('Expect:'); + } + + curl_setopt_array($ch, $opts); + $result = curl_exec($ch); + + $errno = curl_errno($ch); + // CURLE_SSL_CACERT || CURLE_SSL_CACERT_BADFILE + if ($errno == 60 || $errno == 77) { + self::errorLog('Invalid or no certificate authority found, '. + 'using bundled information'); + curl_setopt($ch, CURLOPT_CAINFO, + dirname(__FILE__) . DIRECTORY_SEPARATOR . 'fb_ca_chain_bundle.crt'); + $result = curl_exec($ch); + } + + // With dual stacked DNS responses, it's possible for a server to + // have IPv6 enabled but not have IPv6 connectivity. If this is + // the case, curl will try IPv4 first and if that fails, then it will + // fall back to IPv6 and the error EHOSTUNREACH is returned by the + // operating system. + if ($result === false && empty($opts[CURLOPT_IPRESOLVE])) { + $matches = array(); + $regex = '/Failed to connect to ([^:].*): Network is unreachable/'; + if (preg_match($regex, curl_error($ch), $matches)) { + if (strlen(@inet_pton($matches[1])) === 16) { + self::errorLog('Invalid IPv6 configuration on server, '. + 'Please disable or get native IPv6 on your server.'); + self::$CURL_OPTS[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V4; + curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); + $result = curl_exec($ch); + } + } + } + + if ($result === false) { + $e = new FacebookApiException(array( + 'error_code' => curl_errno($ch), + 'error' => array( + 'message' => curl_error($ch), + 'type' => 'CurlException', + ), + )); + curl_close($ch); + throw $e; + } + curl_close($ch); + return $result; + } + + /** + * Parses a signed_request and validates the signature. + * + * @param string $signed_request A signed token + * @return array The payload inside it or null if the sig is wrong + */ + protected function parseSignedRequest($signed_request) { + list($encoded_sig, $payload) = explode('.', $signed_request, 2); + + // decode the data + $sig = self::base64UrlDecode($encoded_sig); + $data = json_decode(self::base64UrlDecode($payload), true); + + if (strtoupper($data['algorithm']) !== self::SIGNED_REQUEST_ALGORITHM) { + self::errorLog( + 'Unknown algorithm. Expected ' . self::SIGNED_REQUEST_ALGORITHM); + return null; + } + + // check sig + $expected_sig = hash_hmac('sha256', $payload, + $this->getAppSecret(), $raw = true); + + if (strlen($expected_sig) !== strlen($sig)) { + self::errorLog('Bad Signed JSON signature!'); + return null; + } + + $result = 0; + for ($i = 0; $i < strlen($expected_sig); $i++) { + $result |= ord($expected_sig[$i]) ^ ord($sig[$i]); + } + + if ($result == 0) { + return $data; + } else { + self::errorLog('Bad Signed JSON signature!'); + return null; + } + } + + /** + * Makes a signed_request blob using the given data. + * + * @param array The data array. + * @return string The signed request. + */ + protected function makeSignedRequest($data) { + if (!is_array($data)) { + throw new InvalidArgumentException( + 'makeSignedRequest expects an array. Got: ' . print_r($data, true)); + } + $data['algorithm'] = self::SIGNED_REQUEST_ALGORITHM; + $data['issued_at'] = time(); + $json = json_encode($data); + $b64 = self::base64UrlEncode($json); + $raw_sig = hash_hmac('sha256', $b64, $this->getAppSecret(), $raw = true); + $sig = self::base64UrlEncode($raw_sig); + return $sig.'.'.$b64; + } + + /** + * Build the URL for api given parameters. + * + * @param $method String the method name. + * @return string The URL for the given parameters + */ + protected function getApiUrl($method) { + static $READ_ONLY_CALLS = + array('admin.getallocation' => 1, + 'admin.getappproperties' => 1, + 'admin.getbannedusers' => 1, + 'admin.getlivestreamvialink' => 1, + 'admin.getmetrics' => 1, + 'admin.getrestrictioninfo' => 1, + 'application.getpublicinfo' => 1, + 'auth.getapppublickey' => 1, + 'auth.getsession' => 1, + 'auth.getsignedpublicsessiondata' => 1, + 'comments.get' => 1, + 'connect.getunconnectedfriendscount' => 1, + 'dashboard.getactivity' => 1, + 'dashboard.getcount' => 1, + 'dashboard.getglobalnews' => 1, + 'dashboard.getnews' => 1, + 'dashboard.multigetcount' => 1, + 'dashboard.multigetnews' => 1, + 'data.getcookies' => 1, + 'events.get' => 1, + 'events.getmembers' => 1, + 'fbml.getcustomtags' => 1, + 'feed.getappfriendstories' => 1, + 'feed.getregisteredtemplatebundlebyid' => 1, + 'feed.getregisteredtemplatebundles' => 1, + 'fql.multiquery' => 1, + 'fql.query' => 1, + 'friends.arefriends' => 1, + 'friends.get' => 1, + 'friends.getappusers' => 1, + 'friends.getlists' => 1, + 'friends.getmutualfriends' => 1, + 'gifts.get' => 1, + 'groups.get' => 1, + 'groups.getmembers' => 1, + 'intl.gettranslations' => 1, + 'links.get' => 1, + 'notes.get' => 1, + 'notifications.get' => 1, + 'pages.getinfo' => 1, + 'pages.isadmin' => 1, + 'pages.isappadded' => 1, + 'pages.isfan' => 1, + 'permissions.checkavailableapiaccess' => 1, + 'permissions.checkgrantedapiaccess' => 1, + 'photos.get' => 1, + 'photos.getalbums' => 1, + 'photos.gettags' => 1, + 'profile.getinfo' => 1, + 'profile.getinfooptions' => 1, + 'stream.get' => 1, + 'stream.getcomments' => 1, + 'stream.getfilters' => 1, + 'users.getinfo' => 1, + 'users.getloggedinuser' => 1, + 'users.getstandardinfo' => 1, + 'users.hasapppermission' => 1, + 'users.isappuser' => 1, + 'users.isverified' => 1, + 'video.getuploadlimits' => 1); + $name = 'api'; + if (isset($READ_ONLY_CALLS[strtolower($method)])) { + $name = 'api_read'; + } else if (strtolower($method) == 'video.upload') { + $name = 'api_video'; + } + return self::getUrl($name, 'restserver.php'); + } + + /** + * Build the URL for given domain alias, path and parameters. + * + * @param $name string The name of the domain + * @param $path string Optional path (without a leading slash) + * @param $params array Optional query parameters + * + * @return string The URL for the given parameters + */ + protected function getUrl($name, $path='', $params=array()) { + $url = self::$DOMAIN_MAP[$name]; + if ($path) { + if ($path[0] === '/') { + $path = substr($path, 1); + } + $url .= $path; + } + if ($params) { + $url .= '?' . http_build_query($params, null, '&'); + } + + return $url; + } + + protected function getHttpHost() { + if ($this->trustForwarded && isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { + return $_SERVER['HTTP_X_FORWARDED_HOST']; + } + return $_SERVER['HTTP_HOST']; + } + + protected function getHttpProtocol() { + if ($this->trustForwarded && isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) { + if ($_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { + return 'https'; + } + return 'http'; + } + /*apache + variants specific way of checking for https*/ + if (isset($_SERVER['HTTPS']) && + ($_SERVER['HTTPS'] === 'on' || $_SERVER['HTTPS'] == 1)) { + return 'https'; + } + /*nginx way of checking for https*/ + if (isset($_SERVER['SERVER_PORT']) && + ($_SERVER['SERVER_PORT'] === '443')) { + return 'https'; + } + return 'http'; + } + + /** + * Get the base domain used for the cookie. + */ + protected function getBaseDomain() { + // The base domain is stored in the metadata cookie if not we fallback + // to the current hostname + $metadata = $this->getMetadataCookie(); + if (array_key_exists('base_domain', $metadata) && + !empty($metadata['base_domain'])) { + return trim($metadata['base_domain'], '.'); + } + return $this->getHttpHost(); + } + + /** + * Returns the Current URL, stripping it of known FB parameters that should + * not persist. + * + * @return string The current URL + */ + protected function getCurrentUrl() { + $protocol = $this->getHttpProtocol() . '://'; + $host = $this->getHttpHost(); + $currentUrl = $protocol.$host.$_SERVER['REQUEST_URI']; + $parts = parse_url($currentUrl); + + $query = ''; + if (!empty($parts['query'])) { + // drop known fb params + $params = explode('&', $parts['query']); + $retained_params = array(); + foreach ($params as $param) { + if ($this->shouldRetainParam($param)) { + $retained_params[] = $param; + } + } + + if (!empty($retained_params)) { + $query = '?'.implode($retained_params, '&'); + } + } + + // use port if non default + $port = + isset($parts['port']) && + (($protocol === 'http://' && $parts['port'] !== 80) || + ($protocol === 'https://' && $parts['port'] !== 443)) + ? ':' . $parts['port'] : ''; + + // rebuild + return $protocol . $parts['host'] . $port . $parts['path'] . $query; + } + + /** + * Returns true if and only if the key or key/value pair should + * be retained as part of the query string. This amounts to + * a brute-force search of the very small list of Facebook-specific + * params that should be stripped out. + * + * @param string $param A key or key/value pair within a URL's query (e.g. + * 'foo=a', 'foo=', or 'foo'. + * + * @return boolean + */ + protected function shouldRetainParam($param) { + foreach (self::$DROP_QUERY_PARAMS as $drop_query_param) { + if ($param === $drop_query_param || + strpos($param, $drop_query_param.'=') === 0) { + return false; + } + } + + return true; + } + + /** + * Analyzes the supplied result to see if it was thrown + * because the access token is no longer valid. If that is + * the case, then we destroy the session. + * + * @param $result array A record storing the error message returned + * by a failed API call. + */ + protected function throwAPIException($result) { + $e = new FacebookApiException($result); + switch ($e->getType()) { + // OAuth 2.0 Draft 00 style + case 'OAuthException': + // OAuth 2.0 Draft 10 style + case 'invalid_token': + // REST server errors are just Exceptions + case 'Exception': + $message = $e->getMessage(); + if ((strpos($message, 'Error validating access token') !== false) || + (strpos($message, 'Invalid OAuth access token') !== false) || + (strpos($message, 'An active access token must be used') !== false) + ) { + $this->destroySession(); + } + break; + } + + throw $e; + } + + + /** + * Prints to the error log if you aren't in command line mode. + * + * @param string $msg Log message + */ + protected static function errorLog($msg) { + // disable error log if we are running in a CLI environment + // @codeCoverageIgnoreStart + if (php_sapi_name() != 'cli') { + error_log($msg); + } + // uncomment this if you want to see the errors on the page + // print 'error_log: '.$msg."\n"; + // @codeCoverageIgnoreEnd + } + + /** + * Base64 encoding that doesn't need to be urlencode()ed. + * Exactly the same as base64_encode except it uses + * - instead of + + * _ instead of / + * No padded = + * + * @param string $input base64UrlEncoded string + * @return string + */ + protected static function base64UrlDecode($input) { + return base64_decode(strtr($input, '-_', '+/')); + } + + /** + * Base64 encoding that doesn't need to be urlencode()ed. + * Exactly the same as base64_encode except it uses + * - instead of + + * _ instead of / + * + * @param string $input string + * @return string base64Url encoded string + */ + protected static function base64UrlEncode($input) { + $str = strtr(base64_encode($input), '+/', '-_'); + $str = str_replace('=', '', $str); + return $str; + } + + /** + * Destroy the current session + */ + public function destroySession() { + $this->accessToken = null; + $this->signedRequest = null; + $this->user = null; + $this->clearAllPersistentData(); + + // Javascript sets a cookie that will be used in getSignedRequest that we + // need to clear if we can + $cookie_name = $this->getSignedRequestCookieName(); + if (array_key_exists($cookie_name, $_COOKIE)) { + unset($_COOKIE[$cookie_name]); + if (!headers_sent()) { + $base_domain = $this->getBaseDomain(); + setcookie($cookie_name, '', 1, '/', '.'.$base_domain); + } else { + // @codeCoverageIgnoreStart + self::errorLog( + 'There exists a cookie that we wanted to clear that we couldn\'t '. + 'clear because headers was already sent. Make sure to do the first '. + 'API call before outputing anything.' + ); + // @codeCoverageIgnoreEnd + } + } + } + + /** + * Parses the metadata cookie that our Javascript API set + * + * @return an array mapping key to value + */ + protected function getMetadataCookie() { + $cookie_name = $this->getMetadataCookieName(); + if (!array_key_exists($cookie_name, $_COOKIE)) { + return array(); + } + + // The cookie value can be wrapped in "-characters so remove them + $cookie_value = trim($_COOKIE[$cookie_name], '"'); + + if (empty($cookie_value)) { + return array(); + } + + $parts = explode('&', $cookie_value); + $metadata = array(); + foreach ($parts as $part) { + $pair = explode('=', $part, 2); + if (!empty($pair[0])) { + $metadata[urldecode($pair[0])] = + (count($pair) > 1) ? urldecode($pair[1]) : ''; + } + } + + return $metadata; + } + + protected static function isAllowedDomain($big, $small) { + if ($big === $small) { + return true; + } + return self::endsWith($big, '.'.$small); + } + + protected static function endsWith($big, $small) { + $len = strlen($small); + if ($len === 0) { + return true; + } + return substr($big, -$len) === $small; + } + + /** + * Each of the following four methods should be overridden in + * a concrete subclass, as they are in the provided Facebook class. + * The Facebook class uses PHP sessions to provide a primitive + * persistent store, but another subclass--one that you implement-- + * might use a database, memcache, or an in-memory cache. + * + * @see Facebook + */ + + /** + * Stores the given ($key, $value) pair, so that future calls to + * getPersistentData($key) return $value. This call may be in another request. + * + * @param string $key + * @param array $value + * + * @return void + */ + abstract protected function setPersistentData($key, $value); + + /** + * Get the data for $key, persisted by BaseFacebook::setPersistentData() + * + * @param string $key The key of the data to retrieve + * @param boolean $default The default value to return if $key is not found + * + * @return mixed + */ + abstract protected function getPersistentData($key, $default = false); + + /** + * Clear the data with $key from the persistent storage + * + * @param string $key + * @return void + */ + abstract protected function clearPersistentData($key); + + /** + * Clear all data from the persistent storage + * + * @return void + */ + abstract protected function clearAllPersistentData(); +} diff --git a/app/vendor/facebook/php-sdk/src/facebook.php b/app/vendor/facebook/php-sdk/src/facebook.php new file mode 100644 index 0000000..743906c --- /dev/null +++ b/app/vendor/facebook/php-sdk/src/facebook.php @@ -0,0 +1,172 @@ +initSharedSession(); + + // re-load the persisted state, since parent + // attempted to read out of non-shared cookie + $state = $this->getPersistentData('state'); + if (!empty($state)) { + $this->state = $state; + } else { + $this->state = null; + } + + } + } + + protected static $kSupportedKeys = + array('state', 'code', 'access_token', 'user_id'); + + protected function initSharedSession() { + $cookie_name = $this->getSharedSessionCookieName(); + if (isset($_COOKIE[$cookie_name])) { + $data = $this->parseSignedRequest($_COOKIE[$cookie_name]); + if ($data && !empty($data['domain']) && + self::isAllowedDomain($this->getHttpHost(), $data['domain'])) { + // good case + $this->sharedSessionID = $data['id']; + return; + } + // ignoring potentially unreachable data + } + // evil/corrupt/missing case + $base_domain = $this->getBaseDomain(); + $this->sharedSessionID = md5(uniqid(mt_rand(), true)); + $cookie_value = $this->makeSignedRequest( + array( + 'domain' => $base_domain, + 'id' => $this->sharedSessionID, + ) + ); + $_COOKIE[$cookie_name] = $cookie_value; + if (!headers_sent()) { + $expire = time() + self::FBSS_COOKIE_EXPIRE; + setcookie($cookie_name, $cookie_value, $expire, '/', '.'.$base_domain); + } else { + // @codeCoverageIgnoreStart + self::errorLog( + 'Shared session ID cookie could not be set! You must ensure you '. + 'create the Facebook instance before headers have been sent. This '. + 'will cause authentication issues after the first request.' + ); + // @codeCoverageIgnoreEnd + } + } + + /** + * Provides the implementations of the inherited abstract + * methods. The implementation uses PHP sessions to maintain + * a store for authorization codes, user ids, CSRF states, and + * access tokens. + */ + protected function setPersistentData($key, $value) { + if (!in_array($key, self::$kSupportedKeys)) { + self::errorLog('Unsupported key passed to setPersistentData.'); + return; + } + + $session_var_name = $this->constructSessionVariableName($key); + $_SESSION[$session_var_name] = $value; + } + + protected function getPersistentData($key, $default = false) { + if (!in_array($key, self::$kSupportedKeys)) { + self::errorLog('Unsupported key passed to getPersistentData.'); + return $default; + } + + $session_var_name = $this->constructSessionVariableName($key); + return isset($_SESSION[$session_var_name]) ? + $_SESSION[$session_var_name] : $default; + } + + protected function clearPersistentData($key) { + if (!in_array($key, self::$kSupportedKeys)) { + self::errorLog('Unsupported key passed to clearPersistentData.'); + return; + } + + $session_var_name = $this->constructSessionVariableName($key); + if (isset($_SESSION[$session_var_name])) { + unset($_SESSION[$session_var_name]); + } + } + + protected function clearAllPersistentData() { + foreach (self::$kSupportedKeys as $key) { + $this->clearPersistentData($key); + } + if ($this->sharedSessionID) { + $this->deleteSharedSessionCookie(); + } + } + + protected function deleteSharedSessionCookie() { + $cookie_name = $this->getSharedSessionCookieName(); + unset($_COOKIE[$cookie_name]); + $base_domain = $this->getBaseDomain(); + setcookie($cookie_name, '', 1, '/', '.'.$base_domain); + } + + protected function getSharedSessionCookieName() { + return self::FBSS_COOKIE_NAME . '_' . $this->getAppId(); + } + + protected function constructSessionVariableName($key) { + $parts = array('fb', $this->getAppId(), $key); + if ($this->sharedSessionID) { + array_unshift($parts, $this->sharedSessionID); + } + return implode('_', $parts); + } +} diff --git a/app/vendor/facebook/php-sdk/src/fb_ca_chain_bundle.crt b/app/vendor/facebook/php-sdk/src/fb_ca_chain_bundle.crt new file mode 100644 index 0000000..969239f --- /dev/null +++ b/app/vendor/facebook/php-sdk/src/fb_ca_chain_bundle.crt @@ -0,0 +1,3920 @@ +## +## ca-bundle.crt -- Bundle of CA Root Certificates +## +## Certificate data from Mozilla as of: Thu Oct 18 19:05:59 2012 +## +## This is a bundle of X.509 certificates of public Certificate Authorities +## (CA). These were automatically extracted from Mozilla's root certificates +## file (certdata.txt). This file can be found in the mozilla source tree: +## http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1 +## +## It contains the certificates in PEM format and therefore +## can be directly used with curl / libcurl / php_curl, or with +## an Apache+mod_ssl webserver for SSL client authentication. +## Just configure this file as the SSLCACertificateFile. +## + +# @(#) $RCSfile: certdata.txt,v $ $Revision: 1.86 $ $Date: 2012/10/18 16:26:52 $ + +GTE CyberTrust Global Root +========================== +-----BEGIN CERTIFICATE----- +MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg +Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG +A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz +MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL +Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0 +IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u +sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql +HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID +AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW +M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF +NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ +-----END CERTIFICATE----- + +Thawte Server CA +================ +-----BEGIN CERTIFICATE----- +MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT +DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs +dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE +AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j +b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV +BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u +c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG +A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0 +ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl +/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7 +1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR +MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J +GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ +GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc= +-----END CERTIFICATE----- + +Thawte Premium Server CA +======================== +-----BEGIN CERTIFICATE----- +MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT +DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs +dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE +AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl +ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT +AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU +VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2 +aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ +cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2 +aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh +Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/ +qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm +SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf +8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t +UCemDaYj+bvLpgcUQg== +-----END CERTIFICATE----- + +Equifax Secure CA +================= +-----BEGIN CERTIFICATE----- +MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE +ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 +MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT +B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB +nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR +fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW +8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG +A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE +CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG +A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS +spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB +Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961 +zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB +BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95 +70+sB3c4 +-----END CERTIFICATE----- + +Digital Signature Trust Co. Global CA 1 +======================================= +-----BEGIN CERTIFICATE----- +MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE +ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy +MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs +IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA +A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE +NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i +o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo +BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 +dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw +IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY +MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM +BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB +ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq +kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4 +RbyhkwS7hp86W0N6w4pl +-----END CERTIFICATE----- + +Digital Signature Trust Co. Global CA 3 +======================================= +-----BEGIN CERTIFICATE----- +MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE +ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy +MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs +IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA +A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD +VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS +xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo +BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 +dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw +IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY +MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM +BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB +AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi +up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1 +mPnHfxsb1gYgAlihw6ID +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority +======================================================= +-----BEGIN CERTIFICATE----- +MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx +FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow +XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz +IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94 +f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol +hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA +TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah +WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf +Tqj/ZA1k +-----END CERTIFICATE----- + +Verisign Class 1 Public Primary Certification Authority - G2 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT +MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz +dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT +MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz +dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd +k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq +WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB +MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM +XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC +lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ +-----END CERTIFICATE----- + +Verisign Class 2 Public Primary Certification Authority - G2 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h +cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp +Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 +c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h +cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp +Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 +c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx +nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC +wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA +ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK +1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk +LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg== +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority - G2 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT +MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz +dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT +MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz +dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO +FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71 +lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB +MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT +1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD +Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9 +-----END CERTIFICATE----- + +GlobalSign Root CA +================== +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx +GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds +b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV +BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD +VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa +DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc +THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb +Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP +c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX +gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF +AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj +Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG +j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH +hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC +X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +GlobalSign Root CA - R2 +======================= +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 +ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp +s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN +S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL +TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C +ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i +YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN +BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp +9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu +01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 +9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- + +ValiCert Class 1 VA +=================== +-----BEGIN CERTIFICATE----- +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp +b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh +bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy +MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 +d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg +UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 +LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi +GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm +DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG +lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX +icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP +Orf1LXLI +-----END CERTIFICATE----- + +ValiCert Class 2 VA +=================== +-----BEGIN CERTIFICATE----- +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp +b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh +bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw +MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 +d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg +UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 +LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC +CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf +ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ +SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV +UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8 +W9ViH0Pd +-----END CERTIFICATE----- + +RSA Root Certificate 1 +====================== +-----BEGIN CERTIFICATE----- +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp +b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh +bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw +MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 +d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg +UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 +LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td +3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H +BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs +3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF +V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r +on+jjBXu +-----END CERTIFICATE----- + +Verisign Class 1 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy +dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E +bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ +rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+ +Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB +FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA +q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N +y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 +ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h +a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc +D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== +-----END CERTIFICATE----- + +Verisign Class 2 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT +MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y +azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug +b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ +BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 +c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y +aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6 +tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7 +C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS +0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs +Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0 +JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf +0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU +sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx +JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j +GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy +dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1 +EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc +cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw +EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj +055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA +ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f +j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0 +xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa +t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- + +Verisign Class 4 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy +dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS +tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM +8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW +Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX +Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA +j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt +mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm +fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd +RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG +UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== +-----END CERTIFICATE----- + +Entrust.net Secure Server CA +============================ +-----BEGIN CERTIFICATE----- +MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV +BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg +cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl +ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG +A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi +eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p +dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ +aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5 +gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw +ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw +CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l +dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF +bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu +dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw +NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow +HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA +BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN +Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9 +n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= +-----END CERTIFICATE----- + +Entrust.net Premium 2048 Secure Server CA +========================================= +-----BEGIN CERTIFICATE----- +MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u +ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp +bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV +BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx +NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 +d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl +MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u +ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL +Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr +hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW +nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi +VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC +AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER +gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B +AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo +oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS +o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z +2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX +OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ== +-----END CERTIFICATE----- + +Baltimore CyberTrust Root +========================= +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE +ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li +ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC +SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs +dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME +uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB +UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C +G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 +XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr +l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI +VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB +BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh +cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 +hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa +Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H +RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +Equifax Secure Global eBusiness CA +================================== +-----BEGIN CERTIFICATE----- +MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT +RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp +bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx +HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds +b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV +PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN +qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn +hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j +BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs +MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN +I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY +NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV +-----END CERTIFICATE----- + +Equifax Secure eBusiness CA 1 +============================= +-----BEGIN CERTIFICATE----- +MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT +RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB +LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE +ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz +IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ +1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a +IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk +MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW +Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF +AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5 +lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+ +KpYrtWKmpj29f5JZzVoqgrI3eQ== +-----END CERTIFICATE----- + +Equifax Secure eBusiness CA 2 +============================= +-----BEGIN CERTIFICATE----- +MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE +ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y +MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT +DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB +nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn +2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5 +BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG +A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx +JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG +A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e +uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB +Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1 +jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia +78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm +V+GRMOrN +-----END CERTIFICATE----- + +AddTrust Low-Value Services Root +================================ +-----BEGIN CERTIFICATE----- +MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU +cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw +CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO +ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6 +54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr +oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1 +Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui +GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w +HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD +AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT +RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw +HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt +ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph +iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY +eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr +mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj +ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= +-----END CERTIFICATE----- + +AddTrust External Root +====================== +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD +VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw +NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU +cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg +Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821 ++iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw +Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo +aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy +2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7 +7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL +VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk +VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB +IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl +j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355 +e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u +G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- + +AddTrust Public Services Root +============================= +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU +cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ +BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l +dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu +nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i +d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG +Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw +HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G +A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux +FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G +A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4 +JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL ++YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao +GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9 +Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H +EufOX1362KqxMy3ZdvJOOjMMK7MtkAY= +-----END CERTIFICATE----- + +AddTrust Qualified Certificates Root +==================================== +-----BEGIN CERTIFICATE----- +MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU +cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx +CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ +IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx +64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3 +KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o +L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR +wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU +MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE +BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y +azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD +ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG +GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X +dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze +RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB +iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE= +-----END CERTIFICATE----- + +Entrust Root Certification Authority +==================================== +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw +b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG +A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 +MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu +MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu +Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v +dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz +A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww +Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 +j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN +rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 +MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH +hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM +Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa +v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS +W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 +tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +RSA Security 2048 v3 +==================== +-----BEGIN CERTIFICATE----- +MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK +ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy +MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb +BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7 +Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb +WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH +KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP ++Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/ +MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E +FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY +v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj +0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj +VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395 +nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA +pKnXwiJPZ9d37CAFYd4= +-----END CERTIFICATE----- + +GeoTrust Global CA +================== +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK +Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw +MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j +LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo +BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet +8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc +T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU +vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk +DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q +zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4 +d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2 +mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p +XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm +Mw== +-----END CERTIFICATE----- + +GeoTrust Global CA 2 +==================== +-----BEGIN CERTIFICATE----- +MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw +MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j +LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/ +NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k +LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA +Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b +HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH +K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7 +srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh +ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL +OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC +x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF +H4z1Ir+rzoPz4iIprn2DQKi6bA== +-----END CERTIFICATE----- + +GeoTrust Universal CA +===================== +-----BEGIN CERTIFICATE----- +MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1 +MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu +Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t +JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e +RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs +7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d +8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V +qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga +Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB +Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu +KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08 +ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0 +XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB +hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc +aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2 +qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL +oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK +xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF +KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2 +DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK +xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU +p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI +P/rmMuGNG2+k5o7Y+SlIis5z/iw= +-----END CERTIFICATE----- + +GeoTrust Universal CA 2 +======================= +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0 +MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg +SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0 +DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17 +j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q +JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a +QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2 +WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP +20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn +ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC +SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG +8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2 ++/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E +BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z +dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ +4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+ +mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq +A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg +Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP +pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d +FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp +gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm +X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS +-----END CERTIFICATE----- + +UTN-USER First-Network Applications +=================================== +-----BEGIN CERTIFICATE----- +MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp +BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5 +WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T +YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho +dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB +cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug +mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj +DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu +Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi +P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE +j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w +HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j +cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G +CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y +IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK +RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp +xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq +DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE +-----END CERTIFICATE----- + +America Online Root Certification Authority 1 +============================================= +-----BEGIN CERTIFICATE----- +MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT +QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG +A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg +T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG +v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z +DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh +sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP +8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z +o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf +GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF +VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft +3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g +Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds +sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 +-----END CERTIFICATE----- + +America Online Root Certification Authority 2 +============================================= +-----BEGIN CERTIFICATE----- +MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT +QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG +A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg +T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en +fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8 +f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO +qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN +RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0 +gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn +6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid +FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6 +Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj +B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op +aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY +T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p ++DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg +JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy +zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO +ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh +1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf +GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff +Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP +cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk= +-----END CERTIFICATE----- + +Visa eCommerce Root +=================== +-----BEGIN CERTIFICATE----- +MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG +EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug +QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2 +WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm +VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv +bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL +F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b +RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0 +TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI +/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs +GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG +MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc +CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW +YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz +zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu +YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt +398znM/jra6O1I7mT1GvFpLgXPYHDw== +-----END CERTIFICATE----- + +Certum Root CA +============== +-----BEGIN CERTIFICATE----- +MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK +ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla +Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u +by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x +wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL +kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ +89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K +Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P +NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq +hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+ +GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg +GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/ +0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS +qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw== +-----END CERTIFICATE----- + +Comodo AAA Services root +======================== +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw +MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl +c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV +BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG +C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs +i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW +Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH +Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK +Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f +BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl +cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz +LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm +7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z +8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C +12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +Comodo Secure Services root +=========================== +-----BEGIN CERTIFICATE----- +MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw +MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu +Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi +BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP +9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc +rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC +oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V +p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E +FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w +gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj +YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm +aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm +4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj +Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL +DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw +pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H +RR3B7Hzs/Sk= +-----END CERTIFICATE----- + +Comodo Trusted Services root +============================ +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw +MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h +bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw +IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7 +3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y +/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6 +juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS +ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud +DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp +ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl +cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw +uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 +pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA +BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l +R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O +9y5Xt5hwXsjEeLBi +-----END CERTIFICATE----- + +QuoVadis Root CA +================ +-----BEGIN CERTIFICATE----- +MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE +ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz +MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp +cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD +EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk +J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL +F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL +YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen +AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w +PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y +ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7 +MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj +YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs +ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh +Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW +Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu +BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw +FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6 +tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo +fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul +LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x +gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi +5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi +5nrQNiOKSnQ2+Q== +-----END CERTIFICATE----- + +QuoVadis Root CA 2 +================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +QuoVadis Root CA 3 +================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +Security Communication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw +8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM +DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX +5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd +DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 +JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g +0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a +mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ +s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ +6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi +FL39vmwLAw== +-----END CERTIFICATE----- + +Sonera Class 1 Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG +U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQw +NjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh +IENsYXNzMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H88 +7dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9 +EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl +0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF645 +2F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW1ebZrgUa +HXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZT +iFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE9 +28Jj2VuXZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxV +yhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2nBBhjrZTOqMR +vq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2UvkVrCqIexVmiUefkl98HVrhq4uz2P +qYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9Z +IRlXvVWa +-----END CERTIFICATE----- + +Sonera Class 2 Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG +U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw +NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh +IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3 +/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT +dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG +f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P +tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH +nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT +XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt +0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI +cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph +Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx +EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH +llpwrN9M +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA +============================= +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE +ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w +HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh +bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt +vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P +jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca +C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth +vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6 +22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV +HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v +dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN +BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR +EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw +MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y +nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR +iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw== +-----END CERTIFICATE----- + +TDC Internet Root CA +==================== +-----BEGIN CERTIFICATE----- +MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE +ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx +NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu +ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j +xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL +znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc +5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6 +otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI +AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM +VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM +MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC +AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe +UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G +CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m +gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+ +2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb +O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU +Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l +-----END CERTIFICATE----- + +TDC OCES Root CA +================ +-----BEGIN CERTIFICATE----- +MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE +ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5 +MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH +nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0 +zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV +iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde +dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO +3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB +5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k +ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm +cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp +Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x +LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM +MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm +aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy +MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647 ++RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6 +NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4 +A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc +A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9 +AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1 +AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw== +-----END CERTIFICATE----- + +UTN DATACorp SGC Root CA +======================== +-----BEGIN CERTIFICATE----- +MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ +BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa +MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w +HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy +dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys +raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo +wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA +9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv +33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud +DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9 +BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD +LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3 +DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft +Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0 +I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx +EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP +DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI +-----END CERTIFICATE----- + +UTN USERFirst Email Root CA +=========================== +-----BEGIN CERTIFICATE----- +MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0 +BgNVBAMTLVVUTi1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05 +OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx +FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx +ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJz +dC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIx +B8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8 +om+rWV6lL8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHG +TPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7Nl +yP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws6wIDAQABo4G5MIG2MAsGA1UdDwQE +AwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNV +HR8EUTBPME2gS6BJhkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll +bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH +AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u7mFVbwQ+zzne +xRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+ +5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarV +NZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZ +w7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ= +-----END CERTIFICATE----- + +UTN USERFirst Hardware Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd +BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx +OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0 +eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz +ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI +wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd +tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8 +i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf +Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw +gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF +lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF +UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF +BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM +//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW +XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2 +lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn +iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67 +nfhmqA== +-----END CERTIFICATE----- + +UTN USERFirst Object Root CA +============================ +-----BEGIN CERTIFICATE----- +MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UE +BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl +IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAb +BgNVBAMTFFVUTi1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAz +NlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx +HjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2Vy +dHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r5596Uj71VR +loTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQ +w5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vu +lBe3/IW+pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7 +RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOBrzCBrDAL +BgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU2u1kdBScFDyr3ZmpvVsoTYs8 +ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmly +c3QtT2JqZWN0LmNybDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw +DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw +NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNO +PmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFE +qmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCG +hU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g= +-----END CERTIFICATE----- + +Camerfirma Chambers of Commerce Root +==================================== +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe +QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i +ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx +NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp +cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn +MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC +AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU +xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH +NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW +DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV +d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud +EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v +cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P +AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh +bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD +VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz +aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi +fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD +L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN +UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n +ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1 +erfutGWaIZDgqtCYvDi1czyL+Nw= +-----END CERTIFICATE----- + +Camerfirma Global Chambersign Root +================================== +-----BEGIN CERTIFICATE----- +MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe +QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i +ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx +NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt +YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg +MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw +ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J +1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O +by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl +6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c +8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/ +BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j +aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B +Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj +aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y +ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh +bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA +PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y +gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ +PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4 +IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes +t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== +-----END CERTIFICATE----- + +NetLock Qualified (Class QA) Root +================================= +-----BEGIN CERTIFICATE----- +MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUxETAPBgNVBAcT +CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV +BAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQDEzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVn +eXpvaSAoQ2xhc3MgUUEpIFRhbnVzaXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0 +bG9jay5odTAeFw0wMzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTER +MA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0 +LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5ldExvY2sgTWlub3NpdGV0 +dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFkbzEeMBwGCSqGSIb3DQEJARYP +aW5mb0BuZXRsb2NrLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRV +CacbvWy5FPSKAtt2/GoqeKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e +8ia6AFQer7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO53Lhb +m+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWdvLrqOU+L73Sa58XQ +0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0lmT+1fMptsK6ZmfoIYOcZwvK9UdPM +0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4ICwDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV +HQ8BAf8EBAMCAQYwggJ1BglghkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2 +YW55IGEgTmV0TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh +biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQgZWxla3Ryb25p +a3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywgdmFsYW1pbnQgZWxmb2dhZGFz +YW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwg +YXogQWx0YWxhbm9zIFN6ZXJ6b2Rlc2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kg +ZWxqYXJhcyBtZWd0ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczov +L3d3dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0BuZXRsb2Nr +Lm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0 +aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMg +YXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0 +IGluZm9AbmV0bG9jay5uZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3 +DQEBBQUAA4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQMznN +wNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+NFAwLvt/MpqNPfMg +W/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCRVCHnpgu0mfVRQdzNo0ci2ccBgcTc +R08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR +5qq5aKrN9p2QdRLqOBrKROi3macqaJVmlaut74nLYKkGEsaUR+ko +-----END CERTIFICATE----- + +NetLock Notary (Class A) Root +============================= +-----BEGIN CERTIFICATE----- +MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI +EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 +dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j +ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX +DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH +EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD +VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz +cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM +D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ +z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC +/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7 +tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6 +4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG +A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC +Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv +bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu +IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn +LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0 +ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz +IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh +IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu +b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh +bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg +Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp +bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5 +ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP +ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB +CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr +KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM +8CgHrTwXZoi1/baI +-----END CERTIFICATE----- + +NetLock Business (Class B) Root +=============================== +-----BEGIN CERTIFICATE----- +MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT +CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV +BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg +VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD +VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv +bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg +VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB +iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S +o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr +1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV +HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ +RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh +dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0 +ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv +c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg +YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh +c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz +Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA +bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl +IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2 +YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj +cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM +43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR +stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI +-----END CERTIFICATE----- + +NetLock Express (Class C) Root +============================== +-----BEGIN CERTIFICATE----- +MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT +CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV +BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD +KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ +BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 +dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j +ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB +jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z +W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63 +euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw +DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN +RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn +YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB +IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i +aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0 +ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs +ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo +dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y +emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k +IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ +UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg +YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2 +xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW +gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A== +-----END CERTIFICATE----- + +XRamp Global CA Root +==================== +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE +BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj +dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx +HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg +U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu +IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx +foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE +zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs +AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry +xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap +oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC +AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc +/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n +nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz +8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +Go Daddy Class 2 CA +=================== +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY +VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG +A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g +RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD +ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv +2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 +qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j +YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY +vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O +BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o +atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu +MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG +A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim +PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt +I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI +Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b +vZ8= +-----END CERTIFICATE----- + +Starfield Class 2 CA +==================== +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc +U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo +MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG +A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG +SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY +bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ +JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm +epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN +F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF +MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f +hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo +bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g +QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs +afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM +PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD +KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 +QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +StartCom Certification Authority +================================ +-----BEGIN CERTIFICATE----- +MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu +ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 +NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk +LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg +U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y +o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ +Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d +eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt +2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z +6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ +osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ +untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc +UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT +37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE +FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0 +Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj +YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH +AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw +Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg +U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5 +LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh +cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT +dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC +AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh +3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm +vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk +fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3 +fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ +EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq +yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl +1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/ +lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro +g14= +-----END CERTIFICATE----- + +Taiwan GRCA +=========== +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG +EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X +DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv +dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN +w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5 +BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O +1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO +htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov +J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7 +Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t +B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB +O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8 +lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV +HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2 +09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ +TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj +Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2 +Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU +D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz +DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk +Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk +7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ +CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy ++fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS +-----END CERTIFICATE----- + +Firmaprofesional Root CA +======================== +-----BEGIN CERTIFICATE----- +MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT +GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp +Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA +ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL +MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT +OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2 +ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V +j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH +lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf +3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8 +NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww +KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG +AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD +ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq +u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf +wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm +7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG +VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA= +-----END CERTIFICATE----- + +Wells Fargo Root CA +=================== +-----BEGIN CERTIFICATE----- +MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV +BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN +MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl +bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv +MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX +x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3 +E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5 +OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j +sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj +YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF +BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD +ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv +m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R +OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx +x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023 +tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s= +-----END CERTIFICATE----- + +Swisscom Root CA 1 +================== +-----BEGIN CERTIFICATE----- +MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG +EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy +dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4 +MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln +aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC +IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM +MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF +NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe +AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC +b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn +7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN +cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp +WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5 +haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY +MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw +HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j +BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9 +MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn +jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ +MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H +VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl +vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl +OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3 +1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq +nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy +x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW +NY6E0F/6MBr1mmz0DlP5OlvRHA== +-----END CERTIFICATE----- + +DigiCert Assured ID Root CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx +MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO +9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy +UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW +/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy +oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf +GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF +66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq +hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc +EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn +SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i +8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +DigiCert Global Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw +MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn +TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 +BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H +4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y +7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB +o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm +8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF +BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr +EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt +tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 +UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +DigiCert High Assurance EV Root CA +================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw +KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw +MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ +MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu +Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t +Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS +OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 +MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ +NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe +h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB +Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY +JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ +V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp +myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK +mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K +-----END CERTIFICATE----- + +Certplus Class 2 Primary CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE +BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN +OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy +dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR +5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ +Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO +YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e +e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME +CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ +YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t +L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD +P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R +TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+ +7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW +//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 +l7+ijrRU +-----END CERTIFICATE----- + +DST Root CA X3 +============== +-----BEGIN CERTIFICATE----- +MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK +ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X +DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1 +cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT +rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9 +UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy +xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d +utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ +MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug +dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE +GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw +RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS +fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ +-----END CERTIFICATE----- + +DST ACES CA X6 +============== +-----BEGIN CERTIFICATE----- +MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT +MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha +MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE +CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI +DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa +pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow +GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy +MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu +Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy +dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU +CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2 +5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t +Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq +nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs +vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3 +oKfN5XozNmr6mis= +-----END CERTIFICATE----- + +TURKTRUST Certificate Services Provider Root 1 +============================================== +-----BEGIN CERTIFICATE----- +MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP +MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0 +acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx +MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg +U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB +TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC +aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX +yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i +Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ +8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4 +W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME +BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46 +sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE +q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy +B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY +nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H +-----END CERTIFICATE----- + +TURKTRUST Certificate Services Provider Root 2 +============================================== +-----BEGIN CERTIFICATE----- +MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP +MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg +QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN +MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr +dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G +A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls +acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe +LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI +x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g +QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr +5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB +AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G +A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt +Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4 +Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+ +hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P +9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5 +UrbnBEI= +-----END CERTIFICATE----- + +SwissSign Platinum CA - G2 +========================== +-----BEGIN CERTIFICATE----- +MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCQ0gxFTAT +BgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWduIFBsYXRpbnVtIENBIC0gRzIw +HhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAwWjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMM +U3dpc3NTaWduIEFHMSMwIQYDVQQDExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu +669yIIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2HtnIuJpX+UF +eNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+6ixuEFGSzH7VozPY1kne +WCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5objM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIo +j5+saCB9bzuohTEJfwvH6GXp43gOCWcwizSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/6 +8++QHkwFix7qepF6w9fl+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34T +aNhxKFrYzt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaPpZjy +domyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtFKwH3HBqi7Ri6Cr2D ++m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuWae5ogObnmLo2t/5u7Su9IPhlGdpV +CX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMBAAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCv +zAeHFUdvOMW0ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW +IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUAA4ICAQAIhab1 +Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0uMoI3LQwnkAHFmtllXcBrqS3 +NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4 +U99REJNi54Av4tHgvI42Rncz7Lj7jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8 +KV2LwUvJ4ooTHbG/u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl +9x8DYSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1puEa+S1B +aYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXaicYwu+uPyyIIoK6q8QNs +OktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbGDI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSY +Mdp08YSTcU1f+2BY0fvEwW2JorsgH51xkcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAci +IfNAChs0B0QTwoRqjt8ZWr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g== +-----END CERTIFICATE----- + +SwissSign Gold CA - G2 +====================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +SwissSign Silver CA - G2 +======================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority +======================================== +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx +CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ +cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN +b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9 +nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge +RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt +tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI +hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K +Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN +NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa +Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG +1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= +-----END CERTIFICATE----- + +thawte Primary Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE +BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 +aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3 +MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg +SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv +KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT +FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs +oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ +1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc +q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K +aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p +afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF +AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE +uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX +xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89 +jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH +z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA== +-----END CERTIFICATE----- + +VeriSign Class 3 Public Primary Certification Authority - G5 +============================================================ +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO +ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk +IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln +biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh +dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt +YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz +j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD +Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/ +Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r +fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/ +BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv +Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG +SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+ +X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE +KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC +Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE +ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----END CERTIFICATE----- + +SecureTrust CA +============== +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy +dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe +BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX +OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t +DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH +GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b +01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH +ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj +aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu +SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf +mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ +nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +Secure Global CA +================ +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH +bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg +MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg +Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx +YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ +bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g +8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV +HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi +0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn +oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA +MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ +OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn +CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 +3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +COMODO Certification Authority +============================== +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE +BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG +A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb +MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD +T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH ++7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww +xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV +4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA +1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI +rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k +b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC +AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP +OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc +IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN ++8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== +-----END CERTIFICATE----- + +Network Solutions Certificate Authority +======================================= +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG +EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr +IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx +MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx +jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT +aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT +crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc +/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB +AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv +bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA +A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q +4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ +GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD +ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- + +WellsSecure Public Root Certificate Authority +============================================= +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM +F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw +NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN +MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl +bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD +VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1 +iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13 +i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8 +bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB +K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB +AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu +cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm +lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB +i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww +GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI +K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0 +bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj +qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es +E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ +tylv2G0xffX8oRAHh84vWdw+WNs= +-----END CERTIFICATE----- + +COMODO ECC Certification Authority +================================== +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC +R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE +ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix +GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo +b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X +4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni +wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG +FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA +U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +IGC/A +===== +-----BEGIN CERTIFICATE----- +MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD +VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE +Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy +MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI +EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT +STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2 +TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW +So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy +HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd +frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ +tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB +egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC +iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK +q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q +MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg +Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI +lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF +0mBWWg== +-----END CERTIFICATE----- + +Security Communication EV RootCA1 +================================= +-----BEGIN CERTIFICATE----- +MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE +BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl +Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO +/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX +WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z +ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4 +bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK +9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG +SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm +iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG +Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW +mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW +T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GA CA +=============================== +-----BEGIN CERTIFICATE----- +MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE +BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG +A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH +bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD +VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw +IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5 +IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9 +Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg +Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD +d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ +/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R +LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm +MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4 ++vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa +hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY +okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0= +-----END CERTIFICATE----- + +S-TRUST Authentication and Encryption Root CA 2005 PN +===================================================== +-----BEGIN CERTIFICATE----- +MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE +BhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcpMRIwEAYDVQQHEwlTdHV0dGdh +cnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fzc2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVT +LVRSVVNUIEF1dGhlbnRpY2F0aW9uIGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0w +NTA2MjIwMDAwMDBaFw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFk +ZW4tV3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMgRGV1dHNj +aGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJVU1QgQXV0aGVudGljYXRp +b24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBOMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob +4QSwI7+Vio5bG0F/WsPoTUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXL +g3KSwlOyggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1Xgqf +eN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteFhy+S8dF2g08LOlk3 +KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm7QIDAQABo4GSMIGPMBIGA1UdEwEB +/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJv +bmxpbmUxLTIwNDgtNTAdBgNVHQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAU +D8oeXHngovMpttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD +pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFoLtU96G7m1R08 +P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersFiXOMy6ZNwPv2AtawB6MDwidA +nwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0yh9WUUpY6RsZxlj33mA6ykaqP2vROJAA5Veit +F7nTNCtKqUDMFypVZUF0Qn71wK/Ik63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8b +Hz2eBIPdltkdOpQ= +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA +========================= +-----BEGIN CERTIFICATE----- +MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE +BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL +EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0 +MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz +dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT +GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG +d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N +oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc +QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ +PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb +MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG +IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD +VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3 +LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A +dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn +AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA +4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg +AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA +egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6 +Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO +PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv +c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h +cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw +IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT +WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV +MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER +MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp +Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal +HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT +nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE +aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a +86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK +yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB +S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU= +-----END CERTIFICATE----- + +Certigna +======== +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw +EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 +MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI +Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q +XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH +GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p +ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg +DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf +Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ +tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ +BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J +SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA +hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ +ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu +PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY +1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +AC Ra\xC3\xADz Certic\xC3\xA1mara S.A. +====================================== +-----BEGIN CERTIFICATE----- +MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT +AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg +LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w +HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+ +U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh +IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN +yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU +2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3 +4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP +2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm +8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf +HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa +Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK +5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b +czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE +AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g +ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF +BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug +cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf +AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX +EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v +/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3 +MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4 +3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk +eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f +/RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h +RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU +Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ== +-----END CERTIFICATE----- + +TC TrustCenter Class 2 CA II +============================ +-----BEGIN CERTIFICATE----- +MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC +REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy +IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw +MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1 +c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE +AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw +IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2 +xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ +Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u +SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB +7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90 +Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU +cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i +SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u +TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G +dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ +KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj +TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP +JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk +vQ== +-----END CERTIFICATE----- + +TC TrustCenter Class 3 CA II +============================ +-----BEGIN CERTIFICATE----- +MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC +REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy +IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw +MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1 +c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE +AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W +yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo +6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ +uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk +2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB +7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90 +Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU +cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i +SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u +TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE +O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8 +yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9 +IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal +092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc +5A== +-----END CERTIFICATE----- + +TC TrustCenter Universal CA I +============================= +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC +REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy +IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN +MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg +VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw +JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC +qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv +xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw +ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O +gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j +BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG +1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy +vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3 +ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT +ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a +7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY +-----END CERTIFICATE----- + +Deutsche Telekom Root CA 2 +========================== +-----BEGIN CERTIFICATE----- +MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT +RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG +A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5 +MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G +A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS +b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5 +bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI +KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY +AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK +Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV +jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV +HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr +E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy +zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8 +rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G +dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU +Cm26OWMohpLzGITY+9HPBVZkVw== +-----END CERTIFICATE----- + +ComSign CA +========== +-----BEGIN CERTIFICATE----- +MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0MRMwEQYDVQQD +EwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTMy +MThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMTCkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNp +Z24xCzAJBgNVBAYTAklMMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49q +ROR+WCf4C9DklBKK8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTy +P2Q298CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb2CEJKHxN +GGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxCejVb7Us6eva1jsz/D3zk +YDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7KpiXd3DTKaCQeQzC6zJMw9kglcq/QytNuEM +rkvF7zuZ2SOzW120V+x0cAwqTwIDAQABo4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAy +oDCgLoYsaHR0cDovL2ZlZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0P +AQH/BAQDAgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRLAZs+ +VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWdfoPPbrxHbvUanlR2 +QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0McXS6hMTXcpuEfDhOZAYnKuGntewI +mbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb +/627HOkthIDYIb6FUtnUdLlphbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VG +zT2ouvDzuFYkRes3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U +AGegcQCCSA== +-----END CERTIFICATE----- + +ComSign Secured CA +================== +-----BEGIN CERTIFICATE----- +MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE +AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w +NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD +QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs +49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH +7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB +kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1 +9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw +AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t +U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA +j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC +AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a +BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp +FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP +51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz +OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw== +-----END CERTIFICATE----- + +Cybertrust Global Root +====================== +-----BEGIN CERTIFICATE----- +MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li +ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 +MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD +ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA ++Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW +0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL +AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin +89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT +8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 +MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G +A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO +lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi +5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 +hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T +X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW +WL1WMRJOEcgh4LMRkWXbtKaIOM5V +-----END CERTIFICATE----- + +ePKI Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG +EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg +Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx +MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq +MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs +IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi +lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv +qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX +12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O +WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ +ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao +lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ +vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi +Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi +MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 +1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq +KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV +xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP +NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r +GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE +xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx +gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy +sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD +BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3 +============================================================================================================================= +-----BEGIN CERTIFICATE----- +MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH +DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q +aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry +b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV +BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg +S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4 +MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl +IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF +n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl +IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft +dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl +cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO +Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1 +xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR +6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL +hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd +BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4 +N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT +y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh +LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M +dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI= +-----END CERTIFICATE----- + +Buypass Class 2 CA 1 +==================== +-----BEGIN CERTIFICATE----- +MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2 +MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh +c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M +cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83 +0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4 +0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R +uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P +AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV +1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt +7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2 +fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w +wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho +-----END CERTIFICATE----- + +Buypass Class 3 CA 1 +==================== +-----BEGIN CERTIFICATE----- +MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1 +MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh +c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx +ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0 +n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia +AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c +1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P +AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7 +pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA +EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5 +htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj +el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915 +-----END CERTIFICATE----- + +EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 +========================================================================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +certSIGN ROOT CA +================ +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD +VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa +Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE +CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I +JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH +rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 +ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD +0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 +AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B +Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB +AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 +SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 +x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt +vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz +TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +CNNIC ROOT +========== +-----BEGIN CERTIFICATE----- +MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE +ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw +OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD +o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz +VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT +VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or +czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK +y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC +wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S +lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5 +Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM +O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8 +BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2 +G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m +mxE= +-----END CERTIFICATE----- + +ApplicationCA - Japanese Government +=================================== +-----BEGIN CERTIFICATE----- +MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT +SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw +MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl +cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4 +fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN +wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE +jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu +nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU +WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV +BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD +vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs +o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g +/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD +io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW +dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL +rosot4LKGAfmt1t06SAZf7IbiVQ= +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority - G3 +============================================= +-----BEGIN CERTIFICATE----- +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE +BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0 +IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz +NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo +YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT +LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j +K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE +c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C +IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu +dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr +2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9 +cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE +Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s +t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt +-----END CERTIFICATE----- + +thawte Primary Root CA - G2 +=========================== +-----BEGIN CERTIFICATE----- +MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC +VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu +IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg +Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV +MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG +b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt +IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS +LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5 +8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU +mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN +G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K +rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== +-----END CERTIFICATE----- + +thawte Primary Root CA - G3 +=========================== +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE +BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 +aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w +ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh +d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD +VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG +A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At +P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC ++BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY +7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW +vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ +KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK +A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu +t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC +8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm +er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A= +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority - G2 +============================================= +-----BEGIN CERTIFICATE----- +MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu +Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1 +OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg +MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl +b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG +BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc +KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+ +EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m +ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2 +npaqBA+K +-----END CERTIFICATE----- + +VeriSign Universal Root Certification Authority +=============================================== +-----BEGIN CERTIFICATE----- +MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO +ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk +IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u +IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj +1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP +MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72 +9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I +AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR +tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G +CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O +a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud +DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3 +Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx +Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx +P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P +wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4 +mJO37M2CYfE45k+XmCpajQ== +-----END CERTIFICATE----- + +VeriSign Class 3 Public Primary Certification Authority - G4 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC +VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz +ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU +cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8 +Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz +rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw +HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u +Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD +A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx +AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== +-----END CERTIFICATE----- + +NetLock Arany (Class Gold) Főtanúsítvány +============================================ +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G +A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 +dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB +cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx +MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO +ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 +c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu +0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw +/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk +H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw +fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 +neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW +qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta +YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna +NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu +dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA - G2 +================================== +-----BEGIN CERTIFICATE----- +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 +66+KAQ== +-----END CERTIFICATE----- + +CA Disig +======== +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK +QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw +MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz +bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm +GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD +Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo +hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt +ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w +gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P +AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz +aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff +ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa +BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t +WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3 +mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/ +CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K +ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA +4Z7CRneC9VkGjCFMhwnN5ag= +-----END CERTIFICATE----- + +Juur-SK +======= +-----BEGIN CERTIFICATE----- +MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA +c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw +DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG +SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy +aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf +TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC ++Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw +UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa +Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF +MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD +HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh +AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA +cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr +AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw +cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE +FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G +A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo +ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL +abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678 +IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh +Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2 +yyqcjg== +-----END CERTIFICATE----- + +Hongkong Post Root CA 1 +======================= +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT +DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx +NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n +IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 +ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr +auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh +qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY +V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV +HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i +h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio +l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei +IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps +T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT +c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== +-----END CERTIFICATE----- + +SecureSign RootCA11 +=================== +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi +SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS +b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw +KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 +cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL +TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO +wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq +g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP +O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA +bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX +t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh +OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r +bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ +Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 +y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 +lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- + +ACEDICOM Root +============= +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +Verisign Class 1 Public Primary Certification Authority +======================================================= +-----BEGIN CERTIFICATE----- +MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx +FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow +XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAx +IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0fzGVuDLDQ +VoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHiTkVWaR94AoDa3EeRKbs2 +yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFgVKTk8d6Pa +XCUDfGD67gmZPCcQcMgMCeazh88K4hiWNWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n +0a3hUKw8fGJLj7qE1xIVGx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZ +RjXZ+Hxb +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority +======================================================= +-----BEGIN CERTIFICATE----- +MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx +FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow +XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz +IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA +A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94 +f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol +hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky +CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX +bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/ +D/xwzoiQ +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER +MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv +c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE +BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt +U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA +fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG +0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA +pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm +1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC +AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf +QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE +FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o +lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX +I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 +yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi +LXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi +=================================================== +-----BEGIN CERTIFICATE----- +MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG +EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz +ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3 +MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0 +cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u +aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY +8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y +jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI +JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk +9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD +AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG +SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d +F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq +D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4 +Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq +fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX +-----END CERTIFICATE----- + +GlobalSign Root CA - R3 +======================= +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt +iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ +0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 +rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl +OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 +xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 +lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 +EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E +bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 +YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r +kpeDMdmztcpHWD9f +-----END CERTIFICATE----- + +TC TrustCenter Universal CA III +=============================== +-----BEGIN CERTIFICATE----- +MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMC +REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy +IFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAe +Fw0wOTA5MDkwODE1MjdaFw0yOTEyMzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNU +QyBUcnVzdENlbnRlciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0Ex +KDAmBgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF5+cvAqBNLaT6hdqbJYUt +QCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYvDIRlzg9uwliT6CwLOunBjvvya8o84pxO +juT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8vzArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+Eut +CHnNaYlAJ/Uqwa1D7KRTyGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1 +M4BDj5yjdipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBhMB8G +A1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI4jANBgkqhkiG9w0BAQUFAAOCAQEA +g8ev6n9NCjw5sWi+e22JLumzCecYV42FmhfzdkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+ +KGwWaODIl0YgoGhnYIg5IFHYaAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhK +BgePxLcHsU0GDeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV +CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPHLQNjO9Po5KIq +woIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg== +-----END CERTIFICATE----- + +Autoridad de Certificacion Firmaprofesional CIF A62634068 +========================================================= +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA +BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 +MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw +QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB +NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD +Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P +B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY +7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH +ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI +plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX +MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX +LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK +bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU +vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud +EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH +DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA +bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx +ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx +51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk +R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP +T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f +Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl +osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR +crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR +saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD +KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi +6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- + +Izenpe.com +========== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +Chambers of Commerce Root - 2008 +================================ +-----BEGIN CERTIFICATE----- +MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD +MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv +bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu +QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy +Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl +ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF +EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl +cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA +XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj +h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/ +ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk +NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g +D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331 +lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ +0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj +ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2 +EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI +G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ +BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh +bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh +bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC +CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH +AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1 +wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH +3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU +RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6 +M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1 +YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF +9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK +zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG +nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg +OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ +-----END CERTIFICATE----- + +Global Chambersign Root - 2008 +============================== +-----BEGIN CERTIFICATE----- +MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD +MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv +bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu +QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx +NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg +Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ +QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD +aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf +VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf +XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0 +ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB +/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA +TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M +H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe +Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF +HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh +wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB +AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT +BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE +BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm +aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm +aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp +1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0 +dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG +/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6 +ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s +dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg +9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH +foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du +qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr +P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq +c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z +09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B +-----END CERTIFICATE----- + +Go Daddy Root Certificate Authority - G2 +======================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu +MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G +A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq +9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD ++qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd +fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl +NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 +BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac +vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r +5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV +N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 +-----END CERTIFICATE----- + +Starfield Root Certificate Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 +eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw +DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg +VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB +dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv +W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs +bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk +N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf +ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU +JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol +TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx +4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw +F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ +c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +Starfield Services Root Certificate Authority - G2 +================================================== +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl +IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT +dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 +h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa +hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP +LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB +rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG +SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP +E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy +xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza +YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 +-----END CERTIFICATE----- + +AffirmTrust Commercial +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw +MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb +DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV +C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 +BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww +MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV +HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG +hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi +qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv +0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh +sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +AffirmTrust Networking +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw +MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE +Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI +dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 +/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb +h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV +HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu +UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 +12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 +WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 +/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +AffirmTrust Premium +=================== +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy +OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy +dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn +BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV +5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs ++7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd +GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R +p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI +S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 +6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 +/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo ++Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv +MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC +6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S +L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK ++4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV +BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg +IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 +g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb +zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== +-----END CERTIFICATE----- + +AffirmTrust Premium ECC +======================= +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV +BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx +MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U +cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ +N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW +BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK +BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X +57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM +eQ== +-----END CERTIFICATE----- + +Certum Trusted Network CA +========================= +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK +ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy +MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU +ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC +l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J +J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 +fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 +cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB +Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw +DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj +jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 +mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj +Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +Certinomis - Autorité Racine +============================= +-----BEGIN CERTIFICATE----- +MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK +Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg +LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG +A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw +JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa +wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly +Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw +2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N +jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q +c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC +lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb +xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g +530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna +4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ +KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x +WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva +R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40 +nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B +CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv +JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE +qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b +WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE +wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/ +vgt2Fl43N+bYdJeimUV5 +-----END CERTIFICATE----- + +Root CA Generalitat Valenciana +============================== +-----BEGIN CERTIFICATE----- +MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE +ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290 +IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3 +WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE +CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2 +F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B +ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ +D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte +JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB +AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n +dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB +ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl +AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA +YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy +AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA +aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt +AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA +YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu +AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA +OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0 +dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV +BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G +A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S +b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh +TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz +Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63 +NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH +iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt ++GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM= +-----END CERTIFICATE----- + +A-Trust-nQual-03 +================ +-----BEGIN CERTIFICATE----- +MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE +Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy +a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R +dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw +RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0 +ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1 +c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA +zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n +yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE +SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4 +iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V +cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV +eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40 +ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr +sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd +JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS +mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6 +ahq97BvIxYSazQ== +-----END CERTIFICATE----- + +TWCA Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ +VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG +EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB +IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx +QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC +oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP +4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r +y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG +9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC +mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW +QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY +T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny +Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +Security Communication RootCA2 +============================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC +SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy +aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ ++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R +3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV +spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K +EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 +QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB +CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj +u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk +3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q +tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 +mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +EC-ACC +====== +-----BEGIN CERTIFICATE----- +MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE +BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w +ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD +VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE +CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT +BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 +MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt +SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl +Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh +cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK +w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT +ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 +HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a +E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw +0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD +VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 +Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l +dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ +lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa +Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe +l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 +E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D +5EI= +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2011 +======================================================= +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT +O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y +aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT +AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo +IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI +1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa +71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u +8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH +3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ +MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 +MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu +b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt +XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD +/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N +7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- + +Actalis Authentication Root CA +============================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +Trustis FPS Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG +EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290 +IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV +BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ +RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk +H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa +cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt +o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA +AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd +BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c +GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC +yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P +8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV +l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl +iB6XzCGcKQENZetX2fNXlrtIzYE= +-----END CERTIFICATE----- + +StartCom Certification Authority +================================ +-----BEGIN CERTIFICATE----- +MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu +ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 +NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk +LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg +U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y +o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ +Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d +eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt +2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z +6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ +osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ +untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc +UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT +37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ +Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0 +dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu +c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv +bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0 +aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t +L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG +cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5 +fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm +N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN +Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T +tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX +e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA +2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs +HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE +JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib +D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8= +-----END CERTIFICATE----- + +StartCom Certification Authority G2 +=================================== +-----BEGIN CERTIFICATE----- +MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE +ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O +o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG +4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi +Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul +Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs +O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H +vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L +nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS +FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa +z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ +KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K +2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk +J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+ +JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG +/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc +nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld +blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc +l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm +7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm +obp573PYtlNXLfbQ4ddI +-----END CERTIFICATE----- + +Buypass Class 2 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X +DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 +g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn +9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b +/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU +CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff +awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI +zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn +Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX +Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs +M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI +osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S +aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd +DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD +LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 +oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC +wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS +CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN +rJgWVqA= +-----END CERTIFICATE----- + +Buypass Class 3 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X +DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH +sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR +5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh +7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ +ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH +2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV +/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ +RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA +Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq +j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G +uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG +Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 +ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 +KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz +6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug +UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe +eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi +Cp/HuZc= +-----END CERTIFICATE----- + +TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı +====================================================== +-----BEGIN CERTIFICATE----- +MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP +MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg +QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X +DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl +a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN +BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp +bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N +YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv +KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya +KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT +rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC +AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s +Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I +aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO +Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb +BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK +poRq0Tl9 +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 3 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx +MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK +9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU +NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF +iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W +0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr +AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb +fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT +ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h +P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== +-----END CERTIFICATE----- + +EE Certification Centre Root CA +=============================== +-----BEGIN CERTIFICATE----- +MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG +EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy +dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw +MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB +UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy +ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM +TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2 +rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw +93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN +P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ +MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF +BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj +xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM +lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u +uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU +3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM +dcGWxZ0= +-----END CERTIFICATE----- diff --git a/app/vendor/facebook/php-sdk/tests/bootstrap.php b/app/vendor/facebook/php-sdk/tests/bootstrap.php new file mode 100644 index 0000000..e32b9f8 --- /dev/null +++ b/app/vendor/facebook/php-sdk/tests/bootstrap.php @@ -0,0 +1,5 @@ + self::APP_ID, + 'secret' => self::SECRET, + )); + return $facebook->publicMakeSignedRequest( + array( + 'user_id' => $id, + 'oauth_token' => $oauth_token + ) + ); + } + + private static function kNonTosedSignedRequest() { + $facebook = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + return $facebook->publicMakeSignedRequest(array()); + } + + private static function kSignedRequestWithEmptyValue() { + return ''; + } + + private static function kSignedRequestWithBogusSignature() { + $facebook = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => 'bogus', + )); + return $facebook->publicMakeSignedRequest( + array( + 'algorithm' => 'HMAC-SHA256', + ) + ); + } + + private static function kSignedRequestWithWrongAlgo() { + $facebook = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $data['algorithm'] = 'foo'; + $json = json_encode($data); + $b64 = $facebook->publicBase64UrlEncode($json); + $raw_sig = hash_hmac('sha256', $b64, self::SECRET, $raw = true); + $sig = $facebook->publicBase64UrlEncode($raw_sig); + return $sig.'.'.$b64; + } + + public function testConstructor() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $this->assertEquals($facebook->getAppId(), self::APP_ID, + 'Expect the App ID to be set.'); + $this->assertEquals($facebook->getAppSecret(), self::SECRET, + 'Expect the API secret to be set.'); + } + + public function testConstructorWithFileUpload() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'fileUpload' => true, + )); + $this->assertEquals($facebook->getAppId(), self::APP_ID, + 'Expect the App ID to be set.'); + $this->assertEquals($facebook->getAppSecret(), self::SECRET, + 'Expect the API secret to be set.'); + $this->assertTrue($facebook->getFileUploadSupport(), + 'Expect file upload support to be on.'); + // alias (depricated) for getFileUploadSupport -- test until removed + $this->assertTrue($facebook->useFileUploadSupport(), + 'Expect file upload support to be on.'); + } + + public function testSetAppId() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $facebook->setAppId('dummy'); + $this->assertEquals($facebook->getAppId(), 'dummy', + 'Expect the App ID to be dummy.'); + } + + public function testSetAPISecret() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $facebook->setApiSecret('dummy'); + $this->assertEquals($facebook->getApiSecret(), 'dummy', + 'Expect the API secret to be dummy.'); + } + + public function testSetAPPSecret() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $facebook->setAppSecret('dummy'); + $this->assertEquals($facebook->getAppSecret(), 'dummy', + 'Expect the API secret to be dummy.'); + } + + public function testSetAccessToken() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $facebook->setAccessToken('saltydog'); + $this->assertEquals($facebook->getAccessToken(), 'saltydog', + 'Expect installed access token to remain \'saltydog\''); + } + + public function testSetFileUploadSupport() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $this->assertFalse($facebook->getFileUploadSupport(), + 'Expect file upload support to be off.'); + // alias for getFileUploadSupport (depricated), testing until removed + $this->assertFalse($facebook->useFileUploadSupport(), + 'Expect file upload support to be off.'); + $facebook->setFileUploadSupport(true); + $this->assertTrue($facebook->getFileUploadSupport(), + 'Expect file upload support to be on.'); + // alias for getFileUploadSupport (depricated), testing until removed + $this->assertTrue($facebook->useFileUploadSupport(), + 'Expect file upload support to be on.'); + } + + public function testGetCurrentURL() { + $facebook = new FBGetCurrentURLFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + // fake the HPHP $_SERVER globals + $_SERVER['HTTP_HOST'] = 'www.test.com'; + $_SERVER['REQUEST_URI'] = '/unit-tests.php?one=one&two=two&three=three'; + $current_url = $facebook->publicGetCurrentUrl(); + $this->assertEquals( + 'http://www.test.com/unit-tests.php?one=one&two=two&three=three', + $current_url, + 'getCurrentUrl function is changing the current URL'); + + // ensure structure of valueless GET params is retained (sometimes + // an = sign was present, and sometimes it was not) + // first test when equal signs are present + $_SERVER['HTTP_HOST'] = 'www.test.com'; + $_SERVER['REQUEST_URI'] = '/unit-tests.php?one=&two=&three='; + $current_url = $facebook->publicGetCurrentUrl(); + $this->assertEquals( + 'http://www.test.com/unit-tests.php?one=&two=&three=', + $current_url, + 'getCurrentUrl function is changing the current URL'); + + // now confirm that + $_SERVER['HTTP_HOST'] = 'www.test.com'; + $_SERVER['REQUEST_URI'] = '/unit-tests.php?one&two&three'; + $current_url = $facebook->publicGetCurrentUrl(); + $this->assertEquals( + 'http://www.test.com/unit-tests.php?one&two&three', + $current_url, + 'getCurrentUrl function is changing the current URL'); + } + + public function testGetLoginURL() { + $facebook = new Facebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + // fake the HPHP $_SERVER globals + $_SERVER['HTTP_HOST'] = 'www.test.com'; + $_SERVER['REQUEST_URI'] = '/unit-tests.php'; + $login_url = parse_url($facebook->getLoginUrl()); + $this->assertEquals($login_url['scheme'], 'https'); + $this->assertEquals($login_url['host'], 'www.facebook.com'); + $this->assertEquals($login_url['path'], '/dialog/oauth'); + $expected_login_params = + array('client_id' => self::APP_ID, + 'redirect_uri' => 'http://www.test.com/unit-tests.php'); + + $query_map = array(); + parse_str($login_url['query'], $query_map); + $this->assertIsSubset($expected_login_params, $query_map); + // we don't know what the state is, but we know it's an md5 and should + // be 32 characters long. + $this->assertEquals(strlen($query_map['state']), $num_characters = 32); + } + + public function testGetLoginURLWithExtraParams() { + $facebook = new Facebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + // fake the HPHP $_SERVER globals + $_SERVER['HTTP_HOST'] = 'www.test.com'; + $_SERVER['REQUEST_URI'] = '/unit-tests.php'; + $extra_params = array('scope' => 'email, sms', + 'nonsense' => 'nonsense'); + $login_url = parse_url($facebook->getLoginUrl($extra_params)); + $this->assertEquals($login_url['scheme'], 'https'); + $this->assertEquals($login_url['host'], 'www.facebook.com'); + $this->assertEquals($login_url['path'], '/dialog/oauth'); + $expected_login_params = + array_merge( + array('client_id' => self::APP_ID, + 'redirect_uri' => 'http://www.test.com/unit-tests.php'), + $extra_params); + $query_map = array(); + parse_str($login_url['query'], $query_map); + $this->assertIsSubset($expected_login_params, $query_map); + // we don't know what the state is, but we know it's an md5 and should + // be 32 characters long. + $this->assertEquals(strlen($query_map['state']), $num_characters = 32); + } + + public function testGetLoginURLWithScopeParamsAsArray() { + $facebook = new Facebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + // fake the HPHP $_SERVER globals + $_SERVER['HTTP_HOST'] = 'www.test.com'; + $_SERVER['REQUEST_URI'] = '/unit-tests.php'; + $scope_params_as_array = array('email','sms','read_stream'); + $extra_params = array('scope' => $scope_params_as_array, + 'nonsense' => 'nonsense'); + $login_url = parse_url($facebook->getLoginUrl($extra_params)); + $this->assertEquals($login_url['scheme'], 'https'); + $this->assertEquals($login_url['host'], 'www.facebook.com'); + $this->assertEquals($login_url['path'], '/dialog/oauth'); + // expect api to flatten array params to comma separated list + // should do the same here before asserting to make sure API is behaving + // correctly; + $extra_params['scope'] = implode(',', $scope_params_as_array); + $expected_login_params = + array_merge( + array('client_id' => self::APP_ID, + 'redirect_uri' => 'http://www.test.com/unit-tests.php'), + $extra_params); + $query_map = array(); + parse_str($login_url['query'], $query_map); + $this->assertIsSubset($expected_login_params, $query_map); + // we don't know what the state is, but we know it's an md5 and should + // be 32 characters long. + $this->assertEquals(strlen($query_map['state']), $num_characters = 32); + } + + public function testGetCodeWithValidCSRFState() { + $facebook = new FBCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $facebook->setCSRFStateToken(); + $code = $_REQUEST['code'] = $this->generateMD5HashOfRandomValue(); + $_REQUEST['state'] = $facebook->getCSRFStateToken(); + $this->assertEquals($code, + $facebook->publicGetCode(), + 'Expect code to be pulled from $_REQUEST[\'code\']'); + } + + public function testGetCodeWithInvalidCSRFState() { + $facebook = new FBCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $facebook->setCSRFStateToken(); + $code = $_REQUEST['code'] = $this->generateMD5HashOfRandomValue(); + $_REQUEST['state'] = $facebook->getCSRFStateToken().'forgery!!!'; + $this->assertFalse($facebook->publicGetCode(), + 'Expect getCode to fail, CSRF state should not match.'); + } + + public function testGetCodeWithMissingCSRFState() { + $facebook = new FBCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $code = $_REQUEST['code'] = $this->generateMD5HashOfRandomValue(); + // intentionally don't set CSRF token at all + $this->assertFalse($facebook->publicGetCode(), + 'Expect getCode to fail, CSRF state not sent back.'); + } + + public function testPersistentCSRFState() + { + $facebook = new FBCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $facebook->setCSRFStateToken(); + $code = $facebook->getCSRFStateToken(); + + $facebook = new FBCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $this->assertEquals($code, $facebook->publicGetState(), + 'Persisted CSRF state token not loaded correctly'); + } + + public function testPersistentCSRFStateWithSharedSession() + { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $facebook = new FBCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $facebook->setCSRFStateToken(); + $code = $facebook->getCSRFStateToken(); + + $facebook = new FBCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + + $this->assertEquals($code, $facebook->publicGetState(), + 'Persisted CSRF state token not loaded correctly with shared session'); + } + + public function testGetUserFromSignedRequest() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $_REQUEST['signed_request'] = self::kValidSignedRequest(); + $this->assertEquals('499834690', $facebook->getUser(), + 'Failed to get user ID from a valid signed request.'); + } + + public function testDisallowSignedRequest() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'allowSignedRequest' => false + )); + + $_REQUEST['signed_request'] = self::kValidSignedRequest(); + $this->assertEquals(0, $facebook->getUser(), + 'Should not have received valid user from signed_request.'); + } + + + public function testSignedRequestRewrite(){ + $facebook = new FBRewrite(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $_REQUEST['signed_request'] = self::kValidSignedRequest(self::TEST_USER, 'Hello sweetie'); + + $this->assertEquals(self::TEST_USER, $facebook->getUser(), + 'Failed to get user ID from a valid signed request.'); + + $this->assertEquals('Hello sweetie', $facebook->getAccessToken(), + 'Failed to get access token from signed request'); + + $facebook->uncache(); + + $_REQUEST['signed_request'] = self::kValidSignedRequest(self::TEST_USER_2, 'spoilers'); + + $this->assertEquals(self::TEST_USER_2, $facebook->getUser(), + 'Failed to get user ID from a valid signed request.'); + + $_REQUEST['signed_request'] = null; + $facebook ->uncacheSignedRequest(); + + $this->assertNotEquals('Hello sweetie', $facebook->getAccessToken(), + 'Failed to clear access token'); + } + + public function testGetSignedRequestFromCookie() { + $facebook = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $_COOKIE[$facebook->publicGetSignedRequestCookieName()] = + self::kValidSignedRequest(); + $this->assertNotNull($facebook->publicGetSignedRequest()); + $this->assertEquals('499834690', $facebook->getUser(), + 'Failed to get user ID from a valid signed request.'); + } + + public function testGetSignedRequestWithIncorrectSignature() { + $facebook = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $_COOKIE[$facebook->publicGetSignedRequestCookieName()] = + self::kSignedRequestWithBogusSignature(); + $this->assertNull($facebook->publicGetSignedRequest()); + } + + public function testNonUserAccessToken() { + $facebook = new FBAccessToken(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + // no cookies, and no request params, so no user or code, + // so no user access token (even with cookie support) + $this->assertEquals($facebook->publicGetApplicationAccessToken(), + $facebook->getAccessToken(), + 'Access token should be that for logged out users.'); + } + + public function testMissingMetadataCookie() { + $fb = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $this->assertEmpty($fb->publicGetMetadataCookie()); + } + + public function testEmptyMetadataCookie() { + $fb = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $_COOKIE[$fb->publicGetMetadataCookieName()] = ''; + $this->assertEmpty($fb->publicGetMetadataCookie()); + } + + public function testMetadataCookie() { + $fb = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $key = 'foo'; + $val = '42'; + $_COOKIE[$fb->publicGetMetadataCookieName()] = "$key=$val"; + $this->assertEquals(array($key => $val), $fb->publicGetMetadataCookie()); + } + + public function testQuotedMetadataCookie() { + $fb = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $key = 'foo'; + $val = '42'; + $_COOKIE[$fb->publicGetMetadataCookieName()] = "\"$key=$val\""; + $this->assertEquals(array($key => $val), $fb->publicGetMetadataCookie()); + } + + public function testAPIForLoggedOutUsers() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $response = $facebook->api(array( + 'method' => 'fql.query', + 'query' => 'SELECT name FROM user WHERE uid=4', + )); + $this->assertEquals(count($response), 1, + 'Expect one row back.'); + $this->assertEquals($response[0]['name'], 'Mark Zuckerberg', + 'Expect the name back.'); + } + + public function testAPIWithBogusAccessToken() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $facebook->setAccessToken('this-is-not-really-an-access-token'); + // if we don't set an access token and there's no way to + // get one, then the FQL query below works beautifully, handing + // over Zuck's public data. But if you specify a bogus access + // token as I have right here, then the FQL query should fail. + // We could return just Zuck's public data, but that wouldn't + // advertise the issue that the access token is at worst broken + // and at best expired. + try { + $response = $facebook->api(array( + 'method' => 'fql.query', + 'query' => 'SELECT name FROM profile WHERE id=4', + )); + $this->fail('Should not get here.'); + } catch(FacebookApiException $e) { + $result = $e->getResult(); + $this->assertTrue(is_array($result), 'expect a result object'); + $this->assertEquals('190', $result['error_code'], 'expect code'); + } + } + + public function testAPIGraphPublicData() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $response = $facebook->api('/jerry'); + $this->assertEquals( + $response['id'], '214707', 'should get expected id.'); + } + + public function testGraphAPIWithBogusAccessToken() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $facebook->setAccessToken('this-is-not-really-an-access-token'); + try { + $response = $facebook->api('/me'); + $this->fail('Should not get here.'); + } catch(FacebookApiException $e) { + // means the server got the access token and didn't like it + $msg = 'OAuthException: Invalid OAuth access token.'; + $this->assertEquals($msg, (string) $e, + 'Expect the invalid OAuth token message.'); + } + } + + public function testGraphAPIWithExpiredAccessToken() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $facebook->setAccessToken(self::$kExpiredAccessToken); + try { + $response = $facebook->api('/me'); + $this->fail('Should not get here.'); + } catch(FacebookApiException $e) { + // means the server got the access token and didn't like it + $error_msg_start = 'OAuthException: Error validating access token:'; + $this->assertTrue(strpos((string) $e, $error_msg_start) === 0, + 'Expect the token validation error message.'); + } + } + + public function testGraphAPIOAuthSpecError() { + $facebook = new TransientFacebook(array( + 'appId' => self::MIGRATED_APP_ID, + 'secret' => self::MIGRATED_SECRET, + )); + + try { + $response = $facebook->api('/me', array( + 'client_id' => self::MIGRATED_APP_ID)); + + $this->fail('Should not get here.'); + } catch(FacebookApiException $e) { + // means the server got the access token + $msg = 'invalid_request: An active access token must be used '. + 'to query information about the current user.'; + $this->assertEquals($msg, (string) $e, + 'Expect the invalid session message.'); + } + } + + public function testGraphAPIMethodOAuthSpecError() { + $facebook = new TransientFacebook(array( + 'appId' => self::MIGRATED_APP_ID, + 'secret' => self::MIGRATED_SECRET, + )); + + try { + $response = $facebook->api('/daaku.shah', 'DELETE', array( + 'client_id' => self::MIGRATED_APP_ID)); + $this->fail('Should not get here.'); + } catch(FacebookApiException $e) { + $this->assertEquals(strpos($e, 'invalid_request'), 0); + } + } + + public function testCurlFailure() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + if (!defined('CURLOPT_TIMEOUT_MS')) { + // can't test it if we don't have millisecond timeouts + return; + } + + $exception = null; + try { + // we dont expect facebook will ever return in 1ms + Facebook::$CURL_OPTS[CURLOPT_TIMEOUT_MS] = 50; + $facebook->api('/naitik'); + } catch(FacebookApiException $e) { + $exception = $e; + } + unset(Facebook::$CURL_OPTS[CURLOPT_TIMEOUT_MS]); + if (!$exception) { + $this->fail('no exception was thrown on timeout.'); + } + + $code = $exception->getCode(); + if ($code != CURLE_OPERATION_TIMEOUTED && $code != CURLE_COULDNT_CONNECT) { + $this->fail("Expected curl error code 7 or 28 but got: $code"); + } + $this->assertEquals('CurlException', $exception->getType(), 'expect type'); + } + + public function testGraphAPIWithOnlyParams() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + + $response = $facebook->api('/jerry'); + $this->assertTrue(isset($response['id']), + 'User ID should be public.'); + $this->assertTrue(isset($response['name']), + 'User\'s name should be public.'); + $this->assertTrue(isset($response['first_name']), + 'User\'s first name should be public.'); + $this->assertTrue(isset($response['last_name']), + 'User\'s last name should be public.'); + $this->assertFalse(isset($response['work']), + 'User\'s work history should only be available with '. + 'a valid access token.'); + $this->assertFalse(isset($response['education']), + 'User\'s education history should only be '. + 'available with a valid access token.'); + $this->assertFalse(isset($response['verified']), + 'User\'s verification status should only be '. + 'available with a valid access token.'); + } + + public function testLoginURLDefaults() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $encodedUrl = rawurlencode('http://fbrell.com/examples'); + $this->assertNotNull(strpos($facebook->getLoginUrl(), $encodedUrl), + 'Expect the current url to exist.'); + } + + public function testLoginURLDefaultsDropStateQueryParam() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples?state=xx42xx'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $expectEncodedUrl = rawurlencode('http://fbrell.com/examples'); + $this->assertTrue(strpos($facebook->getLoginUrl(), $expectEncodedUrl) > -1, + 'Expect the current url to exist.'); + $this->assertFalse(strpos($facebook->getLoginUrl(), 'xx42xx'), + 'Expect the session param to be dropped.'); + } + + public function testLoginURLDefaultsDropCodeQueryParam() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples?code=xx42xx'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $expectEncodedUrl = rawurlencode('http://fbrell.com/examples'); + $this->assertTrue(strpos($facebook->getLoginUrl(), $expectEncodedUrl) > -1, + 'Expect the current url to exist.'); + $this->assertFalse(strpos($facebook->getLoginUrl(), 'xx42xx'), + 'Expect the session param to be dropped.'); + } + + public function testLoginURLDefaultsDropSignedRequestParamButNotOthers() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = + '/examples?signed_request=xx42xx&do_not_drop=xx43xx'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $expectEncodedUrl = rawurlencode('http://fbrell.com/examples'); + $this->assertFalse(strpos($facebook->getLoginUrl(), 'xx42xx'), + 'Expect the session param to be dropped.'); + $this->assertTrue(strpos($facebook->getLoginUrl(), 'xx43xx') > -1, + 'Expect the do_not_drop param to exist.'); + } + + public function testLoginURLCustomNext() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $next = 'http://fbrell.com/custom'; + $loginUrl = $facebook->getLoginUrl(array( + 'redirect_uri' => $next, + 'cancel_url' => $next + )); + $currentEncodedUrl = rawurlencode('http://fbrell.com/examples'); + $expectedEncodedUrl = rawurlencode($next); + $this->assertNotNull(strpos($loginUrl, $expectedEncodedUrl), + 'Expect the custom url to exist.'); + $this->assertFalse(strpos($loginUrl, $currentEncodedUrl), + 'Expect the current url to not exist.'); + } + + public function testLogoutURLDefaults() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $encodedUrl = rawurlencode('http://fbrell.com/examples'); + $this->assertNotNull(strpos($facebook->getLogoutUrl(), $encodedUrl), + 'Expect the current url to exist.'); + $this->assertFalse(strpos($facebook->getLogoutUrl(), self::SECRET)); + } + + public function testLoginStatusURLDefaults() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $encodedUrl = rawurlencode('http://fbrell.com/examples'); + $this->assertNotNull(strpos($facebook->getLoginStatusUrl(), $encodedUrl), + 'Expect the current url to exist.'); + } + + public function testLoginStatusURLCustom() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $encodedUrl1 = rawurlencode('http://fbrell.com/examples'); + $okUrl = 'http://fbrell.com/here1'; + $encodedUrl2 = rawurlencode($okUrl); + $loginStatusUrl = $facebook->getLoginStatusUrl(array( + 'ok_session' => $okUrl, + )); + $this->assertNotNull(strpos($loginStatusUrl, $encodedUrl1), + 'Expect the current url to exist.'); + $this->assertNotNull(strpos($loginStatusUrl, $encodedUrl2), + 'Expect the custom url to exist.'); + } + + public function testNonDefaultPort() { + $_SERVER['HTTP_HOST'] = 'fbrell.com:8080'; + $_SERVER['REQUEST_URI'] = '/examples'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $encodedUrl = rawurlencode('http://fbrell.com:8080/examples'); + $this->assertNotNull(strpos($facebook->getLoginUrl(), $encodedUrl), + 'Expect the current url to exist.'); + } + + public function testSecureCurrentUrl() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $_SERVER['REQUEST_URI'] = '/examples'; + $_SERVER['HTTPS'] = 'on'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $encodedUrl = rawurlencode('https://fbrell.com/examples'); + $this->assertNotNull(strpos($facebook->getLoginUrl(), $encodedUrl), + 'Expect the current url to exist.'); + } + + public function testSecureCurrentUrlWithNonDefaultPort() { + $_SERVER['HTTP_HOST'] = 'fbrell.com:8080'; + $_SERVER['REQUEST_URI'] = '/examples'; + $_SERVER['HTTPS'] = 'on'; + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $encodedUrl = rawurlencode('https://fbrell.com:8080/examples'); + $this->assertNotNull(strpos($facebook->getLoginUrl(), $encodedUrl), + 'Expect the current url to exist.'); + } + + public function testBase64UrlEncode() { + $input = 'Facebook rocks'; + $output = 'RmFjZWJvb2sgcm9ja3M'; + + $this->assertEquals(FBPublic::publicBase64UrlDecode($output), $input); + } + + public function testSignedToken() { + $facebook = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $payload = $facebook->publicParseSignedRequest(self::kValidSignedRequest()); + $this->assertNotNull($payload, 'Expected token to parse'); + $this->assertEquals($facebook->getSignedRequest(), null); + $_REQUEST['signed_request'] = self::kValidSignedRequest(); + $this->assertEquals($facebook->getSignedRequest(), $payload); + } + + public function testNonTossedSignedtoken() { + $facebook = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $payload = $facebook->publicParseSignedRequest( + self::kNonTosedSignedRequest()); + $this->assertNotNull($payload, 'Expected token to parse'); + $this->assertNull($facebook->getSignedRequest()); + $_REQUEST['signed_request'] = self::kNonTosedSignedRequest(); + $sr = $facebook->getSignedRequest(); + $this->assertTrue(isset($sr['algorithm'])); + } + + public function testSignedRequestWithEmptyValue() { + $fb = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $_REQUEST['signed_request'] = self::kSignedRequestWithEmptyValue(); + $this->assertNull($fb->getSignedRequest()); + $_COOKIE[$fb->publicGetSignedRequestCookieName()] = + self::kSignedRequestWithEmptyValue(); + $this->assertNull($fb->getSignedRequest()); + } + + public function testSignedRequestWithWrongAlgo() { + $fb = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $payload = $fb->publicParseSignedRequest( + self::kSignedRequestWithWrongAlgo()); + $this->assertNull($payload, 'Expected nothing back.'); + } + + public function testMakeAndParse() { + $fb = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $data = array('foo' => 42); + $sr = $fb->publicMakeSignedRequest($data); + $decoded = $fb->publicParseSignedRequest($sr); + $this->assertEquals($data['foo'], $decoded['foo']); + } + + /** + * @expectedException InvalidArgumentException + */ + public function testMakeSignedRequestExpectsArray() { + $fb = new FBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $sr = $fb->publicMakeSignedRequest(''); + } + + public function testBundledCACert() { + $facebook = new TransientFacebook(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + + // use the bundled cert from the start + Facebook::$CURL_OPTS[CURLOPT_CAINFO] = + dirname(__FILE__) . '/../src/fb_ca_chain_bundle.crt'; + $response = $facebook->api('/naitik'); + + unset(Facebook::$CURL_OPTS[CURLOPT_CAINFO]); + $this->assertEquals( + $response['id'], '5526183', 'should get expected id.'); + } + + public function testVideoUpload() { + $facebook = new FBRecordURL(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + + $facebook->api(array('method' => 'video.upload')); + $this->assertContains('//api-video.', $facebook->getRequestedURL(), + 'video.upload should go against api-video'); + } + + public function testVideoUploadGraph() { + $facebook = new FBRecordURL(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + + $facebook->api('/me/videos', 'POST'); + $this->assertContains('//graph-video.', $facebook->getRequestedURL(), + '/me/videos should go against graph-video'); + } + + public function testGetUserAndAccessTokenFromSession() { + $facebook = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + + $facebook->publicSetPersistentData('access_token', + self::$kExpiredAccessToken); + $facebook->publicSetPersistentData('user_id', 12345); + $this->assertEquals(self::$kExpiredAccessToken, + $facebook->getAccessToken(), + 'Get access token from persistent store.'); + $this->assertEquals('12345', + $facebook->getUser(), + 'Get user id from persistent store.'); + } + + public function testGetUserAndAccessTokenFromSignedRequestNotSession() { + $facebook = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + + $_REQUEST['signed_request'] = self::kValidSignedRequest(); + $facebook->publicSetPersistentData('user_id', 41572); + $facebook->publicSetPersistentData('access_token', + self::$kExpiredAccessToken); + $this->assertNotEquals('41572', $facebook->getUser(), + 'Got user from session instead of signed request.'); + $this->assertEquals('499834690', $facebook->getUser(), + 'Failed to get correct user ID from signed request.'); + $this->assertNotEquals( + self::$kExpiredAccessToken, + $facebook->getAccessToken(), + 'Got access token from session instead of signed request.'); + $this->assertNotEmpty( + $facebook->getAccessToken(), + 'Failed to extract an access token from the signed request.'); + } + + public function testGetUserWithoutCodeOrSignedRequestOrSession() { + $facebook = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + + // deliberately leave $_REQUEST and _$SESSION empty + $this->assertEmpty($_REQUEST, + 'GET, POST, and COOKIE params exist even though '. + 'they should. Test cannot succeed unless all of '. + '$_REQUEST is empty.'); + $this->assertEmpty($_SESSION, + 'Session is carrying state and should not be.'); + $this->assertEmpty($facebook->getUser(), + 'Got a user id, even without a signed request, '. + 'access token, or session variable.'); + $this->assertEmpty($_SESSION, + 'Session superglobal incorrectly populated by getUser.'); + } + + public function testGetAccessTokenUsingCodeInJsSdkCookie() { + $code = 'code1'; + $access_token = 'at1'; + $methods_to_stub = array('getSignedRequest', 'getAccessTokenFromCode'); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getSignedRequest') + ->will($this->returnValue(array('code' => $code))); + $stub + ->expects($this->once()) + ->method('getAccessTokenFromCode') + ->will($this->returnValueMap(array(array($code, '', $access_token)))); + $this->assertEquals($stub->getAccessToken(), $access_token); + } + + public function testSignedRequestWithoutAuthClearsData() { + $methods_to_stub = array('getSignedRequest', 'clearAllPersistentData'); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getSignedRequest') + ->will($this->returnValue(array('foo' => 1))); + $stub + ->expects($this->once()) + ->method('clearAllPersistentData'); + $this->assertEquals(self::APP_ID.'|'.self::SECRET, $stub->getAccessToken()); + } + + public function testInvalidCodeInSignedRequestWillClearData() { + $code = 'code1'; + $methods_to_stub = array( + 'getSignedRequest', + 'getAccessTokenFromCode', + 'clearAllPersistentData', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getSignedRequest') + ->will($this->returnValue(array('code' => $code))); + $stub + ->expects($this->once()) + ->method('getAccessTokenFromCode') + ->will($this->returnValue(null)); + $stub + ->expects($this->once()) + ->method('clearAllPersistentData'); + $this->assertEquals(self::APP_ID.'|'.self::SECRET, $stub->getAccessToken()); + } + + public function testInvalidCodeWillClearData() { + $code = 'code1'; + $methods_to_stub = array( + 'getCode', + 'getAccessTokenFromCode', + 'clearAllPersistentData', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getCode') + ->will($this->returnValue($code)); + $stub + ->expects($this->once()) + ->method('getAccessTokenFromCode') + ->will($this->returnValue(null)); + $stub + ->expects($this->once()) + ->method('clearAllPersistentData'); + $this->assertEquals(self::APP_ID.'|'.self::SECRET, $stub->getAccessToken()); + } + + public function testValidCodeToToken() { + $code = 'code1'; + $access_token = 'at1'; + $methods_to_stub = array( + 'getSignedRequest', + 'getCode', + 'getAccessTokenFromCode', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getCode') + ->will($this->returnValue($code)); + $stub + ->expects($this->once()) + ->method('getAccessTokenFromCode') + ->will($this->returnValueMap(array(array($code, null, $access_token)))); + $this->assertEquals($stub->getAccessToken(), $access_token); + } + + public function testSignedRequestWithoutAuthClearsDataInAvailData() { + $methods_to_stub = array('getSignedRequest', 'clearAllPersistentData'); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getSignedRequest') + ->will($this->returnValue(array('foo' => 1))); + $stub + ->expects($this->once()) + ->method('clearAllPersistentData'); + $this->assertEquals(0, $stub->getUser()); + } + + public function testFailedToGetUserFromAccessTokenClearsData() { + $methods_to_stub = array( + 'getAccessToken', + 'getUserFromAccessToken', + 'clearAllPersistentData', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getAccessToken') + ->will($this->returnValue('at1')); + $stub + ->expects($this->once()) + ->method('getUserFromAccessToken'); + $stub + ->expects($this->once()) + ->method('clearAllPersistentData'); + $this->assertEquals(0, $stub->getUser()); + } + + public function testUserFromAccessTokenIsStored() { + $methods_to_stub = array( + 'getAccessToken', + 'getUserFromAccessToken', + 'setPersistentData', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $user = 42; + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getAccessToken') + ->will($this->returnValue('at1')); + $stub + ->expects($this->once()) + ->method('getUserFromAccessToken') + ->will($this->returnValue($user)); + $stub + ->expects($this->once()) + ->method('setPersistentData'); + $this->assertEquals($user, $stub->getUser()); + } + + public function testUserFromAccessTokenPullsID() { + $methods_to_stub = array( + 'getAccessToken', + 'api', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $user = 42; + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getAccessToken') + ->will($this->returnValue('at1')); + $stub + ->expects($this->once()) + ->method('api') + ->will($this->returnValue(array('id' => $user))); + $this->assertEquals($user, $stub->getUser()); + } + + public function testUserFromAccessTokenResetsOnApiException() { + $methods_to_stub = array( + 'getAccessToken', + 'clearAllPersistentData', + 'api', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('getAccessToken') + ->will($this->returnValue('at1')); + $stub + ->expects($this->once()) + ->method('api') + ->will($this->throwException(new FacebookApiException(false))); + $stub + ->expects($this->once()) + ->method('clearAllPersistentData'); + $this->assertEquals(0, $stub->getUser()); + } + + public function testEmptyCodeReturnsFalse() { + $fb = new FBPublicGetAccessTokenFromCode(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $this->assertFalse($fb->publicGetAccessTokenFromCode('')); + $this->assertFalse($fb->publicGetAccessTokenFromCode(null)); + $this->assertFalse($fb->publicGetAccessTokenFromCode(false)); + } + + public function testNullRedirectURIUsesCurrentURL() { + $methods_to_stub = array( + '_oauthRequest', + 'getCurrentUrl', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $access_token = 'at1'; + $stub = $this->getMock( + 'FBPublicGetAccessTokenFromCode', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->returnValue("access_token=$access_token")); + $stub + ->expects($this->once()) + ->method('getCurrentUrl'); + $this->assertEquals( + $access_token, $stub->publicGetAccessTokenFromCode('c')); + } + + public function testNullRedirectURIAllowsEmptyStringForCookie() { + $methods_to_stub = array( + '_oauthRequest', + 'getCurrentUrl', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $access_token = 'at1'; + $stub = $this->getMock( + 'FBPublicGetAccessTokenFromCode', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->returnValue("access_token=$access_token")); + $stub + ->expects($this->never()) + ->method('getCurrentUrl'); + $this->assertEquals( + $access_token, $stub->publicGetAccessTokenFromCode('c', '')); + } + + public function testAPIExceptionDuringCodeExchangeIsIgnored() { + $methods_to_stub = array( + '_oauthRequest', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'FBPublicGetAccessTokenFromCode', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->throwException(new FacebookApiException(false))); + $this->assertFalse($stub->publicGetAccessTokenFromCode('c', '')); + } + + public function testEmptyResponseInCodeExchangeIsIgnored() { + $methods_to_stub = array( + '_oauthRequest', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'FBPublicGetAccessTokenFromCode', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->returnValue('')); + $this->assertFalse($stub->publicGetAccessTokenFromCode('c', '')); + } + + public function testExistingStateRestoredInConstructor() { + $fb = new FBPublicState(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $this->assertEquals(FBPublicState::STATE, $fb->publicGetState()); + } + + public function testMissingAccessTokenInCodeExchangeIsIgnored() { + $methods_to_stub = array( + '_oauthRequest', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'FBPublicGetAccessTokenFromCode', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->returnValue('foo=1')); + $this->assertFalse($stub->publicGetAccessTokenFromCode('c', '')); + } + + public function testExceptionConstructorWithErrorCode() { + $code = 404; + $e = new FacebookApiException(array('error_code' => $code)); + $this->assertEquals($code, $e->getCode()); + } + + public function testExceptionConstructorWithInvalidErrorCode() { + $e = new FacebookApiException(array('error_code' => 'not an int')); + $this->assertEquals(0, $e->getCode()); + } + + // this happens often despite the fact that it is useless + public function testExceptionTypeFalse() { + $e = new FacebookApiException(false); + $this->assertEquals('Exception', $e->getType()); + } + + public function testExceptionTypeMixedDraft00() { + $e = new FacebookApiException(array('error' => array('message' => 'foo'))); + $this->assertEquals('Exception', $e->getType()); + } + + public function testExceptionTypeDraft00() { + $error = 'foo'; + $e = new FacebookApiException( + array('error' => array('type' => $error, 'message' => 'hello world'))); + $this->assertEquals($error, $e->getType()); + } + + public function testExceptionTypeDraft10() { + $error = 'foo'; + $e = new FacebookApiException(array('error' => $error)); + $this->assertEquals($error, $e->getType()); + } + + public function testExceptionTypeDefault() { + $e = new FacebookApiException(array('error' => false)); + $this->assertEquals('Exception', $e->getType()); + } + + public function testExceptionToString() { + $e = new FacebookApiException(array( + 'error_code' => 1, + 'error_description' => 'foo', + )); + $this->assertEquals('Exception: 1: foo', (string) $e); + } + + public function testDestroyClearsCookie() { + $fb = new FBPublicCookie(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $_COOKIE[$fb->publicGetSignedRequestCookieName()] = 'foo'; + $_COOKIE[$fb->publicGetMetadataCookieName()] = 'base_domain=fbrell.com'; + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb->destroySession(); + $this->assertFalse( + array_key_exists($fb->publicGetSignedRequestCookieName(), $_COOKIE)); + } + + public function testAuthExpireSessionDestroysSession() { + $methods_to_stub = array( + '_oauthRequest', + 'destroySession', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $key = 'foo'; + $val = 42; + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->returnValue("{\"$key\":$val}")); + $stub + ->expects($this->once()) + ->method('destroySession'); + $this->assertEquals( + array($key => $val), + $stub->api(array('method' => 'auth.expireSession')) + ); + } + + public function testLowercaseAuthRevokeAuthDestroysSession() { + $methods_to_stub = array( + '_oauthRequest', + 'destroySession', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $key = 'foo'; + $val = 42; + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->returnValue("{\"$key\":$val}")); + $stub + ->expects($this->once()) + ->method('destroySession'); + $this->assertEquals( + array($key => $val), + $stub->api(array('method' => 'auth.revokeauthorization')) + ); + } + + /** + * @expectedException FacebookAPIException + */ + public function testErrorCodeFromRestAPIThrowsException() { + $methods_to_stub = array( + '_oauthRequest', + ); + $constructor_args = array(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET + )); + $stub = $this->getMock( + 'TransientFacebook', $methods_to_stub, $constructor_args); + $stub + ->expects($this->once()) + ->method('_oauthRequest') + ->will($this->returnValue('{"error_code": 500}')); + $stub->api(array('method' => 'foo')); + } + + public function testJsonEncodeOfNonStringParams() { + $foo = array(1, 2); + $params = array( + 'method' => 'get', + 'foo' => $foo, + ); + $fb = new FBRecordMakeRequest(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $fb->api('/naitik', $params); + $requests = $fb->publicGetRequests(); + $this->assertEquals(json_encode($foo), $requests[0]['params']['foo']); + } + + public function testSessionBackedFacebook() { + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $key = 'state'; + $val = 'foo'; + $fb->publicSetPersistentData($key, $val); + $this->assertEquals( + $val, + $_SESSION[sprintf('fb_%s_%s', self::APP_ID, $key)] + ); + $this->assertEquals( + $val, + $fb->publicGetPersistentData($key) + ); + } + + public function testSessionBackedFacebookIgnoresUnsupportedKey() { + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $key = '--invalid--'; + $val = 'foo'; + $fb->publicSetPersistentData($key, $val); + $this->assertFalse( + array_key_exists( + sprintf('fb_%s_%s', self::APP_ID, $key), + $_SESSION + ) + ); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testClearSessionBackedFacebook() { + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $key = 'state'; + $val = 'foo'; + $fb->publicSetPersistentData($key, $val); + $this->assertEquals( + $val, + $_SESSION[sprintf('fb_%s_%s', self::APP_ID, $key)] + ); + $this->assertEquals( + $val, + $fb->publicGetPersistentData($key) + ); + $fb->publicClearPersistentData($key); + $this->assertFalse( + array_key_exists( + sprintf('fb_%s_%s', self::APP_ID, $key), + $_SESSION + ) + ); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testSessionBackedFacebookIgnoresUnsupportedKeyInClear() { + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $key = '--invalid--'; + $val = 'foo'; + $session_var_name = sprintf('fb_%s_%s', self::APP_ID, $key); + $_SESSION[$session_var_name] = $val; + $fb->publicClearPersistentData($key); + $this->assertTrue(array_key_exists($session_var_name, $_SESSION)); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testClearAllSessionBackedFacebook() { + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $key = 'state'; + $val = 'foo'; + $session_var_name = sprintf('fb_%s_%s', self::APP_ID, $key); + $fb->publicSetPersistentData($key, $val); + $this->assertEquals($val, $_SESSION[$session_var_name]); + $this->assertEquals($val, $fb->publicGetPersistentData($key)); + $fb->publicClearAllPersistentData(); + $this->assertFalse(array_key_exists($session_var_name, $_SESSION)); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testSharedSessionBackedFacebook() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $key = 'state'; + $val = 'foo'; + $session_var_name = sprintf( + '%s_fb_%s_%s', + $fb->publicGetSharedSessionID(), + self::APP_ID, + $key + ); + $fb->publicSetPersistentData($key, $val); + $this->assertEquals($val, $_SESSION[$session_var_name]); + $this->assertEquals($val, $fb->publicGetPersistentData($key)); + } + + public function testSharedSessionBackedFacebookIgnoresUnsupportedKey() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $key = '--invalid--'; + $val = 'foo'; + $session_var_name = sprintf( + '%s_fb_%s_%s', + $fb->publicGetSharedSessionID(), + self::APP_ID, + $key + ); + $fb->publicSetPersistentData($key, $val); + $this->assertFalse(array_key_exists($session_var_name, $_SESSION)); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testSharedClearSessionBackedFacebook() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $key = 'state'; + $val = 'foo'; + $session_var_name = sprintf( + '%s_fb_%s_%s', + $fb->publicGetSharedSessionID(), + self::APP_ID, + $key + ); + $fb->publicSetPersistentData($key, $val); + $this->assertEquals($val, $_SESSION[$session_var_name]); + $this->assertEquals($val, $fb->publicGetPersistentData($key)); + $fb->publicClearPersistentData($key); + $this->assertFalse(array_key_exists($session_var_name, $_SESSION)); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testSharedSessionBackedFacebookIgnoresUnsupportedKeyInClear() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $key = '--invalid--'; + $val = 'foo'; + $session_var_name = sprintf( + '%s_fb_%s_%s', + $fb->publicGetSharedSessionID(), + self::APP_ID, + $key + ); + $_SESSION[$session_var_name] = $val; + $fb->publicClearPersistentData($key); + $this->assertTrue(array_key_exists($session_var_name, $_SESSION)); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testSharedClearAllSessionBackedFacebook() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $key = 'state'; + $val = 'foo'; + $session_var_name = sprintf( + '%s_fb_%s_%s', + $fb->publicGetSharedSessionID(), + self::APP_ID, + $key + ); + $fb->publicSetPersistentData($key, $val); + $this->assertEquals($val, $_SESSION[$session_var_name]); + $this->assertEquals($val, $fb->publicGetPersistentData($key)); + $fb->publicClearAllPersistentData(); + $this->assertFalse(array_key_exists($session_var_name, $_SESSION)); + $this->assertFalse($fb->publicGetPersistentData($key)); + } + + public function testSharedSessionBackedFacebookIsRestored() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $key = 'state'; + $val = 'foo'; + $shared_session_id = $fb->publicGetSharedSessionID(); + $session_var_name = sprintf( + '%s_fb_%s_%s', + $shared_session_id, + self::APP_ID, + $key + ); + $fb->publicSetPersistentData($key, $val); + $this->assertEquals($val, $_SESSION[$session_var_name]); + $this->assertEquals($val, $fb->publicGetPersistentData($key)); + + // check the new instance has the same data + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $this->assertEquals( + $shared_session_id, + $fb->publicGetSharedSessionID() + ); + $this->assertEquals($val, $fb->publicGetPersistentData($key)); + } + + public function testSharedSessionBackedFacebookIsNotRestoredWhenCorrupt() { + $_SERVER['HTTP_HOST'] = 'fbrell.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $key = 'state'; + $val = 'foo'; + $shared_session_id = $fb->publicGetSharedSessionID(); + $session_var_name = sprintf( + '%s_fb_%s_%s', + $shared_session_id, + self::APP_ID, + $key + ); + $fb->publicSetPersistentData($key, $val); + $this->assertEquals($val, $_SESSION[$session_var_name]); + $this->assertEquals($val, $fb->publicGetPersistentData($key)); + + // break the cookie + $cookie_name = $fb->publicGetSharedSessionCookieName(); + $_COOKIE[$cookie_name] = substr($_COOKIE[$cookie_name], 1); + + // check the new instance does not have the data + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'sharedSession' => true, + )); + $this->assertFalse($fb->publicGetPersistentData($key)); + $this->assertNotEquals( + $shared_session_id, + $fb->publicGetSharedSessionID() + ); + } + + public function testHttpHost() { + $real = 'foo.com'; + $_SERVER['HTTP_HOST'] = $real; + $_SERVER['HTTP_X_FORWARDED_HOST'] = 'evil.com'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $this->assertEquals($real, $fb->publicGetHttpHost()); + } + + public function testHttpProtocol() { + $_SERVER['HTTPS'] = 'on'; + $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'http'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + )); + $this->assertEquals('https', $fb->publicGetHttpProtocol()); + } + + public function testHttpHostForwarded() { + $real = 'foo.com'; + $_SERVER['HTTP_HOST'] = 'localhost'; + $_SERVER['HTTP_X_FORWARDED_HOST'] = $real; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'trustForwarded' => true, + )); + $this->assertEquals($real, $fb->publicGetHttpHost()); + } + + public function testHttpProtocolForwarded() { + $_SERVER['HTTPS'] = 'on'; + $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'http'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'trustForwarded' => true, + )); + $this->assertEquals('http', $fb->publicGetHttpProtocol()); + } + + public function testHttpProtocolForwardedSecure() { + $_SERVER['HTTPS'] = 'on'; + $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'https'; + $fb = new PersistentFBPublic(array( + 'appId' => self::APP_ID, + 'secret' => self::SECRET, + 'trustForwarded' => true, + )); + $this->assertEquals('https', $fb->publicGetHttpProtocol()); + } + + /** + * @dataProvider provideEndsWith + */ + public function testEndsWith($big, $small, $result) { + $this->assertEquals( + $result, + PersistentFBPublic::publicEndsWith($big, $small) + ); + } + + public function provideEndsWith() { + return array( + array('', '', true), + array('', 'a', false), + array('a', '', true), + array('a', 'b', false), + array('a', 'a', true), + array('aa', 'a', true), + array('ab', 'a', false), + array('ba', 'a', true), + ); + } + + /** + * @dataProvider provideIsAllowedDomain + */ + public function testIsAllowedDomain($big, $small, $result) { + $this->assertEquals( + $result, + PersistentFBPublic::publicIsAllowedDomain($big, $small) + ); + } + + public function provideIsAllowedDomain() { + return array( + array('fbrell.com', 'fbrell.com', true), + array('foo.fbrell.com', 'fbrell.com', true), + array('foofbrell.com', 'fbrell.com', false), + array('evil.com', 'fbrell.com', false), + array('foo.fbrell.com', 'bar.fbrell.com', false), + ); + } + + protected function generateMD5HashOfRandomValue() { + return md5(uniqid(mt_rand(), true)); + } + + protected function setUp() { + parent::setUp(); + } + + protected function tearDown() { + $this->clearSuperGlobals(); + parent::tearDown(); + } + + protected function clearSuperGlobals() { + unset($_SERVER['HTTPS']); + unset($_SERVER['HTTP_HOST']); + unset($_SERVER['REQUEST_URI']); + $_SESSION = array(); + $_COOKIE = array(); + $_REQUEST = array(); + $_POST = array(); + $_GET = array(); + if (session_id()) { + session_destroy(); + } + } + + /** + * Checks that the correct args are a subset of the returned obj + * @param array $correct The correct array values + * @param array $actual The values in practice + * @param string $message to be shown on failure + */ + protected function assertIsSubset($correct, $actual, $msg='') { + foreach ($correct as $key => $value) { + $actual_value = $actual[$key]; + $newMsg = (strlen($msg) ? ($msg.' ') : '').'Key: '.$key; + $this->assertEquals($value, $actual_value, $newMsg); + } + } +} + +class TransientFacebook extends BaseFacebook { + protected function setPersistentData($key, $value) {} + protected function getPersistentData($key, $default = false) { + return $default; + } + protected function clearPersistentData($key) {} + protected function clearAllPersistentData() {} +} + +class FBRecordURL extends TransientFacebook { + private $url; + + protected function _oauthRequest($url, $params) { + $this->url = $url; + } + + public function getRequestedURL() { + return $this->url; + } +} + +class FBRecordMakeRequest extends TransientFacebook { + private $requests = array(); + + protected function makeRequest($url, $params, $ch=null) { + $this->requests[] = array( + 'url' => $url, + 'params' => $params, + ); + return parent::makeRequest($url, $params, $ch); + } + + public function publicGetRequests() { + return $this->requests; + } +} + +class FBPublic extends TransientFacebook { + public static function publicBase64UrlDecode($input) { + return self::base64UrlDecode($input); + } + public static function publicBase64UrlEncode($input) { + return self::base64UrlEncode($input); + } + public function publicParseSignedRequest($input) { + return $this->parseSignedRequest($input); + } + public function publicMakeSignedRequest($data) { + return $this->makeSignedRequest($data); + } +} + +class PersistentFBPublic extends Facebook { + public function publicParseSignedRequest($input) { + return $this->parseSignedRequest($input); + } + + public function publicSetPersistentData($key, $value) { + $this->setPersistentData($key, $value); + } + + public function publicGetPersistentData($key, $default = false) { + return $this->getPersistentData($key, $default); + } + + public function publicClearPersistentData($key) { + return $this->clearPersistentData($key); + } + + public function publicClearAllPersistentData() { + return $this->clearAllPersistentData(); + } + + public function publicGetSharedSessionID() { + return $this->sharedSessionID; + } + + public static function publicIsAllowedDomain($big, $small) { + return self::isAllowedDomain($big, $small); + } + + public static function publicEndsWith($big, $small) { + return self::endsWith($big, $small); + } + + public function publicGetSharedSessionCookieName() { + return $this->getSharedSessionCookieName(); + } + + public function publicGetHttpHost() { + return $this->getHttpHost(); + } + + public function publicGetHttpProtocol() { + return $this->getHttpProtocol(); + } +} + +class FBCode extends Facebook { + public function publicGetCode() { + return $this->getCode(); + } + + public function publicGetState() { + return $this->state; + } + + public function setCSRFStateToken() { + $this->establishCSRFTokenState(); + } + + public function getCSRFStateToken() { + return $this->getPersistentData('state'); + } +} + +class FBAccessToken extends TransientFacebook { + public function publicGetApplicationAccessToken() { + return $this->getApplicationAccessToken(); + } +} + +class FBGetCurrentURLFacebook extends TransientFacebook { + public function publicGetCurrentUrl() { + return $this->getCurrentUrl(); + } +} + +class FBPublicCookie extends TransientFacebook { + public function publicGetSignedRequest() { + return $this->getSignedRequest(); + } + + public function publicGetSignedRequestCookieName() { + return $this->getSignedRequestCookieName(); + } + + public function publicGetMetadataCookie() { + return $this->getMetadataCookie(); + } + + public function publicGetMetadataCookieName() { + return $this->getMetadataCookieName(); + } +} + +class FBRewrite extends Facebook{ + + public function uncacheSignedRequest(){ + $this->signedRequest = null; + } + + public function uncache() + { + $this->user = null; + $this->signedRequest = null; + $this->accessToken = null; + } +} + + +class FBPublicGetAccessTokenFromCode extends TransientFacebook { + public function publicGetAccessTokenFromCode($code, $redirect_uri = null) { + return $this->getAccessTokenFromCode($code, $redirect_uri); + } +} + +class FBPublicState extends TransientFacebook { + const STATE = 'foo'; + protected function getPersistentData($key, $default = false) { + if ($key === 'state') { + return self::STATE; + } + return parent::getPersistentData($key, $default); + } + + public function publicGetState() { + return $this->state; + } +} From 4e8de37336986cc2314305cd1a2bf04418850b57 Mon Sep 17 00:00:00 2001 From: Justin Beale Date: Wed, 16 Apr 2014 11:24:12 -0400 Subject: [PATCH 4/6] remove stupid file --- app/module/Application/view/layout/genlayout.phtml | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 app/module/Application/view/layout/genlayout.phtml diff --git a/app/module/Application/view/layout/genlayout.phtml b/app/module/Application/view/layout/genlayout.phtml deleted file mode 100644 index e69de29..0000000 From 1d7c3d01899ecbb1591c600f09bfd3c85f5529ae Mon Sep 17 00:00:00 2001 From: Justin Beale Date: Thu, 17 Apr 2014 01:20:37 -0400 Subject: [PATCH 5/6] FACEBOOK AUTH WORKS --- .../Application/view/layout/homelayout.phtml | 2 +- .../Application/view/layout/layout.phtml | 2 +- app/module/Users/Module.php | 6 +- app/module/Users/config/module.config.php | 21 +++++- .../Users/Controller/FacebookController.php | 68 +++++++++++++++---- .../Users/src/Users/Model/FacebookLink.php | 16 +++++ .../Users/src/Users/Model/FacebookTable.php | 3 +- app/module/Users/src/Users/Model/User.php | 2 + .../Users/src/Users/Model/UserTable.php | 3 +- .../Users/src/Users/Util/LoginHandler.php | 10 +++ app/public/js/login.js | 54 +++++++++++---- 11 files changed, 153 insertions(+), 34 deletions(-) create mode 100644 app/module/Users/src/Users/Model/FacebookLink.php diff --git a/app/module/Application/view/layout/homelayout.phtml b/app/module/Application/view/layout/homelayout.phtml index e7303f8..aa11cab 100644 --- a/app/module/Application/view/layout/homelayout.phtml +++ b/app/module/Application/view/layout/homelayout.phtml @@ -47,7 +47,7 @@
  • Login
  • Register
  • -
  • Welcome, userInfo->username; ?>
  • +
  • Welcome, userInfo->name; ?>
  • Sign Out
  • Recipes
  • diff --git a/app/module/Application/view/layout/layout.phtml b/app/module/Application/view/layout/layout.phtml index 6d9d485..fe06e26 100644 --- a/app/module/Application/view/layout/layout.phtml +++ b/app/module/Application/view/layout/layout.phtml @@ -60,7 +60,7 @@ diff --git a/app/module/Users/Module.php b/app/module/Users/Module.php index aee3fd6..7c1c218 100644 --- a/app/module/Users/Module.php +++ b/app/module/Users/Module.php @@ -3,8 +3,10 @@ namespace Users; +use Users\Model\FacebookLink; use Users\Model\User; use Users\Model\UserTable; +use Users\Model\FacebookTable; use Zend\Db\ResultSet\ResultSet; use Zend\Db\TableGateway\TableGateway; use Zend\Mvc\ModuleRouteListener; @@ -71,14 +73,14 @@ public function getServiceConfig() }, 'Users\Model\FacebookTable' => function($sm) { $tableGateway = $sm->get("FacebookTableGateway"); - $table = new UserTable($tableGateway); + $table = new FacebookTable($tableGateway); return $table; }, 'FacebookTableGateway' => function ($sm) { $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter'); $resultSetPrototype = new ResultSet(); - $resultSetPrototype->setArrayObjectPrototype(new USer()); + $resultSetPrototype->setArrayObjectPrototype(new FacebookLink()); return new TableGateway('user_facebook', $dbAdapter, null, $resultSetPrototype); } ) diff --git a/app/module/Users/config/module.config.php b/app/module/Users/config/module.config.php index 78a0323..94389f6 100644 --- a/app/module/Users/config/module.config.php +++ b/app/module/Users/config/module.config.php @@ -3,7 +3,8 @@ return array( 'controllers' => array( 'invokables' => array( - 'Users\Controller\Auth' => 'Users\Controller\AuthController', + 'Users\Controller\Facebook' => 'Users\Controller\FacebookController', + 'Users\Controller\Auth' => 'Users\Controller\AuthController' ), ), 'router' => array( @@ -22,6 +23,20 @@ ), ), ), + 'fb' => array( + 'type' => 'segment', + 'options' => array( + 'route' => '/facebook[/][:action][/:id]', + 'constraints' => array( + 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', + 'id' => '[0-9]+', + ), + 'defaults' => array( + 'controller' => 'Users\Controller\Facebook', + 'action' => 'auth', + ), + ), + ), ), ), 'view_manager' => array( @@ -29,6 +44,7 @@ 'users' => __DIR__ . '/../view', ), ), + 'view_manager' => array( 'display_not_found_reason' => true, 'display_exceptions' => true, @@ -43,5 +59,8 @@ 'template_path_stack' => array( __DIR__ . '/../view', ), + 'strategies' => array( + 'ViewJsonStrategy', + ), ), ); \ No newline at end of file diff --git a/app/module/Users/src/Users/Controller/FacebookController.php b/app/module/Users/src/Users/Controller/FacebookController.php index 6c7e8cd..4e036ac 100644 --- a/app/module/Users/src/Users/Controller/FacebookController.php +++ b/app/module/Users/src/Users/Controller/FacebookController.php @@ -6,8 +6,11 @@ use Users\Util\AuthenticationResult; use Users\Util\LoginHandler; use Users\Util\PasswordCryptographyProvider; +use Zend\Json\Json; use Zend\Mvc\Controller\AbstractActionController; use Users\Model\FacebookTable; +use Users\Model\UserTable; +use Zend\View\Model\JsonModel; use Zend\View\Model\ViewModel; use Facebook; @@ -15,38 +18,77 @@ class FacebookController extends AbstractActionController { protected $loginHandler; protected $facebookTable; + protected $userTable; protected $facebook; public function __construct() { - $config = array( + + $config = array( 'appId' => '309223815892634', 'secret' => '1e839317b386a08bd4dde801754ff641', 'allowSignedRequest' => false // optional but should be set to false for non-canvas apps ); $this->facebook = new Facebook($config); + + } + + public function init() { + $this->loginHandler = new LoginHandler($this->getUserTable()); + $this->getFacebookTable(); } public function authAction() { + $this->init(); + + $status = "err"; if (isset($_POST['token'])) { - $user = null; - try { - $this->facebook->setAccessToken($_POST['token']); - $user = $this->facebook->getUser(); - } catch (\FacebookApiException $e ) { - //not a valid fb user? + $this->facebook->setAccessToken($_POST['token']); + $fbUser = $this->facebook->getUser(); + if ($fbUser) { + try { + $fbUser = $this->facebook->api('/me'); + } catch (\FacebookApiException $e ) { + //not a valid fb user + $fbUser = null; + } + } else { + die($_POST['token']); + } + $facebookID = $fbUser['id']; + + if ($facebookID == null) { + return new JsonModel(array( + "status" => "invalid_token" + )); } + $userId = $this->facebookTable->getUserIdFromFacebookId($facebookID); + if ($userId == null) { + //no facebook link yet + $status = "nolink"; - $facebookID = $user->id; - //look up token on Facebook - $user = $this->facebook->getUser(); + } else { + //facebook link exists + $this->loginHandler->loginWithId($userId); + $status = "success"; + } - //$res = $this->facebookTable->,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,r.................................................g } - } + return new JsonModel(array( + "status" => $status, + "fbId" => $facebookID + )); + } - + public function getUserTable() + { + if (!$this->userTable) { + $sm = $this->getServiceLocator(); + $this->userTable = $sm->get('Users\Model\UserTable'); + } + return $this->userTable; + } public function getFacebookTable() { diff --git a/app/module/Users/src/Users/Model/FacebookLink.php b/app/module/Users/src/Users/Model/FacebookLink.php new file mode 100644 index 0000000..56dcd0a --- /dev/null +++ b/app/module/Users/src/Users/Model/FacebookLink.php @@ -0,0 +1,16 @@ +linkId = (!empty($data['linkId'])) ? $data['linkId'] : null; + $this->facebookId = (!empty($data['facebookId'])) ? $data['facebookId'] : null; + $this->userId = (!empty($data['userId'])) ? $data['userId'] : null; + } +} \ No newline at end of file diff --git a/app/module/Users/src/Users/Model/FacebookTable.php b/app/module/Users/src/Users/Model/FacebookTable.php index 51757a9..7812298 100644 --- a/app/module/Users/src/Users/Model/FacebookTable.php +++ b/app/module/Users/src/Users/Model/FacebookTable.php @@ -14,12 +14,13 @@ public function __construct(TableGateway $tableGateway) public function getUserIdFromFacebookId($facebookId) { $id = (int)$facebookId; + $rowset = $this->tableGateway->select(array('facebookId' => $id)); $row = $rowset->current(); if (!$row) { return null; } - return $row; + return $row->userId; } public function linkUser($userId, $facebookId) diff --git a/app/module/Users/src/Users/Model/User.php b/app/module/Users/src/Users/Model/User.php index 229ce4f..c7bfa1a 100644 --- a/app/module/Users/src/Users/Model/User.php +++ b/app/module/Users/src/Users/Model/User.php @@ -7,6 +7,7 @@ class User public $username; public $password; public $email; + public $name; public function exchangeArray($data) { @@ -14,5 +15,6 @@ public function exchangeArray($data) $this->username = (!empty($data['username'])) ? $data['username'] : null; $this->password = (!empty($data['password'])) ? $data['password'] : null; $this->email = (!empty($data['email'])) ? $data['email'] : null; + $this->name = (!empty($data['name'])) ? $data['name'] : null; } } \ No newline at end of file diff --git a/app/module/Users/src/Users/Model/UserTable.php b/app/module/Users/src/Users/Model/UserTable.php index 233130a..b7e0785 100644 --- a/app/module/Users/src/Users/Model/UserTable.php +++ b/app/module/Users/src/Users/Model/UserTable.php @@ -44,7 +44,8 @@ public function createUser(User $user) $data = array( 'username' => $user->username, 'password' => $user->password, - 'email' => $user->email + 'email' => $user->email, + 'name' => $user->name ); $this->tableGateway->insert($data); } diff --git a/app/module/Users/src/Users/Util/LoginHandler.php b/app/module/Users/src/Users/Util/LoginHandler.php index e57e025..053bdfb 100644 --- a/app/module/Users/src/Users/Util/LoginHandler.php +++ b/app/module/Users/src/Users/Util/LoginHandler.php @@ -4,6 +4,7 @@ use Users\Model\UserTable; use Users\Model\User; +use Zend\Authentication\Validator\Authentication; use Zend\Session\Container; class LoginHandler implements AbstractLoginHandler @@ -28,6 +29,15 @@ public function login($username, $password) return AuthenticationResult::INVALID_CREDENTIALS; } + public function loginWithId($userId) { + $user = $this->userTable->getUser($userId); + if ($user == null) + return AuthenticationResult::INVALID_CREDENTIALS; + + $this->setSession($user); + return AuthenticationResult::SUCCESS; + } + public function logout() { $this->sessionContainer->currentUser = null; diff --git a/app/public/js/login.js b/app/public/js/login.js index 987aedd..49437c0 100644 --- a/app/public/js/login.js +++ b/app/public/js/login.js @@ -22,19 +22,45 @@ function facebookLogin() { } function handleToken(accessToken) { - $.get("user/facebook/" + accessToken, function(data) { - if (data == "invalid") { - alert("FB problem"); - $("#lightbox_overlay").fadeOut(); - } else if (data == "no_sso") { - currentFacebookToken = accessToken; - goToSSOAssociation(); - } else if (data !== "") { - var result = jQuery.parseJSON(data); - token = result.token; - $("#current_user").html("Logged in as " + result.cn); - goToCourseSelect(); - //location.href = createLaunchUrl(token); + var request = $.ajax({ + type: "POST", + url: "/facebook/auth", + data: { token : accessToken }, + dataType: "json" + + }); + + request.success(function(data) { + if(data.status == "invalid_token") { + alert("FAIL"); + } else if (data.status == "nolink") { + + } else if (data.status == "success") { + location.href = "/"; } }); -} \ No newline at end of file + + +} + +$(document).ready(function() { + $("#fb-signin").click(function() { + facebookLogin(); + }); +}); + +// Load the SDK Asynchronously +(function(d) { + var js, id = 'facebook-jssdk', + ref = d.getElementsByTagName('script')[0]; + if (d.getElementById(id)) { + return; + } + js = d.createElement('script'); + js.id = id; + js.async = true; + js.src = "//connect.facebook.net/en_US/all.js"; + ref.parentNode.insertBefore(js, ref); + + +}(document)); \ No newline at end of file From e71b5587f1dd18332bf75d0304a0f79d43bd949e Mon Sep 17 00:00:00 2001 From: Justin Beale Date: Sun, 20 Apr 2014 13:38:11 -0400 Subject: [PATCH 6/6] final commit, for now... --- .../view/application/index/index.phtml | 26 +- .../Application/view/layout/layout.phtml | 5 +- .../Application/view/partial/paginator.phtml | 52 +++ app/module/Fridge/FridgeSchema.sql | 6 +- app/module/Fridge/Module.php | 2 +- .../Fridge/Controller/FridgeController.php | 188 ++++++++--- .../Fridge/src/Fridge/Form/AddFridgeForm.php | 30 +- .../src/Fridge/Form/SearchFridgeForm.php | 83 +++++ .../src/Fridge/Form/UpdateFridgeForm.php | 47 ++- app/module/Fridge/src/Fridge/Model/Fridge.php | 96 +++++- .../Fridge/src/Fridge/Model/FridgeItem.php | 146 ++++++++ .../Fridge/src/Fridge/Model/FridgeTable.php | 125 ++++++- .../Fridge/src/Fridge/Model/SearchFridge.php | 142 ++++++++ .../Fridge/view/fridge/fridge/index.bak.phtml | 210 ++++++++++++ .../Fridge/view/fridge/fridge/index.phtml | 185 ++++++++++- .../Fridge/view/fridge/fridge/index~old.phtml | 183 +++++++++++ app/module/FridgeOLD/FridgeSchema.sql | 8 + app/module/FridgeOLD/Module.php | 50 +++ app/module/FridgeOLD/autoload_classmap.php | 4 + app/module/FridgeOLD/config/module.config.php | 32 ++ .../Fridge/Controller/FridgeController.php | 86 +++++ .../src/Fridge/Form/AddFridgeForm.php | 49 +++ .../src/Fridge/Form/UpdateFridgeForm.php | 49 +++ .../FridgeOLD/src/Fridge/Model/Fridge.php | 103 ++++++ .../src/Fridge/Model/FridgeTable.php | 60 ++++ .../view/fridge/fridge/add.phtml | 0 .../view/fridge/fridge/delete.phtml | 0 .../view/fridge/fridge/edit.phtml | 0 .../FridgeOLD/view/fridge/fridge/index.phtml | 81 +++++ .../view/fridge/fridge/select.phtml | 0 app/module/Recipe/CookbookSchema.sql | 14 + app/module/Recipe/Module.php | 1 + app/module/Recipe/config/module.config.php | 4 + .../Recipe/Controller/RecipeController.php | 45 ++- .../Recipe/src/Recipe/Form/RecipeAddForm.php | 29 ++ .../Recipe/src/Recipe/Form/ShowbookForm.php | 23 ++ app/module/Recipe/src/Recipe/Model/Recipe.php | 2 +- .../Recipe/src/Recipe/Model/RecipeAdd.php | 49 +++ .../Recipe/src/Recipe/Model/RecipeTable.php | 67 +++- .../Recipe/view/recipe/recipe/add.phtml | 39 +-- .../Recipe/view/recipe/recipe/edit.phtml | 16 +- .../Recipe/view/recipe/recipe/index.phtml | 54 ++- .../view/recipe/recipe/showcookbook.phtml | 92 ++++++ app/module/RecipeOLD/Module.php | 50 +++ app/module/RecipeOLD/autoload_classmap.php | 4 + app/module/RecipeOLD/config/module.config.php | 32 ++ app/module/RecipeOLD/recipeSchema.sql | 20 ++ .../Recipe/Controller/RecipeController.php | 53 +++ .../RecipeOLD/src/Recipe/Form/RecipeForm.php | 163 +++++++++ .../RecipeOLD/src/Recipe/Model/Recipe.php | 311 ++++++++++++++++++ .../src/Recipe/Model/RecipeTable.php | 78 +++++ .../RecipeOLD/view/recipe/recipe/add.phtml | 131 ++++++++ .../RecipeOLD/view/recipe/recipe/delete.phtml | 25 ++ .../RecipeOLD/view/recipe/recipe/edit.phtml | 25 ++ .../RecipeOLD/view/recipe/recipe/index.phtml | 87 +++++ .../RecipeOLD/view/recipe/recipe/select.phtml | 29 ++ .../Search/Controller/SearchController.php | 9 +- .../Search/view/search/search/result.phtml | 17 +- .../Users/view/users/auth/register.phtml | 2 +- app/public/css/globalstyle.css | 10 + app/public/js/global.js | 23 ++ 61 files changed, 3416 insertions(+), 136 deletions(-) create mode 100644 app/module/Application/view/partial/paginator.phtml create mode 100755 app/module/Fridge/src/Fridge/Form/SearchFridgeForm.php create mode 100755 app/module/Fridge/src/Fridge/Model/FridgeItem.php create mode 100755 app/module/Fridge/src/Fridge/Model/SearchFridge.php create mode 100755 app/module/Fridge/view/fridge/fridge/index.bak.phtml create mode 100755 app/module/Fridge/view/fridge/fridge/index~old.phtml create mode 100755 app/module/FridgeOLD/FridgeSchema.sql create mode 100755 app/module/FridgeOLD/Module.php create mode 100755 app/module/FridgeOLD/autoload_classmap.php create mode 100755 app/module/FridgeOLD/config/module.config.php create mode 100755 app/module/FridgeOLD/src/Fridge/Controller/FridgeController.php create mode 100755 app/module/FridgeOLD/src/Fridge/Form/AddFridgeForm.php create mode 100755 app/module/FridgeOLD/src/Fridge/Form/UpdateFridgeForm.php create mode 100755 app/module/FridgeOLD/src/Fridge/Model/Fridge.php create mode 100755 app/module/FridgeOLD/src/Fridge/Model/FridgeTable.php rename app/module/{Fridge => FridgeOLD}/view/fridge/fridge/add.phtml (100%) rename app/module/{Fridge => FridgeOLD}/view/fridge/fridge/delete.phtml (100%) rename app/module/{Fridge => FridgeOLD}/view/fridge/fridge/edit.phtml (100%) create mode 100755 app/module/FridgeOLD/view/fridge/fridge/index.phtml rename app/module/{Fridge => FridgeOLD}/view/fridge/fridge/select.phtml (100%) create mode 100755 app/module/Recipe/CookbookSchema.sql create mode 100755 app/module/Recipe/src/Recipe/Form/RecipeAddForm.php create mode 100755 app/module/Recipe/src/Recipe/Form/ShowbookForm.php create mode 100755 app/module/Recipe/src/Recipe/Model/RecipeAdd.php create mode 100755 app/module/Recipe/view/recipe/recipe/showcookbook.phtml create mode 100755 app/module/RecipeOLD/Module.php create mode 100755 app/module/RecipeOLD/autoload_classmap.php create mode 100755 app/module/RecipeOLD/config/module.config.php create mode 100755 app/module/RecipeOLD/recipeSchema.sql create mode 100755 app/module/RecipeOLD/src/Recipe/Controller/RecipeController.php create mode 100755 app/module/RecipeOLD/src/Recipe/Form/RecipeForm.php create mode 100755 app/module/RecipeOLD/src/Recipe/Model/Recipe.php create mode 100755 app/module/RecipeOLD/src/Recipe/Model/RecipeTable.php create mode 100755 app/module/RecipeOLD/view/recipe/recipe/add.phtml create mode 100755 app/module/RecipeOLD/view/recipe/recipe/delete.phtml create mode 100755 app/module/RecipeOLD/view/recipe/recipe/edit.phtml create mode 100755 app/module/RecipeOLD/view/recipe/recipe/index.phtml create mode 100755 app/module/RecipeOLD/view/recipe/recipe/select.phtml create mode 100644 app/public/js/global.js diff --git a/app/module/Application/view/application/index/index.phtml b/app/module/Application/view/application/index/index.phtml index 0602732..23649a9 100644 --- a/app/module/Application/view/application/index/index.phtml +++ b/app/module/Application/view/application/index/index.phtml @@ -14,10 +14,32 @@
    -

    translate('Eggs and meat so much to eat') ?>

    +

    translate('Search Recipes!') ?>

    -

    SPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM EGGS SPAM SPAMSPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM EGGS SPAM SPAMSPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM EGGS SPAM SPAMSPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM EGGS SPAM SPAMSPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM EGGS SPAM SPAMSPAM SPAM SPAM SPAM SPAM SPAM SPAM SPAM EGGS SPAM SPAM

    +

    Search for new ways to make your favorite foods, or find new foods based on what you have in your house right now. It's fast and easy to find something according to your tastes.

    +

    translate('Yay!') ?> »

    +
    +
    +
    +
    +
    +
    +

    translate('Keep track of what you have') ?>

    +
    +
    +

    Ever found it hard to keep track of what you have on hand? With Food280 you can keep a constant log of the food you've used. Just enter it in and then filter your searches based on it.

    +

    translate('More!') ?> »

    +
    +
    +
    +
    +
    +
    +

    translate('What's for Dinner?') ?>

    +
    +
    +

    You get home from work or school and wonder what you want to eat? Why do you want to eat it? I can't think of anything else to put here so just use this feature and GO!

    translate('More features!') ?> »

    diff --git a/app/module/Application/view/layout/layout.phtml b/app/module/Application/view/layout/layout.phtml index fe06e26..7ddee30 100644 --- a/app/module/Application/view/layout/layout.phtml +++ b/app/module/Application/view/layout/layout.phtml @@ -26,6 +26,7 @@ ->prependFile($this->basePath() . '/js/jquery.min.js') ->prependFile($this->basePath() . '/js/respond.min.js', 'text/javascript', array('conditional' => 'lt IE 9',)) ->prependFile($this->basePath() . '/js/html5shiv.js', 'text/javascript', array('conditional' => 'lt IE 9',)) + ->appendFile($this->basePath() . '/js/global.js', 'text/javascript'); ; ?> @@ -51,9 +52,9 @@
  • My Fridge
  • -
  • diff --git a/app/module/Application/view/partial/paginator.phtml b/app/module/Application/view/partial/paginator.phtml new file mode 100644 index 0000000..735e821 --- /dev/null +++ b/app/module/Application/view/partial/paginator.phtml @@ -0,0 +1,52 @@ +pageCount): ?> +
    +
    + +
    +
    + \ No newline at end of file diff --git a/app/module/Fridge/FridgeSchema.sql b/app/module/Fridge/FridgeSchema.sql index b1c7386..c3feb76 100755 --- a/app/module/Fridge/FridgeSchema.sql +++ b/app/module/Fridge/FridgeSchema.sql @@ -1,7 +1,11 @@ -create table fridge_username( +create table fridge( + itemID int auto_increment, + userID int NOT NULL, itemName varchar(100) NOT NULL, + --itemAmount float(15,2) NOT NULL, itemAmount int NOT NULL, + amountType varchar(15) NOT NULL, expireDate date NOT NULL, PRIMARY KEY(itemID) diff --git a/app/module/Fridge/Module.php b/app/module/Fridge/Module.php index 5f87f96..fdb3bcf 100755 --- a/app/module/Fridge/Module.php +++ b/app/module/Fridge/Module.php @@ -41,7 +41,7 @@ public function getServiceConfig() $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter'); $resultSetPrototype = new ResultSet(); $resultSetPrototype->setArrayObjectPrototype(new Fridge()); - return new TableGateway('fridge_username', $dbAdapter, null, $resultSetPrototype); + return new TableGateway('fridge', $dbAdapter, null, $resultSetPrototype); }, ), ); diff --git a/app/module/Fridge/src/Fridge/Controller/FridgeController.php b/app/module/Fridge/src/Fridge/Controller/FridgeController.php index 5c61485..be4d828 100755 --- a/app/module/Fridge/src/Fridge/Controller/FridgeController.php +++ b/app/module/Fridge/src/Fridge/Controller/FridgeController.php @@ -4,77 +4,175 @@ use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; use Fridge\Model\Fridge; + use Fridge\Model\SearchFridge; + use Fridge\Model\FridgeItem; use Fridge\Form\AddFridgeForm; + use Fridge\Form\UpdateFridgeForm; + use Fridge\Form\SearchFridgeForm; class FridgeController extends AbstractActionController { protected $fridgeTable; + protected $update; + protected $fridgeItems; + public function indexAction() { +// $post = $_POST; +// foreach($post as $key => $value){ +// echo $key." : ".$value."
    "; +// } +// if($post['submitRemove'] == 'remove'){ +// echo "remove"; +// } +// echo (isset($post['submitPlus'])) ? $post['submitPlus'] : "null"; +// echo (isset($post['submitMinus'])) ? $post['submitMinus'] : "null"; +// echo (isset($post['submitRemove'])) ? $post['submitRemove'] : "null"; + + //Zend_View_Helper_PaginationControl::setDefaultViewPartial ( 'paginator.phtml'); - //$form = $this->addAction(); - $id = (int) $this->params()->fromRoute('id', 0); + $update = "null"; + if (isset($_POST['submitPlus'])) { + $this->update = "plus"; + } + + if (isset($_POST['submitMinus'])) { + $this->update = "minus"; + } + + if (isset($_POST['submitRemove'])) { + $this->update = "remove"; + } + + //echo $this->update; + +// foreach($this->fridgeItems as $item){ +// $itemNames[] = $item->itemName; +// } + return new ViewModel(array( - 'fridgeItems' => $this->getFridgeTable()->fetchAll(), - 'form' => $this->addAction(), + 'addForm' => (isset($_POST['submitAdd'])) ? $this->add() : new AddFridgeForm(), + 'updateForm' => (isset($this->update)) ? $this->update() : new UpdateFridgeForm(), + 'searchForm' => $this->search(), //(isset($post['submitSearch'])) ? $this->search() : new SearchFridgeForm(), + 'fridgeItems' => $this->fridgeItems, + //get item names on userid + 'itemNames' => $this->getNames(), //$this->getFridgeTable()->fetchAllNames(), + 'paginator' => $this->makePaginator(), + )); } + //function to add an item to the fridge + public function add() + { + $addForm = new AddFridgeForm(); + $request = $this->getRequest(); - public function addAction() - { - $form = new AddFridgeForm(); - - $request = $this->getRequest(); - if ($request->isPost()) { - $fridge = new Fridge(); - - $form->setInputFilter($fridge->getInputFilter()); - $form->setData($request->getPost()); + if ($request->isPost()) { + $fridgeItem = new FridgeItem(); + + $addForm->setInputFilter($fridgeItem->getInputFilter()); + $addForm->setData($request->getPost()); - if ($form->isValid()) { - $fridge->exchangeArray($form->getData()); - $this->getFridgeTable()->saveFridge($fridge); + if ($addForm->isValid()) { + //need to check if already exists + $fridgeItem->exchangeArray($addForm->getData()); + $this->getFridgeTable()->saveFridge($fridgeItem); - // Redirect to list of albums - return $this->redirect()->toRoute('fridge'); + $form = new AddFridgeForm(); + return $form; + } } -// else -// { -// return new ViewModel(array( -// 'fridgeItems' => $this->getFridgeTable()->fetchAll(), -// 'form' => $form, -// )); -// } - + return $addForm; } - return $form; - } + +//function to search the users fridge for an item + public function search() + { + $searchForm = new SearchFridgeForm(); + $request = $this->getRequest(); + + if ($request->isPost()) { + $sFridge = new SearchFridge(); + + $searchForm->setInputFilter($sFridge->getInputFilter()); + $searchForm->setData($request->getPost()); + + if ($searchForm->isValid()) { + $sFridge->exchangeArray($searchForm->getData()); + $this->fridgeItems = $this->getFridgeTable()->fetchSearch($sFridge, true); + + if($this->fridgeItems == '0'){ + $this->fridgeItems = $this->getFridgeTable()->fetchAll(true); + + } + + $form = new SearchFridgeForm(); + return $form; + } + } + //return nothing returnd + $this->fridgeItems = $this->getFridgeTable()->fetchAll(true); + return $searchForm; + } - public function updateAction() + public function update() { - $form = new UpdateFridgeForm(); - + $updateForm = new UpdateFridgeForm(); $request = $this->getRequest(); + if ($request->isPost()) { $fridge = new Fridge(); - $form->setInputFilter($fridge->getInputFilter()); - $form->setData($request->getPost()); - - if ($form->isValid()) { - $fridge->exchangeArray($form->getData()); - $this->getFridgeTable()->saveFridge($fridge); - - // Redirect to list of albums - //return $this->redirect()->toRoute('fridge'); - } + $updateForm->setInputFilter($fridge->getInputFilter()); + $updateForm->setData($request->getPost()); - return $this->redirect()->toRoute('fridge'); - } - return $form; + + + if ($updateForm->isValid()) { + $fridge->exchangeArray($updateForm->getData()); + switch($this->update){ + case"plus": + $this->getFridgeTable()->addUpdateFridge($fridge); + break; + + case"minus": + $this->getFridgeTable()->minusUpdateFridge($fridge); + break; + + case"remove": + + break; + } + $form = new UpdateFridgeForm(); + return $form; + } + } + return $updateForm; + } + + public function getNames() + { + $fi = $this->getFridgeTable()->fetchAll(); + $itemNames = array(); + foreach($fi as $item){ + $itemNames[] = $item->itemName; + } + return $itemNames; } + public function makePaginator(){ + // grab the paginator from the FridgeTable + $paginator = $this->fridgeItems; + // set the current page to what has been passed in query string, or to 1 if none set + $paginator->setCurrentPageNumber((int) $this->params()->fromQuery('page', 1)); + // set the number of items per page to 10 + $paginator->setItemCountPerPage(10); + + return $paginator; + + } + public function getFridgeTable() { if (!$this->fridgeTable) { diff --git a/app/module/Fridge/src/Fridge/Form/AddFridgeForm.php b/app/module/Fridge/src/Fridge/Form/AddFridgeForm.php index efd4d50..f181592 100755 --- a/app/module/Fridge/src/Fridge/Form/AddFridgeForm.php +++ b/app/module/Fridge/src/Fridge/Form/AddFridgeForm.php @@ -9,26 +9,52 @@ class AddFridgeForm extends Form public function __construct($name = null) { // we want to ignore the name passed - parent::__construct('fridge'); + parent::__construct('fridgeItem'); $this->add(array( 'name' => 'itemID', 'type' => 'Hidden', )); + $this->add(array( + 'name' => 'userID', + 'type' => 'Hidden', + )); $this->add(array( 'name' => 'itemName', 'type' => 'Text', 'options' => array( 'label' => 'ItemName', ), + 'attributes' => array( + 'id' => 'addItemName', + ), )); $this->add(array( 'name' => 'itemAmount', 'type' => 'Text', + 'attributes' => array( + 'size' => '6', + ), 'options' => array( 'label' => 'ItemAmount', ), )); + $this->add(array( + 'name' => 'amountType', + 'type' => 'Select', + 'attributes' => array( + 'id' => 'amountType', + ), + 'options' => array( + 'label' => 'amountType', + 'options' => array( + 'lbs' => 'lbs', + 'units' => 'units', + 'oz' => 'oz', + 'gallons' => 'gallons', + ), + ), + )); $this->add(array( 'name' => 'expireDate', 'type' => 'Date', @@ -41,7 +67,7 @@ public function __construct($name = null) 'type' => 'Submit', 'attributes' => array( 'value' => 'Add', - 'id' => 'submitbutton', + 'id' => 'submitAdd', ), )); diff --git a/app/module/Fridge/src/Fridge/Form/SearchFridgeForm.php b/app/module/Fridge/src/Fridge/Form/SearchFridgeForm.php new file mode 100755 index 0000000..a63a53a --- /dev/null +++ b/app/module/Fridge/src/Fridge/Form/SearchFridgeForm.php @@ -0,0 +1,83 @@ +add(array( +// 'name' => 'itemID', +// 'type' => 'Hidden', +// )); +// +// +// $this->add(array( +// 'name' => 'itemAmount', +// 'type' => 'Text', +// 'attributes' => array( +// 'size' => '6', +// ), +// 'options' => array( +// 'label' => 'ItemAmount', +// ), +// )); +// $this->add(array( +// 'name' => 'amountType', +// 'type' => 'Select', +// 'attributes' => array( +// 'id' => 'amountType', +// ), +// 'options' => array( +// 'label' => 'amountType', +// 'options' => array( +// 'lbs' => 'lbs', +// 'units' => 'units', +// 'oz' => 'oz', +// 'gallons' => 'gallons', +// ), +// ), +// )); +// $this->add(array( +// 'name' => 'expireDate', +// 'type' => 'Date', +// 'options' => array( +// 'label' => 'ExpireDate', +// ), +// )); +// + $this->add(array( + 'name' => 'userID', + 'type' => 'Hidden', + )); + $this->add(array( + 'name' => 'searchValue', + 'type' => 'Text', + 'options' => array( + 'label' => 'SearchValue', + ), + )); + + $this->add(array( + 'name' => 'submitSearch', + 'type' => 'Submit', + 'attributes' => array( + 'value' => 'Search', + 'id' => 'submitbutton', + ), + )); + $this->add(array( + 'name' => 'submitAll', + 'type' => 'Submit', + 'attributes' => array( + 'value' => 'Show All', + 'id' => 'submitbutton', + ), + )); + } + } diff --git a/app/module/Fridge/src/Fridge/Form/UpdateFridgeForm.php b/app/module/Fridge/src/Fridge/Form/UpdateFridgeForm.php index 61e02de..a3b32a1 100755 --- a/app/module/Fridge/src/Fridge/Form/UpdateFridgeForm.php +++ b/app/module/Fridge/src/Fridge/Form/UpdateFridgeForm.php @@ -15,6 +15,10 @@ public function __construct($name = null) 'name' => 'itemID', 'type' => 'Hidden', )); + $this->add(array( + 'name' => 'userID', + 'type' => 'Hidden', + )); $this->add(array( 'name' => 'itemName', 'type' => 'Text', @@ -29,6 +33,13 @@ public function __construct($name = null) 'label' => 'ItemAmount', ), )); + $this->add(array( + 'name' => 'amountType', + 'type' => 'Text', + 'options' => array( + 'label' => 'amountType', + ), + )); $this->add(array( 'name' => 'expireDate', 'type' => 'Date', @@ -36,13 +47,43 @@ public function __construct($name = null) 'label' => 'ExpireDate', ), )); + $this->add(array( + 'name' => 'submit', + 'type' => 'Submit', + 'attributes' => array( + 'value' => 'update', + 'id' => 'update', + 'class' => 'btn btn-default', + ), + + )); + $this->add(array( + 'name' => 'submitPlus', + 'type' => 'Submit', + 'attributes' => array( + 'value' => 'plus', + 'id' => 'plus', + 'class' => 'btn btn-default', + ), + + )); + $this->add(array( + 'name' => 'submitMinus', + 'type' => 'Submit', + 'attributes' => array( + 'value' => 'minus', + 'id' => 'minus', + 'class' => 'btn btn-default', + ), + )); $this->add(array( - 'name' => 'submitUp', + 'name' => 'submitRemove', 'type' => 'Submit', 'attributes' => array( - 'value' => 'Update', - 'id' => 'submitbutton', + 'value' => 'remove', + 'id' => 'remove', + 'class' => 'btn btn-default', ), )); } diff --git a/app/module/Fridge/src/Fridge/Model/Fridge.php b/app/module/Fridge/src/Fridge/Model/Fridge.php index 9975c58..ef0d5da 100755 --- a/app/module/Fridge/src/Fridge/Model/Fridge.php +++ b/app/module/Fridge/src/Fridge/Model/Fridge.php @@ -5,21 +5,27 @@ use Zend\InputFilter\InputFilter; use Zend\InputFilter\InputFilterAwareInterface; use Zend\InputFilter\InputFilterInterface; + use Zend\Db\Adapter\Adapter as DbAdapter; class Fridge implements InputFilterAwareInterface { public $itemID; + public $userID; public $itemName; public $itemAmount; + public $amoutType; public $expireDate; + //public $userid; protected $inputFilter; // <-- Add this variable - + public function exchangeArray($data) { $this->itemID = (isset($data['itemID'])) ? $data['itemID'] : null; + $this->userID = (isset($data['userID'])) ? $data['userID'] : null; $this->itemName = (isset($data['itemName'])) ? $data['itemName'] : null; $this->itemAmount = (isset($data['itemAmount'])) ? $data['itemAmount'] : null; + $this->amountType = (isset($data['amountType'])) ? $data['amountType'] : null; $this->expireDate = (isset($data['expireDate'])) ? $data['expireDate'] : null; } @@ -39,6 +45,13 @@ public function getInputFilter() if (!$this->inputFilter) { $inputFilter = new InputFilter(); + $dbAdapter = new DbAdapter(array( + 'driver' => 'Pdo', + 'dsn' => 'mysql:dbname=test;host=localhost', + 'username' => 'root', + 'password' => '', + )); + $inputFilter->add(array( 'name' => 'itemID', 'required' => true, @@ -46,8 +59,21 @@ public function getInputFilter() array('name' => 'Int'), ), )); - - + + $inputFilter->add(array( + 'name' => 'userID', + 'required' => true, + 'filters' => array( + array('name' => 'Int'), + ), + )); +// +//$adapter = new Zend\Db\Adapter\Adapter(array( +// 'driver' => 'Mysqli', +// 'database' => 'test', +// 'username' => 'root', +// 'password' => '' +// )); $inputFilter->add(array( 'name' => 'itemName', 'required' => true, @@ -64,16 +90,78 @@ public function getInputFilter() 'max' => 100, ), ), + //validate item input is not already there +// array( +// 'name' => 'DB\NoRecordExists', +// 'options' => array( +// 'table' => 'fridge_username', +// 'field' => 'itemName', +// 'adapter' => $dbAdapter, +//// 'exclude' => array( +//// 'field' => 'userID', +//// 'value' => $this->userID, +//// ), +// +// ), +// ), ), )); + // $select = new Zend\Db\Sql\Select(); +// $select->from('users') +// ->where->equalTo('id', $user_id) +// ->where->equalTo('email', $email); +// +// $validator = new Zend\Validator\Db\RecordExists($select); +// +// // We still need to set our database adapter +// $validator->setAdapter($dbAdapter); +// +// // Validation is then performed as usual +// if ($validator->isValid($username)) { +// // username appears to be valid +// } else { +// // username is invalid; print the reason +// $messages = $validator->getMessages(); +// foreach ($messages as $message) { +// echo "$message\n"; +// } +// } + - $inputFilter->add(array( + $inputFilter->add(array( 'name' => 'itemAmount', 'required' => true, 'filters' => array( array('name' => 'Int'), + ), + + )); + $inputFilter->add(array( + 'name' => 'amountType', + 'required' => true, + 'filters' => array( + array('name' => 'StripTags'), + array('name' => 'StringTrim'), + ), + 'validators' => array( + array( + 'name' => 'StringLength', + 'options' => array( + 'encoding' => 'UTF-8', + 'min' => 1, + 'max' => 100, + ), + ), ), )); +// +// $inputFilter->add(array( +// 'name' => 'itemAmount', +// 'required' => true, +// 'filters' => array( +// array('name' => 'Int'), +// ), +// )); $inputFilter->add(array( 'name' => 'expireDate', diff --git a/app/module/Fridge/src/Fridge/Model/FridgeItem.php b/app/module/Fridge/src/Fridge/Model/FridgeItem.php new file mode 100755 index 0000000..58b10c1 --- /dev/null +++ b/app/module/Fridge/src/Fridge/Model/FridgeItem.php @@ -0,0 +1,146 @@ +itemID = (isset($data['itemID'])) ? $data['itemID'] : null; + $this->userID = (isset($data['userID'])) ? $data['userID'] : null; + $this->itemName = (isset($data['itemName'])) ? $data['itemName'] : null; + $this->itemAmount = (isset($data['itemAmount'])) ? $data['itemAmount'] : null; + $this->amountType = (isset($data['amountType'])) ? $data['amountType'] : null; + $this->expireDate = (isset($data['expireDate'])) ? $data['expireDate'] : null; + } + + public function getArrayCopy() + { + return get_object_vars($this); + } + + // Add content to these methods: + public function setInputFilter(InputFilterInterface $inputFilter) + { + throw new \Exception("Not used"); + } + + public function getInputFilter() + { + if (!$this->inputFilter) { + $inputFilter = new InputFilter(); + + $dbAdapter = new DbAdapter(array( + 'driver' => 'Pdo', + 'dsn' => 'mysql:dbname=test;host=localhost', + 'username' => 'root', + 'password' => '', + )); + + $inputFilter->add(array( + 'name' => 'itemID', + 'required' => true, + 'filters' => array( + array('name' => 'Int'), + ), + )); + + $inputFilter->add(array( + 'name' => 'userID', + 'required' => true, + 'filters' => array( + array('name' => 'Int'), + ), + )); + + $inputFilter->add(array( + 'name' => 'itemName', + 'required' => true, + 'filters' => array( + array('name' => 'StripTags'), + array('name' => 'StringTrim'), + ), + 'validators' => array( + array( + 'name' => 'StringLength', + 'options' => array( + 'encoding' => 'UTF-8', + 'min' => 1, + 'max' => 100, + ), + ), + ), + )); + + + + $inputFilter->add(array( + 'name' => 'itemAmount', + 'required' => true, + 'filters' => array( + array('name' => 'Int'), + ), + + )); + $inputFilter->add(array( + 'name' => 'amountType', + 'required' => true, + 'filters' => array( + array('name' => 'StripTags'), + array('name' => 'StringTrim'), + ), + 'validators' => array( + array( + 'name' => 'StringLength', + 'options' => array( + 'encoding' => 'UTF-8', + 'min' => 1, + 'max' => 100, + ), + ), + ), + )); + + + $inputFilter->add(array( + 'name' => 'expireDate', + 'required' => true, + 'filters' => array( + array('name' => 'StripTags'), + array('name' => 'StringTrim'), + ), + 'validators' => array( + array( + 'name' => 'StringLength', + 'options' => array( + 'encoding' => 'UTF-8', + 'min' => 1, + 'max' => 100, + ), + ), + ), + )); + +// + $this->inputFilter = $inputFilter; + } + + return $this->inputFilter; + } + } \ No newline at end of file diff --git a/app/module/Fridge/src/Fridge/Model/FridgeTable.php b/app/module/Fridge/src/Fridge/Model/FridgeTable.php index 9bc5054..1c18353 100755 --- a/app/module/Fridge/src/Fridge/Model/FridgeTable.php +++ b/app/module/Fridge/src/Fridge/Model/FridgeTable.php @@ -3,19 +3,104 @@ namespace Fridge\Model; use Zend\Db\TableGateway\TableGateway; - + use Zend\Db\Sql\Select; + use Zend\Db\Sql\Sql; + use Zend\Db\Adapter\Adapter as DbAdapter; + use Zend\Mail\Protocol\Smtp\Auth\Login; + use Zend\Paginator\Paginator; + use Zend\Paginator\Adapter\DbSelect; + use Zend\Db\ResultSet\ResultSet; + use Users\Util\LoginSessionDelegate; + class FridgeTable { protected $tableGateway; + protected $userid;//to be set from session public function __construct(TableGateway $tableGateway) { + $lsd = new LoginSessionDelegate(); + $this->userid = $lsd->getCurrentUser()->id; $this->tableGateway = $tableGateway; } - public function fetchAll() + public function fetchAll($paginated=false) { - $resultSet = $this->tableGateway->select(); + + if ($paginated) { + // create a new Select object for the table fridge + $select = new Select('fridge'); + // create a new result set based on the fridge entity + $resultSetPrototype = new ResultSet(); + $resultSetPrototype->setArrayObjectPrototype(new Fridge()); + // create a new pagination adapter object + $paginatorAdapter = new DbSelect( + // our configured select object + $select, + // the adapter to run it against + $this->tableGateway->getAdapter(), + // the result set to hydrate + $resultSetPrototype + ); + $paginator = new Paginator($paginatorAdapter); + + return $paginator; + } + + //need to select on userid + $resultSet = $this->tableGateway->select(array('userID' => $this->userid)); + return $resultSet; + } + +// public function fetchAllNames() +// { +// $dbAdapter = new DbAdapter(array( +// 'driver' => 'Pdo', +// 'dsn' => 'mysql:dbname=test;host=localhost', +// 'username' => 'root', +// 'password' => '', +// )); +// +// $sql = new Sql($dbAdapter); +// $select = $sql->select(); +// $select->from('fridge') +// ->columns(array('itemName')) +// ->where(array('userID = ?' => $this->userid)); +// +// $selectString = $sql->getSqlStringForSqlObject($select); +// $results = $dbAdapter->query($selectString, $dbAdapter::QUERY_MODE_EXECUTE); +// +// return $results; +// +// //need to select on userid +//// $resultSet = $this->tableGateway->select(array('itemName','userID = ?' => $this->userid)); +//// return $resultSet; +// } + + public function fetchSearch(SearchFridge $sFridge, $paginated=false) + { + if ($paginated) { + // create a new Select object for the table fridge + $select = new Select('fridge'); + //$select->where(array('userID' => $this->userid, 'itemName' => $sFridge->searchValue)); + // create a new result set based on the fridge entity + $resultSetPrototype = new ResultSet(); + $resultSetPrototype->setArrayObjectPrototype(new Fridge()); + // create a new pagination adapter object + $paginatorAdapter = new DbSelect( + // our configured select object + //$select, + $select->where(array('userID' => $this->userid, 'itemName' => $sFridge->searchValue)), + // the adapter to run it against + $this->tableGateway->getAdapter(), + // the result set to hydrate + $resultSetPrototype + ); + $paginator = new Paginator($paginatorAdapter); + return $paginator; + } + + $resultSet = $this->tableGateway->select(array('userID' => $this->userid, 'itemName' => $sFridge->searchValue)); return $resultSet; } @@ -31,27 +116,43 @@ public function getFridge($id) } - public function saveFridge(Fridge $fridge) + public function saveFridge(FridgeItem $fridge) { $data = array( 'itemName' => $fridge->itemName, + 'userID' => $this->userid, 'itemAmount' => $fridge->itemAmount, + 'amountType' => $fridge->amountType, 'expireDate' => $fridge->expireDate, ); + $this->tableGateway->insert($data); + } - $id = (int) $fridge->itemID; - if ($id == 0) { - $this->tableGateway->insert($data); - } else { - if ($this->getFridge($id)) { + public function addUpdateFridge(Fridge $fridge){ + $id = (int) $fridge->itemID; + if ($this->getFridge($id)) { + $data = array( + 'itemAmount' => $fridge->itemAmount + 1, + ); $this->tableGateway->update($data, array('itemID' => $id)); } else { throw new \Exception('fridge id does not exist'); } - } - } - + } + + public function minusUpdateFridge(Fridge $fridge){ + $id = (int) $fridge->itemID; + $val = $fridge->itemAmount - 1; + if ($this->getFridge($id)) { + $data = array( + 'itemAmount' => ($val >= 0 ? $val : 0), + ); + $this->tableGateway->update($data, array('itemID' => $id)); + } else { + throw new \Exception('fridge id does not exist'); + } + } // public function deleteAlbum($id) // { // $this->tableGateway->delete(array('id' => (int) $id)); diff --git a/app/module/Fridge/src/Fridge/Model/SearchFridge.php b/app/module/Fridge/src/Fridge/Model/SearchFridge.php new file mode 100755 index 0000000..01c414f --- /dev/null +++ b/app/module/Fridge/src/Fridge/Model/SearchFridge.php @@ -0,0 +1,142 @@ +itemID = (isset($data['itemID'])) ? $data['itemID'] : null; + $this->userID = (isset($data['userID'])) ? $data['userID'] : null; + $this->searchValue = (isset($data['searchValue'])) ? $data['searchValue'] : null; + //$this->itemAmount = (isset($data['itemAmount'])) ? $data['itemAmount'] : null; + //$this->amountType = (isset($data['amountType'])) ? $data['amountType'] : null; + //$this->expireDate = (isset($data['expireDate'])) ? $data['expireDate'] : null; + } + + public function getArrayCopy() + { + return get_object_vars($this); + } + + // Add content to these methods: + public function setInputFilter(InputFilterInterface $inputFilter) + { + throw new \Exception("Not used"); + } + + public function getInputFilter() + { + if (!$this->inputFilter) { + $inputFilter = new InputFilter(); + +// $inputFilter->add(array( +// 'name' => 'searchValue', +// 'required' => true, +// 'filters' => array( +// array('name' => 'Int'), +// ), +// )); + + $inputFilter->add(array( + 'name' => 'userID', + 'required' => true, + 'filters' => array( + array('name' => 'Int'), + ), + )); + + + $inputFilter->add(array( + 'name' => 'searchValue', + 'required' => true, + 'filters' => array( + array('name' => 'StripTags'), + array('name' => 'StringTrim'), + ), + 'validators' => array( + array( + 'name' => 'StringLength', + 'options' => array( + 'encoding' => 'UTF-8', + 'min' => 1, + 'max' => 100, + ), + ), + ), + )); +// $inputFilter->add(array( +// 'name' => 'itemAmount', +// 'required' => true, +// 'filters' => array( +// array('name' => 'Int'), +// ), +// +// )); +// $inputFilter->add(array( +// 'name' => 'amountType', +// 'required' => true, +// 'filters' => array( +// array('name' => 'StripTags'), +// array('name' => 'StringTrim'), +// ), +// 'validators' => array( +// array( +// 'name' => 'StringLength', +// 'options' => array( +// 'encoding' => 'UTF-8', +// 'min' => 1, +// 'max' => 100, +// ), +// ), +// ), +// )); +//// +//// $inputFilter->add(array( +//// 'name' => 'itemAmount', +//// 'required' => true, +//// 'filters' => array( +//// array('name' => 'Int'), +//// ), +//// )); +// +// $inputFilter->add(array( +// 'name' => 'expireDate', +// 'required' => true, +// 'filters' => array( +// array('name' => 'StripTags'), +// array('name' => 'StringTrim'), +// ), +// 'validators' => array( +// array( +// 'name' => 'StringLength', +// 'options' => array( +// 'encoding' => 'UTF-8', +// 'min' => 1, +// 'max' => 100, +// ), +// ), +// ), +// )); +// +//// + $this->inputFilter = $inputFilter; + } + + return $this->inputFilter; + } + } \ No newline at end of file diff --git a/app/module/Fridge/view/fridge/fridge/index.bak.phtml b/app/module/Fridge/view/fridge/fridge/index.bak.phtml new file mode 100755 index 0000000..ccb2bf8 --- /dev/null +++ b/app/module/Fridge/view/fridge/fridge/index.bak.phtml @@ -0,0 +1,210 @@ +headTitle($title); +?> +

    escapeHtml($title); ?>

    + + +
    +
    + +setAttribute('action', $this->url('fridge', array('action' => 'index'))); + $searchForm->prepare(); + + echo $this->form()->openTag($searchForm); + ?> +
    +
    +

    Find in Fridge

    +
    +
    + formHidden($searchForm->get('userID')); ?> + formElement($searchForm->get('searchValue')); ?> + +
    +
    + formElement($searchForm->get('submitSearch')); ?> + +
    +
    +
    +
    + +
    +
    +
    +
    +

    + Items in your Fridge +
    formElement($searchForm->get('submitAll')); ?>
    +

    + +
    + form()->closeTag(); ?> +
    +
      + + setAttribute('action', $this->url('fridge', array('action' => 'index'))); + $updateForm->prepare(); + + echo $this->form()->openTag($updateForm); + ?> + + formHidden($addForm->get('itemID')); +// $itemID = $this->formHidden($addForm->get('itemID')); +// $itemID->setAttribute(array('value' => '2')); +// echo $itemID; +// + echo $this->formHidden($updateForm->get('itemID')); + echo $this->formHidden($updateForm->get('userID')); + echo $this->formHidden($updateForm->get('itemName')); + echo $this->formHidden($updateForm->get('itemAmount')); + echo $this->formHidden($updateForm->get('amountType')); + echo $this->formHidden($updateForm->get('expireDate')); + + echo $this->formElementErrors($updateForm->get('itemID')); + echo $this->formElementErrors($updateForm->get('itemName')); + echo $this->formElementErrors($updateForm->get('itemAmount')); + echo $this->formElementErrors($updateForm->get('amountType')); + echo $this->formElementErrors($updateForm->get('expireDate')); + echo $this->formElementErrors($updateForm->get('userID')); + ?> + + + + + +
    • +
      + escapeHtml($item->itemID); ?> + + escapeHtml($item->itemName); ?> + +
      + escapeHtml($item->itemAmount) . " " . $this->escapeHtml($item->amountType); ?> + + +
      + formElement($updateForm->get('submitPlus')); ?> + formElement($updateForm->get('submitMinus')); ?> + formElement($updateForm->get('submitRemove')); ?> + +
      + + escapeHtml($item->expireDate); ?> +
      +
      +
    • + form()->closeTag(); ?> + + +
    +
    +
    +
    +
    + setAttribute('action', $this->url('fridge', array('action' => 'index'))); + $addForm->prepare(); + + echo $this->form()->openTag($addForm); + echo $this->formHidden($addForm->get('userID')); + echo $this->formHidden($addForm->get('itemID')); + ?> +
    +
    +

    Add Item to the Fridge

    +
    +
    +
      +
    • +
      + Item Name +
      + formElement($addForm->get('itemName')); ?> +
      +
      +
      formElementErrors($addForm->get('itemName'), array('class' => 'help-inline')); + if ($itemNameErr != ''): + ?> +
      +
      +
    • + +
    • Time (estimate) +
        +
      • +
        + Amount +
        + formElement($addForm->get('itemAmount')); ?> + formElement($addForm->get('amountType')); ?> +
        + formElementErrors($addForm->get('itemAmount'), array('class' => 'help-inline')); + if ($itemAmountErr != ''): + ?> +
        + +
        +
      • +
      • +
        + Expire Date +
        + formElement($addForm->get('expireDate')); ?> +
        + formElementErrors($addForm->get('expireDate'), array('class' => 'help-inline')); + if ($expireDateErr != ''): + ?> +
        + +
        +
      • +
      +
    • +
    +
    formSubmit($addForm->get('submitAdd')); ?>
    +
    +
    + form()->closeTag(); ?> +
    +
    + \ No newline at end of file diff --git a/app/module/Fridge/view/fridge/fridge/index.phtml b/app/module/Fridge/view/fridge/fridge/index.phtml index 81bbc58..e664cfe 100755 --- a/app/module/Fridge/view/fridge/fridge/index.phtml +++ b/app/module/Fridge/view/fridge/fridge/index.phtml @@ -2,40 +2,145 @@ $title = 'Fridge'; $this->headTitle($title); ?> -

    My Fridge

    +

    escapeHtml($title); ?>

    +
    -
    sorting options
    +
    + +setAttribute('action', $this->url('fridge', array('action' => 'index'))); + $searchForm->prepare(); + + echo $this->form()->openTag($searchForm); + ?> +
    +
    +

    Find in Fridge

    +
    +
    + formHidden($searchForm->get('userID')); ?> + formElement($searchForm->get('searchValue')); ?> + +
    +
    + formElement($searchForm->get('submitSearch')); ?> + +
    +
    +
    +
    + +
    -

    Items in your Fridge

    +

    + Items in your Fridge +
    formElement($searchForm->get('submitAll')); ?>
    +

    +
    + form()->closeTag(); ?>
      - + paginator as $item): ?> + setAttribute('action', $this->url('fridge', array('action' => 'index'))); + $updateForm->prepare(); + + echo $this->form()->openTag($updateForm); + ?> + + formHidden($addForm->get('itemID')); +// $itemID = $this->formHidden($addForm->get('itemID')); +// $itemID->setAttribute(array('value' => '2')); +// echo $itemID; +// + echo $this->formHidden($updateForm->get('itemID')); + echo $this->formHidden($updateForm->get('userID')); + echo $this->formHidden($updateForm->get('itemName')); + echo $this->formHidden($updateForm->get('itemAmount')); + echo $this->formHidden($updateForm->get('amountType')); + echo $this->formHidden($updateForm->get('expireDate')); + + echo $this->formElementErrors($updateForm->get('itemID')); + echo $this->formElementErrors($updateForm->get('itemName')); + echo $this->formElementErrors($updateForm->get('itemAmount')); + echo $this->formElementErrors($updateForm->get('amountType')); + echo $this->formElementErrors($updateForm->get('expireDate')); + echo $this->formElementErrors($updateForm->get('userID')); + ?> + + + + +
    • - escapeHtml($item->itemID); ?> + escapeHtml($item->itemID); ?> + escapeHtml($item->itemName); ?> +
      - escapeHtml($item->itemAmount); ?> | escapeHtml($item->expireDate); ?> + escapeHtml($item->itemAmount) . " " . $this->escapeHtml($item->amountType); ?> + + +
      + formElement($updateForm->get('submitPlus')); ?> + formElement($updateForm->get('submitMinus')); ?> + formElement($updateForm->get('submitRemove')); ?> + +
      + + escapeHtml($item->expireDate); ?>
    • + form()->closeTag(); ?> -
    + + paginationControl( + // the paginator object + $this->paginator, + // the scrolling style + 'sliding', + // the partial to use to render the control + array('partial/paginator.phtml', 'Fridge'), + // the route to link to when a user clicks a control link + array( + 'route' => 'fridge' + ) + ); + ?> + +
    setAttribute('action', $this->url('fridge', array('action' => 'add'))); - $form->prepare(); - - echo $this->form()->openTag($form); + $addForm->setAttribute('action', $this->url('fridge', array('action' => 'index'))); + $addForm->prepare(); - echo $this->formHidden($form->get('itemID')); + echo $this->form()->openTag($addForm); + echo $this->formHidden($addForm->get('userID')); + echo $this->formHidden($addForm->get('itemID')); ?>
    @@ -47,35 +152,79 @@ $this->headTitle($title);
    Item Name
    - formElement($form->get('itemName')); ?> - formElementErrors($form->get('itemName')); ?> + formElement($addForm->get('itemName')); ?>
    +
    formElementErrors($addForm->get('itemName'), array('class' => 'help-inline')); + if ($itemNameErr != ''): + ?> +
    +
    +
  • Time (estimate)
    • Amount
      - formElement($form->get('itemAmount')); ?> + formElement($addForm->get('itemAmount')); ?> + formElement($addForm->get('amountType')); ?>
      + formElementErrors($addForm->get('itemAmount'), array('class' => 'help-inline')); + if ($itemAmountErr != ''): + ?> +
      +
    • Expire Date
      - formElement($form->get('expireDate')); ?> + formElement($addForm->get('expireDate')); ?>
      + formElementErrors($addForm->get('expireDate'), array('class' => 'help-inline')); + if ($expireDateErr != ''): + ?> +
      +
  • -
    formSubmit($form->get('submitAdd'));?>
    +
    + + formSubmit($addForm->get('submitAdd')); ?> +
    - form()->closeTag(); ?> + form()->closeTag(); ?>
    + \ No newline at end of file diff --git a/app/module/Fridge/view/fridge/fridge/index~old.phtml b/app/module/Fridge/view/fridge/fridge/index~old.phtml new file mode 100755 index 0000000..ce50a5a --- /dev/null +++ b/app/module/Fridge/view/fridge/fridge/index~old.phtml @@ -0,0 +1,183 @@ +headTitle($title); +?> +

    escapeHtml($title); ?>

    +escapeHtml($message); ?> + +
    +
    +
    +
    +

    Sort Options

    +
    +
    +
    sort1
    +
    sort2
    +
    sort3
    +
    +
    +
    +
    +
    +

    Find in Fridge

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

    Items in your Fridge

    +
    +
    +
      + + setAttribute('action', $this->url('fridge', array('action' => 'index'))); + $updateForm->prepare(); + + echo $this->form()->openTag($updateForm); +// //echo $this->formHidden($addForm->get('itemID')); +// $itemID = $this->formHidden($addForm->get('itemID')); +// $itemID->setAttribute(array('value' => '2')); +// echo $itemID; +// +// echo $this->formHidden($addForm->get('itemName')); +// echo $this->formHidden($addForm->get('itemAmount')); +// echo $this->formHidden($addForm->get('amountType')); +// echo $this->formHidden($addForm->get('expireDate')); + echo $this->formElementErrors($addForm->get('itemID')); + echo $this->formElementErrors($addForm->get('itemName')); + echo $this->formElementErrors($addForm->get('itemAmount')); + echo $this->formElementErrors($addForm->get('amountType')); + echo $this->formElementErrors($addForm->get('expireDate')); + ?> + + + + + +
    • +
      + escapeHtml($item->itemID); ?> + + escapeHtml($item->itemName); ?> + +
      + escapeHtml($item->itemAmount) . " " . $this->escapeHtml($item->amountType); ?> + + +
      + formElement($updateForm->get('submitPlus')); ?> + formElement($updateForm->get('submitMinus')); ?> + formElement($updateForm->get('submitRemove')); ?> +
      + + escapeHtml($item->expireDate); ?> +
      +
      +
    • + form()->closeTag(); ?> + +
    +
    +
    +
    +
    + setAttribute('action', $this->url('fridge', array('action' => 'index'))); + $addForm->prepare(); + + echo $this->form()->openTag($addForm); + + echo $this->formHidden($addForm->get('itemID')); + ?> +
    +
    +

    Add Item to the Fridge

    +
    +
    +
      +
    • +
      + Item Name +
      + formElement($addForm->get('itemName')); ?> +
      +
      + formElementErrors($addForm->get('itemName'), array('class' => 'help-inline')); + if ($itemNameErr != ''): + ?> +
      + +
    • + +
    • Time (estimate) +
        +
      • +
        + Amount +
        + formElement($addForm->get('itemAmount')); ?> + formElement($addForm->get('amountType')); ?> +
        + formElementErrors($addForm->get('itemAmount'), array('class' => 'help-inline')); + if ($itemAmountErr != ''): + ?> +
        + +
        +
      • +
      • +
        + Expire Date +
        + formElement($addForm->get('expireDate')); ?> +
        + formElementErrors($addForm->get('expireDate'), array('class' => 'help-inline')); + if ($expireDateErr != ''): + ?> +
        + +
        +
      • +
      +
    • +
    +
    formSubmit($addForm->get('submitAdd')); ?>
    +
    +
    + form()->closeTag(); ?> +
    +
    + \ No newline at end of file diff --git a/app/module/FridgeOLD/FridgeSchema.sql b/app/module/FridgeOLD/FridgeSchema.sql new file mode 100755 index 0000000..b1c7386 --- /dev/null +++ b/app/module/FridgeOLD/FridgeSchema.sql @@ -0,0 +1,8 @@ +create table fridge_username( + itemID int auto_increment, + itemName varchar(100) NOT NULL, + itemAmount int NOT NULL, + expireDate date NOT NULL, + + PRIMARY KEY(itemID) +) diff --git a/app/module/FridgeOLD/Module.php b/app/module/FridgeOLD/Module.php new file mode 100755 index 0000000..5f87f96 --- /dev/null +++ b/app/module/FridgeOLD/Module.php @@ -0,0 +1,50 @@ + array( + __DIR__ . '/autoload_classmap.php', + ), + 'Zend\Loader\StandardAutoloader' => array( + 'namespaces' => array( + __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__, + ), + ), + ); + } + + public function getConfig() + { + return include __DIR__ . '/config/module.config.php'; + } + public function getServiceConfig() + { + return array( + 'factories' => array( + 'Fridge\Model\FridgeTable' => function($sm) { + $tableGateway = $sm->get('FridgeTableGateway'); + $table = new FridgeTable($tableGateway); + return $table; + }, + 'FridgeTableGateway' => function ($sm) { + $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter'); + $resultSetPrototype = new ResultSet(); + $resultSetPrototype->setArrayObjectPrototype(new Fridge()); + return new TableGateway('fridge_username', $dbAdapter, null, $resultSetPrototype); + }, + ), + ); + } + } + diff --git a/app/module/FridgeOLD/autoload_classmap.php b/app/module/FridgeOLD/autoload_classmap.php new file mode 100755 index 0000000..052c5f3 --- /dev/null +++ b/app/module/FridgeOLD/autoload_classmap.php @@ -0,0 +1,4 @@ + array( + 'invokables' => array( + 'Fridge\Controller\Fridge' => 'Fridge\Controller\FridgeController', + ), + ), + 'router' => array( + 'routes' => array( + 'fridge' => array( + 'type' => 'segment', + 'options' => array( + 'route' => '/fridge[/][:action][/:id]', + 'constraints' => array( + 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', + 'id' => '[0-9]+', + ), + 'defaults' => array( + 'controller' => 'Fridge\Controller\Fridge', + 'action' => 'index', + ), + ), + ), + ), + ), + 'view_manager' => array( + 'template_path_stack' => array( + 'fridge' => __DIR__ . '/../view', + ), + ), + ); + diff --git a/app/module/FridgeOLD/src/Fridge/Controller/FridgeController.php b/app/module/FridgeOLD/src/Fridge/Controller/FridgeController.php new file mode 100755 index 0000000..5c61485 --- /dev/null +++ b/app/module/FridgeOLD/src/Fridge/Controller/FridgeController.php @@ -0,0 +1,86 @@ +addAction(); + $id = (int) $this->params()->fromRoute('id', 0); + return new ViewModel(array( + 'fridgeItems' => $this->getFridgeTable()->fetchAll(), + 'form' => $this->addAction(), + )); + } + + public function addAction() + { + $form = new AddFridgeForm(); + + $request = $this->getRequest(); + if ($request->isPost()) { + $fridge = new Fridge(); + + $form->setInputFilter($fridge->getInputFilter()); + $form->setData($request->getPost()); + + if ($form->isValid()) { + $fridge->exchangeArray($form->getData()); + $this->getFridgeTable()->saveFridge($fridge); + + // Redirect to list of albums + return $this->redirect()->toRoute('fridge'); + } +// else +// { +// return new ViewModel(array( +// 'fridgeItems' => $this->getFridgeTable()->fetchAll(), +// 'form' => $form, +// )); +// } + + } + return $form; + } + + public function updateAction() + { + $form = new UpdateFridgeForm(); + + $request = $this->getRequest(); + if ($request->isPost()) { + $fridge = new Fridge(); + + $form->setInputFilter($fridge->getInputFilter()); + $form->setData($request->getPost()); + + if ($form->isValid()) { + $fridge->exchangeArray($form->getData()); + $this->getFridgeTable()->saveFridge($fridge); + + // Redirect to list of albums + //return $this->redirect()->toRoute('fridge'); + } + + return $this->redirect()->toRoute('fridge'); + } + return $form; + } + + public function getFridgeTable() + { + if (!$this->fridgeTable) { + $sm = $this->getServiceLocator(); + $this->fridgeTable = $sm->get('Fridge\Model\FridgeTable'); + } + return $this->fridgeTable; + } +} diff --git a/app/module/FridgeOLD/src/Fridge/Form/AddFridgeForm.php b/app/module/FridgeOLD/src/Fridge/Form/AddFridgeForm.php new file mode 100755 index 0000000..efd4d50 --- /dev/null +++ b/app/module/FridgeOLD/src/Fridge/Form/AddFridgeForm.php @@ -0,0 +1,49 @@ +add(array( + 'name' => 'itemID', + 'type' => 'Hidden', + )); + $this->add(array( + 'name' => 'itemName', + 'type' => 'Text', + 'options' => array( + 'label' => 'ItemName', + ), + )); + $this->add(array( + 'name' => 'itemAmount', + 'type' => 'Text', + 'options' => array( + 'label' => 'ItemAmount', + ), + )); + $this->add(array( + 'name' => 'expireDate', + 'type' => 'Date', + 'options' => array( + 'label' => 'ExpireDate', + ), + )); + $this->add(array( + 'name' => 'submitAdd', + 'type' => 'Submit', + 'attributes' => array( + 'value' => 'Add', + 'id' => 'submitbutton', + ), + )); + + } + } diff --git a/app/module/FridgeOLD/src/Fridge/Form/UpdateFridgeForm.php b/app/module/FridgeOLD/src/Fridge/Form/UpdateFridgeForm.php new file mode 100755 index 0000000..61e02de --- /dev/null +++ b/app/module/FridgeOLD/src/Fridge/Form/UpdateFridgeForm.php @@ -0,0 +1,49 @@ +add(array( + 'name' => 'itemID', + 'type' => 'Hidden', + )); + $this->add(array( + 'name' => 'itemName', + 'type' => 'Text', + 'options' => array( + 'label' => 'ItemName', + ), + )); + $this->add(array( + 'name' => 'itemAmount', + 'type' => 'Text', + 'options' => array( + 'label' => 'ItemAmount', + ), + )); + $this->add(array( + 'name' => 'expireDate', + 'type' => 'Date', + 'options' => array( + 'label' => 'ExpireDate', + ), + )); + + $this->add(array( + 'name' => 'submitUp', + 'type' => 'Submit', + 'attributes' => array( + 'value' => 'Update', + 'id' => 'submitbutton', + ), + )); + } + } diff --git a/app/module/FridgeOLD/src/Fridge/Model/Fridge.php b/app/module/FridgeOLD/src/Fridge/Model/Fridge.php new file mode 100755 index 0000000..9975c58 --- /dev/null +++ b/app/module/FridgeOLD/src/Fridge/Model/Fridge.php @@ -0,0 +1,103 @@ +itemID = (isset($data['itemID'])) ? $data['itemID'] : null; + $this->itemName = (isset($data['itemName'])) ? $data['itemName'] : null; + $this->itemAmount = (isset($data['itemAmount'])) ? $data['itemAmount'] : null; + $this->expireDate = (isset($data['expireDate'])) ? $data['expireDate'] : null; + } + + public function getArrayCopy() + { + return get_object_vars($this); + } + + // Add content to these methods: + public function setInputFilter(InputFilterInterface $inputFilter) + { + throw new \Exception("Not used"); + } + + public function getInputFilter() + { + if (!$this->inputFilter) { + $inputFilter = new InputFilter(); + + $inputFilter->add(array( + 'name' => 'itemID', + 'required' => true, + 'filters' => array( + array('name' => 'Int'), + ), + )); + + + $inputFilter->add(array( + 'name' => 'itemName', + 'required' => true, + 'filters' => array( + array('name' => 'StripTags'), + array('name' => 'StringTrim'), + ), + 'validators' => array( + array( + 'name' => 'StringLength', + 'options' => array( + 'encoding' => 'UTF-8', + 'min' => 1, + 'max' => 100, + ), + ), + ), + )); + + $inputFilter->add(array( + 'name' => 'itemAmount', + 'required' => true, + 'filters' => array( + array('name' => 'Int'), + ), + )); + + $inputFilter->add(array( + 'name' => 'expireDate', + 'required' => true, + 'filters' => array( + array('name' => 'StripTags'), + array('name' => 'StringTrim'), + ), + 'validators' => array( + array( + 'name' => 'StringLength', + 'options' => array( + 'encoding' => 'UTF-8', + 'min' => 1, + 'max' => 100, + ), + ), + ), + )); + +// + $this->inputFilter = $inputFilter; + } + + return $this->inputFilter; + } + } \ No newline at end of file diff --git a/app/module/FridgeOLD/src/Fridge/Model/FridgeTable.php b/app/module/FridgeOLD/src/Fridge/Model/FridgeTable.php new file mode 100755 index 0000000..9bc5054 --- /dev/null +++ b/app/module/FridgeOLD/src/Fridge/Model/FridgeTable.php @@ -0,0 +1,60 @@ +tableGateway = $tableGateway; + } + + public function fetchAll() + { + $resultSet = $this->tableGateway->select(); + return $resultSet; + } + + public function getFridge($id) + { + $id = (int) $id; + $rowset = $this->tableGateway->select(array('itemID' => $id)); + $row = $rowset->current(); + if (!$row) { + throw new \Exception("Could not find row $id"); + } + return $row; + } + + + public function saveFridge(Fridge $fridge) + { + $data = array( + 'itemName' => $fridge->itemName, + 'itemAmount' => $fridge->itemAmount, + 'expireDate' => $fridge->expireDate, + + ); + + $id = (int) $fridge->itemID; + if ($id == 0) { + $this->tableGateway->insert($data); + } else { + if ($this->getFridge($id)) { + $this->tableGateway->update($data, array('itemID' => $id)); + } else { + throw new \Exception('fridge id does not exist'); + } + } + } + +// public function deleteAlbum($id) +// { +// $this->tableGateway->delete(array('id' => (int) $id)); +// } + } + diff --git a/app/module/Fridge/view/fridge/fridge/add.phtml b/app/module/FridgeOLD/view/fridge/fridge/add.phtml similarity index 100% rename from app/module/Fridge/view/fridge/fridge/add.phtml rename to app/module/FridgeOLD/view/fridge/fridge/add.phtml diff --git a/app/module/Fridge/view/fridge/fridge/delete.phtml b/app/module/FridgeOLD/view/fridge/fridge/delete.phtml similarity index 100% rename from app/module/Fridge/view/fridge/fridge/delete.phtml rename to app/module/FridgeOLD/view/fridge/fridge/delete.phtml diff --git a/app/module/Fridge/view/fridge/fridge/edit.phtml b/app/module/FridgeOLD/view/fridge/fridge/edit.phtml similarity index 100% rename from app/module/Fridge/view/fridge/fridge/edit.phtml rename to app/module/FridgeOLD/view/fridge/fridge/edit.phtml diff --git a/app/module/FridgeOLD/view/fridge/fridge/index.phtml b/app/module/FridgeOLD/view/fridge/fridge/index.phtml new file mode 100755 index 0000000..81bbc58 --- /dev/null +++ b/app/module/FridgeOLD/view/fridge/fridge/index.phtml @@ -0,0 +1,81 @@ +headTitle($title); +?> +

    My Fridge

    + +
    +
    sorting options
    +
    +
    +
    +

    Items in your Fridge

    +
    +
    +
      + +
    • +
      + escapeHtml($item->itemID); ?> + escapeHtml($item->itemName); ?> +
      + escapeHtml($item->itemAmount); ?> | escapeHtml($item->expireDate); ?> +
      +
      +
    • + +
    +
    +
    +
    +
    + setAttribute('action', $this->url('fridge', array('action' => 'add'))); + $form->prepare(); + + echo $this->form()->openTag($form); + + echo $this->formHidden($form->get('itemID')); + ?> +
    +
    +

    Add Item to the Fridge

    +
    +
    +
      +
    • +
      + Item Name +
      + formElement($form->get('itemName')); ?> + formElementErrors($form->get('itemName')); ?> +
      +
      +
    • +
    • Time (estimate) +
        +
      • +
        + Amount +
        + formElement($form->get('itemAmount')); ?> +
        +
        +
      • +
      • +
        + Expire Date +
        + formElement($form->get('expireDate')); ?> +
        +
        +
      • +
      +
    • +
    +
    formSubmit($form->get('submitAdd'));?>
    +
    +
    + form()->closeTag(); ?> +
    +
    diff --git a/app/module/Fridge/view/fridge/fridge/select.phtml b/app/module/FridgeOLD/view/fridge/fridge/select.phtml similarity index 100% rename from app/module/Fridge/view/fridge/fridge/select.phtml rename to app/module/FridgeOLD/view/fridge/fridge/select.phtml diff --git a/app/module/Recipe/CookbookSchema.sql b/app/module/Recipe/CookbookSchema.sql new file mode 100755 index 0000000..7bff19d --- /dev/null +++ b/app/module/Recipe/CookbookSchema.sql @@ -0,0 +1,14 @@ +create table cookbook( + + userID int NOT NULL, + recipeID int NOT NULL, + + PRIMARY KEY(userID, recipeID) +) + + +SELECT * +FROM recipe +INNER JOIN cookbook +ON recipe.recID=cookbook.recipeID +WHERE cookbook.userID = 0; \ No newline at end of file diff --git a/app/module/Recipe/Module.php b/app/module/Recipe/Module.php index ab9c12b..cb2395c 100755 --- a/app/module/Recipe/Module.php +++ b/app/module/Recipe/Module.php @@ -43,6 +43,7 @@ public function getServiceConfig() $resultSetPrototype->setArrayObjectPrototype(new Recipe()); return new TableGateway('recipe', $dbAdapter, null, $resultSetPrototype); }, + ), ); } diff --git a/app/module/Recipe/config/module.config.php b/app/module/Recipe/config/module.config.php index 78a6a2e..8efabe4 100755 --- a/app/module/Recipe/config/module.config.php +++ b/app/module/Recipe/config/module.config.php @@ -27,6 +27,10 @@ 'template_path_stack' => array( 'recipe' => __DIR__ . '/../view', ), + 'strategies' => array( + 'ViewJsonStrategy', + ), ), + ); diff --git a/app/module/Recipe/src/Recipe/Controller/RecipeController.php b/app/module/Recipe/src/Recipe/Controller/RecipeController.php index 7885fd2..9d2ac6c 100755 --- a/app/module/Recipe/src/Recipe/Controller/RecipeController.php +++ b/app/module/Recipe/src/Recipe/Controller/RecipeController.php @@ -4,7 +4,10 @@ use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; use Recipe\Model\Recipe; + use Recipe\Model\RecipeAdd; use Recipe\Form\RecipeForm; + use Recipe\Form\RecipeAddForm; + use Recipe\Form\ShowbookForm; class RecipeController extends AbstractActionController { @@ -12,8 +15,14 @@ class RecipeController extends AbstractActionController public function indexAction() { +// $post = $_POST; +// foreach($post as $key => $value){ +// echo $key." : ".$value."
    "; +// } + return new ViewModel(array( - 'recipes' => $this->getRecipeTable()->fetchAll(), + 'bookForm' => $this->saveToCookbook(), + 'recipes' => (isset($_POST['showBook'])) ? $this->getRecipeTable()->fetchCookbook() : $this->getRecipeTable()->fetchAll(), )); } @@ -41,8 +50,10 @@ public function addAction() } return array('form' => $form); } + + - public function getRecipeTable() + public function getRecipeTable() { if (!$this->recipeTable) { $sm = $this->getServiceLocator(); @@ -50,4 +61,34 @@ public function getRecipeTable() } return $this->recipeTable; } + +// public function showCookbook(){ +// +// 'recipes' => $this->getRecipeTable()->fetchCookbook(), +// +// } +// + public function saveToCookbook(){ + $form = new RecipeAddForm(); + + $request = $this->getRequest(); + if ($request->isPost()) { + $recipe = new RecipeAdd(); + + //check image if null do nothing else send to file upload + + $form->setInputFilter($recipe->getInputFilter()); + $form->setData($request->getPost()); + + if ($form->isValid()) { + $recipe->exchangeArray($form->getData()); + $this->getRecipeTable()->saveToCookbook($recipe); + + // Redirect to list of albums + //return $this->redirect()->toRoute('recipe'); + } + } + return $form; + + } } diff --git a/app/module/Recipe/src/Recipe/Form/RecipeAddForm.php b/app/module/Recipe/src/Recipe/Form/RecipeAddForm.php new file mode 100755 index 0000000..9c09f65 --- /dev/null +++ b/app/module/Recipe/src/Recipe/Form/RecipeAddForm.php @@ -0,0 +1,29 @@ +add(array( + 'name' => 'recID', + 'type' => 'Hidden', + )); + + + $this->add(array( + 'name' => 'submitBook', + 'type' => 'Submit', + 'attributes' => array( + 'value' => 'Add to Cookbook', + 'id' => 'submitbutton', + ), + )); + } + } diff --git a/app/module/Recipe/src/Recipe/Form/ShowbookForm.php b/app/module/Recipe/src/Recipe/Form/ShowbookForm.php new file mode 100755 index 0000000..c893c27 --- /dev/null +++ b/app/module/Recipe/src/Recipe/Form/ShowbookForm.php @@ -0,0 +1,23 @@ +add(array( + 'name' => 'submitBook', + 'type' => 'Submit', + 'attributes' => array( + 'value' => 'Add to Cookbook', + 'id' => 'submitbutton', + ), + )); + } + } diff --git a/app/module/Recipe/src/Recipe/Model/Recipe.php b/app/module/Recipe/src/Recipe/Model/Recipe.php index d331fd7..0d43756 100755 --- a/app/module/Recipe/src/Recipe/Model/Recipe.php +++ b/app/module/Recipe/src/Recipe/Model/Recipe.php @@ -26,7 +26,7 @@ class Recipe implements InputFilterAwareInterface public function exchangeArray($data) { - $this->rec_Id = (isset($data['recID'])) ? $data['recID'] : null; + $this->recID = (isset($data['recID'])) ? $data['recID'] : null; $this->recName = (isset($data['recName'])) ? $data['recName'] : null; $this->prepTime = (isset($data['prepTime'])) ? $data['prepTime'] : null; $this->cookTime = (isset($data['prepTime'])) ? $data['prepTime'] : null; diff --git a/app/module/Recipe/src/Recipe/Model/RecipeAdd.php b/app/module/Recipe/src/Recipe/Model/RecipeAdd.php new file mode 100755 index 0000000..8f09df8 --- /dev/null +++ b/app/module/Recipe/src/Recipe/Model/RecipeAdd.php @@ -0,0 +1,49 @@ +recID = (isset($data['recID'])) ? $data['recID'] : null; + } + + public function getArrayCopy() + { + return get_object_vars($this); + } + + // Add content to these methods: + public function setInputFilter(InputFilterInterface $inputFilter) + { + throw new \Exception("Not used"); + } + + public function getInputFilter() + { + if (!$this->inputFilter) { + $inputFilter = new InputFilter(); + + $inputFilter->add(array( + 'name' => 'recID', + 'required' => true, + 'filters' => array( + array('name' => 'Int'), + ), + )); + $this->inputFilter = $inputFilter; + } + + return $this->inputFilter; + } + } \ No newline at end of file diff --git a/app/module/Recipe/src/Recipe/Model/RecipeTable.php b/app/module/Recipe/src/Recipe/Model/RecipeTable.php index 12e30e4..e4e8cbf 100755 --- a/app/module/Recipe/src/Recipe/Model/RecipeTable.php +++ b/app/module/Recipe/src/Recipe/Model/RecipeTable.php @@ -1,12 +1,17 @@ tableGateway->select(); return $resultSet; } + + public function fetchCookbook() + { + //SELECT * FROM recipe INNER JOIN cookbook ON recipe.recID=cookbook.recipeID WHERE cookbook.userID = 0; + $joinTable = 'cookbook'; + + $select = new Select(); + + $select->from('recipe'); + $select->join($joinTable, "recipe.recID = {$joinTable}.recipeID"); + + $where = array(); + $where[] = "{$joinTable}.userID = {$this->userid}"; + + $select->where($where); + +// $sort[] = 'sort_order ASC'; +// $sort[] = 'value ASC'; +// $select->order($sort); + + $resultSet = $this->tableGateway->selectWith($select); + + return $resultSet; + } public function getRecipe($id) { @@ -30,6 +59,8 @@ public function getRecipe($id) return $row; } + + // public function getRecipe2($artist) // { // //$artist = $artist; @@ -69,6 +100,40 @@ public function saveRecipe(Recipe $recipe) } } } + + public function saveToCookbook(RecipeAdd $recipeAdd){ + + $data = array( + 'userID'=> $this->userid, + 'recipeID'=> $recipeAdd->recID, + + ); + + $dbAdapter = new DbAdapter(array( + 'driver' => 'Pdo', + 'dsn' => 'mysql:dbname=food280;host=localhost', + 'username' => 'root', + 'password' => 'password', + )); + + $cookbookTable = new TableGateway('cookbook', $dbAdapter); + + $cookbookTable->insert($data); +// $sel = new Sql($dbAdapter); +// $s = $sel->insert('cookbook'); +// $data = array( +// 'userID'=> $this->userid, +// 'recID'=> $recipeAdd->recID, +// +// ); +// $s->values($data); +// $statement = $sel->prepareStatementForSqlObject($s); +// $result= $statement->execute($data); +// //print_R($result); +// +// return $result; + + } // public function deleteAlbum($id) // { diff --git a/app/module/Recipe/view/recipe/recipe/add.phtml b/app/module/Recipe/view/recipe/recipe/add.phtml index 92942ee..6e68c67 100755 --- a/app/module/Recipe/view/recipe/recipe/add.phtml +++ b/app/module/Recipe/view/recipe/recipe/add.phtml @@ -4,12 +4,13 @@ ?>

    escapeHtml($title); ?>

    setAttribute('action', $this->url('recipe', array('action' => 'add'))); - $form->prepare(); + $addForm = $form; + $addForm->setAttribute('action', $this->url('recipe', array('action' => 'add'))); + $addForm->prepare(); - echo $this->form()->openTag($form); + echo $this->form()->openTag($addForm); - echo $this->formHidden($form->get('recID')); + echo $this->formHidden($addForm->get('recID')); //echo $this->formRow($form->get('recName')); //echo $this->formRow($form->get('ingred')); //echo $this->formRow($form->get('instruct')); @@ -25,9 +26,9 @@
    - Recipe name: formElement($form->get('recName')).$this->formElementErrors($form->get('recName')); ?> + Recipe name: formElement($addForm->get('recName')).$this->formElementErrors($addForm->get('recName')); ?> formElementErrors($form->get('recName')); ?> -
    formSubmit($form->get('submit')); ?>
    +
    formSubmit($addForm->get('submit')); ?>
    @@ -40,8 +41,8 @@
    List all ingredients: - formElement($form->get('ingred')); ?> - formElementErrors($form->get('ingred')); ?> + formElement($addForm->get('ingred')); ?> + formElementErrors($addForm->get('ingred')); ?>

    Y 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�jAu2c`?fK^!Yi5ct$sx5@t(}KW2%rM%>!KcL#kFbZt)hglq(DQ1 zh#2-`5UlZEXMZ{sy;??OJ5vq^z1`PGH94;2^m6RKGk>}-S63YM@7rk2Df~e_)(=YP zpX5Vuo*gFXN^7M8pNKK`}6W20Fe4a5<*D(sz9>Q_}) z5fecLN7a!Vv**n)S`OTMv(7pzH0HOSeDfoA3I}Pt5EN@%=QV^*+^Z!r8x9!X!`%&S zDX_Jv0~i5)@~i9JPlpJBy6&4225kPG@|;R(&z zUrEf1Rpt~v(Xy7nJ2mb(&nO&-Rxn&0DX4SneG4PrpyM3;gc)};?5rBb%PQF;c>Y7O5M2`Fg0Wtz@CJsdNJ#9d+vJhq_G@ z!m9-?3moYT?)t;33h5)Ekl+fXDhxo2ZfrUJ+qU}F)pKXCx&Hvv@jSjh6>!q|hlxT+lXNP|%rnJOsLB9Q!dOR3s8~ImWi*u5!qj2>Z>fad+BX4XyZ`$!cYWr8V zOFNBK-8L*kjiQvLFwT3U6Km4uWCvEoq_f#@yJc6JdXaG}Sgk3aUC~kgf8}w$yzdHg z;f6B_SI5FH=)xuT(NdkaI5p%|E+BAid>EOYH#mb7R|GUgtY@!3rzG?Gzh8%`&8%rp6m z2pVz=qzi{#*DAY4i;BWaT4liY`{tb$YRS3}yp!4>?$U4_{fAohQH72(aR#=eB{H)s zrBZvh#Ba|EF&DJV?XFuCiN%BolZ96WEV6VyMt+-UL9Zd4BKpIlV8cW=zB9K`ZBAMvaogJ4ElEnhx3Mmr{{SG2mA^u<)75C73huPFO*HW$Tx!11Qrpx*+uK`m z$9@T~g(Dws@bNQ~JA5q#n@@TYKQi(9?6p?+@^Tr7d0iGR{SdoF8u11X#1e6jx`y*STtlz|) zt0kqPV=euD5u#lzDWS9h6u&v;8#p1b<;ZTkZG2&)wa+fzp_*Buc5SyN`)g&j6(vIS zjpNfeM$1C!Q)h_Z+XHgRX^k2FLmV92%<`({7b3l<{hOGcMC{bGkS2~Qsc)}<=Z9_e zkD$CO;+BC7YySY$V_X-6c%#DS{znE(UT|DS);6l=w06*#NtIesm8;}Cytzla=xsF) z(#C$=FQdhHR+rHavqX36f!|fd2%EFqWpq*sXmg*jjieZ%;9pf(OCu45hXpjT870I6 zyo~dMJjtY{07;hhboD)8reS)f8KQz-xTI+Im z?z_nO)+c|MUNNo}(RtOejn*;}#&`YvBMq4`MC~3K&D4$vm;BZB#+EB5*1ou>)LM#a zp7k%f_#ul@?4uYX;{^WzA#EtBKK2>OjtH4we*`DO8!G;jM0+CJ_-d-*zd7L(AlfC2 zr(Dz+ka4Qwi8ghzk_W%Sx99E7EuqI7YPPEAkS9{ETNJid+DNCppF5&sB93Y!;GLDR zKe2D1Q{Lin=M$kvmU}9_ly^a$bedMXY%M<(dv}PKBl_Q8T#)|&2?qn)f@zqX3*Vov zc|#o&e_G?{q%aX%Yufdpxs`2vS?rFn#(c3w*Q`DL6t2skbqh@tdEd{=kLD-Ac^8g3 z;-N=ybmw0iJdvM9?PVT~DqY^~I_`_BJX|NX=>l7Pvn+>^k z<6Kwb6Wa3CotV;_Po`SP>E6WG=Rb-?`3}|PRk>m315KS~eDwa)`i;^MoBPNu*AyxUS`UAp2lU*;6)jtkt5RkfxGq?+Oj)?aC}5 zM#7DK-lMslSLyTF$J#E;(yKN>3!ZJl<86=g0j)sdPaHCBA-p_R-N+6FvzHs|zZ@0R zwsc~})4M5YTTMJ3XyO9CAY-l*Y>lNnJ&LO+BUc8#|#E)cOpfn@SyWp5X)CQRNV#+2wszNF#>=rBf~~N;u;l zV_r*e?|!>EqzF;lyyur>J)_RNrNIhaHl=P%0E$<3a$u{xxXbUI*zLHe)Z@74j!ZsN ztggC!CEYd05}3oJD>)I;z-zjWmnMBp(uzHuS>q9+S=#x`c}l0xc0uik=HO@)=^><( zQpyD`C{q6bi|L**LvPT~qXRYr%DO8E7T2)cYP+J=j_XEtMM$i|#R$7=3P+!5Uk1RA z9sd9jGu>X3S_>wadkFoA=fb9}c8P1|YG0zP+ODV1hlr$kE}j1XPGP@aRtV4f{Byi5 zWsgtb3;X-u>a6aHdqupSkND+R-Tr3|-mYG8t_{W zw0GJ;(3F23cYipKUs&@!Bj5 zk&(3cE;C900F3_t@vKz#=>{CdS3I}Rk&_fZ6o@)az2^7X*?))~Vi$e{3 zc}+4*Yk)4l#P;-_fSmGzw?IcC_Ro3w6k4C_Z@ds@8yK1S@bMt5&9m7 zua@M#!O>~NxS!il!*_28rnY#N125Mdc~>=a3&T-j34Sxt7;N1fn%GX#Pj3DZnYMVY z44o*0s<46J_@&_fGqVcwQh7}tTS`imx|zw3Eb%9ZTO2$G&U2Mln)J^Ocx>66!doeB z8E;b=M!E!na5NkEWcWvo+vAwA3EFF#_A3k@#Kw)?F8WUGOoX3^cjrBnrHKf;;;vSq z!dLg$mkU8D#Q6SVIkPy=%4bi8Z??{53c#Fx- zdZJ9350YUd=A0N}`kV8f-w4qoPio?IY@x6-oc2O~v(5{khR<)J@b#jW#m7B(dBSa* zSm8#uA-XiD^PcXz6mELg_`Tuh_lrwCiwmly%Yug%K0UhEs)Aa!;6hdJ@!#v6(W9|w z{bJEB-7c(EO`_9{{{SB-9i^IDhEVVB(v{zy?bk=4Xk7;9xu324Fj>oGvQxk3ny4Cg zrVD(!66J9M`1cWtC>B zp8aBxpyn8ascRa40of~vh=5iA)M-=Dky-hI7mb=k>ikm9%Wloa*! zhV9~T7mj}D&BNmkb=_=ju8>sUocc!#wsPm*uPddq<%i9Aq!Ua8lSu1N$1Z!T5*Ifv z>9I?oDdl`gX(UzX4idX{`;$A(g_E8TaMCKg!T}OZ@1Qm-pGY7iCKlJ7V459%mkj4T zAj0qyPCpeh--X2`Z}%5m=Nsdxz|p&BORE*R5DXVA{bk0^w&%M(Q}<6ni77#HQ+H7Hh_AM|=iiEt`P}R0 zf=MxIOR_!PoH<<(qDOP5e1di7r<#sU=@L^~C=Rb4Q54M1{IcJK_m$ScamzaDqcb{6 zZ=(Ej;aFOu-u?WttJK(5M_n=7hkSM>C#}bvHz?npz1(kwaL+Gl^;VFyd)+VAgueRC zYfQx4!J$&eLhp?Pq(dXYinCMyN^y+`mMf?@SBdW{CMuKM10Xr zLC(%81#;@Xn4{~TTF2=qbN)lEd##m^!uo)J$J@T@y;@BU_G(JHB{?U<6n&$kNkabs zxatV?R;NLhi=m#1&gjpx?1Y#>T%tE(*sktW>cCPaL$^XXimmD-T^Sf)&fB-+Dw;Cc z8mzNqwg8n!yHAxrPhPm}eJuhLf0IT#6JTg-L}vl2amZA=a77CvLgd@o31I_pqCoN; zk({*nuFnjaJWOw@;M-yJtVX zg9PVcxV^Nf9vFA?ig*B*YgDMKsICE|8C3So8tgk!)>47Ca2|W2@&sqY0`rv`+OzhU zY>7L#;Z=$#*;e9?$Wr(WbB;t_S*?z^5_y`bs(7|G-yzFtBFIm&>Ht*@ML6?~4W7`) zN^;7$R~p!sceKn;+t;#O<&!5qFG2}CK;C%g2(^a>3~WH@T+~>x<3Pgdt%@mbXq3Bb zthU&|?!z?jiv1^IgxE(^WOA-)wo7bSkw0Q_&b|EAa?*PZ=GNxIPA86d$B=28JO2P9 zq&DH&sQOlih}kro@b<5?Ib58}E*q6`=bhcrjkH-`ea8=FwSe{zF!oX#9&TZm5skz^ zV8VEKkm-k9xgS+7Ack9h%KDnHIw@|tj*TRp+2!lPH@X(l79OZN*;h4?(w1m$4mVdm zcPksC6ThnHwz+YSSJ5$lHl+Um@vo)kI$@uSUR%a~o&42_(WV+GL7?4@Gx(2E(J*1j zvz7vQZLeGxlWBO*o25Ff=#rT>6p?V_8m8GHI9vu4aLbCyIy_mM>bfNjN=u6E0l$UU zM3`_Ovgb)ejOdTrW|-~09F(*gP}oi2(9`V|x=TeswL>k{26s+D1{7$}T{AJ)p_;CG zU#ohD7TY{d8{@~kL*TOi0Lb>k+b`EGn0l-0E}7N1y1tcJ(!Cva&MxgBjh(DTJwF|B z;u>ee@obMjre`mYwWqS_7R8nG^YoIVTJyEnA!JVMETo3qrS#lmz8$e2@|Xz0!=%Mx znWUr21Eghj75RAf&C==Vn@Z4ZJhC?3`HvHx*!ySwJFqdZV4YEb%B7Ob|ImQ%B{4K{=mv_QhRn2BqS z*iADuGvvDp7Q3VeuTPv8Pkop5KJ}?-NIK-HQcBuY=;k?O$CP-R#0-MhfblsQ-?ME^ zZ8S!SF(gZBs9?WTKFE5wv#beAHA`U$QWDq7E4sIJ{$s@L+H^*Yf8?CX-NMmdju8E2 zcFOs~YVKyOoR(@%T@CEql#9BDoLK1if;_LT^}$zKVVGp_KKCmpWhf~qrwG!)vTKdr z_42Bn6MU=5O=Sfs*`DJP8)GeW>Z>rAVgsL=luEm?oae^Q1V=-aPk$8>BSF5a*eCgC zt4!xSqd{ejuXXqFRk5MV3f*3*#Z95q;kt*8bH*k|vcrzaI0G^0tM!W?b~91g>mj!k zPQb14hthr-ff>cZ8)k61T3PMU8=duDTeaEp0ha|6OY`~ff#|IYERmW+a~_Mft5Jy4 zI`Twm7Q&kVjnV8{CKvo{1YifheweI{t>3i7<#|c%Z5@=fSXv!vD+)>YlgB?uyNO^A zZ1qM5D$PP{QVmzaqT2ZOY_W8OvFpt~5?bt(Mu)NnrJ(3dHTQ+(k z&55F4sYpq0;^oM4;}WH)-V-&kPqVsi62f)8GHI@=Q!yyxsh9apJ>FIH^oq+=Spp|r z>m{?%q!|m9W&Z$lmt@*|Js!;$!k;u?^ux%Txb|Cn3^ux094m@ASe9xXlS)YWFT;iL zO`>$$toD|Tb0F=x02o2%zD!;1(OBB-4T%W;x65akK>coL19S3o3rirKl^=$?u#c%c z58@`rWG0u+a?jHL0B~23_>V=F7rR$(TyCB^ka+Y}1<+*vpMwo9mXPt9ZGHOuEK2lOehu z4OF{JJ*stBDD1-pwP8=pNNJe!;<&cS%oHeNlb#XBwt_26>b6isixPhHd)%?lD2Cx9 zT=}B|w=4Qy2bwzQrMRhg8XlS;#Qy+<_QaO0dr?ziiSNN(&t^Yo%R^0Vc^4NXw@|km#j`_FIe6pO8Z8~8 z9T0&nm&&S2#tfT%V82g(%)ZI#(W@>(ZBjc6OKmIsx?Tcq!|_<%*z`$;(Ctz)+16Jp z>n){{1J1F+Yo|IU%epp(W%f1_jghKxUiWOvl8WB3drczkhbzr z6roxS=jj))Ee&wTg>kFacGYK*>s9iK64Q;m1qe7q_P9A#7M9~*Dn}}jvJWVf1`0cb zir+EtDmrEX;GE2Awx|`Nowq5tm3YKA-oOI^d^ z2K4(^a#o`bkJF%)B<>sYPs~?aENythx26i##cg~y3*~yDI>FRxkn8WuOJGz+%6j_# z{c(}C=)2|t_@cJ99WQf3j_DaxkOek%wW3p%0mLN=;6R{?)`*sO53H-vUVcbcmYgpV zt-gxNYU5mw$*GnmpCXh`ysy2~%`uDn7L+X@IN{R1Z&Wtz6dnm^+kmRxu4azwI!1kl z>iP{p#ayq?d}{2vL5~9Z_E|edj(jqIQ|;xy(MwlvOHB%;)b z(z_`H`|aIbTt_T1<;p7}+nO_~KPt(( zFr2QcqP@4QscoPG$^QUX;wf!fMWT0#ofL7RcYFP*ZJn$+Wh8#;cVa|i^p2JQJN6un zR!T%Y5@&?F-Q~~Zrw6p@g^%+E{Ko9#9&@EMsd0DhRacqlEP5|j5qJr->6->teo#VvxhhJjm&*VxPHpUUOK4-6yK)&tg$5GZzCsUPyywYYhx+koW!B zq-d-@ArPheVV|b;pSI|K%|F+&nzyZw+X?B$AJ?DEXh(~GNo$-otmID&jcNWl->}h5 zQ@X?bQ9r&f{^+8&>4Rtl>(3nT^X2rdY zzx7u$qy7{He=ybKAcR-a_l|@Wg!qIKCe_dj8p<7j4eJbb#{?gtjUP*@5 z)f}sUtMsWg{>=K}5iPzIX$1ZueDd=}vUr?>FUj7$N`<+q30j}w(m(0?0~8MM!$Bic z$y|T+Go(L${+V%1bNZf0N$A+!{T!fCJTrC7?O3Bh@jd?l`kOQP=%DjDs(qI#mKAsQ zwZ~v@UIkTn18tq7tV*us z3u@@Z+xt>(ASFt_V1aQl?%FQhuExyl&a1bI=^Y+f5z-f5mi#Np1|%#erDoEFwnY>< zZ^-M5$dSgTBLl{$s+L*Y9w)akS*zQq`#;~7y8i%ociVJ%$B3;m*S~G`?zXxb&-`wx zIQcG@=!}RG%-lW^yO8|j9z~=h66ar?SJL#W12tR5x*}3ghSM3it~dQHEuQIC&eP!im58eZ`fvLWk+P6d)K_yAxMR-g`|U7DdF0_ z)BcKBLRrKsXL!zccfnhQS0!6)(k1i19vth{S&bTV^x?2gE+3N;m~ItY7G^VxjP{z~ zi}DtldN4M(Uw!$c9k1WlrAb3`Z>_;PrgLcgRlhkA-F^7^CP_O=P3));db@n%q30RS zriA8C4vKMR+H~1FRHR5`UA4hQb2+K3ox9P5`}Dhw(JmZfG541`zIdonA$9kw@=wia z8jUEu+;g7jl-o?Ru62(E5zwe-TvObwyrom$tWAY!of`SU0KptNNl4kY2?O5o&JjJ4 z=bcwQ$R-v3RoBff7M9j0)5|x(#7+HvcF!a^OPX+EbaCqP&0<_Alxv~{L9=Cjl_im% zN@#0+(PIiF+d0)PVX@^GL1DFmp z_3GbPw}l)4FRJ@gu^>+_swr;id3g&RCL;>RVp^`a&!Th~0k_Kv-^m6osh1~9l{E&Z zJh9>QiXL9-uO)0Eem3&2D$ko<*cK`u(R)gw^25F3aq;6Lxcf`#}NUEr-zVQJgWZ zeLAG5aZIcbO*dyhQVx#Js2tD{dq8!8KclnEI@H66*l{N1k%8r&$ao|qyN&FD?TIsF z%~`UuR+553njZ7C;5g?9v4I*=^s45gy}t&k_4=6hV)l-+G_uZ+Lg(9YPBz%Rz;>z! zII?U&>bXO7+n2$tX0C>v*mgFVXvEIYW!{oqTn;IMwYtO!BC+zWs|&NVRG-;|W5MVZ;YisO^*gx0+Mb4(+~0IKFc>?MlyL+xKV zCK;EK+0Pu~50sEeKU-zFH!5>$3(hb=-L+fL%f?rx=iMr;bB$n#Wz(v~GP=57T;rZ} zgoIsHJ?DbbmrBhu=Lt4^ILoJ(RIxWFvc9m#Fgu<-5ohK_aavV0rp?MZ&nS-jD_xR! zis7Al`K5B&LoqI)vf{a3eKY43Hk}g+EdKyOzrTMqG8MVa&%PCQI7v_JeLtI)*!}eY zKe*?%G5SZs&|=U2G5-L@yt%8JHkNZp{f&AewU4cthKhfQP`~<)e$nUpPr)$VKlp{` zVDzi7*`c#(qyGSYrmF1GPRZ8`;3N2xyXQY#)-bm30snZ177&{{Z3J{Z+gzFFAhG!mFB`N$YXbPvTX$e0ccAdOw4j z-~RwaKls&1DeTf=+4sYukuj||T>k*fANBoARK@VCTR-^vite&aj0gRVt^T9`0FTf|7Lm8V z+VnK7$3L0gPu3g$*Q-C*+}6bLAAf&&B?;0spXMJp=lEfx`1Y?<@fMCt(YIEw<{b9N ze+bAPVLM!$(nl>tFXr)welj-nuY{&{t!T7JRyb$29V0Eh`mQJ0TU1kEs_Ze(+9kk> z=x&_K3|L|y+gC|6+cspisDrc;t*z%c=Z$w7A5X-yYX0WwX0kd{LbB06)_l0(wF~F8 z4qItT2p66oZ(hyuyMyB=28q6_GO<>V2{FzxW%J;hTG0lYKM1=f2>$>XJO1Z=_0!8Z z&G36C{{W{~ZXWoj)-+;L?X;(~aNUM!&MR#mFpGHCIBof^%EkwT;I?0&>3V*ZvMl*} zd#Jmrqq;NJuM%1!Pxo}V?^m{e4?$=28}6#yo;qnJh1)lB13Bju(KNlLB>wA#&VRC>5O3d`WJP8ICjbnu_~Q{+#RA zB!yO+&V0uHc@SpV7{PczF-x=aUt2D?Z!yAPPad$YS7^NSc3FZ^qFNvJVx8|78UVujk4@>>e`{BQHdFYJ0X&LC>ld8*jf zo&LU+-39ccOj62R9VZ>*zrHv6A3(YxZ|habP+IM>o&ElHD#4}NWT({N>2a?3_ALkD z_OLQ+zznOp%UbP|n3=Ci+7*7bttHGYWUG1Qzw;iKVzCHK7iCqNr+dqf+Jre(D!gLx ztpEhd#VnRVBz9-VHHRdg13vC@KNWzb*c&g}4kA_vwU^_uj6Nf&R9I|IUx1a=hr zESe)YKygNu)2^w$c@-vuH^CXk{{Ski5Z>H&sO-aKHO>YO!;*~gnnOWLR5Tq|n zb7(3}+1(G-C>SW?%r2)J{{S#ia7=NL6}#)2Q70^;OOAf|FhJics<|N-@2kg^+>?T= z_uQZfCcL15yDJZZg6Pd`)1-!s&Ay@gO23!d?thplhBK_QP~zKI-|Q;0y8cL$W9Ssa z+a*k!_@)V}*7mL6DyBY_Xq=r@+qpi=)t=VLQzsEyvwzkaVzGkxO;N|wSjpYzg-sKz zja*BzQdG)rGFjE8^S9HygJq*qTMo zo#wsM$YMrRT$GNWH+~|zC8^Hs!A3TRzx!2e_(&!#S$1o(QaSxM53h^|#dD{9SIS?r zyV0&!UmKm$M5G!k$J0HqF+GTa2{~7yh)!u5jcC5B`s1opJ1N;+)MjGYb<7Dk@9~Zj z1~pyPybT=p%1tMins3^gnNR>M*MKn1dOi4T_*Zsq2@&%Bc2VS>WHesVo+;U7!(Z(u zK3&i^Jj)He%@u!U&<8g5uT)L2wL@ypDFn+nYyGEvKE2RAa#ohhp%~dsovSUsXPq0= z1j@r|dRbeEs!wk1=KlZ~jUFIlW=J0xEhURXG?Ds_m6AMY{-fn3whN3V;xRza9M&>= zOHD(w&-Wc=J=uM)M$rBn{JOG-+N)|mXuhlL<_mwrqvan6{KuPVKNmHH(uuaS!+G~! zt)jdgHa2kkN{?IBm(eW+vzqAXE`f*2Jp^Q8_`$`-Q9Jpqd@l#Ft^WYh7Z3W^lCc&J zi%K+TZwllo0TB1h{Xngym(n zdPIt6bYQK1BD6in_c-m#pVHk~d^rLeN9Z{V>ZXdeWSU(-xL-}zXYtM>4KW$t+@5Ee zoBq)OqxiR`@09#>ZMlp3Fn8hgf{T1te`D1F`Z@@o>MqN&o3pP zwpiNf+$YMp-|C;HZ3N9AryS?P323$$&5<*juY+R{-9C6IgyxMVdaBs1d@=g?@{H_l z9sWrtR~&Awo~uD-wtfIFDjz$m?Xq@R{{Xj-SJo?{_;+6h^4+qztC(7FLjrEYrb|SQ ztfm&=A(KtiOcu%E2SjxL03F;AZ9XiA38(iM9Q~0V%g_hqc1diC0lOmT(ZcYNf&ta- z-De~CxsfIV#dGvT`w~r7X&XllH(?gGYcKeC#xT@MN zS=&~HdkOt}R>ZyiAZ%c<{;c---4iVuRgE9W9sd0;@=>8^mz-PeSN$(?miks`Rdrwx zG{|$WGs;33v2s*uDZuB1d7q0sGY%+wn80T|hCe&hjT>!<#|D#FaQIv- z_M_6qthsASU26%VT^tSvc0^%xFNR`6wlw}T{Ki+~%&Sc!q`%-Ic==uLHTjeFo3xp> zElK4eL0e8Qp7ZOIA6Ixbz-;hgYXg9-#dyY^vc2uh%-WA`%9D|pT&N2PY}aCjw_k^k-acgUPl%lsBfx#rIA@+W zFJsW!Br&WdyDKhNuD9y(YSGloAtPWTXA6kJ{PxG1{{XqfF{WH`TDMr6`0&fMR^Enc zvrUq;GL^fzIG-Ol^gRKj$LXx?lkBnjR>3W43@14Sbo6UT8F>wR;Niae^PA(<^liEe z+CO1{&zi&9Z0}(v`oB7s2)$=bw&+O;2JbxG7i2Nx^{i{rSCZkCW%EAMQie!XI_n$| zYt1)U_L6v)RVaVu`^5MFu#ddYs*4+SNR;^7ob&WCcM0H(e(JJS@mV{<+^>5Z>ko7= z{{W;AWy-HxrR8?iF73NH?=7E4g8U|DvWgUF##}hnT&1#dyD1sYdgE`S>{_jD(!#4| z^+9NhdA_R?=AE`EoA5inv3_9&u+Pe?YK1d7sKu)y%*qs%q!4Ni)yBEa*_|Z}IG$?4 z4i&vq{d4L{$dZDJG9-5|ESv&DRfx4+W*+=_ZVqB{iuwZgYye)tWdU=?L$6C$hSPwfo~M9hkkra`I?%YOb` z{{Ru4wH$Bf!|iKq23n&#u&fm()^>s}&YN-e*`*YthJLY>(y+DI?sZ+(^G3wL8BXN` zux5HA(JtzHx#dXm>tKDJ(X0-0z^!v6=wmyio~`ROt42x0l!LUBjC!wuyhi8|A+*Gl zrJTKf7DrEL*2H7TZrr8ixFf zN0>1mak!tl>m|zlJke)t>9@aZri)c>=6j3T|@waDP>1z|KlNR=$MzjBw1=kR!Loys&;R^@3d3w+v4A)vaF0Htrv zco?tJ8ac7pZsB(dsVJJJa#oX4x}=-a8+uBNDa5$*d#W!Zg=-jy+6qxm>z>Q=tW?Ne zzMR+Ulh|w7PFl>9vgc-G5(q;oy{<{+-+$XpqO?G06K?!ADFyNq^~*m^^IV$wXnt4R}=EM$mOQ&s41;+3s+w|`nW_!>?}E79%P&8az}l4_IH@#F3-7!JgEd|o>f(P89%Vj@tt({O*VvwO;nWQ_oOx>XFA4c z&2+1Rg4)^}FFMnKY^7BP6!Fh&LWyP$%htE~sgUhXX~w;BRfAZXn_^|RoN8EC-Zvm{ zuiLY-DQ$W*I1(Guyt%Cvhe{Ue&C|bcx}zFlp*E(C%(&wXxY$CE!Vc{BZ{e78r(XAPI{h#6iulIOUJfg|E zO|JgkPClv;(T-+Sy-jRAC6#!kT_S3Eh_QoeX_40N(y>sZ*`6^KR1rQ(*kQzqI5V5? z?~5pL!OzP&^1EeBOF8FNlHWNvj*s0uPan2TETqCtTrlRuFGXoQZrOtHc;oTF;}D}SndX^Ahx;-{{T^k zcwBAPuCnGV`T39H6q+r6G2ElfddH9H<`7YDhg@>jMeLx(S0 z>kE_^>sDdo{{V%hsA7D+bd4rqJMmj zrAAiUYII58w=$+f5b^q#rEXIuG}XnA^N)Fqm9#w18RB?WO3D-1Hhb57x25RP)tY|q z3{{Bxdd61N*q8cMVyChz4$pM;E2XOx{ofw{04St+hz@9)%r{Q1s+f>5rY=+b672_d|-mx7!i5nI`Ts{ct;`76tS&2aANO_NoJ6CWb;EdR^%&s zacfS2rCssOePQM}h$``wZA|<+xLsFcSYn=Kw9U2u05pHAc5sMsp$Ch%)qBnDI=5e2 zwo4vq-MuHRHeT`L+neu<{jSXRl1I<4#tL*dH0+-wy{#>AzvmwM=guoN;zKx@RcuH6 zO?M6$Rq8<_r%yIh``7;f%}*NN`HM>>zAFfmk6PxT$FReQ59&QHpAUMF;E{n2YjgN4BKy;lIi~v%^|S3|&oU3&5PtWqAjP ztTCZ$>Vuxy)nbiHm64m58#@G%z;M5nGf4E$$7YWT=^2Wy3(uPp(FP%$@tyU5qKrRc zw3jYGrAF(!KKDf|T^$cx-F0urKdBpb+h3`9IBn}&*3{_x4=4Pz_YWxO(QJEvh~ztc zg&o>O@ZE{)bzqy^(7AV2PKaOqzi$ft_{|92Z{c36j?+(<^EF>-u76hSyxAyZU&wlK z^odb404*|ZTMo_j=7R^sE^CC}{{Z6c+NF5%cUI+>75iKN0Hoc1{rRr=rHi01{uB1E zUFz+gAl7g4zF8Ahv3#?%AqjMCAY;5|w-}dW@aqeN*g99DhilWX)jzgase`&HEXzLf z6Hczq8Q&VHS`Hi*i2-o-S(utuBxev0dfVusw%&kPmb9y_yvr)8NHt1MHRT$u5Lsq$ zyj)gmO2d7jxEtnYRf^^3w9m7hj{6gj%F4A;7JbwX2X#38qtR@dd5{_be+%|3Eu%m_ zJB*o*?0Bv#Y1XG)vF&HJ7$7Cpe5Y}XM)cYpPB3a}MJ5_R5uScibYFWGRN_@A{Fjlu~ z&iv15&bQ*U_GaoxY`cAYC#lPM2v5WX2Oli=MKoVJtkujDRm;^tEo*fy?IbGWUH8NX z%KE8RO41XE;dOCP*A|DDTf2sQA~6GvSE`&NyKjHKcyCe*EFmOa)ksOMd2%4hPIO>U z=fCM4+=A`qUtRK2$qQhD2GQ@1hvj!=%~6OqZ&MjNOe_z2y|6&()_ai4cHLFYNag2g zL$#dd=rc1zAWEy_X*WJGYXoeauN;cOL6ue8WPtY0{;BDkYP6!fbDshS{nc_%oW%Vp zY7>gMZ_aw)&34mrj^TN!+gAu9S(eCd1qYInp)GjKKBj${_#1n zchyzM1Y@#)N%CIP!`|$HmbdJHdNB84hHSeL^M~>Jv^S#+39y$m|8X#lX8f_=Q#8@gx6txZ{WL= z?0fB(Go$ksa}#!wl9ZN#3UrE4j(0@(5x3QMl8*Ln`K!1u(MGSmw=5a$7i}{Zqa>5M&s`P9^Bp0!(3V`}60yunm*=~oWx}@n zs8z$?oZYxmiq)Xl`Tm1EzAMhg4v=vE-S^kBo!Odbu}ZpkZ>(i4{vB+O=sH)f^>G79 zo4;+D?Wv*-pQehUe|DeseGFr5o*x5S^zDUTvz*n`9V7n$m2FdL4KqIJ>39r&@tL*g zAN)Ia+fr8$bcX);%W9fP>3|?r-P_gl#xv3MCO@ZYtTrnsR_p%&m2fBS@U{3q=5OY`uRR?j548c382 z*W(3cmLqVVAw>z#4#r()iqQU&G_RO<=Z~q0t%V!^04naIyYbal92y%uar5VqI~4W*A!5-E@ZK&2m!4+ft3^InNl+h|p**NYz(VxzFY! zJ@c<5M*Y=p-r|KJJL#R#5z}zdN3b-7`iNZ(%QV1jCjX^SeFM(v^#zmM7`GRr)+ zcj@Y*zApa!XIqm*#jFR-occtzSms6Dt7?Y$^3JMv(2vdABL4t;$3C%X2E#n7+$b?^ z63(mFYKdAF{?64EyUH{+Efig=cTKc+D!BHU1AQLcutLou(p4o6QG1EUt~c5zKo=Ix zmwhTrO}10MxODkdr%Uvq!dwB`-bE{(G3t6BL9!mK+p{XHR(jQJE}ivVLIv6un&uo? zQjdN)=+8uB*F065u?dh+_lEowl!%*2h(`gfZg1e1%*_;5Y^Kx72f*#CPHG>ZCNxCuvkE#R}n_@FQ|~6DmZ@0_^qY z2n&wd>36S^nG98Zr!b9#XD96pzI9m~)T{+@Nef}ad=a%(nNiLM+G&>3Y#>}BOfYLT z4lA`njr-)EcYjbGz7aXCG84Mx48`BkESIw#nIeew&x9Na@2*#&IxxrE>#BKYLZ)V@ z63Vas(tRP~K#7{dyU9Y0YHLm+YHwods&(}v_7{KlA5r&*Yq6sFcga=7w}GFP^igWZ z)U&GyQ;c_{_hDZ+6YX%@FbLaU7v`$18caz3*;Pm)434R#BELva1D4fCA4t8^zP%H->Ez{w!8c~U9K=I?tmRm~)R)Mc9N?2L1t%ySXOri1%9-_Crc&ZMJLno1M!t30#o48Lsa#kyYxZ!n2nVb!^}FijB-$4!BJecR&rw+695`l$uQURbCTP z+?$v_=vDo_`S6Boimyd|Wzex7FV`EZ(rLm^M=crU0G3=kT#3$ax;SENt&2%y@b~d0 zy}BZ8fvP)N(NaH!aDsoJ?;TJ(&tvYi)?Et@7;M@(%Qa#2OWDeLV78}a7rM1U`eEY; zuCNm!Wun!_i~Ch0G@mL8{70u3h$)v9JX*o*r@Fo+0sDp67u&DVCxeyZdq4(BW;L9P?2}zJzSzxJtE>|tZSC_3N4MY!!um@B9)&ahZ_n| zx}96AoS4v9<30J6OK4+QZWqp1dnon1%PiJ_a{7A5ZSmy73EO{~o1@@sI9-KqKVf~#$d%Ra?uz;jJ#jIuC6G@W3WO~*?(qvM20wymD?3x6pQHA*?Xb{h(MrK zFwa%-J`_+cJ4F>=6cf%$Lfo@U0+b!mBt~i3)kaDMo(=*#uHl+#4LHl`V(fyn{5Xu~ z@d?g|LB{?mx{&q?+MyQqh<>Fi{k`6Qo>50{vpy)moNE3`%E=M1@ynIl5LVUDN11e} zHfdaG8Fy&Mhs?I_6)bb_ioF)VSt*L%yvbSWlK7HEFQLzDU)dlSY`kA8-l;8a{D$l* zic4u)T@c3sy81*dBO6wJ^kj=-vy$ohCP`aWZoCo|yncDb1UI@P>y>xGU;Y-tWb;N% z7HQXl38@C0bJxFwZnRB-(ExF2mDw!DlDD=T#K5EX=8H1zt)!5ZpiYHkz?L3s+4gmG%sx%fj0pMMY zRTWQaw3Zw2uIh0iqfN{x64>3iXFLpPta=~vxJ+DkQCa(5m@vTs*VZVBXJ~YzXbLT) z8@CMSsy5aw1qK{2OGiq{Vy)U{Gu%eG&pq{;*J#*`FokTko4I-BkPRbdg$O!LZNPfh zJVFhY(;6#>>~A}A;kK?qt9@csD=E5_$j{O|+e^GLuOly;mit6ObXPDO>R4| z{QjsY8b`xo`9mEM0i7sR&d=^1{{S4_8dqt@MgmXY)n{Fy1Uy}YNFW%kpa4^ zrb^yuewNH2G!)_8iTnLybE7o$MiKiPjvIo=+iVRpxO;pnL!#PM(jmR2?iiiX>6$Z6 zwcu;Jy;f@{YOxSZg?(Q+^F|39b(JJlV|M%gv7~O3gK^essy29oDe_WDdtsG)Y7Tiup29@IsaC~LX`TEo^-^|SNCS3rlN#GR zX0@VH%gc3Osba%%GYjj}BaU<59gl1hmDOES8w}3>0Ilh**8#11`#WNa(GWg&@Z($* z#$9j&6?m`KvoTBKc!gB~10xt9vg>Bxca28(CUbJ`hQ$ zJi7RIN0#XwF9-4#>x_4ND`8GVxWhNk84u z(QKCS6vK$mbY?9Wo?eSZWilge%Dih^S81G;eMx4fiX+|M-JBwh(%p8Ov7GDQs@2$| zUfb6`E!`ZLv8@*d!jc1qmmWQyTjS3(<(K(54g5CXw$><`&E-|@pQI%mnU|pzx-$AV zN}CO-qhD4|8OrJL_ET*ZLmCkh7#hB~p%$_9DHHN?()edRm5z`XT5{uFYIS1I>?t)nzY!8FIptNo7!o?o8LTT# zn*=MzecyPD(pu?n2#ymI+4ii~uI=QBsdTujw#90D;>r}BBx`bt=C1hr4NTZGHl38I zo`90$7q4XRPZ)Rj42gV~1EjxT-px+fP3Zlf`fi533v}7p{*h0_OoL=>ETvwnq?5v{ zuFI~9XPZ-CAwvP_1#?npAmKpt>%=V!l}y#-S0W1T4ZbA53B|8p4o=t`Kb$1bVwA>m##2ovoAC`t%{M_9}Rsvp%xvT)5D0Y5=GhQ z!)HBE%~7!sI(;g-DCMhQGcwwNKs5(&_3`V0J_vBzRlOOJOH9F_t8TD0O)F|L`4Z_Q z?O(Dt_C+PK!q<=DKC1QAGPBxwYhWCS(=iYl5zKCrPL@?M#4`s!#-IHW{z`7 z)gEupdw%n*VvnU&es$}6mleghrI#iN?iTYCXd;Z6Sle>k&08Xr8{?DZWm+jxv>lH(2(PsYu*BzBonk~p_ zq`c@#dSsohCpp~~@a>`h0Ncy!x~p}G%)UqE6m)iSS;{CBl6mK=@fOy1hf6v6T%g(- z;3SESOt-Od7-v67xQ5{?wrt-#6?kc!$@xt)?xuwD-`x@cnwtn4x$oPt2y~`t31!R2 z!lU8%j*}&CXBUdxxy9`XY3#{PfUlK()X$7oTMy{z<~`QmL)=@tmL}!EZGY(rVs>(l zQ{G5uvBst|wzz?y?yBmpEY_1TB6eqX&zvw)IXhMQ4|wPA7>y+x z`AdCQadOqztq!_=+)9*6Pr7OE9)FDE7<+7EGxP6K-nABMP1x0Pl=vw`oZ9a9j_yBS zPYBK0BAoZtcUKVY7);e|Qt2yAXs5h=-!c({Qfah8p<9`-oEI<+bsO++a$HUDI@uqbBGSnfyel#{{XnlKC@1Y zX?PUcbpHUauk8_HXoHh;*ekCjL8S&0s;nmV)|H`Pe((L+;}G4VACpf?K4`4ct)KE0 zTzW|>{{VPvcyqk{B0IEXLH$nUE*_F&v2d;{Lz+mo>-&d}IDMdB;>2a#v*330QoqV$ zfWp1jGp37eL-$X4{O1@uAiFWx(L;1*oW)gMrdDR0?QDYYdZCf5n!w%VRV2pR05=se zXG#$2LEFSvAG~I*mK|B$Rq=wffoawl*8c!>=`W-giaFzUdGUxap%%Cb&Wf1lf-40s zvhU6-XwAwRf!tJ}shIzi5B?z?9%tUl49!3QNi zvvi{I`-EY?sv}vg4+LMG*YLRxEtnbYs>iY=So&P1)P;1l!v$y3H8u?(=w-K&$IBsw z8`T}I!qJbAeeN;qnj^-V;jMICnbzEV*OzHu2Wl5QGIBG)8*J?;mYzaY(j@lvXU;d) zT{{jq2UuU{R2CN3q2fR?)gzYr-lcL@lLbTGN#S_SIo2<%w)ih}wT1OA%ROweL=!SS z4DJ=xOy#;4z$0YV_|sXN3LpeZuUTtBh{q9ls_3K=(yb^2ln;6>nP+JjZmQ_3B1Uk( zj~RL<>sG*R#1$p6UamRnh_;&(aSi&eDpi)+?A(0N)^^J>ZWV0doccs4Z2T_%I365T znTh#Zj#J#AxL-_mwEuXRkZrtN#G0?JbG_0I2R0KT2$G4cXkuY7UiuvI)0g z8zJh1Y|!V&t}bl;CVWet{CE4;b(*$#VXfBGW^=8IPR5a{Q5z*xpd0C&@r#IhMX|rN zR@IrbXs19owp@})ohVc0ohOWS?gtK4K7PnB;SrAw^**T>pIgV`tzsLDs;em}%oh#m z&Rmm2o&JynZCb6y^(d5cVwdpW3Tb+Cl)ZEH6PkHM{V9Ag&JwvWr^z|`@8R??$=^Mn zKIsD`Gqb0Nr@aOTFuLbYF6vO-r?N5JVnbbrDWN|L_N~aZ6izU0abE~Y?n=@-L*CEg z9HY2mGN~zijiHCV$lnBE$wzyA{lb?@T2uqx&Cwx_-@>{e7UC+ePt4k&Q{Ul%&tyt# z`FBy?&$_Hrf-Rr!uYrTMDHr)D&TUuHT8m*s{9HHRPY)QG4kp^==A%4fK7A9kwWOs} z-p*)Z!H=$r8{3_Hr}=5sDwH|ScSPt0Yv=fj7+{%I%Dyv)m32>& z#_F8hePYrCKVqw5M6Uk;1xB>O-$k2eKCQi-meszSzTN$icV=jqsbM@7WOrOmd9EOP zUF%E(KFFBFxQ~c)&tz>hY&(Z8RqMfJZSTD9uP?R4-7mCSx2Gmb$X?pj;!gO{h7DP4 z`dP<3>mDb~R~<34{M7` z8--TOx~qGmzScTNWymI3Hk054?9-)J3UP}#Hj>F-%B!joWcPaep=Pl)_iX7>Tuj8{ zi`%HZ!g0fV8YQ-W+nr8H&4=q-Jdx!gPGW1Hym@r9%YGfNUVu!~O!_;Ztr8Vp_@O?0 zlx5OVs&+?IXMFQB_FoVRge1kS^xdAgNhX&noH_lYsU)JSH^&lNl!_qrL-oAJo+Tv6 z_#sD!tZp>B&>WLhB{ggYUsN&<=W(l#i=U0H$aRzgD?-QjJqd? z?Wv`bldd5{-oh*G7Dl`qhWgs1LyTL2p2aDZwib{*^WU7(GgiGA+y4MjUp2PQ4Y1vP zQRkYJ$=mJT1Rn zw2bPqQkhLFSf}nD{Qdl5nl^@Q{{XLQt;%#eaoe(V6q;8|92EV+f9lT& zoZ%4O^UkoY=%7oNolqFKwX!ccUHpPlo)_<` z$zh#9`MWC|7IQr7kW4XKo_m5w?W8Gj-=02@VPrcot^E{t+6DDplY6$P8(#M>4ALaB z$A#6wMSY``s<);|yI>0Y-Z5bY#WF6(WniMjv~Q}}*+u6q&@fdydi(QOxq+jJ{=K;< z5iK=S^-(Fye45c+Tl;$BMPtzg#D2Z5;4oFO?O9Lf*98@xwG^bOMRdm#T<4r_^j3nI zZ|Hh_s#`^`8|q$Fz(=JP>QaS(v0L}YrfAIy*kQk>Sjw*of<2&;Z{<~XYQ5WYYMF6o zYZ828Sq9A5KwWI!{)IG+^u;1$w+9h2$bP1T7@-rCSe@_1Z9$J_8v-Hn_ zklYi~yKDfFhI+H-4oQ0Gdi)_Ilr)YxR)$F7MavE^#WR8S#z=lAP#*v8;X9#wFCVa3u9-J~CMfbydwn ziD+wQe(UP5y>E9%W~V*|)N6&tCPH8vD!ngN7MobU`l%OHEi+=lV~d zv7;LIRIzQ~PX6^*BX*7IW#w!a7(1~~*EPl?zSzcRvc8I~jimse?O%5zm5r(?S#W~u zDeX_&G%;HnNr8d-s+y*>X>0!gm(6-+h?1HgWZCEyZLmP$_WVV2^po9z_^#@XHk98+ zwt213xo1iwgoFxm89lUtf0FlKJXKU{d!3zEed-x$TTiMoT{iR7&<-fl$%vpCPz%m=HRZo{_xW91|qTGJ1cuOhKT8Yhc9HJQ%7wX z)c}@UH9QXZ1ETXhucxOTFy=AGDz11f3>yRpKuikrR;NQfmy(W&Pf7m(P2~|KwsLaL zx%5)?pu@lpL)+hywHht#{bxxfvZ*vxH2DBOUjG23No}53_4TZ{AimR#q$>J92)i$< zyEe#VEA-8zBv;|X7*QJ7Z8OW4Kb6={F3-w)k1x|cE7T8^O}W&Uspx+Shw76Lwo~=* z-9o>|<|m!KWY?a1yJN*XL*jSE)*9zL>xf>>;r{>)!-J_dW<4t9IO zw`nIuahttxsV`ZuSQ!bT;f2WEqtgEX0omb>eBz+mC!e39x@!Oum2#3eSWVMngNAd; zJNbziraWc3zWrv4b}WBz%%LDIQQ|z0oxE`zEOtd%=I^df2H0(IZOJsffj~KIo7g}5Q@SjR5zB6@i7++Pj zOyum;z6ZNrXFH=qXS04$gzBpbh}M$~o8`{EI3><#;8-<4HRbisj7WZrn8OjX?FpJj zU)w$&zREFaXj^Zf{>ZIArzRphL<9Xq{%Z}qLX_PpFYn)%J~^PCmFSA(lH!utNEO`` zw!0IcFv+-VR(4xUW08E!`zp(%XmO{Onj4AF z08sP%L$pnZ#E9Fo8E@Ow4@t)mp}Je;@6VdFnj3X7#<5-| zW*eGHsB2yQe{QI$wAx!8rtvi@1(3laVpof$@lrv}FOsWnZ0`rZ>lh6;0%7~a>+W8@ zgP@!Pnhdc5xvH6^Qg62~vMcc)I`GY7!?g98!Xu6N)n2{7LOF&T0hR)*nqac+C*@oT zQjR0nj(9~4j?oqiz?sEfT5OQww+rR73aO($j@s*cU=?Fc_0I#E?=)qp(KTC6O2TNxTqr+n)2N>5I0)63b^q{n-!GwX|F6J)pT4Y zhKvUu{Fj$$Cz9uHDe`j9YGJa406`cUaNQT$jhGx237MTqRb6!IHq6rdCUGj1ZN)g# zpCC7p#*w7aj%zhd)5^IYRhiO|j6iN*nZIoR0Alsa&Ds-ER%!U0P}ye-$*n-ofYl8k z)@DI5q)KQVoFk(uYa{mX@=oDyz3-suqHN2Hct)t`o-;?u5IFZ z5mm8J#~Xgp#=^E8U?<)=&O~3rw?%;|8A?W2Rd7_XV74KV8CEwUWR{XYuqdQC@dsXPCqI$(*eP~Ba4S&0;MMvg6yG7d@5*uASv90?TpW7_ujv`o53Q79JfpWW# zrE3@B+8RHUuBy3J7$lrMJLZ!;XdyS1jOUy}v}s6e7rbYmzSKt9UgP|F1st8yId&>K zRF2V(bBty5hl(t)CJaXBnz4hUB0gWK<1Br*s5PmjjBKusr@Tj+>Hh#1K`^39D@l>g zyw--rqF*-6y|()x^|7SP%s95n(m^yLqYu1%<)=JuVOyp7f3?@w-qpCX=uK!p!z!;t z64U(*lF~T`lo~?Rq@R=?IT7mK2=N3xAlP$wIA>dyKTT+}2%pr7!c`^C{W{emWhY)z zWv<&eCY~AbkDxSh4`WWyH?Kal+4Wv)k{`36p}V>cUk{yl(kvqjrMmnuQP~b$vB`Uw z(IDDC${pQNpS7^xF;g|}tzZl*0W}<%u>*DYDcRwhsTsReJMi6?6>k9H%iFhg2GUI% zZgN@Fsk-eX?&NEpQAZiL*A;zbiK<0!T>jSHfOIntI+kgAjmgew867ic)`aV_K3l7j z+UU5zmQUNd73k%RowCZ4ei(J#e)#ZRJr*T~(B})J;=KyV0kL7>h^@TN<@ZYTII3C2 z2C52A%beGgZ2Sx3V*=3$j){S2{!2ZlbSQ|&kj#x|_PO1z-CT)=rifT?v=eRiH5ftg8~H3s&?EuN~0_G&yXm z(VBSIbal~-Xv@0N!s+h~{Ns>f$bgfZ^~rSm*>_#fXw|7_pVbruIM>fXKtu~) zDyx)Y*&6P@SANJI)>88}Wt}edpbb#a1EuQcjnOVEq~7)FjRqdJ+NzrDc7|(?&bC=# ziKfodQ-Z<74t`%)s(q=U(w}+PmeoJ}H%ef6`>Q9T*4(W65K`(@UI%feX%B2>zNL>o zJ(M_*oXOlrZKDzFhz(1JfFg>z9jmN9GtQ)gGTQAvxnPuw9kt?tp1(M0fG@8!;TVI7 zt*gP&)YKHFou0SAzXo#cKZH?fIi1|Q`KQZ1%;<=_!#{YJ3Lf2+SE0G{zvidtrHo6Y z0e4(Tk_mSH6+&H=^l2C2*&Rq6vE4hDkhBYpE1u{{_smG$vi|^2rQv8ov!ARqfNRY- zBrdWIU~X)N{|h4`u%(04`#J@Mq|xqUpxf5Q=oEIn@(*og;XDua4}tI zv4{TvU!z#7J3Y0~$o;6QQ>_g~OFoC)YFRghD&&u+fsEC+Mb3A9d#z@V(++79cFHxn z_0Ii0)r9SnF!5=X(Ingx!n_1!ZB_`7$&jvCZu(ojAEcQO37#goAcN|kvYjDeV`r>q zH<+v;%sKG(D?ttL;(>vkRRsBE>Fe@pNG}meVyb$}#)7*V!8Uxz%667PNm` zD`jo%%pdiA4-Qdj14)+3`ki!Dv9wq@d#gL4TH|3sq%L4?#e4Vf^fir5gG)E{{kD26 z-M2&>Lw=Q*ur-4#JcR!M5R*~;UwGD8t;~2AjE+k=7Qpr&*qPINzt&6 z>v6bls@r;@c7&|MvnnTR;xxwlGqFramEhG{%$3H_D z+ij|IzP>7JLuQ4mB6-z$DZG@Dg)`attYvLSUVJLO)$N_cS6kGwQdHef9M|m`yG@>R z=U%Gj4We18B)qzZ4Clv`P+Ba8`?lp(%~`{?Z{6>Yns#j}Pae$raf*1BXM%1wsqD3k z&3WhQxAe+J^TRj9Lj~jNs!B)sBW+*0y!EbeY2JU-U_Xfe0N0htrq#Z>Bre*DPtBY< z;H`pB#onHZG)rv1w6U$+7F1>WHrZG=RA`G`bv~4=Q(^?>WY_WXEgr+4ER;v zN_%wlH-B;0=DgL&>2AWu?(@fo8vQE~pQBs{@$>AYL(=Sdxx#09B-r|1RuVd18~ZyV zhTWs?H(n=P72S_W2N_SgAxPW%K|cQg3-?B1EtIjwV{LEdIIS!zKzJKHYwb)d`*QK` z@Za|k7qj&v%iEyzQX1fE)lclpblv-$Gmc4&u8@H;Osm~kK_a);lAl@nKyLT^Z;E(u zwRcx^XUL7UdYswXMeva4WpmvY5XowU_;dI7tZ+n2Gf7XndP*L=`t`-7p4R3OCslkZ z=+VPVtC4#~w7J$+-|re-zK1x*zej0Ej3f5$a9Q0UqhY)s)NZIgtn z-_!FRT=#f)2=px-;y1$rZ`p~ioVG7J(w-k{i8`BpC=iV{W}Af+9+$^Gx7Ib*9~DXB zZ>|;5Vy)g9m>@GFmieQGifLnW1qm)=P5IAMdcTMKM%dbbyk8+X`)0h$PWXNBwVW74 zr3<2J5y~3R2Qg@+f}!#w|=R@rG61 zR?M;2Wi=SLY%ud{Qc^2_;|zEA(km@CD~yM2)mYfst#UuHs?VyeT5qFs8!v36;H(F9 zW-azex~>v8VO4qNwfZ*M4s4vU&c5G;^RJaD=gHA)}}KHzPNgFLhUKg6fL(E(T)EA zE_2~3E{8g^mfGXKi(%Wfzf*kbyp=}Nofb@yc8Ce4*Hvp7`%7PCbrLK_NDG^zLMz z6KE1XEGfPS*YV4$V~8^KqLnp0em(Iargc>`!lW{Dw4ttZ-2?>P+nSE05|*Gx&C49_ zgA4*;6BVA#vp%`00~XK}_xyP0@dazLs;uM$LUm%-1pIUzdCm}E<1thFQKDxd-@SP! zhHWbR+`HmKCpy{`XMA-c{z=)JL*e(j`!0(JSXE@9zpc~w?4%NwfE2%Vaf=9NBag0r zN)%1|O?OiH3FH7Octwm1M+wz%RgsQ0kHV9&X*Q4!(2J-p9{liCF=sP9@~R18w-AIM zdv_SJg%zSh4eArw@T+FJwCTAUCUErB{iWcq?J;v=I?oEa)B3g5yVHNS=O5aqSq660 zogU!jr&|>y@AI#DZd1u8 zrR^qmRkCZwom^psv#*5k=^>_^=mR!{yQ@P$l9NlT=@Fj}ufM7|cKP$e&bEa_bo*D& zNj&ikkO4F_h;N4^U}mf2^`7ja)Rh7#ctlr%0Y`2DBx!WG=R2SZLq%7u>w3@@Ap_X1 zIkUcsZFPbwX`JVLJ-6LMcsqA=*rPeMUVmv1yo~0MR5iIXPABG8d!bD2N_4_$Ge7en!;Qys?Vbu_Izd7xSc(zOM_wxBup~k{Sb?>o1F=!jT?;P-~S4Fb_0ONPvda2Ok z@0EQGxTnS~6_Vji&JX4s^NjpcY%m+hBkJq z(VG@>u3NHBOut?Iu@%hSUWF7s>}OTMIJV_!d`ELR70~fbICQ&q zPEDu{`?Jm?I2qu66SdOz-ALiPJzdclu-}?^hzCmN$b{n5(gyLI{h}k`I%cY`Mf`%c zZLX$WLMgE&v36~!!x7+SNAvZy1rTOn+rxbk@|J7l@a!x^dzGbnnjHl zpGqHCxwB}ack8o-VOOYeZCKx2yC~b%v#%@u8c++qhksswB0UR6Xx1cUoNYlp6W`j}8!#*3=4PzjogfVY)>bDUtwvfW1%uu1#1K3=)u z90I-)NtD<^yr9hztEz(P_JVMSq?aKVU!E|RYm)dyD+7L9(v}Bo)>NJ*2DrB&s*B*E zzzXkJNph<1CFHaL&xAKz66!AS|gR_+kc2~L<9uSi1IN+%e2VXCc( zrZ{c}z9gg;U6nHO#>;9oVZIkWpJHRNf#l_Q_4 zXjN@hk@TZRe-(l!*gB_}bfHUR?%Z>p_M1}~n5w^eqqJ#(f9>n%UD2k+)hx3?3VETs z;sZOk7=;%}fp9+CJnI#owCRb@_S>H-xf1OC4YI88D%)a|+?cO^l5?}$w>tP#G4!c3 zzPt0_pF`GUf@qM~*{0#UyVniz9rlQi%=Pm5+Nxt|7aY%2!)WPrvmm7kNTt;TeY_w9 zIsX7(Br5mXp6t;2)6+t|t(Q-Kd^wP?n5x{PYdGdq4u47=Uf1p({{Tpq#!DWEu;9Jh zcx~u;POAXr}Pj#XHuXJ#IB@8ynZo1=x`3fX*0yEvfzIL9RCZJ@4U=%`R- zaJ$i3-3sdN+B}nLOq_`U_ zChzS7Iiwgv;1G;sx8X<|u^Vh$+IUFz_o=k6Gad=zi+n~o<5W&Z~O%?G>Y#1AkC3u3l%O?UOI>r_VX^k1W!b_ZK>6I?v=UMA7zO zz|kt{*ED9)_JG)^#E8p9wq9@DUrSR3k{D&2{p)%-SSe4roYn@*KsocNBatChcHXGZ zV^AeDBRi?r`H8KIKa6X#j^^y%h;lE4fy;(^`=WK8G>ED-dW`nWo&JM{I}^&M*Rw>N zdvapkwyjZdLJ$P+6J=5L#bjs{SEejT_{F#>k;F@W3cq9 z+L;a`#@Zde6YQj-RZ0PzA|LphCFl2#nmM#_s;LDhk&`J<;S!)($Z+%7T$EVRrYiu7 zx;rFXDFrpd$B$5r)`+uf770~j)ns&?r&4$Na;~VT#*cKZ1F^UqJu!{TbT+#us&CFy z^84VjFVfnMz1{m?TNj0By+Nya{{T!2{gWGyO7%aZ$=>jy(!mYH=)Y>FvI4!+7$JEO>Su8DghpVu>& z()Jw_q*)RWzHBuw@KKZ=elCN)2*YVNDUu<5O?Rd@es7dtQc+pDy}>94EC}DHW}$ME?NG*SeAF4~FP=d$Jx|x34?@03op>&wbnI zRw=3LMbx@)Hy%9W3vQ1Qv0Zt%)T=HlPh*7*%@+fP`uWK{Nm|R<8$@Tn$|JK#xtN{T z&h;tQCOF(Gx8%IfkviIi#P`=6{$eev(fQg$=Z$%(wpRWJ4cxG-IH2{vqAQzH_FE>r zv)T5HR*=xnw7AKWo&9%8Yk8w|+aNSe;<31tJ%3k|fn`CJkNQs@F+zMJ9Gzgpj?8$i z6MR=^kOm;?Jny2U7AB6(NIH<>2&Fe?^Vb&k4GR{^;jYppxTrXboH?N~ z8sbmuefaySyrravsqb*Uy z_FUPuy_2NuTUpt*q!OAqRsL2N@dFs~e;C>##B1b9#^s~Y7A7^#I-_;f#Z2t25f&p! zVJ(F03R7o?WzqBfyhSlwU$%!OzJUw|VU=NZ$>nx%JG?rglF-=>zbaJcg8BXw;JqmB z96G7l6(R0xuIHXLeAgW;4s}IuluX>Squo%VhaJRyxpIvTjc>Q`gLT zB4vjrw?L@Jjbd$sMmizF>bX|hEgH3Q`J|Q;%3*3~8q%X0;hdPccZbOn4a%x#(RR(G z8XN)d$ycjsi&8-UJab6T+w=rr2?5tn--^=NZLnV{n0dqosr<3QJ13VW`t>*Q!)&zr3c(e$CY~H-t=Cd zWGgdf{2RA)hI|*3=`9+6Gla9_T-2(2P7yAX`-1L$`{K7sc=8>VWAY2Jzh=ZMK7%o3 z`s2HWP(vLd*5eW_xK#K}D?_!*ITv}(mHz-!{{WC=T#ee&_4ilyUknp@Y1@TW>a}TK zv}}y4t3szz2(R-1k1W#OKDJsMbz(e&IY{)E+S6II3+ z>JO}DWB8ig8XJMvGY0GZ)cATj&c|J_x!-kT#e7YrElsrRop0sq zQd;{3iW8y9vNu)vs~Ms8!&bzyP_+eBBJQ!{p3h|e07<+~@5u#^iH4{*@2RX;igZxb zh(ktoQq3`G&VjKwg}jDwskt%tcZaRwJ)RS%Ika?@Rz4x5EQODC+5PvewW`$71j{&~ z(a;a=`Uu!hUAI+xs$&mS-&I9HZ5s(G3L7`|ej>ip0$|--RET#oUdaH+!l{l=}*G68m zXC3{ros}KYzcPr~j@7|t!PO)h?4a__)7)28`L1pe6~a}KuGs|2~4E+q^NbW zpgbX?=DP9Ql0L|3=6lO|=e)@e1ovgn7S@~h?=UB}W0xFJ z+GkR#xftvVR-qpD6wi!SylRuMDJ{Hv@Hndjp&DBCnKZ+Vx}?!bHyUq=c4*`o9`&7U zLWs#9uP?ppuinfa(9?EH@+_IySM3tZf?Y37kCL@tS3j?; zLbK^<8945rs&%VF%n}>z>T_KH&|PZTwzExt5`}F9{Ngm$TYNZ@{e|++?~=<}^mE~p zCjD)iuy$pqCpv_ww-RbUs713}94@Yv(NsB(VZA?%nhJPQ3#vEs_L5>$+Cc1rB%B){ zUC4MsNhO||OAVX&!(3z$SkqNoaS9p!I2SRnmET%p0{oLW`Kcxq)2?F`ER=twKqTjm zeJKV8YCFeVHcxeWt*cNKuKL2oA+TkdYjwd>ob!MbR#oYeY@&w`#&3p@4k)8?4{3pw zQ!XVzH|=BEGs}EIj>eJ7y?flPEV{shUR5;>nl+TN*#J$U;2$wjQMZj8S8F|xR5rjHjmSHfKPk3svV|!6KdG6 zJNr%mjjDU3VY)K*izC=g$D-TV^n^H|Oo`nzC|$ERXReD<(o%Wu&l~QF_ZP!A-N)j% ztA>`mWkRN)xtA+Q%em~`)$vSd#%oju*+6Wz>KPOxpJFWWBgia^?X%Qx$of~SEjU} zI^VX{zpz<#WMx&_XahT=p(`rr#y``X_eY#t?XxET0Isvf{{U64vO&0a_UfC(ni@Y3 zWjwx}x5ir2YR3NnsjG-^@R+$f%OE0`Zq9dzsflR^I<6elpfHyt^vi)HTm}2$3*(IH zxFZJ;FYQ?F=$_@~kSTg|o8l|W9X~|j7>vzutJ9KZT06k)5ggf=`PbCwBevK^XTQ?; zw;ERe03KIB-J?ULhiv8Oi~iu7-=!)uoZkUDB7fJl+i}CX8?>0iSo!+Z$|q<%QCsut zCs{{XdDRR*85$}8_-_wdbPOe+!p0IxpklGUbI$?HG8P*G>CmDb{O zo>6fM!-wm;pR&$cyh#jBPaS%%jOionk?$WK?D$2b8y*YUFW z$dCCu)ndNN>0^l_X+(CN`4LxX@bHn7Cw9vA&1p1ujvEopACvz8#WAxv)X_Ibbh~M2 z1~2L?_?eH|FT`t9^q}#7k~p z3)HlJko=8lo?CcT=z$|_{4`bfR{U}EjQm?EzVAn;r6Fib+w1R!+!q& zy-(68ZI(&S?=IfT(hP5dTz!<%O5MZX@y$GEMTZA_bdod_MmGh=8%hr_C|!xYc^Ub3{vfS=tvzHHaB4$UO^ZUbI(x`Z1(8wgS1^!99jj-;kfqk&M#-VOIs8S7bsyHVzk057Uc)iZ9ttsS zX#Bk6YpPOe4nKGVdjldg+%KH#kCHu}*!XT2^yaG;o9H83PAv@&n*{x{<%rUH9lFGZ z)n&7S-Ds^W`2bz90IdrVG6j1`*`eW{aajh&AmS&Db6QXGOl&hk{UtKtr&2<2H*@?! zBf1b~SY@BRbC+g@{bri)w~u8^HIXKVi{t_GQ^)Hbd8V~*BCcD#7}F+#F8R4qeJzmL zb;C{P*1velS?wB;Wjqact+rZ1%pU~s*o4lkGT{}t9R4HGv{Zk{(SFXJb;)@?n1C4f zUDY{CPwedb+&+<_)g%v%-FIwR7nvSsx4}{-twB$U?EPRaY~>_8drPE`l2R>7U$x^M z)woYDb%%i1^NzdlACtGbW>0MwB)mkB8hwV_I1oMVJex_3<`Rk)QRm9@b6pn8XL z4EtA|>D{|xr{d2zD`B6#(@jqj)~ar*f$h%-Fl?)T%#$49fKKSPklj7}3%^B5K2(Nd# zluFv9&{ywF=CLjtFXdjH)L4)9<5IaurL79ms^P!8%teGTDRKDCM0v-3dMDOxASr&~ zzqTebA1bUANR#c|Kg!!AUA3OrmdDDfTvP~*pG-5V+?`QvEBgF!?1{{ezh!+WZ-=+9 zx=U#37?+oEMaoem_jhNmCP9o`WiwU5LyHUma;=M-p42+pMW1HRBlSBzop562Z0|VQ2~_fQ)+K!ShU!MtKRAEhYjSp{Tz;d}E|dbQvL5 zpXe04^A9ZzB$5gEM`nEBFNcj)V2;O5TvZ0s{R4JI=Zab)gB$w#IzdSkKCuPOl~w9XU6JIIp;Up9nC3S9A}z{oE((n2vy~wD)XDK=M~YctvPn8-lW5iEaitfpPGG^pThqD z9P^5J_8s2Y*2Oj*qY0jg<(oqb@^J9{#XMUar*&4!gRbzJk>GEFD!`_PcmSa3SarnCKYExp4Rf2bF&>z)I z`R9Z{iDx@2(yme)6ASS6PHfMMukY~Bd_sMk?Co8`D`Hhu>Dh_#{aMeaD2V$#b*sB0 z2-2$G%{n(|0rOv*`28X?tj4`Q(L``_OWU;455*CUl+W+cI7hn~^-5D}-Ekj&a3@($ zJ>fW74t3`)%V@Rf^L;$whReFUCH_TFlG>YNg0tHL{{Rm0`pcH?Yro{(ebvEj7SH#3 zc}G9MAN4&G4Ww=F^u3#Ge_nf|pWuJsnf_M)06MG^S8eQl{{Rt@1#XVraomFIMcMPN zd8X%dfC2IL)+IAW-hWjY_O1!7{UrnE?XNhQ4@DclQ`54F>s5XB;+Up%l$wCNdG`?( zFmzA;J-d6T&$Vx=sU}x#hh4j9-_Pm4!uYj=qJ`hC+^VioU1;B3xZb|Dr(V31Lrdb; z4vv@g+3$*q==g`M9}HhK3As+c0y@hInU-eosCzja9uWTr)N|=H>Go2ZW;5hB-plUbL$08UmIvw ztCb-nmXHE@!d>#ISEA5RO-O+|A+aK7Ez9ar?_b6kxR->0pZZ}gN~*C*`Z7s`y0fED zBd!wSbzo5$&j?An;cQDPQQzIVJ0r04P7V^|b@iHgm6Ud(iB=rTGI)$H`;<{~38OxfSNa!5&=}j0>7Yq;Mz{5!m#X*at7$<#J-l(Bq z>V9$ZjkXnk_WiNncWedLrZX`|KQ79yK9vIp4!7(_O&rwYENm&(KlJY{gN*O0lFr(+%;zVX_N>$CHf^4o zB`6y>Tt5*B)|igYtE!`mq}=oTv&_{?Vq%}t$!Tyx6q~TWmTS5h`@a)ag0G2cd$1?U zs|5hG^y}gXbGXxv{PHm&kd4#BeP388+Rt`nKmBPQ33&3v;yV?Ytd~+TDFRt zCQ;M1Pm_-uw{iMi!K~x=UY&2!LD0})N?;1UyQ^cM-pmg=SyR$x`eKf&uN2%jM20|d zl~y~#ni~QR0CMTG>wXI1=x?)ZjHqj*lSwyX->DuRF)@~0>aN?#4fdcXDGI~2UaY2$ z>UPbMN+~Fhc97dLTUZ5VFYJY!ACK7 z*S%b%Y}kz>2F2W>K!+@)=~)B^L@9bK;67S*L-hg0ZJ5eKbx~DW*GMtT|XVnd&K_$?b5!N z(V8Kl%x^DFSf|@Lu#zy(;+@gvR_Nu$+s#y#;>g)cbxjm(MWs6fyE)$(=&>EN`Da*S zuHhUj4^MhRM9fYv}#jR^oxiV&1p|Q zo|Vy5N3&|qSk`kyyCvj3v)NqkjRlCdA#WbkD5^V9EfUJ8BYuiYrAk5ODO_`OdQO0| zhdqW_>=op&I%+h7ugLfAtc8bWHuEW}LA#bY%_G=!eS#cFZ5p85JeQT*?XQOS8Or^> z{1emm0#Yg)@b!tYbW1>FT4}bYo(TX%5-uwN7a|oNSGwe?Jp^MYr2OBS@c;g9}D#K61}>(yTp~n*!4>PN!*A z_r^VONnwTgZ2$!~+~3Cl%VssPT>W28GTTh3k$}FpZl->b?K%OBg$Rv264Bt}B*+5<*-p?G)6+gNuF?876mm6#Ox9-Gq+>t_RmTab z+jOO}U5X~>baL)>q=^Hp*V&rL4Rdt}@JBMuiwm)m2y%MgqN`EXnN zBmrt&O72ohe`rOou1r#*F+0uiXb1?ZdXejZbaKM*e7C&t;0Oy zYoqjmG83wnUTZ6C(ejW`*%Bd`+vcxZt!@eouWvRBv zSOgGjQ5I${yMBFrJ1Qu)X&wf?ywI0R^lnmNw^SNIBpegUFw zQZmENyBVsdr8+nIcbp-*3afT}>mDhlbY`R6?NTwxY9PfLvYq~QwuA&o4ZV^#(+Kn1 zb4y7c==%PCmv2*>7e)l;&$)M2aftR?59T;ye5$yr`$eZxYGeNZ!(gQChEE#MeIn#& zw=uH<`m9xF`-q&qeKD=cOpb`XBA|74;-tu`H$R zpeZWjxZcuImvP;Uc@~_AERjptC4ZHD1?d_#R)|14`=#gg&n02C zVXakum9|`X)Fdb3<=4mQ6vM@ChYYa3Uitj{sCMlOuKj5ZxuYz`mafqM04>_>R+rW> zI$KUfwLFHrneWSX%sz5lv*_Uj3AAaHJ;h$GgI0PiJ2WXstx!Cp?=J(} z9}>w1fAwzNpG(8^%m5<4c|3Ejg#k3nMS3N;pxrM!w`U(1^~*Fu=?U@QL1bdW#_TJK z0b3SE$ynLrx+XoE!3Dpssuo)|Wj3mwJGf&M)~FX7w)Etru--SJRjDPiRd*Q7T44VG zE4x=ts>TbAVOSxaklAUNmvJREJ1QJvhS3Ka%Y9<5Y_YXSzdU<(tW_JES=|OBrVYkQhFf-9 zwsg{gNfc4toQSiC&6Ved%+z>q^s3sBZH2S4P4tNJzN)vQo5mBbRRXn;615T81aB;F z^YlV?DW!*s7CPgGSIV-wy;GWRl~qX)EIUhJrmEpunq89+;?mC-SW2rU9`>Il*{^4vb}3Csw7Iid zHYiuXU%cj!4IyO_VUjikHo8AeHQ}JUxY_HuVzh>XBU((`h3f5S zuCpxrU8cyHLD~c61mD6m@GY!-ub(=*wbQ+2@R-T{5S@Wd5q8p>`|FnVQ-) zrqS-sL`Gqm-HMYIL9)Z`7Z{svS&&wsE{WmoYj4XHRS?h4t2`4V_LRvnP+mypR0o-_ zD!?LI;kWw%U6&eft)53>icD#}o`QdfM-f#g>k%EKAdl`nQJU!}{Pv#N!3rO#Z-2}) zbOqW<48NOl%xBWMsSwB{RrejJA*EVo#M0D;pGm2u%7~FI(B5uyde@S?vbC}VoU*PQ z)LzcF8))q)gIn?ApR6cxT5Ibb>Qq6k{C&D7_XLHy(wkZmt)WZ-H|N$4Ln4V?olqW1 zJ6`xMoXW47%G8{VsKf5JEQ*k$@O7RUuK1_6Xx6+E1~=h-^+jlOewTX)6E|WE`)66M zVQYI-PFRjit+q-)Dm4O_S3hgx9dFU)le$;k>}zWD9T}y6C}<}cXH~IN8&FMIudP1t z*-^kAIl40uVHP-!wO(si3Nu}@{A#yKX*{l&y(qN)=@dL^3}ja@+);}Iu+J`C(Hh9s zldK>EF-mb!`tbV2t)EFbw-QuG*_v`3{rYiH{VvwpjI*D_-$V0nrwp5-d$hZQaq4Qa zN3+=5tS-dvREtlv@yki~M@_T|SIt~=-5G5src9mtcde^$qbx!~>f(Z~xS6t4tLw%* z^53NO%Z|1`RqnO+dnp08bW9e7niLMod@keJ8EaLiT4sLy72F7VyrosKLT2phR_=Z= zp0r0ZG;vl<9Q|%Sp*ERiCv`hN5mxx5%vaAeSy#3Gi_m3t!1lyvIpq8$b62y{BfCD3 zJ!ek5s#&1D*!foZ_eorxajM_f`H3*1o|RpcII$%<UNy&zrHP?9bzZB zRz|fsv;DYLT)n4A+aumzjA(4uR>U926-#K+VjSlDCtK4@^{Ct6gqo5r&lr~zMlk;X zTB^-vZN4NB!TtK0$wc3gesM=&5)TigMivIN;e}&TSWPA3qcR&4FZ)$?_RfdRy?;io zjw}T+ojoKtv(}&M?yBgX%Uohd?CrZMu~9omLtmAu zwg{l%41S}5oT}xf(YDC?&Hau$Q(c_f@^cAEsG_NUdn?K^x?Teu!*ce&3ftprLz|9O zu^cpd)lyqPD%>~rX732{T`gj6yQDVAuc0&@xc)Xw{Cjz#Y=y6fy@xzFXSy~fve z#;{v!J+lkuD!t^Vc73gKNLBGeYO&*X7<^RvEd`p>IdZD|mdaZ9k9&rEB91MOboN)y zC0av|zw5Vs_^GX%Y+!c!jc)V8D&yH@m&BB~aRK6{vNqiceg5qI;-%Jd4jj!6%2u$F zDQNw_@YT-$037y3jg^E-<5l-^gB%P|LQ6=BHh*&s)z2@qTgg_IPb~H+{g*2C_RQ(W`#jQzUO$;isPE87j7;znOP zYl5tLbiz=Fl-S~K!ZOzDTUydV^2WWE<3>U*AUJow1x~cS&~cSK6ioqEe=&)-X^_H3 zwM^FqzOd-fM1E}cHw z1IxI4S>bi@mWOW!J~`CntSxqFL3GAk`Qu!bSGP2gmL^n!urDH&r(SyF*8Di*6^%HH zy8YG*#XL$xD38EnvbL`hT0+y5ql3Ti^{j834&jY$UV8YSwO2(TX4wXw@bAt?2xFn{ zp3iEzH(fe4Y6DMu$2dndF}sgy-nd?PRw?RM(Zc-Qp7`NS);o6BB>3H>cg4eeb5dk+ zubK&lC!Yx=?b`uAKabuBA@KM?F*2XWPgJqHbs&%2@q!3@r^z$&aZXI>7X{zfoYLrb z<2x$4UT(!P(JM6M-Lkcxh>~fVeY<0!w{p2hFFRzOr6<<1Do@uxT0xr4f~s8*9PEOc z*|P;yz6u+C_k_v)skED^puYV1c3~0&BxaiID}R>`)AoK%%Ki4K_>_^U53i9 zv?4LjYM5Eg%t(=q0nPCtujhvuCKk<0x>n~{ExCCjo#Q>QY(6 z(Nwr+#v{asv+s7rC63x~^SjAWy*kiGWZig%h@n>P+4}K{_>kzS4R!*mhQtG%k#bqZ zB}pQc^QL&jCpJf&SHhInPaIM-tfuVt!zERTB7bNHa{r zj^T~h`%b-6g`cByvu*^Tm74zmX@?+{(7A)NT=w|JJ#Goi)#;JfRa>~>obrM+Z5a;r z@_^@ORl^mpquQxA`FO*fURd_O(KR+rrk*~qDSOvcCuh36uA-XKrBvs>5fWS&t;)SM zINW22!}&`q#Yr;Gd$sQRK^i?f@=Qnu48C}v%h$>CcRm8O+ zO5;rCu+k^)a$R3sNg2-=5r#POuRYv(IaOspCE>SLlfToyH$->926^x(>vVZ5_J`+okYt!cOr*s9@ z5^|p;;b`An#cfK_YvJ#Ge((oafAPm>x_{>tDS55p*dNvAJs@VlPxX>Q&^F7ABq{{{8%7TQpJs0IzHiA8Oy18pGW+y`(BQ zEcf;2gieK`fAOoYQJ-l!8P{Z&{7uIV$~X6L8sF>oqZsqgyy~{C?H3$A@j1_o zN{3;V4ejq-kPL18He)|D@Xtow3Y8WR>;>P{)pblUcvW;;AGamtk#duVA1Jr8XuKvn zXF{`y7Clxdb#G~TJ7EjD{rKabtZ3|-J*}17lo!Q66_OUtTQAJGYPAqg9_;!>(;+pL zRU`u9SDAE|NUnad$6}hEzfP35h5{P8F$t}H>AQ~aPS|i0^+p(9-)GYFf=L+m!Ix5= zjO^F(2{f5(-?!x=T~puqjtSQfb=v8Q@DxcA)zsw61g5mke$m1KT$)bm6qQ^vnnMdV zRzC@v-gWAFFK7!;r4D&RBv*BXc_(>UC9ady|T6hgNQFM!cc= zgL(_20g10P`y-XuqTWF}{GuaifE$%ax!l?q=vTWh*C818O+27+3-yQG1eF~(HrQCnC_SIsVX7r9ySWyKv<-aG=BOP~d zRZ%U^b}q*&{S+S4(@Jdsum$_!!W7g;MSJj{daMxU)6(}BxBG{F@;o>}L?K^1*INoB z%7IU51Md}kvv=n5Z#rEy0hpwuf?aQ zHK`KQPoH%wJwTk&zPzKKoHrkzHKelmVk4#h03SIWxq0+bt1m?DDb*w;hZS0Ur#Y-N z+ICe|Yei)6t>am}xFa5o>TcMyl#k(EAyoMf(>FwSM02oOt1pM(LYA{d+pDs(niuTL zJv3S_$**=Ozddor!+VYu@0z@aXMqC%J$?!GR`)`EmzZawE=doU7XICFJ{6vFoz!xb za$S9;kpBRTr+s-VRigTevuxzFOrvR~4d@*p3wtj*b7eQr=9+RLt)@C7blGg~-5u5m zs!1)Pk2nYI9`3C1htFb3%^DdnMS3IM1Zl1HxFI-o^j=)h`GgPhPx@i$iIQta<{JK4 z?twU&`FHb0WTjPIVzz|4lBrUZk^rvnIAL_N-_p9Lpe~&0q^*+6!Pf$46>(4;bDN;r zUJD(9JO}E%yl$%Gx%sTkXjyZQJj!1}jaBms_kF&D#k_525g|n~$=*kfOWAxAq%~s0 z8rYGZts2Y=jA9(ox0L3sI*wJp4=gz%X)}9=+wj>yP!1VRWKS{Ywo~-AT zd3~xGnV#A`m!nx6CDOOtrnX$>&d9Iic9^A$4;rhetA-nf+kIZ1$YHqEa8gSt^=+iq`o$ZI#7e3;sb^MOsLYbpGDlBSPka({RJ(XMrt$rB_Ra8cNy|x1JtRmC}&f0U2Lct#*lf zj;;GTAVt3>%*a?NNv_s&Nb~!27CTzK{a2ybV?G|KnZ;HeI?%?ZQt3-T`b$Q& z^N_9k@%LN(6{QO`W^Tg1vsA-O^g?1u$5ezU08Rp#!Z3FI81@oC?7a%ZZ-p6xWOI@M zTCPmVtw>(o$31bDj>ojg)1%BQw!nuH@haq;bZ*!PeFaLP1Y&$Ud3JA!dNxdmJ@@uh zT3X6=9U+lcn?*FiEHu~dZX5pq8RH&_WVik(U{8% zO46q`dQJRuo$;BCZyNWS%i|@dv)K-yyDq&p;-_{+y-F*?s{x?;E1)F{v~ z2Cl9MtzhXono=sOzZu;c8y1)_T-*6|`0l7J`Y=UlAZ@R-W3x25wV@!Z5I4r&#o{)& z0j-wW_E@`Cf^czktGCj6eb%iuNVx3--JCo4MWf=f-wcdQuBz;yvK#D=2JivLVz2sr zqlKXB&8LaGg$#K=iu5sHd`343o*4P#MS6dRG?;m0Hyz$Wr?~>9?FXdh`ZA+(sp3X! z*|^7(L$$@TS~W>G5GuK^Q+<*gdp@uN_Sa-?(OKg(5q)qu>#x>5OF%|8fXnBC^Nl$G zKrXsnDQMl})x<{{Ri0QdTxVS5^`8?}#*8?9pBbG6dEAI4xC{KjvV+Dwb8n5_BTd zmQtHZBX;<&(M7Fz4%>%MWd`2~(md;`vi4hYudthwcpNa}T2r6WH&EFP%)be4u4^Y7 zU8dpZSf$FbWmc`Nl;aTMSfQ89YVnuaV2v5-l@`#|^vhqnhLyvB2Sar~1m(s;8FYh-&-DAa&uM{r+pGv|FQxU6JKp z>uaJkhvU@*%bE^YS{-Rwb6Y7&zzg7Woz#yew`e;+d!!24w%rCJCP?3Zdf=?Shu9OY z7Wzc2;av88;uV*})`vy~&2~E~r@>ZRE%4gYA_Z*-%`vN{t!q6^y3khBbTt*kefwkD zJTu{j>ae|%xw&wuEC!U)M*UK#R=T~CrR~R_d8sh1r5nS2+oRJU=s0ki*)g|Em3u5j zraPh&*8c!SUvy{LMavR%Y)KFT?)|!N>d#bYEE+l!WD7?*RbHuMYlA!Ly7#hnHme=8 zCD5LLr(_Hh!>b5|;!h6Q?Uq;mjX$Z$yEj**mWj7Tv&C)XU(>oV=tY9`obw}PLW)iz zo8#s!BjFa=beVf0%l=RL%RQ^r?7CRRvj(}}*V0|`SHDFit7kSAK0%H+N4fYi&R|*L zw2T|=>aluV`tc6Q_pB6GO>C4cw+K$-yE(!=TFCzZ;8GXNbqs^F zl@NA$N3{O{roJ+Lo;(H^q)4+UH$oxxe2drSqBq0NqheQ zbLH#hAEKY>=Zafwv%m%7_O|KeE-U9h5@>(K_nllPRn>9pTRINqoij3e5}GN0FFf*( zdw~(Lp#!upI*7vxCkmBvReoz~S!+qUhLFcI9jJ|VRq0z4GSqM^p4{$+iT4w{8pNdO zWTTs2_S6zrOCCE@Q{;rvZArh*kQcUhWy-f7lxDlFSJEa})~CV>w}`Ec42-d=+N81F zWg?4q4XmbCg@w}kuPIRPg#>vz`j#OBj(4)9zS@v zhW5m6TQ92e6gQY}2YT!FsdcEC`8i~nkWR{eZe4sSkr~Y|qeMozz+*hCZ_3?hZ6z&G zT&=x@r>-;6tuK*EAB#J&k21E|UuSug#Eksw*?K*eJ7X|?*A-;68(kB2dyJ7dswZdX z>gV_Ki1vGP;W|X>k#%<8y*|-mhZGxy{W*<_{A#z_VcBI%rPTEj7a?djE|+HzY7#GSZ|%$4ctbnqQ4P;3g|!0_RFXxhV1CPlh?wY(hOe*OZl%hg)uG zHAtn)^snMGI$OlhY;AY^f_LZjD%_wdeWf1KQynXTsgv;^o1b^yJg-Xs0H|z+=K&OF zoo?8Y7|nY@+OHF{Fu(Pi{9`E>{YY^q{!aKVOw_XHueBe`;^4PAvKRd@D#+y-|#^ zu2p(EXx6Z0Z8SEL`f6xCFG%#A5#qZ&s4#v;@RumW?6&$UE0`K)a$M`uja5uesrQ;--?VN?-@^>! zxJE`jhgg%V&RsnGx2=pFCKv!N!Bt&1(3$%gZYZ>*?ALMU$|)n*-41tE*=^h8uI&0j zu9frIHC`>PDt5-(OO6z5*Bh>gTCNp>vlfQDV_mBR2hxpe1*vTboPWN#r{*JCUgosb zdg7+Rv30GR!g;un}nku0?^PYG` z#g5EwJ%g3%FzAzo@*WE^uIG?osjaIgyQ!kJ9#7Eiy&kgsX>fi8vt9o%`Rp@M2 zpxymEvq&3lSL5EgqBWzB--;$nL_KEj>?;O-|9Z{LI*>Sq6 zTe~fVmf3i}x!b?%YMsbhR0H1ob#gu2X&Ku^mS+mDZW?n} zPi3O)YsnLA8(90k_D6PcI6aYX15f@Q!=q@-PXxv=Q# zhwGNi{yosn-RL4w^`&~846s{tfB0TEdZHuho`)#fr&>`42xt-5?quy9_IT70>NFwx%U#TvpMh+OMpA7vSb=Lx;Xs zo?dsao%~?!SdkAOH5#$B;YlGXbluPI9#j_dfbXuZk8dypWN-N zMtz=By85hChS~wg8?di1rSiH!l~RswhXT_(xJwW-Z_V_xo!P4wZ5Bl4G!~^}#Mpx)uDx-vtix9nen-=9jZ; z)Q^9Dc|ls~)mJ1J9zv@CpCzqaDy-+yBsA4gGfbE}>z4&0m$k(&Rn+60)(*<5%>mNB ze#?9I;BB=is|5OImpGpVq{vsM8#yQujDoD%+tSne36v$<$`^Ha(DRL!hqCLrw^zn@ zd90q3w1KT7-{o-A+CdYRqw}j9OBGqI=Zt!Vj?ehvgDkjL-#iVjF1wBO+u3rvN-USz zo^Yrii0(Xd$`1MRP{5sZ!`sa%uqI|?)RKiLP=k(4afbE6B&_ zz{xgB%~&@5ooq0VeH&#Xg=+zAcwm|IokKHnW@q4&^5C@|`YY=1--3GoTGVQ85_ zLg|4VcV`$e0H(CpL>be45n_3#6dOr2G@yv@g?1Ic6(O&xe8Jyxeh0nYdt60ZJz7kW%j4DPu0 zOp^&KxMt{cM%usJV3US?e9d>sHZ7`SpR5rKiLWq|OJ_b(P45DuobiOaD(mjPx9;N! zIVdgz0xiBlB$e-cK^P?=zlz~arJxQQ^L!ME47zRE^LW~uJLP{}n?_zmDQKi(AZgRA zRyslN&wL~|Rv_)@Fj^GXyXpCalX1(X_tt3wi9yd~4bZ_wNnV*CTyvc8Z{P>bJ+GG9 zs?8CfS~vLlz@K7i%W1;A)P_ahmrBhjV%bpnym$A+2)aC9aKQIc8y1JMcxv4up8kIO z`9uhsGI>>dqX_43Uxez$kyGZ*b96w7qDh_IwrochnRm~%Zca_WjjMm3%GPv%{{Y1F`gun`+kf#~{{SfMcc;H)p;q#a3+`8z zL=l=daN(M1wDH^Zu_j%%vx<*yZ-b2*+paZS(9NfRd={_qRjUPE)*$WC^8USy>yi_# z2makR_V!+rIJJD);mQmw8wV*@WFsGWx~|%lHtlg%d&YRd*4pN z)1DC}whe>N1kcO7bXym1vdw+;=h7v^(bxX~9KDbo6K4IHdZ_&Vm=yc1ue2Y(r;J-c zumOmw`9l1ry-JF`q%X{q@2J8&)SskEYju54 zFe4)uFi9ivL4;TT&q@0$pp+UbntRM-&6|Is&;|Cn}=dudXE-C9%cP@ly zH^b#s#U%363V2Wp{5L^c3CH09?;CKPa~o2`Xx!8P01HYzhcxhsBFN)>yC0<$)~2;M zOXyVcmMX&OcH{JfY@}@Hh5mbX_vEFLx(z&}043M{f^+AL48xS`uYJkC?hy8ltAGCh z4J{{CU(>n%ll0Fh3z#U+t|%u+v;N(VLOgy_hqBHF*Zhh;@UDRjkR!IKCueaJNSz3yDTP1Sm<@s*%`ovdh z77Xiht&gSKE1gwSk}6o5mX?><=~)2R`g*IoJ#~uM`coMnygpS#Z8eYW-tImA(Qe1p z?Uf)9OD&3jYGSf3l6lXiRs0onO))?1=Z#>d&B|FedMK1Pa2NsOcXxz9eWoMMH8ln< zm2n@-9pyF7X$+*jLwh`c&nRftIFnVEJC#gpbKGUEx4#7uozogrC17^*?(;D54tLdW z!)39`zi2rY*)+m zCy`M}sn?t)^&b42_{U}jVP4rZ3}}RYho^Me`gys9Q7KWaa2dPl4Rk?QVzo9u3BB^0 z4@&Hwto;nM=hOmNaX{1MJzjCo$ZnN=c3UeCg&NswGVT<7k!weFC2QI$NAQkcPmu39 z<>d_4aVDxuPXj>N;Yw{CDz+;fq8`i>^Ga<_NiTLNKS)}RJAA&?ptD(^j2k`*+~_~D zqe$pf?2q*Pom_6l49EoI=kN5I=#blhmtkA)$y-el_H?u4lGS99a39MTcc;>^HXH_t zT{^DHEA2yVb-%8~VC+3p+44z6B~fr6ARdt=kig?zReW1XGpdpy%V?aeqJ7p6$wpYaWD0V>IWTX^2Snf4)!#KG<)-%30#lB7Lmg=wd(UNW zP1QB=N2-|F79-ONN!ak`+xUV0a&R@-Ft)QsT_4c(IkB|YhuR3&6Mo;WYpAbhXk%e1 z{jL}6`oy+RmT8W5&qXYk(8dTKv^Q?fX%d<);)YFguQaXg1eRKV${27M^12>_u4bZk zmaZC5T^i%^z=%DngqK71*AxrWja)j3XUk1rvaAQ&z9U7#cVJN(`tRw^^~kSjeH*td z=4Xt$T>u9+9l-F4D`arSnVqx03Ysu{jaQVH5_Ia>(kV-E)I6uD(wf(6`m@N#op^=J zjS1pl+;Ok2i(%p2C;mKmXIn9!1WV9MVfmI@>51B)t!s{RSow3s_7<42NZL=D`m@3Q zA%^I1!Faz^W62t&roaO6`Oa$|J#Df{&bq4g?brMOD&}X(i=R{jt_-yPd`kL{LD`ayX>$5a#-4R)M zmbmBFHH}kW`tb`c=6=`n-|UC_Q?^pNa8>>hoYMf7x>L`9;6g;z)Zr|Njv4A{Xols7e zb*AI<38Jw$ROipL2%|P=kt1Ptu;GuYyAhbkc*;t|=#ypEk+e<%oO8o8*y#Nf@5UV9 zaH(Fhw*4p?@&me1yYB=`Z5}C}8W+mnESWPm|Zv3J|*3F7ZXHPoO z6;ZmB&p3$&JXmhTi}B%E^tnoWCPWwnQL!zukdUQU3{7}l_s7#~qBO3ogO2O`>id>! zNNCXcmX4J!2a?&OjyFFjuqdOmn#GovbUSUCz+Pl_V_Y~O=$1OiXa@U_4DwZ))X~?K zJf$H9n{}-@=Ztu!kkC;LsJV?l%VzcLHZ3y^wouo&e;mzLXqBQ;rbl48bvX0w?TwFz z;F}(%z0&^xwiEa0v3h#cEn4B5#oZCAR@Rjbgq0?=1HzYX@{dY|q@aE<2_3GlRp(J` zF^kK9bdNs1vq`3{CKYlNJH`J1NQr2-!o{xXUW#R&#TPJB&X3Nvr$DGT@$SzG#h!?^ zHSZN&lnpIoA%};U_wS0E+VX5p$Sf43l7qv6&(b#$;X#jOAc6dLZme@&diZZ-X@GIt zUh0DDcEd7nzUxV)3XON~&)%Xwc=5)GU@;s3mHB;E<-X8PbDG)g&l=o-`a7jg+4Jdb zP888Ye>?koKC$AUehB9gBfoEzXMUd3W!GjEziPNz8Kvo&VWHC2;lHbii`W*|YJoY` zT(TC+6r6uv)q*ieT0Jhw+OHU!4$w{Ws^#5N#DS|-D(5C;?V+6Kd|cV%;Z<4V1@QB) zsuw3VJ>m}&pU*hFvPJ!>b?%_WZP)Pit}0I{P?5&${raPGqvHOfHA@~H=Izy%3D6`j z-6QY2d}tdGI9Ga-gjp)`l+#rHk1;xe6o6_t4gH700~*H2z}-GxsF3428OB%2RaYz}jt!QvzzVEU0>;r+B=#uSyOw$Jg2C|o z7;X;yeUvErLGPdJYh={@rW<9jnnsSz4VF*<0AX^aj^h&(iLQyR(XwRb(4y;UHyh|F z<@7Od+gn3sNEy}Y0fRFsV}=q#S=$E2L&O%@2B&b(Z(Z?U6T~nq@g?~Hmnxxr)PbU1 z6}S`2%W~Ge6p)x`^i86_+6FzJh@Ld;D_jx-ftcGcp*u%93+6!{X#|Fe32DHf)xg&d z2RC;|pJ_WVk7?Hp{?ocuhmyOqMJ$IY?Gl~{+hvg{E|eRnoacqnq|qc<*ajO^TSVSx zJa75UNA!{Q-D!Qf&x~s9_Q5eKuD#W4NJkk<%CD>yXwr6&ryQjtUtxdbZqZ!0j!K$4 zWKC7U2W@FV@B6vWTuzA&W4-sN?RLXlC+8$7w zg|FS-anIV3n6<#iXO&S?80_k}q1~}(rS_JRD{<$?KUmJkgnw@Qc5qgfXu6~s)gF89 zRU=v2CH`a0x5U<*vE3OxEu+Pv6TxoPx6u~j*EaKr%?NZl+IGjZgu8`7JtZ%%8gcU{ zsy=D)*M={M_P1%npB&e#Xq$L@8a1bI6<+GWTWOZJta72UqNck3T>YcTv`k3aGTz(B zlgFKQ*sSf4TOJdpCo$(&;<@Xs?E^%?o2w#<+xdHVc*on{=|_ss{{WY1i~j&nZ`;;u z#QayHTmJwj>9;Doa9o4-fYn~gX5CD`^%L&($K75T(yX;v;eOMY8SSgEUq9)K8=*vh z>z{nO`z}iB14mx6=HD9%O%%P|e4}RI9047wu2cci@<3_jC@6!t#Bw%-WZ4NNxuxu! z=c*dvRo|Axl%~y{C@J@|*AZUbY^PO%I5l4=qhnflRab$=E21-0)nKHw&O<5ucScPY zx15uCl_g{pl<&d|XN*A`3H3vG#EPy9p!${8g5}pN+NLRbN5*+`?)*im4T{Mfm0LL} z7F$E1JYI3TW=o`6E2jc>QKhBePQansuHp5JUYXIe)*-i6e{0dSHj>s21=};uuN@|e z7G|2Qg(i-XPI2cpt09Kx31_ix;71Q=&Z^{R(T!<1!keVY6sOM-SYHg)bKHnp9lm7U zC2ci-uc^5Q86tU98$ZnP$AY8HX3?+ zazzWBS7YJl8p{TmH%--jZ}Q4pv@pDe_E!GE*Oi+*%3WOBWbD@Ui~M6q%_h>>mvNb@ zzhcMRY=#W(!)ESE4XizSr84d{Cp111J=Nb^_!!A}gT#!pLwuemBbv=dp0`@Bx^-;n zg|DP@4u0#33MYBv*Uut8dhr*EBS(Bd*o4fPUx&{0Fw#>e`>#Da@2EIxIsG%;9$jp- z+T*ymml^GvFo(OYeu>sgK_4gHLXG@C5e1N~E+Y4Fy>vm_?wn@y1zi#Sv)vty0yqTg z94fq%zaGnw($~=`xgw>YC{uvD!#Kq|?KZ13i3HVf%`mjf1leTi9jRhWq;0qolf=fC zLU_W{WP1bRIzn01=o4@`=B++~Yn@V|q|7}^0a~ksd;b82e06b zl##l3UD7YelnJENq}{eSb@<;{_B#)Wpjsif{z27T*&j003AF9jw3dAS;#LaysuqAnuV1BkVYj$S`>Lw$9Q#PvQ`Qrcs+U5A zHvSMt9$#3ZiDYO!{iQ9+{hC3*TyMLlean}V_QkICuBMgJ)1@N%o&B6S#&1go!-nI9 z+hxsPXnRaZv6+qk09@6C(1|zRX{9VGqylTkJY!B;KX-}ks^z=gbQ31V5;7d?r(|ei z%sV69-Ap6StuYInZ_j=nxvk70Ch<#?XOs*sxZ#{3_H2IYxS~7>ZQ->bn3bVb+0J)G z)IVyedq+&qv$8H1#F>BxO83D4-#zJ((o(1kqUBZWg6*7q&2~x|Syjh5q)CGCWxi9d zsVI?i<<)g`JS0N!f0`XCLxCcc$G1K2s7VssWY zmDgv|!s&}cfPU)gwAflUxyO_46H-1{m}1CXUcT$gbgXB+&KJvVa#m|XGyoMeqSpd$ z&3xh{OGQ@Pu~{gvT=GfjdbqkDp{=shf3`3ivtKx`d}^zdf537co|jhiXtVTbq=EZs z7jVdkkt6S_Lpd~k21Pf`(SjRE*+cm)gIYk(&zDy-!FRJyynrO z{{VA$_MPE0+FC_glDunuYu6Dpj*!n=eO1_Ardc$6uGQJUfKkVEg(^aUUygHpX5wi- z{HnJrFYpY(mu?$S^4(K5fOBe>gW1`i2&Io`5vMbcPD;`YH^SABHC~Fh>8^^j`d(5H z4MDrsC@nT7L^ph5udLR$G+%b=z*b6$>rX=#+j9yCyWTyQ@Xu@;N9f=pw97QDcFkyR z6WcNFxoxfMHBygE)EktnbDi<;o)Lwr*kg5Iyf4NlTk;?M)#|FcZD%FsNDIMOSDyUx zk7I!h7+b@L9}f(RU}NabcFl0U2fy~ zr({BO9$D|MflU!;`=U*gZvqqV_ZmcV2Y08kFpXbzik5$jZ6bkD!3%O@;#a5E878;w zC0=TK;O&Mks@;N&=Mz4uA}v(~16YtDPcCIPVzE=}2HHp{s<>i(Gu;v5!Z+Pt65-tu zrndZqS&_C-qye@t&TfcC85w$WMNcWU5`GnVLJU5&y(Fy`&d<#q)J-k{IWuqH@%ZQM z9T4iPt-^DuP*t+m&N3Hnyo{{H|RoPh;vYjt9P=WL@@ zf{@GGU{l}m&U_3TRb9}@l5-kD+hX?sR-8*03eUlaguuTFC+EuvOoOk&epTeEhMMWBEoU5MF70hse}4Rq*!0Z_Vbu*f zyDGhw14>%wtO1_IQ*{3TL{n@_zOdL<&{pmvKSPz~{0f$A>D*r`Bk#bmhkNUfQyrlbG0BWi&g%;}Cy|MQ{X8tAdoK%u<;S zHBdmU-TrWP{?guroUBbMv@A)Kpsjl$LlSpnaE{1@$tx3LY1p5YKw9cbY2lv>qFf`l zbz+3!R5RwD5o(31saN79k5Z$VgR-mPIvttT_HH#4@2n(1XIpFS4RoJZhSo~UY;7r3 zr4z;?L~cC_J2=;x8cKUTS~i^6*^*fbSNt+}(jY`-{{0j6^>gdOyDMd?-(;s2?7NdP zG`%G4Bkc@joReQ$(_J2__0g?g>IX;kepQvsOR$oJrn^Z_& z3$%1gM47wv$t{oV7)0j5Yj$N-)eN|m`O*pr2DHv_>yI(iy19I<@@{=WN4gvvB02hc z`=%d%QPyYGB3U?c`oqw{msRZuuMXHtpcBa^dWp_>!cG?n<&RJ<>*Si>KVI`3B6Y{z zIPEuFJx8ianR2XsJ!7k*KWTjRP19@?=Q+ldgqT^ft8ZdcPeyBn{cy)mZ*Nq>D!ndS zKTA>h{6i-rJl7Lk&@I*7TETc~z%8?%xVo`}@l73DU=C6@2nbkZPL4(@4s( zT3z4PBc;=>9-%ZgRm6D|oCAhDA*+O4DHF4D+z@d*Gu;U?T>91CcP|dO5)3>xbzFL6 zR{@n*(vM9)dCq&da);`Qs?KPD@xrUi_DyPZlMY=O)pC&Blgun^=DFbyXq{KCArZLM zZcRnSB7A#|di{He2i`gDj(>{7h^~vJ z=YmYTUDThBIsP0x+A-Nz?m{tLR5~rKTdsrgz@1@XpXxUzn9ddQp5^p~S5;m;@CRu2 z-};K)o+BOg#X2J2ug&WL{{U|r7k@7P$wFDD^4fMCBuU=UH;EC9wbqC6(tfi=xE2XZKm|QZZ6JW!@Z;DNNihV7(()?EpcAi%XSs(=BJE%E~;43 z**%(ZZ|$DwqqOPBO`YPdS&K%KFwBX*uC9tzA?)cW-pae1 z{@Z?UtCWqsL0PPTOtLBe03fA)y-^MNXc^y@8>@0)2US)oA2*~-Hb_Ru&U<5rSnaE-N)zpGerCC- z?ADa3`Y!HWd%NMGvp*)b$uvcKw$*wlg`uSms=v6ZaN0O$tijt18ua%@Ya%~yMGBm^ zop7Ig@7{8JAmO3D>U=8%NRs_dSyASg-Jf;CaXh}9VHdP#RlQzWGz3_reus>fgts#J zqEfTF1INB2zBn5y?_ZU!v3N!!@y{~DhAHuuu5npiqA?vr27F$*THd zgY@mfBsLS>^Irq*MDv-Vps(j@R$MvX1DkH9YTAi9Hnw38N$ZH$%0W zGd%0dVgc4Q>(ZtZ*ZaTGCiK&=XFOr1D?(^vij7*VrGTW+U_=SlpfED7n-K&OayeEN z)k2J`vo6sfnwzoB@e$UNNE7dcR>WV!DbI!#T@?QSM|4HWg*Kvt&gd*6=Mjy3;-kHw zb&{}JHK8d;Y?ioC5fj+O8PXg|G}(GI+X(8Eb^@|8>!!yMJ&cs(0GM2JXgn_es zNeF4lxe%Y0kZoaAKE-h1wznl;r$|lo&whAAOX{WQf@PI^^c>S%>ZO`Oinea*&u?&m zzA$bi4sxoV0dWJg;@+|)<=#uHYXw%MX6)7}ZMsejHlNs6HO+lexo7PMIbmAOO|+2G zi3{P+ba}R#@fgcw@%RiKq-snbhk9+|{bIniEQM?DeK;8T&+m@ z_U#p?VaE;qh5P8K6qU1hs=RZKX%se_4mVHcirHDMfxuo3c`2NQvxmLo)!K8qC@mHp z)mt|!h&G9Ve=aI-A#B#3_H*lmQ%15GVO8-ZVGbdcz60$kAw z$+pNT_xNwm+Abm5Nf_*@`k_7mBC4=P3kOJcc76UE^WW7IA=VcTslW8MTG4?m=8ELNCgi}qL8?5HhP zXNk_M8ocqM)}m_B3gPze7kEdb=u2Q}Y@M^~?*)j`wpoXQD~(B6of5YwS_Oa8zd7rV zXV4l_TA#Mc=fQbKo6*zPAaC-@yKN}_LjzmFgFa>m)oE^3(i-Z zyLDP^yD&W3jWNy;>us0vw92d1I>T%HZWYp}#Q-$3N0+kd(w-*|rgwFDj-Js@)q9%V zwYImfNzl4kq_wU&k6$%jZ8GeH!osQmJnp~NJd)PvmPqnA1D_tt)2yN$rVPZd_N%ui zTRLr-v;?T8@l12{jdq0642T-n8~5W|)fSSnz7Zv}-&Kl=>3)ez+A{9Zw5q8)xb|em zn$uy2X@q0}nB9E*w{%df8b&3aAO*x!lsrOoI`j5kge(~kncR)*7%x>JP zp7rYb4^9Z7puYR6xNxV|qcb){(t+Ae$))ua>yJB)XM6{cXN~+e)$3;MOG73xBXX2z z{*uv2O4ohYS3jJ1#M>+O)-_k;w2hGd(iO_CMtdUO=@OB*!+t(|;_FmByLT*{SbB~) z(Zhz!{E=fu=F+EIQB`oiwhv{pH(U}kuccdSv^lId)oxZ-M(uXlWgsYb)-~`oAwkGU zaI8KSHqc)ZB=5$k_EY(LaSjkRfzEul#Vx)o48_~!#=R8#8ywkVks_-lD3qN|1^q@d zkw^rbD&>6z_zdcTkV@K}8i&1yI2;>q<2cIwyss0lIlqKNX_%_@QwcjoFQg%Bt!}gh{VEHXb?&-TJS%#|>CG9c*9}g_ zyX+{;)veM?Z0%O5i=Q?e<=4A4dNG$bVe%o^QXR+B>60|>i0Rc5FrkjuMgS_@i1O%_epeYkxDeE$HX8>t=N`;VPZ z)@yKVn$Wp!ue3wZeK%C9+ih+ULY??$yBK|%`BvXeiz}pTTBXKPs{2<5M0A~**4q8R zO%uPXA}=7aepmEZ`&=T@Zk1OAW|5gn(2^Cy#w_7nK&q|EmEu$9xl5!*(DCz)4TwyR zUP`hzucyM4%ckLXg%DlAKQk{- zF5R26)fZ5|j{Cfn7aPws;LNf?0+{t=X9$%IxJ+kN@KBunn0eRQRN@0ktuxL!Xp}Zg zR?cWmn~q;8mD^1Tb7r`6&sgz{rK3u=8}&)dF+Lx!=oa z?c0*x*lZBL4d7wr_v(roC2f})Pflxqq0i=@PPap6g%%PQD{mcqJM6~7<6dd7wQ;kDa9uRe<{ zY`C1hLV#LQ`&(UE-Rl}R!n+F2ARvJ`2eAsySeUdS7Cqa#_)^ z4ax%S=dvj67J1I9wyWzLV!|)kRClUHrZyv%O`x~iNk|JOxL|9$vOMF&`W3c_F+WU> zTdQQ(qiAb;1yNY4%amsHoI z*`tWih4;$6J=AMh);m)Y?!1(PRGrnnk*)9+o^^`R3A*x=fV}S)EXRm6f98hstG6qp zd3!ExYlB2uv>2O5Lca#xP}O#m-6-J=^smI>q~7AT4oH#&3rE>wLvgq5h}i~&TE|-O=GzwGU`-E`Zvb)bkGcz`Zb(eBLxccE{^+uS5<;=Avr+J>*t#{Uy<_yu zFw)ls*3;IH2S3$nB+tjE4-#{S0R-!db@xH3{ZFDPM z)9)ds(>Akk7c8DzkAwo(r~d%QhUvaU4Yk>M)|q<_w65<}#UE@-etSul*>%OQY>njK z9#^M)M(a!5*1X8iJboywJU}&$VD_ZwA?3TGD0vF~p}%)5=IG1Yv};V{Bx;As;b6Y1xS(yh zpg#K4mbl4!nxgt-X>V>){6^- zoMaD{{vOB$nzdd?S7>RCu_*6Er(6IZ>OWrn-LdGJAI9+^>b3C>%g!6VQJ}}vH%`6L z6GF7r^tjsGaN;pMXmgr+#)k2OV(JqR9&;IV-M3&?jJKPF_H(Hos>Moc6(U(FQvO~s z=(bN0!h1yACqtg)CLN<#i|(&Gkn2oz(oS++Au_VeNR6{{Sqrs`gyYx3wzVy{Nat z6dfTy4c`=b_Mg%NQR7=Fa$bqy{U7_V%eN}e(ph6@x-8a^fSOQnrWpO>!*t!dS?|8< z>gDd58qcW4U9#%g^NO2F$t6GvVNB@QY|~uT>ewS1A0^R%*~ixW|Z7_aE%NDbiOMELu_pIhaZG4wX|fd z;&wOnar2?B5i9lwcgH?oOBJNxen8=#$~1e(^j^S24kD-m@w=$~Gf3&0!P_)xnY!tp zWofiFNruB!2?FikPpn3W(l+v{y6u#4GaNcWN`Iep^2^BZe#$5jy6 z4Dg)#))yyNw7y1AUg`xoi@NX6Tt;{#Re5_1*j#_9<5kf%t6Fw+y+=-quE(#O2tX$z z)i3tPf7Gb0wXUfK+fWar^(!aHZo(ccrg%rrk|WP(+{ugi}9Q7`ck^>tSDw9)oY$E$V~ zSRkCj*U}Xl{6{@-2(bLNRtr~V{XoME7RF`@X?@&x_VS9juqT%a*skDO2qP-4S*Ph~ z&6;0MH|FoGRYtRm?&I_6^slV;iOTw_l)!(Mv`D4-&wlY0ku0;yt9Mm*0@&ut{`G}T zO5|-EDtvsn@%xCak7dT{uY#^@_S`S3l?5hZ)}Rzu3=gJEQ%A95b!K|2xHj$gOKp3} zNi6GHt53bZtIjIo*zvoydtj{LTSxt`_^eT8!?pHOpL@rCeB!z+9a-I8wZ%?_XfDsy zOvSNx#4zLK6qbf%FPgboL5sGl-)z$PJ6r{PdC%r4;z6vr(F(Sj5>E;yMFJLVq~SEW;S?%F;x-hRJWmu$5cGIPt)xTaa` zp{^H6Mjf{mReSaD@Qj>$OQvt{fL8*@BrXS){C!hnw%MtwxbOP&h+@{@cKW9}#wCQg zSDKAlmVzBhszC&IM5bEjiSH?><^!9Bs;wM$H zLbXCVj^RGuOOAffA*P+2BABnt{v+GGD)4_9;azKQj(D}R5jYji`)1liyz`Y<{{S%E z+aA+lhFuN2g76(A{{Y7s$>PbYGD z^9<*%BD%)yoTc%yeK)DCw@Wlcu{7DGsQ^3=Xo!!pI1~DsuZxtZcE+4eIaO{(YaZB4 z<7pvv!#BV`5g$^ll(7^$H6U?S7yYA}g*`SYM`+&$X!R&=l)1~MN!CVj#!6^T?B~`K zndQ=JtbX2AMNQ#D%Pj4boJvOZ7ly-*s)V^AmDuh5MqqBn$AW%qfBM68rP6Xm|eTyCw=2*#L6M zhBg`Hx~@pxR3g~Xfzs^;_wFBPHm3C1gr>)oeprO3YM5v54+235o6f{lv7~1vRDhHy z*OAYZJQ*etG<4Bz2%nrS{>tcfaY^Nj83yrHe|2T_TT|bvOJ(*rR;l{K2%cV*oPFJ0YKog;oi!eDLO^^O{Yf`YOQ|tIZDN#;u8wyZ`DKqaq1N{6NaA?BZrNP0P42O?$FIM$JRvU1s^#G%BI~)AJo@1w6IJMPmi4=38y%UuJYj{h6R$(d1l1azWT{4% z!jDRLSCIA@e~bFxh1M4kEXhL=jdy5N%V8lmA0 z*V}&YRFaSrv!2KzEk@_=8{RULBBcej)Tw{@8R8YLaTDzHpUf( z<2hC7EvZ|aO(VLyZu9Ai>QI@7Q}ahZ7|KV6E1xMyoN}1>=QW0YFuJ^%r?{N=Lev`) zUXe2GaXIhvhiZYd&$?u%l)C(H%JkxgTu|rR3PWN*O6wGNo7^#$#4BJNX~maAudnLJFAEnCGv-38>l|8lJ7I; zidy2jLqWjik<>X?&K`W%pVF+S1D?omVJS=rdGh1vIW5w1FR9Q1Rfybap4c=vMtrv} zIxrRSBv{e?4V|=<+CwWlRQXBt&lr~2G7~p>sLzi)_gBKVdaTq_^Yc>cc2LnpKN3FB z7}lmh7~TflJ`-BU#Xai1*JFL2{huth%%4pt*;lz;q$id)eWH#&nG-T~a;|D$_$OBJ zl@$2)+O6>(*AQ~&T-JX|S+yAL!_uznx~pqP zMdYj(UI<|c+1lMqKM|F*S|S%>an5x`c>bA==x=uu)K%LRTeNhNT1~|#-4r|k`|+ej z*M8EnPPM($yvnzztoEGC0HBp8s_w`mb8cn_r!ATh9FQ&M-U`?UzGFist@=-?IF6 zCU+As`8z35uMPE%eozFbva2<;(f$^S{Ze6`p9x%+i`sL_8w{-1cu72~ozOEFnSg7{ zkEvU&9pM(YRF-uUMSUF9-LYvYAHq68r^v3Z8Q}q&-BnUsD>i|%z?9nF!C6fZ_GF%$ zEh*_mVk=Y~_v1|8#vIrVcG~aRS~ZqfBlQ50vmSM`VOGaOJ(ihlG+dGu8$ZkYM5uN< z@A>KUn(Jd*b3h&IqO`gz?DJielKux|`y{9hsvk_V2%zDim9E^X`xK4yo+< zFp5f|>U@p#C`uhN)7{umkwyErf ziH~<>t{c9W`bQ?#*DO;%XH^eXGLg{t6|+Xa?SQ&C;a*6Ay#6n*B{h)HvvE^&>rPBZ zbaA%1`y#dzjZja@(fL_6%ADC07u`?1M}4E>XzhVj?1vgfX-P_jAqq`JaxnArh>x`! z?>?2)96%d3PU`YPS(i;WoFYHwE~$Gb>PzOm6thS4XQfh9QC;{~2$u!3cRKVy ziFE7PSS=dSv>-R`4coJvV&VfwO2%7$m2^YaxfE)$tfVx7?(V1GKZ{6h-7fXV6$Qs0 ze5)a~OQoe!DRy(769AAvH>Xsx0Q*N*FQP*7y@tUgif@J&fmQODaKPhr^Z8L*THThB zLdw>WLB^2+(`;lRGU3}Uoc@r>%&OI_4Q$ETtvnGhkU%$WVUGiMiHuH`@gpDye&XS_ z>Gke{=#tK>=4+k0(ASIau3@&OjXmpvy2g1&mg#R6x!S?8H)CG?R7b=+e!bNy(tRs4`|LG5 zV9qVsHI%PtQ?GT|<|3v&ig{P3!uNd(;zmbfKjiPb={v~V1QG9Wt^D(NiW^OXcWT_X zwp}6~1>(Gv)|;DXfjLwNHBfzb->K#TBB( zDcx0fC3ObVJnE<^jE$#SUtQSu#WY(vZ1>e2vsN(T1AcPBOC=|(vUa>;DE&`4``0Bh z8JJU>GIaaC@!h^GAiUQLy5@?BR#f`av+wYUMdnvy=9{PvNQ-4#ZXrkoM(SVV5kJg) zH{wMa+r4$xR=69s<%%|F){!Xmf4Red-Zfe?NfWDobxCcp2^lt6)qE=-qFO{pM^*60 zvpl2Hv^J0+vS+<}*W9=V~kl(i)9jqA+xu8;m- zuWIElMP>9$NbYW{y6WG@Cp3>?&{|vgg6iYm_2qhNMgIUI2Hd{B?%0g%PPaD7Z>`bj z&?B}qF}y4USTBO}#YSzbF}a41CP#+ru?H@lRgH$$_%Chd{=W6RW4UO(BGMvWn+M zwDb_mE%l+Q5L89qZ_i|TE}zifjJd(Pa__TcT)lThX>Z95fSL2cwqmMG+{4yH+JdSA zR7a2JzC8W<&?0QUrS7jSA+eh=E5~~DQ|%hk^z9)f+rb;}?9YYKZDqAlbaajj*o zxYc3hf}{Tc7x%+4Rq&^_Mw4wVHCf%iKZC@^a?xvZpU-Km6y`ybdF-mrrlP6^c=N1N#dCwMzwYdog3do%)V9d9UfLMbJ{{jn zof{e}NXET>vrM(N5pGylJh4TKGTAM(0`9t%k4MqkSMkFE=P$L1w%7zmO{11y3J<39 zU#ypKqZ%I?_GCtT#IZ%L6ZLPo-j~;PdEx6n`0-h-w?C4prjpIgNlmR+iYt#e`M*yH z_Gr&{?TOvD*?ZoH{4t<3T{&#sSFaW}l&mc&Q-oi<_n6Fyb4tAvWm@khCS%DO!WyB#`N}!bU2Q9ZhpS?lG<3KvLhr+t2*GTs=rZY zOw?60S69~z?urW_Eq1B8`mZ$)Nm+w|APVA+S_h{KmRm?$hj6^^yE!qWv$ElJRb;&X z07zNDpBlYfZ4=V=rrU0=3-)n5J#O6=EMdCtwOtlk(F#VYwxf-WKHH%r5q&A1(cKqz zCxAyUI>}MTY`xU_RluO0*wtCcA+3@W3ERNR#zSUe|t3Aa!qF(|BZuqqjrN*lT4_w~7%&}I_S6|W~TUcEU!*>d+uU%uc zN)u@m$}IA?7QLEtr#SN+GX>Dz=L4B0s!I0C@bDW~eRRDDt$kogAuDBXrvg49oc2aK z*Q84rT3wdg>bI+i7GphN+T-W+hlbv>CgwK!L@N5?F3xyIpWELGEKOr8t8%@BVzH7F ztFNu4N~H9bT3sm(I-2gGh>&gK%;Bo+54LmY6CVN5e~|0)rS@)=DSyqo9AnTlE}eL5 ze}4Y}IVx*ag}45_u&UafX0)XZw|kYkn8u;2cFV0`jzjJ zE61-QF1$S&HKx+sOxz_~apJ2qfNVB9g>}!eWOiew=6Un3a%1T)55X;f$?P89tIut* z0ePv{%3+-Mf$h(XYKugxC0-pa!;ny0O`6v3Ipq;z!RcJQuu>T82Y%>hY)Need%hX` zMLnv|G1jX73S%FgSE>`*(t9OWQ$KjjTCCXJx7Mop(4U8DzNUuutf*2}k}e?U6B+wN z4CS86yWv{Ei6S`F*DArRtsLoEdBmdd6mB1mz7d|cSp-HAEJU}hPL8#f7T>coRB}~4 ziTCVFRG^ZShdA@YyO(_DdhPP{miTTm%@>!XjZrHL-;Y7EM z*WG{9w8w+7&(XHgl%K<*)5n4>5KeP#WEDQv4Tndc3P-xFt=w~reNFzE__I*KYocIV zomU{dqr{pbVj&@N~_cw#|`z;V*e*XZ~wY7K-pV6iq zM;UF({mYKp+|X6o^K&FLKnq#JndO_K)fn*=lNp7IGif0E);?V7Wuqpx9Z;nxqw5jg zBx|B8O;vSGKof*9J#I=AoAdRCI1@+OOQ6W78CinThmYf&3C#FA_9L;w6+5zRDinaL zsS#Zdm#R7{*w&hmq$n#ntTmvt^sZA#iK{=Woi%bz=2BfC0-u|!yl0e7g!$Y~T+rrN zW+!!ftH+~yUHbVXe&tTU`MGY-IEieswj)WE_p99>q#VKo`_it96wY&WU;dzAHz&%gidb7n7+1O?#E1r9 zE~HN(H`bVEJ@H!_II6A5CP|q@J6nbnikR+er-k)*w*-_v(XiWaCPatVMRo=Y5tCBEU44o0~|9?#B6*&rXmNhYaE6@9n(XItgcoLQpSFA zNI2C^Q+4$>i1sZVq+O1z!JL{VFPYpGW)He(^b>ZZNj!v>y?$fZ>o_gcO^t^xE^QxD( zu;}(ljr-Z=o^0@yka*_!rGnz;5w4Cu{OMA5+i0AGIoN=rGV?=;W2>BD#1J`q_K&PEA?MKtBi zV_gt~NObmgtNrB+eq)}fj3HhJq?3k;ZeZ89bTOLKi$%o|)332dpEDETz-+MDf7*D_ zj2O4J68H5?lXlIeGLm{#n)5$sDYLgJRc4OM14dh~P`RgO+;H@YRs7G_JPbLo<&T|F zQyFDzaBWv4k#Zr_lCB;3%^-zJ*2_3PbFg=>_gYPP3oN&GMR=Do22_FdH~!|v7% zwC$?wq)gg@1LCKYK#63W>b%vo3vM5@y(;~?Q=1mWtXaLz8daCiP%Uh$7nX0Y`T|7i-G(daew;WqvYL?zw*l*x`tIJ~I_q1-6 zGTW1>E(~1XzWnyb(4G>qL_dz>mwpwJ@Shi2m;_NhzDBz9O=dn%HJ9*;Tb( zodMFI^t&ZaVv&jJ&Th?GEV`uK^?cTv%Nk?qxua4o)|P?qj$HHU5KIhf;aCTat6FVV zlzu2*idFToaJ+F#Q)x3n?+p0EzZo<3T>PCluS&LCK>q+RUH#F|!Mn{b%`6ThYL41^ zS|!p*bP9iVeQO3~l7C-nJWEuw+ljAqEw**L{uovKMF8Th@nZ`{Yhc{&s>N2t(h|?( z6%^|Z;c(A5N=<4YkJIDBNxv6z3c5?T}w&2rAw86XMNf7i`zJqxq195x88XC z*JaSl2G0gX6(1nFo9XzAm{@Z9P~0!)e|wWfxnw11RZutXgD#*>lIWW=0mIP>-@C8B zJm3#&QQB@*(@AtNAx> zypQ3PLPyD--q>R7)uzzBMh1gReTrdSq|?(qvCz^}3xKblO2b*29b#B5B~FHuu#v!0 zks++RcJvc7Rn=&<^^aia^D9anWhDa*pfJuI@!!?E`b*Vx0&1&rteSi6F2u54ZdzD z4jro`wQLQF({~8$&eYN;hm^3!fKi!`i@ppqtb!R62`W~iXd%{bKdRF zdgH%6lNPioM(9~pR^*bjNrx{YIGi`^yNzv0rlgXZ-JGAaCCn>zaS5?39ja0i;#c}F zcBFkFt`%4O1d~hcY^v<%JE5ApYO^>5l3)pk2D@yRdvRYsNLDb1-VjpVVv)dUbvealf2!(Jo`6xLxw+IxFnPQnAVifete%ZzFa;% zxg?YcS|<$leqobbHHWQvqzi0?QaTK_Br2-uE$uK>oAaI#+4bM;hra8VQ=%kpyhBRl z>hD$e^t3oq>G} zR3smO=eP)vTF6580acO*EBa^f&1ca$3 ztnxoDb6CD<)?ndSEH0aYCPa{+sAse>PTb0oOjLU+dg7+g!828Vs_;({LX+Re?Q+Xa ztwpmi_R7dRO7(`rg;kowhRn$ZCUk-2DMO_+2K)TtScfbHd1j=r4cK8-dTU*%Vku!sc@h<_zJDO6C>{zi3z^9XOa9uoT{sJ%Ryk! z(Ib)iV=SxV8}stTi8(kxLrOK^Gx&x&FFn|7+r!OzHi__=eyMXd95LFbwkE4Bdr@c! zm2`tokoV#BfD-2$tJ^7e$R9(ncw!7Dvsr_ft;)k_ce7ogJf_RCYarA4XMbfr#vaHH zcRo9}_0MwBLb6$G;@~@1&DSe+p+3s3j)hLh@UQLf?E^h=F_uG~>K&0EYHT^`$V=NV zW9U`0(JyC9K1nSTB!NIL=*Ry6jXQ)&Wt42H-k?Ue9kubWqy2}fTRKP}2~-W5e1hs{ zt|T@H8C|;WlHIvLeXYkjxOt*|ouM-91nkSF{Uam33K$2fj$*i+YW=(v%2P$DKpLeu z4E`b08&J&6vHxlC|8pfR6!D)!}?kjv%OSNWTMV$_&E`iLs^ z&O|_S@A<(>Yc`7OT-5JJBnzb~QfpE(${x%`WQP^9^GDqsvr+;*&BJtC+0XIo!usl< z#us^`O^GU$gk8f9=(&Pxf~$%>c=1GeHqsC{jP=EoGN3qpRrMtB*rhw~>VxZCL8`q9 zT&|t#W@fOQ;kk{#!f6)u^oKsxS@PL8<#XYBZ#O^&5 zk&8ZE)a;at?!!C#pe}n%)VNWc!X-Ybir&z+Cm3GKK$1VFmVU7r%nquW)M(8$7S8Z> z&BR?k>aFRnfITdyR@+8`rsVKD^Us7ud@a?+uwK{Uj~BQYZFEUti8aIF0VieOv)xiu z2ms@L=&y}s4w;pCT)q22_?5Ak$;8NKS*@~`!9~Sc9JALH_KOVXbydsI?3z?K58uC? zZBsio+r!@A1^M+6Lu%3Z$aSsK=CpQABncPaUkHt5TDx05_I|OKwbfmhzK52_Cy;hYP&c2eS6`sjE)u4-+Gn|(JsoFuFd)E zi)e85#lrfkzq6I*ywuuN({UV*{{T$k&MPgJXEe^MzBs8cq5>sHq9y3%pi-m)tHBAv*59_yuZp*T@8Y84hbE2c1H|Ni{81_vArJ8jl z?U~=OkCo*5XGS@?{{XJq&W6IQrjA;L#?kNY`~EuP+4McLU5)*+s`Fk`rEHpxb=zgK zzLecc4x^2JpNht;I6b?i>+Ln0kzpqr8N!IO##>B_CFj>Q{Gx~ZAH#O!$ zQtGz89**;74QxkoJZD+Uy7e10-3(7!jUX>LF!Cwvhe7`ZHvqm!Bch{FCk+wq4 zjbyAvk#7~DHD3-L(KaKso7qwrV_LdY(E`f0&eDDJh~M{$ILtcL!xTUPVa;Qmb#eJZm}$OSN7Y^tn!yU4QaBPY=i%4i6Resg)`ySOo5445!8R_GWCnjJ zSGReit&3p}g)1X>iOv_|V{u~e)S(AzOFF`&vlg!r>pxdm_436yPBr>rKxx$#_WL8O z#z0D5_;%W?tQOH8s<6#6x`8r+h0^gzu4_Lq)phd(UauP$@whl-fEvTmgp@k!6a7aB z^WPR|0TLVD#*7K7$$AHebir$w*BhoY%hIKitMdwe&YL)mmHL?QD|M13mNSHizN^`K z&7RQ6@PXO~9sOt`wutE=ZB6YjhW-8VeW7%dpgFTLl(Dna#_^ouW7_l%o!1O*xEN<#^Ilt~bUd|=uWmKpYBpKZNSkO1gHS7;7e}htEey0U zUJS*1@Lq3iv$_L~#_ID?oh#8s?FJkvZlr^{zFlz#OK4$eVIWSt_IhHQW4Hbn09~Hi ztahqrr+N(RqmHR9Qu9g-(mdAHp`B-qb7UrR-n2jFGCVwTsvQuTO}FGGH>YIYFYe{` z!uYVUS&0JbtFH?uq~$VlpU(dPAddPUr4LIfq^ZMkPW=9SZT|qmIH*bj#6FvdfIrL-^*YQEKiv2Dg?5TAT*-`n-?5uvgdNKUFsjyomZ zw<+9|z+TA&Zi{F$m^HK7?kW?oHCL&egWv&DcV|1s_|sTo>gV2dTa|2J4*AS(+@%am zB7*VX8W?e!Mm5%?s@}te{{CGPeXVITF2dGSE=k{$;kd*bY-Y8NJWXSNLb(lun!~*X zNwv$YB*?cgmfocSz>lnXW}UU`7lAMBzu9TDd<-XDmpwFtS<}ujd9#y1Y z5#`c5Z(B<=7J%D_YURyqvbBvnw31#|ABg8Yk&d+pppqw^YQ?bHMjfiTB2AgBIfphj zobkiQ#wg;L+QS@bzEpt?lKRaQtgT?|wm)|I4e_JVR;bL7zN_I?+Mu#|OA7K&t!Z=9 z>j5jMJ-Oc=hoWq@n`}mjID$u|by>?~MnP+*E2qag_L`U3;n%`ddCwU7AHn_^b3YtM zH)cktuQ}5CLs+;2w~w{?DH2#%Pi5WM=g>#GSZu$B8(S{R7aAt9CUZPfY}00jyfft% z8lt)TpodpaWf8O+$35^TH*WpiK9Sh&_0>Xc8Ev4ev%7JKabZres=-WSs=ZLQ+>)l* zrgPQ4C@pqv*(s3UE9fCrr!PXQyuOi{wLp<}%BmBwg%Wl1f)i;?mYJ3v8z9slEaXKT zco@u8^}SqKW0sMA&9&!xqB_jc^~lXQ`)MMIChohu?~EsibWo24{{XD!4NAH#-iNp9 zxxckm{C5PwqBikR{UeILlmM9dU&ZL%kF|)b7tZaXt0b3BtRL0O zE@8A*pqw&q&lrv2JvRFVrHwBlP8rv-ho&qoiw(w8xSrpBYLw~KhtncqmA8MqDNaVY z!@@q?{{T*WTdp7v$^QUc<+E+xOT#=(q5lB&KTIc=m3b~?>(5r9)XlnvKdnRE>*OQr zy#b`zX@bw%WVB{BR>k5vQpjM$b=lPZ%H^h==);zL)8Mv7%9Zl<#*!muC$@oAZ8&b0 z>Z}mTRzSG!%?>oCcSKnk$r^Q1ys2_@UDYxi4V)|R^5Y#0B`s`@)e@hPT%&{(kxYui zT-=IqBrlRPMGD54Rs`lzznYN8{GwHjXyNa5UlE)oSd}3bw0_uAE;K^uK?fY+>l|aG zZ^mA}h;Q|(-mT`Zw9njWwYj(qd?IKe!bYpI2ziEctdU;Yw0}`3T|%$ftw&Mqio0!( zUUw^-HNDNxE9$X93B4rJ!*MO9*+8?ywKg<1 zws{O|iX=BxRtSTpy1$pTBwTR}gH%@J@-d>c!y&V-87Z*cA{RaNp{u!@ILxi46ad;j z>Tb?=MNqXq5s@dp<)+a#@5c6mWqo|EZ|g0I`3aXolCT1mxR1Rvx+=7tuktb6B~^m@ z55hWKghK_xFP^+_>Vk5XqrE=L&Go~#K0Kq!w6*VbdoO#@R<=Zj*&K#rZ`v;C>%A&d zUmWxAiu)kE165O3<^KSv%vEnhW*YG8d!Y)~uoQ9UA05Rp)p9r~zWiDNEP-45a1i;#7ws=?Hx*c0`fjdP#{rRL2ny;Xtx)|BjLen_o4pOwfIWTvq<_OM@B=h>-ostTT zb$vsQe3>(O+!K=wlCrg}F`PtEI0{$b(L=eE9-R|zMn zNw$>TXTT9a+IqM_FSbESU$wUT;{F5E&=Z>H>HjCnP-ywJ$VoZ$?8 zk9V?kJ7xa>%fFg^m$iaZU9TT5HHdDo%;Cc6o@&+&y6kGZt%|q6GzzDI@4k^7==uKu zUdnqkjHNOX*;{-Q@%ZP%ltYc9h@b1XC20dmVSdFjvn{Ynefo76sI*uJ%Px5tZ2D+q47U;hg$La@C`!{d1{FURkt;7u~yV7x7Xi^n&5<(>dQ1@6niks`d_&5+An7 z*7V~oq&JU$$2jMd2)Z!;0MylOR#3EvKiaE;luBtG5@?o;`5}CW)9ouN7qu-rK)n*R@GbY^^H;XZJjF z>HPG?4e{>lRgNmEYogIyos~Gckw(^h585}L8PVU8GbS-3uME~ZPus*eF)x+Jb^c59 z$?Z3%4<^!`Xe`{f1;p+ru0F2tj)ZGrLvd~L8DCYy<^KQ}>95`+L$>Ex&2x6yww{}P z!c}A$!bZ4 z(q96BIIF5NHk$!+kL%}GEBigWR0*DST+xC@TXMusHdQe5j4t*GbX8{a-iVH^tNo7N`>yT_hDedt~r4*`@&2Rr?u!<{Xv%es z+|&adCL3x6ApGL{d3Ovclhl&4{U37*DimM{k{CtigfnWUEMpM>py$p3p;=6 zI-e{P9cgv<*A=aLPiRbBr`$Ei-Z&inVc&(LEVdvzJF`5dm)Y)2O*jgaqh33NNMi-+ z3|G!~*4o~zX09ylxrPZ(%#Sh0t|!B6q!n~SbocwNqv~SHNN!l{{{Tm%TS084StxGA z)m6&&Sj+@Upi|}Y9HPn}_4Tj53OU5B7Nn{cl|j-1XkBW^rCUkauVe+-lvasVT~b5& z-4OkHkL}~cXFagfl~5_mb)TxqU7+L5Bnz<{yI}#(KI??ax*{ZviKF%lVNM1CK;N@< z0EcSs$IFFxLYt1-y+<^gTNVw1!--|)Qcw=`i^r5d^=|UHB2_%r544aSG9~7)tthU( zd$J%gBeYcmehAEkv~1f&Qw=fKg{5e%(3z$C#Ne~Pwjji``Bo}ZVGWhh0BvnBpR^XW zE%ln8>gCrE-5i|qQX0%QR@&~Oj?TR4s+3P}<_E2-W7#zn(B`@$V#gQ zoqVQ|e$E?uEel20aPfsz$uZ5A7$&D!RcoB*t#?dV+BQx6zVN4BoDxp0I+Ubmw-`&H z$s?Lx))B;~>DuI#ge0%GK3GG>9Jp-roeP%}qS{Wu>V~AF(-P#U{&VCbi6ngn$-X+0 zaBLtWyUHD_>)6)>lN|CklxRE#bIv=dRbELb>&=AY#vBByyUiu3u#e7ehb}EIr6&vX zp9phB{HI>|E~dv=6sFEft1q;nfPT zqwbR0rbf*vo_nKW4e-8Ru74_4T%TGlX#wIPIrqmuEdtmnD4X zmJ8c#bcC2m%XjJaPvbq1l1^-Fgy)6Ol2~Pn%D86u?kS|nZcLifN+j;>;kq5DcP8u9 zzI_ym&XRR>0R=|w&_=;=HC|g&T@|vb^yH@&W{1z(3rIr_8q?(`JfdSPt|J5Ar4=3V z@s)9v-e}>XdX2TMMK?(&NKqflRsI>>5}Rggamu(TPqbrw^;vlO2 z;kLOckaT2dxgMF-O%hR}wjPfo{H9W*59vK3}op<2*CTCRBRL0u%)bI&b7w@AkW*TaY2 zGB%AcUhn5VewZuBb|%9Z531~*HFKvBGJVi#D?e z@5y!RQ<}?mcFAR>yh$yOo0a!wvA?lf1XyjpsvwyiFV$V!9+FTJNmh2*IMl) zp9js3*8#%8!cj|KWtVe8u zuJd-L%GK|D#Qh>pr>8uAI3vRZo0DR#bt>SlVg3g6XOjQ8c)Z**6O9{pLciDpJh#b`FB?Q3yuR$0Oov+^2W-@C2@dy4eU z6`&zN4K8TH`Qh(>b$2ua*>T6Z1-&Lsc1fx}gBdR>ErtIke-6b0o{=v(XOk@x; z94l`%0xh(efNE7(mu$@kl$Hqzmrd09MtDKB0L!*h`o%(Ya%Xv=LnSbk(WHt|uL@^z zjuHYK$*TVVsRxc~M=7Iqr|r`Lhiov!72l%fsm#^hU@26dj3(-%!#ps6x+eXfJ-pEa zF2b?wrBb>)!T>5r9eL%>1Y&&*YoZ`#)b`x0q`1It;hbTUbEngNN?v=DzfrM$T>C9t zns|Ob(9J@cUIq)xcF;@WAP^fA;e1SkT>$bxc)yA>SjkE@do$M- z@Cd`os^tnZZZ(g}Cs~dqG!>=7EnvR9)l^ni{M6D`W`iEQ=ag76!`il}PHDw2Gr0Hv)w4;4_o^j-M z-7gY5-TM+R&u+z65aV`rw;R+ha^HG!RW1`=eeqt`7fxy`r-b<@izVa|lHu>pd| ze75~d*D%F8Zf;o(TvJ+oqC7{)8m;SzwbwsTs)KcNpTtu}ie_uB)zK`|oS4`baLu28OqBg0KXVG->Z2hYkM#LlGR=85-y8 zy?evHDttf23-%0ZVTbm8IJU02ydMVjce+jRT+{S#fRs6@F1*L-h zZgsH}Y9i7?DV&W}5WW0! zp4gdX(gqvH?SikhSlaMJu^g*y5oB~HObcsd7dNMVbJc&P_;pp0$rJ3-Jbsd^bP!+m<`~_v>J+ z$<$0VD5}?ox280y%42e#+U3uJ*N>rW{j< zx`dxwyd%tQ7C*-jy|Wka<6QSIMzh+#BLf}6s_8Gbc91GjCAF@UsJ}iO`vv}q(r$q! zx!*WecwVZshK+1vtOZoN^AhVi)kMs@q!Ch+#cRSY?Wtp)3xD@FgKN z&pluzFDd^3`lHJ8+%q;{3C+m#_e_V?k&_`+$R*OMt{Rn2X*JDlBF@ABo^e(}WGp$o@( z80Uz)d}Mzo<8s@;8toHIcKeOb%Pl5^kgvaOL`2dKWugO{v>sCm^GD7MMv=Cw1ywZ0 z#|U}Fpl>G&xBAD4_>V+4UG5FfX4(tXv^~7)hLha-s1%grl1~9rD0f{L0}aq0b<#dW z%js)FgjVsY%^S2!Ny=8(QQJxIl6dkUQ4GmS!sCIpI~^0?nk| z4oz`2kyNisv^~o{Wx^XN8%p_jMs6O9bSQ`Q&aV4TwcA?}q|6(qzN>nQ$puR}P8s7D zFl->U@s948`7E`fJ~i!EV2Jick~=0*`-D=P_h*MxCuqTpm2=|Gb?}YaF|0z_KvSo7 z{QY|1LdId>J~r3dg%k%&?^Yv6H2H~yx3uWMZ-c`HwZ^_xY-VFE)hghM(wbQ>(S>xQ zcKEb{=Lt%6$7Sld?Z$O_*!G<;#c1feo)KuskCuLQ?4mt@lrYmhXg1udp)X&uck(_F zU8Ew!Eh7|2FoeeX^VqrVtsOFY*L~!r!ct1NoaeSM7W*@zYjIjT9GNax;o7IwR=1_x zdD636)!!LAUXC~Zy{iJRpvMx&&th?ulW{a6xz2Em?W0AwpW#Q9Y*NH+`#1Db`2;?l zpNoV-8VS)4@V>H^<!bb7K8;xyVd!{s`^`z^s>t0I4Sypz#Nvd}Y z=I#5V-}GLJWu6m2XqX>E?5{qxS`0@U$xn)v6vI9F>WlFR3?!hY8R>CDcZcE_=5CQm zLT8x7QUFE%e}5_MHC4eyCnat^2ARk20efdWyW?2gIfW^YkriHjZXMe)B!zptdp|K* zXoWe|T~{eBiB(sj6}2OZ^o^!*8>XR0SxPb$x9H(6_9+p{(aN|aH7BZnOI zN6ePkaWr+Xo5Y{PI_bG@o2zMqEN;T;__N67cH#7cHW-nr+PONa?10*RW;ZJH zn*a=a;4ztr_C;aI2ZHt&cOP8u^N6Jo87Uo|JW!<2@a4h)@jCXeGIqb@ajGbpWLlS} z-oFTpTO-+abFA?4?u|Mvq>GkuuYQI?Is6YC=&zh9m@!3Ar zHPF2rN>bBegEvN!%HSF{$w=S16D5GzPdJkJyvVBcN`0l>ZGH5zl4>rB__5_PJ-q$- zr-AiVw|MJFw16^&d*gl8r9V7lKW(-d6F&IYBw#%#ajXztdrWp7KfCjB^TVCdhte8F z%_jLGiB@}gDK?L3b8jgjPFA;L=@IODQ(5vZ7~#btK6q{HapAcaB`rpsY!IQk?#%Oz zO`g)(0u5~6m(Wv2JtEnAjLMuA05k0|x{5Zh^kwqm}rQd;RwdyvCe zTA^yvW@GqZc9O4`k7gOdky&fePP~DJ1g{W$wPNOOrP9kre-m%3S?lXeB5;8RLSO4YiX`n&UAInuBQal5rt z*U~-|@feQQG`k_5+Q~ZT%G8a7o!)U*Wo(@)`=Gsk1*AlV(lZFND&Qy`l+SEwVBp%x zcVBXQWNp$cppRMkAUW9WO?IPu2`Z;Qt?=0Gx~Q%-*YT++fS*$iV^7RgpVX%x*eM*1 zxpfM+Qy;`y*&}6Dxk8NFrjuHhn{FhUj}E^G(Ljr=1ow4SQCoT0g?-IIrY!)KDvFB$ z;~^rTKLo`*u`q>oL-qF{5jxn17MeOWn(@1@Io}-*zhVg+Q)@H32WGc*!KO&6p3jTI zYOmdjX17+CTT!m#gaz!@%BAL`Io}n@1ua!cX!en_!`wgIo6A@#~Gol?W|F??|mWgtfZVe&Z~-n z64k$cHC&V;)3!xadPDx9^^2Q5jG0_&x%5z9ZI*S(L1*pol1AVC-cff4M^0a@+&=w1 z;6F$Kbm%7LbcwKk%<&n|agK{8`u5#_qD|5xXzNwMEOSd+LTS?Or^UYrZ~HknmU;Op zEz->&*j@hsl+qvfu_a&T1Ap}oucR^B9RC2T%c z{{YgkR4A6c-_xI`7xr|eDyQxa{QAXAT@r8oGgokQxV!h??4D(` zkrf}gPT$UOh!J#IzxD0y%JpprOE><*sLrbd`rec!DgOX8f2yBu@3dFHL=u02tgu#) zw6GHW^4h(pOVX7Jyet0zG0%)O+7Qe59-jeCho)OU<|Y3Cxk>EZHbB{{+&*u<9sQA0 zYS0cd{{WAms=-{@wBvv8URy#eXy%!ft-Xh8Zuzs387(8A%K_GBZ;Y0X$EBGPQg-UB z@Kz^9^tJZOYTHm3Uxs~S7iqBmH(VuI)ynVlh^@xFx^7l8M>U7Clp$|W-HCv(J(y3F z?yZ~DNYL75QPW3swTYmLx(z`2y0h0#5pQIB<|mC|$B&w%wX_T?B|QHC7HFpBgLT*V zc}9jDS&Y3(sC@TsNgkU+z}_$C78YO}@pjJss=m60_J?I3Uz*E#0~*Su`?sUT|HcGu0x6P4Y< z9=gME<6KvkrWVS!g~V`<<8muq(LFb%6Knty>W6RM8~6dlOQA;m?jL^%&Rb6Bn@~MF znEwD#&xCXQMsDbwEiV;Zc&WXetm&qbn!ZO`vz~A>V{aPbo-J<9yQdfRt1+`dFni;o z$lZdzd8BP_KNVffQhQl*j_m<3uJgyT9xTioILLhYp}NxZop4au-7}q;{%YuXpH8?a zfYFv)D&zwd#N*$N+-o%-a?+TYKKjWDuKe}EHAc#+y)d}njKsI{UJ}}tYHyCFmsdQh zNo#Wd0BrtYArrMYvnoy*^UctZ%l2HP5>gc+q7nn0v#oPPD-zGDk?!I~e4y}~JM#9L z1I|j(>gLY~d7H3OV#X75;8Zu6&zk90sog^jFUSv9SOjb!w$8U2sNcT@3O44IF{xcs&=VG53C~Qw`N%Lzb{@Zy0hObF6(!n zp30M_e$p;4r9%@`_^@B!J}?K`1j(wYBQ_Mw>)}*QE!QolX}IY9QqI=b&S`u^eW!g_ z4k)4stNtsfHq_F2$>k`mw5nX^1s+Uy9Fq5@jdC$@wa42ai0=BWw z80M%lx?MU?6qAn82*2;1J+RE~-z}SY?!RJ5t@WDMIr_l|l4+h-uLu>VSEO}wT0?ld zo@>jANUdr2gqTk08tKV4IZF5UZjQ*^zU0)5xT=b0JmJz8@s?S4zj8}qCuaUR&nV^6 zwVsPcg-|9-@SAs^`m6go8cs%B^orT{AWAksipF& z`dif5QKdIu4h$w&F6#ucT1D3gqD}lcK^q91s<(H+u87vD-HoENb9*#pM!(u}db}c2 zY_305SYV<)II8#ViqY97lXXwCOuF zoFCb@Z^E(Lxe<`!#Ww@zSoXnQeGB$tv20eFRK%l6ph+a43RAK%x=Y2dp$7pFXMw-X zTG_NjNRpU5PamIsh_L>P=+2HyQ4PzWww?&x-5ztLJYwfeHRn7X!)Kb)So9DQ)@^Vf zJCGMmw8GDn4x(7LC=>?GIq>_^F;<@uMv1Nap13VdlSIRB^%o72tm^eqw8Kpvc~10h z8XDktXPi>U($QZsTyfi5D;0GH%EsW)U63NwwC3iNsx3ym%v8m))K;74Eg(Z?3mcQhx;S9%!wiS}gl7vb~a;C?63Av*`lYi~j4PYwVK; zI?wNF=$@wLT$F8=%7~yy$EaN%iJ^3szN2-g&bX{TpRoS146z5D)i0z>)^PnzlH&3G zwR8DSePekHh>Zq$Rb}P#XNznk7`I?aT$9$*i(+zT{&o47p9)pAc??Jg@)0ACuFCRN zdSU10A1O#Crk-Ovu7ei^rO`Se@!a3k-z=*7oxu^bKS3=!arTmi7QLb{Nk3SI_Y*mN zuVT<%82~lTW&jz1H>>iVc~fO>D;7 ztA729srsMyF5>wd8ax)t-`Cm^=@oEU)i>EXaZdV zfPA1~+26h=G7uSK^@5D+OPz&$ZMjY5?8z2D2@Q&F6oTr3vjMy7auE>@-v0n8`c_U@ z(uE!w$c`5Q-ud(QptvBsF*n}o8gl+)pRyhQmxYXZCPfnN|SYWgB(vzvb>W>CUxk&wKUkjXc*vV zA3U!5;8QgXRc~6YEhu8mms*Q}Y^Qndh<2hH!&OqbN`lidRmaS#U#+ckN-(Ed{ZdE7 zDYOTyWi3xS$Bk~S%Jv8V0C#)ftNnqjSqoNt4xK70U-g6PX%K_X+OCRVmP*;^bmY6O zHnb3HOUHaTMF8LP?c|H7PV2j)rIk3^LO`bM=fWj2IJ?Lc7el)bPeekqZ3O$i_l#IV zwBcN9$wG+?%MPf4X4(lmG*@wpcu~R6i1+vEtKz}L_BCBpxrzD=d}6_ouBz{PfcSfS zs;*3$L8Q%D@~$|g(ug>p7>RARh)~I#s;FHZ&BA+b6|kD;nd4P*ibZX!ld~FH*(vw9Z^G!bhRF(_#ce`!Jyg!j z(uAvL->w_skuIEyj$11FQyE)jZxoHYy7S07GEs%IfGl8{tyyL?wYy2R~CIjYb~ zXaVjpH$gi&q`sooC^g!{oJMm9pQTpRMuUoxSvJa?bt$PPymQ+GhR1w+)YP_%k$TOQ zc6wf$1zzqntXac=;@L~z1V$3mvbI$B;Gw!#tM$*ezv0O%2DC}~cXvQzSzdpx9jdZd zRvUBSN>1Tj6;;yxOU)>{;$>CyAAtG9Z}H+cB6`);dh|^V;zvO&oI`Z8_Q6*>b3tdU zhZVHSfJy$7ci)xJH$k3N$0h7K7sTQqU@yj5)(NuC=@@h&br<29W|0y-fH|h=%vZP4 z^z9d>b+vza;Z^cW79*D+itf**L}K)|iy$A@vh@88r31BpYR3BHi#AK9f~4-wdB>hw z?1hg%uG+54(yTUs_KWhWyRszNvs*hi=gv81KZuOFUam18SNi#)J(X&NfC{sp#Au*e zT3IdCUkDC|ec2kURK`lt{luNBREiA!qBKI%`?uA4DGgzezv&U|+3u0C?_WW*WtF}~C&d}{E zM8i$h%9;)Sx!u%0knrZ5Y-TcVynr#Ti@|j6hcKc#P0aT-f+fFcH890Ch2og!J<+{& zrIBIEV)2D_Sq5334kYAp$DMHEfm&xLwbHF3w-fdJN1o~UGuI=ZFJD#YS_aXps?)=L zUxKdI!P!#Kv3=vuI7gV;OpAfuK9{9gF95XVeR4v3Y$=kpH^iH(zp5#sYcS2GO8yL< zBu2`vXfdU8F1*XBQ6}s$h*pbJ%Opux7C0M#+bvqA(bXz6TP^yO|0DtrE_wctp!0 zV_>5EGrl;;TBf*mqM}8Mt+MoBu&vU`N4{>R{{Sexvf4iws;MelR1orRM7dotQ)wT$ zyLq}L#L}g$#Eu54`KWO0E!M-=;$3siISnxBJ|`=89y!7&tvWCCNNiL#a50#KV}E+(6PIpr1R(Uk7@>sYJ!EtHJ5WqoZ> z4JJZgLdc=VyF4Q|rQtR!36%KPpH-*P(Mt<&mpb=A`$AZu)zDp2obQh^x7fdDU0tTO z)>~D={gqy6U6DNGtEnMGQ^P&cNFll#!M`1qf}Zz?t(M*D!)Sh$7Rx}ng*WgXk+slz zQScnw$dtJ(u9VTjC~?)rS?w6p6zsMOg8iGT)%L%ylzWbV)6)$7@)Mc&?a_I5n9xPq z#5ZnLT#>5Jw59DCPQhx2YiOAUd=IMf%`ISwWiB8QjQuuVgPO(B z1U%EPHr61VIaVgd(QG4J4Y@3J&VIo56*n<6M z3H|)eq@wRlDTPwBJkNb$#uWBfD!D<3NZq|Gkhav?fev3@Cq5O1e~J!Mt_m}vfPDAz zM7tYK9FtN%dh5PpyTTj(26D#w&ZMKniYmO(K1*6uY$VL?-mcE^oMKEnB&0nsu0Be> zBe(B7@Ly(ij;B*mGu*$tOAs0Yj!7oqF099*9cdPpxj2P@@jbBu(`RX)Iu(LDF|Noh zJksYKQjJYdY*Iwg+Qi*eB{`9`K);Giix>NIo3QnYyGDqd{{UXqSSf6^@2cCk1n((g zl71chGm(r{9RsZI;fd^z{%8XeRZ|n3*}5{Pc74kBZa;Xqu=rnD&HXlIRmE4@beL@a z0BXLDdy!*D^gG@{i+&sXqtdh|g&N&LVT+`2t)5)6mi;VD{{U~VPo#R$?Ho%1KIaYG zGn^yWbXJLM0Le58s>2m)wiu2#)mFk>w2s0>+k|Qv3@}Jn396F)pKI&v&>OR#TEokB zg~0u)Ek28mYXNjVetnSv2ir9fn`3C4=RHO%;r-QhT~X<|VMBK8=bkVE-Mx_-O;t;Y z5Sva&5Uac*G)7Ee!h(?3PK9})O}l2)F77poOH2WM*;W4PTqnzq&ODHA*O4evuH&CB z*v?vDOCwd+C2IxsU3}1!N$jCA%Yde}2R;5VPaYKVx~t7v+2URm64thhE?vi_8$}2t z-OI4%k%`l~F}9db8o3;&UuA3bRkXu%Z@RHUy$;g#+0$ZC<&^u|HF=y$^2ui~yP4Rl0Yg2A7F@X3JBl*(xZl-Cmu(k>>gi*A~HTV@$-JG2B(P zzRuY2jlkWXzrfh3PL){YZ_G8ZiBQ8HQTBKGapIE3zy>G%aXyncV7zCK+mHpMi0X7F4QG5qZBnW0Tbqs-G@vxz1=mruLd9 z+*t$~*FJF?Gp9PPh>fc0S0LMlsxc82Z(-t+IcGnZV}(}kx#W;C!Aoq(@`63?9uNn# zo=Bn7=!uq1tFlmbxOPCWPe<(v(p`sILYy=t41BXlJUE+cdK;UaXEkiJVpdw)=xP$8 zc6r})R%w6U1OEW_)ygY`is~n_)`&GHJ0{?44|%=Z#!f_hyW^M+{IM=LpN!F=Wxi|l zDXC;7i#kywavJcadt=I=g4nnDRbs3m<-%NY=&rtxzwRJZZq3=dy5W&EMOAG_MHw~i zqqB`*n)=Bo=8;-LRkf0606r04YjFVcomRwFZLR9AX^xkB&ZR5YQbF5GZlB*ihZM3s6NEjGXaNQ6^bO~!^qt`ni>zl$xx% zR7zKV&iZw4-F#y7&W~sgklT>19Kw+TIfm)%HSzSgt?dn}l*vp@y41Y|Tvb9x6U*** zN0Dip9E<+|S$tMKm#%m}Ou8IcK)*KUu~6hlD$ku$Wi;7U4(t!wGO*y5zN>~fFQ{}D zkrCiF`Q5i~Y}DdW&v0HM?hXTmb@D4suRQ)es%h?CaVa;Pp1k-(=uVZ%t~u9v@LH`Y zw${_O0rwHhZgTjy-EtblS%~+#=bgVyg976ywJJ{>fyt=yfDk zw+|>VGS50V9AtW+YYm}CEwU(jt6cN&f;7%qdUZgE=}gz6fW0&uU&Zw2651!it0fK2 z%MRXtUDIsb@>J4=cOKmRF^K{mu)mJg4kSviBq_HSdXF6a;DQIju8R{J>b{f$W^tGY zQ`$T`Fn>%Zmv3Gw-VcaBkMG{O?^7vFVW#ii{{Xwc*Xa~ij|~z}{ChIku3&hGe!sVQ z)!WprLr;221iMq$>z`Pui{YRAF()d&$z0j|NG|>R@7X*Q(oad|)&WM*?7A!8;i>-s zLDS>mTf*@yhx4oNt+}P{=}hud^V7GpCK%5PPDfWA)mJG${Z*^|=z49*N2avmb*ldW znd8p6x+lW$kR$k2R!A=KhM|_Z+m1eKT%NKg5a1h5c9Wj?Y<~tcwEmb3Br3QgLh-o{ z17ErKR(n+%TQh4-FoITUr1A32(dFJN@X)fudDWIVS4HVQ8}Uc^PG|2q%bjowrJ56> z(^iawPNB6Dq$J!9@!jNO=Z!4~@yBy^6IHjbv{-GS@SA?h`}I<(+X~mR&e~dZZ1Ps_ z&e}v9J)80zI9>1Zj~3j}59}(jPIexe&)F*pc&u#QeS6Ga+4MMvxsjk9y>y`qY$Fv7_@{7~88Vr}|HhcgLdmUq}d1p@$s6@~$h+ zyh#Mag!ybc*XM`YcS5F{wdb7ZRZX`q**wm0?vJZ{C8Qz7gAeu?4CwtYmONc#c#88P zFD6o}_ z1mZX6A`*PY)vAuCdCy!VmVW8peBr}ae>o26gq~a-@E6XFN4uVLgd%Hq8j@jK6E04E zpIG8T>aSGf%(fS2Io%0&TB^3qJF_k`;h!uciG=M=Y|7N(;hgrzRChZ%s-6k{7R<~FBB{Wvi46Eh8XYCdc zwr&b5u`2aw7LHA@+ciNK4bs~dW{{IHl}xJZrrP^rWD~MssKqS?EvRq+_|lF!k5>4He(FZEy7Fe zbuC!}PQ|qw;Ee!+hQ2txkYI@>$L9lezL3)CE`c=Et6d>u-i8NM`%0#W0R!fzzXfU? zm0EA4WabLemXTOi+!vG(-aDzD*d{$q+_wyqa6A{jlcc+LbK?X8OQg+ta#Lv}(>-~< zI9)3A`dtF)*IM72W>^iVj&O!tHf3BBR^(C3qmICFt_!2lCw^OgbDl7pRbAQ=BCF@I zTF}rK=kE_gH*~uEuEMySk{Qo;4iMlc)O5U81T*c5X@{22hQ-D0rh<%eM>$v3;|{kZ zq2^Kr(a_u~Ra3fMmK)cGTiL!G7Z;_t0qV{1)Y36Lxi7scX`jp@(XxeLn|KF~G&|1Z z(J~8!(+mFa%~@9hJh-QX*1vGy#vZ!7xaCl9&T~k6Mf3Nr=_uRCQrtae3X;^eiUmwF zQm7=cqMiBtaE^g4{pIYE*yCGx3}MMFW<-HnctTyOsVxYW0O6llOOu+>GcHZQXF0+W zOItFl0{Bb5iAqzlXnQmEj;<_pZ6=hiePKxKT+XX%KxG!Ml){nNlJwP_>YSiS&U1Vb zu*t~gg!q7G-m8+D+1fudFqDSbQM>w2r>seBna6$`)HhlhGm@X!x~{ctH&PKQ>DnU% zDkj0P6Df|eKsK?rzqTsKXjijkv1qNLWL@{Rf0lRWvMgI=V+72us;R|&tgdpUd>;7DA`hBg-pseHbQGw z$I>Wmo+W_*89k$X`(0er_&PQ;Sxg_lKecakZ&X?*qpcvVnPlt%Uv(he^o%x?@uM0Y zsQdRC$IV{ZbQ7H-=A6A$wr1bajUQ;GfWk@zK3wOFdA^hJgjl7(L_K<7wANh+*5ULhel`U73i9L`56!EI-b?Reb<*;B7;?R~` z$~#89Jzx)ejO30X@|QnUl3K+JSG=0nmEBqNh;P?99CzcnOoq$vp<5L4$+6|x0F;1v zjO0Xr!xh+r(D@lD?PGU(aJdky^~%eX+yyys&)N*jG(mif>ak96*?mtrW{%nkq-;yR z+IGOh6V5ey74ad&Za9US()MupZo2s&i}?3e0^FHy)v*);f~wiyUD@%hdhLQF;S0p% zCcFd1dL+N{$+*sUc~>>e9dYRM&)P4g2->REfaYS&u>kg7NZ$`cb*K1D7i`LP*+lhq zsaflOeX7c>Nh=>AHL2>)UNRf|?Y(+#g7EubHI92mN8bMcx%6FI)St5JZK74zq(7k4 zx7Ew9lpU6Bqm@wLw~W-YvO?>*@ZDHox?P}}p^>o|W|F7{AwMYHPFI+o$Us%qS12*9 zTGtAyy&1M7ELMH(glv!P-NGJ7VavZd`ax?VMLD5{lH+?LTPQCLU5#G>>&(*UaQ`fV$G(`&DdOSUwwZ0P3B%EtY?@ z)Phu!0iqPxVbl+A2-O-8i51 zkN*HGyQ8JqRZF$o%g2Y`n|oDlPm((JlYA%mkxPwsu0Aly{b$(Xjo|trXnu z>W_QM7+=esb~ldAIvwK{AttePp6HQ(p>Wq>RG~aN^TsRfB$l0>tASk_Deb;jSE}Uh zx%G=~KRGecE#vR1gcHZJoMx>M$#FH)<#gFz-|Kzb_F>2ALv>T8R_g6mx@9{;;HgnO zM?7iuh*26^D}5e_u%JYp;PkAolIu3C^qJL2%k+yi*iI*xq*la=M((QJmUAq}om7>Q zvNVe1{^t+37-MZDXXp35G4_3;d{HLLw-UXdf1W;ZIt{CTJ@xZ73MHR+FKJf`fru6$eCVbZ?l+oY1Czd5=yZL++aG3FIR*mbb@P#L`? zNjEv%uRZzY7LY8YN@!*tH*>0z)i0!e_xZH#uMC)$=tK{sGY_2*r`9Ht-k;p@isA%a1Y10ak&V?Bjre#v^sy9 zy|KqORW#WVl~oXwxiF;=gpx@#h|X-xudHj?5v?=0b;q_y!>g?mowcT!JsQeXr0zL6 z=NA?$1ER|7y#AEgnJe=7@FT=;K1O7=F*EM3_ z+FpuJD`}LeHC7qOuM+H^{yAP3b+hn*3D{cK_YkZuBse(L|1;5 zu$wIU6|!nC9(&AnAs`60~~SJJdv5vE13+Enii{{Vi^4odeA3~BP+Pu~e= zRf6(g5NJ((av6^5eaXkVY#bY@)Ob%Ujxmbw@q0w<10Kcw=bW!h5U zdZ`t5wq17r03~f@h(W(~dMcf#k~cVM{a40D+$7?175BU?eS#&@stU8(t?anEj0w&0 z9?Kq1l;wYKMK;vUczAUlQzbJ?P6=lQ>;93mutW|5SY__K+fBokzdEhRxuX`!T-Z+6 z0pvU5O#}km7n@t1B6<1HM(ZMEC?r>h=Y~W}{1X^@R~1JRG05Xxkpe!5(C|#>R92?Q&`0Ye{UxN^Mw@&$ z#8GI!8~wTag>?;tcIXq!)`})ty;Zw8ICFu;KasUmZ&TqvP>xlXqJi3hJ7mUQ*=7?r zRsz1(ipglePi0|U)NiB+T|x8ZoQTcZEaGPC{PuQQD?C}sb&8kRc9Pp#XtF)wpC}Xn z<~n046Rqrf=jGqy!;Ee8MY<#{U)YQIX0vwN6gZl~Sk-a8Se*&d z?|r1H-XAu1N3VE$P07s#-d=0Wd_|!H*${?pIDL!#(cR}I?Rgq2WkpHkaUOB)mJ3rY zFdKaT09xO&a$X^%G*jS5Hye%_T!A`Mps9Sgw%h)#-FY8aY+Dw)i2~#w#j4B2d)7*- zY0i&K*@|%VY5_IedHo_YtfjeOv{i3amY8E6G;5LrJ){mvyi%e;29)QYIOAbatNDdR z7;4V?xp-cgEPO5<+vBcnRmu~ed6M?do6XjN#dn&RQ)++3l}gr4b}-z<@p7(V>R~Gz!^@taHgvAEltfJ}ZRb6Dm zGcS$V&#yR$=zF<)A_-?zTMSx$QlQ-tUftVyBD9L*Unq5K+4T$ecOL8gVgz_I6}u0W zC9a+O5OUtLZ(ZDXaxp_{vtxH@sgR=8d7&+>B0cnxKx#0I{CGHpYX&YCn&Dn*wd*TJ zo0^n=+y~uO?cY()bWz%%Yqi2z8pCqDvD!c&&p!Cj3!EBdXE|Zo>v2Bl=__8`-yT2X z4G1H`iTY3ZWzM{pq-ZT6El^I+Wa}rUtp5OqbWb`fu}T#S?%^Lb+q^p#6}D|*AH484 zUy)vbE$nnDYh|?yZ97^@YH?&KCaOF4$E8l(!Is<33KUL%wh=4>gInQdMI!<4bb={hZ6=%K&9h#?RRm~O?wSo{@Q_ecF6iMyQ zd!n)VDJ>qA+J4E328gl}Ny1(Ik~5xAHw<@F#_hPs@m&T=Ss`hZ5${k?M0Yo5G*;ow z6f|<&ExOWz_l^1S>fHmwsvr{=RaOe=>ZeT7+w#dsw%eJJm7||3 zFg%8CKUnZvW{-86E2h#fHG-cHfHmf><%2jjTfc_<=bS)$i+(uO-ilBYMOhm`32L<% zaort-6iiO5s_TT1qgWQ|5ZkFr?;!8t1GZknD!DgbS3WAL&$TmZ%_t{nK&y34+q2sk z>r5BKaR6dheJl8fDj9eiPZB zv{1zGq<1=cj@yQHwHQ2SRnHXrE1>qRoln|uQ1kkCz`xinP(P!k!;VY3;SlU88OBOO ziBP30UD)TsEp&aFG$)N|Z;U$D3Oq(kR$pq2$k{f9tE8ytkm7=$O)fvxd`7WDbXcN8JcUnUieZ}C zyDjX`qI1&Le4%xvC){qe2Y|yjN45A`#PC^mL#lDW)VBM}iod9`KZOBE`7gUYaqKpD zAMuHdtK|rq=6%qMO>}HbGVs`~Qg>%J#TJ&ZYqi&7SK^fARa=)Yy`r^phovW6=tsim z%YOb}N?{&LrgUxYyKlxzOQ7w>3}#<}6<>T*)*XZ_n^o`=v$Eob92NDCJ&$GlPdH=u zQ(sW{GfJ3{p|@Ez0PieeWJnR?d6tWl2aco>lL$ zF;ClDDI;pPXFd>g65tT}e%9Jrs(A0utTD}=SFV0pZoaE}WL2Yis<-j&hK3p7nCPQ# z6xTIqRAb}U@zmI%d!8cY@Rk4io+08y#)8?4t_7Nqm zo$4uY2?e=nBqV^KP4zX-_%mCueeJFaG)R@Qw$K&Y7N81Oy?=%sc`-U0Nv;0MzAR~O zuAa$-R;JZOYulcDqRJdBF0Iw5r7f{t2_g{4H}i2QDeY=iUYphSzly#f_m zvq6xuRZ3KoSg?U+)*|Wh!Bko;8ndeO$pZ9~O2n{mZPI~T_g~$=>l%v&jn^af?d#lo zvq{a?#Q$r_`z~L{#s_ zH1ITY7zgSremk&KF>UX6_BC7ZQMV@M9VVpTx+k{I#^L0mI?&^by!{e&bi`g&+XW10 z$ppnGIfR^{&S$^v50i589_VGxIjjkHiLYVJm`fyqLXRZS4G&f{ASCW#;Q}UmB^G?#%#MaOoYU-)pcjNf#h>o3jz+L2n@FyGe!)tB=QCsN*yK z&r4lx)i!g6qO}d2;S-=~%R8h)f)n(8q)uVr@a~`%zxz9_`W>4!-S{+b@QY{~W)4!W zwUUJsM@Rnv%QXU+{{UyMlQg=EHT#JEO8c;hZ__X}4jpPrGc%R7Zj73sbfbL_5U$&i<6UtY_vTA}uJnrcc} zmt>W45sE2&FT{EGV;?qYO&$4d4l);$S7yDI7l~on-~i~CfwWa*kG8+E$Ll1@gq8a> z{{Sn0cJH9w0E447FP8n4%gt0r@vJRk-^u>~;`y&S&!xV|)`)S>)5)w}s!_5y-5QM> z1)zZ7G2OzdbUH`H%q%2CyzfCo`D=;>1_!V`>mL1?<8wfTi5dacxV=BKD zijU(rHU9wmne9+{O$pMA8qz}!GW`;;54x+b@Zw-L-3$sb?s~sETKg#ge zKX>vwer}?z4UeF+w!MeZ%uB6XOp)&=`+4ISt#{b%Gimpt#*tl}#dCuPxcl&`n#buMQw_ zLP%Yf#_Z>>vK|jg>wdy`1n}yr;G0~O95bHIaJB0i>+GGc%ByztiE?}C;gJtSo!hHt z%GLT_UcQi*7q8Ru-Oo9~5=&|&@54R+0BB2-l~=NGX_L5TKS)Sr^|GsKbYfWDc5|K3 zkW2a1eO{yzl1gxjB;@DMbz#D)RfcF}&Z@AIAXwTnGc=@xw4+*5=o1B%6g-1j6==O1An7sP|M_Te9>Q8`0n86X98$YtF7wVn)WkmATPv zTUoXB+@9mgd!d)jjeASH+LA zijdfSYQ5EB(hXx;Hj3PSzuQM{DRJ9tDzmFW45qUow z)8*;HxJ*ubn$+T#i7_3-&ibjNHIoZbG|qU##;N(oJl6o3l~v0Vw5`y`05ImB8-3Yg zma{JE?g=KRKYqw$ubLu$lhOIfl_Vvll6VMk6HIZJ6*rL8&8ae-p)BSf(qcq7XY0`b zxO@b`q&gQrW+6q!R+?1al05Uy2Y~%MD?Pm7zzUjS$L4Fqt|PDO4wUD> zri0k|C6gZqVf6aKl5sPYUz%i7iUiUM8^esv^~nh1cbV;cv$!OS3UJ;GI0+`m>^@xZ zt~lvidm}Ww$5$o8j!Vm8`=KN`*UC^*s^8xUK1M_kW@Ud$^;`BrQC`^S6EZ_gQ%d)Z zIKe|e-jYs&r5ZwT68SP*P9k6S>OjLe@qn(T3B-HXLPQ;0 zf~1<}$ifmy3IVTedm$RF=_jdH38izK(|-kXsy8l*s`gs?5|j}^geuvGc~)slzt(&c zP;1`Kdtb{* znL7?h%@C}8UD^}HAu`UZYk~>!yFF1cmNI^`P@-C; zIhvonVvQOx?Ee63T243o6NhMz<(>VVv1JCrGYYybvUpWzwOox|dm~Ry^abe^fOdbE z#+{FR zWaBtYgD5>@s84dFNFv@RpNKbM`c{EESeT1Oj}jN@KbfK zMs$6;Au{7&ZrRUaHm= zhzx+O$TMu~BGaEziG9i%{KlN~gjPg~=M#NZY@ZIw(JQL!tD=C-TT^ptJ5H$AnLb}w z9p`>k?xl!Q!M)Q_W#{k;B;maF!Py1Qz!H4$>$w@M0#(^4Yey&Mz6KO(f25pq!Y9Jf z(PB&VE2Z$;iRxw8Cy9MqTGLb_S<_lz+4@DCEd>$M{ZDaSXdw0lwm&DfibdV74CCqGLQY{{V+6CjS7uvuNv7 zQ$?q$+j3A6CEdFpbzCv{Vb9PKAI5b$*qk)9Go5x(={qXivL=#L+n@!1N``sIAZVir zWRkS-gulNLdM52aBSDRHXzQyWbz zS(2++*+4=~Zs0TL4T$|vn*tGv@sAHWp+oiEu12ghOt#d>Nk~|^RKpGNQ6AGN))iQ- z{)NzHIbqb}I_EXa9X!{x^!x7y=9fZO^PW79KU#>aiE04HKsdiAJD03zzYevn8q6Nm zSfCX4u`L;w6imYENjEI<>*E0Y93EXP_nrxl z(Xhw$72Qm1tva<%$TKc+_{oVZ);^n52)a5I{{XH0B~(yDI;V1jldZC)f z9HyB294UVh+Z1H5?dw@#6miT3^TH5(s=avZffmUR{-dS{r)FFBns#=bb9VK8ePDtr zjs6P`0;?52vn{#Dl$4hhe*^yj^JjEB^9uT|so(AG*f74QTM<&nW_D??LX>Jb^3T#5 z=k49=eRokKSmBI^Pm1Kc+nOykI?95AjX}nzK9CoX@g)=dNJ_ZrMx@bcytOHcl5yGJ zpR_}C0OE73&|RaL><4Mo`UR&(wIJP31;aj}s ztuBjLE?MlhkP3D{8PAMST5K+vyRUC#S6SN8DM(|wf+Dv%5P-i`{Q5F;7<;g{S z5wq5ZMKH1SimFK4@uqpicEl|=s4*aJomNvu3mVMi=!$pLD*Rr6A z4)b1B=AwV^N|t}j&r}#$bt~Zs(8kI6rSkehx{rMK=gV{gEEx<1$%Yo`ADSNOYh`IN zk+W6$b;V7h55D@W5M2v*L`bsqxk8`0<9;z!5*{bdcPxHXcS6`Z*I-SOc9pt(AHfrS*zB=mw9!q*Kf%VM|JsoCh(U zJ&`iQVsv+m@2c9QLxn87s_$+it2&j{0vMN-b;)b!gYfaEFVCN+XpISTKTG9Ra-PP> zU*C0dSI0**4W^oH0fB%Y4r${aiDA${fOUHhl-IaRh4tTJEm=AQ()NF3ZrxkD{bN;S z@cS;CI*%Ztxx!?ru+{viWYvLzuevE-?)&29z8!}l`VOB7q9l!c`GgwNty0TRvhqZt zZwmPa@zu_l^NOo)har$ihmJK{Ggj71L2HHe*BtR&>DK47dvgY5#7K{v+}Ml`mhj!q z{Wj!0&23(Tp>&?9XYH8Ib=#fmpE_l!8H*X`N@Y}#l73P+@*Fqa*B(`-^dsSi{<$2e zOTPu}o*vS`>VCs2IBmzsArqQ3{F8+%Z9<&0U#>CYULn!s7u}sz(_Z)Cy&xPJ`(!;n z`lXD?Ef|B#Cq8lIR_i00=Uu|Qm#f&VI?ZXGRmQSQ(AtyLpS~AHek>KTQN-1ed+k870_)bP*ez9m_$1ez7cdWjkp$9-31Sh1}Vc5nWj`@8eHG`3in zN_?v|Noa?4SJE%oHpZhR*;`AF?qTYZtSLAx5hvD<<&*t%Elr6tcC z_{XMb-8cHQYvs4*uHLZL{SYQdZrr4%tmzpE1UP%+RRcP=or8n@dZi*Xo zgXdk9{g7(*u8OT`BPF+2LA>tZd1m;c4lRB;@UK;LCW znQZfyqQYs|AFIr-zK^`r>qYk3aTl5e3**r2Kf7DOcQk;eW3`wJDU+1f^*e-Z%66z@G?CutL`o>n}u7ux(^NvF}$5=e|0~ z0R2|=5-d0~j;iOc>lll6h*etl%88kk`Y4Y>+gt$A!xl>LzA%Mc6D2l z&S?{F501BAetM#&)fgS0UtX&2#?vuX=A*{iNngdw9RwKasIpBbchaQE50Z-wD`YYqGUkFKnpGpebJ}Mm(wCo;CL$589mAZD~Gv@}q+B zy*HznVmOA3c5Ork6)!f5EF{;Dbb2+B&3Fq1ZnC+z0aeq26Ke}YC9N4}${GZaa2%@= zqgmSgH`QFTQQ^D;I=+QXbMH>|dod|A@|$TuZ5$GKpTFiSpJl4Tx2)x_^(V@?PDo4s z?M$U*B__PZbKw!+W+hX;CSPW^r%62+dcO(ofPaK`8l8P07^81|tIbSo?HX_t`-dI} zA|Bfg7kkyqpPzpWZbh30z*2TS&K{966@w4f?ib>O`#_afmh@e+Y%@gro)r4U&7Vi^ zs`FLxZ5#W@1VpoRc&lgj&HS*gc~UMQ=-_{-RqwU$IoHx7SvoU%R9oS@7`K6=8#|j- zk0oCg*hsp$?bwPoRe}-{Has`@Mg5w@8<(=FjU1fR=2FTDr@O<_E@8n9mE4tkpIv>E z^KxM$4ERKV&Dm_nrqnHJ?Y|tyHSxwdXFKqYN?BE8xjG)Q`%JTJ<98hAsuZfLV(jX+ zdEYe@oR_U`&T?>u7HnPCs>gZhEL3u4TN|^S@fm5%RaPi~&Z@blIhky3&U3&HhgI*p zi36ooSMiR`%G4XYGoIlU@a5^|jMr6N=j2ox){_)f+;iFah*4RMO1AGtYpSQ!2Xul| z4Z4iywkmB9#>?uyf{@pNBURdYpl!ZV-$~n?-5KjlEN;&l$xMeDRev3mKs_*+Xt454 zJ`;CmpVP7`BU$yQ&nm8J!Ud#<3+letH?`1&haYjVc-lNO*I3KxO%eV>95r#=YuCKC zIx9$O5q!Dz;ltW$lUkP5qRWeEvbq95p*&*&AHe?ro;J7QGvVwOmL{KUHcMP#wsrH0 zL1#=_Z@d=0zPt0vHW~}Su7>vi0KN>ilHz4`^E)gOT4 z$bDn!j|O;m{810|8Fjk8mz8PlDf!F)0ByPPR0mqJZ93$^G{0-UJ-!8>QV|D0k-=&qc?ov}ISa zVu7M8gp&FR7(z)YZeXP6mVID)m0o?5gQTTaU8ts%pLoFB&DFlXWWylU)mdD9&}}PR zyu&A?p$bpTbGy0&h2EU1Q@?6^fFX59+1pyCN@heVW`k+Jo2w(%m(uB511&I|2nQOk zMF@!%`X%;e)~vMrtcpKSlT@}oG0NllrZnZ@9wzYqp@`w|a=p4Yt9doD(t}CBZX7ef#?sBW^;;t7G+`B|^p8INsIIm6Itzi-ggRFYr?nv;@99P#)jAMr z(*SUye%;-%n~C7PR}$7|za(KB3;d*_Htw#bn_*xwa67BI=nP*C#Dv2p;4ZrfRp_E8 zPJU{k>kCx&g`n$=h8Ai__)dPK7{^=mEPZk{4mB&QVt?xD=9~3p?C5{Q+L(S&*KI1Q zkowFZU1$uwha|&kWhp62cMZci$KLc7ifkBc z{creCpH*Jv*QCk*}f?`n? zWbW3;_Z;EC*Q>XQk1^Ab+52IiVN?{GBgvL!$Z*z_znEcbt`EMW~WZ_2c%=^A(WB6YRc)u|}LWndP>=mZ$9zPm9MqVpxVM zx%(-mH=ng`Q7cN(xZiXYtk^l%q64DOe`N%mv_0ZVx0~?4H%ALHmq}Fa=!9a+6wK|Y zl<&SeAzwLlsi8X2c0OK})ib|qf=|EWxWuSTzX|)OZjFr1aY@lS6n-q{%LuTB4azg3 z1Iv%VPHD9RDEO|SzwZ;_wsPfHZBU;O0gn)&_STSXZ2+$v-S{y&91=+ORk7_L1ASFw zhjW&`**^CC*ENfH7E^WH>)}$zwc{$uG#gYP)T^?wX$s3(*S<=sC8|^XtJ{iepV9^r zg?r-Qcf|NsGIIFxuF&FJMrX^u)D+VFCSeV`M+I-+8Vd%FB#W!PZNX66ZNf+P$niaE z1yeM$NL4WFfh)wF{CRl@-RSE8U<8Vo>E*v}Cf{zEbdP$i$U8gIOem9oGa7hI4HpWk zD>o83dyW2dIi}z6@}q=F4#T~0LY&fsSzp>sIb$8y+_^pcR^?e&d^F+shU=8l;gU+L zKA$Wg^Tj%N?p}XG{gKf9tEnrNe=XiHS=MRc`*!pRH~4zE7~+1o+sQ7Hv%h&4eALf; z0z0)@coS8z5)qrn71A$c%Q943R(W|N{ML!6@AASt7yU@mku27DrG$wGVO!U;_!~#E z(H0!Q$X8wK^^@$X#e%CU&27e+KeW)iCxEZxu0B1rc)C12Am+LwhwgLR&bI8V9{M(=;f~}(fuO|+DQ2mzMPJGW72dEpNVQ?4!JXx{VN`e9i=og zEbn*fI&SIDxl^@jBS#-b(U4~Q&+VrUS4Q>)t|W)-aLTvfvoEtlzx5cV3EyX}88!a^ z<D?IZGo&tdv$pTv zm*)Qf8hW=~I^K$UC!khTqLIHV|63Wtrm!Gd6njUE2avAN$J?F1PAT) z_x48iv_?sCz;p;c@AUp5V-90r^X##4bmVPvb?r@RwXVgtWA7ZfKb`q#)9M;3*)Qc_5~5!V|yPZ0#g^`AK`jA&)1UVAIaL*A4l zcZPGmBv%U0J?b)Ta$lBn$G#MWRs7OOT$Zlv=dZFkt5wfw-V#VvE6X|O4oDTG%X0Ai z!ba8=@ipW0_uMn*2{5|8!rX~cdFMF7OeE%=# zge`zjHx&G}iH(HD1R1&B(&6{TS6w#tgq4#^t;@`$P$&v3b^H&9oH)i~K4sfyPHEy1 zCUR8QPBr;EXcto4(x_`nF1YskL`asMhO4TQ$O^Js+IMJLE-b0_n%Cwh7_W&Ol55}H zNoxSQQ&1_3Md!^_vTMd6x*;T@>JgP-n^sn>^*rEnDcYBBUje9t19Zw7^Z__Ph`jUn zPiZnfe7o{XCFCA_fRq#1PYn9Qfa{E~+gIh1R}KF6)_CBjRwjem7J|?a!p_m$3?kBe zue+x2nQvO)VY-5`+7+lPR@GZolW^@*F45OI=%czf-U^|6K&?3vt_Q6}r4lL?E%O>C<1 z^oBT!*pgoIhQ$O8B_Dm2ER#rZs`(4D`b}=2q~X_`_`yW7;*_qcy09zil%1aZ_D5F} zGqUBy8gI^ikdj){EL%6iNjuA|BnV02v+w3H>D_EwZp<1XC0&`#At&ngmzeXC*er># zHo7J9x;g~zTp~@`TlcSW_H4?W3Fy~eqsKl`A+SrntG&uI;s(~ry-Z}ZGSIXrlrZ6~ zDMbCN^@(uoW#8A|X6~vR?R)CBqOOZ-BHFawY>6jmqA+bo(vdzLhFGfjmd*9V`73Xr ze##b%+L}W5tM7*+DRLq)Fv$9Q4I`~9* z+D^>_0yE8Zws_G_c~?Ek)M&nVZUm-vv_{-tl913^@7oB>psb|5TvlS zld=sqc1Kis-jeZbSL;dVckNz_O=QrmY`;n6{A!3nT_V?EA;hxvI8j+Qc19xCrenr3 z*LF4Tv{ro@8!yxjTo5wd)@=Opmq*++-L!tWy7;4u9q%`vUP{&-m8};F_WDD4%Wisc zMy@Q^ndO_}HRpPg*c+~{RdUeFb1#u{$vu8~`nW-Rvdd*ul<05($KTyQ%4ppD>7p50 zt51}k5h50jix7|0-@D-u{x)VRwjw2ms%u`+QfVsb3jWi9?D|FJn?Xc;zg@XbyQp!k zu%X-ty8LSWp;!$R_H&<_=*zOJzL#tt8jo1iSiCv>X3Tc?RQ8Q5*31V1x^#TinbCh{ zM$#KD$&3aq^XkupY3$kojRW=Vx?PnGqfBgZH~XVim+b9lFqG{{qPKj5mT-%BdL|oi zVCT(Mze_ma?Xs+PDV(;W?6yGu5xc4KrX-CX!Tm-%2fB=OqrdMY-eiEdQcI2g=3iD zjat0+ef=!UE!G?6Eo4fxgtC;B zr9UnhMWivSAyhurX3-qPamTG!L`~=$VXLWid1rJKxDDzgr$JXeap__#dn#*XzzSPl z2a(TxBD&KPC8N<6GZG_i#EiHu5o`Nca~6fAHrgLiPTI%Cx~D&jv(|`{CR{xFuXpg~ ziw$E5Zdl1v3Ay(s98#2`YEJx*IEK9%3V>x`7@*8r|xoGE+)U$WHF~vxf`;Io)-9syjqUPwK8xR7^hVHbrmW*#|O~6@sXI zV?S%x#96OA;50Yz&zuB-@NrLMQ&r@N`X^$mrEh3rMRT91Tt*uzs!wqyysG@ws?m)e zY_#1_F97&NN5q$>rAb6{W@~rKBQ;~&?P9*&V?q8{{Y(oiDqkon8$(o`#^L_{8j#`g43}bH7QB@XTm9MIzD0FuKL`B zNZdMkceeSWVSlNNxeu=ebL)`*6#E6uMJ)(kt8x46v%*=?Wwc z^*@{xfm%wHw@td^zwZNdZLT%bnuzN-8F~C69-mvRrbcB&W8hWwxZUZ;vxHYih!4$r zD6t_(ILf%^lH!-OHkG!uPPT=NS9M1^cSTtfcU-s1x?-~WLj&fyAEa~2c5&rYnyp@N z@X^MrlFY=Ow_eINiG}TAd*h{oSW0{llk}X*jW7IqRx9H&SB>>{#FWBC^<6@5=3<&Y z+QA9J{wiG~H0o)2s3U%B6*2X9SI3e8W&BYh!Jc@yij%vJao@*3E zbUwbLwKjFEQDrNJ6*{|;>>hyVb5e4$=?wuyqi6>OgEcB{$O{1> zJ`p@Y62T>+Z$sOdY?U?*+%wm{0}{&DT`A7FbVi2~L}gXd1>~j9gunDCRosIV2$0B&nu(nuM~K3!(51YoU`-ap9S;}g?vEM z`2PTZ`sd!hRd=+sWyv=blHDjx^v-)@!}P9*a~%Hw(=*$RZC>-DG_zu{pSH~WlPR;P zXj2&&+B#FaGPbsRT)@3;OqdkA${@bN8ZcJy?G@IyC9JiwcU=%-SwPCGB{h-fRg#lQ z3Xx7;kp<8M=eE7Q(L`K63_@%X<$`5_2_RIeO85~73OZ zG0Q3|f1|DNqU!$m$!PxocvaF0FL>T}QZkX@Mb`c%vfj7)J@B5^-in$fYN^$??-N{n zH<+1Vg8g|J_uE^P>qDB>oGg@<5!}V zj@mN&NjpicM`nElYcx}#7dCRn>?o=maD1ivU~6U_JdSoPxYJ2bzlh_Si@5QRO3~5V z4^~?T%lOQ7G1WL1krV`Gnz*7!EFQy9$Pb63vP|a_1l&h{Hc0K zpJ=62AdUC%8{=1HiTNd+bgl~#q^x?H!dsAcP4q2^q&U8aR)=;qude?9D$v-v&eseD zSHi(t;5uhDTP+<7OD`YV!AIr%L}O*yw*{57g2|1Qe{0s6eHRt~05AUB@rSm?4pp6e zs<*|w?5~;%Qz4@O6#mfe;SyP48#&9(0oITFxmD-xhG7Yzh=ez3Z0l3S}u}gn{nlQY>M@mRtCDy+m`mpPTMa4ax-4?B|q8 z4A=@0HCxvHhVQ;aJ5=n&Hw2N^d3a~L0}E8_s;RDP1jjVaH)lDij_MPYRonP3YlR({ zmaS?tobNm^_jIi4`7Y}Us^FOBB`aHpcV2QJE@f~}2D*DF^vt$5XF1>pHdR%>5`(s? zvL-V+&`3GXcSLtL8m`>Rcrru#WT7clZq9vT3}|&z`o9!#Zmwt-r4y|-m5rhEcHTDY#?=K5fU$w! ze)u#U0U9wM@tgku@$28QO&Upz{@8EWsivRGBG4}F8;x=8F?DC~R9N`J#~F(DM*jfn zHo*o?!^u_qV@E9ZoLb!2s5QK=h+Vp>jz0uG`Fa+iQmStbm=j;UsYFE;;L?yS}m+QQa)qncYV>Gw?2sVF_+v>YdoRFB8Juyzo zk@H?KhPk1_M|vBC*KYllb?9ZEkY&lczieKSntMdHJU5WhI{92-Iqs2T0T==tBp8WqrtM+RLpE4x&=sc_$wa!0)((o%~##kS@s zCmq`-$2iB4+MD=d8O(C|<$9HQ8Fjw41uLI z64J^2a|D#5`KZQ&IjnkZhe$%z0LrA3V(-ek&0H-W(+e)sZM8D{O49&WTsm+LQXq|bH*7LM8Sx{H3vjd5?SIds`En&V^{Wj>ni9FaX$=Yt-c$C=M(tG zd2!!G9kFNZy;%AwBWEZSvV@Vy4*RpZ=q-aoL$i=|1~|&TQ=IwFKQu~`4Yq)k&|OUD z);5+#HGm7Mw|XefuS&z1D{R#|GZt_D23syoK^-@qGK{{ma0)Sz(-EBvIdIpSoew$W(34+s=Kewrna?-{wZ$F1iM@ekR;u0j zi#D@h>ZH0T7!@6zw3482>d4+;!VxGYC^(+~05>RH^w_+U~+sdoW zLMa*6jM47D6<^348Hp+ia?Q2hkU3@dTqBJbF zS=a$C13bI$^i=2aJj(f+yQ*)T(F=2;Qj;w92jy1|sB<*cj5q@knC-{uG9`*R7YA^b zazNcLk+&?+=G!kM3hq}tiqbV>UUdYKFb0au|xiX6^88Fo7f<;|j}atGZKc&+Rye zHo@KvW6?Byo)d#ek-Dp_mMYz9h$am49Zg__lS^^slB(33hI->m3KLo`^2UnH#*F6@ zC*5d7w$Z$OGvn6>QImsGLhG}g@L(5bj{2{3wGv~7bH*Cr2I|`S;k!e0gPhi%=5U@BFT6gx(E4rztWDN%AD|UQ zcfV9NZ1|Fu>5{L77m#=e+jv&NX@VFW4bsT-sot_aA-7rL7s^+aX_%JSWjjfw+s1Rc zJ$}s$h7E0%TUVY$iVLoxwpG1Htyh|5D(b%s^N7~i!W$ia->T-7&k+OBlKluvJs9KSHy7p zn9VZT4Y74j*5D%uUABP2mLCYxtNB`sE$Mv|?e{Ud&U(WJA(haI4_j$Z!&3ss`@ z``{29^OkC(>q}6QcD%I6RGL+`mHz-PxcAeq?G{iP`#XUX5;=PA+_%04LlUtZdYozc5Sa0xY}A#PLLBLZ&1ncW`sp>(?=!)NRb!FcwV(NBWsNw;H#bI-b^ zR*s2HA=RKVyNxNbdZSPNQvm)$jTMzPcg{d4)aHy%GLoe-uHy-|ra0W;oq5&?)@Y4U zSM2q+NGT%x2*`;*%uPolBZ^Dlf zz0zu%v)(wxlp7rK=UjQHuaCehNu&A&V%TjVPa&XE1|V+ZT=0u%77#J46gS5?b-h1Y z8gXD~^C}2&kWe=%JBQ*Y{w72EuCoX?yJ=PDO}(KQVJ|l?G6%#37l(`vBxbg9t~J3C zu!&UTO?BZvXf4#HX;d}&;<_!TeOJ&@*#rPK)n2Q$wWhQ4>RD6kH76BwJmMLSO?{(k zjfxQcp!39)D4chg5qT-eCrEe04;e0jGbNjRynfI!$qCQ0EREOUTUO8sz*ZQXoMmju ziIo79DA#~6_KDTi$nwPi;&#`PBWV7v?JG@a*q3naALuY((tYY_y1-{w`|v8%YX1P) z*3z`r$yAesD5n%3wP4JGOpLo%Bo{`PMbI5tdnW_>cP1o<%1u%B=Mq_EB;nialm|!W zRqU@Oh-wnZuv%$ON;g!~0Q~E%l0yGa`ii zx92~YuX9A}x_tLnHEwoEt$#6)TV~({r?+O*+c}45j)NmK7mP;#0RI4LNu5e24x_J$ zN{(=Zke&C>V%F+7=a|o|B)xpnVvsO7sD!$=w$9db>j`kxeXUQRBp%;iq!FOwSour1 zL6N?;`y?e>IqHHg%2K;2pKL<*+V+k4%^@yq$13(p9Z1-?Loeg>dvWq9(mnd)&i$#k zqBXBLdUUhjKP)fZ(JXDUX`J$enInDGSWg_6$5IlUAtt7!Y=c~$ADHe{v{bpSfKE$N zl~Yd$;vi@n*VQ%xNu(v$U{eIzLW!n$QXbNBu0BX|ISRcs7ThM}sEYPMQ}qd#LoamT z#G{*%Dkc2j(38n{pKTykkS0s2~ zyP5PA#agXfYCd}3Qz!JRP+bqgcm8|firxi<@fts0HE7!QPMvyHDol#6Nd8&+9q?#! zo&D?Sa?_*U)|0DTzLxtZ*#^*D(n_RPO`-g=)x*DpTtP6JCP?D4*2obUOorO*tp@j}9J(b-K?86Rg{^=UY`lvqpK(g=5`Y?GpBX(W?~=DcNRrk_Bp% zj5+4KqL$m@I52^e+jdj0KbdfJOjn=cdE?*IZ<;T&WN5vB(AjQX8$6L*-MTRvL&gjm z!Ld8m<$q+*B+6~%27cUbQQKcwwl$cAC6zQbcvB7+Rxvt5#Zh8URr_<|w6FYFCu(dO5PZWO&>8(CPPa&J)$_9dn;y+Sw$kl97qFW&{ch@OYxGMvqzRlCq zMY8Oo&1qk7=Ql=<$>Fnf+19FR1Z^N<6xsAK7OJNtRx zvwAq#`mVF&(tw#%-Ti}i)-9n}nA^2QcU19h?{UYvo=a$Z3;+_qO+U9ex+XRN0^!nM zY7?Wm*_!T^9Ue+<4FUfEPJCm(j1E_HLf183t5^5}cO%LfsmrNd*EK(N>;2sa-bB6CBSQ8j3Pq-XC8)Dx7wYPPQaO_f~Nmb5BN zAM#QDf%J#|Hq^b7zdQDxzY0kqqq5S}DQzPPTs8ye8tsRPUS^t4mcd{s_co@O`eBBL8o=`$2&XnyU9WPCVlhr!B6C@ zG<&|~dm=NR%8qJ8I0WTaVT}Yru&m^=w0olvbDmKh@2TRX{{WA4s;hFaS}?SPp*>lp z`7s70P4l|E{ZLJu>_sVNgMeLIg)`$=ien~-a`jJg(t#=-@7EmW=o_NZ_D+}UBw^79 zwiMXv&V6CRJdQo;{{V$oYlAu6cd9(dsV=mPFdk7Qv8P_joUnp!POZqL!VNLLBr+`S zs@#VB4Q8LEY?Q4(4-L^_3Bcc2C=p#FSz}(yd$s~8@Lx_GbJ^7r6hjcrGR$b&S6|!k z&nV-dhYUV);Fx1bS6!QYls4GWkd&x~>2ckUTvXcZEg;BOqT^#b}3uho_!@mVBt`FF2EbBR_Bi7sU^$H|X=*&kCZ0fl2U2_4dk_c-%OIF>R zGe-~kYBwH6nZtxt#BuIbWwDyD&0oLMdg5-s?dh9F(VI$CrF+W5tl^9d5p?CBeYdPm zkp^UCeR5QO(vy8lTFOo2oHKrTL%|qVDw@wkhHvM}bA}CMA|tT~uNu zoTOc<)6YDACL&rHajDj8h=pd2ppJC!$&B5o%UfXbqLQB3lAR)erYF0MXDv~+L$b%M zRwzzyso(-K=&gXKo@$BSJjP69t=d2{`&KAKW#lv8UW=oC&zb@zr=<3p1QjC@UE=He z>E9N98niakX<#H`F5bByF~@CPo-4i@jnHN!q$KFdK?rQzISls4)P5MTFv5mzzZ=RFP)NlMU?M8VD={D$3xaI2q9HZbU0N zkZFgMS;K6qk95T`l$TA_8OiO50kf+3*iui(mu#Yx7(oj`Nk#3w9z@a>b^*BV@7;7q ziwjswzoIlKg``$^D*2`w1l!HKR%=@Pwc}XMX&oHcjd$uWS_=)hu#50MN|5U_RgE~A zgZg1wE9B2)c^`=UIM;`e&AC@S*-3hjhqU{lIv?+t&Z}zYhOu>Qxkq187^Mo0Hhiw( zoze5piF`AvUf~aJUUFYT_+!Mu!WeW+WuFSi=CInfD&*Z**dPLTbHhBlJby^&$3b(y zTnWh0?ZD1U+q71eWM;Sa7pSYrD6Q1ad!s37g{wQOFRw{0oti$d#;a;c)9kCZGuDHv zjZv%Bv?oj%RaWQ83B=T2OX9G^6U%VV)k&S%^y9FK>WMZi+Degr@xwfFV%o&!mjw>d zId!e5(_zdbqewI~8Sv_j{*MeT6_>)zTJ@*LD&C}yx(~ufe?G`{st_V#ywqqfBO3c& zMDc{^;>Ya|pi#RvG8H7zNHG4ZG`! z-Nh-j?Ib$c*&~j8`l8;`XlsPQ?_V9%TO=aWTq>kBowO;mDtF)8oYpCfd_?9xYNWI< z;LHP`-_je~ZiQ6czYaIWWwK7bx9nDs0c?TW=Rpf?Co8lKck_y&bF$gpP2gMQLwXZw z3KFEQ2t?|;%{{M?#<9m@1zR7q;^=Ov?WJN}m6CgW{lgPu-S$i#p z+ifa4hhJ&$ix%0$uocVMR602`zi#RZKrIH?A0Ei=f(tzI=d!5DMs#DfCwod+mIRl8 z+2#g&;X2Aqc_Dw427M@~g|V(VD=7-B;s(usnV$~$7_d3mH0PJKcU*P7g1h-3^}Fpq zXUYcwoke((nCsxc8o4$R0W z4cJTFZr>I0S`6#iSZhAk5441#TZaAqIqQipGmvVE8bO)+`mN+E3Swz0N`jTU3dNp} z{LCU#uGAD;Q{j;#EGyrtCraCMEClTnxuBJn@4K%Rd0_~>Zi6)NopBo z=Zn-W}F=*5VR)RY#NbwKFE&vd^had)f7B!l~2(P zt($&Xl&kj>b$92+1^zS5!hI%}<^q4U^^yf?UYbiVhbZbsIIEXle2Co@8ZHet--h3W z7u%T+`|r!$RSh-PD+uXFOe;b@D6xUzSn-Je0F3na92I;0Sq+}*1N5|4{{Um(-)?j&&Y0^}1Er+E z82sN%@rka{)@Vccj@ec_(uZn`6EiwBE^4dkcD0ZqiL;xbbqc7aIKB`tmnL1bb5%bor}TFdpe$TWcf&(oHq#I#1lLIG?`wr;lwC zAQ76fhh#og%OnNT4JI#@fV_Fd4WiMlS5;u9LxroCId-WbWbDa(!fRTXtR`wm5=di< zsZ6>8m)i|?6<1aXDO9wIR*KVhbHW6>D)_0S6Y^ahZo71JbFTC_j#28P%Nr_!imyHM zNhz0np+MG|&)OK_UjCa?+GW8LbYk9Iv#tB|qK5wfrc4bLUu{Y2LF+DZOo@UvRF9nU z`yZr6jR-^p5pkY9Jm}tr;h&Xz`*-u%bJ_!KsTN$E+|c;PEAsO+i!BahQ*^8h3 zONhR^X72p+k3IbEg83QUnj_(Y4co!0mLX7kV@NH{5uRJJ?mB>l)KI8WhQEl`Xq_M( zAw7zs(*S~Y`THZ5s=cqYgGc7&+J1TDgef5HIIYy@Pq~fE3v-&mCroUbtSxYNt$R&% z?@^xI?L6G8bGDE41GMi}@^SLVs=@}Da~=HC+D+T2-In~9O7uV4^G9bTnp2jW7o=k9 zeCrx}7Mz#>nfh(^Mb;7(_Kem)wEm4uttl3h7m@tbkN)Et7>|zvk%th=SbODyeD|VX>t*KK+e(3`t#0L<)+|dI6lH(PBVV_c z71cA$IF`*p9hY$IzqTPngc*I*Yuy)E_3gnSMX-j|La~q9BMVq#fSj+}!|5!s&wqL; z#M=xlqwl8st_rwodq`zu?AgWi$OJaOm~iXQWM*{hL!r7; zHyrCU&1$TtK1=gq?YFH4n_Z&HCdC1Cf0_RPFuyl%=j4|AGu-oW@9%%Av#>W>D9-s- z+o-M=+FD9&J89JicIxW4?%KNk{ytHdw%J@U2fq2Qdhl!@(8qACp%HA^ic5oElzCT_ zL4g44bLGeBdt?~8u<^tXAv_aRr)n0qz3Ni8MZ_o=UGH1-LyKwE&h3J^sBFfNnvu1i zAFchdWeUqP)2(b(@3+-fDmy)Gtw=N{erf3zY_RKe?yF;IET_`4P-%&W<{sHj(W$2K z!#8!nqgh)F6NHs{wwJo&pPDLYMubn>Z?m$~hiyY~IG?^uVl>8=g<}qzfR_5H>?+#F z3M6Sk+dNBX5Q%Hf63)4Cy9FN2 zqoL~w-BrV)`8Vt>F4VGu?7>}~?Fx&(_Ud5rq<1!ctX$lURQo=*BUPh{{X5H*=UByu?)4p?bfK)>8}XGbSDKY{#V4@p6V{{SF24EBZd--+}Ctgm?u zG8?d!da4&{Snf$oEw!MHl@W*3N4D9b2(1Je&3TM?MUFeFxMq+v$1LaX6QnA>Mny+X zjLYG6bN1sMNiIycEcp3|;S(QeB?*<~pC331OAMemjP?lSV!JJ!;e2Z?v`x z9W&JV*P64j+1(N1SK-eLysllc_CoeRv@NNdI%UZR2vV9=?Vcl-4yf`k5$Og-*Jas_ zyf)TL)jT_8i3G92d2$}>^$YCD?8MHFNk}Q#FrAb)ia92`v*qM*^h6t6a_vB7>~pN~ zUbO>CMYBK+);9@nucg&Z7SL&1HdUk{q=J-;F2HA$Xe=566ehHWU&9PJ?^Kq(FBT(= z+)v$Y=$~ynJTTI>MJ~>6iI%G;;%3Qq$D$MqUa`FOpTY`h0#(u}JkEV1&UDm$O>wQa zXQg7Tjjf@Wj6Ql)lswr%{{VQA$DVHG9$%#g=GHU6j_#`=r1XXE6)#*qR_O_k@V9^} z0{*Y25s++u@gsjM>zc~iANgm#xK-%WU}+0(Hk9qxwz=aQO&g|}_``Lws@}7XDQC=-|Vdz z0b(s^+~4XONO0r!&xcm`KwC*`1CLt!QQ|qwH)T~c{{U-PGV{{vsuFgS!;fZr>F7+< zh{^30Uuwfg=|{qIL2ofI%z>T?k`Y%n< zdO?<^2DpQFHNYQgZ)IfKFHbFtJQAfjgILs(H)pOlnhOChHPFh%f8*+c{4OGObzZro z{65=LOPJ7RGRMmr#d6MX*yefJ_iJaan@9Out9O6eHPQTZ#=5O{%B2b%yqlzd3C-A;)q1EP$bzaQJ_JKHC~?N z^j>0RLX8t%P~h3(xJ;2VM|EKQ+lZ?M`eL5=D;_bp+-MX7y*s}VWY)2W7oF<1>9)U;*mV-~AOTTwzVzfHkF*BiEOsY087F7G>Za*d zxh)CxIt0?_YxAA`x5a#0SvVWMw^nLPVFAD01g%Xjot{#Zr<7_>%xRxEgAy^?eCx?d zYd{w$i_?y}Nh&71bM%OXT>Ts$Y(?5TW>5E)FB(1j8x(Xk@cfwr;MrrO! z#+jN>2yIuLz?fs2Ota}-igvac(8{*W6trtrR-LHhVKUAuXp9hH2y^&DbV0W2$K_kS zUHdjq+A3jANv?#a;zirJXM{|LXC_xyO5meDJh|5%E1+7n_F9)Sq-_V7uQhnIJ5tsyiql0>%_N`?l{>pWu|6G?-E_Tu)OW@wI^$dswn|>a zu-n0uYz_l=U(zME16h@N?m^cz@`u`Uts54|mUCudq?DytEj{;nLE6!k+xFLOtF0vG zva5QbddBvZmyt6GW^`OtKo|GFJyFNKt=V0NP3l7!T&NDR{iCLBE}aORQQF!c=6w%1 zffCdPVx{ZVOJqDQ=T(}c`dz0}HoLB=ZmC;D;z{41#8ySLYfk#-TvV2`JZSmV;Rz-t z3#%$88}pw?gyKp#T9T??5zOa$O4M}e<-dM&!ZFKc9WE8YX?4Dv3*jyl*5sO#obS2_ zA64>$sa3w^@Fgi9SV8ysO0Qki+1{>NR^HWV*kRz!Fo`DhHbRGA;ySpNwkVkH98yW& zX-cg#kJbtZNj13AxAVz@wp?c|+`&yF({lRKHfnR6V~)#*9`rV1gl?DJa9hRn5X0oU z+(P%!@A0HFSkCDl6}UTY;}-Fd(Q3G6V^>Z~gpw246 zzRvdi(NFLWoIjSXT%rE}luEKYRhv999$&!pQnmXvX#*^ke}}zFRQ}QWej}`Qu^g-2 zSKD+HNG&9=-MYJ|liGr|#LmK`oyU7>@ryWc+p9CW>aMFJXtP9P$N-5PtKlDYYwXuN z^Xw`4C45OIX|uK>`_{HqB?P9uw9x{C&6@xd=3?OKj~P+e2Zr z?AHnlz~!Fk%G&&3_Ywolu&-5Gd@>k+^y}RLEzNgyTWD$RkT)dvMsC-q<3|4Hb^S3u z%1kW|)?x(3aws`&Yld!TZ)RZc!CZQc{j`cmmZ-4}?ltetT0yWhe_o<=5Q^2)i$ZZq z9Wu>-xc)xT9FlRpS+dE6*H={+GZvKk?&%d%&inJe8~B{--izxtk-DJ_Ez9qu4i)#-Y$8YigBV$xH4Qm!4UUQllEiwi!5d_q57 z+bXjJYg8CxE~DhuD%faGvjo%K3Z0Zy`!%XMuEW#A9UYUy*9~UNZPi6l+H|v9KiF5l z9?IP4f3qC30j;?(DNmE_`QsWpK7nAD>Dxb^D?Mn_SjpY$yV*S()FqoH8?2fxr^q|I zV(JcwhR^5*8>+V|NZMKMoR50lSEF5zs{1}rASP88Qv_s1oI48}{Y7o>=Bi@b-r|36 zIvp`Yn?FNYWG7{Wjo%G(`MxGH%+N5ZtCf50B;sqAzoM5)Xwnh~?e$X?IDp_hulA7=s`b0>ET)0Rinu~5J2xR5I1etbDEoK8Hm1h2!M<|?zpZRTBX%aP z+IaB9D|=%wkcR&N>CS&X$7KMtaH-;iMAZI8pedfO!HZ@$r#w&}bn32COFb7S3;iNv zFs|qdT`F+w@&nckB_X@sfBwoz(Y5Ts5>8F*Iw-0f=X7->$7|Rv%(l898;;?^0TvK= z<<&`s@-OmL!%nmlrETxoxP@-bKK$b^q_lHlHQ%n<&1m#}w8J9#OB&dyF0=J;6ed4o z`o3KFZjT@F7Jv>9{{W9}Sg%vi8hFDj{qDOw*FH6apevPi^`V+xs)}04( zrQ|biOW!;-;%SBh6J~Yq%~jiO$y~D6?wn5SoIf$+x>H3y8FbouU&ijGdv=J@?TQ=w z4zIgDGD8#&xB>-!FvhkUDc~&34HqC zrq)F1NlpAaZyBUXvANB3>bu~B7=t<-k#fhisFdHG(YCN!$PE+NsO=EJqmQzew`$a4 zFpIMsL<0JiZ%{u80{QpQb;SWZ{H&ry=AXhe=73tdWIlsn}+$yRA{CNxsju-0+ zy-J2@Rks_MBr6-59)nkHywnAwu$0KC{DpD^$4IWg+?DGjd4z>LK`H*N^yl04j9!$33su;2tCq(^ zTciF~{?3)#aooBss~HwrF;o*aWKQ3vpUburK+$k zN2C7FeA993)w0z@pqb@|p6n8|cs-|~4C7KK~o-lCQs@{dJIMrabbbU}sZ4N^wXWe*GIKl#W zboRw@CRhTsq$y#r_S%wdeQ8Z=nr4y8t{$OsYCAbHgl%3f&!jt7wO75%gyXuit|}91 zTP!k_Rbt`B2-qdr9J`@9C+PyNvo3Cfs4Y5u$NP6w^G$W+7G3@?jtlGO#+XtyHeU?c;LG$KE59{U6H7&Y9(+1<_^P^F zu9YjLq}TO){{Vh5a?1sp2lW_d*+O(^(GGcMzI7n02A1oP{^3;T6Y>4>U~!|_;bE)F zx^Cw)!h;d#HCgnpT%-4YisSSB^S=0@wdq)G1T^7Q>=mpF6P+urRkumCx?U~;GsgX^ zy!x|_PTi(O{{XP6JA%KmXwpc!t3M%%9r5R+h`7B`J-b zhn{F-Y3U2jlkc7Q9MbsCN76;}zP^?08v{mFf*e}*gX;=4Jn_$bK{m4Mr{C6BsZX87AH!2O#uC;U-O6yMLxbLADb`y*q+a3XUC zT@a7zYjt*A$kf)k(P`PT&8}-`lq6GckQBz_f80mU{x$I7lvjpbf30^@?C~*CfcWgR;a{8Sc-W_0G`Mo3gK|){{WhhFzbmi^rKwg2Bd*ZoO5_TOC-wd-Yi^$y!!+S)m1A!GbefwC3+up-CS7BrP^zh&eSj8{32@p*7CTmW*8E#*jUuwT< zcC?PuoK7XBR-)%})g3a9iu{dotdSzX)J3N;Fxrfx zglz-x9$%Qs>8};p*#-KqZU;Tpu&I_k85Qpn1pKS}scl83RZ_}+R}F)DIu;2Taw1_r z@%&&AxTy!6})kzd1bpp zS~OLo@&Mo(X16vyB+G0t!e&U7br`Mz`Be_8qS{ktno;I^_<*x{B)0e0|&D ze-J{pS)q{dX4dEOeAmr-YeqWH8UFyTW~(gbt2??sGc39(l_rLlgSt2Hqp{#g*H@Cu zJ(8T~g>c@swIEY*PIKcDL7D-tjmc_c`FclXvh~HhN%HXeLkmIM)g|=F*YQ~9px(L+ zsQMMTxjJsoq&`y0y%#mB-{meupDze@uVZ|?({+Z_Xu&Lw(R2cx>O6TVvuoAzXR9YW6C^PrbU^r8rV;ETx(+VPY!6a z9I)#4;Z=X@li4d$b{&gkS+1E@0)tGSfjg2pZpJ)H*QVPVDH_wiZu`3NUddt5?t=-x zq3Kne*IIN=$B~d>l(2*il%!k$iz@@z@(swAsAZ!$;m&n5RB86wZsSS}oc-ff4kKFJ zy|YwLgh{Wu+Egb=t>$H!a;iHv`O1brN~l62bKzdM{1^3mZ?1f|?~)BF zD;9bR-uSTtb&RU2Y89!H1n#f3VVo&UsBvG?4gBzrNHG5Z;0{0as@|xJziu~6q`c3v z(`DL>2lfhvKDoz#D2rmWLu7efIr_;t%`)=o*VRtm4bDm(o9dq$c;6m_2U0bfLRfB9 z@BLl39ko1Air2A7nJWq3Trvb;w7rT^iPhg(`zg?3W!kgNNOX8O%95MM)Il^;-3{#* zHh57Y?TWw8| znX1du<*U%P_dB{Ahy{)5CfN`%bxTF^MFwKvbKbh9$>{=q< z3Nu>QNa0&}Du-<9TE>xa)tNSv@qB=NpfPlnq2^lT&yT+ay0h6V&Stckw+wQf{{SnV z{?u9rW;0^WrKXx2Ev}RUf$+Ppbb2>}qDD4|M3-Vb>ZY*%ErA7)pCARsyyxh@IQrkv zwHtD9G}YZIz@Yx@(muKH_;alA{{Z%h)ze=w>CI6c^8Wy_+25Cv8d(~-ef5g6Z$Hz! z@fy}aCRb6-W*r%z<6UHo_6Dq(XdzCt1u>}mM5uOBde&8vixSaw-#(jBddsnFiyZ+@ z27yT5P0?Wv&IG4i1#?i`^5wSE)-{o0w4}7-V5CywD^c4M7#iN*yEY(@;(Cr>C-CO%G%1S0(Z^@>kWSX`&c0}lQJ+)kdhWkd!sdnP7o{8#~$FZAkvdxW< zFWDbX7jBCfc5AS$wLFwZ#Bn&vz0oND0EF1BSN4;zKeP&ZXPiuI7PogCRDErmGORZG zp?;QYe#)^La+571WGm(ak3Oi98V2t)hOsz%<6df(>mS;ci9q^TodAuj9P8)R)mRJS zHN1A!Y({K1IM)j5s1~ukrzhq^qK9dN2;XKKGO-`n$yNH`h-4`sm`l2{2Zj8)ris)g7l4 zT(jK?b)x#9pQWT6npzNql1b0nkkTf6{xYrVOBh~JuSE4rYg-MaO-neSp^m{k_-DEr z;f%QFTmF@_4IbypLlpIHYF62jZAx6LxPQYxO!q)bz@H9EQPD9nX~KAWa6+k#Ur#08 zkMzq1xNKkL4KXpQ$vzH+jS=8#JH2`$wt?zO(6we7tfI&&Ps)Cq`#8W~8-Dt}Yk8qO z8yY!jF!o+WPi7~&=w_@vl|NYAxq3$sn$^Cn`apzD^+kHljqn>Z~p)qJ3dvK(Vt_x6b8zy*0+BtJ@|2h zwtaZl4r&#nL|Ng2HAk;`DYdEWjbNrxU;MeBhyD=!_(YZv+vrPeY*^hbqM^7rG*24l ztEIi{r)0~`sY$cjpeOlB;(0?YI!Hlb6Or}dQ(kpz@acSG`rW|o`$}xRNk~}0Y{?}% zKm9N;?8Y$~OHICRk)H*1qWnG>M8|1*OK%k^YQs&KQV`b8&J+~GJG<){SlVhO_sbmn zbLhPu!J{FuqxBhjcdV1!7NVuV1k*oArnG68m;T4E)dg&HbUA+-;+ieZAwiW`+o9Pz z_xg8ojP0jLMTtAj`|FnQqD9fHm+=+L6-9NqYCN?*TUq(82d_Nh3taab$un8YZjNX- zG-K0}rxWV5=B5-A(i*Edx-20>ah1op_S~smVgh##Y1Yfo>uS2R(6N14YDqzf+9~UGlj5Ld91Ebh8;dz{dIe%2)2YqPdy}?5Qg(8B?+&<*i%q z-AeVwf(CyUnNN;>_jAd9Pr}=)dMP^ zqq-@ou1W2iF$tv;o!R3A5~{x&#yLwFh>}vlD3tC1=aebe?sU0cHS&*B$aLQ>-&A6M9b5PDo&*A@$G<< zJ)DwA+@<;7=^RNQbz+_VG0D|%^WP^lO*6ju70z?o7doq_2_pe@RcaByD5DUcJ|~_+W-=4hPTbYnU2kI1w`F z2A=Z0eRqB#?7sEtaGf>)D?96kC|307+sA)}_r#XBK8dkRx_3?%VGlW8Cy!i6X^^eL zwyO8znkU&Z=>a6uapT_v9_Rs_yOlnW3HNE`nnzKa27I?yd8wS01qV25pD!;>_x$ij z5O&uul|HgnU7xOeF6)Rm_?CPi0~RN8EjV zzSAN@8nsoq7_2w8kel}mGu6Hzx+INnzWG-rSr!=vtL+gaed-7U;&0>SUuq#|ndGMS zIusU@pD2!E-hJ_{h!Gog^;?mi#0nuDLpkRLhZFY4EY1q5Ge!RZRXv+gO3ZAMgUdDN z7O-4yiP^u#B8yu?x~KF=#m<7drS;YDH-dmV(m6}F~)^(`YWI`<$hJ~=W+&V zK8vvHE+n)*6Y`IyJ@;V{HFZgpRPWy|g%s(eP_^x@fbS=o*i zSnpV^DPxr6Fr9By+2nqbY@~`&bk6LEk!Xjk!(ID&tc*rU*kOf8^isP%dt@Y63^~SX z(*k7ORak-&Bs`AJJbM&a(Mi&|hLd@z6z{q++D^z^!y%F5RemUBPUU^IQ)E9jmJ|?8 z$=rK0W1W+B?m=*?g>YBfN9L0AO^`vjedFn^ z9UMhtNI3l5f{8LlwCn;e;hFiM#1rS~B`%R&DdF3~BsAq!_M;Ia<-tm2oCFKTe*?x2 z4?6iPiO?FsLA!=N=_L$0Qmk|Kj-;e=>Pv~C&wLO7YmW^4mqC(aw(K@$*k8B}$9G&t zj{rV--PK8j7_^BQRv}cKWN0!LhsbCUcDH9daExY_(V^{s>)Se%yo%Fk-5^+7e7WYi z@2t&VgVWKU>-l=~+0|bj@dknq*Zn7sOVuo=VXTQ{Lg6_QBw_(8!(1<-zyy&gs_+@wrG^w~zNhEVbAO##?val%{TG8-8)NZ5=|)PbDUw&?P7S#<15f#3w3%{ z3G4h}OHMvNQ{NWQZI=t{)k8400KR{To#(_wj4Mp#ebrv&3CtJdYOYLnjL=e4ckk`a z=;T+=1IE4fb$mBVJ~g=xttUY$yu?gR#P;&WTzV;C{L~86QQ250j7x)$ZWUN2M19*O z%>Z=K{*AXyc;>OD(d?U>bnE9epVBd;*LBLdDkZG_HdT+)DK2c3?R?lru=rxm99Sh& zsrJcuSBx#+jj;^&`qnD2Gwl~OX3rFUtw14E`1l^Y_Q$r^w0jID+%TD{3+G)Yrd%UC z_RN|){nX*lYIn?;0(AU8@eiJ96Pu&JJ7t=qiKa}5)~f2OZlCM=(zR6RZgGC~a9Qxp zI--0VGh3BqUrLVCr5x%0+237NZM3xF)t+@~FSu*{$A4X7SYt(1byaS)xaL%O%Sw7= z`|DY+GJNBN0i4ZZf?|`MR>itrQet6LJ4U(Bghq)KtQB0+7u9EUl=8#T8JXu0l(eH- zU9(?I;T3VMU{4OJR47w7Uaf|$H6uM~y)J)BwN$6%KTINu*K0B|?a5u)EM$@T_O5HF zTAKE8TS=C2**pEidN0mt$0u%x_@w&PZCjliV$>~=zPEfXg6Qt4QD;b@DVL=XFikW0 z!Z8|GM>;!Sb~E?lJlC#xa@+nR+51Xdv#)}h?d=kFK&eSV6y+XErZgkLan;+B`X9rd zB5Rt)mu#xpy${uEOxe!t)k9?S8Q~s%ZnDIJNRhg$(R$8}w8OMDx6X3U;SzL9SWnA1 z*e?-6F4{i15k}i=TQl(^u10F=E{+c!k=! zu6KSr>lrN7r^C(H)(p;f4YU;ETTYu=g8D&?aTUM9Cx5!@5bbKJy*Zi~fhit`qMz9M zbdPiwcyG^FlwMdg!2}Iz>)AoI=rTc*aM(P#B8`=$&AJi;!@sKjBOj!1^j?>qtlhIb zCn~>U$XoO|Xm{!V0O7i_M9T`->77B_t{eXVIqr{E&=&1yGX3@P7nt~mMvui1YVEpQ zuIsxTm6_2O1jA?shM;%n=^ovo;_I=q#LF7Re8=M30c1#o4ZN}LjP`w-v=XhJ0yVJN zFfN~Kmy=o>sN*}NYspQdtlCnErWN}{klAB;u5<6de3YtMP$UWrGoQ>At({eN1D&?3 zwr6Y0Y*G&?4S@ie)q5?a0X#in;#hvevTD+@k-%eI=8)lZ@11>2^-5{I>69Y3i?g20 zVKhipdZjfVowe9x8n~YP;||m$N>xMc2)?>=+f)giVOZism+DOS zVlngFfcWihCwG4LlorxmYe>o^%FQF){_rB^%b_DgBlI<23cfy)hQWv!@4D|zim&Oe zzhvdZp)+Z^qvIZR`o_0M_);WE63v+!+sS9`dTp)2)wB(Yoax`RYh$L^oF6yOhzSF#=k!f-g(9{_RkOt+=$P{{S(awCQI$ zf3;0sLD9`_BDwq_tj?26OgOLIQLj9X=+9cM&V29gbGcigo&@fq>myeNu-TQmRdJo#G&VLgOi##ZC2JE%;<1qv`gYQ1vc zW+Eg~Ku9$Z^~EBxrd?_< z+humL(h))aaTs>v8_gf1#uZu{{{T{JUjG0J z#o*AkhYSuFNpw33?>|l|zv-v@N39v|lVa9#`u_kvym`Q#;mGfGj3SN;aYHD7~Dl6MiA)IPW z_YQIPC;D~bsHV>Z7n2~-j^Ms-@qUeCBSqC{#O1Spw3jS(t?V0b*ov4_HdCM{Z2tg~ zu6(Q2A4h1<5o?C)I;Omu(`J!B8+s}srW%5`^mXS$wtT`i39s#|b$MZ)t*w(v!*~;L z>$z0Kf=AZd>ogji(RsNgl)A#j2^XY{BJvzozXRPwHztqJD15Zzj2KPFZF!+@a#CwktAAMNnRJRqNsA8$0$@yCDKRGB(w);p*ZL_zeQY(OSCY>~}vYWzX5}xKcJ&-ZTdhgnX<1r|B5BaT-M3tYw#_ zV7`y=290H-@l0&=_vXJ!nv>TRpCut8z?ndz8y^s+09_v~KgH1@TF7&c^4nE~%jpOn z7h~+ewWIj%*)`G~Uh4*4*JYyH!BqozJG15m4c@Wgj}ZR=k|E90=67ejg@V)C6Z~@T z)?AUX+g%}zs^U1us503&bJoOFWU%hC{^slFvmU4ctQ{hvT|!*hxkDd3_(z`jr$`YE z@^qvQeznb7S!~*(dcBosnJ-$8Eh$}UPZJ+G>8HfC#dw)FpE~tb+D+mZJGf;onfoM; z=w$1ND@akgw7)lgV>kZ873W$;@qJ#r{@ZPCu^o9D*~ts^g36t4e;+9*2JBQ9O6_TRHk?wH02SUazc|KkPC4*_)jcrXC1+uLh?Q09uxWOm zSnMJ0mG-W!YN6Y{v6it~V#kZACrW*9*tdEwNIC&;>}%~%?QLtG$Fs!8MKakmRoiLZ z)ML{0SBB$TH68fLp6d2qiDU6RIB-U^L2%kJ_gtjcp0?Q12Il44cqk|=T&&@p(e7Rl z@Pt?|hUY^!OA%P*EH|t_iabvaGhzVoo^@HSUTI#BOImh=(+(vDt5UB6oP8sqbZ6m& zz*~^ZXUDSe4KHr|(Ozet&23S$BV^evl`EqK75<;ZY8ht(8unS|Mb^5ie|N~h^n+M7 zb(ocg+(LG0F&m?YRl7M=!64FAeA10^tKUmcnqTvFZa#1)MgnrLPqaY~ofTemhglP| zrC>g?4SsV>_{4Wd-iR3~cS6bQdS+y+Y1JB&yuckB8qcDBuMVB~{U#MWrJC({)&S>C zbO0BKYI6ArCAkc^=faZ-B_^`;a&CD^N*Y?KY4DxrtI`r6B3RXZqmGDbZqv0~Z}?XZ z)epc(r;pkS#+mOZFL1^2`qkgF zou6l=g*hghwsCA{w)#bcJ17{7>aS599(Z}zqPKcGtGgb@WxwIt8z6j%9hhUvC&Pir zAQDa`OxI}HRy%i=k+L_Gj5$QcF{3YYK?TmNXdzaW>!!=G(B&qZ8zEmf8O{)UfZ5$L zMDWd1jbnRKu)-fpGlJlubA#*U)dGBGv*x>^vd&LVB-P%FpE}3(k)5(N%R`nO5?YZ#C)9lwxn(MsXP2Z1yLu~GT&nHM|Jg@--BADl literal 0 HcmV?d00001 diff --git a/app/public/js/login.js b/app/public/js/login.js new file mode 100644 index 0000000..987aedd --- /dev/null +++ b/app/public/js/login.js @@ -0,0 +1,40 @@ +window.fbAsyncInit = function() { + FB.init({ + appId: '309223815892634', // App ID + channelUrl: 'channel.html', // Channel File + status: true, // check login status + cookie: true, // enable cookies to allow the server to access the session + xfbml: true + // parse XFBML + }); +}; + + +function facebookLogin() { + FB.login(function(response) { + if (response.authResponse) { + // connected + handleToken(response.authResponse.accessToken); + } else { + + } + }); +} + +function handleToken(accessToken) { + $.get("user/facebook/" + accessToken, function(data) { + if (data == "invalid") { + alert("FB problem"); + $("#lightbox_overlay").fadeOut(); + } else if (data == "no_sso") { + currentFacebookToken = accessToken; + goToSSOAssociation(); + } else if (data !== "") { + var result = jQuery.parseJSON(data); + token = result.token; + $("#current_user").html("Logged in as " + result.cn); + goToCourseSelect(); + //location.href = createLaunchUrl(token); + } + }); +} \ No newline at end of file diff --git a/app/vendor/facebook/php-sdk/.gitignore b/app/vendor/facebook/php-sdk/.gitignore new file mode 100644 index 0000000..c2a70fc --- /dev/null +++ b/app/vendor/facebook/php-sdk/.gitignore @@ -0,0 +1,6 @@ +/coverage/ +vendor/ +composer.lock +composer.phar +.DS_Store +.idea/ diff --git a/app/vendor/facebook/php-sdk/.travis.yml b/app/vendor/facebook/php-sdk/.travis.yml new file mode 100644 index 0000000..9c49978 --- /dev/null +++ b/app/vendor/facebook/php-sdk/.travis.yml @@ -0,0 +1,6 @@ +language: php +php: + - 5.3 + - 5.4 + - 5.5 +script: phpunit --stderr --bootstrap tests/bootstrap.php tests/tests.php diff --git a/app/vendor/facebook/php-sdk/changelog.md b/app/vendor/facebook/php-sdk/changelog.md new file mode 100644 index 0000000..16728fe --- /dev/null +++ b/app/vendor/facebook/php-sdk/changelog.md @@ -0,0 +1,28 @@ +Facebook PHP SDK (v.3.0.0) +========================== + +The new PHP SDK (v3.0.0) is a major upgrade to the older one (v2.2.x): + +- Uses OAuth authentication flows instead of our legacy authentication flow +- Consists of two classes. The first (class BaseFacebook) maintains the core of the upgrade, and the second one (class Facebook) is a small subclass that uses PHP sessions to store the user id and access token. + +If you’re currently using the PHP SDK (v2.2.x) for authentication, you will recall that the login code looked like this: + + $facebook = new Facebook(…); + $session = $facebook->getSession(); + if ($session) { + // proceed knowing you have a valid user session + } else { + // proceed knowing you require user login and/or authentication + } + +The login code is now: + + $facebook = new Facebook(…); + $user = $facebook->getUser(); + if ($user) { + // proceed knowing you have a logged in user who's authenticated + } else { + // proceed knowing you require user login and/or authentication + } + diff --git a/app/vendor/facebook/php-sdk/composer.json b/app/vendor/facebook/php-sdk/composer.json new file mode 100644 index 0000000..38cba01 --- /dev/null +++ b/app/vendor/facebook/php-sdk/composer.json @@ -0,0 +1,25 @@ +{ + "name": "facebook/php-sdk", + "description": "Facebook PHP SDK", + "keywords": ["facebook", "sdk"], + "type": "library", + "homepage": "https://github.com/facebook/facebook-php-sdk", + "license": "Apache2", + "authors": [ + { + "name": "Facebook", + "homepage": "https://github.com/facebook/facebook-php-sdk/contributors" + } + ], + "require": { + "php": ">=5.2.0", + "ext-curl": "*", + "ext-json": "*" + }, + "require-dev": { + "phpunit/phpunit": "3.7.*" + }, + "autoload": { + "classmap": ["src"] + } +} diff --git a/app/vendor/facebook/php-sdk/examples/example.php b/app/vendor/facebook/php-sdk/examples/example.php new file mode 100644 index 0000000..4c22fa9 --- /dev/null +++ b/app/vendor/facebook/php-sdk/examples/example.php @@ -0,0 +1,107 @@ + '344617158898614', + 'secret' => '6dc8ac871858b34798bc2488200e503d', +)); + +// Get User ID +$user = $facebook->getUser(); + +// We may or may not have this data based on whether the user is logged in. +// +// If we have a $user id here, it means we know the user is logged into +// Facebook, but we don't know if the access token is valid. An access +// token is invalid if the user logged out of Facebook. + +if ($user) { + try { + // Proceed knowing you have a logged in user who's authenticated. + $user_profile = $facebook->api('/me'); + } catch (FacebookApiException $e) { + error_log($e); + $user = null; + } +} + +// Login or logout url will be needed depending on current user state. +if ($user) { + $logoutUrl = $facebook->getLogoutUrl(); +} else { + $statusUrl = $facebook->getLoginStatusUrl(); + $loginUrl = $facebook->getLoginUrl(); +} + +// This call will always work since we are fetching public data. +$naitik = $facebook->api('/naitik'); + +?> + + + + php-sdk + + + +

    @@ -52,8 +53,8 @@
    Provide Instructions: - formElement($form->get('instruct')); ?> - formElementErrors($form->get('instruct')); ?> + formElement($addForm->get('instruct')); ?> + formElementErrors($addForm->get('instruct')); ?>
    @@ -67,7 +68,7 @@

    Select a image to upload.


    - formElement($form->get('image')); ?> + formElement($addForm->get('image')); ?> @@ -81,7 +82,7 @@
    Select Difficulty
    - formElement($form->get('difficulty')); ?> + formElement($addForm->get('difficulty')); ?>
    @@ -91,7 +92,7 @@
    Prep Time
    - formElement($form->get('prepTime')); ?> + formElement($addForm->get('prepTime')); ?>
    @@ -99,7 +100,7 @@
    Cook Time
    - formElement($form->get('cookTime')); ?> + formElement($addForm->get('cookTime')); ?>
    @@ -117,11 +118,11 @@
      -
    • Gluten Free
      formElement($form->get('glutfree')); ?>
    • -
    • Low Carb
      formElement($form->get('lowcarb')); ?>
    • -
    • Low calorie
      formElement($form->get('lowcal')); ?>
    • -
    • Vegetarian
      formElement($form->get('veget')); ?>
    • -
    • Carnivore
      formElement($form->get('carnivore')); ?>
    • +
    • Gluten Free
      formElement($addForm->get('glutfree')); ?>
    • +
    • Low Carb
      formElement($addForm->get('lowcarb')); ?>
    • +
    • Low calorie
      formElement($addForm->get('lowcal')); ?>
    • +
    • Vegetarian
      formElement($addForm->get('veget')); ?>
    • +
    • Carnivore
      formElement($addForm->get('carnivore')); ?>
    diff --git a/app/module/Recipe/view/recipe/recipe/edit.phtml b/app/module/Recipe/view/recipe/recipe/edit.phtml index 05cf291..63d1e38 100755 --- a/app/module/Recipe/view/recipe/recipe/edit.phtml +++ b/app/module/Recipe/view/recipe/recipe/edit.phtml @@ -7,19 +7,19 @@

    escapeHtml($title); ?>

    form; - $form->setAttribute('action', $this->url( + $addForm = $this->form; + $addForm->setAttribute('action', $this->url( 'album', array( 'action' => 'edit', 'id' => $this->id, ) )); - $form->prepare(); + $addForm->prepare(); - echo $this->form()->openTag($form); - echo $this->formHidden($form->get('id')); - echo $this->formRow($form->get('title')); - echo $this->formRow($form->get('artist')); - echo $this->formSubmit($form->get('submit')); + echo $this->form()->openTag($addForm); + echo $this->formHidden($addForm->get('id')); + echo $this->formRow($addForm->get('title')); + echo $this->formRow($addForm->get('artist')); + echo $this->formSubmit($addForm->get('submit')); echo $this->form()->closeTag(); \ No newline at end of file diff --git a/app/module/Recipe/view/recipe/recipe/index.phtml b/app/module/Recipe/view/recipe/recipe/index.phtml index 175b194..4d6917e 100755 --- a/app/module/Recipe/view/recipe/recipe/index.phtml +++ b/app/module/Recipe/view/recipe/recipe/index.phtml @@ -1,11 +1,11 @@ headTitle($title); ?> -

    Recipes

    + - +

    Recipes

    - \ No newline at end of file + + + \ No newline at end of file diff --git a/app/module/Recipe/view/recipe/recipe/showcookbook.phtml b/app/module/Recipe/view/recipe/recipe/showcookbook.phtml new file mode 100755 index 0000000..bb5e4d4 --- /dev/null +++ b/app/module/Recipe/view/recipe/recipe/showcookbook.phtml @@ -0,0 +1,92 @@ +headTitle($title); +?> + + + +

    My Cookbook

    +
    + + +
    +
    + + +
    + +
    +
    + + + + + + + + +
    IngredientsInstructions
    + escapeHtml($recipe->ingred); ?> + + escapeHtml($recipe->instruct); ?> + + Prep Time: escapeHtml($recipe->prepTime); ?> +
    + Cook Time: escapeHtml($recipe->cookTime); ?> +
    + Difficulty: escapeHtml($recipe->difficulty); ?> +
    + + +
    +
    +
    +
    + + +
    +
    + +
    +
    + diff --git a/app/module/RecipeOLD/Module.php b/app/module/RecipeOLD/Module.php new file mode 100755 index 0000000..ab9c12b --- /dev/null +++ b/app/module/RecipeOLD/Module.php @@ -0,0 +1,50 @@ + array( + __DIR__ . '/autoload_classmap.php', + ), + 'Zend\Loader\StandardAutoloader' => array( + 'namespaces' => array( + __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__, + ), + ), + ); + } + + public function getConfig() + { + return include __DIR__ . '/config/module.config.php'; + } + public function getServiceConfig() + { + return array( + 'factories' => array( + 'Recipe\Model\RecipeTable' => function($sm) { + $tableGateway = $sm->get('RecipeTableGateway'); + $table = new RecipeTable($tableGateway); + return $table; + }, + 'RecipeTableGateway' => function ($sm) { + $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter'); + $resultSetPrototype = new ResultSet(); + $resultSetPrototype->setArrayObjectPrototype(new Recipe()); + return new TableGateway('recipe', $dbAdapter, null, $resultSetPrototype); + }, + ), + ); + } + } + diff --git a/app/module/RecipeOLD/autoload_classmap.php b/app/module/RecipeOLD/autoload_classmap.php new file mode 100755 index 0000000..052c5f3 --- /dev/null +++ b/app/module/RecipeOLD/autoload_classmap.php @@ -0,0 +1,4 @@ + array( + 'invokables' => array( + 'Recipe\Controller\Recipe' => 'Recipe\Controller\RecipeController', + ), + ), + 'router' => array( + 'routes' => array( + 'recipe' => array( + 'type' => 'segment', + 'options' => array( + 'route' => '/recipe[/][:action][/:id]', + 'constraints' => array( + 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', + 'id' => '[0-9]+', + ), + 'defaults' => array( + 'controller' => 'Recipe\Controller\Recipe', + 'action' => 'index', + ), + ), + ), + ), + ), + 'view_manager' => array( + 'template_path_stack' => array( + 'recipe' => __DIR__ . '/../view', + ), + ), + ); + diff --git a/app/module/RecipeOLD/recipeSchema.sql b/app/module/RecipeOLD/recipeSchema.sql new file mode 100755 index 0000000..b2e4e5b --- /dev/null +++ b/app/module/RecipeOLD/recipeSchema.sql @@ -0,0 +1,20 @@ + +create table recipe( + recID int auto_increment, + recName varchar(100) NOT NULL, + ingred TEXT NOT NULL, + instruct TEXT NOT NULL, + image varchar(50) NOT NULL, + difficulty int NOT NULL, + prepTime varchar(20) NOT NULL, + cookTime varchar(20) NOT NULL, + username varchar(50) NOT NULL, + + PRIMARY KEY(recID) +) + +create table gluttenFree( + recID int, + + PRIMARY KEY(recID) +) diff --git a/app/module/RecipeOLD/src/Recipe/Controller/RecipeController.php b/app/module/RecipeOLD/src/Recipe/Controller/RecipeController.php new file mode 100755 index 0000000..7885fd2 --- /dev/null +++ b/app/module/RecipeOLD/src/Recipe/Controller/RecipeController.php @@ -0,0 +1,53 @@ + $this->getRecipeTable()->fetchAll(), + )); + } + + public function addAction() + { + $form = new RecipeForm(); + $form->get('submit')->setValue('Add'); + + $request = $this->getRequest(); + if ($request->isPost()) { + $recipe = new Recipe(); + + //check image if null do nothing else send to file upload + + $form->setInputFilter($recipe->getInputFilter()); + $form->setData($request->getPost()); + + if ($form->isValid()) { + $recipe->exchangeArray($form->getData()); + $this->getRecipeTable()->saveRecipe($recipe); + + // Redirect to list of albums + return $this->redirect()->toRoute('recipe'); + } + } + return array('form' => $form); + } + + public function getRecipeTable() + { + if (!$this->recipeTable) { + $sm = $this->getServiceLocator(); + $this->recipeTable = $sm->get('Recipe\Model\RecipeTable'); + } + return $this->recipeTable; + } +} diff --git a/app/module/RecipeOLD/src/Recipe/Form/RecipeForm.php b/app/module/RecipeOLD/src/Recipe/Form/RecipeForm.php new file mode 100755 index 0000000..b6bfbde --- /dev/null +++ b/app/module/RecipeOLD/src/Recipe/Form/RecipeForm.php @@ -0,0 +1,163 @@ +add(array( + 'name' => 'recID', + 'type' => 'Hidden', + )); + $this->add(array( + 'name' => 'recName', + 'type' => 'Text', + 'options' => array( + 'label' => 'Title', + ), + )); + $this->add(array( + 'name' => 'ingred', + 'type' => 'TextArea', + 'attributes' => array( + 'class' => 'recipe', + 'placeholder' => 'Ingredient and amount', + ), + 'options' => array( + 'label' => 'ingred', + ), + )); + $this->add(array( + 'name' => 'instruct', + 'type' => 'TextArea', + 'attributes' => array( + 'class' => 'recipe', + 'placeholder' => 'Please be as detailed as possible', + ), + 'options' => array( + 'label' => 'instruct', + ), + )); +// $this->add(array( +// 'name' => 'prepTime', +// 'type' => 'Select', +// 'options' => array( +// 'label' => 'Prep Time', +// 'options' =>array( +// '1' => '1', +// '2' => '2', +// '3' => '3', +// ), +// ), +// )); +// $this->add(array( +// 'name' => 'cookTime', +// 'type' => 'Select', +// 'options' => array( +// 'label' => 'Prep Time', +// 'options' =>array( +// '1' => '1', +// '2' => '2', +// '3' => '3', +// ), +// ), +// )); + $this->add(array( + 'name' => 'prepTime', + 'type' => 'Text', + 'options' => array( + 'label' => 'prepTime', + ), + )); + $this->add(array( + 'name' => 'cookTime', + 'type' => 'Text', + 'options' => array( + 'label' => 'CookTime', + ), + )); + $this->add(array( + 'name' => 'difficulty', + 'type' => 'Select', + 'options' => array( + 'label' => 'Difficulty', + 'options' =>array( + '1' => '1', + '2' => '2', + '3' => '3', + '4' => '4', + '5' => '5', + '6' => '6', + '7' => '7', + '8' => '8', + '9' => '9', + '10' => '10', + ), + ), + )); + $this->add(array( + 'name' => 'glutfree', + 'type' => 'CheckBox', + 'options' => array( + 'label' => 'Gluten Free', + ), + )); + $this->add(array( + 'name' => 'lowcarb', + 'type' => 'CheckBox', + 'options' => array( + 'label' => 'Low Carb', + ), + )); + $this->add(array( + 'name' => 'lowcal', + 'type' => 'CheckBox', + 'options' => array( + 'label' => 'Low calorie', + ), + )); + $this->add(array( + 'name' => 'veget', + 'type' => 'CheckBox', + 'options' => array( + 'label' => 'Vegetarian', + ), + )); + $this->add(array( + 'name' => 'carnivore', + 'type' => 'CheckBox', + 'options' => array( + 'label' => 'Carnivore', + ), + )); + $this->add(array( + 'name' => 'image', + 'type' => 'File', + 'options' => array( + 'label' => 'File', + ), + )); + +// $this->add(array( +// 'name' => 'artist', +// 'type' => 'Text', +// 'options' => array( +// 'label' => 'Artist', +// ), +// )); + $this->add(array( + 'name' => 'submit', + 'type' => 'Submit', + 'attributes' => array( + 'value' => 'Go', + 'id' => 'submitbutton', + ), + )); + } + } diff --git a/app/module/RecipeOLD/src/Recipe/Model/Recipe.php b/app/module/RecipeOLD/src/Recipe/Model/Recipe.php new file mode 100755 index 0000000..d331fd7 --- /dev/null +++ b/app/module/RecipeOLD/src/Recipe/Model/Recipe.php @@ -0,0 +1,311 @@ +rec_Id = (isset($data['recID'])) ? $data['recID'] : null; + $this->recName = (isset($data['recName'])) ? $data['recName'] : null; + $this->prepTime = (isset($data['prepTime'])) ? $data['prepTime'] : null; + $this->cookTime = (isset($data['prepTime'])) ? $data['prepTime'] : null; + $this->image = (isset($data['image'])) ? $data['image'] : null; + $this->difficulty = (isset($data['difficulty'])) ? $data['difficulty'] : null; + $this->glutfree = (isset($data['glutfree'])) ? $data['glutfree'] : null; + $this->lowcarb = (isset($data['lowcarb'])) ? $data['lowcarb'] : null; + $this->lowcal = (isset($data['lowcal'])) ? $data['lowcal'] : null; + $this->carnivore = (isset($data['carnivore'])) ? $data['carnivore'] : null; + $this->veget = (isset($data['veget'])) ? $data['veget'] : null; + $this->ingred = (isset($data['ingred'])) ? $data['ingred'] : null; + $this->instruct = (isset($data['instruct'])) ? $data['instruct'] : null; + } + + public function getArrayCopy() + { + return get_object_vars($this); + } + + // Add content to these methods: + public function setInputFilter(InputFilterInterface $inputFilter) + { + throw new \Exception("Not used"); + } + + public function getInputFilter() + { + if (!$this->inputFilter) { + $inputFilter = new InputFilter(); + + $inputFilter->add(array( + 'name' => 'recID', + 'required' => true, + 'filters' => array( + array('name' => 'Int'), + ), + )); + + + $inputFilter->add(array( + 'name' => 'recName', + 'required' => true, + 'filters' => array( + array('name' => 'StripTags'), + array('name' => 'StringTrim'), + ), + 'validators' => array( + array( + 'name' => 'StringLength', + 'options' => array( + 'encoding' => 'UTF-8', + 'min' => 1, + 'max' => 100, + ), + ), + ), + )); + $inputFilter->add(array( + 'name' => 'ingred', + 'required' => true, + 'filters' => array( + array('name' => 'StripTags'), + array('name' => 'StringTrim'), + ), + 'validators' => array( + array( + 'name' => 'StringLength', + 'options' => array( + 'encoding' => 'UTF-8', + 'min' => 1, + //'max' => 1000, + ), + ), + ), + )); + $inputFilter->add(array( + 'name' => 'instruct', + 'required' => true, + 'filters' => array( + array('name' => 'StripTags'), + array('name' => 'StringTrim'), + ), + 'validators' => array( + array( + 'name' => 'StringLength', + 'options' => array( + 'encoding' => 'UTF-8', + 'min' => 1, + //'max' => 1000, + ), + ), + ), + )); + $inputFilter->add(array( + 'name' => 'prepTime', + 'required' => true, + 'filters' => array( + array('name' => 'StripTags'), + array('name' => 'StringTrim'), + ), + 'validators' => array( + array( + 'name' => 'StringLength', + 'options' => array( + 'encoding' => 'UTF-8', + 'min' => 1, + 'max' => 20, + ), + ), + ), + )); + $inputFilter->add(array( + 'name' => 'cookTime', + 'required' => true, + 'filters' => array( + array('name' => 'StripTags'), + array('name' => 'StringTrim'), + ), + 'validators' => array( + array( + 'name' => 'StringLength', + 'options' => array( + 'encoding' => 'UTF-8', + 'min' => 1, + 'max' => 20, + ), + ), + ), + )); + $inputFilter->add(array( + 'name' => 'difficulty', + 'required' => true, + 'filters' => array( + array('name' => 'StripTags'), + array('name' => 'StringTrim'), + ), + 'validators' => array( + array( + 'name' => 'StringLength', + 'options' => array( + 'encoding' => 'UTF-8', + 'min' => 1, + 'max' => 20, + ), + ), + ), + )); + $inputFilter->add(array( + 'name' => 'glutfree', + 'required' => true, + 'filters' => array( + array('name' => 'StripTags'), + array('name' => 'StringTrim'), + ), + 'validators' => array( + array( + 'name' => 'StringLength', + 'options' => array( + 'encoding' => 'UTF-8', + 'min' => 1, + 'max' => 2, + ), + ), + ), + )); + $inputFilter->add(array( + 'name' => 'lowcarb', + 'required' => true, + 'filters' => array( + array('name' => 'StripTags'), + array('name' => 'StringTrim'), + ), + 'validators' => array( + array( + 'name' => 'StringLength', + 'options' => array( + 'encoding' => 'UTF-8', + 'min' => 1, + 'max' => 2, + ), + ), + ), + )); + $inputFilter->add(array( + 'name' => 'lowcal', + 'required' => true, + 'filters' => array( + array('name' => 'StripTags'), + array('name' => 'StringTrim'), + ), + 'validators' => array( + array( + 'name' => 'StringLength', + 'options' => array( + 'encoding' => 'UTF-8', + 'min' => 1, + 'max' => 2, + ), + ), + ), + )); + $inputFilter->add(array( + 'name' => 'veget', + 'required' => true, + 'filters' => array( + array('name' => 'StripTags'), + array('name' => 'StringTrim'), + ), + 'validators' => array( + array( + 'name' => 'StringLength', + 'options' => array( + 'encoding' => 'UTF-8', + 'min' => 1, + 'max' => 2, + ), + ), + ), + )); + $inputFilter->add(array( + 'name' => 'carnivore', + 'required' => true, + 'filters' => array( + array('name' => 'StripTags'), + array('name' => 'StringTrim'), + ), + 'validators' => array( + array( + 'name' => 'StringLength', + 'options' => array( + 'encoding' => 'UTF-8', + 'min' => 1, + 'max' => 2, + ), + ), + ), + )); + $inputFilter->add(array( + 'name' => 'image', + 'required' => false, + 'filters' => array( + array('name' => 'StripTags'), + array('name' => 'StringTrim'), + ), + 'validators' => array( + array( + 'name' => 'StringLength', + 'options' => array( + 'encoding' => 'UTF-8', + 'min' => 1, + 'max' => 100, + ), + ), + ), + )); +// +// +// $inputFilter->add(array( +// 'name' => 'dishName', +// 'required' => true, +// 'filters' => array( +// array('name' => 'StripTags'), +// array('name' => 'StringTrim'), +// ), +// 'validators' => array( +// array( +// 'name' => 'StringLength', +// 'options' => array( +// 'encoding' => 'UTF-8', +// 'min' => 1, +// 'max' => 100, +// ), +// ), +// ), +// )); + + $this->inputFilter = $inputFilter; + } + + return $this->inputFilter; + } + } \ No newline at end of file diff --git a/app/module/RecipeOLD/src/Recipe/Model/RecipeTable.php b/app/module/RecipeOLD/src/Recipe/Model/RecipeTable.php new file mode 100755 index 0000000..12e30e4 --- /dev/null +++ b/app/module/RecipeOLD/src/Recipe/Model/RecipeTable.php @@ -0,0 +1,78 @@ +tableGateway = $tableGateway; + } + + public function fetchAll() + { + $resultSet = $this->tableGateway->select(); + return $resultSet; + } + + public function getRecipe($id) + { + $id = (int) $id; + $rowset = $this->tableGateway->select(array('recID' => $id)); + $row = $rowset->current(); + if (!$row) { + throw new \Exception("Could not find row $id"); + } + return $row; + } + +// public function getRecipe2($artist) +// { +// //$artist = $artist; +// $rowset = $this->tableGateway->select(array('artist' => $artist)); +// //$row = $rowset->current(); +// if (!$rowset) { +// throw new \Exception("Could not find row $artist"); +// } +// return $rowset; +// } + + public function saveRecipe(Recipe $recipe) + { + $data = array( + 'recName' => $recipe->recName, + 'ingred' => $recipe->ingred, + 'instruct' => $recipe->instruct, + 'prepTime' => $recipe->prepTime, + //'image' => $recipe->image, + 'difficulty' => $recipe->difficulty, + + /* + * need to add function to call other module + * will take input of the categories + */ + + ); + + $id = (int) $recipe->recID; + if ($id == 0) { + $this->tableGateway->insert($data); + } else { + if ($this->getRecipe($id)) { + $this->tableGateway->update($data, array('recID' => $id)); + } else { + throw new \Exception('recipe id does not exist'); + } + } + } + +// public function deleteAlbum($id) +// { +// $this->tableGateway->delete(array('id' => (int) $id)); +// } + } + diff --git a/app/module/RecipeOLD/view/recipe/recipe/add.phtml b/app/module/RecipeOLD/view/recipe/recipe/add.phtml new file mode 100755 index 0000000..92942ee --- /dev/null +++ b/app/module/RecipeOLD/view/recipe/recipe/add.phtml @@ -0,0 +1,131 @@ + headTitle($title); + ?> +

    escapeHtml($title); ?>

    + setAttribute('action', $this->url('recipe', array('action' => 'add'))); + $form->prepare(); + + echo $this->form()->openTag($form); + + echo $this->formHidden($form->get('recID')); + //echo $this->formRow($form->get('recName')); + //echo $this->formRow($form->get('ingred')); + //echo $this->formRow($form->get('instruct')); + //echo $this->formRow($form->get('prepTime')); + //echo $this->formRow($form->get('image')); + //echo $this->formRow($form->get('difficulty')); + + //echo $this->formSubmit($form->get('submit')); + //echo $this->form()->closeTag(); + + +?> +
    +
    +
    + Recipe name: formElement($form->get('recName')).$this->formElementErrors($form->get('recName')); ?> + formElementErrors($form->get('recName')); ?> +
    formSubmit($form->get('submit')); ?>
    +
    + +
    +
    +
    +
    +
    +
    +

    Ingredients

    +
    +
    + List all ingredients: + formElement($form->get('ingred')); ?> + formElementErrors($form->get('ingred')); ?> +
    +
    +
    +
    +
    +
    +

    Instructions

    +
    +
    + Provide Instructions: + formElement($form->get('instruct')); ?> + formElementErrors($form->get('instruct')); ?> +
    + +
    +
    +
    +
    +
    +

    Image Upload

    +
    +
    +

    Select a image to upload.

    +
    + + formElement($form->get('image')); ?> +
    +
    + +
    +
    +

    Time and Difficulty

    +
    +
    +
      +
    • +
      + Select Difficulty +
      + formElement($form->get('difficulty')); ?> +
      +
      +
    • +
    • Time (estimate) +
        +
      • +
        + Prep Time +
        + formElement($form->get('prepTime')); ?> +
        +
        +
      • +
      • +
        + Cook Time +
        + formElement($form->get('cookTime')); ?> +
        +
        +
      • +
      +
    • +
    +
    +
    + +
    + +
    Recipe Categories
    +
    +

    Select all the apply to the recipe

    + + +
      +
    • Gluten Free
      formElement($form->get('glutfree')); ?>
    • +
    • Low Carb
      formElement($form->get('lowcarb')); ?>
    • +
    • Low calorie
      formElement($form->get('lowcal')); ?>
    • +
    • Vegetarian
      formElement($form->get('veget')); ?>
    • +
    • Carnivore
      formElement($form->get('carnivore')); ?>
    • +
    +
    +
    +
    +
    + +form()->closeTag(); ?> diff --git a/app/module/RecipeOLD/view/recipe/recipe/delete.phtml b/app/module/RecipeOLD/view/recipe/recipe/delete.phtml new file mode 100755 index 0000000..53ef8a0 --- /dev/null +++ b/app/module/RecipeOLD/view/recipe/recipe/delete.phtml @@ -0,0 +1,25 @@ +headTitle($title); + ?> +

    escapeHtml($title); ?>

    + +

    Are you sure that you want to delete + 'escapeHtml($album->title); ?>' by + 'escapeHtml($album->artist); ?>'? +

    + url('album', array( + 'action' => 'delete', + 'id' => $this->id, + )); + ?> +
    +
    + + + +
    +
    \ No newline at end of file diff --git a/app/module/RecipeOLD/view/recipe/recipe/edit.phtml b/app/module/RecipeOLD/view/recipe/recipe/edit.phtml new file mode 100755 index 0000000..05cf291 --- /dev/null +++ b/app/module/RecipeOLD/view/recipe/recipe/edit.phtml @@ -0,0 +1,25 @@ +headTitle($title); + ?> +

    escapeHtml($title); ?>

    + + form; + $form->setAttribute('action', $this->url( + 'album', + array( + 'action' => 'edit', + 'id' => $this->id, + ) + )); + $form->prepare(); + + echo $this->form()->openTag($form); + echo $this->formHidden($form->get('id')); + echo $this->formRow($form->get('title')); + echo $this->formRow($form->get('artist')); + echo $this->formSubmit($form->get('submit')); + echo $this->form()->closeTag(); \ No newline at end of file diff --git a/app/module/RecipeOLD/view/recipe/recipe/index.phtml b/app/module/RecipeOLD/view/recipe/recipe/index.phtml new file mode 100755 index 0000000..175b194 --- /dev/null +++ b/app/module/RecipeOLD/view/recipe/recipe/index.phtml @@ -0,0 +1,87 @@ +headTitle($title); +?> + +

    Recipes

    + + +
    +
    +

    + search filters +

    +

    + other options +

    +

    + ">Add new Recipe +

    +
    + +
    +
    + + +
    + +
    +
    + + + + + + + +
    IngredientsInstructions
    + escapeHtml($recipe->ingred); ?> + + escapeHtml($recipe->instruct); ?> + + Prep Time: escapeHtml($recipe->prepTime); ?> +
    + Cook Time: escapeHtml($recipe->cookTime); ?> +
    + Difficulty: escapeHtml($recipe->difficulty); ?> +
    +
    +
    +
    + + +
    +
    + +
    +
    \ No newline at end of file diff --git a/app/module/RecipeOLD/view/recipe/recipe/select.phtml b/app/module/RecipeOLD/view/recipe/recipe/select.phtml new file mode 100755 index 0000000..1b4bdc5 --- /dev/null +++ b/app/module/RecipeOLD/view/recipe/recipe/select.phtml @@ -0,0 +1,29 @@ +headTitle($title); + ?> +

    escapeHtml($title); ?>

    + + + + + + + + + + + + + + + +
    TitleArtist 
    escapeHtml($album->title);?>escapeHtml($album->artist);?> + Edit + Delete +
    + diff --git a/app/module/Search/src/Search/Controller/SearchController.php b/app/module/Search/src/Search/Controller/SearchController.php index 09b8318..622cdb1 100644 --- a/app/module/Search/src/Search/Controller/SearchController.php +++ b/app/module/Search/src/Search/Controller/SearchController.php @@ -73,6 +73,9 @@ public function resultsAction() { } public function resultAction() { + + $startTime = microtime(); + $this->luceneIndex = LuceneHelper::GetLuceneIndex(); $results = $this->luceneIndex->search($_GET['q']); @@ -82,9 +85,13 @@ public function resultAction() { $hit->document = IndexedDocument::extractDocument($hit); array_push($hits, $hit); } + $endTime = microtime(); + $searchtime = ($endTime - $startTime); + $viewmodel = new ViewModel(array( - 'hits' => $hits + 'hits' => $hits, + 'searchtime' => $searchtime )); return $viewmodel; diff --git a/app/module/Search/view/search/search/result.phtml b/app/module/Search/view/search/search/result.phtml index ff0db13..45b08fe 100644 --- a/app/module/Search/view/search/search/result.phtml +++ b/app/module/Search/view/search/search/result.phtml @@ -2,16 +2,23 @@ $this->headTitle("Search Results"); ?> -

    Search Results Found items in seconds

    +

    Search Results Found items in µs


    + + No results found. We recommend the following actions: +
      +
    • Change your search to be less specific or for something related to what you are searching for.
    • +
    • If the recipe you're looking for isn't in our database, search a different site and if you find a good one, add it to ours!
    • +
    +
    diff --git a/app/module/Users/view/users/auth/register.phtml b/app/module/Users/view/users/auth/register.phtml index 7b2add9..fe5d785 100644 --- a/app/module/Users/view/users/auth/register.phtml +++ b/app/module/Users/view/users/auth/register.phtml @@ -1,4 +1,4 @@ -

    Temporary Registration Form

    +

    Create an Account

    diff --git a/app/public/css/globalstyle.css b/app/public/css/globalstyle.css index 45308cf..0ead9c5 100644 --- a/app/public/css/globalstyle.css +++ b/app/public/css/globalstyle.css @@ -87,4 +87,14 @@ h1, h2, h3, h4 { color: #ecdbff; background-color: #77AC42; } +} + +/*SEARH*/ + +.itemsfound { + font-size:12px; + text-transform: uppercase; + font-weight:bold; + float: right; + padding-top: 15px; } \ No newline at end of file diff --git a/app/public/js/global.js b/app/public/js/global.js new file mode 100644 index 0000000..be23bb3 --- /dev/null +++ b/app/public/js/global.js @@ -0,0 +1,23 @@ + + +$(document).ready(function() { + initSearch(); +}) + +var Search = {}; + +function initSearch() { + Search.field = $("#search-tf"); + Search.form = $("#search-form"); + + + Search.field.change(function() { + + }) + + Search.form.submit(function() { + location.href = "/search/result?q="+Search.field.val(); + return false; + }) +} +