2, 'c' => 'text/plain', 'cc' => 'text/plain', 'cpp' => 'text/plain', 'c++' => 'text/plain', 'dtd' => 'text/plain', 'h' => 'text/plain', 'log' => 'text/plain', 'rng' => 'text/plain', 'txt' => 'text/plain', 'xsd' => 'text/plain', 'php' => 1, 'inc' => 1, 'avi' => 'video/avi', 'bmp' => 'image/bmp', 'css' => 'text/css', 'gif' => 'image/gif', 'htm' => 'text/html', 'html' => 'text/html', 'htmls' => 'text/html', 'ico' => 'image/x-ico', 'jpe' => 'image/jpeg', 'jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'js' => 'application/x-javascript', 'midi' => 'audio/midi', 'mid' => 'audio/midi', 'mod' => 'audio/mod', 'mov' => 'movie/quicktime', 'mp3' => 'audio/mp3', 'mpg' => 'video/mpeg', 'mpeg' => 'video/mpeg', 'pdf' => 'application/pdf', 'png' => 'image/png', 'swf' => 'application/shockwave-flash', 'tif' => 'image/tiff', 'tiff' => 'image/tiff', 'wav' => 'audio/wav', 'xbm' => 'image/xbm', 'xml' => 'text/xml', ); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); $basename = basename(__FILE__); if (!strpos($_SERVER['REQUEST_URI'], $basename)) { chdir(Extract_Phar::$temp); include $web; return; } $pt = substr($_SERVER['REQUEST_URI'], strpos($_SERVER['REQUEST_URI'], $basename) + strlen($basename)); if (!$pt || $pt == '/') { $pt = $web; header('HTTP/1.1 301 Moved Permanently'); header('Location: ' . $_SERVER['REQUEST_URI'] . '/' . $pt); exit; } $a = realpath(Extract_Phar::$temp . DIRECTORY_SEPARATOR . $pt); if (!$a || strlen(dirname($a)) < strlen(Extract_Phar::$temp)) { header('HTTP/1.0 404 Not Found'); echo "\n \n File Not Found<title>\n </head>\n <body>\n <h1>404 - File Not Found</h1>\n </body>\n</html>"; exit; } $b = pathinfo($a); if (!isset($b['extension'])) { header('Content-Type: text/plain'); header('Content-Length: ' . filesize($a)); readfile($a); exit; } if (isset($mimes[$b['extension']])) { if ($mimes[$b['extension']] === 1) { include $a; exit; } if ($mimes[$b['extension']] === 2) { highlight_file($a); exit; } header('Content-Type: ' .$mimes[$b['extension']]); header('Content-Length: ' . filesize($a)); readfile($a); exit; } } class Extract_Phar { static $temp; static $origdir; const GZ = 0x1000; const BZ2 = 0x2000; const MASK = 0x3000; const START = 'bin/doctum-binary.php'; const LEN = 6655; static function go($return = false) { $fp = fopen(__FILE__, 'rb'); fseek($fp, self::LEN); $L = unpack('V', $a = fread($fp, 4)); $m = ''; do { $read = 8192; if ($L[1] - strlen($m) < 8192) { $read = $L[1] - strlen($m); } $last = fread($fp, $read); $m .= $last; } while (strlen($last) && strlen($m) < $L[1]); if (strlen($m) < $L[1]) { die('ERROR: manifest length read was "' . strlen($m) .'" should be "' . $L[1] . '"'); } $info = self::_unpack($m); $f = $info['c']; if ($f & self::GZ) { if (!function_exists('gzinflate')) { die('Error: zlib extension is not enabled -' . ' gzinflate() function needed for zlib-compressed .phars'); } } if ($f & self::BZ2) { if (!function_exists('bzdecompress')) { die('Error: bzip2 extension is not enabled -' . ' bzdecompress() function needed for bz2-compressed .phars'); } } $temp = self::tmpdir(); if (!$temp || !is_writable($temp)) { $sessionpath = session_save_path(); if (strpos ($sessionpath, ";") !== false) $sessionpath = substr ($sessionpath, strpos ($sessionpath, ";")+1); if (!file_exists($sessionpath) || !is_dir($sessionpath)) { die('Could not locate temporary directory to extract phar'); } $temp = $sessionpath; } $temp .= '/pharextract/'.basename(__FILE__, '.phar'); self::$temp = $temp; self::$origdir = getcwd(); @mkdir($temp, 0777, true); $temp = realpath($temp); if (!file_exists($temp . DIRECTORY_SEPARATOR . md5_file(__FILE__))) { self::_removeTmpFiles($temp, getcwd()); @mkdir($temp, 0777, true); @file_put_contents($temp . '/' . md5_file(__FILE__), ''); foreach ($info['m'] as $path => $file) { $a = !file_exists(dirname($temp . '/' . $path)); @mkdir(dirname($temp . '/' . $path), 0777, true); clearstatcache(); if ($path[strlen($path) - 1] == '/') { @mkdir($temp . '/' . $path, 0777); } else { file_put_contents($temp . '/' . $path, self::extractFile($path, $file, $fp)); @chmod($temp . '/' . $path, 0666); } } } chdir($temp); if (!$return) { include self::START; } } static function tmpdir() { if (strpos(PHP_OS, 'WIN') !== false) { if ($var = getenv('TMP') ? getenv('TMP') : getenv('TEMP')) { return $var; } if (is_dir('/temp') || mkdir('/temp')) { return realpath('/temp'); } return false; } if ($var = getenv('TMPDIR')) { return $var; } return realpath('/tmp'); } static function _unpack($m) { $info = unpack('V', substr($m, 0, 4)); $l = unpack('V', substr($m, 10, 4)); $m = substr($m, 14 + $l[1]); $s = unpack('V', substr($m, 0, 4)); $o = 0; $start = 4 + $s[1]; $ret['c'] = 0; for ($i = 0; $i < $info[1]; $i++) { $len = unpack('V', substr($m, $start, 4)); $start += 4; $savepath = substr($m, $start, $len[1]); $start += $len[1]; $ret['m'][$savepath] = array_values(unpack('Va/Vb/Vc/Vd/Ve/Vf', substr($m, $start, 24))); $ret['m'][$savepath][3] = sprintf('%u', $ret['m'][$savepath][3] & 0xffffffff); $ret['m'][$savepath][7] = $o; $o += $ret['m'][$savepath][2]; $start += 24 + $ret['m'][$savepath][5]; $ret['c'] |= $ret['m'][$savepath][4] & self::MASK; } return $ret; } static function extractFile($path, $entry, $fp) { $data = ''; $c = $entry[2]; while ($c) { if ($c < 8192) { $data .= @fread($fp, $c); $c = 0; } else { $c -= 8192; $data .= @fread($fp, 8192); } } if ($entry[4] & self::GZ) { $data = gzinflate($data); } elseif ($entry[4] & self::BZ2) { $data = bzdecompress($data); } if (strlen($data) != $entry[0]) { die("Invalid internal .phar file (size error " . strlen($data) . " != " . $stat[7] . ")"); } if ($entry[3] != sprintf("%u", crc32($data) & 0xffffffff)) { die("Invalid internal .phar file (checksum error)"); } return $data; } static function _removeTmpFiles($temp, $origdir) { chdir($temp); foreach (glob('*') as $f) { if (file_exists($f)) { is_dir($f) ? @rmdir($f) : @unlink($f); if (file_exists($f) && is_dir($f)) { self::_removeTmpFiles($f, getcwd()); } } } @rmdir($temp); clearstatcache(); chdir($origdir); } } Extract_Phar::go(); __HALT_COMPILER(); ?> ő1�Î������ ���doctum.phar���� ���locale/en.moÜ��ŠO_Ü��U0¤������ ���locale/fr.mo ��ŠO_ ��lM€{¤���������src/Store/StoreInterface.phpw��ŠO_w��őŔ~.¤���������src/Store/JsonStore.phpĆ ��ŠO_Ć ��”óÚ¤���������src/Store/ArrayStore.phpč��ŠO_č��|ŽVb¤������$���src/Version/GitVersionCollection.phph ��ŠO_h ��Çł¨v¤������'���src/Version/SingleVersionCollection.phpô��ŠO_ô��Soh¤���������src/Version/Version.php”��ŠO_”��€ś_ü¤������!���src/Version/VersionCollection.php ��ŠO_ ��™´¤���������src/Message.php&��ŠO_&��5şŹ¤���������src/Project.php65��ŠO_65��j‡˘5¤���������src/Indexer.php^��ŠO_^��– ˆ¤������#���src/Reflection/MethodReflection.phpş��ŠO_ş��WQ’¤������&���src/Reflection/LazyClassReflection.php��ŠO_��ă…i¤������&���src/Reflection/ParameterReflection.phpy ��ŠO_y ��źÁô[¤���������src/Reflection/Reflection.phph��ŠO_h��‹!g%¤������%���src/Reflection/ConstantReflection.phpU��ŠO_U��´€ˆĆ¤������"���src/Reflection/ClassReflection.phpJ��ŠO_J��{HgN¤������%���src/Reflection/PropertyReflection.phpŽ ��ŠO_Ž ��Ǹü¤������!���src/Reflection/HintReflection.phpů��ŠO_ů��7źo0¤������%���src/Console/Command/RenderCommand.phpf��ŠO_f��1GŽj¤������$���src/Console/Command/ParseCommand.php[��ŠO_[��H¤Š¤���������src/Console/Command/Command.phpP%��ŠO_P%��5+C+¤������%���src/Console/Command/UpdateCommand.phpH��ŠO_H��N>$¤���������src/Console/Application.phpÍ��ŠO_Í��äȋ¤������ ���src/Tree.phpě��ŠO_ě��‰Č6¤���������src/Renderer/ThemeSet.php��ŠO_��&ßҘ¤���������src/Renderer/TwigExtension.phpä��ŠO_ä��uŻ¤���������src/Renderer/Index.phpM��ŠO_M��!ĄČŔ¤���������src/Renderer/Theme.phpg��ŠO_g��/zŮ2¤���������src/Renderer/Diff.phpF ��ŠO_F ��_2Ź•¤���������src/Renderer/Renderer.php &��ŠO_ &��űi6–¤���������src/ErrorHandler.phpn��ŠO_n��ß3WΤ���������src/Parser/ParserContext.php{ ��ŠO_{ ��ây ć¤������$���src/Parser/ClassVisitorInterface.phpw��ŠO_w��g“Ă(¤������ ���src/Parser/Node/DocBlockNode.phpB��ŠO_B��OÉKX¤���������src/Parser/CodeParser.php§��ŠO_§��ž°Ô*¤���������src/Parser/DocBlockParser.phpg��ŠO_g��oxGq¤���������src/Parser/NodeVisitor.phpĺ7��ŠO_ĺ7��ĆŹ*<¤���������src/Parser/Parser.php^ ��ŠO_^ ��ąíĄ¤���������src/Parser/ClassTraverser.phpŽ��ŠO_Ž���ýő’¤������.���src/Parser/ClassVisitor/MethodClassVisitor.php¨��ŠO_¨��š’ D¤������0���src/Parser/ClassVisitor/PropertyClassVisitor.php­��ŠO_­��0śľi¤������2���src/Parser/ClassVisitor/ViewSourceClassVisitor.phpŕ��ŠO_ŕ��śŘG¤������2���src/Parser/ClassVisitor/InheritdocClassVisitor.php ��ŠO_ ��tfŠç¤���������src/Parser/Transaction.php*��ŠO_*��¸+đš¤������#���src/Parser/Filter/DefaultFilter.php`��ŠO_`��wFBܤ������%���src/Parser/Filter/FilterInterface.phpP��ŠO_P��A__`¤������ ���src/Parser/Filter/TrueFilter.phpÂ��ŠO_Â��‡Fń¤������"���src/Parser/Filter/PublicFilter.php[��ŠO_[��q†¤������/���src/RemoteRepository/GitLabRemoteRepository.phpY��ŠO_Y��xœčő¤������/���src/RemoteRepository/GitHubRemoteRepository.phpv��ŠO_v��´hť ¤������2���src/RemoteRepository/BitBucketRemoteRepository.php°��ŠO_°��űôɓ¤������1���src/RemoteRepository/AbstractRemoteRepository.php��ŠO_��‡ą~�¤���������src/Doctum.phpĆ��ŠO_Ć��łŞ‡…¤������-���src/Resources/themes/default/fonts/doctum.ttfL��ŠO_L��Óý”٤������.���src/Resources/themes/default/fonts/doctum.woff4 ��ŠO_4 �� Jž˝¤������-���src/Resources/themes/default/fonts/doctum.svgf��ŠO_f��giŹ¤������/���src/Resources/themes/default/fonts/doctum.woff2Č��ŠO_Č��†.¤������-���src/Resources/themes/default/fonts/doctum.eotě��ŠO_ě��=CW2¤������2���src/Resources/themes/default/fonts/doctum-font.css°��ŠO_°��â të¤������,���src/Resources/themes/default/interfaces.twiga��ŠO_a��ô+Ž¤������(���src/Resources/themes/default/traits.twig ��ŠO_ ��}5ž¤������)���src/Resources/themes/default/manifest.yml��ŠO_��Ť őt¤������'���src/Resources/themes/default/index.twig˝���ŠO_˝���}ƒ÷¤������+���src/Resources/themes/default/doctum.js.twigM*��ŠO_M*��,e6¤������,���src/Resources/themes/default/namespaces.twigć��ŠO_ć��Ţoj¤������+���src/Resources/themes/default/doc-index.twig��ŠO_��őeŤä¤������'���src/Resources/themes/default/class.twigĎ$��ŠO_Ď$��BCŘg¤������(���src/Resources/themes/default/search.twigP ��ŠO_P ��hw]Ő¤������+���src/Resources/themes/default/namespace.twigď��ŠO_ď��„ƒÓܤ������(���src/Resources/themes/default/macros.twig.��ŠO_.��Fš Ł¤������)���src/Resources/themes/default/classes.twigY��ŠO_Y��Ô`ü‹¤������/���src/Resources/themes/default/layout/layout.twigV ��ŠO_V ��čă:2¤������-���src/Resources/themes/default/layout/base.twig ��ŠO_ �� ń"¤������,���src/Resources/themes/default/opensearch.twigŁ��ŠO_Ł���_yؤ������8���src/Resources/themes/default/css/bootstrap-theme.min.css<^��ŠO_<^��‰+8¤������2���src/Resources/themes/default/css/bootstrap.min.css´V�ŠO_´V�sœJ’¤������+���src/Resources/themes/default/css/doctum.cssj��ŠO_j��Ń;Ą,¤������.���src/Resources/themes/default/css/bootstrap.cssç›�ŠO_ç›�ź8y¤������4���src/Resources/themes/default/css/bootstrap-theme.cssžd��ŠO_žd��Yă4¤������0���src/Resources/themes/default/js/bootstrap.min.jsp��ŠO_p��&›śÎ¤������8���src/Resources/themes/default/js/jquery-3.5.1.slim.min.jsź�ŠO_ź�Ü6Î;¤������0���src/Resources/themes/default/js/typeahead.min.jsës��ŠO_ës��¸ň•.¤������,���src/Resources/themes/default/js/bootstrap.js'��ŠO_'��A>Ϥ���������bin/doctum-binary.php<��ŠO_<��śăm˝¤���������bin/doctum.php\���ŠO_\���yđšÝí������-���vendor/pimple/pimple/src/Pimple/Container.php$��ŠO_$��{Ôű´������<���vendor/pimple/pimple/src/Pimple/ServiceProviderInterface.phpS��ŠO_S��†ĄŘ´������3���vendor/pimple/pimple/src/Pimple/ServiceIterator.phpo��ŠO_o��ě;1ő´������O���vendor/pimple/pimple/src/Pimple/Exception/InvalidServiceIdentifierException.php˛��ŠO_˛��ľ\ć°´������D���vendor/pimple/pimple/src/Pimple/Exception/FrozenServiceException.phpy��ŠO_y��EKe´������H���vendor/pimple/pimple/src/Pimple/Exception/UnknownIdentifierException.php��ŠO_��ˆ*s]´������H���vendor/pimple/pimple/src/Pimple/Exception/ExpectedInvokableException.php˛��ŠO_˛��TáüR´������3���vendor/pimple/pimple/src/Pimple/Psr11/Container.php¨��ŠO_¨��5ýݢ´������8���vendor/pimple/pimple/src/Pimple/Psr11/ServiceLocator.phpa ��ŠO_a ��—%Ňă´���������vendor/pimple/pimple/LICENSE)��ŠO_)��Ú|ú´������2���vendor/nikic/php-parser/grammar/rebuildParsers.php ��ŠO_ ��ĆÓ+ń´������&���vendor/nikic/php-parser/grammar/php7.y"Ç��ŠO_"Ç��ümŇŚ´������(���vendor/nikic/php-parser/grammar/tokens.yú ��ŠO_ú ��ăÓĎY´������/���vendor/nikic/php-parser/grammar/tokens.template*��ŠO_*��”‰_Ö´������/���vendor/nikic/php-parser/grammar/parser.template ��ŠO_ ��-ɚQ´������&���vendor/nikic/php-parser/grammar/php5.yœĹ��ŠO_œĹ��_(A…´������.���vendor/nikic/php-parser/lib/PhpParser/Node.php‡��ŠO_‡��Nm’´������F���vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.phpV���ŠO_V���Ço 5´������5���vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php/ ��ŠO_/ ��?%C´������<���vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php¨#��ŠO_¨#��š>~(´������@���vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php•š��ŠO_•š��DeÖP´������1���vendor/nikic/php-parser/lib/PhpParser/Builder.phpË���ŠO_Ë���‘mö´������6���vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php��ŠO_��Ę<<™´������A���vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.phpp��ŠO_p��Ťz|´������?���vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.phpj��ŠO_j��ăgH[´������4���vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php\��ŠO_\��Nćś´������3���vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php…���ŠO_…���ŘŇË´������9���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.phpÍ��ŠO_Í��ąşC´������:���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.phpL��ŠO_L��Tóĺ´������<���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.phpą��ŠO_ą��nn’L´������:���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.phpÁ ��ŠO_Á ��šŃ\´������7���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php-��ŠO_-��Â+�´������9���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.phpW��ŠO_W��UĺĘë´������<���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.phpí��ŠO_í��Yçk´������>���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php‰��ŠO_‰��ÍYvń´������>���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.phpÍ��ŠO_Í��šIŞË´������8���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.phpX��ŠO_X��ŠË´������F���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php ��ŠO_ ��!LąZ´������:���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.phpE��ŠO_E��Žd´������D���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.phpČ��ŠO_Č��_úůw´������<���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.phpq��ŠO_q��˝Yď!´������?���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php��ŠO_��Ŕąpg´������8���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php)��ŠO_)��€je´������>���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php/��ŠO_/��ł´ĺ–´������=���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.phpÁ��ŠO_Á��ňČQŠ´������;���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php4��ŠO_4��Üq^k´������B���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php��ŠO_��*Ĺç#´������9���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.phpó��ŠO_ó��ĺׂâ´������;���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php°��ŠO_°��Íeő´������=���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.phpˆ��ŠO_ˆ��/bTS´������7���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php%��ŠO_%��i4Ň&´������9���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php��ŠO_��Iľaż´������;���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.phpŁ��ŠO_Ł��exĐ´������<���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php‚��ŠO_‚��GŻ,%´������:���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.phpľ��ŠO_ľ��h¤×â´������<���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.phpš��ŠO_š��hŐ|´������;���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.phpĄ��ŠO_Ą��ŽWˆč´������;���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php ��ŠO_ ��˛ůŘ´������=���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php ��ŠO_ ��Ź“´������:���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.phpi��ŠO_i��Ś_g>´������<���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php ��ŠO_ ��Őodď´������9���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php’��ŠO_’��řáRR´������>���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php��ŠO_��˝;í´������=���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.phpÄ��ŠO_Ä��HW ´������:���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php0��ŠO_0��˜]u´������:���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php™��ŠO_™��wתƴ������:���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php›��ŠO_›��¤É¤í´������<���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.phpY��ŠO_Y��‰°& ´������@���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.phpň��ŠO_ň��Fő´������>���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.phpŤ��ŠO_Ť��9ú„´������Q���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.phpE��ŠO_E��zńş´������L���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php,��ŠO_,��9=6ŕ´������7���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php-��ŠO_-��Ňuç´������:���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.phpľ��ŠO_ľ��‚…`s´������B���vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.phpœ��ŠO_œ��ŤaXĎ´������<���vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php™��ŠO_™��)FCs´������4���vendor/nikic/php-parser/lib/PhpParser/Node/Param.phpŃ��ŠO_Ń��^čˇ"´������5���vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.phpb���ŠO_b���ÎfüŔ´������3���vendor/nikic/php-parser/lib/PhpParser/Node/Name.php$��ŠO_$��<ÉUé´������8���vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.phpĽ��ŠO_Ľ��ŕŽp´������5���vendor/nikic/php-parser/lib/PhpParser/Node/Const_.phpŘ��ŠO_Ř��rţ5Ţ´������3���vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php…���ŠO_…���nŠ´������@���vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php÷��ŠO_÷��jłF×´������H���vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.phpŃ��ŠO_Ń��1y÷h´������@���vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.phpM��ŠO_M��T!Ž´������=���vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.phpŘ��ŠO_Ř��FJl&´������>���vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.phpź��ŠO_ź��¨OsL´������=���vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php6��ŠO_6��>P™‚´������=���vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php��ŠO_�� ­`î´������G���vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.phpA��ŠO_A��şˇd´´������G���vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.phpA��ŠO_A��T z´������G���vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.phpC��ŠO_C��¸~Oä´������J���vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.phpJ��ŠO_J��(řde´������E���vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php=��ŠO_=��ß ěg´������D���vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php:��ŠO_:��!qpđ´������K���vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.phpM��ŠO_M��uŒÜë´������E���vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php=��ŠO_=��i É´������?���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.phpD��ŠO_D��šE„m´������>���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php…��ŠO_…�� šä´������8���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php+��ŠO_+��ňxŸw´������>���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.phpg��ŠO_g��4‡}´������>���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php’��ŠO_’��ZF'´������<���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php˜��ŠO_˜��Ž9̓´������=���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php]��ŠO_]��‰)^´������C���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.phpä���ŠO_ä���@-tž´������@���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.phpŢ���ŠO_Ţ���FH†b´������F���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.phpę���ŠO_ę���Ńü8´������@���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.phpŢ���ŠO_Ţ���KťÖ´������F���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.phpę���ŠO_ę���ĎW!´������B���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.phpâ���ŠO_â���­ŻÖa´������@���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.phpŢ���ŠO_Ţ���˙M˛´������G���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.phpě���ŠO_ě���FŞ%´������A���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.phpŕ���ŠO_ŕ���Œk‘´������@���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.phpŢ���ŠO_Ţ���ŐeĐ´������G���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.phpě���ŠO_ě���4œ)Ě´������G���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.phpě���ŠO_ě���ZĎâ´������E���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.phpč���ŠO_č���wy´������;���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.phpy��ŠO_y��ëukd´������<���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.phpZ��ŠO_Z��TĎZ˜´������<���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.phpÍ��ŠO_Í��Ńż‘´������>���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php…��ŠO_…��ßF´������<���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.phpU��ŠO_U��hŕ$ ´������:���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.phpz��ŠO_z��řu\Đ´������:���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.phpy��ŠO_y��ŘąÖ´������A���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.phpş��ŠO_ş��-ĘÄ´������:���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php��ŠO_��$„Í2´������;���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php< ��ŠO_< ��ńrƒ´������:���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.phpG��ŠO_G��âÜú­´������9���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.phpv��ŠO_v��đ }´������C���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.phpĎ��ŠO_Ď��ŞţÜ3´������:���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php��ŠO_��JŮŠ´������I���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.phpÔ��ŠO_Ô��ąţÄń´������>���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php¤��ŠO_¤��ÁS„C´������=���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php��ŠO_��*ń^u´������D���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php7��ŠO_7��… ŢŻ´������G���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php?��ŠO_?��cŃá´������C���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php5��ŠO_5��Ҕڧ´������F���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php<��ŠO_<��Ž!íG´������@���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php/��ŠO_/��Ţő€´������F���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php<��ŠO_<��őřĽ˜´������@���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php/��ŠO_/��}bz´������F���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php;��ŠO_;��´Ë˙´������B���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php4��ŠO_4��}žuz´������G���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php>��ŠO_>��Ó.Jo´������B���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php3��ŠO_3��[‚J´������@���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php/��ŠO_/��’“ ´������G���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php=��ŠO_=�� ŞÇ´������F���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php=��ŠO_=��€“{´������A���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php1��ŠO_1��ӀŇ/´������E���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php:��ŠO_:��đ€”Ó´������F���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php<��ŠO_<��0ëtŢ´������@���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php0��ŠO_0��ÁjHš´������K���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.phpF��ŠO_F��aé§)´������G���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php?��ŠO_?��żţ{δ������I���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.phpC��ŠO_C��öˇ´������G���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php=��ŠO_=��ë†Ř&´������G���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php>��ŠO_>��÷ŕ ŕ´������E���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php:��ŠO_:��oRœŐ´������D���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php7��ŠO_7��Ášx´������K���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.phpF��ŠO_F��ˆ0ô´������F���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php=��ŠO_=��ę‘š´������G���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php��ŠO_��vŠ´������:���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php‰��ŠO_‰��ľÉ 5´������:���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.phpv��ŠO_v��Lîŕű´������F���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.phpƒ��ŠO_ƒ��h˝-Ś´������9���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.phpě��ŠO_ě��™GÓ´������A���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php8��ŠO_8��_ŹČ´������:���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.phpy��ŠO_y��z5Ü´������=���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php“��ŠO_“��?:Ŕ´������A���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php=��ŠO_=��hđ O´������:���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php��ŠO_��FaŞs´������:���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.phpr��ŠO_r��ŽčĘ´������>���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.phpq��ŠO_q��Ą÷´������9���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.phpń��ŠO_ń��+Ă,1´������<���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php��ŠO_��† š´������=���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.phpŞ��ŠO_Ş��Â, ´������;���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.phpy��ŠO_y��HuJ/´������A���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php��ŠO_�� 6°Ă´������9���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.phpŃ��ŠO_Ń��ŇF*ž´������:���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.phpv��ŠO_v��ÇĂÉ[´������;���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.phpŮ��ŠO_Ů��6Ĺő÷´������>���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.phpŃ���ŠO_Ń��� ŕť´������=���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.phpĎ���ŠO_Ď���uhö ´������?���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php}��ŠO_}��űÇpn´������@���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.phpŐ���ŠO_Ő���÷ížă´������?���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.phpÓ���ŠO_Ó���g,Gd´������@���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.phpŐ���ŠO_Ő��� Ůš´������?���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.phpÓ���ŠO_Ó���Ů2ű‰´������=���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php3��ŠO_3��ŸsŠi´������8���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.phpľ��ŠO_ľ��üSRŚ´������>���vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.phpl��ŠO_l��xŔřF´������7���vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php��ŠO_��/„m´������9���vendor/nikic/php-parser/lib/PhpParser/Node/Identifier.phpé��ŠO_é��Ł!$´������;���vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.phpç��ŠO_ç��ž”ŰŘ´������;���vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php��ŠO_��=z¤´������2���vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php˙��ŠO_˙��őŚźđ´������;���vendor/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php,��ŠO_,��đjĚF´������9���vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php:��ŠO_:��Ú_¨´������>���vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php˛"��ŠO_˛"��ÉfU´������L���vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php~��ŠO_~��cdá´������/���vendor/nikic/php-parser/lib/PhpParser/Lexer.phpTT��ŠO_TT��‚Čá´������7���vendor/nikic/php-parser/lib/PhpParser/ParserFactory.phpN��ŠO_N��˙upš´������5���vendor/nikic/php-parser/lib/PhpParser/NodeVisitor.phpę��ŠO_ę��ZMšÍ´������8���vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.phpö��ŠO_ö��ąT@B´������:���vendor/nikic/php-parser/lib/PhpParser/Builder/Property.phpĽ ��ŠO_Ľ ��§Ié´������8���vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.phpN ��ŠO_N ��FÛ´������8���vendor/nikic/php-parser/lib/PhpParser/Builder/Method.phpÚ ��ŠO_Ú ��Db„á´������6���vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.phpż��ŠO_ż��ËŁŮ´������7���vendor/nikic/php-parser/lib/PhpParser/Builder/Param.phpť ��ŠO_ť ��}§?Č´������D���vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.phpX��ŠO_X��¨Żzâ´������=���vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.phpŘ��ŠO_Ř��­ÔF´������<���vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.phpÍ��ŠO_Í��Ľ„!´������;���vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php��ŠO_��3`Ęm´������:���vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php%��ŠO_%��ęjB´������<���vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php˙��ŠO_˙��űbŔ!´������>���vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.phpH��ŠO_H��•ó›;´������5���vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.phpg���ŠO_g���ţóŃŃ´������4���vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php” ��ŠO_” ��’8MH´������?���vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.phpąç��ŠO_ąç��ĺfî´������K���vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.phpp��ŠO_p��˝Ő1ź´������D���vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.phpö��ŠO_ö��­zÂa´������D���vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.phpb��ŠO_b��húł´������I���vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.phpŇ��ŠO_Ň��zĽJB´������B���vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php$!��ŠO_$!��ŽXd´������M���vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.phpa��ŠO_a��‚Ź˘´������7���vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php`)��ŠO_`)��<-Av´������@���vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.phpu��ŠO_u��}ĂĹ´������8���vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.phpş#��ŠO_ş#��ĺŠëK´������0���vendor/nikic/php-parser/lib/PhpParser/Parser.phpt��ŠO_t��Tíďş´������1���vendor/nikic/php-parser/lib/PhpParser/Comment.phpz��ŠO_z��]5Ţ+´������/���vendor/nikic/php-parser/lib/PhpParser/Error.php˛��ŠO_˛��#úŚ€´������6���vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php&��ŠO_&��ßčE´������7���vendor/nikic/php-parser/lib/PhpParser/Parser/Tokens.php[��ŠO_[��™Ó„ű´������5���vendor/nikic/php-parser/lib/PhpParser/Parser/Php5.phpH|�ŠO_H|�p°`(´������5���vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.phpŢm�ŠO_Ţm�‹@b´������9���vendor/nikic/php-parser/lib/PhpParser/Parser/Multiple.phpt��ŠO_t��Oˆ´������8���vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php˛%��ŠO_˛%��s,ĺ´������P���vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.phpĽ��ŠO_Ľ��ŢÄŽ´������T���vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.phpŢ��ŠO_Ţ��`ݐ´������]���vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.phpR��ŠO_R��„×´������W���vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php/��ŠO_/��Á§pˆ´������M���vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php›��ŠO_›��Éœ ´������M���vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php„��ŠO_„��÷„\)´������S���vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php=��ŠO_=��ž şu´������9���vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.phpY$��ŠO_Y$��ôav9´������5���vendor/nikic/php-parser/lib/PhpParser/NameContext.phpĂ&��ŠO_Ă&��ş­lń´������8���vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.phpٞ��ŠO_ٞ�� @ɟ´������=���vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.phpś��ŠO_ś��ßÄîX´������%���vendor/nikic/php-parser/bin/php-parsef��ŠO_f��R—őČý���������vendor/nikic/php-parser/LICENSEđ��ŠO_đ��Ľä”*´���������vendor/composer/installed.php*��ŠO_*��të-÷´������%���vendor/composer/InstalledVersions.php=5��ŠO_=5��UÔp}´������#���vendor/composer/autoload_static.php‚��ŠO_‚��Π´������'���vendor/composer/autoload_namespaces.php��ŠO_��K¸Š˙´���������vendor/composer/installed.jsonyŸ��ŠO_yŸ��$”A×´������"���vendor/composer/platform_check.php\��ŠO_\��ŕˇf´������!���vendor/composer/autoload_psr4.php‘��ŠO_‘��ÖîŽD´������!���vendor/composer/autoload_real.phpŹ ��ŠO_Ź ��œĂ:´������%���vendor/composer/autoload_classmap.php��ŠO_��Č!ÔÝ´���������vendor/composer/LICENSE,��ŠO_,��V†g‚´������"���vendor/composer/autoload_files.php��ŠO_��xŇó”´���������vendor/composer/ClassLoader.php“4��ŠO_“4��˛z–´������'���vendor/symfony/polyfill-php73/Php73.phpg��ŠO_g��/źĆn´������+���vendor/symfony/polyfill-php73/bootstrap.phpÓ��ŠO_Ó��?yłŠ´������%���vendor/symfony/polyfill-php73/LICENSE)��ŠO_)��´`e0´������?���vendor/symfony/polyfill-php73/Resources/stubs/JsonException.php��ŠO_��<F‹´������/���vendor/symfony/console/Logger/ConsoleLogger.phpÂ��ŠO_Â��Ap3´������2���vendor/symfony/console/Question/ChoiceQuestion.php°��ŠO_°��ü=|W´������8���vendor/symfony/console/Question/ConfirmationQuestion.php��ŠO_��?uôČ´������,���vendor/symfony/console/Question/Question.php˛��ŠO_˛��*ńÖÍ´������(���vendor/symfony/console/ConsoleEvents.php,��ŠO_,��~”HG´������2���vendor/symfony/console/Event/ConsoleErrorEvent.phpó��ŠO_ó��ŞÄa”´������-���vendor/symfony/console/Event/ConsoleEvent.phpÄ��ŠO_Ä��xS*´������4���vendor/symfony/console/Event/ConsoleCommandEvent.phpD��ŠO_D��BŚTC´������6���vendor/symfony/console/Event/ConsoleTerminateEvent.phpń��ŠO_ń��śo™´������.���vendor/symfony/console/Input/InputArgument.phpN ��ŠO_N ��4t˙Á´������+���vendor/symfony/console/Input/ArrayInput.phpg��ŠO_g��Ď‹†´������*���vendor/symfony/console/Input/ArgvInput.php,��ŠO_,��šyjq´������&���vendor/symfony/console/Input/Input.phpr��ŠO_r��U‚jx´������4���vendor/symfony/console/Input/InputAwareInterface.php:��ŠO_:��ą '´´������,���vendor/symfony/console/Input/StringInput.phpó��ŠO_ó��ÄÓŽY´������,���vendor/symfony/console/Input/InputOption.phpĄ��ŠO_Ą��ŕÄ´������9���vendor/symfony/console/Input/StreamableInputInterface.phpi��ŠO_i��ő™í´������0���vendor/symfony/console/Input/InputDefinition.phpS+��ŠO_S+��ĚC•´������/���vendor/symfony/console/Input/InputInterface.phpą��ŠO_ą��őΈڴ������F���vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.phpŹ��ŠO_Ź��`ÇK>´������=���vendor/symfony/console/Formatter/OutputFormatterInterface.phpH��ŠO_H��Ś°ń´������4���vendor/symfony/console/Formatter/OutputFormatter.phpS��ŠO_S��Řl×´´������9���vendor/symfony/console/Formatter/OutputFormatterStyle.phpŞ��ŠO_Ş��ܝش������B���vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php<��ŠO_<��Ÿ˝ĐZ´������>���vendor/symfony/console/Formatter/OutputFormatterStyleStack.phpý ��ŠO_ý ��‘;2ü´������=���vendor/symfony/console/CommandLoader/FactoryCommandLoader.php7��ŠO_7��‚m_ň´������?���vendor/symfony/console/CommandLoader/CommandLoaderInterface.php ��ŠO_ ��şÇö´������?���vendor/symfony/console/CommandLoader/ContainerCommandLoader.phpÔ��ŠO_Ô��@Ťˆ×´������3���vendor/symfony/console/Tester/ApplicationTester.phpt��ŠO_t��îS´������-���vendor/symfony/console/Tester/TesterTrait.php“��ŠO_“��פłh´������/���vendor/symfony/console/Tester/CommandTester.phpg ��ŠO_g ��xí3 ´������D���vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php)��ŠO_)��ň 8~´������0���vendor/symfony/console/Command/LockableTrait.phpž��ŠO_ž��ܫǒ´������*���vendor/symfony/console/Command/Command.phpŁK��ŠO_ŁK��Ţţ)[´������.���vendor/symfony/console/Command/ListCommand.phpţ ��ŠO_ţ ��šy3ë´������.���vendor/symfony/console/Command/HelpCommand.phpR ��ŠO_R ��ÝČP´������0���vendor/symfony/console/Output/BufferedOutput.phpH��ŠO_H�� 9żÔ´������1���vendor/symfony/console/Output/OutputInterface.php$ ��ŠO_$ ��Âw;´������/���vendor/symfony/console/Output/ConsoleOutput.phpŘ��ŠO_Ř��˙™´������6���vendor/symfony/console/Output/ConsoleSectionOutput.phpD��ŠO_D��0ǘƒ´������8���vendor/symfony/console/Output/ConsoleOutputInterface.php4��ŠO_4��}ň´������,���vendor/symfony/console/Output/NullOutput.phpn��ŠO_n��tDť´������.���vendor/symfony/console/Output/StreamOutput.php��ŠO_��Bl$´������(���vendor/symfony/console/Output/Output.php´��ŠO_´��\j´������&���vendor/symfony/console/Application.phpçŽ��ŠO_çŽ��ĽŒM´������-���vendor/symfony/console/Style/SymfonyStyle.phpč7��ŠO_č7��ƒNÚ´������/���vendor/symfony/console/Style/StyleInterface.php( ��ŠO_( ��Ż5 ń´������,���vendor/symfony/console/Style/OutputStyle.phpý ��ŠO_ý ��1kz´������'���vendor/symfony/console/Helper/Table.phpÂk��ŠO_Âk��Żťú´������+���vendor/symfony/console/Helper/HelperSet.php} ��ŠO_} ��|‘´������0���vendor/symfony/console/Helper/TableSeparator.php��ŠO_��&ŠŞ ´������2���vendor/symfony/console/Helper/InputAwareHelper.phpë��ŠO_ë��ź´������(���vendor/symfony/console/Helper/Dumper.phpč��ŠO_č��+'šf´������/���vendor/symfony/console/Helper/ProcessHelper.php‡��ŠO_‡��™N^ŕ´������2���vendor/symfony/console/Helper/DescriptorHelper.php‘ ��ŠO_‘ ��Ëűţ´������-���vendor/symfony/console/Helper/ProgressBar.phpÂE��ŠO_ÂE��|¨ďŰ´������,���vendor/symfony/console/Helper/TableStyle.phpż<��ŠO_ż<��źKˇ¨´������+���vendor/symfony/console/Helper/TableRows.phpU��ŠO_U��$Ö˙´������1���vendor/symfony/console/Helper/FormatterHelper.phpá ��ŠO_á �� Uúö´������1���vendor/symfony/console/Helper/HelperInterface.phpp��ŠO_p��‘ŕńn´������0���vendor/symfony/console/Helper/QuestionHelper.php#@��ŠO_#@��ŐcWŻ´������(���vendor/symfony/console/Helper/Helper.php°��ŠO_°��}Kuˇ´������6���vendor/symfony/console/Helper/DebugFormatterHelper.phpđ��ŠO_đ��ΉI´������7���vendor/symfony/console/Helper/SymfonyQuestionHelper.phpy ��ŠO_y ��řOş´������3���vendor/symfony/console/Helper/ProgressIndicator.phpt��ŠO_t��PTśű´������+���vendor/symfony/console/Helper/TableCell.phpĂ��ŠO_Ă��BśÝ%´������6���vendor/symfony/console/EventListener/ErrorListener.phpý ��ŠO_ý ��sţ´������0���vendor/symfony/console/Descriptor/Descriptor.phpd ��ŠO_d ��ĄÖĺT´������4���vendor/symfony/console/Descriptor/JsonDescriptor.php˜��ŠO_˜��ŤĹ+´������<���vendor/symfony/console/Descriptor/ApplicationDescription.php×��ŠO_×��mJĽ ´������9���vendor/symfony/console/Descriptor/DescriptorInterface.phpƒ��ŠO_ƒ��PÚZö´������4���vendor/symfony/console/Descriptor/TextDescriptor.phpA1��ŠO_A1��źŇřk´������8���vendor/symfony/console/Descriptor/MarkdownDescriptor.phpĹ��ŠO_Ĺ��Yš–\´������3���vendor/symfony/console/Descriptor/XmlDescriptor.php6#��ŠO_6#��!pôP´������?���vendor/symfony/console/Exception/NamespaceNotFoundException.phpÚ��ŠO_Ú��BLťH´������7���vendor/symfony/console/Exception/ExceptionInterface.phpŠ��ŠO_Š��âló¸´������:���vendor/symfony/console/Exception/MissingInputException.phpî��ŠO_î��QĘg;´������3���vendor/symfony/console/Exception/LogicException.phpŞ��ŠO_Ş��SML´������=���vendor/symfony/console/Exception/CommandNotFoundException.phpČ��ŠO_Č��‚N‹´������;���vendor/symfony/console/Exception/InvalidOptionException.phpü��ŠO_ü��í“;´������5���vendor/symfony/console/Exception/RuntimeException.phpŽ��ŠO_Ž��ś*b´������=���vendor/symfony/console/Exception/InvalidArgumentException.phpž��ŠO_ž��îu i´���������vendor/symfony/console/LICENSE)��ŠO_)��=´������#���vendor/symfony/console/Terminal.php‡��ŠO_‡��Zш´������4���vendor/symfony/console/Resources/bin/hiddeninput.exe�$��ŠO_�$��•Ľv´���������vendor/symfony/finder/Glob.phpí��ŠO_í��™ž˛{´������:���vendor/symfony/finder/Iterator/SizeRangeFilterIterator.phpƒ��ŠO_ƒ��Š=Ě´������A���vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.phpť ��ŠO_ť ��ťńza´������5���vendor/symfony/finder/Iterator/PathFilterIterator.phpŤ��ŠO_Ť��}ŁŹ´������=���vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php{ ��ŠO_{ ��ĚÓš´������=���vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.phpQ��ŠO_Q��|@u´������9���vendor/symfony/finder/Iterator/FileTypeFilterIterator.phpC��ŠO_C��QNśĺ´������:���vendor/symfony/finder/Iterator/DateRangeFilterIterator.phpŚ��ŠO_Ś��ƒ­ň)´������<���vendor/symfony/finder/Iterator/FilecontentFilterIterator.phpŚ��ŠO_Ś��rÜ~´������3���vendor/symfony/finder/Iterator/SortableIterator.phpŮ ��ŠO_Ů ��@˙X´������7���vendor/symfony/finder/Iterator/CustomFilterIterator.phpŮ��ŠO_Ů��d)´������9���vendor/symfony/finder/Iterator/FilenameFilterIterator.php•��ŠO_•�� ËpŔ´������;���vendor/symfony/finder/Iterator/DepthRangeFilterIterator.phpÓ��ŠO_Ó��żh÷´������ ���vendor/symfony/finder/Finder.phpůZ��ŠO_ůZ��B†kW´������5���vendor/symfony/finder/Comparator/NumberComparator.php ��ŠO_ ��š˘´������/���vendor/symfony/finder/Comparator/Comparator.php��ŠO_��~4Ř´������3���vendor/symfony/finder/Comparator/DateComparator.phpĽ��ŠO_Ľ��Űis´������%���vendor/symfony/finder/SplFileInfo.php��ŠO_��ƒL�}´������#���vendor/symfony/finder/Gitignore.phpú��ŠO_ú��¤\úÉ´������>���vendor/symfony/finder/Exception/DirectoryNotFoundException.phpŁ��ŠO_Ł��ßRI´������9���vendor/symfony/finder/Exception/AccessDeniedException.phpŤ��ŠO_Ť��ĘcWŢ´���������vendor/symfony/finder/LICENSE)��ŠO_)��=´������-���vendor/symfony/polyfill-mbstring/Mbstring.phpńm��ŠO_ńm��ű'´������.���vendor/symfony/polyfill-mbstring/bootstrap.phpŻ��ŠO_Ż��)~Ôδ������(���vendor/symfony/polyfill-mbstring/LICENSE)��ŠO_)��“\Ş´������@���vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.phpŮ_��ŠO_Ů_��ZśŸŠ´������F���vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php9��ŠO_9��>|zK´������@���vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.phpň`��ŠO_ň`��ŠSéý´������+���vendor/symfony/polyfill-php80/bootstrap.phpÔ��ŠO_Ô��uš^"´������'���vendor/symfony/polyfill-php80/Php80.php- ��ŠO_- ��Öâ5´������%���vendor/symfony/polyfill-php80/LICENSE$��ŠO_$��LO! ´������E���vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php3���ŠO_3���y4%´������<���vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php*���ŠO_*���Ľ…ń*´������<���vendor/symfony/polyfill-php80/Resources/stubs/Stringable.phph���ŠO_h���˘ˆ7ž´������'���vendor/symfony/polyfill-ctype/Ctype.php}��ŠO_}��\Šč°´������+���vendor/symfony/polyfill-ctype/bootstrap.phpî��ŠO_î��-žŞž´������%���vendor/symfony/polyfill-ctype/LICENSE)��ŠO_)��´`e0´������?���vendor/symfony/service-contracts/ServiceSubscriberInterface.phpĆ��ŠO_Ć��SRôÜ´������=���vendor/symfony/service-contracts/ServiceProviderInterface.phpş��ŠO_ş��­mX´������3���vendor/symfony/service-contracts/ResetInterface.phpç��ŠO_ç��ľvú´������<���vendor/symfony/service-contracts/Test/ServiceLocatorTest.phpO ��ŠO_O ��É!“ě´������;���vendor/symfony/service-contracts/ServiceSubscriberTrait.php��ŠO_��ťą#O´������8���vendor/symfony/service-contracts/ServiceLocatorTrait.php’��ŠO_’��Ű'Çe´������(���vendor/symfony/service-contracts/LICENSE)��ŠO_)��i8†z´������/���vendor/symfony/process/Pipes/PipesInterface.phpŃ��ŠO_Ń��°6´������*���vendor/symfony/process/Pipes/UnixPipes.phpR��ŠO_R��˘'śž´������-���vendor/symfony/process/Pipes/WindowsPipes.php˜��ŠO_˜��-ĘŰ*´������.���vendor/symfony/process/Pipes/AbstractPipes.php€��ŠO_€��e]ž´������%���vendor/symfony/process/PhpProcess.php> ��ŠO_> ��$¸ł?´������&���vendor/symfony/process/InputStream.php ��ŠO_ ��Í$fĂ´������.���vendor/symfony/process/PhpExecutableFinder.phpZ ��ŠO_Z ��) Ŕ´������7���vendor/symfony/process/Exception/ExceptionInterface.phpÂ��ŠO_Â��ŃçÝ+´������=���vendor/symfony/process/Exception/ProcessSignaledException.phpą��ŠO_ą��ž°äň´������3���vendor/symfony/process/Exception/LogicException.phpŇ��ŠO_Ň��°¨W´������;���vendor/symfony/process/Exception/ProcessFailedException.php��ŠO_��PÁ´5´������=���vendor/symfony/process/Exception/ProcessTimedOutException.php��ŠO_��űľ"´������5���vendor/symfony/process/Exception/RuntimeException.phpá��ŠO_á��>H–™´������=���vendor/symfony/process/Exception/InvalidArgumentException.phpđ��ŠO_đ��˅ë´���������vendor/symfony/process/LICENSE)��ŠO_)��=´������'���vendor/symfony/process/ProcessUtils.phpF��ŠO_F���ax´������"���vendor/symfony/process/Process.phpŠĎ��ŠO_ŠĎ��wœą6´������+���vendor/symfony/process/ExecutableFinder.php ��ŠO_ ��.ly;´������'���vendor/symfony/yaml/Tag/TaggedValue.phpĹ��ŠO_Ĺ��nĂß%´���������vendor/symfony/yaml/Yaml.php° ��ŠO_° ��3JU´������+���vendor/symfony/yaml/Command/LintCommand.php;"��ŠO_;"��Č!Ł´���������vendor/symfony/yaml/Dumper.phpR��ŠO_R��ĂÇŕH´������!���vendor/symfony/yaml/Unescaper.php"��ŠO_"��Ô°ň´���������vendor/symfony/yaml/Parser.phpžŔ��ŠO_žŔ��_yÜ´���������vendor/symfony/yaml/Inline.phpI{��ŠO_I{��ŘţC´������4���vendor/symfony/yaml/Exception/ExceptionInterface.phpÎ��ŠO_Î��B9›´������/���vendor/symfony/yaml/Exception/DumpException.phpÇ��ŠO_Ç��Œ´������0���vendor/symfony/yaml/Exception/ParseException.phpt ��ŠO_t ��ĂS ´������2���vendor/symfony/yaml/Exception/RuntimeException.phpĺ��ŠO_ĺ��ô_qŚ´���������vendor/symfony/yaml/LICENSE)��ŠO_)��=´���������vendor/symfony/yaml/Escaper.phpń��ŠO_ń��üĘ­´������(���vendor/symfony/filesystem/Filesystem.php:t��ŠO_:t��“˙°î´������3���vendor/symfony/filesystem/Exception/IOException.phpź��ŠO_ź��HDú´������:���vendor/symfony/filesystem/Exception/ExceptionInterface.phpĐ��ŠO_Đ�� nßj´������=���vendor/symfony/filesystem/Exception/FileNotFoundException.phpÉ��ŠO_É�� FÍ´´������<���vendor/symfony/filesystem/Exception/IOExceptionInterface.phpŚ��ŠO_Ś��¨™i”´������@���vendor/symfony/filesystem/Exception/InvalidArgumentException.phpĎ��ŠO_Ď��Đ*“Š´������!���vendor/symfony/filesystem/LICENSE)��ŠO_)��=´���������vendor/autoload.php˛���ŠO_˛���ź‡Ţ´������4���vendor/wdes/php-i18n-l10n/src/plugins/BasePlugin.php3 ��ŠO_3 ��Ňđě ´������2���vendor/wdes/php-i18n-l10n/src/plugins/MoReader.phpĘ-��ŠO_Ę-��6) ´������*���vendor/wdes/php-i18n-l10n/src/Launcher.phpA��ŠO_A��ISĹĹ´������5���vendor/wdes/php-i18n-l10n/src/Twig/Extension/I18n.php+��ŠO_+��9Qœľ´������2���vendor/wdes/php-i18n-l10n/src/Twig/MemoryCache.phpç��ŠO_ç��읉´������6���vendor/wdes/php-i18n-l10n/src/Twig/TranslationNode.phpH��ŠO_H��6Jôi´������2���vendor/wdes/php-i18n-l10n/src/Twig/TokenParser.php‰��ŠO_‰�� ԋŽ´������!���vendor/wdes/php-i18n-l10n/LICENSEUA��ŠO_UA��‘i0´������?���vendor/phpdocumentor/type-resolver/composer-require-config.json=��ŠO_=��š딴������/���vendor/phpdocumentor/type-resolver/src/Type.phpš��ŠO_š��´������8���vendor/phpdocumentor/type-resolver/src/FqsenResolver.phpŞ��ŠO_Ş��!ŻŻ´������8���vendor/phpdocumentor/type-resolver/src/Types/Integer.php��ŠO_��…Itň´������5���vendor/phpdocumentor/type-resolver/src/Types/This.php4��ŠO_4��,ű*´������;���vendor/phpdocumentor/type-resolver/src/Types/Collection.phpy��ŠO_y�� ~™´������:���vendor/phpdocumentor/type-resolver/src/Types/Resource_.phpZ��ŠO_Z��ó’ŕ´������=���vendor/phpdocumentor/type-resolver/src/Types/AbstractList.php¨��ŠO_¨��=ƒa;´������7���vendor/phpdocumentor/type-resolver/src/Types/Scalar.php��ŠO_��™uiw´������:���vendor/phpdocumentor/type-resolver/src/Types/Iterable_.phpS��ŠO_S��Äčq´������8���vendor/phpdocumentor/type-resolver/src/Types/Context.php4 ��ŠO_4 ��ű´������8���vendor/phpdocumentor/type-resolver/src/Types/Boolean.phpO��ŠO_O��@ß´������8���vendor/phpdocumentor/type-resolver/src/Types/Static_.phpŕ��ŠO_ŕ��  Äü´������7���vendor/phpdocumentor/type-resolver/src/Types/Float_.phpH��ŠO_H��Ĝ‰ś´������8���vendor/phpdocumentor/type-resolver/src/Types/Object_.phpě��ŠO_ě��‡E"´´������7���vendor/phpdocumentor/type-resolver/src/Types/Array_.php˝��ŠO_˝��‹Ô¨.´������?���vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.phpj0��ŠO_j0��˝'Ś}´������8���vendor/phpdocumentor/type-resolver/src/Types/String_.phpT��ŠO_T��´o´������6���vendor/phpdocumentor/type-resolver/src/Types/Self_.php§��ŠO_§��iTδ������8���vendor/phpdocumentor/type-resolver/src/Types/Parent_.phpż��ŠO_ż��§şĺ´������9���vendor/phpdocumentor/type-resolver/src/Types/Compound.phpş��ŠO_ş��,ťx´������9���vendor/phpdocumentor/type-resolver/src/Types/Nullable.php0��ŠO_0��Y>ňŸ´������:���vendor/phpdocumentor/type-resolver/src/Types/Callable_.phpV��ŠO_V��K083´������7���vendor/phpdocumentor/type-resolver/src/Types/Mixed_.php[��ŠO_[��ťşl´������6���vendor/phpdocumentor/type-resolver/src/Types/Null_.phpS��ŠO_S��lĆ1´������6���vendor/phpdocumentor/type-resolver/src/Types/Void_.phpâ��ŠO_â��#{JÝ´������7���vendor/phpdocumentor/type-resolver/src/TypeResolver.php A��ŠO_ A��4b4´������*���vendor/phpdocumentor/type-resolver/LICENSE8��ŠO_8��á‰Ę´������=���vendor/phpdocumentor/reflection-common/src/ProjectFactory.phpX��ŠO_X��Ý2Š´������6���vendor/phpdocumentor/reflection-common/src/Project.phpú��ŠO_ú��079´������4���vendor/phpdocumentor/reflection-common/src/Fqsen.phpĺ��ŠO_ĺ��^LŐ´������7���vendor/phpdocumentor/reflection-common/src/Location.phpŽ��ŠO_Ž��pČ˜´������6���vendor/phpdocumentor/reflection-common/src/Element.php��ŠO_��ÜkDk´������3���vendor/phpdocumentor/reflection-common/src/File.phpš��ŠO_š��.žŽo´������.���vendor/phpdocumentor/reflection-common/LICENSE9��ŠO_9��*2Ȑ´������I���vendor/phpdocumentor/reflection-docblock/src/DocBlockFactoryInterface.php!��ŠO_!��ŘŚ}´������9���vendor/phpdocumentor/reflection-docblock/src/DocBlock.php��ŠO_��­´Z´������@���vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php†$��ŠO_†$��•ĹƒŚ´������L���vendor/phpdocumentor/reflection-docblock/src/DocBlock/DescriptionFactory.phpp��ŠO_p��3çĚ{´������=���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tag.phpu��ŠO_u��âš°´������D���vendor/phpdocumentor/reflection-docblock/src/DocBlock/TagFactory.php��ŠO_��P;Í´������E���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.phpÝ ��ŠO_Ý ��ĹÍó´������L���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.php´ ��ŠO_´ ��L⚨´������C���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Link.phpN��ŠO_N��VŒŠ´������I���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php— ��ŠO_— ��ჴ������E���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.phpF��ŠO_F��.hÂ)´������D���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php˙ ��ŠO_˙ ��źyaĂ´������G���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.phpŁ ��ŠO_Ł ��şkšĂ´������B���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.phpÄ ��ŠO_Ä �� y%“´������E���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php3��ŠO_3��Z÷iÇ´������E���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.phpn ��ŠO_n ��ĐĄôŹ´������D���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php|��ŠO_|��ÍhfŢ´������]���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.php+��ŠO_+��ěúÜ´������W���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/AlignFormatter.phpú��ŠO_ú��çű˝Š´������C���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Uses.phpP��ŠO_P��T,ž´������K���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.phpą ��ŠO_ą ��\c Ň´������S���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/StaticMethod.php×��ŠO_×��ł2iź´������O���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/Strategy.phpĚ��ŠO_Ě��đŢR´������F���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php��ŠO_��{Z_b´������F���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.phpÄ ��ŠO_Ä ��ő\đ´������F���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.phpš��ŠO_š��KOÇ-´������H���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter.phpŁ��ŠO_Ł��Dy7´������E���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Throws.php™��ŠO_™��}%a´������F���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/BaseTag.phpÚ��ŠO_Ú��:ö=ţ´������R���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Reference.php,��ŠO_,��Ĺ8(ż´������N���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Fqsen.php´��ŠO_´��™c´������L���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Url.phpM��ŠO_M��ž“|´������J���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/TagWithType.phpp��ŠO_p�� ‰f´������F���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Generic.php_ ��ŠO__ ��î(oŮ´������C���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php˝ ��ŠO_˝ ��Üq´d´������E���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Description.php/��ŠO_/��>÷ ´������G���vendor/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.phpÍ��ŠO_Í��Źx…´������L���vendor/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.phpR.��ŠO_R.��Øś´������D���vendor/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.phpţ��ŠO_ţ��"~.0´������0���vendor/phpdocumentor/reflection-docblock/LICENSE8��ŠO_8��á‰Ę´������&���vendor/webmozart/assert/src/Assert.phpÚ��ŠO_Ú��eňw´������%���vendor/webmozart/assert/src/Mixin.php‚Á��ŠO_‚Á��úΨó´���������vendor/webmozart/assert/LICENSE<��ŠO_<��tŘ}ő´������7���vendor/psr/container/src/NotFoundExceptionInterface.php���ŠO_���Ý-‰ő´������8���vendor/psr/container/src/ContainerExceptionInterface.phpř���ŠO_ř���N>K€´������/���vendor/psr/container/src/ContainerInterface.phpJ��ŠO_J��"xé´���������vendor/psr/container/LICENSEy��ŠO_y��ĘO“p´������6���vendor/twig/twig/src/FileExtensionEscapingStrategy.phpń��ŠO_ń��Wœ´������!���vendor/twig/twig/src/TwigTest.phpČ ��ŠO_Č ��ň.r´������<���vendor/twig/twig/src/Loader/SourceContextLoaderInterface.phpť��ŠO_ť��¸0 [´������+���vendor/twig/twig/src/Loader/ArrayLoader.php÷��ŠO_÷��,üŹ´������0���vendor/twig/twig/src/Loader/FilesystemLoader.phpQ"��ŠO_Q"��’ŠÎŚ´������5���vendor/twig/twig/src/Loader/ExistsLoaderInterface.phpÝ��ŠO_Ý��ýĹĐ´������/���vendor/twig/twig/src/Loader/LoaderInterface.phpŰ��ŠO_Ű��(ř ë´������+���vendor/twig/twig/src/Loader/ChainLoader.php ��ŠO_ ��ť)T´������)���vendor/twig/twig/src/ExpressionParser.phpg��ŠO_g��¸zű7´���������vendor/twig/twig/src/Markup.phpU��ŠO_U��ŽżĐh´���������vendor/twig/twig/src/Source.php#��ŠO_#��{ɑ´������!���vendor/twig/twig/src/Compiler.phpň��ŠO_ň��î!Ť´������!���vendor/twig/twig/src/Template.php>3��ŠO_>3��9‰:´������(���vendor/twig/twig/src/TemplateWrapper.phpą��ŠO_ą��q_´������%���vendor/twig/twig/src/TwigFunction.php4 ��ŠO_4 �� đĎ´������1���vendor/twig/twig/src/Util/TemplateDirIterator.phpN��ŠO_N��ď~˜´������2���vendor/twig/twig/src/Util/DeprecationCollector.php;��ŠO_;��č‚|´���������vendor/twig/twig/src/Token.php\��ŠO_\��ëtÝÝ´������$���vendor/twig/twig/src/TokenStream.php��ŠO_��\)™ź´������<���vendor/twig/twig/src/Extension/RuntimeExtensionInterface.phpF��ŠO_F��űĂݴ������4���vendor/twig/twig/src/Extension/ProfilerExtension.php��ŠO_��ňL?´������5���vendor/twig/twig/src/Extension/ExtensionInterface.phpÚ��ŠO_Ú��Yé´������1���vendor/twig/twig/src/Extension/DebugExtension.php��ŠO_��’é:´������4���vendor/twig/twig/src/Extension/AbstractExtension.phpý��ŠO_ý��qť;O´������8���vendor/twig/twig/src/Extension/StringLoaderExtension.phpc��ŠO_c�� )ŹŽ´������3���vendor/twig/twig/src/Extension/StagingExtension.phpŻ ��ŠO_Ż ��Q:~´������3���vendor/twig/twig/src/Extension/EscaperExtension.phpĂ8��ŠO_Ă8��ă]´������3���vendor/twig/twig/src/Extension/SandboxExtension.phpl ��ŠO_l ��ě"Ő´������5���vendor/twig/twig/src/Extension/OptimizerExtension.php��ŠO_��rWÄ´������3���vendor/twig/twig/src/Extension/GlobalsInterface.php$��ŠO_$��6IŤÉ´������0���vendor/twig/twig/src/Extension/CoreExtension.php°Ë��ŠO_°Ë��eÜřt´������7���vendor/twig/twig/src/Extension/InitRuntimeInterface.phpĽ��ŠO_Ľ��QD—´������)���vendor/twig/twig/src/Profiler/Profile.phpä��ŠO_ä��’'Ż´������7���vendor/twig/twig/src/Profiler/Node/EnterProfileNode.php/��ŠO_/��á@=„´������7���vendor/twig/twig/src/Profiler/Node/LeaveProfileNode.php]��ŠO_]��‚K§Ű´������A���vendor/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php{ ��ŠO_{ ��żĹ´������3���vendor/twig/twig/src/Profiler/Dumper/BaseDumper.phpî��ŠO_î��_†!�´������3���vendor/twig/twig/src/Profiler/Dumper/HtmlDumper.phpĐ��ŠO_Đ��Ţ2ýć´������8���vendor/twig/twig/src/Profiler/Dumper/BlackfireDumper.php��ŠO_��ŇćÝ6´������3���vendor/twig/twig/src/Profiler/Dumper/TextDumper.phpś��ŠO_ś��–â´������(���vendor/twig/twig/src/Node/ImportNode.phpř��ŠO_ř��E—žO´������$���vendor/twig/twig/src/Node/IfNode.php˘��ŠO_˘��3ţb´������"���vendor/twig/twig/src/Node/Node.php,��ŠO_,��óq˛š´������0���vendor/twig/twig/src/Node/BlockReferenceNode.phpƒ��ŠO_ƒ��dǁ)´������'���vendor/twig/twig/src/Node/BlockNode.php<��ŠO_<��˘Bç´������2���vendor/twig/twig/src/Node/NodeCaptureInterface.phpÍ��ŠO_Í��łđm´������'���vendor/twig/twig/src/Node/MacroNode.phpÓ ��ŠO_Ó ��żňč´������%���vendor/twig/twig/src/Node/ForNode.phpÔ��ŠO_Ô��~˺ϴ������0���vendor/twig/twig/src/Node/SandboxedPrintNode.phpĐ��ŠO_Đ��Đa=@´������(���vendor/twig/twig/src/Node/ModuleNode.php!;��ŠO_!;��őUXŐ´������'���vendor/twig/twig/src/Node/FlushNode.phpź��ŠO_ź��ˆ‰‹´������,���vendor/twig/twig/src/Node/AutoEscapeNode.php“��ŠO_“��ž˛Zú´������/���vendor/twig/twig/src/Node/CheckToStringNode.phpŢ��ŠO_Ţ��Ň;␴������'���vendor/twig/twig/src/Node/EmbedNode.php´��ŠO_´��ű­D´������$���vendor/twig/twig/src/Node/DoNode.phpM��ŠO_M��úĺ˛ő´������'���vendor/twig/twig/src/Node/PrintNode.php¨��ŠO_¨��Đ:M…´������)���vendor/twig/twig/src/Node/SandboxNode.phpF��ŠO_F��~čNŕ´������&���vendor/twig/twig/src/Node/TextNode.php=��ŠO_=��ĽÁ =´������@���vendor/twig/twig/src/Node/Expression/ArrowFunctionExpression.php%��ŠO_%��X+![´������9���vendor/twig/twig/src/Node/Expression/FilterExpression.phpV��ŠO_V��äW˝°´������:���vendor/twig/twig/src/Node/Expression/GetAttrExpression.php6 ��ŠO_6 ��â<š´������7���vendor/twig/twig/src/Node/Expression/Unary/NotUnary.phpő��ŠO_ő��đ›ĺś´������7���vendor/twig/twig/src/Node/Expression/Unary/NegUnary.phpő��ŠO_ő��Ç5Ś´������<���vendor/twig/twig/src/Node/Expression/Unary/AbstractUnary.phpc��ŠO_c�� WúI´������7���vendor/twig/twig/src/Node/Expression/Unary/PosUnary.phpő��ŠO_ő��'WŽ´������;���vendor/twig/twig/src/Node/Expression/VariadicExpression.php´��ŠO_´��:Ľ°Ú´������A���vendor/twig/twig/src/Node/Expression/BlockReferenceExpression.php_ ��ŠO__ ��ÁPŚŰ´������;���vendor/twig/twig/src/Node/Expression/TempNameExpression.phpĚ��ŠO_Ě��Ş‹¤$´������>���vendor/twig/twig/src/Node/Expression/ConditionalExpression.phpô��ŠO_ô��ÎÄ&´������=���vendor/twig/twig/src/Node/Expression/MethodCallExpression.phpL��ŠO_L��+ôJÍ´������7���vendor/twig/twig/src/Node/Expression/NameExpression.phpĺ ��ŠO_ĺ ��_Ľ˛â´������;���vendor/twig/twig/src/Node/Expression/ConstantExpression.php›��ŠO_›��2ˆďI´������9���vendor/twig/twig/src/Node/Expression/ParentExpression.phpÔ��ŠO_Ô��@!%Ĺ´������8���vendor/twig/twig/src/Node/Expression/ArrayExpression.php ��ŠO_ ��ëQKÁ´������6���vendor/twig/twig/src/Node/Expression/Test/EvenTest.php÷��ŠO_÷��Jý´������9���vendor/twig/twig/src/Node/Expression/Test/DefinedTest.phpV ��ŠO_V ��ď˜Q´������=���vendor/twig/twig/src/Node/Expression/Test/DivisiblebyTest.phpu��ŠO_u��qCŞ´������:���vendor/twig/twig/src/Node/Expression/Test/ConstantTest.phpó��ŠO_ó��Tç‡o´������6���vendor/twig/twig/src/Node/Expression/Test/NullTest.phpĺ��ŠO_ĺ��!d§Ž´������5���vendor/twig/twig/src/Node/Expression/Test/OddTest.phpň��ŠO_ň��jaĚc´������8���vendor/twig/twig/src/Node/Expression/Test/SameasTest.phpD��ŠO_D��¤˙Ç´������?���vendor/twig/twig/src/Node/Expression/Binary/LessEqualBinary.php˙��ŠO_˙��ם z´������;���vendor/twig/twig/src/Node/Expression/Binary/NotInBinary.php��ŠO_�� >´K´������8���vendor/twig/twig/src/Node/Expression/Binary/InBinary.phpú��ŠO_ú��řż‡'´������@���vendor/twig/twig/src/Node/Expression/Binary/StartsWithBinary.phpä��ŠO_ä��féŰ´������@���vendor/twig/twig/src/Node/Expression/Binary/BitwiseAndBinary.php��ŠO_��n(á´������<���vendor/twig/twig/src/Node/Expression/Binary/ConcatBinary.php ��ŠO_ ��ĺŻâ´������;���vendor/twig/twig/src/Node/Expression/Binary/EqualBinary.phpó��ŠO_ó��oI‰ó´������>���vendor/twig/twig/src/Node/Expression/Binary/FloorDivBinary.phpĄ��ŠO_Ą��ó'Č)´������8���vendor/twig/twig/src/Node/Expression/Binary/OrBinary.php���ŠO_���­ך´������9���vendor/twig/twig/src/Node/Expression/Binary/DivBinary.php��ŠO_��4Ö˝D´������>���vendor/twig/twig/src/Node/Expression/Binary/EndsWithBinary.phpë��ŠO_ë��Šˇă‰´������9���vendor/twig/twig/src/Node/Expression/Binary/ModBinary.php��ŠO_��É>Ӗ´������?���vendor/twig/twig/src/Node/Expression/Binary/SpaceshipBinary.phpš��ŠO_š��ŹZÄ´������;���vendor/twig/twig/src/Node/Expression/Binary/PowerBinary.phpó��ŠO_ó��ŮbĎŚ´������9���vendor/twig/twig/src/Node/Expression/Binary/SubBinary.php��ŠO_��ţ4ź´������?���vendor/twig/twig/src/Node/Expression/Binary/BitwiseOrBinary.php��ŠO_��Ő존������=���vendor/twig/twig/src/Node/Expression/Binary/GreaterBinary.phpř��ŠO_ř��ń“´������9���vendor/twig/twig/src/Node/Expression/Binary/MulBinary.php��ŠO_��51Ë´������9���vendor/twig/twig/src/Node/Expression/Binary/AndBinary.php��ŠO_��Ór}—´������B���vendor/twig/twig/src/Node/Expression/Binary/GreaterEqualBinary.php��ŠO_��Lt1t´������>���vendor/twig/twig/src/Node/Expression/Binary/AbstractBinary.php+��ŠO_+��š‹â ´������@���vendor/twig/twig/src/Node/Expression/Binary/BitwiseXorBinary.php��ŠO_��ĂYŔW´������=���vendor/twig/twig/src/Node/Expression/Binary/MatchesBinary.php��ŠO_��L[Ú´������:���vendor/twig/twig/src/Node/Expression/Binary/LessBinary.phpď��ŠO_ď��†o#´������;���vendor/twig/twig/src/Node/Expression/Binary/RangeBinary.phpú��ŠO_ú��Ăňj­´������>���vendor/twig/twig/src/Node/Expression/Binary/NotEqualBinary.phpü��ŠO_ü��°ńHś´������9���vendor/twig/twig/src/Node/Expression/Binary/AddBinary.php��ŠO_��vr´������;���vendor/twig/twig/src/Node/Expression/AbstractExpression.php��ŠO_��ç™Ô´������;���vendor/twig/twig/src/Node/Expression/FunctionExpression.phpś��ŠO_ś��- ‘•´������=���vendor/twig/twig/src/Node/Expression/AssignNameExpression.phpi��ŠO_i��Í07H´������?���vendor/twig/twig/src/Node/Expression/NullCoalesceExpression.php’��ŠO_’��†ĄČ´������7���vendor/twig/twig/src/Node/Expression/TestExpression.phpŠ��ŠO_Š��žç†´������7���vendor/twig/twig/src/Node/Expression/CallExpression.php00��ŠO_00��Ť‰Aô´������=���vendor/twig/twig/src/Node/Expression/Filter/DefaultFilter.php[��ŠO_[��žÖ°Â´������4���vendor/twig/twig/src/Node/Expression/InlinePrint.php›��ŠO_›��÷ŮjČ´������,���vendor/twig/twig/src/Node/DeprecatedNode.phpĽ��ŠO_Ľ��ÖP5ˇ´������%���vendor/twig/twig/src/Node/SetNode.phpY ��ŠO_Y ��ĆJP´������&���vendor/twig/twig/src/Node/BodyNode.php��ŠO_��_cś´������+���vendor/twig/twig/src/Node/SpacelessNode.php˝��ŠO_˝��ąg^ą´������&���vendor/twig/twig/src/Node/WithNode.phpœ��ŠO_œ��%~Ů´������/���vendor/twig/twig/src/Node/CheckSecurityNode.php ��ŠO_ ��ňé͙´������)���vendor/twig/twig/src/Node/IncludeNode.php{ ��ŠO_{ ��#ű6Ä´������)���vendor/twig/twig/src/Node/ForLoopNode.php<��ŠO_<��wqá/´������1���vendor/twig/twig/src/Node/NodeOutputInterface.phpś��ŠO_ś�� *‡Ŕ´���������vendor/twig/twig/src/Lexer.phpŁK��ŠO_ŁK��•ŁĚÄ´������%���vendor/twig/twig/src/ExtensionSet.phpş2��ŠO_ş2��d1´������$���vendor/twig/twig/src/Error/Error.phpĎ��ŠO_Ď��uă՚´������+���vendor/twig/twig/src/Error/RuntimeError.phpĚ��ŠO_Ě��3%ÄË´������*���vendor/twig/twig/src/Error/SyntaxError.phpÎ��ŠO_Î��ľGw´������*���vendor/twig/twig/src/Error/LoaderError.phpŔ��ŠO_Ŕ��ąęTą´������/���vendor/twig/twig/src/Sandbox/SecurityPolicy.phpĆ��ŠO_Ć��&žq´������>���vendor/twig/twig/src/Sandbox/SecurityNotAllowedFilterError.phpń��ŠO_ń��Bß)´������8���vendor/twig/twig/src/Sandbox/SecurityPolicyInterface.php=��ŠO_=��Š7ń!´������>���vendor/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php’��ŠO_’��¨Ń`ý´������@���vendor/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.phpŚ��ŠO_Ś��^Ť7´������.���vendor/twig/twig/src/Sandbox/SecurityError.phpă��ŠO_ă��Ćb™’´������;���vendor/twig/twig/src/Sandbox/SecurityNotAllowedTagError.phpĎ��ŠO_Ď��÷ę‘C´������@���vendor/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php��ŠO_��n‰�ô´������$���vendor/twig/twig/src/Environment.phpo��ŠO_o��Đđ´������<���vendor/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php–��ŠO_–�� Š˜A´������7���vendor/twig/twig/src/NodeVisitor/SandboxNodeVisitor.phpĐ��ŠO_Đ��ô؝@´������9���vendor/twig/twig/src/NodeVisitor/OptimizerNodeVisitor.phpI��ŠO_I��ťľnW´������9���vendor/twig/twig/src/NodeVisitor/NodeVisitorInterface.phpŐ��ŠO_Ő��M]Ż˘´������7���vendor/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php��ŠO_��ý–g´������8���vendor/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php×��ŠO_×��J@������?���vendor/twig/twig/src/NodeVisitor/MacroAutoImportNodeVisitor.php“��ŠO_“��Uˆ´������&���vendor/twig/twig/src/NodeTraverser.phpz��ŠO_z��[îŠÁ´���������vendor/twig/twig/src/Parser.php#3��ŠO_#3��͉´������1���vendor/twig/twig/src/Test/IntegrationTestCase.php(#��ŠO_(#��ƒF´������*���vendor/twig/twig/src/Test/NodeTestCase.phpá��ŠO_á��ƒ[7´������6���vendor/twig/twig/src/TokenParser/FilterTokenParser.phpl��ŠO_l��OT´������4���vendor/twig/twig/src/TokenParser/WithTokenParser.php(��ŠO_(��š‰rd´������3���vendor/twig/twig/src/TokenParser/UseTokenParser.phpă��ŠO_ă��.ƅD´������8���vendor/twig/twig/src/TokenParser/AbstractTokenParser.php��ŠO_��LĘ芴������5���vendor/twig/twig/src/TokenParser/EmbedTokenParser.phpő��ŠO_ő��Ÿr퀴������9���vendor/twig/twig/src/TokenParser/SpacelessTokenParser.php��ŠO_��KŽ›’´������2���vendor/twig/twig/src/TokenParser/DoTokenParser.php!��ŠO_!��dP,6´������7���vendor/twig/twig/src/TokenParser/SandboxTokenParser.php-��ŠO_-��? ô´������:���vendor/twig/twig/src/TokenParser/AutoEscapeTokenParser.phpM��ŠO_M��Ŕ˘Ż´������3���vendor/twig/twig/src/TokenParser/ForTokenParser.phpĎ��ŠO_Ď��ĘOçZ´������:���vendor/twig/twig/src/TokenParser/DeprecatedTokenParser.phpő��ŠO_ő��č„f´������4���vendor/twig/twig/src/TokenParser/FromTokenParser.phpŞ��ŠO_Ş��ž‘iŐ´������5���vendor/twig/twig/src/TokenParser/BlockTokenParser.phpŘ ��ŠO_Ř ��(Ż/´������7���vendor/twig/twig/src/TokenParser/ExtendsTokenParser.php}��ŠO_}��ëí=Č´������2���vendor/twig/twig/src/TokenParser/IfTokenParser.phpä ��ŠO_ä ��Ţ.ÄĹ´������5���vendor/twig/twig/src/TokenParser/MacroTokenParser.phpŽ��ŠO_Ž��§˝gL´������5���vendor/twig/twig/src/TokenParser/FlushTokenParser.phpß��ŠO_ß��…Śő’´������3���vendor/twig/twig/src/TokenParser/SetTokenParser.php8��ŠO_8��¸Kx´������9���vendor/twig/twig/src/TokenParser/TokenParserInterface.phpv��ŠO_v��%p\´������5���vendor/twig/twig/src/TokenParser/ApplyTokenParser.php°��ŠO_°��¸­§ť´������7���vendor/twig/twig/src/TokenParser/IncludeTokenParser.php{��ŠO_{��–tŕĚ´������6���vendor/twig/twig/src/TokenParser/ImportTokenParser.phpľ��ŠO_ľ��ř~Q$´������=���vendor/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.phpŇ��ŠO_Ň���‹…´������;���vendor/twig/twig/src/RuntimeLoader/FactoryRuntimeLoader.php‰��ŠO_‰��T1…@´������=���vendor/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php1��ŠO_1��¤żZW´������-���vendor/twig/twig/src/Cache/CacheInterface.phpž��ŠO_ž��żšP;´������(���vendor/twig/twig/src/Cache/NullCache.php¨��ŠO_¨��Á>W›´������.���vendor/twig/twig/src/Cache/FilesystemCache.php0 ��ŠO_0 ��EÉíđ´������#���vendor/twig/twig/src/TwigFilter.php#��ŠO_#��}×´������;���vendor/twig/twig/lib/Twig/FileExtensionEscapingStrategy.phpé��ŠO_é��óßCm´������"���vendor/twig/twig/lib/Twig/Node.phpN��ŠO_N��Ôçz´������*���vendor/twig/twig/lib/Twig/Loader/Array.php‰��ŠO_‰��„3ƒ´������*���vendor/twig/twig/lib/Twig/Loader/Chain.php‰��ŠO_‰��Ś¨ýT´������/���vendor/twig/twig/lib/Twig/Loader/Filesystem.phpŹ��ŠO_Ź��ăźň´������.���vendor/twig/twig/lib/Twig/ExpressionParser.phpŽ��ŠO_Ž��ˆO´������$���vendor/twig/twig/lib/Twig/Markup.phpH��ŠO_H��fÜx4´������:���vendor/twig/twig/lib/Twig/SourceContextLoaderInterface.phpţ��ŠO_ţ��ĄńĽű´������$���vendor/twig/twig/lib/Twig/Source.phpH��ŠO_H��đ~˝Ć´������&���vendor/twig/twig/lib/Twig/Compiler.phpV��ŠO_V��^f ë´������&���vendor/twig/twig/lib/Twig/Template.phpV��ŠO_V��Ć~:[´������2���vendor/twig/twig/lib/Twig/NodeCaptureInterface.phpž��ŠO_ž��š§ y´������-���vendor/twig/twig/lib/Twig/TemplateWrapper.php‡��ŠO_‡��*nLć´������"���vendor/twig/twig/lib/Twig/Test.phpN��ŠO_N��Šó´������6���vendor/twig/twig/lib/Twig/Util/TemplateDirIterator.phpÁ��ŠO_Á��ĹLŤH´������7���vendor/twig/twig/lib/Twig/Util/DeprecationCollector.phpČ��ŠO_Č�� Ü…´������#���vendor/twig/twig/lib/Twig/Token.phpA��ŠO_A��”ˇ-ů´������)���vendor/twig/twig/lib/Twig/TokenStream.phpk��ŠO_k��{‘ł´������4���vendor/twig/twig/lib/Twig/ContainerRuntimeLoader.phpđ��ŠO_đ��|řAH´������0���vendor/twig/twig/lib/Twig/ExtensionInterface.phpÄ��ŠO_Ä��đĐí°´������1���vendor/twig/twig/lib/Twig/Extension/Optimizer.phpĆ��ŠO_Ć��=vź'´������,���vendor/twig/twig/lib/Twig/Extension/Core.phpŁ��ŠO_Ł��pŕ蝴������/���vendor/twig/twig/lib/Twig/Extension/Sandbox.php¸��ŠO_¸��llÎÜ´������0���vendor/twig/twig/lib/Twig/Extension/Profiler.phpż��ŠO_ż��Ó  D´������/���vendor/twig/twig/lib/Twig/Extension/Staging.php¸��ŠO_¸��§Čě´������-���vendor/twig/twig/lib/Twig/Extension/Debug.phpŞ��ŠO_Ş��řGřŢ´������8���vendor/twig/twig/lib/Twig/Extension/GlobalsInterface.phpĘ��ŠO_Ę��đşÚA´������4���vendor/twig/twig/lib/Twig/Extension/StringLoader.phpŰ��ŠO_Ű��őŞŰô´������/���vendor/twig/twig/lib/Twig/Extension/Escaper.php¸��ŠO_¸��ԟŰX´������<���vendor/twig/twig/lib/Twig/Extension/InitRuntimeInterface.phpć��ŠO_ć��ńŔď´������.���vendor/twig/twig/lib/Twig/Profiler/Profile.php…��ŠO_…��D&l1´������8���vendor/twig/twig/lib/Twig/Profiler/Node/LeaveProfile.phpÚ��ŠO_Ú��MńâF´������8���vendor/twig/twig/lib/Twig/Profiler/Node/EnterProfile.phpÚ��ŠO_Ú��ű|ĐQ´������;���vendor/twig/twig/lib/Twig/Profiler/NodeVisitor/Profiler.php ��ŠO_ ��­| ´������2���vendor/twig/twig/lib/Twig/Profiler/Dumper/Base.php¸��ŠO_¸��5?yŠ´������2���vendor/twig/twig/lib/Twig/Profiler/Dumper/Text.php¸��ŠO_¸��u ”´������2���vendor/twig/twig/lib/Twig/Profiler/Dumper/Html.php¸��ŠO_¸��‘űœĄ´������7���vendor/twig/twig/lib/Twig/Profiler/Dumper/Blackfire.phpŰ��ŠO_Ű��Lu Ä´������*���vendor/twig/twig/lib/Twig/SimpleFilter.phpV��ŠO_V��”Ĺ´������-���vendor/twig/twig/lib/Twig/BaseNodeVisitor.phpË��ŠO_Ë��q“¨´������(���vendor/twig/twig/lib/Twig/Node/Embed.phps��ŠO_s��rRrœ´������-���vendor/twig/twig/lib/Twig/Node/Deprecated.php–��ŠO_–��ŃՍ´������(���vendor/twig/twig/lib/Twig/Node/Print.phps��ŠO_s��ű氂´������)���vendor/twig/twig/lib/Twig/Node/Module.phpz��ŠO_z��ňa´������*���vendor/twig/twig/lib/Twig/Node/ForLoop.php��ŠO_��3ńü´������&���vendor/twig/twig/lib/Twig/Node/For.phpe��ŠO_e��i'ÝŤ´������0���vendor/twig/twig/lib/Twig/Node/CheckSecurity.phpŤ��ŠO_Ť��/˘ĐŐ´������-���vendor/twig/twig/lib/Twig/Node/Expression.phpÖ��ŠO_Ö��ˇ[OĚ´������'���vendor/twig/twig/lib/Twig/Node/Body.phpl��ŠO_l�� Űq´������*���vendor/twig/twig/lib/Twig/Node/Include.php��ŠO_��ܢdN´������-���vendor/twig/twig/lib/Twig/Node/AutoEscape.php–��ŠO_–��!Źl´������&���vendor/twig/twig/lib/Twig/Node/Set.phpe��ŠO_e��Nh@‰´������(���vendor/twig/twig/lib/Twig/Node/Macro.phps��ŠO_s��Ö"Úí´������%���vendor/twig/twig/lib/Twig/Node/If.php^��ŠO_^��†Ő7´������1���vendor/twig/twig/lib/Twig/Node/SandboxedPrint.php˛��ŠO_˛��y‹šŤ´������,���vendor/twig/twig/lib/Twig/Node/Spaceless.php��ŠO_��*‚5›´������*���vendor/twig/twig/lib/Twig/Node/Sandbox.php��ŠO_��ψzŇ´������(���vendor/twig/twig/lib/Twig/Node/Flush.phps��ŠO_s��6ÎŹ$´������(���vendor/twig/twig/lib/Twig/Node/Block.phps��ŠO_s��ń˘"Q´������'���vendor/twig/twig/lib/Twig/Node/With.phpl��ŠO_l��—Ą­Ę´������%���vendor/twig/twig/lib/Twig/Node/Do.php^��ŠO_^��T´z´������3���vendor/twig/twig/lib/Twig/Node/Expression/Array.phpÓ��ŠO_Ó��ő[ČĐ´������4���vendor/twig/twig/lib/Twig/Node/Expression/Binary.phpě��ŠO_ě��<öÄr´������4���vendor/twig/twig/lib/Twig/Node/Expression/Parent.phpÚ��ŠO_Ú��gűŃ´������2���vendor/twig/twig/lib/Twig/Node/Expression/Call.phpĚ��ŠO_Ě��4őÜť´������2���vendor/twig/twig/lib/Twig/Node/Expression/Test.phpĚ��ŠO_Ě��›Óó´������7���vendor/twig/twig/lib/Twig/Node/Expression/Unary/Neg.phpĐ��ŠO_Đ��?B.´������7���vendor/twig/twig/lib/Twig/Node/Expression/Unary/Not.phpĐ��ŠO_Đ��ywł´������7���vendor/twig/twig/lib/Twig/Node/Expression/Unary/Pos.phpĐ��ŠO_Đ��HžŐś´������2���vendor/twig/twig/lib/Twig/Node/Expression/Name.phpĚ��ŠO_Ě��UĚžd´������4���vendor/twig/twig/lib/Twig/Node/Expression/Filter.phpÚ��ŠO_Ú��öľą ´������6���vendor/twig/twig/lib/Twig/Node/Expression/TempName.phpč��ŠO_č��đyv´������8���vendor/twig/twig/lib/Twig/Node/Expression/AssignName.phpö��ŠO_ö���ĆJ"´������9���vendor/twig/twig/lib/Twig/Node/Expression/Conditional.phpý��ŠO_ý��ßNŔô´������6���vendor/twig/twig/lib/Twig/Node/Expression/Function.phpč��ŠO_č��˙OGó´������:���vendor/twig/twig/lib/Twig/Node/Expression/NullCoalesce.php��ŠO_��^Čnű´������5���vendor/twig/twig/lib/Twig/Node/Expression/GetAttr.phpá��ŠO_á��&VŒč´������>���vendor/twig/twig/lib/Twig/Node/Expression/Test/Divisibleby.phpý��ŠO_ý��<÷éŮ´������:���vendor/twig/twig/lib/Twig/Node/Expression/Test/Defined.phpá��ŠO_á��ĽóЛ´������9���vendor/twig/twig/lib/Twig/Node/Expression/Test/Sameas.phpÚ��ŠO_Ú��…Ý^´������7���vendor/twig/twig/lib/Twig/Node/Expression/Test/Even.phpĚ��ŠO_Ě��n{ ¤´������7���vendor/twig/twig/lib/Twig/Node/Expression/Test/Null.phpĚ��ŠO_Ě��/$ň*´������6���vendor/twig/twig/lib/Twig/Node/Expression/Test/Odd.phpĹ��ŠO_Ĺ��ú~ö´������;���vendor/twig/twig/lib/Twig/Node/Expression/Test/Constant.phpč��ŠO_č�� '™´������;���vendor/twig/twig/lib/Twig/Node/Expression/Binary/Concat.phpđ��ŠO_đ��:`Ę´������9���vendor/twig/twig/lib/Twig/Node/Expression/Binary/Less.phpâ��ŠO_â��O,“ó´������8���vendor/twig/twig/lib/Twig/Node/Expression/Binary/Mul.phpŰ��ŠO_Ű��š‡Ş7´������8���vendor/twig/twig/lib/Twig/Node/Expression/Binary/Div.phpŰ��ŠO_Ű��Ď0zĚ´������>���vendor/twig/twig/lib/Twig/Node/Expression/Binary/BitwiseOr.php��ŠO_��dCz´������:���vendor/twig/twig/lib/Twig/Node/Expression/Binary/Equal.phpé��ŠO_é��`şfd´������>���vendor/twig/twig/lib/Twig/Node/Expression/Binary/LessEqual.php��ŠO_��ź˛ź´������:���vendor/twig/twig/lib/Twig/Node/Expression/Binary/NotIn.phpé��ŠO_é��żü‘´������7���vendor/twig/twig/lib/Twig/Node/Expression/Binary/Or.phpÔ��ŠO_Ô��žö´������:���vendor/twig/twig/lib/Twig/Node/Expression/Binary/Power.phpé��ŠO_é��ĺŢlc´������8���vendor/twig/twig/lib/Twig/Node/Expression/Binary/Mod.phpŰ��ŠO_Ű��ŃŔ“V´������8���vendor/twig/twig/lib/Twig/Node/Expression/Binary/Add.phpŰ��ŠO_Ű��W@A]´������?���vendor/twig/twig/lib/Twig/Node/Expression/Binary/BitwiseXor.php ��ŠO_ ��ŗY-´������=���vendor/twig/twig/lib/Twig/Node/Expression/Binary/FloorDiv.phpţ��ŠO_ţ��Θóť´������:���vendor/twig/twig/lib/Twig/Node/Expression/Binary/Range.phpé��ŠO_é��v•w´������A���vendor/twig/twig/lib/Twig/Node/Expression/Binary/GreaterEqual.php��ŠO_��?k/\´������?���vendor/twig/twig/lib/Twig/Node/Expression/Binary/StartsWith.php ��ŠO_ ��sü˛´������=���vendor/twig/twig/lib/Twig/Node/Expression/Binary/NotEqual.phpţ��ŠO_ţ��Kťo´������8���vendor/twig/twig/lib/Twig/Node/Expression/Binary/Sub.phpŰ��ŠO_Ű��ŕˆ“´������=���vendor/twig/twig/lib/Twig/Node/Expression/Binary/EndsWith.phpţ��ŠO_ţ��\ć*´������<���vendor/twig/twig/lib/Twig/Node/Expression/Binary/Matches.php÷��ŠO_÷��’ć}´������7���vendor/twig/twig/lib/Twig/Node/Expression/Binary/In.phpÔ��ŠO_Ô��Ľöu=´������?���vendor/twig/twig/lib/Twig/Node/Expression/Binary/BitwiseAnd.php ��ŠO_ ��ĽĄżJ´������<���vendor/twig/twig/lib/Twig/Node/Expression/Binary/Greater.php÷��ŠO_÷��iŠëœ´������8���vendor/twig/twig/lib/Twig/Node/Expression/Binary/And.phpŰ��ŠO_Ű��421ę´������6���vendor/twig/twig/lib/Twig/Node/Expression/Constant.phpč��ŠO_č��R€čŘ´������<���vendor/twig/twig/lib/Twig/Node/Expression/BlockReference.php��ŠO_��]|J�´������3���vendor/twig/twig/lib/Twig/Node/Expression/Unary.phpá��ŠO_á��ň…–"´������<���vendor/twig/twig/lib/Twig/Node/Expression/Filter/Default.php÷��ŠO_÷��$Z›‘´������8���vendor/twig/twig/lib/Twig/Node/Expression/MethodCall.phpö��ŠO_ö��Ş7´������'���vendor/twig/twig/lib/Twig/Node/Text.phpl��ŠO_l��š…Á´������1���vendor/twig/twig/lib/Twig/Node/BlockReference.php˛��ŠO_˛��˝ŹĎâ´������)���vendor/twig/twig/lib/Twig/Node/Import.phpz��ŠO_z��0”a.´������#���vendor/twig/twig/lib/Twig/Lexer.phpA��ŠO_A��ĆŢŇě´������*���vendor/twig/twig/lib/Twig/ExtensionSet.phpr��ŠO_r��x8ż´������,���vendor/twig/twig/lib/Twig/SimpleFunction.phpd��ŠO_d��ŤŠĐ´������$���vendor/twig/twig/lib/Twig/Filter.php\��ŠO_\��]L7´������+���vendor/twig/twig/lib/Twig/Error/Runtime.phpŒ��ŠO_Œ��Nb?´������*���vendor/twig/twig/lib/Twig/Error/Syntax.php…��ŠO_…��öƒ™+´������*���vendor/twig/twig/lib/Twig/Error/Loader.php…��ŠO_…��Ţě%á´������4���vendor/twig/twig/lib/Twig/Sandbox/SecurityPolicy.php°��ŠO_°��S×+Ľ´������C���vendor/twig/twig/lib/Twig/Sandbox/SecurityNotAllowedFilterError.php��ŠO_��°“ť×´������=���vendor/twig/twig/lib/Twig/Sandbox/SecurityPolicyInterface.phpď��ŠO_ď��†ĆŘ´������C���vendor/twig/twig/lib/Twig/Sandbox/SecurityNotAllowedMethodError.php��ŠO_��­ŠLľ´������E���vendor/twig/twig/lib/Twig/Sandbox/SecurityNotAllowedPropertyError.php'��ŠO_'��ťa´������3���vendor/twig/twig/lib/Twig/Sandbox/SecurityError.phpŠ��ŠO_Š��őŽü ´������@���vendor/twig/twig/lib/Twig/Sandbox/SecurityNotAllowedTagError.php��ŠO_��ŃŚ&/´������E���vendor/twig/twig/lib/Twig/Sandbox/SecurityNotAllowedFunctionError.php'��ŠO_'��?űÔ[´������,���vendor/twig/twig/lib/Twig/CacheInterface.php˜��ŠO_˜��1/í´������)���vendor/twig/twig/lib/Twig/Environment.phpk��ŠO_k��˙Bm´������2���vendor/twig/twig/lib/Twig/FactoryRuntimeLoader.phpâ��ŠO_â��ëŕ­Î´������'���vendor/twig/twig/lib/Twig/Extension.php­��ŠO_­��WH•Ó´������2���vendor/twig/twig/lib/Twig/NodeVisitorInterface.phpÚ��ŠO_Ú��R?qć´������3���vendor/twig/twig/lib/Twig/NodeVisitor/Optimizer.phpÜ��ŠO_Ü��đ`l´������1���vendor/twig/twig/lib/Twig/NodeVisitor/Sandbox.phpÎ��ŠO_Î��$‡ŰĚ´������6���vendor/twig/twig/lib/Twig/NodeVisitor/SafeAnalysis.phpń��ŠO_ń��ź”ŽŒ´������1���vendor/twig/twig/lib/Twig/NodeVisitor/Escaper.phpÎ��ŠO_Î��FÚřδ������&���vendor/twig/twig/lib/Twig/Function.phpj��ŠO_j��" ňb´������+���vendor/twig/twig/lib/Twig/NodeTraverser.phpy��ŠO_y��?”˝‰´������$���vendor/twig/twig/lib/Twig/Parser.phpH��ŠO_H��pIwě´������#���vendor/twig/twig/lib/Twig/Error.phpY��ŠO_Y��‹Ąžu´������4���vendor/twig/twig/lib/Twig/RuntimeLoaderInterface.phpđ��ŠO_đ��ÂwYŽ´������6���vendor/twig/twig/lib/Twig/Test/IntegrationTestCase.phpÁ��ŠO_Á��HgŠę´������/���vendor/twig/twig/lib/Twig/Test/NodeTestCase.php��ŠO_��d^ט´������3���vendor/twig/twig/lib/Twig/ExistsLoaderInterface.phpÍ��ŠO_Í��ő€T†´������-���vendor/twig/twig/lib/Twig/LoaderInterface.phpŁ��ŠO_Ł��âbl´������2���vendor/twig/twig/lib/Twig/TokenParserInterface.phpÚ��ŠO_Ú��Źđ°h´������/���vendor/twig/twig/lib/Twig/TokenParser/Embed.phpŔ��ŠO_Ŕ��XĘ´������4���vendor/twig/twig/lib/Twig/TokenParser/Deprecated.phpă��ŠO_ă��żX;Á´������-���vendor/twig/twig/lib/Twig/TokenParser/For.php˛��ŠO_˛��›¨B´������.���vendor/twig/twig/lib/Twig/TokenParser/From.phpš��ŠO_š��ç795´������1���vendor/twig/twig/lib/Twig/TokenParser/Include.phpÎ��ŠO_Î��Ä&‘ö´������4���vendor/twig/twig/lib/Twig/TokenParser/AutoEscape.phpă��ŠO_ă��UnPó´������-���vendor/twig/twig/lib/Twig/TokenParser/Set.php˛��ŠO_˛��QČX´������/���vendor/twig/twig/lib/Twig/TokenParser/Macro.phpŔ��ŠO_Ŕ��ÁkÁ4´������,���vendor/twig/twig/lib/Twig/TokenParser/If.phpŤ��ŠO_Ť��úľą]´������3���vendor/twig/twig/lib/Twig/TokenParser/Spaceless.phpÜ��ŠO_Ü��‹ƒĽ´������1���vendor/twig/twig/lib/Twig/TokenParser/Sandbox.phpÎ��ŠO_Î��Ň*ăo´������0���vendor/twig/twig/lib/Twig/TokenParser/Filter.phpÇ��ŠO_Ç��1b›v´������/���vendor/twig/twig/lib/Twig/TokenParser/Flush.phpŔ��ŠO_Ŕ��ŻžŮ´������/���vendor/twig/twig/lib/Twig/TokenParser/Block.phpŔ��ŠO_Ŕ��‘”Ă´������.���vendor/twig/twig/lib/Twig/TokenParser/With.phpš��ŠO_š��dů˝ß´������,���vendor/twig/twig/lib/Twig/TokenParser/Do.phpŤ��ŠO_Ť��źGMV´������1���vendor/twig/twig/lib/Twig/TokenParser/Extends.phpÎ��ŠO_Î��U x´������0���vendor/twig/twig/lib/Twig/TokenParser/Import.phpÇ��ŠO_Ç��|Ր״������-���vendor/twig/twig/lib/Twig/TokenParser/Use.php˛��ŠO_˛��Ąč˝f´������)���vendor/twig/twig/lib/Twig/TokenParser.phpĂ��ŠO_Ă��%^˙´������(���vendor/twig/twig/lib/Twig/SimpleTest.phpH��ŠO_H��Ë]Óš´������.���vendor/twig/twig/lib/Twig/Cache/Filesystem.phpĄ��ŠO_Ą��2‹e´������(���vendor/twig/twig/lib/Twig/Cache/Null.phpw��ŠO_w��śŕ´������1���vendor/twig/twig/lib/Twig/NodeOutputInterface.phpˇ��ŠO_ˇ��%T´���������vendor/twig/twig/LICENSEé��ŠO_é��ҙÝ´������0���vendor/michelf/php-markdown/Michelf/Markdown.phplÇ��ŠO_lÇ��Œ˜U´������4���vendor/michelf/php-markdown/Michelf/Markdown.inc.phpx��ŠO_x��ĹË´������=���vendor/michelf/php-markdown/Michelf/MarkdownInterface.inc.phpR��ŠO_R��G™ç´������9���vendor/michelf/php-markdown/Michelf/MarkdownExtra.inc.php´��ŠO_´��–<ţ´������5���vendor/michelf/php-markdown/Michelf/MarkdownExtra.php…Ô��ŠO_…Ô��ü”8C´������9���vendor/michelf/php-markdown/Michelf/MarkdownInterface.php‚��ŠO_‚��*`d´���������LICENSEN��ŠO_N��ĽR¤������Ţ•����������$������,�������8���˘��9���������������Project-Id-Version: 1.0.0 Report-Msgid-Bugs-To: williamdes@wdes.fr PO-Revision-Date: 2020-07-13 09:34+0200 Last-Translator: Blob Blob <williamdes@wdes.fr> Language-Team: English <https://github.com/code-lts/doctum/> Language: en MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: Poedit 2.2.4 X-Poedit-SourceCharset: UTF-8 �Ţ•����(������\��5���œ������p�� ���q�����}�����ƒ�����™�� ���Ą�����Ť�� ���ł��H���ž������� ��� �� ��������"�����)�����<�� ���D�� ���N�����Y�����h�� ���~�� ���‰�����”�� ���Š�����ś�����˝�����Ě��ü���Ő�����Ň�����ä�����ę�� ���ń�� ���ý������� ����� ��������&�� ���,�����6�����=�����B��`��H�����Š�����ź�����Ă�����ß�� ���ç�����ň�� ���ű��U��������\�� ���e�� ���o�����z�����ƒ�� ���œ�� ���Ś�� ���°�����ť�����Î�� ���ć�� ���ň�����˙����� �� ���, �����7 �� ���O ��0��Z �����‹ �����œ �����˘ �����Š �����¸ �����Ç �� ���Î �����Ú �����é �� ���ń �����ű ����� ����� ������������� ������"������ ��������� �����������#������������������������'������!������� ������������������������������(���������������� ���%������ ������&�������������������������$�������All Classes�Class�Class in namespace %s�Classes�Constants�Details�Exceptions�Generated by %sDoctum, a API Documentation generator and fork of Sami%s.�Index�Interface�Interfaces�Method�Method in class %s�Methods�Namespace�Namespaces�No description�No results were found�Parameters�Properties�Property in class %s�Return Value�Search�Search Results�See also�This page allows you to search through the API documentation for specific terms. Enter your search words into the box below and click "submit". The search will be performed on namespaces, classes, interfaces, traits, functions, and methods.�Toggle navigation�Trait�Traits�View source�at line %s�class�deprecated�from %s�in %s�interface�submit�todo�trait�Project-Id-Version: 1.0.0 Report-Msgid-Bugs-To: williamdes@wdes.fr PO-Revision-Date: 2020-07-18 13:40+0200 Last-Translator: William Desportes <williamdes@wdes.fr> Language-Team: French <https://github.com/code-lts/doctum/> Language: fr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: Poedit 2.2.4 �Toutes les classes�Classe�Classe dans le namespace %s�Classes�Constantes�DĂŠtails�Exceptions�GĂŠnĂŠrĂŠ par %sDoctum, un gĂŠnĂŠrateur de documentation d'API, successeur de Sami%s.�Sommaire�Interface�Interfaces�MĂŠthode�MĂŠthode de la classe %s�MĂŠthodes�Namespace�Namespaces�Pas de description�Aucun rĂŠsultat trouvĂŠ�Paramètres�PropriĂŠtĂŠs�PropriĂŠtĂŠ de la classe %s�Valeur de retour�Rechercher�RĂŠsultats de recherche�Voir aussi�Cette page vous permet de rechercher dans la documentation de l'API des termes spĂŠcifiques. Entrez vos mots clefs de recherche dans la case ci-dessous et cliquez sur "Valider". La recherche sera effectuĂŠe sur les espaces de noms, les classes, les interfaces, les traits, les fonctions et les mĂŠthodes.�Afficher le menu�Trait�Traits�Voir la source�Ă  la ligne %s�classe�dĂŠprĂŠciĂŠ�depuis %s�dans %s�interface�Valider�todo�trait�<?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Store; use Doctum\Project; use Doctum\Reflection\ClassReflection; interface StoreInterface { public function readClass(Project $project, $name); public function writeClass(Project $project, ClassReflection $class); public function removeClass(Project $project, $name); public function readProject(Project $project); public function flushProject(Project $project); } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Store; use Doctum\Project; use Doctum\Reflection\ClassReflection; use Symfony\Component\Filesystem\Filesystem; use Symfony\Component\Finder\Finder; class JsonStore implements StoreInterface { private const JSON_PRETTY_PRINT = 128; /** * @return ClassReflection A ClassReflection instance * * @throws \InvalidArgumentException if the class does not exist in the store */ public function readClass(Project $project, $name): ClassReflection { if (!file_exists($this->getFilename($project, $name))) { throw new \InvalidArgumentException(sprintf('File "%s" for class "%s" does not exist.', $this->getFilename($project, $name), $name)); } return ClassReflection::fromArray($project, json_decode(file_get_contents($this->getFilename($project, $name)), true)); } public function removeClass(Project $project, $name) { if (!file_exists($this->getFilename($project, $name))) { throw new \RuntimeException(sprintf('Unable to remove the "%s" class.', $name)); } unlink($this->getFilename($project, $name)); } public function writeClass(Project $project, ClassReflection $class) { file_put_contents($this->getFilename($project, $class->getName()), json_encode($class->toArray(), self::JSON_PRETTY_PRINT)); } public function readProject(Project $project) { $classes = []; foreach (Finder::create()->name('c_*.json')->in($this->getStoreDir($project)) as $file) { $classes[] = ClassReflection::fromArray($project, json_decode(file_get_contents($file), true)); } return $classes; } public function flushProject(Project $project) { $filesystem = new Filesystem(); $filesystem->remove($this->getStoreDir($project)); } protected function getFilename($project, $name) { $dir = $this->getStoreDir($project); return $dir . '/c_' . md5($name) . '.json'; } protected function getStoreDir(Project $project) { $dir = $project->getCacheDir() . '/store'; if (!is_dir($dir)) { $filesystem = new Filesystem(); $filesystem->mkdir($dir); } return $dir; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Store; use Doctum\Project; use Doctum\Reflection\ClassReflection; /** * Stores classes in-memory. * * Mainly useful for unit tests. */ class ArrayStore implements StoreInterface { /** * @var array<string,ClassReflection> */ private $classes = []; public function setClasses($classes) { foreach ($classes as $class) { $this->classes[$class->getName()] = $class; } } public function readClass(Project $project, $name) { if (!isset($this->classes[$name])) { throw new \InvalidArgumentException(sprintf('Class "%s" does not exist.', $name)); } return $this->classes[$name]; } public function removeClass(Project $project, $name) { if (!isset($this->classes[$name])) { throw new \InvalidArgumentException(sprintf('Class "%s" does not exist.', $name)); } unset($this->classes[$name]); } public function writeClass(Project $project, ClassReflection $class) { $this->classes[$class->getName()] = $class; } public function readProject(Project $project) { return $this->classes; } public function flushProject(Project $project) { $this->classes = []; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Version; use Symfony\Component\Finder\Glob; use Symfony\Component\Process\Process; class GitVersionCollection extends VersionCollection { /** * @var \Closure */ protected $sorter; /** * @var \Closure */ protected $filter; /** * @var string */ protected $repo; /** * @var string */ protected $gitPath; public function __construct(string $repo) { $this->repo = $repo; $this->filter = function ($version) { foreach (['PR', 'RC', 'BETA', 'ALPHA'] as $str) { if (strpos($version, $str)) { return false; } } return true; }; $this->sorter = function ($a, $b) { return version_compare($a, $b, '>'); }; $this->gitPath = 'git'; } /** * @phpstan-return void */ protected function switchVersion(Version $version) { $process = new Process(['git', 'status', '--porcelain', '--untracked-files=no'], $this->repo); $process->run(); if (!$process->isSuccessful() || trim($process->getOutput())) { throw new \RuntimeException(sprintf('Unable to switch to version "%s" as the repository is not clean.', $version)); } $this->execute(['checkout', '-qf', (string) $version]); } public function setGitPath(string $path): void { $this->gitPath = $path; } public function setFilter(\Closure $filter): void { $this->filter = $filter; } public function setSorter(\Closure $sorter): void { $this->sorter = $sorter; } /** * @param \Closure|null $filter */ public function addFromTags($filter = null): self { $tags = array_filter(explode("\n", $this->execute(['tag']))); $versions = array_filter($tags, $this->filter); if (null !== $filter) { if (!$filter instanceof \Closure) { $regexes = []; foreach ((array) $filter as $f) { $regexes[] = Glob::toRegex($f); } $filter = function ($version) use ($regexes) { foreach ($regexes as $regex) { if (preg_match($regex, $version)) { return true; } } return false; }; } $versions = array_filter($versions, $filter); } usort($versions, $this->sorter); foreach ($versions as $version) { $version = new Version($version); $version->setFrozen(true); $this->add($version); } return $this; } protected function execute(array $arguments): string { array_unshift($arguments, $this->gitPath); $process = new Process($arguments, $this->repo); $process->run(); if (!$process->isSuccessful()) { throw new \RuntimeException(sprintf('Unable to run the command (%s).', $process->getErrorOutput())); } return $process->getOutput(); } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Version; class SingleVersionCollection extends VersionCollection { public function add($version, $longname = null) { $countable = is_array($this->versions) || $this->versions instanceof \Countable; if ($countable && count($this->versions)) { throw new \LogicException('A SingleVersionCollection can only contain one Version'); } parent::add($version, $longname); return $this; } protected function switchVersion(Version $version) { } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Version; class Version { /** * @var bool */ protected $isFrozen; /** * @var string */ protected $name; /** * @var string */ protected $longname; public function __construct(string $name, ?string $longname = null) { $this->name = $name; $this->longname = null === $longname ? $name : $longname; $this->isFrozen = false; } public function __toString() { return $this->name; } public function setName(string $name): void { $this->name = $name; } public function getName(): string { return $this->name; } public function getLongName(): ?string { return $this->longname; } public function setFrozen(bool $isFrozen): void { $this->isFrozen = $isFrozen; } public function isFrozen(): bool { return $this->isFrozen; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Version; use Doctum\Project; abstract class VersionCollection implements \Iterator, \Countable { /** * @var Version[]|mixed */ protected $versions = []; /** * @var int */ protected $indice; /** * @var Project */ protected $project; /** * @phpstan-param array|Version $versions */ public function __construct($versions) { $this->add($versions); } /** * @phpstan-return void */ abstract protected function switchVersion(Version $version); /** * @phpstan-return mixed */ public static function create() { $r = new \ReflectionClass(get_called_class()); return $r->newInstanceArgs(func_get_args()); } public function setProject(Project $project): void { $this->project = $project; } /** * @param array|string|Version $version * @param string $longname * @phpstan-return self */ public function add($version, $longname = null) { if (is_array($version)) { foreach ($version as $v) { $this->add($v); } } else { if (!$version instanceof Version) { $version = new Version($version, $longname); } $this->versions[] = $version; } return $this; } public function getVersions(): array { return $this->versions; } public function key(): int { return $this->indice; } public function current(): Version { return $this->versions[$this->indice]; } public function next(): void { ++$this->indice; } public function rewind(): void { $this->indice = 0; } public function valid(): bool { if ($this->indice < count($this->versions)) { $this->switchVersion($this->current()); return true; } return false; } public function count(): int { return count($this->versions); } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum; /** * @author Fabien Potencier <fabien@symfony.com> */ class Message { public const PARSE_ERROR = 1; public const PARSE_CLASS = 2; public const PARSE_VERSION_FINISHED = 3; public const RENDER_PROGRESS = 4; public const RENDER_VERSION_FINISHED = 5; public const SWITCH_VERSION = 6; } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum; use Doctum\Parser\Parser; use Doctum\Reflection\ClassReflection; use Doctum\Reflection\LazyClassReflection; use Doctum\Renderer\Renderer; use Doctum\RemoteRepository\AbstractRemoteRepository; use Doctum\Store\StoreInterface; use Doctum\Version\SingleVersionCollection; use Doctum\Version\Version; use Doctum\Version\VersionCollection; use Symfony\Component\Filesystem\Filesystem; /** * Project represents an API project. * * @author Fabien Potencier <fabien@symfony.com> */ class Project { protected $versions; protected $store; /** @var Parser */ protected $parser; /** @var Renderer */ protected $renderer; /** @var ClassReflection[] */ protected $classes; protected $namespaceClasses; protected $namespaceInterfaces; protected $namespaceExceptions; protected $namespaces; protected $config; protected $version; protected $filesystem; protected $interfaces; public function __construct(StoreInterface $store, VersionCollection $versions = null, array $config = []) { if (null === $versions) { $versions = new SingleVersionCollection(new Version('main')); } $this->versions = $versions; $this->store = $store; $this->config = array_merge([ 'build_dir' => sys_get_temp_dir() . 'doctum/build', 'cache_dir' => sys_get_temp_dir() . 'doctum/cache', 'include_parent_data' => true, 'theme' => 'default', ], $config); $this->filesystem = new Filesystem(); if (count($this->versions) > 1) { foreach (['build_dir', 'cache_dir'] as $dir) { if (false === strpos($this->config[$dir], '%version%')) { throw new \LogicException(sprintf('The "%s" setting must have the "%%version%%" placeholder as the project has more than one version.', $dir)); } } } $this->initialize(); } public function setRenderer(Renderer $renderer): void { $this->renderer = $renderer; } public function setParser(Parser $parser): void { $this->parser = $parser; } public function getConfig($name, $default = null) { return $this->config[$name] ?? $default; } public function getVersion(): string { return $this->version; } public function getVersions(): array { return $this->versions->getVersions(); } public function update($callback = null, $force = false): void { foreach ($this->versions as $version) { $this->switchVersion($version, $callback, $force); $this->parseVersion($version, null, $callback, $force); $this->renderVersion($version, null, $callback, $force); } } public function parse($callback = null, $force = false): void { $previous = null; foreach ($this->versions as $version) { $this->switchVersion($version, $callback, $force); $this->parseVersion($version, $previous, $callback, $force); $previous = $this->getCacheDir(); } } public function render($callback = null, $force = false): void { $previous = null; foreach ($this->versions as $version) { // here, we don't want to flush the parse cache, as we are rendering $this->switchVersion($version, $callback, false); $this->renderVersion($version, $previous, $callback, $force); $previous = $this->getBuildDir(); } } public function switchVersion(Version $version, $callback = null, $force = false): void { if (null !== $callback) { call_user_func($callback, Message::SWITCH_VERSION, $version); } $this->version = $version; $this->initialize(); if (!$force) { $this->read(); } } public function hasNamespaces(): bool { // if there is only one namespace and this is the global one, it means that there is no namespace in the project return [''] != array_keys($this->namespaces); } public function hasNamespace(string $namespace): bool { return array_key_exists($namespace, $this->namespaces); } public function getNamespaces(): array { ksort($this->namespaces); return array_keys($this->namespaces); } public function getNamespaceAllClasses($namespace) { $classes = array_merge( $this->getNamespaceExceptions($namespace), $this->getNamespaceInterfaces($namespace), $this->getNamespaceClasses($namespace) ); ksort($classes); return $classes; } public function getNamespaceExceptions($namespace) { if (!isset($this->namespaceExceptions[$namespace])) { return []; } ksort($this->namespaceExceptions[$namespace]); return $this->namespaceExceptions[$namespace]; } public function getNamespaceClasses($namespace) { if (!isset($this->namespaceClasses[$namespace])) { return []; } ksort($this->namespaceClasses[$namespace]); return $this->namespaceClasses[$namespace]; } public function getNamespaceInterfaces($namespace) { if (!isset($this->namespaceInterfaces[$namespace])) { return []; } ksort($this->namespaceInterfaces[$namespace]); return $this->namespaceInterfaces[$namespace]; } public function getNamespaceSubNamespaces($parent): array { $prefix = strlen($parent) ? ($parent . '\\') : ''; $len = strlen($prefix); $namespaces = []; foreach ($this->namespaces as $sub) { $prefixMatch = substr($sub, 0, $len) === $prefix; if ($prefixMatch && strpos(substr($sub, $len), '\\') === false) { $namespaces[] = $sub; } } return $namespaces; } public function addClass(ClassReflection $class): void { $this->classes[$class->getName()] = $class; $class->setProject($this); if ($class->isProjectClass()) { $this->updateCache($class); } } public function removeClass(ClassReflection $class): void { unset($this->classes[$class->getName()]); unset($this->interfaces[$class->getName()]); unset($this->namespaceClasses[$class->getNamespace()][$class->getName()]); unset($this->namespaceInterfaces[$class->getNamespace()][$class->getName()]); unset($this->namespaceExceptions[$class->getNamespace()][$class->getName()]); } public function getProjectInterfaces(): array { $interfaces = []; foreach ($this->interfaces as $interface) { if ($interface->isProjectClass()) { $interfaces[$interface->getName()] = $interface; } } ksort($interfaces); return $interfaces; } public function getProjectClasses(): array { $classes = []; foreach ($this->classes as $name => $class) { if ($class->isProjectClass()) { $classes[$name] = $class; } } ksort($classes); return $classes; } public function getClass(string $name): ClassReflection { $name = ltrim($name, '\\'); if (isset($this->classes[$name])) { return $this->classes[$name]; } $class = new LazyClassReflection($name); $this->addClass($class); return $class; } /** * this must only be used in LazyClassReflection to get the right values */ public function loadClass(string $name): ?ClassReflection { $name = ltrim($name, '\\'); if ($this->getClass($name) instanceof LazyClassReflection) { try { $this->addClass($this->store->readClass($this, $name)); } catch (\InvalidArgumentException $e) { // probably a PHP built-in class return null; } } return $this->classes[$name]; } public function initialize() { $this->namespaces = []; $this->interfaces = []; $this->classes = []; $this->namespaceClasses = []; $this->namespaceInterfaces = []; $this->namespaceExceptions = []; } public function read(): void { $this->initialize(); foreach ($this->store->readProject($this) as $class) { $this->addClass($class); } } public function getBuildDir() { return $this->prepareDir($this->config['build_dir']); } public function getCacheDir() { return $this->prepareDir($this->config['cache_dir']); } public function flushDir(string $dir): void { $this->filesystem->remove($dir); $this->filesystem->mkdir($dir); file_put_contents($dir . '/DOCTUM_VERSION', Doctum::VERSION); file_put_contents($dir . '/PROJECT_VERSION', $this->version); } public function seedCache(string $previous, string $current): void { $this->filesystem->remove($current); $this->filesystem->mirror($previous, $current); $this->read(); } public static function isPhpTypeHint($hint): bool { return in_array(strtolower($hint), ['', 'scalar', 'object', 'boolean', 'bool', 'true', 'false', 'int', 'integer', 'array', 'string', 'mixed', 'void', 'null', 'resource', 'double', 'float', 'callable', '$this']); } protected function updateCache(ClassReflection $class) { $name = $class->getName(); $this->namespaces[$class->getNamespace()] = $class->getNamespace(); // add sub-namespaces $namespace = $class->getNamespace(); while ($namespace = substr($namespace, 0, strrpos($namespace, '\\'))) { $this->namespaces[$namespace] = $namespace; } if ($class->isException()) { $this->namespaceExceptions[$class->getNamespace()][$name] = $class; } elseif ($class->isInterface()) { $this->namespaceInterfaces[$class->getNamespace()][$name] = $class; $this->interfaces[$name] = $class; } else { $this->namespaceClasses[$class->getNamespace()][$name] = $class; } } protected function prepareDir($dir) { static $prepared = []; $dir = $this->replaceVars($dir); if (isset($prepared[$dir])) { return $dir; } $prepared[$dir] = true; if (!is_dir($dir)) { $this->flushDir($dir); return $dir; } $doctumVersion = null; if (file_exists($dir . '/DOCTUM_VERSION')) { $doctumVersion = file_get_contents($dir . '/DOCTUM_VERSION'); } if (Doctum::VERSION !== $doctumVersion) { $this->flushDir($dir); } return $dir; } protected function replaceVars(string $pattern): string { return str_replace('%version%', $this->version, $pattern); } protected function parseVersion(Version $version, $previous, $callback = null, $force = false): void { if (null === $this->parser) { throw new \LogicException('You must set a parser.'); } if ($version->isFrozen() && count($this->classes) > 0) { return; } if ($force) { $this->store->flushProject($this); } if ($previous && 0 === count($this->classes)) { $this->seedCache($previous, $this->getCacheDir()); } $transaction = $this->parser->parse($this, $callback); if (null !== $callback) { call_user_func($callback, Message::PARSE_VERSION_FINISHED, $transaction); } } protected function renderVersion(Version $version, $previous, $callback = null, $force = false): void { if (null === $this->renderer) { throw new \LogicException('You must set a renderer.'); } $frozen = $version->isFrozen() && $this->renderer->isRendered($this) && $this->version === file_get_contents($this->getBuildDir() . '/PROJECT_VERSION'); if ($force && !$frozen) { $this->flushDir($this->getBuildDir()); } if ($previous && !$this->renderer->isRendered($this)) { $this->seedCache($previous, $this->getBuildDir()); } $diff = $this->renderer->render($this, $callback, $force); if (null !== $callback) { call_user_func($callback, Message::RENDER_VERSION_FINISHED, $diff); } } public function getSourceRoot() { $root = $this->getConfig('source_url'); if (! $root) { return; } if (strpos($root, 'github') !== false) { return $root . '/tree/' . $this->version; } } public function getViewSourceUrl($relativePath, $line) { $remoteRepository = $this->getConfig('remote_repository'); if ($remoteRepository instanceof AbstractRemoteRepository) { return $remoteRepository->getFileUrl($this->version, $relativePath, $line); } return ''; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum; class Indexer { private const TYPE_CLASS = 1; private const TYPE_METHOD = 2; private const TYPE_NAMESPACE = 3; public function getIndex(Project $project) { $index = [ 'searchIndex' => [], 'info' => [], ]; foreach ($project->getNamespaces() as $namespace) { $index['searchIndex'][] = $this->getSearchString($namespace); $index['info'][] = [self::TYPE_NAMESPACE, $namespace]; } foreach ($project->getProjectClasses() as $class) { $index['searchIndex'][] = $this->getSearchString((string) $class); $index['info'][] = [self::TYPE_CLASS, $class]; } foreach ($project->getProjectClasses() as $class) { foreach ($class->getMethods() as $method) { $index['searchIndex'][] = $this->getSearchString((string) $method); $index['info'][] = [self::TYPE_METHOD, $method]; } } return $index; } protected function getSearchString($string) { return strtolower(preg_replace("/\s+/", '', $string)); } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Reflection; use Doctum\Project; class MethodReflection extends Reflection { protected $class; protected $parameters = []; protected $byRef; protected $modifiers; protected $exceptions = []; protected $errors = []; public function __toString() { return $this->class . '::' . $this->name; } public function setByRef($boolean) { $this->byRef = $boolean; } public function isByRef() { return $this->byRef; } public function setModifiers($modifiers) { // if no modifiers, method is public if (0 === ($modifiers & self::VISIBILITY_MODIFER_MASK)) { $modifiers |= self::MODIFIER_PUBLIC; } $this->modifiers = $modifiers; } public function isPublic() { return self::MODIFIER_PUBLIC === (self::MODIFIER_PUBLIC & $this->modifiers); } public function isProtected() { return self::MODIFIER_PROTECTED === (self::MODIFIER_PROTECTED & $this->modifiers); } public function isPrivate() { return self::MODIFIER_PRIVATE === (self::MODIFIER_PRIVATE & $this->modifiers); } public function isStatic() { return self::MODIFIER_STATIC === (self::MODIFIER_STATIC & $this->modifiers); } public function isAbstract() { return self::MODIFIER_ABSTRACT === (self::MODIFIER_ABSTRACT & $this->modifiers); } public function isFinal() { return self::MODIFIER_FINAL === (self::MODIFIER_FINAL & $this->modifiers); } public function getClass() { return $this->class; } public function setClass(ClassReflection $class) { $this->class = $class; } public function addParameter(ParameterReflection $parameter) { $this->parameters[$parameter->getName()] = $parameter; $parameter->setMethod($this); } public function getParameters() { return $this->parameters; } public function getParameter($name) { if (ctype_digit((string) $name)) { $tmp = array_values($this->parameters); return $tmp[$name] ?? null; } return $this->parameters[$name] ?? null; } /* * Can be any iterator (so that we can lazy-load the parameters) */ public function setParameters($parameters) { $this->parameters = $parameters; } public function setExceptions($exceptions) { $this->exceptions = $exceptions; } public function getExceptions() { $exceptions = []; foreach ($this->exceptions as $exception) { $exception[0] = $this->class->getProject()->getClass($exception[0]); $exceptions[] = $exception; } return $exceptions; } public function getRawExceptions() { return $this->exceptions; } public function getErrors() { return $this->errors; } public function setErrors($errors) { $this->errors = $errors; } public function getSourcePath() { return $this->class->getSourcePath($this->line); } public function toArray() { return [ 'name' => $this->name, 'line' => $this->line, 'short_desc' => $this->shortDesc, 'long_desc' => $this->longDesc, 'hint' => $this->hint, 'hint_desc' => $this->hintDesc, 'tags' => $this->tags, 'modifiers' => $this->modifiers, 'is_by_ref' => $this->byRef, 'exceptions' => $this->exceptions, 'errors' => $this->errors, 'parameters' => array_map(function ($parameter) { return $parameter->toArray(); }, $this->parameters), ]; } public static function fromArray(Project $project, $array) { $method = new self($array['name'], $array['line']); $method->shortDesc = $array['short_desc']; $method->longDesc = $array['long_desc']; $method->hint = $array['hint']; $method->hintDesc = $array['hint_desc']; $method->tags = $array['tags']; $method->modifiers = $array['modifiers']; $method->byRef = $array['is_by_ref']; $method->exceptions = $array['exceptions']; $method->errors = $array['errors']; foreach ($array['parameters'] as $parameter) { $method->addParameter(ParameterReflection::fromArray($project, $parameter)); } return $method; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Reflection; class LazyClassReflection extends ClassReflection { protected $loaded = false; public function __construct($name) { parent::__construct($name, -1); } public function isProjectClass(): bool { if (false === $this->loaded) { $this->load(); } return parent::isProjectClass(); } public function getShortDesc() { if (false === $this->loaded) { $this->load(); } return parent::getShortDesc(); } public function setShortDesc($shortDesc) { throw new \LogicException('A LazyClassReflection instance is read-only.'); } public function getLongDesc() { if (false === $this->loaded) { $this->load(); } return parent::getLongDesc(); } public function setLongDesc($longDesc) { throw new \LogicException('A LazyClassReflection instance is read-only.'); } public function getHint() { if (false === $this->loaded) { $this->load(); } return parent::getHint(); } public function setHint($hint) { throw new \LogicException('A LazyClassReflection instance is read-only.'); } public function isAbstract() { if (false === $this->loaded) { $this->load(); } return parent::isAbstract(); } public function isFinal() { if (false === $this->loaded) { $this->load(); } return parent::isFinal(); } public function getFile() { if (false === $this->loaded) { $this->load(); } return parent::getFile(); } public function setFile($file) { throw new \LogicException('A LazyClassReflection instance is read-only.'); } public function setModifiers($modifiers) { throw new \LogicException('A LazyClassReflection instance is read-only.'); } public function addProperty(PropertyReflection $property) { throw new \LogicException('A LazyClassReflection instance is read-only.'); } public function getProperties($deep = false) { if (false === $this->loaded) { $this->load(); } return parent::getProperties($deep); } public function setProperties($properties) { throw new \LogicException('A LazyClassReflection instance is read-only.'); } public function addMethod(MethodReflection $method) { throw new \LogicException('A LazyClassReflection instance is read-only.'); } public function getParentMethod($name) { if (false === $this->loaded) { $this->load(); } return parent::getParentMethod($name); } public function getMethods($deep = false) { if (false === $this->loaded) { $this->load(); } return parent::getMethods($deep); } public function setMethods($methods) { throw new \LogicException('A LazyClassReflection instance is read-only.'); } public function addInterface($interface) { throw new \LogicException('A LazyClassReflection instance is read-only.'); } public function getInterfaces($deep = false) { if (false === $this->loaded) { $this->load(); } return parent::getInterfaces($deep); } public function setParent($parent) { throw new \LogicException('A LazyClassReflection instance is read-only.'); } public function getParent($deep = false) { if (false === $this->loaded) { $this->load(); } return parent::getParent($deep); } public function setInterface($boolean) { throw new \LogicException('A LazyClassReflection instance is read-only.'); } public function isInterface() { if (false === $this->loaded) { $this->load(); } return parent::isInterface(); } public function isException() { if (false === $this->loaded) { $this->load(); } return parent::isException(); } public function getAliases() { if (false === $this->loaded) { $this->load(); } return parent::getAliases(); } public function setAliases($aliases) { throw new \LogicException('A LazyClassReflection instance is read-only.'); } protected function load() { $class = $this->project->loadClass($this->name); if (null === $class) { $this->projectClass = false; } else { foreach (array_keys(get_class_vars(ClassReflection::class)) as $property) { $this->$property = $class->$property; } } $this->loaded = true; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Reflection; use Doctum\Project; class ParameterReflection extends Reflection { protected $method; protected $byRef; protected $modifiers; protected $default; protected $variadic; public function __toString() { return $this->method . '#' . $this->name; } public function getClass() { return $this->method->getClass(); } public function setModifiers($modifiers) { $this->modifiers = $modifiers; } public function setByRef($boolean) { $this->byRef = $boolean; } public function isByRef() { return $this->byRef; } public function setDefault($default) { $this->default = $default; } public function getDefault() { return $this->default; } public function setVariadic($variadic) { $this->variadic = $variadic; } public function getVariadic() { return $this->variadic; } public function getMethod() { return $this->method; } public function setMethod(MethodReflection $method) { $this->method = $method; } public function toArray() { return [ 'name' => $this->name, 'line' => $this->line, 'short_desc' => $this->shortDesc, 'long_desc' => $this->longDesc, 'hint' => $this->hint, 'tags' => $this->tags, 'modifiers' => $this->modifiers, 'default' => $this->default, 'variadic' => $this->variadic, 'is_by_ref' => $this->byRef, ]; } public static function fromArray(Project $project, $array) { $parameter = new self($array['name'], $array['line']); $parameter->shortDesc = $array['short_desc']; $parameter->longDesc = $array['long_desc']; $parameter->hint = $array['hint']; $parameter->tags = $array['tags']; $parameter->modifiers = $array['modifiers']; $parameter->default = $array['default']; $parameter->variadic = $array['variadic']; $parameter->byRef = $array['is_by_ref']; return $parameter; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Reflection; use Doctum\Project; abstract class Reflection { public const MODIFIER_PUBLIC = 1; public const MODIFIER_PROTECTED = 2; public const MODIFIER_PRIVATE = 4; public const MODIFIER_STATIC = 8; public const MODIFIER_ABSTRACT = 16; public const MODIFIER_FINAL = 32; protected const VISIBILITY_MODIFER_MASK = 7; // 1 | 2 | 4 /** @var string */ protected $name; protected $line; protected $shortDesc; protected $longDesc; protected $hint; protected $hintDesc; protected $tags; protected $docComment; protected $see = []; public function __construct(string $name, $line) { $this->name = $name; $this->line = $line; $this->tags = []; } abstract public function getClass(); public function getName(): string { return $this->name; } public function setName(string $name): void { $this->name = $name; } public function getLine() { return $this->line; } public function setLine($line) { $this->line = $line; } public function getShortDesc() { return $this->shortDesc; } public function setShortDesc($shortDesc) { $this->shortDesc = $shortDesc; } public function getLongDesc() { return $this->longDesc; } public function setLongDesc($longDesc) { $this->longDesc = $longDesc; } public function getHint() { if (! is_array($this->hint)) { return []; } $hints = []; $project = $this->getClass()->getProject(); foreach ($this->hint as $hint) { $hints[] = new HintReflection(Project::isPhpTypeHint($hint[0]) ? $hint[0] : $project->getClass($hint[0]), $hint[1]); } return $hints; } public function getHintAsString() { $str = []; foreach ($this->getHint() as $hint) { $str[] = ($hint->isClass() ? $hint->getName()->getShortName() : $hint->getName()) . ($hint->isArray() ? '[]' : ''); } return implode('|', $str); } public function hasHint() { return $this->hint ? true : false; } public function setHint($hint) { $this->hint = $hint; } public function getRawHint() { return $this->hint; } public function setHintDesc($desc) { $this->hintDesc = $desc; } public function getHintDesc() { return $this->hintDesc; } public function setTags($tags) { $this->tags = $tags; } public function getTags($name) { return $this->tags[$name] ?? []; } public function getDeprecated() { return $this->getTags('deprecated'); } public function getTodo() { return $this->getTags('todo'); } // not serialized as it is only useful when parsing public function setDocComment($comment) { $this->docComment = $comment; } public function getDocComment() { return $this->docComment; } /** * @return array */ public function getSee() { $see = []; /** @var Project $project */ $project = $this->getClass()->getProject(); foreach ($this->see as $seeElem) { if ($seeElem[3]) { $seeElem = $this->prepareMethodSee($seeElem); } elseif ($seeElem[2]) { $seeElem[2] = Project::isPhpTypeHint($seeElem[2]) ? $seeElem[2] : $project->getClass($seeElem[2]); } $see[] = $seeElem; } return $see; } public function setSee(array $see) { $this->see = $see; } private function prepareMethodSee(array $seeElem) { /** @var Project $project */ $project = $this->getClass()->getProject(); $class = $project->getClass($seeElem[2]); $method = $class->getMethod($seeElem[3]); if ($method) { $seeElem[2] = false; $seeElem[3] = $method; } else { $seeElem[2] = false; $seeElem[3] = false; } return $seeElem; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Reflection; use Doctum\Project; class ConstantReflection extends Reflection { protected $class; public function __toString() { return $this->class . '::' . $this->name; } public function getClass() { return $this->class; } public function setClass(ClassReflection $class) { $this->class = $class; } public function toArray() { return [ 'name' => $this->name, 'line' => $this->line, 'short_desc' => $this->shortDesc, 'long_desc' => $this->longDesc, ]; } public static function fromArray(Project $project, $array) { $constant = new self($array['name'], $array['line']); $constant->shortDesc = $array['short_desc']; $constant->longDesc = $array['long_desc']; return $constant; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Reflection; use Doctum\Project; class ClassReflection extends Reflection { private const CATEGORY_CLASS = 1; private const CATEGORY_INTERFACE = 2; private const CATEGORY_TRAIT = 3; private static $phpInternalClasses = [ 'stdclass' => true, 'exception' => true, 'errorexception' => true, 'error' => true, 'parseerror' => true, 'typeerror' => true, 'arithmeticerror' => true, 'divisionbyzeroerror' => true, 'closure' => true, 'generator' => true, 'closedgeneratorexception' => true, 'datetime' => true, 'datetimeimmutable' => true, 'datetimezone' => true, 'dateinterval' => true, 'dateperiod' => true, 'libxmlerror' => true, 'sqlite3' => true, 'sqlite3stmt' => true, 'sqlite3result' => true, 'domexception' => true, 'domstringlist' => true, 'domnamelist' => true, 'domimplementationlist' => true, 'domimplementationsource' => true, 'domimplementation' => true, 'domnode' => true, 'domnamespacenode' => true, 'domdocumentfragment' => true, 'domdocument' => true, 'domnodelist' => true, 'domnamednodemap' => true, 'domcharacterdata' => true, 'domattr' => true, 'domelement' => true, 'domtext' => true, 'domcomment' => true, 'domtypeinfo' => true, 'domuserdatahandler' => true, 'domdomerror' => true, 'domerrorhandler' => true, 'domlocator' => true, 'domconfiguration' => true, 'domcdatasection' => true, 'domdocumenttype' => true, 'domnotation' => true, 'domentity' => true, 'domentityreference' => true, 'domprocessinginstruction' => true, 'domstringextend' => true, 'domxpath' => true, 'finfo' => true, 'logicexception' => true, 'badfunctioncallexception' => true, 'badmethodcallexception' => true, 'domainexception' => true, 'invalidargumentexception' => true, 'lengthexception' => true, 'outofrangeexception' => true, 'runtimeexception' => true, 'outofboundsexception' => true, 'overflowexception' => true, 'rangeexception' => true, 'underflowexception' => true, 'unexpectedvalueexception' => true, 'recursiveiteratoriterator' => true, 'iteratoriterator' => true, 'filteriterator' => true, 'recursivefilteriterator' => true, 'callbackfilteriterator' => true, 'recursivecallbackfilteriterator' => true, 'parentiterator' => true, 'limititerator' => true, 'cachingiterator' => true, 'recursivecachingiterator' => true, 'norewinditerator' => true, 'appenditerator' => true, 'infiniteiterator' => true, 'regexiterator' => true, 'recursiveregexiterator' => true, 'emptyiterator' => true, 'recursivetreeiterator' => true, 'arrayobject' => true, 'arrayiterator' => true, 'recursivearrayiterator' => true, 'splfileinfo' => true, 'directoryiterator' => true, 'filesystemiterator' => true, 'recursivedirectoryiterator' => true, 'globiterator' => true, 'splfileobject' => true, 'spltempfileobject' => true, 'spldoublylinkedlist' => true, 'splqueue' => true, 'splstack' => true, 'splheap' => true, 'splminheap' => true, 'splmaxheap' => true, 'splpriorityqueue' => true, 'splfixedarray' => true, 'splobjectstorage' => true, 'multipleiterator' => true, 'pdoexception' => true, 'pdo' => true, 'pdostatement' => true, 'pdorow' => true, 'sessionhandler' => true, 'reflectionexception' => true, 'reflection' => true, 'reflectionfunctionabstract' => true, 'reflectionfunction' => true, 'reflectiongenerator' => true, 'reflectionparameter' => true, 'reflectiontype' => true, 'reflectionmethod' => true, 'reflectionclass' => true, 'reflectionobject' => true, 'reflectionproperty' => true, 'reflectionextension' => true, 'reflectionzendextension' => true, '__php_incomplete_class' => true, 'php_user_filter' => true, 'directory' => true, 'assertionerror' => true, 'simplexmlelement' => true, 'simplexmliterator' => true, 'pharexception' => true, 'phar' => true, 'phardata' => true, 'pharfileinfo' => true, 'xmlreader' => true, 'xmlwriter' => true, 'collator' => true, 'numberformatter' => true, 'normalizer' => true, 'locale' => true, 'messageformatter' => true, 'intldateformatter' => true, 'resourcebundle' => true, 'transliterator' => true, 'intltimezone' => true, 'intlcalendar' => true, 'intlgregoriancalendar' => true, 'spoofchecker' => true, 'intlexception' => true, 'intliterator' => true, 'intlbreakiterator' => true, 'intlrulebasedbreakiterator' => true, 'intlcodepointbreakiterator' => true, 'intlpartsiterator' => true, 'uconverter' => true, 'intlchar' => true, 'traversable' => true, 'iteratoraggregate' => true, 'iterator' => true, 'arrayaccess' => true, 'serializable' => true, 'throwable' => true, 'datetimeinterface' => true, 'jsonserializable' => true, 'recursiveiterator' => true, 'outeriterator' => true, 'countable' => true, 'seekableiterator' => true, 'splobserver' => true, 'splsubject' => true, 'sessionhandlerinterface' => true, 'sessionidinterface' => true, 'sessionupdatetimestamphandlerinterface' => true, 'reflector' => true, ]; /** @var Project */ protected $project; protected $hash; protected $namespace; protected $modifiers; protected $properties = []; protected $methods = []; protected $interfaces = []; protected $constants = []; protected $traits = []; protected $parent; protected $file; protected $relativeFilePath; protected $category = self::CATEGORY_CLASS; protected $projectClass = true; protected $aliases = []; protected $errors = []; protected $fromCache = false; public function __toString() { return $this->name; } public function getClass() { return $this; } public function getCategoryId(): int { return $this->category; } public function isProjectClass(): bool { return $this->projectClass; } public function isPhpClass(): bool { return isset(self::$phpInternalClasses[strtolower($this->name)]); } public function setName(string $name): void { parent::setName(ltrim($name, '\\')); } public function getShortName() { $pos = strrpos($this->name, '\\'); if ($pos !== false) { return substr($this->name, $pos + 1); } return $this->name; } public function isAbstract() { return self::MODIFIER_ABSTRACT === (self::MODIFIER_ABSTRACT & $this->modifiers); } public function isFinal() { return self::MODIFIER_FINAL === (self::MODIFIER_FINAL & $this->modifiers); } public function getHash() { return $this->hash; } public function setHash($hash) { $this->hash = $hash; } public function getFile() { return $this->file; } public function setFile($file) { $this->file = $file; } public function setRelativeFilePath($relativeFilePath) { $this->relativeFilePath = $relativeFilePath; } public function getRelativeFilePath() { return $this->relativeFilePath; } public function getSourcePath($line = null) { if (null === $this->relativeFilePath) { return ''; } return $this->project->getViewSourceUrl($this->relativeFilePath, $line); } /** * @return Project */ public function getProject() { return $this->project; } public function setProject(Project $project) { $this->project = $project; } public function setNamespace($namespace) { $this->namespace = ltrim($namespace, '\\'); } public function getNamespace() { return $this->namespace; } public function setModifiers($modifiers) { $this->modifiers = $modifiers; } public function addProperty(PropertyReflection $property) { $this->properties[$property->getName()] = $property; $property->setClass($this); } public function getProperties($deep = false) { if (false === $deep) { return $this->properties; } $properties = []; if ($this->getParent()) { foreach ($this->getParent()->getProperties(true) as $name => $property) { $properties[$name] = $property; } } foreach ($this->getTraits(true) as $trait) { foreach ($trait->getProperties(true) as $name => $property) { $properties[$name] = $property; } } foreach ($this->properties as $name => $property) { $properties[$name] = $property; } return $properties; } /* * Can be any iterator (so that we can lazy-load the properties) */ public function setProperties($properties) { $this->properties = $properties; } public function addConstant(ConstantReflection $constant) { $this->constants[$constant->getName()] = $constant; $constant->setClass($this); } public function getConstants($deep = false) { if (false === $deep) { return $this->constants; } $constants = []; if ($this->getParent()) { foreach ($this->getParent()->getConstants(true) as $name => $constant) { $constants[$name] = $constant; } } foreach ($this->constants as $name => $constant) { $constants[$name] = $constant; } return $constants; } public function setConstants($constants) { $this->constants = $constants; } public function addMethod(MethodReflection $method) { $this->methods[$method->getName()] = $method; $method->setClass($this); } public function getMethod($name) { return $this->methods[$name] ?? false; } public function getParentMethod($name) { if ($this->getParent()) { foreach ($this->getParent()->getMethods(true) as $n => $method) { if ($name == $n) { return $method; } } } foreach ($this->getInterfaces(true) as $interface) { foreach ($interface->getMethods(true) as $n => $method) { if ($name == $n) { return $method; } } } } public function getMethods($deep = false) { if (false === $deep) { return $this->methods; } $methods = []; if ($this->isInterface()) { foreach ($this->getInterfaces(true) as $interface) { foreach ($interface->getMethods(true) as $name => $method) { $methods[$name] = $method; } } } if ($this->getParent()) { foreach ($this->getParent()->getMethods(true) as $name => $method) { $methods[$name] = $method; } } foreach ($this->getTraits(true) as $trait) { foreach ($trait->getMethods(true) as $name => $method) { $methods[$name] = $method; } } foreach ($this->methods as $name => $method) { $methods[$name] = $method; } return $methods; } public function setMethods($methods) { $this->methods = $methods; } public function addInterface($interface) { $this->interfaces[$interface] = $interface; } public function getInterfaces($deep = false) { $interfaces = []; foreach ($this->interfaces as $interface) { $interfaces[] = $this->project->getClass($interface); } if (false === $deep) { return $interfaces; } $allInterfaces = $interfaces; foreach ($interfaces as $interface) { $allInterfaces = array_merge($allInterfaces, $interface->getInterfaces(true)); } if ($parent = $this->getParent()) { $allInterfaces = array_merge($allInterfaces, $parent->getInterfaces(true)); } return $allInterfaces; } public function addTrait($trait) { $this->traits[$trait] = $trait; } public function getTraits($deep = false) { $traits = []; foreach ($this->traits as $trait) { $traits[] = $this->project->getClass($trait); } if (false === $deep) { return $traits; } $allTraits = $traits; foreach ($traits as $trait) { $allTraits = array_merge($allTraits, $trait->getTraits(true)); } if ($parent = $this->getParent()) { $allTraits = array_merge($allTraits, $parent->getTraits(true)); } return $allTraits; } public function setTraits($traits) { $this->traits = $traits; } public function setParent($parent) { $this->parent = $parent; } public function getParent($deep = false) { if (!$this->parent) { return $deep ? [] : null; } $parent = $this->project->getClass($this->parent); if (false === $deep) { return $parent; } return array_merge([$parent], $parent->getParent(true)); } public function setInterface($boolean) { $this->category = $boolean ? self::CATEGORY_INTERFACE : self::CATEGORY_CLASS; } public function isInterface() { return self::CATEGORY_INTERFACE === $this->category; } public function setTrait($boolean) { $this->category = $boolean ? self::CATEGORY_TRAIT : self::CATEGORY_CLASS; } public function isTrait() { return self::CATEGORY_TRAIT === $this->category; } public function setCategory($category) { $this->category = $category; } public function isException() { $parent = $this; while ($parent = $parent->getParent()) { if ('Exception' == $parent->getName()) { return true; } } return false; } public function getAliases() { return $this->aliases; } public function setAliases($aliases) { $this->aliases = $aliases; } public function getErrors() { return $this->errors; } public function setErrors($errors) { $this->errors = $errors; } public function isFromCache() { return $this->fromCache; } public function notFromCache() { $this->fromCache = false; } public function toArray() { return [ 'name' => $this->name, 'line' => $this->line, 'short_desc' => $this->shortDesc, 'long_desc' => $this->longDesc, 'hint' => $this->hint, 'tags' => $this->tags, 'namespace' => $this->namespace, 'file' => $this->file, 'relative_file' => $this->relativeFilePath, 'hash' => $this->hash, 'parent' => $this->parent, 'modifiers' => $this->modifiers, 'is_trait' => $this->isTrait(), 'is_interface' => $this->isInterface(), 'aliases' => $this->aliases, 'errors' => $this->errors, 'interfaces' => $this->interfaces, 'traits' => $this->traits, 'properties' => array_map(function ($property) { return $property->toArray(); }, $this->properties), 'methods' => array_map(function ($method) { return $method->toArray(); }, $this->methods), 'constants' => array_map(function ($constant) { return $constant->toArray(); }, $this->constants), ]; } public static function fromArray(Project $project, $array) { $class = new self($array['name'], $array['line']); $class->shortDesc = $array['short_desc']; $class->longDesc = $array['long_desc']; $class->hint = $array['hint']; $class->tags = $array['tags']; $class->namespace = $array['namespace']; $class->hash = $array['hash']; $class->file = $array['file']; $class->relativeFilePath = $array['relative_file']; $class->modifiers = $array['modifiers']; $class->fromCache = true; if ($array['is_interface']) { $class->setInterface(true); } if ($array['is_trait']) { $class->setTrait(true); } $class->aliases = $array['aliases']; $class->errors = $array['errors']; $class->parent = $array['parent']; $class->interfaces = $array['interfaces']; $class->constants = $array['constants']; $class->traits = $array['traits']; $class->setProject($project); foreach ($array['methods'] as $method) { $class->addMethod(MethodReflection::fromArray($project, $method)); } foreach ($array['properties'] as $property) { $class->addProperty(PropertyReflection::fromArray($project, $property)); } foreach ($array['constants'] as $constant) { $class->addConstant(ConstantReflection::fromArray($project, $constant)); } return $class; } public function sortInterfaces($sort) { if (is_callable($sort)) { uksort($this->interfaces, $sort); } else { ksort($this->interfaces); } } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Reflection; use Doctum\Project; class PropertyReflection extends Reflection { protected $class; protected $modifiers; protected $default; protected $errors = []; public function __toString() { return $this->class . '::$' . $this->name; } public function setModifiers($modifiers) { // if no modifiers, property is public if (0 === ($modifiers & self::VISIBILITY_MODIFER_MASK)) { $modifiers |= self::MODIFIER_PUBLIC; } $this->modifiers = $modifiers; } public function isPublic() { return self::MODIFIER_PUBLIC === (self::MODIFIER_PUBLIC & $this->modifiers); } public function isProtected() { return self::MODIFIER_PROTECTED === (self::MODIFIER_PROTECTED & $this->modifiers); } public function isPrivate() { return self::MODIFIER_PRIVATE === (self::MODIFIER_PRIVATE & $this->modifiers); } public function isStatic() { return self::MODIFIER_STATIC === (self::MODIFIER_STATIC & $this->modifiers); } public function isFinal() { return self::MODIFIER_FINAL === (self::MODIFIER_FINAL & $this->modifiers); } public function setDefault($default) { $this->default = $default; } public function getDefault() { return $this->default; } public function getClass() { return $this->class; } public function setClass(ClassReflection $class) { $this->class = $class; } public function getErrors() { return $this->errors; } public function setErrors($errors) { $this->errors = $errors; } public function toArray() { return [ 'name' => $this->name, 'line' => $this->line, 'short_desc' => $this->shortDesc, 'long_desc' => $this->longDesc, 'hint' => $this->hint, 'hint_desc' => $this->hintDesc, 'tags' => $this->tags, 'modifiers' => $this->modifiers, 'default' => $this->default, 'errors' => $this->errors, ]; } public static function fromArray(Project $project, $array) { $property = new self($array['name'], $array['line']); $property->shortDesc = $array['short_desc']; $property->longDesc = $array['long_desc']; $property->hint = $array['hint']; $property->hintDesc = $array['hint_desc']; $property->tags = $array['tags']; $property->modifiers = $array['modifiers']; $property->default = $array['default']; $property->errors = $array['errors']; return $property; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Reflection; class HintReflection { protected $name; protected $array; public function __construct($name, $array) { $this->name = $name; $this->array = $array; } public function __toString() { // We're casting name to string, as it can be eg. `ClassReflection` object. return (string) $this->name; } public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } public function isClass() { return $this->name instanceof ClassReflection; } public function isArray() { return $this->array; } public function setArray($boolean) { $this->array = (bool) $boolean; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Console\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; class RenderCommand extends Command { /** * @see Command * @phpstan-return void */ protected function configure() { parent::configure(); $this->addForceOption(); $this->addIgnoreParseErrors(); $this ->setName('render') ->setDescription('Renders a project') ->setHelp( <<<EOF The <info>%command.name%</info> command renders a project as a static set of HTML files: <info>php %command.full_name% render config/doctum.php</info> The <comment>--force</comment> option forces a rebuild (it disables the incremental rendering algorithm): <info>php %command.full_name% render config/doctum.php --force</info> The <comment>--version</comment> option overrides the version specified in the configuration: <info>php %command.full_name% render config/doctum.php --version=main</info> EOF ); } /** * @see Command * * @throws \InvalidArgumentException When the target directory does not exist */ protected function execute(InputInterface $input, OutputInterface $output) { $output->writeln('<bg=cyan;fg=white> Rendering project </>'); return $this->render($this->doctum['project']); } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Console\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; class ParseCommand extends Command { /** * @see Command * @phpstan-return void */ protected function configure() { parent::configure(); $this->addForceOption(); $this->addIgnoreParseErrors(); $this ->setName('parse') ->setDescription('Parses a project') ->setHelp( <<<EOF The <info>%command.name%</info> command parses a project and generates a database with API information: <info>php %command.full_name% config/symfony.php</info> The <comment>--force</comment> option forces a rebuild (it disables the incremental parsing algorithm): <info>php %command.full_name% config/symfony.php --force</info> The <comment>--version</comment> option overrides the version specified in the configuration: <info>php %command.full_name% config/symfony.php --version=main</info> EOF ); } /** * @see Command * * @throws \InvalidArgumentException When the target directory does not exist */ protected function execute(InputInterface $input, OutputInterface $output) { $output->writeln('<bg=cyan;fg=white> Parsing project </>'); return $this->parse($this->doctum['project']); } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Console\Command; use Doctum\Message; use Doctum\Parser\Transaction; use Doctum\Project; use Doctum\Renderer\Diff; use Doctum\Doctum; use Symfony\Component\Console\Command\Command as BaseCommand; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Filesystem\Filesystem; abstract class Command extends BaseCommand { private const PARSE_ERROR = 64; /** * @var Doctum */ protected $doctum; /** * @var string */ protected $version; /** * @var bool */ protected $started; /** * @var array<string,Diff> */ protected $diffs = []; /** * @var array<string,Transaction> */ protected $transactions = []; /** * @var string[] */ protected $errors = []; /** * @var InputInterface */ protected $input; /** * @var OutputInterface */ protected $output; /** * @see Command * @phpstan-return void */ protected function configure() { $this->getDefinition()->addArgument(new InputArgument('config', InputArgument::REQUIRED, 'The configuration file')); $this->getDefinition()->addOption(new InputOption('only-version', '', InputOption::VALUE_REQUIRED, 'The version to build')); } protected function addForceOption(): void { $this->getDefinition()->addOption(new InputOption('force', '', InputOption::VALUE_NONE, 'Forces to rebuild from scratch', null)); } protected function addIgnoreParseErrors(): void { $this->getDefinition()->addOption( new InputOption('ignore-parse-errors', '', InputOption::VALUE_NONE, 'Ignores parse errors and exits 0', null) ); } /** * @phpstan-return void */ protected function initialize(InputInterface $input, OutputInterface $output) { $this->input = $input; $this->output = $output; /** @var string $config */ $config = $input->getArgument('config'); $filesystem = new Filesystem(); if ($config && !$filesystem->isAbsolutePath($config)) { $config = getcwd() . '/' . $config; } if (!is_file($config)) { throw new \InvalidArgumentException(sprintf('Configuration file "%s" does not exist.', $config)); } $this->doctum = $this->loadDoctum($config); if ($input->getOption('only-version')) { $this->doctum['versions'] = $input->getOption('only-version'); } if (!$this->doctum instanceof Doctum) { throw new \RuntimeException(sprintf('Configuration file "%s" must return a Doctum instance.', $config)); } } public function update(Project $project): int { $callback = $this->output->isDecorated() ? [$this, 'messageCallback'] : null; $project->update($callback, $this->input->getOption('force')); $this->displayParseSummary(); $this->displayRenderSummary(); return $this->getExitCode(); } public function parse(Project $project): int { $project->parse([$this, 'messageCallback'], $this->input->getOption('force')); $this->displayParseSummary(); return $this->getExitCode(); } public function render(Project $project): int { $project->render([$this, 'messageCallback'], $this->input->getOption('force')); $this->displayRenderSummary(); return $this->getExitCode(); } private function getExitCode(): int { if ($this->input->getOption('ignore-parse-errors')) { return 0; } if (count($this->errors) > 0) { return self::PARSE_ERROR; } return 0; } /** * @param mixed $data */ public function messageCallback(int $message, $data): void { switch ($message) { case Message::PARSE_CLASS: [$progress, $class] = $data; $this->displayParseProgress($progress, $class); break; case Message::PARSE_ERROR: $this->errors = array_merge($this->errors, $data); break; case Message::SWITCH_VERSION: $this->version = $data; $this->errors = []; $this->started = false; $this->displaySwitch(); break; case Message::PARSE_VERSION_FINISHED: $this->transactions[(string) $this->version] = $data; $this->displayParseEnd($data); $this->started = false; break; case Message::RENDER_VERSION_FINISHED: $this->diffs[(string) $this->version] = $data; $this->displayRenderEnd($data); $this->started = false; break; case Message::RENDER_PROGRESS: [$section, $message, $progression] = $data; $this->displayRenderProgress($section, $message, $progression); break; } } public function renderProgressBar(float $percent, int $length): string { return str_repeat('#', (int) floor($percent / 100 * $length)) . sprintf(' %d%%', $percent) . str_repeat(' ', $length - ((int) floor($percent / 100 * $length))) ; } /** * @param \Doctum\Reflection\ClassReflection $class */ public function displayParseProgress(float $progress, $class): void { if ($this->started) { $this->output->isDecorated() && $this->output->write("\033[2A"); } $this->started = true; $this->output->isDecorated() && $this->output->write( sprintf( " Parsing <comment>%s</comment>%s\033[K\n %s\033[K\n", $this->renderProgressBar($progress, 50), count($this->errors) ? ' <fg=red>' . count($this->errors) . ' error' . (1 === count($this->errors) ? '' : 's') . '</>' : '', $class->getName() ) ); } public function displayRenderProgress(string $section, string $message, float $progression): void { if ($this->started) { $this->output->isDecorated() && $this->output->write("\033[2A"); } $this->started = true; $this->output->isDecorated() && $this->output->write(sprintf( " Rendering <comment>%s</comment>\033[K\n <info>%s</info> %s\033[K\n", $this->renderProgressBar($progression, 50), $section, $message )); } public function displayParseEnd(Transaction $transaction): void { if (!$this->started) { return; } $this->output->isDecorated() && $this->output->write( "\033[2A<info> Parsing done</info>\033[K\n\033[K\n\033[1A" ); if ($this->input->getOption('verbose') && count($this->errors)) { foreach ($this->errors as $error) { $this->output->write(sprintf('<fg=red>ERROR</>: ')); $this->output->writeln($error, OutputInterface::OUTPUT_RAW); } $this->output->writeln(''); } } public function displayRenderEnd(Diff $diff): void { if (!$this->started) { return; } $this->output->isDecorated() && $this->output->write("\033[2A<info> Rendering done</info>\033[K\n\033[K\n\033[1A"); } public function displayParseSummary(): void { if (count($this->transactions) <= 0) { return; } $this->output->writeln(''); $this->output->writeln('<bg=cyan;fg=white> Version </> <bg=cyan;fg=white> Updated C </> <bg=cyan;fg=white> Removed C </>'); foreach ($this->transactions as $version => $transaction) { $this->output->writeln(sprintf('%9s %11d %11d', $version, count($transaction->getModifiedClasses()), count($transaction->getRemovedClasses()))); } $this->output->writeln(''); } public function displayRenderSummary(): void { if (count($this->diffs) <= 0) { return; } $this->output->writeln('<bg=cyan;fg=white> Version </> <bg=cyan;fg=white> Updated C </> <bg=cyan;fg=white> Updated N </> <bg=cyan;fg=white> Removed C </> <bg=cyan;fg=white> Removed N </>'); foreach ($this->diffs as $version => $diff) { $this->output->writeln(sprintf( '%9s %11d %11d %11d %11d', $version, count($diff->getModifiedClasses()), count($diff->getModifiedNamespaces()), count($diff->getRemovedClasses()), count($diff->getRemovedNamespaces()) )); } $this->output->writeln(''); } public function displaySwitch(): void { $this->output->writeln(sprintf("\n<fg=cyan>Version %s</>", $this->version)); } /** * @return Doctum */ private function loadDoctum(string $config) { return require $config; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Console\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; class UpdateCommand extends Command { /** * @see Command * @phpstan-return void */ protected function configure() { parent::configure(); $this->addForceOption(); $this->addIgnoreParseErrors(); $this ->setName('update') ->setDescription('Parses then renders a project') ->setHelp( <<<EOF The <info>%command.name%</info> command parses and renders a project: <info>php %command.full_name% config/symfony.php</info> This command is the same as running the parse command followed by the render command. EOF ); } /** * @see Command * * @throws \InvalidArgumentException When the target directory does not exist */ protected function execute(InputInterface $input, OutputInterface $output) { $output->writeln('<bg=cyan;fg=white> Updating project </>'); return $this->update($this->doctum['project']); } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Console; use Doctum\Console\Command\ParseCommand; use Doctum\Console\Command\RenderCommand; use Doctum\Console\Command\UpdateCommand; use Doctum\ErrorHandler; use Doctum\Doctum; use Symfony\Component\Console\Application as BaseApplication; class Application extends BaseApplication { public function __construct() { error_reporting(-1); ErrorHandler::register(); parent::__construct('Doctum', Doctum::VERSION); $this->add(new UpdateCommand()); $this->add(new ParseCommand()); $this->add(new RenderCommand()); } public function getLongVersion() { return parent::getLongVersion() . ' by <comment>Fabien Potencier and William Desportes</comment>'; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum; class Tree { public function getTree(Project $project) { $namespaces = []; $ns = $project->getNamespaces(); foreach ($ns as $namespace) { if (false !== $pos = strpos($namespace, '\\')) { $namespaces[substr($namespace, 0, $pos)][] = $namespace; } else { $namespaces[$namespace][] = $namespace; } } return $this->generateClassTreeLevel($project, 1, $namespaces, []); } protected function generateClassTreeLevel(Project $project, $level, array $namespaces, array $classes) { ++$level; $tree = []; foreach ($namespaces as $namespace => $subnamespaces) { // classes $cl = $project->getNamespaceAllClasses($namespace); // subnamespaces $ns = []; foreach ($subnamespaces as $subnamespace) { $parts = explode('\\', $subnamespace); if (!isset($parts[$level - 1])) { continue; } $ns[implode('\\', array_slice($parts, 0, $level))][] = $subnamespace; } $parts = explode('\\', $namespace); $url = ''; $url = $parts[count($parts) - 1] && $project->hasNamespace($namespace) && (count($subnamespaces) || count($cl)) ? $namespace : ''; $short = $parts[count($parts) - 1] ? $parts[count($parts) - 1] : '[Global Namespace]'; $tree[] = [$short, $url, $this->generateClassTreeLevel($project, $level, $ns, $cl)]; } foreach ($classes as $class) { $short = $class->getShortName(); $tree[] = [$short, $class, []]; } return $tree; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Renderer; use Symfony\Component\Finder\Finder; use Symfony\Component\Yaml\Yaml; class ThemeSet { protected $themes; public function __construct(array $dirs) { $this->discover($dirs); } public function getTheme($name) { if (!isset($this->themes[$name])) { throw new \InvalidArgumentException(sprintf('Theme "%s" does not exist.', $name)); } return $this->themes[$name]; } protected function discover(array $dirs) { $this->themes = []; $parents = []; foreach (Finder::create()->name('manifest.yml')->in($dirs) as $manifest) { $text = file_get_contents($manifest); $config = Yaml::parse($text); if (!isset($config['name'])) { throw new \InvalidArgumentException(sprintf('Theme manifest in "%s" must have a "name" entry.', $manifest)); } $this->themes[$config['name']] = $theme = new Theme($config['name'], dirname($manifest)); if (isset($config['parent'])) { $parents[$config['name']] = $config['parent']; } foreach (['static', 'global', 'namespace', 'class'] as $type) { if (isset($config[$type])) { $theme->setTemplates($type, $config[$type]); } } } // populate parent foreach ($parents as $name => $parent) { if (!isset($this->themes[$parent])) { throw new \LogicException(sprintf('Theme "%s" inherits from an unknown "%s" theme.', $name, $parent)); } $this->themes[$name]->setParent($this->themes[$parent]); } } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Renderer; use Michelf\MarkdownExtra; use Doctum\Reflection\ClassReflection; use Doctum\Reflection\MethodReflection; use Doctum\Reflection\PropertyReflection; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; use Twig\TwigFilter; class TwigExtension extends AbstractExtension { protected $markdown; protected $project; protected $currentDepth; /** * Returns a list of filters to add to the existing list. * * @return array An array of filters */ public function getFilters() { return [ new TwigFilter('desc', [$this, 'parseDesc'], ['needs_context' => true, 'is_safe' => ['html']]), new TwigFilter('snippet', [$this, 'getSnippet']), ]; } /** * Returns a list of functions to add to the existing list. * * @return array An array of functions */ public function getFunctions() { return [ new TwigFunction('namespace_path', [$this, 'pathForNamespace'], ['needs_context' => true, 'is_safe' => ['all']]), new TwigFunction('class_path', [$this, 'pathForClass'], ['needs_context' => true, 'is_safe' => ['all']]), new TwigFunction('method_path', [$this, 'pathForMethod'], ['needs_context' => true, 'is_safe' => ['all']]), new TwigFunction('property_path', [$this, 'pathForProperty'], ['needs_context' => true, 'is_safe' => ['all']]), new TwigFunction('path', [$this, 'pathForStaticFile'], ['needs_context' => true]), new TwigFunction('abbr_class', function ($class, bool $absolute = false) { return self::abbrClass($class, $absolute); }, ['is_safe' => ['all']]), ]; } public function setCurrentDepth($depth) { $this->currentDepth = $depth; } public function pathForClass(array $context, string $class): string { return $this->relativeUri($this->currentDepth) . str_replace('\\', '/', $class) . '.html'; } public function pathForNamespace(array $context, string $namespace): string { return $this->relativeUri($this->currentDepth) . str_replace('\\', '/', $namespace) . '.html'; } public function pathForMethod(array $context, MethodReflection $method) { return $this->relativeUri($this->currentDepth) . str_replace('\\', '/', $method->getClass()->getName()) . '.html#method_' . $method->getName(); } public function pathForProperty(array $context, PropertyReflection $property) { return $this->relativeUri($this->currentDepth) . str_replace('\\', '/', $property->getClass()->getName()) . '.html#property_' . $property->getName(); } public function pathForStaticFile(array $context, $file) { return $this->relativeUri($this->currentDepth) . $file; } /** * Generate the abbreviation of a class * * @param ClassReflection|string $class The class */ public static function abbrClass($class, bool $absolute = false): string { if ($class instanceof ClassReflection) { $short = $class->getShortName(); $class = $class->getName(); if ($short === $class && !$absolute) { return $class; } } else { $parts = explode('\\', $class); if (count($parts) === 1 && !$absolute) { return $class; } $short = array_pop($parts); } return sprintf('<abbr title="%s">%s</abbr>', htmlentities($class, ENT_QUOTES), htmlspecialchars($short)); } public function parseDesc(array $context, $desc, ClassReflection $class) { if (!$desc) { return $desc; } if (null === $this->markdown) { $this->markdown = new MarkdownExtra(); } // FIXME: the @see argument is more complex than just a class (Class::Method, local method directly, ...) $desc = preg_replace_callback('/@see ([^ ]+)/', function ($match) { return 'see ' . $match[1]; }, $desc); return preg_replace(['#^<p>\s*#s', '#\s*</p>\s*$#s'], '', $this->markdown->transform($desc)); } public function getSnippet($string) { if (preg_match('/^(.{50,}?)\s.*/m', $string, $matches)) { $string = $matches[1]; } return str_replace(["\n", "\r"], '', strip_tags($string)); } protected function relativeUri($value) { if (!$value) { return ''; } return rtrim(str_repeat('../', $value), '/') . '/'; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Renderer; use Doctum\Project; class Index implements \Serializable { protected $classes; protected $versions; protected $namespaces; public function __construct(Project $project = null) { $this->classes = []; if (null !== $project) { foreach ($project->getProjectClasses() as $class) { $this->classes[$class->getName()] = $class->getHash(); } } $this->versions = []; if (null !== $project) { foreach ($project->getVersions() as $version) { $this->versions[] = (string) $version; } } $this->namespaces = []; if (null !== $project) { $this->namespaces = $project->getNamespaces(); } } public function getVersions() { return $this->versions; } public function getClasses() { return $this->classes; } public function getNamespaces() { return $this->namespaces; } public function getHash($class) { return $this->classes[$class] ?? false; } public function serialize() { return serialize([$this->classes, $this->versions, $this->namespaces]); } public function unserialize($data) { [$this->classes, $this->versions, $this->namespaces] = unserialize($data); } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Renderer; class Theme { protected $name; protected $dir; protected $parent; protected $templates; public function __construct($name, $dir) { $this->name = $name; $this->dir = $dir; } public function getTemplateDirs() { $dirs = []; if ($this->parent) { $dirs = $this->parent->getTemplateDirs(); } array_unshift($dirs, $this->dir); return $dirs; } public function setParent(Theme $parent) { $this->parent = $parent; } public function getParent() { return $this->parent; } public function getName() { return $this->name; } public function getTemplates($type) { $templates = []; if ($this->parent) { $templates = $this->parent->getTemplates($type); } if (!isset($this->templates[$type])) { return $templates; } return array_replace($templates, $this->templates[$type]); } public function setTemplates($type, $templates) { $this->templates[$type] = $templates; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Renderer; use Doctum\Project; class Diff { protected $project; protected $current; protected $versions; protected $filename; protected $alreadyRendered; protected $previousNamespaces; protected $currentNamespaces; private $previous; public function __construct(Project $project, string $filename) { $this->project = $project; $this->current = new Index($project); $this->filename = $filename; if (file_exists($filename)) { $this->alreadyRendered = true; if (false === $this->previous = @unserialize(file_get_contents($filename))) { $this->alreadyRendered = false; $this->previous = new Index(); } } else { $this->alreadyRendered = false; $this->previous = new Index(); } $this->previousNamespaces = $this->previous->getNamespaces(); $this->currentNamespaces = $this->current->getNamespaces(); } public function isEmpty() { return !$this->areVersionsModified() && (0 == count($this->getModifiedClasses()) + count($this->getRemovedClasses())); } public function save() { file_put_contents($this->filename, serialize($this->current)); } public function isAlreadyRendered() { return $this->alreadyRendered; } public function areVersionsModified() { $versions = []; foreach ($this->project->getVersions() as $version) { $versions[] = (string) $version; } return $versions != $this->previous->getVersions(); } public function getModifiedNamespaces() { return array_diff($this->currentNamespaces, $this->previousNamespaces); } public function getRemovedNamespaces() { return array_diff($this->previousNamespaces, $this->currentNamespaces); } public function getModifiedClasses() { $classes = []; foreach ($this->current->getClasses() as $class => $hash) { if ($hash !== $this->previous->getHash($class)) { $classes[] = $this->project->getClass($class); } } return $classes; } public function getRemovedClasses() { return array_diff(array_keys($this->previous->getClasses()), array_keys($this->current->getClasses())); } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Renderer; use Doctum\Indexer; use Doctum\Message; use Doctum\Project; use Doctum\Tree; use Symfony\Component\Filesystem\Filesystem; class Renderer { protected $twig; protected $templates; protected $filesystem; protected $themes; protected $theme; protected $steps; protected $step; protected $tree; protected $indexer; protected $cachedTree; public function __construct(\Twig\Environment $twig, ThemeSet $themes, Tree $tree, Indexer $indexer) { $this->twig = $twig; $this->themes = $themes; $this->tree = $tree; $this->cachedTree = []; $this->indexer = $indexer; $this->filesystem = new Filesystem(); } public function isRendered(Project $project) { return $this->getDiff($project)->isAlreadyRendered(); } public function render(Project $project, $callback = null, $force = false) { $this->twig->setCache($cacheDir = $project->getCacheDir() . '/twig'); if ($force) { $project->flushDir($cacheDir); } $diff = $this->getDiff($project); if ($diff->isEmpty()) { return $diff; } $this->steps = count($diff->getModifiedClasses()) + count($diff->getModifiedNamespaces()) + count($this->getTheme($project)->getTemplates('global')) + 1; $this->step = 0; $this->theme = $this->getTheme($project); $dirs = $this->theme->getTemplateDirs(); // add parent directory to be able to extends the same template as the current one but in the parent theme foreach ($dirs as $dir) { $dirs[] = dirname($dir); } $this->twig->getLoader()->setPaths(array_unique($dirs)); $this->twig->addGlobal('has_namespaces', $project->hasNamespaces()); $this->twig->addGlobal('project', $project); $this->renderStaticTemplates($project, $callback); $this->renderGlobalTemplates($project, $callback); $this->renderNamespaceTemplates($diff->getModifiedNamespaces(), $project, $callback); $this->renderClassTemplates($diff->getModifiedClasses(), $project, $callback); // cleanup foreach ($diff->getRemovedClasses() as $class) { foreach ($this->theme->getTemplates('class') as $target) { $this->filesystem->remove(sprintf($target, str_replace('\\', '/', $class))); } } $diff->save(); return $diff; } protected function renderStaticTemplates(Project $project, $callback = null) { if (null !== $callback) { call_user_func($callback, Message::RENDER_PROGRESS, ['Static', 'Rendering files', $this->getProgression()]); } $dirs = $this->theme->getTemplateDirs(); foreach ($this->theme->getTemplates('static') as $template => $target) { foreach (array_reverse($dirs) as $dir) { if (file_exists($dir . '/' . $template)) { $this->filesystem->copy($dir . '/' . $template, $project->getBuildDir() . '/' . $target); continue 2; } } } } protected function renderGlobalTemplates(Project $project, $callback = null) { $variables = [ 'namespaces' => $project->getNamespaces(), 'interfaces' => $project->getProjectInterfaces(), 'classes' => $project->getProjectClasses(), 'items' => $this->getIndex($project), 'index' => $this->indexer->getIndex($project), 'tree' => $this->getTree($project), ]; foreach ($this->theme->getTemplates('global') as $template => $target) { if (null !== $callback) { call_user_func($callback, Message::RENDER_PROGRESS, ['Global', $target, $this->getProgression()]); } $this->save($project, $target, $template, $variables); } } protected function renderNamespaceTemplates(array $namespaces, Project $project, $callback = null) { foreach ($namespaces as $namespace) { if (null !== $callback) { call_user_func($callback, Message::RENDER_PROGRESS, ['Namespace', $namespace, $this->getProgression()]); } $variables = [ 'namespace' => $namespace, 'subnamespaces' => $project->getNamespaceSubNamespaces($namespace), 'classes' => $project->getNamespaceClasses($namespace), 'interfaces' => $project->getNamespaceInterfaces($namespace), 'exceptions' => $project->getNamespaceExceptions($namespace), 'tree' => $this->getTree($project), ]; foreach ($this->theme->getTemplates('namespace') as $template => $target) { $this->save($project, sprintf($target, str_replace('\\', '/', $namespace)), $template, $variables); } } } protected function renderClassTemplates(array $classes, Project $project, $callback = null) { foreach ($classes as $class) { if (null !== $callback) { call_user_func($callback, Message::RENDER_PROGRESS, ['Class', $class->getName(), $this->getProgression()]); } $properties = $class->getProperties($project->getConfig('include_parent_data')); $sortProperties = $project->getConfig('sort_class_properties'); if ($sortProperties) { if (is_callable($sortProperties)) { uksort($properties, $sortProperties); } else { ksort($properties); } } $methods = $class->getMethods($project->getConfig('include_parent_data')); $sortMethods = $project->getConfig('sort_class_methods'); if ($sortMethods) { if (is_callable($sortMethods)) { uksort($methods, $sortMethods); } else { ksort($methods); } } $constants = $class->getConstants($project->getConfig('include_parent_data')); $sortConstants = $project->getConfig('sort_class_constants'); if ($sortConstants) { if (is_callable($sortConstants)) { uksort($constants, $sortConstants); } else { ksort($constants); } } $traits = $class->getTraits($project->getConfig('include_parent_data')); $sortTraits = $project->getConfig('sort_class_traits'); if ($sortTraits) { if (is_callable($sortTraits)) { uksort($traits, $sortTraits); } else { ksort($traits); } } $sortInterfaces = $project->getConfig('sort_class_interfaces'); if ($sortInterfaces) { $class->sortInterfaces($sortInterfaces); } $variables = [ 'class' => $class, 'properties' => $properties, 'methods' => $methods, 'constants' => $constants, 'traits' => $traits, 'tree' => $this->getTree($project), ]; foreach ($this->theme->getTemplates('class') as $template => $target) { $this->save($project, sprintf($target, str_replace('\\', '/', $class->getName())), $template, $variables); } } } protected function save(Project $project, $uri, $template, $variables) { $depth = substr_count($uri, '/'); $this->twig->getExtension(TwigExtension::class)->setCurrentDepth($depth); $this->twig->addGlobal('root_path', str_repeat('../', $depth)); $file = $project->getBuildDir() . '/' . $uri; if (!is_dir($dir = dirname($file))) { $this->filesystem->mkdir($dir); } file_put_contents($file, $this->twig->render($template, $variables)); } protected function getIndex(Project $project) { $items = []; foreach ($project->getProjectClasses() as $class) { $letter = strtoupper(substr($class->getShortName(), 0, 1)); $items[$letter][] = ['class', $class]; foreach ($class->getProperties() as $property) { $letter = strtoupper(substr($property->getName(), 0, 1)); $items[$letter][] = ['property', $property]; } foreach ($class->getMethods() as $method) { $letter = strtoupper(substr($method->getName(), 0, 1)); $items[$letter][] = ['method', $method]; } } ksort($items); return $items; } protected function getDiff(Project $project) { return new Diff($project, $project->getBuildDir() . '/renderer.index'); } protected function getTheme(Project $project) { return $this->themes->getTheme($project->getConfig('theme')); } protected function getProgression() { return floor((++$this->step / $this->steps) * 100); } /** * Get tree for the given project. * * @param Project $project * * @return array */ private function getTree(Project $project) { $key = $project->getBuildDir(); if (!isset($this->cachedTree[$key])) { $this->cachedTree[$key] = $this->tree->getTree($project); } return $this->cachedTree[$key]; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum; final class ErrorHandler { private $levels = [ E_WARNING => 'Warning', E_NOTICE => 'Notice', E_USER_ERROR => 'User Error', E_USER_WARNING => 'User Warning', E_USER_NOTICE => 'User Notice', E_STRICT => 'Runtime Notice', E_RECOVERABLE_ERROR => 'Catchable Fatal Error', ]; /** * Registers the error handler. */ public static function register(): void { set_error_handler([new static(), 'handle']); } /** * @throws \ErrorException When error_reporting returns error */ public function handle($level, $message, $file = 'unknown', $line = 0, $context = []): bool { if (error_reporting() & $level) { throw new \ErrorException(sprintf('%s: %s in %s line %d', $this->levels[$level] ?? $level, $message, $file, $line)); } return false; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Parser; use Doctum\Parser\Filter\FilterInterface; use Doctum\Reflection\ClassReflection; class ParserContext { protected $filter; protected $docBlockParser; protected $prettyPrinter; protected $errors; protected $namespace; protected $aliases; protected $class; protected $file; protected $hash; protected $classes; public function __construct(FilterInterface $filter, DocBlockParser $docBlockParser, $prettyPrinter) { $this->filter = $filter; $this->docBlockParser = $docBlockParser; $this->prettyPrinter = $prettyPrinter; } public function getFilter() { return $this->filter; } /** * @return DocBlockParser */ public function getDocBlockParser() { return $this->docBlockParser; } public function getPrettyPrinter() { return $this->prettyPrinter; } public function addAlias(?string $alias, string $name): void { $this->aliases[$alias] = $name; } public function getAliases() { return $this->aliases; } public function enterFile($file, $hash): void { $this->file = $file; $this->hash = $hash; $this->errors = []; $this->classes = []; } public function leaveFile() { $this->hash = null; $this->file = null; $this->errors = []; return $this->classes; } public function getHash() { return $this->hash; } public function getFile() { return $this->file; } public function addErrors($name, $line, array $errors): void { foreach ($errors as $error) { $this->addError($name, $line, $error); } } public function addError($name, $line, $error): void { $this->errors[] = sprintf('%s on "%s" in %s:%d', $error, $name, $this->file, $line); } public function getErrors() { return $this->errors; } public function enterClass(ClassReflection $class): void { $this->class = $class; } public function leaveClass(): void { if (null === $this->class) { return; } $this->classes[] = $this->class; $this->class = null; } public function getClass() { return $this->class; } public function enterNamespace($namespace): void { $this->namespace = $namespace; $this->aliases = []; } public function leaveNamespace(): void { $this->namespace = null; $this->aliases = []; } public function getNamespace() { return $this->namespace; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Parser; use Doctum\Reflection\ClassReflection; interface ClassVisitorInterface { public function visit(ClassReflection $class); } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Parser\Node; class DocBlockNode { protected $shortDesc; protected $longDesc; protected $tags = []; protected $errors = []; public function addTag($key, $value) { $this->tags[$key][] = $value; } public function getTags() { return $this->tags; } public function getOtherTags() { $tags = $this->tags; unset($tags['param'], $tags['return'], $tags['var'], $tags['throws']); foreach ($tags as $name => $values) { foreach ($values as $i => $value) { // For 'see' tag we try to maintain backwards compatibility // by returning only a part of the value. if ($name === 'see') { $value = $value[0]; } $tags[$name][$i] = is_string($value) ? explode(' ', $value) : $value; } } return $tags; } public function getTag($key) { return $this->tags[$key] ?? []; } public function getShortDesc() { return $this->shortDesc; } public function getLongDesc() { return $this->longDesc; } public function setShortDesc($shortDesc) { $this->shortDesc = $shortDesc; } public function setLongDesc($longDesc) { $this->longDesc = $longDesc; } public function getDesc() { return $this->shortDesc . "\n\n" . $this->longDesc; } public function addError($error) { $this->errors[] = $error; } public function getErrors() { return $this->errors; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Parser; use PhpParser\Error; use PhpParser\NodeTraverser; use PhpParser\Parser as PhpParser; class CodeParser { protected $parser; protected $traverser; protected $context; public function __construct(ParserContext $context, PhpParser $parser, NodeTraverser $traverser) { $this->context = $context; $this->parser = $parser; $this->traverser = $traverser; // with big fluent interfaces it can happen that PHP-Parser's Traverser // exceeds the 100 recursions limit; we set it to 10000 to be sure. ini_set('xdebug.max_nesting_level', '10000'); } public function getContext() { return $this->context; } public function parse($code) { try { $this->traverser->traverse($this->parser->parse($code)); } catch (Error $e) { $this->context->addError($this->context->getFile(), 0, $e->getMessage()); } } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Parser; use Doctum\Parser\Node\DocBlockNode; use phpDocumentor\Reflection\DocBlock; use phpDocumentor\Reflection\DocBlock\Tags\Param; use phpDocumentor\Reflection\DocBlock\Tags\PropertyRead; use phpDocumentor\Reflection\DocBlock\Tags\Property; use phpDocumentor\Reflection\DocBlock\Tags\PropertyWrite; use phpDocumentor\Reflection\DocBlock\Tags\Return_; use phpDocumentor\Reflection\DocBlock\Tags\See; use phpDocumentor\Reflection\DocBlock\Tags\Throws; use phpDocumentor\Reflection\DocBlock\Tags\Var_; use phpDocumentor\Reflection\DocBlock\Tags\InvalidTag; use phpDocumentor\Reflection\DocBlockFactory; class DocBlockParser { public function parse(?string $comment): DocBlockNode { $docBlock = null; $errorMessage = ''; $result = new DocBlockNode(); if ($comment === null) { return $result; } try { $factory = DocBlockFactory::createInstance(); $docBlock = $factory->create($comment); } catch (\Exception $e) { $errorMessage = $e->getMessage(); } if ($errorMessage) { $result->addError($errorMessage); return $result; } $result->setShortDesc($docBlock->getSummary()); $result->setLongDesc($docBlock->getDescription()->__toString()); foreach ($docBlock->getTags() as $tag) { $result->addTag($tag->getName(), $this->parseTag($tag)); } return $result; } protected function parseTag(DocBlock\Tag $tag) { $class = get_class($tag); switch ($class) { case Var_::class: case Return_::class: /** @var \phpDocumentor\Reflection\DocBlock\Tags\Return_ $tag */ return [ $this->parseHint($tag->getType() ? explode('|', $tag->getType()->__toString()) : []), $tag->getDescription() ? $tag->getDescription()->__toString() : '', ]; case Property::class: case PropertyRead::class: case PropertyWrite::class: case Param::class: /** @var \phpDocumentor\Reflection\DocBlock\Tags\Param $tag */ return [ $this->parseHint($tag->getType() ? explode('|', $tag->getType()->__toString()) : []), ltrim($tag->getVariableName(), '$'), $tag->getDescription() ? $tag->getDescription()->__toString() : '', ]; case Throws::class: /** @var \phpDocumentor\Reflection\DocBlock\Tags\Throws $tag */ return [ $tag->getType() ? $tag->getType()->__toString() : '', $tag->getDescription() ? $tag->getDescription()->__toString() : '', ]; case See::class: // For backwards compatibility, in first cell we store content. // In second - only a referer for further parsing. // In docblock node we handle this in getOtherTags() method. /** @var \phpDocumentor\Reflection\DocBlock\Tags\See $tag */ return [ $tag->__toString(), $tag->getReference()->__toString(), $tag->getDescription() ? $tag->getDescription()->__toString() : '', ]; case InvalidTag::class: /** @var \phpDocumentor\Reflection\DocBlock\Tags\InvalidTag $tag */ return $tag->__toString(); default: return $tag->__toString(); } } protected function parseHint(array $rawHints): array { $hints = []; foreach ($rawHints as $hint) { if ('[]' == substr($hint, -2)) { $hints[] = [substr($hint, 0, -2), true]; } else { $hints[] = [$hint, false]; } } return $hints; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Parser; use PhpParser\Node as AbstractNode; use PhpParser\Node\Name\FullyQualified; use PhpParser\NodeVisitorAbstract; use PhpParser\Node\Stmt\ClassConst as ClassConstNode; use PhpParser\Node\Stmt\ClassMethod as ClassMethodNode; use PhpParser\Node\Stmt\Class_ as ClassNode; use PhpParser\Node\Stmt\ClassLike as ClassLikeNode; use PhpParser\Node\Stmt\Interface_ as InterfaceNode; use PhpParser\Node\Stmt\Namespace_ as NamespaceNode; use PhpParser\Node\Stmt\Property as PropertyNode; use PhpParser\Node\Stmt\TraitUse as TraitUseNode; use PhpParser\Node\Stmt\Trait_ as TraitNode; use PhpParser\Node\Stmt\Use_ as UseNode; use PhpParser\Node\NullableType; use Doctum\Project; use Doctum\Reflection\ClassReflection; use Doctum\Reflection\ConstantReflection; use Doctum\Reflection\MethodReflection; use Doctum\Reflection\ParameterReflection; use Doctum\Reflection\PropertyReflection; class NodeVisitor extends NodeVisitorAbstract { protected $context; public function __construct(ParserContext $context) { $this->context = $context; } public function enterNode(AbstractNode $node) { if ($node instanceof NamespaceNode) { $this->context->enterNamespace($node->name->__toString()); } elseif ($node instanceof UseNode) { $this->addAliases($node); } elseif ($node instanceof InterfaceNode) { $this->addInterface($node); } elseif ($node instanceof ClassNode) { $this->addClass($node); } elseif ($node instanceof TraitNode) { $this->addTrait($node); } elseif ($this->context->getClass() && $node instanceof TraitUseNode) { $this->addTraitUse($node); } elseif ($this->context->getClass() && $node instanceof PropertyNode) { $this->addProperty($node); } elseif ($this->context->getClass() && $node instanceof ClassMethodNode) { $this->addMethod($node); } elseif ($this->context->getClass() && $node instanceof ClassConstNode) { $this->addConstant($node); } return null; } public function leaveNode(AbstractNode $node) { if ($node instanceof NamespaceNode) { $this->context->leaveNamespace(); } elseif ($node instanceof ClassNode || $node instanceof InterfaceNode || $node instanceof TraitNode) { $this->context->leaveClass(); } return null; } protected function addAliases(UseNode $node) { foreach ($node->uses as $use) { $this->context->addAlias($use->alias !== null ? $use->alias->__toString() : null, $use->name->__toString()); } } protected function addInterface(InterfaceNode $node) { $class = $this->addClassOrInterface($node); $class->setInterface(true); foreach ($node->extends as $interface) { $class->addInterface((string) $interface); } } protected function addClass(ClassNode $node) { // Skip anonymous classes if ($node->isAnonymous()) { return; } $class = $this->addClassOrInterface($node); foreach ($node->implements as $interface) { $class->addInterface((string) $interface); } if ($node->extends) { $class->setParent((string) $node->extends); } } protected function addTrait(TraitNode $node) { $class = $this->addClassOrInterface($node); $class->setTrait(true); } protected function addClassOrInterface(ClassLikeNode $node) { $class = new ClassReflection((string) $node->namespacedName, $node->getLine()); if ($node instanceof ClassNode) { $class->setModifiers($node->flags); } $class->setNamespace($this->context->getNamespace()); $class->setAliases($this->context->getAliases()); $class->setHash($this->context->getHash()); $class->setFile($this->context->getFile()); $comment = $this->context->getDocBlockParser()->parse($node->getDocComment(), $this->context, $class); $class->setDocComment($node->getDocComment()); $class->setShortDesc($comment->getShortDesc()); $class->setLongDesc($comment->getLongDesc()); $class->setSee($this->resolveSee($comment->getTag('see'))); if ($errors = $comment->getErrors()) { $class->setErrors($errors); } else { $class->setTags($comment->getOtherTags()); } if ($this->context->getFilter()->acceptClass($class)) { if ($errors) { $this->context->addErrors((string) $class, $node->getLine(), $errors); } $this->context->enterClass($class); } return $class; } protected function addMethod(ClassMethodNode $node) { $method = new MethodReflection($node->name->__toString(), $node->getLine()); $method->setModifiers($node->flags); $method->setByRef((string) $node->byRef); foreach ($node->params as $param) { $parameter = new ParameterReflection($param->var->name, $param->getLine()); $parameter->setModifiers($param->type); $parameter->setByRef($param->byRef); if ($param->default) { $parameter->setDefault($this->context->getPrettyPrinter()->prettyPrintExpr($param->default)); } $parameter->setVariadic($param->variadic); $type = $param->type; $typeStr = null; if ($param->type !== null && ! $param->type instanceof NullableType) { $typeStr = (string) $param->type; } elseif ($param->type instanceof NullableType) { $type = $param->type->type; $typeStr = (string) $param->type->type; } if ($type instanceof FullyQualified && 0 !== strpos($typeStr, '\\')) { $typeStr = '\\' . $typeStr; } if (null !== $typeStr) { $typeArr = [[$typeStr, false]]; if ($param->type instanceof NullableType) { $typeArr[] = ['null', false]; } $parameter->setHint($this->resolveHint($typeArr)); } $method->addParameter($parameter); } $comment = $this->context->getDocBlockParser()->parse($node->getDocComment(), $this->context, $method); $method->setDocComment($node->getDocComment()); $method->setShortDesc($comment->getShortDesc()); $method->setLongDesc($comment->getLongDesc()); $method->setSee($this->resolveSee($comment->getTag('see'))); if (!$errors = $comment->getErrors()) { $errors = $this->updateMethodParametersFromTags($method, $comment->getTag('param')); if ($tag = $comment->getTag('return')) { $method->setHint(is_array($tag[0][0]) ? $this->resolveHint($tag[0][0]) : $tag[0][0]); $method->setHintDesc($tag[0][1]); } $method->setExceptions($comment->getTag('throws')); $method->setTags($comment->getOtherTags()); } $method->setErrors($errors); $returnType = $node->getReturnType(); $returnTypeStr = null; if ($returnType !== null && ! $returnType instanceof NullableType) { $returnTypeStr = (string) $returnType; } elseif ($returnType instanceof NullableType) { $returnTypeStr = (string) $returnType->type; } if ($returnType instanceof FullyQualified && 0 !== strpos($returnTypeStr, '\\')) { $returnTypeStr = '\\' . $returnTypeStr; } if (null !== $returnTypeStr) { $returnTypeArr = [[$returnTypeStr, false]]; if ($returnType instanceof NullableType) { $returnTypeArr[] = ['null', false]; } $method->setHint($this->resolveHint($returnTypeArr)); } if ($this->context->getFilter()->acceptMethod($method)) { $this->context->getClass()->addMethod($method); if ($errors) { $this->context->addErrors((string) $method, $node->getLine(), $errors); } } } protected function addProperty(PropertyNode $node) { foreach ($node->props as $prop) { $property = new PropertyReflection($prop->name, $prop->getLine()); $property->setModifiers($node->flags); $property->setDefault($prop->default); $comment = $this->context->getDocBlockParser()->parse($node->getDocComment(), $this->context, $property); $property->setDocComment($node->getDocComment()); $property->setShortDesc($comment->getShortDesc()); $property->setLongDesc($comment->getLongDesc()); $property->setSee($this->resolveSee($comment->getTag('see'))); if ($errors = $comment->getErrors()) { $property->setErrors($errors); } else { if ($tag = $comment->getTag('var')) { $property->setHint(is_array($tag[0][0]) ? $this->resolveHint($tag[0][0]) : $tag[0][0]); $property->setHintDesc($tag[0][1]); } $property->setTags($comment->getOtherTags()); } if ($this->context->getFilter()->acceptProperty($property)) { $this->context->getClass()->addProperty($property); if ($errors) { $this->context->addErrors((string) $property, $prop->getLine(), $errors); } } } } protected function addTraitUse(TraitUseNode $node) { foreach ($node->traits as $trait) { $this->context->getClass()->addTrait((string) $trait); } } protected function addConstant(ClassConstNode $node) { foreach ($node->consts as $const) { $constant = new ConstantReflection($const->name, $const->getLine()); $comment = $this->context->getDocBlockParser()->parse($node->getDocComment(), $this->context, $constant); $constant->setDocComment($node->getDocComment()); $constant->setShortDesc($comment->getShortDesc()); $constant->setLongDesc($comment->getLongDesc()); $this->context->getClass()->addConstant($constant); } } protected function updateMethodParametersFromTags(MethodReflection $method, array $tags): array { // bypass if there is no @param tags defined (@param tags are optional) if (!count($tags)) { return []; } if (count($method->getParameters()) != count($tags)) { return [sprintf('"%d" @param tags are expected but only "%d" found', count($method->getParameters()), count($tags))]; } $errors = []; foreach (array_keys($method->getParameters()) as $i => $name) { if ($tags[$i][1] && $tags[$i][1] != $name) { $errors[] = sprintf('The "%s" @param tag variable name is wrong (should be "%s")', $tags[$i][1], $name); } } if ($errors) { return $errors; } foreach ($tags as $i => $tag) { $parameter = $method->getParameter($tag[1] ? $tag[1] : $i); $parameter->setShortDesc($tag[2]); if (!$parameter->hasHint()) { $parameter->setHint($this->resolveHint($tag[0])); } } return []; } protected function resolveHint(array $hints): array { foreach ($hints as $i => $hint) { $hints[$i] = [$this->resolveAlias($hint[0]), $hint[1]]; } return $hints; } protected function resolveAlias($alias) { // not a class if (Project::isPhpTypeHint($alias)) { return $alias; } // FQCN if ('\\' == substr($alias, 0, 1)) { return $alias; } $class = $this->context->getClass(); // A class MIGHT or MIGHT NOT be present in context. // It is not present in cases, where eg. `@see` tag refers to non existing class/method. // We may want to run class related checks only, if class is actually present. if ($class) { // special aliases if ('self' === $alias || 'static' === $alias || '\$this' === $alias) { return $class->getName(); } // an alias defined by a use statement $aliases = $class->getAliases(); if (isset($aliases[$alias])) { return $aliases[$alias]; } // a class in the current class namespace return $class->getNamespace() . '\\' . $alias; } return $alias; } protected function resolveSee(array $see) { $return = []; $matches = []; foreach ($see as $seeEntry) { $reference = $seeEntry[1]; $description = $seeEntry[2]; if ((bool) preg_match('/^[\w]+:\/\/.+$/', $reference)) { //URL $return[] = [ $reference, $description, false, false, $reference, ]; } elseif ((bool) preg_match('/(.+)\:\:(.+)\(.*\)/', $reference, $matches)) { //Method $return[] = [ $reference, $description, $this->resolveAlias($matches[1]), $matches[2], false, ]; } else { // We assume, that this is a class reference. $return[] = [ $reference, $description, $this->resolveAlias($reference), false, false, ]; } } return $return; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Parser; use Doctum\Message; use Doctum\Project; use Doctum\Reflection\LazyClassReflection; use Doctum\Store\StoreInterface; use Symfony\Component\Finder\Finder; class Parser { protected $store; protected $iterator; protected $parser; protected $traverser; public function __construct($iterator, StoreInterface $store, CodeParser $parser, ClassTraverser $traverser) { $this->iterator = $this->createIterator($iterator); $this->store = $store; $this->parser = $parser; $this->traverser = $traverser; } public function parse(Project $project, $callback = null) { $step = 0; $steps = iterator_count($this->iterator); $context = $this->parser->getContext(); $transaction = new Transaction($project); $toStore = new \SplObjectStorage(); foreach ($this->iterator as $file) { ++$step; $code = file_get_contents($file); $hash = sha1($code); if ($transaction->hasHash($hash)) { continue; } $context->enterFile((string) $file, $hash); $this->parser->parse($code); if (null !== $callback) { call_user_func($callback, Message::PARSE_ERROR, $context->getErrors()); } foreach ($context->leaveFile() as $class) { if (null !== $callback) { call_user_func($callback, Message::PARSE_CLASS, [floor($step / $steps * 100), $class]); } $project->addClass($class); $transaction->addClass($class); $toStore->attach($class); $class->notFromCache(); } } // cleanup foreach ($transaction->getRemovedClasses() as $class) { $project->removeClass(new LazyClassReflection($class)); $this->store->removeClass($project, $class); } // visit each class for stuff that can only be done when all classes are parsed $toStore->addAll($this->traverser->traverse($project)); foreach ($toStore as $class) { $this->store->writeClass($project, $class); } return $transaction; } private function createIterator($iterator) { if (is_string($iterator)) { $it = new Finder(); $it->files()->name('*.php')->in($iterator); return $it; } elseif (!$iterator instanceof \Traversable) { throw new \InvalidArgumentException('The iterator must be a directory name or a Finder instance.'); } return $iterator; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Parser; use Doctum\Project; class ClassTraverser { protected $visitors; public function __construct(array $visitors = []) { $this->visitors = []; foreach ($visitors as $visitor) { $this->addVisitor($visitor); } } public function addVisitor(ClassVisitorInterface $visitor) { $this->visitors[] = $visitor; } public function traverse(Project $project) { // parent classes/interfaces are visited before their "children" $classes = $project->getProjectClasses(); $modified = new \SplObjectStorage(); while ($class = array_shift($classes)) { // re-push the class at the end if parent class/interfaces have not been visited yet if (($parent = $class->getParent()) && isset($classes[$parent->getName()])) { $classes[$class->getName()] = $class; continue; } foreach ($interfaces = $class->getInterfaces() as $interface) { if (isset($classes[$interface->getName()])) { $classes[$class->getName()] = $class; continue 2; } } // only visits classes not coming from the cache // and for which parent/interfaces also come from the cache $visit = !$class->isFromCache() || ($parent && !$parent->isFromCache()); foreach ($interfaces as $interface) { if (!$interface->isFromCache()) { $visit = true; break; } } if (!$visit) { continue; } $isModified = false; foreach ($this->visitors as $visitor) { $isModified = $visitor->visit($class) || $isModified; } if ($isModified) { $modified->attach($class); } } return $modified; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Parser\ClassVisitor; use Doctum\Parser\ClassVisitorInterface; use Doctum\Reflection\ClassReflection; use Doctum\Reflection\MethodReflection; use Doctum\Reflection\ParameterReflection; /** * Looks for @method tags on classes in the format of: * * @phpstan-ignore-next-line * @method [return type] [name]([type] [parameter], [...]) [<description>] */ class MethodClassVisitor implements ClassVisitorInterface { public function visit(ClassReflection $class) { $modified = false; $methods = $class->getTags('method'); if (!empty($methods)) { foreach ($methods as $methodTag) { if ($this->injectMethod($class, implode(' ', $methodTag))) { $modified = true; } } } return $modified; } /** * Parse the parts of an @method tag into an associative array. * * Original @method parsing by https://github.com/phpDocumentor/ReflectionDocBlock/blob/master/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php * * @param string $tag Method tag contents * * @return array|false */ protected function parseMethod($tag) { // Account for default array syntax $tag = str_replace('array()', 'array', $tag); $matches = []; // 1. none or more whitespace // 2. optionally a word with underscores followed by whitespace : as // type for the return value // 3. then optionally a word with underscores followed by () and // whitespace : as method name as used by phpDocumentor // 4. then a word with underscores, followed by ( and any character // until a ) and whitespace : as method name with signature // 5. any remaining text : as description $pattern = '/^[\s]*(?P<hint>([\w\|_\\\\]+)[\s]+)?(?:[\w_]+\(\)[\s]+)?(?P<method>[\w\|_\\\\]+)\((?P<args>[^\)]*)\)[\s]*(?P<description>.*)/u'; if (!preg_match($pattern, $tag, $matches)) { return false; } // Parse arguments $args = []; if (isset($matches['args'])) { foreach (explode(',', $matches['args']) as $arg) { $parts = []; if (preg_match('/^[\s]*(?P<hint>([\w\|_\\\\]+)[\s]+)*[\s]*\$(?P<name>[\w\|_\\\\]+)?(?:[\s]*=[\s]*)?(?P<default>.*)/', $arg, $parts)) { // Fix array default values if ($parts['default'] == 'array') { $parts['default'] = 'array()'; } $args[$parts['name']] = [ 'hint' => $parts['hint'], 'name' => $parts['name'], 'default' => $parts['default'], ]; } } } return [ 'hint' => trim($matches['hint']), 'name' => $matches['method'], 'args' => $args, 'description' => $matches['description'], ]; } /** * Adds a new method to the class using an array of tokens. * * @param ClassReflection $class Class reflection * @param string $methodTag Method tag contents * * @return bool */ protected function injectMethod(ClassReflection $class, $methodTag) { $data = $this->parseMethod($methodTag); // Bail if the method format is invalid if (!$data) { return false; } $method = new MethodReflection($data['name'], $class->getLine()); $method->setDocComment($data['description']); $method->setShortDesc($data['description']); if ($data['hint']) { $method->setHint([[$data['hint'], null]]); } // Add arguments to the method foreach ($data['args'] as $name => $arg) { $param = new ParameterReflection($name, $class->getLine()); if (!empty($arg['hint'])) { $param->setHint([[$arg['hint'], null]]); } if (!empty($arg['default'])) { $param->setDefault($arg['default']); } $method->addParameter($param); } $class->addMethod($method); return true; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Parser\ClassVisitor; use Doctum\Parser\ClassVisitorInterface; use Doctum\Parser\ParserContext; use Doctum\Reflection\ClassReflection; use Doctum\Reflection\PropertyReflection; /** * Looks for @property tags on classes in the format of:. * * @phpstan-ignore-next-line * @property [<type>] [name] [<description>] */ class PropertyClassVisitor implements ClassVisitorInterface { protected $context; public function __construct(ParserContext $context) { $this->context = $context; } public function visit(ClassReflection $class) { $modified = false; $properties = $class->getTags('property'); if (!empty($properties)) { foreach ($properties as $propertyTag) { if ($this->injectProperty($class, $propertyTag)) { $modified = true; } } } return $modified; } /** * Adds a new property to the class using an array of tokens. * * @param ClassReflection $class Class reflection * @param array $propertyTag Property tag contents * * @return bool */ protected function injectProperty(ClassReflection $class, array $propertyTag) { if (count($propertyTag) == 3 && !empty($propertyTag[1])) { $property = new PropertyReflection($propertyTag[1], $class->getLine()); $property->setDocComment($propertyTag[2]); $property->setShortDesc($propertyTag[2]); if (!empty($propertyTag[0])) { $property->setHint($propertyTag[0]); } $class->addProperty($property); return true; } return false; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Parser\ClassVisitor; use Doctum\Reflection\ClassReflection; use Doctum\Parser\ClassVisitorInterface; use Doctum\RemoteRepository\AbstractRemoteRepository; class ViewSourceClassVisitor implements ClassVisitorInterface { /** @var AbstractRemoteRepository */ protected $remoteRepository; public function __construct(AbstractRemoteRepository $remoteRepository) { $this->remoteRepository = $remoteRepository; } public function visit(ClassReflection $class) { $filePath = $this->remoteRepository->getRelativePath($class->getFile()); if ($class->getRelativeFilePath() != $filePath) { $class->setRelativeFilePath($filePath); return true; } return false; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Parser\ClassVisitor; use Doctum\Parser\ClassVisitorInterface; use Doctum\Reflection\ClassReflection; class InheritdocClassVisitor implements ClassVisitorInterface { public function visit(ClassReflection $class) { $modified = false; foreach ($class->getMethods() as $name => $method) { if (!$parentMethod = $class->getParentMethod($name)) { continue; } foreach ($method->getParameters() as $name => $parameter) { if (!$parentParameter = $parentMethod->getParameter($name)) { continue; } if ($parameter->getShortDesc() != $parentParameter->getShortDesc()) { $parameter->setShortDesc($parentParameter->getShortDesc()); $modified = true; } if ($parameter->getHint() != $parentParameter->getRawHint()) { // FIXME: should test for a raw hint from tags, not the one from PHP itself $parameter->setHint($parentParameter->getRawHint()); $modified = true; } } if ($method->getHint() != $parentMethod->getRawHint()) { $method->setHint($parentMethod->getRawHint()); $modified = true; } if ($method->getHintDesc() != $parentMethod->getHintDesc()) { $method->setHintDesc($parentMethod->getHintDesc()); $modified = true; } if ('{@inheritdoc}' == strtolower(trim($method->getShortDesc())) || !$method->getDocComment()) { if ($method->getShortDesc() != $parentMethod->getShortDesc()) { $method->setShortDesc($parentMethod->getShortDesc()); $modified = true; } if ($method->getLongDesc() != $parentMethod->getLongDesc()) { $method->setLongDesc($parentMethod->getLongDesc()); $modified = true; } if ($method->getExceptions() != $parentMethod->getRawExceptions()) { $method->setExceptions($parentMethod->getRawExceptions()); $modified = true; } } } return $modified; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Parser; use Doctum\Project; use Doctum\Reflection\ClassReflection; class Transaction { protected $hashes; protected $classes; protected $visited; protected $modified; public function __construct(Project $project) { $this->hashes = []; $this->classes = []; foreach ($project->getProjectClasses() as $class) { $this->addClass($class); } $this->visited = []; $this->modified = []; } public function hasHash($hash) { if (!array_key_exists($hash, $this->hashes)) { return false; } $this->visited[$hash] = true; return true; } public function getModifiedClasses() { return $this->modified; } public function getRemovedClasses() { $classes = []; foreach ($this->hashes as $hash => $c) { if (!isset($this->visited[$hash])) { $classes = array_merge($classes, $c); } } return array_keys($classes); } public function addClass(ClassReflection $class) { $name = $class->getName(); $hash = $class->getHash(); if (isset($this->classes[$name])) { unset($this->hashes[$this->classes[$name]][$name]); if (!$this->hashes[$this->classes[$name]]) { unset($this->hashes[$this->classes[$name]]); } } $this->hashes[$hash][$name] = true; $this->classes[$name] = $hash; $this->modified[] = $name; $this->visited[$hash] = true; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Parser\Filter; use Doctum\Reflection\MethodReflection; use Doctum\Reflection\PropertyReflection; class DefaultFilter extends TrueFilter { public function acceptMethod(MethodReflection $method) { return !$method->isPrivate(); } public function acceptProperty(PropertyReflection $property) { return !$property->isPrivate(); } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Parser\Filter; use Doctum\Reflection\ClassReflection; use Doctum\Reflection\MethodReflection; use Doctum\Reflection\PropertyReflection; interface FilterInterface { public function acceptClass(ClassReflection $class); public function acceptMethod(MethodReflection $method); public function acceptProperty(PropertyReflection $property); } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Parser\Filter; use Doctum\Reflection\ClassReflection; use Doctum\Reflection\MethodReflection; use Doctum\Reflection\PropertyReflection; class TrueFilter implements FilterInterface { public function acceptClass(ClassReflection $class) { return true; } public function acceptMethod(MethodReflection $method) { return true; } public function acceptProperty(PropertyReflection $property) { return true; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\Parser\Filter; use Doctum\Reflection\MethodReflection; use Doctum\Reflection\PropertyReflection; class PublicFilter extends TrueFilter { public function acceptMethod(MethodReflection $method) { return $method->isPublic(); } public function acceptProperty(PropertyReflection $property) { return $property->isPublic(); } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\RemoteRepository; class GitLabRemoteRepository extends AbstractRemoteRepository { protected $url = 'https://gitlab.com/'; public function __construct($name, $localPath, $url = '') { if (!empty($url)) { $this->url = $url; } parent::__construct($name, $localPath); } public function getFileUrl($projectVersion, $relativePath, $line) { $url = $this->url . $this->name . '/blob/' . $this->buildProjectPath($projectVersion, $relativePath); if (null !== $line) { $url .= '#L' . (int) $line; } return $url; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\RemoteRepository; class GitHubRemoteRepository extends AbstractRemoteRepository { public function getFileUrl($projectVersion, $relativePath, $line) { $url = 'https://github.com/' . $this->name . '/blob/' . $this->buildProjectPath($projectVersion, $relativePath); if (null !== $line) { $url .= '#L' . (int) $line; } return $url; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\RemoteRepository; class BitBucketRemoteRepository extends AbstractRemoteRepository { public function getFileUrl($projectVersion, $relativePath, $line) { $url = 'https://bitbucket.org/' . $this->name . '/src/' . $this->buildProjectPath($projectVersion, $relativePath); if (null !== $line) { $filename = basename($relativePath); $url .= "#{$filename}-{$line}"; } return $url; } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum\RemoteRepository; abstract class AbstractRemoteRepository { protected $name; protected $localPath; public function __construct($name, $localPath) { $this->name = $name; $this->localPath = $localPath; } abstract public function getFileUrl($projectVersion, $relativePath, $line); public function getRelativePath($file) { $replacementCount = 0; $filePath = str_replace($this->localPath, '', $file, $replacementCount); if (1 === $replacementCount) { return $filePath; } return ''; } protected function buildProjectPath(string $projectVersion, string $relativePath): string { return str_replace('\\', '/', $projectVersion . '/' . ltrim($relativePath, '/')); } } <?php /* * This file is part of the Doctum utility. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Doctum; use PhpParser\NodeTraverser; use PhpParser\NodeVisitor\NameResolver; use PhpParser\ParserFactory; use PhpParser\PrettyPrinter\Standard as PrettyPrinter; use Pimple\Container; use Doctum\Parser\ClassTraverser; use Doctum\Parser\ClassVisitor; use Doctum\Parser\CodeParser; use Doctum\Parser\DocBlockParser; use Doctum\Parser\Filter\DefaultFilter; use Doctum\Parser\NodeVisitor; use Doctum\Parser\Parser; use Doctum\Parser\ParserContext; use Doctum\RemoteRepository\AbstractRemoteRepository; use Doctum\Renderer\Renderer; use Doctum\Renderer\ThemeSet; use Doctum\Renderer\TwigExtension; use Doctum\Store\JsonStore; use Doctum\Version\SingleVersionCollection; use Doctum\Version\Version; use Twig\Environment; use Twig\Loader\FilesystemLoader; use Wdes\phpI18nL10n\Twig\Extension\I18n as I18nExtension; use Wdes\phpI18nL10n\plugins\MoReader; use Wdes\phpI18nL10n\Launcher; class Doctum extends Container { public const VERSION_MAJOR = 5; public const VERSION_MINOR = 1; public const VERSION_PATCH = 0; public const IS_DEV = false; //@phpstan-ignore-next-line public const VERSION = self::VERSION_MAJOR . '.' . self::VERSION_MINOR . '.' . self::VERSION_PATCH . (self::IS_DEV ? '-dev' : ''); public function __construct($iterator = null, array $config = []) { parent::__construct(); $sc = $this; if (null !== $iterator) { $this['files'] = $iterator; } $this['_versions'] = function ($sc) { $versions = $sc['versions'] ?? $sc['version']; if (is_string($versions)) { $versions = new Version($versions); } if ($versions instanceof Version) { $versions = new SingleVersionCollection($versions); } return $versions; }; $this['project'] = function ($sc) { $project = new Project($sc['store'], $sc['_versions'], [ 'build_dir' => $sc['build_dir'], 'cache_dir' => $sc['cache_dir'], 'remote_repository' => $sc['remote_repository'], 'include_parent_data' => $sc['include_parent_data'], 'default_opened_level' => $sc['default_opened_level'], 'theme' => $sc['theme'], 'title' => $sc['title'], 'source_url' => $sc['source_url'], 'source_dir' => $sc['source_dir'], 'insert_todos' => $sc['insert_todos'], 'sort_class_properties' => $sc['sort_class_properties'], 'sort_class_methods' => $sc['sort_class_methods'], 'sort_class_constants' => $sc['sort_class_constants'], 'sort_class_traits' => $sc['sort_class_traits'], 'sort_class_interfaces' => $sc['sort_class_interfaces'], ]); $project->setRenderer($sc['renderer']); $project->setParser($sc['parser']); return $project; }; $this['parser'] = function ($sc) { return new Parser($sc['files'], $sc['store'], $sc['code_parser'], $sc['traverser']); }; $this['indexer'] = function () { return new Indexer(); }; $this['tree'] = function () { return new Tree(); }; $this['parser_context'] = function ($sc) { return new ParserContext($sc['filter'], $sc['docblock_parser'], $sc['pretty_printer']); }; $this['docblock_parser'] = function () { return new DocBlockParser(); }; $this['php_parser'] = function () { return (new ParserFactory())->create(ParserFactory::PREFER_PHP7); }; $this['php_traverser'] = function ($sc) { $traverser = new NodeTraverser(); $traverser->addVisitor(new NameResolver()); $traverser->addVisitor(new NodeVisitor($sc['parser_context'])); return $traverser; }; $this['code_parser'] = function ($sc) { return new CodeParser($sc['parser_context'], $sc['php_parser'], $sc['php_traverser']); }; $this['pretty_printer'] = function () { return new PrettyPrinter(); }; $this['filter'] = function () { return new DefaultFilter(); }; $this['store'] = function () { return new JsonStore(); }; $this['renderer'] = function ($sc) { return new Renderer($sc['twig'], $sc['themes'], $sc['tree'], $sc['indexer']); }; $this['traverser'] = function ($sc) { $visitors = [ new ClassVisitor\InheritdocClassVisitor(), new ClassVisitor\MethodClassVisitor(), new ClassVisitor\PropertyClassVisitor($sc['parser_context']), ]; if ($sc['remote_repository'] instanceof AbstractRemoteRepository) { $visitors[] = new ClassVisitor\ViewSourceClassVisitor($sc['remote_repository']); } return new ClassTraverser($visitors); }; $this['themes'] = function ($sc) { $templates = $sc['template_dirs']; $templates[] = __DIR__ . '/Resources/themes'; return new ThemeSet($templates); }; $this['twig'] = function () use ($config) { $dataDir = __DIR__ . '/../locale/'; $moReader = new MoReader( ['localeDir' => $dataDir] ); $moReader->readFile($dataDir . ($config['language'] ?? 'en' ) . '.mo'); Launcher::$plugin = $moReader; $twig = new Environment(new FilesystemLoader(['/']), [ 'strict_variables' => true, 'debug' => true, 'auto_reload' => true, 'cache' => false, ]); $twig->addExtension(new TwigExtension()); $twig->addExtension(new I18nExtension()); return $twig; }; $this['theme'] = 'default'; $this['title'] = 'API'; $this['version'] = 'main'; $this['template_dirs'] = []; $this['build_dir'] = getcwd() . '/build'; $this['cache_dir'] = getcwd() . '/cache'; $this['remote_repository'] = null; $this['source_dir'] = ''; $this['source_url'] = ''; $this['default_opened_level'] = 2; $this['insert_todos'] = false; $this['sort_class_properties'] = false; $this['sort_class_methods'] = false; $this['sort_class_constants'] = false; $this['sort_class_traits'] = false; $this['sort_class_interfaces'] = false; // include parent properties and methods on class pages $this['include_parent_data'] = true; foreach ($config as $key => $value) { $this[$key] = $value; } } } �����€��pGSUB ‹%z���ü���TOS/2> Iř��P���VcmapˆCěŠ��¨��~cvt Ő˙��4��� fpgmŠ‘Y��T�� pgasp�����,���glyfœäÖ��(���âheadrés�� ���6hhea<V��D���$hmtx ¸����h��� loca�`�q��t���maxp�Ý ˇ��|��� name ,°��œ��UpostßűE4��ô���7prepĺA+ź��Ä���†���� �0�>�DFLT�latn����������������������liga���������������������č���zź���Œzź��ŕ�1�������������������������PfEd�Ŕč�čR˙j�ZR�–������������������,�����V������P�����,�� ��V��$�������č˙˙��č�˙˙����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �����(���������č���č������č��č��������˙üVÖ��&�E@B G D��`TX�L�! && �+23'5'#"'.4>"2>4.ŒI}$%" !Đ>Ń $[1J?=II|J3V32WfV22VŐI=?J1[$ Ń>Đ! "%$}“|IS3VfV22VfW2�����|��ł�-+MË|ýš#���������œr@_<ő� č����Ű5ŇŢ����Ű5ŇŢ��˙üčÖ�������������R˙j��č����č����������������č��č��č�������`�q�����'���������s���V p��������Ţ����������������������������������"��������(������� �.��������9������ �+�?������ ��j�� ���*�}�� �� �§�� ���ł�� �� �Á�� �� �Í�� ���Ů�� �� �ď�� � �V�ű�� � �&QMaterial Design IconsdoctumRegulardoctumdoctumVersion 1.0doctumGenerated by svg2ttf from Fontello project.http://fontello.com�M�a�t�e�r�i�a�l� �D�e�s�i�g�n� �I�c�o�n�s�d�o�c�t�u�m�R�e�g�u�l�a�r�d�o�c�t�u�m�d�o�c�t�u�m�V�e�r�s�i�o�n� �1�.�0�d�o�c�t�u�m�G�e�n�e�r�a�t�e�d� �b�y� �s�v�g�2�t�t�f� �f�r�o�m� �F�o�n�t�e�l�l�o� �p�r�o�j�e�c�t�.�h�t�t�p�:�/�/�f�o�n�t�e�l�l�o�.�c�o�m����������� ������������������������searchplay�����˙˙���������������������R˙jR˙j°�, °�UXEY K¸�QK°SZX°4°(Y`f ŠUX°%aš��cc#b!!°�Y°�C#D˛��C`B-°,° `f-°, d °ŔP°&Z˛( CEcER[X!#!ŠX °PPX!°@Y °8PX!°8YY ą CEcEad°(PX!ą CEcE °0PX!°0Y °ŔPX f ŠŠa ° PX` ° PX!° ` °6PX!°6``YYY°+YY#°�PXeYY-°, E °%ad °CPX°#B°#B!!Y°`-°,#!#! dąbB °#Bą CEcą C°`Ec°*! °C Š Š°+ą0%°&QX`PaRYX#Y! °@SX°+!°@Y#°�PXeY-°,°C+˛��C`B-°,°#B# °�#Ba°bf°c°`°*-°, E ° Cc¸�b °�PX°@`Yf°c`D°`-°,˛ �CEB*!˛��C`B-° ,°�C#D˛��C`B-° , E °+#°�C°%` EŠ#a d ° PX!°�°0PX° °@YY#°�PXeY°%#aDD°`-° , E °+#°�C°%` EŠ#a d°$PX°�°@Y#°�PXeY°%#aDD°`-° , °�#B˛ EX!#!Y*!-° ,ąE°daD-°,°` ° CJ°�PX ° #BY° CJ°�RX ° #BY-°, °bf°c ¸�cŠ#a°C` Š` °#B#-°,KTXądDY$° e#x-°,KQXKSXądDY!Y$°e#x-°,ą�CUXąC°aB°+Y°�C°%Bą %Bą %B°# °%PXą�C`°%BŠŠ Š#a°*!#°a Š#a°*!ą�C`°%B°%a°*!Y° CG° CG`°b °�PX°@`Yf°c ° Cc¸�b °�PX°@`Yf°c`ą��#D°C°�>˛C`B-°,�ą�ETX°#B E° #B° #°`B `°aľ��BBŠ`ą+°r+"Y-°,ą�+-°,ą+-°,ą+-°,ą+-°,ą+-°,ą+-°,ą+-°,ą+-°,ą+-°,ą +-°,�° +ą�ETX°#B E° #B° #°`B `°aľ��BBŠ`ą+°r+"Y-°,ą�+-° ,ą+-°!,ą+-°",ą+-°#,ą+-°$,ą+-°%,ą+-°&,ą+-°',ą+-°(,ą +-°), <°`-°*, `°` C#°`C°%a°`°)*!-°+,°*+°**-°,, G ° Cc¸�b °�PX°@`Yf°c`#a8# ŠUX G ° Cc¸�b °�PX°@`Yf°c`#a8!Y-°-,�ą�ETX°°,*°0"Y-°.,�° +ą�ETX°°,*°0"Y-°/, 5°`-°0,�°Ec¸�b °�PX°@`Yf°c°+° Cc¸�b °�PX°@`Yf°c°+°�´�����D>#8ą/*-°1, < G ° Cc¸�b °�PX°@`Yf°c`°�Ca8-°2,.<-°3, < G ° Cc¸�b °�PX°@`Yf°c`°�Ca°Cc8-°4,ą�% . G°�#B°%IŠŠG#G#a Xb!Y°#B˛3*-°5,°�°%°%G#G#a° C+eŠ.# <Š8-°6,°�°%°% .G#G#a °#B° C+ °`PX °@QXł  ł&YBB# °C Š#G#G#a#F`°C°b °�PX°@`Yf°c` °+ ŠŠa °C`d#°CadPX°Ca°C`Y°%°b °�PX°@`Yf°ca# °&#Fa8#°CF°%°CG#G#a` °C°b °�PX°@`Yf°c`# °+#°C`°+°%a°%°b °�PX°@`Yf°c°&a °%`d#°%`dPX!#!Y# °&#Fa8Y-°7,°� °& .G#G#a#<8-°8,°� °#B F#G°+#a8-°9,°�°%°%G#G#a°�TX. <#!°%°%G#G#a °%°%G#G#a°%°%I°%aš��cc# Xb!Yc¸�b °�PX°@`Yf°c`#.# <Š8#!Y-°:,°� °C .G#G#a `° `f°b °�PX°@`Yf°c# <Š8-°;,# .F°%FRX <Y.ą++-°<,# .F°%FPX <Y.ą++-°=,# .F°%FRX <Y# .F°%FPX <Y.ą++-°>,°5+# .F°%FRX <Y.ą++-°?,°6+Š <°#BŠ8# .F°%FRX <Y.ą++°C.°++-°@,°�°%°& .G#G#a° C+# < .#8ą++-°A,ą%B°�°%°% .G#G#a °#B° C+ °`PX °@QXł  ł&YBB# G°C°b °�PX°@`Yf°c` °+ ŠŠa °C`d#°CadPX°Ca°C`Y°%°b °�PX°@`Yf°ca°%Fa8# <#8! F#G°+#a8!Yą++-°B,°5+.ą++-°C,°6+!# <°#B#8ą++°C.°++-°D,°� G°�#B˛�.°1*-°E,°� G°�#B˛�.°1*-°F,ą�°2*-°G,°4*-°H,°�E# . FŠ#a8ą++-°I,°#B°H+-°J,˛��A+-°K,˛�A+-°L,˛�A+-°M,˛A+-°N,˛��B+-°O,˛�B+-°P,˛�B+-°Q,˛B+-°R,˛��>+-°S,˛�>+-°T,˛�>+-°U,˛>+-°V,˛��@+-°W,˛�@+-°X,˛�@+-°Y,˛@+-°Z,˛��C+-°[,˛�C+-°\,˛�C+-°],˛C+-°^,˛��?+-°_,˛�?+-°`,˛�?+-°a,˛?+-°b,°7+.ą++-°c,°7+°;+-°d,°7+°<+-°e,°�°7+°=+-°f,°8+.ą++-°g,°8+°;+-°h,°8+°<+-°i,°8+°=+-°j,°9+.ą++-°k,°9+°;+-°l,°9+°<+-°m,°9+°=+-°n,°:+.ą++-°o,°:+°;+-°p,°:+°<+-°q,°:+°=+-°r,ł EX!#!YB+°e°$Px°0-�K¸�ČRXąŽY°š��cpą�B˛��*ą�Bł *ą�Bł�*ą�BşŔ�� *ą�Bş�@�� *ą�Dą$ˆQX°@ˆXądDą&ˆQXş€�@ˆcTXą�DYYYYł  *¸˙…°ą�D��wOFF����� 4�����L�����������������������GSUB��X���;���T ‹%zOS/2��”���C���V> Iřcmap��Ř���P��~ˆCěŠcvt ��(������ Ő˙fpgm��<���� pŠ‘Ygasp��Ě���������glyf��Ô���Ý���âœäÖhead��´���1���6réshhea��č������$<Vhmtx�� ��� ��� ¸��loca�� �������`�qmaxp�� ��� ��� �Ý ˇname�� 8��X��U ,°post�� ���&���7ßűE4prep�� ¸���z���†ĺA+źxœc`d``ŕb0`°c`rqó aŕËI,Écb`a€�<2›1'3=‘ĆĘą€i fƒˆ�&;H�xœc`d~Á8•ŠŠiC„f|Ŕ`ČČe`efŔ Ň\Sź`xÁČô?‹!Š9ˆaP˜$�� –�xœíą €0 ωĄ@ŒAAÁ0Tě_˛Eňśƒ—2°�]\ÂÁŒČ­Őrďlš;GŢx쯍!V÷t“Vţěéók-ţTÔç Ú̸ ]xœc`@Čô? „lÝ�xœ­ViwÓFyIœ„,% -jaÄÄi°F&lÁ€ A˛c ]œ­• ‹;éžń‰ßŕ_ódÚsč7~Zď/$´çpš“ŁwçÍŐĚŰeZ’Ř 둔›/ĹÔÖ&ě< é†MËQ|(;{!eŠÉßQ­–Úˇ‡DD"PľŽ°DűYšd|čQFËś¤WMĘ-=é.[ăA˝Uß~:Ęą;Ą¤f3th=˛%UU˘HŚ=RŇŚe¨ú+I+źżÂĚWÍPˆN"iźĆĐHŢg´Ęh5śă(Šl˛Ü(R$šáAy”ŐçäŠ Ę͐ňʧĺĂüˆŹŘŁœV°KśÓüž/y§w9?ą_oQśä@Ȏěŕět%_„[[aÜ´“í(Tv×wBlŮěT˙fňšFˇ+2˝ĐŒ`Š|…+?ĄĚţ!Y-œOů’GŁZ˛‘AëeNěK>Öăˆ)qÍYĐÝŃ Ôý’3 ö˜>üńŢ)– xËzG%œ)as4IÚ0r`%e‹*ŠőŽ˜8ĺuZÄ[Â~íÚїÎhăPwb<[[9QÉńhR§™LÚIÍŁ) ˘”t&xĚŻ(?˘I^mc5‰•GÓ8fƄD"-ÜKSA,;ą¤)ÍŁ˝šŚšv-Z¤ÉőÜŁ÷ôćV¸šÓSÚôłFV§b:Ř Óéiä/ńiÚĺ"Eéúé~LâAÖ2‘-6ԃoýŇËז…×Řîíó+¨}ÖDđ¤űĐOŐ) L…˜UˆV@b­kY–ÉŐŹŠČÔwCšVžŹÓŠrÇžŒqý_33–˜žß‰Ół#.=síKÓ|›u=š×ŠĹrqfyN§Y–ďë4ÇňćYž×éK[§Ł,?ÔiĺG:cyA štßÁ‹0ä0„ĽCX^‚!, ašCXaË%ÂňcÂr†°źŹeŐÔSIăڙXlB`bŽšĚEĺj*šTBťhTjCžn•TĎŞe ^<ň†9°H—Čš_1ŏFĺřÖ-o;WŔąęoŽö9ńR֋…?˙ŐÖT%˝bÍÓŤđ†žl'Ş6ŠxtM—ĎU=şţ_TTX ôH…X(ʲlpg"„:†j •CĚlĚ<´ëu˚ŸĂý71BPýř7 ܃NYIYíŕŹŐ×۲Ü;ƒr8,I17óúVř"#łŇ~‘Yʞ|pŒJeŘj­źŮ'1™Ţ$Ďq[Q6HÚŘΉ ó€yó&aęŞ äNᆠřanÁy'\˘zŁ,‡îEěó(¤ü[§âDö¨hŒŔłŮaŻďBĘoq $4ůĽ~ TĄŠ5Đ4Rn¨_ĆŮşmBĆô#*vòŹâĂÇ÷•’m„|¤ˆŐŁŁŸÖ^˘NŞÜ~f—Á 51{ßtqĘťZÉ2GmSˇ•SךCăU‡ęćQő˝ăě9kšnş'z_ÓŞŰÁĹ\,°ömŇR&Ôőa… ˘ËĹĽPęe4Iď¸ĐďPŠ˙ŤúŘ|ž+U…Ńq$ßNÔˇŃç` üŘGőĐ÷cčr .Ď÷šŸnôál™Ž˘ë§č70k­šYşÜĐtâ!G­Ž¸Ę |§qz¤šé!ŕcÝâŔ&€ĹŕÝľŒćS�ŁůŒ9>ŔçĚaĐdƒ-ć0ŘfÎŔsě2‡Ás|Áœu€/™Ă dƒˆ9 ž0'�xĘ_1‡Á×Ěađ sî|Ë1s$Ěa°ŻéÖ0Ě-^Đ] śAU SOXÜĂâPSeČţŽ†ý˝AĚţÁ Śţ¨éöú/ őgƒ˜ú‹ALýUӝ!ő7^ęď1őƒ˜úLżËeżŒ|— ”]l>çď‰÷ŰĹ@š��˙˙�xœŠąNÂPF˙ďżŇŞWj•ZH„–Ňnq¤Ł1ˇŃIs1aqęS”7`óQœxäi4Řx–3œCLtü†äSLw÷§€¸tę‚ÁO’ůĄ˛ @âă`Ć[%đ;UĂs§ zí¸7çgäákîŞĺľŽ\ËöRĎNný0cšÁ ¸7PŚc`­WŃ ěĘ`—íe´œäó™ÖežšT- Ł”áo=›ç“e$÷Ů.Ýp­>Kýšš˙\,*Ä5—Äd}0˘ź`Ëĺď}ú§Ž%K���xœc`d``�âŢ9b<ńü6_¸™_�En›^ş‡ ˙˙a~Át Čĺ``‰�Wđ +���xœc`d``úŸ$_00€IFTŔ �\÷š�č��č��č�������`�q�����'���������s���V p����xœ]=NĂ0�…_ú‡h‹!ŇŸ.,UŤčĐ=Mœ4UGŽ[Šçá�=ŕ�,\°đšx ÄŠó˝çç—Ä�.đŐuĹťb-ŞŠk8Áĺ:ý[Ë ň˝ĺ&:p-ˇ8ž,ˇńˆgË\bͧqJő€WËÎđfš†sě-×éż[n?,7qOË-úߖŰXŕÇrwÎËĚ3RÇ^"F˛ˆŁLL}•ňÍ&Ëh“xşŐźşˆU&únŻ2&2“šXîDąƄ"Ô*c•™$JäZ­Ľoܕ1ů°Ű ­ďú*Ĺ  $4bRUA!ŁšÂ‡"řô™Ý Ŝ™ˆ”p>Zůˋ˛÷ĐĽĘŽ>żw”˜0‘•Šę+Ś–Řq.°ĺt BęĹă˛íN8ź\[Ó9ôşX•ťr Ńĺ˙ĺÝňŇ_ˇjVxœc`b€�.쀙‘‰‘™‘…­85ą(9ƒĽ 'ą’�%R��xœcđŢÁp"(b##c_äƝ  ÉX6102h›š˜9 ,>0‹ÍiÓ 4'ÍÁÂffp٨ÂŘąÁĄ#b#sŠËF5oG#‹CGrHHI$lćabäŃÚÁřżuKďF&� v#ô��<?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg xmlns="http://www.w3.org/2000/svg"> <metadata>Material Design Icons</metadata> <defs> <font id="doctum" horiz-adv-x="1000" > <font-face font-family="doctum" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" /> <missing-glyph horiz-adv-x="1000" /> <glyph glyph-name="search" unicode="" d="M396 725c149 0 271-121 271-271 0-67-25-129-65-176l11-11h33l208-209-62-62-209 208v33l-11 11c-47-40-109-65-176-65-150 0-271 122-271 271 0 150 121 271 271 271m0-83c-104 0-188-84-188-188 0-104 84-187 188-187 104 0 187 83 187 187 0 104-83 188-187 188z" horiz-adv-x="1000" /> <glyph glyph-name="play" unicode="" d="M333 636v-583l459 291-459 292z" horiz-adv-x="1000" /> </font> </defs> </svg>wOF2�����Č�����L��q�����������������������TV�‚~ –p dv �6$  „U7 MŁ˘NmR˛ż8°Ű|ź�ƒ`Á áŠvęŁQßéÄ˙M´ŰnŢýu~dÓ÷ÍěŢ Čge–ń3íOR!şTŠˆ“˝ŰM†“]H"݀w—EŃ Ž8‘,Ă0ř´}ł˘OsĂ[ą|ÄVË7đu4łVÔőtŐÉŕV.—Pjťš|š5Š„BáňÍ85­׋˙˙kŠ˝ďÎl`3‰ŒţIZ…Ť3Ý7pś?8“pA¨€k…AÖ@XšĘ ç*|Ř-QCě‘ €QŞBźUÔľÁz Ż- €��˝4ӓĂĐă“H}­rĂÁŐu(Ŕ/~Ŕeýçӏ=˜2@¸bÓŁ| /şŕ"Ńň˙ŒŚ wËËBĘXä’DČ&ÚCg5+ŒžY"É .ú˙•(‘ŕ˙<š xfĹąf3¸@¸ÎSíÇč$RřuU(ОĆYzóÖć7¨ßO‰Œ3ążrĄŽ=ÁÚţםŞS;qރnPjŁ–  Ĺ‹�CgâE‡ ŸúXo,ŸŽ÷?'oŢu]˘i7yœŮ ‡9ŰńËŞ &´gÄz#׈8ŚÚÔTxq>]¨ťŘZ0Î,NháÖH1 YďAÉ9;Čr6ДÎsh,¤śgBánB‘ˆ*ŃyŸĄ0o^gU)Ł˜°bU_ǧˆÜ •ę´˙ƒłVSťQČ°—ĘŽk÷s˛ě…ó Ać<NîBč¸Ţƒ‡ęS×I4ˆŘÂĺTA%č …‰§˙¤+šΒŁʨ—ӣ׍Áq\ó Æ_m,áćdJ‘Z4î" ¤#rÚç¨Y ĄÖŽŠßSքČÄŚ˜ľ3OŠ7DyňÎ|^ó *ˇĘkG+ (aćk8k̔˜ą¸¤E,‹lnĂńőOşŞ‹(°˛¨V‰pÛĂTe=Ę Xűp÷MŢKoČÄyŇńŹě [éQÎŚ^*"6Ë ÖX͈XŽ íLÝM• Ő]T•KĺŢ ÂŽvqŕŹ0óg̜bORŕń´9cďşXlöä‰~<1SqůaÂ&QcL1 Ł Tüv[Ěb†w솪G/•uw+źPášđF%>dřRŔţT@Ô!ˆzÓĐ‚po[#$TBDSad„S ‚‘TEŃÔ!†zÄŇ0)jf%Ä/Tp‹V_5Ý)7Eý1 ވωŚę‰ÖnÚjjóc—q>’F˙Ş´#1‡św:V<B6<)zŘĆÓHĹ } Y…› űűŔç€íŠmÖď˝°CŚp+(ĹŁ@ך@z˛ O“ž° TvťE 4ÖWÝĹŠM­U:q>CűtOޗ×™�>HEjô™1pýźKŠéQƒd5h€ĎRbŠ{CťI8÷ŇO~Ěkî'‡ů€Ł =ŐE¤<E›$‘ŮE­ÄĎŔ,g†`{†gIë.KFhúťjMB›´›ÎĐsŤÔpČ"Ä8ŇBmí]+Ú˘”8Z´JP %\~­WĎÄČî?’PBŤ5›AŽc ô%M´"P6',h|42/‡ś4PcŢÁÇ e¸U];źZŻ†ci“3m4QŹLť6—×3]´xAĹăqfLƒvĆÉ~R“5Á{­ĺçś›_ŔýMÇw_2­Ŕů‹@–ušO§”Cuř2HH°€sćbˆŚżńŚFxÍfQă‹7ޞÚŰq:ü'Ś3ž6]W)Űt~R7ůÜ>[2qßYÚä =ˆmvWĘŞ˝çĚ´Ç"˜ťV`χĽ|zĹF9Ґ •dh¨ş|ĆŚ&]D1ŠŇęi1ĄĘZ fŁ‡A1&’Ay$šÁřP"–Áy$ž!řP(‘!y$™Ąřŕ”ĘĐ<’Î0|(•É°<’Íp|(’Ëđx$/›ö1Äöw$Ě0pĆ$ă)|@)ŔD#%&]Ś\ŚŤfňs0ëć`ÎÍÁź›ƒ…ü\,şšXrsąěć.ľ’řˆAňNŃ9Jԏ?("›ś6%“@hRÁŞU3A<”qŠ—Ô>6F'‹˜˝ôYńK8ú4ŃŰÔŢÔA>O~jźŘđţçÇ_|Ń~ńÓO>űěřěŽ?˙|VN^ú´zŻ*żĄĆÖóËa|ř݇„=PŘfŻůő•Ş˝[UťťUŐ-éíiiíööűDťÝä:ˆUĘëv+ßW‡ Ţţ˙Gěüů×$VŢs–艄ÍjL\i61—)5AwIÄLm’ˆ¸ ×ÂÎсўîFüó×)^ č’�ěż}şmůégáŕ›Ěż§ľjç?[!upHi‘2PA V„Ć| ň5‰ÉY™Y…XŽy B_žă ś!*oĂt  ™‰5 “dŁRĺŁE77ń4C Ń� Ţ>`ˆŮ=ĂŹ1‚ŮK"3ď…ŻŒĘěOcÔáďš&Ń5ß(žŃť”šVÇţč§fţÉĆ!ŞŃĺŒŃöäTĎק,źş1™śś6qIBÄŇcƒń'+˘Á5az,ĺŽPoؚq+Ś ›Ł)ăd՟´ĐލZ´`՘EŁÖŹ›×bܤus†­°2śŁĚ gął]˛ÔXŠ´ )˘ô:F3b{ĹU&ĽYƒgLĐL`‹.š§Š`5eۜ9x”f)|Ԍń2G%›Ę1cIŽqgiG%-e4|#Ź.b$Ąžúąň¤Î Ô~ńfK×CDWť¤Ý€‰Ď‡ lRńĆěGŒLz´ČŠŐëÓü"bŔĄ+†óĚeŸH:ßÜő ó|Ž1FĎ÷´ţ4z“Ń6ź e7áڏ˜™ĚńOŇ˙gWb”Gě��L��������������������LP�����������������������@rœ������������������ �d�o�c�t�u�m����R�e�g�u�l�a�r����V�e�r�s�i�o�n� �1�.�0��� �d�o�c�t�u�m����������€��pGSUB ‹%z���ü���TOS/2> Iř��P���VcmapˆCěŠ��¨��~cvt Ő˙��4��� fpgmŠ‘Y��T�� pgasp�����,���glyfœäÖ��(���âheadrés�� ���6hhea<V��D���$hmtx ¸����h��� loca�`�q��t���maxp�Ý ˇ��|��� name ,°��œ��UpostßűE4��ô���7prepĺA+ź��Ä���†���� �0�>�DFLT�latn����������������������liga���������������������č���zź���Œzź��ŕ�1�������������������������PfEd�Ŕč�čR˙j�ZR�–������������������,�����V������P�����,�� ��V��$�������č˙˙��č�˙˙����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �����(���������č���č������č��č��������˙üVÖ��&�E@B G D��`TX�L�! && �+23'5'#"'.4>"2>4.ŒI}$%" !Đ>Ń $[1J?=II|J3V32WfV22VŐI=?J1[$ Ń>Đ! "%$}“|IS3VfV22VfW2�����|��ł�-+MË|ýš#���������œr@_<ő� č����Ű5ŇŢ����Ű5ŇŢ��˙üčÖ�������������R˙j��č����č����������������č��č��č�������`�q�����'���������s���V p��������Ţ����������������������������������"��������(������� �.��������9������ �+�?������ ��j�� ���*�}�� �� �§�� ���ł�� �� �Á�� �� �Í�� ���Ů�� �� �ď�� � �V�ű�� � �&QMaterial Design IconsdoctumRegulardoctumdoctumVersion 1.0doctumGenerated by svg2ttf from Fontello project.http://fontello.com�M�a�t�e�r�i�a�l� �D�e�s�i�g�n� �I�c�o�n�s�d�o�c�t�u�m�R�e�g�u�l�a�r�d�o�c�t�u�m�d�o�c�t�u�m�V�e�r�s�i�o�n� �1�.�0�d�o�c�t�u�m�G�e�n�e�r�a�t�e�d� �b�y� �s�v�g�2�t�t�f� �f�r�o�m� �F�o�n�t�e�l�l�o� �p�r�o�j�e�c�t�.�h�t�t�p�:�/�/�f�o�n�t�e�l�l�o�.�c�o�m����������� ������������������������searchplay�����˙˙���������������������R˙jR˙j°�, °�UXEY K¸�QK°SZX°4°(Y`f ŠUX°%aš��cc#b!!°�Y°�C#D˛��C`B-°,° `f-°, d °ŔP°&Z˛( CEcER[X!#!ŠX °PPX!°@Y °8PX!°8YY ą CEcEad°(PX!ą CEcE °0PX!°0Y °ŔPX f ŠŠa ° PX` ° PX!° ` °6PX!°6``YYY°+YY#°�PXeYY-°, E °%ad °CPX°#B°#B!!Y°`-°,#!#! dąbB °#Bą CEcą C°`Ec°*! °C Š Š°+ą0%°&QX`PaRYX#Y! °@SX°+!°@Y#°�PXeY-°,°C+˛��C`B-°,°#B# °�#Ba°bf°c°`°*-°, E ° Cc¸�b °�PX°@`Yf°c`D°`-°,˛ �CEB*!˛��C`B-° ,°�C#D˛��C`B-° , E °+#°�C°%` EŠ#a d ° PX!°�°0PX° °@YY#°�PXeY°%#aDD°`-° , E °+#°�C°%` EŠ#a d°$PX°�°@Y#°�PXeY°%#aDD°`-° , °�#B˛ EX!#!Y*!-° ,ąE°daD-°,°` ° CJ°�PX ° #BY° CJ°�RX ° #BY-°, °bf°c ¸�cŠ#a°C` Š` °#B#-°,KTXądDY$° e#x-°,KQXKSXądDY!Y$°e#x-°,ą�CUXąC°aB°+Y°�C°%Bą %Bą %B°# °%PXą�C`°%BŠŠ Š#a°*!#°a Š#a°*!ą�C`°%B°%a°*!Y° CG° CG`°b °�PX°@`Yf°c ° Cc¸�b °�PX°@`Yf°c`ą��#D°C°�>˛C`B-°,�ą�ETX°#B E° #B° #°`B `°aľ��BBŠ`ą+°r+"Y-°,ą�+-°,ą+-°,ą+-°,ą+-°,ą+-°,ą+-°,ą+-°,ą+-°,ą+-°,ą +-°,�° +ą�ETX°#B E° #B° #°`B `°aľ��BBŠ`ą+°r+"Y-°,ą�+-° ,ą+-°!,ą+-°",ą+-°#,ą+-°$,ą+-°%,ą+-°&,ą+-°',ą+-°(,ą +-°), <°`-°*, `°` C#°`C°%a°`°)*!-°+,°*+°**-°,, G ° Cc¸�b °�PX°@`Yf°c`#a8# ŠUX G ° Cc¸�b °�PX°@`Yf°c`#a8!Y-°-,�ą�ETX°°,*°0"Y-°.,�° +ą�ETX°°,*°0"Y-°/, 5°`-°0,�°Ec¸�b °�PX°@`Yf°c°+° Cc¸�b °�PX°@`Yf°c°+°�´�����D>#8ą/*-°1, < G ° Cc¸�b °�PX°@`Yf°c`°�Ca8-°2,.<-°3, < G ° Cc¸�b °�PX°@`Yf°c`°�Ca°Cc8-°4,ą�% . G°�#B°%IŠŠG#G#a Xb!Y°#B˛3*-°5,°�°%°%G#G#a° C+eŠ.# <Š8-°6,°�°%°% .G#G#a °#B° C+ °`PX °@QXł  ł&YBB# °C Š#G#G#a#F`°C°b °�PX°@`Yf°c` °+ ŠŠa °C`d#°CadPX°Ca°C`Y°%°b °�PX°@`Yf°ca# °&#Fa8#°CF°%°CG#G#a` °C°b °�PX°@`Yf°c`# °+#°C`°+°%a°%°b °�PX°@`Yf°c°&a °%`d#°%`dPX!#!Y# °&#Fa8Y-°7,°� °& .G#G#a#<8-°8,°� °#B F#G°+#a8-°9,°�°%°%G#G#a°�TX. <#!°%°%G#G#a °%°%G#G#a°%°%I°%aš��cc# Xb!Yc¸�b °�PX°@`Yf°c`#.# <Š8#!Y-°:,°� °C .G#G#a `° `f°b °�PX°@`Yf°c# <Š8-°;,# .F°%FRX <Y.ą++-°<,# .F°%FPX <Y.ą++-°=,# .F°%FRX <Y# .F°%FPX <Y.ą++-°>,°5+# .F°%FRX <Y.ą++-°?,°6+Š <°#BŠ8# .F°%FRX <Y.ą++°C.°++-°@,°�°%°& .G#G#a° C+# < .#8ą++-°A,ą%B°�°%°% .G#G#a °#B° C+ °`PX °@QXł  ł&YBB# G°C°b °�PX°@`Yf°c` °+ ŠŠa °C`d#°CadPX°Ca°C`Y°%°b °�PX°@`Yf°ca°%Fa8# <#8! F#G°+#a8!Yą++-°B,°5+.ą++-°C,°6+!# <°#B#8ą++°C.°++-°D,°� G°�#B˛�.°1*-°E,°� G°�#B˛�.°1*-°F,ą�°2*-°G,°4*-°H,°�E# . FŠ#a8ą++-°I,°#B°H+-°J,˛��A+-°K,˛�A+-°L,˛�A+-°M,˛A+-°N,˛��B+-°O,˛�B+-°P,˛�B+-°Q,˛B+-°R,˛��>+-°S,˛�>+-°T,˛�>+-°U,˛>+-°V,˛��@+-°W,˛�@+-°X,˛�@+-°Y,˛@+-°Z,˛��C+-°[,˛�C+-°\,˛�C+-°],˛C+-°^,˛��?+-°_,˛�?+-°`,˛�?+-°a,˛?+-°b,°7+.ą++-°c,°7+°;+-°d,°7+°<+-°e,°�°7+°=+-°f,°8+.ą++-°g,°8+°;+-°h,°8+°<+-°i,°8+°=+-°j,°9+.ą++-°k,°9+°;+-°l,°9+°<+-°m,°9+°=+-°n,°:+.ą++-°o,°:+°;+-°p,°:+°<+-°q,°:+°=+-°r,ł EX!#!YB+°e°$Px°0-�K¸�ČRXąŽY°š��cpą�B˛��*ą�Bł *ą�Bł�*ą�BşŔ�� *ą�Bş�@�� *ą�Dą$ˆQX°@ˆXądDą&ˆQXş€�@ˆcTXą�DYYYYł  *¸˙…°ą�D��@font-face { font-family: "doctum"; src: url("./doctum.eot?39101248"); src: url("./doctum.eot?39101248#iefix") format("embedded-opentype"), url("./doctum.woff2?39101248") format("woff2"), url("./doctum.woff?39101248") format("woff"), url("./doctum.ttf?39101248") format("truetype"), url("./doctum.svg?39101248#doctum") format("svg"); font-weight: normal; font-style: normal; } /* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ /* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ /* @media screen and (-webkit-min-device-pixel-ratio:0) { @font-face { font-family: 'doctum'; src: url('./doctum.svg?39101248#doctum') format('svg'); } } */ .icon { font-family: "doctum"; font-style: normal; font-weight: normal; speak: never; display: inline-block; text-decoration: inherit; width: 1em; margin-right: 0.2em; text-align: center; /* opacity: .8; */ /* For safety - reset parent styles, that can break glyph codes*/ font-variant: normal; text-transform: none; /* fix buttons height, for twitter bootstrap */ line-height: 1em; /* Animation center compensation - margins should be symmetric */ /* remove if not needed */ margin-left: 0.2em; /* you can be more comfortable with increased icons size */ /* font-size: 120%; */ /* Font smoothing. That was taken from TWBS */ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; /* Uncomment for 3D effect */ /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ } .icon-search:before { content: "\e800"; } /* '' */ .icon-play:before { content: "\e801"; } /* '' */ {% extends "layout/layout.twig" %} {% from "macros.twig" import render_classes %} {% block title %}{% trans 'Interfaces' %} | {{ parent() }}{% endblock %} {% block body_class 'interfaces' %} {% block page_content %} <div class="page-header"> <h1>{% trans 'Interfaces' %}</h1> </div> {{ render_classes(interfaces) }} {% endblock %} {% extends "layout/layout.twig" %} {% from "macros.twig" import class_link %} {% block title %}{% trans 'Traits' %} | {{ parent() }}{% endblock %} {% block body_class 'traits' %} {% block page_content %} <div class="page-header"> <h1>{% trans 'Traits' %}</h1> </div> <div class="container-fluid underlined"> {% for class in classes %} {% if class.trait %} <div class="row"> <div class="col-md-6"> {{ class_link(class, true) }} </div> <div class="col-md-6"> {{ class.shortdesc|desc(class) }} </div> </div> {% endif %} {% endfor %} </div> {% endblock %} name: default static: 'css/doctum.css': 'css/doctum.css' 'css/bootstrap.min.css': 'css/bootstrap.min.css' 'css/bootstrap-theme.min.css': 'css/bootstrap-theme.min.css' 'fonts/doctum-font.css': 'fonts/doctum-font.css' 'fonts/doctum.woff': 'fonts/doctum.woff' 'fonts/doctum.woff2': 'fonts/doctum.woff2' 'fonts/doctum.ttf': 'fonts/doctum.ttf' 'fonts/doctum.svg': 'fonts/doctum.svg' 'fonts/doctum.eot': 'fonts/doctum.eot' 'js/jquery-3.5.1.slim.min.js': 'js/jquery-3.5.1.slim.min.js' 'js/bootstrap.min.js': 'js/bootstrap.min.js' 'js/typeahead.min.js': 'js/typeahead.min.js' global: 'index.twig': 'index.html' 'doc-index.twig': 'doc-index.html' 'namespaces.twig': 'namespaces.html' 'classes.twig': 'classes.html' 'interfaces.twig': 'interfaces.html' 'traits.twig': 'traits.html' 'opensearch.twig': 'opensearch.xml' 'search.twig': 'search.html' 'doctum.js.twig': 'doctum.js' namespace: 'namespace.twig': '%s.html' class: 'class.twig': '%s.html' {% if has_namespaces %} {% set extension = 'namespaces.twig' %} {% else %} {% set extension = 'classes.twig' %} {% endif %} {% extends extension %} {% block body_class 'index' %} {% from _self import element %} {% macro add_class_methods_index(class, prettyJsonOptions) %} {% if class.methods %} {% set from_link = class_path(class) %} {% for meth in class.methods %} {{- { type: 'Method'|trans, fromName: class.name, fromLink: from_link, link: method_path(meth), name: meth.__toString(), doc: meth.shortdesc|desc(class), }|json_encode(prettyJsonOptions)|raw -}}, {% endfor %} {% endif %} {% endmacro %} (function(root) { var bhIndex = null; var rootPath = ''; var treeHtml = '{{ element(tree, project.config('default_opened_level'), 0)|replace({"'": "\\'", "\n": ''})|spaceless|raw }}'; var searchTypeClasses = { '{{ 'Namespace'|trans|escape('js') }}': 'label-default', '{{ 'Class'|trans|escape('js') }}': 'label-info', '{{ 'Interface'|trans|escape('js') }}': 'label-primary', '{{ 'Trait'|trans|escape('js') }}': 'label-success', '{{ 'Method'|trans|escape('js') }}': 'label-danger', '_': 'label-warning' }; var searchIndex = [ {% from _self import add_class_methods_index %} {% set prettyJsonOptions = constant('JSON_UNESCAPED_SLASHES') b-or constant('JSON_UNESCAPED_UNICODE') %} {% for ns in namespaces -%} {{- { type: 'Namespace'|trans, link: namespace_path(ns), name: ns, doc: 'Namespace %s'|format(ns), }|json_encode(prettyJsonOptions)|raw -}}, {%- endfor %} {% for class in interfaces -%} {% set interface = { type: 'Interface'|trans, link: class_path(class), name: class.name, doc: class.shortdesc|desc(class), } %} {% if class.namespace %} {% set interface = { type: interface.type, fromName: class.namespace, fromLink: namespace_path(class.namespace), link: interface.link, name: interface.name, doc: interface.doc, } %} {% endif %} {{- interface|json_encode(prettyJsonOptions)|raw -}}, {{ add_class_methods_index(class, prettyJsonOptions) }} {% endfor %} {% for class in classes -%} {% set classOrTrait = { type: class.isTrait ? 'Trait'|trans : 'Class'|trans, link: class_path(class), name: class.name, doc: class.shortdesc|desc(class), } %} {% if class.namespace %} {% set classOrTrait = { type: classOrTrait.type, fromName: class.namespace, fromLink: namespace_path(class.namespace), link: classOrTrait.link, name: classOrTrait.name, doc: classOrTrait.doc, } %} {% endif %} {{- classOrTrait|json_encode(prettyJsonOptions)|raw -}}, {{ add_class_methods_index(class, prettyJsonOptions) }} {% endfor %} {# Override this block, search_index_extra, to add custom search entries! #} {% block search_index_extra '' %} // Fix trailing commas in the index {} ]; /** Tokenizes strings by namespaces and functions */ function tokenizer(term) { if (!term) { return []; } var tokens = [term]; var meth = term.indexOf('::'); // Split tokens into methods if "::" is found. if (meth > -1) { tokens.push(term.substr(meth + 2)); term = term.substr(0, meth - 2); } // Split by namespace or fake namespace. if (term.indexOf('\\') > -1) { tokens = tokens.concat(term.split('\\')); } else if (term.indexOf('_') > 0) { tokens = tokens.concat(term.split('_')); } // Merge in splitting the string by case and return tokens = tokens.concat(term.match(/(([A-Z]?[^A-Z]*)|([a-z]?[^a-z]*))/g).slice(0,-1)); return tokens; }; root.Doctum = { /** * Cleans the provided term. If no term is provided, then one is * grabbed from the query string "search" parameter. */ cleanSearchTerm: function(term) { // Grab from the query string if (typeof term === 'undefined') { var name = 'search'; var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"); var results = regex.exec(location.search); if (results === null) { return null; } term = decodeURIComponent(results[1].replace(/\+/g, " ")); } return term.replace(/<(?:.|\n)*?>/gm, ''); }, /** Searches through the index for a given term */ search: function(term) { // Create a new search index if needed if (!bhIndex) { bhIndex = new Bloodhound({ limit: 500, local: searchIndex, datumTokenizer: function (d) { return tokenizer(d.name); }, queryTokenizer: Bloodhound.tokenizers.whitespace }); bhIndex.initialize(); } results = []; bhIndex.get(term, function(matches) { results = matches; }); if (!rootPath) { return results; } // Fix the element links based on the current page depth. return $.map(results, function(ele) { if (ele.link.indexOf('..') > -1) { return ele; } ele.link = rootPath + ele.link; if (ele.fromLink) { ele.fromLink = rootPath + ele.fromLink; } return ele; }); }, /** Get a search class for a specific type */ getSearchClass: function(type) { return searchTypeClasses[type] || searchTypeClasses['_']; }, /** Add the left-nav tree to the site */ injectApiTree: function(ele) { ele.html(treeHtml); } }; $(function() { // Modify the HTML to work correctly based on the current depth rootPath = $('body').attr('data-root-path'); treeHtml = treeHtml.replace(/href="/g, 'href="' + rootPath); Doctum.injectApiTree($('#api-tree')); }); return root.Doctum; })(window); $(function() { {% if project.versions|length > 1 %} // Enable the version switcher $('#version-switcher').on('change', function() { window.location = $(this).val() }); var versionSwitcher = document.getElementById('version-switcher'); if (versionSwitcher) { var versionToSelect = document.evaluate( '//option[@data-version="{{ project.version|escape('js') }}"]', versionSwitcher, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue; if (versionToSelect && typeof versionToSelect.selected === 'boolean') { versionToSelect.selected = true; } } {% endif %} {% block treejs %} // Toggle left-nav divs on click $('#api-tree .hd span').on('click', function() { $(this).parent().parent().toggleClass('opened'); }); // Expand the parent namespaces of the current page. var expected = $('body').attr('data-name'); if (expected) { // Open the currently selected node and its parents. var container = $('#api-tree'); var node = $('#api-tree li[data-name="' + expected + '"]'); // Node might not be found when simulating namespaces if (node.length > 0) { node.addClass('active').addClass('opened'); node.parents('li').addClass('opened'); var scrollPos = node.offset().top - container.offset().top + container.scrollTop(); // Position the item nearer to the top of the screen. scrollPos -= 200; container.scrollTop(scrollPos); } } {% endblock %} {% verbatim %} var form = $('#search-form .typeahead'); form.typeahead({ hint: true, highlight: true, minLength: 1 }, { name: 'search', displayKey: 'name', source: function (q, cb) { cb(Doctum.search(q)); } }); // The selection is direct-linked when the user selects a suggestion. form.on('typeahead:selected', function(e, suggestion) { window.location = suggestion.link; }); // The form is submitted when the user hits enter. form.keypress(function (e) { if (e.which == 13) { $('#search-form').submit(); return true; } }); {% endverbatim %} }); {% macro element(tree, opened, depth) %} {% from _self import element %} <ul> {%- for element in tree -%} {%- if element[2] -%} <li data-name="namespace:{{ element[1]|replace({'\\': '_'})|raw }}" {% if depth < opened %}class="opened"{% endif %}> <div style="padding-left:{{ (depth * 18)|raw }}px" class="hd"> <span class="icon icon-play"></span> <a href="{{ namespace_path(element[1]) }}">{{ element[0]|raw }}</a> </div> <div class="bd"> {{ element(element[2], opened, depth + 1) -}} </div> </li> {%- else -%} <li data-name="class:{{ element[1]|replace({'\\': '_'}) }}" {% if depth < opened %}class="opened"{% endif %}> <div style="padding-left:{{ 8 + (depth * 18) }}px" class="hd leaf"> <a href="{{ class_path(element[1]) }}">{{ element[0] }}</a> </div> </li> {%- endif -%} {%- endfor %} </ul> {% endmacro %} {% extends "layout/layout.twig" %} {% block title %}{% trans 'Namespaces' %} | {{ parent() }}{% endblock %} {% block body_class 'namespaces' %} {% block page_content %} <div class="page-header"> <h1>{% trans 'Namespaces' %}</h1> </div> {% if namespaces %} <div class="namespaces clearfix"> {% set last_name = '' %} {% for namespace in namespaces %} {% set top_level = namespace|split('\\')|first %} {% if top_level != last_name %} {% if last_name %}</ul></div>{% endif %} <div class="namespace-container"> <h2>{{ top_level|raw }}</h2> <ul> {% set last_name = top_level %} {% endif %} <li><a href="{{ namespace_path(namespace) }}">{{ namespace|raw }}</a></li> {% endfor %} </ul> </div> </div> {% endif %} {% endblock %} {% extends "layout/layout.twig" %} {% from "macros.twig" import class_link, namespace_link, method_link, property_link %} {% block title %}{% trans 'Index' %} | {{ parent() }}{% endblock %} {% block body_class 'doc-index' %} {% block page_content %} <div class="page-header"> <h1>{% trans 'Index' %}</h1> </div> <ul class="pagination"> {% for letter in 'A'..'Z' %} {% if items[letter] is defined and items[letter]|length > 1 %} <li><a href="#letter{{ letter|raw }}">{{ letter|raw }}</a></li> {% else %} <li class="disabled"><a href="#letter{{ letter|raw }}">{{ letter|raw }}</a></li> {% endif %} {% endfor %} </ul> {% for letter, elements in items -%} <h2 id="letter{{ letter|raw }}">{{ letter|raw }}</h2> <dl id="index{{ letter|raw }}"> {%- for element in elements %} {%- set type = element[0] %} {%- set value = element[1] %} {%- if 'class' == type -%} <dt>{{ class_link(value) }}{% if has_namespaces %} — <em>{{'Class in namespace %s'|trans|format( namespace_link(value.namespace) )|raw}}{% endif %}</em></dt> <dd>{{ value.shortdesc|desc(value) }}</dd> {%- elseif 'method' == type -%} <dt>{{ method_link(value) }}() — <em>{{ 'Method in class %s'|trans|format( class_link(value.class) )|raw }}</em></dt> <dd>{{ value.shortdesc|desc(value.class) }}</dd> {%- elseif 'property' == type -%} <dt>${{ property_link(value) }} — <em>{{ 'Property in class %s'|trans|format( class_link(value.class) )|raw}}</em></dt> <dd>{{ value.shortdesc|desc(value.class) }}</dd> {%- endif %} {%- endfor %} </dl> {%- endfor %} {% endblock %} {% extends "layout/layout.twig" %} {% from "macros.twig" import render_classes, breadcrumbs, namespace_link, class_link, property_link, method_link, hint_link, source_link, method_source_link, deprecated, deprecations, todo, todos, class_category_name %} {% block title %}{{ class|raw }} | {{ parent() }}{% endblock %} {% block body_class 'class' %} {% block page_id 'class:' ~ (class.name|replace({'\\': '_'})) %} {% block below_menu %} {% if class.namespace %} <div class="namespace-breadcrumbs"> <ol class="breadcrumb"> <li><span class="label label-default">{{ class_category_name(class.getCategoryId()) }}</span></li> {{ breadcrumbs(class.namespace) -}} <li>{{ class.shortname|raw }}</li> </ol> </div> {% endif %} {% endblock %} {% block page_content %} <div class="page-header"> <h1> {{ class.name|split('\\')|last|raw }} {{ deprecated(class) }} </h1> </div> <p>{{ block('class_signature') }}</p> {{ deprecations(class) }} {% if class.shortdesc or class.longdesc %} <div class="description"> {% if class.shortdesc -%} <p>{{ class.shortdesc|desc(class) }}</p> {%- endif %} {% if class.longdesc -%} <p>{{ class.longdesc|desc(class) }}</p> {%- endif %} {% if project.config('insert_todos') == true %} {{ todos(class) }} {% endif %} </div> {% endif %} {% if traits %} <h2>{% trans 'Traits' %}</h2> {{ render_classes(traits) }} {% endif %} {% if constants %} <h2>{% trans 'Constants' %}</h2> {{ block('constants') }} {% endif %} {% if properties %} <h2>{% trans 'Properties' %}</h2> {{ block('properties') }} {% endif %} {% if methods %} <h2>{% trans 'Methods' %}</h2> {{ block('methods') }} <h2>{% trans 'Details' %}</h2> {{ block('methods_details') }} {% endif %} {% endblock %} {% block class_signature -%} {% if not class.interface and class.abstract %}abstract {% endif %} {{ class_category_name(class.getCategoryId()) }} <strong>{{ class.shortname|raw }}</strong> {%- if class.parent %} extends {{ class_link(class.parent) }} {%- endif %} {%- if class.interfaces|length > 0 %} implements {% for interface in class.interfaces %} {{- class_link(interface) }} {%- if not loop.last %}, {% endif %} {%- endfor %} {%- endif %} {{- source_link(project, class) }} {% endblock %} {% block method_signature -%} {% if method.final %}final{% endif %} {% if method.abstract %}abstract{% endif %} {% if method.static %}static{% endif %} {% if method.protected %}protected{% endif %} {% if method.private %}private{% endif %} {{ hint_link(method.hint) }} <strong>{{ method.name|raw }}</strong>{{ block('method_parameters_signature') }} {%- endblock %} {% block method_parameters_signature -%} {%- from "macros.twig" import method_parameters_signature -%} {{ method_parameters_signature(method) }} {{ deprecated(method) }} {%- endblock %} {% block parameters %} <table class="table table-condensed"> {% for parameter in method.parameters %} <tr> <td>{% if parameter.hint %}{{ hint_link(parameter.hint) }}{% endif %}</td> <td>{%- if parameter.variadic %}...{% endif %}${{ parameter.name|raw }}</td> <td>{{ parameter.shortdesc|desc(class) }}</td> </tr> {% endfor %} </table> {% endblock %} {% block return %} <table class="table table-condensed"> <tr> <td>{{ hint_link(method.hint) }}</td> <td>{{ method.hintDesc|desc(class) }}</td> </tr> </table> {% endblock %} {% block exceptions %} <table class="table table-condensed"> {% for exception in method.exceptions %} <tr> <td>{{ class_link(exception[0]) }}</td> <td>{{ exception[1]|desc(class) }}</td> </tr> {% endfor %} </table> {% endblock %} {% block see %} <table class="table table-condensed"> {% for see in method.see %} <tr> <td> {% if see[4] %} <a href="{{see[4]}}">{{see[4]}}</a> {% elseif see[3] %} {{ method_link(see[3], false, false) }} {% elseif see[2] %} {{ class_link(see[2]) }} {% else %} {{ see[0]|raw }} {% endif %} </td> <td>{{ see[1]|raw }}</td> </tr> {% endfor %} </table> {% endblock %} {% block constants %} <table class="table table-condensed"> {% for constant in constants %} <tr> <td>{{ constant.name|raw }}</td> <td class="last"> <p><em>{{ constant.shortdesc|desc(class) }}</em></p> <p>{{ constant.longdesc|desc(class) }}</p> </td> </tr> {% endfor %} </table> {% endblock %} {% block properties %} <table class="table table-condensed"> {% for property in properties %} <tr> <td class="type" id="property_{{ property.name|raw }}"> {% if property.static %}static{% endif %} {% if property.protected %}protected{% endif %} {% if property.private %}private{% endif %} {{ hint_link(property.hint) }} </td> <td>${{ property.name|raw }}</td> <td class="last">{{ property.shortdesc|desc(class) }}</td> <td> {%- if property.class is not same as(class) -%} <small>{{ 'from %s'|trans|format(property_link(property, false, true))|raw }}</small> {%- endif -%} </td> </tr> {% endfor %} </table> {% endblock %} {% block methods %} <div class="container-fluid underlined"> {% for method in methods %} <div class="row"> <div class="col-md-2 type"> {% if method.static %}static {% endif %}{{ hint_link(method.hint) }} </div> <div class="col-md-8 type"> <a href="#method_{{ method.name|raw }}">{{ method.name|raw }}</a>{{ block('method_parameters_signature') }} {% if not method.shortdesc %} <p class="no-description">{% trans 'No description' %}</p> {% else %} <p>{{ method.shortdesc|desc(class) }}</p> {%- endif %} </div> <div class="col-md-2"> {%- if method.class is not same as(class) -%} <small>{{ 'from %s'|trans|format(method_link(method, false, true))|raw }}</small> {%- endif -%} </div> </div> {% endfor %} </div> {% endblock %} {% block methods_details %} <div id="method-details"> {% for method in methods %} <div class="method-item"> {{ block('method') }} </div> {% endfor %} </div> {% endblock %} {% block method %} <h3 id="method_{{ method.name|raw }}"> <div class="location">{% if method.class is not same as(class) %}{{ 'in %s'|trans|format(method_link(method, false, true))|raw }} {% endif %}{{ method_source_link(method) }}</div> <code>{{ block('method_signature') }}</code> </h3> <div class="details"> {{ deprecations(method) }} {% if method.shortdesc or method.longdesc %} <div class="method-description"> {% if not method.shortdesc and not method.longdesc %} <p class="no-description">{% trans 'No description' %}</p> {% else %} {% if method.shortdesc -%} <p>{{ method.shortdesc|desc(class) }}</p> {%- endif %} {% if method.longdesc -%} <p>{{ method.longdesc|desc(class) }}</p> {%- endif %} {%- endif %} {% if project.config('insert_todos') == true %} {{ todos(method) }} {% endif %} </div> {% endif %} <div class="tags"> {% if method.parameters %} <h4>{% trans 'Parameters' %}</h4> {{ block('parameters') }} {% endif %} {% if method.hintDesc or method.hint %} <h4>{% trans 'Return Value' %}</h4> {{ block('return') }} {% endif %} {% if method.exceptions %} <h4>{% trans 'Exceptions' %}</h4> {{ block('exceptions') }} {% endif %} {% if method.tags('see') %} <h4>{% trans 'See also' %}</h4> {{ block('see') }} {% endif %} </div> </div> {% endblock %} {% extends "layout/layout.twig" %} {% from "macros.twig" import class_link, namespace_link, method_link, property_link %} {% block title %}{% trans 'Search' %} | {{ parent() }}{% endblock %} {% block body_class 'search-page' %} {% block page_content %} <div class="page-header"> <h1>{% trans 'Search' %}</h1> </div> <p>{% trans 'This page allows you to search through the API documentation for specific terms. Enter your search words into the box below and click "submit". The search will be performed on namespaces, classes, interfaces, traits, functions, and methods.' %}</p> <form class="form-inline" role="form" action="{{ path('search.html') }}"> <div class="form-group"> <label class="sr-only" for="search">{% trans 'Search' %}</label> <input type="search" class="form-control" name="search" id="search" placeholder="{% trans 'Search' %}"> </div> <button type="submit" class="btn btn-default">{% trans 'submit' %}</button> </form> <h2>{% trans 'Search Results' %}</h2> <div class="container-fluid"> <ul class="search-results"></ul> </div> {{ block('js_search') }} {% endblock %} {% block js_search %} <script type="text/javascript"> (function() { var term = Doctum.cleanSearchTerm(); if (!term) { $('h2').hide(); return; } $('#search').val(term); var container = $('.search-results'); var results = Doctum.search(term); var len = results.length; if (len == 0) { container.html('{% trans 'No results were found'%}'); return; } for (var i = 0, text_content = ''; i < len; i++) { var ele = results[i]; var contents = '<li><h2 class="clearfix">'; var class_name = Doctum.getSearchClass(ele.type); contents += '<a href="' + ele.link + '">' + ele.name + '</a>'; contents += '<div class="search-type type-' + ele.type + '"><span class="pull-right label ' + class_name + '">' + ele.type + '</span></div>'; contents += '</h2>'; if (ele.fromName && ele.fromLink) { contents += '<div class="search-from">from <a href="' + ele.fromLink + '">' + ele.fromName + '</a></div>'; } contents += '<div class="search-description">'; // Add description, decode entities, and strip wrapping quotes if (ele.doc) { text_content = $('<p>').text(ele.doc).html(); contents += text_content; } contents += '</div></li>'; container.append($(contents)); } })(); </script> {% endblock %} {% extends "layout/layout.twig" %} {% from "macros.twig" import breadcrumbs, render_classes, class_link, namespace_link %} {% block title %}{{ namespace|raw }} | {{ parent() }}{% endblock %} {% block body_class 'namespace' %} {% block page_id 'namespace:' ~ (namespace|replace({'\\': '_'})) %} {% block below_menu %} <div class="namespace-breadcrumbs"> <ol class="breadcrumb"> <li><span class="label label-default">{% trans 'Namespace' %}</span></li> {{ breadcrumbs(namespace) }} </ol> </div> {% endblock %} {% block page_content %} <div class="page-header"> <h1>{{ namespace|raw }}</h1> </div> {% if subnamespaces %} <h2>{% trans 'Namespaces' %}</h2> <div class="namespace-list"> {% for ns in subnamespaces %}{{ namespace_link(ns) }}{% endfor %} </div> {% endif %} {% if classes %} <h2>{% trans 'Classes' %}</h2> {{- render_classes(classes) -}} {% endif %} {% if interfaces %} <h2>{% trans 'Interfaces' %}</h2> {{- render_classes(interfaces) -}} {% endif %} {% if exceptions %} <h2>{% trans 'Exceptions' %}</h2> {{- render_classes(exceptions) -}} {% endif %} {% endblock %} {% macro class_category_name(categoryId) -%} {% if categoryId == 1 %}{% trans 'class' %}{% endif %} {% if categoryId == 2 %}{% trans 'interface' %}{% endif %} {% if categoryId == 3 %}{% trans 'trait' %}{% endif %} {%- endmacro %} {% macro namespace_link(namespace) -%} <a href="{{ namespace_path(namespace) }}">{{ namespace|raw }}</a> {%- endmacro %} {% macro class_link(class, absolute) -%} {%- if class.isProjectClass() -%} <a href="{{ class_path(class) }}"> {%- elseif class.isPhpClass() -%} <a target="_blank" rel="noopener" href="https://www.php.net/{{ class|raw }}"> {%- endif %} {{- abbr_class(class, absolute|default(false)) }} {%- if class.isProjectClass() or class.isPhpClass() %}</a>{% endif %} {%- endmacro %} {% macro method_link(method, absolute, classonly) -%} {# #}<a href="{{ method_path(method) }}"> {# #}{{- abbr_class(method.class) }}{% if not classonly|default(false) %}::{{ method.name|raw }}{% endif -%} {# #}</a> {%- endmacro %} {% macro property_link(property, absolute, classonly) -%} {# #}<a href="{{ property_path(property) }}"> {# #}{{- abbr_class(property.class) }}{% if not classonly|default(false) %}#{{ property.name|raw }}{% endif -%} {# #}</a> {%- endmacro %} {% macro hint_link(hints) -%} {%- from _self import class_link %} {%- if hints %} {%- for hint in hints %} {%- if hint.class %} {{- class_link(hint.name) }} {%- elseif hint.name %} {{- abbr_class(hint.name) }} {%- endif %} {%- if hint.array %}[]{% endif %} {%- if not loop.last %}|{% endif %} {%- endfor %} {%- endif %} {%- endmacro %} {% macro source_link(project, class) -%} {% if class.sourcepath %} (<a href="{{ class.sourcepath }}">{% trans 'View source'%}</a>) {%- endif %} {%- endmacro %} {% macro method_source_link(method) -%} {% if method.sourcepath %} {#- l10n: Method at line %s -#} <a href="{{ method.sourcepath }}">{{'at line %s'|trans|format( method.line )|raw }}</a> {%- else %} {#- l10n: Method at line %s -#} {{- 'at line %s'|trans|format( method.line )|raw -}} {%- endif %} {%- endmacro %} {% macro method_parameters_signature(method) -%} {%- from "macros.twig" import hint_link -%} ( {%- for parameter in method.parameters %} {%- if parameter.hashint %}{{ hint_link(parameter.hint) }} {% endif -%} {%- if parameter.variadic %}...{% endif %}${{ parameter.name|raw }} {%- if parameter.default is not null %} = {{ parameter.default }}{% endif %} {%- if not loop.last %}, {% endif %} {%- endfor -%} ) {%- endmacro %} {% macro render_classes(classes) -%} {% from _self import class_link, deprecated %} <div class="container-fluid underlined"> {% for class in classes %} <div class="row"> <div class="col-md-6"> {% if class.isInterface %} <em>{{- class_link(class, true) -}}</em> {% else %} {{- class_link(class, true) -}} {% endif %} {{- deprecated(class) -}} </div> <div class="col-md-6"> {{- class.shortdesc|desc(class) -}} </div> </div> {% endfor %} </div> {%- endmacro %} {% macro breadcrumbs(namespace) %} {% set current_ns = '' %} {% for ns in namespace|split('\\') %} {%- if current_ns -%} {% set current_ns = current_ns ~ '\\' ~ ns %} {%- else -%} {% set current_ns = ns %} {%- endif -%} <li><a href="{{ namespace_path(current_ns) }}">{{ ns|raw }}</a></li><li class="backslash">\</li> {%- endfor %} {% endmacro %} {% macro deprecated(reflection) %} {% if reflection.deprecated %}<small><sup><span class="label label-danger">{% trans 'deprecated' %}</span></sup></small>{% endif %} {% endmacro %} {% macro deprecations(reflection) %} {% from _self import deprecated %} {% if reflection.deprecated %} <p> {{ deprecated(reflection )}} {% for tag in reflection.deprecated %} <tr> <td>{{ tag[0]|raw }}</td> <td>{{ tag[1:]|join(' ')|raw }}</td> </tr> {% endfor %} </p> {% endif %} {% endmacro %} {% macro todo(reflection) %} {% if reflection.todo %}<small><sup><span class="label label-info">{% trans 'todo' %}</span></sup></small>{% endif %} {% endmacro %} {% macro todos(reflection) %} {% from _self import todo %} {% if reflection.todo %} <p> {{ todo(reflection )}} {% for tag in reflection.todo %} <tr> <td>{{ tag[0]|raw }}</td> <td>{{ tag[1:]|join(' ')|raw }}</td> </tr> {% endfor %} </p> {% endif %} {% endmacro %} {% extends "layout/layout.twig" %} {% from "macros.twig" import render_classes %} {% block title %}{% trans 'All Classes' %} | {{ parent() }}{% endblock %} {% block body_class 'classes' %} {% block page_content %} <div class="page-header"> <h1>{% trans 'Classes' %}</h1> </div> {{ render_classes(classes) }} {% endblock %} {% extends "layout/base.twig" %} {% block content %} <div id="content"> <div id="left-column"> {{ block('control_panel') }} {{ block('leftnav') }} </div> <div id="right-column"> {{ block('menu') }} {% block below_menu '' %} <div id="page-content"> {% block page_content '' %} </div> {{- block('footer') -}} </div> </div> {% endblock %} {% block menu %} <nav id="site-nav" class="navbar navbar-default" role="navigation"> <div class="container-fluid"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-elements"> <span class="sr-only">{% trans 'Toggle navigation' %}</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="{{ path('index.html') }}">{{ project.config('title') }}</a> </div> <div class="collapse navbar-collapse" id="navbar-elements"> <ul class="nav navbar-nav"> <li><a href="{{ path('classes.html') }}">{% trans 'Classes' %}</a></li> {% if has_namespaces -%} {# #}<li><a href="{{ path('namespaces.html') }}">{% trans 'Namespaces' %}</a></li> {% endif -%} <li><a href="{{ path('interfaces.html') }}">{% trans 'Interfaces' %}</a></li> <li><a href="{{ path('traits.html') }}">{% trans 'Traits' %}</a></li> <li><a href="{{ path('doc-index.html') }}">{% trans 'Index' %}</a></li> <li><a href="{{ path('search.html') }}">{% trans 'Search' %}</a></li> </ul> </div> </div> </nav> {% endblock %} {% block leftnav %} <div id="api-tree"></div> {% endblock %} {% block control_panel %} <div id="control-panel"> {% if project.versions|length > 1 %} <form action="#"> <select class="form-control" id="version-switcher" name="version"> {% for version in project.versions %} <option value="{{ path('../' ~ version ~ '/index.html') }}" data-version="{{ version }}">{{ version.longname }}</option> {% endfor %} </select> </form> {% endif %} <form id="search-form" action="{{ path('search.html') }}"> <span class="icon icon-search"></span> <input name="search" class="typeahead form-control" type="search" placeholder="{% trans 'Search' %}"> </form> </div> {% endblock %} {%- block footer -%} <div id="footer"> {{ 'Generated by %sDoctum, a API Documentation generator and fork of Sami%s.'|trans|format( '<a href="https://github.com/code-lts/doctum">', '</a>' )|raw }} </div> {%- endblock -%} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="robots" content="index, follow, all" /> <title>{% block title project.config('title') %} {% block head %} {%- endblock -%} {% if project.config('favicon') %} {% endif %} {% if project.config('base_url') %} {%- for version in project.versions -%} {% endfor -%} {% endif %} {% block html %} {% block content '' %} {% endblock %} {% if project.config('base_url') -%} {{ project.config('title') }} ({{ project.version }}) Searches {{ project.config('title') }} ({{ project.version }}) {{ project.config('title') }} {% if project.config('favicon') -%} {{ project.config('favicon') }} {% endif %} UTF-8 false {% endif %} /*! * Generated using the Bootstrap Customizer (https://getbootstrap.com/docs/3.4/customize/) *//*! * Bootstrap v3.4.1 (https://getbootstrap.com/) * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-default.disabled,.btn-primary.disabled,.btn-success.disabled,.btn-info.disabled,.btn-warning.disabled,.btn-danger.disabled,.btn-default[disabled],.btn-primary[disabled],.btn-success[disabled],.btn-info[disabled],.btn-warning[disabled],.btn-danger[disabled],fieldset[disabled] .btn-default,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-info,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-danger{-webkit-box-shadow:none;box-shadow:none}.btn-default .badge,.btn-primary .badge,.btn-success .badge,.btn-info .badge,.btn-warning .badge,.btn-danger .badge{text-shadow:none}.btn:active,.btn.active{background-image:none}.btn-default{background-image:-webkit-linear-gradient(top, #fff 0, #e0e0e0 100%);background-image:-o-linear-gradient(top, #fff 0, #e0e0e0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), to(#e0e0e0));background-image:linear-gradient(to bottom, #fff 0, #e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#dbdbdb;text-shadow:0 1px 0 #fff;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top, #428bca 0, #2d6ca2 100%);background-image:-o-linear-gradient(top, #428bca 0, #2d6ca2 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #428bca), to(#2d6ca2));background-image:linear-gradient(to bottom, #428bca 0, #2d6ca2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#2b669a}.btn-primary:hover,.btn-primary:focus{background-color:#2d6ca2;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2d6ca2;border-color:#2b669a}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#2d6ca2;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top, #5cb85c 0, #419641 100%);background-image:-o-linear-gradient(top, #5cb85c 0, #419641 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5cb85c), to(#419641));background-image:linear-gradient(to bottom, #5cb85c 0, #419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top, #5bc0de 0, #2aabd2 100%);background-image:-o-linear-gradient(top, #5bc0de 0, #2aabd2 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5bc0de), to(#2aabd2));background-image:linear-gradient(to bottom, #5bc0de 0, #2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top, #f0ad4e 0, #eb9316 100%);background-image:-o-linear-gradient(top, #f0ad4e 0, #eb9316 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f0ad4e), to(#eb9316));background-image:linear-gradient(to bottom, #f0ad4e 0, #eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top, #d9534f 0, #c12e2a 100%);background-image:-o-linear-gradient(top, #d9534f 0, #c12e2a 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9534f), to(#c12e2a));background-image:linear-gradient(to bottom, #d9534f 0, #c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-image:-webkit-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-o-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f5f5f5), to(#e8e8e8));background-image:linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x;background-color:#e8e8e8}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-image:-webkit-linear-gradient(top, #428bca 0, #357ebd 100%);background-image:-o-linear-gradient(top, #428bca 0, #357ebd 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #428bca), to(#357ebd));background-image:linear-gradient(to bottom, #428bca 0, #357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x;background-color:#357ebd}.navbar-default{background-image:-webkit-linear-gradient(top, #fff 0, #f8f8f8 100%);background-image:-o-linear-gradient(top, #fff 0, #f8f8f8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), to(#f8f8f8));background-image:linear-gradient(to bottom, #fff 0, #f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075)}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top, #dbdbdb 0, #e2e2e2 100%);background-image:-o-linear-gradient(top, #dbdbdb 0, #e2e2e2 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dbdbdb), to(#e2e2e2));background-image:linear-gradient(to bottom, #dbdbdb 0, #e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,0.075);box-shadow:inset 0 3px 9px rgba(0,0,0,0.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,0.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top, #3c3c3c 0, #222 100%);background-image:-o-linear-gradient(top, #3c3c3c 0, #222 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #3c3c3c), to(#222));background-image:linear-gradient(to bottom, #3c3c3c 0, #222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border-radius:4px}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top, #080808 0, #0f0f0f 100%);background-image:-o-linear-gradient(top, #080808 0, #0f0f0f 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #080808), to(#0f0f0f));background-image:linear-gradient(to bottom, #080808 0, #0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,0.25);box-shadow:inset 0 3px 9px rgba(0,0,0,0.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-image:-webkit-linear-gradient(top, #428bca 0, #357ebd 100%);background-image:-o-linear-gradient(top, #428bca 0, #357ebd 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #428bca), to(#357ebd));background-image:linear-gradient(to bottom, #428bca 0, #357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05)}.alert-success{background-image:-webkit-linear-gradient(top, #dff0d8 0, #c8e5bc 100%);background-image:-o-linear-gradient(top, #dff0d8 0, #c8e5bc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dff0d8), to(#c8e5bc));background-image:linear-gradient(to bottom, #dff0d8 0, #c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top, #d9edf7 0, #b9def0 100%);background-image:-o-linear-gradient(top, #d9edf7 0, #b9def0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9edf7), to(#b9def0));background-image:linear-gradient(to bottom, #d9edf7 0, #b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top, #fcf8e3 0, #f8efc0 100%);background-image:-o-linear-gradient(top, #fcf8e3 0, #f8efc0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fcf8e3), to(#f8efc0));background-image:linear-gradient(to bottom, #fcf8e3 0, #f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top, #f2dede 0, #e7c3c3 100%);background-image:-o-linear-gradient(top, #f2dede 0, #e7c3c3 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f2dede), to(#e7c3c3));background-image:linear-gradient(to bottom, #f2dede 0, #e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top, #ebebeb 0, #f5f5f5 100%);background-image:-o-linear-gradient(top, #ebebeb 0, #f5f5f5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #ebebeb), to(#f5f5f5));background-image:linear-gradient(to bottom, #ebebeb 0, #f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top, #428bca 0, #3071a9 100%);background-image:-o-linear-gradient(top, #428bca 0, #3071a9 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #428bca), to(#3071a9));background-image:linear-gradient(to bottom, #428bca 0, #3071a9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top, #5cb85c 0, #449d44 100%);background-image:-o-linear-gradient(top, #5cb85c 0, #449d44 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5cb85c), to(#449d44));background-image:linear-gradient(to bottom, #5cb85c 0, #449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top, #5bc0de 0, #31b0d5 100%);background-image:-o-linear-gradient(top, #5bc0de 0, #31b0d5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5bc0de), to(#31b0d5));background-image:linear-gradient(to bottom, #5bc0de 0, #31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top, #f0ad4e 0, #ec971f 100%);background-image:-o-linear-gradient(top, #f0ad4e 0, #ec971f 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f0ad4e), to(#ec971f));background-image:linear-gradient(to bottom, #f0ad4e 0, #ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top, #d9534f 0, #c9302c 100%);background-image:-o-linear-gradient(top, #d9534f 0, #c9302c 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9534f), to(#c9302c));background-image:linear-gradient(to bottom, #d9534f 0, #c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top, #428bca 0, #3278b3 100%);background-image:-o-linear-gradient(top, #428bca 0, #3278b3 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #428bca), to(#3278b3));background-image:linear-gradient(to bottom, #428bca 0, #3278b3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);background-repeat:repeat-x;border-color:#3278b3}.list-group-item.active .badge,.list-group-item.active:hover .badge,.list-group-item.active:focus .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-o-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f5f5f5), to(#e8e8e8));background-image:linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top, #428bca 0, #357ebd 100%);background-image:-o-linear-gradient(top, #428bca 0, #357ebd 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #428bca), to(#357ebd));background-image:linear-gradient(to bottom, #428bca 0, #357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top, #dff0d8 0, #d0e9c6 100%);background-image:-o-linear-gradient(top, #dff0d8 0, #d0e9c6 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dff0d8), to(#d0e9c6));background-image:linear-gradient(to bottom, #dff0d8 0, #d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top, #d9edf7 0, #c4e3f3 100%);background-image:-o-linear-gradient(top, #d9edf7 0, #c4e3f3 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9edf7), to(#c4e3f3));background-image:linear-gradient(to bottom, #d9edf7 0, #c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top, #fcf8e3 0, #faf2cc 100%);background-image:-o-linear-gradient(top, #fcf8e3 0, #faf2cc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fcf8e3), to(#faf2cc));background-image:linear-gradient(to bottom, #fcf8e3 0, #faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top, #f2dede 0, #ebcccc 100%);background-image:-o-linear-gradient(top, #f2dede 0, #ebcccc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f2dede), to(#ebcccc));background-image:linear-gradient(to bottom, #f2dede 0, #ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top, #e8e8e8 0, #f5f5f5 100%);background-image:-o-linear-gradient(top, #e8e8e8 0, #f5f5f5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #e8e8e8), to(#f5f5f5));background-image:linear-gradient(to bottom, #e8e8e8 0, #f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1)}/*! * Generated using the Bootstrap Customizer (https://getbootstrap.com/docs/3.4/customize/) *//*! * Bootstrap v3.4.1 (https://getbootstrap.com/) * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{color:#000 !important;text-shadow:none !important;background:transparent !important;-webkit-box-shadow:none !important;box-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover,a.text-primary:focus{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover,a.text-success:focus{color:#2b542c}.text-info{color:#31708f}a.text-info:hover,a.text-info:focus{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover,a.text-warning:focus{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover,a.text-danger:focus{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover,a.bg-primary:focus{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover,a.bg-info:focus{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover,a.bg-warning:focus{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover,a.bg-danger:focus{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:"\2014 \00A0"}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:""}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:"\00A0 \2014"}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.row-no-gutters{margin-right:0;margin-left:0}.row-no-gutters [class*="col-"]{padding-right:0;padding-left:0}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}table col[class*="col-"]{position:static;display:table-column;float:none}table td[class*="col-"],table th[class*="col-"]{position:static;display:table-cell;float:none}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none;appearance:none}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:34px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.33}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);opacity:.65;-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:focus,.btn-default.focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;background-image:none;border-color:#adadad}.btn-default:active:hover,.btn-default.active:hover,.open>.dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open>.dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open>.dropdown-toggle.btn-default.focus{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#3071a9;border-color:#193c5a}.btn-primary:hover{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;background-image:none;border-color:#285e8e}.btn-primary:active:hover,.btn-primary.active:hover,.open>.dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open>.dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open>.dropdown-toggle.btn-primary.focus{color:#fff;background-color:#285e8e;border-color:#193c5a}.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;background-image:none;border-color:#398439}.btn-success:active:hover,.btn-success.active:hover,.open>.dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open>.dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open>.dropdown-toggle.btn-success.focus{color:#fff;background-color:#398439;border-color:#255625}.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;background-image:none;border-color:#269abc}.btn-info:active:hover,.btn-info.active:hover,.open>.dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open>.dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open>.dropdown-toggle.btn-info.focus{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;background-image:none;border-color:#d58512}.btn-warning:active:hover,.btn-warning.active:hover,.open>.dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open>.dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open>.dropdown-toggle.btn-warning.focus{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;background-image:none;border-color:#ac2925}.btn-danger:active:hover,.btn-danger.active:hover,.open>.dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open>.dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open>.dropdown-toggle.btn-danger.focus{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;-o-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-right:15px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-right:-15px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{z-index:2;color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:3;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.33}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-right:15px;padding-left:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.panel-body:before,.panel-body:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.panel-body:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table !important}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table !important}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table !important}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table !important}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table !important}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}html, body, #content { height: 100%; } /* Site menu */ #site-nav.navbar-default { margin: 0; border-radius: 0; border-bottom: 1px solid #ccc; background-color: #edf3fe; background-image: none; } #site-nav.navbar-default .navbar-brand, #site-nav.navbar-default .navbar-nav > li > a { color: #000; } #site-nav.navbar-default .navbar-nav > li > a:hover { text-decoration: underline; } #navbar-elements { float: right; } @media (max-width: 768px) { #navbar-elements { float: none !important; } } /* Namespace breadcrumbs */ .namespace-breadcrumbs .breadcrumb { margin: 0 0 12px; border-radius: 0 0 4px 4px; padding-left: 35px; } .namespace-breadcrumbs .breadcrumb > li + li:before { content: ""; } .namespace-breadcrumbs .breadcrumb > .backslash { color: #ccc; } /* Site columns */ #right-column { margin-left: 20%; } #page-content { padding: 0 30px; } #left-column { width: 20%; position: fixed; height: 100%; border-right: 1px solid #ccc; line-height: 18px; font-size: 13px; display: flex; flex-flow: column; } @media (max-width: 991px) { #left-column { display: none; } #right-column { width: 100%; margin-left: 0; } } /* API Tree */ #api-tree { background: linear-gradient(to bottom, #fff, #fff 50%, #edf3fe 50%, #edf3fe); background-size: 100% 56px; overflow: auto; height: 100%; background-attachment: local; } #api-tree ul { list-style-type: none; margin: 0; padding: 0; } #api-tree ul li { padding: 0; margin: 0; } /* Prevents the menu from jittering on lad */ #api-tree .icon-play { width: 26px; } #api-tree ul li .hd { padding: 5px; } #api-tree li .hd:nth-child(even) { background-color: #edf3fe; } #api-tree ul li.opened > .hd span { -webkit-transform: rotate(90deg); -moz-transform: rotate(90deg); -o-transform: rotate(90deg); -ms-transform: rotate(90deg); transform: rotate(90deg); } #api-tree .bd { display: none; } #api-tree li.opened > .bd { display: block; } #api-tree li .hd:hover { background-color: #eee; } #api-tree li.active > .hd { background-color: #3875d7; } #api-tree li.active > .hd a { color: #eee; font-weight: bold; } #api-tree a { color: #222; } #api-tree div.leaf a { margin-left: 20px; } #api-tree .hd span { padding: 2px 8px; font-size: 15px; line-height: 85%; } /* Control panel, search form, version drop-down */ #control-panel { background: #e8e8e8; border-bottom: 1px solid #666; padding: 4px; } #control-panel form { margin: 4px 4px 5px 4px; } #search-form { position: relative; } #search-form input { width: 100%; padding-left: 28px; } #search-form span.icon-search { position: absolute; left: 5px; top: 8px; font-size: 20px; z-index: 2; } /* Typeahead */ .twitter-typeahead { width: 100%; z-index: 1; } .tt-dropdown-menu { overflow: auto; max-height: 260px; margin-top: 9px; background-color: #fff; border: 1px solid #ccc; border-radius: 8px; box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); padding: 8px; } .tt-dropdown-menu p { margin: 0; padding: 0; } .tt-suggestion { padding: 8px; border-bottom: 1px solid #ccc; font-size: 1.1em; } .tt-cursor { background-color: #3875d7; color: #fff; } /** General typography **/ .navbar { border-bottom: 0; } .page-header { margin: 0 0 20px; } abbr[title], abbr[data-original-title], abbr { border-bottom: none; cursor: pointer; } a abbr { cursor: pointer; } .method-description table, .description table { border: solid 1px #ccc; padding: 1em; margin: 1em; } .method-description td, .method-description th, .description td, .description th { padding: 0.75em 1.25em; } .method-description tbody tr:nth-child(even), .description tbody tr:nth-child(even) { background: #edf3fe; } .method-description tbody tr:nth-child(odd), .description tbody tr:nth-child(odd) { background: #fff; } .method-description thead tr, .description thead tr { background: #edf3fe; } /** General Doctum styling **/ .underlined > .row { padding: 8px 0; border-bottom: 1px solid #ddd; } #footer { text-align: right; margin: 30px; font-size: 11px; } .description { margin: 10px 0; padding: 10px; background-color: #efefef; } .description p { padding: 0; margin: 8px 0; } .method-description { margin: 0 0 24px 0; } .details { padding-left: 30px; } #method-details .method-item { margin-bottom: 30px; } .method-item h3, .method-item h3 code { background-color: #eee; } .method-item h3 { padding: 4px; margin-bottom: 20px; font-size: 20px; } .location { font-size: 11px; float: right; font-style: italic; } .namespace-list a { padding: 3px 8px; margin: 0 5px 5px 0; border: 1px solid #ddd; background-color: #f9f9f9; display: inline-block; border-radius: 4px; } .no-description { color: #ccc; font-size: 90%; } /* Namespaces page */ .namespaces { clear: both; } .namespaces .namespace-container { float: left; margin: 0 14px 14px 0; min-width: 30%; } .namespaces h2 { margin: 0 0 20px 0; } @media (max-width: 991px) { .namespaces .namespace-container { margin-right: 0; width: 100%; } } /** Code and pre tags **/ tt, code, pre { font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; } code { padding: 0; padding-top: 0.2em; padding-bottom: 0.2em; margin: 0; font-size: 85%; background-color: rgba(0, 0, 0, 0.04); border-radius: 3px; color: #333; } pre { padding: 16px; overflow: auto; font-size: 85%; line-height: 1.45; background-color: #f7f7f7; border-radius: 3px; } h2 { background-color: #edf3fe; padding: 4px 4px 4px 8px; font-size: 25px; margin: 20px 0; } /** Doc index **/ dt { font-weight: normal; } dd { margin-left: 30px; line-height: 1.5em; } #doc-index h2 { font-weight: bold; margin: 30px 0; } #doc-index .pagination { margin: 0; } /* Search page */ .search-results { list-style-type: none; padding: 0; margin: 0; } .search-results li { list-style-type: none; margin: 0; padding: 14px 0; border-bottom: 1px solid #ccc; } .search-results h2 { background: none; margin: 0; padding: 0; font-size: 18px; } .search-results h2 a { float: left; display: block; margin: 0 0 4px 0; } .search-results .search-type { float: right; margin: 0 0 4px 0; } .search-results .search-from { margin: 0 0 12px 0; font-size: 12px; color: #999; } .search-results .search-from a { font-style: italic; } .search-results .search-description { margin: 8px 0 0 30px; } .search-description { white-space: pre; } /*! * Generated using the Bootstrap Customizer (https://getbootstrap.com/docs/3.4/customize/) */ /*! * Bootstrap v3.4.1 (https://getbootstrap.com/) * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ html { font-family: sans-serif; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; } body { margin: 0; } article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block; } audio, canvas, progress, video { display: inline-block; vertical-align: baseline; } audio:not([controls]) { display: none; height: 0; } [hidden], template { display: none; } a { background-color: transparent; } a:active, a:hover { outline: 0; } abbr[title] { border-bottom: none; text-decoration: underline; text-decoration: underline dotted; } b, strong { font-weight: bold; } dfn { font-style: italic; } h1 { font-size: 2em; margin: 0.67em 0; } mark { background: #ff0; color: #000; } small { font-size: 80%; } sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sup { top: -0.5em; } sub { bottom: -0.25em; } img { border: 0; } svg:not(:root) { overflow: hidden; } figure { margin: 1em 40px; } hr { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; height: 0; } pre { overflow: auto; } code, kbd, pre, samp { font-family: monospace, monospace; font-size: 1em; } button, input, optgroup, select, textarea { color: inherit; font: inherit; margin: 0; } button { overflow: visible; } button, select { text-transform: none; } button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; cursor: pointer; } button[disabled], html input[disabled] { cursor: default; } button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; } input { line-height: normal; } input[type="checkbox"], input[type="radio"] { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; padding: 0; } input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { height: auto; } input[type="search"] { -webkit-appearance: textfield; -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; } input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } legend { border: 0; padding: 0; } textarea { overflow: auto; } optgroup { font-weight: bold; } table { border-collapse: collapse; border-spacing: 0; } td, th { padding: 0; } /*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ @media print { *, *:before, *:after { color: #000 !important; text-shadow: none !important; background: transparent !important; -webkit-box-shadow: none !important; box-shadow: none !important; } a, a:visited { text-decoration: underline; } a[href]:after { content: " (" attr(href) ")"; } abbr[title]:after { content: " (" attr(title) ")"; } a[href^="#"]:after, a[href^="javascript:"]:after { content: ""; } pre, blockquote { border: 1px solid #999; page-break-inside: avoid; } thead { display: table-header-group; } tr, img { page-break-inside: avoid; } img { max-width: 100% !important; } p, h2, h3 { orphans: 3; widows: 3; } h2, h3 { page-break-after: avoid; } .navbar { display: none; } .btn > .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px solid #000; } .table { border-collapse: collapse !important; } .table td, .table th { background-color: #fff !important; } .table-bordered th, .table-bordered td { border: 1px solid #ddd !important; } } * { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } *:before, *:after { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } html { font-size: 10px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } body { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.42857143; color: #333333; background-color: #ffffff; } input, button, select, textarea { font-family: inherit; font-size: inherit; line-height: inherit; } a { color: #428bca; text-decoration: none; } a:hover, a:focus { color: #2a6496; text-decoration: underline; } a:focus { outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } figure { margin: 0; } img { vertical-align: middle; } .img-responsive { display: block; max-width: 100%; height: auto; } .img-rounded { border-radius: 6px; } .img-thumbnail { padding: 4px; line-height: 1.42857143; background-color: #ffffff; border: 1px solid #dddddd; border-radius: 4px; -webkit-transition: all 0.2s ease-in-out; -o-transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out; display: inline-block; max-width: 100%; height: auto; } .img-circle { border-radius: 50%; } hr { margin-top: 20px; margin-bottom: 20px; border: 0; border-top: 1px solid #eeeeee; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); border: 0; } .sr-only-focusable:active, .sr-only-focusable:focus { position: static; width: auto; height: auto; margin: 0; overflow: visible; clip: auto; } [role="button"] { cursor: pointer; } h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { font-family: inherit; font-weight: 500; line-height: 1.1; color: inherit; } h1 small, h2 small, h3 small, h4 small, h5 small, h6 small, .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small, h1 .small, h2 .small, h3 .small, h4 .small, h5 .small, h6 .small, .h1 .small, .h2 .small, .h3 .small, .h4 .small, .h5 .small, .h6 .small { font-weight: 400; line-height: 1; color: #777777; } h1, .h1, h2, .h2, h3, .h3 { margin-top: 20px; margin-bottom: 10px; } h1 small, .h1 small, h2 small, .h2 small, h3 small, .h3 small, h1 .small, .h1 .small, h2 .small, .h2 .small, h3 .small, .h3 .small { font-size: 65%; } h4, .h4, h5, .h5, h6, .h6 { margin-top: 10px; margin-bottom: 10px; } h4 small, .h4 small, h5 small, .h5 small, h6 small, .h6 small, h4 .small, .h4 .small, h5 .small, .h5 .small, h6 .small, .h6 .small { font-size: 75%; } h1, .h1 { font-size: 36px; } h2, .h2 { font-size: 30px; } h3, .h3 { font-size: 24px; } h4, .h4 { font-size: 18px; } h5, .h5 { font-size: 14px; } h6, .h6 { font-size: 12px; } p { margin: 0 0 10px; } .lead { margin-bottom: 20px; font-size: 16px; font-weight: 300; line-height: 1.4; } @media (min-width: 768px) { .lead { font-size: 21px; } } small, .small { font-size: 85%; } mark, .mark { padding: .2em; background-color: #fcf8e3; } .text-left { text-align: left; } .text-right { text-align: right; } .text-center { text-align: center; } .text-justify { text-align: justify; } .text-nowrap { white-space: nowrap; } .text-lowercase { text-transform: lowercase; } .text-uppercase { text-transform: uppercase; } .text-capitalize { text-transform: capitalize; } .text-muted { color: #777777; } .text-primary { color: #428bca; } a.text-primary:hover, a.text-primary:focus { color: #3071a9; } .text-success { color: #3c763d; } a.text-success:hover, a.text-success:focus { color: #2b542c; } .text-info { color: #31708f; } a.text-info:hover, a.text-info:focus { color: #245269; } .text-warning { color: #8a6d3b; } a.text-warning:hover, a.text-warning:focus { color: #66512c; } .text-danger { color: #a94442; } a.text-danger:hover, a.text-danger:focus { color: #843534; } .bg-primary { color: #fff; background-color: #428bca; } a.bg-primary:hover, a.bg-primary:focus { background-color: #3071a9; } .bg-success { background-color: #dff0d8; } a.bg-success:hover, a.bg-success:focus { background-color: #c1e2b3; } .bg-info { background-color: #d9edf7; } a.bg-info:hover, a.bg-info:focus { background-color: #afd9ee; } .bg-warning { background-color: #fcf8e3; } a.bg-warning:hover, a.bg-warning:focus { background-color: #f7ecb5; } .bg-danger { background-color: #f2dede; } a.bg-danger:hover, a.bg-danger:focus { background-color: #e4b9b9; } .page-header { padding-bottom: 9px; margin: 40px 0 20px; border-bottom: 1px solid #eeeeee; } ul, ol { margin-top: 0; margin-bottom: 10px; } ul ul, ol ul, ul ol, ol ol { margin-bottom: 0; } .list-unstyled { padding-left: 0; list-style: none; } .list-inline { padding-left: 0; list-style: none; margin-left: -5px; } .list-inline > li { display: inline-block; padding-right: 5px; padding-left: 5px; } dl { margin-top: 0; margin-bottom: 20px; } dt, dd { line-height: 1.42857143; } dt { font-weight: 700; } dd { margin-left: 0; } @media (min-width: 768px) { .dl-horizontal dt { float: left; width: 160px; clear: left; text-align: right; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .dl-horizontal dd { margin-left: 180px; } } abbr[title], abbr[data-original-title] { cursor: help; } .initialism { font-size: 90%; text-transform: uppercase; } blockquote { padding: 10px 20px; margin: 0 0 20px; font-size: 17.5px; border-left: 5px solid #eeeeee; } blockquote p:last-child, blockquote ul:last-child, blockquote ol:last-child { margin-bottom: 0; } blockquote footer, blockquote small, blockquote .small { display: block; font-size: 80%; line-height: 1.42857143; color: #777777; } blockquote footer:before, blockquote small:before, blockquote .small:before { content: "\2014 \00A0"; } .blockquote-reverse, blockquote.pull-right { padding-right: 15px; padding-left: 0; text-align: right; border-right: 5px solid #eeeeee; border-left: 0; } .blockquote-reverse footer:before, blockquote.pull-right footer:before, .blockquote-reverse small:before, blockquote.pull-right small:before, .blockquote-reverse .small:before, blockquote.pull-right .small:before { content: ""; } .blockquote-reverse footer:after, blockquote.pull-right footer:after, .blockquote-reverse small:after, blockquote.pull-right small:after, .blockquote-reverse .small:after, blockquote.pull-right .small:after { content: "\00A0 \2014"; } address { margin-bottom: 20px; font-style: normal; line-height: 1.42857143; } code, kbd, pre, samp { font-family: Menlo, Monaco, Consolas, "Courier New", monospace; } code { padding: 2px 4px; font-size: 90%; color: #c7254e; background-color: #f9f2f4; border-radius: 4px; } kbd { padding: 2px 4px; font-size: 90%; color: #ffffff; background-color: #333333; border-radius: 3px; -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); } kbd kbd { padding: 0; font-size: 100%; font-weight: 700; -webkit-box-shadow: none; box-shadow: none; } pre { display: block; padding: 9.5px; margin: 0 0 10px; font-size: 13px; line-height: 1.42857143; color: #333333; word-break: break-all; word-wrap: break-word; background-color: #f5f5f5; border: 1px solid #cccccc; border-radius: 4px; } pre code { padding: 0; font-size: inherit; color: inherit; white-space: pre-wrap; background-color: transparent; border-radius: 0; } .pre-scrollable { max-height: 340px; overflow-y: scroll; } .container { padding-right: 15px; padding-left: 15px; margin-right: auto; margin-left: auto; } @media (min-width: 768px) { .container { width: 750px; } } @media (min-width: 992px) { .container { width: 970px; } } @media (min-width: 1200px) { .container { width: 1170px; } } .container-fluid { padding-right: 15px; padding-left: 15px; margin-right: auto; margin-left: auto; } .row { margin-right: -15px; margin-left: -15px; } .row-no-gutters { margin-right: 0; margin-left: 0; } .row-no-gutters [class*="col-"] { padding-right: 0; padding-left: 0; } .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { position: relative; min-height: 1px; padding-right: 15px; padding-left: 15px; } .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { float: left; } .col-xs-12 { width: 100%; } .col-xs-11 { width: 91.66666667%; } .col-xs-10 { width: 83.33333333%; } .col-xs-9 { width: 75%; } .col-xs-8 { width: 66.66666667%; } .col-xs-7 { width: 58.33333333%; } .col-xs-6 { width: 50%; } .col-xs-5 { width: 41.66666667%; } .col-xs-4 { width: 33.33333333%; } .col-xs-3 { width: 25%; } .col-xs-2 { width: 16.66666667%; } .col-xs-1 { width: 8.33333333%; } .col-xs-pull-12 { right: 100%; } .col-xs-pull-11 { right: 91.66666667%; } .col-xs-pull-10 { right: 83.33333333%; } .col-xs-pull-9 { right: 75%; } .col-xs-pull-8 { right: 66.66666667%; } .col-xs-pull-7 { right: 58.33333333%; } .col-xs-pull-6 { right: 50%; } .col-xs-pull-5 { right: 41.66666667%; } .col-xs-pull-4 { right: 33.33333333%; } .col-xs-pull-3 { right: 25%; } .col-xs-pull-2 { right: 16.66666667%; } .col-xs-pull-1 { right: 8.33333333%; } .col-xs-pull-0 { right: auto; } .col-xs-push-12 { left: 100%; } .col-xs-push-11 { left: 91.66666667%; } .col-xs-push-10 { left: 83.33333333%; } .col-xs-push-9 { left: 75%; } .col-xs-push-8 { left: 66.66666667%; } .col-xs-push-7 { left: 58.33333333%; } .col-xs-push-6 { left: 50%; } .col-xs-push-5 { left: 41.66666667%; } .col-xs-push-4 { left: 33.33333333%; } .col-xs-push-3 { left: 25%; } .col-xs-push-2 { left: 16.66666667%; } .col-xs-push-1 { left: 8.33333333%; } .col-xs-push-0 { left: auto; } .col-xs-offset-12 { margin-left: 100%; } .col-xs-offset-11 { margin-left: 91.66666667%; } .col-xs-offset-10 { margin-left: 83.33333333%; } .col-xs-offset-9 { margin-left: 75%; } .col-xs-offset-8 { margin-left: 66.66666667%; } .col-xs-offset-7 { margin-left: 58.33333333%; } .col-xs-offset-6 { margin-left: 50%; } .col-xs-offset-5 { margin-left: 41.66666667%; } .col-xs-offset-4 { margin-left: 33.33333333%; } .col-xs-offset-3 { margin-left: 25%; } .col-xs-offset-2 { margin-left: 16.66666667%; } .col-xs-offset-1 { margin-left: 8.33333333%; } .col-xs-offset-0 { margin-left: 0%; } @media (min-width: 768px) { .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { float: left; } .col-sm-12 { width: 100%; } .col-sm-11 { width: 91.66666667%; } .col-sm-10 { width: 83.33333333%; } .col-sm-9 { width: 75%; } .col-sm-8 { width: 66.66666667%; } .col-sm-7 { width: 58.33333333%; } .col-sm-6 { width: 50%; } .col-sm-5 { width: 41.66666667%; } .col-sm-4 { width: 33.33333333%; } .col-sm-3 { width: 25%; } .col-sm-2 { width: 16.66666667%; } .col-sm-1 { width: 8.33333333%; } .col-sm-pull-12 { right: 100%; } .col-sm-pull-11 { right: 91.66666667%; } .col-sm-pull-10 { right: 83.33333333%; } .col-sm-pull-9 { right: 75%; } .col-sm-pull-8 { right: 66.66666667%; } .col-sm-pull-7 { right: 58.33333333%; } .col-sm-pull-6 { right: 50%; } .col-sm-pull-5 { right: 41.66666667%; } .col-sm-pull-4 { right: 33.33333333%; } .col-sm-pull-3 { right: 25%; } .col-sm-pull-2 { right: 16.66666667%; } .col-sm-pull-1 { right: 8.33333333%; } .col-sm-pull-0 { right: auto; } .col-sm-push-12 { left: 100%; } .col-sm-push-11 { left: 91.66666667%; } .col-sm-push-10 { left: 83.33333333%; } .col-sm-push-9 { left: 75%; } .col-sm-push-8 { left: 66.66666667%; } .col-sm-push-7 { left: 58.33333333%; } .col-sm-push-6 { left: 50%; } .col-sm-push-5 { left: 41.66666667%; } .col-sm-push-4 { left: 33.33333333%; } .col-sm-push-3 { left: 25%; } .col-sm-push-2 { left: 16.66666667%; } .col-sm-push-1 { left: 8.33333333%; } .col-sm-push-0 { left: auto; } .col-sm-offset-12 { margin-left: 100%; } .col-sm-offset-11 { margin-left: 91.66666667%; } .col-sm-offset-10 { margin-left: 83.33333333%; } .col-sm-offset-9 { margin-left: 75%; } .col-sm-offset-8 { margin-left: 66.66666667%; } .col-sm-offset-7 { margin-left: 58.33333333%; } .col-sm-offset-6 { margin-left: 50%; } .col-sm-offset-5 { margin-left: 41.66666667%; } .col-sm-offset-4 { margin-left: 33.33333333%; } .col-sm-offset-3 { margin-left: 25%; } .col-sm-offset-2 { margin-left: 16.66666667%; } .col-sm-offset-1 { margin-left: 8.33333333%; } .col-sm-offset-0 { margin-left: 0%; } } @media (min-width: 992px) { .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { float: left; } .col-md-12 { width: 100%; } .col-md-11 { width: 91.66666667%; } .col-md-10 { width: 83.33333333%; } .col-md-9 { width: 75%; } .col-md-8 { width: 66.66666667%; } .col-md-7 { width: 58.33333333%; } .col-md-6 { width: 50%; } .col-md-5 { width: 41.66666667%; } .col-md-4 { width: 33.33333333%; } .col-md-3 { width: 25%; } .col-md-2 { width: 16.66666667%; } .col-md-1 { width: 8.33333333%; } .col-md-pull-12 { right: 100%; } .col-md-pull-11 { right: 91.66666667%; } .col-md-pull-10 { right: 83.33333333%; } .col-md-pull-9 { right: 75%; } .col-md-pull-8 { right: 66.66666667%; } .col-md-pull-7 { right: 58.33333333%; } .col-md-pull-6 { right: 50%; } .col-md-pull-5 { right: 41.66666667%; } .col-md-pull-4 { right: 33.33333333%; } .col-md-pull-3 { right: 25%; } .col-md-pull-2 { right: 16.66666667%; } .col-md-pull-1 { right: 8.33333333%; } .col-md-pull-0 { right: auto; } .col-md-push-12 { left: 100%; } .col-md-push-11 { left: 91.66666667%; } .col-md-push-10 { left: 83.33333333%; } .col-md-push-9 { left: 75%; } .col-md-push-8 { left: 66.66666667%; } .col-md-push-7 { left: 58.33333333%; } .col-md-push-6 { left: 50%; } .col-md-push-5 { left: 41.66666667%; } .col-md-push-4 { left: 33.33333333%; } .col-md-push-3 { left: 25%; } .col-md-push-2 { left: 16.66666667%; } .col-md-push-1 { left: 8.33333333%; } .col-md-push-0 { left: auto; } .col-md-offset-12 { margin-left: 100%; } .col-md-offset-11 { margin-left: 91.66666667%; } .col-md-offset-10 { margin-left: 83.33333333%; } .col-md-offset-9 { margin-left: 75%; } .col-md-offset-8 { margin-left: 66.66666667%; } .col-md-offset-7 { margin-left: 58.33333333%; } .col-md-offset-6 { margin-left: 50%; } .col-md-offset-5 { margin-left: 41.66666667%; } .col-md-offset-4 { margin-left: 33.33333333%; } .col-md-offset-3 { margin-left: 25%; } .col-md-offset-2 { margin-left: 16.66666667%; } .col-md-offset-1 { margin-left: 8.33333333%; } .col-md-offset-0 { margin-left: 0%; } } @media (min-width: 1200px) { .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { float: left; } .col-lg-12 { width: 100%; } .col-lg-11 { width: 91.66666667%; } .col-lg-10 { width: 83.33333333%; } .col-lg-9 { width: 75%; } .col-lg-8 { width: 66.66666667%; } .col-lg-7 { width: 58.33333333%; } .col-lg-6 { width: 50%; } .col-lg-5 { width: 41.66666667%; } .col-lg-4 { width: 33.33333333%; } .col-lg-3 { width: 25%; } .col-lg-2 { width: 16.66666667%; } .col-lg-1 { width: 8.33333333%; } .col-lg-pull-12 { right: 100%; } .col-lg-pull-11 { right: 91.66666667%; } .col-lg-pull-10 { right: 83.33333333%; } .col-lg-pull-9 { right: 75%; } .col-lg-pull-8 { right: 66.66666667%; } .col-lg-pull-7 { right: 58.33333333%; } .col-lg-pull-6 { right: 50%; } .col-lg-pull-5 { right: 41.66666667%; } .col-lg-pull-4 { right: 33.33333333%; } .col-lg-pull-3 { right: 25%; } .col-lg-pull-2 { right: 16.66666667%; } .col-lg-pull-1 { right: 8.33333333%; } .col-lg-pull-0 { right: auto; } .col-lg-push-12 { left: 100%; } .col-lg-push-11 { left: 91.66666667%; } .col-lg-push-10 { left: 83.33333333%; } .col-lg-push-9 { left: 75%; } .col-lg-push-8 { left: 66.66666667%; } .col-lg-push-7 { left: 58.33333333%; } .col-lg-push-6 { left: 50%; } .col-lg-push-5 { left: 41.66666667%; } .col-lg-push-4 { left: 33.33333333%; } .col-lg-push-3 { left: 25%; } .col-lg-push-2 { left: 16.66666667%; } .col-lg-push-1 { left: 8.33333333%; } .col-lg-push-0 { left: auto; } .col-lg-offset-12 { margin-left: 100%; } .col-lg-offset-11 { margin-left: 91.66666667%; } .col-lg-offset-10 { margin-left: 83.33333333%; } .col-lg-offset-9 { margin-left: 75%; } .col-lg-offset-8 { margin-left: 66.66666667%; } .col-lg-offset-7 { margin-left: 58.33333333%; } .col-lg-offset-6 { margin-left: 50%; } .col-lg-offset-5 { margin-left: 41.66666667%; } .col-lg-offset-4 { margin-left: 33.33333333%; } .col-lg-offset-3 { margin-left: 25%; } .col-lg-offset-2 { margin-left: 16.66666667%; } .col-lg-offset-1 { margin-left: 8.33333333%; } .col-lg-offset-0 { margin-left: 0%; } } table { background-color: transparent; } table col[class*="col-"] { position: static; display: table-column; float: none; } table td[class*="col-"], table th[class*="col-"] { position: static; display: table-cell; float: none; } caption { padding-top: 8px; padding-bottom: 8px; color: #777777; text-align: left; } th { text-align: left; } .table { width: 100%; max-width: 100%; margin-bottom: 20px; } .table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td { padding: 8px; line-height: 1.42857143; vertical-align: top; border-top: 1px solid #dddddd; } .table > thead > tr > th { vertical-align: bottom; border-bottom: 2px solid #dddddd; } .table > caption + thead > tr:first-child > th, .table > colgroup + thead > tr:first-child > th, .table > thead:first-child > tr:first-child > th, .table > caption + thead > tr:first-child > td, .table > colgroup + thead > tr:first-child > td, .table > thead:first-child > tr:first-child > td { border-top: 0; } .table > tbody + tbody { border-top: 2px solid #dddddd; } .table .table { background-color: #ffffff; } .table-condensed > thead > tr > th, .table-condensed > tbody > tr > th, .table-condensed > tfoot > tr > th, .table-condensed > thead > tr > td, .table-condensed > tbody > tr > td, .table-condensed > tfoot > tr > td { padding: 5px; } .table-bordered { border: 1px solid #dddddd; } .table-bordered > thead > tr > th, .table-bordered > tbody > tr > th, .table-bordered > tfoot > tr > th, .table-bordered > thead > tr > td, .table-bordered > tbody > tr > td, .table-bordered > tfoot > tr > td { border: 1px solid #dddddd; } .table-bordered > thead > tr > th, .table-bordered > thead > tr > td { border-bottom-width: 2px; } .table-striped > tbody > tr:nth-of-type(odd) { background-color: #f9f9f9; } .table-hover > tbody > tr:hover { background-color: #f5f5f5; } .table > thead > tr > td.active, .table > tbody > tr > td.active, .table > tfoot > tr > td.active, .table > thead > tr > th.active, .table > tbody > tr > th.active, .table > tfoot > tr > th.active, .table > thead > tr.active > td, .table > tbody > tr.active > td, .table > tfoot > tr.active > td, .table > thead > tr.active > th, .table > tbody > tr.active > th, .table > tfoot > tr.active > th { background-color: #f5f5f5; } .table-hover > tbody > tr > td.active:hover, .table-hover > tbody > tr > th.active:hover, .table-hover > tbody > tr.active:hover > td, .table-hover > tbody > tr:hover > .active, .table-hover > tbody > tr.active:hover > th { background-color: #e8e8e8; } .table > thead > tr > td.success, .table > tbody > tr > td.success, .table > tfoot > tr > td.success, .table > thead > tr > th.success, .table > tbody > tr > th.success, .table > tfoot > tr > th.success, .table > thead > tr.success > td, .table > tbody > tr.success > td, .table > tfoot > tr.success > td, .table > thead > tr.success > th, .table > tbody > tr.success > th, .table > tfoot > tr.success > th { background-color: #dff0d8; } .table-hover > tbody > tr > td.success:hover, .table-hover > tbody > tr > th.success:hover, .table-hover > tbody > tr.success:hover > td, .table-hover > tbody > tr:hover > .success, .table-hover > tbody > tr.success:hover > th { background-color: #d0e9c6; } .table > thead > tr > td.info, .table > tbody > tr > td.info, .table > tfoot > tr > td.info, .table > thead > tr > th.info, .table > tbody > tr > th.info, .table > tfoot > tr > th.info, .table > thead > tr.info > td, .table > tbody > tr.info > td, .table > tfoot > tr.info > td, .table > thead > tr.info > th, .table > tbody > tr.info > th, .table > tfoot > tr.info > th { background-color: #d9edf7; } .table-hover > tbody > tr > td.info:hover, .table-hover > tbody > tr > th.info:hover, .table-hover > tbody > tr.info:hover > td, .table-hover > tbody > tr:hover > .info, .table-hover > tbody > tr.info:hover > th { background-color: #c4e3f3; } .table > thead > tr > td.warning, .table > tbody > tr > td.warning, .table > tfoot > tr > td.warning, .table > thead > tr > th.warning, .table > tbody > tr > th.warning, .table > tfoot > tr > th.warning, .table > thead > tr.warning > td, .table > tbody > tr.warning > td, .table > tfoot > tr.warning > td, .table > thead > tr.warning > th, .table > tbody > tr.warning > th, .table > tfoot > tr.warning > th { background-color: #fcf8e3; } .table-hover > tbody > tr > td.warning:hover, .table-hover > tbody > tr > th.warning:hover, .table-hover > tbody > tr.warning:hover > td, .table-hover > tbody > tr:hover > .warning, .table-hover > tbody > tr.warning:hover > th { background-color: #faf2cc; } .table > thead > tr > td.danger, .table > tbody > tr > td.danger, .table > tfoot > tr > td.danger, .table > thead > tr > th.danger, .table > tbody > tr > th.danger, .table > tfoot > tr > th.danger, .table > thead > tr.danger > td, .table > tbody > tr.danger > td, .table > tfoot > tr.danger > td, .table > thead > tr.danger > th, .table > tbody > tr.danger > th, .table > tfoot > tr.danger > th { background-color: #f2dede; } .table-hover > tbody > tr > td.danger:hover, .table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td, .table-hover > tbody > tr:hover > .danger, .table-hover > tbody > tr.danger:hover > th { background-color: #ebcccc; } .table-responsive { min-height: .01%; overflow-x: auto; } @media screen and (max-width: 767px) { .table-responsive { width: 100%; margin-bottom: 15px; overflow-y: hidden; -ms-overflow-style: -ms-autohiding-scrollbar; border: 1px solid #dddddd; } .table-responsive > .table { margin-bottom: 0; } .table-responsive > .table > thead > tr > th, .table-responsive > .table > tbody > tr > th, .table-responsive > .table > tfoot > tr > th, .table-responsive > .table > thead > tr > td, .table-responsive > .table > tbody > tr > td, .table-responsive > .table > tfoot > tr > td { white-space: nowrap; } .table-responsive > .table-bordered { border: 0; } .table-responsive > .table-bordered > thead > tr > th:first-child, .table-responsive > .table-bordered > tbody > tr > th:first-child, .table-responsive > .table-bordered > tfoot > tr > th:first-child, .table-responsive > .table-bordered > thead > tr > td:first-child, .table-responsive > .table-bordered > tbody > tr > td:first-child, .table-responsive > .table-bordered > tfoot > tr > td:first-child { border-left: 0; } .table-responsive > .table-bordered > thead > tr > th:last-child, .table-responsive > .table-bordered > tbody > tr > th:last-child, .table-responsive > .table-bordered > tfoot > tr > th:last-child, .table-responsive > .table-bordered > thead > tr > td:last-child, .table-responsive > .table-bordered > tbody > tr > td:last-child, .table-responsive > .table-bordered > tfoot > tr > td:last-child { border-right: 0; } .table-responsive > .table-bordered > tbody > tr:last-child > th, .table-responsive > .table-bordered > tfoot > tr:last-child > th, .table-responsive > .table-bordered > tbody > tr:last-child > td, .table-responsive > .table-bordered > tfoot > tr:last-child > td { border-bottom: 0; } } fieldset { min-width: 0; padding: 0; margin: 0; border: 0; } legend { display: block; width: 100%; padding: 0; margin-bottom: 20px; font-size: 21px; line-height: inherit; color: #333333; border: 0; border-bottom: 1px solid #e5e5e5; } label { display: inline-block; max-width: 100%; margin-bottom: 5px; font-weight: 700; } input[type="search"] { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; -webkit-appearance: none; appearance: none; } input[type="radio"], input[type="checkbox"] { margin: 4px 0 0; margin-top: 1px \9; line-height: normal; } input[type="radio"][disabled], input[type="checkbox"][disabled], input[type="radio"].disabled, input[type="checkbox"].disabled, fieldset[disabled] input[type="radio"], fieldset[disabled] input[type="checkbox"] { cursor: not-allowed; } input[type="file"] { display: block; } input[type="range"] { display: block; width: 100%; } select[multiple], select[size] { height: auto; } input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus { outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } output { display: block; padding-top: 7px; font-size: 14px; line-height: 1.42857143; color: #555555; } .form-control { display: block; width: 100%; height: 34px; padding: 6px 12px; font-size: 14px; line-height: 1.42857143; color: #555555; background-color: #ffffff; background-image: none; border: 1px solid #cccccc; border-radius: 4px; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; } .form-control:focus { border-color: #66afe9; outline: 0; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6); box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6); } .form-control::-moz-placeholder { color: #777777; opacity: 1; } .form-control:-ms-input-placeholder { color: #777777; } .form-control::-webkit-input-placeholder { color: #777777; } .form-control::-ms-expand { background-color: transparent; border: 0; } .form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { background-color: #eeeeee; opacity: 1; } .form-control[disabled], fieldset[disabled] .form-control { cursor: not-allowed; } textarea.form-control { height: auto; } @media screen and (-webkit-min-device-pixel-ratio: 0) { input[type="date"].form-control, input[type="time"].form-control, input[type="datetime-local"].form-control, input[type="month"].form-control { line-height: 34px; } input[type="date"].input-sm, input[type="time"].input-sm, input[type="datetime-local"].input-sm, input[type="month"].input-sm, .input-group-sm input[type="date"], .input-group-sm input[type="time"], .input-group-sm input[type="datetime-local"], .input-group-sm input[type="month"] { line-height: 30px; } input[type="date"].input-lg, input[type="time"].input-lg, input[type="datetime-local"].input-lg, input[type="month"].input-lg, .input-group-lg input[type="date"], .input-group-lg input[type="time"], .input-group-lg input[type="datetime-local"], .input-group-lg input[type="month"] { line-height: 46px; } } .form-group { margin-bottom: 15px; } .radio, .checkbox { position: relative; display: block; margin-top: 10px; margin-bottom: 10px; } .radio.disabled label, .checkbox.disabled label, fieldset[disabled] .radio label, fieldset[disabled] .checkbox label { cursor: not-allowed; } .radio label, .checkbox label { min-height: 20px; padding-left: 20px; margin-bottom: 0; font-weight: 400; cursor: pointer; } .radio input[type="radio"], .radio-inline input[type="radio"], .checkbox input[type="checkbox"], .checkbox-inline input[type="checkbox"] { position: absolute; margin-top: 4px \9; margin-left: -20px; } .radio + .radio, .checkbox + .checkbox { margin-top: -5px; } .radio-inline, .checkbox-inline { position: relative; display: inline-block; padding-left: 20px; margin-bottom: 0; font-weight: 400; vertical-align: middle; cursor: pointer; } .radio-inline.disabled, .checkbox-inline.disabled, fieldset[disabled] .radio-inline, fieldset[disabled] .checkbox-inline { cursor: not-allowed; } .radio-inline + .radio-inline, .checkbox-inline + .checkbox-inline { margin-top: 0; margin-left: 10px; } .form-control-static { min-height: 34px; padding-top: 7px; padding-bottom: 7px; margin-bottom: 0; } .form-control-static.input-lg, .form-control-static.input-sm { padding-right: 0; padding-left: 0; } .input-sm { height: 30px; padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px; } select.input-sm { height: 30px; line-height: 30px; } textarea.input-sm, select[multiple].input-sm { height: auto; } .form-group-sm .form-control { height: 30px; padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px; } .form-group-sm select.form-control { height: 30px; line-height: 30px; } .form-group-sm textarea.form-control, .form-group-sm select[multiple].form-control { height: auto; } .form-group-sm .form-control-static { height: 30px; min-height: 32px; padding: 6px 10px; font-size: 12px; line-height: 1.5; } .input-lg { height: 46px; padding: 10px 16px; font-size: 18px; line-height: 1.33; border-radius: 6px; } select.input-lg { height: 46px; line-height: 46px; } textarea.input-lg, select[multiple].input-lg { height: auto; } .form-group-lg .form-control { height: 46px; padding: 10px 16px; font-size: 18px; line-height: 1.33; border-radius: 6px; } .form-group-lg select.form-control { height: 46px; line-height: 46px; } .form-group-lg textarea.form-control, .form-group-lg select[multiple].form-control { height: auto; } .form-group-lg .form-control-static { height: 46px; min-height: 38px; padding: 11px 16px; font-size: 18px; line-height: 1.33; } .has-feedback { position: relative; } .has-feedback .form-control { padding-right: 42.5px; } .form-control-feedback { position: absolute; top: 0; right: 0; z-index: 2; display: block; width: 34px; height: 34px; line-height: 34px; text-align: center; pointer-events: none; } .input-lg + .form-control-feedback, .input-group-lg + .form-control-feedback, .form-group-lg .form-control + .form-control-feedback { width: 46px; height: 46px; line-height: 46px; } .input-sm + .form-control-feedback, .input-group-sm + .form-control-feedback, .form-group-sm .form-control + .form-control-feedback { width: 30px; height: 30px; line-height: 30px; } .has-success .help-block, .has-success .control-label, .has-success .radio, .has-success .checkbox, .has-success .radio-inline, .has-success .checkbox-inline, .has-success.radio label, .has-success.checkbox label, .has-success.radio-inline label, .has-success.checkbox-inline label { color: #3c763d; } .has-success .form-control { border-color: #3c763d; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } .has-success .form-control:focus { border-color: #2b542c; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; } .has-success .input-group-addon { color: #3c763d; background-color: #dff0d8; border-color: #3c763d; } .has-success .form-control-feedback { color: #3c763d; } .has-warning .help-block, .has-warning .control-label, .has-warning .radio, .has-warning .checkbox, .has-warning .radio-inline, .has-warning .checkbox-inline, .has-warning.radio label, .has-warning.checkbox label, .has-warning.radio-inline label, .has-warning.checkbox-inline label { color: #8a6d3b; } .has-warning .form-control { border-color: #8a6d3b; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } .has-warning .form-control:focus { border-color: #66512c; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; } .has-warning .input-group-addon { color: #8a6d3b; background-color: #fcf8e3; border-color: #8a6d3b; } .has-warning .form-control-feedback { color: #8a6d3b; } .has-error .help-block, .has-error .control-label, .has-error .radio, .has-error .checkbox, .has-error .radio-inline, .has-error .checkbox-inline, .has-error.radio label, .has-error.checkbox label, .has-error.radio-inline label, .has-error.checkbox-inline label { color: #a94442; } .has-error .form-control { border-color: #a94442; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } .has-error .form-control:focus { border-color: #843534; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; } .has-error .input-group-addon { color: #a94442; background-color: #f2dede; border-color: #a94442; } .has-error .form-control-feedback { color: #a94442; } .has-feedback label ~ .form-control-feedback { top: 25px; } .has-feedback label.sr-only ~ .form-control-feedback { top: 0; } .help-block { display: block; margin-top: 5px; margin-bottom: 10px; color: #737373; } @media (min-width: 768px) { .form-inline .form-group { display: inline-block; margin-bottom: 0; vertical-align: middle; } .form-inline .form-control { display: inline-block; width: auto; vertical-align: middle; } .form-inline .form-control-static { display: inline-block; } .form-inline .input-group { display: inline-table; vertical-align: middle; } .form-inline .input-group .input-group-addon, .form-inline .input-group .input-group-btn, .form-inline .input-group .form-control { width: auto; } .form-inline .input-group > .form-control { width: 100%; } .form-inline .control-label { margin-bottom: 0; vertical-align: middle; } .form-inline .radio, .form-inline .checkbox { display: inline-block; margin-top: 0; margin-bottom: 0; vertical-align: middle; } .form-inline .radio label, .form-inline .checkbox label { padding-left: 0; } .form-inline .radio input[type="radio"], .form-inline .checkbox input[type="checkbox"] { position: relative; margin-left: 0; } .form-inline .has-feedback .form-control-feedback { top: 0; } } .form-horizontal .radio, .form-horizontal .checkbox, .form-horizontal .radio-inline, .form-horizontal .checkbox-inline { padding-top: 7px; margin-top: 0; margin-bottom: 0; } .form-horizontal .radio, .form-horizontal .checkbox { min-height: 27px; } .form-horizontal .form-group { margin-right: -15px; margin-left: -15px; } @media (min-width: 768px) { .form-horizontal .control-label { padding-top: 7px; margin-bottom: 0; text-align: right; } } .form-horizontal .has-feedback .form-control-feedback { right: 15px; } @media (min-width: 768px) { .form-horizontal .form-group-lg .control-label { padding-top: 11px; font-size: 18px; } } @media (min-width: 768px) { .form-horizontal .form-group-sm .control-label { padding-top: 6px; font-size: 12px; } } .btn { display: inline-block; margin-bottom: 0; font-weight: normal; text-align: center; white-space: nowrap; vertical-align: middle; -ms-touch-action: manipulation; touch-action: manipulation; cursor: pointer; background-image: none; border: 1px solid transparent; padding: 6px 12px; font-size: 14px; line-height: 1.42857143; border-radius: 4px; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .btn:focus, .btn:active:focus, .btn.active:focus, .btn.focus, .btn:active.focus, .btn.active.focus { outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } .btn:hover, .btn:focus, .btn.focus { color: #333333; text-decoration: none; } .btn:active, .btn.active { background-image: none; outline: 0; -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } .btn.disabled, .btn[disabled], fieldset[disabled] .btn { cursor: not-allowed; filter: alpha(opacity=65); opacity: 0.65; -webkit-box-shadow: none; box-shadow: none; } a.btn.disabled, fieldset[disabled] a.btn { pointer-events: none; } .btn-default { color: #333333; background-color: #ffffff; border-color: #cccccc; } .btn-default:focus, .btn-default.focus { color: #333333; background-color: #e6e6e6; border-color: #8c8c8c; } .btn-default:hover { color: #333333; background-color: #e6e6e6; border-color: #adadad; } .btn-default:active, .btn-default.active, .open > .dropdown-toggle.btn-default { color: #333333; background-color: #e6e6e6; background-image: none; border-color: #adadad; } .btn-default:active:hover, .btn-default.active:hover, .open > .dropdown-toggle.btn-default:hover, .btn-default:active:focus, .btn-default.active:focus, .open > .dropdown-toggle.btn-default:focus, .btn-default:active.focus, .btn-default.active.focus, .open > .dropdown-toggle.btn-default.focus { color: #333333; background-color: #d4d4d4; border-color: #8c8c8c; } .btn-default.disabled:hover, .btn-default[disabled]:hover, fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, .btn-default.disabled.focus, .btn-default[disabled].focus, fieldset[disabled] .btn-default.focus { background-color: #ffffff; border-color: #cccccc; } .btn-default .badge { color: #ffffff; background-color: #333333; } .btn-primary { color: #ffffff; background-color: #428bca; border-color: #357ebd; } .btn-primary:focus, .btn-primary.focus { color: #ffffff; background-color: #3071a9; border-color: #193c5a; } .btn-primary:hover { color: #ffffff; background-color: #3071a9; border-color: #285e8e; } .btn-primary:active, .btn-primary.active, .open > .dropdown-toggle.btn-primary { color: #ffffff; background-color: #3071a9; background-image: none; border-color: #285e8e; } .btn-primary:active:hover, .btn-primary.active:hover, .open > .dropdown-toggle.btn-primary:hover, .btn-primary:active:focus, .btn-primary.active:focus, .open > .dropdown-toggle.btn-primary:focus, .btn-primary:active.focus, .btn-primary.active.focus, .open > .dropdown-toggle.btn-primary.focus { color: #ffffff; background-color: #285e8e; border-color: #193c5a; } .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled.focus, .btn-primary[disabled].focus, fieldset[disabled] .btn-primary.focus { background-color: #428bca; border-color: #357ebd; } .btn-primary .badge { color: #428bca; background-color: #ffffff; } .btn-success { color: #ffffff; background-color: #5cb85c; border-color: #4cae4c; } .btn-success:focus, .btn-success.focus { color: #ffffff; background-color: #449d44; border-color: #255625; } .btn-success:hover { color: #ffffff; background-color: #449d44; border-color: #398439; } .btn-success:active, .btn-success.active, .open > .dropdown-toggle.btn-success { color: #ffffff; background-color: #449d44; background-image: none; border-color: #398439; } .btn-success:active:hover, .btn-success.active:hover, .open > .dropdown-toggle.btn-success:hover, .btn-success:active:focus, .btn-success.active:focus, .open > .dropdown-toggle.btn-success:focus, .btn-success:active.focus, .btn-success.active.focus, .open > .dropdown-toggle.btn-success.focus { color: #ffffff; background-color: #398439; border-color: #255625; } .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, .btn-success.disabled.focus, .btn-success[disabled].focus, fieldset[disabled] .btn-success.focus { background-color: #5cb85c; border-color: #4cae4c; } .btn-success .badge { color: #5cb85c; background-color: #ffffff; } .btn-info { color: #ffffff; background-color: #5bc0de; border-color: #46b8da; } .btn-info:focus, .btn-info.focus { color: #ffffff; background-color: #31b0d5; border-color: #1b6d85; } .btn-info:hover { color: #ffffff; background-color: #31b0d5; border-color: #269abc; } .btn-info:active, .btn-info.active, .open > .dropdown-toggle.btn-info { color: #ffffff; background-color: #31b0d5; background-image: none; border-color: #269abc; } .btn-info:active:hover, .btn-info.active:hover, .open > .dropdown-toggle.btn-info:hover, .btn-info:active:focus, .btn-info.active:focus, .open > .dropdown-toggle.btn-info:focus, .btn-info:active.focus, .btn-info.active.focus, .open > .dropdown-toggle.btn-info.focus { color: #ffffff; background-color: #269abc; border-color: #1b6d85; } .btn-info.disabled:hover, .btn-info[disabled]:hover, fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, .btn-info.disabled.focus, .btn-info[disabled].focus, fieldset[disabled] .btn-info.focus { background-color: #5bc0de; border-color: #46b8da; } .btn-info .badge { color: #5bc0de; background-color: #ffffff; } .btn-warning { color: #ffffff; background-color: #f0ad4e; border-color: #eea236; } .btn-warning:focus, .btn-warning.focus { color: #ffffff; background-color: #ec971f; border-color: #985f0d; } .btn-warning:hover { color: #ffffff; background-color: #ec971f; border-color: #d58512; } .btn-warning:active, .btn-warning.active, .open > .dropdown-toggle.btn-warning { color: #ffffff; background-color: #ec971f; background-image: none; border-color: #d58512; } .btn-warning:active:hover, .btn-warning.active:hover, .open > .dropdown-toggle.btn-warning:hover, .btn-warning:active:focus, .btn-warning.active:focus, .open > .dropdown-toggle.btn-warning:focus, .btn-warning:active.focus, .btn-warning.active.focus, .open > .dropdown-toggle.btn-warning.focus { color: #ffffff; background-color: #d58512; border-color: #985f0d; } .btn-warning.disabled:hover, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning:hover, .btn-warning.disabled:focus, .btn-warning[disabled]:focus, fieldset[disabled] .btn-warning:focus, .btn-warning.disabled.focus, .btn-warning[disabled].focus, fieldset[disabled] .btn-warning.focus { background-color: #f0ad4e; border-color: #eea236; } .btn-warning .badge { color: #f0ad4e; background-color: #ffffff; } .btn-danger { color: #ffffff; background-color: #d9534f; border-color: #d43f3a; } .btn-danger:focus, .btn-danger.focus { color: #ffffff; background-color: #c9302c; border-color: #761c19; } .btn-danger:hover { color: #ffffff; background-color: #c9302c; border-color: #ac2925; } .btn-danger:active, .btn-danger.active, .open > .dropdown-toggle.btn-danger { color: #ffffff; background-color: #c9302c; background-image: none; border-color: #ac2925; } .btn-danger:active:hover, .btn-danger.active:hover, .open > .dropdown-toggle.btn-danger:hover, .btn-danger:active:focus, .btn-danger.active:focus, .open > .dropdown-toggle.btn-danger:focus, .btn-danger:active.focus, .btn-danger.active.focus, .open > .dropdown-toggle.btn-danger.focus { color: #ffffff; background-color: #ac2925; border-color: #761c19; } .btn-danger.disabled:hover, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger:hover, .btn-danger.disabled:focus, .btn-danger[disabled]:focus, fieldset[disabled] .btn-danger:focus, .btn-danger.disabled.focus, .btn-danger[disabled].focus, fieldset[disabled] .btn-danger.focus { background-color: #d9534f; border-color: #d43f3a; } .btn-danger .badge { color: #d9534f; background-color: #ffffff; } .btn-link { font-weight: 400; color: #428bca; border-radius: 0; } .btn-link, .btn-link:active, .btn-link.active, .btn-link[disabled], fieldset[disabled] .btn-link { background-color: transparent; -webkit-box-shadow: none; box-shadow: none; } .btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active { border-color: transparent; } .btn-link:hover, .btn-link:focus { color: #2a6496; text-decoration: underline; background-color: transparent; } .btn-link[disabled]:hover, fieldset[disabled] .btn-link:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:focus { color: #777777; text-decoration: none; } .btn-lg, .btn-group-lg > .btn { padding: 10px 16px; font-size: 18px; line-height: 1.33; border-radius: 6px; } .btn-sm, .btn-group-sm > .btn { padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px; } .btn-xs, .btn-group-xs > .btn { padding: 1px 5px; font-size: 12px; line-height: 1.5; border-radius: 3px; } .btn-block { display: block; width: 100%; } .btn-block + .btn-block { margin-top: 5px; } input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block { width: 100%; } .fade { opacity: 0; -webkit-transition: opacity 0.15s linear; -o-transition: opacity 0.15s linear; transition: opacity 0.15s linear; } .fade.in { opacity: 1; } .collapse { display: none; } .collapse.in { display: block; } tr.collapse.in { display: table-row; } tbody.collapse.in { display: table-row-group; } .collapsing { position: relative; height: 0; overflow: hidden; -webkit-transition-property: height, visibility; -o-transition-property: height, visibility; transition-property: height, visibility; -webkit-transition-duration: 0.35s; -o-transition-duration: 0.35s; transition-duration: 0.35s; -webkit-transition-timing-function: ease; -o-transition-timing-function: ease; transition-timing-function: ease; } .btn-group, .btn-group-vertical { position: relative; display: inline-block; vertical-align: middle; } .btn-group > .btn, .btn-group-vertical > .btn { position: relative; float: left; } .btn-group > .btn:hover, .btn-group-vertical > .btn:hover, .btn-group > .btn:focus, .btn-group-vertical > .btn:focus, .btn-group > .btn:active, .btn-group-vertical > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn.active { z-index: 2; } .btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group { margin-left: -1px; } .btn-toolbar { margin-left: -5px; } .btn-toolbar .btn, .btn-toolbar .btn-group, .btn-toolbar .input-group { float: left; } .btn-toolbar > .btn, .btn-toolbar > .btn-group, .btn-toolbar > .input-group { margin-left: 5px; } .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { border-radius: 0; } .btn-group > .btn:first-child { margin-left: 0; } .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .btn-group > .btn:last-child:not(:first-child), .btn-group > .dropdown-toggle:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; } .btn-group > .btn-group { float: left; } .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { border-radius: 0; } .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { border-top-right-radius: 0; border-bottom-right-radius: 0; } .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { border-top-left-radius: 0; border-bottom-left-radius: 0; } .btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { outline: 0; } .btn-group > .btn + .dropdown-toggle { padding-right: 8px; padding-left: 8px; } .btn-group > .btn-lg + .dropdown-toggle { padding-right: 12px; padding-left: 12px; } .btn-group.open .dropdown-toggle { -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } .btn-group.open .dropdown-toggle.btn-link { -webkit-box-shadow: none; box-shadow: none; } .btn .caret { margin-left: 0; } .btn-lg .caret { border-width: 5px 5px 0; border-bottom-width: 0; } .dropup .btn-lg .caret { border-width: 0 5px 5px; } .btn-group-vertical > .btn, .btn-group-vertical > .btn-group, .btn-group-vertical > .btn-group > .btn { display: block; float: none; width: 100%; max-width: 100%; } .btn-group-vertical > .btn-group > .btn { float: none; } .btn-group-vertical > .btn + .btn, .btn-group-vertical > .btn + .btn-group, .btn-group-vertical > .btn-group + .btn, .btn-group-vertical > .btn-group + .btn-group { margin-top: -1px; margin-left: 0; } .btn-group-vertical > .btn:not(:first-child):not(:last-child) { border-radius: 0; } .btn-group-vertical > .btn:first-child:not(:last-child) { border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .btn-group-vertical > .btn:last-child:not(:first-child) { border-top-left-radius: 0; border-top-right-radius: 0; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; } .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { border-radius: 0; } .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { border-top-left-radius: 0; border-top-right-radius: 0; } .btn-group-justified { display: table; width: 100%; table-layout: fixed; border-collapse: separate; } .btn-group-justified > .btn, .btn-group-justified > .btn-group { display: table-cell; float: none; width: 1%; } .btn-group-justified > .btn-group .btn { width: 100%; } .btn-group-justified > .btn-group .dropdown-menu { left: auto; } [data-toggle="buttons"] > .btn input[type="radio"], [data-toggle="buttons"] > .btn-group > .btn input[type="radio"], [data-toggle="buttons"] > .btn input[type="checkbox"], [data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { position: absolute; clip: rect(0, 0, 0, 0); pointer-events: none; } .input-group { position: relative; display: table; border-collapse: separate; } .input-group[class*="col-"] { float: none; padding-right: 0; padding-left: 0; } .input-group .form-control { position: relative; z-index: 2; float: left; width: 100%; margin-bottom: 0; } .input-group .form-control:focus { z-index: 3; } .input-group-lg > .form-control, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .btn { height: 46px; padding: 10px 16px; font-size: 18px; line-height: 1.33; border-radius: 6px; } select.input-group-lg > .form-control, select.input-group-lg > .input-group-addon, select.input-group-lg > .input-group-btn > .btn { height: 46px; line-height: 46px; } textarea.input-group-lg > .form-control, textarea.input-group-lg > .input-group-addon, textarea.input-group-lg > .input-group-btn > .btn, select[multiple].input-group-lg > .form-control, select[multiple].input-group-lg > .input-group-addon, select[multiple].input-group-lg > .input-group-btn > .btn { height: auto; } .input-group-sm > .form-control, .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .btn { height: 30px; padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px; } select.input-group-sm > .form-control, select.input-group-sm > .input-group-addon, select.input-group-sm > .input-group-btn > .btn { height: 30px; line-height: 30px; } textarea.input-group-sm > .form-control, textarea.input-group-sm > .input-group-addon, textarea.input-group-sm > .input-group-btn > .btn, select[multiple].input-group-sm > .form-control, select[multiple].input-group-sm > .input-group-addon, select[multiple].input-group-sm > .input-group-btn > .btn { height: auto; } .input-group-addon, .input-group-btn, .input-group .form-control { display: table-cell; } .input-group-addon:not(:first-child):not(:last-child), .input-group-btn:not(:first-child):not(:last-child), .input-group .form-control:not(:first-child):not(:last-child) { border-radius: 0; } .input-group-addon, .input-group-btn { width: 1%; white-space: nowrap; vertical-align: middle; } .input-group-addon { padding: 6px 12px; font-size: 14px; font-weight: 400; line-height: 1; color: #555555; text-align: center; background-color: #eeeeee; border: 1px solid #cccccc; border-radius: 4px; } .input-group-addon.input-sm { padding: 5px 10px; font-size: 12px; border-radius: 3px; } .input-group-addon.input-lg { padding: 10px 16px; font-size: 18px; border-radius: 6px; } .input-group-addon input[type="radio"], .input-group-addon input[type="checkbox"] { margin-top: 0; } .input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group > .btn, .input-group-btn:first-child > .dropdown-toggle, .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), .input-group-btn:last-child > .btn-group:not(:last-child) > .btn { border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-group-addon:first-child { border-right: 0; } .input-group .form-control:last-child, .input-group-addon:last-child, .input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group > .btn, .input-group-btn:last-child > .dropdown-toggle, .input-group-btn:first-child > .btn:not(:first-child), .input-group-btn:first-child > .btn-group:not(:first-child) > .btn { border-top-left-radius: 0; border-bottom-left-radius: 0; } .input-group-addon:last-child { border-left: 0; } .input-group-btn { position: relative; font-size: 0; white-space: nowrap; } .input-group-btn > .btn { position: relative; } .input-group-btn > .btn + .btn { margin-left: -1px; } .input-group-btn > .btn:hover, .input-group-btn > .btn:focus, .input-group-btn > .btn:active { z-index: 2; } .input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group { margin-right: -1px; } .input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group { z-index: 2; margin-left: -1px; } .nav { padding-left: 0; margin-bottom: 0; list-style: none; } .nav > li { position: relative; display: block; } .nav > li > a { position: relative; display: block; padding: 10px 15px; } .nav > li > a:hover, .nav > li > a:focus { text-decoration: none; background-color: #eeeeee; } .nav > li.disabled > a { color: #777777; } .nav > li.disabled > a:hover, .nav > li.disabled > a:focus { color: #777777; text-decoration: none; cursor: not-allowed; background-color: transparent; } .nav .open > a, .nav .open > a:hover, .nav .open > a:focus { background-color: #eeeeee; border-color: #428bca; } .nav .nav-divider { height: 1px; margin: 9px 0; overflow: hidden; background-color: #e5e5e5; } .nav > li > a > img { max-width: none; } .nav-tabs { border-bottom: 1px solid #dddddd; } .nav-tabs > li { float: left; margin-bottom: -1px; } .nav-tabs > li > a { margin-right: 2px; line-height: 1.42857143; border: 1px solid transparent; border-radius: 4px 4px 0 0; } .nav-tabs > li > a:hover { border-color: #eeeeee #eeeeee #dddddd; } .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { color: #555555; cursor: default; background-color: #ffffff; border: 1px solid #dddddd; border-bottom-color: transparent; } .nav-tabs.nav-justified { width: 100%; border-bottom: 0; } .nav-tabs.nav-justified > li { float: none; } .nav-tabs.nav-justified > li > a { margin-bottom: 5px; text-align: center; } .nav-tabs.nav-justified > .dropdown .dropdown-menu { top: auto; left: auto; } @media (min-width: 768px) { .nav-tabs.nav-justified > li { display: table-cell; width: 1%; } .nav-tabs.nav-justified > li > a { margin-bottom: 0; } } .nav-tabs.nav-justified > li > a { margin-right: 0; border-radius: 4px; } .nav-tabs.nav-justified > .active > a, .nav-tabs.nav-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:focus { border: 1px solid #dddddd; } @media (min-width: 768px) { .nav-tabs.nav-justified > li > a { border-bottom: 1px solid #dddddd; border-radius: 4px 4px 0 0; } .nav-tabs.nav-justified > .active > a, .nav-tabs.nav-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:focus { border-bottom-color: #ffffff; } } .nav-pills > li { float: left; } .nav-pills > li > a { border-radius: 4px; } .nav-pills > li + li { margin-left: 2px; } .nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus { color: #ffffff; background-color: #428bca; } .nav-stacked > li { float: none; } .nav-stacked > li + li { margin-top: 2px; margin-left: 0; } .nav-justified { width: 100%; } .nav-justified > li { float: none; } .nav-justified > li > a { margin-bottom: 5px; text-align: center; } .nav-justified > .dropdown .dropdown-menu { top: auto; left: auto; } @media (min-width: 768px) { .nav-justified > li { display: table-cell; width: 1%; } .nav-justified > li > a { margin-bottom: 0; } } .nav-tabs-justified { border-bottom: 0; } .nav-tabs-justified > li > a { margin-right: 0; border-radius: 4px; } .nav-tabs-justified > .active > a, .nav-tabs-justified > .active > a:hover, .nav-tabs-justified > .active > a:focus { border: 1px solid #dddddd; } @media (min-width: 768px) { .nav-tabs-justified > li > a { border-bottom: 1px solid #dddddd; border-radius: 4px 4px 0 0; } .nav-tabs-justified > .active > a, .nav-tabs-justified > .active > a:hover, .nav-tabs-justified > .active > a:focus { border-bottom-color: #ffffff; } } .tab-content > .tab-pane { display: none; } .tab-content > .active { display: block; } .nav-tabs .dropdown-menu { margin-top: -1px; border-top-left-radius: 0; border-top-right-radius: 0; } .navbar { position: relative; min-height: 50px; margin-bottom: 20px; border: 1px solid transparent; } @media (min-width: 768px) { .navbar { border-radius: 4px; } } @media (min-width: 768px) { .navbar-header { float: left; } } .navbar-collapse { padding-right: 15px; padding-left: 15px; overflow-x: visible; border-top: 1px solid transparent; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); -webkit-overflow-scrolling: touch; } .navbar-collapse.in { overflow-y: auto; } @media (min-width: 768px) { .navbar-collapse { width: auto; border-top: 0; -webkit-box-shadow: none; box-shadow: none; } .navbar-collapse.collapse { display: block !important; height: auto !important; padding-bottom: 0; overflow: visible !important; } .navbar-collapse.in { overflow-y: visible; } .navbar-fixed-top .navbar-collapse, .navbar-static-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { padding-right: 0; padding-left: 0; } } .navbar-fixed-top, .navbar-fixed-bottom { position: fixed; right: 0; left: 0; z-index: 1030; } .navbar-fixed-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { max-height: 340px; } @media (max-device-width: 480px) and (orientation: landscape) { .navbar-fixed-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { max-height: 200px; } } @media (min-width: 768px) { .navbar-fixed-top, .navbar-fixed-bottom { border-radius: 0; } } .navbar-fixed-top { top: 0; border-width: 0 0 1px; } .navbar-fixed-bottom { bottom: 0; margin-bottom: 0; border-width: 1px 0 0; } .container > .navbar-header, .container-fluid > .navbar-header, .container > .navbar-collapse, .container-fluid > .navbar-collapse { margin-right: -15px; margin-left: -15px; } @media (min-width: 768px) { .container > .navbar-header, .container-fluid > .navbar-header, .container > .navbar-collapse, .container-fluid > .navbar-collapse { margin-right: 0; margin-left: 0; } } .navbar-static-top { z-index: 1000; border-width: 0 0 1px; } @media (min-width: 768px) { .navbar-static-top { border-radius: 0; } } .navbar-brand { float: left; height: 50px; padding: 15px 15px; font-size: 18px; line-height: 20px; } .navbar-brand:hover, .navbar-brand:focus { text-decoration: none; } .navbar-brand > img { display: block; } @media (min-width: 768px) { .navbar > .container .navbar-brand, .navbar > .container-fluid .navbar-brand { margin-left: -15px; } } .navbar-toggle { position: relative; float: right; padding: 9px 10px; margin-right: 15px; margin-top: 8px; margin-bottom: 8px; background-color: transparent; background-image: none; border: 1px solid transparent; border-radius: 4px; } .navbar-toggle:focus { outline: 0; } .navbar-toggle .icon-bar { display: block; width: 22px; height: 2px; border-radius: 1px; } .navbar-toggle .icon-bar + .icon-bar { margin-top: 4px; } @media (min-width: 768px) { .navbar-toggle { display: none; } } .navbar-nav { margin: 7.5px -15px; } .navbar-nav > li > a { padding-top: 10px; padding-bottom: 10px; line-height: 20px; } @media (max-width: 767px) { .navbar-nav .open .dropdown-menu { position: static; float: none; width: auto; margin-top: 0; background-color: transparent; border: 0; -webkit-box-shadow: none; box-shadow: none; } .navbar-nav .open .dropdown-menu > li > a, .navbar-nav .open .dropdown-menu .dropdown-header { padding: 5px 15px 5px 25px; } .navbar-nav .open .dropdown-menu > li > a { line-height: 20px; } .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus { background-image: none; } } @media (min-width: 768px) { .navbar-nav { float: left; margin: 0; } .navbar-nav > li { float: left; } .navbar-nav > li > a { padding-top: 15px; padding-bottom: 15px; } } .navbar-form { padding: 10px 15px; margin-right: -15px; margin-left: -15px; border-top: 1px solid transparent; border-bottom: 1px solid transparent; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); margin-top: 8px; margin-bottom: 8px; } @media (min-width: 768px) { .navbar-form .form-group { display: inline-block; margin-bottom: 0; vertical-align: middle; } .navbar-form .form-control { display: inline-block; width: auto; vertical-align: middle; } .navbar-form .form-control-static { display: inline-block; } .navbar-form .input-group { display: inline-table; vertical-align: middle; } .navbar-form .input-group .input-group-addon, .navbar-form .input-group .input-group-btn, .navbar-form .input-group .form-control { width: auto; } .navbar-form .input-group > .form-control { width: 100%; } .navbar-form .control-label { margin-bottom: 0; vertical-align: middle; } .navbar-form .radio, .navbar-form .checkbox { display: inline-block; margin-top: 0; margin-bottom: 0; vertical-align: middle; } .navbar-form .radio label, .navbar-form .checkbox label { padding-left: 0; } .navbar-form .radio input[type="radio"], .navbar-form .checkbox input[type="checkbox"] { position: relative; margin-left: 0; } .navbar-form .has-feedback .form-control-feedback { top: 0; } } @media (max-width: 767px) { .navbar-form .form-group { margin-bottom: 5px; } .navbar-form .form-group:last-child { margin-bottom: 0; } } @media (min-width: 768px) { .navbar-form { width: auto; padding-top: 0; padding-bottom: 0; margin-right: 0; margin-left: 0; border: 0; -webkit-box-shadow: none; box-shadow: none; } } .navbar-nav > li > .dropdown-menu { margin-top: 0; border-top-left-radius: 0; border-top-right-radius: 0; } .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { margin-bottom: 0; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .navbar-btn { margin-top: 8px; margin-bottom: 8px; } .navbar-btn.btn-sm { margin-top: 10px; margin-bottom: 10px; } .navbar-btn.btn-xs { margin-top: 14px; margin-bottom: 14px; } .navbar-text { margin-top: 15px; margin-bottom: 15px; } @media (min-width: 768px) { .navbar-text { float: left; margin-right: 15px; margin-left: 15px; } } @media (min-width: 768px) { .navbar-left { float: left !important; } .navbar-right { float: right !important; margin-right: -15px; } .navbar-right ~ .navbar-right { margin-right: 0; } } .navbar-default { background-color: #f8f8f8; border-color: #e7e7e7; } .navbar-default .navbar-brand { color: #777777; } .navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus { color: #5e5e5e; background-color: transparent; } .navbar-default .navbar-text { color: #777777; } .navbar-default .navbar-nav > li > a { color: #777777; } .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus { color: #333333; background-color: transparent; } .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus { color: #555555; background-color: #e7e7e7; } .navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus { color: #cccccc; background-color: transparent; } .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus { color: #555555; background-color: #e7e7e7; } @media (max-width: 767px) { .navbar-default .navbar-nav .open .dropdown-menu > li > a { color: #777777; } .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { color: #333333; background-color: transparent; } .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { color: #555555; background-color: #e7e7e7; } .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { color: #cccccc; background-color: transparent; } } .navbar-default .navbar-toggle { border-color: #dddddd; } .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { background-color: #dddddd; } .navbar-default .navbar-toggle .icon-bar { background-color: #888888; } .navbar-default .navbar-collapse, .navbar-default .navbar-form { border-color: #e7e7e7; } .navbar-default .navbar-link { color: #777777; } .navbar-default .navbar-link:hover { color: #333333; } .navbar-default .btn-link { color: #777777; } .navbar-default .btn-link:hover, .navbar-default .btn-link:focus { color: #333333; } .navbar-default .btn-link[disabled]:hover, fieldset[disabled] .navbar-default .btn-link:hover, .navbar-default .btn-link[disabled]:focus, fieldset[disabled] .navbar-default .btn-link:focus { color: #cccccc; } .navbar-inverse { background-color: #222222; border-color: #080808; } .navbar-inverse .navbar-brand { color: #777777; } .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus { color: #ffffff; background-color: transparent; } .navbar-inverse .navbar-text { color: #777777; } .navbar-inverse .navbar-nav > li > a { color: #777777; } .navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus { color: #ffffff; background-color: transparent; } .navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus { color: #ffffff; background-color: #080808; } .navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus { color: #444444; background-color: transparent; } .navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus { color: #ffffff; background-color: #080808; } @media (max-width: 767px) { .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { border-color: #080808; } .navbar-inverse .navbar-nav .open .dropdown-menu .divider { background-color: #080808; } .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { color: #777777; } .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { color: #ffffff; background-color: transparent; } .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { color: #ffffff; background-color: #080808; } .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { color: #444444; background-color: transparent; } } .navbar-inverse .navbar-toggle { border-color: #333333; } .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { background-color: #333333; } .navbar-inverse .navbar-toggle .icon-bar { background-color: #ffffff; } .navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form { border-color: #101010; } .navbar-inverse .navbar-link { color: #777777; } .navbar-inverse .navbar-link:hover { color: #ffffff; } .navbar-inverse .btn-link { color: #777777; } .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus { color: #ffffff; } .navbar-inverse .btn-link[disabled]:hover, fieldset[disabled] .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link[disabled]:focus, fieldset[disabled] .navbar-inverse .btn-link:focus { color: #444444; } .breadcrumb { padding: 8px 15px; margin-bottom: 20px; list-style: none; background-color: #f5f5f5; border-radius: 4px; } .breadcrumb > li { display: inline-block; } .breadcrumb > li + li:before { padding: 0 5px; color: #cccccc; content: "/\00a0"; } .breadcrumb > .active { color: #777777; } .pagination { display: inline-block; padding-left: 0; margin: 20px 0; border-radius: 4px; } .pagination > li { display: inline; } .pagination > li > a, .pagination > li > span { position: relative; float: left; padding: 6px 12px; margin-left: -1px; line-height: 1.42857143; color: #428bca; text-decoration: none; background-color: #ffffff; border: 1px solid #dddddd; } .pagination > li > a:hover, .pagination > li > span:hover, .pagination > li > a:focus, .pagination > li > span:focus { z-index: 2; color: #2a6496; background-color: #eeeeee; border-color: #dddddd; } .pagination > li:first-child > a, .pagination > li:first-child > span { margin-left: 0; border-top-left-radius: 4px; border-bottom-left-radius: 4px; } .pagination > li:last-child > a, .pagination > li:last-child > span { border-top-right-radius: 4px; border-bottom-right-radius: 4px; } .pagination > .active > a, .pagination > .active > span, .pagination > .active > a:hover, .pagination > .active > span:hover, .pagination > .active > a:focus, .pagination > .active > span:focus { z-index: 3; color: #ffffff; cursor: default; background-color: #428bca; border-color: #428bca; } .pagination > .disabled > span, .pagination > .disabled > span:hover, .pagination > .disabled > span:focus, .pagination > .disabled > a, .pagination > .disabled > a:hover, .pagination > .disabled > a:focus { color: #777777; cursor: not-allowed; background-color: #ffffff; border-color: #dddddd; } .pagination-lg > li > a, .pagination-lg > li > span { padding: 10px 16px; font-size: 18px; line-height: 1.33; } .pagination-lg > li:first-child > a, .pagination-lg > li:first-child > span { border-top-left-radius: 6px; border-bottom-left-radius: 6px; } .pagination-lg > li:last-child > a, .pagination-lg > li:last-child > span { border-top-right-radius: 6px; border-bottom-right-radius: 6px; } .pagination-sm > li > a, .pagination-sm > li > span { padding: 5px 10px; font-size: 12px; line-height: 1.5; } .pagination-sm > li:first-child > a, .pagination-sm > li:first-child > span { border-top-left-radius: 3px; border-bottom-left-radius: 3px; } .pagination-sm > li:last-child > a, .pagination-sm > li:last-child > span { border-top-right-radius: 3px; border-bottom-right-radius: 3px; } .label { display: inline; padding: .2em .6em .3em; font-size: 75%; font-weight: 700; line-height: 1; color: #ffffff; text-align: center; white-space: nowrap; vertical-align: baseline; border-radius: .25em; } a.label:hover, a.label:focus { color: #ffffff; text-decoration: none; cursor: pointer; } .label:empty { display: none; } .btn .label { position: relative; top: -1px; } .label-default { background-color: #777777; } .label-default[href]:hover, .label-default[href]:focus { background-color: #5e5e5e; } .label-primary { background-color: #428bca; } .label-primary[href]:hover, .label-primary[href]:focus { background-color: #3071a9; } .label-success { background-color: #5cb85c; } .label-success[href]:hover, .label-success[href]:focus { background-color: #449d44; } .label-info { background-color: #5bc0de; } .label-info[href]:hover, .label-info[href]:focus { background-color: #31b0d5; } .label-warning { background-color: #f0ad4e; } .label-warning[href]:hover, .label-warning[href]:focus { background-color: #ec971f; } .label-danger { background-color: #d9534f; } .label-danger[href]:hover, .label-danger[href]:focus { background-color: #c9302c; } .badge { display: inline-block; min-width: 10px; padding: 3px 7px; font-size: 12px; font-weight: bold; line-height: 1; color: #ffffff; text-align: center; white-space: nowrap; vertical-align: middle; background-color: #777777; border-radius: 10px; } .badge:empty { display: none; } .btn .badge { position: relative; top: -1px; } .btn-xs .badge, .btn-group-xs > .btn .badge { top: 0; padding: 1px 5px; } a.badge:hover, a.badge:focus { color: #ffffff; text-decoration: none; cursor: pointer; } .list-group-item.active > .badge, .nav-pills > .active > a > .badge { color: #428bca; background-color: #ffffff; } .list-group-item > .badge { float: right; } .list-group-item > .badge + .badge { margin-right: 5px; } .nav-pills > li > a > .badge { margin-left: 3px; } .list-group { padding-left: 0; margin-bottom: 20px; } .list-group-item { position: relative; display: block; padding: 10px 15px; margin-bottom: -1px; background-color: #ffffff; border: 1px solid #dddddd; } .list-group-item:first-child { border-top-left-radius: 4px; border-top-right-radius: 4px; } .list-group-item:last-child { margin-bottom: 0; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; } .list-group-item.disabled, .list-group-item.disabled:hover, .list-group-item.disabled:focus { color: #777777; cursor: not-allowed; background-color: #eeeeee; } .list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading { color: inherit; } .list-group-item.disabled .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text { color: #777777; } .list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus { z-index: 2; color: #ffffff; background-color: #428bca; border-color: #428bca; } .list-group-item.active .list-group-item-heading, .list-group-item.active:hover .list-group-item-heading, .list-group-item.active:focus .list-group-item-heading, .list-group-item.active .list-group-item-heading > small, .list-group-item.active:hover .list-group-item-heading > small, .list-group-item.active:focus .list-group-item-heading > small, .list-group-item.active .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading > .small, .list-group-item.active:focus .list-group-item-heading > .small { color: inherit; } .list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text { color: #e1edf7; } a.list-group-item, button.list-group-item { color: #555555; } a.list-group-item .list-group-item-heading, button.list-group-item .list-group-item-heading { color: #333333; } a.list-group-item:hover, button.list-group-item:hover, a.list-group-item:focus, button.list-group-item:focus { color: #555555; text-decoration: none; background-color: #f5f5f5; } button.list-group-item { width: 100%; text-align: left; } .list-group-item-success { color: #3c763d; background-color: #dff0d8; } a.list-group-item-success, button.list-group-item-success { color: #3c763d; } a.list-group-item-success .list-group-item-heading, button.list-group-item-success .list-group-item-heading { color: inherit; } a.list-group-item-success:hover, button.list-group-item-success:hover, a.list-group-item-success:focus, button.list-group-item-success:focus { color: #3c763d; background-color: #d0e9c6; } a.list-group-item-success.active, button.list-group-item-success.active, a.list-group-item-success.active:hover, button.list-group-item-success.active:hover, a.list-group-item-success.active:focus, button.list-group-item-success.active:focus { color: #fff; background-color: #3c763d; border-color: #3c763d; } .list-group-item-info { color: #31708f; background-color: #d9edf7; } a.list-group-item-info, button.list-group-item-info { color: #31708f; } a.list-group-item-info .list-group-item-heading, button.list-group-item-info .list-group-item-heading { color: inherit; } a.list-group-item-info:hover, button.list-group-item-info:hover, a.list-group-item-info:focus, button.list-group-item-info:focus { color: #31708f; background-color: #c4e3f3; } a.list-group-item-info.active, button.list-group-item-info.active, a.list-group-item-info.active:hover, button.list-group-item-info.active:hover, a.list-group-item-info.active:focus, button.list-group-item-info.active:focus { color: #fff; background-color: #31708f; border-color: #31708f; } .list-group-item-warning { color: #8a6d3b; background-color: #fcf8e3; } a.list-group-item-warning, button.list-group-item-warning { color: #8a6d3b; } a.list-group-item-warning .list-group-item-heading, button.list-group-item-warning .list-group-item-heading { color: inherit; } a.list-group-item-warning:hover, button.list-group-item-warning:hover, a.list-group-item-warning:focus, button.list-group-item-warning:focus { color: #8a6d3b; background-color: #faf2cc; } a.list-group-item-warning.active, button.list-group-item-warning.active, a.list-group-item-warning.active:hover, button.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus, button.list-group-item-warning.active:focus { color: #fff; background-color: #8a6d3b; border-color: #8a6d3b; } .list-group-item-danger { color: #a94442; background-color: #f2dede; } a.list-group-item-danger, button.list-group-item-danger { color: #a94442; } a.list-group-item-danger .list-group-item-heading, button.list-group-item-danger .list-group-item-heading { color: inherit; } a.list-group-item-danger:hover, button.list-group-item-danger:hover, a.list-group-item-danger:focus, button.list-group-item-danger:focus { color: #a94442; background-color: #ebcccc; } a.list-group-item-danger.active, button.list-group-item-danger.active, a.list-group-item-danger.active:hover, button.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus, button.list-group-item-danger.active:focus { color: #fff; background-color: #a94442; border-color: #a94442; } .list-group-item-heading { margin-top: 0; margin-bottom: 5px; } .list-group-item-text { margin-bottom: 0; line-height: 1.3; } .panel { margin-bottom: 20px; background-color: #ffffff; border: 1px solid transparent; border-radius: 4px; -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); } .panel-body { padding: 15px; } .panel-heading { padding: 10px 15px; border-bottom: 1px solid transparent; border-top-left-radius: 3px; border-top-right-radius: 3px; } .panel-heading > .dropdown .dropdown-toggle { color: inherit; } .panel-title { margin-top: 0; margin-bottom: 0; font-size: 16px; color: inherit; } .panel-title > a, .panel-title > small, .panel-title > .small, .panel-title > small > a, .panel-title > .small > a { color: inherit; } .panel-footer { padding: 10px 15px; background-color: #f5f5f5; border-top: 1px solid #dddddd; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; } .panel > .list-group, .panel > .panel-collapse > .list-group { margin-bottom: 0; } .panel > .list-group .list-group-item, .panel > .panel-collapse > .list-group .list-group-item { border-width: 1px 0; border-radius: 0; } .panel > .list-group:first-child .list-group-item:first-child, .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { border-top: 0; border-top-left-radius: 3px; border-top-right-radius: 3px; } .panel > .list-group:last-child .list-group-item:last-child, .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { border-bottom: 0; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; } .panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { border-top-left-radius: 0; border-top-right-radius: 0; } .panel-heading + .list-group .list-group-item:first-child { border-top-width: 0; } .list-group + .panel-footer { border-top-width: 0; } .panel > .table, .panel > .table-responsive > .table, .panel > .panel-collapse > .table { margin-bottom: 0; } .panel > .table caption, .panel > .table-responsive > .table caption, .panel > .panel-collapse > .table caption { padding-right: 15px; padding-left: 15px; } .panel > .table:first-child, .panel > .table-responsive:first-child > .table:first-child { border-top-left-radius: 3px; border-top-right-radius: 3px; } .panel > .table:first-child > thead:first-child > tr:first-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, .panel > .table:first-child > tbody:first-child > tr:first-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { border-top-left-radius: 3px; border-top-right-radius: 3px; } .panel > .table:first-child > thead:first-child > tr:first-child td:first-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, .panel > .table:first-child > thead:first-child > tr:first-child th:first-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { border-top-left-radius: 3px; } .panel > .table:first-child > thead:first-child > tr:first-child td:last-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, .panel > .table:first-child > thead:first-child > tr:first-child th:last-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { border-top-right-radius: 3px; } .panel > .table:last-child, .panel > .table-responsive:last-child > .table:last-child { border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; } .panel > .table:last-child > tbody:last-child > tr:last-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, .panel > .table:last-child > tfoot:last-child > tr:last-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; } .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { border-bottom-left-radius: 3px; } .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { border-bottom-right-radius: 3px; } .panel > .panel-body + .table, .panel > .panel-body + .table-responsive, .panel > .table + .panel-body, .panel > .table-responsive + .panel-body { border-top: 1px solid #dddddd; } .panel > .table > tbody:first-child > tr:first-child th, .panel > .table > tbody:first-child > tr:first-child td { border-top: 0; } .panel > .table-bordered, .panel > .table-responsive > .table-bordered { border: 0; } .panel > .table-bordered > thead > tr > th:first-child, .panel > .table-responsive > .table-bordered > thead > tr > th:first-child, .panel > .table-bordered > tbody > tr > th:first-child, .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, .panel > .table-bordered > tfoot > tr > th:first-child, .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, .panel > .table-bordered > thead > tr > td:first-child, .panel > .table-responsive > .table-bordered > thead > tr > td:first-child, .panel > .table-bordered > tbody > tr > td:first-child, .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, .panel > .table-bordered > tfoot > tr > td:first-child, .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { border-left: 0; } .panel > .table-bordered > thead > tr > th:last-child, .panel > .table-responsive > .table-bordered > thead > tr > th:last-child, .panel > .table-bordered > tbody > tr > th:last-child, .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, .panel > .table-bordered > tfoot > tr > th:last-child, .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, .panel > .table-bordered > thead > tr > td:last-child, .panel > .table-responsive > .table-bordered > thead > tr > td:last-child, .panel > .table-bordered > tbody > tr > td:last-child, .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, .panel > .table-bordered > tfoot > tr > td:last-child, .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { border-right: 0; } .panel > .table-bordered > thead > tr:first-child > td, .panel > .table-responsive > .table-bordered > thead > tr:first-child > td, .panel > .table-bordered > tbody > tr:first-child > td, .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, .panel > .table-bordered > thead > tr:first-child > th, .panel > .table-responsive > .table-bordered > thead > tr:first-child > th, .panel > .table-bordered > tbody > tr:first-child > th, .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { border-bottom: 0; } .panel > .table-bordered > tbody > tr:last-child > td, .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, .panel > .table-bordered > tfoot > tr:last-child > td, .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, .panel > .table-bordered > tbody > tr:last-child > th, .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, .panel > .table-bordered > tfoot > tr:last-child > th, .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { border-bottom: 0; } .panel > .table-responsive { margin-bottom: 0; border: 0; } .panel-group { margin-bottom: 20px; } .panel-group .panel { margin-bottom: 0; border-radius: 4px; } .panel-group .panel + .panel { margin-top: 5px; } .panel-group .panel-heading { border-bottom: 0; } .panel-group .panel-heading + .panel-collapse > .panel-body, .panel-group .panel-heading + .panel-collapse > .list-group { border-top: 1px solid #dddddd; } .panel-group .panel-footer { border-top: 0; } .panel-group .panel-footer + .panel-collapse .panel-body { border-bottom: 1px solid #dddddd; } .panel-default { border-color: #dddddd; } .panel-default > .panel-heading { color: #333333; background-color: #f5f5f5; border-color: #dddddd; } .panel-default > .panel-heading + .panel-collapse > .panel-body { border-top-color: #dddddd; } .panel-default > .panel-heading .badge { color: #f5f5f5; background-color: #333333; } .panel-default > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #dddddd; } .panel-primary { border-color: #428bca; } .panel-primary > .panel-heading { color: #ffffff; background-color: #428bca; border-color: #428bca; } .panel-primary > .panel-heading + .panel-collapse > .panel-body { border-top-color: #428bca; } .panel-primary > .panel-heading .badge { color: #428bca; background-color: #ffffff; } .panel-primary > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #428bca; } .panel-success { border-color: #d6e9c6; } .panel-success > .panel-heading { color: #3c763d; background-color: #dff0d8; border-color: #d6e9c6; } .panel-success > .panel-heading + .panel-collapse > .panel-body { border-top-color: #d6e9c6; } .panel-success > .panel-heading .badge { color: #dff0d8; background-color: #3c763d; } .panel-success > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #d6e9c6; } .panel-info { border-color: #bce8f1; } .panel-info > .panel-heading { color: #31708f; background-color: #d9edf7; border-color: #bce8f1; } .panel-info > .panel-heading + .panel-collapse > .panel-body { border-top-color: #bce8f1; } .panel-info > .panel-heading .badge { color: #d9edf7; background-color: #31708f; } .panel-info > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #bce8f1; } .panel-warning { border-color: #faebcc; } .panel-warning > .panel-heading { color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc; } .panel-warning > .panel-heading + .panel-collapse > .panel-body { border-top-color: #faebcc; } .panel-warning > .panel-heading .badge { color: #fcf8e3; background-color: #8a6d3b; } .panel-warning > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #faebcc; } .panel-danger { border-color: #ebccd1; } .panel-danger > .panel-heading { color: #a94442; background-color: #f2dede; border-color: #ebccd1; } .panel-danger > .panel-heading + .panel-collapse > .panel-body { border-top-color: #ebccd1; } .panel-danger > .panel-heading .badge { color: #f2dede; background-color: #a94442; } .panel-danger > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #ebccd1; } .clearfix:before, .clearfix:after, .dl-horizontal dd:before, .dl-horizontal dd:after, .container:before, .container:after, .container-fluid:before, .container-fluid:after, .row:before, .row:after, .form-horizontal .form-group:before, .form-horizontal .form-group:after, .btn-toolbar:before, .btn-toolbar:after, .btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after, .nav:before, .nav:after, .navbar:before, .navbar:after, .navbar-header:before, .navbar-header:after, .navbar-collapse:before, .navbar-collapse:after, .panel-body:before, .panel-body:after { display: table; content: " "; } .clearfix:after, .dl-horizontal dd:after, .container:after, .container-fluid:after, .row:after, .form-horizontal .form-group:after, .btn-toolbar:after, .btn-group-vertical > .btn-group:after, .nav:after, .navbar:after, .navbar-header:after, .navbar-collapse:after, .panel-body:after { clear: both; } .center-block { display: block; margin-right: auto; margin-left: auto; } .pull-right { float: right !important; } .pull-left { float: left !important; } .hide { display: none !important; } .show { display: block !important; } .invisible { visibility: hidden; } .text-hide { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .hidden { display: none !important; } .affix { position: fixed; } @-ms-viewport { width: device-width; } .visible-xs, .visible-sm, .visible-md, .visible-lg { display: none !important; } .visible-xs-block, .visible-xs-inline, .visible-xs-inline-block, .visible-sm-block, .visible-sm-inline, .visible-sm-inline-block, .visible-md-block, .visible-md-inline, .visible-md-inline-block, .visible-lg-block, .visible-lg-inline, .visible-lg-inline-block { display: none !important; } @media (max-width: 767px) { .visible-xs { display: block !important; } table.visible-xs { display: table !important; } tr.visible-xs { display: table-row !important; } th.visible-xs, td.visible-xs { display: table-cell !important; } } @media (max-width: 767px) { .visible-xs-block { display: block !important; } } @media (max-width: 767px) { .visible-xs-inline { display: inline !important; } } @media (max-width: 767px) { .visible-xs-inline-block { display: inline-block !important; } } @media (min-width: 768px) and (max-width: 991px) { .visible-sm { display: block !important; } table.visible-sm { display: table !important; } tr.visible-sm { display: table-row !important; } th.visible-sm, td.visible-sm { display: table-cell !important; } } @media (min-width: 768px) and (max-width: 991px) { .visible-sm-block { display: block !important; } } @media (min-width: 768px) and (max-width: 991px) { .visible-sm-inline { display: inline !important; } } @media (min-width: 768px) and (max-width: 991px) { .visible-sm-inline-block { display: inline-block !important; } } @media (min-width: 992px) and (max-width: 1199px) { .visible-md { display: block !important; } table.visible-md { display: table !important; } tr.visible-md { display: table-row !important; } th.visible-md, td.visible-md { display: table-cell !important; } } @media (min-width: 992px) and (max-width: 1199px) { .visible-md-block { display: block !important; } } @media (min-width: 992px) and (max-width: 1199px) { .visible-md-inline { display: inline !important; } } @media (min-width: 992px) and (max-width: 1199px) { .visible-md-inline-block { display: inline-block !important; } } @media (min-width: 1200px) { .visible-lg { display: block !important; } table.visible-lg { display: table !important; } tr.visible-lg { display: table-row !important; } th.visible-lg, td.visible-lg { display: table-cell !important; } } @media (min-width: 1200px) { .visible-lg-block { display: block !important; } } @media (min-width: 1200px) { .visible-lg-inline { display: inline !important; } } @media (min-width: 1200px) { .visible-lg-inline-block { display: inline-block !important; } } @media (max-width: 767px) { .hidden-xs { display: none !important; } } @media (min-width: 768px) and (max-width: 991px) { .hidden-sm { display: none !important; } } @media (min-width: 992px) and (max-width: 1199px) { .hidden-md { display: none !important; } } @media (min-width: 1200px) { .hidden-lg { display: none !important; } } .visible-print { display: none !important; } @media print { .visible-print { display: block !important; } table.visible-print { display: table !important; } tr.visible-print { display: table-row !important; } th.visible-print, td.visible-print { display: table-cell !important; } } .visible-print-block { display: none !important; } @media print { .visible-print-block { display: block !important; } } .visible-print-inline { display: none !important; } @media print { .visible-print-inline { display: inline !important; } } .visible-print-inline-block { display: none !important; } @media print { .visible-print-inline-block { display: inline-block !important; } } @media print { .hidden-print { display: none !important; } } /*! * Generated using the Bootstrap Customizer (https://getbootstrap.com/docs/3.4/customize/) */ /*! * Bootstrap v3.4.1 (https://getbootstrap.com/) * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ .btn-default, .btn-primary, .btn-success, .btn-info, .btn-warning, .btn-danger { text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); } .btn-default:active, .btn-primary:active, .btn-success:active, .btn-info:active, .btn-warning:active, .btn-danger:active, .btn-default.active, .btn-primary.active, .btn-success.active, .btn-info.active, .btn-warning.active, .btn-danger.active { -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); } .btn-default.disabled, .btn-primary.disabled, .btn-success.disabled, .btn-info.disabled, .btn-warning.disabled, .btn-danger.disabled, .btn-default[disabled], .btn-primary[disabled], .btn-success[disabled], .btn-info[disabled], .btn-warning[disabled], .btn-danger[disabled], fieldset[disabled] .btn-default, fieldset[disabled] .btn-primary, fieldset[disabled] .btn-success, fieldset[disabled] .btn-info, fieldset[disabled] .btn-warning, fieldset[disabled] .btn-danger { -webkit-box-shadow: none; box-shadow: none; } .btn-default .badge, .btn-primary .badge, .btn-success .badge, .btn-info .badge, .btn-warning .badge, .btn-danger .badge { text-shadow: none; } .btn:active, .btn.active { background-image: none; } .btn-default { background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%); background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#e0e0e0)); background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; border-color: #dbdbdb; text-shadow: 0 1px 0 #fff; border-color: #ccc; } .btn-default:hover, .btn-default:focus { background-color: #e0e0e0; background-position: 0 -15px; } .btn-default:active, .btn-default.active { background-color: #e0e0e0; border-color: #dbdbdb; } .btn-default.disabled, .btn-default[disabled], fieldset[disabled] .btn-default, .btn-default.disabled:hover, .btn-default[disabled]:hover, fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, .btn-default.disabled.focus, .btn-default[disabled].focus, fieldset[disabled] .btn-default.focus, .btn-default.disabled:active, .btn-default[disabled]:active, fieldset[disabled] .btn-default:active, .btn-default.disabled.active, .btn-default[disabled].active, fieldset[disabled] .btn-default.active { background-color: #e0e0e0; background-image: none; } .btn-primary { background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%); background-image: -o-linear-gradient(top, #428bca 0%, #2d6ca2 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#2d6ca2)); background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; border-color: #2b669a; } .btn-primary:hover, .btn-primary:focus { background-color: #2d6ca2; background-position: 0 -15px; } .btn-primary:active, .btn-primary.active { background-color: #2d6ca2; border-color: #2b669a; } .btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled.focus, .btn-primary[disabled].focus, fieldset[disabled] .btn-primary.focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active { background-color: #2d6ca2; background-image: none; } .btn-success { background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; border-color: #3e8f3e; } .btn-success:hover, .btn-success:focus { background-color: #419641; background-position: 0 -15px; } .btn-success:active, .btn-success.active { background-color: #419641; border-color: #3e8f3e; } .btn-success.disabled, .btn-success[disabled], fieldset[disabled] .btn-success, .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, .btn-success.disabled.focus, .btn-success[disabled].focus, fieldset[disabled] .btn-success.focus, .btn-success.disabled:active, .btn-success[disabled]:active, fieldset[disabled] .btn-success:active, .btn-success.disabled.active, .btn-success[disabled].active, fieldset[disabled] .btn-success.active { background-color: #419641; background-image: none; } .btn-info { background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; border-color: #28a4c9; } .btn-info:hover, .btn-info:focus { background-color: #2aabd2; background-position: 0 -15px; } .btn-info:active, .btn-info.active { background-color: #2aabd2; border-color: #28a4c9; } .btn-info.disabled, .btn-info[disabled], fieldset[disabled] .btn-info, .btn-info.disabled:hover, .btn-info[disabled]:hover, fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, .btn-info.disabled.focus, .btn-info[disabled].focus, fieldset[disabled] .btn-info.focus, .btn-info.disabled:active, .btn-info[disabled]:active, fieldset[disabled] .btn-info:active, .btn-info.disabled.active, .btn-info[disabled].active, fieldset[disabled] .btn-info.active { background-color: #2aabd2; background-image: none; } .btn-warning { background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; border-color: #e38d13; } .btn-warning:hover, .btn-warning:focus { background-color: #eb9316; background-position: 0 -15px; } .btn-warning:active, .btn-warning.active { background-color: #eb9316; border-color: #e38d13; } .btn-warning.disabled, .btn-warning[disabled], fieldset[disabled] .btn-warning, .btn-warning.disabled:hover, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning:hover, .btn-warning.disabled:focus, .btn-warning[disabled]:focus, fieldset[disabled] .btn-warning:focus, .btn-warning.disabled.focus, .btn-warning[disabled].focus, fieldset[disabled] .btn-warning.focus, .btn-warning.disabled:active, .btn-warning[disabled]:active, fieldset[disabled] .btn-warning:active, .btn-warning.disabled.active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning.active { background-color: #eb9316; background-image: none; } .btn-danger { background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; border-color: #b92c28; } .btn-danger:hover, .btn-danger:focus { background-color: #c12e2a; background-position: 0 -15px; } .btn-danger:active, .btn-danger.active { background-color: #c12e2a; border-color: #b92c28; } .btn-danger.disabled, .btn-danger[disabled], fieldset[disabled] .btn-danger, .btn-danger.disabled:hover, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger:hover, .btn-danger.disabled:focus, .btn-danger[disabled]:focus, fieldset[disabled] .btn-danger:focus, .btn-danger.disabled.focus, .btn-danger[disabled].focus, fieldset[disabled] .btn-danger.focus, .btn-danger.disabled:active, .btn-danger[disabled]:active, fieldset[disabled] .btn-danger:active, .btn-danger.disabled.active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger.active { background-color: #c12e2a; background-image: none; } .thumbnail, .img-thumbnail { -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); } .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); background-repeat: repeat-x; background-color: #e8e8e8; } .dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd)); background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); background-repeat: repeat-x; background-color: #357ebd; } .navbar-default { background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f8f8f8)); background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); border-radius: 4px; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); } .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .active > a { background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); background-repeat: repeat-x; -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); } .navbar-brand, .navbar-nav > li > a { text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); } .navbar-inverse { background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%); background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222222)); background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); border-radius: 4px; } .navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .active > a { background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); background-repeat: repeat-x; -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); } .navbar-inverse .navbar-brand, .navbar-inverse .navbar-nav > li > a { text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); } .navbar-static-top, .navbar-fixed-top, .navbar-fixed-bottom { border-radius: 0; } @media (max-width: 767px) { .navbar .navbar-nav .open .dropdown-menu > .active > a, .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { color: #fff; background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd)); background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); background-repeat: repeat-x; } } .alert { text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2); -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); } .alert-success { background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); background-repeat: repeat-x; border-color: #b2dba1; } .alert-info { background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); background-repeat: repeat-x; border-color: #9acfea; } .alert-warning { background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); background-repeat: repeat-x; border-color: #f5e79e; } .alert-danger { background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); background-repeat: repeat-x; border-color: #dca7a7; } .progress { background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); background-repeat: repeat-x; } .progress-bar { background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%); background-image: -o-linear-gradient(top, #428bca 0%, #3071a9 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3071a9)); background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); background-repeat: repeat-x; } .progress-bar-success { background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); background-repeat: repeat-x; } .progress-bar-info { background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); background-repeat: repeat-x; } .progress-bar-warning { background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); background-repeat: repeat-x; } .progress-bar-danger { background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); background-repeat: repeat-x; } .progress-bar-striped { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } .list-group { border-radius: 4px; -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); } .list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus { text-shadow: 0 -1px 0 #3071a9; background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%); background-image: -o-linear-gradient(top, #428bca 0%, #3278b3 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3278b3)); background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); background-repeat: repeat-x; border-color: #3278b3; } .list-group-item.active .badge, .list-group-item.active:hover .badge, .list-group-item.active:focus .badge { text-shadow: none; } .panel { -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); } .panel-default > .panel-heading { background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); background-repeat: repeat-x; } .panel-primary > .panel-heading { background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd)); background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); background-repeat: repeat-x; } .panel-success > .panel-heading { background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); background-repeat: repeat-x; } .panel-info > .panel-heading { background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); background-repeat: repeat-x; } .panel-warning > .panel-heading { background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); background-repeat: repeat-x; } .panel-danger > .panel-heading { background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); background-repeat: repeat-x; } .well { background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); background-repeat: repeat-x; border-color: #dcdcdc; -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); } /*! * Generated using the Bootstrap Customizer (https://getbootstrap.com/docs/3.4/customize/) */ /*! * Bootstrap v3.4.1 (https://getbootstrap.com/) * Copyright 2011-2020 Twitter, Inc. * Licensed under the MIT license */ if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(t){"use strict";var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(t){"use strict";function e(e){var i,s=e.attr("data-target")||(i=e.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,"");return t(document).find(s)}function i(e){return this.each(function(){var i=t(this),n=i.data("bs.collapse"),a=t.extend({},s.DEFAULTS,i.data(),"object"==typeof e&&e);!n&&a.toggle&&/show|hide/.test(e)&&(a.toggle=!1),n||i.data("bs.collapse",n=new s(this,a)),"string"==typeof e&&n[e]()})}var s=function(e,i){this.$element=t(e),this.options=t.extend({},s.DEFAULTS,i),this.$trigger=t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};s.VERSION="3.4.1",s.TRANSITION_DURATION=350,s.DEFAULTS={toggle:!0},s.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},s.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,n=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(n&&n.length&&(e=n.data("bs.collapse"),e&&e.transitioning))){var a=t.Event("show.bs.collapse");if(this.$element.trigger(a),!a.isDefaultPrevented()){n&&n.length&&(i.call(n,"hide"),e||n.data("bs.collapse",null));var o=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[o](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var r=function(){this.$element.removeClass("collapsing").addClass("collapse in")[o](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return r.call(this);var l=t.camelCase(["scroll",o].join("-"));this.$element.one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(s.TRANSITION_DURATION)[o](this.$element[0][l])}}}},s.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var i=this.dimension();this.$element[i](this.$element[i]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var n=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return t.support.transition?void this.$element[i](0).one("bsTransitionEnd",t.proxy(n,this)).emulateTransitionEnd(s.TRANSITION_DURATION):n.call(this)}}},s.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},s.prototype.getParent=function(){return t(document).find(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(i,s){var n=t(s);this.addAriaAndCollapsedClass(e(n),n)},this)).end()},s.prototype.addAriaAndCollapsedClass=function(t,e){var i=t.hasClass("in");t.attr("aria-expanded",i),e.toggleClass("collapsed",!i).attr("aria-expanded",i)};var n=t.fn.collapse;t.fn.collapse=i,t.fn.collapse.Constructor=s,t.fn.collapse.noConflict=function(){return t.fn.collapse=n,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(s){var n=t(this);n.attr("data-target")||s.preventDefault();var a=e(n),o=a.data("bs.collapse"),r=o?"toggle":n.data();i.call(a,r)})}(jQuery);/*! jQuery v3.5.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/Tween,-effects/animatedSelector | (c) JS Foundation and other contributors | jquery.org/license */ !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(g,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,v=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,y=n.hasOwnProperty,a=y.toString,l=a.call(Object),m={},b=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},w=g.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function C(e,t,n){var r,i,o=(n=n||w).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function T(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/Tween,-effects/animatedSelector",E=function(e,t){return new E.fn.init(e,t)};function d(e){var t=!!e&&"length"in e&&e.length,n=T(e);return!b(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+R+")"+R+"*"),U=new RegExp(R+"|>"),V=new RegExp(W),X=new RegExp("^"+B+"$"),Q={ID:new RegExp("^#("+B+")"),CLASS:new RegExp("^\\.("+B+")"),TAG:new RegExp("^("+B+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+R+"*(even|odd|(([+-]|)(\\d*)n|)"+R+"*(?:([+-]|)"+R+"*(\\d+)|))"+R+"*\\)|)","i"),bool:new RegExp("^(?:"+I+")$","i"),needsContext:new RegExp("^"+R+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+R+"*((?:-\\d)?\\d*)"+R+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,G=/^(?:input|select|textarea|button)$/i,K=/^h\d$/i,J=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+R+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){C()},ae=xe(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{O.apply(t=P.call(d.childNodes),d.childNodes),t[d.childNodes.length].nodeType}catch(e){O={apply:t.length?function(e,t){q.apply(e,P.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,d=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==d&&9!==d&&11!==d)return n;if(!r&&(C(e),e=e||T,E)){if(11!==d&&(u=Z.exec(t)))if(i=u[1]){if(9===d){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return O.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&p.getElementsByClassName&&e.getElementsByClassName)return O.apply(n,e.getElementsByClassName(i)),n}if(p.qsa&&!k[t+" "]&&(!v||!v.test(t))&&(1!==d||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===d&&(U.test(t)||_.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&p.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=A)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+be(l[o]);c=l.join(",")}try{return O.apply(n,f.querySelectorAll(c)),n}catch(e){k(t,!0)}finally{s===A&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>x.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[A]=!0,e}function ce(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)x.attrHandle[n[r]]=t}function de(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function pe(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in p=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},C=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:d;return r!=T&&9===r.nodeType&&r.documentElement&&(a=(T=r).documentElement,E=!i(T),d!=T&&(n=T.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),p.scope=ce(function(e){return a.appendChild(e).appendChild(T.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),p.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),p.getElementsByTagName=ce(function(e){return e.appendChild(T.createComment("")),!e.getElementsByTagName("*").length}),p.getElementsByClassName=J.test(T.getElementsByClassName),p.getById=ce(function(e){return a.appendChild(e).id=A,!T.getElementsByName||!T.getElementsByName(A).length}),p.getById?(x.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},x.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(x.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},x.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),x.find.TAG=p.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):p.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},x.find.CLASS=p.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(p.qsa=J.test(T.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+R+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+R+"*(?:value|"+I+")"),e.querySelectorAll("[id~="+A+"-]").length||v.push("~="),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+R+"*name"+R+"*="+R+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+A+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=T.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+R+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(p.matchesSelector=J.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){p.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",W)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=J.test(a.compareDocumentPosition),y=t||J.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!p.sortDetached&&t.compareDocumentPosition(e)===n?e==T||e.ownerDocument==d&&y(d,e)?-1:t==T||t.ownerDocument==d&&y(d,t)?1:u?H(u,e)-H(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==T?-1:t==T?1:i?-1:o?1:u?H(u,e)-H(u,t):0;if(i===o)return de(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?de(a[r],s[r]):a[r]==d?-1:s[r]==d?1:0}),T},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(C(e),p.matchesSelector&&E&&!k[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||p.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){k(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&V.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+R+")"+e+"("+R+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return b(n)?E.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?E.grep(e,function(e){return e===n!==r}):"string"!=typeof n?E.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||L,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:j.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:w,!0)),k.test(r[1])&&E.isPlainObject(t))for(r in t)b(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=w.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):b(e)?void 0!==n.ready?n.ready(e):e(E):E.makeArray(e,this)}).prototype=E.fn,L=E(w);var q=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,pe=/^$|^module$|\/(?:java|ecma)script/i;le=w.createDocumentFragment().appendChild(w.createElement("div")),(ce=w.createElement("input")).setAttribute("type","radio"),ce.setAttribute("checked","checked"),ce.setAttribute("name","t"),le.appendChild(ce),m.checkClone=le.cloneNode(!0).cloneNode(!0).lastChild.checked,le.innerHTML="",m.noCloneChecked=!!le.cloneNode(!0).lastChild.defaultValue,le.innerHTML="",m.option=!!le.lastChild;var he={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ge(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&S(e,t)?E.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n",""]);var ye=/<|&#?\w+;/;function me(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),d=[],p=0,h=e.length;p\s*$/g;function Le(e,t){return S(e,"table")&&S(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function je(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n
",2===ft.childNodes.length),E.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(m.createHTMLDocument?((r=(t=w.implementation.createHTMLDocument("")).createElement("base")).href=w.location.href,t.head.appendChild(r)):t=w),o=!n&&[],(i=k.exec(e))?[t.createElement(i[1])]:(i=me([e],t,o),o&&o.length&&E(o).remove(),E.merge([],i.childNodes)));var r,i,o},E.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=E.css(e,"position"),c=E(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=E.css(e,"top"),u=E.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),b(t)&&(t=t.call(e,n,E.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},E.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){E.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===E.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===E.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=E(e).offset()).top+=E.css(e,"borderTopWidth",!0),i.left+=E.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-E.css(r,"marginTop",!0),left:t.left-i.left-E.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===E.css(e,"position"))e=e.offsetParent;return e||re})}}),E.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;E.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),E.each(["top","left"],function(e,n){E.cssHooks[n]=Fe(m.pixelPosition,function(e,t){if(t)return t=We(e,n),Ie.test(t)?E(e).position()[n]+"px":t})}),E.each({Height:"height",Width:"width"},function(a,s){E.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){E.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?E.css(e,t,i):E.style(e,t,n,i)},s,n?e:void 0,n)}})}),E.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),E.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){E.fn[n]=function(e,t){return 0=c?(clearTimeout(r),r=null,o=a,s=t.apply(n,i)):r||(r=setTimeout(u,c)),s}},noop:function(){}}}(),n="0.10.5",i=function(){"use strict";function t(t){return t=e.toStr(t),t?t.split(/\s+/):[]}function n(t){return t=e.toStr(t),t?t.split(/\W+/):[]}function i(t){return function(){var n=[].slice.call(arguments,0);return function(i){var r=[];return e.each(n,function(n){r=r.concat(t(e.toStr(i[n])))}),r}}}return{nonword:n,whitespace:t,obj:{nonword:i(n),whitespace:i(t)}}}(),r=function(){"use strict";function n(n){this.maxSize=e.isNumber(n)?n:100,this.reset(),this.maxSize<=0&&(this.set=this.get=t.noop)}function i(){this.head=this.tail=null}function r(t,e){this.key=t,this.val=e,this.prev=this.next=null}return e.mixin(n.prototype,{set:function(t,e){var n,i=this.list.tail;this.size>=this.maxSize&&(this.list.remove(i),delete this.hash[i.key]),(n=this.hash[t])?(n.val=e,this.list.moveToFront(n)):(n=new r(t,e),this.list.add(n),this.hash[t]=n,this.size++)},get:function(t){var e=this.hash[t];return e?(this.list.moveToFront(e),e.val):void 0},reset:function(){this.size=0,this.hash={},this.list=new i}}),e.mixin(i.prototype,{add:function(t){this.head&&(t.next=this.head,this.head.prev=t),this.head=t,this.tail=this.tail||t},remove:function(t){t.prev?t.prev.next=t.next:this.head=t.next,t.next?t.next.prev=t.prev:this.tail=t.prev},moveToFront:function(t){this.remove(t),this.add(t)}}),n}(),s=function(){"use strict";function t(t){this.prefix=["__",t,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=new RegExp("^"+e.escapeRegExChars(this.prefix))}function n(){return(new Date).getTime()}function i(t){return JSON.stringify(e.isUndefined(t)?null:t)}function r(t){return JSON.parse(t)}var s,o;try{s=window.localStorage,s.setItem("~~~","!"),s.removeItem("~~~")}catch(u){s=null}return o=s&&window.JSON?{_prefix:function(t){return this.prefix+t},_ttlKey:function(t){return this._prefix(t)+this.ttlKey},get:function(t){return this.isExpired(t)&&this.remove(t),r(s.getItem(this._prefix(t)))},set:function(t,r,o){return e.isNumber(o)?s.setItem(this._ttlKey(t),i(n()+o)):s.removeItem(this._ttlKey(t)),s.setItem(this._prefix(t),i(r))},remove:function(t){return s.removeItem(this._ttlKey(t)),s.removeItem(this._prefix(t)),this},clear:function(){var t,e,n=[],i=s.length;for(t=0;i>t;t++)(e=s.key(t)).match(this.keyMatcher)&&n.push(e.replace(this.keyMatcher,""));for(t=n.length;t--;)this.remove(n[t]);return this},isExpired:function(t){var i=r(s.getItem(this._ttlKey(t)));return e.isNumber(i)&&n()>i?!0:!1}}:{get:e.noop,set:e.noop,remove:e.noop,clear:e.noop,isExpired:e.noop},e.mixin(t.prototype,o),t}(),o=function(){"use strict";function n(e){e=e||{},this.cancelled=!1,this.lastUrl=null,this._send=e.transport?i(e.transport):t.ajax,this._get=e.rateLimiter?e.rateLimiter(this._get):this._get,this._cache=e.cache===!1?new r(0):a}function i(n){return function(i,r){function s(t){e.defer(function(){u.resolve(t)})}function o(t){e.defer(function(){u.reject(t)})}var u=t.Deferred();return n(i,r,s,o),u}}var s=0,o={},u=6,a=new r(10);return n.setMaxPendingRequests=function(t){u=t},n.resetCache=function(){a.reset()},e.mixin(n.prototype,{_get:function(t,e,n){function i(e){n&&n(null,e),h._cache.set(t,e)}function r(){n&&n(!0)}function a(){s--,delete o[t],h.onDeckRequestArgs&&(h._get.apply(h,h.onDeckRequestArgs),h.onDeckRequestArgs=null)}var c,h=this;this.cancelled||t!==this.lastUrl||((c=o[t])?c.done(i).fail(r):u>s?(s++,o[t]=this._send(t,e).done(i).fail(r).always(a)):this.onDeckRequestArgs=[].slice.call(arguments,0))},get:function(t,n,i){var r;return e.isFunction(n)&&(i=n,n={}),this.cancelled=!1,this.lastUrl=t,(r=this._cache.get(t))?e.defer(function(){i&&i(null,r)}):this._get(t,n,i),!!r},cancel:function(){this.cancelled=!0}}),n}(),u=function(){"use strict";function n(e){e=e||{},e.datumTokenizer&&e.queryTokenizer||t.error("datumTokenizer and queryTokenizer are both required"),this.datumTokenizer=e.datumTokenizer,this.queryTokenizer=e.queryTokenizer,this.reset()}function i(t){return t=e.filter(t,function(t){return!!t}),t=e.map(t,function(t){return t.toLowerCase()})}function r(){return{ids:[],children:{}}}function s(t){for(var e={},n=[],i=0,r=t.length;r>i;i++)e[t[i]]||(e[t[i]]=!0,n.push(t[i]));return n}function o(t,e){function n(t,e){return t-e}var i=0,r=0,s=[];t=t.sort(n),e=e.sort(n);for(var o=t.length,u=e.length;o>i&&u>r;)t[i]e[r]?r++:(s.push(t[i]),i++,r++);return s}return e.mixin(n.prototype,{bootstrap:function(t){this.datums=t.datums,this.trie=t.trie},add:function(t){var n=this;t=e.isArray(t)?t:[t],e.each(t,function(t){var s,o;s=n.datums.push(t)-1,o=i(n.datumTokenizer(t)),e.each(o,function(t){var e,i,o;for(e=n.trie,i=t.split("");o=i.shift();)e=e.children[o]||(e.children[o]=r()),e.ids.push(s)})})},get:function(t){var n,r,u=this;return n=i(this.queryTokenizer(t)),e.each(n,function(t){var e,n,i,s;if(r&&0===r.length)return!1;for(e=u.trie,n=t.split("");e&&(i=n.shift());)e=e.children[i];return e&&0===n.length?(s=e.ids.slice(0),void(r=r?o(r,s):s)):(r=[],!1)}),r?e.map(s(r),function(t){return u.datums[t]}):[]},reset:function(){this.datums=[],this.trie=r()},serialize:function(){return{datums:this.datums,trie:this.trie}}}),n}(),a=function(){"use strict";function i(t){return t.local||null}function r(i){var r,s;return s={url:null,thumbprint:"",ttl:864e5,filter:null,ajax:{}},(r=i.prefetch||null)&&(r=e.isString(r)?{url:r}:r,r=e.mixin(s,r),r.thumbprint=n+r.thumbprint,r.ajax.type=r.ajax.type||"GET",r.ajax.dataType=r.ajax.dataType||"json",!r.url&&t.error("prefetch requires url to be set")),r}function s(n){function i(t){return function(n){return e.debounce(n,t)}}function r(t){return function(n){return e.throttle(n,t)}}var s,o;return o={url:null,cache:!0,wildcard:"%QUERY",replace:null,rateLimitBy:"debounce",rateLimitWait:300,send:null,filter:null,ajax:{}},(s=n.remote||null)&&(s=e.isString(s)?{url:s}:s,s=e.mixin(o,s),s.rateLimiter=/^throttle$/i.test(s.rateLimitBy)?r(s.rateLimitWait):i(s.rateLimitWait),s.ajax.type=s.ajax.type||"GET",s.ajax.dataType=s.ajax.dataType||"json",delete s.rateLimitBy,delete s.rateLimitWait,!s.url&&t.error("remote requires url to be set")),s}return{local:i,prefetch:r,remote:s}}();!function(n){"use strict";function r(e){e&&(e.local||e.prefetch||e.remote)||t.error("one of local, prefetch, or remote is required"),this.limit=e.limit||5,this.sorter=c(e.sorter),this.dupDetector=e.dupDetector||h,this.local=a.local(e),this.prefetch=a.prefetch(e),this.remote=a.remote(e),this.cacheKey=this.prefetch?this.prefetch.cacheKey||this.prefetch.url:null,this.index=new u({datumTokenizer:e.datumTokenizer,queryTokenizer:e.queryTokenizer}),this.storage=this.cacheKey?new s(this.cacheKey):null}function c(t){function n(e){return e.sort(t)}function i(t){return t}return e.isFunction(t)?n:i}function h(){return!1}var l,d;return l=n.Bloodhound,d={data:"data",protocol:"protocol",thumbprint:"thumbprint"},n.Bloodhound=r,r.noConflict=function(){return n.Bloodhound=l,r},r.tokenizers=i,e.mixin(r.prototype,{_loadPrefetch:function(e){function n(t){s.clear(),s.add(e.filter?e.filter(t):t),s._saveToStorage(s.index.serialize(),e.thumbprint,e.ttl)}var i,r,s=this;return(i=this._readFromStorage(e.thumbprint))?(this.index.bootstrap(i),r=t.Deferred().resolve()):r=t.ajax(e.url,e.ajax).done(n),r},_getFromRemote:function(t,e){function n(t,n){e(t?[]:s.remote.filter?s.remote.filter(n):n)}var i,r,s=this;if(this.transport)return t=t||"",r=encodeURIComponent(t),i=this.remote.replace?this.remote.replace(this.remote.url,t):this.remote.url.replace(this.remote.wildcard,r),this.transport.get(i,this.remote.ajax,n)},_cancelLastRemoteRequest:function(){this.transport&&this.transport.cancel()},_saveToStorage:function(t,e,n){this.storage&&(this.storage.set(d.data,t,n),this.storage.set(d.protocol,location.protocol,n),this.storage.set(d.thumbprint,e,n))},_readFromStorage:function(t){var e,n={};return this.storage&&(n.data=this.storage.get(d.data),n.protocol=this.storage.get(d.protocol),n.thumbprint=this.storage.get(d.thumbprint)),e=n.thumbprint!==t||n.protocol!==location.protocol,n.data&&!e?n.data:null},_initialize:function(){function n(){r.add(e.isFunction(s)?s():s)}var i,r=this,s=this.local;return i=this.prefetch?this._loadPrefetch(this.prefetch):t.Deferred().resolve(),s&&i.done(n),this.transport=this.remote?new o(this.remote):null,this.initPromise=i.promise()},initialize:function(t){return!this.initPromise||t?this._initialize():this.initPromise},add:function(t){this.index.add(t)},get:function(t,n){function i(t){var i=s.slice(0);e.each(t,function(t){var n;return n=e.some(i,function(e){return r.dupDetector(t,e)}),!n&&i.push(t),i.length0||!this.transport)&&n&&n(s)},clear:function(){this.index.reset()},clearPrefetchCache:function(){this.storage&&this.storage.clear()},clearRemoteCache:function(){this.transport&&o.resetCache()},ttAdapter:function(){return e.bind(this.get,this)}}),r}(this);var c=function(){return{wrapper:'',dropdown:'',dataset:'
',suggestions:'',suggestion:'
'}}(),h=function(){"use strict";var t={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:" 0"}};return e.isMsie()&&e.mixin(t.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),e.isMsie()&&e.isMsie()<=7&&e.mixin(t.input,{marginTop:"-1px"}),t}(),l=function(){"use strict";function n(e){e&&e.el||t.error("EventBus initialized without el"),this.$el=t(e.el)}var i="typeahead:";return e.mixin(n.prototype,{trigger:function(t){var e=[].slice.call(arguments,1);this.$el.trigger(i+t,e)}}),n}(),d=function(){"use strict";function t(t,e,n,i){var r;if(!n)return this;for(e=e.split(a),n=i?u(n,i):n,this._callbacks=this._callbacks||{};r=e.shift();)this._callbacks[r]=this._callbacks[r]||{sync:[],async:[]},this._callbacks[r][t].push(n);return this}function e(e,n,i){return t.call(this,"async",e,n,i)}function n(e,n,i){return t.call(this,"sync",e,n,i)}function i(t){var e;if(!this._callbacks)return this;for(t=t.split(a);e=t.shift();)delete this._callbacks[e];return this}function r(t){var e,n,i,r,o;if(!this._callbacks)return this;for(t=t.split(a),i=[].slice.call(arguments,1);(e=t.shift())&&(n=this._callbacks[e]);)r=s(n.sync,this,[e].concat(i)),o=s(n.async,this,[e].concat(i)),r()&&c(o);return this}function s(t,e,n){function i(){for(var i,r=0,s=t.length;!i&&s>r;r+=1)i=t[r].apply(e,n)===!1;return!i}return i}function o(){var t;return t=window.setImmediate?function(t){setImmediate(function(){t()})}:function(t){setTimeout(function(){t()},0)}}function u(t,e){return t.bind?t.bind(e):function(){t.apply(e,[].slice.call(arguments,0))}}var a=/\s+/,c=o();return{onSync:n,onAsync:e,off:i,trigger:r}}(),p=function(t){"use strict";function n(t,n,i){for(var r,s=[],o=0,u=t.length;u>o;o++)s.push(e.escapeRegExChars(t[o]));return r=i?"\\b("+s.join("|")+")\\b":"("+s.join("|")+")",n?new RegExp(r):new RegExp(r,"i")}var i={node:null,pattern:null,tagName:"strong",className:null,wordsOnly:!1,caseSensitive:!1};return function(r){function s(e){var n,i,s;return(n=u.exec(e.data))&&(s=t.createElement(r.tagName),r.className&&(s.className=r.className),i=e.splitText(n.index),i.splitText(n[0].length),s.appendChild(i.cloneNode(!0)),e.parentNode.replaceChild(s,i)),!!n}function o(t,e){for(var n,i=3,r=0;r